b1afc72946b023bb03228f487130be304ae9216e
[matches/MCTX3420.git] / testing / MCTXWeb / public_html / users / models / funcs.php
1 <?php\r
2 /*\r
3 UserCake Version: 2.0.2\r
4 http://usercake.com\r
5 */\r
6 \r
7 //Functions that do not interact with DB\r
8 //------------------------------------------------------------------------------\r
9 \r
10 //Retrieve a list of all .php files in models/languages\r
11 function getLanguageFiles()\r
12 {\r
13         $directory = "models/languages/";\r
14         $languages = glob($directory . "*.php");\r
15         //print each file name\r
16         return $languages;\r
17 }\r
18 \r
19 //Retrieve a list of all .css files in models/site-templates \r
20 function getTemplateFiles()\r
21 {\r
22         $directory = "models/site-templates/";\r
23         $languages = glob($directory . "*.css");\r
24         //print each file name\r
25         return $languages;\r
26 }\r
27 \r
28 //Retrieve a list of all .php files in root files folder\r
29 function getPageFiles()\r
30 {\r
31         $directory = "";\r
32         $pages = glob($directory . "*.php");\r
33         //print each file name\r
34         foreach ($pages as $page){\r
35                 $row[$page] = $page;\r
36         }\r
37         return $row;\r
38 }\r
39 \r
40 //Destroys a session as part of logout\r
41 function destroySession($name)\r
42 {\r
43         if(isset($_SESSION[$name]))\r
44         {\r
45                 $_SESSION[$name] = NULL;\r
46                 unset($_SESSION[$name]);\r
47         }\r
48 }\r
49 \r
50 //Generate a unique code\r
51 function getUniqueCode($length = "")\r
52 {       \r
53         $code = md5(uniqid(rand(), true));\r
54         if ($length != "") return substr($code, 0, $length);\r
55         else return $code;\r
56 }\r
57 \r
58 //Generate an activation key\r
59 function generateActivationToken($gen = null)\r
60 {\r
61         do\r
62         {\r
63                 $gen = md5(uniqid(mt_rand(), false));\r
64         }\r
65         while(validateActivationToken($gen));\r
66         return $gen;\r
67 }\r
68 \r
69 //@ Thanks to - http://phpsec.org\r
70 function generateHash($plainText, $salt = null)\r
71 {\r
72         if ($salt === null)\r
73         {\r
74                 //$salt = substr(md5(uniqid(rand(), true)), 0, 25); // Original UserCake\r
75                 $random = file_get_contents("/dev/urandom", false, null, 0, 25); // Get random number\r
76                 $salt = '$6$'.bin2hex($random).'$'; // Make hex salt\r
77                 \r
78         }\r
79         //return $salt . sha1($salt . $plainText); // Original UserCake\r
80         return crypt($plainText, $salt);\r
81 }\r
82 \r
83 /**\r
84  * Generates a random password for emailing to new users.\r
85  * User should be asked to change the password.\r
86  */\r
87 function generatePassword()\r
88 {\r
89   $random = file_get_contents("/dev/urandom", false, null, 0, 25);\r
90   return bin2hex($random);\r
91 }\r
92 \r
93 //Checks if an email is valid\r
94 function isValidEmail($email)\r
95 {\r
96         if (filter_var($email, FILTER_VALIDATE_EMAIL)) {\r
97                 return true;\r
98         }\r
99         else {\r
100                 return false;\r
101         }\r
102 }\r
103 \r
104 //Inputs language strings from selected language.\r
105 function lang($key,$markers = NULL)\r
106 {\r
107         global $lang;\r
108         if($markers == NULL)\r
109         {\r
110                 $str = $lang[$key];\r
111         }\r
112         else\r
113         {\r
114                 //Replace any dyamic markers\r
115                 $str = $lang[$key];\r
116                 $iteration = 1;\r
117                 foreach($markers as $marker)\r
118                 {\r
119                         $str = str_replace("%m".$iteration."%",$marker,$str);\r
120                         $iteration++;\r
121                 }\r
122         }\r
123         //Ensure we have something to return\r
124         if($str == "")\r
125         {\r
126                 return ("No language key found");\r
127         }\r
128         else\r
129         {\r
130                 return $str;\r
131         }\r
132 }\r
133 \r
134 //Checks if a string is within a min and max length\r
135 function minMaxRange($min, $max, $what)\r
136 {\r
137         if(strlen(trim($what)) < $min)\r
138                 return true;\r
139         else if(strlen(trim($what)) > $max)\r
140                 return true;\r
141         else\r
142         return false;\r
143 }\r
144 \r
145 //Replaces hooks with specified text\r
146 function replaceDefaultHook($str)\r
147 {\r
148         global $default_hooks,$default_replace; \r
149         return (str_replace($default_hooks,$default_replace,$str));\r
150 }\r
151 \r
152 //Displays error and success messages\r
153 function resultBlock($errors,$successes){\r
154         //Error block\r
155         if(count($errors) > 0)\r
156         {\r
157                 echo "<div id='error'>\r
158                 <a href='#' onclick=\"showHide('error');\">[X]</a>\r
159                 <ul>";\r
160                 foreach($errors as $error)\r
161                 {\r
162                         echo "<li>".$error."</li>";\r
163                 }\r
164                 echo "</ul>";\r
165                 echo "</div>";\r
166         }\r
167         //Success block\r
168         if(count($successes) > 0)\r
169         {\r
170                 echo "<div id='success'>\r
171                 <a href='#' onclick=\"showHide('success');\">[X]</a>\r
172                 <ul>";\r
173                 foreach($successes as $success)\r
174                 {\r
175                         echo "<li>".$success."</li>";\r
176                 }\r
177                 echo "</ul>";\r
178                 echo "</div>";\r
179         }\r
180 }\r
181 \r
182 //Completely sanitizes text\r
183 function sanitize($str)\r
184 {\r
185         return strtolower(strip_tags(trim(($str))));\r
186 }\r
187 \r
188 //Functions that interact mainly with .users table\r
189 //------------------------------------------------------------------------------\r
190 \r
191 //Delete a defined array of users\r
192 function deleteUsers($users) {\r
193         global $mysqli,$db_table_prefix; \r
194         $i = 0;\r
195         $stmt = $mysqli->prepare("DELETE FROM ".$db_table_prefix."users \r
196                 WHERE id = ?");\r
197         $stmt2 = $mysqli->prepare("DELETE FROM ".$db_table_prefix."user_permission_matches \r
198                 WHERE user_id = ?");\r
199         foreach($users as $id){\r
200                 $stmt->bind_param("i", $id);\r
201                 $stmt->execute();\r
202                 $stmt2->bind_param("i", $id);\r
203                 $stmt2->execute();\r
204                 $i++;\r
205         }\r
206         $stmt->close();\r
207         $stmt2->close();\r
208         return $i;\r
209 }\r
210 \r
211 //Check if a display name exists in the DB\r
212 function displayNameExists($displayname)\r
213 {\r
214         global $mysqli,$db_table_prefix;\r
215         $stmt = $mysqli->prepare("SELECT active\r
216                 FROM ".$db_table_prefix."users\r
217                 WHERE\r
218                 display_name = ?\r
219                 LIMIT 1");\r
220         $stmt->bind_param("s", $displayname);   \r
221         $stmt->execute();\r
222         $stmt->store_result();\r
223         $num_returns = $stmt->num_rows;\r
224         $stmt->close();\r
225         \r
226         if ($num_returns > 0)\r
227         {\r
228                 return true;\r
229         }\r
230         else\r
231         {\r
232                 return false;   \r
233         }\r
234 }\r
235 \r
236 //Check if an email exists in the DB\r
237 function emailExists($email)\r
238 {\r
239         global $mysqli,$db_table_prefix;\r
240         $stmt = $mysqli->prepare("SELECT active\r
241                 FROM ".$db_table_prefix."users\r
242                 WHERE\r
243                 email = ?\r
244                 LIMIT 1");\r
245         $stmt->bind_param("s", $email); \r
246         $stmt->execute();\r
247         $stmt->store_result();\r
248         $num_returns = $stmt->num_rows;\r
249         $stmt->close();\r
250         \r
251         if ($num_returns > 0)\r
252         {\r
253                 return true;\r
254         }\r
255         else\r
256         {\r
257                 return false;   \r
258         }\r
259 }\r
260 \r
261 //Check if a user name and email belong to the same user\r
262 function emailUsernameLinked($email,$username)\r
263 {\r
264         global $mysqli,$db_table_prefix;\r
265         $stmt = $mysqli->prepare("SELECT active\r
266                 FROM ".$db_table_prefix."users\r
267                 WHERE user_name = ?\r
268                 AND\r
269                 email = ?\r
270                 LIMIT 1\r
271                 ");\r
272         $stmt->bind_param("ss", $username, $email);     \r
273         $stmt->execute();\r
274         $stmt->store_result();\r
275         $num_returns = $stmt->num_rows;\r
276         $stmt->close();\r
277         \r
278         if ($num_returns > 0)\r
279         {\r
280                 return true;\r
281         }\r
282         else\r
283         {\r
284                 return false;   \r
285         }\r
286 }\r
287 \r
288 //Retrieve information for all users\r
289 function fetchAllUsers()\r
290 {\r
291         global $mysqli,$db_table_prefix; \r
292         $stmt = $mysqli->prepare("SELECT \r
293                 id,\r
294                 user_name,\r
295                 display_name,\r
296                 password,\r
297                 email,\r
298                 activation_token,\r
299                 last_activation_request,\r
300                 lost_password_request,\r
301                 active,\r
302                 title,\r
303                 sign_up_stamp,\r
304                 last_sign_in_stamp\r
305                 FROM ".$db_table_prefix."users");\r
306         $stmt->execute();\r
307         $stmt->bind_result($id, $user, $display, $password, $email, $token, $activationRequest, $passwordRequest, $active, $title, $signUp, $signIn);\r
308         \r
309         while ($stmt->fetch()){\r
310                 $row[] = array('id' => $id, 'user_name' => $user, 'display_name' => $display, 'password' => $password, 'email' => $email, 'activation_token' => $token, 'last_activation_request' => $activationRequest, 'lost_password_request' => $passwordRequest, 'active' => $active, 'title' => $title, 'sign_up_stamp' => $signUp, 'last_sign_in_stamp' => $signIn);\r
311         }\r
312         $stmt->close();\r
313         return ($row);\r
314 }\r
315 \r
316 //Retrieve complete user information by username, token or ID\r
317 function fetchUserDetails($username=NULL,$token=NULL, $id=NULL)\r
318 {\r
319         if($username!=NULL) {\r
320                 $column = "user_name";\r
321                 $data = $username;\r
322         }\r
323         elseif($token!=NULL) {\r
324                 $column = "activation_token";\r
325                 $data = $token;\r
326         }\r
327         elseif($id!=NULL) {\r
328                 $column = "id";\r
329                 $data = $id;\r
330         }\r
331         global $mysqli,$db_table_prefix; \r
332         $stmt = $mysqli->prepare("SELECT \r
333                 id,\r
334                 user_name,\r
335                 display_name,\r
336                 password,\r
337                 email,\r
338                 activation_token,\r
339                 last_activation_request,\r
340                 lost_password_request,\r
341                 active,\r
342                 title,\r
343                 sign_up_stamp,\r
344                 last_sign_in_stamp\r
345                 FROM ".$db_table_prefix."users\r
346                 WHERE\r
347                 $column = ?\r
348                 LIMIT 1");\r
349                 $stmt->bind_param("s", $data);\r
350         \r
351         $stmt->execute();\r
352         $stmt->bind_result($id, $user, $display, $password, $email, $token, $activationRequest, $passwordRequest, $active, $title, $signUp, $signIn);\r
353         while ($stmt->fetch()){\r
354                 $row = array('id' => $id, 'user_name' => $user, 'display_name' => $display, 'password' => $password, 'email' => $email, 'activation_token' => $token, 'last_activation_request' => $activationRequest, 'lost_password_request' => $passwordRequest, 'active' => $active, 'title' => $title, 'sign_up_stamp' => $signUp, 'last_sign_in_stamp' => $signIn);\r
355         }\r
356         $stmt->close();\r
357         return ($row);\r
358 }\r
359 \r
360 //Toggle if lost password request flag on or off\r
361 function flagLostPasswordRequest($username,$value)\r
362 {\r
363         global $mysqli,$db_table_prefix;\r
364         $stmt = $mysqli->prepare("UPDATE ".$db_table_prefix."users\r
365                 SET lost_password_request = ?\r
366                 WHERE\r
367                 user_name = ?\r
368                 LIMIT 1\r
369                 ");\r
370         $stmt->bind_param("ss", $value, $username);\r
371         $result = $stmt->execute();\r
372         $stmt->close();\r
373         return $result;\r
374 }\r
375 \r
376 //Check if a user is logged in\r
377 function isUserLoggedIn()\r
378 {\r
379         global $loggedInUser,$mysqli,$db_table_prefix;\r
380         $stmt = $mysqli->prepare("SELECT \r
381                 id,\r
382                 password\r
383                 FROM ".$db_table_prefix."users\r
384                 WHERE\r
385                 id = ?\r
386                 AND \r
387                 password = ? \r
388                 AND\r
389                 active = 1\r
390                 LIMIT 1");\r
391         $stmt->bind_param("is", $loggedInUser->user_id, $loggedInUser->hash_pw);        \r
392         $stmt->execute();\r
393         $stmt->store_result();\r
394         $num_returns = $stmt->num_rows;\r
395         $stmt->close();\r
396         \r
397         if($loggedInUser == NULL)\r
398         {\r
399                 return false;\r
400         }\r
401         else\r
402         {\r
403                 if ($num_returns > 0)\r
404                 {\r
405                         return true;\r
406                 }\r
407                 else\r
408                 {\r
409                         destroySession("userCakeUser");\r
410                         return false;   \r
411                 }\r
412         }\r
413 }\r
414 \r
415 //Change a user from inactive to active\r
416 function setUserActive($token)\r
417 {\r
418         global $mysqli,$db_table_prefix;\r
419         $stmt = $mysqli->prepare("UPDATE ".$db_table_prefix."users\r
420                 SET active = 1\r
421                 WHERE\r
422                 activation_token = ?\r
423                 LIMIT 1");\r
424         $stmt->bind_param("s", $token);\r
425         $result = $stmt->execute();\r
426         $stmt->close(); \r
427         return $result;\r
428 }\r
429 \r
430 //Change a user's display name\r
431 function updateDisplayName($id, $display)\r
432 {\r
433         global $mysqli,$db_table_prefix;\r
434         $stmt = $mysqli->prepare("UPDATE ".$db_table_prefix."users\r
435                 SET display_name = ?\r
436                 WHERE\r
437                 id = ?\r
438                 LIMIT 1");\r
439         $stmt->bind_param("si", $display, $id);\r
440         $result = $stmt->execute();\r
441         $stmt->close();\r
442         return $result;\r
443 }\r
444 \r
445 //Update a user's email\r
446 function updateEmail($id, $email)\r
447 {\r
448         global $mysqli,$db_table_prefix;\r
449         $stmt = $mysqli->prepare("UPDATE ".$db_table_prefix."users\r
450                 SET \r
451                 email = ?\r
452                 WHERE\r
453                 id = ?");\r
454         $stmt->bind_param("si", $email, $id);\r
455         $result = $stmt->execute();\r
456         $stmt->close(); \r
457         return $result;\r
458 }\r
459 \r
460 //Input new activation token, and update the time of the most recent activation request\r
461 function updateLastActivationRequest($new_activation_token,$username,$email)\r
462 {\r
463         global $mysqli,$db_table_prefix;        \r
464         $stmt = $mysqli->prepare("UPDATE ".$db_table_prefix."users\r
465                 SET activation_token = ?,\r
466                 last_activation_request = ?\r
467                 WHERE email = ?\r
468                 AND\r
469                 user_name = ?");\r
470         $stmt->bind_param("ssss", $new_activation_token, time(), $email, $username);\r
471         $result = $stmt->execute();\r
472         $stmt->close(); \r
473         return $result;\r
474 }\r
475 \r
476 //Generate a random password, and new token\r
477 function updatePasswordFromToken($pass,$token)\r
478 {\r
479         global $mysqli,$db_table_prefix;\r
480         $new_activation_token = generateActivationToken();\r
481         $stmt = $mysqli->prepare("UPDATE ".$db_table_prefix."users\r
482                 SET password = ?,\r
483                 activation_token = ?\r
484                 WHERE\r
485                 activation_token = ?");\r
486         $stmt->bind_param("sss", $pass, $new_activation_token, $token);\r
487         $result = $stmt->execute();\r
488         $stmt->close(); \r
489         return $result;\r
490 }\r
491 \r
492 //Update a user's title\r
493 function updateTitle($id, $title)\r
494 {\r
495         global $mysqli,$db_table_prefix;\r
496         $stmt = $mysqli->prepare("UPDATE ".$db_table_prefix."users\r
497                 SET \r
498                 title = ?\r
499                 WHERE\r
500                 id = ?");\r
501         $stmt->bind_param("si", $title, $id);\r
502         $result = $stmt->execute();\r
503         $stmt->close(); \r
504         return $result; \r
505 }\r
506 \r
507 //Check if a user ID exists in the DB\r
508 function userIdExists($id)\r
509 {\r
510         global $mysqli,$db_table_prefix;\r
511         $stmt = $mysqli->prepare("SELECT active\r
512                 FROM ".$db_table_prefix."users\r
513                 WHERE\r
514                 id = ?\r
515                 LIMIT 1");\r
516         $stmt->bind_param("i", $id);    \r
517         $stmt->execute();\r
518         $stmt->store_result();\r
519         $num_returns = $stmt->num_rows;\r
520         $stmt->close();\r
521         \r
522         if ($num_returns > 0)\r
523         {\r
524                 return true;\r
525         }\r
526         else\r
527         {\r
528                 return false;   \r
529         }\r
530 }\r
531 \r
532 //Checks if a username exists in the DB\r
533 function usernameExists($username)\r
534 {\r
535         global $mysqli,$db_table_prefix;\r
536         $stmt = $mysqli->prepare("SELECT active\r
537                 FROM ".$db_table_prefix."users\r
538                 WHERE\r
539                 user_name = ?\r
540                 LIMIT 1");\r
541         $stmt->bind_param("s", $username);      \r
542         $stmt->execute();\r
543         $stmt->store_result();\r
544         $num_returns = $stmt->num_rows;\r
545         $stmt->close();\r
546         \r
547         if ($num_returns > 0)\r
548         {\r
549                 return true;\r
550         }\r
551         else\r
552         {\r
553                 return false;   \r
554         }\r
555 }\r
556 \r
557 //Check if activation token exists in DB\r
558 function validateActivationToken($token,$lostpass=NULL)\r
559 {\r
560         global $mysqli,$db_table_prefix;\r
561         if($lostpass == NULL) \r
562         {       \r
563                 $stmt = $mysqli->prepare("SELECT active\r
564                         FROM ".$db_table_prefix."users\r
565                         WHERE active = 0\r
566                         AND\r
567                         activation_token = ?\r
568                         LIMIT 1");\r
569         }\r
570         else \r
571         {\r
572                 $stmt = $mysqli->prepare("SELECT active\r
573                         FROM ".$db_table_prefix."users\r
574                         WHERE active = 1\r
575                         AND\r
576                         activation_token = ?\r
577                         AND\r
578                         lost_password_request = 1 \r
579                         LIMIT 1");\r
580         }\r
581         $stmt->bind_param("s", $token);\r
582         $stmt->execute();\r
583         $stmt->store_result();\r
584                 $num_returns = $stmt->num_rows;\r
585         $stmt->close();\r
586         \r
587         if ($num_returns > 0)\r
588         {\r
589                 return true;\r
590         }\r
591         else\r
592         {\r
593                 return false;   \r
594         }\r
595 }\r
596 \r
597 //Functions that interact mainly with .permissions table\r
598 //------------------------------------------------------------------------------\r
599 \r
600 //Create a permission level in DB\r
601 function createPermission($permission) {\r
602         global $mysqli,$db_table_prefix; \r
603         $stmt = $mysqli->prepare("INSERT INTO ".$db_table_prefix."permissions (\r
604                 name\r
605                 )\r
606                 VALUES (\r
607                 ?\r
608                 )");\r
609         $stmt->bind_param("s", $permission);\r
610         $result = $stmt->execute();\r
611         $stmt->close(); \r
612         return $result;\r
613 }\r
614 \r
615 //Delete a permission level from the DB\r
616 function deletePermission($permission) {\r
617         global $mysqli,$db_table_prefix,$errors; \r
618         $i = 0;\r
619         $stmt = $mysqli->prepare("DELETE FROM ".$db_table_prefix."permissions \r
620                 WHERE id = ?");\r
621         $stmt2 = $mysqli->prepare("DELETE FROM ".$db_table_prefix."user_permission_matches \r
622                 WHERE permission_id = ?");\r
623         $stmt3 = $mysqli->prepare("DELETE FROM ".$db_table_prefix."permission_page_matches \r
624                 WHERE permission_id = ?");\r
625         foreach($permission as $id){\r
626                 if ($id == 1){\r
627                         $errors[] = lang("CANNOT_DELETE_NEWUSERS");\r
628                 }\r
629                 elseif ($id == 2){\r
630                         $errors[] = lang("CANNOT_DELETE_ADMIN");\r
631                 }\r
632                 else{\r
633                         $stmt->bind_param("i", $id);\r
634                         $stmt->execute();\r
635                         $stmt2->bind_param("i", $id);\r
636                         $stmt2->execute();\r
637                         $stmt3->bind_param("i", $id);\r
638                         $stmt3->execute();\r
639                         $i++;\r
640                 }\r
641         }\r
642         $stmt->close();\r
643         $stmt2->close();\r
644         $stmt3->close();\r
645         return $i;\r
646 }\r
647 \r
648 //Retrieve information for all permission levels\r
649 function fetchAllPermissions()\r
650 {\r
651         global $mysqli,$db_table_prefix; \r
652         $stmt = $mysqli->prepare("SELECT \r
653                 id,\r
654                 name\r
655                 FROM ".$db_table_prefix."permissions");\r
656         $stmt->execute();\r
657         $stmt->bind_result($id, $name);\r
658         while ($stmt->fetch()){\r
659                 $row[] = array('id' => $id, 'name' => $name);\r
660         }\r
661         $stmt->close();\r
662         return ($row);\r
663 }\r
664 \r
665 //Retrieve information for a single permission level\r
666 function fetchPermissionDetails($id)\r
667 {\r
668         global $mysqli,$db_table_prefix; \r
669         $stmt = $mysqli->prepare("SELECT \r
670                 id,\r
671                 name\r
672                 FROM ".$db_table_prefix."permissions\r
673                 WHERE\r
674                 id = ?\r
675                 LIMIT 1");\r
676         $stmt->bind_param("i", $id);\r
677         $stmt->execute();\r
678         $stmt->bind_result($id, $name);\r
679         while ($stmt->fetch()){\r
680                 $row = array('id' => $id, 'name' => $name);\r
681         }\r
682         $stmt->close();\r
683         return ($row);\r
684 }\r
685 \r
686 //Check if a permission level ID exists in the DB\r
687 function permissionIdExists($id)\r
688 {\r
689         global $mysqli,$db_table_prefix;\r
690         $stmt = $mysqli->prepare("SELECT id\r
691                 FROM ".$db_table_prefix."permissions\r
692                 WHERE\r
693                 id = ?\r
694                 LIMIT 1");\r
695         $stmt->bind_param("i", $id);    \r
696         $stmt->execute();\r
697         $stmt->store_result();\r
698         $num_returns = $stmt->num_rows;\r
699         $stmt->close();\r
700         \r
701         if ($num_returns > 0)\r
702         {\r
703                 return true;\r
704         }\r
705         else\r
706         {\r
707                 return false;   \r
708         }\r
709 }\r
710 \r
711 //Check if a permission level name exists in the DB\r
712 function permissionNameExists($permission)\r
713 {\r
714         global $mysqli,$db_table_prefix;\r
715         $stmt = $mysqli->prepare("SELECT id\r
716                 FROM ".$db_table_prefix."permissions\r
717                 WHERE\r
718                 name = ?\r
719                 LIMIT 1");\r
720         $stmt->bind_param("s", $permission);    \r
721         $stmt->execute();\r
722         $stmt->store_result();\r
723         $num_returns = $stmt->num_rows;\r
724         $stmt->close();\r
725         \r
726         if ($num_returns > 0)\r
727         {\r
728                 return true;\r
729         }\r
730         else\r
731         {\r
732                 return false;   \r
733         }\r
734 }\r
735 \r
736 //Change a permission level's name\r
737 function updatePermissionName($id, $name)\r
738 {\r
739         global $mysqli,$db_table_prefix;\r
740         $stmt = $mysqli->prepare("UPDATE ".$db_table_prefix."permissions\r
741                 SET name = ?\r
742                 WHERE\r
743                 id = ?\r
744                 LIMIT 1");\r
745         $stmt->bind_param("si", $name, $id);\r
746         $result = $stmt->execute();\r
747         $stmt->close(); \r
748         return $result; \r
749 }\r
750 \r
751 //Functions that interact mainly with .user_permission_matches table\r
752 //------------------------------------------------------------------------------\r
753 \r
754 //Match permission level(s) with user(s)\r
755 function addPermission($permission, $user) {\r
756         global $mysqli,$db_table_prefix; \r
757         $i = 0;\r
758         $stmt = $mysqli->prepare("INSERT INTO ".$db_table_prefix."user_permission_matches (\r
759                 permission_id,\r
760                 user_id\r
761                 )\r
762                 VALUES (\r
763                 ?,\r
764                 ?\r
765                 )");\r
766         if (is_array($permission)){\r
767                 foreach($permission as $id){\r
768                         $stmt->bind_param("ii", $id, $user);\r
769                         $stmt->execute();\r
770                         $i++;\r
771                 }\r
772         }\r
773         elseif (is_array($user)){\r
774                 foreach($user as $id){\r
775                         $stmt->bind_param("ii", $permission, $id);\r
776                         $stmt->execute();\r
777                         $i++;\r
778                 }\r
779         }\r
780         else {\r
781                 $stmt->bind_param("ii", $permission, $user);\r
782                 $stmt->execute();\r
783                 $i++;\r
784         }\r
785         $stmt->close();\r
786         return $i;\r
787 }\r
788 \r
789 //Retrieve information for all user/permission level matches\r
790 function fetchAllMatches()\r
791 {\r
792         global $mysqli,$db_table_prefix; \r
793         $stmt = $mysqli->prepare("SELECT \r
794                 id,\r
795                 user_id,\r
796                 permission_id\r
797                 FROM ".$db_table_prefix."user_permission_matches");\r
798         $stmt->execute();\r
799         $stmt->bind_result($id, $user, $permission);\r
800         while ($stmt->fetch()){\r
801                 $row[] = array('id' => $id, 'user_id' => $user, 'permission_id' => $permission);\r
802         }\r
803         $stmt->close();\r
804         return ($row);  \r
805 }\r
806 \r
807 //Retrieve list of permission levels a user has\r
808 function fetchUserPermissions($user_id)\r
809 {\r
810         global $mysqli,$db_table_prefix; \r
811         $stmt = $mysqli->prepare("SELECT\r
812                 id,\r
813                 permission_id\r
814                 FROM ".$db_table_prefix."user_permission_matches\r
815                 WHERE user_id = ?\r
816                 ");\r
817         $stmt->bind_param("i", $user_id);       \r
818         $stmt->execute();\r
819         $stmt->bind_result($id, $permission);\r
820         while ($stmt->fetch()){\r
821                 $row[$permission] = array('id' => $id, 'permission_id' => $permission);\r
822         }\r
823         $stmt->close();\r
824         if (isset($row)){\r
825                 return ($row);\r
826         }\r
827 }\r
828 \r
829 //Retrieve list of users who have a permission level\r
830 function fetchPermissionUsers($permission_id)\r
831 {\r
832         global $mysqli,$db_table_prefix; \r
833         $stmt = $mysqli->prepare("SELECT id, user_id\r
834                 FROM ".$db_table_prefix."user_permission_matches\r
835                 WHERE permission_id = ?\r
836                 ");\r
837         $stmt->bind_param("i", $permission_id); \r
838         $stmt->execute();\r
839         $stmt->bind_result($id, $user);\r
840         while ($stmt->fetch()){\r
841                 $row[$user] = array('id' => $id, 'user_id' => $user);\r
842         }\r
843         $stmt->close();\r
844         if (isset($row)){\r
845                 return ($row);\r
846         }\r
847 }\r
848 \r
849 //Unmatch permission level(s) from user(s)\r
850 function removePermission($permission, $user) {\r
851         global $mysqli,$db_table_prefix; \r
852         $i = 0;\r
853         $stmt = $mysqli->prepare("DELETE FROM ".$db_table_prefix."user_permission_matches \r
854                 WHERE permission_id = ?\r
855                 AND user_id =?");\r
856         if (is_array($permission)){\r
857                 foreach($permission as $id){\r
858                         $stmt->bind_param("ii", $id, $user);\r
859                         $stmt->execute();\r
860                         $i++;\r
861                 }\r
862         }\r
863         elseif (is_array($user)){\r
864                 foreach($user as $id){\r
865                         $stmt->bind_param("ii", $permission, $id);\r
866                         $stmt->execute();\r
867                         $i++;\r
868                 }\r
869         }\r
870         else {\r
871                 $stmt->bind_param("ii", $permission, $user);\r
872                 $stmt->execute();\r
873                 $i++;\r
874         }\r
875         $stmt->close();\r
876         return $i;\r
877 }\r
878 \r
879 //Functions that interact mainly with .configuration table\r
880 //------------------------------------------------------------------------------\r
881 \r
882 //Update configuration table\r
883 function updateConfig($id, $value)\r
884 {\r
885         global $mysqli,$db_table_prefix;\r
886         $stmt = $mysqli->prepare("UPDATE ".$db_table_prefix."configuration\r
887                 SET \r
888                 value = ?\r
889                 WHERE\r
890                 id = ?");\r
891         foreach ($id as $cfg){\r
892                 $stmt->bind_param("si", $value[$cfg], $cfg);\r
893                 $stmt->execute();\r
894         }\r
895         $stmt->close(); \r
896 }\r
897 \r
898 //Functions that interact mainly with .pages table\r
899 //------------------------------------------------------------------------------\r
900 \r
901 //Add a page to the DB\r
902 function createPages($pages) {\r
903         global $mysqli,$db_table_prefix; \r
904         $stmt = $mysqli->prepare("INSERT INTO ".$db_table_prefix."pages (\r
905                 page\r
906                 )\r
907                 VALUES (\r
908                 ?\r
909                 )");\r
910         foreach($pages as $page){\r
911                 $stmt->bind_param("s", $page);\r
912                 $stmt->execute();\r
913         }\r
914         $stmt->close();\r
915 }\r
916 \r
917 //Delete a page from the DB\r
918 function deletePages($pages) {\r
919         global $mysqli,$db_table_prefix; \r
920         $stmt = $mysqli->prepare("DELETE FROM ".$db_table_prefix."pages \r
921                 WHERE id = ?");\r
922         $stmt2 = $mysqli->prepare("DELETE FROM ".$db_table_prefix."permission_page_matches \r
923                 WHERE page_id = ?");\r
924         foreach($pages as $id){\r
925                 $stmt->bind_param("i", $id);\r
926                 $stmt->execute();\r
927                 $stmt2->bind_param("i", $id);\r
928                 $stmt2->execute();\r
929         }\r
930         $stmt->close();\r
931         $stmt2->close();\r
932 }\r
933 \r
934 //Fetch information on all pages\r
935 function fetchAllPages()\r
936 {\r
937         global $mysqli,$db_table_prefix; \r
938         $stmt = $mysqli->prepare("SELECT \r
939                 id,\r
940                 page,\r
941                 private\r
942                 FROM ".$db_table_prefix."pages");\r
943         $stmt->execute();\r
944         $stmt->bind_result($id, $page, $private);\r
945         while ($stmt->fetch()){\r
946                 $row[$page] = array('id' => $id, 'page' => $page, 'private' => $private);\r
947         }\r
948         $stmt->close();\r
949         if (isset($row)){\r
950                 return ($row);\r
951         }\r
952 }\r
953 \r
954 //Fetch information for a specific page\r
955 function fetchPageDetails($id)\r
956 {\r
957         global $mysqli,$db_table_prefix; \r
958         $stmt = $mysqli->prepare("SELECT \r
959                 id,\r
960                 page,\r
961                 private\r
962                 FROM ".$db_table_prefix."pages\r
963                 WHERE\r
964                 id = ?\r
965                 LIMIT 1");\r
966         $stmt->bind_param("i", $id);\r
967         $stmt->execute();\r
968         $stmt->bind_result($id, $page, $private);\r
969         while ($stmt->fetch()){\r
970                 $row = array('id' => $id, 'page' => $page, 'private' => $private);\r
971         }\r
972         $stmt->close();\r
973         return ($row);\r
974 }\r
975 \r
976 //Check if a page ID exists\r
977 function pageIdExists($id)\r
978 {\r
979         global $mysqli,$db_table_prefix;\r
980         $stmt = $mysqli->prepare("SELECT private\r
981                 FROM ".$db_table_prefix."pages\r
982                 WHERE\r
983                 id = ?\r
984                 LIMIT 1");\r
985         $stmt->bind_param("i", $id);    \r
986         $stmt->execute();\r
987         $stmt->store_result();  \r
988         $num_returns = $stmt->num_rows;\r
989         $stmt->close();\r
990         \r
991         if ($num_returns > 0)\r
992         {\r
993                 return true;\r
994         }\r
995         else\r
996         {\r
997                 return false;   \r
998         }\r
999 }\r
1000 \r
1001 //Toggle private/public setting of a page\r
1002 function updatePrivate($id, $private)\r
1003 {\r
1004         global $mysqli,$db_table_prefix;\r
1005         $stmt = $mysqli->prepare("UPDATE ".$db_table_prefix."pages\r
1006                 SET \r
1007                 private = ?\r
1008                 WHERE\r
1009                 id = ?");\r
1010         $stmt->bind_param("ii", $private, $id);\r
1011         $result = $stmt->execute();\r
1012         $stmt->close(); \r
1013         return $result; \r
1014 }\r
1015 \r
1016 //Functions that interact mainly with .permission_page_matches table\r
1017 //------------------------------------------------------------------------------\r
1018 \r
1019 //Match permission level(s) with page(s)\r
1020 function addPage($page, $permission) {\r
1021         global $mysqli,$db_table_prefix; \r
1022         $i = 0;\r
1023         $stmt = $mysqli->prepare("INSERT INTO ".$db_table_prefix."permission_page_matches (\r
1024                 permission_id,\r
1025                 page_id\r
1026                 )\r
1027                 VALUES (\r
1028                 ?,\r
1029                 ?\r
1030                 )");\r
1031         if (is_array($permission)){\r
1032                 foreach($permission as $id){\r
1033                         $stmt->bind_param("ii", $id, $page);\r
1034                         $stmt->execute();\r
1035                         $i++;\r
1036                 }\r
1037         }\r
1038         elseif (is_array($page)){\r
1039                 foreach($page as $id){\r
1040                         $stmt->bind_param("ii", $permission, $id);\r
1041                         $stmt->execute();\r
1042                         $i++;\r
1043                 }\r
1044         }\r
1045         else {\r
1046                 $stmt->bind_param("ii", $permission, $page);\r
1047                 $stmt->execute();\r
1048                 $i++;\r
1049         }\r
1050         $stmt->close();\r
1051         return $i;\r
1052 }\r
1053 \r
1054 //Retrieve list of permission levels that can access a page\r
1055 function fetchPagePermissions($page_id)\r
1056 {\r
1057         global $mysqli,$db_table_prefix; \r
1058         $stmt = $mysqli->prepare("SELECT\r
1059                 id,\r
1060                 permission_id\r
1061                 FROM ".$db_table_prefix."permission_page_matches\r
1062                 WHERE page_id = ?\r
1063                 ");\r
1064         $stmt->bind_param("i", $page_id);       \r
1065         $stmt->execute();\r
1066         $stmt->bind_result($id, $permission);\r
1067         while ($stmt->fetch()){\r
1068                 $row[$permission] = array('id' => $id, 'permission_id' => $permission);\r
1069         }\r
1070         $stmt->close();\r
1071         if (isset($row)){\r
1072                 return ($row);\r
1073         }\r
1074 }\r
1075 \r
1076 //Retrieve list of pages that a permission level can access\r
1077 function fetchPermissionPages($permission_id)\r
1078 {\r
1079         global $mysqli,$db_table_prefix; \r
1080         $stmt = $mysqli->prepare("SELECT\r
1081                 id,\r
1082                 page_id\r
1083                 FROM ".$db_table_prefix."permission_page_matches\r
1084                 WHERE permission_id = ?\r
1085                 ");\r
1086         $stmt->bind_param("i", $permission_id); \r
1087         $stmt->execute();\r
1088         $stmt->bind_result($id, $page);\r
1089         while ($stmt->fetch()){\r
1090                 $row[$page] = array('id' => $id, 'permission_id' => $page);\r
1091         }\r
1092         $stmt->close();\r
1093         if (isset($row)){\r
1094                 return ($row);\r
1095         }\r
1096 }\r
1097 \r
1098 //Unmatched permission and page\r
1099 function removePage($page, $permission) {\r
1100         global $mysqli,$db_table_prefix; \r
1101         $i = 0;\r
1102         $stmt = $mysqli->prepare("DELETE FROM ".$db_table_prefix."permission_page_matches \r
1103                 WHERE page_id = ?\r
1104                 AND permission_id =?");\r
1105         if (is_array($page)){\r
1106                 foreach($page as $id){\r
1107                         $stmt->bind_param("ii", $id, $permission);\r
1108                         $stmt->execute();\r
1109                         $i++;\r
1110                 }\r
1111         }\r
1112         elseif (is_array($permission)){\r
1113                 foreach($permission as $id){\r
1114                         $stmt->bind_param("ii", $page, $id);\r
1115                         $stmt->execute();\r
1116                         $i++;\r
1117                 }\r
1118         }\r
1119         else {\r
1120                 $stmt->bind_param("ii", $permission, $user);\r
1121                 $stmt->execute();\r
1122                 $i++;\r
1123         }\r
1124         $stmt->close();\r
1125         return $i;\r
1126 }\r
1127 \r
1128 //Check if a user has access to a page\r
1129 function securePage($uri){\r
1130         \r
1131         //Separate document name from uri\r
1132         $tokens = explode('/', $uri);\r
1133         $page = $tokens[sizeof($tokens)-1];\r
1134         global $mysqli,$db_table_prefix,$loggedInUser;\r
1135         //retrieve page details\r
1136         $stmt = $mysqli->prepare("SELECT \r
1137                 id,\r
1138                 page,\r
1139                 private\r
1140                 FROM ".$db_table_prefix."pages\r
1141                 WHERE\r
1142                 page = ?\r
1143                 LIMIT 1");\r
1144         $stmt->bind_param("s", $page);\r
1145         $stmt->execute();\r
1146         $stmt->bind_result($id, $page, $private);\r
1147         while ($stmt->fetch()){\r
1148                 $pageDetails = array('id' => $id, 'page' => $page, 'private' => $private);\r
1149         }\r
1150         $stmt->close();\r
1151         //If page does not exist in DB, allow access\r
1152         if (empty($pageDetails)){\r
1153                 return true;\r
1154         }\r
1155         //If page is public, allow access\r
1156         elseif ($pageDetails['private'] == 0) {\r
1157                 return true;    \r
1158         }\r
1159         //If user is not logged in, deny access\r
1160         elseif(!isUserLoggedIn()) \r
1161         {\r
1162                 header("Location: login.php");\r
1163                 return false;\r
1164         }\r
1165         else {\r
1166                 //Retrieve list of permission levels with access to page\r
1167                 $stmt = $mysqli->prepare("SELECT\r
1168                         permission_id\r
1169                         FROM ".$db_table_prefix."permission_page_matches\r
1170                         WHERE page_id = ?\r
1171                         ");\r
1172                 $stmt->bind_param("i", $pageDetails['id']);     \r
1173                 $stmt->execute();\r
1174                 $stmt->bind_result($permission);\r
1175                 while ($stmt->fetch()){\r
1176                         $pagePermissions[] = $permission;\r
1177                 }\r
1178                 $stmt->close();\r
1179                 //Check if user's permission levels allow access to page\r
1180                 if ($loggedInUser->checkPermission($pagePermissions)){ \r
1181                         return true;\r
1182                 }\r
1183                 //Grant access if master user\r
1184                 elseif ($loggedInUser->user_id == $master_account){\r
1185                         return true;\r
1186                 }\r
1187                 else {\r
1188                         header("Location: account.php");\r
1189                         return false;   \r
1190                 }\r
1191         }\r
1192 }\r
1193 \r
1194 ?>\r

UCC git Repository :: git.ucc.asn.au