changed git call from https to git readonly
[atutor.git] / mods / wiki / plugins / lib / uservars_pages.php
1 <?php
2
3 /*
4
5 */
6
7   //override to use old standard
8 //define('EWIKI_USERVARS_PAGENAME_PREFIX','UserDataPage_');
9 define('EWIKI_USERVARS_PAGENAME_PREFIX','system/user/');
10
11 $ewiki_plugins['uservars_store'][]="ewiki_uservars_pages_store";
12 $ewiki_plugins['uservars_retrieve'][]="ewiki_uservars_pages_retrieve";
13 $ewiki_plugins["login_handler"][]="ewiki_uservars_pages_retrieve";
14
15 $ewiki_plugins['uservars_get'][]="ewiki_uservars_pages_getvar";
16 $ewiki_plugins['uservars_set'][]="ewiki_uservars_pages_setvar";
17 $ewiki_plugins['uservars_getall'][]="ewiki_uservars_pages_getallvar";
18 $ewiki_plugins['uservars_clear'][]="ewiki_uservars_pages_clear";
19 $ewiki_plugins['uservars_search'][]='ewiki_uservars_pages_search';
20
21 /*
22 $ewiki_plugins['page']['Test']         = 'ewiki_page_test';
23 function ewiki_page_test($id, $data)
24 {
25     global $ewiki_uservars;
26
27     ob_start();
28 /*
29
30     var_dump(ewiki_uservars_pages_retrieve());    
31     $ewiki_uservars['Real Name']='Andy Fundinger';
32     var_dump(ewiki_uservars_pages_retrieve());    
33
34     ewiki_uservars_pages_store();
35     var_dump(ewiki_uservars_pages_retrieve());    
36 // /
37
38
39     echo("<p>".ewiki_uservars_getvar('Real Name').'</p>');
40     echo("<p>".ewiki_uservars_getvar('Fake Name','No alias').'</p>');
41     ewiki_uservars_setvar('Real Name',"Andy");
42     ewiki_uservars_setvar('Fake Name',"Andriod");
43     echo("<p>".ewiki_get_uservar('Real Name').'</p>');
44     
45     $o = ob_get_contents();
46     ob_end_clean();
47     return $o;    
48 }
49 // */
50
51 function ewiki_getall_uservar($username=NULL){
52   global $ewiki_plugins;
53
54   #-- plugins to call
55   $pf = @$ewiki_plugins['uservars_getall'][0];
56    
57   if ($pf && function_exists($pf)) {
58     $r=$pf($username);
59     if($r){
60       ewiki_log('UserVars getall_uservar: uservariables successfully retrieved for "'.$username.'"', 3);
61       return($r);
62     } else {
63       ewiki_log('UserVars: there was an error retrieving uservariables for "'.$username.'"', 3);
64     }
65   }
66   return(array());
67 }
68
69 function ewiki_clear_uservar($varname, $username=NULL){
70   global $ewiki_plugins;
71
72   #-- plugins to call
73   $pf = @$ewiki_plugins['uservars_clear'][0];
74   
75   $varname=trim(strtr($varname, "_", " "));
76   
77   if ($pf && function_exists($pf)) {
78     $r=$pf($varname, $username);
79     if($r){
80       ewiki_log('UserVars clear_uservar: "'.$varname.'" successfully cleared for user "'.$username.'"', 3);
81       return($r);
82     } else {
83       ewiki_log('UserVars clear_uservar: error clearing"'.$varname.'" for user "'.$username.'"', 3);
84     }
85   }
86   return(FALSE);
87 }
88
89 function ewiki_search_uservar($varname, $value=NULL){
90   global $ewiki_plugins;
91
92   #-- plugins to call
93   $pf = @$ewiki_plugins['uservars_search'][0];
94   
95   
96   if ($pf && function_exists($pf)) {
97     //echo("ewiki_search_uservar calling $pf($varname,$value)");
98     $r=$pf($varname,$value);
99     if($r){
100       ewiki_log('UserVars search_uservar: search for "'.$value.'" in field "'.$varname.'" was successful', 3);
101       return($r);
102     } else {
103       ewiki_log('UserVars search_uservar: search for "'.$value.'" in field "'.$varname.'" failed', 3);
104     }
105   }
106   return(array());
107 }
108
109 function ewiki_get_uservar($varname, $defaultValue=NULL, $username=NULL){
110     global $ewiki_plugins;
111
112     #-- plugins to call
113     $pf = @$ewiki_plugins['uservars_get'][0];
114     
115     
116     if ($pf && function_exists($pf)) {
117       $r=$pf($varname, $defaultValue, $username);
118       if($r){
119         ewiki_log('UserVars get_uservar: get "'.$varname.'" for user "'.$username.'" was successful', 3);
120         return($r);
121       } else {
122          ewiki_log('UserVars get_uservar: get "'.$varname.'" for user "'.$username.'" failed', 3);
123       }
124     }
125     return($defaultValue);
126 }
127 function ewiki_set_uservar($varname, $value, $username=NULL){
128     global $ewiki_plugins;
129
130     $varname=trim(strtr($varname, "_", " "));
131     #-- plugins to call
132     $pf = @$ewiki_plugins['uservars_set'][0];
133     
134     
135     if ($pf && function_exists($pf)) {
136         $r=$pf($varname, $value, $username);
137         if($r){
138           ewiki_log('UserVars set_uservar: seting "'.$varname.'" to "'.$value.'" for user "'.$username.'" was successful', 3);
139           return($r);
140         } else {
141           ewiki_log('UserVars set_uservar: seting "'.$varname.'" to "'.$value.'" for user "'.$username.'" failed', 3);
142         }
143
144     }
145     return(FALSE);
146 }
147
148 /*
149 Gets all variables for $username or the current user if $username
150 is not set.
151 */
152 function ewiki_uservars_pages_getallvar($username=NULL){
153     return(ewiki_uservars_pages_retrieve($username));
154 }
155
156 /*
157 Gets the variable $varname for $username or the current user if $username
158 is not set.  If $varname is not set $defaultValue is returned.
159 */
160 function ewiki_uservars_pages_getvar($varname, $defaultValue=NULL, $username=NULL){
161     $data=ewiki_uservars_pages_retrieve($username);
162     if(isset($data[$varname])){
163         return($data[$varname]);
164     }else{
165         return($defaultValue);
166     }
167 }
168
169 function ewiki_uservars_pages_clear($varname, $username=NULL){
170   $data=ewiki_uservars_pages_retrieve($username);
171   unset($data[$varname]);
172   return(ewiki_uservars_pages_store($data,$username));
173 }
174
175 function ewiki_uservars_pages_search($varname, $value=NULL){
176
177   $result = ewiki_db::SEARCH("content", $varname);
178   
179   //Get a list of all pages containing our varname
180   while ($row = $result->get()) {            
181     if(!preg_match("/".EWIKI_USERVARS_PAGENAME_PREFIX."(.*)/",$row["id"],$matches)){
182       continue;
183     }//Page name is properly formed as a UserVars page name
184     $username=$matches[1];
185     
186     //echo("Checking $username for $varname");
187     if(!($data=ewiki_uservars_pages_retrieve($username))){
188       //echo(" rejected, no data retrieved");
189       continue;
190     }//data was retrieved from the page. 
191
192     if(!isset($data[$varname])){
193       //echo(" rejected, variable not set $varname");
194       continue;
195     }//The varname we are searching for was there
196     
197     if(isset($value)&&($value!=$data[$varname])){
198       //echo("rejected $value != ".$data[$varname]);
199       continue;
200     }//if we were looking for a value, it matches
201     
202     //echo("passed, setting $data[$varname] to $values[$varname]");
203     $values[$username]=$data[$varname];
204   }
205
206   return($values);
207 }
208
209 /*
210 Sets the variable $varname to $value for $username or the current user if $username
211 is not set.
212 */
213 function ewiki_uservars_pages_setvar($varname, $value, $username=NULL){
214     $data=ewiki_uservars_pages_retrieve($username);
215     $data[$varname]=$value;
216     return(ewiki_uservars_pages_store($data,$username));
217 }
218
219 /*
220 Stores $data as the user variables for $username returning sucess and storing it in 
221 global $ewiki_uservars if you are storing the user data for the current user.
222
223 $username is optional, $GLOBALS['ewiki_auth_user']) is assumed.
224 $data is optional, global $ewiki_uservars is stored if none is passed.
225 */
226 function ewiki_uservars_pages_store($data=NULL, $username=NULL){
227     global $ewiki_uservars,$ewiki_errmsg;
228
229     if(!isset($username)){
230         $username = $GLOBALS['ewiki_auth_user'];        
231     }
232     if($username == $GLOBALS['ewiki_auth_user']){
233         if(!isset($data)){            
234             $data=$ewiki_uservars;        
235         }else{
236             $ewiki_uservars=$data;
237         }
238     }
239     
240     //echo("<p>Storing user variables for $username</p>");
241     $oldpage=ewiki_db::GET(EWIKI_USERVARS_PAGENAME_PREFIX.$username);
242
243     //if there was already an existing, non-system page, fail out.
244     if(($oldpage['version']>0)&&(!($oldpage["flags"] & EWIKI_DB_F_SYSTEM))){
245         $ewiki_errmsg=ewiki_t('ERRORSAVING');
246         return(0);
247     }
248
249     $save = array(
250                "id" => EWIKI_USERVARS_PAGENAME_PREFIX.$username,
251                "version" => @$oldpage["version"] + 1,
252                "flags" => EWIKI_DB_F_SYSTEM,
253                "content" => serialize($data),
254                "author" => ewiki_author(),
255                "lastmodified" => time(),
256                "created" => ($uu=@$oldpage["created"]) ? $uu : time(),
257                "meta" => ($uu=@$oldpage["meta"]) ? $uu : "",
258                "hits" => ($uu=@$oldpage["hits"]) ? $uu : "0",
259             );    
260
261     return(ewiki_db::WRITE($save));
262 }
263
264 /*
265 Retrieves the userdata for $username returning it and storing it in 
266 global $ewiki_uservars if you are retrieving the user data for the current user.
267
268 $username is optional, $GLOBALS['ewiki_auth_user']) is assumed.
269 */
270 function ewiki_uservars_pages_retrieve($username=NULL){
271     global $ewiki_uservars;
272     if(!isset($username)){
273       $username = $GLOBALS['ewiki_auth_user'];        
274     }
275
276     if(!empty($ewiki_uservars)&&($username == $GLOBALS['ewiki_auth_user'])){
277       return($ewiki_uservars);
278     }
279
280     $data=ewiki_db::GET(EWIKI_USERVARS_PAGENAME_PREFIX.$username);
281     
282     //User data must be on system pages
283     if($data["flags"] & EWIKI_DB_F_SYSTEM){
284         //echo("System flag set ");
285         $userdata=unserialize($data['content']);        
286     }
287     //log and fail if no userdata found i.e. no page, no system flag, or not an array
288     if(!is_array($userdata)){
289         //echo(" retrieved no user data");
290         ewiki_log("No userdata for $username in ewiki_uservars_pages_retrieve()",2);        
291         return(array());
292     }
293         
294     if($username == $GLOBALS['ewiki_auth_user']){
295         $ewiki_uservars=$userdata;
296     }
297
298     return($userdata);
299 }
300
301 ?>