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