PageRenderTime 56ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 1ms

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

https://bitbucket.org/crypticrod/sr_wp_code
PHP | 1165 lines | 910 code | 175 blank | 80 comment | 204 complexity | c19465f9eb0c038c9ee01c98b8dbab8b MD5 | raw file
Possible License(s): AGPL-1.0, GPL-2.0, LGPL-2.1, GPL-3.0, LGPL-2.0, AGPL-3.0
  1. <?php
  2. /*
  3. Simple:Press
  4. Admin Forums Data Sae Support Functions
  5. $LastChangedDate: 2011-01-08 08:42:25 -0700 (Sat, 08 Jan 2011) $
  6. $Rev: 5277 $
  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. # Read the 'children' from the database because it is serialised
  405. $children = $wpdb->get_var("SELECT children FROM ".SFFORUMS." WHERE forum_id=".$forum_id);
  406. if($children)
  407. {
  408. $children = unserialize($children);
  409. foreach($children as $child)
  410. {
  411. $wpdb->query("UPDATE ".SFFORUMS." SET parent = null WHERE forum_id=".sf_esc_int($child));
  412. }
  413. }
  414. if($_POST['parent'])
  415. {
  416. $parentforum=$wpdb->get_var("SELECT children FROM ".SFFORUMS." WHERE forum_id=".sf_esc_int($_POST['parent']));
  417. $children = unserialize($parentforum);
  418. if(count($children) == 1)
  419. {
  420. $wpdb->query("UPDATE ".SFFORUMS." SET children = null WHERE forum_id=".sf_esc_int($_POST['parent']));
  421. } else {
  422. $newlist=array();
  423. foreach($children as $child)
  424. {
  425. if($child != $forum_id) $newlist[]=$child;
  426. }
  427. $wpdb->query("UPDATE ".SFFORUMS." SET children = '".serialize($newlist)."' WHERE forum_id=".sf_esc_int($_POST['parent']));
  428. }
  429. }
  430. # need to delete all topics in the forum using standard routine to clean up behind it
  431. $topics = $wpdb->get_results("SELECT topic_id FROM ".SFTOPICS." WHERE forum_id=".$forum_id);
  432. if ($topics)
  433. {
  434. foreach ($topics as $topic)
  435. {
  436. sf_delete_topic($topic->topic_id, false);
  437. }
  438. }
  439. # now delete the forum itself
  440. $wpdb->query("DELETE FROM ".SFFORUMS." WHERE forum_id=".$forum_id);
  441. # remove permissions for this forum
  442. $perms = sfa_get_forum_permissions($forum_id);
  443. if ($perms)
  444. {
  445. foreach ($perms as $perm)
  446. {
  447. sfa_remove_permission_data($perm->permission_id);
  448. }
  449. }
  450. # update pm flag for affected members
  451. sfc_rebuild_members_pm($members);
  452. # need to iterate through the groups
  453. $forums = sfa_get_forums_in_group($group_id);
  454. foreach ($forums as $forum)
  455. {
  456. if ($forum->forum_seq > $cseq)
  457. {
  458. sfa_bump_forum_seq($forum->forum_id, ($forum->forum_seq - 1));
  459. }
  460. }
  461. $mess = "Forum Deleted!";
  462. sfa_clean_forum_children();
  463. sfa_resequence_forums($group_id, 0);
  464. return $mess;
  465. }
  466. function sfa_save_forums_delete_group()
  467. {
  468. global $wpdb;
  469. check_admin_referer('forum-adminform_groupdelete', 'forum-adminform_groupdelete');
  470. $group_id = sf_esc_int($_POST['group_id']);
  471. $cseq = sf_esc_int($_POST['cgroup_seq']);
  472. # get affected members
  473. $members = $wpdb->get_results("
  474. SELECT DISTINCT user_id
  475. FROM ".SFMEMBERSHIPS."
  476. WHERE usergroup_id IN (
  477. SELECT usergroup_id
  478. FROM ".SFPERMISSIONS."
  479. WHERE forum_id IN (
  480. SELECT forum_id
  481. FROM ".SFFORUMS."
  482. WHERE group_id = ".$group_id."
  483. )
  484. )
  485. ");
  486. # remove permissions for each forum in group
  487. $forums = sfa_get_forums_in_group($group_id);
  488. if ($forums)
  489. {
  490. foreach ($forums as $forum)
  491. {
  492. # remove permissions for this forum
  493. $perms = sfa_get_forum_permissions($forum->forum_id);
  494. if ($perms)
  495. {
  496. foreach ($perms as $perm)
  497. {
  498. sfa_remove_permission_data($perm->permission_id);
  499. }
  500. }
  501. }
  502. }
  503. # rebuild pm column for affected members
  504. sfc_rebuild_members_pm($members);
  505. # select all the forums in the group
  506. $forums = sfa_get_forums_in_group($group_id);
  507. # remove the topics and posts in each forum
  508. foreach ($forums as $forum)
  509. {
  510. # need to delete all topics in the forum using standard routine to clean up behind it
  511. $topics = $wpdb->get_results("SELECT topic_id FROM ".SFTOPICS." WHERE forum_id=".$forum->forum_id);
  512. if ($topics)
  513. {
  514. foreach ($topics as $topic)
  515. {
  516. sf_delete_topic($topic->topic_id, false);
  517. }
  518. }
  519. }
  520. #now remove the forums themselves
  521. $wpdb->query("DELETE FROM ".SFFORUMS." WHERE group_id=".$group_id);
  522. # and finaly remove the group
  523. $wpdb->query("DELETE FROM ".SFGROUPS." WHERE group_id=".$group_id);
  524. # need to iterate through the groups
  525. $groups = sf_get_groups_all();
  526. foreach ($groups as $group)
  527. {
  528. if ($group->group_seq > $cseq)
  529. {
  530. sfa_bump_group_seq($group->group_id, ($group->group_seq - 1));
  531. }
  532. }
  533. # remove the default permissions for the group being deleted
  534. $wpdb->query("DELETE FROM ".SFDEFPERMISSIONS." WHERE group_id=".$group_id);
  535. $mess = __("Group Deleted", "sforum");
  536. return $mess;
  537. }
  538. # function to delete an existing permission set for a forum
  539. function sfa_save_forums_delete_perm()
  540. {
  541. global $wpdb;
  542. check_admin_referer('forum-adminform_permissiondelete', 'forum-adminform_permissiondelete');
  543. $permission_id = sf_esc_int($_POST['permission_id']);
  544. # get affected members
  545. $members = $wpdb->get_results("
  546. SELECT DISTINCT user_id
  547. FROM ".SFMEMBERSHIPS."
  548. WHERE usergroup_id = (
  549. SELECT usergroup_id
  550. FROM ".SFPERMISSIONS."
  551. WHERE permission_id = ".$permission_id."
  552. )
  553. ");
  554. # remove the permission set from the forum
  555. $success = sfa_remove_permission_data($permission_id);
  556. if ($success == false)
  557. {
  558. $mess = __("Permission Set Delete Failed!", "sforum");
  559. } else {
  560. $mess = __("Permission Set Deleted", "sforum");
  561. # rebuild pm flag for affected members
  562. sfc_rebuild_members_pm($members);
  563. }
  564. return $mess;
  565. }
  566. function sfa_save_forums_edit_forum()
  567. {
  568. global $wpdb;
  569. check_admin_referer('forum-adminform_forumedit', 'forum-adminform_forumedit');
  570. $forumdata = array();
  571. $forum_id = sf_esc_int($_POST['forum_id']);
  572. $forumdata['forum_name'] = sf_filter_title_save(trim($_POST['forum_name']));
  573. if(!empty($_POST['thisforumslug']))
  574. {
  575. $forumdata['forum_slug'] = sf_create_slug($_POST['thisforumslug'], 'forum', false);
  576. } else {
  577. $forumdata['forum_slug'] = sf_create_slug($forumdata['forum_name'], 'forum');
  578. }
  579. $forumdata['forum_desc'] = sf_filter_text_save(trim($_POST['forum_desc']));
  580. if(!isset($_POST['forum_seq']) || sf_esc_int($_POST['forum_seq'] == 0))
  581. {
  582. $mess = __("Unable to Save until Display Position is set", "sforum");
  583. return $mess;
  584. } else {
  585. $forumdata['forum_seq'] = sf_esc_int($_POST['forum_seq']);
  586. }
  587. $forumdata['group_id'] = sf_esc_int($_POST['group_id']);
  588. $forumdata['forum_status'] = 0;
  589. if (isset($_POST['forum_status']))
  590. {
  591. $forumdata['forum_status'] = 1;
  592. }
  593. $forumdata['use_tags'] = 0;
  594. if (isset($_POST['forum_tags']))
  595. {
  596. $forumdata['use_tags'] = 1;
  597. }
  598. $forumdata['post_ratings'] = 0;
  599. if (isset($_POST['forum_ratings']))
  600. {
  601. $forumdata['post_ratings'] = 1;
  602. }
  603. $forumdata['forum_rss_private'] = 0;
  604. if (isset($_POST['forum_private']))
  605. {
  606. $forumdata['forum_rss_private'] = 1;
  607. }
  608. $forumdata['forum_sitemap'] = 0;
  609. if (isset($_POST['forum_sitemap']))
  610. {
  611. $forumdata['forum_sitemap'] = 1;
  612. }
  613. if (!empty($_POST['forum_icon']))
  614. {
  615. # Check new icon exists
  616. $forumdata['forum_icon'] = sf_filter_title_save(trim($_POST['forum_icon']));
  617. $path = SFCUSTOM.$forumdata['forum_icon'];
  618. if (!file_exists($path))
  619. {
  620. $mess = sprintf(__("Custom Icon '%s' does not exist", "sforum"), $forumdata['forum_icon']);
  621. return $mess;
  622. }
  623. } else {
  624. $forumdata['forum_icon'] = NULL;
  625. }
  626. if (isset($_POST['forum_topic_status']))
  627. {
  628. if ($_POST['forum_topic_status'] == '')
  629. {
  630. $forumdata['topic_status_set'] = 0;
  631. # remove from all topics in the forum
  632. $wpdb->query("UPDATE ".SFTOPICS." SET topic_status_flag=0 WHERE forum_id=".$forum_id);
  633. } else {
  634. $forumdata['topic_status_set'] = $_POST['forum_topic_status'];
  635. }
  636. } else {
  637. $forumdata['topic_status_set'] = sf_esc_int($_POST['cforum_topic_status']);
  638. }
  639. if (isset($_POST['forum_rss']))
  640. {
  641. $forumdata['forum_rss'] = sf_filter_save_cleanurl($_POST['forum_rss']);
  642. } else {
  643. $forumdata['forum_rss'] = sf_filter_save_cleanurl($_POST['cforum_rss']);
  644. }
  645. $forumdata['forum_message'] = sf_filter_text_save(trim($_POST['forum_message']));
  646. if (($forumdata['forum_name'] == sf_filter_title_display($_POST['cforum_name'])) &&
  647. ($forumdata['forum_slug'] == $_POST['cforum_slug']) &&
  648. ($forumdata['forum_seq'] == $_POST['cforum_seq']) &&
  649. ($forumdata['group_id'] == $_POST['cgroup_id']) &&
  650. ($forumdata['forum_status'] == $_POST['cforum_status']) &&
  651. ($forumdata['use_tags'] == $_POST['cforum_tags']) &&
  652. ($forumdata['post_ratings'] == $_POST['cforum_ratings']) &&
  653. ($forumdata['forum_rss_private'] == $_POST['cforum_rss_private']) &&
  654. ($forumdata['forum_desc'] == $_POST['cforum_desc']) &&
  655. ($forumdata['forum_icon'] == $_POST['cforum_icon']) &&
  656. ($forumdata['forum_topic_status'] == $_POST['cforum_topic_status']) &&
  657. ($forumdata['forum_message'] == $_POST['cforum_message']) &&
  658. ($forumdata['forum_sitemap'] == $_POST['cforum_sitemap']) &&
  659. ($forumdata['forum_rss'] == $_POST['cforum_rss']))
  660. {
  661. $mess = __("No Data Changed", "sforum");
  662. return $mess;
  663. }
  664. # has the forum changed to a new group
  665. if ($forumdata['group_id'] != $_POST['cgroup_id'])
  666. {
  667. # let's resequence old group list first
  668. $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;");
  669. $cnt = count($forums);
  670. for ($i = 0; $i < $cnt; $i++)
  671. {
  672. sfa_bump_forum_seq($forums[$i]->forum_id, ($i + 1));
  673. }
  674. # now we can make room in new group
  675. $seq = $wpdb->get_var("SELECT MAX(forum_seq) FROM ".SFFORUMS." WHERE group_id=". $forumdata['group_id']) + 1;
  676. if ($forumdata['forum_seq'] < $seq)
  677. {
  678. $forums = sfa_get_forums_in_group($forumdata['group_id']);
  679. foreach ($forums as $forum)
  680. {
  681. if ($forum->forum_seq >= $forumdata['forum_seq'])
  682. {
  683. sfa_bump_forum_seq($forum->forum_id, ($forum->forum_seq + 1));
  684. }
  685. }
  686. }
  687. } else {
  688. # same group but has the seq changed?
  689. if ($forumdata['forum_seq'] != $_POST['cforum_seq'])
  690. {
  691. $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;");
  692. $cnt = count($forums);
  693. for ($i = 0; $i < $cnt; $i++)
  694. {
  695. if (($i + 1) < $forumdata['forum_seq'])
  696. {
  697. sfa_bump_forum_seq($forums[$i]->forum_id, ($i + 1));
  698. } else {
  699. sfa_bump_forum_seq($forums[$i]->forum_id, ($i + 2));
  700. }
  701. }
  702. }
  703. }
  704. # Finally - we can save the updated forum record!
  705. if(empty($forumdata['forum_slug']))
  706. {
  707. $forumslug = sf_create_slug($forumdata['forum_name'], 'forum');
  708. if(empty($forumslug)) $forumslug = 'forum-'.$forum_id;
  709. } else {
  710. $forumslug = $forumdata['forum_slug'];
  711. }
  712. # Let's make sure parent is set
  713. if($_POST['forumtype'] == 1)
  714. {
  715. $parent = 0;
  716. } else {
  717. $parent = sf_esc_int($_POST['forum_parent']);
  718. }
  719. $sql = "UPDATE ".SFFORUMS." SET ";
  720. $sql.= 'forum_name="'.$forumdata['forum_name'].'", ';
  721. $sql.= 'forum_slug="'.$forumslug.'", ';
  722. $sql.= 'forum_desc="'.$forumdata['forum_desc'].'", ';
  723. $sql.= 'group_id='.$forumdata['group_id'].', ';
  724. $sql.= 'forum_status='.$forumdata['forum_status'].', ';
  725. $sql.= 'use_tags='.$forumdata['use_tags'].', ';
  726. $sql.= 'post_ratings='.$forumdata['post_ratings'].', ';
  727. $sql.= 'forum_rss_private='.$forumdata['forum_rss_private'].', ';
  728. $sql.= 'forum_icon="'.$forumdata['forum_icon'].'", ';
  729. $sql.= 'topic_status_set='.$forumdata['topic_status_set'].', ';
  730. $sql.= 'forum_rss="'.$forumdata['forum_rss'].'", ';
  731. $sql.= 'in_sitemap="'.$forumdata['forum_sitemap'].'", ';
  732. $sql.= 'parent='.$parent.', ';
  733. $sql.= 'forum_message="'.$forumdata['forum_message'].'", ';
  734. $sql.= 'forum_seq='.$forumdata['forum_seq']." ";
  735. $sql.= "WHERE forum_id=".$forum_id.";";
  736. $success = $wpdb->query($sql);
  737. if ($success == false)
  738. {
  739. $mess = __("Forum Record Update Failed!", "sforum");
  740. } else {
  741. $mess = __("Forum Record Updated", "sforum");
  742. }
  743. sfa_clean_forum_children();
  744. sfa_resequence_forums($forumdata['group_id'], 0);
  745. return $mess;
  746. }
  747. function sfa_save_forums_edit_group()
  748. {
  749. global $wpdb;
  750. check_admin_referer('forum-adminform_groupedit', 'forum-adminform_groupedit');
  751. $groupdata = array();
  752. $group_id = sf_esc_int($_POST['group_id']);
  753. $groupdata['group_name'] = sf_filter_title_save(trim($_POST['group_name']));
  754. $groupdata['group_seq'] = sf_filter_title_save(trim($_POST['group_seq']));
  755. $groupdata['group_desc'] = sf_filter_text_save(trim($_POST['group_desc']));
  756. $groupdata['group_message'] = sf_filter_text_save(trim($_POST['group_message']));
  757. $ug_list = array_unique($_POST['usergroup_id']);
  758. $perm_list = $_POST['role'];
  759. if (!empty($_POST['group_icon']))
  760. {
  761. # Check new icon exists
  762. $groupdata['group_icon'] = sf_filter_title_save(trim($_POST['group_icon']));
  763. $path = SFCUSTOM.$groupdata['group_icon'];
  764. if (!file_exists($path))
  765. {
  766. $mess = sprintf(__("Custom Icon '%s' does not exist", "sforum"), $groupdata['group_icon']);
  767. return $mess;
  768. }
  769. } else {
  770. $groupdata['group_icon'] = NULL;
  771. }
  772. if (isset($_POST['group_rss']))
  773. {
  774. $groupdata['group_rss'] = sf_filter_save_cleanurl($_POST['group_rss']);
  775. } else {
  776. $groupdata['group_rss'] = sf_filter_save_cleanurl($_POST['cgroup_rss']);
  777. }
  778. # fail if any user groups arent assigned a permission
  779. for ($x=0; $x<count($perm_list); $x++)
  780. {
  781. if ($perm_list[$x] == -1)
  782. {
  783. $mess = __("All User Groups Must Be Assigned A Default Permission", "sforum");
  784. return $mess;
  785. }
  786. }
  787. # save the default permissions for the group
  788. for ($x=0; $x<count($ug_list); $x++)
  789. {
  790. if (sfa_get_defpermissions_role($group_id, $ug_list[$x]))
  791. {
  792. $sql = "
  793. UPDATE ".SFDEFPERMISSIONS."
  794. SET permission_role=$perm_list[$x]
  795. WHERE group_id=$group_id AND usergroup_id=$ug_list[$x]";
  796. $wpdb->query($sql);
  797. } else {
  798. sfa_add_defpermission_row($group_id, $ug_list[$x], $perm_list[$x]);
  799. }
  800. }
  801. if ($groupdata['group_name'] == $_POST['cgroup_name'] &&
  802. $groupdata['group_seq'] == $_POST['cgroup_seq'] &&
  803. $groupdata['group_desc'] == $_POST['cgroup_desc'] &&
  804. $groupdata['group_rss'] == $_POST['cgroup_rss'] &&
  805. $groupdata['group_message'] == $_POST['cgroup_message'] &&
  806. $groupdata['group_icon'] == $_POST['cgroup_icon'])
  807. {
  808. $mess = __("No Data Changed", "sforum");
  809. } else {
  810. # has the sequence changed?
  811. if ($groupdata['group_seq'] != $_POST['cgroup_seq'])
  812. {
  813. # need to iterate through the groups to change sequence number
  814. $groups = $wpdb->get_results("SELECT group_id, group_seq FROM ".SFGROUPS." WHERE group_id <> ".$group_id." ORDER BY group_seq;");
  815. $cnt = count($groups);
  816. for ($i = 0; $i < $cnt; $i++)
  817. {
  818. if (($i + 1) < $groupdata['group_seq'])
  819. {
  820. sfa_bump_group_seq($groups[$i]->group_id, ($i + 1));
  821. } else {
  822. sfa_bump_group_seq($groups[$i]->group_id, ($i + 2));
  823. }
  824. }
  825. }
  826. $sql = "UPDATE ".SFGROUPS." SET ";
  827. $sql.= 'group_name="'.$groupdata['group_name'].'", ';
  828. $sql.= 'group_desc="'.$groupdata['group_desc'].'", ';
  829. $sql.= 'group_icon="'.$groupdata['group_icon'].'", ';
  830. $sql.= 'group_rss="'.$groupdata['group_rss'].'", ';
  831. $sql.= 'group_message="'.$groupdata['group_message'].'", ';
  832. $sql.= 'group_seq='.$groupdata['group_seq']." ";
  833. $sql.= "WHERE group_id=".$group_id.";";
  834. $success = $wpdb->query($sql);
  835. if ($success == false)
  836. {
  837. $mess = __("Group Record Update Failed!", "sforum");
  838. } else {
  839. $mess = __("Forum Group Record Updated", "sforum");
  840. }
  841. }
  842. return $mess;
  843. }
  844. # function to update an existing permission set for a forum
  845. function sfa_save_forums_edit_perm()
  846. {
  847. global $wpdb;
  848. check_admin_referer('forum-adminform_permissionedit', 'forum-adminform_permissionedit');
  849. $permissiondata = array();
  850. $permission_id = sf_esc_int($_POST['permission_id']);
  851. $permissiondata['permission_role'] = sf_esc_int($_POST['role']);
  852. # dont do anything if the permission set wasnt actually updated
  853. if ($permissiondata['permission_role'] == $_POST['ugroup_perm'])
  854. {
  855. $mess = __("No Data Changed", "sforum");
  856. return;
  857. }
  858. # save the updated permission set info
  859. $sql = "UPDATE ".SFPERMISSIONS." SET ";
  860. $sql.= 'permission_role="'.$permissiondata['permission_role'].'" ';
  861. $sql.= "WHERE permission_id=".$permission_id.";";
  862. $success = $wpdb->query($sql);
  863. if ($success == false)
  864. {
  865. $mess = __("Permission Set Update Failed!", "sforum");
  866. } else {
  867. $mess = __("Permission Set Updated", "sforum");
  868. # get affected members
  869. $members = $wpdb->get_results("
  870. SELECT DISTINCT user_id
  871. FROM ".SFMEMBERSHIPS."
  872. WHERE usergroup_id = (
  873. SELECT usergroup_id
  874. FROM ".SFPERMISSIONS."
  875. WHERE permission_id = ".$permission_id."
  876. )
  877. ");
  878. sfc_rebuild_members_pm($members);
  879. }
  880. return $mess;
  881. }
  882. function sfa_bump_group_seq($id, $seq)
  883. {
  884. global $wpdb;
  885. $sql = "UPDATE ".SFGROUPS." SET ";
  886. $sql.= 'group_seq='.$seq." ";
  887. $sql.= "WHERE group_id=".$id.";";
  888. $wpdb->query($sql);
  889. return;
  890. }
  891. function sfa_bump_forum_seq($id, $seq)
  892. {
  893. global $wpdb;
  894. $sql = "UPDATE ".SFFORUMS." SET ";
  895. $sql.= 'forum_seq='.$seq." ";
  896. $sql.= "WHERE forum_id=".$id.";";
  897. $wpdb->query($sql);
  898. return;
  899. }
  900. function sfa_add_permission_data($forum_id, $usergroup_id, $permission)
  901. {
  902. global $wpdb;
  903. $forumid = esc_sql($forum_id);
  904. $usergroupid = esc_sql($usergroup_id);
  905. $perm = esc_sql($permission);
  906. $sql ="INSERT INTO ".SFPERMISSIONS." (forum_id, usergroup_id, permission_role) ";
  907. $sql.="VALUES ('".$forumid."', '".$usergroupid."', '".$perm."');";
  908. return $wpdb->query($sql);
  909. }
  910. function sfa_add_defpermission_row($group_id, $usergroup_id, $role)
  911. {
  912. global $wpdb;
  913. $sql = "
  914. INSERT INTO ".SFDEFPERMISSIONS."
  915. (group_id, usergroup_id, permission_role)
  916. VALUES
  917. ($group_id, $usergroup_id, $role)";
  918. return $wpdb->query($sql);
  919. }
  920. function sfa_resequence_forums($groupid, $parent)
  921. {
  922. global $sequence;
  923. $forums = sfa_get_group_forums_by_parent($groupid, $parent);
  924. if($forums)
  925. {
  926. foreach ($forums as $forum)
  927. {
  928. $sequence++;
  929. sfa_bump_forum_seq($forum->forum_id, $sequence);
  930. if($forum->children)
  931. {
  932. $childlist = array(unserialize($forum->children));
  933. if(count($childlist) > 0)
  934. {
  935. sfa_resequence_forums($groupid, $forum->forum_id);
  936. }
  937. }
  938. }
  939. }
  940. return;
  941. }
  942. function sfa_clean_forum_children()
  943. {
  944. global $wpdb;
  945. # Remove all chil records from forums
  946. $wpdb->query("UPDATE ".SFFORUMS." set children=''");
  947. # Now get ALL forums
  948. $forums = $wpdb->get_results("SELECT forum_id, parent FROM ".SFFORUMS);
  949. if($forums)
  950. {
  951. foreach($forums as $forum)
  952. {
  953. if($forum->parent != 0)
  954. {
  955. $childlist = $wpdb->get_row("SELECT group_id, children FROM ".SFFORUMS." WHERE forum_id=".$forum->parent);
  956. if($childlist->children)
  957. {
  958. $children=unserialize($childlist->children);
  959. } else {
  960. $children = array();
  961. }
  962. $children[]=$forum->forum_id;
  963. $wpdb->query("UPDATE ".SFFORUMS." set children='".serialize($children)."' WHERE forum_id=".$forum->parent);
  964. $wpdb->query("UPDATE ".SFFORUMS." set group_id=".$childlist->group_id." WHERE forum_id=".$forum->forum_id);
  965. }
  966. }
  967. }
  968. return;
  969. }
  970. function sfa_save_forums_global_rss()
  971. {
  972. global $wpdb;
  973. check_admin_referer('forum-adminform_globalrss', 'forum-adminform_globalrss');
  974. # update the globla rss replacement url
  975. sf_update_option('sfallRSSurl', sf_filter_save_cleanurl($_POST['sfallrssurl']));
  976. $mess = __("Global RSS Settings Updated!", "sforum");
  977. return $mess;
  978. }
  979. function sfa_save_forums_global_rssset()
  980. {
  981. global $wpdb;
  982. check_admin_referer('forum-adminform_globalrssset', 'forum-adminform_globalrssset');
  983. $private = sf_esc_int($_POST['sfglobalrssset']);
  984. $sql = "UPDATE ".SFFORUMS." SET ";
  985. $sql.= 'forum_rss_private='.$private;
  986. $success = $wpdb->query($sql);
  987. $mess = __("Global RSS Settings Updated!", "sforum");
  988. return $mess;
  989. }
  990. ?>