[ Index ] |
PHP Cross Reference of MyBB 1.8.39 |
[Summary view] [Print] [Text view]
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&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&action=add&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&action=edit&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&action=copy&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&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&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&action=editmod&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&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&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&action=clear_permission&pid={$pid}&gid={$gid}&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&action=permissions&fid=".$mybb->input['fid']."&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&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&action=permissions&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&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&action=permissions", "post"); 645 } 646 else 647 { 648 $form = new Form("index.php?module=forum-management&action=permissions&ajax=1&pid=".$mybb->get_input('pid', MyBB::INPUT_INT)."&gid=".$mybb->get_input('gid', MyBB::INPUT_INT)."&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&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&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&action=permissions&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&action=clear_permission&pid={$perms['pid']}&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&action=permissions&gid={$usergroup['gid']}&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&action=deletemod&fid={$mod['fid']}&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&action=delete&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&action=permissions&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&action=clear_permission&pid={$perms['pid']}&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&action=permissions&gid={$usergroup['gid']}&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&action=edit&gid={$moderator['id']}\">".htmlspecialchars_uni($moderator['title'])." ({$lang->usergroup} {$moderator['id']})</a>"); 2651 $form_container->output_cell("<a href=\"index.php?module=forum-management&action=editmod&mid={$moderator['mid']}\">{$lang->edit}</a>", array("class" => "align_center")); 2652 $form_container->output_cell("<a href=\"index.php?module=forum-management&action=deletemod&id={$moderator['id']}&isgroup=1&fid={$fid}&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&action=edit&uid={$moderator['id']}\">".htmlspecialchars_uni($moderator['username'])."</a>"); 2658 $form_container->output_cell("<a href=\"index.php?module=forum-management&action=editmod&mid={$moderator['mid']}\">{$lang->edit}</a>", array("class" => "align_center")); 2659 $form_container->output_cell("<a href=\"index.php?module=forum-management&action=deletemod&id={$moderator['id']}&isgroup=0&fid={$fid}&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", "&", $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&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&action=edit&fid={$forum['fid']}"); 2826 $popup->add_item($lang->subforums, "index.php?module=forum-management&fid={$forum['fid']}"); 2827 $popup->add_item($lang->moderators, "index.php?module=forum-management&fid={$forum['fid']}#tab_moderators"); 2828 $popup->add_item($lang->permissions, "index.php?module=forum-management&fid={$forum['fid']}#tab_permissions"); 2829 $popup->add_item($lang->forum_thread_prefixes, "index.php?module=config-thread_prefixes&fid={$forum['fid']}"); 2830 $popup->add_item($lang->add_child_forum, "index.php?module=forum-management&action=add&pid={$forum['fid']}"); 2831 $popup->add_item($lang->copy_forum, "index.php?module=forum-management&action=copy&fid={$forum['fid']}"); 2832 $popup->add_item($lang->delete_forum, "index.php?module=forum-management&action=delete&fid={$forum['fid']}&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", "&", $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&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&action=edit&fid={$forum['fid']}"); 2867 $popup->add_item($lang->subforums, "index.php?module=forum-management&fid={$forum['fid']}"); 2868 $popup->add_item($lang->moderators, "index.php?module=forum-management&fid={$forum['fid']}#tab_moderators"); 2869 $popup->add_item($lang->permissions, "index.php?module=forum-management&fid={$forum['fid']}#tab_permissions"); 2870 $popup->add_item($lang->forum_thread_prefixes, "index.php?module=config-thread_prefixes&fid={$forum['fid']}"); 2871 $popup->add_item($lang->add_child_forum, "index.php?module=forum-management&action=add&pid={$forum['fid']}"); 2872 $popup->add_item($lang->copy_forum, "index.php?module=forum-management&action=copy&fid={$forum['fid']}"); 2873 $popup->add_item($lang->delete_forum, "index.php?module=forum-management&action=delete&fid={$forum['fid']}&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&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&action=permissions&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&action=clear_permission&pid={$perms['pid']}&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&action=permissions&gid={$usergroup['gid']}&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 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
2005 - 2021 © MyBB.de | Alle Rechte vorbehalten! | Sponsor: netcup | Cross-referenced by PHPXref |