/[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.23 - (hide annotations)
Thu Aug 11 14:08:11 2005 UTC (18 years, 11 months ago) by jonen
Branch: MAIN
CVS Tags: HEAD
Changes since 1.22: +52 -1 lines
+ added functions relating to TerminalUser

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

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