/[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.10 - (hide annotations)
Thu Feb 13 21:58:39 2003 UTC (21 years, 6 months ago) by joko
Branch: MAIN
Changes since 1.9: +5 -2 lines
+ caching mechanisms more configurable now

1 joko 1.1 <?
2     // -----------------------------------------------------------------------------
3 joko 1.10 // $Id: User.php,v 1.9 2003/02/09 17:46:26 joko Exp $
4 joko 1.1 // -----------------------------------------------------------------------------
5 joko 1.2 // $Log: User.php,v $
6 joko 1.10 // Revision 1.9 2003/02/09 17:46:26 joko
7     // + now utilizing Data::Driver::Proxy and Data::Deep
8     //
9 joko 1.9 // Revision 1.8 2002/12/28 01:16:42 jonen
10     // + added clear of $this->state[autologout] at 'hadTimeout()'
11     //
12 jonen 1.8 // Revision 1.7 2002/12/23 11:32:28 jonen
13     // + added inserting of uservars on '_create' to frontend db(needed to login user after create!)
14     // + added hard link to page 'pub/register', TODO: move this out here
15     //
16 jonen 1.7 // Revision 1.6 2002/12/18 22:46:06 jonen
17     // + added function 'getUserGuid()'
18     // (returns user's 'guid' read from database at function 'login()' (now))
19     // + function '_loadData()' loads user remote now via 'getUserGuid()'
20     //
21 jonen 1.6 // Revision 1.5 2002/12/12 21:34:32 joko
22     // + fix in 'function update': invalidate data only if it's not for caching purposes
23     //
24 joko 1.5 // Revision 1.4 2002/12/06 04:10:28 joko
25     // + replaced 'xyzCache' through 'xyzProxy'
26     //
27 joko 1.4 // Revision 1.3 2002/12/04 07:42:54 jonen
28     // + changes according to backend schema change
29     //
30 jonen 1.3 // Revision 1.2 2002/12/03 16:47:22 joko
31     // - function preLogout()
32     // + function preLogout($autologout = 0)
33     // + function hadTimeout()
34     //
35 joko 1.2 // Revision 1.1 2002/11/12 05:42:31 joko
36     // + initial checkin
37     //
38 joko 1.1 // Revision 1.7 2002/10/29 19:09:53 cvsjoko
39     // + function getLastLogin
40     // + function getUserId
41     //
42     // Revision 1.6 2002/10/25 11:18:10 cvsmax
43     // - removed old functions ('logout', 'create',...)
44     // + add function preLogout() # save user session and unset (session) state
45     //
46     // Revision 1.5 2002/10/22 09:47:48 cvsmax
47     // + add new
48     // - function create() # create & save new user-object in session
49     // - function _create($attr) # create & save new user-object in backend
50     //
51     // - purged some very old functions
52     //
53     // Revision 1.4 2002/10/17 03:12:17 cvsmax
54     // -(+) cleaned code from old structure
55     // + function getPostVar($fieldname)
56     //
57     // Revision 1.3 2002/10/10 02:41:57 cvsjoko
58     // + fixed typo
59     //
60     // Revision 1.2 2002/10/10 02:34:33 cvsjoko
61     // + new level of data-caching (session and persistant)
62     // + function _save()
63     // + function save()
64     // + handling (storing/caching) of POSTed data
65     // + function getPostVars()
66     // + function setPostVars()
67     // + handy utils
68     // + function doDataReady() cares for ready data to continue working
69     // + function refresh() clears underlying data container and makes data "unready"
70     //
71     // Revision 1.1 2002/10/09 00:40:13 cvsjoko
72     // + new
73     //
74     //
75     // -----------------------------------------------------------------------------
76    
77     class User {
78    
79     var $state;
80     var $meta;
81    
82     var $pObject;
83     var $data;
84    
85    
86     function User() {
87    
88     // attention:
89     // this code is only run when your session is _really_ fresh
90     if (session_register_safe('userstate')) {
91     }
92    
93     $this->_loadState();
94     $this->meta[logontoken] = 'k&%g2';
95    
96     // print dumpVar($_SESSION);
97    
98     }
99    
100     function _loadState() {
101     global $userstate;
102     $this->state = $userstate;
103     }
104     function _saveState() {
105     global $userstate;
106     $userstate = $this->state;
107     }
108    
109    
110     function _loadData() {
111 joko 1.9 $this->meta[data_ready] = 1;
112     //$this->pObject = new ProxyObject($this->getUserGuid(), array( remote => 1, classname => "NetPerson", guid => 1) );
113     $rpcinfo = $this->site->configuration->get("rpcinfo");
114 joko 1.10 $this->pObject = mkObject('Data::Driver::Proxy', $this->getUserGuid(), array( remote => 1, classname => "NetPerson", guid => 1, rpcinfo => $rpcinfo, cache => array( db => 1, session => 1 ) ) );
115 jonen 1.6 if ($this->getUserGuid()) {
116 joko 1.1 $this->data = $this->pObject->getAttributes();
117     }
118     }
119    
120     function _saveData($newRawData) {
121    
122     foreach ($newRawData as $key => $val) {
123     //print "$key => $val<br>";
124     $this->set($key, $val);
125     }
126    
127     $this->_save("cache");
128    
129 joko 1.4 //$this->pObject->flushProxy(); // done in "pObject->save"
130 joko 1.1
131     }
132    
133     function _save($type = '') {
134 joko 1.5 //print Dumper($this->data);
135 joko 1.1 $this->pObject->save($this->data, $type);
136 joko 1.5 // invalidate data only if it's not for caching purposes
137     if ($type != 'cache') {
138     $this->meta[data_ready] = 0;
139     }
140 joko 1.1 }
141    
142     function save() {
143     $this->_doDataReady();
144     $this->_save("commit");
145     }
146    
147     function create() {
148     $this->_save();
149     $attr = $this->pObject->getAttributes();
150     //print DumpVar($attr);
151     $this->_create($attr);
152     }
153    
154     function _create($result) {
155     //print "saving to backend: " . dumpVar($result) . "<br>";
156     $response = $this->pObject->backend->send('createUser', array('data' => $result) );
157     $objectId = $response[oid];
158 jonen 1.7 if($objectId) {
159     connectdb();
160     $guid = $response[guid];
161     $username = $this->get('userData.username');
162     $password = $this->get('userData.password');
163     $sql = "INSERT into td_users VALUES ( '$objectId', '$guid', '', '$username', '$password','' )";
164     $res = send_sql($sql);
165     }
166     else {
167     // TODO: handle this with a generic rpc-debug/pending function
168     $site->session->set('register_error', 'rpc_error');
169     $site->redirect( getlink('/pub/register/') );
170     }
171 joko 1.1 //$this->_init($objectId);
172     }
173    
174     function get($attr) {
175     $this->_doDataReady();
176 joko 1.9 $deep = new Data_Deep($this->data);
177     return $deep->get($attr);
178 joko 1.1 }
179     function set($attr, $val) {
180     $this->_doDataReady();
181 joko 1.9 $deep = new Data_Deep($this->data);
182     $deep->set($attr, $val);
183 joko 1.1 }
184    
185     function isLoggedOn() {
186     if ($this->state[id] && $this->state[status] == $this->meta[logontoken]) {
187     return 1;
188     }
189     }
190    
191    
192     //===== function userlogin =========================
193     function login($user,$passwd) {
194     connectdb();
195     //$sql = "SELECT * FROM td_users WHERE uname='$user'";
196 jonen 1.6 $sql = "SELECT user_oid, guid, uname, pass FROM td_users WHERE uname='$user'";
197 joko 1.1 if ($res=send_sql($sql)) {
198     $row = mysql_fetch_array($res,MYSQL_ASSOC);
199     if (!is_array($row)) { return 0; }
200     }
201     if ($row[pass] == $passwd) {
202     //return $uservars_db;
203     // store 1st priority user-data to state
204     $this->state[id] = $row[user_oid];
205 jonen 1.6 $this->state[guid] = $row[guid];
206 joko 1.1 $this->state[status] = $this->meta[logontoken];
207     $this->_saveState();
208 joko 1.9 $this->site->log( get_class($this) . "->login ok", PEAR_LOG_NOTICE );
209 joko 1.1 return 1;
210     } else {
211     return 0;
212     }
213     }
214    
215     function exists($string) {
216     connectdb();
217     $sql = "SELECT uname FROM td_users WHERE uname='$string'";
218     if ($res=send_sql($sql)) {
219     $row = mysql_fetch_array($res,MYSQL_ASSOC);
220    
221     if (is_array($row)) {
222     return 1;
223     }
224     }
225    
226     }
227    
228    
229 joko 1.5 function update($vars) {
230     $this->setPostVars($vars);
231     //print Dumper($vars);
232     $data = $this->_transformInputData($vars);
233 joko 1.1 $this->_saveData($data);
234     }
235    
236     function _transformInputData(&$uservars) {
237     global $def_mapping;
238     $mapping_uservars2data = array_flip($def_mapping[data2uservars]);
239     foreach ($uservars as $key => $val) {
240     $key_target = $mapping_uservars2data[$key];
241 jonen 1.7 if($key_target != '') {
242     //print "$key => $key_target: $val<br>";
243     $target[$key_target] = $val;
244     }
245 joko 1.1 }
246     return $target;
247     }
248    
249     function logout() {
250    
251     global $site;
252    
253     // get information about user from site
254 jonen 1.6 $userid = $this->getUserId();
255 joko 1.1
256 joko 1.9 $this->site->log( get_class($this) . "->logout: userid $userid", PEAR_LOG_NOTICE );
257 joko 1.1
258     // get information about session from php
259     $session_id = session_id();
260     $session_name = session_name();
261    
262     // session-sqldb related
263     $date = date('Y-m-d H:i:s', time());
264     $session_e = $site->session->exists($session_id);
265     $sql = "UPDATE f_map_user_session SET date_logged_out='$date' WHERE session_uid='$session_e[session_uid]' AND user_uid='$userid'";
266     $res = send_sql($sql);
267    
268     // destroy user's session at server-side
269     $session_name = session_name();
270     session_destroy();
271    
272     // overwrite session-variables - to be sure ;)
273     $_SESSION = array();
274     unset($_COOKIE[$session_name]);
275    
276     }
277    
278 joko 1.2 function preLogout($autologout = 0) {
279 joko 1.1 global $site;
280     $this->state[status] = '';
281 joko 1.2 $this->state[autologout] = $autologout;
282 joko 1.1 $this->_saveState();
283     }
284    
285     function getAccountSum() {
286     // store additional user-data to state
287     if (!$this->state[accountSum]) {
288 jonen 1.3 $this->state[accountSum] = $this->get("account.amount");
289 joko 1.1 $this->_saveState();
290     }
291     return $this->state[accountSum];
292     }
293    
294     function getAccountCurrency() {
295     // store additional user-data to state
296     if (!$this->state[accountCurrency]) {
297 jonen 1.3 $this->state[accountCurrency] = $this->get("account.currency");
298 joko 1.1 $this->_saveState();
299     }
300     //print "state: " . $this->get("financeInfo.currency") . "<br>";
301     return $this->state[accountCurrency];
302     }
303    
304     function refresh() {
305     if ($this->pObject) {$this->pObject->flushState();}
306     $this->meta[data_ready] = 0;
307     }
308    
309     function _doDataReady() {
310     if (!$this->meta[data_ready]) { $this->_loadData(); }
311     }
312    
313     function getLastLogin() {
314     $userid = $this->getUserId();
315     connectdb();
316     $sql = "SELECT * FROM f_map_user_session WHERE user_uid='$userid' AND last='1'";
317     $res = send_sql($sql);
318     while($row = mysql_fetch_array($res,MYSQL_BOTH)) {
319     if($row[date_logged_out]=="0000-00-00 00:00:00") {
320     $date = $row[date_logged_in];
321     } else {
322     $date = $row[date_logged_out];
323     }
324     $lastLogin = strftime("%d %b %Y - %H:%M",strtotime($date));
325     }
326     return $lastLogin;
327     }
328    
329     function getUserId() {
330     return $this->state[id];
331     }
332    
333 jonen 1.6 function getUserGuid() {
334     return $this->state[guid];
335     }
336 joko 1.1
337     function getPostVars() {
338     return $this->state[postvars];
339     }
340    
341     function setPostVars($postvars) {
342     $this->state[postvars] = $postvars;
343     $this->_saveState();
344     }
345    
346     function getPostVar($var) {
347     return $this->state[postvars][$var];
348     }
349    
350 joko 1.2 function hadTimeout() {
351 jonen 1.8 if ($this->state[autologout]) { $this->state[autologout] = ''; return 1; }
352 joko 1.2 }
353 joko 1.1
354     }
355    
356     ?>

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