/[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.21 - (hide annotations)
Wed Nov 3 14:13:21 2004 UTC (19 years, 9 months ago) by jonen
Branch: MAIN
Changes since 1.20: +5 -2 lines
 small changes at create function

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

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