Advertisement
Guest User

Untitled

a guest
Jun 27th, 2016
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 30.25 KB | None | 0 0
  1. <?php
  2. // Disallow direct access to this file for security reasons
  3. if(!defined('IN_MYBB'))
  4. {
  5. die('Direct initialization of this file is not allowed.<br /><br />Please make sure IN_MYBB is defined.');
  6. }
  7.  
  8. // Pre-load templates
  9. global $mybb, $templatelist;
  10.  
  11. if(THIS_SCRIPT == 'memberlist.php' && $mybb->input['action'] == 'staff')
  12. {
  13. if(isset($templatelist))
  14. {
  15. $templatelist .= ',';
  16. }
  17.  
  18. $templatelist .= 'staff_page2,staff_page2_group_row,staff_page2_member_row,staff_page2_no_groups,staff_page2_no_members,staff_page2_user_avatar,postbit_pm,postbit_email';
  19. }
  20.  
  21. // Public hooks
  22. $plugins->add_hook('memberlist_start', 'staff_page2_memberlist');
  23. $plugins->add_hook('showteam_start', 'staff_page2_showteam');
  24.  
  25. // Admin CP hooks
  26. $plugins->add_hook('admin_config_menu', 'staff_page2_admin_config_menu');
  27. $plugins->add_hook('admin_config_action_handler', 'staff_page2_admin_config_action_handler');
  28. $plugins->add_hook('admin_config_permissions', 'staff_page2_admin_config_permissions');
  29. $plugins->add_hook('admin_load', 'staff_page2_admin');
  30. $plugins->add_hook('admin_formcontainer_end', 'staff_page2_admin_formcontainer_end');
  31. $plugins->add_hook('admin_user_groups_edit_commit', 'staff_page2_admin_user_groups_edit_commit');
  32.  
  33. function staff_page2_info()
  34. {
  35. return array(
  36. 'name' => 'Staff Page',
  37. 'description' => 'A plugin adds a page, which displays a list of the staff members. The list content can be managed and description of users can be added.',
  38. 'website' => 'http://github.com/mrnu/staff-page',
  39. 'author' => 'mrnu',
  40. 'authorsite' => 'http://github.com/mrnu',
  41. 'version' => '1.0',
  42. 'compatibility' => '18*',
  43. 'codename' => 'staff_page2'
  44. );
  45. }
  46.  
  47. /**
  48. * Code hooked to memberlist_start.
  49. * Display generated staff page.
  50. *
  51. */
  52. function staff_page2_memberlist()
  53. {
  54. global $mybb, $lang;
  55.  
  56. // Check if the staff page were requested - memberlist.php?action=staff.
  57. if($mybb->input['action'] == 'staff')
  58. {
  59. if(!$mybb->usergroup['canseestaffpage'])
  60. {
  61. error_no_permission();
  62. }
  63.  
  64. // Load language
  65. $lang->load('staff_page2');
  66.  
  67. add_breadcrumb($lang->staff, 'memberlist.php?action=staff');
  68.  
  69. // Get the template and output the page
  70. $staff_page2_template = display_staff_page2();
  71. output_page($staff_page2_template);
  72. exit();
  73. }
  74. }
  75.  
  76. /**
  77. * Code hooked to showteam_satrt.
  78. * Redirect to the custom staff page.
  79. *
  80. */
  81. function staff_page2_showteam()
  82. {
  83. global $mybb;
  84.  
  85. if($mybb->settings['staff_page2_showteam_redirect'])
  86. {
  87. header('Location: memberlist.php?action=staff');
  88. exit();
  89. }
  90. }
  91.  
  92.  
  93. /**
  94. * Function which generates the staff page.
  95. *
  96. * @return string Staff page template.
  97. */
  98. function display_staff_page2()
  99. {
  100. global $db, $lang, $theme, $templates, $plugins, $mybb, $cache;
  101. global $header, $headerinclude, $footer;
  102.  
  103. // Get staff members and sort them by groups
  104. $members = get_staff_members($mybb->input['group_id'] ? $mybb->input['group_id'] : 0);
  105. $members = sort_members_by_group_id($members);
  106.  
  107. // Get groups
  108. $groups = get_staff_groups();
  109.  
  110. if(count($groups))
  111. {
  112. // Output all groups
  113. $groups_rows = '';
  114.  
  115. foreach($groups as $group)
  116. {
  117. // Reset alt_trow()
  118. $reset = 1;
  119.  
  120. if(count($members[$group['id']]))
  121. {
  122. // Initialize parser to handle MyCode inside members' description
  123. require_once MYBB_ROOT.'inc/class_parser.php';
  124. $parser = new postParser;
  125. $parser_options = array(
  126. 'allow_html' => 0,
  127. 'allow_mycode' => 1,
  128. 'allow_smilies' => 1,
  129. 'allow_imgcode' => 1,
  130. 'allow_videocode' => 0,
  131. 'filter_badwords' => 0
  132. );
  133.  
  134. // Output members of group
  135. $members_rows = '';
  136.  
  137. foreach($members[$group['id']] as $member)
  138. {
  139. // Format MyBB user's details
  140. $member['formatted_name'] = format_name($member['username'], $member['usergroup'], $member['displaygroup']);
  141. $member['profilelink'] = build_profile_link($member['formatted_name'], $member['user_id']);
  142. $member['profileurl'] = get_profile_link($member['user_id']);
  143.  
  144. // Parse member's description
  145. $description = $parser->parse_message($member['description'], $parser_options);
  146.  
  147. // Show "Send email" link
  148. $emailcode = '';
  149.  
  150. if($member['hideemail'] != 1)
  151. {
  152. $post['uid'] = $member['user_id'];
  153. eval("\$emailcode = \"".$templates->get("postbit_email")."\";");
  154. }
  155.  
  156. // Show "Send PM" link
  157. $pmcode = '';
  158.  
  159. if($member['receivepms'] != 0 && $mybb->settings['enablepms'] != 0 && my_strpos(','.$member['ignorelist'].',', ','.$mybb->user['uid'].',') === false)
  160. {
  161. $post['uid'] = $member['user_id'];
  162. eval("\$pmcode = \"".$templates->get("postbit_pm")."\";");
  163. }
  164.  
  165. // Show avatar
  166. $useravatar = format_avatar(htmlspecialchars_uni($member['avatar']), $member['avatardimensions'], my_strtolower($mybb->settings['staff_page2_maxavatarsize']));
  167. eval("\$member['avatar'] = \"".$templates->get("staff_page2_user_avatar")."\";");
  168.  
  169. // Alternate rows.
  170. $bgcolor = alt_trow($reset);
  171.  
  172. // Don't reset alt_trow()
  173. $reset = 0;
  174.  
  175. // Output member row template
  176. eval('$members_rows .= "'.$templates->get('staff_page2_member_row').'";');
  177.  
  178.  
  179. }
  180. }
  181. // No members
  182. else
  183. {
  184. eval('$members_rows = "'.$templates->get('staff_page2_no_members').'";');
  185. }
  186.  
  187. eval('$groups_rows .= "'.$templates->get('staff_page2_group_row').'";');
  188. }
  189. }
  190. // No groups
  191. else
  192. {
  193. eval('$groups_rows .= "'.$templates->get('staff_page2_no_groups').'";');
  194. }
  195.  
  196.  
  197. eval('$template = "'.$templates->get('staff_page2').'";');
  198. return $template;
  199. }
  200.  
  201.  
  202. /**
  203. * Get members of staff.
  204. * @param int $group_id Group ID.
  205. *
  206. * @return array Members list.
  207. */
  208. function get_staff_members($group_id = 0)
  209. {
  210. global $db;
  211.  
  212. $members = array();
  213.  
  214. if($group_id)
  215. {
  216. $where_clause = 'm.group_id = ' . intval($group_id);
  217. }
  218. else
  219. {
  220. $where_clause = '1';
  221. }
  222.  
  223. //$query = $db->simple_select('staff_page2_members', '*', $where_clause, array('order_by' => 'user_id', 'order_dir' => 'ASC'));
  224.  
  225. $query = $db->query('
  226. SELECT m.*, u.username, u.uid, u.usergroup, u.displaygroup, u.avatar, u.avatardimensions, u.hideemail, u.receivepms, u.ignorelist
  227. FROM '.TABLE_PREFIX.'staff_page2_members m
  228. LEFT JOIN '.TABLE_PREFIX.'users u ON(m.user_id = u.uid)
  229. WHERE '.$where_clause.'
  230. ORDER BY m.list_order ASC, u.username ASC
  231. ');
  232.  
  233. if($db->num_rows($query))
  234. {
  235. while($row = $db->fetch_array($query))
  236. {
  237. $members[] = $row;
  238. }
  239. }
  240.  
  241. return $members;
  242. }
  243.  
  244. /**
  245. * Update the staff groups cache.
  246. *
  247. */
  248. function recache_staff_groups()
  249. {
  250. global $db, $cache;
  251.  
  252. $query = $db->simple_select('staff_page2_groups', '*', '1', array('order_by' => 'list_order', 'order_dir' => 'asc'));
  253.  
  254. $groups = array();
  255.  
  256. if($db->num_rows($query))
  257. {
  258. while($row = $db->fetch_array($query))
  259. {
  260. $groups[] = $row;
  261. }
  262. }
  263.  
  264. $cache->update('staff_page2_groups', $groups);
  265. }
  266.  
  267. /**
  268. * Get the staff groups from cachestore.
  269. *
  270. * @return array List of staff groups.
  271. */
  272. function get_staff_groups()
  273. {
  274. global $cache;
  275.  
  276. $groups = $cache->read('staff_page2_groups');
  277.  
  278. if(!is_array($groups))
  279. {
  280. return array();
  281. }
  282.  
  283. return $groups;
  284. }
  285.  
  286. /**
  287. * Sort members array by group ID.
  288. * Adds group ID as a main key.
  289. *
  290. * @return array
  291. */
  292. function sort_members_by_group_id($members_array)
  293. {
  294. if(!count($members_array))
  295. {
  296. return array();
  297. }
  298.  
  299. $new_array = array();
  300.  
  301. foreach($members_array as $row)
  302. {
  303. $new_array[$row['group_id']][] = $row;
  304. }
  305.  
  306. return $new_array;
  307. }
  308.  
  309. /**
  310. * Code hooked to page_admin_config_menu.
  311. * Adds link to the staff page configuration in the config menu.
  312. *
  313. */
  314. function staff_page2_admin_config_menu($sub_menu)
  315. {
  316. global $lang;
  317.  
  318. $lang->load('staff_page2');
  319.  
  320. $sub_menu[] = array('id' => 'staff_page2', 'title' => $lang->staff_page2, 'link' => 'index.php?module=config-staff_page2');
  321.  
  322. return $sub_menu;
  323. }
  324.  
  325. /**
  326. * Code hooked to page_admin_config_action_handler.
  327. * Adds action for the staff page configuration
  328. *
  329. */
  330. function staff_page2_admin_config_action_handler($actions)
  331. {
  332. $actions['staff_page2'] = array('active' => 'staff_page2', 'file' => 'staff_page2');
  333.  
  334. return $actions;
  335. }
  336.  
  337. /**
  338. * Code hooked to page_admin_config_permissions.
  339. * Add permission to see the staff page configuration.
  340. *
  341. */
  342. function staff_page2_admin_config_permissions($admin_permissions)
  343. {
  344. global $lang;
  345.  
  346. $lang->load('staff_page2');
  347.  
  348. $admin_permissions['staff_page2'] = $lang->staff_page2_admin_permission;
  349.  
  350. return $admin_permissions;
  351. }
  352.  
  353.  
  354.  
  355.  
  356. /**
  357. * Code hooked to page_admin_config_permissions.
  358. * Add group permissions which allows groups to see the staff page.
  359. *
  360. */
  361. function staff_page2_admin_formcontainer_end()
  362. {
  363. global $run_module, $form_container, $lang, $form, $mybb;
  364.  
  365. if($run_module == "user" && !empty($form_container->_title) && !empty($lang->users_permissions) && $form_container->_title == $lang->users_permissions) {
  366.  
  367. $options = array();
  368. $options[] = $form->generate_check_box('canseestaffpage', 1, $lang->can_see_staff_page2, array('checked' => $mybb->input['canseestaffpage']));
  369.  
  370. $form_container->output_row($lang->staff_page2, '', '<div class="group_settings_bit">'.implode('</div><div class="group_settings_bit">', $options).'</div>');
  371. }
  372. }
  373.  
  374. /**
  375. * Code hooked to admin_user_groups_edit_commit
  376. * Update group permissions which allows groups to see the staff page.
  377. *
  378. */
  379. function staff_page2_admin_user_groups_edit_commit($admin_permissions)
  380. {
  381. global $updated_group, $mybb;
  382.  
  383. $updated_group['canseestaffpage'] = $mybb->input['canseestaffpage'];
  384. }
  385.  
  386. /**
  387. * Code hooked to admin_load.
  388. * The code of our configuration panel.
  389. *
  390. */
  391. function staff_page2_admin()
  392. {
  393. global $db, $lang, $mybb, $page, $run_module, $action_file;
  394.  
  395. if($run_module == 'config' && $action_file == 'staff_page2')
  396. {
  397. $lang->load('staff_page2');
  398.  
  399. $page->add_breadcrumb_item($lang->staff_page2, 'index.php?module=config-staff_page2');
  400.  
  401. $sub_tabs['manage_staff_page2'] = array(
  402. 'title' => $lang->staff_page2,
  403. 'link' => 'index.php?module=config-staff_page2',
  404. 'description' => $lang->staff_page2_description
  405. );
  406.  
  407. $sub_tabs['add_member'] = array(
  408. 'title' => $lang->add_member,
  409. 'link' => 'index.php?module=config-staff_page2&amp;action=add_member',
  410. 'description' => $lang->add_member_description
  411. );
  412.  
  413. $sub_tabs['add_group'] = array(
  414. 'title' => $lang->add_group,
  415. 'link' => 'index.php?module=config-staff_page2&amp;action=add_group',
  416. 'description' => $lang->add_group_description
  417. );
  418.  
  419. // View groups and members
  420. if(!$mybb->input['action'])
  421. {
  422. $page->output_header($lang->staff_page2);
  423. $page->output_nav_tabs($sub_tabs, 'manage_staff_page2');
  424.  
  425. $table = new Table;
  426. $table->construct_header($lang->name);
  427. $table->construct_header($lang->order);
  428. $table->construct_header($lang->action, array('class' => "align_center", 'colspan' => 2));
  429.  
  430. $members = get_staff_members();
  431. $members = sort_members_by_group_id($members);
  432. $groups = get_staff_groups();
  433.  
  434. if(count($groups))
  435. {
  436. foreach($groups as $group)
  437. {
  438. $table->construct_cell('<div class="largetext"><strong>'.$group['name'].'</strong></div><div class="smalltext">'.$group['description'].'</div>');
  439. $table->construct_cell($group['list_order']);
  440. $table->construct_cell("<a href=\"index.php?module=config-staff_page2&amp;action=edit_group&amp;uid={$group['id']}\">{$lang->edit}</a>");
  441. $table->construct_cell("<a href=\"index.php?module=config-staff_page2&amp;action=delete_group&amp;uid={$group['id']}\">{$lang->delete}</a>");
  442. $table->construct_row();
  443.  
  444. if(count($members[$group['id']]))
  445. {
  446. foreach($members[$group['id']] as $member)
  447. {
  448. $member['formatted_name'] = format_name($member['username'], $member['usergroup'], $member['displaygroup']);
  449.  
  450. $table->construct_cell('<div style="padding-left: 40px;" class="largetext">'.$member['formatted_name'].'</div><div class="smalltext" style="padding-left: 50px;">'.$member['description'].'</div>');
  451. $table->construct_cell($member['list_order']);
  452. $table->construct_cell("<a href=\"index.php?module=config-staff_page2&amp;action=edit_member&amp;uid={$member['id']}\">{$lang->edit}</a>");
  453. $table->construct_cell("<a href=\"index.php?module=config-staff_page2&amp;action=delete_member&amp;uid={$member['id']}\">{$lang->delete}</a>");
  454. $table->construct_row();
  455. }
  456. }
  457. }
  458. }
  459. else
  460. {
  461. $table->construct_cell($lang->no_groups, array('colspan' => 4));
  462. $table->construct_row();
  463. }
  464.  
  465. $table->output($lang->staff_page2);
  466.  
  467. $page->output_footer();
  468. exit();
  469. }
  470.  
  471. // Add group
  472. if($mybb->input['action'] == 'add_group')
  473. {
  474. $page->output_header($lang->staff_page2.' - '.$lang->add_group);
  475. $page->output_nav_tabs($sub_tabs, 'add_group');
  476.  
  477. if($mybb->request_method == 'post')
  478. {
  479. if(!trim($mybb->input['name']))
  480. {
  481. $errors[] = $lang->empty_name;
  482. }
  483.  
  484. if(!$errors)
  485. {
  486. $insert_array = array(
  487. 'name' => $db->escape_string($mybb->input['name']),
  488. 'description' => $db->escape_string($mybb->input['description']),
  489. 'list_order' => intval($mybb->input['list_order'])
  490. );
  491.  
  492. $db->insert_query('staff_page2_groups', $insert_array);
  493.  
  494. recache_staff_groups();
  495.  
  496. admin_redirect('index.php?module=config-staff_page2');
  497. }
  498. }
  499.  
  500. if($errors)
  501. {
  502. $page->output_inline_error($errors);
  503. }
  504.  
  505. $form = new Form('index.php?module=config-staff_page2&amp;action=add_group', 'post', 'add');
  506. $form_container = new FormContainer($lang->add_group);
  507. $form_container->output_row($lang->name, '', $form->generate_text_box('name', $mybb->input['name']));
  508. $form_container->output_row($lang->order, '', $form->generate_text_box('list_order', $mybb->input['list_order']));
  509. $form_container->output_row($lang->description, '', $form->generate_text_area('description', $mybb->input['description']));
  510. $form_container->end();
  511.  
  512. $buttons[] = $form->generate_submit_button($lang->save);
  513.  
  514. $form->output_submit_wrapper($buttons);
  515.  
  516. $form->end();
  517.  
  518. $page->output_footer();
  519. exit();
  520. }
  521.  
  522. // Add member
  523. if($mybb->input['action'] == 'add_member')
  524. {
  525. $page->output_header($lang->staff_page2.' - '.$lang->add_member);
  526. $page->output_nav_tabs($sub_tabs, 'add_member');
  527. $page->add_breadcrumb_item($lang->add_member);
  528.  
  529. $groups = get_staff_groups();
  530.  
  531. if(!count($groups))
  532. {
  533. flash_message($lang->add_group_first, 'error');
  534. admin_redirect('index.php?module=config-staff_page2');
  535. }
  536.  
  537. if($mybb->request_method == 'post')
  538. {
  539. // Check if chosen group exists
  540. $i = 0;
  541.  
  542. foreach($groups as $group)
  543. {
  544. if($group['id'] == $mybb->input['group_id'])
  545. {
  546. $i++;
  547. break;
  548. }
  549. }
  550.  
  551. if(!$i)
  552. {
  553. $errors[] = $lang->wrong_group;
  554. }
  555.  
  556. // Check if chosen user exists
  557. if($mybb->input['name'])
  558. {
  559. $query = $db->simple_select('users', 'uid', 'username = \''.$db->escape_string($mybb->input['name']).'\'');
  560. $user = $db->fetch_array($query);
  561. }
  562. else
  563. {
  564. $user = array('uid' => 0);
  565. }
  566.  
  567. if(!$user['uid'])
  568. {
  569. $errors[] = $lang->user_not_exist;
  570. }
  571.  
  572. // Insert member
  573. if(!$errors)
  574. {
  575. $insert_array = array(
  576. 'user_id' => $user['uid'],
  577. 'group_id' => intval($mybb->input['group_id']),
  578. 'list_order' => intval($mybb->input['list_order'])
  579. );
  580.  
  581. $db->insert_query('staff_page2_members', $insert_array);
  582.  
  583. admin_redirect('index.php?module=config-staff_page2');
  584. }
  585. }
  586.  
  587. if($errors)
  588. {
  589. $page->output_inline_error($errors);
  590. }
  591.  
  592. // Prepare groups array to be a select list
  593. $groups_select = array();
  594.  
  595. foreach($groups as $group)
  596. {
  597. $groups_select[$group['id']] = $group['name'];
  598. }
  599.  
  600. // Generate a form
  601. $form = new Form('index.php?module=config-staff_page2&amp;action=add_member', 'post', 'add');
  602. $form_container = new FormContainer($lang->add_member);
  603. $form_container->output_row($lang->name, '', $form->generate_text_box('name', $mybb->input['name']));
  604. $form_container->output_row($lang->order, '', $form->generate_text_box('list_order', $mybb->input['list_order']));
  605. $form_container->output_row($lang->group, '', $form->generate_select_box('group_id', $groups_select, $mybb->input['group_id'], array('id' => 'group_id')));
  606. $form_container->end();
  607.  
  608. $buttons[] = $form->generate_submit_button($lang->save);
  609.  
  610. $form->output_submit_wrapper($buttons);
  611.  
  612. $form->end();
  613.  
  614. $page->output_footer();
  615. exit();
  616. }
  617.  
  618. // Delete group
  619. if($mybb->input['action'] == 'delete_group')
  620. {
  621. $query = $db->simple_select('staff_page2_groups', '*', 'id=' . intval($mybb->input['uid']));
  622. $group = $db->fetch_array($query);
  623.  
  624. if(!$group['id'])
  625. {
  626. flash_message($lang->group_not_exist, 'error');
  627. admin_redirect('index.php?module=config-staff_page2');
  628. }
  629.  
  630. if($mybb->input['no'])
  631. {
  632. admin_redirect('index.php?module=config-staff_page2');
  633. }
  634.  
  635. if($mybb->request_method == 'post')
  636. {
  637. $db->delete_query('staff_page2_groups', 'id = '.$group['id']);
  638. $db->delete_query('staff_page2_members', 'group_id = '.$group['id']);
  639.  
  640. recache_staff_groups();
  641.  
  642. log_admin_action($group['id']);
  643.  
  644. flash_message($lang->group_deleted, 'success');
  645. admin_redirect('index.php?module=config-staff_page2');
  646. }
  647. else
  648. {
  649. $page->output_confirm_action("index.php?module=config-staff_page2&amp;action=delete_group&amp;uid={$group['id']}", $lang->sprintf($lang->do_you_want_to_delete_group, $group['name']));
  650. }
  651. }
  652.  
  653. // Delete member
  654. if($mybb->input['action'] == 'delete_member')
  655. {
  656. $query = $db->simple_select('staff_page2_members', '*', 'id=' . intval($mybb->input['uid']));
  657. $member = $db->fetch_array($query);
  658. $user = get_user($member['user_id']);
  659.  
  660. if(!$member['id'])
  661. {
  662. flash_message($lang->user_not_exist, 'error');
  663. admin_redirect('index.php?module=config-staff_page2');
  664. }
  665.  
  666. if($mybb->input['no'])
  667. {
  668. admin_redirect('index.php?module=config-staff_page2');
  669. }
  670.  
  671. if($mybb->request_method == 'post')
  672. {
  673. $db->delete_query('staff_page2_members', 'id = '.$member['id']);
  674.  
  675. recache_staff_groups();
  676.  
  677. log_admin_action($member['id']);
  678.  
  679. flash_message($lang->member_deleted, 'success');
  680. admin_redirect('index.php?module=config-staff_page2');
  681. }
  682. else
  683. {
  684. $page->output_confirm_action("index.php?module=config-staff_page2&amp;action=delete_member&amp;uid={$member['id']}", $lang->sprintf($lang->do_you_want_to_delete_member, $user['username']));
  685. }
  686. }
  687.  
  688. // Edit member
  689. if($mybb->input['action'] == 'edit_member')
  690. {
  691. $query = $db->simple_select('staff_page2_members', '*', 'id=' . intval($mybb->input['uid']));
  692. $member = $db->fetch_array($query);
  693. $user = get_user($member['user_id']);
  694.  
  695. if(!$member['id'])
  696. {
  697. flash_message($lang->user_not_exist, 'error');
  698. admin_redirect('index.php?module=config-staff_page2');
  699. }
  700.  
  701. $groups = get_staff_groups();
  702.  
  703. if($mybb->request_method == 'post')
  704. {
  705. // Check if chosen group exists
  706. $i = 0;
  707.  
  708. foreach($groups as $group)
  709. {
  710. if($group['id'] == $mybb->input['group_id'])
  711. {
  712. $i++;
  713. break;
  714. }
  715. }
  716.  
  717. if(!$i)
  718. {
  719. $errors[] = $lang->wrong_group;
  720. }
  721.  
  722.  
  723. if(!$errors)
  724. {
  725. $update_array = array(
  726. 'description' => $db->escape_string($mybb->input['description']),
  727. 'group_id' => intval($mybb->input['group_id']),
  728. 'list_order' => intval($mybb->input['list_order'])
  729. );
  730.  
  731. $db->update_query('staff_page2_members', $update_array, 'id=' . $member['id']);
  732.  
  733. recache_staff_groups();
  734.  
  735. log_admin_action($member['id']);
  736.  
  737. flash_message($lang->member_saved, 'success');
  738. admin_redirect('index.php?module=config-staff_page2');
  739. }
  740. }
  741.  
  742. $page->add_breadcrumb_item($lang->edit_member);
  743. $page->output_header($lang->staff_page2.' - '.$lang->edit_member);
  744.  
  745.  
  746. if($errors)
  747. {
  748. $page->output_inline_error($errors);
  749. }
  750. else
  751. {
  752. $mybb->input = $member;
  753. }
  754.  
  755. // Prepare groups array to be a select list
  756. $groups_select = array();
  757.  
  758. foreach($groups as $group)
  759. {
  760. $groups_select[$group['id']] = $group['name'];
  761. }
  762.  
  763. // Generate a form
  764. $form = new Form('index.php?module=config-staff_page2&amp;action=edit_member&amp;uid=' . $member['id'], 'post', 'edit');
  765. echo $form->generate_hidden_field('uid', $member['id']);
  766.  
  767. $form_container = new FormContainer($lang->edit_member);
  768. $form_container->output_row($lang->name, '', $user['username']);
  769. $form_container->output_row($lang->order, '', $form->generate_text_box('list_order', $mybb->input['list_order']));
  770. $form_container->output_row($lang->description, '', $form->generate_text_area('description', $mybb->input['description']));
  771. $form_container->output_row($lang->group, '', $form->generate_select_box('group_id', $groups_select, $mybb->input['group_id'], array('id' => 'group_id')));
  772. $form_container->end();
  773.  
  774. $buttons[] = $form->generate_submit_button($lang->save);
  775. $buttons[] = $form->generate_reset_button($lang->reset);
  776.  
  777. $form->output_submit_wrapper($buttons);
  778.  
  779. $form->end();
  780.  
  781. $page->output_footer();
  782. exit();
  783. }
  784.  
  785. // Edit group
  786. if($mybb->input['action'] == 'edit_group')
  787. {
  788. $query = $db->simple_select('staff_page2_groups', '*', 'id=' . intval($mybb->input['uid']));
  789. $group = $db->fetch_array($query);
  790.  
  791. if(!$group['id'])
  792. {
  793. flash_message($lang->group_not_exist, 'error');
  794. admin_redirect('index.php?module=config-staff_page2');
  795. }
  796.  
  797. if($mybb->request_method == 'post')
  798. {
  799. if(!$mybb->input['name'])
  800. {
  801. $error[] = $lang->empty_name;
  802. }
  803.  
  804. if(!$errors)
  805. {
  806. $update_array = array(
  807. 'description' => $db->escape_string($mybb->input['description']),
  808. 'list_order' => intval($mybb->input['list_order']),
  809. 'name' => $db->escape_string($mybb->input['name'])
  810. );
  811.  
  812. $db->update_query('staff_page2_groups', $update_array, 'id=' . $group['id']);
  813.  
  814. recache_staff_groups();
  815.  
  816. log_admin_action($group['id']);
  817.  
  818. flash_message($lang->group_saved, 'success');
  819. admin_redirect('index.php?module=config-staff_page2');
  820. }
  821. }
  822.  
  823. $page->add_breadcrumb_item($lang->edit_group);
  824. $page->output_header($lang->staff_page2.' - '.$lang->edit_group);
  825.  
  826.  
  827. if($errors)
  828. {
  829. $page->output_inline_error($errors);
  830. }
  831. else
  832. {
  833. $mybb->input = $group;
  834. }
  835.  
  836. // Generate a form
  837. $form = new Form('index.php?module=config-staff_page2&amp;action=edit_group&amp;uid=' . $group['id'], 'post', 'edit');
  838. echo $form->generate_hidden_field('uid', $group['id']);
  839.  
  840. $form_container = new FormContainer($lang->edit_group);
  841. $form_container->output_row($lang->name, '', $form->generate_text_box('name', $mybb->input['name']));
  842. $form_container->output_row($lang->description, '', $form->generate_text_area('description', $mybb->input['description']));
  843. $form_container->output_row($lang->order, '', $form->generate_text_box('list_order', $mybb->input['list_order']));
  844. $form_container->end();
  845.  
  846. $buttons[] = $form->generate_submit_button($lang->save);
  847. $buttons[] = $form->generate_reset_button($lang->reset);
  848.  
  849. $form->output_submit_wrapper($buttons);
  850.  
  851. $form->end();
  852.  
  853. $page->output_footer();
  854. exit();
  855. }
  856. }
  857. }
  858.  
  859. /**
  860. * Checks if plugin is installed.
  861. *
  862. */
  863. function staff_page2_is_installed()
  864. {
  865. global $db;
  866.  
  867. if($db->table_exists('staff_page2_groups'))
  868. {
  869. return true;
  870. }
  871.  
  872. return false;
  873. }
  874.  
  875. /**
  876. * That's what happens when the plugin is uninstalled.
  877. *
  878. */
  879. function staff_page2_uninstall()
  880. {
  881. global $db, $cache;
  882.  
  883. // Remove settings
  884. $db->delete_query('settings', "name IN ('staff_page2_maxavatarsize', 'staff_page2_showteam_redirect')");
  885. $db->delete_query('settinggroups', "name = 'staff_page2'");
  886. rebuild_settings();
  887.  
  888. // Delete admin permissions
  889. change_admin_permission('config', 'staff_page2', 0);
  890.  
  891. // Remove group permissions
  892. if($db->field_exists('canseestaffpage', 'usergroups'))
  893. {
  894. $db->drop_column('usergroups', 'canseestaffpage');
  895. }
  896.  
  897. // Update the cache
  898. $cache->update_usergroups();
  899.  
  900. // Delete DB schema
  901. if($db->table_exists('staff_page2_members'))
  902. {
  903. $db->drop_table('staff_page2_members');
  904. }
  905.  
  906. if($db->table_exists('staff_page2_groups'))
  907. {
  908. $db->drop_table('staff_page2_groups');
  909. }
  910. }
  911.  
  912. /**
  913. * Installation of the plugin.
  914. *
  915. */
  916. function staff_page2_install()
  917. {
  918. global $db, $lang, $cache;
  919.  
  920. // Load language file for settings
  921. $lang->load('staff_page2');
  922.  
  923. // Add settings
  924. $setting_group = array(
  925. 'name' => 'staff_page2',
  926. 'title' => $db->escape_string($lang->staff_page2_settings),
  927. 'description' => '',
  928. 'disporder' => 99,
  929. 'isdefault' => 0
  930. );
  931.  
  932. $gid = $db->insert_query("settinggroups", $setting_group);
  933.  
  934. $setting_array = array(
  935.  
  936. 'staff_page2_maxavatarsize' => array(
  937. 'title' => $db->escape_string($lang->avatar_size),
  938. 'description' => $db->escape_string($lang->avatar_size_description),
  939. 'optionscode' => 'text',
  940. 'value' => '100x100',
  941. 'disporder' => 1
  942. ),
  943.  
  944. 'staff_page2_showteam_redirect' => array(
  945. 'title' => $db->escape_string($lang->enable_showteam_redirection),
  946. 'description' => $db->escape_string($lang->enable_showteam_redirection_description),
  947. 'optionscode' => 'yesno',
  948. 'value' => 1,
  949. 'disporder' => 2
  950. )
  951.  
  952. );
  953.  
  954. foreach($setting_array as $name => $setting)
  955. {
  956. $setting['name'] = $name;
  957. $setting['gid'] = $gid;
  958.  
  959. $db->insert_query('settings', $setting);
  960. }
  961.  
  962. // Rebuild settings
  963. rebuild_settings();
  964.  
  965. // Add group permissions
  966. if(!$db->field_exists('canseestaffpage', 'usergroups'))
  967. {
  968. $db->add_column('usergroups', 'canseestaffpage', 'tinyint(1) NOT NULL default \'1\'');
  969. }
  970.  
  971. // Update the cache
  972. $cache->update_usergroups();
  973.  
  974. // Create DB schema
  975. $db->query("CREATE TABLE IF NOT EXISTS " . TABLE_PREFIX . "staff_page2_members (
  976. `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  977. `user_id` int(11) DEFAULT NULL,
  978. `group_id` int(11) DEFAULT NULL,
  979. `list_order` tinyint(127) NOT NULL DEFAULT '0',
  980. `description` text,
  981. PRIMARY KEY (`id`)
  982. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;");
  983.  
  984. $db->query("CREATE TABLE IF NOT EXISTS " . TABLE_PREFIX . "staff_page2_groups (
  985. `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  986. `name` varchar(256) DEFAULT NULL,
  987. `list_order` tinyint(127) NOT NULL DEFAULT '0',
  988. `description` varchar(256) DEFAULT NULL,
  989. PRIMARY KEY (`id`)
  990. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;");
  991. }
  992.  
  993. /**
  994. * Deactivation of plugin.
  995. *
  996. */
  997. function staff_page2_deactivate()
  998. {
  999. global $db;
  1000.  
  1001. // Delete cache
  1002. $db->delete_query('datacache', 'title = \'staff_page2_groups\'');
  1003.  
  1004. // Delete templates
  1005. $templates = array(
  1006. 'staff_page2',
  1007. 'staff_page2_group_row',
  1008. 'staff_page2_member_row',
  1009. 'staff_page2_no_groups',
  1010. 'staff_page2_no_members',
  1011. 'staff_page2_user_avatar'
  1012. );
  1013.  
  1014. $db->delete_query('templates', 'title IN(\'' . implode('\',\'', $templates) . '\')');
  1015.  
  1016. }
  1017.  
  1018. /**
  1019. * Activation of plugin.
  1020. *
  1021. */
  1022. function staff_page2_activate()
  1023. {
  1024. global $db;
  1025.  
  1026. // Update schema from 0.3.x to 1.0
  1027. if($db->field_exists('order', 'staff_page2_groups'))
  1028. {
  1029. $db->drop_column('staff_page2_groups', '`order`');
  1030. }
  1031.  
  1032. if(!$db->field_exists('list_order', 'staff_page2_groups'))
  1033. {
  1034. $db->add_column('staff_page2_groups', 'list_order', 'tinyint(127) NOT NULL default \'0\'');
  1035. }
  1036.  
  1037. if(!$db->field_exists('list_order', 'staff_page2_members'))
  1038. {
  1039. $db->add_column('staff_page2_members', 'list_order', 'tinyint(127) NOT NULL default \'0\'');
  1040. }
  1041.  
  1042. // Recache groups
  1043. recache_staff_groups();
  1044.  
  1045. // Install templates
  1046. $templates_array = array();
  1047.  
  1048.  
  1049. // staff_page2
  1050. $template = '<html>
  1051. <head>
  1052. <title>{$mybb->settings[\'bbname\']} - {$lang->staff}</title>
  1053. {$headerinclude}
  1054. </head>
  1055. <body>
  1056. {$header}
  1057.  
  1058. {$groups_rows}
  1059.  
  1060. {$footer}
  1061. </body>
  1062. </html>';
  1063.  
  1064. $templates_array[] = array(
  1065. 'title' => 'staff_page2',
  1066. 'template' => $db->escape_string($template),
  1067. 'sid' => '-1',
  1068. 'version' => '',
  1069. 'dateline' => TIME_NOW
  1070. );
  1071.  
  1072.  
  1073. // staff_page2_group_row
  1074. $template = '<table border="0" cellspacing="{$theme[\'borderwidth\']}" cellpadding="{$theme[\'tablespace\']}" class="tborder">
  1075. <tr>
  1076. <td class="thead" colspan="2">
  1077. <strong>{$group[\'name\']}</strong>
  1078. <br />
  1079. <div class="smalltext">
  1080. {$group[\'description\']}
  1081. </div>
  1082. </td>
  1083. </tr>
  1084. {$members_rows}
  1085. </table>
  1086. <br />';
  1087. $templates_array[] = array(
  1088. 'title' => 'staff_page2_group_row',
  1089. 'template' => $db->escape_string($template),
  1090. 'sid' => '-1',
  1091. 'version' => '',
  1092. 'dateline' => TIME_NOW
  1093. );
  1094.  
  1095.  
  1096. // staff_page2_member_row
  1097. $template ='<tr>
  1098. <td class="{$bgcolor}" align="center" width="1%">
  1099. <a href="{$member[\'profileurl\']}">
  1100. {$member[\'avatar\']}
  1101. </a>
  1102. </td>
  1103. <td class="{$bgcolor}">
  1104. <div class="largetext">{$member[\'profilelink\']}</div>
  1105. <div class="smalltext">{$description}</div>
  1106. <div class="postbit_buttons">{$emailcode}{$pmcode}</div>
  1107. </td>
  1108. </tr>';
  1109.  
  1110. $templates_array[] = array(
  1111. 'title' => 'staff_page2_member_row',
  1112. 'template' => $db->escape_string($template),
  1113. 'sid' => '-1',
  1114. 'version' => '',
  1115. 'dateline' => TIME_NOW
  1116. );
  1117.  
  1118.  
  1119. // staff_page2_no_groups
  1120. $template = '<div class="red_alert">
  1121. {$lang->no_groups}
  1122. </div>';
  1123.  
  1124. $templates_array[] = array(
  1125. 'title' => 'staff_page2_no_groups',
  1126. 'template' => $db->escape_string($template),
  1127. 'sid' => '-1',
  1128. 'version' => '',
  1129. 'dateline' => TIME_NOW
  1130. );
  1131.  
  1132.  
  1133. // staff_page2_no_members
  1134. $template = '<tr>
  1135. <td class="trow1">
  1136. {$lang->no_members}
  1137. </td>
  1138. </tr>';
  1139.  
  1140. $templates_array[] = array(
  1141. 'title' => 'staff_page2_no_members',
  1142. 'template' => $db->escape_string($template),
  1143. 'sid' => '-1',
  1144. 'version' => '',
  1145. 'dateline' => TIME_NOW
  1146. );
  1147.  
  1148.  
  1149. // staff_page2_user_avatar
  1150. $template = '<img src="{$useravatar[\'image\']}" alt="" {$useravatar[\'width_height\']} />';
  1151.  
  1152. $templates_array[] = array(
  1153. 'title' => 'staff_page2_user_avatar',
  1154. 'template' => $db->escape_string($template),
  1155. 'sid' => '-1',
  1156. 'version' => '',
  1157. 'dateline' => TIME_NOW
  1158. );
  1159.  
  1160.  
  1161. foreach ($templates_array as $row)
  1162. {
  1163. $db->insert_query('templates', $row);
  1164. }
  1165. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement