[ Index ]

PHP Cross Reference of MyBB 1.8.39

title

Body

[close]

/admin/modules/forum/ -> management.php (source)

   1  <?php
   2  /**
   3   * MyBB 1.8
   4   * Copyright 2014 MyBB Group, All Rights Reserved
   5   *
   6   * Website: http://www.mybb.com
   7   * License: http://www.mybb.com/about/license
   8   *
   9   */
  10  
  11  // Disallow direct access to this file for security reasons
  12  if(!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  $page->add_breadcrumb_item($lang->forum_management, "index.php?module=forum-management");
  18  
  19  if($mybb->input['action'] == "add" || $mybb->input['action'] == "edit" || $mybb->input['action'] == "copy" || $mybb->input['action'] == "permissions" || !$mybb->input['action'])
  20  {
  21      if(!empty($mybb->input['fid']) && ($mybb->input['action'] == "management" || $mybb->input['action'] == "edit" || $mybb->input['action'] == "copy" || !$mybb->input['action']))
  22      {
  23          $sub_tabs['view_forum'] = array(
  24              'title' => $lang->view_forum,
  25              'link' => "index.php?module=forum-management&amp;fid=".$mybb->input['fid'],
  26              'description' => $lang->view_forum_desc
  27          );
  28  
  29          $sub_tabs['add_child_forum'] = array(
  30              'title' => $lang->add_child_forum,
  31              'link' => "index.php?module=forum-management&amp;action=add&amp;pid=".$mybb->input['fid'],
  32              'description' => $lang->view_forum_desc
  33          );
  34  
  35          $sub_tabs['edit_forum_settings'] = array(
  36              'title' => $lang->edit_forum_settings,
  37              'link' => "index.php?module=forum-management&amp;action=edit&amp;fid=".$mybb->input['fid'],
  38              'description' => $lang->edit_forum_settings_desc
  39          );
  40  
  41          $sub_tabs['copy_forum'] = array(
  42              'title' => $lang->copy_forum,
  43              'link' => "index.php?module=forum-management&amp;action=copy&amp;fid=".$mybb->input['fid'],
  44              'description' => $lang->copy_forum_desc
  45          );
  46      }
  47      else
  48      {
  49          $sub_tabs['forum_management'] = array(
  50              'title' => $lang->forum_management,
  51              'link' => "index.php?module=forum-management",
  52              'description' => $lang->forum_management_desc
  53          );
  54  
  55          $sub_tabs['add_forum'] = array(
  56              'title' => $lang->add_forum,
  57              'link' => "index.php?module=forum-management&amp;action=add",
  58              'description' => $lang->add_forum_desc
  59          );
  60      }
  61  }
  62  
  63  $plugins->run_hooks("admin_forum_management_begin");
  64  
  65  if($mybb->input['action'] == "copy")
  66  {
  67      $plugins->run_hooks("admin_forum_management_copy");
  68  
  69      if($mybb->request_method == "post")
  70      {
  71          $from = $mybb->get_input('from', MyBB::INPUT_INT);
  72          $to = $mybb->get_input('to', MyBB::INPUT_INT);
  73  
  74          // Find the source forum
  75          $query = $db->simple_select("forums", '*', "fid='{$from}'");
  76          $from_forum = $db->fetch_array($query);
  77          if(!$db->num_rows($query))
  78          {
  79              $errors[] = $lang->error_invalid_source_forum;
  80          }
  81  
  82          if($to == -1)
  83          {
  84              // Create a new forum
  85              if(empty($mybb->input['title']))
  86              {
  87                  $errors[] = $lang->error_new_forum_needs_name;
  88              }
  89  
  90              if($mybb->input['pid'] == -1 && $mybb->input['type'] == 'f')
  91              {
  92                  $errors[] = $lang->error_no_parent;
  93              }
  94  
  95              if(!$errors)
  96              {
  97                  if($mybb->input['pid'] < 0)
  98                  {
  99                      $mybb->input['pid'] = 0;
 100                  }
 101                  $new_forum = $from_forum;
 102                  unset($new_forum['fid'], $new_forum['threads'], $new_forum['posts'], $new_forum['lastpost'], $new_forum['lastposter'], $new_forum['lastposteruid'], $new_forum['lastposttid'], $new_forum['lastpostsubject'], $new_forum['unapprovedthreads'], $new_forum['unapprovedposts']);
 103                  $new_forum['name'] = $mybb->input['title'];
 104                  $new_forum['description'] = $mybb->input['description'];
 105                  $new_forum['type'] = $mybb->input['type'];
 106                  $new_forum['pid'] = $mybb->get_input('pid', MyBB::INPUT_INT);
 107                  $new_forum['parentlist'] = '';
 108  
 109                  foreach($new_forum as $key => $value)
 110                  {
 111                      $new_forum[$key] = $db->escape_string($value);
 112                  }
 113  
 114                  $to = $db->insert_query("forums", $new_forum);
 115  
 116                  // Generate parent list
 117                  $parentlist = make_parent_list($to);
 118                  $updatearray = array(
 119                      'parentlist' => $parentlist
 120                  );
 121                  $db->update_query("forums", $updatearray, "fid='{$to}'");
 122              }
 123          }
 124          elseif($mybb->input['copyforumsettings'] == 1)
 125          {
 126              // Copy settings to existing forum
 127              $query = $db->simple_select("forums", '*', "fid='{$to}'");
 128              $to_forum = $db->fetch_array($query);
 129              if(!$db->num_rows($query))
 130              {
 131                  $errors[] = $lang->error_invalid_destination_forum;
 132              }
 133  
 134              if(!$errors)
 135              {
 136                  $new_forum = $from_forum;
 137                  unset($new_forum['fid'], $new_forum['threads'], $new_forum['posts'], $new_forum['lastpost'], $new_forum['lastposter'], $new_forum['lastposteruid'], $new_forum['lastposttid'], $new_forum['lastpostsubject'], $new_forum['unapprovedthreads'], $new_forum['unapprovedposts']);
 138                  $new_forum['name'] = $to_forum['name'];
 139                  $new_forum['description'] = $to_forum['description'];
 140                  $new_forum['pid'] = $to_forum['pid'];
 141                  $new_forum['parentlist'] = $to_forum['parentlist'];
 142  
 143                  foreach($new_forum as $key => $value)
 144                  {
 145                      $new_forum[$key] = $db->escape_string($value);
 146                  }
 147  
 148                  $db->update_query("forums", $new_forum, "fid='{$to}'");
 149              }
 150          }
 151          else
 152          {
 153              $new_forum['name'] = null;
 154          }
 155  
 156          if(!$errors)
 157          {
 158              // Copy permissions
 159              if(isset($mybb->input['copygroups']) && is_array($mybb->input['copygroups']) && count($mybb->input['copygroups']) > 0)
 160              {
 161                  foreach($mybb->input['copygroups'] as $gid)
 162                  {
 163                      $groups[] = (int)$gid;
 164                  }
 165                  $groups = implode(',', $groups);
 166                  $query = $db->simple_select("forumpermissions", '*', "fid='{$from}' AND gid IN ({$groups})");
 167                  $db->delete_query("forumpermissions", "fid='{$to}' AND gid IN ({$groups})", 1);
 168                  while($permissions = $db->fetch_array($query))
 169                  {
 170                      unset($permissions['pid']);
 171                      $permissions['fid'] = $to;
 172  
 173                      $db->insert_query("forumpermissions", $permissions);
 174                  }
 175  
 176                  // Log admin action
 177                  log_admin_action($from, $from_forum['name'], $to, $new_forum['name'], $groups);
 178              }
 179              else
 180              {
 181                  // Log admin action (no group permissions)
 182                  log_admin_action($from, $from_forum['name'], $to, $new_forum['name']);
 183              }
 184  
 185              $plugins->run_hooks("admin_forum_management_copy_commit");
 186  
 187              $cache->update_forums();
 188              $cache->update_forumpermissions();
 189  
 190              flash_message($lang->success_forum_copied, 'success');
 191              admin_redirect("index.php?module=forum-management&action=edit&fid={$to}");
 192          }
 193      }
 194  
 195      $page->add_breadcrumb_item($lang->copy_forum);
 196      $page->output_header($lang->copy_forum);
 197      $page->output_nav_tabs($sub_tabs, 'copy_forum');
 198  
 199      $form = new Form("index.php?module=forum-management&amp;action=copy", "post");
 200  
 201      $copy_data['type'] = "f";
 202      $copy_data['title'] = "";
 203      $copy_data['description'] = "";
 204  
 205      if(empty($mybb->input['pid']))
 206      {
 207          $copy_data['pid'] = "-1";
 208      }
 209      else
 210      {
 211          $copy_data['pid'] = $mybb->get_input('pid', MyBB::INPUT_INT);
 212      }
 213      $copy_data['disporder'] = "1";
 214      $copy_data['from'] = $mybb->get_input('fid');
 215      $copy_data['to'] = -1;
 216      $copy_data['copyforumsettings'] = 0;
 217      $copy_data['copygroups'] = array();
 218      $copy_data['pid'] = 0;
 219  
 220      if($errors)
 221      {
 222          $page->output_inline_error($errors);
 223  
 224          foreach($copy_data as $key => $value)
 225          {
 226              if(isset($mybb->input[$key]))
 227              {
 228                  $copy_data[$key] = $mybb->input[$key];
 229              }
 230          }
 231      }
 232  
 233      $types = array(
 234          'f' => $lang->forum,
 235          'c' => $lang->category
 236      );
 237  
 238      $create_a_options_f = array(
 239          'id' => 'forum'
 240      );
 241  
 242      $create_a_options_c = array(
 243          'id' => 'category'
 244      );
 245  
 246      if($copy_data['type'] == "f")
 247      {
 248          $create_a_options_f['checked'] = true;
 249      }
 250      else
 251      {
 252          $create_a_options_c['checked'] = true;
 253      }
 254  
 255      $usergroups = array();
 256  
 257      $query = $db->simple_select("usergroups", "gid, title", "gid != '1'", array('order_by' => 'title'));
 258      while($usergroup = $db->fetch_array($query))
 259      {
 260          $usergroups[$usergroup['gid']] = htmlspecialchars_uni($usergroup['title']);
 261      }
 262  
 263      $form_container = new FormContainer($lang->copy_forum);
 264      $form_container->output_row($lang->source_forum." <em>*</em>", $lang->source_forum_desc, $form->generate_forum_select('from', $copy_data['from'], array('id' => 'from')), 'from');
 265      $form_container->output_row($lang->destination_forum." <em>*</em>", $lang->destination_forum_desc, $form->generate_forum_select('to', $copy_data['to'], array('id' => 'to', 'main_option' => $lang->copy_to_new_forum)), 'to');
 266      $form_container->output_row($lang->copy_settings_and_properties, $lang->copy_settings_and_properties_desc, $form->generate_yes_no_radio('copyforumsettings', $copy_data['copyforumsettings']));
 267      $form_container->output_row($lang->copy_user_group_permissions, $lang->copy_user_group_permissions_desc, $form->generate_select_box('copygroups[]', $usergroups, $copy_data['copygroups'], array('id' => 'copygroups', 'multiple' => true, 'size' => 5)), 'copygroups');
 268  
 269      $form_container->end();
 270  
 271      $form_container = new FormContainer($lang->new_forum_settings);
 272      $form_container->output_row($lang->forum_type, $lang->forum_type_desc, $form->generate_radio_button('type', 'f', $lang->forum, $create_a_options_f)."<br />\n".$form->generate_radio_button('type', 'c', $lang->category, $create_a_options_c));
 273      $form_container->output_row($lang->title." <em>*</em>", "", $form->generate_text_box('title', $copy_data['title'], array('id' => 'title')), 'title');
 274      $form_container->output_row($lang->description, "", $form->generate_text_area('description', $copy_data['description'], array('id' => 'description')), 'description');
 275      $form_container->output_row($lang->parent_forum." <em>*</em>", $lang->parent_forum_desc, $form->generate_forum_select('pid', $copy_data['pid'], array('id' => 'pid', 'main_option' => $lang->none)), 'pid');
 276  
 277      $form_container->end();
 278  
 279      $buttons[] = $form->generate_submit_button($lang->copy_forum);
 280      $form->output_submit_wrapper($buttons);
 281      $form->end();
 282  
 283      $page->output_footer();
 284  }
 285  
 286  if($mybb->input['action'] == "editmod")
 287  {
 288      $query = $db->simple_select("moderators", "*", "mid='".$mybb->get_input('mid', MyBB::INPUT_INT)."'");
 289      $mod_data = $db->fetch_array($query);
 290  
 291      if(!$mod_data['id'])
 292      {
 293          flash_message($lang->error_incorrect_moderator, 'error');
 294          admin_redirect("index.php?module=forum-management");
 295      }
 296  
 297      $plugins->run_hooks("admin_forum_management_editmod");
 298  
 299      if($mod_data['isgroup'])
 300      {
 301          $fieldname = "title";
 302      }
 303      else
 304      {
 305          $fieldname = "username";
 306      }
 307  
 308      if($mybb->request_method == "post")
 309      {
 310          $mid = $mybb->get_input('mid', MyBB::INPUT_INT);
 311          if(!$mid)
 312          {
 313              flash_message($lang->error_incorrect_moderator, 'error');
 314              admin_redirect("index.php?module=forum-management");
 315          }
 316  
 317          if(!$errors)
 318          {
 319              $fid = $mybb->get_input('fid', MyBB::INPUT_INT);
 320              $forum = get_forum($fid, 1);
 321              if($mod_data['isgroup'])
 322              {
 323                  $mod = $groupscache[$mod_data['id']];
 324              }
 325              else
 326              {
 327                  $mod = get_user($mod_data['id']);
 328              }
 329              $update_array = array(
 330                  'fid' => (int)$fid,
 331                  'caneditposts' => $mybb->get_input('caneditposts', MyBB::INPUT_INT),
 332                  'cansoftdeleteposts' => $mybb->get_input('cansoftdeleteposts', MyBB::INPUT_INT),
 333                  'canrestoreposts' => $mybb->get_input('canrestoreposts', MyBB::INPUT_INT),
 334                  'candeleteposts' => $mybb->get_input('candeleteposts', MyBB::INPUT_INT),
 335                  'cansoftdeletethreads' => $mybb->get_input('cansoftdeletethreads', MyBB::INPUT_INT),
 336                  'canrestorethreads' => $mybb->get_input('canrestorethreads', MyBB::INPUT_INT),
 337                  'candeletethreads' => $mybb->get_input('candeletethreads', MyBB::INPUT_INT),
 338                  'canviewips' => $mybb->get_input('canviewips', MyBB::INPUT_INT),
 339                  'canviewunapprove' => $mybb->get_input('canviewunapprove', MyBB::INPUT_INT),
 340                  'canviewdeleted' => $mybb->get_input('canviewdeleted', MyBB::INPUT_INT),
 341                  'canopenclosethreads' => $mybb->get_input('canopenclosethreads', MyBB::INPUT_INT),
 342                  'canstickunstickthreads' => $mybb->get_input('canstickunstickthreads', MyBB::INPUT_INT),
 343                  'canapproveunapprovethreads' => $mybb->get_input('canapproveunapprovethreads', MyBB::INPUT_INT),
 344                  'canapproveunapproveposts' => $mybb->get_input('canapproveunapproveposts', MyBB::INPUT_INT),
 345                  'canapproveunapproveattachs' => $mybb->get_input('canapproveunapproveattachs', MyBB::INPUT_INT),
 346                  'canmanagethreads' => $mybb->get_input('canmanagethreads', MyBB::INPUT_INT),
 347                  'canmanagepolls' => $mybb->get_input('canmanagepolls', MyBB::INPUT_INT),
 348                  'canpostclosedthreads' => $mybb->get_input('canpostclosedthreads', MyBB::INPUT_INT),
 349                  'canmovetononmodforum' => $mybb->get_input('canmovetononmodforum', MyBB::INPUT_INT),
 350                  'canusecustomtools' => $mybb->get_input('canusecustomtools', MyBB::INPUT_INT),
 351                  'canmanageannouncements' => $mybb->get_input('canmanageannouncements', MyBB::INPUT_INT),
 352                  'canmanagereportedposts' => $mybb->get_input('canmanagereportedposts', MyBB::INPUT_INT),
 353                  'canviewmodlog' => $mybb->get_input('canviewmodlog', MyBB::INPUT_INT)
 354              );
 355  
 356              $plugins->run_hooks("admin_forum_management_editmod_commit");
 357  
 358              $db->update_query("moderators", $update_array, "mid='".$mybb->get_input('mid', MyBB::INPUT_INT)."'");
 359  
 360              $cache->update_moderators();
 361  
 362              // Log admin action
 363              log_admin_action($fid, $forum['name'], $mid, $mod[$fieldname]);
 364  
 365              flash_message($lang->success_moderator_updated, 'success');
 366              admin_redirect("index.php?module=forum-management&fid=".$mybb->get_input('fid', MyBB::INPUT_INT)."#tab_moderators");
 367          }
 368      }
 369  
 370      if($mod_data['isgroup'])
 371      {
 372          $query = $db->simple_select("usergroups", "title", "gid='{$mod_data['id']}'");
 373          $mod_data[$fieldname] = $db->fetch_field($query, 'title');
 374      }
 375      else
 376      {
 377          $query = $db->simple_select("users", "username", "uid='{$mod_data['id']}'");
 378          $mod_data[$fieldname] = $db->fetch_field($query, 'username');
 379      }
 380  
 381      $sub_tabs = array();
 382  
 383      $sub_tabs['edit_mod'] = array(
 384          'title' => $lang->edit_mod,
 385          'link' => "index.php?module=forum-management&amp;action=editmod&amp;mid=".$mybb->input['mid'],
 386          'description' => $lang->edit_mod_desc
 387      );
 388  
 389      $page->add_breadcrumb_item($lang->forum_moderators, "index.php?module=forum-management&amp;fid={$mod_data['fid']}#tab_moderators");
 390      $page->add_breadcrumb_item($lang->edit_forum);
 391      $page->output_header($lang->edit_mod);
 392      $page->output_nav_tabs($sub_tabs, 'edit_mod');
 393  
 394      $form = new Form("index.php?module=forum-management&amp;action=editmod", "post");
 395      echo $form->generate_hidden_field("mid", $mod_data['mid']);
 396  
 397      if($errors)
 398      {
 399          $page->output_inline_error($errors);
 400          $mod_data = $mybb->input;
 401      }
 402  
 403      $form_container = new FormContainer($lang->sprintf($lang->edit_mod_for, $mod_data[$fieldname]));
 404      $form_container->output_row($lang->forum, $lang->forum_desc, $form->generate_forum_select('fid', $mod_data['fid'], array('id' => 'fid')), 'fid');
 405  
 406      $moderator_permissions = array(
 407          $form->generate_check_box('caneditposts', 1, $lang->can_edit_posts, array('checked' => $mod_data['caneditposts'], 'id' => 'caneditposts')),
 408          $form->generate_check_box('cansoftdeleteposts', 1, $lang->can_soft_delete_posts, array('checked' => $mod_data['cansoftdeleteposts'], 'id' => 'cansoftdeleteposts')),
 409          $form->generate_check_box('canrestoreposts', 1, $lang->can_restore_posts, array('checked' => $mod_data['canrestoreposts'], 'id' => 'canrestoreposts')),
 410          $form->generate_check_box('candeleteposts', 1, $lang->can_delete_posts, array('checked' => $mod_data['candeleteposts'], 'id' => 'candeleteposts')),
 411          $form->generate_check_box('cansoftdeletethreads', 1, $lang->can_soft_delete_threads, array('checked' => $mod_data['cansoftdeletethreads'], 'id' => 'cansoftdeletethreads')),
 412          $form->generate_check_box('canrestorethreads', 1, $lang->can_restore_threads, array('checked' => $mod_data['canrestorethreads'], 'id' => 'canrestorethreads')),
 413          $form->generate_check_box('candeletethreads', 1, $lang->can_delete_threads, array('checked' => $mod_data['candeletethreads'], 'id' => 'candeletethreads')),
 414          $form->generate_check_box('canviewips', 1, $lang->can_view_ips, array('checked' => $mod_data['canviewips'], 'id' => 'canviewips')),
 415          $form->generate_check_box('canviewunapprove', 1, $lang->can_view_unapprove, array('checked' => $mod_data['canviewunapprove'], 'id' => 'canviewunapprove')),
 416          $form->generate_check_box('canviewdeleted', 1, $lang->can_view_deleted, array('checked' => $mod_data['canviewdeleted'], 'id' => 'canviewdeleted')),
 417          $form->generate_check_box('canopenclosethreads', 1, $lang->can_open_close_threads, array('checked' => $mod_data['canopenclosethreads'], 'id' => 'canopenclosethreads')),
 418          $form->generate_check_box('canstickunstickthreads', 1, $lang->can_stick_unstick_threads, array('checked' => $mod_data['canstickunstickthreads'], 'id' => 'canstickunstickthreads')),
 419          $form->generate_check_box('canapproveunapprovethreads', 1, $lang->can_approve_unapprove_threads, array('checked' => $mod_data['canapproveunapprovethreads'], 'id' => 'canapproveunapprovethreads')),
 420          $form->generate_check_box('canapproveunapproveposts', 1, $lang->can_approve_unapprove_posts, array('checked' => $mod_data['canapproveunapproveposts'], 'id' => 'canapproveunapproveposts')),
 421          $form->generate_check_box('canapproveunapproveattachs', 1, $lang->can_approve_unapprove_attachments, array('checked' => $mod_data['canapproveunapproveattachs'], 'id' => 'canapproveunapproveattachs')),
 422          $form->generate_check_box('canmanagethreads', 1, $lang->can_manage_threads, array('checked' => $mod_data['canmanagethreads'], 'id' => 'canmanagethreads')),
 423          $form->generate_check_box('canmanagepolls', 1, $lang->can_manage_polls, array('checked' => $mod_data['canmanagepolls'], 'id' => 'canmanagepolls')),
 424          $form->generate_check_box('canpostclosedthreads', 1, $lang->can_post_closed_threads, array('checked' => $mod_data['canpostclosedthreads'], 'id' => 'canpostclosedthreads')),
 425          $form->generate_check_box('canmovetononmodforum', 1, $lang->can_move_to_other_forums, array('checked' => $mod_data['canmovetononmodforum'], 'id' => 'canmovetononmodforum')),
 426          $form->generate_check_box('canusecustomtools', 1, $lang->can_use_custom_tools, array('checked' => $mod_data['canusecustomtools'], 'id' => 'canusecustomtools'))
 427      );
 428      $form_container->output_row($lang->moderator_permissions, "", "<div class=\"forum_settings_bit\">".implode("</div><div class=\"forum_settings_bit\">", $moderator_permissions)."</div>");
 429  
 430      $moderator_cp_permissions = array(
 431          $form->generate_check_box('canmanageannouncements', 1, $lang->can_manage_announcements, array('checked' => $mod_data['canmanageannouncements'], 'id' => 'canmanageannouncements')),
 432          $form->generate_check_box('canmanagereportedposts', 1, $lang->can_manage_reported_posts, array('checked' => $mod_data['canmanagereportedposts'], 'id' => 'canmanagereportedposts')),
 433          $form->generate_check_box('canviewmodlog', 1, $lang->can_view_mod_log, array('checked' => $mod_data['canviewmodlog'], 'id' => 'canviewmodlog'))
 434      );
 435      $form_container->output_row($lang->moderator_cp_permissions, $lang->moderator_cp_permissions_desc, "<div class=\"forum_settings_bit\">".implode("</div><div class=\"forum_settings_bit\">", $moderator_cp_permissions)."</div>");
 436  
 437      $form_container->end();
 438  
 439      $buttons[] = $form->generate_submit_button($lang->save_mod);
 440      $form->output_submit_wrapper($buttons);
 441      $form->end();
 442  
 443      $page->output_footer();
 444  }
 445  
 446  if($mybb->input['action'] == "clear_permission")
 447  {
 448      $pid = $mybb->get_input('pid', MyBB::INPUT_INT);
 449      $fid = $mybb->get_input('fid', MyBB::INPUT_INT);
 450      $gid = $mybb->get_input('gid', MyBB::INPUT_INT);
 451  
 452      // User clicked no
 453      if(!empty($mybb->input['no']))
 454      {
 455          admin_redirect("index.php?module=forum-management&fid={$fid}");
 456      }
 457  
 458      $plugins->run_hooks("admin_forum_management_clear_permission");
 459  
 460      if($mybb->request_method == "post")
 461      {
 462          if((!$fid || !$gid) && $pid)
 463          {
 464              $query = $db->simple_select("forumpermissions", "fid, gid", "pid='{$pid}'");
 465              $result = $db->fetch_array($query);
 466              $fid = $result['fid'];
 467              $gid = $result['gid'];
 468          }
 469  
 470          if($pid)
 471          {
 472              $db->delete_query("forumpermissions", "pid='{$pid}'");
 473          }
 474          else
 475          {
 476              $db->delete_query("forumpermissions", "gid='{$gid}' AND fid='{$fid}'");
 477          }
 478  
 479          $plugins->run_hooks('admin_forum_management_clear_permission_commit');
 480  
 481          $cache->update_forumpermissions();
 482  
 483          flash_message($lang->success_custom_permission_cleared, 'success');
 484          admin_redirect("index.php?module=forum-management&fid={$fid}#tab_permissions");
 485      }
 486      else
 487      {
 488          $page->output_confirm_action("index.php?module=forum-management&amp;action=clear_permission&amp;pid={$pid}&amp;gid={$gid}&amp;fid={$fid}", $lang->confirm_clear_custom_permission);
 489      }
 490  }
 491  
 492  if($mybb->input['action'] == "permissions")
 493  {
 494      $plugins->run_hooks("admin_forum_management_permissions");
 495  
 496      if($mybb->request_method == "post")
 497      {
 498          $pid = $mybb->get_input('pid', MyBB::INPUT_INT);
 499          $fid = $mybb->get_input('fid', MyBB::INPUT_INT);
 500          $gid = $mybb->get_input('gid', MyBB::INPUT_INT);
 501          $forum = get_forum($fid, 1);
 502  
 503          if((!$fid || !$gid) && $pid)
 504          {
 505              $query = $db->simple_select("forumpermissions", "fid, gid", "pid='{$pid}'");
 506              $result = $db->fetch_array($query);
 507              $fid = $result['fid'];
 508              $gid = $result['gid'];
 509              $forum = get_forum($fid, 1);
 510          }
 511  
 512          $update_array = $field_list = array();
 513          $fields_array = $db->show_fields_from("forumpermissions");
 514          if(isset($mybb->input['permissions']))
 515          {
 516              // User has set permissions for this group...
 517              foreach($fields_array as $field)
 518              {
 519                  if(strpos($field['Field'], 'can') !== false || strpos($field['Field'], 'mod') !== false)
 520                  {
 521                      if(array_key_exists($field['Field'], $mybb->input['permissions']))
 522                      {
 523                          $update_array[$db->escape_string($field['Field'])] = (int)$mybb->input['permissions'][$field['Field']];
 524                      }
 525                      else
 526                      {
 527                          $update_array[$db->escape_string($field['Field'])] = 0;
 528                      }
 529                  }
 530              }
 531          }
 532          else
 533          {
 534              // Else, we assume that the group has no permissions...
 535              foreach($fields_array as $field)
 536              {
 537                  if(strpos($field['Field'], 'can') !== false || strpos($field['Field'], 'mod') !== false)
 538                  {
 539                      $update_array[$db->escape_string($field['Field'])] = 0;
 540                  }
 541              }
 542          }
 543  
 544          if($fid && !$pid)
 545          {
 546              $update_array['fid'] = $fid;
 547              $update_array['gid'] = $mybb->get_input('gid', MyBB::INPUT_INT);
 548              $db->insert_query("forumpermissions", $update_array);
 549          }
 550  
 551          $plugins->run_hooks("admin_forum_management_permissions_commit");
 552  
 553          if(!($fid && !$pid))
 554          {
 555              $db->update_query("forumpermissions", $update_array, "pid='{$pid}'");
 556          }
 557  
 558          $cache->update_forumpermissions();
 559  
 560          // Log admin action
 561          log_admin_action($fid, $forum['name']);
 562  
 563          if($mybb->input['ajax'] == 1)
 564          {
 565              echo json_encode("<script type=\"text/javascript\">$('#row_{$gid}').html('".str_replace(array("'", "\t", "\n"), array("\\'", "", ""), retrieve_single_permissions_row($gid, $fid))."'); QuickPermEditor.init({$gid});</script>");
 566              die;
 567          }
 568          else
 569          {
 570              flash_message($lang->success_forum_permissions_saved, 'success');
 571              admin_redirect("index.php?module=forum-management&fid={$fid}#tab_permissions");
 572          }
 573      }
 574  
 575      if($mybb->input['ajax'] != 1)
 576      {
 577          $sub_tabs = array();
 578  
 579          if($mybb->input['fid'] && $mybb->input['gid'])
 580          {
 581              $sub_tabs['edit_permissions'] = array(
 582                  'title' => $lang->forum_permissions,
 583                  'link' => "index.php?module=forum-management&amp;action=permissions&amp;fid=".$mybb->input['fid']."&amp;gid=".$mybb->input['gid'],
 584                  'description' => $lang->forum_permissions_desc
 585              );
 586  
 587              $page->add_breadcrumb_item($lang->forum_permissions2, "index.php?module=forum-management&amp;fid=".$mybb->input['fid']."#tab_permissions");
 588          }
 589          else
 590          {
 591              $query = $db->simple_select("forumpermissions", "fid", "pid='".$mybb->get_input('pid', MyBB::INPUT_INT)."'");
 592              $mybb->input['fid'] = $db->fetch_field($query, "fid");
 593  
 594              $sub_tabs['edit_permissions'] = array(
 595                  'title' => $lang->forum_permissions,
 596                  'link' => "index.php?module=forum-management&amp;action=permissions&amp;pid=".$mybb->get_input('pid', MyBB::INPUT_INT),
 597                  'description' => $lang->forum_permissions_desc
 598              );
 599  
 600              $page->add_breadcrumb_item($lang->forum_permissions2, "index.php?module=forum-management&amp;fid=".$mybb->input['fid']."#tab_permissions");
 601          }
 602  
 603          $page->add_breadcrumb_item($lang->forum_permissions);
 604          $page->output_header($lang->forum_permissions);
 605          $page->output_nav_tabs($sub_tabs, 'edit_permissions');
 606      }
 607      else
 608      {
 609          echo "
 610          <div class=\"modal\" style=\"width: auto\">
 611          <script src=\"jscripts/tabs.js\" type=\"text/javascript\"></script>\n
 612          <script type=\"text/javascript\">
 613  <!--
 614  $(function() {
 615      $(\"#modal_form\").on(\"click\", \"#savePermissions\", function(e) {
 616          e.preventDefault();
 617  
 618          var datastring = $(\"#modal_form\").serialize();
 619          $.ajax({
 620              type: \"POST\",
 621              url: $(\"#modal_form\").attr('action'),
 622              data: datastring,
 623              dataType: \"json\",
 624              success: function(data) {
 625                  $(data).filter(\"script\").each(function(e) {
 626                      eval($(this).text());
 627                  });
 628                  $.modal.close();
 629              },
 630              error: function(){
 631              }
 632          });
 633      });
 634  });
 635  // -->
 636          </script>
 637          <div style=\"overflow-y: auto; max-height: 400px\">";
 638      }
 639  
 640      if(!empty($mybb->input['pid']) || (!empty($mybb->input['gid']) && !empty($mybb->input['fid'])))
 641      {
 642          if($mybb->get_input('ajax') != 1)
 643          {
 644              $form = new Form("index.php?module=forum-management&amp;action=permissions", "post");
 645          }
 646          else
 647          {
 648              $form = new Form("index.php?module=forum-management&amp;action=permissions&amp;ajax=1&amp;pid=".$mybb->get_input('pid', MyBB::INPUT_INT)."&amp;gid=".$mybb->get_input('gid', MyBB::INPUT_INT)."&amp;fid=".$mybb->get_input('gid', MyBB::INPUT_INT), "post", "modal_form");
 649          }
 650          echo $form->generate_hidden_field("usecustom", "1");
 651  
 652          if($errors)
 653          {
 654              $page->output_inline_error($errors);
 655              $permission_data = $mybb->input;
 656  
 657              $query = $db->simple_select("usergroups", "*", "gid='{$permission_data['gid']}'");
 658              $usergroup = $db->fetch_array($query);
 659  
 660              $query = $db->simple_select("forums", "*", "fid='{$permission_data['fid']}'");
 661              $forum = $db->fetch_array($query);
 662          }
 663          else
 664          {
 665              $pid = $mybb->get_input('pid', MyBB::INPUT_INT);
 666              $gid = $mybb->get_input('gid', MyBB::INPUT_INT);
 667              $fid = $mybb->get_input('fid', MyBB::INPUT_INT);
 668  
 669              if($pid)
 670              {
 671                  $query = $db->simple_select("forumpermissions", "*", "pid='{$pid}'");
 672              }
 673              else
 674              {
 675                  $query = $db->simple_select("forumpermissions", "*", "fid='{$fid}' AND gid='{$gid}'", array('limit' => 1));
 676              }
 677  
 678              $permission_data = $db->fetch_array($query);
 679  
 680              if(is_array($permission_data))
 681              {
 682                  if(!$fid)
 683                  {
 684                      $fid = $permission_data['fid'];
 685                  }
 686  
 687                  if(!$gid)
 688                  {
 689                      $gid = $permission_data['gid'];
 690                  }
 691  
 692                  if(!$pid)
 693                  {
 694                      $pid = $permission_data['pid'];
 695                  }
 696              }
 697  
 698              $query = $db->simple_select("usergroups", "*", "gid='$gid'");
 699              $usergroup = $db->fetch_array($query);
 700  
 701              $query = $db->simple_select("forums", "*", "fid='$fid'");
 702              $forum = $db->fetch_array($query);
 703  
 704              $sperms = $permission_data;
 705  
 706              $sql = build_parent_list($fid);
 707              $query = $db->simple_select("forumpermissions", "*", "$sql AND gid='$gid'");
 708              $customperms = $db->fetch_array($query);
 709  
 710              if(!empty($permission_data['pid']))
 711              {
 712                  $permission_data['usecustom'] = 1;
 713                  echo $form->generate_hidden_field("pid", $pid);
 714              }
 715              else
 716              {
 717                  echo $form->generate_hidden_field("fid", $fid);
 718                  echo $form->generate_hidden_field("gid", $gid);
 719                  if(empty($customperms['pid']))
 720                  {
 721                      $permission_data = usergroup_permissions($gid);
 722                  }
 723                  else
 724                  {
 725                      $permission_data = forum_permissions($fid, 0, $gid);
 726                  }
 727              }
 728          }
 729  
 730          $groups = array(
 731              'canviewthreads' => 'viewing',
 732              'canview' => 'viewing',
 733              'canonlyviewownthreads' => 'viewing',
 734              'candlattachments' => 'viewing',
 735  
 736              'canpostthreads' => 'posting_rating',
 737              'canpostreplys' => 'posting_rating',
 738              'canonlyreplyownthreads' => 'posting_rating',
 739              'canpostattachments' => 'posting_rating',
 740              'canratethreads' => 'posting_rating',
 741  
 742              'caneditposts' => 'editing',
 743              'candeleteposts' => 'editing',
 744              'candeletethreads' => 'editing',
 745              'caneditattachments' => 'editing',
 746              'canviewdeletionnotice' => 'editing',
 747  
 748              'modposts' => 'moderate',
 749              'modthreads' => 'moderate',
 750              'modattachments' => 'moderate',
 751              'mod_edit_posts' => 'moderate',
 752  
 753              'canpostpolls' => 'polls',
 754              'canvotepolls' => 'polls',
 755              'cansearch' => 'misc',
 756          );
 757  
 758          $hidefields = array();
 759              if($usergroup['gid'] == 1)
 760              {
 761                  $hidefields = array('canonlyviewownthreads', 'canonlyreplyownthreads', 'caneditposts', 'candeleteposts', 'candeletethreads', 'caneditattachments', 'canviewdeletetionnotice');
 762              }
 763  
 764          $groups = $plugins->run_hooks("admin_forum_management_permission_groups", $groups);
 765  
 766          foreach($hidefields as $field)
 767          {
 768              unset($groups[$field]);
 769          }
 770          
 771          $tabs = array();
 772          foreach(array_unique(array_values($groups)) as $group)
 773          {
 774              $lang_group = "group_".$group;
 775              $tabs[$group] = $lang->$lang_group;
 776          }
 777  
 778          if($mybb->input['ajax'] == 1)
 779          {
 780              $page->output_tab_control($tabs, false, "tabs2");
 781          }
 782          else
 783          {
 784              $page->output_tab_control($tabs);
 785          }
 786  
 787          $field_list = array();
 788          $fields_array = $db->show_fields_from("forumpermissions");
 789          foreach($fields_array as $field)
 790          {
 791              if(!in_array($field['Field'], $hidefields) && (strpos($field['Field'], 'can') !== false || strpos($field['Field'], 'mod') !== false))
 792              {
 793                  if(array_key_exists($field['Field'], $groups))
 794                  {
 795                      $field_list[$groups[$field['Field']]][] = $field['Field'];
 796                  }
 797                  else
 798                  {
 799                      $field_list['misc'][] = $field['Field'];
 800                  }
 801              }
 802          }
 803  
 804          foreach(array_unique(array_values($groups)) as $group)
 805          {
 806              $lang_group = "group_".$group;
 807              echo "<div id=\"tab_".$group."\">\n";
 808              $form_container = new FormContainer("\"".htmlspecialchars_uni($usergroup['title'])."\" {$lang->custom_permissions_for} \"".htmlspecialchars_uni($forum['name'])."\"");
 809              $fields = array();
 810              foreach($field_list[$group] as $field)
 811              {
 812                  $lang_field = $group."_field_".$field;
 813                  $fields[] = $form->generate_check_box("permissions[{$field}]", 1, $lang->$lang_field, array('checked' => !empty($permission_data[$field]), 'id' => $field));
 814              }
 815              $form_container->output_row("", "", "<div class=\"forum_settings_bit\">".implode("</div><div class=\"forum_settings_bit\">", $fields)."</div>");
 816              $form_container->end();
 817              echo "</div>";
 818          }
 819  
 820          if($mybb->input['ajax'] == 1)
 821          {
 822              $buttons[] = $form->generate_submit_button($lang->cancel, array('onclick' => '$.modal.close(); return false;'));
 823              $buttons[] = $form->generate_submit_button($lang->save_permissions, array('id' => 'savePermissions'));
 824              $form->output_submit_wrapper($buttons);
 825              $form->end();
 826              echo "</div>";
 827              echo "</div>";
 828          }
 829          else
 830          {
 831              $buttons[] = $form->generate_submit_button($lang->save_permissions);
 832              $form->output_submit_wrapper($buttons);
 833  
 834              $form->end();
 835          }
 836      }
 837  
 838      if($mybb->input['ajax'] != 1)
 839      {
 840          $page->output_footer();
 841      }
 842  }
 843  
 844  if($mybb->input['action'] == "add")
 845  {
 846      $plugins->run_hooks("admin_forum_management_add");
 847  
 848      if($mybb->request_method == "post")
 849      {
 850          if(!trim($mybb->input['title']))
 851          {
 852              $errors[] = $lang->error_missing_title;
 853          }
 854  
 855          $pid = $mybb->get_input('pid', MyBB::INPUT_INT);
 856          $type = $mybb->input['type'];
 857  
 858          if($pid <= 0 && $type == "f")
 859          {
 860              $errors[] = $lang->error_no_parent;
 861          }
 862  
 863          if(!$errors)
 864          {
 865              if($pid < 0)
 866              {
 867                  $pid = 0;
 868              }
 869              $insert_array = array(
 870                  "name" => $db->escape_string($mybb->input['title']),
 871                  "description" => $db->escape_string($mybb->input['description']),
 872                  "linkto" => $db->escape_string($mybb->input['linkto']),
 873                  "type" => $db->escape_string($type),
 874                  "pid" => $pid,
 875                  "parentlist" => '',
 876                  "disporder" => $mybb->get_input('disporder', MyBB::INPUT_INT),
 877                  "active" => $mybb->get_input('active', MyBB::INPUT_INT),
 878                  "open" => $mybb->get_input('open', MyBB::INPUT_INT),
 879                  "allowhtml" => $mybb->get_input('allowhtml', MyBB::INPUT_INT),
 880                  "allowmycode" => $mybb->get_input('allowmycode', MyBB::INPUT_INT),
 881                  "allowsmilies" => $mybb->get_input('allowsmilies', MyBB::INPUT_INT),
 882                  "allowimgcode" => $mybb->get_input('allowimgcode', MyBB::INPUT_INT),
 883                  "allowvideocode" => $mybb->get_input('allowvideocode', MyBB::INPUT_INT),
 884                  "allowpicons" => $mybb->get_input('allowpicons', MyBB::INPUT_INT),
 885                  "allowtratings" => $mybb->get_input('allowtratings', MyBB::INPUT_INT),
 886                  "usepostcounts" => $mybb->get_input('usepostcounts', MyBB::INPUT_INT),
 887                  "usethreadcounts" => $mybb->get_input('usethreadcounts', MyBB::INPUT_INT),
 888                  "requireprefix" => $mybb->get_input('requireprefix', MyBB::INPUT_INT),
 889                  "password" => $db->escape_string($mybb->input['password']),
 890                  "showinjump" => $mybb->get_input('showinjump', MyBB::INPUT_INT),
 891                  "style" => $mybb->get_input('style', MyBB::INPUT_INT),
 892                  "overridestyle" => $mybb->get_input('overridestyle', MyBB::INPUT_INT),
 893                  "rulestype" => $mybb->get_input('rulestype', MyBB::INPUT_INT),
 894                  "rulestitle" => $db->escape_string($mybb->input['rulestitle']),
 895                  "rules" => $db->escape_string($mybb->input['rules']),
 896                  "defaultdatecut" => $mybb->get_input('defaultdatecut', MyBB::INPUT_INT),
 897                  "defaultsortby" => $db->escape_string($mybb->input['defaultsortby']),
 898                  "defaultsortorder" => $db->escape_string($mybb->input['defaultsortorder']),
 899              );
 900  
 901              $plugins->run_hooks("admin_forum_management_add_start");
 902  
 903              $fid = $db->insert_query("forums", $insert_array);
 904  
 905              $parentlist = make_parent_list($fid);
 906              $db->update_query("forums", array("parentlist" => $parentlist), "fid='$fid'");
 907  
 908              $cache->update_forums();
 909  
 910              $inherit = $mybb->input['default_permissions'];
 911  
 912              foreach($mybb->input as $id => $permission)
 913              {
 914                  if(strpos($id, 'fields_') === false)
 915                  {
 916                      continue;
 917                  }
 918  
 919                  list(, $gid) = explode('fields_', $id);
 920  
 921                  // If it isn't an array then it came from the javascript form
 922                  if(!is_array($permission))
 923                  {
 924                      $permission = explode(',', $permission);
 925                      $permission = array_flip($permission);
 926                      foreach($permission as $name => $value)
 927                      {
 928                          $permission[$name] = 1;
 929                      }
 930                  }
 931  
 932                  foreach(array('canview','canpostthreads','canpostreplys','canpostpolls','canpostattachments') as $name)
 933                  {
 934                      if(in_array($name, $permission) || !empty($permission[$name]))
 935                      {
 936                          $permissions[$name][$gid] = 1;
 937                      }
 938                      else
 939                      {
 940                          $permissions[$name][$gid] = 0;
 941                      }
 942                  }
 943              }
 944  
 945              $canview = $permissions['canview'];
 946              $canpostthreads = $permissions['canpostthreads'];
 947              $canpostpolls = $permissions['canpostpolls'];
 948              $canpostattachments = $permissions['canpostattachments'];
 949              $canpostreplies = $permissions['canpostreplys'];
 950              save_quick_perms($fid);
 951  
 952              $plugins->run_hooks("admin_forum_management_add_commit");
 953  
 954              // Log admin action
 955              log_admin_action($fid, $insert_array['name']);
 956  
 957              flash_message($lang->success_forum_added, 'success');
 958              admin_redirect("index.php?module=forum-management");
 959          }
 960      }
 961  
 962      $page->extra_header .=  "<script src=\"jscripts/quick_perm_editor.js\" type=\"text/javascript\"></script>\n";
 963  
 964      $page->add_breadcrumb_item($lang->add_forum);
 965      $page->output_header($lang->add_forum);
 966      $page->output_nav_tabs($sub_tabs, 'add_forum');
 967  
 968      $form = new Form("index.php?module=forum-management&amp;action=add", "post");
 969  
 970      $forum_data['type'] = "f";
 971      $forum_data['title'] = "";
 972      $forum_data['description'] = "";
 973  
 974      if(empty($mybb->input['pid']))
 975      {
 976          $forum_data['pid'] = "-1";
 977      }
 978      else
 979      {
 980          $forum_data['pid'] = $mybb->get_input('pid', MyBB::INPUT_INT);
 981      }
 982      $forum_data['disporder'] = "1";
 983      $forum_data['linkto'] = "";
 984      $forum_data['password'] = "";
 985      $forum_data['active'] = 1;
 986      $forum_data['open'] = 1;
 987      $forum_data['overridestyle'] = "";
 988      $forum_data['style'] = "";
 989      $forum_data['rulestype'] = "";
 990      $forum_data['rulestitle'] = "";
 991      $forum_data['rules'] = "";
 992      $forum_data['defaultdatecut'] = "";
 993      $forum_data['defaultsortby'] = "";
 994      $forum_data['defaultsortorder'] = "";
 995      $forum_data['allowhtml'] = "";
 996      $forum_data['allowmycode'] = 1;
 997      $forum_data['allowsmilies'] = 1;
 998      $forum_data['allowimgcode'] = 1;
 999      $forum_data['allowvideocode'] = 1;
1000      $forum_data['allowpicons'] = 1;
1001      $forum_data['allowtratings'] = 1;
1002      $forum_data['showinjump'] = 1;
1003      $forum_data['usepostcounts'] = 1;
1004      $forum_data['usethreadcounts'] = 1;
1005      $forum_data['requireprefix'] = 0;
1006  
1007      if($errors)
1008      {
1009          $page->output_inline_error($errors);
1010  
1011          foreach ($forum_data as $key => $value)
1012          {
1013              if (isset($mybb->input[$key]))
1014              {
1015                  $forum_data[$key] = $mybb->input[$key];
1016              }
1017          }
1018      }
1019  
1020      $types = array(
1021          'f' => $lang->forum,
1022          'c' => $lang->category
1023      );
1024  
1025      $create_a_options_f = array(
1026          'id' => 'forum'
1027      );
1028  
1029      $create_a_options_c = array(
1030          'id' => 'category'
1031      );
1032  
1033      if($forum_data['type'] == "f")
1034      {
1035          $create_a_options_f['checked'] = true;
1036      }
1037      else
1038      {
1039          $create_a_options_c['checked'] = true;
1040      }
1041  
1042      $form_container = new FormContainer($lang->add_forum);
1043      $form_container->output_row($lang->forum_type, $lang->forum_type_desc, $form->generate_radio_button('type', 'f', $lang->forum, $create_a_options_f)."<br />\n".$form->generate_radio_button('type', 'c', $lang->category, $create_a_options_c));
1044      $form_container->output_row($lang->title." <em>*</em>", "", $form->generate_text_box('title', $forum_data['title'], array('id' => 'title')), 'title');
1045      $form_container->output_row($lang->description, "", $form->generate_text_area('description', $forum_data['description'], array('id' => 'description')), 'description');
1046      $form_container->output_row($lang->parent_forum." <em>*</em>", $lang->parent_forum_desc, $form->generate_forum_select('pid', $forum_data['pid'], array('id' => 'pid', 'main_option' => $lang->none)), 'pid');
1047      $form_container->output_row($lang->display_order, "", $form->generate_numeric_field('disporder', $forum_data['disporder'], array('id' => 'disporder', 'min' => 0)), 'disporder');
1048      $form_container->end();
1049  
1050      echo "<div id=\"additional_options_link\"><strong><a href=\"#\" onclick=\"$('#additional_options_link').toggle(); $('#additional_options').fadeToggle('fast'); return false;\">{$lang->show_additional_options}</a></strong><br /><br /></div>";
1051      echo "<div id=\"additional_options\" style=\"display: none;\">";
1052      $form_container = new FormContainer("<div class=\"float_right\" style=\"font-weight: normal;\"><a href=\"#\" onclick=\"$('#additional_options_link').toggle(); $('#additional_options').fadeToggle('fast'); return false;\">{$lang->hide_additional_options}</a></div>".$lang->additional_forum_options);
1053      $form_container->output_row($lang->forum_link, $lang->forum_link_desc, $form->generate_text_box('linkto', $forum_data['linkto'], array('id' => 'linkto')), 'linkto');
1054      $form_container->output_row($lang->forum_password, $lang->forum_password_desc, $form->generate_text_box('password', $forum_data['password'], array('id' => 'password')), 'password');
1055  
1056      $access_options = array(
1057          $form->generate_check_box('active', 1, $lang->forum_is_active."<br />\n<small>{$lang->forum_is_active_desc}</small>", array('checked' => $forum_data['active'], 'id' => 'active')),
1058          $form->generate_check_box('open', 1, $lang->forum_is_open."<br />\n<small>{$lang->forum_is_open_desc}</small>", array('checked' => $forum_data['open'], 'id' => 'open'))
1059      );
1060  
1061      $form_container->output_row($lang->access_options, "", "<div class=\"forum_settings_bit\">".implode("</div><div class=\"forum_settings_bit\">", $access_options)."</div>");
1062  
1063      $styles = array(
1064          '0' => $lang->use_default
1065      );
1066  
1067      $query = $db->simple_select("themes", "tid,name", "name!='((master))' AND name!='((master-backup))'", array('order_by' => 'name'));
1068      while($style = $db->fetch_array($query))
1069      {
1070          $styles[$style['tid']] = htmlspecialchars_uni($style['name']);
1071      }
1072  
1073      $style_options = array(
1074          $form->generate_check_box('overridestyle', 1, $lang->override_user_style, array('checked' => $forum_data['overridestyle'], 'id' => 'overridestyle')),
1075          $lang->forum_specific_style."<br />\n".$form->generate_select_box('style', $styles, $forum_data['style'], array('id' => 'style'))
1076      );
1077  
1078      $form_container->output_row($lang->style_options, "", "<div class=\"forum_settings_bit\">".implode("</div><div class=\"forum_settings_bit\">", $style_options)."</div>");
1079  
1080      $display_methods = array(
1081          '0' => $lang->dont_display_rules,
1082          '1' => $lang->display_rules_inline,
1083          '3' => $lang->display_rules_inline_new,
1084          '2' => $lang->display_rules_link
1085      );
1086  
1087      $forum_rules = array(
1088          $lang->display_method."<br />\n".$form->generate_select_box('rulestype', $display_methods, $forum_data['rulestype'], array('checked' => $forum_data['rulestype'], 'id' => 'rulestype')),
1089          $lang->title."<br />\n".$form->generate_text_box('rulestitle', $forum_data['rulestitle'], array('checked' => $forum_data['rulestitle'], 'id' => 'rulestitle')),
1090          $lang->rules."<br />\n".$form->generate_text_area('rules', $forum_data['rules'], array('checked' => $forum_data['rules'], 'id' => 'rules'))
1091      );
1092  
1093      $form_container->output_row($lang->forum_rules, "", "<div class=\"forum_settings_bit\">".implode("</div><div class=\"forum_settings_bit\">", $forum_rules)."</div>");
1094  
1095      $default_date_cut = array(
1096          0 => $lang->board_default,
1097          1 => $lang->datelimit_1day,
1098          5 => $lang->datelimit_5days,
1099          10 => $lang->datelimit_10days,
1100          20 => $lang->datelimit_20days,
1101          50 => $lang->datelimit_50days,
1102          75 => $lang->datelimit_75days,
1103          100 => $lang->datelimit_100days,
1104          365 => $lang->datelimit_lastyear,
1105          9999 => $lang->datelimit_beginning,
1106      );
1107  
1108      $default_sort_by = array(
1109          "" => $lang->board_default,
1110          "subject" => $lang->sort_by_subject,
1111          "lastpost" => $lang->sort_by_lastpost,
1112          "starter" => $lang->sort_by_starter,
1113          "started" => $lang->sort_by_started,
1114          "rating" => $lang->sort_by_rating,
1115          "replies" => $lang->sort_by_replies,
1116          "views" => $lang->sort_by_views,
1117      );
1118  
1119      $default_sort_order = array(
1120          "" => $lang->board_default,
1121          "asc" => $lang->sort_order_asc,
1122          "desc" => $lang->sort_order_desc,
1123      );
1124  
1125      $view_options = array(
1126          $lang->default_date_cut."<br />\n".$form->generate_select_box('defaultdatecut', $default_date_cut, $forum_data['defaultdatecut'], array('checked' => $forum_data['defaultdatecut'], 'id' => 'defaultdatecut')),
1127          $lang->default_sort_by."<br />\n".$form->generate_select_box('defaultsortby', $default_sort_by, $forum_data['defaultsortby'], array('checked' => $forum_data['defaultsortby'], 'id' => 'defaultsortby')),
1128          $lang->default_sort_order."<br />\n".$form->generate_select_box('defaultsortorder', $default_sort_order, $forum_data['defaultsortorder'], array('checked' => $forum_data['defaultsortorder'], 'id' => 'defaultsortorder')),
1129      );
1130  
1131      $form_container->output_row($lang->default_view_options, "", "<div class=\"forum_settings_bit\">".implode("</div><div class=\"forum_settings_bit\">", $view_options)."</div>");
1132  
1133      $misc_options = array(
1134          $form->generate_check_box('allowhtml', 1, $lang->allow_html, array('checked' => $forum_data['allowhtml'], 'id' => 'allowhtml')),
1135          $form->generate_check_box('allowmycode', 1, $lang->allow_mycode, array('checked' => $forum_data['allowmycode'], 'id' => 'allowmycode')),
1136          $form->generate_check_box('allowsmilies', 1, $lang->allow_smilies, array('checked' => $forum_data['allowsmilies'], 'id' => 'allowsmilies')),
1137          $form->generate_check_box('allowimgcode', 1, $lang->allow_img_code, array('checked' => $forum_data['allowimgcode'], 'id' => 'allowimgcode')),
1138          $form->generate_check_box('allowvideocode', 1, $lang->allow_video_code, array('checked' => $forum_data['allowvideocode'], 'id' => 'allowvideocode')),
1139          $form->generate_check_box('allowpicons', 1, $lang->allow_post_icons, array('checked' => $forum_data['allowpicons'], 'id' => 'allowpicons')),
1140          $form->generate_check_box('allowtratings', 1, $lang->allow_thread_ratings, array('checked' => $forum_data['allowtratings'], 'id' => 'allowtratings')),
1141          $form->generate_check_box('showinjump', 1, $lang->show_forum_jump, array('checked' => $forum_data['showinjump'], 'id' => 'showinjump')),
1142          $form->generate_check_box('usepostcounts', 1, $lang->use_postcounts, array('checked' => $forum_data['usepostcounts'], 'id' => 'usepostcounts')),
1143          $form->generate_check_box('usethreadcounts', 1, $lang->use_threadcounts, array('checked' => $forum_data['usethreadcounts'], 'id' => 'usethreadcounts')),
1144          $form->generate_check_box('requireprefix', 1, $lang->require_thread_prefix, array('checked' => $forum_data['requireprefix'], 'id' => 'requireprefix'))
1145      );
1146  
1147      $form_container->output_row($lang->misc_options, "", "<div class=\"forum_settings_bit\">".implode("</div><div class=\"forum_settings_bit\">", $misc_options)."</div>");
1148      $form_container->end();
1149      echo "</div>";
1150  
1151      $query = $db->simple_select("usergroups", "*", "", array("order" => "name"));
1152      while($usergroup = $db->fetch_array($query))
1153      {
1154          $usergroups[$usergroup['gid']] = $usergroup;
1155      }
1156  
1157      $cached_forum_perms = $cache->read("forumpermissions");
1158      $field_list = array(
1159          'canview' => $lang->permissions_canview,
1160          'canpostthreads' => $lang->permissions_canpostthreads,
1161          'canpostreplys' => $lang->permissions_canpostreplys,
1162          'canpostpolls' => $lang->permissions_canpostpolls,
1163      );
1164  
1165      $field_list2 = array(
1166          'canview' => $lang->perm_drag_canview,
1167          'canpostthreads' => $lang->perm_drag_canpostthreads,
1168          'canpostreplys' => $lang->perm_drag_canpostreplys,
1169          'canpostpolls' => $lang->perm_drag_canpostpolls,
1170      );
1171  
1172      $ids = array();
1173  
1174      $form_container = new FormContainer($lang->forum_permissions);
1175      $form_container->output_row_header($lang->permissions_group, array("class" => "align_center", 'style' => 'width: 40%'));
1176      $form_container->output_row_header($lang->overview_allowed_actions, array("class" => "align_center"));
1177      $form_container->output_row_header($lang->overview_disallowed_actions, array("class" => "align_center"));
1178  
1179      if($mybb->request_method == "post")
1180      {
1181          foreach($usergroups as $usergroup)
1182          {
1183              if(isset($mybb->input['fields_'.$usergroup['gid']]))
1184              {
1185                  $input_permissions = $mybb->input['fields_'.$usergroup['gid']];
1186                  if(!is_array($input_permissions))
1187                  {
1188                      // Convering the comma separated list from Javascript form into a variable
1189                      $input_permissions = explode(',' , $input_permissions);
1190                  }
1191                  foreach($input_permissions as $input_permission)
1192                  {
1193                      $mybb->input['permissions'][$usergroup['gid']][$input_permission] = 1;
1194                  }
1195              }
1196          }
1197      }
1198  
1199      foreach($usergroups as $usergroup)
1200      {
1201          $perms = array();
1202  
1203          if(isset($existing_permissions) && is_array($existing_permissions) && $existing_permissions[$usergroup['gid']])
1204          {
1205              $perms = $existing_permissions[$usergroup['gid']];
1206              $default_checked = false;
1207          }
1208          elseif(is_array($cached_forum_perms) && isset($forum_data['fid']) && !empty($cached_forum_perms[$forum_data['fid']][$usergroup['gid']]))
1209          {
1210              $perms = $cached_forum_perms[$forum_data['fid']][$usergroup['gid']];
1211              $default_checked = true;
1212          }
1213          else if(is_array($cached_forum_perms) && isset($forum_data['pid']) && !empty($cached_forum_perms[$forum_data['pid']][$usergroup['gid']]))
1214          {
1215              $perms = $cached_forum_perms[$forum_data['pid']][$usergroup['gid']];
1216              $default_checked = true;
1217          }
1218  
1219          if(!$perms)
1220          {
1221              $perms = $usergroup;
1222              $default_checked = true;
1223          }
1224  
1225          foreach($field_list as $forum_permission => $forum_perm_title)
1226          {
1227              if(isset($mybb->input['permissions']))
1228              {
1229                  if(!empty($mybb->input['default_permissions'][$usergroup['gid']]))
1230                  {
1231                      $default_checked = true;
1232                  }
1233                  else
1234                  {
1235                      $default_checked = false;
1236                  }
1237  
1238                  if(!empty($mybb->input['permissions'][$usergroup['gid']][$forum_permission]))
1239                  {
1240                      $perms_checked[$forum_permission] = 1;
1241                  }
1242                  else
1243                  {
1244                      $perms_checked[$forum_permission] = 0;
1245                  }
1246              }
1247              else
1248              {
1249                  if($perms[$forum_permission] == 1)
1250                  {
1251                      $perms_checked[$forum_permission] = 1;
1252                  }
1253                  else
1254                  {
1255                      $perms_checked[$forum_permission] = 0;
1256                  }
1257              }
1258          }
1259          $usergroup['title'] = htmlspecialchars_uni($usergroup['title']);
1260  
1261          if($default_checked)
1262          {
1263              $inherited_text = $lang->inherited_permission;
1264          }
1265          else
1266          {
1267              $inherited_text = $lang->custom_permission;
1268          }
1269  
1270          $form_container->output_cell("<strong>{$usergroup['title']}</strong><br />".$form->generate_check_box("default_permissions[{$usergroup['gid']}]", 1, "", array("id" => "default_permissions_{$usergroup['gid']}", "checked" => $default_checked))." <small><label for=\"default_permissions_{$usergroup['gid']}\">{$lang->permissions_use_group_default}</label></small>");
1271  
1272          $field_select = "<div class=\"quick_perm_fields\">\n";
1273          $field_select .= "<div class=\"enabled\"><ul id=\"fields_enabled_{$usergroup['gid']}\">\n";
1274          foreach($perms_checked as $perm => $value)
1275          {
1276              if($value == 1)
1277              {
1278                  $field_select .= "<li id=\"field-{$perm}\">{$field_list2[$perm]}</li>";
1279              }
1280          }
1281          $field_select .= "</ul></div>\n";
1282          $field_select .= "<div class=\"disabled\"><ul id=\"fields_disabled_{$usergroup['gid']}\">\n";
1283          foreach($perms_checked as $perm => $value)
1284          {
1285              if($value == 0)
1286              {
1287                  $field_select .= "<li id=\"field-{$perm}\">{$field_list2[$perm]}</li>";
1288              }
1289          }
1290          $field_select .= "</ul></div></div>\n";
1291          $field_select .= $form->generate_hidden_field("fields_".$usergroup['gid'], @implode(",", @array_keys($perms_checked, '1')), array('id' => 'fields_'.$usergroup['gid']));
1292          $field_select = str_replace("'", "\\'", $field_select);
1293          $field_select = str_replace("\n", "", $field_select);
1294  
1295          $field_select = "<script type=\"text/javascript\">
1296  //<![CDATA[
1297  document.write('".str_replace("/", "\/", $field_select)."');
1298  //]]>
1299  </script>\n";
1300  
1301          $field_selected = array();
1302          foreach($field_list as $forum_permission => $permission_title)
1303          {
1304              $field_options[$forum_permission] = $permission_title;
1305              if($perms_checked[$forum_permission])
1306              {
1307                  $field_selected[] = $forum_permission;
1308              }
1309          }
1310  
1311          $field_select .= "<noscript>".$form->generate_select_box('fields_'.$usergroup['gid'].'[]', $field_options, $field_selected, array('id' => 'fields_'.$usergroup['gid'].'[]', 'multiple' => true))."</noscript>\n";
1312          $form_container->output_cell($field_select, array('colspan' => 2));
1313  
1314          $form_container->construct_row();
1315  
1316          $ids[] = $usergroup['gid'];
1317      }
1318      $form_container->end();
1319  
1320      $buttons[] = $form->generate_submit_button($lang->save_forum);
1321      $form->output_submit_wrapper($buttons);
1322      $form->end();
1323  
1324      // Write in our JS based field selector
1325      echo "<script type=\"text/javascript\">\n<!--\n";
1326      foreach($ids as $id)
1327      {
1328          echo "$(function() { QuickPermEditor.init(".$id.") });\n";
1329      }
1330      echo "// -->\n</script>\n";
1331  
1332      $page->output_footer();
1333  }
1334  
1335  if($mybb->input['action'] == "edit")
1336  {
1337      if(!$mybb->input['fid'])
1338      {
1339          flash_message($lang->error_invalid_fid, 'error');
1340          admin_redirect("index.php?module=forum-management");
1341      }
1342  
1343      $query = $db->simple_select("forums", "*", "fid='{$mybb->input['fid']}'");
1344      $forum_data = $db->fetch_array($query);
1345      if(!$forum_data)
1346      {
1347          flash_message($lang->error_invalid_fid, 'error');
1348          admin_redirect("index.php?module=forum-management");
1349      }
1350  
1351      $fid = $mybb->get_input('fid', MyBB::INPUT_INT);
1352  
1353      $plugins->run_hooks("admin_forum_management_edit");
1354  
1355      if($mybb->request_method == "post")
1356      {
1357          if(!trim($mybb->input['title']))
1358          {
1359              $errors[] = $lang->error_missing_title;
1360          }
1361  
1362          $pid = $mybb->get_input('pid', MyBB::INPUT_INT);
1363  
1364          if($pid == $mybb->input['fid'])
1365          {
1366              $errors[] = $lang->error_forum_parent_itself;
1367          }
1368          else
1369          {
1370              $query = $db->simple_select('forums', 'parentlist', "fid='{$pid}'");
1371              $parents = explode(',', $db->fetch_field($query, 'parentlist'));
1372              if(in_array($mybb->input['fid'], $parents))
1373              {
1374                  $errors[] = $lang->error_forum_parent_child;
1375              }
1376          }
1377  
1378          $type = $mybb->input['type'];
1379  
1380          if($pid <= 0 && $type == "f")
1381          {
1382              $errors[] = $lang->error_no_parent;
1383          }
1384  
1385          if($type == 'c' && $forum_data['type'] == 'f')
1386          {
1387              $query = $db->simple_select('threads', 'COUNT(tid) as num_threads', "fid = '{$fid}'");
1388              if($db->fetch_field($query, "num_threads") > 0)
1389              {
1390                  $errors[] = $lang->error_not_empty;
1391              }
1392          }
1393  
1394          if(!empty($mybb->input['linkto']) && empty($forum_data['linkto']))
1395          {
1396              $query = $db->simple_select('threads', 'COUNT(tid) as num_threads', "fid = '{$fid}'", array("limit" => 1));
1397              if($db->fetch_field($query, "num_threads") > 0)
1398              {
1399                  $errors[] = $lang->error_forum_link_not_empty;
1400              }
1401          }
1402  
1403          if(!$errors) {
1404              if ($pid < 0) {
1405                  $pid = 0;
1406              }
1407              $update_array = array(
1408                  "name" => $db->escape_string($mybb->input['title']),
1409                  "description" => $db->escape_string($mybb->input['description']),
1410                  "linkto" => $db->escape_string($mybb->input['linkto']),
1411                  "type" => $db->escape_string($type),
1412                  "pid" => $pid,
1413                  "disporder" => $mybb->get_input('disporder', MyBB::INPUT_INT),
1414                  "active" => $mybb->get_input('active', MyBB::INPUT_INT),
1415                  "open" => $mybb->get_input('open', MyBB::INPUT_INT),
1416                  "allowhtml" => $mybb->get_input('allowhtml', MyBB::INPUT_INT),
1417                  "allowmycode" => $mybb->get_input('allowmycode', MyBB::INPUT_INT),
1418                  "allowsmilies" => $mybb->get_input('allowsmilies', MyBB::INPUT_INT),
1419                  "allowimgcode" => $mybb->get_input('allowimgcode', MyBB::INPUT_INT),
1420                  "allowvideocode" => $mybb->get_input('allowvideocode', MyBB::INPUT_INT),
1421                  "allowpicons" => $mybb->get_input('allowpicons', MyBB::INPUT_INT),
1422                  "allowtratings" => $mybb->get_input('allowtratings', MyBB::INPUT_INT),
1423                  "usepostcounts" => $mybb->get_input('usepostcounts', MyBB::INPUT_INT),
1424                  "usethreadcounts" => $mybb->get_input('usethreadcounts', MyBB::INPUT_INT),
1425                  "requireprefix" => $mybb->get_input('requireprefix', MyBB::INPUT_INT),
1426                  "password" => $db->escape_string($mybb->input['password']),
1427                  "showinjump" => $mybb->get_input('showinjump', MyBB::INPUT_INT),
1428                  "style" => $mybb->get_input('style', MyBB::INPUT_INT),
1429                  "overridestyle" => $mybb->get_input('overridestyle', MyBB::INPUT_INT),
1430                  "rulestype" => $mybb->get_input('rulestype', MyBB::INPUT_INT),
1431                  "rulestitle" => $db->escape_string($mybb->input['rulestitle']),
1432                  "rules" => $db->escape_string($mybb->input['rules']),
1433                  "defaultdatecut" => $mybb->get_input('defaultdatecut', MyBB::INPUT_INT),
1434                  "defaultsortby" => $db->escape_string($mybb->input['defaultsortby']),
1435                  "defaultsortorder" => $db->escape_string($mybb->input['defaultsortorder']),
1436              );
1437              $db->update_query("forums", $update_array, "fid='{$fid}'");
1438              if ($pid != $forum_data['pid']) {
1439                  // Update the parentlist of this forum.
1440                  $db->update_query("forums", array("parentlist" => make_parent_list($fid)), "fid='{$fid}'");
1441  
1442                  // Rebuild the parentlist of all of the subforums of this forum
1443                  switch ($db->type) {
1444                      case "sqlite":
1445                      case "pgsql":
1446                          $query = $db->simple_select("forums", "fid", "','||parentlist||',' LIKE '%,$fid,%'");
1447                          break;
1448                      default:
1449                          $query = $db->simple_select("forums", "fid", "CONCAT(',',parentlist,',') LIKE '%,$fid,%'");
1450                  }
1451  
1452                  while ($child = $db->fetch_array($query)) {
1453                      $db->update_query("forums", array("parentlist" => make_parent_list($child['fid'])), "fid='{$child['fid']}'");
1454                  }
1455              }
1456  
1457              if(!empty($mybb->input['default_permissions']))
1458              {
1459                  $inherit = $mybb->input['default_permissions'];
1460              }
1461              else
1462              {
1463                  $inherit = array();
1464              }
1465  
1466              foreach($mybb->input as $id => $permission)
1467              {
1468                  // Make sure we're only skipping inputs that don't start with "fields_" and aren't fields_default_ or fields_inherit_
1469                  if(strpos($id, 'fields_') === false || (strpos($id, 'fields_default_') !== false || strpos($id, 'fields_inherit_') !== false))
1470                  {
1471                      continue;
1472                  }
1473  
1474                  list(, $gid) = explode('fields_', $id);
1475  
1476                  if($mybb->input['fields_default_'.$gid] == $permission && $mybb->input['fields_inherit_'.$gid] == 1)
1477                  {
1478                      $inherit[$gid] = 1;
1479                      continue;
1480                  }
1481                  $inherit[$gid] = 0;
1482  
1483                  // If it isn't an array then it came from the javascript form
1484                  if(!is_array($permission))
1485                  {
1486                      $permission = explode(',', $permission);
1487                      $permission = array_flip($permission);
1488                      foreach($permission as $name => $value)
1489                      {
1490                          $permission[$name] = 1;
1491                      }
1492                  }
1493  
1494                  foreach(array('canview','canpostthreads','canpostreplys','canpostpolls') as $name)
1495                  {
1496                      if(in_array($name, $permission) || !empty($permission[$name]))
1497                      {
1498                          $permissions[$name][$gid] = 1;
1499                      }
1500                      else
1501                      {
1502                          $permissions[$name][$gid] = 0;
1503                      }
1504                  }
1505              }
1506  
1507              $cache->update_forums();
1508  
1509              if(isset($permissions['canview']))
1510              {
1511                  $canview = $permissions['canview'];
1512              }
1513              if(isset($permissions['canpostthreads']))
1514              {
1515                  $canpostthreads = $permissions['canpostthreads'];
1516              }
1517              if(isset($permissions['canpostpolls']))
1518              {
1519                  $canpostpolls = $permissions['canpostpolls'];
1520              }
1521              if(isset($permissions['canpostattachments']))
1522              {
1523                  $canpostattachments = $permissions['canpostattachments'];
1524              }
1525              if(isset($permissions['canpostreplys']))
1526              {
1527                  $canpostreplies = $permissions['canpostreplys'];
1528              }
1529  
1530              save_quick_perms($fid);
1531  
1532              $plugins->run_hooks("admin_forum_management_edit_commit");
1533  
1534              // Log admin action
1535              log_admin_action($fid, $mybb->input['title']);
1536  
1537              flash_message($lang->success_forum_updated, 'success');
1538              admin_redirect("index.php?module=forum-management&fid={$fid}");
1539          }
1540      }
1541  
1542      $page->extra_header .=  "<script src=\"jscripts/quick_perm_editor.js\" type=\"text/javascript\"></script>\n";
1543  
1544      $page->add_breadcrumb_item($lang->edit_forum);
1545      $page->output_header($lang->edit_forum);
1546  
1547      $page->output_nav_tabs($sub_tabs, 'edit_forum_settings');
1548  
1549      $form = new Form("index.php?module=forum-management&amp;action=edit", "post");
1550      echo $form->generate_hidden_field("fid", $fid);
1551  
1552      if($errors)
1553      {
1554          $page->output_inline_error($errors);
1555          $forum_data = $mybb->input;
1556      }
1557      else
1558      {
1559          $forum_data['title'] = $forum_data['name'];
1560      }
1561  
1562      $query = $db->simple_select("usergroups", "*", "", array("order_dir" => "name"));
1563      while($usergroup = $db->fetch_array($query))
1564      {
1565          $usergroups[$usergroup['gid']] = $usergroup;
1566      }
1567  
1568      $query = $db->simple_select("forumpermissions", "*", "fid='{$fid}'");
1569      while($existing = $db->fetch_array($query))
1570      {
1571          $existing_permissions[$existing['gid']] = $existing;
1572      }
1573  
1574      $types = array(
1575          'f' => $lang->forum,
1576          'c' => $lang->category
1577      );
1578  
1579      $create_a_options_f = array(
1580          'id' => 'forum'
1581      );
1582  
1583      $create_a_options_c = array(
1584          'id' => 'category'
1585      );
1586  
1587      if($forum_data['type'] == "f")
1588      {
1589          $create_a_options_f['checked'] = true;
1590      }
1591      else
1592      {
1593          $create_a_options_c['checked'] = true;
1594      }
1595  
1596      $form_container = new FormContainer($lang->edit_forum);
1597      $form_container->output_row($lang->forum_type, $lang->forum_type_desc, $form->generate_radio_button('type', 'f', $lang->forum, $create_a_options_f)."<br />\n".$form->generate_radio_button('type', 'c', $lang->category, $create_a_options_c));
1598      $form_container->output_row($lang->title." <em>*</em>", "", $form->generate_text_box('title', $forum_data['title'], array('id' => 'title')), 'title');
1599      $form_container->output_row($lang->description, "", $form->generate_text_area('description', $forum_data['description'], array('id' => 'description')), 'description');
1600      $form_container->output_row($lang->parent_forum." <em>*</em>", $lang->parent_forum_desc, $form->generate_forum_select('pid', $forum_data['pid'], array('id' => 'pid', 'main_option' => $lang->none)), 'pid');
1601      $form_container->output_row($lang->display_order, "", $form->generate_numeric_field('disporder', $forum_data['disporder'], array('id' => 'disporder', 'min' => 0)), 'disporder');
1602      $form_container->end();
1603  
1604      $form_container = new FormContainer($lang->additional_forum_options);
1605      $form_container->output_row($lang->forum_link, $lang->forum_link_desc, $form->generate_text_box('linkto', $forum_data['linkto'], array('id' => 'linkto')), 'linkto');
1606      $form_container->output_row($lang->forum_password, $lang->forum_password_desc, $form->generate_text_box('password', $forum_data['password'], array('id' => 'password')), 'password');
1607  
1608      $access_options = array(
1609          $form->generate_check_box('active', 1, $lang->forum_is_active."<br />\n<small>{$lang->forum_is_active_desc}</small>", array('checked' => $forum_data['active'], 'id' => 'active')),
1610          $form->generate_check_box('open', 1, $lang->forum_is_open."<br />\n<small>{$lang->forum_is_open_desc}</small>", array('checked' => $forum_data['open'], 'id' => 'open'))
1611      );
1612  
1613      $form_container->output_row($lang->access_options, "", "<div class=\"forum_settings_bit\">".implode("</div><div class=\"forum_settings_bit\">", $access_options)."</div>");
1614  
1615      $styles = array(
1616          '0' => $lang->use_default
1617      );
1618  
1619      $query = $db->simple_select("themes", "tid,name", "name!='((master))' AND name!='((master-backup))'", array('order_by' => 'name'));
1620      while($style = $db->fetch_array($query))
1621      {
1622          $styles[$style['tid']] = $style['name'];
1623      }
1624  
1625      $style_options = array(
1626          $form->generate_check_box('overridestyle', 1, $lang->override_user_style, array('checked' => $forum_data['overridestyle'], 'id' => 'overridestyle')),
1627          $lang->forum_specific_style."<br />\n".$form->generate_select_box('style', $styles, $forum_data['style'], array('id' => 'style'))
1628      );
1629  
1630      $form_container->output_row($lang->style_options, "", "<div class=\"forum_settings_bit\">".implode("</div><div class=\"forum_settings_bit\">", $style_options)."</div>");
1631  
1632      $display_methods = array(
1633          '0' => $lang->dont_display_rules,
1634          '1' => $lang->display_rules_inline,
1635          '3' => $lang->display_rules_inline_new,
1636          '2' => $lang->display_rules_link
1637      );
1638  
1639      $forum_rules = array(
1640          $lang->display_method."<br />\n".$form->generate_select_box('rulestype', $display_methods, $forum_data['rulestype'], array('checked' => $forum_data['rulestype'], 'id' => 'rulestype')),
1641          $lang->title."<br />\n".$form->generate_text_box('rulestitle', $forum_data['rulestitle'], array('checked' => $forum_data['rulestitle'], 'id' => 'rulestitle')),
1642          $lang->rules."<br />\n".$form->generate_text_area('rules', $forum_data['rules'], array('checked' => $forum_data['rules'], 'id' => 'rules'))
1643      );
1644  
1645      $form_container->output_row($lang->forum_rules, "", "<div class=\"forum_settings_bit\">".implode("</div><div class=\"forum_settings_bit\">", $forum_rules)."</div>");
1646  
1647      $default_date_cut = array(
1648          0 => $lang->board_default,
1649          1 => $lang->datelimit_1day,
1650          5 => $lang->datelimit_5days,
1651          10 => $lang->datelimit_10days,
1652          20 => $lang->datelimit_20days,
1653          50 => $lang->datelimit_50days,
1654          75 => $lang->datelimit_75days,
1655          100 => $lang->datelimit_100days,
1656          365 => $lang->datelimit_lastyear,
1657          9999 => $lang->datelimit_beginning,
1658      );
1659  
1660      $default_sort_by = array(
1661          "" => $lang->board_default,
1662          "subject" => $lang->sort_by_subject,
1663          "lastpost" => $lang->sort_by_lastpost,
1664          "starter" => $lang->sort_by_starter,
1665          "started" => $lang->sort_by_started,
1666          "rating" => $lang->sort_by_rating,
1667          "replies" => $lang->sort_by_replies,
1668          "views" => $lang->sort_by_views,
1669      );
1670  
1671      $default_sort_order = array(
1672          "" => $lang->board_default,
1673          "asc" => $lang->sort_order_asc,
1674          "desc" => $lang->sort_order_desc,
1675      );
1676  
1677      $view_options = array(
1678          $lang->default_date_cut."<br />\n".$form->generate_select_box('defaultdatecut', $default_date_cut, $forum_data['defaultdatecut'], array('checked' => $forum_data['defaultdatecut'], 'id' => 'defaultdatecut')),
1679          $lang->default_sort_by."<br />\n".$form->generate_select_box('defaultsortby', $default_sort_by, $forum_data['defaultsortby'], array('checked' => $forum_data['defaultsortby'], 'id' => 'defaultsortby')),
1680          $lang->default_sort_order."<br />\n".$form->generate_select_box('defaultsortorder', $default_sort_order, $forum_data['defaultsortorder'], array('checked' => $forum_data['defaultsortorder'], 'id' => 'defaultsortorder')),
1681      );
1682  
1683      $form_container->output_row($lang->default_view_options, "", "<div class=\"forum_settings_bit\">".implode("</div><div class=\"forum_settings_bit\">", $view_options)."</div>");
1684  
1685      $misc_options = array(
1686          $form->generate_check_box('allowhtml', 1, $lang->allow_html, array('checked' => $forum_data['allowhtml'], 'id' => 'allowhtml')),
1687          $form->generate_check_box('allowmycode', 1, $lang->allow_mycode, array('checked' => $forum_data['allowmycode'], 'id' => 'allowmycode')),
1688          $form->generate_check_box('allowsmilies', 1, $lang->allow_smilies, array('checked' => $forum_data['allowsmilies'], 'id' => 'allowsmilies')),
1689          $form->generate_check_box('allowimgcode', 1, $lang->allow_img_code, array('checked' => $forum_data['allowimgcode'], 'id' => 'allowimgcode')),
1690          $form->generate_check_box('allowvideocode', 1, $lang->allow_video_code, array('checked' => $forum_data['allowvideocode'], 'id' => 'allowvideocode')),
1691          $form->generate_check_box('allowpicons', 1, $lang->allow_post_icons, array('checked' => $forum_data['allowpicons'], 'id' => 'allowpicons')),
1692          $form->generate_check_box('allowtratings', 1, $lang->allow_thread_ratings, array('checked' => $forum_data['allowtratings'], 'id' => 'allowtratings')),
1693          $form->generate_check_box('showinjump', 1, $lang->show_forum_jump, array('checked' => $forum_data['showinjump'], 'id' => 'showinjump')),
1694          $form->generate_check_box('usepostcounts', 1, $lang->use_postcounts, array('checked' => $forum_data['usepostcounts'], 'id' => 'usepostcounts')),
1695          $form->generate_check_box('usethreadcounts', 1, $lang->use_threadcounts, array('checked' => $forum_data['usethreadcounts'], 'id' => 'usethreadcounts')),
1696          $form->generate_check_box('requireprefix', 1, $lang->require_thread_prefix, array('checked' => $forum_data['requireprefix'], 'id' => 'requireprefix'))
1697      );
1698  
1699      $form_container->output_row($lang->misc_options, "", "<div class=\"forum_settings_bit\">".implode("</div><div class=\"forum_settings_bit\">", $misc_options)."</div>");
1700      $form_container->end();
1701  
1702      $cached_forum_perms = $cache->read("forumpermissions");
1703      $field_list = array(
1704          'canview' => $lang->permissions_canview,
1705          'canpostthreads' => $lang->permissions_canpostthreads,
1706          'canpostreplys' => $lang->permissions_canpostreplys,
1707          'canpostpolls' => $lang->permissions_canpostpolls,
1708      );
1709  
1710      $field_list2 = array(
1711          'canview' => $lang->perm_drag_canview,
1712          'canpostthreads' => $lang->perm_drag_canpostthreads,
1713          'canpostreplys' => $lang->perm_drag_canpostreplys,
1714          'canpostpolls' => $lang->perm_drag_canpostpolls,
1715      );
1716  
1717      $ids = array();
1718  
1719      $form_container = new FormContainer($lang->sprintf($lang->forum_permissions_in, $forum_data['name']));
1720      $form_container->output_row_header($lang->permissions_group, array("class" => "align_center", 'style' => 'width: 30%'));
1721      $form_container->output_row_header($lang->overview_allowed_actions, array("class" => "align_center"));
1722      $form_container->output_row_header($lang->overview_disallowed_actions, array("class" => "align_center"));
1723      $form_container->output_row_header($lang->controls, array("class" => "align_center", 'style' => 'width: 120px', 'colspan' => 2));
1724  
1725      if($mybb->request_method == "post")
1726      {
1727          foreach($usergroups as $usergroup)
1728          {
1729              if(isset($mybb->input['fields_'.$usergroup['gid']]))
1730              {
1731                  $input_permissions = $mybb->input['fields_'.$usergroup['gid']];
1732                  if(!is_array($input_permissions))
1733                  {
1734                      // Convering the comma separated list from Javascript form into a variable
1735                      $input_permissions = explode(',' , $input_permissions);
1736                  }
1737                  foreach($input_permissions as $input_permission)
1738                  {
1739                      $mybb->input['permissions'][$usergroup['gid']][$input_permission] = 1;
1740                  }
1741              }
1742          }
1743      }
1744  
1745      foreach($usergroups as $usergroup)
1746      {
1747          $perms = array();
1748          if(isset($mybb->input['default_permissions']))
1749          {
1750              if($mybb->input['default_permissions'][$usergroup['gid']])
1751              {
1752                  if(is_array($existing_permissions) && $existing_permissions[$usergroup['gid']])
1753                  {
1754                      $perms = $existing_permissions[$usergroup['gid']];
1755                      $default_checked = false;
1756                  }
1757                  elseif(is_array($cached_forum_perms) && $cached_forum_perms[$forum_data['fid']][$usergroup['gid']])
1758                  {
1759                      $perms = $cached_forum_perms[$forum_data['fid']][$usergroup['gid']];
1760                      $default_checked = true;
1761                  }
1762                  else if(is_array($cached_forum_perms) && $cached_forum_perms[$forum_data['pid']][$usergroup['gid']])
1763                  {
1764                      $perms = $cached_forum_perms[$forum_data['pid']][$usergroup['gid']];
1765                      $default_checked = true;
1766                  }
1767              }
1768  
1769              if(!$perms)
1770              {
1771                  $perms = $usergroup;
1772                  $default_checked = true;
1773              }
1774          }
1775          else
1776          {
1777              if(isset($existing_permissions) && is_array($existing_permissions) && !empty($existing_permissions[$usergroup['gid']]))
1778              {
1779                  $perms = $existing_permissions[$usergroup['gid']];
1780                  $default_checked = false;
1781              }
1782              elseif(is_array($cached_forum_perms) && !empty($cached_forum_perms[$forum_data['fid']][$usergroup['gid']]))
1783              {
1784                  $perms = $cached_forum_perms[$forum_data['fid']][$usergroup['gid']];
1785                  $default_checked = true;
1786              }
1787              else if(is_array($cached_forum_perms) && !empty($cached_forum_perms[$forum_data['pid']][$usergroup['gid']]))
1788              {
1789                  $perms = $cached_forum_perms[$forum_data['pid']][$usergroup['gid']];
1790                  $default_checked = true;
1791              }
1792  
1793              if(!$perms)
1794              {
1795                  $perms = $usergroup;
1796                  $default_checked = true;
1797              }
1798          }
1799  
1800          foreach($field_list as $forum_permission => $forum_perm_title)
1801          {
1802              if(isset($mybb->input['permissions']))
1803              {
1804                  if($mybb->input['permissions'][$usergroup['gid']][$forum_permission])
1805                  {
1806                      $perms_checked[$forum_permission] = 1;
1807                  }
1808                  else
1809                  {
1810                      $perms_checked[$forum_permission] = 0;
1811                  }
1812              }
1813              else
1814              {
1815                  if($perms[$forum_permission] == 1)
1816                  {
1817                      $perms_checked[$forum_permission] = 1;
1818                  }
1819                  else
1820                  {
1821                      $perms_checked[$forum_permission] = 0;
1822                  }
1823              }
1824          }
1825          $usergroup['title'] = htmlspecialchars_uni($usergroup['title']);
1826  
1827          if($default_checked)
1828          {
1829              $inherited_text = $lang->inherited_permission;
1830          }
1831          else
1832          {
1833              $inherited_text = $lang->custom_permission;
1834          }
1835  
1836          $form_container->output_cell("<strong>{$usergroup['title']}</strong> <small style=\"vertical-align: middle;\">({$inherited_text})</small>");
1837  
1838          $field_select = "<div class=\"quick_perm_fields\">\n";
1839          $field_select .= "<div class=\"enabled\"><ul id=\"fields_enabled_{$usergroup['gid']}\">\n";
1840          foreach($perms_checked as $perm => $value)
1841          {
1842              if($value == 1)
1843              {
1844                  $field_select .= "<li id=\"field-{$perm}\">{$field_list2[$perm]}</li>";
1845              }
1846          }
1847          $field_select .= "</ul></div>\n";
1848          $field_select .= "<div class=\"disabled\"><ul id=\"fields_disabled_{$usergroup['gid']}\">\n";
1849          foreach($perms_checked as $perm => $value)
1850          {
1851              if($value == 0)
1852              {
1853                  $field_select .= "<li id=\"field-{$perm}\">{$field_list2[$perm]}</li>";
1854              }
1855          }
1856          $field_select .= "</ul></div></div>\n";
1857          $field_select .= $form->generate_hidden_field("fields_".$usergroup['gid'], @implode(",", @array_keys($perms_checked, '1')), array('id' => 'fields_'.$usergroup['gid']));
1858          $field_select .= $form->generate_hidden_field("fields_inherit_".$usergroup['gid'], (int)$default_checked, array('id' => 'fields_inherit_'.$usergroup['gid']));
1859          $field_select .= $form->generate_hidden_field("fields_default_".$usergroup['gid'], @implode(",", @array_keys($perms_checked, '1')), array('id' => 'fields_default_'.$usergroup['gid']));
1860          $field_select = str_replace("'", "\\'", $field_select);
1861          $field_select = str_replace("\n", "", $field_select);
1862  
1863          $field_select = "<script type=\"text/javascript\">
1864  //<![CDATA[
1865  document.write('".str_replace("/", "\/", $field_select)."');
1866  //]]>
1867  </script>\n";
1868  
1869          $field_selected = array();
1870          foreach($field_list as $forum_permission => $permission_title)
1871          {
1872              $field_options[$forum_permission] = $permission_title;
1873              if($perms_checked[$forum_permission])
1874              {
1875                  $field_selected[] = $forum_permission;
1876              }
1877          }
1878  
1879          $field_select .= "<noscript>".$form->generate_select_box('fields_'.$usergroup['gid'].'[]', $field_options, $field_selected, array('id' => 'fields_'.$usergroup['gid'].'[]', 'multiple' => true))."</noscript>\n";
1880          $form_container->output_cell($field_select, array('colspan' => 2));
1881  
1882          if(!$default_checked)
1883          {
1884              $form_container->output_cell("<a href=\"index.php?module=forum-management&amp;action=permissions&amp;pid={$perms['pid']}\" onclick=\"MyBB.popupWindow('index.php?module=forum-management&action=permissions&pid={$perms['pid']}&ajax=1', null, true); return false;\">{$lang->edit_permissions}</a>", array("class" => "align_center"));
1885              $form_container->output_cell("<a href=\"index.php?module=forum-management&amp;action=clear_permission&amp;pid={$perms['pid']}&amp;my_post_key={$mybb->post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->confirm_clear_custom_permission}')\">{$lang->clear_custom_perms}</a>", array("class" => "align_center"));
1886          }
1887          else
1888          {
1889              $form_container->output_cell("<a href=\"index.php?module=forum-management&amp;action=permissions&amp;gid={$usergroup['gid']}&amp;fid={$fid}\" onclick=\"MyBB.popupWindow('index.php?module=forum-management&action=permissions&gid={$usergroup['gid']}&fid={$fid}&ajax=1', null, true); return false;\">{$lang->set_custom_perms}</a>", array("class" => "align_center", "colspan" => 2));
1890          }
1891  
1892          $form_container->construct_row(array('id' => 'row_'.$usergroup['gid']));
1893  
1894          $ids[] = $usergroup['gid'];
1895      }
1896      $form_container->end();
1897  
1898      $buttons[] = $form->generate_submit_button($lang->save_forum);
1899      $form->output_submit_wrapper($buttons);
1900      $form->end();
1901  
1902      // Write in our JS based field selector
1903      echo "<script type=\"text/javascript\">\n<!--\n";
1904      foreach($ids as $id)
1905      {
1906          echo "$(function() { QuickPermEditor.init(".$id."); });\n";
1907      }
1908      echo "// -->\n</script>\n";
1909  
1910      $page->output_footer();
1911  }
1912  
1913  if($mybb->input['action'] == "deletemod")
1914  {
1915      $modid = $mybb->get_input('id', MyBB::INPUT_INT);
1916      $isgroup = $mybb->get_input('isgroup', MyBB::INPUT_INT);
1917      $fid = $mybb->get_input('fid', MyBB::INPUT_INT);
1918  
1919      $query = $db->simple_select("moderators", "*", "id='{$modid}' AND isgroup = '{$isgroup}' AND fid='{$fid}'");
1920      $mod = $db->fetch_array($query);
1921  
1922      // Does the forum not exist?
1923      if(!$mod)
1924      {
1925          flash_message($lang->error_invalid_moderator, 'error');
1926          admin_redirect("index.php?module=forum-management&fid={$fid}");
1927      }
1928  
1929      // User clicked no
1930      if(!empty($mybb->input['no']))
1931      {
1932          admin_redirect("index.php?module=forum-management&fid={$fid}");
1933      }
1934  
1935      $plugins->run_hooks("admin_forum_management_deletemod");
1936  
1937      if($mybb->request_method == "post")
1938      {
1939          $mid = $mod['mid'];
1940          if($mybb->input['isgroup'])
1941          {
1942              $query = $db->query("
1943                  SELECT m.*, g.title
1944                  FROM ".TABLE_PREFIX."moderators m
1945                  LEFT JOIN ".TABLE_PREFIX."usergroups g ON (g.gid=m.id)
1946                  WHERE m.mid='{$mid}'
1947              ");
1948          }
1949          else
1950          {
1951              $query = $db->query("
1952                  SELECT m.*, u.username, u.usergroup
1953                  FROM ".TABLE_PREFIX."moderators m
1954                  LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=m.id)
1955                  WHERE m.mid='{$mid}'
1956              ");
1957          }
1958          $mod = $db->fetch_array($query);
1959  
1960          $db->delete_query("moderators", "mid='{$mid}'");
1961  
1962          $plugins->run_hooks("admin_forum_management_deletemod_commit");
1963  
1964          $cache->update_moderators();
1965  
1966          $forum = get_forum($fid, 1);
1967  
1968          // Log admin action
1969          if($isgroup)
1970          {
1971              log_admin_action($mid, $mod['title'], $forum['fid'], $forum['name']);
1972          }
1973          else
1974          {
1975              log_admin_action($mid, $mod['username'], $forum['fid'], $forum['name']);
1976          }
1977  
1978          flash_message($lang->success_moderator_deleted, 'success');
1979          admin_redirect("index.php?module=forum-management&fid={$fid}#tab_moderators");
1980      }
1981      else
1982      {
1983          $page->output_confirm_action("index.php?module=forum-management&amp;action=deletemod&amp;fid={$mod['fid']}&amp;uid={$mod['uid']}", $lang->confirm_moderator_deletion);
1984      }
1985  }
1986  
1987  if($mybb->input['action'] == "delete")
1988  {
1989      $query = $db->simple_select("forums", "*", "fid='{$mybb->input['fid']}'");
1990      $forum = $db->fetch_array($query);
1991  
1992      // Does the forum not exist?
1993      if(!$forum)
1994      {
1995          flash_message($lang->error_invalid_forum, 'error');
1996          admin_redirect("index.php?module=forum-management");
1997      }
1998  
1999      // User clicked no
2000      if($mybb->get_input('no'))
2001      {
2002          admin_redirect("index.php?module=forum-management");
2003      }
2004  
2005      $plugins->run_hooks("admin_forum_management_delete");
2006  
2007      if($mybb->request_method == "post")
2008      {
2009          $fid = $mybb->get_input('fid', MyBB::INPUT_INT);
2010          $forum = get_forum($fid, 1);
2011  
2012          $delquery = "";
2013          switch($db->type)
2014          {
2015              case "pgsql":
2016              case "sqlite":
2017                  $query = $db->simple_select("forums", "*", "','|| parentlist|| ',' LIKE '%,$fid,%'");
2018                  break;
2019              default:
2020                  $query = $db->simple_select("forums", "*", "CONCAT(',', parentlist, ',') LIKE '%,$fid,%'");
2021          }
2022          while($forum = $db->fetch_array($query))
2023          {
2024              $fids[$forum['fid']] = $fid;
2025              $delquery .= " OR fid='{$forum['fid']}'";
2026          }
2027  
2028          require_once  MYBB_ROOT.'inc/class_moderation.php';
2029          $moderation = new Moderation();
2030  
2031          // Start pagination. Limit results to 50
2032          $query = $db->simple_select("threads", "tid", "fid='{$fid}' {$delquery}", array("limit" => 50));
2033  
2034          while($tid = $db->fetch_field($query, 'tid'))
2035          {
2036              $moderation->delete_thread($tid);
2037          }
2038  
2039          // Check whether all threads have been deleted
2040          $query = $db->simple_select("threads", "tid", "fid='{$fid}' {$delquery}");
2041  
2042          if($db->num_rows($query) > 0)
2043          {
2044              $page->output_header();
2045  
2046              $form = new Form("index.php?module=forum-management", 'post');
2047  
2048              echo $form->generate_hidden_field("fid", $fid);
2049              echo $form->generate_hidden_field("action", "delete");
2050              output_auto_redirect($form, $lang->confirm_proceed_deletion);
2051  
2052              $form->end();
2053  
2054              $page->output_footer();
2055              exit;
2056          }
2057  
2058          // End pagination
2059  
2060          // Delete the forum
2061          $db->delete_query("forums", "fid='$fid'");
2062  
2063          // Delete subforums
2064          switch($db->type)
2065          {
2066              case "pgsql":
2067              case "sqlite":
2068                  $db->delete_query("forums", "','||parentlist||',' LIKE '%,$fid,%'");
2069                  break;
2070              default:
2071                  $db->delete_query("forums", "CONCAT(',',parentlist,',') LIKE '%,$fid,%'");
2072          }
2073  
2074          $db->delete_query('moderators', "fid='{$fid}' {$delquery}");
2075          $db->delete_query('forumsubscriptions', "fid='{$fid}' {$delquery}");
2076          $db->delete_query('forumpermissions', "fid='{$fid}' {$delquery}");
2077          $db->delete_query('announcements', "fid='{$fid}' {$delquery}");
2078          $db->delete_query('forumsread', "fid='{$fid}' {$delquery}");
2079  
2080          $plugins->run_hooks("admin_forum_management_delete_commit");
2081  
2082          $cache->update_forums();
2083          $cache->update_moderators();
2084          $cache->update_forumpermissions();
2085          $cache->update_forumsdisplay();
2086  
2087          // Log admin action
2088          log_admin_action($forum_info['fid'], $forum_info['name']);
2089  
2090          flash_message($lang->success_forum_deleted, 'success');
2091          admin_redirect("index.php?module=forum-management");
2092      }
2093      else
2094      {
2095          $page->output_confirm_action("index.php?module=forum-management&amp;action=delete&amp;fid={$forum['fid']}", $lang->confirm_forum_deletion);
2096      }
2097  }
2098  
2099  if(!$mybb->input['action'])
2100  {
2101      if(!isset($mybb->input['fid']))
2102      {
2103          $mybb->input['fid'] = 0;
2104      }
2105  
2106      $fid = $mybb->get_input('fid', MyBB::INPUT_INT);
2107      if($fid)
2108      {
2109          $forum = get_forum($fid, 1);
2110      }
2111  
2112      $plugins->run_hooks("admin_forum_management_start");
2113  
2114      if($mybb->request_method == "post")
2115      {
2116          if($mybb->get_input('update') == "permissions")
2117          {
2118              $inherit = array();
2119              foreach($mybb->input as $id => $permission)
2120              {
2121                  // Make sure we're only skipping inputs that don't start with "fields_" and aren't fields_default_ or fields_inherit_
2122                  if(strpos($id, 'fields_') === false || (strpos($id, 'fields_default_') !== false || strpos($id, 'fields_inherit_') !== false))
2123                  {
2124                      continue;
2125                  }
2126  
2127                  list(, $gid) = explode('fields_', $id);
2128  
2129                  if($mybb->input['fields_default_'.$gid] == $permission && $mybb->input['fields_inherit_'.$gid] == 1)
2130                  {
2131                      $inherit[$gid] = 1;
2132                      continue;
2133                  }
2134                  $inherit[$gid] = 0;
2135  
2136                  // If it isn't an array then it came from the javascript form
2137                  if(!is_array($permission))
2138                  {
2139                      $permission = explode(',', $permission);
2140                      $permission = array_flip($permission);
2141                      foreach($permission as $name => $value)
2142                      {
2143                          $permission[$name] = 1;
2144                      }
2145                  }
2146                  foreach(array('canview','canpostthreads','canpostreplys','canpostpolls') as $name)
2147                  {
2148                      if(!empty($permission[$name]))
2149                      {
2150                          $permissions[$name][$gid] = 1;
2151                      }
2152                      else
2153                      {
2154                          $permissions[$name][$gid] = 0;
2155                      }
2156                  }
2157              }
2158  
2159              if(isset($permissions['canview']))
2160              {
2161                  $canview = $permissions['canview'];
2162              }
2163              if(isset($permissions['canpostthreads']))
2164              {
2165                  $canpostthreads = $permissions['canpostthreads'];
2166              }
2167              if(isset($permissions['canpostpolls']))
2168              {
2169                  $canpostpolls = $permissions['canpostpolls'];
2170              }
2171              if(isset($permissions['canpostattachments']))
2172              {
2173                  $canpostattachments = $permissions['canpostattachments'];
2174              }
2175              if(isset($permissions['canpostreplys']))
2176              {
2177                  $canpostreplies = $permissions['canpostreplys'];
2178              }
2179  
2180              save_quick_perms($fid);
2181  
2182              $plugins->run_hooks("admin_forum_management_start_permissions_commit");
2183  
2184              $cache->update_forums();
2185  
2186              // Log admin action
2187              log_admin_action('quickpermissions', $fid, $forum['name']);
2188  
2189              flash_message($lang->success_forum_permissions_updated, 'success');
2190              admin_redirect("index.php?module=forum-management&fid={$fid}#tab_permissions");
2191          }
2192          elseif($mybb->get_input('add') == "moderators")
2193          {
2194              $forum = get_forum($fid, 1);
2195              if(!$forum)
2196              {
2197                  flash_message($lang->error_invalid_forum, 'error');
2198                  admin_redirect("index.php?module=forum-management&fid={$fid}#tab_moderators");
2199              }
2200              if(!empty($mybb->input['usergroup']))
2201              {
2202                  $isgroup = 1;
2203                  $gid = $mybb->get_input('usergroup', MyBB::INPUT_INT);
2204  
2205                  if(!$groupscache[$gid])
2206                   {
2207                       // Didn't select a valid moderator
2208                       flash_message($lang->error_moderator_not_found, 'error');
2209                       admin_redirect("index.php?module=forum-management&fid={$fid}#tab_moderators");
2210                   }
2211  
2212                  $newmod = array(
2213                      "id" => $gid,
2214                      "name" => $groupscache[$gid]['title']
2215                  );
2216              }
2217              else
2218              {
2219                  $options = array(
2220                      'fields' => array('uid AS id', 'username AS name', 'usergroup', 'additionalgroups')
2221                  );
2222                  $newmod = $newmoduser = get_user_by_username($mybb->input['username'], $options);
2223  
2224                  if(empty($newmod['id']))
2225                  {
2226                      flash_message($lang->error_moderator_not_found, 'error');
2227                      admin_redirect("index.php?module=forum-management&fid={$fid}#tab_moderators");
2228                  }
2229  
2230                  $isgroup = 0;
2231              }
2232  
2233              if($newmod['id'])
2234              {
2235                  $query = $db->simple_select("moderators", "id", "id='".$newmod['id']."' AND fid='".$fid."' AND isgroup='{$isgroup}'", array('limit' => 1));
2236  
2237                  if(!$db->num_rows($query))
2238                  {
2239                      $new_mod = array(
2240                          "fid" => $fid,
2241                          "id" => $newmod['id'],
2242                          "isgroup" => $isgroup,
2243                          "caneditposts" => 1,
2244                          "cansoftdeleteposts" => 1,
2245                          "canrestoreposts" => 1,
2246                          "candeleteposts" => 1,
2247                          "cansoftdeletethreads" => 1,
2248                          "canrestorethreads" => 1,
2249                          "candeletethreads" => 1,
2250                          "canviewips" => 1,
2251                          "canviewunapprove" => 1,
2252                          "canviewdeleted" => 1,
2253                          "canopenclosethreads" => 1,
2254                          "canstickunstickthreads" => 1,
2255                          "canapproveunapprovethreads" => 1,
2256                          "canapproveunapproveposts" => 1,
2257                          "canapproveunapproveattachs" => 1,
2258                          "canmanagethreads" => 1,
2259                          "canmanagepolls" => 1,
2260                          "canpostclosedthreads" => 1,
2261                          "canmovetononmodforum" => 1,
2262                          "canusecustomtools" => 1,
2263                          "canmanageannouncements" => 1,
2264                          "canmanagereportedposts" => 1,
2265                          "canviewmodlog" => 1
2266                      );
2267  
2268                      $mid = $db->insert_query("moderators", $new_mod);
2269  
2270                      if(!$isgroup)
2271                      {
2272                          $newmodgroups = $newmoduser['usergroup'];
2273                          if(!empty($newmoduser['additionalgroups']))
2274                          {
2275                              $newmodgroups .= ','.$newmoduser['additionalgroups'];
2276                          }
2277                          $groupperms = usergroup_permissions($newmodgroups);
2278  
2279                          // Check if new moderator already belongs to a moderators group
2280                          if($groupperms['canmodcp'] != 1)
2281                          {
2282                              if($newmoduser['usergroup'] == 2 || $newmoduser['usergroup'] == 5)
2283                              {
2284                                  // Primary group is default registered or awaiting activation group so change primary group to Moderators
2285                                  $db->update_query("users", array('usergroup' => 6), "uid='{$newmoduser['id']}'");
2286                              }
2287                              else
2288                              {
2289                                  // Primary group is another usergroup without canmodcp so add Moderators to additional groups
2290                                  join_usergroup($newmoduser['id'], 6);
2291                              }
2292                          }
2293                      }
2294  
2295                      $plugins->run_hooks("admin_forum_management_start_moderators_commit");
2296  
2297                      $cache->update_moderators();
2298  
2299                      // Log admin action
2300                      log_admin_action('addmod', $mid, $newmod['name'], $fid, $forum['name']);
2301  
2302                      flash_message($lang->success_moderator_added, 'success');
2303                      admin_redirect("index.php?module=forum-management&action=editmod&mid={$mid}");
2304                  }
2305                  else
2306                  {
2307                      flash_message($lang->error_moderator_already_added, 'error');
2308                      admin_redirect("index.php?module=forum-management&fid={$fid}#tab_moderators");
2309                  }
2310              }
2311              else
2312              {
2313                  flash_message($lang->error_moderator_not_found, 'error');
2314                  admin_redirect("index.php?module=forum-management&fid={$fid}#tab_moderators");
2315              }
2316          }
2317          else
2318          {
2319              if(!empty($mybb->input['disporder']) && is_array($mybb->input['disporder']))
2320              {
2321                  foreach($mybb->input['disporder'] as $update_fid => $order)
2322                  {
2323                      if(is_numeric($order) && (int)$order >= 0)
2324                      {
2325                          $db->update_query("forums", array('disporder' => (int)$order), "fid='".(int)$update_fid."'");
2326                      }
2327                  }
2328  
2329                  $plugins->run_hooks("admin_forum_management_start_disporder_commit");
2330  
2331                  $cache->update_forums();
2332  
2333                  // Log admin action
2334                  if(!empty($forum))
2335                  {
2336                      log_admin_action('orders', $forum['fid'], $forum['name']);
2337                  }
2338                  else
2339                  {
2340                      log_admin_action('orders', 0);
2341                  }
2342  
2343                  flash_message($lang->success_forum_disporder_updated, 'success');
2344                  admin_redirect("index.php?module=forum-management&fid=".$mybb->input['fid']);
2345              }
2346          }
2347      }
2348  
2349      $page->extra_header .=  "<script src=\"jscripts/quick_perm_editor.js\" type=\"text/javascript\"></script>\n";
2350  
2351      if($fid)
2352      {
2353          $page->add_breadcrumb_item($lang->view_forum, "index.php?module=forum-management");
2354      }
2355  
2356      $page->output_header($lang->forum_management);
2357  
2358      if($fid)
2359      {
2360          $page->output_nav_tabs($sub_tabs, 'view_forum');
2361      }
2362      else
2363      {
2364          $page->output_nav_tabs($sub_tabs, 'forum_management');
2365      }
2366  
2367      $form = new Form("index.php?module=forum-management", "post", "management");
2368      echo $form->generate_hidden_field("fid", $mybb->input['fid']);
2369  
2370      if($fid)
2371      {
2372          $tabs = array(
2373              'subforums' => $lang->subforums,
2374              'permissions' => $lang->forum_permissions,
2375              'moderators' => $lang->moderators,
2376          );
2377          $tabs = $plugins->run_hooks("admin_forum_management_start_graph_tabs", $tabs);
2378          $page->output_tab_control($tabs);
2379  
2380          echo "<div id=\"tab_subforums\">\n";
2381          if(!isset($forum_cache) || !is_array($forum_cache))
2382          {
2383              cache_forums();
2384          }
2385          $form_container = new FormContainer($lang->sprintf($lang->in_forums, $forum_cache[$fid]['name']));
2386      }
2387      else
2388      {
2389          $form_container = new FormContainer($lang->manage_forums);
2390      }
2391      $form_container->output_row_header($lang->forum);
2392      $form_container->output_row_header($lang->order, array("class" => "align_center", 'width' => '6%'));
2393      $form_container->output_row_header($lang->controls, array("class" => "align_center", 'style' => 'width: 200px'));
2394  
2395      build_admincp_forums_list($form_container, $form, $fid);
2396  
2397      $submit_options = array();
2398  
2399      $no_results = false;
2400      if($form_container->num_rows() == 0)
2401      {
2402          $form_container->output_cell($lang->no_forums, array('colspan' => 3));
2403          $form_container->construct_row();
2404          $no_results = true;
2405      }
2406  
2407      $form_container->end();
2408  
2409      if(!$no_results)
2410      {
2411          $buttons[] = $form->generate_submit_button($lang->update_forum_orders, $submit_options);
2412          $buttons[] = $form->generate_reset_button($lang->reset);
2413          $form->output_submit_wrapper($buttons);
2414      }
2415  
2416      if(!$fid)
2417      {
2418          $form->end();
2419      }
2420  
2421      if($fid)
2422      {
2423          echo "</div>\n";
2424          $form->end();
2425  
2426          $query = $db->simple_select("usergroups", "*", "", array("order" => "name"));
2427          while($usergroup = $db->fetch_array($query))
2428          {
2429              $usergroups[$usergroup['gid']] = $usergroup;
2430          }
2431  
2432          $query = $db->simple_select("forumpermissions", "*", "fid='{$fid}'");
2433          while($existing = $db->fetch_array($query))
2434          {
2435              $existing_permissions[$existing['gid']] = $existing;
2436          }
2437  
2438          $cached_forum_perms = $cache->read("forumpermissions");
2439          $field_list = array(
2440              'canview' => $lang->permissions_canview,
2441              'canpostthreads' => $lang->permissions_canpostthreads,
2442              'canpostreplys' => $lang->permissions_canpostreplys,
2443              'canpostpolls' => $lang->permissions_canpostpolls,
2444          );
2445  
2446          $field_list2 = array(
2447              'canview' => $lang->perm_drag_canview,
2448              'canpostthreads' => $lang->perm_drag_canpostthreads,
2449              'canpostreplys' => $lang->perm_drag_canpostreplys,
2450              'canpostpolls' => $lang->perm_drag_canpostpolls,
2451          );
2452  
2453          $ids = array();
2454  
2455          $form = new Form("index.php?module=forum-management", "post", "management");
2456          echo $form->generate_hidden_field("fid", $mybb->input['fid']);
2457          echo $form->generate_hidden_field("update", "permissions");
2458  
2459          echo "<div id=\"tab_permissions\">\n";
2460  
2461          $form_container = new FormContainer($lang->sprintf($lang->forum_permissions_in, $forum_cache[$fid]['name']));
2462          $form_container->output_row_header($lang->permissions_group, array("class" => "align_center", 'style' => 'width: 30%'));
2463          $form_container->output_row_header($lang->overview_allowed_actions, array("class" => "align_center"));
2464          $form_container->output_row_header($lang->overview_disallowed_actions, array("class" => "align_center"));
2465          $form_container->output_row_header($lang->controls, array("class" => "align_center", 'style' => 'width: 120px', 'colspan' => 2));
2466          foreach($usergroups as $usergroup)
2467          {
2468              $perms = array();
2469              if(isset($mybb->input['default_permissions']))
2470              {
2471                  if($mybb->input['default_permissions'][$usergroup['gid']])
2472                  {
2473                      if(isset($existing_permissions) && is_array($existing_permissions) && $existing_permissions[$usergroup['gid']])
2474                      {
2475                          $perms = $existing_permissions[$usergroup['gid']];
2476                          $default_checked = false;
2477                      }
2478                      elseif(is_array($cached_forum_perms) && isset($cached_forum_perms[$forum['fid']]) && $cached_forum_perms[$forum['fid']][$usergroup['gid']])
2479                      {
2480                          $perms = $cached_forum_perms[$forum['fid']][$usergroup['gid']];
2481                          $default_checked = true;
2482                      }
2483                      else if(is_array($cached_forum_perms) && isset($cached_forum_perms[$forum['pid']]) && $cached_forum_perms[$forum['pid']][$usergroup['gid']])
2484                      {
2485                          $perms = $cached_forum_perms[$forum['pid']][$usergroup['gid']];
2486                          $default_checked = true;
2487                      }
2488                  }
2489  
2490                  if(!$perms)
2491                  {
2492                      $perms = $usergroup;
2493                      $default_checked = true;
2494                  }
2495              }
2496              else
2497              {
2498                  if(isset($existing_permissions) && is_array($existing_permissions) && !empty($existing_permissions[$usergroup['gid']]))
2499                  {
2500                      $perms = $existing_permissions[$usergroup['gid']];
2501                      $default_checked = false;
2502                  }
2503                  elseif(isset($forum['fid']) && is_array($cached_forum_perms) && isset($cached_forum_perms[$forum['fid']][$usergroup['gid']]) && $cached_forum_perms[$forum['fid']][$usergroup['gid']])
2504                  {
2505                      $perms = $cached_forum_perms[$forum['fid']][$usergroup['gid']];
2506                      $default_checked = true;
2507                  }
2508                  else if(isset($forum['pid']) && is_array($cached_forum_perms) && isset($cached_forum_perms[$forum['pid']][$usergroup['gid']]) && $cached_forum_perms[$forum['pid']][$usergroup['gid']])
2509                  {
2510                      $perms = $cached_forum_perms[$forum['pid']][$usergroup['gid']];
2511                      $default_checked = true;
2512                  }
2513  
2514                  if(!$perms)
2515                  {
2516                      $perms = $usergroup;
2517                      $default_checked = true;
2518                  }
2519              }
2520              foreach($field_list as $forum_permission => $forum_perm_title)
2521              {
2522                  if(isset($mybb->input['permissions']))
2523                  {
2524                      if($mybb->input['permissions'][$usergroup['gid']][$forum_permission])
2525                      {
2526                          $perms_checked[$forum_permission] = 1;
2527                      }
2528                      else
2529                      {
2530                          $perms_checked[$forum_permission] = 0;
2531                      }
2532                  }
2533                  else
2534                  {
2535                      if($perms[$forum_permission] == 1)
2536                      {
2537                          $perms_checked[$forum_permission] = 1;
2538                      }
2539                      else
2540                      {
2541                          $perms_checked[$forum_permission] = 0;
2542                      }
2543                  }
2544              }
2545              $usergroup['title'] = htmlspecialchars_uni($usergroup['title']);
2546  
2547              if($default_checked == 1)
2548              {
2549                  $inherited_text = $lang->inherited_permission;
2550              }
2551              else
2552              {
2553                  $inherited_text = $lang->custom_permission;
2554              }
2555  
2556              $form_container->output_cell("<strong>{$usergroup['title']}</strong> <small style=\"vertical-align: middle;\">({$inherited_text})</small>");
2557  
2558              $field_select = "<div class=\"quick_perm_fields\">\n";
2559              $field_select .= "<div class=\"enabled\"><ul id=\"fields_enabled_{$usergroup['gid']}\">\n";
2560              foreach($perms_checked as $perm => $value)
2561              {
2562                  if($value == 1)
2563                  {
2564                      $field_select .= "<li id=\"field-{$perm}\">{$field_list2[$perm]}</li>";
2565                  }
2566              }
2567              $field_select .= "</ul></div>\n";
2568              $field_select .= "<div class=\"disabled\"><ul id=\"fields_disabled_{$usergroup['gid']}\">\n";
2569              foreach($perms_checked as $perm => $value)
2570              {
2571                  if($value == 0)
2572                  {
2573                      $field_select .= "<li id=\"field-{$perm}\">{$field_list2[$perm]}</li>";
2574                  }
2575              }
2576              $field_select .= "</ul></div></div>\n";
2577              $field_select .= $form->generate_hidden_field("fields_".$usergroup['gid'], @implode(",", @array_keys($perms_checked, '1')), array('id' => 'fields_'.$usergroup['gid']));
2578              $field_select .= $form->generate_hidden_field("fields_inherit_".$usergroup['gid'], (int)$default_checked, array('id' => 'fields_inherit_'.$usergroup['gid']));
2579              $field_select .= $form->generate_hidden_field("fields_default_".$usergroup['gid'], @implode(",", @array_keys($perms_checked, '1')), array('id' => 'fields_default_'.$usergroup['gid']));
2580              $field_select = str_replace("'", "\\'", $field_select);
2581              $field_select = str_replace("\n", "", $field_select);
2582  
2583              $field_select = "<script type=\"text/javascript\">
2584  //<![CDATA[
2585  document.write('".str_replace("/", "\/", $field_select)."');
2586  //]]>
2587  </script>\n";
2588  
2589              $field_selected = array();
2590              foreach($field_list as $forum_permission => $permission_title)
2591              {
2592                  $field_options[$forum_permission] = $permission_title;
2593                  if($perms_checked[$forum_permission])
2594                  {
2595                      $field_selected[] = $forum_permission;
2596                  }
2597              }
2598  
2599              $field_select .= "<noscript>".$form->generate_select_box('fields_'.$usergroup['gid'].'[]', $field_options, $field_selected, array('id' => 'fields_'.$usergroup['gid'].'[]', 'multiple' => true))."</noscript>\n";
2600              $form_container->output_cell($field_select, array('colspan' => 2));
2601  
2602              if(!$default_checked)
2603              {
2604                  $form_container->output_cell("<a href=\"index.php?module=forum-management&amp;action=permissions&amp;pid={$perms['pid']}\" onclick=\"MyBB.popupWindow('index.php?module=forum-management&action=permissions&pid={$perms['pid']}&ajax=1', null, true); return false;\">{$lang->edit_permissions}</a>", array("class" => "align_center"));
2605                  $form_container->output_cell("<a href=\"index.php?module=forum-management&amp;action=clear_permission&amp;pid={$perms['pid']}&amp;my_post_key={$mybb->post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->confirm_clear_custom_permission}')\">{$lang->clear_custom_perms}</a>", array("class" => "align_center"));
2606              }
2607              else
2608              {
2609                  $form_container->output_cell("<a href=\"index.php?module=forum-management&amp;action=permissions&amp;gid={$usergroup['gid']}&amp;fid={$fid}\"  onclick=\"MyBB.popupWindow('index.php?module=forum-management&action=permissions&gid={$usergroup['gid']}&fid={$fid}&ajax=1', null, true); return false;\">{$lang->set_custom_perms}</a>", array("class" => "align_center", "colspan" => 2));
2610              }
2611              $form_container->construct_row(array('id' => 'row_'.$usergroup['gid']));
2612  
2613              $ids[] = $usergroup['gid'];
2614          }
2615          $form_container->end();
2616  
2617          $buttons = array();
2618          $buttons[] = $form->generate_submit_button($lang->update_forum_permissions);
2619          $buttons[] = $form->generate_reset_button($lang->reset);
2620  
2621          $form->output_submit_wrapper($buttons);
2622  
2623          // Write in our JS based field selector
2624          echo "<script type=\"text/javascript\">\n<!--\n";
2625          foreach($ids as $id)
2626          {
2627              echo "$(function() { QuickPermEditor.init(".$id.") });\n";
2628          }
2629          echo "// -->\n</script>\n";
2630  
2631          echo "</div>\n";
2632          $form->end();
2633          echo "<div id=\"tab_moderators\">\n";
2634          $form_container = new FormContainer($lang->sprintf($lang->moderators_assigned_to, $forum_cache[$fid]['name']));
2635          $form_container->output_row_header($lang->name, array('width' => '75%'));
2636          $form_container->output_row_header($lang->controls, array("class" => "align_center", 'style' => 'width: 200px', 'colspan' => 2));
2637          $query = $db->query("
2638              SELECT m.mid, m.id, m.isgroup, u.username, g.title
2639              FROM ".TABLE_PREFIX."moderators m
2640              LEFT JOIN ".TABLE_PREFIX."users u ON (m.isgroup='0' AND m.id=u.uid)
2641              LEFT JOIN ".TABLE_PREFIX."usergroups g ON (m.isgroup='1' AND m.id=g.gid)
2642              WHERE fid='{$fid}'
2643              ORDER BY m.isgroup DESC, u.username, g.title
2644          ");
2645          while($moderator = $db->fetch_array($query))
2646          {
2647              if($moderator['isgroup'])
2648              {
2649                  $moderator['img'] = "<img src=\"styles/{$page->style}/images/icons/group.png\" alt=\"{$lang->permissions_group}\" title=\"{$lang->permissions_group}\" />";
2650                  $form_container->output_cell("{$moderator['img']} <a href=\"index.php?module=user-groups&amp;action=edit&amp;gid={$moderator['id']}\">".htmlspecialchars_uni($moderator['title'])." ({$lang->usergroup} {$moderator['id']})</a>");
2651                  $form_container->output_cell("<a href=\"index.php?module=forum-management&amp;action=editmod&amp;mid={$moderator['mid']}\">{$lang->edit}</a>", array("class" => "align_center"));
2652                  $form_container->output_cell("<a href=\"index.php?module=forum-management&amp;action=deletemod&amp;id={$moderator['id']}&amp;isgroup=1&amp;fid={$fid}&amp;my_post_key={$mybb->post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->confirm_moderator_deletion}')\">{$lang->delete}</a>", array("class" => "align_center"));
2653              }
2654              else
2655              {
2656                  $moderator['img'] = "<img src=\"styles/{$page->style}/images/icons/user.png\" alt=\"{$lang->permissions_user}\" title=\"{$lang->permissions_user}\" />";
2657                  $form_container->output_cell("{$moderator['img']} <a href=\"index.php?module=user-users&amp;action=edit&amp;uid={$moderator['id']}\">".htmlspecialchars_uni($moderator['username'])."</a>");
2658                  $form_container->output_cell("<a href=\"index.php?module=forum-management&amp;action=editmod&amp;mid={$moderator['mid']}\">{$lang->edit}</a>", array("class" => "align_center"));
2659                  $form_container->output_cell("<a href=\"index.php?module=forum-management&amp;action=deletemod&amp;id={$moderator['id']}&amp;isgroup=0&amp;fid={$fid}&amp;my_post_key={$mybb->post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->confirm_moderator_deletion}')\">{$lang->delete}</a>", array("class" => "align_center"));
2660              }
2661              $form_container->construct_row();
2662          }
2663  
2664          if($form_container->num_rows() == 0)
2665          {
2666              $form_container->output_cell($lang->no_moderators, array('colspan' => 3));
2667              $form_container->construct_row();
2668          }
2669          $form_container->end();
2670  
2671          // Users
2672          $buttons = array();
2673          $form = new Form("index.php?module=forum-management", "post", "management");
2674          echo $form->generate_hidden_field("fid", $mybb->input['fid']);
2675          echo $form->generate_hidden_field("add", "moderators");
2676  
2677          // Usergroup Moderator
2678          if(!is_array($usergroups))
2679          {
2680              $usergroups = $groupscache;
2681          }
2682  
2683          foreach($usergroups as $group)
2684          {
2685              $modgroups[$group['gid']] = $lang->usergroup." ".$group['gid'].": ".htmlspecialchars_uni($group['title']);
2686          }
2687  
2688          if(!isset($mybb->input['usergroup']))
2689          {
2690              $mybb->input['usergroup'] = '';
2691          }
2692  
2693          if(!isset($mybb->input['username']))
2694          {
2695              $mybb->input['username'] = '';
2696          }
2697  
2698          $form_container = new FormContainer($lang->add_usergroup_as_moderator);
2699          $form_container->output_row($lang->usergroup." <em>*</em>", $lang->moderator_usergroup_desc, $form->generate_select_box('usergroup', $modgroups, $mybb->input['usergroup'], array('id' => 'usergroup')), 'usergroup');
2700          $form_container->end();
2701  
2702          $buttons[] = $form->generate_submit_button($lang->add_usergroup_moderator);
2703          $form->output_submit_wrapper($buttons);
2704          $form->end();
2705          echo "<br />";
2706  
2707          $form = new Form("index.php?module=forum-management", "post", "management");
2708          echo $form->generate_hidden_field("fid", $mybb->input['fid']);
2709          echo $form->generate_hidden_field("add", "moderators");
2710          $form_container = new FormContainer($lang->add_user_as_moderator);
2711          $form_container->output_row($lang->username." <em>*</em>", $lang->moderator_username_desc, $form->generate_text_box('username', htmlspecialchars_uni($mybb->get_input('username')), array('id' => 'username')), 'username');
2712          $form_container->end();
2713  
2714          // Autocompletion for usernames
2715          echo '
2716          <link rel="stylesheet" href="../jscripts/select2/select2.css">
2717          <script type="text/javascript" src="../jscripts/select2/select2.min.js?ver=1804"></script>
2718          <script type="text/javascript">
2719          <!--
2720          $("#username").select2({
2721              placeholder: "'.$lang->search_for_a_user.'",
2722              minimumInputLength: 2,
2723              multiple: false,
2724              ajax: { // instead of writing the function to execute the request we use Select2\'s convenient helper
2725                  url: "../xmlhttp.php?action=get_users",
2726                  dataType: \'json\',
2727                  data: function (term, page) {
2728                      return {
2729                          query: term, // search term
2730                      };
2731                  },
2732                  results: function (data, page) { // parse the results into the format expected by Select2.
2733                      // since we are using custom formatting functions we do not need to alter remote JSON data
2734                      return {results: data};
2735                  }
2736              },
2737              initSelection: function(element, callback) {
2738                  var query = $(element).val();
2739                  if (query !== "") {
2740                      $.ajax("../xmlhttp.php?action=get_users&getone=1", {
2741                          data: {
2742                              query: query
2743                          },
2744                          dataType: "json"
2745                      }).done(function(data) { callback(data); });
2746                  }
2747              },
2748          });
2749  
2750          $(\'[for=username]\').on(\'click\', function(){
2751              $("#username").select2(\'open\');
2752              return false;
2753          });
2754          // -->
2755          </script>';
2756  
2757          $buttons = array($form->generate_submit_button($lang->add_user_moderator));
2758          $form->output_submit_wrapper($buttons);
2759          $form->end();
2760  
2761          echo "</div>\n";
2762  
2763          $plugins->run_hooks("admin_forum_management_start_graph");
2764      }
2765  
2766      $page->output_footer();
2767  }
2768  
2769  /**
2770   * @param DefaultFormContainer $form_container
2771   * @param DefaultForm $form
2772   * @param int $pid
2773   * @param int $depth
2774   */
2775  function build_admincp_forums_list(&$form_container, &$form, $pid=0, $depth=1)
2776  {
2777      global $mybb, $lang, $db, $sub_forums;
2778      static $forums_by_parent;
2779  
2780      if(!is_array($forums_by_parent))
2781      {
2782          $forum_cache = cache_forums();
2783  
2784          foreach($forum_cache as $forum)
2785          {
2786              $forums_by_parent[$forum['pid']][$forum['disporder']][$forum['fid']] = $forum;
2787          }
2788      }
2789  
2790      if(!isset($forums_by_parent[$pid]) || !is_array($forums_by_parent[$pid]))
2791      {
2792          return;
2793      }
2794  
2795      $donecount = 0;
2796      $comma = '';
2797      foreach($forums_by_parent[$pid] as $children)
2798      {
2799          foreach($children as $forum)
2800          {
2801              $forum['name'] = preg_replace("#&(?!\#[0-9]+;)#si", "&amp;", $forum['name']); // Fix & but allow unicode
2802  
2803              if($forum['active'] == 0)
2804              {
2805                  $forum['name'] = "<em>".$forum['name']."</em>";
2806              }
2807  
2808              if($forum['type'] == "c" && ($depth == 1 || $depth == 2))
2809              {
2810                  $sub_forums = '';
2811                  if(isset($forums_by_parent[$forum['fid']]) && $depth == 2)
2812                  {
2813                      build_admincp_forums_list($form_container, $form, $forum['fid'], $depth+1);
2814                  }
2815                  if($sub_forums)
2816                  {
2817                      $sub_forums = "<br /><small>{$lang->sub_forums}: {$sub_forums}</small>";
2818                  }
2819  
2820                  $form_container->output_cell("<div style=\"padding-left: ".(40*($depth-1))."px;\"><a href=\"index.php?module=forum-management&amp;fid={$forum['fid']}\"><strong>{$forum['name']}</strong></a>{$sub_forums}</div>");
2821  
2822                  $form_container->output_cell($form->generate_numeric_field("disporder[{$forum['fid']}]", "{$forum['disporder']}", array('min' => 0, 'class' => 'align_center', 'style' => 'width:80%; font-weight:bold')), array("class" => "align_center"));
2823  
2824                  $popup = new PopupMenu("forum_{$forum['fid']}", $lang->options);
2825                  $popup->add_item($lang->edit_forum, "index.php?module=forum-management&amp;action=edit&amp;fid={$forum['fid']}");
2826                  $popup->add_item($lang->subforums, "index.php?module=forum-management&amp;fid={$forum['fid']}");
2827                  $popup->add_item($lang->moderators, "index.php?module=forum-management&amp;fid={$forum['fid']}#tab_moderators");
2828                  $popup->add_item($lang->permissions, "index.php?module=forum-management&amp;fid={$forum['fid']}#tab_permissions");
2829                  $popup->add_item($lang->forum_thread_prefixes, "index.php?module=config-thread_prefixes&amp;fid={$forum['fid']}");
2830                  $popup->add_item($lang->add_child_forum, "index.php?module=forum-management&amp;action=add&amp;pid={$forum['fid']}");
2831                  $popup->add_item($lang->copy_forum, "index.php?module=forum-management&amp;action=copy&amp;fid={$forum['fid']}");
2832                  $popup->add_item($lang->delete_forum, "index.php?module=forum-management&amp;action=delete&amp;fid={$forum['fid']}&amp;my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_forum_deletion}')");
2833  
2834                  $form_container->output_cell($popup->fetch(), array("class" => "align_center"));
2835  
2836                  $form_container->construct_row();
2837  
2838                  // Does this category have any sub forums?
2839                  if(!empty($forums_by_parent[$forum['fid']]))
2840                  {
2841                      build_admincp_forums_list($form_container, $form, $forum['fid'], $depth+1);
2842                  }
2843              }
2844              elseif($forum['type'] == "f" && ($depth == 1 || $depth == 2))
2845              {
2846                  if($forum['description'])
2847                  {
2848                      $forum['description'] = preg_replace("#&(?!\#[0-9]+;)#si", "&amp;", $forum['description']);
2849                      $forum['description'] = "<br /><small>".$forum['description']."</small>";
2850                  }
2851  
2852                  $sub_forums = '';
2853                  if(isset($forums_by_parent[$forum['fid']]) && $depth == 2)
2854                  {
2855                      build_admincp_forums_list($form_container, $form, $forum['fid'], $depth+1);
2856                  }
2857                  if($sub_forums)
2858                  {
2859                      $sub_forums = "<br /><small>{$lang->sub_forums}: {$sub_forums}</small>";
2860                  }
2861  
2862                  $form_container->output_cell("<div style=\"padding-left: ".(40*($depth-1))."px;\"><a href=\"index.php?module=forum-management&amp;fid={$forum['fid']}\">{$forum['name']}</a>{$forum['description']}{$sub_forums}</div>");
2863  
2864                  $form_container->output_cell($form->generate_numeric_field("disporder[{$forum['fid']}]", "{$forum['disporder']}", array('min' => 0, 'class' => 'align_center', 'style' => 'width:80%')), array("class" => "align_center"));
2865                  $popup = new PopupMenu("forum_{$forum['fid']}", $lang->options);
2866                  $popup->add_item($lang->edit_forum, "index.php?module=forum-management&amp;action=edit&amp;fid={$forum['fid']}");
2867                  $popup->add_item($lang->subforums, "index.php?module=forum-management&amp;fid={$forum['fid']}");
2868                  $popup->add_item($lang->moderators, "index.php?module=forum-management&amp;fid={$forum['fid']}#tab_moderators");
2869                  $popup->add_item($lang->permissions, "index.php?module=forum-management&amp;fid={$forum['fid']}#tab_permissions");
2870                  $popup->add_item($lang->forum_thread_prefixes, "index.php?module=config-thread_prefixes&amp;fid={$forum['fid']}");
2871                  $popup->add_item($lang->add_child_forum, "index.php?module=forum-management&amp;action=add&amp;pid={$forum['fid']}");
2872                  $popup->add_item($lang->copy_forum, "index.php?module=forum-management&amp;action=copy&amp;fid={$forum['fid']}");
2873                  $popup->add_item($lang->delete_forum, "index.php?module=forum-management&amp;action=delete&amp;fid={$forum['fid']}&amp;my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_forum_deletion}')");
2874  
2875                  $form_container->output_cell($popup->fetch(), array("class" => "align_center"));
2876  
2877                  $form_container->construct_row();
2878  
2879                  if(isset($forums_by_parent[$forum['fid']]) && $depth == 1)
2880                  {
2881                      build_admincp_forums_list($form_container, $form, $forum['fid'], $depth+1);
2882                  }
2883              }
2884              else if($depth == 3)
2885              {
2886                  if($donecount < $mybb->settings['subforumsindex'])
2887                  {
2888                      $sub_forums .= "{$comma} <a href=\"index.php?module=forum-management&amp;fid={$forum['fid']}\">{$forum['name']}</a>";
2889                      $comma = $lang->comma;
2890                  }
2891  
2892                  // Have we reached our max visible subforums? put a nice message and break out of the loop
2893                  ++$donecount;
2894                  if($donecount == $mybb->settings['subforumsindex'])
2895                  {
2896                      if(subforums_count($forums_by_parent[$pid]) > $donecount)
2897                      {
2898                          $sub_forums .= $comma.$lang->sprintf($lang->more_subforums, (subforums_count($forums_by_parent[$pid]) - $donecount));
2899                          return;
2900                      }
2901                  }
2902              }
2903          }
2904      }
2905  }
2906  
2907  /**
2908   * @param int $gid
2909   * @param int $fid
2910   *
2911   * @return string
2912   */
2913  function retrieve_single_permissions_row($gid, $fid)
2914  {
2915      global $mybb, $lang, $cache, $db;
2916  
2917      $query = $db->simple_select("usergroups", "*", "gid='{$gid}'");
2918      $usergroup = $db->fetch_array($query);
2919  
2920      $query = $db->simple_select("forums", "*", "fid='{$fid}'");
2921      $forum_data = $db->fetch_array($query);
2922  
2923      $query = $db->simple_select("forumpermissions", "*", "fid='{$fid}'");
2924      while($existing = $db->fetch_array($query))
2925      {
2926          $existing_permissions[$existing['gid']] = $existing;
2927      }
2928  
2929      $cached_forum_perms = $cache->read("forumpermissions");
2930      $field_list = array(
2931          'canview' => $lang->permissions_canview,
2932          'canpostthreads' => $lang->permissions_canpostthreads,
2933          'canpostreplys' => $lang->permissions_canpostreplys,
2934          'canpostpolls' => $lang->permissions_canpostpolls,
2935      );
2936  
2937      $field_list2 = array(
2938          'canview' => $lang->perm_drag_canview,
2939          'canpostthreads' => $lang->perm_drag_canpostthreads,
2940          'canpostreplys' => $lang->perm_drag_canpostreplys,
2941          'canpostpolls' => $lang->perm_drag_canpostpolls,
2942      );
2943  
2944      $form = new Form('', '', "", 0, "", true);
2945      $form_container = new FormContainer();
2946  
2947      $perms = array();
2948  
2949      if(is_array($existing_permissions) && $existing_permissions[$usergroup['gid']])
2950      {
2951          $perms = $existing_permissions[$usergroup['gid']];
2952          $default_checked = false;
2953      }
2954      elseif(is_array($cached_forum_perms) && $cached_forum_perms[$forum_data['fid']][$usergroup['gid']])
2955      {
2956          $perms = $cached_forum_perms[$forum_data['fid']][$usergroup['gid']];
2957          $default_checked = true;
2958      }
2959      else if(is_array($cached_forum_perms) && $cached_forum_perms[$forum_data['pid']][$usergroup['gid']])
2960      {
2961          $perms = $cached_forum_perms[$forum_data['pid']][$usergroup['gid']];
2962          $default_checked = true;
2963      }
2964  
2965      if(!$perms)
2966      {
2967          $perms = $usergroup;
2968          $default_checked = true;
2969      }
2970  
2971      foreach($field_list as $forum_permission => $forum_perm_title)
2972      {
2973          if($perms[$forum_permission] == 1)
2974          {
2975              $perms_checked[$forum_permission] = 1;
2976          }
2977          else
2978          {
2979              $perms_checked[$forum_permission] = 0;
2980          }
2981      }
2982  
2983      $usergroup['title'] = htmlspecialchars_uni($usergroup['title']);
2984  
2985      if($default_checked == 1)
2986      {
2987          $inherited_text = $lang->inherited_permission;
2988      }
2989      else
2990      {
2991          $inherited_text = $lang->custom_permission;
2992      }
2993  
2994      $form_container->output_cell("<strong>{$usergroup['title']}</strong> <small style=\"vertical-align: middle;\">({$inherited_text})</small>");
2995  
2996      $field_select = "<div class=\"quick_perm_fields\">\n";
2997      $field_select .= "<div class=\"enabled\"><ul id=\"fields_enabled_{$usergroup['gid']}\">\n";
2998      foreach($perms_checked as $perm => $value)
2999      {
3000          if($value == 1)
3001          {
3002              $field_select .= "<li id=\"field-{$perm}\">{$field_list2[$perm]}</li>";
3003          }
3004      }
3005      $field_select .= "</ul></div>\n";
3006      $field_select .= "<div class=\"disabled\"><ul id=\"fields_disabled_{$usergroup['gid']}\">\n";
3007      foreach($perms_checked as $perm => $value)
3008      {
3009          if($value == 0)
3010          {
3011              $field_select .= "<li id=\"field-{$perm}\">{$field_list2[$perm]}</li>";
3012          }
3013      }
3014      $field_select .= "</ul></div></div>\n";
3015      $field_select .= $form->generate_hidden_field("fields_".$usergroup['gid'], @implode(",", @array_keys($perms_checked, 1)), array('id' => 'fields_'.$usergroup['gid']));
3016      $field_select = str_replace("\n", "", $field_select);
3017  
3018      foreach($field_list as $forum_permission => $permission_title)
3019      {
3020          $field_options[$forum_permission] = $permission_title;
3021      }
3022      $form_container->output_cell($field_select, array('colspan' => 2));
3023  
3024      if(!$default_checked)
3025      {
3026          $form_container->output_cell("<a href=\"index.php?module=forum-management&amp;action=permissions&amp;pid={$perms['pid']}\" onclick=\"MyBB.popupWindow('index.php?module=forum-management&action=permissions&pid={$perms['pid']}&ajax=1', null, true); return false;\">{$lang->edit_permissions}</a>", array("class" => "align_center"));
3027          $form_container->output_cell("<a href=\"index.php?module=forum-management&amp;action=clear_permission&amp;pid={$perms['pid']}&amp;my_post_key={$mybb->post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->confirm_clear_custom_permission}')\">{$lang->clear_custom_perms}</a>", array("class" => "align_center"));
3028      }
3029      else
3030      {
3031          $form_container->output_cell("<a href=\"index.php?module=forum-management&amp;action=permissions&amp;gid={$usergroup['gid']}&amp;fid={$fid}\"  onclick=\"MyBB.popupWindow('index.php?module=forum-management&action=permissions&gid={$usergroup['gid']}&fid={$fid}&ajax=1', null, true); return false;\">{$lang->set_custom_perms}</a>", array("class" => "align_center", "colspan" => 2));
3032      }
3033      $form_container->construct_row();
3034      return $form_container->output_row_cells(0, true);
3035  }


2005 - 2021 © MyBB.de | Alle Rechte vorbehalten! | Sponsor: netcup Cross-referenced by PHPXref