PageRenderTime 54ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 0ms

/wp-content/plugins/simple-forum/admin/panel-forums/support/sfa-forums-save.php

https://bitbucket.org/openfarmtech/weblog-content
PHP | 1163 lines | 909 code | 175 blank | 79 comment | 204 complexity | f05563b91b37b98130b35eddcba26971 MD5 | raw file
Possible License(s): GPL-2.0, AGPL-1.0, LGPL-2.0, LGPL-3.0, BSD-3-Clause, GPL-3.0, LGPL-2.1, AGPL-3.0, CC-BY-SA-3.0
  1. <?php
  2. /*
  3. Simple:Press
  4. Admin Forums Data Sae Support Functions
  5. $LastChangedDate: 2010-05-18 02:54:49 -0700 (Tue, 18 May 2010) $
  6. $Rev: 4032 $
  7. */
  8. if (preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF']))
  9. {
  10. die('Access Denied');
  11. }
  12. function sfa_save_forums_create_group()
  13. {
  14. global $wpdb;
  15. check_admin_referer('forum-adminform_groupnew', 'forum-adminform_groupnew');
  16. $ug_list = array_unique($_POST['usergroup_id']);
  17. $perm_list = $_POST['role'];
  18. # fail if any user groups arent assigned a permission
  19. for ($x=0; $x<count($perm_list); $x++)
  20. {
  21. if ($perm_list[$x] == -1)
  22. {
  23. $mess = __("All User Groups Must Be Assigned A Default Permission", "sforum");
  24. return $mess;
  25. }
  26. }
  27. $seq = ($wpdb->get_var("SELECT MAX(group_seq) FROM ".SFGROUPS) + 1);
  28. $groupdata = array();
  29. if (empty($_POST['group_name']))
  30. {
  31. $groupdata['group_name'] = __("New Forum Group", "sforum");
  32. } else
  33. {
  34. $groupdata['group_name'] = sf_filter_title_save(trim($_POST['group_name']));
  35. }
  36. if (empty($_POST['group_seq']))
  37. {
  38. $groupdata['group_seq'] = $seq;
  39. } else
  40. {
  41. if (is_numeric($_POST['group_seq']))
  42. {
  43. $groupdata['group_seq'] = sf_esc_int($_POST['group_seq']);
  44. } else {
  45. $mess = __("New Group Creation Failed - Sequence Must Be An Integer!", "sforum");
  46. return $mess;
  47. }
  48. }
  49. if (!empty($_POST['group_icon']))
  50. {
  51. # Check new icon exists
  52. $groupdata['group_icon'] = sf_filter_title_save(trim($_POST['group_icon']));
  53. $path = SFCUSTOM.$groupdata['group_icon'];
  54. if (!file_exists($path))
  55. {
  56. $mess = sprintf(__("Custom Icon '%s' does not exist", "sforum"), $groupdata['group_icon']);
  57. return $mess;
  58. }
  59. } else {
  60. $groupdata['group_icon'] = NULL;
  61. }
  62. $groupdata['group_desc'] = sf_filter_text_save(trim($_POST['group_desc']));
  63. $groupdata['group_message'] = sf_filter_text_save(trim($_POST['group_message']));
  64. # check if we need to shuffle sequence numbers
  65. if ($groupdata['group_seq'] < $seq)
  66. {
  67. $groups = sf_get_groups_all();
  68. foreach ($groups as $group)
  69. {
  70. if ($group->group_seq >= $groupdata['group_seq'])
  71. {
  72. sfa_bump_group_seq($group->group_id, ($group->group_seq + 1));
  73. }
  74. }
  75. }
  76. # create the group
  77. $sql ="INSERT INTO ".SFGROUPS." (group_name, group_desc, group_seq, group_icon, group_message) ";
  78. $sql.="VALUES ('".$groupdata['group_name']."', '".$groupdata['group_desc']."', ".$groupdata['group_seq'].", '".$groupdata['group_icon']."', '".$groupdata['group_message']."');";
  79. $success = $wpdb->query($sql);
  80. $group_id = $wpdb->insert_id;
  81. # save the default permissions for the group
  82. for( $x=0; $x<count($ug_list); $x++)
  83. {
  84. sfa_add_defpermission_row($group_id, $ug_list[$x], $perm_list[$x]);
  85. }
  86. if ($success == false)
  87. {
  88. $mess = __("New Group Creation Failed!", "sforum");
  89. } else {
  90. $mess = __("New Forum Group Created", "sforum");
  91. }
  92. return $mess;
  93. }
  94. function sfa_save_forums_create_forum()
  95. {
  96. global $wpdb;
  97. check_admin_referer('forum-adminform_forumnew', 'forum-adminform_forumnew');
  98. $forumdata = array();
  99. if($_POST['forumtype'] == 1)
  100. {
  101. # Standard forum
  102. $forumdata['group_id'] = sf_esc_int($_POST['group_id']);
  103. } else {
  104. # Sub forum
  105. $parentforum = $wpdb->get_row("SELECT * FROM ".SFFORUMS." WHERE forum_id=".sf_esc_int($_POST['forum_id']));
  106. $forumdata['group_id'] = $parentforum->group_id;
  107. }
  108. $seq = $wpdb->get_var("SELECT MAX(forum_seq) FROM ".SFFORUMS." WHERE group_id=".$forumdata['group_id']) + 1;
  109. if(!isset($_POST['forum_seq']) || sf_esc_int($_POST['forum_seq'] == 0))
  110. {
  111. $forumdata['forum_seq'] = $seq;
  112. } else {
  113. $forumdata['forum_seq'] = sf_esc_int($_POST['forum_seq']);
  114. }
  115. $forumdata['forum_desc'] = sf_filter_text_save(trim($_POST['forum_desc']));
  116. $forumdata['forum_status'] = 0;
  117. if (isset($_POST['forum_status']))
  118. {
  119. $forumdata['forum_status'] = 1;
  120. }
  121. $forumdata['post_ratings'] = 0;
  122. if (isset($_POST['sfforum_ratings']))
  123. {
  124. $forumdata['post_ratings'] = 1;
  125. }
  126. $forumdata['use_tags'] = 0;
  127. if (isset($_POST['forum_tags']))
  128. {
  129. $forumdata['use_tags'] = 1;
  130. }
  131. $forumdata['forum_rss_private'] = 0;
  132. if (isset($_POST['forum_private']))
  133. {
  134. $forumdata['forum_rss_private'] = 1;
  135. }
  136. $forumdata['forum_sitemap'] = 0;
  137. if (isset($_POST['forum_sitemap']))
  138. {
  139. $forumdata['forum_sitemap'] = 1;
  140. }
  141. if (empty($_POST['forum_name']))
  142. {
  143. $forumdata['forum_name'] = __("New Forum", "sforum");
  144. } else {
  145. $forumdata['forum_name'] = sf_filter_title_save(trim($_POST['forum_name']));
  146. }
  147. $forumdata['forum_message'] = sf_filter_text_save(trim($_POST['forum_message']));
  148. if (!empty($_POST['forum_icon']))
  149. {
  150. # Check new icon exists
  151. $forumdata['forum_icon'] = sf_filter_title_save(trim($_POST['forum_icon']));
  152. $path = SFCUSTOM.$forumdata['forum_icon'];
  153. if (!file_exists($path))
  154. {
  155. $mess = sprintf(__("Custom Icon '%s' does not exist", "sforum"), $forumdata['forum_icon']);
  156. return $mess;
  157. }
  158. } else {
  159. $forumdata['forum_icon'] = NULL;
  160. }
  161. if ($_POST['forum_topic_status'] == '' || $_POST['forum_topic_status'] == __('None', 'sforum'))
  162. {
  163. $forumdata['topic_status_set'] = 0;
  164. } else {
  165. $forumdata['topic_status_set'] = sf_esc_int($_POST['forum_topic_status']);
  166. }
  167. # check if we need to shuffle sequence numbers
  168. if ($forumdata['forum_seq'] < $seq)
  169. {
  170. $forums = sfa_get_forums_in_group($forumdata['group_id']);
  171. foreach ($forums as $forum)
  172. {
  173. if ($forum->forum_seq >= $forumdata['forum_seq'])
  174. {
  175. sfa_bump_forum_seq($forum->forum_id, ($forum->forum_seq + 1));
  176. }
  177. }
  178. }
  179. # create the forum
  180. if($_POST['forumtype'] == 2)
  181. {
  182. $parentdata = $parentforum->forum_id;
  183. } else {
  184. $parentdata = '0';
  185. }
  186. # do slug
  187. if(!isset($_POST['thisforumslug']) || empty($_POST['thisforumslug']))
  188. {
  189. $forumslug = sf_create_slug($forumdata['forum_name'], 'forum');
  190. } else {
  191. $forumslug = $_POST['thisforumslug'];
  192. }
  193. $sql = "INSERT INTO ".SFFORUMS." (forum_name, forum_slug, forum_desc, group_id, forum_status, forum_seq, forum_rss_private, forum_icon, topic_status_set, post_ratings, use_tags, parent, forum_message, in_sitemap) ";
  194. $sql.= "VALUES ('".$forumdata['forum_name']."', '".$forumslug."', '".$forumdata['forum_desc']."', ".$forumdata['group_id'].", ".$forumdata['forum_status'].", ".$forumdata['forum_seq'].", ".$forumdata['forum_rss_private'].", '".$forumdata['forum_icon']."', ".$forumdata['topic_status_set'].", ".$forumdata['post_ratings'].", ".$forumdata['use_tags'].", ".$parentdata.", '".$forumdata['forum_message']."', ".$forumdata['forum_sitemap'].");";
  195. $thisforum = $wpdb->query($sql);
  196. # now check the slug was populated and if not replace with forum id
  197. if (empty($forumslug))
  198. {
  199. $forumid = $wpdb->insert_id;
  200. $forumslug = 'forum-'.$forumid;
  201. $thisforum = $wpdb->query("UPDATE ".SFFORUMS." SET forum_slug='".$forumslug."' WHERE forum_id=".$forumid);
  202. }
  203. $success = $thisforum;
  204. $forum_id = $wpdb->insert_id;
  205. # Id subforum add it as child to the parent
  206. if($_POST['forumtype'] == 2)
  207. {
  208. $children = array();
  209. $list = $wpdb->get_results("SELECT forum_id FROM ".SFFORUMS." WHERE parent=".$parentforum->forum_id." ORDER BY forum_seq");
  210. foreach($list as $id)
  211. {
  212. $children[]=$id->forum_id;
  213. }
  214. $wpdb->query("UPDATE ".SFFORUMS." SET children='".serialize($children)."' WHERE forum_id=".$parentforum->forum_id);
  215. }
  216. # add the user group permission sets
  217. $usergroup_id_list = array_unique($_POST['usergroup_id']);
  218. $role_list = $_POST['role'];
  219. $perm_prob = false;
  220. for ($x=0; $x<count($usergroup_id_list); $x++)
  221. {
  222. $usergroup_id = sf_esc_int($usergroup_id_list[$x]);
  223. $role = $role_list[$x];
  224. if ($role == -1)
  225. {
  226. $defrole = sfa_get_defpermissions_role($forumdata['group_id'], $usergroup_id);
  227. if ($defrole == '')
  228. {
  229. $perm_prob = true;
  230. } else {
  231. sfa_add_permission_data($forum_id, $usergroup_id, $defrole);
  232. }
  233. } else {
  234. sfa_add_permission_data($forum_id, $usergroup_id, $role);
  235. }
  236. }
  237. # get affected members
  238. $members = $wpdb->get_results("
  239. SELECT DISTINCT user_id
  240. FROM ".SFMEMBERSHIPS."
  241. WHERE usergroup_id IN (
  242. SELECT usergroup_id
  243. FROM ".SFPERMISSIONS."
  244. WHERE forum_id = ".$forum_id."
  245. )
  246. ");
  247. sfc_rebuild_members_pm($members);
  248. # if the forum was created, signal success - doesnt check user group permission set though
  249. if ($success == false)
  250. {
  251. $mess = __("New Forum Creation Failed!", "sforum");
  252. } else {
  253. if ($perm_prob)
  254. {
  255. $mess = __("New Forum Created - Permission Sets Not Properly Set For All User Groups!", "sforum");
  256. } else {
  257. $mess = __("New Forum Created!", "sforum");
  258. }
  259. }
  260. sfa_clean_forum_children();
  261. sfa_resequence_forums($forumdata['group_id'], 0);
  262. return $mess;
  263. }
  264. # function to add a permission set globally to all forum
  265. function sfa_save_forums_global_perm()
  266. {
  267. global $wpdb;
  268. check_admin_referer('forum-adminform_globalpermissionnew', 'forum-adminform_globalpermissionnew');
  269. if ($_POST['usergroup_id'] != -1 && $_POST['role'] != -1)
  270. {
  271. $usergroup_id = sf_esc_int($_POST['usergroup_id']);
  272. $permission = sf_esc_int($_POST['role']);
  273. # loop through all the groups
  274. $groups = sf_get_groups_all();
  275. if ($groups)
  276. {
  277. $mess = '';
  278. foreach ($groups as $group)
  279. {
  280. # use group permission set helper function to actually set the permission set
  281. $mess.= sfa_set_group_permission($group->group_id, $usergroup_id, $permission);
  282. }
  283. #update pm flag
  284. $members = $wpdb->get_results("SELECT user_id FROM ".SFMEMBERSHIPS.' WHERE usergroup_id='.$usergroup_id);
  285. sfc_rebuild_members_pm($members);
  286. } else {
  287. $mess = __("There are no Groups or Forum! No Permission Set Added!", "sforum");
  288. }
  289. } else {
  290. $mess = __("Adding User Group Permission Set Failed!", "sforum");
  291. }
  292. return $mess;
  293. }
  294. # function to add a permission set to every forum within a group
  295. function sfa_save_forums_group_perm()
  296. {
  297. global $wpdb;
  298. check_admin_referer('forum-adminform_grouppermissionnew', 'forum-adminform_grouppermissionnew');
  299. if(isset($_POST['group_id']) && $_POST['usergroup_id'] != -1 && $_POST['role'] != -1)
  300. {
  301. $group_id = sf_esc_int($_POST['group_id']);
  302. $usergroup_id = sf_esc_int($_POST['usergroup_id']);
  303. $permission = sf_esc_int($_POST['role']);
  304. #update pm flag
  305. $mess = sfa_set_group_permission($group_id, $usergroup_id, $permission);
  306. $members = $wpdb->get_results("SELECT user_id FROM ".SFMEMBERSHIPS.' WHERE usergroup_id='.$usergroup_id);
  307. sfc_rebuild_members_pm($members);
  308. } else {
  309. $mess = __("Adding User Group Permission Set Failed!", "sforum");
  310. }
  311. return $mess;
  312. }
  313. # helper function to loop through all forum in a group and add a permission set
  314. function sfa_set_group_permission($group_id, $usergroup_id, $permission)
  315. {
  316. global $wpdb;
  317. $forums = sfa_get_forums_in_group($group_id);
  318. if ($forums)
  319. {
  320. $mess = '';
  321. foreach ($forums as $forum)
  322. {
  323. # If user group has a current permission set for this forum, remove the old one before adding the new one
  324. $current = $wpdb->get_row("SELECT * FROM ".SFPERMISSIONS." WHERE forum_id=".$forum->forum_id." AND usergroup_id=".$usergroup_id);
  325. if ($current)
  326. {
  327. sfa_remove_permission_data($current->permission_id);
  328. }
  329. # add the new permission set
  330. $success = sfa_add_permission_data($forum->forum_id, $usergroup_id, $permission);
  331. if ($success == false)
  332. {
  333. $mess.= sf_filter_title_display($forum->forum_name) . ": ". __("Adding User Group Permission Set Failed!", "sforum") . '<br />';
  334. } else {
  335. $mess.= sf_filter_title_display($forum->forum_name) . ": ". __("User Group Permission Set Added to Forum!", "sforum") . '<br />';
  336. }
  337. }
  338. } else {
  339. $mess = __("Group has no Members! No Permission Sets Added!", "sforum");
  340. }
  341. return $mess;
  342. }
  343. # function to remove all permission set from all forum
  344. function sfa_save_forums_remove_perms()
  345. {
  346. global $wpdb;
  347. check_admin_referer('forum-adminform_allpermissionsdelete', 'forum-adminform_allpermissionsdelete');
  348. # remove all permission set
  349. $wpdb->query("TRUNCATE TABLE ".SFPERMISSIONS);
  350. # only admins can PM now
  351. $wpdb->query("UPDATE ".SFMEMBERS." SET pm = 0 WHERE admin = 0");
  352. $mess = __("All Permission Sets Removed.", "sforum");
  353. return $mess;
  354. }
  355. # function to add a new permission set to a forum
  356. function sfa_save_forums_forum_perm()
  357. {
  358. global $wpdb;
  359. check_admin_referer('forum-adminform_permissionnew', 'forum-adminform_permissionnew');
  360. if (isset($_POST['forum_id']) && $_POST['usergroup_id'] != -1 && $_POST['role'] != -1)
  361. {
  362. $usergroup_id = sf_esc_int($_POST['usergroup_id']);
  363. $forum_id = sf_esc_int($_POST['forum_id']);
  364. $permission = sf_esc_int($_POST['role']);
  365. # If user group has a current permission set for this forum, remove the old one before adding the new one
  366. $current = $wpdb->get_row("SELECT * FROM ".SFPERMISSIONS." WHERE forum_id=".$forum_id." AND usergroup_id=".$usergroup_id);
  367. if ($current)
  368. {
  369. sfa_remove_permission_data($current->permission_id);
  370. }
  371. # add the new permission set
  372. $success = sfa_add_permission_data($forum_id, $usergroup_id, $permission);
  373. if ($success == false)
  374. {
  375. $mess = __("Adding User Group Permission Set Failed!", "sforum");
  376. } else {
  377. $mess = __("User Group Permission Set Added to Forum", "sforum");
  378. $members = $wpdb->get_results("SELECT user_id FROM ".SFMEMBERSHIPS." WHERE usergroup_id = ".$usergroup_id." AND forum_id = ".$forum_id);
  379. sfc_rebuild_members_pm($members);
  380. }
  381. } else {
  382. $mess = __("Adding User Group Permission Set Failed!", "sforum");
  383. }
  384. return $mess;
  385. }
  386. function sfa_save_forums_delete_forum()
  387. {
  388. global $wpdb;
  389. check_admin_referer('forum-adminform_forumdelete', 'forum-adminform_forumdelete');
  390. $group_id = sf_esc_int($_POST['group_id']);
  391. $forum_id = sf_esc_int($_POST['forum_id']);
  392. $cseq = sf_esc_int($_POST['cforum_seq']);
  393. # get affected members
  394. $members = $wpdb->get_results("
  395. SELECT DISTINCT user_id
  396. FROM ".SFMEMBERSHIPS."
  397. WHERE usergroup_id IN (
  398. SELECT usergroup_id
  399. FROM ".SFPERMISSIONS."
  400. WHERE forum_id = ".$forum_id."
  401. )
  402. ");
  403. # If subforum or parent remove the relationship first.
  404. if($_POST['children'])
  405. {
  406. $children = unserialize($_POST['children']);
  407. foreach($children as $child)
  408. {
  409. $wpdb->query("UPDATE ".SFFORUMS." SET parent = null WHERE forum_id=".sf_esc_int($child));
  410. }
  411. }
  412. if($_POST['parent'])
  413. {
  414. $parentforum=$wpdb->get_var("SELECT children FROM ".SFFORUMS." WHERE forum_id=".sf_esc_int($_POST['parent']));
  415. $children = unserialize($parentforum);
  416. if(count($children) == 1)
  417. {
  418. $wpdb->query("UPDATE ".SFFORUMS." SET children = null WHERE forum_id=".sf_esc_int($_POST['parent']));
  419. } else {
  420. $newlist=array();
  421. foreach($children as $child)
  422. {
  423. if($child != $forum_id) $newlist[]=$child;
  424. }
  425. $wpdb->query("UPDATE ".SFFORUMS." SET children = '".serialize($newlist)."' WHERE forum_id=".sf_esc_int($_POST['parent']));
  426. }
  427. }
  428. # need to delete all topics in the forum using standard routine to clean up behind it
  429. $topics = $wpdb->get_results("SELECT topic_id FROM ".SFTOPICS." WHERE forum_id=".$forum_id);
  430. if ($topics)
  431. {
  432. foreach ($topics as $topic)
  433. {
  434. sf_delete_topic($topic->topic_id, false);
  435. }
  436. }
  437. # now delete the forum itself
  438. $wpdb->query("DELETE FROM ".SFFORUMS." WHERE forum_id=".$forum_id);
  439. # remove permissions for this forum
  440. $perms = sfa_get_forum_permissions($forum_id);
  441. if ($perms)
  442. {
  443. foreach ($perms as $perm)
  444. {
  445. sfa_remove_permission_data($perm->permission_id);
  446. }
  447. }
  448. # update pm flag for affected members
  449. sfc_rebuild_members_pm($members);
  450. # need to iterate through the groups
  451. $forums = sfa_get_forums_in_group($group_id);
  452. foreach ($forums as $forum)
  453. {
  454. if ($forum->forum_seq > $cseq)
  455. {
  456. sfa_bump_forum_seq($forum->forum_id, ($forum->forum_seq - 1));
  457. }
  458. }
  459. $mess = "Forum Deleted!";
  460. sfa_clean_forum_children();
  461. sfa_resequence_forums($group_id, 0);
  462. return $mess;
  463. }
  464. function sfa_save_forums_delete_group()
  465. {
  466. global $wpdb;
  467. check_admin_referer('forum-adminform_groupdelete', 'forum-adminform_groupdelete');
  468. $group_id = sf_esc_int($_POST['group_id']);
  469. $cseq = sf_esc_int($_POST['cgroup_seq']);
  470. # get affected members
  471. $members = $wpdb->get_results("
  472. SELECT DISTINCT user_id
  473. FROM ".SFMEMBERSHIPS."
  474. WHERE usergroup_id IN (
  475. SELECT usergroup_id
  476. FROM ".SFPERMISSIONS."
  477. WHERE forum_id IN (
  478. SELECT forum_id
  479. FROM ".SFFORUMS."
  480. WHERE group_id = ".$group_id."
  481. )
  482. )
  483. ");
  484. # remove permissions for each forum in group
  485. $forums = sfa_get_forums_in_group($group_id);
  486. if ($forums)
  487. {
  488. foreach ($forums as $forum)
  489. {
  490. # remove permissions for this forum
  491. $perms = sfa_get_forum_permissions($forum->forum_id);
  492. if ($perms)
  493. {
  494. foreach ($perms as $perm)
  495. {
  496. sfa_remove_permission_data($perm->permission_id);
  497. }
  498. }
  499. }
  500. }
  501. # rebuild pm column for affected members
  502. sfc_rebuild_members_pm($members);
  503. # select all the forums in the group
  504. $forums = sfa_get_forums_in_group($group_id);
  505. # remove the topics and posts in each forum
  506. foreach ($forums as $forum)
  507. {
  508. # need to delete all topics in the forum using standard routine to clean up behind it
  509. $topics = $wpdb->get_results("SELECT topic_id FROM ".SFTOPICS." WHERE forum_id=".$forum->forum_id);
  510. if ($topics)
  511. {
  512. foreach ($topics as $topic)
  513. {
  514. sf_delete_topic($topic->topic_id, false);
  515. }
  516. }
  517. }
  518. #now remove the forums themselves
  519. $wpdb->query("DELETE FROM ".SFFORUMS." WHERE group_id=".$group_id);
  520. # and finaly remove the group
  521. $wpdb->query("DELETE FROM ".SFGROUPS." WHERE group_id=".$group_id);
  522. # need to iterate through the groups
  523. $groups = sf_get_groups_all();
  524. foreach ($groups as $group)
  525. {
  526. if ($group->group_seq > $cseq)
  527. {
  528. sfa_bump_group_seq($group->group_id, ($group->group_seq - 1));
  529. }
  530. }
  531. # remove the default permissions for the group being deleted
  532. $wpdb->query("DELETE FROM ".SFDEFPERMISSIONS." WHERE group_id=".$group_id);
  533. $mess = __("Group Deleted", "sforum");
  534. return $mess;
  535. }
  536. # function to delete an existing permission set for a forum
  537. function sfa_save_forums_delete_perm()
  538. {
  539. global $wpdb;
  540. check_admin_referer('forum-adminform_permissiondelete', 'forum-adminform_permissiondelete');
  541. $permission_id = sf_esc_int($_POST['permission_id']);
  542. # get affected members
  543. $members = $wpdb->get_results("
  544. SELECT DISTINCT user_id
  545. FROM ".SFMEMBERSHIPS."
  546. WHERE usergroup_id = (
  547. SELECT usergroup_id
  548. FROM ".SFPERMISSIONS."
  549. WHERE permission_id = ".$permission_id."
  550. )
  551. ");
  552. # remove the permission set from the forum
  553. $success = sfa_remove_permission_data($permission_id);
  554. if ($success == false)
  555. {
  556. $mess = __("Permission Set Delete Failed!", "sforum");
  557. } else {
  558. $mess = __("Permission Set Deleted", "sforum");
  559. # rebuild pm flag for affected members
  560. sfc_rebuild_members_pm($members);
  561. }
  562. return $mess;
  563. }
  564. function sfa_save_forums_edit_forum()
  565. {
  566. global $wpdb;
  567. check_admin_referer('forum-adminform_forumedit', 'forum-adminform_forumedit');
  568. $forumdata = array();
  569. $forum_id = sf_esc_int($_POST['forum_id']);
  570. $forumdata['forum_name'] = sf_filter_title_save(trim($_POST['forum_name']));
  571. if(!empty($_POST['thisforumslug']))
  572. {
  573. $forumdata['forum_slug'] = sf_create_slug($_POST['thisforumslug'], 'forum', false);
  574. } else {
  575. $forumdata['forum_slug'] = sf_create_slug($forumdata['forum_name'], 'forum');
  576. }
  577. $forumdata['forum_desc'] = sf_filter_text_save(trim($_POST['forum_desc']));
  578. if(!isset($_POST['forum_seq']) || sf_esc_int($_POST['forum_seq'] == 0))
  579. {
  580. $mess = __("Unable to Save until Display Position is set", "sforum");
  581. return $mess;
  582. } else {
  583. $forumdata['forum_seq'] = sf_esc_int($_POST['forum_seq']);
  584. }
  585. $forumdata['group_id'] = sf_esc_int($_POST['group_id']);
  586. $forumdata['forum_status'] = 0;
  587. if (isset($_POST['forum_status']))
  588. {
  589. $forumdata['forum_status'] = 1;
  590. }
  591. $forumdata['use_tags'] = 0;
  592. if (isset($_POST['forum_tags']))
  593. {
  594. $forumdata['use_tags'] = 1;
  595. }
  596. $forumdata['post_ratings'] = 0;
  597. if (isset($_POST['forum_ratings']))
  598. {
  599. $forumdata['post_ratings'] = 1;
  600. }
  601. $forumdata['forum_rss_private'] = 0;
  602. if (isset($_POST['forum_private']))
  603. {
  604. $forumdata['forum_rss_private'] = 1;
  605. }
  606. $forumdata['forum_sitemap'] = 0;
  607. if (isset($_POST['forum_sitemap']))
  608. {
  609. $forumdata['forum_sitemap'] = 1;
  610. }
  611. if (!empty($_POST['forum_icon']))
  612. {
  613. # Check new icon exists
  614. $forumdata['forum_icon'] = sf_filter_title_save(trim($_POST['forum_icon']));
  615. $path = SFCUSTOM.$forumdata['forum_icon'];
  616. if (!file_exists($path))
  617. {
  618. $mess = sprintf(__("Custom Icon '%s' does not exist", "sforum"), $forumdata['forum_icon']);
  619. return $mess;
  620. }
  621. } else {
  622. $forumdata['forum_icon'] = NULL;
  623. }
  624. if (isset($_POST['forum_topic_status']))
  625. {
  626. if ($_POST['forum_topic_status'] == '')
  627. {
  628. $forumdata['topic_status_set'] = 0;
  629. # remove from all topics in the forum
  630. $wpdb->query("UPDATE ".SFTOPICS." SET topic_status_flag=0 WHERE forum_id=".$forum_id);
  631. } else {
  632. $forumdata['topic_status_set'] = $_POST['forum_topic_status'];
  633. }
  634. } else {
  635. $forumdata['topic_status_set'] = sf_esc_int($_POST['cforum_topic_status']);
  636. }
  637. if (isset($_POST['forum_rss']))
  638. {
  639. $forumdata['forum_rss'] = sf_filter_save_cleanurl($_POST['forum_rss']);
  640. } else {
  641. $forumdata['forum_rss'] = sf_filter_save_cleanurl($_POST['cforum_rss']);
  642. }
  643. $forumdata['forum_message'] = sf_filter_text_save(trim($_POST['forum_message']));
  644. if (($forumdata['forum_name'] == sf_filter_title_display($_POST['cforum_name'])) &&
  645. ($forumdata['forum_slug'] == $_POST['cforum_slug']) &&
  646. ($forumdata['forum_seq'] == $_POST['cforum_seq']) &&
  647. ($forumdata['group_id'] == $_POST['cgroup_id']) &&
  648. ($forumdata['forum_status'] == $_POST['cforum_status']) &&
  649. ($forumdata['use_tags'] == $_POST['cforum_tags']) &&
  650. ($forumdata['post_ratings'] == $_POST['cforum_ratings']) &&
  651. ($forumdata['forum_rss_private'] == $_POST['cforum_rss_private']) &&
  652. ($forumdata['forum_desc'] == $_POST['cforum_desc']) &&
  653. ($forumdata['forum_icon'] == $_POST['cforum_icon']) &&
  654. ($forumdata['forum_topic_status'] == $_POST['cforum_topic_status']) &&
  655. ($forumdata['forum_message'] == $_POST['cforum_message']) &&
  656. ($forumdata['forum_sitemap'] == $_POST['cforum_sitemap']) &&
  657. ($forumdata['forum_rss'] == $_POST['cforum_rss']))
  658. {
  659. $mess = __("No Data Changed", "sforum");
  660. return $mess;
  661. }
  662. # has the forum changed to a new group
  663. if ($forumdata['group_id'] != $_POST['cgroup_id'])
  664. {
  665. # let's resequence old group list first
  666. $forums = $wpdb->get_results("SELECT forum_id, forum_seq FROM ".SFFORUMS." WHERE group_id=".sf_esc_int($_POST['cgroup_id'])." AND forum_id <> ".$forum_id." ORDER BY forum_seq;");
  667. $cnt = count($forums);
  668. for ($i = 0; $i < $cnt; $i++)
  669. {
  670. sfa_bump_forum_seq($forums[$i]->forum_id, ($i + 1));
  671. }
  672. # now we can make room in new group
  673. $seq = $wpdb->get_var("SELECT MAX(forum_seq) FROM ".SFFORUMS." WHERE group_id=". $forumdata['group_id']) + 1;
  674. if ($forumdata['forum_seq'] < $seq)
  675. {
  676. $forums = sfa_get_forums_in_group($forumdata['group_id']);
  677. foreach ($forums as $forum)
  678. {
  679. if ($forum->forum_seq >= $forumdata['forum_seq'])
  680. {
  681. sfa_bump_forum_seq($forum->forum_id, ($forum->forum_seq + 1));
  682. }
  683. }
  684. }
  685. } else {
  686. # same group but has the seq changed?
  687. if ($forumdata['forum_seq'] != $_POST['cforum_seq'])
  688. {
  689. $forums = $wpdb->get_results("SELECT forum_id, forum_seq FROM ".SFFORUMS." WHERE group_id=".sf_esc_int($_POST['cgroup_id'])." AND forum_id <> ".$forum_id." ORDER BY forum_seq;");
  690. $cnt = count($forums);
  691. for ($i = 0; $i < $cnt; $i++)
  692. {
  693. if (($i + 1) < $forumdata['forum_seq'])
  694. {
  695. sfa_bump_forum_seq($forums[$i]->forum_id, ($i + 1));
  696. } else {
  697. sfa_bump_forum_seq($forums[$i]->forum_id, ($i + 2));
  698. }
  699. }
  700. }
  701. }
  702. # Finally - we can save the updated forum record!
  703. if(empty($forumdata['forum_slug']))
  704. {
  705. $forumslug = sf_create_slug($forumdata['forum_name'], 'forum');
  706. if(empty($forumslug)) $forumslug = 'forum-'.$forum_id;
  707. } else {
  708. $forumslug = $forumdata['forum_slug'];
  709. }
  710. # Let's make sure parent is set
  711. if($_POST['forumtype'] == 1)
  712. {
  713. $parent = 0;
  714. } else {
  715. $parent = sf_esc_int($_POST['forum_parent']);
  716. }
  717. $sql = "UPDATE ".SFFORUMS." SET ";
  718. $sql.= 'forum_name="'.$forumdata['forum_name'].'", ';
  719. $sql.= 'forum_slug="'.$forumslug.'", ';
  720. $sql.= 'forum_desc="'.$forumdata['forum_desc'].'", ';
  721. $sql.= 'group_id='.$forumdata['group_id'].', ';
  722. $sql.= 'forum_status='.$forumdata['forum_status'].', ';
  723. $sql.= 'use_tags='.$forumdata['use_tags'].', ';
  724. $sql.= 'post_ratings='.$forumdata['post_ratings'].', ';
  725. $sql.= 'forum_rss_private='.$forumdata['forum_rss_private'].', ';
  726. $sql.= 'forum_icon="'.$forumdata['forum_icon'].'", ';
  727. $sql.= 'topic_status_set='.$forumdata['topic_status_set'].', ';
  728. $sql.= 'forum_rss="'.$forumdata['forum_rss'].'", ';
  729. $sql.= 'in_sitemap="'.$forumdata['forum_sitemap'].'", ';
  730. $sql.= 'parent='.$parent.', ';
  731. $sql.= 'forum_message="'.$forumdata['forum_message'].'", ';
  732. $sql.= 'forum_seq='.$forumdata['forum_seq']." ";
  733. $sql.= "WHERE forum_id=".$forum_id.";";
  734. $success = $wpdb->query($sql);
  735. if ($success == false)
  736. {
  737. $mess = __("Forum Record Update Failed!", "sforum");
  738. } else {
  739. $mess = __("Forum Record Updated", "sforum");
  740. }
  741. sfa_clean_forum_children();
  742. sfa_resequence_forums($forumdata['group_id'], 0);
  743. return $mess;
  744. }
  745. function sfa_save_forums_edit_group()
  746. {
  747. global $wpdb;
  748. check_admin_referer('forum-adminform_groupedit', 'forum-adminform_groupedit');
  749. $groupdata = array();
  750. $group_id = sf_esc_int($_POST['group_id']);
  751. $groupdata['group_name'] = sf_filter_title_save(trim($_POST['group_name']));
  752. $groupdata['group_seq'] = sf_filter_title_save(trim($_POST['group_seq']));
  753. $groupdata['group_desc'] = sf_filter_text_save(trim($_POST['group_desc']));
  754. $groupdata['group_message'] = sf_filter_text_save(trim($_POST['group_message']));
  755. $ug_list = array_unique($_POST['usergroup_id']);
  756. $perm_list = $_POST['role'];
  757. if (!empty($_POST['group_icon']))
  758. {
  759. # Check new icon exists
  760. $groupdata['group_icon'] = sf_filter_title_save(trim($_POST['group_icon']));
  761. $path = SFCUSTOM.$groupdata['group_icon'];
  762. if (!file_exists($path))
  763. {
  764. $mess = sprintf(__("Custom Icon '%s' does not exist", "sforum"), $groupdata['group_icon']);
  765. return $mess;
  766. }
  767. } else {
  768. $groupdata['group_icon'] = NULL;
  769. }
  770. if (isset($_POST['group_rss']))
  771. {
  772. $groupdata['group_rss'] = sf_filter_save_cleanurl($_POST['group_rss']);
  773. } else {
  774. $groupdata['group_rss'] = sf_filter_save_cleanurl($_POST['cgroup_rss']);
  775. }
  776. # fail if any user groups arent assigned a permission
  777. for ($x=0; $x<count($perm_list); $x++)
  778. {
  779. if ($perm_list[$x] == -1)
  780. {
  781. $mess = __("All User Groups Must Be Assigned A Default Permission", "sforum");
  782. return $mess;
  783. }
  784. }
  785. # save the default permissions for the group
  786. for ($x=0; $x<count($ug_list); $x++)
  787. {
  788. if (sfa_get_defpermissions_role($group_id, $ug_list[$x]))
  789. {
  790. $sql = "
  791. UPDATE ".SFDEFPERMISSIONS."
  792. SET permission_role=$perm_list[$x]
  793. WHERE group_id=$group_id AND usergroup_id=$ug_list[$x]";
  794. $wpdb->query($sql);
  795. } else {
  796. sfa_add_defpermission_row($group_id, $ug_list[$x], $perm_list[$x]);
  797. }
  798. }
  799. if ($groupdata['group_name'] == $_POST['cgroup_name'] &&
  800. $groupdata['group_seq'] == $_POST['cgroup_seq'] &&
  801. $groupdata['group_desc'] == $_POST['cgroup_desc'] &&
  802. $groupdata['group_rss'] == $_POST['cgroup_rss'] &&
  803. $groupdata['group_message'] == $_POST['cgroup_message'] &&
  804. $groupdata['group_icon'] == $_POST['cgroup_icon'])
  805. {
  806. $mess = __("No Data Changed", "sforum");
  807. } else {
  808. # has the sequence changed?
  809. if ($groupdata['group_seq'] != $_POST['cgroup_seq'])
  810. {
  811. # need to iterate through the groups to change sequence number
  812. $groups = $wpdb->get_results("SELECT group_id, group_seq FROM ".SFGROUPS." WHERE group_id <> ".$group_id." ORDER BY group_seq;");
  813. $cnt = count($groups);
  814. for ($i = 0; $i < $cnt; $i++)
  815. {
  816. if (($i + 1) < $groupdata['group_seq'])
  817. {
  818. sfa_bump_group_seq($groups[$i]->group_id, ($i + 1));
  819. } else {
  820. sfa_bump_group_seq($groups[$i]->group_id, ($i + 2));
  821. }
  822. }
  823. }
  824. $sql = "UPDATE ".SFGROUPS." SET ";
  825. $sql.= 'group_name="'.$groupdata['group_name'].'", ';
  826. $sql.= 'group_desc="'.$groupdata['group_desc'].'", ';
  827. $sql.= 'group_icon="'.$groupdata['group_icon'].'", ';
  828. $sql.= 'group_rss="'.$groupdata['group_rss'].'", ';
  829. $sql.= 'group_message="'.$groupdata['group_message'].'", ';
  830. $sql.= 'group_seq='.$groupdata['group_seq']." ";
  831. $sql.= "WHERE group_id=".$group_id.";";
  832. $success = $wpdb->query($sql);
  833. if ($success == false)
  834. {
  835. $mess = __("Group Record Update Failed!", "sforum");
  836. } else {
  837. $mess = __("Forum Group Record Updated", "sforum");
  838. }
  839. }
  840. return $mess;
  841. }
  842. # function to update an existing permission set for a forum
  843. function sfa_save_forums_edit_perm()
  844. {
  845. global $wpdb;
  846. check_admin_referer('forum-adminform_permissionedit', 'forum-adminform_permissionedit');
  847. $permissiondata = array();
  848. $permission_id = sf_esc_int($_POST['permission_id']);
  849. $permissiondata['permission_role'] = sf_esc_int($_POST['role']);
  850. # dont do anything if the permission set wasnt actually updated
  851. if ($permissiondata['permission_role'] == $_POST['ugroup_perm'])
  852. {
  853. $mess = __("No Data Changed", "sforum");
  854. return;
  855. }
  856. # save the updated permission set info
  857. $sql = "UPDATE ".SFPERMISSIONS." SET ";
  858. $sql.= 'permission_role="'.$permissiondata['permission_role'].'" ';
  859. $sql.= "WHERE permission_id=".$permission_id.";";
  860. $success = $wpdb->query($sql);
  861. if ($success == false)
  862. {
  863. $mess = __("Permission Set Update Failed!", "sforum");
  864. } else {
  865. $mess = __("Permission Set Updated", "sforum");
  866. # get affected members
  867. $members = $wpdb->get_results("
  868. SELECT DISTINCT user_id
  869. FROM ".SFMEMBERSHIPS."
  870. WHERE usergroup_id = (
  871. SELECT usergroup_id
  872. FROM ".SFPERMISSIONS."
  873. WHERE permission_id = ".$permission_id."
  874. )
  875. ");
  876. sfc_rebuild_members_pm($members);
  877. }
  878. return $mess;
  879. }
  880. function sfa_bump_group_seq($id, $seq)
  881. {
  882. global $wpdb;
  883. $sql = "UPDATE ".SFGROUPS." SET ";
  884. $sql.= 'group_seq='.$seq." ";
  885. $sql.= "WHERE group_id=".$id.";";
  886. $wpdb->query($sql);
  887. return;
  888. }
  889. function sfa_bump_forum_seq($id, $seq)
  890. {
  891. global $wpdb;
  892. $sql = "UPDATE ".SFFORUMS." SET ";
  893. $sql.= 'forum_seq='.$seq." ";
  894. $sql.= "WHERE forum_id=".$id.";";
  895. $wpdb->query($sql);
  896. return;
  897. }
  898. function sfa_add_permission_data($forum_id, $usergroup_id, $permission)
  899. {
  900. global $wpdb;
  901. $forumid = esc_sql($forum_id);
  902. $usergroupid = esc_sql($usergroup_id);
  903. $perm = esc_sql($permission);
  904. $sql ="INSERT INTO ".SFPERMISSIONS." (forum_id, usergroup_id, permission_role) ";
  905. $sql.="VALUES ('".$forumid."', '".$usergroupid."', '".$perm."');";
  906. return $wpdb->query($sql);
  907. }
  908. function sfa_add_defpermission_row($group_id, $usergroup_id, $role)
  909. {
  910. global $wpdb;
  911. $sql = "
  912. INSERT INTO ".SFDEFPERMISSIONS."
  913. (group_id, usergroup_id, permission_role)
  914. VALUES
  915. ($group_id, $usergroup_id, $role)";
  916. return $wpdb->query($sql);
  917. }
  918. function sfa_resequence_forums($groupid, $parent)
  919. {
  920. global $sequence;
  921. $forums = sfa_get_group_forums_by_parent($groupid, $parent);
  922. if($forums)
  923. {
  924. foreach ($forums as $forum)
  925. {
  926. $sequence++;
  927. sfa_bump_forum_seq($forum->forum_id, $sequence);
  928. if($forum->children)
  929. {
  930. $childlist = array(unserialize($forum->children));
  931. if(count($childlist) > 0)
  932. {
  933. sfa_resequence_forums($groupid, $forum->forum_id);
  934. }
  935. }
  936. }
  937. }
  938. return;
  939. }
  940. function sfa_clean_forum_children()
  941. {
  942. global $wpdb;
  943. # Remove all chil records from forums
  944. $wpdb->query("UPDATE ".SFFORUMS." set children=''");
  945. # Now get ALL forums
  946. $forums = $wpdb->get_results("SELECT forum_id, parent FROM ".SFFORUMS);
  947. if($forums)
  948. {
  949. foreach($forums as $forum)
  950. {
  951. if($forum->parent != 0)
  952. {
  953. $childlist = $wpdb->get_row("SELECT group_id, children FROM ".SFFORUMS." WHERE forum_id=".$forum->parent);
  954. if($childlist->children)
  955. {
  956. $children=unserialize($childlist->children);
  957. } else {
  958. $children = array();
  959. }
  960. $children[]=$forum->forum_id;
  961. $wpdb->query("UPDATE ".SFFORUMS." set children='".serialize($children)."' WHERE forum_id=".$forum->parent);
  962. $wpdb->query("UPDATE ".SFFORUMS." set group_id=".$childlist->group_id." WHERE forum_id=".$forum->forum_id);
  963. }
  964. }
  965. }
  966. return;
  967. }
  968. function sfa_save_forums_global_rss()
  969. {
  970. global $wpdb;
  971. check_admin_referer('forum-adminform_globalrss', 'forum-adminform_globalrss');
  972. # update the globla rss replacement url
  973. sf_update_option('sfallRSSurl', sf_filter_save_cleanurl($_POST['sfallrssurl']));
  974. $mess = __("Global RSS Settings Updated!", "sforum");
  975. return $mess;
  976. }
  977. function sfa_save_forums_global_rssset()
  978. {
  979. global $wpdb;
  980. check_admin_referer('forum-adminform_globalrssset', 'forum-adminform_globalrssset');
  981. $private = sf_esc_int($_POST['sfglobalrssset']);
  982. $sql = "UPDATE ".SFFORUMS." SET ";
  983. $sql.= 'forum_rss_private='.$private;
  984. $success = $wpdb->query($sql);
  985. $mess = __("Global RSS Settings Updated!", "sforum");
  986. return $mess;
  987. }
  988. ?>