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

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