9eb69b801d9e83f2176be26b00c61cf4d3888b7d
[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='result' class='fail'>";\r
158     \r
159                 foreach($errors as $error)\r
160                 {\r
161                         echo "<p>".$error."</p>";\r
162                 }\r
163                 echo "</div>";\r
164         }\r
165         //Success block\r
166         if(count($successes) > 0)\r
167         {\r
168                 echo "<div id='success'>\r
169                 <a href='#' onclick=\"showHide('success');\">[X]</a>\r
170                 <ul>";\r
171                 foreach($successes as $success)\r
172                 {\r
173                         echo "<li>".$success."</li>";\r
174                 }\r
175                 echo "</ul>";\r
176                 echo "</div>";\r
177         }\r
178 }\r
179 \r
180 function notificationBlock($errors, $successes) {\r
181   if (count($errors) > 0 || count($successes) > 0)\r
182   {\r
183     echo '\r
184           <div class="widget dismiss-container">\r
185             <div class="dismiss right">\r
186               <a href="#">Dismiss</a>\r
187             </div>\r
188             \r
189             <div class="title large">Notifications</div>\r
190     ';\r
191     \r
192     foreach ($errors as $error)\r
193     {\r
194       echo '<p class="fail">'.$error.'</p>';\r
195     }\r
196     \r
197     foreach ($successes as $success)\r
198     {\r
199       echo '<p>'.$success.'</p>';\r
200     }\r
201     \r
202     echo '\r
203           </div>\r
204           <script type="text/javascript">\r
205             $(".dismiss").click(function() {\r
206               $(".dismiss-container").css("display", "none");\r
207             })\r
208           </script>\r
209     ';\r
210   }\r
211 }\r
212 \r
213 //Completely sanitizes text\r
214 function sanitize($str)\r
215 {\r
216         return strtolower(strip_tags(trim(($str))));\r
217 }\r
218 \r
219 //Functions that interact mainly with .users table\r
220 //------------------------------------------------------------------------------\r
221 \r
222 //Delete a defined array of users\r
223 function deleteUsers($users) {\r
224         global $mysqli,$db_table_prefix; \r
225         $i = 0;\r
226         $stmt = $mysqli->prepare("DELETE FROM ".$db_table_prefix."users \r
227                 WHERE id = ?");\r
228         $stmt2 = $mysqli->prepare("DELETE FROM ".$db_table_prefix."user_permission_matches \r
229                 WHERE user_id = ?");\r
230         foreach($users as $id){\r
231                 $stmt->bind_param("i", $id);\r
232                 $stmt->execute();\r
233                 $stmt2->bind_param("i", $id);\r
234                 $stmt2->execute();\r
235                 $i++;\r
236         }\r
237         $stmt->close();\r
238         $stmt2->close();\r
239         return $i;\r
240 }\r
241 \r
242 //Check if a display name exists in the DB\r
243 function displayNameExists($displayname)\r
244 {\r
245         global $mysqli,$db_table_prefix;\r
246         $stmt = $mysqli->prepare("SELECT active\r
247                 FROM ".$db_table_prefix."users\r
248                 WHERE\r
249                 display_name = ?\r
250                 LIMIT 1");\r
251         $stmt->bind_param("s", $displayname);   \r
252         $stmt->execute();\r
253         $stmt->store_result();\r
254         $num_returns = $stmt->num_rows;\r
255         $stmt->close();\r
256         \r
257         if ($num_returns > 0)\r
258         {\r
259                 return true;\r
260         }\r
261         else\r
262         {\r
263                 return false;   \r
264         }\r
265 }\r
266 \r
267 //Check if an email exists in the DB\r
268 function emailExists($email)\r
269 {\r
270         global $mysqli,$db_table_prefix;\r
271         $stmt = $mysqli->prepare("SELECT active\r
272                 FROM ".$db_table_prefix."users\r
273                 WHERE\r
274                 email = ?\r
275                 LIMIT 1");\r
276         $stmt->bind_param("s", $email); \r
277         $stmt->execute();\r
278         $stmt->store_result();\r
279         $num_returns = $stmt->num_rows;\r
280         $stmt->close();\r
281         \r
282         if ($num_returns > 0)\r
283         {\r
284                 return true;\r
285         }\r
286         else\r
287         {\r
288                 return false;   \r
289         }\r
290 }\r
291 \r
292 //Check if a user name and email belong to the same user\r
293 function emailUsernameLinked($email,$username)\r
294 {\r
295         global $mysqli,$db_table_prefix;\r
296         $stmt = $mysqli->prepare("SELECT active\r
297                 FROM ".$db_table_prefix."users\r
298                 WHERE user_name = ?\r
299                 AND\r
300                 email = ?\r
301                 LIMIT 1\r
302                 ");\r
303         $stmt->bind_param("ss", $username, $email);     \r
304         $stmt->execute();\r
305         $stmt->store_result();\r
306         $num_returns = $stmt->num_rows;\r
307         $stmt->close();\r
308         \r
309         if ($num_returns > 0)\r
310         {\r
311                 return true;\r
312         }\r
313         else\r
314         {\r
315                 return false;   \r
316         }\r
317 }\r
318 \r
319 function permissionNameToId($permission)\r
320 {\r
321         global $mysqli,$db_table_prefix;\r
322         $stmt = $mysqli->prepare("SELECT id\r
323                 FROM ".$db_table_prefix."permissions\r
324                 WHERE\r
325                 name = ?\r
326                 LIMIT 1");\r
327         $stmt->bind_param("s", $permission);    \r
328         $stmt->execute();\r
329         $stmt->bind_result($id);\r
330   \r
331   while ($stmt->fetch()){\r
332                 $perm_id = $id;\r
333   }\r
334         $stmt->close();\r
335         \r
336   return $perm_id;\r
337 }\r
338 \r
339 function fetchAllUsersWithPerm($perm_name)\r
340 {\r
341         global $mysqli,$db_table_prefix; \r
342   \r
343   $perm_id = permissionNameToId($perm_name);\r
344         $stmt = $mysqli->prepare("SELECT \r
345                 p1.id\r
346                 FROM ".$db_table_prefix."users p1\r
347     WHERE EXISTS (SELECT * FROM ".$db_table_prefix."user_permission_matches\r
348                  WHERE user_id=p1.id AND permission_id=?)"\r
349   );\r
350   $stmt->bind_param("i", $perm_id); \r
351         $stmt->execute();\r
352         $stmt->bind_result($id);\r
353         \r
354         while ($stmt->fetch()){\r
355                 $row[] = $id;\r
356         }\r
357         $stmt->close();\r
358         return ($row);\r
359 }\r
360 \r
361 function fetchAllUsersWithoutPerm($perm_name)\r
362 {\r
363         global $mysqli,$db_table_prefix; \r
364   \r
365   $perm_id = permissionNameToId($perm_name);\r
366         $stmt = $mysqli->prepare("SELECT \r
367                 p1.id\r
368                 FROM ".$db_table_prefix."users p1\r
369     WHERE NOT EXISTS (SELECT * FROM ".$db_table_prefix."user_permission_matches\r
370                  WHERE user_id=p1.id AND permission_id=?)"\r
371   );\r
372   $stmt->bind_param("i", $perm_id); \r
373         $stmt->execute();\r
374         $stmt->bind_result($id);\r
375         \r
376         while ($stmt->fetch()){\r
377                 $row[] = $id;\r
378         }\r
379         $stmt->close();\r
380         return ($row);\r
381 }\r
382 \r
383 //Retrieve information for all users\r
384 function fetchAllUsers()\r
385 {\r
386         global $mysqli,$db_table_prefix; \r
387         $stmt = $mysqli->prepare("SELECT \r
388                 id,\r
389                 user_name,\r
390                 display_name,\r
391                 password,\r
392                 email,\r
393                 activation_token,\r
394                 last_activation_request,\r
395                 lost_password_request,\r
396                 active,\r
397                 title,\r
398                 sign_up_stamp,\r
399                 last_sign_in_stamp\r
400                 FROM ".$db_table_prefix."users");\r
401         $stmt->execute();\r
402         $stmt->bind_result($id, $user, $display, $password, $email, $token, $activationRequest, $passwordRequest, $active, $title, $signUp, $signIn);\r
403         \r
404         while ($stmt->fetch()){\r
405                 $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
406         }\r
407         $stmt->close();\r
408         return ($row);\r
409 }\r
410 \r
411 //Yeah usercake... Fetches the user id from username\r
412 function fetchUserId($username)\r
413 {\r
414   global $mysqli,$db_table_prefix; \r
415   $stmt = $mysqli->prepare("SELECT \r
416                 id\r
417                 FROM ".$db_table_prefix."users\r
418                 WHERE\r
419                 user_name = ?\r
420                 LIMIT 1");\r
421                 $stmt->bind_param("s", $username);\r
422         \r
423         $stmt->execute();\r
424         $stmt->bind_result($id);\r
425         while ($stmt->fetch()){\r
426                 $user_id = $id;\r
427         }\r
428         $stmt->close();\r
429         return $user_id;\r
430 }\r
431 \r
432 //Retrieve complete user information by username, token or ID\r
433 function fetchUserDetails($username=NULL,$token=NULL, $id=NULL)\r
434 {\r
435         if($username!=NULL) {\r
436                 $column = "user_name";\r
437                 $data = $username;\r
438         }\r
439         elseif($token!=NULL) {\r
440                 $column = "activation_token";\r
441                 $data = $token;\r
442         }\r
443         elseif($id!=NULL) {\r
444                 $column = "id";\r
445                 $data = $id;\r
446         }\r
447         global $mysqli,$db_table_prefix; \r
448         $stmt = $mysqli->prepare("SELECT \r
449                 id,\r
450                 user_name,\r
451                 display_name,\r
452                 password,\r
453                 email,\r
454                 activation_token,\r
455                 last_activation_request,\r
456                 lost_password_request,\r
457                 active,\r
458                 title,\r
459                 sign_up_stamp,\r
460                 last_sign_in_stamp\r
461                 FROM ".$db_table_prefix."users\r
462                 WHERE\r
463                 $column = ?\r
464                 LIMIT 1");\r
465                 $stmt->bind_param("s", $data);\r
466         \r
467         $stmt->execute();\r
468         $stmt->bind_result($id, $user, $display, $password, $email, $token, $activationRequest, $passwordRequest, $active, $title, $signUp, $signIn);\r
469         while ($stmt->fetch()){\r
470                 $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
471         }\r
472         $stmt->close();\r
473         return ($row);\r
474 }\r
475 \r
476 //Toggle if lost password request flag on or off\r
477 function flagLostPasswordRequest($username,$value)\r
478 {\r
479         global $mysqli,$db_table_prefix;\r
480         $stmt = $mysqli->prepare("UPDATE ".$db_table_prefix."users\r
481                 SET lost_password_request = ?\r
482                 WHERE\r
483                 user_name = ?\r
484                 LIMIT 1\r
485                 ");\r
486         $stmt->bind_param("ss", $value, $username);\r
487         $result = $stmt->execute();\r
488         $stmt->close();\r
489         return $result;\r
490 }\r
491 \r
492 //Check if a user is logged in\r
493 function isUserLoggedIn()\r
494 {\r
495         global $loggedInUser,$mysqli,$db_table_prefix;\r
496         $stmt = $mysqli->prepare("SELECT \r
497                 id,\r
498                 password\r
499                 FROM ".$db_table_prefix."users\r
500                 WHERE\r
501                 id = ?\r
502                 AND \r
503                 password = ? \r
504                 AND\r
505                 active = 1\r
506                 LIMIT 1");\r
507         $stmt->bind_param("is", $loggedInUser->user_id, $loggedInUser->hash_pw);        \r
508         $stmt->execute();\r
509         $stmt->store_result();\r
510         $num_returns = $stmt->num_rows;\r
511         $stmt->close();\r
512         \r
513         if($loggedInUser == NULL)\r
514         {\r
515                 return false;\r
516         }\r
517         else\r
518         {\r
519                 if ($num_returns > 0)\r
520                 {\r
521                         return true;\r
522                 }\r
523                 else\r
524                 {\r
525                         destroySession("userCakeUser");\r
526                         return false;   \r
527                 }\r
528         }\r
529 }\r
530 \r
531 //Change a user from inactive to active\r
532 function setUserActive($token)\r
533 {\r
534         global $mysqli,$db_table_prefix;\r
535         $stmt = $mysqli->prepare("UPDATE ".$db_table_prefix."users\r
536                 SET active = 1\r
537                 WHERE\r
538                 activation_token = ?\r
539                 LIMIT 1");\r
540         $stmt->bind_param("s", $token);\r
541         $result = $stmt->execute();\r
542         $stmt->close(); \r
543         return $result;\r
544 }\r
545 \r
546 //Change a user's display name\r
547 function updateDisplayName($id, $display)\r
548 {\r
549         global $mysqli,$db_table_prefix;\r
550         $stmt = $mysqli->prepare("UPDATE ".$db_table_prefix."users\r
551                 SET display_name = ?\r
552                 WHERE\r
553                 id = ?\r
554                 LIMIT 1");\r
555         $stmt->bind_param("si", $display, $id);\r
556         $result = $stmt->execute();\r
557         $stmt->close();\r
558         return $result;\r
559 }\r
560 \r
561 //Update a user's email\r
562 function updateEmail($id, $email)\r
563 {\r
564         global $mysqli,$db_table_prefix;\r
565         $stmt = $mysqli->prepare("UPDATE ".$db_table_prefix."users\r
566                 SET \r
567                 email = ?\r
568                 WHERE\r
569                 id = ?");\r
570         $stmt->bind_param("si", $email, $id);\r
571         $result = $stmt->execute();\r
572         $stmt->close(); \r
573         return $result;\r
574 }\r
575 \r
576 //Input new activation token, and update the time of the most recent activation request\r
577 function updateLastActivationRequest($new_activation_token,$username,$email)\r
578 {\r
579         global $mysqli,$db_table_prefix;        \r
580         $stmt = $mysqli->prepare("UPDATE ".$db_table_prefix."users\r
581                 SET activation_token = ?,\r
582                 last_activation_request = ?\r
583                 WHERE email = ?\r
584                 AND\r
585                 user_name = ?");\r
586         $stmt->bind_param("ssss", $new_activation_token, time(), $email, $username);\r
587         $result = $stmt->execute();\r
588         $stmt->close(); \r
589         return $result;\r
590 }\r
591 \r
592 //Generate a random password, and new token\r
593 function updatePasswordFromToken($pass,$token)\r
594 {\r
595         global $mysqli,$db_table_prefix;\r
596         $new_activation_token = generateActivationToken();\r
597         $stmt = $mysqli->prepare("UPDATE ".$db_table_prefix."users\r
598                 SET password = ?,\r
599                 activation_token = ?\r
600                 WHERE\r
601                 activation_token = ?");\r
602         $stmt->bind_param("sss", $pass, $new_activation_token, $token);\r
603         $result = $stmt->execute();\r
604         $stmt->close(); \r
605         return $result;\r
606 }\r
607 \r
608 //Update a user's title\r
609 function updateTitle($id, $title)\r
610 {\r
611         global $mysqli,$db_table_prefix;\r
612         $stmt = $mysqli->prepare("UPDATE ".$db_table_prefix."users\r
613                 SET \r
614                 title = ?\r
615                 WHERE\r
616                 id = ?");\r
617         $stmt->bind_param("si", $title, $id);\r
618         $result = $stmt->execute();\r
619         $stmt->close(); \r
620         return $result; \r
621 }\r
622 \r
623 //Check if a user ID exists in the DB\r
624 function userIdExists($id)\r
625 {\r
626         global $mysqli,$db_table_prefix;\r
627         $stmt = $mysqli->prepare("SELECT active\r
628                 FROM ".$db_table_prefix."users\r
629                 WHERE\r
630                 id = ?\r
631                 LIMIT 1");\r
632         $stmt->bind_param("i", $id);    \r
633         $stmt->execute();\r
634         $stmt->store_result();\r
635         $num_returns = $stmt->num_rows;\r
636         $stmt->close();\r
637         \r
638         if ($num_returns > 0)\r
639         {\r
640                 return true;\r
641         }\r
642         else\r
643         {\r
644                 return false;   \r
645         }\r
646 }\r
647 \r
648 //Checks if a username exists in the DB\r
649 function usernameExists($username)\r
650 {\r
651         global $mysqli,$db_table_prefix;\r
652         $stmt = $mysqli->prepare("SELECT active\r
653                 FROM ".$db_table_prefix."users\r
654                 WHERE\r
655                 user_name = ?\r
656                 LIMIT 1");\r
657         $stmt->bind_param("s", $username);      \r
658         $stmt->execute();\r
659         $stmt->store_result();\r
660         $num_returns = $stmt->num_rows;\r
661         $stmt->close();\r
662         \r
663         if ($num_returns > 0)\r
664         {\r
665                 return true;\r
666         }\r
667         else\r
668         {\r
669                 return false;   \r
670         }\r
671 }\r
672 \r
673 //Check if activation token exists in DB\r
674 function validateActivationToken($token,$lostpass=NULL)\r
675 {\r
676         global $mysqli,$db_table_prefix;\r
677         if($lostpass == NULL) \r
678         {       \r
679                 $stmt = $mysqli->prepare("SELECT active\r
680                         FROM ".$db_table_prefix."users\r
681                         WHERE active = 0\r
682                         AND\r
683                         activation_token = ?\r
684                         LIMIT 1");\r
685         }\r
686         else \r
687         {\r
688                 $stmt = $mysqli->prepare("SELECT active\r
689                         FROM ".$db_table_prefix."users\r
690                         WHERE active = 1\r
691                         AND\r
692                         activation_token = ?\r
693                         AND\r
694                         lost_password_request = 1 \r
695                         LIMIT 1");\r
696         }\r
697         $stmt->bind_param("s", $token);\r
698         $stmt->execute();\r
699         $stmt->store_result();\r
700                 $num_returns = $stmt->num_rows;\r
701         $stmt->close();\r
702         \r
703         if ($num_returns > 0)\r
704         {\r
705                 return true;\r
706         }\r
707         else\r
708         {\r
709                 return false;   \r
710         }\r
711 }\r
712 \r
713 //Functions that interact mainly with .permissions table\r
714 //------------------------------------------------------------------------------\r
715 \r
716 //Create a permission level in DB\r
717 function createPermission($permission) {\r
718         global $mysqli,$db_table_prefix; \r
719         $stmt = $mysqli->prepare("INSERT INTO ".$db_table_prefix."permissions (\r
720                 name\r
721                 )\r
722                 VALUES (\r
723                 ?\r
724                 )");\r
725         $stmt->bind_param("s", $permission);\r
726         $result = $stmt->execute();\r
727         $stmt->close(); \r
728         return $result;\r
729 }\r
730 \r
731 //Delete a permission level from the DB\r
732 function deletePermission($permission) {\r
733         global $mysqli,$db_table_prefix,$errors; \r
734         $i = 0;\r
735         $stmt = $mysqli->prepare("DELETE FROM ".$db_table_prefix."permissions \r
736                 WHERE id = ?");\r
737         $stmt2 = $mysqli->prepare("DELETE FROM ".$db_table_prefix."user_permission_matches \r
738                 WHERE permission_id = ?");\r
739         $stmt3 = $mysqli->prepare("DELETE FROM ".$db_table_prefix."permission_page_matches \r
740                 WHERE permission_id = ?");\r
741         foreach($permission as $id){\r
742                 if ($id == 1){\r
743                         $errors[] = lang("CANNOT_DELETE_NEWUSERS");\r
744                 }\r
745                 elseif ($id == 2){\r
746                         $errors[] = lang("CANNOT_DELETE_ADMIN");\r
747                 }\r
748                 else{\r
749                         $stmt->bind_param("i", $id);\r
750                         $stmt->execute();\r
751                         $stmt2->bind_param("i", $id);\r
752                         $stmt2->execute();\r
753                         $stmt3->bind_param("i", $id);\r
754                         $stmt3->execute();\r
755                         $i++;\r
756                 }\r
757         }\r
758         $stmt->close();\r
759         $stmt2->close();\r
760         $stmt3->close();\r
761         return $i;\r
762 }\r
763 \r
764 //Retrieve information for all permission levels\r
765 function fetchAllPermissions()\r
766 {\r
767         global $mysqli,$db_table_prefix; \r
768         $stmt = $mysqli->prepare("SELECT \r
769                 id,\r
770                 name\r
771                 FROM ".$db_table_prefix."permissions");\r
772         $stmt->execute();\r
773         $stmt->bind_result($id, $name);\r
774         while ($stmt->fetch()){\r
775                 $row[] = array('id' => $id, 'name' => $name);\r
776         }\r
777         $stmt->close();\r
778         return ($row);\r
779 }\r
780 \r
781 //Retrieve information for a single permission level\r
782 function fetchPermissionDetails($id)\r
783 {\r
784         global $mysqli,$db_table_prefix; \r
785         $stmt = $mysqli->prepare("SELECT \r
786                 id,\r
787                 name\r
788                 FROM ".$db_table_prefix."permissions\r
789                 WHERE\r
790                 id = ?\r
791                 LIMIT 1");\r
792         $stmt->bind_param("i", $id);\r
793         $stmt->execute();\r
794         $stmt->bind_result($id, $name);\r
795         while ($stmt->fetch()){\r
796                 $row = array('id' => $id, 'name' => $name);\r
797         }\r
798         $stmt->close();\r
799         return ($row);\r
800 }\r
801 \r
802 //Check if a permission level ID exists in the DB\r
803 function permissionIdExists($id)\r
804 {\r
805         global $mysqli,$db_table_prefix;\r
806         $stmt = $mysqli->prepare("SELECT id\r
807                 FROM ".$db_table_prefix."permissions\r
808                 WHERE\r
809                 id = ?\r
810                 LIMIT 1");\r
811         $stmt->bind_param("i", $id);    \r
812         $stmt->execute();\r
813         $stmt->store_result();\r
814         $num_returns = $stmt->num_rows;\r
815         $stmt->close();\r
816         \r
817         if ($num_returns > 0)\r
818         {\r
819                 return true;\r
820         }\r
821         else\r
822         {\r
823                 return false;   \r
824         }\r
825 }\r
826 \r
827 //Check if a permission level name exists in the DB\r
828 function permissionNameExists($permission)\r
829 {\r
830         global $mysqli,$db_table_prefix;\r
831         $stmt = $mysqli->prepare("SELECT id\r
832                 FROM ".$db_table_prefix."permissions\r
833                 WHERE\r
834                 name = ?\r
835                 LIMIT 1");\r
836         $stmt->bind_param("s", $permission);    \r
837         $stmt->execute();\r
838         $stmt->store_result();\r
839         $num_returns = $stmt->num_rows;\r
840         $stmt->close();\r
841         \r
842         if ($num_returns > 0)\r
843         {\r
844                 return true;\r
845         }\r
846         else\r
847         {\r
848                 return false;   \r
849         }\r
850 }\r
851 \r
852 //Change a permission level's name\r
853 function updatePermissionName($id, $name)\r
854 {\r
855         global $mysqli,$db_table_prefix;\r
856         $stmt = $mysqli->prepare("UPDATE ".$db_table_prefix."permissions\r
857                 SET name = ?\r
858                 WHERE\r
859                 id = ?\r
860                 LIMIT 1");\r
861         $stmt->bind_param("si", $name, $id);\r
862         $result = $stmt->execute();\r
863         $stmt->close(); \r
864         return $result; \r
865 }\r
866 \r
867 //Functions that interact mainly with .user_permission_matches table\r
868 //------------------------------------------------------------------------------\r
869 \r
870 //Match permission level(s) with user(s)\r
871 function addPermission($permission, $user) {\r
872         global $mysqli,$db_table_prefix; \r
873         $i = 0;\r
874         $stmt = $mysqli->prepare("INSERT INTO ".$db_table_prefix."user_permission_matches (\r
875                 permission_id,\r
876                 user_id\r
877                 )\r
878                 VALUES (\r
879                 ?,\r
880                 ?\r
881                 )");\r
882         if (is_array($permission)){\r
883                 foreach($permission as $id){\r
884                         $stmt->bind_param("ii", $id, $user);\r
885                         $stmt->execute();\r
886                         $i++;\r
887                 }\r
888         }\r
889         elseif (is_array($user)){\r
890                 foreach($user as $id){\r
891                         $stmt->bind_param("ii", $permission, $id);\r
892                         $stmt->execute();\r
893                         $i++;\r
894                 }\r
895         }\r
896         else {\r
897                 $stmt->bind_param("ii", $permission, $user);\r
898                 $stmt->execute();\r
899                 $i++;\r
900         }\r
901         $stmt->close();\r
902         return $i;\r
903 }\r
904 \r
905 //Retrieve information for all user/permission level matches\r
906 function fetchAllMatches()\r
907 {\r
908         global $mysqli,$db_table_prefix; \r
909         $stmt = $mysqli->prepare("SELECT \r
910                 id,\r
911                 user_id,\r
912                 permission_id\r
913                 FROM ".$db_table_prefix."user_permission_matches");\r
914         $stmt->execute();\r
915         $stmt->bind_result($id, $user, $permission);\r
916         while ($stmt->fetch()){\r
917                 $row[] = array('id' => $id, 'user_id' => $user, 'permission_id' => $permission);\r
918         }\r
919         $stmt->close();\r
920         return ($row);  \r
921 }\r
922 \r
923 //Retrieve list of permission levels a user has\r
924 function fetchUserPermissions($user_id)\r
925 {\r
926         global $mysqli,$db_table_prefix; \r
927         $stmt = $mysqli->prepare("SELECT\r
928                 id,\r
929                 permission_id\r
930                 FROM ".$db_table_prefix."user_permission_matches\r
931                 WHERE user_id = ?\r
932                 ");\r
933         $stmt->bind_param("i", $user_id);       \r
934         $stmt->execute();\r
935         $stmt->bind_result($id, $permission);\r
936         while ($stmt->fetch()){\r
937                 $row[$permission] = array('id' => $id, 'permission_id' => $permission);\r
938         }\r
939         $stmt->close();\r
940         if (isset($row)){\r
941                 return ($row);\r
942         }\r
943 }\r
944 \r
945 //Retrieve list of users who have a permission level\r
946 function fetchPermissionUsers($permission_id)\r
947 {\r
948         global $mysqli,$db_table_prefix; \r
949         $stmt = $mysqli->prepare("SELECT id, user_id\r
950                 FROM ".$db_table_prefix."user_permission_matches\r
951                 WHERE permission_id = ?\r
952                 ");\r
953         $stmt->bind_param("i", $permission_id); \r
954         $stmt->execute();\r
955         $stmt->bind_result($id, $user);\r
956         while ($stmt->fetch()){\r
957                 $row[$user] = array('id' => $id, 'user_id' => $user);\r
958         }\r
959         $stmt->close();\r
960         if (isset($row)){\r
961                 return ($row);\r
962         }\r
963 }\r
964 \r
965 //Unmatch permission level(s) from user(s)\r
966 function removePermission($permission, $user) {\r
967         global $mysqli,$db_table_prefix; \r
968         $i = 0;\r
969         $stmt = $mysqli->prepare("DELETE FROM ".$db_table_prefix."user_permission_matches \r
970                 WHERE permission_id = ?\r
971                 AND user_id =?");\r
972         if (is_array($permission)){\r
973                 foreach($permission as $id){\r
974                         $stmt->bind_param("ii", $id, $user);\r
975                         $stmt->execute();\r
976                         $i++;\r
977                 }\r
978         }\r
979         elseif (is_array($user)){\r
980                 foreach($user as $id){\r
981                         $stmt->bind_param("ii", $permission, $id);\r
982                         $stmt->execute();\r
983                         $i++;\r
984                 }\r
985         }\r
986         else {\r
987                 $stmt->bind_param("ii", $permission, $user);\r
988                 $stmt->execute();\r
989                 $i++;\r
990         }\r
991         $stmt->close();\r
992         return $i;\r
993 }\r
994 \r
995 //Functions that interact mainly with .configuration table\r
996 //------------------------------------------------------------------------------\r
997 \r
998 //Update configuration table\r
999 function updateConfig($id, $value)\r
1000 {\r
1001         global $mysqli,$db_table_prefix;\r
1002         $stmt = $mysqli->prepare("UPDATE ".$db_table_prefix."configuration\r
1003                 SET \r
1004                 value = ?\r
1005                 WHERE\r
1006                 id = ?");\r
1007         foreach ($id as $cfg){\r
1008                 $stmt->bind_param("si", $value[$cfg], $cfg);\r
1009                 $stmt->execute();\r
1010         }\r
1011         $stmt->close(); \r
1012 }\r
1013 \r
1014 //Functions that interact mainly with .pages table\r
1015 //------------------------------------------------------------------------------\r
1016 \r
1017 //Add a page to the DB\r
1018 function createPages($pages) {\r
1019         global $mysqli,$db_table_prefix; \r
1020         $stmt = $mysqli->prepare("INSERT INTO ".$db_table_prefix."pages (\r
1021                 page\r
1022                 )\r
1023                 VALUES (\r
1024                 ?\r
1025                 )");\r
1026         foreach($pages as $page){\r
1027                 $stmt->bind_param("s", $page);\r
1028                 $stmt->execute();\r
1029         }\r
1030         $stmt->close();\r
1031 }\r
1032 \r
1033 //Delete a page from the DB\r
1034 function deletePages($pages) {\r
1035         global $mysqli,$db_table_prefix; \r
1036         $stmt = $mysqli->prepare("DELETE FROM ".$db_table_prefix."pages \r
1037                 WHERE id = ?");\r
1038         $stmt2 = $mysqli->prepare("DELETE FROM ".$db_table_prefix."permission_page_matches \r
1039                 WHERE page_id = ?");\r
1040         foreach($pages as $id){\r
1041                 $stmt->bind_param("i", $id);\r
1042                 $stmt->execute();\r
1043                 $stmt2->bind_param("i", $id);\r
1044                 $stmt2->execute();\r
1045         }\r
1046         $stmt->close();\r
1047         $stmt2->close();\r
1048 }\r
1049 \r
1050 //Fetch information on all pages\r
1051 function fetchAllPages()\r
1052 {\r
1053         global $mysqli,$db_table_prefix; \r
1054         $stmt = $mysqli->prepare("SELECT \r
1055                 id,\r
1056                 page,\r
1057                 private\r
1058                 FROM ".$db_table_prefix."pages");\r
1059         $stmt->execute();\r
1060         $stmt->bind_result($id, $page, $private);\r
1061         while ($stmt->fetch()){\r
1062                 $row[$page] = array('id' => $id, 'page' => $page, 'private' => $private);\r
1063         }\r
1064         $stmt->close();\r
1065         if (isset($row)){\r
1066                 return ($row);\r
1067         }\r
1068 }\r
1069 \r
1070 //Fetch information for a specific page\r
1071 function fetchPageDetails($id)\r
1072 {\r
1073         global $mysqli,$db_table_prefix; \r
1074         $stmt = $mysqli->prepare("SELECT \r
1075                 id,\r
1076                 page,\r
1077                 private\r
1078                 FROM ".$db_table_prefix."pages\r
1079                 WHERE\r
1080                 id = ?\r
1081                 LIMIT 1");\r
1082         $stmt->bind_param("i", $id);\r
1083         $stmt->execute();\r
1084         $stmt->bind_result($id, $page, $private);\r
1085         while ($stmt->fetch()){\r
1086                 $row = array('id' => $id, 'page' => $page, 'private' => $private);\r
1087         }\r
1088         $stmt->close();\r
1089         return ($row);\r
1090 }\r
1091 \r
1092 //Check if a page ID exists\r
1093 function pageIdExists($id)\r
1094 {\r
1095         global $mysqli,$db_table_prefix;\r
1096         $stmt = $mysqli->prepare("SELECT private\r
1097                 FROM ".$db_table_prefix."pages\r
1098                 WHERE\r
1099                 id = ?\r
1100                 LIMIT 1");\r
1101         $stmt->bind_param("i", $id);    \r
1102         $stmt->execute();\r
1103         $stmt->store_result();  \r
1104         $num_returns = $stmt->num_rows;\r
1105         $stmt->close();\r
1106         \r
1107         if ($num_returns > 0)\r
1108         {\r
1109                 return true;\r
1110         }\r
1111         else\r
1112         {\r
1113                 return false;   \r
1114         }\r
1115 }\r
1116 \r
1117 //Toggle private/public setting of a page\r
1118 function updatePrivate($id, $private)\r
1119 {\r
1120         global $mysqli,$db_table_prefix;\r
1121         $stmt = $mysqli->prepare("UPDATE ".$db_table_prefix."pages\r
1122                 SET \r
1123                 private = ?\r
1124                 WHERE\r
1125                 id = ?");\r
1126         $stmt->bind_param("ii", $private, $id);\r
1127         $result = $stmt->execute();\r
1128         $stmt->close(); \r
1129         return $result; \r
1130 }\r
1131 \r
1132 //Functions that interact mainly with .permission_page_matches table\r
1133 //------------------------------------------------------------------------------\r
1134 \r
1135 //Match permission level(s) with page(s)\r
1136 function addPage($page, $permission) {\r
1137         global $mysqli,$db_table_prefix; \r
1138         $i = 0;\r
1139         $stmt = $mysqli->prepare("INSERT INTO ".$db_table_prefix."permission_page_matches (\r
1140                 permission_id,\r
1141                 page_id\r
1142                 )\r
1143                 VALUES (\r
1144                 ?,\r
1145                 ?\r
1146                 )");\r
1147         if (is_array($permission)){\r
1148                 foreach($permission as $id){\r
1149                         $stmt->bind_param("ii", $id, $page);\r
1150                         $stmt->execute();\r
1151                         $i++;\r
1152                 }\r
1153         }\r
1154         elseif (is_array($page)){\r
1155                 foreach($page as $id){\r
1156                         $stmt->bind_param("ii", $permission, $id);\r
1157                         $stmt->execute();\r
1158                         $i++;\r
1159                 }\r
1160         }\r
1161         else {\r
1162                 $stmt->bind_param("ii", $permission, $page);\r
1163                 $stmt->execute();\r
1164                 $i++;\r
1165         }\r
1166         $stmt->close();\r
1167         return $i;\r
1168 }\r
1169 \r
1170 //Retrieve list of permission levels that can access a page\r
1171 function fetchPagePermissions($page_id)\r
1172 {\r
1173         global $mysqli,$db_table_prefix; \r
1174         $stmt = $mysqli->prepare("SELECT\r
1175                 id,\r
1176                 permission_id\r
1177                 FROM ".$db_table_prefix."permission_page_matches\r
1178                 WHERE page_id = ?\r
1179                 ");\r
1180         $stmt->bind_param("i", $page_id);       \r
1181         $stmt->execute();\r
1182         $stmt->bind_result($id, $permission);\r
1183         while ($stmt->fetch()){\r
1184                 $row[$permission] = array('id' => $id, 'permission_id' => $permission);\r
1185         }\r
1186         $stmt->close();\r
1187         if (isset($row)){\r
1188                 return ($row);\r
1189         }\r
1190 }\r
1191 \r
1192 //Retrieve list of pages that a permission level can access\r
1193 function fetchPermissionPages($permission_id)\r
1194 {\r
1195         global $mysqli,$db_table_prefix; \r
1196         $stmt = $mysqli->prepare("SELECT\r
1197                 id,\r
1198                 page_id\r
1199                 FROM ".$db_table_prefix."permission_page_matches\r
1200                 WHERE permission_id = ?\r
1201                 ");\r
1202         $stmt->bind_param("i", $permission_id); \r
1203         $stmt->execute();\r
1204         $stmt->bind_result($id, $page);\r
1205         while ($stmt->fetch()){\r
1206                 $row[$page] = array('id' => $id, 'permission_id' => $page);\r
1207         }\r
1208         $stmt->close();\r
1209         if (isset($row)){\r
1210                 return ($row);\r
1211         }\r
1212 }\r
1213 \r
1214 //Unmatched permission and page\r
1215 function removePage($page, $permission) {\r
1216         global $mysqli,$db_table_prefix; \r
1217         $i = 0;\r
1218         $stmt = $mysqli->prepare("DELETE FROM ".$db_table_prefix."permission_page_matches \r
1219                 WHERE page_id = ?\r
1220                 AND permission_id =?");\r
1221         if (is_array($page)){\r
1222                 foreach($page as $id){\r
1223                         $stmt->bind_param("ii", $id, $permission);\r
1224                         $stmt->execute();\r
1225                         $i++;\r
1226                 }\r
1227         }\r
1228         elseif (is_array($permission)){\r
1229                 foreach($permission as $id){\r
1230                         $stmt->bind_param("ii", $page, $id);\r
1231                         $stmt->execute();\r
1232                         $i++;\r
1233                 }\r
1234         }\r
1235         else {\r
1236                 $stmt->bind_param("ii", $permission, $user);\r
1237                 $stmt->execute();\r
1238                 $i++;\r
1239         }\r
1240         $stmt->close();\r
1241         return $i;\r
1242 }\r
1243 \r
1244 //Check if a user has access to a page\r
1245 function securePage($uri){\r
1246         \r
1247         //Separate document name from uri\r
1248         $tokens = explode('/', $uri);\r
1249         $page = $tokens[sizeof($tokens)-1];\r
1250         global $mysqli,$db_table_prefix,$loggedInUser;\r
1251         //retrieve page details\r
1252         $stmt = $mysqli->prepare("SELECT \r
1253                 id,\r
1254                 page,\r
1255                 private\r
1256                 FROM ".$db_table_prefix."pages\r
1257                 WHERE\r
1258                 page = ?\r
1259                 LIMIT 1");\r
1260         $stmt->bind_param("s", $page);\r
1261         $stmt->execute();\r
1262         $stmt->bind_result($id, $page, $private);\r
1263         while ($stmt->fetch()){\r
1264                 $pageDetails = array('id' => $id, 'page' => $page, 'private' => $private);\r
1265         }\r
1266         $stmt->close();\r
1267         //If page does not exist in DB, allow access\r
1268         if (empty($pageDetails)){\r
1269                 return true;\r
1270         }\r
1271         //If page is public, allow access\r
1272         elseif ($pageDetails['private'] == 0) {\r
1273                 return true;    \r
1274         }\r
1275         //If user is not logged in, deny access\r
1276         elseif(!isUserLoggedIn()) \r
1277         {\r
1278                 header("Location: login.php");\r
1279                 return false;\r
1280         }\r
1281         else {\r
1282                 //Retrieve list of permission levels with access to page\r
1283                 $stmt = $mysqli->prepare("SELECT\r
1284                         permission_id\r
1285                         FROM ".$db_table_prefix."permission_page_matches\r
1286                         WHERE page_id = ?\r
1287                         ");\r
1288                 $stmt->bind_param("i", $pageDetails['id']);     \r
1289                 $stmt->execute();\r
1290                 $stmt->bind_result($permission);\r
1291                 while ($stmt->fetch()){\r
1292                         $pagePermissions[] = $permission;\r
1293                 }\r
1294                 $stmt->close();\r
1295                 //Check if user's permission levels allow access to page\r
1296                 if ($loggedInUser->checkPermission($pagePermissions)){ \r
1297                         return true;\r
1298                 }\r
1299                 //Grant access if master user\r
1300                 elseif ($loggedInUser->user_id == $master_account){\r
1301                         return true;\r
1302                 }\r
1303                 else {\r
1304                         header("Location: index.php");\r
1305                         return false;   \r
1306                 }\r
1307         }\r
1308 }\r
1309 \r
1310 ?>\r

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