/[cvs]/nfo/php/libs/org.netfrag.flib/Tracker/User.php
ViewVC logotype

Annotation of /nfo/php/libs/org.netfrag.flib/Tracker/User.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.16 - (hide annotations)
Thu May 6 13:02:09 2004 UTC (20 years, 3 months ago) by jonen
Branch: MAIN
Changes since 1.15: +91 -12 lines
+ added/modified functions related to User-Messages

1 joko 1.1 <?
2 joko 1.13 /**
3     * This file contains the Tracker::User module.
4     *
5     * @author Andreas Motl <andreas.motl@ilo.de>
6     * @package org.netfrag.flib
7     * @name Tracker::User
8     *
9     */
10    
11    
12 joko 1.1 // -----------------------------------------------------------------------------
13 jonen 1.16 // $Id: User.php,v 1.15 2004/03/11 21:04:48 jonen Exp $
14 joko 1.1 // -----------------------------------------------------------------------------
15 joko 1.2 // $Log: User.php,v $
16 jonen 1.16 // Revision 1.15 2004/03/11 21:04:48 jonen
17     // +changed backend-functions to only get/save User ONLY not SOME object (security!)
18     //
19 jonen 1.15 // Revision 1.14 2003/07/02 11:02:09 joko
20     // + fixed bug with create/_create
21     //
22 joko 1.14 // Revision 1.13 2003/04/04 02:15:09 joko
23     // renamed method of helper object
24     //
25 joko 1.13 // Revision 1.12 2003/03/03 21:20:47 joko
26     // mungled the namespaces
27     //
28 joko 1.12 // Revision 1.11 2003/02/14 14:22:06 joko
29     // + always (re-)tries to connect
30     //
31 joko 1.11 // Revision 1.10 2003/02/13 21:58:39 joko
32     // + caching mechanisms more configurable now
33     //
34 joko 1.10 // Revision 1.9 2003/02/09 17:46:26 joko
35 joko 1.12 // + now utilizing DesignPattern::RemoteProxy and Data::Deep
36 joko 1.10 //
37 joko 1.9 // Revision 1.8 2002/12/28 01:16:42 jonen
38     // + added clear of $this->state[autologout] at 'hadTimeout()'
39     //
40 jonen 1.8 // Revision 1.7 2002/12/23 11:32:28 jonen
41     // + added inserting of uservars on '_create' to frontend db(needed to login user after create!)
42     // + added hard link to page 'pub/register', TODO: move this out here
43     //
44 jonen 1.7 // Revision 1.6 2002/12/18 22:46:06 jonen
45     // + added function 'getUserGuid()'
46     // (returns user's 'guid' read from database at function 'login()' (now))
47     // + function '_loadData()' loads user remote now via 'getUserGuid()'
48     //
49 jonen 1.6 // Revision 1.5 2002/12/12 21:34:32 joko
50     // + fix in 'function update': invalidate data only if it's not for caching purposes
51     //
52 joko 1.5 // Revision 1.4 2002/12/06 04:10:28 joko
53     // + replaced 'xyzCache' through 'xyzProxy'
54     //
55 joko 1.4 // Revision 1.3 2002/12/04 07:42:54 jonen
56     // + changes according to backend schema change
57     //
58 jonen 1.3 // Revision 1.2 2002/12/03 16:47:22 joko
59     // - function preLogout()
60     // + function preLogout($autologout = 0)
61     // + function hadTimeout()
62     //
63 joko 1.2 // Revision 1.1 2002/11/12 05:42:31 joko
64     // + initial checkin
65     //
66 joko 1.1 // Revision 1.7 2002/10/29 19:09:53 cvsjoko
67     // + function getLastLogin
68     // + function getUserId
69     //
70     // Revision 1.6 2002/10/25 11:18:10 cvsmax
71     // - removed old functions ('logout', 'create',...)
72     // + add function preLogout() # save user session and unset (session) state
73     //
74     // Revision 1.5 2002/10/22 09:47:48 cvsmax
75     // + add new
76     // - function create() # create & save new user-object in session
77     // - function _create($attr) # create & save new user-object in backend
78     //
79     // - purged some very old functions
80     //
81     // Revision 1.4 2002/10/17 03:12:17 cvsmax
82     // -(+) cleaned code from old structure
83     // + function getPostVar($fieldname)
84     //
85     // Revision 1.3 2002/10/10 02:41:57 cvsjoko
86     // + fixed typo
87     //
88     // Revision 1.2 2002/10/10 02:34:33 cvsjoko
89     // + new level of data-caching (session and persistant)
90     // + function _save()
91     // + function save()
92     // + handling (storing/caching) of POSTed data
93     // + function getPostVars()
94     // + function setPostVars()
95     // + handy utils
96     // + function doDataReady() cares for ready data to continue working
97     // + function refresh() clears underlying data container and makes data "unready"
98     //
99     // Revision 1.1 2002/10/09 00:40:13 cvsjoko
100     // + new
101     //
102     //
103     // -----------------------------------------------------------------------------
104    
105 joko 1.13
106     /**
107     * This is the User class.
108     *
109     * @author Andreas Motl <andreas.motl@ilo.de>
110     * @package org.netfrag.flib
111     * @name Tracker::User
112     *
113     */
114 joko 1.1 class User {
115    
116     var $state;
117     var $meta;
118    
119     var $pObject;
120     var $data;
121    
122    
123     function User() {
124    
125     // attention:
126     // this code is only run when your session is _really_ fresh
127     if (session_register_safe('userstate')) {
128     }
129    
130     $this->_loadState();
131     $this->meta[logontoken] = 'k&%g2';
132    
133     // print dumpVar($_SESSION);
134    
135     }
136    
137     function _loadState() {
138     global $userstate;
139     $this->state = $userstate;
140     }
141     function _saveState() {
142     global $userstate;
143     $userstate = $this->state;
144     }
145    
146    
147     function _loadData() {
148 joko 1.9 $this->meta[data_ready] = 1;
149     //$this->pObject = new ProxyObject($this->getUserGuid(), array( remote => 1, classname => "NetPerson", guid => 1) );
150     $rpcinfo = $this->site->configuration->get("rpcinfo");
151 jonen 1.15 //$this->pObject = mkObject('DesignPattern::RemoteProxy', $this->getUserGuid(), array( remote => 1, classname => "NetPerson", guid => 1, rpcinfo => $rpcinfo, cache => array( db => 1, session => 1 ), connect => 1 ) );
152     $this->pObject = mkObject('DesignPattern::RemoteProxy', $this->getUserGuid(), array( key => 1, command => 'getUser', query => $this->getUserGuid(), remote => 1, rpcinfo => $rpcinfo, cache => array( db => 1, session => 1 ), connect => 1 ) );
153     if ($this->getUserGuid()) {
154 joko 1.13 $this->data = $this->pObject->getResult();
155 joko 1.1 }
156     }
157    
158     function _saveData($newRawData) {
159    
160 jonen 1.16 //print "newRawData: " . Dumper($newRawData) . "<br>";
161 joko 1.1 foreach ($newRawData as $key => $val) {
162     //print "$key => $val<br>";
163     $this->set($key, $val);
164     }
165    
166     $this->_save("cache");
167    
168 joko 1.4 //$this->pObject->flushProxy(); // done in "pObject->save"
169 joko 1.1
170     }
171    
172     function _save($type = '') {
173 joko 1.5 //print Dumper($this->data);
174 jonen 1.15 //$this->pObject->save($this->data, $type);
175     // new of 2004-03-08: don't use generic 'saveObject'!!
176     // for security reasons disabled at ClientBackend!!!
177     if($type == 'commit') {
178     $args = array( 'guid' => $this->data[guid], 'data' => $this->data );
179     $this->pObject->backend->send('saveUser', $args, array( utf8 => 1) );
180 jonen 1.16 $this->_save_local();
181     }
182 joko 1.5 // invalidate data only if it's not for caching purposes
183     if ($type != 'cache') {
184     $this->meta[data_ready] = 0;
185     }
186 joko 1.1 }
187 jonen 1.16
188     function _save_local() {
189     connectdb();
190     $username = $this->get('userData.username');
191     $password = $this->get('userData.password');
192     $sql = "UPDATE td_users SET pass='$password' WHERE uname='$username'";
193     $res = send_sql($sql);
194     }
195 joko 1.1
196     function save() {
197     $this->_doDataReady();
198     $this->_save("commit");
199     }
200    
201     function create() {
202     $this->_save();
203 joko 1.14 $attr = $this->pObject->getResult();
204 joko 1.1 //print DumpVar($attr);
205     $this->_create($attr);
206     }
207    
208 jonen 1.16 function createGuest() {
209     if($this->isLoggedOn) { return; }
210     //$this->_save();
211     //$attr = $this->pObject->getResult();
212     //print DumpVar($attr);
213     $data = $this->_createGuest();
214     return $data;
215     }
216    
217 joko 1.1 function _create($result) {
218 joko 1.14 global $site;
219 joko 1.1 //print "saving to backend: " . dumpVar($result) . "<br>";
220     $response = $this->pObject->backend->send('createUser', array('data' => $result) );
221     $objectId = $response[oid];
222 jonen 1.7 if($objectId) {
223     connectdb();
224     $guid = $response[guid];
225     $username = $this->get('userData.username');
226     $password = $this->get('userData.password');
227     $sql = "INSERT into td_users VALUES ( '$objectId', '$guid', '', '$username', '$password','' )";
228     $res = send_sql($sql);
229     }
230     else {
231     // TODO: handle this with a generic rpc-debug/pending function
232     $site->session->set('register_error', 'rpc_error');
233     $site->redirect( getlink('/pub/register/') );
234     }
235 joko 1.1 //$this->_init($objectId);
236     }
237    
238 jonen 1.16 function _createGuest() {
239     global $site;
240     //print "saving to backend: " . dumpVar($result) . "<br>";
241     if(!$this->pObject) {
242     $rpcinfo = $this->site->configuration->get("rpcinfo");
243     $pObject = mkObject('DesignPattern::RemoteProxy', 'guest', array( key => 1, command => 'createGuestUser', '', remote => 1, rpcinfo => $rpcinfo, cache => array( db => 1, session => 1 ), connect => 1 ) );
244     $response = $pObject->getResult();
245     } else {
246     $response = $this->pObject->backend->send('createGuestUser');
247     }
248     //print "response: " . Dumper($response) . "<br>";
249     $objectId = $response[oid];
250     if($objectId) {
251     return $response;
252     }
253     else {
254     // TODO: handle this with a generic rpc-debug/pending function
255     $site->session->set('login_error', 'rpc_error');
256     $site->redirect( getlink('/pub/login/') );
257     }
258     //$this->_init($objectId);
259     }
260    
261 joko 1.1 function get($attr) {
262     $this->_doDataReady();
263 joko 1.9 $deep = new Data_Deep($this->data);
264     return $deep->get($attr);
265 joko 1.1 }
266     function set($attr, $val) {
267     $this->_doDataReady();
268 joko 1.9 $deep = new Data_Deep($this->data);
269     $deep->set($attr, $val);
270 joko 1.1 }
271    
272     function isLoggedOn() {
273     if ($this->state[id] && $this->state[status] == $this->meta[logontoken]) {
274     return 1;
275     }
276     }
277    
278    
279     //===== function userlogin =========================
280     function login($user,$passwd) {
281 jonen 1.16 connectdb();
282     //$sql = "SELECT * FROM td_users WHERE uname='$user'";
283     $sql = "SELECT user_oid, guid, uname, pass FROM td_users WHERE uname='$user'";
284     if ($res=send_sql($sql)) {
285     $row = mysql_fetch_array($res,MYSQL_ASSOC);
286     if (!is_array($row)) { return 0; }
287     }
288     if ($row[pass] == $passwd) {
289 joko 1.1 //return $uservars_db;
290     // store 1st priority user-data to state
291     $this->state[id] = $row[user_oid];
292 jonen 1.6 $this->state[guid] = $row[guid];
293 joko 1.1 $this->state[status] = $this->meta[logontoken];
294     $this->_saveState();
295 joko 1.9 $this->site->log( get_class($this) . "->login ok", PEAR_LOG_NOTICE );
296 joko 1.1 return 1;
297     } else {
298     return 0;
299     }
300 jonen 1.16 }
301    
302     //===== function guestlogin =========================
303     function loginGuest($data) {
304     // store 1st priority user-data to state
305     $this->state[id] = $data[oid];
306     $this->state[guid] = $data[guid];
307     $this->state[status] = $this->meta[logontoken];
308     $this->_saveState();
309     $this->site->log( get_class($this) . "->guest-login ok", PEAR_LOG_NOTICE );
310     return 1;
311     }
312 joko 1.1
313     function exists($string) {
314     connectdb();
315     $sql = "SELECT uname FROM td_users WHERE uname='$string'";
316     if ($res=send_sql($sql)) {
317     $row = mysql_fetch_array($res,MYSQL_ASSOC);
318    
319     if (is_array($row)) {
320     return 1;
321     }
322     }
323    
324     }
325    
326    
327 joko 1.5 function update($vars) {
328     $this->setPostVars($vars);
329 jonen 1.16 //print Dumper($vars);
330 joko 1.5 $data = $this->_transformInputData($vars);
331 jonen 1.16 //print Dumper($data);
332 joko 1.1 $this->_saveData($data);
333     }
334    
335     function _transformInputData(&$uservars) {
336     global $def_mapping;
337     $mapping_uservars2data = array_flip($def_mapping[data2uservars]);
338     foreach ($uservars as $key => $val) {
339     $key_target = $mapping_uservars2data[$key];
340 jonen 1.7 if($key_target != '') {
341     //print "$key => $key_target: $val<br>";
342     $target[$key_target] = $val;
343     }
344 joko 1.1 }
345     return $target;
346     }
347    
348     function logout() {
349    
350     global $site;
351    
352     // get information about user from site
353 jonen 1.6 $userid = $this->getUserId();
354 joko 1.1
355 joko 1.9 $this->site->log( get_class($this) . "->logout: userid $userid", PEAR_LOG_NOTICE );
356 joko 1.1
357     // get information about session from php
358     $session_id = session_id();
359     $session_name = session_name();
360    
361     // session-sqldb related
362     $date = date('Y-m-d H:i:s', time());
363     $session_e = $site->session->exists($session_id);
364     $sql = "UPDATE f_map_user_session SET date_logged_out='$date' WHERE session_uid='$session_e[session_uid]' AND user_uid='$userid'";
365     $res = send_sql($sql);
366    
367     // destroy user's session at server-side
368     $session_name = session_name();
369     session_destroy();
370    
371     // overwrite session-variables - to be sure ;)
372     $_SESSION = array();
373     unset($_COOKIE[$session_name]);
374    
375     }
376    
377 joko 1.2 function preLogout($autologout = 0) {
378 joko 1.1 global $site;
379     $this->state[status] = '';
380 joko 1.2 $this->state[autologout] = $autologout;
381 joko 1.1 $this->_saveState();
382     }
383    
384     function getAccountSum() {
385     // store additional user-data to state
386     if (!$this->state[accountSum]) {
387 jonen 1.3 $this->state[accountSum] = $this->get("account.amount");
388 joko 1.1 $this->_saveState();
389     }
390     return $this->state[accountSum];
391     }
392    
393     function getAccountCurrency() {
394     // store additional user-data to state
395     if (!$this->state[accountCurrency]) {
396 jonen 1.3 $this->state[accountCurrency] = $this->get("account.currency");
397 joko 1.1 $this->_saveState();
398     }
399     //print "state: " . $this->get("financeInfo.currency") . "<br>";
400     return $this->state[accountCurrency];
401     }
402    
403     function refresh() {
404     if ($this->pObject) {$this->pObject->flushState();}
405     $this->meta[data_ready] = 0;
406     }
407    
408     function _doDataReady() {
409     if (!$this->meta[data_ready]) { $this->_loadData(); }
410     }
411    
412     function getLastLogin() {
413     $userid = $this->getUserId();
414     connectdb();
415     $sql = "SELECT * FROM f_map_user_session WHERE user_uid='$userid' AND last='1'";
416     $res = send_sql($sql);
417     while($row = mysql_fetch_array($res,MYSQL_BOTH)) {
418     if($row[date_logged_out]=="0000-00-00 00:00:00") {
419     $date = $row[date_logged_in];
420     } else {
421     $date = $row[date_logged_out];
422     }
423     $lastLogin = strftime("%d %b %Y - %H:%M",strtotime($date));
424     }
425     return $lastLogin;
426     }
427    
428     function getUserId() {
429     return $this->state[id];
430     }
431    
432 jonen 1.6 function getUserGuid() {
433     return $this->state[guid];
434     }
435 joko 1.1
436     function getPostVars() {
437     return $this->state[postvars];
438     }
439    
440     function setPostVars($postvars) {
441     $this->state[postvars] = $postvars;
442     $this->_saveState();
443     }
444    
445     function getPostVar($var) {
446     return $this->state[postvars][$var];
447     }
448    
449 joko 1.2 function hadTimeout() {
450 jonen 1.8 if ($this->state[autologout]) { $this->state[autologout] = ''; return 1; }
451 jonen 1.16 }
452    
453     function getNewMessages() {
454     $messages = array();
455     $userguid = $this->getUserGuid();
456     connectdb();
457     $sql = "SELECT * FROM td_message WHERE target_guid='$userguid' AND new='1'";
458     if ($res=send_sql($sql)) {
459     while($row = mysql_fetch_array($res,MYSQL_ASSOC)) {
460     if (!is_array($row)) { return 0; }
461     array_push($messages, $row);
462     }
463     }
464     return $messages;
465     }
466    
467     function markNewMessage($mid) {
468     connectdb();
469     $sql = "UPDATE td_message SET new='0' WHERE mid='$mid'";
470     if(!$res=send_sql($sql)) {
471     return "Message not found!";
472     }
473 joko 1.2 }
474 joko 1.1
475     }
476    
477     ?>

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed