PageRenderTime 58ms CodeModel.GetById 20ms RepoModel.GetById 1ms app.codeStats 0ms

/os-includes/ajax/user.php

https://github.com/meltingice/Osimo-Forum-System-v1
PHP | 381 lines | 326 code | 34 blank | 21 comment | 40 complexity | c25ac5e41ada54218e688882e1329d21 MD5 | raw file
  1. <?php
  2. /*
  3. * Osimo - next-generation forum system
  4. * Licensed under GPLv3 (GPL-LICENSE.txt)
  5. *
  6. * os-includes/ajax/user.php - ajax backend for user modification
  7. */
  8. session_start();
  9. include_once('../dbconnect.php'); //connects to database
  10. include_once('../paths.php');
  11. include_once('../osimo.php');
  12. $osimo = new Osimo(); //makes magic happen
  13. /* User profile related ajax backend */
  14. if(isset($_POST['section'])&&$_POST['section']=='info')
  15. {
  16. $args['birthday_day'] = $_POST['birthday_day'];
  17. $args['birthday_month'] = $_POST['birthday_month'];
  18. $args['birthday_year'] = $_POST['birthday_year'];
  19. $args['field_about'] = $_POST['field_about'];
  20. $args['field_interests'] = $_POST['field_interests'];
  21. $args['field_sex'] = $_POST['field_sex'];
  22. $args['field_website'] = $_POST['field_website'];
  23. updateProfile('info',$args);
  24. }
  25. if(isset($_POST['section'])&&$_POST['section']=='contact')
  26. {
  27. $args['field_aim'] = $_POST['field_aim'];
  28. $args['field_jabber'] = $_POST['field_jabber'];
  29. $args['field_msn'] = $_POST['field_msn'];
  30. $args['field_yim'] = $_POST['field_yim'];
  31. $args['field_icq'] = $_POST['field_icq'];
  32. updateProfile('contact',$args);
  33. }
  34. if(isset($_POST['section'])&&$_POST['section']=='bio')
  35. {
  36. $args['field_biography'] = $_POST['field_biography'];
  37. updateProfile('bio',$args);
  38. }
  39. if(isset($_POST['section'])&&$_POST['section']=='sig')
  40. {
  41. $args['signature'] = $_POST['signature'];
  42. updateProfile('sig',$args);
  43. }
  44. /* Memberlist related ajax backend */
  45. if(isset($_POST['memberlist'])){ getMemberList($_POST['page'],$_POST['num'],$_POST['sort'],$_POST['sortDir']); }
  46. /* User CP related ajax backend */
  47. if(isset($_POST['updatepersonal']))
  48. {
  49. if(isset($_POST['curPassword']))
  50. {
  51. $pwdChg = changePassword($_POST['curPassword'],$_POST['newPassword'],$_POST['newPassword2']);
  52. if($pwdChg)
  53. {
  54. updateUserSettings($_POST['displayName'],$_POST['email'],$_POST['timeZone']);
  55. }
  56. }
  57. else
  58. {
  59. updateUserSettings($_POST['displayName'],$_POST['email'],$_POST['timeZone']);
  60. }
  61. }
  62. /* User warning */
  63. if(isset($_POST['warnuser']))
  64. {
  65. warnUser($_POST['warnuser'],$_POST['warnpost']);
  66. }
  67. function updateUserSettings($displayName,$email,$timeZone)
  68. {
  69. global $osimo;
  70. $user = $osimo->getLoggedInUser();
  71. if($user==false){ echo "0"; exit; }
  72. $displayName = secureContent($displayName);
  73. $email = secureContent($email);
  74. $timeZone = secureContent($timeZone);
  75. if($displayName==''||$email==''||$timeZone=='')
  76. {
  77. echo "0"; exit;
  78. }
  79. $query = "UPDATE users SET username_clean='$displayName',email='$email',time_zone='$timeZone' WHERE id='{$user['ID']}' LIMIT 1";
  80. $result = mysql_query($query);
  81. if($result)
  82. {
  83. $_SESSION['user']['display_name'] = $displayName;
  84. $_SESSION['user']['email'] = $email;
  85. $_SESSION['user']['time_zone'] = $timeZone;
  86. echo "1";
  87. }
  88. else
  89. {
  90. echo "0";
  91. }
  92. }
  93. function changePassword($curPassword, $newPassword, $newPassword2)
  94. {
  95. global $osimo;
  96. $user = $osimo->getLoggedInUser();
  97. if($user==false){ echo "0"; return false; }
  98. $curPassword = sha1(secureContent($curPassword));
  99. $newPassword = sha1(secureContent($newPassword));
  100. $newPassword2 = sha1(secureContent($newPassword2));
  101. $query = "SELECT password FROM users WHERE id='{$user['ID']}' LIMIT 1";
  102. $result = mysql_query($query);
  103. if($result&&mysql_num_rows($result)>0)
  104. {
  105. $curPassword2 = reset(mysql_fetch_row($result));
  106. if($curPassword==$curPassword2)
  107. {
  108. if($newPassword==$newPassword2)
  109. {
  110. $query = "UPDATE users SET password='$newPassword' WHERE id='{$user['ID']}' LIMIT 1";
  111. $result = mysql_query($query);
  112. if($result)
  113. {
  114. echo "1";
  115. return true;
  116. }
  117. else
  118. {
  119. echo "0";
  120. return false;
  121. }
  122. }
  123. else
  124. {
  125. echo "passmismatch";
  126. return false;
  127. }
  128. }
  129. else
  130. {
  131. echo "passincorrect";
  132. return false;
  133. }
  134. }
  135. else
  136. {
  137. echo "0";
  138. return false;
  139. }
  140. }
  141. function updateProfile($section,$_args)
  142. {
  143. global $osimo;
  144. $section = secureContent($section);
  145. $user = $osimo->getLoggedInUser();
  146. $userID = $user['ID'];
  147. /* First lets escape everything that was entered */
  148. foreach($_args as $key => $value)
  149. {
  150. $args[$key] = htmlspecialchars(secureContent(stripslashes($value)));
  151. }
  152. if($section=='info')
  153. {
  154. /* Retrieve the UNIX timestamp for the birthday */
  155. $birthday = adodb_mktime(12,0,0,$args['birthday_month'],$args['birthday_day'],$args['birthday_year']);
  156. $age = date('Y') - $args['birthday_year'];
  157. $args['birthday_month'] = false;
  158. $args['birthday_day'] = false;
  159. $args['birthday_year'] = false;
  160. $args = array_filter($args);
  161. $query = "UPDATE users SET birthday='$birthday',field_age='$age'";
  162. foreach($args as $key => $value)
  163. {
  164. $query .= ",$key='$value'";
  165. }
  166. }
  167. if($section=='contact')
  168. {
  169. $query = "UPDATE users SET ";
  170. $first=true;
  171. foreach($args as $key => $value)
  172. {
  173. if($first)
  174. {
  175. $query .= "$key='$value'";
  176. $first = false;
  177. }
  178. else
  179. {
  180. $query .= ",$key='$value'";
  181. }
  182. }
  183. }
  184. if($section=='bio')
  185. {
  186. $query = "UPDATE users SET field_biography='{$args['field_biography']}'";
  187. }
  188. if($section=='sig')
  189. {
  190. $query = "UPDATE users SET signature='{$args['signature']}'";
  191. }
  192. $query .= " WHERE id='$userID' LIMIT 1";
  193. $result = mysql_query($query);
  194. if($result)
  195. {
  196. $osimo->writeToSysLog('user-profile-edit',$user['ID'],$user['name']." edited their profile");
  197. echo $osimo->getUserSignature($userID,true,true);
  198. }
  199. else
  200. {
  201. echo "0";
  202. }
  203. }
  204. function getMemberList($page,$rows = 15,$sort='id',$sortDir='ASC')
  205. {
  206. global $osimo;
  207. $memberlist = $osimo->getMemberList($page,$rows,$sort,$sortDir);
  208. $query = "SELECT COUNT(*) FROM users";
  209. $result = mysql_query($query);
  210. if($result){ $numMembers = reset(mysql_fetch_row($result)); }
  211. ?>
  212. <div id="memberlist-wrap">
  213. <p><?php echo $numMembers; ?> Members | Page <span id="osimo_memberlist-curpage"><?php echo $page; ?></span> of <span id="osimo_memberlist-totpage"><?php echo $osimo->getPagination('table=users', 'num=15'); ?></span></p>
  214. <table cellpadding='4' cellspacing='0' id="memberlist">
  215. <tr style="font-weight: bold; cursor:pointer;">
  216. <td onclick="getMemberList(-1,-1,'id',-2)">ID</td>
  217. <td onclick="getMemberList(-1,-1,'username',-2)">Username</td>
  218. <td>Status</td>
  219. <td onclick="getMemberList(-1,-1,'birthday',-2)">Birthday</td>
  220. <td onclick="getMemberList(-1,-1,'rank_level',-2)">Rank</td>
  221. <td onclick="getMemberList(-1,-1,'posts',-2)">Posts</td>
  222. </tr>
  223. <?php
  224. foreach($memberlist as $member)
  225. {
  226. echo "
  227. <tr>
  228. <td>" . $member['id'] . "</td>
  229. <td>" . $member['username'] . "</td>
  230. <td>" . $member['status'] . "</td>
  231. <td>" . $member['birthday'] . "</td>
  232. <td>" . $member['rank'] . "</td>
  233. <td>" . $member['posts'] . "</td>
  234. </tr>";
  235. }
  236. echo "</table>";
  237. ?>
  238. <ul class="osimo_memberlist-controls">
  239. <li onclick="getMemberList('first',-1,-1,-1)">First</li>
  240. <li onclick="getMemberList('prev',-1,-1,-1)">Previous</li>
  241. <li onclick="getMemberList('next',-1,-1,-1)">Next</li>
  242. <li onclick="getMemberList('last',-1,-1,-1)">Last</li>
  243. </ul>
  244. <?php
  245. }
  246. function resetPassword($step,$type,$data)
  247. {
  248. global $osimo;
  249. $data = secureContent($data);
  250. /* User entered username */
  251. if($step==1&&$type==1)
  252. {
  253. /* First we need to make sure the user exists */
  254. $query = "SELECT COUNT(*) FROM users WHERE username='$data' LIMIT 1";
  255. $result = mysql_query($query);
  256. if(reset(mysql_fetch_row($result))==1)
  257. {
  258. /* User exists, proceed with reset */
  259. $code = sha1(time()+rand(0,9999));
  260. $query2 = "UPDATE users SET reset_code='$code' WHERE username='$data' LIMIT 1";
  261. $result2 = mysql_query($query2);
  262. if($result2)
  263. {
  264. $query3 = "SELECT email FROM users WHERE username='$data' LIMIT 1";
  265. $result3 = mysql_query($query3);
  266. if($result3){ $email = reset(mysql_fetch_row($result3)); $username = $data; }
  267. }
  268. }
  269. else
  270. {
  271. echo "0";
  272. }
  273. }
  274. /* User entered email address */
  275. elseif($step==1&&$type==2)
  276. {
  277. /* First, check to make sure email address is in database */
  278. $query = "SELECT COUNT(*) FROM users WHERE email='$data' LIMIT 1";
  279. $result = mysql_query($query);
  280. if(reset(mysql_fetch_row($result))==1)
  281. {
  282. /* Email exists, proceed with reset */
  283. $code = sha1(time()+rand(0,9999));
  284. $query2 = "UPDATE users SET reset_code='$code' WHERE email='$data' LIMIT 1";
  285. $result2 = mysql_query($query2);
  286. if($result2)
  287. {
  288. $query3 = "SELECT username FROM users WHERE email='$data' LIMIT 1";
  289. $result3 = mysql_query($query3);
  290. if($result3){ $username = reset(mysql_fetch_row($result3)); $email = $data; }
  291. }
  292. }
  293. }
  294. if($step==1)
  295. {
  296. if($result3)
  297. {
  298. include_once(ABS_INCLUDES.'mail.php');
  299. /* Send welcome email to user */
  300. $title = "Osimo Password Reset";
  301. $content = "<h4>Osimo Password Reset</h4>";
  302. $content .= "<p>Someone (probably you) has requested a password reset for the username $username on ".processDomain($_SERVER['HTTP_HOST'])."</p>";
  303. $content .= "<p>If you did not make this request, then simply ignore this email and your account will not be touched.</p>";
  304. $content .= "<p>To reset your password, enter this code into the Reset Code field: $code</p>";
  305. sendMail($title,$content,$username,$email,'Osimo Registration',"OsimoRegistration@".processDomain($_SERVER['HTTP_HOST']));
  306. getForgotPasswordBox(1);
  307. }
  308. }
  309. if($step==2)
  310. {
  311. /* User is resetting password, need code validation check */
  312. if($data['pass1']!=$data['pass2'])
  313. {
  314. echo "<p>The passwords entered do not match!</p>"; getForgotPasswordBox(1); exit;
  315. }
  316. $query = "SELECT id FROM users WHERE reset_code='{$data['code']}' LIMIT 1";
  317. $result = mysql_query($query);
  318. if($result&&mysql_num_rows($result)>0)
  319. {
  320. while(list($id)=mysql_fetch_row($result))
  321. {
  322. /* Code entered is correct, continue */
  323. $password = sha1($data['pass1']);
  324. $query2 = "UPDATE users SET password='$password' WHERE id='$id' LIMIT 1";
  325. $result2 = mysql_query($query2);
  326. if($result2)
  327. {
  328. $osimo->writeToSysLog('password-reset',$user['ID'],$user['name']." has reset their password");
  329. getForgotPasswordBox(2);
  330. }
  331. }
  332. }
  333. else
  334. {
  335. echo "<p>The reset code entered is not correct!</p>"; getForgotPasswordBox(1); exit;
  336. }
  337. }
  338. }
  339. function warnUser($userID,$postID)
  340. {
  341. global $osimo;
  342. if(!$osimo->userIsAdmin()&&!$osimo->userIsModerator()){ echo "0"; exit; }
  343. $result = $osimo->createWarning($userID,$postID);
  344. if($result){ echo "1"; }
  345. else{ echo "0"; }
  346. }
  347. ?>