PageRenderTime 26ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/classes/RUCommon.php

https://bitbucket.org/mvdkleijn/registered_users
PHP | 312 lines | 232 code | 48 blank | 32 comment | 24 complexity | ad41665e070e2af47a2ee38f777fde02 MD5 | raw file
  1. <?php
  2. /**
  3. * This file is part of the "Registered Users" plugin for Wolf CMS.
  4. * Licensed under an MIT style license. For full details see license.txt.
  5. *
  6. * @author Andrew Waters <andrew@band-x.org>
  7. * @copyright Andrew Waters, 2009
  8. *
  9. */
  10. /*
  11. * Contains the following functions for the Front End :
  12. *
  13. * ru_register_page() Use this on the page you want to have for registrations eg mysite.com/register
  14. * ru_login_page() Use this on the page you want to have for logging in eg mysite.com/login
  15. * ru_confirm_page() This is the page a user clicks through to validate their account
  16. * ru_auth_required_page() Users who are not authorised to view the requested page will be redirected here
  17. * ru_reset_page() Will allow a user to have an email sent to them with a lnk to reset their password
  18. * ru_logout() A page to logout a user and return them to the hompage
  19. */
  20. class RUCommon {
  21. function __construct() {
  22. AuthUser::load();
  23. }
  24. function registered_users_page_found($page) {
  25. // function to check access levels here
  26. header('Location: '.URL_PUBLIC.'login');
  27. }
  28. function registered_users_access_page_checkbox($page) {
  29. $PDO = Record::getConnection();
  30. $page_id = $page->id;
  31. $permissions_list = "SELECT * FROM ".TABLE_PREFIX."permission";
  32. $permissions_list = $PDO->prepare($permissions_list);
  33. $permissions_list->execute();
  34. echo '<div style="clear:both;"></div><hr /><h2>Access:</h2>';
  35. while ($permission = $permissions_list->fetchObject()) {
  36. $id = $permission->id;
  37. $name = $permission->name;
  38. if ($id <= '3' ) {
  39. }
  40. else {
  41. echo '<input id="permission_'.$name.'" name="permission_'.$name.'" type="checkbox"';
  42. $permissions_check = "SELECT * FROM ".TABLE_PREFIX."permission_page WHERE page_id='$page_id'";
  43. $permissions_check = $PDO->prepare($permissions_check);
  44. $permissions_check->execute();
  45. while ($permissions_checked = $permissions_check->fetchObject()) {
  46. $page_permission = $permissions_checked->permission_id;
  47. if ($id == $page_permission) {
  48. echo 'checked';
  49. }
  50. }
  51. echo ' value="allowed"> <label>'.$name.'</label><br />';
  52. }
  53. }
  54. echo '<h3>&nbsp;</h3><hr /><h3>&nbsp;</h3>';
  55. }
  56. function registered_users_add_page_permissions($page) {
  57. $PDO = Record::getConnection();
  58. $page_id = $page->id;
  59. $permissions_list = "SELECT * FROM ".TABLE_PREFIX."permission";
  60. $permissions_list = $PDO->prepare($permissions_list);
  61. $permissions_list->execute();
  62. while ($permission = $permissions_list->fetchObject()) {
  63. $id = $permission->id;
  64. $name = $permission->name;
  65. if ($id <= '3' ) {
  66. }
  67. else {
  68. $permission = $_POST['permission_'.$name.''];
  69. if ($permission == 'allowed') {
  70. $add_page_permission = "INSERT INTO ".TABLE_PREFIX."permission_page VALUES ('".$page_id."','".$id."')";
  71. $add_page_permission = $PDO->prepare($add_page_permission);
  72. $add_page_permission->execute();
  73. }
  74. }
  75. }
  76. }
  77. function registered_users_edit_page_permissions($page) {
  78. $PDO = Record::getConnection();
  79. $page_id = $page->id;
  80. $permissions_list = "SELECT * FROM ".TABLE_PREFIX."permission";
  81. $permissions_list = $PDO->prepare($permissions_list);
  82. $permissions_list->execute();
  83. $delete_page_permission = "DELETE FROM ".TABLE_PREFIX."permission_page WHERE page_id = '$page_id'";
  84. $delete_page_permission = $PDO->prepare($delete_page_permission);
  85. $delete_page_permission->execute();
  86. while ($permission = $permissions_list->fetchObject()) {
  87. $id = $permission->id;
  88. $name = $permission->name;
  89. if ($id <= '3' ) {
  90. }
  91. else {
  92. $permission = $_POST['permission_'.$name.''];
  93. if ($permission == 'allowed') {
  94. $add_page_permission = "INSERT INTO ".TABLE_PREFIX."permission_page VALUES ('".$page_id."','".$id."')";
  95. $add_page_permission = $PDO->prepare($add_page_permission);
  96. $add_page_permission->execute();
  97. }
  98. }
  99. }
  100. }
  101. function registered_users_delete_page_permissions($page) {
  102. $PDO = Record::getConnection();
  103. $page_id = $page->id;
  104. $delete_page_permission = "DELETE FROM ".TABLE_PREFIX."permission_page WHERE page_id = '$page_id'";
  105. $delete_page_permission = $PDO->prepare($delete_page_permission);
  106. $delete_page_permission->execute();
  107. }
  108. public function resetpassword($email) {
  109. $settings = Plugin::getAllSettings("registered_users");
  110. $reset_pass_type = $settings['reset_pass_type'];
  111. $reset_pass_length = $settings['reset_pass_length'];
  112. $reset_password_subject = $settings['reset_password_subject'];
  113. $reset_password_from = $settings['reset_password_from'];
  114. $reset_email_body = $settings['reset_email_body'];
  115. $reset_email_confirmed = $settings['reset_email_confirmed'];
  116. $common = new RUCommon();
  117. $newpassword = $common->random_string($reset_pass_type, $reset_pass_length);
  118. $newpasswordencrypted = sha1($newpassword);
  119. $PDO = Record::getConnection();
  120. $updatepassword = "UPDATE ".TABLE_PREFIX."user SET password='".$newpasswordencrypted."' WHERE email='$email'";
  121. $updatepassword = $PDO->prepare($updatepassword);
  122. $updatepassword->execute();
  123. $subject = "$reset_password_subject";
  124. $headers = "From: $reset_password_from\r\nReply-To: no-reply";
  125. $message = ''.$reset_email_body.''.$newpassword.'' ;
  126. mail($email, $subject, $message, $headers);
  127. echo $reset_email_confirmed;
  128. }
  129. public function confirmation_email($email,$name) {
  130. $settings = Plugin::getAllSettings("registered_users");
  131. $PDO = Record::getConnection();
  132. $welcome_email_pt_head = $settings['welcome_email_pt'];
  133. $welcome_email_pt_foot = $settings['welcome_email_pt_foot'];
  134. $confirm_email_from = $settings['confirm_email_from'];
  135. $confirm_email_reply = $settings['confirm_email_reply'];
  136. $confirm_email_subject = $settings['confirm_email_subject'];
  137. $confirmation_page = $settings['confirmation_page'];
  138. $registration_settings = "SELECT * FROM ".TABLE_PREFIX."registered_users_temp WHERE email=:email";
  139. $stmt = $PDO->prepare($registration_settings);
  140. $stmt->execute(array("email" => $email));
  141. while ($row = $stmt->fetchObject()) {
  142. $rand_key = $row->rand_key; // Let's generate a Random Key that can be used to identify someone -> validate them
  143. }
  144. $subject = "$confirm_email_subject";
  145. $headers = "From: $confirm_email_from\r\nReply-To: $confirm_email_reply";
  146. $message = 'Hi '.$name.',
  147. '.$welcome_email_pt_head .'
  148. '.URL_PUBLIC . $confirmation_page. URL_SUFFIX.'?id='.$rand_key.'&email='.$email.'
  149. '. $welcome_email_pt_foot.'' ;
  150. mail($email, $subject, $message, $headers);
  151. }
  152. public function random_string($type, $len) {
  153. switch($type) {
  154. case 'alnum' :
  155. case 'numeric' :
  156. case 'nozero' :
  157. case 'alpha' :
  158. switch ($type) {
  159. case 'alnum' : $pool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  160. break;
  161. case 'alpha' : $pool = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  162. break;
  163. case 'numeric' : $pool = '0123456789';
  164. break;
  165. case 'nozero' : $pool = '123456789';
  166. break;
  167. }
  168. $str = '';
  169. for ($i=0; $i < $len; $i++) {
  170. $str .= substr($pool, mt_rand(0, strlen($pool) -1), 1);
  171. }
  172. return $str;
  173. break;
  174. case 'unique' : return md5(uniqid(mt_rand()));
  175. break;
  176. }
  177. }
  178. function numeric($str) {
  179. return ( ! ereg("^[0-9\.]+$", $str)) ? FALSE : TRUE;
  180. }
  181. function alpha_numeric($str) {
  182. return ( ! preg_match("/^([-a-z0-9])+$/i", $str)) ? FALSE : TRUE;
  183. }
  184. function validateaccount($email,$rand_key_confirm) {
  185. $rand_key = $rand_key_confirm;
  186. $PDO = Record::getConnection();
  187. $check_validated = "SELECT * FROM ".TABLE_PREFIX."user WHERE email='$email'";
  188. $result = $PDO->prepare($check_validated);
  189. $result->execute();
  190. $count = $result->rowCount();
  191. if ($count > 0) {
  192. $settings = Plugin::getAllSettings("registered_users");
  193. $met = $settings["message_error_technical"];
  194. $message_empty_name = $settings["message_empty_name"];
  195. $message_empty_email = $settings["message_empty_email"];
  196. $message_empty_username = $settings["message_empty_username"];
  197. $message_empty_password = $settings["message_empty_password"];
  198. $message_empty_password_confirm = $settings["message_empty_password_confirm"];
  199. $message_notvalid_password = $settings["message_notvalid_password"];
  200. $message_notvalid_username = $settings["message_notvalid_username"];
  201. $message_notvalid_email = $settings["message_notvalid_email"];
  202. $message_error_already_validated = $settings["message_error_already_validated"];
  203. echo $message_error_already_validated;
  204. }
  205. else {
  206. $today = date('Y-m-d G:i:s');
  207. $registration_temp = "SELECT * FROM ".TABLE_PREFIX."registered_users_temp WHERE email='$email'";
  208. foreach ($PDO->query($registration_temp) as $row) {
  209. $name = $row['name'];
  210. $email = $row['email'];
  211. $username = $row['username'];
  212. $password = $row['password'];
  213. $rand_key = $row['rand_key'];
  214. $reg_date = $row['reg_date'];
  215. $welcome_message = $row['welcome_message'];
  216. $message_notvalid_password = $row['message_notvalid_password'];
  217. }
  218. if ($rand_key_confirm == $rand_key) {
  219. // Let's transfer the user from the temp table to the user table
  220. //$update_user_table = "INSERT INTO ".TABLE_PREFIX."user (`id`,`name`,`email`,`username`,`password`,`created_on`,`updated_on`,`created_by_id`,`updated_by_id`) VALUES ('','$name','$email','$username','$password','$reg_date','$today','','');";
  221. //$stmt = $__CMS_CONN__->prepare($update_user_table);
  222. //$stmt->execute();
  223. $user = new User();
  224. $user->name = $name;
  225. $user->email = $email;
  226. $user->username = $username;
  227. $user->salt = AuthUser::generateSalt();
  228. $user->password = AuthUser::generateHashedPassword($password, $user->salt);
  229. $user->created_on = $reg_date;
  230. $user->updated_on = $today;
  231. $user->save();
  232. // We don't need them in the temp table anymore
  233. $delete_temp_user ="DELETE FROM ".TABLE_PREFIX."registered_users_temp WHERE email='$email'";
  234. $stmt = $PDO->prepare($delete_temp_user);
  235. $stmt->execute();
  236. // And let's make sure we have some permissions set so that user can then do something!
  237. // First we need the default permssion ID
  238. $def_permission = Plugin::getSetting("default_permissions", "registered_users");
  239. // Then we need the correct user ID
  240. /*$user = "SELECT * FROM ".TABLE_PREFIX."user WHERE email='$email'";
  241. foreach ($__CMS_CONN__->query($user) as $row) {
  242. $id = $row['id'];
  243. }*/
  244. $id = $user->id;
  245. $set_permissions ="INSERT INTO ".TABLE_PREFIX."user_role (`user_id`,`role_id`) VALUES ('$id','$permission_id');";
  246. $stmt = $PDO->prepare($set_permissions);
  247. $stmt->execute();
  248. // We also need to add the profile settings into DB
  249. $addprofile ="INSERT INTO ".TABLE_PREFIX."user_profile (`id`,`firstlogin`,`subscribe`,`sysnotifications`,`haspic`,`profile_blurb`) VALUES ($id,'1','1','1','0','your public profile...');";
  250. $addprofile = $PDO->prepare($addprofile);
  251. $addprofile->execute();
  252. echo $welcome_message;
  253. $loadloginclass = new RegisteredUser();
  254. $loadloginclass->login_page();
  255. }
  256. else {
  257. echo $message_notvalid_password;
  258. }
  259. }
  260. }
  261. }