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

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