[ Index ] |
PHP Cross Reference of MyBB 1.8.36 |
[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->board_settings, "index.php?module=config-settings"); 18 19 $plugins->run_hooks("admin_config_settings_begin"); 20 21 // Creating a new setting group 22 if($mybb->input['action'] == "addgroup") 23 { 24 $plugins->run_hooks("admin_config_settings_addgroup"); 25 26 if($mybb->request_method == "post") 27 { 28 // Validate title 29 if(!trim($mybb->input['title'])) 30 { 31 $errors[] = $lang->error_missing_group_title; 32 } 33 34 // Validate identifier 35 if(!trim($mybb->input['name'])) 36 { 37 $errors[] = $lang->error_missing_group_name; 38 } 39 $query = $db->simple_select("settinggroups", "title", "name='".$db->escape_string($mybb->input['name'])."'"); 40 if($db->num_rows($query) > 0) 41 { 42 $dup_group_title = $db->fetch_field($query, 'title'); 43 $errors[] = $lang->sprintf($lang->error_duplicate_group_name, $dup_group_title); 44 } 45 46 if(!$errors) 47 { 48 $new_setting_group = array( 49 "name" => $db->escape_string($mybb->input['name']), 50 "title" => $db->escape_string($mybb->input['title']), 51 "description" => $db->escape_string($mybb->input['description']), 52 "disporder" => $mybb->get_input('disporder', MyBB::INPUT_INT), 53 "isdefault" => 0 54 ); 55 $gid = $db->insert_query("settinggroups", $new_setting_group); 56 57 $plugins->run_hooks("admin_config_settings_addgroup_commit"); 58 59 // Log admin action 60 log_admin_action($gid, $mybb->input['name']); 61 62 flash_message($lang->success_setting_group_added, 'success'); 63 admin_redirect("index.php?module=config-settings&action=manage"); 64 } 65 } 66 67 $page->add_breadcrumb_item($lang->add_new_setting_group); 68 $page->output_header($lang->board_settings." - ".$lang->add_new_setting_group); 69 70 $sub_tabs['change_settings'] = array( 71 'title' => $lang->change_settings, 72 'link' => "index.php?module=config-settings" 73 ); 74 75 $sub_tabs['add_setting'] = array( 76 'title' => $lang->add_new_setting, 77 'link' => "index.php?module=config-settings&action=add" 78 ); 79 80 $sub_tabs['add_setting_group'] = array( 81 'title' => $lang->add_new_setting_group, 82 'link' => "index.php?module=config-settings&action=addgroup", 83 'description' => $lang->add_new_setting_group_desc 84 ); 85 86 $sub_tabs['modify_setting'] = array( 87 'title' => $lang->modify_existing_settings, 88 'link' => "index.php?module=config-settings&action=manage" 89 ); 90 91 $page->output_nav_tabs($sub_tabs, 'add_setting_group'); 92 93 $form = new Form("index.php?module=config-settings&action=addgroup", "post", "add"); 94 95 if($errors) 96 { 97 $page->output_inline_error($errors); 98 } 99 100 $form_container = new FormContainer($lang->add_new_setting_group); 101 $form_container->output_row($lang->title." <em>*</em>", "", $form->generate_text_box('title', $mybb->get_input('title'), array('id' => 'title')), 'title'); 102 $form_container->output_row($lang->description, "", $form->generate_text_area('description', $mybb->get_input('description'), array('id' => 'description')), 'description'); 103 $form_container->output_row($lang->display_order, "", $form->generate_numeric_field('disporder', $mybb->get_input('disporder'), array('id' => 'disporder', 'min' => 0)), 'disporder'); 104 $form_container->output_row($lang->name." <em>*</em>", $lang->group_name_desc, $form->generate_text_box('name', $mybb->get_input('name'), array('id' => 'name')), 'name'); 105 $form_container->end(); 106 107 $buttons[] = $form->generate_submit_button($lang->insert_new_setting_group); 108 $form->output_submit_wrapper($buttons); 109 $form->end(); 110 111 $page->output_footer(); 112 } 113 114 // Edit setting group 115 if($mybb->input['action'] == "editgroup") 116 { 117 $query = $db->simple_select("settinggroups", "*", "gid='".$mybb->get_input('gid', MyBB::INPUT_INT)."'"); 118 $group = $db->fetch_array($query); 119 120 // Does the setting not exist? 121 if(!$group['gid']) 122 { 123 flash_message($lang->error_invalid_gid2, 'error'); 124 admin_redirect("index.php?module=config-settings&action=manage"); 125 } 126 // Prevent editing of default 127 if($group['isdefault'] == 1) 128 { 129 flash_message($lang->error_cannot_edit_default, 'error'); 130 admin_redirect("index.php?module=config-settings&action=manage"); 131 } 132 133 $plugins->run_hooks("admin_config_settings_editgroup"); 134 135 // Do edit? 136 if($mybb->request_method == "post") 137 { 138 // Validate title 139 if(!trim($mybb->input['title'])) 140 { 141 $errors[] = $lang->error_missing_group_title; 142 } 143 144 // Validate identifier 145 if(!trim($mybb->input['name'])) 146 { 147 $errors[] = $lang->error_missing_group_name; 148 } 149 $query = $db->simple_select("settinggroups", "title", "name='".$db->escape_string($mybb->input['name'])."' AND gid != '{$group['gid']}'"); 150 if($db->num_rows($query) > 0) 151 { 152 $dup_group_title = $db->fetch_field($query, 'title'); 153 $errors[] = $lang->sprintf($lang->error_duplicate_group_name, $dup_group_title); 154 } 155 156 if(!$errors) 157 { 158 $update_setting_group = array( 159 "name" => $db->escape_string($mybb->input['name']), 160 "title" => $db->escape_string($mybb->input['title']), 161 "description" => $db->escape_string($mybb->input['description']), 162 "disporder" => $mybb->get_input('disporder', MyBB::INPUT_INT), 163 ); 164 165 $plugins->run_hooks("admin_config_settings_editgroup_commit"); 166 167 $db->update_query("settinggroups", $update_setting_group, "gid='{$group['gid']}'"); 168 169 // Log admin action 170 log_admin_action($group['gid'], $mybb->input['name']); 171 172 flash_message($lang->success_setting_group_updated, 'success'); 173 admin_redirect("index.php?module=config-settings&action=manage"); 174 } 175 } 176 177 $page->add_breadcrumb_item($lang->edit_setting_group); 178 $page->output_header($lang->board_settings." - ".$lang->edit_setting_group); 179 180 $sub_tabs['edit_setting_group'] = array( 181 'title' => $lang->edit_setting_group, 182 'link' => "index.php?module=config-settings&action=editgroup&gid={$group['gid']}", 183 'description' => $lang->edit_setting_group_desc 184 ); 185 186 $page->output_nav_tabs($sub_tabs, 'edit_setting_group'); 187 188 $form = new Form("index.php?module=config-settings&action=editgroup", "post", "editgroup"); 189 190 echo $form->generate_hidden_field("gid", $group['gid']); 191 192 if($errors) 193 { 194 $group_data = $mybb->input; 195 $page->output_inline_error($errors); 196 } 197 else 198 { 199 $group_data = $group; 200 } 201 202 $form_container = new FormContainer($lang->edit_setting_group); 203 $form_container->output_row($lang->title." <em>*</em>", "", $form->generate_text_box('title', $group_data['title'], array('id' => 'title')), 'title'); 204 $form_container->output_row($lang->description, "", $form->generate_text_area('description', $group_data['description'], array('id' => 'description')), 'description'); 205 $form_container->output_row($lang->display_order, "", $form->generate_numeric_field('disporder', $group_data['disporder'], array('id' => 'disporder', 'min' => 0)), 'disporder'); 206 $form_container->output_row($lang->name." <em>*</em>", $lang->group_name_desc, $form->generate_text_box('name', $group_data['name'], array('id' => 'name')), 'name'); 207 $form_container->end(); 208 209 $buttons[] = $form->generate_submit_button($lang->update_setting_group); 210 $form->output_submit_wrapper($buttons); 211 $form->end(); 212 213 $page->output_footer(); 214 } 215 216 // Delete Setting Group 217 if($mybb->input['action'] == "deletegroup") 218 { 219 $query = $db->simple_select("settinggroups", "*", "gid='".$mybb->get_input('gid', MyBB::INPUT_INT)."'"); 220 $group = $db->fetch_array($query); 221 222 // Does the setting group not exist? 223 if(!$group['gid']) 224 { 225 flash_message($lang->error_invalid_gid2, 'error'); 226 admin_redirect("index.php?module=config-settings&action=manage"); 227 } 228 // Prevent deletion of default 229 if($group['isdefault'] == 1) 230 { 231 flash_message($lang->error_cannot_edit_default, 'error'); 232 admin_redirect("index.php?module=config-settings&action=manage"); 233 } 234 235 // User clicked no 236 if($mybb->get_input('no')) 237 { 238 admin_redirect("index.php?module=config-settings&action=manage"); 239 } 240 241 $plugins->run_hooks("admin_config_settings_deletegroup"); 242 243 if($mybb->request_method == "post") 244 { 245 // Delete the setting group and its settings 246 $db->delete_query("settinggroups", "gid='{$group['gid']}'"); 247 $db->delete_query("settings", "gid='{$group['gid']}'"); 248 249 rebuild_settings(); 250 251 $plugins->run_hooks("admin_config_settings_deletegroup_commit"); 252 253 // Log admin action 254 log_admin_action($group['gid'], $group['name']); 255 256 flash_message($lang->success_setting_group_deleted, 'success'); 257 admin_redirect("index.php?module=config-settings&action=manage"); 258 } 259 else 260 { 261 $page->output_confirm_action("index.php?module=config-settings&action=deletegroup&gid={$group['gid']}", $lang->confirm_setting_group_deletion); 262 } 263 } 264 265 // Creating a new setting 266 if($mybb->input['action'] == "add") 267 { 268 $plugins->run_hooks("admin_config_settings_add"); 269 270 if($mybb->request_method == "post") 271 { 272 if(!trim($mybb->input['title'])) 273 { 274 $errors[] = $lang->error_missing_title; 275 } 276 277 $query = $db->simple_select("settinggroups", "gid", "gid='".$mybb->get_input('gid', MyBB::INPUT_INT)."'"); 278 $gid = $db->fetch_field($query, 'gid'); 279 if(!$gid) 280 { 281 $errors[] = $lang->error_invalid_gid; 282 } 283 284 if(!trim($mybb->input['name'])) 285 { 286 $errors[] = $lang->error_missing_name; 287 } 288 $query = $db->simple_select("settings", "title", "name='".$db->escape_string($mybb->input['name'])."'"); 289 if($db->num_rows($query) > 0) 290 { 291 $dup_setting_title = $db->fetch_field($query, 'title'); 292 $errors[] = $lang->sprintf($lang->error_duplicate_name, $dup_setting_title); 293 } 294 295 // do some type filtering 296 $mybb->input['type'] = $mybb->get_input('type'); 297 if(!ctype_alnum($mybb->input['type']) || strtolower($mybb->input['type']) == "php") 298 { 299 $mybb->input['type'] = ""; 300 } 301 302 if(!$mybb->input['type']) 303 { 304 $errors[] = $lang->error_invalid_type; 305 } 306 307 if(!$errors) 308 { 309 if($mybb->input['extra']) 310 { 311 $options_code = "{$mybb->input['type']}\n{$mybb->input['extra']}"; 312 } 313 else 314 { 315 $options_code = $mybb->input['type']; 316 } 317 318 $mybb->input['name'] = str_replace("\\", '', $mybb->input['name']); 319 $mybb->input['name'] = str_replace('$', '', $mybb->input['name']); 320 $mybb->input['name'] = str_replace("'", '', $mybb->input['name']); 321 322 if($options_code == "numeric") 323 { 324 $value = $mybb->get_input('value', MyBB::INPUT_INT); 325 } 326 else 327 { 328 $value = $db->escape_string($mybb->input['value']); 329 } 330 331 $new_setting = array( 332 "name" => $db->escape_string($mybb->input['name']), 333 "title" => $db->escape_string($mybb->input['title']), 334 "description" => $db->escape_string($mybb->input['description']), 335 "optionscode" => $db->escape_string($options_code), 336 "value" => $value, 337 "disporder" => $mybb->get_input('disporder', MyBB::INPUT_INT), 338 "gid" => $mybb->get_input('gid', MyBB::INPUT_INT) 339 ); 340 341 $sid = $db->insert_query("settings", $new_setting); 342 rebuild_settings(); 343 344 $plugins->run_hooks("admin_config_settings_add_commit"); 345 346 // Log admin action 347 log_admin_action($sid, $mybb->input['title']); 348 349 flash_message($lang->success_setting_added, 'success'); 350 admin_redirect("index.php?module=config-settings&action=manage"); 351 } 352 } 353 354 $page->add_breadcrumb_item($lang->add_new_setting); 355 $page->output_header($lang->board_settings." - ".$lang->add_new_setting); 356 357 $sub_tabs['change_settings'] = array( 358 'title' => $lang->change_settings, 359 'link' => "index.php?module=config-settings" 360 ); 361 362 $sub_tabs['add_setting'] = array( 363 'title' => $lang->add_new_setting, 364 'link' => "index.php?module=config-settings&action=add", 365 'description' => $lang->add_new_setting_desc 366 ); 367 368 $sub_tabs['add_setting_group'] = array( 369 'title' => $lang->add_new_setting_group, 370 'link' => "index.php?module=config-settings&action=addgroup" 371 ); 372 373 $sub_tabs['modify_setting'] = array( 374 'title' => $lang->modify_existing_settings, 375 'link' => "index.php?module=config-settings&action=manage" 376 ); 377 378 $page->output_nav_tabs($sub_tabs, 'add_setting'); 379 380 $form = new Form("index.php?module=config-settings&action=add", "post", "add"); 381 382 if($errors) 383 { 384 $page->output_inline_error($errors); 385 } 386 387 $form_container = new FormContainer($lang->add_new_setting); 388 $form_container->output_row($lang->title." <em>*</em>", "", $form->generate_text_box('title', $mybb->get_input('title'), array('id' => 'title')), 'title'); 389 $form_container->output_row($lang->description, "", $form->generate_text_area('description', $mybb->get_input('description'), array('id' => 'description')), 'description'); 390 391 $query = $db->simple_select("settinggroups", "*", "", array('order_by' => 'disporder')); 392 while($group = $db->fetch_array($query)) 393 { 394 $group_lang_var = "setting_group_{$group['name']}"; 395 if(!empty($lang->$group_lang_var)) 396 { 397 $options[$group['gid']] = htmlspecialchars_uni($lang->$group_lang_var); 398 } 399 else 400 { 401 $options[$group['gid']] = htmlspecialchars_uni($group['title']); 402 } 403 } 404 $form_container->output_row($lang->group." <em>*</em>", "", $form->generate_select_box("gid", $options, $mybb->get_input('gid'), array('id' => 'gid')), 'gid'); 405 $form_container->output_row($lang->display_order, "", $form->generate_numeric_field('disporder', $mybb->get_input('disporder'), array('id' => 'disporder', 'min' => 0)), 'disporder'); 406 407 $form_container->output_row($lang->name." <em>*</em>", $lang->name_desc, $form->generate_text_box('name', $mybb->get_input('name'), array('id' => 'name')), 'name'); 408 409 $setting_types = array( 410 "text" => $lang->text, 411 "numeric" => $lang->numeric_text, 412 "textarea" => $lang->textarea, 413 "yesno" => $lang->yesno, 414 "onoff" => $lang->onoff, 415 "select" => $lang->select, 416 "forumselect" => $lang->forum_selection_box, 417 "forumselectsingle" => $lang->forum_selection_single, 418 "groupselect" => $lang->group_selection_box, 419 "groupselectsingle" => $lang->group_selection_single, 420 "radio" => $lang->radio, 421 "checkbox" => $lang->checkbox, 422 "language" => $lang->language_selection_box, 423 "adminlanguage" => $lang->adminlanguage, 424 "cpstyle" => $lang->cpstyle, 425 "prefixselect" => $lang->prefix_selection_box 426 //"php" => $lang->php // Internal Use Only 427 ); 428 429 $form_container->output_row($lang->type." <em>*</em>", "", $form->generate_select_box("type", $setting_types, $mybb->get_input('type'), array('id' => 'type')), 'type'); 430 $form_container->output_row($lang->extra, $lang->extra_desc, $form->generate_text_area('extra', $mybb->get_input('extra'), array('id' => 'extra')), 'extra', array(), array('id' => 'row_extra')); 431 $form_container->output_row($lang->value, "", $form->generate_text_area('value', $mybb->get_input('value'), array('id' => 'value')), 'value'); 432 $form_container->end(); 433 434 $buttons[] = $form->generate_submit_button($lang->insert_new_setting); 435 $form->output_submit_wrapper($buttons); 436 $form->end(); 437 438 echo '<script type="text/javascript" src="./jscripts/peeker.js?ver=1821"></script> 439 <script type="text/javascript"> 440 $(function() { 441 new Peeker($("#type"), $("#row_extra"), /^(select|radio|checkbox|php)$/, false); 442 }); 443 // Add a star to the extra row since the "extra" is required if the box is shown 444 add_star("row_extra"); 445 </script>'; 446 447 $page->output_footer(); 448 } 449 450 // Editing a particular setting 451 if($mybb->input['action'] == "edit") 452 { 453 $query = $db->simple_select("settings", "*", "sid='".$mybb->get_input('sid', MyBB::INPUT_INT)."'"); 454 $setting = $db->fetch_array($query); 455 456 // Does the setting not exist? 457 if(!$setting['sid']) 458 { 459 flash_message($lang->error_invalid_sid, 'error'); 460 admin_redirect("index.php?module=config-settings"); 461 } 462 463 // Prevent editing of default 464 if($setting['isdefault'] == 1) 465 { 466 flash_message($lang->error_cannot_edit_default, 'error'); 467 admin_redirect("index.php?module=config-settings&action=manage"); 468 } 469 470 $plugins->run_hooks("admin_config_settings_edit"); 471 472 $type = explode("\n", $setting['optionscode'], 2); 473 $type = trim($type[0]); 474 if($type == "php") 475 { 476 flash_message($lang->error_cannot_edit_php, 'error'); 477 admin_redirect("index.php?module=config-settings&action=manage"); 478 } 479 480 if($mybb->request_method == "post") 481 { 482 if(!trim($mybb->input['title'])) 483 { 484 $errors[] = $lang->error_missing_title; 485 } 486 487 if(!trim($mybb->input['name'])) 488 { 489 $errors[] = $lang->error_missing_name; 490 } 491 $query = $db->simple_select("settings", "title", "name='".$db->escape_string($mybb->input['name'])."' AND sid != '{$setting['sid']}'"); 492 if($db->num_rows($query) > 0) 493 { 494 $dup_setting_title = $db->fetch_field($query, 'title'); 495 $errors[] = $lang->sprintf($lang->error_duplicate_name, $dup_setting_title); 496 } 497 498 // do some type filtering 499 $mybb->input['type'] = $mybb->get_input('type'); 500 if(!ctype_alnum($mybb->input['type']) || strtolower($mybb->input['type']) == "php") 501 { 502 $mybb->input['type'] = ""; 503 } 504 505 if(!$mybb->input['type']) 506 { 507 $errors[] = $lang->error_invalid_type; 508 } 509 510 if(!$errors) 511 { 512 if($mybb->input['extra']) 513 { 514 $options_code = "{$mybb->input['type']}\n{$mybb->input['extra']}"; 515 } 516 else 517 { 518 $options_code = $mybb->input['type']; 519 } 520 521 $mybb->input['name'] = str_replace("\\", '', $mybb->input['name']); 522 $mybb->input['name'] = str_replace('$', '', $mybb->input['name']); 523 $mybb->input['name'] = str_replace("'", '', $mybb->input['name']); 524 525 if($options_code == "numeric") 526 { 527 $value = $mybb->get_input('value', MyBB::INPUT_INT); 528 } 529 else 530 { 531 $value = $db->escape_string($mybb->input['value']); 532 } 533 534 $updated_setting = array( 535 "name" => $db->escape_string($mybb->input['name']), 536 "title" => $db->escape_string($mybb->input['title']), 537 "description" => $db->escape_string($mybb->input['description']), 538 "optionscode" => $db->escape_string($options_code), 539 "value" => $value, 540 "disporder" => $mybb->get_input('disporder', MyBB::INPUT_INT), 541 "gid" => $mybb->get_input('gid', MyBB::INPUT_INT) 542 ); 543 544 $plugins->run_hooks("admin_config_settings_edit_commit"); 545 546 $db->update_query("settings", $updated_setting, "sid='{$setting['sid']}'"); 547 rebuild_settings(); 548 549 // Log admin action 550 log_admin_action($setting['sid'], $mybb->input['title']); 551 552 flash_message($lang->success_setting_updated, 'success'); 553 admin_redirect("index.php?module=config-settings&action=manage"); 554 } 555 } 556 557 $page->add_breadcrumb_item($lang->edit_setting); 558 $page->output_header($lang->board_settings." - ".$lang->edit_setting); 559 560 $sub_tabs['change_settings'] = array( 561 'title' => $lang->change_settings, 562 'link' => "index.php?module=config-settings", 563 ); 564 565 $sub_tabs['add_setting'] = array( 566 'title' => $lang->add_new_setting, 567 'link' => "index.php?module=config-settings&action=add" 568 ); 569 570 $sub_tabs['add_setting_group'] = array( 571 'title' => $lang->add_new_setting_group, 572 'link' => "index.php?module=config-settings&action=addgroup" 573 ); 574 575 $sub_tabs['modify_setting'] = array( 576 'title' => $lang->modify_existing_settings, 577 'link' => "index.php?module=config-settings&action=manage", 578 'description' => $lang->modify_existing_settings_desc 579 ); 580 581 $page->output_nav_tabs($sub_tabs, 'modify_setting'); 582 583 $form = new Form("index.php?module=config-settings&action=edit", "post", "edit"); 584 585 echo $form->generate_hidden_field("sid", $setting['sid']); 586 587 if($errors) 588 { 589 $setting_data = $mybb->input; 590 $page->output_inline_error($errors); 591 } 592 else 593 { 594 $setting_data = $setting; 595 $type = explode("\n", $setting['optionscode'], 2); 596 $setting_data['type'] = trim($type[0]); 597 598 if(isset($type[1])) 599 { 600 $setting_data['extra'] = trim($type[1]); 601 } 602 } 603 604 $form_container = new FormContainer($lang->modify_setting); 605 $form_container->output_row($lang->title." <em>*</em>", "", $form->generate_text_box('title', $setting_data['title'], array('id' => 'title')), 'title'); 606 $form_container->output_row($lang->description, "", $form->generate_text_area('description', $setting_data['description'], array('id' => 'description')), 'description'); 607 608 $query = $db->simple_select("settinggroups", "*", "", array('order_by' => 'disporder')); 609 while($group = $db->fetch_array($query)) 610 { 611 $group_lang_var = "setting_group_{$group['name']}"; 612 if(!empty($lang->$group_lang_var)) 613 { 614 $options[$group['gid']] = htmlspecialchars_uni($lang->$group_lang_var); 615 } 616 else 617 { 618 $options[$group['gid']] = htmlspecialchars_uni($group['title']); 619 } 620 } 621 $form_container->output_row($lang->group." <em>*</em>", "", $form->generate_select_box("gid", $options, $setting_data['gid'], array('id' => 'gid')), 'gid'); 622 $form_container->output_row($lang->display_order, "", $form->generate_numeric_field('disporder', $setting_data['disporder'], array('id' => 'disporder', 'min' => 0)), 'disporder'); 623 $form_container->end(); 624 625 $form_container = new FormContainer($lang->setting_configuration, 1); 626 $form_container->output_row($lang->name." <em>*</em>", $lang->name_desc, $form->generate_text_box('name', $setting_data['name'], array('id' => 'name')), 'name'); 627 628 $setting_types = array( 629 "text" => $lang->text, 630 "numeric" => $lang->numeric_text, 631 "textarea" => $lang->textarea, 632 "yesno" => $lang->yesno, 633 "onoff" => $lang->onoff, 634 "select" => $lang->select, 635 "forumselect" => $lang->forum_selection_box, 636 "forumselectsingle" => $lang->forum_selection_single, 637 "groupselect" => $lang->group_selection_box, 638 "groupselectsingle" => $lang->group_selection_single, 639 "radio" => $lang->radio, 640 "checkbox" => $lang->checkbox, 641 "language" => $lang->language_selection_box, 642 "adminlanguage" => $lang->adminlanguage, 643 "cpstyle" => $lang->cpstyle, 644 "prefixselect" => $lang->prefix_selection_box 645 //"php" => $lang->php // Internal Use Only 646 ); 647 648 $form_container->output_row($lang->type." <em>*</em>", "", $form->generate_select_box("type", $setting_types, $setting_data['type'], array('id' => 'type')), 'type'); 649 $form_container->output_row($lang->extra, $lang->extra_desc, $form->generate_text_area('extra', !empty($setting_data['extra']) ? $setting_data['extra'] : null, array('id' => 'extra')), 'extra', array(), array('id' => 'row_extra')); 650 $form_container->output_row($lang->value, '', $form->generate_text_area('value', $setting_data['value'], array('id' => 'value')), 'value'); 651 $form_container->end(); 652 653 $buttons[] = $form->generate_submit_button($lang->update_setting); 654 $form->output_submit_wrapper($buttons); 655 $form->end(); 656 657 echo '<script type="text/javascript" src="./jscripts/peeker.js?ver=1821"></script> 658 <script type="text/javascript"> 659 $(function() { 660 new Peeker($("#type"), $("#row_extra"), /^(select|radio|checkbox|php)$/, false); 661 }); 662 // Add a star to the extra row since the "extra" is required if the box is shown 663 add_star("row_extra"); 664 </script>'; 665 666 $page->output_footer(); 667 } 668 669 // Delete Setting 670 if($mybb->input['action'] == "delete") 671 { 672 $query = $db->simple_select("settings", "*", "sid='".$mybb->get_input('sid', MyBB::INPUT_INT)."'"); 673 $setting = $db->fetch_array($query); 674 675 // Does the setting not exist? 676 if(empty($setting['sid'])) 677 { 678 flash_message($lang->error_invalid_sid, 'error'); 679 admin_redirect("index.php?module=config-settings&action=manage"); 680 } 681 682 // Prevent editing of default 683 if($setting['isdefault'] == 1) 684 { 685 flash_message($lang->error_cannot_edit_default, 'error'); 686 admin_redirect("index.php?module=config-settings&action=manage"); 687 } 688 689 // User clicked no 690 if($mybb->get_input('no')) 691 { 692 admin_redirect("index.php?module=config-settings&action=manage"); 693 } 694 695 $plugins->run_hooks("admin_config_settings_delete"); 696 697 if($mybb->request_method == "post") 698 { 699 // Delete the setting 700 $db->delete_query("settings", "sid='{$setting['sid']}'"); 701 702 rebuild_settings(); 703 704 $plugins->run_hooks("admin_config_settings_delete_commit"); 705 706 // Log admin action 707 log_admin_action($setting['sid'], $setting['title']); 708 709 flash_message($lang->success_setting_deleted, 'success'); 710 admin_redirect("index.php?module=config-settings&action=manage"); 711 } 712 else 713 { 714 $page->output_confirm_action("index.php?module=config-settings&action=delete&sid={$setting['sid']}", $lang->confirm_setting_deletion); 715 } 716 } 717 718 // Modify Existing Settings 719 if($mybb->input['action'] == "manage") 720 { 721 $plugins->run_hooks("admin_config_settings_manage"); 722 723 // Update orders 724 if($mybb->request_method == "post") 725 { 726 if(is_array($mybb->input['group_disporder'])) 727 { 728 foreach($mybb->input['group_disporder'] as $gid => $new_order) 729 { 730 $gid = (int)$gid; 731 $update_group = array('disporder' => (int)$new_order); 732 $db->update_query("settinggroups", $update_group, "gid={$gid}"); 733 } 734 } 735 736 if(is_array($mybb->input['setting_disporder'])) 737 { 738 foreach($mybb->input['setting_disporder'] as $sid => $new_order) 739 { 740 $sid = (int)$sid; 741 $update_setting = array('disporder' => (int)$new_order); 742 $db->update_query("settings", $update_setting, "sid={$sid}"); 743 } 744 } 745 746 $plugins->run_hooks("admin_config_settings_manage_commit"); 747 748 // Log admin action 749 log_admin_action(); 750 751 flash_message($lang->success_display_orders_updated, 'success'); 752 admin_redirect("index.php?module=config-settings&action=manage"); 753 } 754 755 $page->add_breadcrumb_item($lang->modify_existing_settings); 756 $page->output_header($lang->board_settings." - ".$lang->modify_existing_settings); 757 758 $sub_tabs['change_settings'] = array( 759 'title' => $lang->change_settings, 760 'link' => "index.php?module=config-settings", 761 ); 762 763 $sub_tabs['add_setting'] = array( 764 'title' => $lang->add_new_setting, 765 'link' => "index.php?module=config-settings&action=add" 766 ); 767 768 $sub_tabs['add_setting_group'] = array( 769 'title' => $lang->add_new_setting_group, 770 'link' => "index.php?module=config-settings&action=addgroup" 771 ); 772 773 $sub_tabs['modify_setting'] = array( 774 'title' => $lang->modify_existing_settings, 775 'link' => "index.php?module=config-settings&action=manage", 776 'description' => $lang->modify_existing_settings_desc 777 ); 778 779 $page->output_nav_tabs($sub_tabs, 'modify_setting'); 780 781 // Cache settings 782 $settings_cache = array(); 783 $query = $db->simple_select("settings", "sid, name, title, disporder, gid, isdefault", "", array('order_by' => 'disporder', 'order_dir' => 'asc')); 784 while($setting = $db->fetch_array($query)) 785 { 786 $settings_cache[$setting['gid']][] = $setting; 787 } 788 789 $form = new Form("index.php?module=config-settings&action=manage", "post", "edit"); 790 791 $table = new Table; 792 793 $table->construct_header($lang->setting_group_setting); 794 $table->construct_header($lang->order, array('class' => 'align_center', 'style' => 'width: 5%')); 795 $table->construct_header($lang->controls, array('class' => 'align_center', 'style' => 'width: 200px')); 796 797 // Generate table 798 $query = $db->simple_select("settinggroups", "*", "", array('order_by' => 'disporder', 'order_dir' => 'asc')); 799 while($group = $db->fetch_array($query)) 800 { 801 // Make setting group row 802 // Translated? 803 $group_lang_var = "setting_group_{$group['name']}"; 804 if(!empty($lang->$group_lang_var)) 805 { 806 $group_title = htmlspecialchars_uni($lang->$group_lang_var); 807 } 808 else 809 { 810 $group_title = htmlspecialchars_uni($group['title']); 811 } 812 $table->construct_cell("<strong>{$group_title}</strong>", array('id' => "group{$group['gid']}")); 813 $table->construct_cell($form->generate_numeric_field("group_disporder[{$group['gid']}]", $group['disporder'], array('style' => 'width: 80%; font-weight: bold', 'class' => 'align_center', 'min' => 0))); 814 // Only show options if not a default setting group 815 if($group['isdefault'] != 1) 816 { 817 $popup = new PopupMenu("group_{$group['gid']}", $lang->options); 818 $popup->add_item($lang->edit_setting_group, "index.php?module=config-settings&action=editgroup&gid={$group['gid']}"); 819 $popup->add_item($lang->delete_setting_group, "index.php?module=config-settings&action=deletegroup&gid={$group['gid']}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_setting_group_deletion}')"); 820 $table->construct_cell($popup->fetch(), array('class' => 'align_center')); 821 } 822 else 823 { 824 $table->construct_cell(''); 825 } 826 $table->construct_row(array('class' => 'alt_row', 'no_alt_row' => 1)); 827 828 // Make rows for each setting in the group 829 if(isset($settings_cache[$group['gid']]) && is_array($settings_cache[$group['gid']])) 830 { 831 foreach($settings_cache[$group['gid']] as $setting) 832 { 833 $setting_lang_var = "setting_{$setting['name']}"; 834 if(!empty($lang->$setting_lang_var)) 835 { 836 $setting_title = htmlspecialchars_uni($lang->$setting_lang_var); 837 } 838 else 839 { 840 $setting_title = htmlspecialchars_uni($setting['title']); 841 } 842 $table->construct_cell($setting_title, array('style' => 'padding-left: 40px;')); 843 $table->construct_cell($form->generate_numeric_field("setting_disporder[{$setting['sid']}]", $setting['disporder'], array('style' => 'width: 80%', 'class' => 'align_center', 'min' => 0))); 844 // Only show options if not a default setting group or is a custom setting 845 if($group['isdefault'] != 1 || $setting['isdefault'] != 1) 846 { 847 $popup = new PopupMenu("setting_{$setting['sid']}", $lang->options); 848 $popup->add_item($lang->edit_setting, "index.php?module=config-settings&action=edit&sid={$setting['sid']}"); 849 $popup->add_item($lang->delete_setting, "index.php?module=config-settings&action=delete&sid={$setting['sid']}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_setting_deletion}')"); 850 $table->construct_cell($popup->fetch(), array('class' => 'align_center')); 851 } 852 else 853 { 854 $table->construct_cell(''); 855 } 856 $table->construct_row(array('no_alt_row' => 1, 'class' => "group{$group['gid']}")); 857 } 858 } 859 } 860 861 $table->output($lang->modify_existing_settings); 862 863 $buttons[] = $form->generate_submit_button($lang->save_display_orders); 864 $form->output_submit_wrapper($buttons); 865 $form->end(); 866 867 $page->output_footer(); 868 } 869 870 // Change settings for a specified group. 871 if($mybb->input['action'] == "change") 872 { 873 $plugins->run_hooks("admin_config_settings_change"); 874 875 if($mybb->request_method == "post") 876 { 877 if(!is_writable(MYBB_ROOT.'inc/settings.php')) 878 { 879 flash_message($lang->error_chmod_settings_file, 'error'); 880 admin_redirect("index.php?module=config-settings"); 881 } 882 883 // Not allowed to be hidden captcha fields 884 $disallowed_fields = array( 885 'username', 886 'password', 887 'password2', 888 'email', 889 'email2', 890 'imagestring', 891 'imagehash', 892 'answer', 893 'question_id', 894 'allownotices', 895 'hideemail', 896 'receivepms', 897 'pmnotice', 898 'emailpmnotify', 899 'invisible', 900 'subscriptionmethod', 901 'timezoneoffset', 902 'dstcorrection', 903 'language', 904 'step', 905 'action', 906 'agree', 907 'regtime', 908 'regcheck1', 909 'regcheck2', 910 'regsubmit' 911 ); 912 913 $is_current_hiddencaptcha_wrong = in_array($mybb->settings['hiddencaptchaimagefield'], $disallowed_fields); 914 if( 915 (isset($mybb->input['upsetting']['hiddencaptchaimagefield']) && in_array($mybb->input['upsetting']['hiddencaptchaimagefield'], $disallowed_fields)) || 916 $is_current_hiddencaptcha_wrong 917 ) 918 { 919 if(isset($mybb->input['upsetting']['hiddencaptchaimagefield']) && $mybb->input['upsetting']['hiddencaptchaimagefield'] != $mybb->settings['hiddencaptchaimagefield'] && !$is_current_hiddencaptcha_wrong) 920 { 921 $wrong_value = $mybb->input['upsetting']['hiddencaptchaimagefield']; 922 $mybb->input['upsetting']['hiddencaptchaimagefield'] = $mybb->settings['hiddencaptchaimagefield']; 923 } 924 else 925 { 926 $wrong_value = $mybb->settings['hiddencaptchaimagefield']; 927 $mybb->input['upsetting']['hiddencaptchaimagefield'] = 'email3'; 928 } 929 930 $lang->success_settings_updated .= $lang->sprintf($lang->success_settings_updated_hiddencaptchaimage, htmlspecialchars_uni($mybb->input['upsetting']['hiddencaptchaimagefield']), htmlspecialchars_uni($wrong_value)); 931 } 932 933 // Validate avatar dimension inputs 934 $gid = (int)$mybb->input['gid']; 935 $dimfields = array( 936 8 => array('postmaxavatarsize'), 937 10 => array('useravatardims', 'maxavatardims'), 938 13 => array('memberlistmaxavatarsize') 939 ); 940 if(in_array($gid, array_keys($dimfields))) 941 { 942 foreach($dimfields[$gid] as $field) 943 { 944 if(isset($mybb->input['upsetting'][$field])) 945 { 946 if(preg_match("/\b\d+[|x]{1}\d+\b/i", $mybb->input['upsetting'][$field]) || ($field == 'maxavatardims' && trim($mybb->input['upsetting'][$field]) == "")) 947 { 948 // If pipe (|) is used normalize to 'x' 949 $mybb->input['upsetting'][$field] = str_replace('|', 'x', my_strtolower($mybb->input['upsetting'][$field])); 950 } 951 else 952 { 953 flash_message($lang->sprintf($lang->error_format_dimension, $lang->{'error_field_'.$field}), 'error'); 954 admin_redirect("index.php?module=config-settings&action=change&gid=".$gid); 955 } 956 } 957 } 958 } 959 960 // Validate minnamelength, maxnamelength, minpasswordlength (complex and regular) and maxpasswordlength 961 if ($gid == 9) 962 { 963 if ( 964 isset($mybb->input['upsetting']['minnamelength'], $mybb->input['upsetting']['maxnamelength']) && 965 $mybb->input['upsetting']['minnamelength'] > 0 && $mybb->input['upsetting']['maxnamelength'] > 0 && 966 $mybb->input['upsetting']['minnamelength'] > $mybb->input['upsetting']['maxnamelength']) 967 { 968 flash_message($lang->error_field_minnamelength, 'error'); 969 admin_redirect("index.php?module=config-settings&action=change&gid=".$gid); 970 } 971 972 if ( 973 isset($mybb->input['upsetting']['minpasswordlength'], $mybb->input['upsetting']['maxpasswordlength']) && 974 $mybb->input['upsetting']['minpasswordlength'] > 0 && $mybb->input['upsetting']['maxpasswordlength'] > 0 && 975 $mybb->input['upsetting']['minpasswordlength'] > $mybb->input['upsetting']['maxpasswordlength'] 976 ) 977 { 978 flash_message($lang->error_field_minpasswordlength, 'error'); 979 admin_redirect("index.php?module=config-settings&action=change&gid=".$gid); 980 } 981 982 if ( 983 isset($mybb->input['upsetting']['minpasswordlength'], $mybb->input['upsetting']['requirecomplexpasswords']) && 984 $mybb->input['upsetting']['requirecomplexpasswords'] && $mybb->input['upsetting']['minpasswordlength'] < 3 985 ) 986 { 987 flash_message($lang->error_field_minpasswordlength_complex, 'error'); 988 admin_redirect("index.php?module=config-settings&action=change&gid=".$gid); 989 } 990 } 991 992 require_once MYBB_ROOT.'inc/class_captcha.php'; 993 994 // Have we opted for a reCAPTCHA or hCaptcha and not set a public/private key in input? 995 $set_captcha_image = false; 996 if(isset( 997 $mybb->input['upsetting']['captchaimage'], 998 $mybb->input['upsetting']['recaptchaprivatekey'], 999 $mybb->input['upsetting']['recaptchapublickey'], 1000 $mybb->input['upsetting']['recaptchascore'], 1001 $mybb->input['upsetting']['hcaptchaprivatekey'], 1002 $mybb->input['upsetting']['hcaptchapublickey'] 1003 )) 1004 { 1005 $captchaimage = $mybb->input['upsetting']['captchaimage']; 1006 $recaptchaprivatekey = $mybb->input['upsetting']['recaptchaprivatekey']; 1007 $recaptchapublickey = $mybb->input['upsetting']['recaptchapublickey']; 1008 $recaptchascore = $mybb->input['upsetting']['recaptchascore']; 1009 $hcaptchaprivatekey = $mybb->input['upsetting']['hcaptchaprivatekey']; 1010 $hcaptchapublickey = $mybb->input['upsetting']['hcaptchapublickey']; 1011 1012 if(in_array($captchaimage, array(captcha::NOCAPTCHA_RECAPTCHA, captcha::RECAPTCHA_INVISIBLE)) && (!$recaptchaprivatekey || !$recaptchapublickey)) 1013 { 1014 $set_captcha_image = true; 1015 } 1016 else if(in_array($captchaimage, array(captcha::RECAPTCHA_V3)) && (!$recaptchaprivatekey || !$recaptchapublickey || !$recaptchascore)) 1017 { 1018 $set_captcha_image = true; 1019 } 1020 else if(in_array($captchaimage, array(captcha::HCAPTCHA, captcha::HCAPTCHA_INVISIBLE)) && (!$hcaptchaprivatekey || !$hcaptchapublickey)) 1021 { 1022 $set_captcha_image = true; 1023 } 1024 } 1025 1026 //Checking settings for reCAPTCHA or hCaptcha and public/private key not set? 1027 $captchaimage = $mybb->settings['captchaimage']; 1028 $recaptchaprivatekey = $mybb->settings['recaptchaprivatekey']; 1029 $recaptchapublickey = $mybb->settings['recaptchapublickey']; 1030 $recaptchascore = $mybb->settings['recaptchascore']; 1031 $hcaptchaprivatekey = $mybb->settings['hcaptchaprivatekey']; 1032 $hcaptchapublickey = $mybb->settings['hcaptchapublickey']; 1033 1034 if(in_array($captchaimage, array(captcha::NOCAPTCHA_RECAPTCHA, captcha::RECAPTCHA_INVISIBLE)) && (!$recaptchaprivatekey || !$recaptchapublickey)) 1035 { 1036 $set_captcha_image = true; 1037 } 1038 else if(in_array($captchaimage, array(captcha::RECAPTCHA_V3)) && (!$recaptchaprivatekey || !$recaptchapublickey || !$recaptchascore)) 1039 { 1040 $set_captcha_image = true; 1041 } 1042 else if(in_array($captchaimage, array(captcha::HCAPTCHA, captcha::HCAPTCHA_INVISIBLE)) && (!$hcaptchaprivatekey || !$hcaptchapublickey)) 1043 { 1044 $set_captcha_image = true; 1045 } 1046 if($set_captcha_image){ 1047 $mybb->input['upsetting']['captchaimage'] = captcha::DEFAULT_CAPTCHA; 1048 $lang->success_settings_updated .= $lang->success_settings_updated_captchaimage; 1049 } 1050 1051 // If using fulltext then enforce minimum word length given by database 1052 if(isset($mybb->input['upsetting']['minsearchword']) && $mybb->input['upsetting']['minsearchword'] > 0 && $mybb->input['upsetting']['searchtype'] == "fulltext" && $db->supports_fulltext_boolean("posts") && $db->supports_fulltext("threads")) 1053 { 1054 // Attempt to determine minimum word length from MySQL for fulltext searches 1055 $query = $db->query("SHOW VARIABLES LIKE 'ft_min_word_len';"); 1056 $min_length = $db->fetch_field($query, 'Value'); 1057 if(is_numeric($min_length) && $mybb->input['upsetting']['minsearchword'] < $min_length) 1058 { 1059 $mybb->input['upsetting']['minsearchword'] = $min_length; 1060 $lang->success_settings_updated .= $lang->success_settings_updated_minsearchword; 1061 } 1062 } 1063 1064 // Get settings which optionscode is a forum/group select, checkbox or numeric 1065 // We cannot rely on user input to decide this 1066 $checkbox_settings = $forum_group_select = $prefix_select = array(); 1067 $query = $db->simple_select('settings', 'name, optionscode', "optionscode IN('forumselect', 'groupselect', 'prefixselect') OR optionscode LIKE 'checkbox%' OR optionscode LIKE 'numeric%'"); 1068 1069 while($multisetting = $db->fetch_array($query)) 1070 { 1071 $options = array(); 1072 1073 if(substr($multisetting['optionscode'], 0, 8) == 'checkbox') 1074 { 1075 $checkbox_settings[] = $multisetting['name']; 1076 1077 // All checkboxes deselected = no $mybb->input['upsetting'] for them, we need to initialize it manually then, but only on pages where the setting is shown 1078 if(empty($mybb->input['upsetting'][$multisetting['name']]) && isset($mybb->input["isvisible_{$multisetting['name']}"])) 1079 { 1080 $mybb->input['upsetting'][$multisetting['name']] = array(); 1081 } 1082 } 1083 elseif(substr($multisetting['optionscode'], 0, 7) == 'numeric') 1084 { 1085 if(isset($mybb->input['upsetting'][$multisetting['name']])) 1086 { 1087 $type = explode("\n", $multisetting['optionscode']); 1088 for($i=1; $i < count($type); $i++) 1089 { 1090 $optionsexp = explode("=", $type[$i]); 1091 $opt = array_map('trim', $optionsexp); 1092 if(in_array($opt[0], array('min', 'max', 'step'))) 1093 { 1094 if($opt[0] != 'step' || $opt[1] != 'any') 1095 { 1096 $opt[1] = (float)$opt[1]; 1097 } 1098 $options[$opt[0]] = $opt[1]; 1099 } 1100 } 1101 1102 $value = (float)$mybb->input['upsetting'][$multisetting['name']]; 1103 1104 if(isset($options['min'])) 1105 { 1106 $value = max($value, $options['min']); 1107 } 1108 1109 if(isset($options['max'])) 1110 { 1111 $value = min($value, $options['max']); 1112 } 1113 1114 $mybb->input['upsetting'][$multisetting['name']] = $value; 1115 } 1116 } 1117 else 1118 { 1119 $forum_group_select[] = $multisetting['name']; 1120 } 1121 } 1122 1123 // Verify for admin email that can't be empty 1124 if(isset($mybb->input['upsetting']['adminemail']) && !validate_email_format($mybb->input['upsetting']['adminemail'])) 1125 { 1126 unset($mybb->input['upsetting']['adminemail']); 1127 $lang->success_settings_updated .= $lang->error_admin_email_settings_empty; 1128 } 1129 1130 // Administrator is changing the login method. 1131 if(isset($mybb->input['upsetting']['username_method']) && (int)$mybb->input['upsetting']['username_method'] > 0) 1132 { 1133 if((int)$mybb->settings['allowmultipleemails'] == 1) 1134 { 1135 $mybb->input['upsetting']['username_method'] = 0; 1136 $lang->success_settings_updated .= $lang->success_settings_updated_username_method_conflict; 1137 } 1138 else 1139 { 1140 $query = $db->simple_select('users', 'email', "email != ''", array('group_by' => 'email HAVING COUNT(email)>1')); 1141 if($db->num_rows($query)) 1142 { 1143 $mybb->input['upsetting']['username_method'] = 0; 1144 $lang->success_settings_updated .= $lang->success_settings_updated_username_method; 1145 } 1146 } 1147 } 1148 1149 if(isset($mybb->input['upsetting']['username_method'], $mybb->input['upsetting']['allowmultipleemails'])) 1150 { 1151 // Administrator is changing registration email allowance 1152 if((int)$mybb->settings['username_method'] > 0 && (int)$mybb->input['upsetting']['allowmultipleemails'] !== 0) 1153 { 1154 $mybb->input['upsetting']['allowmultipleemails'] = 0; 1155 $lang->success_settings_updated .= $lang->success_settings_updated_allowmultipleemails; 1156 } 1157 1158 // Reset conflict silently, if by chance 1159 if((int)$mybb->settings['username_method'] > 0 && (int)$mybb->settings['allowmultipleemails'] == 1) 1160 { 1161 $mybb->input['upsetting']['allowmultipleemails'] = 0; 1162 } 1163 } 1164 1165 // reject dangerous/unsupported upload paths 1166 $fields = array( 1167 'uploadspath', 1168 'cdnpath', 1169 'avataruploadpath', 1170 ); 1171 1172 $dynamic_include_directories = array( 1173 MYBB_ROOT.'cache/', 1174 MYBB_ROOT.'inc/plugins/', 1175 MYBB_ROOT.'inc/languages/', 1176 MYBB_ROOT.'inc/tasks/', 1177 ); 1178 $dynamic_include_directories_realpath = array_map('realpath', $dynamic_include_directories); 1179 1180 foreach($fields as $field) 1181 { 1182 if(isset($mybb->input['upsetting'][$field])) 1183 { 1184 if( 1185 is_string($mybb->input['upsetting'][$field]) && 1186 strpos($mybb->input['upsetting'][$field], '://') !== false) 1187 { 1188 unset($mybb->input['upsetting'][$field]); 1189 continue; 1190 } 1191 1192 $realpath = realpath(mk_path_abs($mybb->input['upsetting'][$field])); 1193 1194 if ($realpath === false) 1195 { 1196 unset($mybb->input['upsetting'][$field]); 1197 continue; 1198 } 1199 1200 foreach ($dynamic_include_directories_realpath as $forbidden_realpath) 1201 { 1202 if ($realpath === $forbidden_realpath || strpos($realpath, $forbidden_realpath.DIRECTORY_SEPARATOR) === 0) 1203 { 1204 unset($mybb->input['upsetting'][$field]); 1205 continue 2; 1206 } 1207 } 1208 } 1209 } 1210 1211 1212 if(is_array($mybb->input['upsetting'])) 1213 { 1214 foreach($mybb->input['upsetting'] as $name => $value) 1215 { 1216 if($forum_group_select && in_array($name, $forum_group_select)) 1217 { 1218 if($value == 'all') 1219 { 1220 $value = -1; 1221 } 1222 elseif($value == 'custom') 1223 { 1224 if(isset($mybb->input['select'][$name]) && is_array($mybb->input['select'][$name])) 1225 { 1226 foreach($mybb->input['select'][$name] as &$val) 1227 { 1228 $val = (int)$val; 1229 } 1230 unset($val); 1231 1232 $value = implode(',', $mybb->input['select'][$name]); 1233 } 1234 else 1235 { 1236 $value = ''; 1237 } 1238 } 1239 else 1240 { 1241 $value = ''; 1242 } 1243 } 1244 elseif($checkbox_settings && in_array($name, $checkbox_settings)) 1245 { 1246 $value = ''; 1247 1248 if(is_array($mybb->input['upsetting'][$name])) 1249 { 1250 $value = implode(',', $mybb->input['upsetting'][$name]); 1251 } 1252 } 1253 1254 $db->update_query("settings", array('value' => $db->escape_string($value)), "name='".$db->escape_string($name)."'"); 1255 } 1256 } 1257 1258 // Check if we need to create our fulltext index after changing the search mode 1259 if( 1260 isset($mybb->input['upsetting']['searchtype']) && 1261 $mybb->settings['searchtype'] != $mybb->input['upsetting']['searchtype'] && 1262 $mybb->input['upsetting']['searchtype'] == "fulltext" 1263 ) 1264 { 1265 if(!$db->is_fulltext("posts") && $db->supports_fulltext_boolean("posts")) 1266 { 1267 $db->create_fulltext_index("posts", "message"); 1268 } 1269 if(!$db->is_fulltext("threads") && $db->supports_fulltext("threads")) 1270 { 1271 $db->create_fulltext_index("threads", "subject"); 1272 } 1273 } 1274 1275 // If the delayedthreadviews setting was changed, enable or disable the tasks for it. 1276 if(isset($mybb->input['upsetting']['delayedthreadviews']) && $mybb->settings['delayedthreadviews'] != $mybb->input['upsetting']['delayedthreadviews']) 1277 { 1278 $db->update_query("tasks", array('enabled' => (int)$mybb->input['upsetting']['delayedthreadviews']), "file='threadviews'"); 1279 } 1280 1281 // Have we changed our cookie prefix? If so, update our adminsid so we're not logged out 1282 if(isset($mybb->input['upsetting']['cookieprefix']) && $mybb->input['upsetting']['cookieprefix'] != $mybb->settings['cookieprefix']) 1283 { 1284 my_unsetcookie("adminsid"); 1285 $mybb->settings['cookieprefix'] = $mybb->input['upsetting']['cookieprefix']; 1286 my_setcookie("adminsid", $admin_session['sid'], '', true, "strict"); 1287 } 1288 1289 if(isset($mybb->input['upsetting']['statstopreferrer']) && $mybb->input['upsetting']['statstopreferrer'] != $mybb->settings['statstopreferrer']) 1290 { 1291 $cache->update_statistics(); 1292 } 1293 1294 $statslimit = $mybb->settings['statslimit']; 1295 1296 rebuild_settings(); 1297 1298 if(isset($mybb->input['upsetting']['statslimit']) && $mybb->input['upsetting']['statslimit'] != $statslimit) 1299 { 1300 $cache->update_most_replied_threads(); 1301 $cache->update_most_viewed_threads(); 1302 } 1303 1304 $plugins->run_hooks("admin_config_settings_change_commit"); 1305 1306 // Log admin action 1307 log_admin_action(); 1308 1309 flash_message($lang->success_settings_updated, 'success'); 1310 admin_redirect("index.php?module=config-settings"); 1311 } 1312 1313 // What type of page 1314 $cache_groups = $cache_settings = array(); 1315 if(isset($mybb->input['search'])) 1316 { 1317 // Search 1318 1319 // Search for settings 1320 $search = trim($mybb->input['search']); 1321 if(!empty($search)) 1322 { 1323 $query = $db->query(" 1324 SELECT s.* , g.name as gname, g.title as gtitle, g.description as gdescription 1325 FROM ".TABLE_PREFIX."settings s 1326 LEFT JOIN ".TABLE_PREFIX."settinggroups g ON(s.gid=g.gid) 1327 ORDER BY s.disporder 1328 "); 1329 while($setting = $db->fetch_array($query)) 1330 { 1331 $search_in = $setting['name'] . ' ' . $setting['title'] . ' ' . $setting['description'] . ' ' . $setting['gname'] . ' ' . $setting['gtitle'] . ' ' . $setting['gdescription']; 1332 foreach(array("setting_{$setting['name']}", "setting_{$setting['name']}_desc", "setting_group_{$setting['gname']}", "setting_group_{$setting['gname']}_desc") as $search_in_lang_key) 1333 { 1334 if(!empty($lang->$search_in_lang_key)) 1335 { 1336 $search_in .= ' ' . $lang->$search_in_lang_key; 1337 } 1338 } 1339 if(my_stripos($search_in, $search) !== false) 1340 { 1341 $cache_settings[$setting['gid']][$setting['sid']] = $setting; 1342 } 1343 } 1344 } 1345 if(!count($cache_settings)) 1346 { 1347 if(isset($mybb->input['ajax_search'])) 1348 { 1349 echo json_encode(array("errors" => array($lang->error_no_settings_found))); 1350 exit; 1351 } 1352 else 1353 { 1354 flash_message($lang->error_no_settings_found, 'error'); 1355 admin_redirect("index.php?module=config-settings"); 1356 } 1357 } 1358 1359 // Cache groups 1360 $groups = array_keys($cache_settings); 1361 $groups = implode(',', $groups); 1362 $query = $db->simple_select("settinggroups", "*", "gid IN ({$groups})", array('order_by' => 'disporder')); 1363 while($group = $db->fetch_array($query)) 1364 { 1365 $cache_groups[$group['gid']] = $group; 1366 } 1367 1368 // Page header only if not AJAX 1369 if(!isset($mybb->input['ajax_search'])) 1370 { 1371 $page->add_breadcrumb_item($lang->settings_search); 1372 $page->output_header($lang->board_settings." - {$lang->settings_search}"); 1373 } 1374 } 1375 elseif(($mybb->get_input('gid'))) 1376 { 1377 // Group listing 1378 // Cache groups 1379 $query = $db->simple_select("settinggroups", "*", "gid = '".$mybb->get_input('gid', MyBB::INPUT_INT)."'"); 1380 $groupinfo = $db->fetch_array($query); 1381 $cache_groups[$groupinfo['gid']] = $groupinfo; 1382 1383 if(!$db->num_rows($query)) 1384 { 1385 $page->output_error($lang->error_invalid_gid2); 1386 } 1387 1388 // Cache settings 1389 $query = $db->simple_select("settings", "*", "gid='".$mybb->get_input('gid', MyBB::INPUT_INT)."'", array('order_by' => 'disporder')); 1390 while($setting = $db->fetch_array($query)) 1391 { 1392 $cache_settings[$setting['gid']][$setting['sid']] = $setting; 1393 } 1394 1395 if(!$db->num_rows($query)) 1396 { 1397 flash_message($lang->error_no_settings_found, 'error'); 1398 admin_redirect("index.php?module=config-settings"); 1399 } 1400 1401 $group_lang_var = "setting_group_{$groupinfo['name']}"; 1402 if(isset($lang->$group_lang_var)) 1403 { 1404 $groupinfo['title'] = $lang->$group_lang_var; 1405 } 1406 1407 $groupinfo['title'] = htmlspecialchars_uni($groupinfo['title']); 1408 1409 // Page header 1410 $page->add_breadcrumb_item($groupinfo['title']); 1411 $page->output_header($lang->board_settings." - {$groupinfo['title']}"); 1412 } 1413 else 1414 { 1415 // All settings list 1416 // Cache groups 1417 $query = $db->simple_select("settinggroups", "*", "", array('order_by' => 'disporder')); 1418 while($group = $db->fetch_array($query)) 1419 { 1420 $cache_groups[$group['gid']] = $group; 1421 } 1422 1423 if(!$db->num_rows($query)) 1424 { 1425 $page->output_error($lang->error_invalid_gid2); 1426 } 1427 1428 // Cache settings 1429 $query = $db->simple_select("settings", "*", "", array('order_by' => 'disporder')); 1430 while($setting = $db->fetch_array($query)) 1431 { 1432 $cache_settings[$setting['gid']][$setting['sid']] = $setting; 1433 } 1434 1435 // Page header 1436 $page->add_breadcrumb_item($lang->show_all_settings); 1437 $page->output_header($lang->board_settings." - {$lang->show_all_settings}"); 1438 } 1439 1440 // Build individual forms as per settings group 1441 foreach($cache_groups as $groupinfo) 1442 { 1443 $form = new Form("index.php?module=config-settings&action=change", "post", "change"); 1444 echo $form->generate_hidden_field("gid", $groupinfo['gid']); 1445 $buttons = array($form->generate_submit_button($lang->save_settings)); 1446 $group_lang_var = "setting_group_{$groupinfo['name']}"; 1447 if(isset($lang->$group_lang_var)) 1448 { 1449 $groupinfo['title'] = $lang->$group_lang_var; 1450 } 1451 1452 $groupinfo['title'] = htmlspecialchars_uni($groupinfo['title']); 1453 1454 $form_container = new FormContainer($groupinfo['title']); 1455 1456 if(empty($cache_settings[$groupinfo['gid']])) 1457 { 1458 $form_container->output_cell($lang->error_no_settings_found); 1459 $form_container->construct_row(); 1460 1461 $form_container->end(); 1462 echo '<br />'; 1463 1464 continue; 1465 } 1466 1467 foreach($cache_settings[$groupinfo['gid']] as $setting) 1468 { 1469 $setting['name'] = htmlspecialchars_uni($setting['name']); 1470 1471 $options = ""; 1472 $type = explode("\n", $setting['optionscode']); 1473 $type[0] = trim($type[0]); 1474 $element_name = "upsetting[{$setting['name']}]"; 1475 $element_id = "setting_{$setting['name']}"; 1476 if($type[0] == "text" || $type[0] == "") 1477 { 1478 $setting_code = $form->generate_text_box($element_name, $setting['value'], array('id' => $element_id)); 1479 } 1480 else if($type[0] == "numeric") 1481 { 1482 $field_options = array('id' => $element_id); 1483 if(count($type) > 1) 1484 { 1485 for($i=1; $i < count($type); $i++) 1486 { 1487 $optionsexp = explode("=", $type[$i]); 1488 $opt = array_map('trim', $optionsexp); 1489 if(in_array($opt[0], array('min', 'max', 'step'))) 1490 { 1491 if($opt[0] != 'step' || $opt[1] != 'any') 1492 { 1493 $opt[1] = (float)$opt[1]; 1494 } 1495 $field_options[$opt[0]] = $opt[1]; 1496 } 1497 } 1498 } 1499 $setting_code = $form->generate_numeric_field($element_name, $setting['value'], $field_options); 1500 } 1501 else if($type[0] == "textarea") 1502 { 1503 $setting_code = $form->generate_text_area($element_name, $setting['value'], array('id' => $element_id)); 1504 } 1505 else if($type[0] == "yesno") 1506 { 1507 $setting_code = $form->generate_yes_no_radio($element_name, $setting['value'], true, array('id' => $element_id.'_yes', 'class' => $element_id), array('id' => $element_id.'_no', 'class' => $element_id)); 1508 } 1509 else if($type[0] == "onoff") 1510 { 1511 $setting_code = $form->generate_on_off_radio($element_name, $setting['value'], true, array('id' => $element_id.'_on', 'class' => $element_id), array('id' => $element_id.'_off', 'class' => $element_id)); 1512 } 1513 else if($type[0] == "cpstyle") 1514 { 1515 $dir = @opendir(MYBB_ROOT.$config['admin_dir']."/styles"); 1516 1517 $folders = array(); 1518 while($folder = readdir($dir)) 1519 { 1520 if($folder != "." && $folder != ".." && @file_exists(MYBB_ROOT.$config['admin_dir']."/styles/$folder/main.css")) 1521 { 1522 $folders[$folder] = ucfirst($folder); 1523 } 1524 } 1525 closedir($dir); 1526 ksort($folders); 1527 $setting_code = $form->generate_select_box($element_name, $folders, $setting['value'], array('id' => $element_id)); 1528 } 1529 else if($type[0] == "language") 1530 { 1531 $languages = $lang->get_languages(); 1532 $setting_code = $form->generate_select_box($element_name, $languages, $setting['value'], array('id' => $element_id)); 1533 } 1534 else if($type[0] == "adminlanguage") 1535 { 1536 $languages = $lang->get_languages(1); 1537 $setting_code = $form->generate_select_box($element_name, $languages, $setting['value'], array('id' => $element_id)); 1538 } 1539 else if($type[0] == "passwordbox") 1540 { 1541 $setting_code = $form->generate_password_box($element_name, $setting['value'], array('id' => $element_id)); 1542 } 1543 else if($type[0] == "php") 1544 { 1545 $setting['optionscode'] = substr($setting['optionscode'], 3); 1546 eval("\$setting_code = \"".$setting['optionscode']."\";"); 1547 } 1548 else if($type[0] == "forumselect") 1549 { 1550 $selected_values = ''; 1551 if($setting['value'] != '' && $setting['value'] != -1) 1552 { 1553 $selected_values = explode(',', (string)$setting['value']); 1554 1555 foreach($selected_values as &$value) 1556 { 1557 $value = (int)$value; 1558 } 1559 unset($value); 1560 } 1561 1562 $forum_checked = array('all' => '', 'custom' => '', 'none' => ''); 1563 if($setting['value'] == -1) 1564 { 1565 $forum_checked['all'] = 'checked="checked"'; 1566 } 1567 elseif($setting['value'] != '') 1568 { 1569 $forum_checked['custom'] = 'checked="checked"'; 1570 } 1571 else 1572 { 1573 $forum_checked['none'] = 'checked="checked"'; 1574 } 1575 1576 print_selection_javascript(); 1577 1578 $setting_code = " 1579 <dl style=\"margin-top: 0; margin-bottom: 0; width: 100%\"> 1580 <dt><label style=\"display: block;\"><input type=\"radio\" name=\"{$element_name}\" value=\"all\" {$forum_checked['all']} class=\"{$element_id}_forums_groups_check\" onclick=\"checkAction('{$element_id}');\" style=\"vertical-align: middle;\" /> <strong>{$lang->all_forums}</strong></label></dt> 1581 <dt><label style=\"display: block;\"><input type=\"radio\" name=\"{$element_name}\" value=\"custom\" {$forum_checked['custom']} class=\"{$element_id}_forums_groups_check\" onclick=\"checkAction('{$element_id}');\" style=\"vertical-align: middle;\" /> <strong>{$lang->select_forums}</strong></label></dt> 1582 <dd style=\"margin-top: 4px;\" id=\"{$element_id}_forums_groups_custom\" class=\"{$element_id}_forums_groups\"> 1583 <table cellpadding=\"4\"> 1584 <tr> 1585 <td valign=\"top\"><small>{$lang->forums_colon}</small></td> 1586 <td>".$form->generate_forum_select('select['.$setting['name'].'][]', $selected_values, array('id' => $element_id, 'multiple' => true, 'size' => 5))."</td> 1587 </tr> 1588 </table> 1589 </dd> 1590 <dt><label style=\"display: block;\"><input type=\"radio\" name=\"{$element_name}\" value=\"none\" {$forum_checked['none']} class=\"{$element_id}_forums_groups_check\" onclick=\"checkAction('{$element_id}');\" style=\"vertical-align: middle;\" /> <strong>{$lang->none}</strong></label></dt> 1591 </dl> 1592 <script type=\"text/javascript\"> 1593 checkAction('{$element_id}'); 1594 </script>"; 1595 } 1596 else if($type[0] == "forumselectsingle") 1597 { 1598 $selected_value = (int)$setting['value']; // No need to check if empty, int will give 0 1599 $setting_code = $form->generate_forum_select($element_name, $selected_value, array('id' => $element_id, 'main_option' => $lang->none)); 1600 } 1601 else if($type[0] == "groupselect") 1602 { 1603 $selected_values = ''; 1604 if($setting['value'] != '' && $setting['value'] != -1) 1605 { 1606 $selected_values = explode(',', (string)$setting['value']); 1607 1608 foreach($selected_values as &$value) 1609 { 1610 $value = (int)$value; 1611 } 1612 unset($value); 1613 } 1614 1615 $group_checked = array('all' => '', 'custom' => '', 'none' => ''); 1616 if($setting['value'] == -1) 1617 { 1618 $group_checked['all'] = 'checked="checked"'; 1619 } 1620 elseif($setting['value'] != '') 1621 { 1622 $group_checked['custom'] = 'checked="checked"'; 1623 } 1624 else 1625 { 1626 $group_checked['none'] = 'checked="checked"'; 1627 } 1628 1629 print_selection_javascript(); 1630 1631 $setting_code = " 1632 <dl style=\"margin-top: 0; margin-bottom: 0; width: 100%\"> 1633 <dt><label style=\"display: block;\"><input type=\"radio\" name=\"{$element_name}\" value=\"all\" {$group_checked['all']} class=\"{$element_id}_forums_groups_check\" onclick=\"checkAction('{$element_id}');\" style=\"vertical-align: middle;\" /> <strong>{$lang->all_groups}</strong></label></dt> 1634 <dt><label style=\"display: block;\"><input type=\"radio\" name=\"{$element_name}\" value=\"custom\" {$group_checked['custom']} class=\"{$element_id}_forums_groups_check\" onclick=\"checkAction('{$element_id}');\" style=\"vertical-align: middle;\" /> <strong>{$lang->select_groups}</strong></label></dt> 1635 <dd style=\"margin-top: 4px;\" id=\"{$element_id}_forums_groups_custom\" class=\"{$element_id}_forums_groups\"> 1636 <table cellpadding=\"4\"> 1637 <tr> 1638 <td valign=\"top\"><small>{$lang->groups_colon}</small></td> 1639 <td>".$form->generate_group_select('select['.$setting['name'].'][]', $selected_values, array('id' => $element_id, 'multiple' => true, 'size' => 5))."</td> 1640 </tr> 1641 </table> 1642 </dd> 1643 <dt><label style=\"display: block;\"><input type=\"radio\" name=\"{$element_name}\" value=\"none\" {$group_checked['none']} class=\"{$element_id}_forums_groups_check\" onclick=\"checkAction('{$element_id}');\" style=\"vertical-align: middle;\" /> <strong>{$lang->none}</strong></label></dt> 1644 </dl> 1645 <script type=\"text/javascript\"> 1646 checkAction('{$element_id}'); 1647 </script>"; 1648 } 1649 else if($type[0] == "groupselectsingle") 1650 { 1651 $selected_value = (int)$setting['value']; // No need to check if empty, int will give 0 1652 $setting_code = $form->generate_group_select($element_name, $selected_value, array('id' => $element_id, 'main_option' => $lang->none)); 1653 } 1654 else if($type[0] == "prefixselect") 1655 { 1656 $selected_values = ''; 1657 if($setting['value'] != '' && $setting['value'] != -1) 1658 { 1659 $selected_values = explode(',', (string)$setting['value']); 1660 foreach($selected_values as &$value) 1661 { 1662 $value = (int)$value; 1663 } 1664 unset($value); 1665 } 1666 $prefix_checked = array('all' => '', 'custom' => '', 'none' => ''); 1667 if($setting['value'] == -1) 1668 { 1669 $prefix_checked['all'] = 'checked="checked"'; 1670 } 1671 elseif($setting['value'] != '') 1672 { 1673 $prefix_checked['custom'] = 'checked="checked"'; 1674 } 1675 else 1676 { 1677 $prefix_checked['none'] = 'checked="checked"'; 1678 } 1679 print_selection_javascript(); 1680 $setting_code = " 1681 <dl style=\"margin-top: 0; margin-bottom: 0; width: 100%\"> 1682 <dt><label style=\"display: block;\"><input type=\"radio\" name=\"{$element_name}\" value=\"all\" {$prefix_checked['all']} class=\"{$element_id}_forums_groups_check\" onclick=\"checkAction('{$element_id}');\" style=\"vertical-align: middle;\" /> <strong>{$lang->all_prefix}</strong></label></dt> 1683 <dt><label style=\"display: block;\"><input type=\"radio\" name=\"{$element_name}\" value=\"custom\" {$prefix_checked['custom']} class=\"{$element_id}_forums_groups_check\" onclick=\"checkAction('{$element_id}');\" style=\"vertical-align: middle;\" /> <strong>{$lang->select_prefix}</strong></label></dt> 1684 <dd style=\"margin-top: 4px;\" id=\"{$element_id}_forums_groups_custom\" class=\"{$element_id}_forums_groups\"> 1685 <table cellpadding=\"4\"> 1686 <tr> 1687 <td valign=\"top\"><small>{$lang->prefix_colon}</small></td> 1688 <td>".$form->generate_prefix_select('select['.$setting['name'].'][]', $selected_values, array('id' => $element_id, 'multiple' => true, 'size' => 5))."</td> 1689 </tr> 1690 </table> 1691 </dd> 1692 <dt><label style=\"display: block;\"><input type=\"radio\" name=\"{$element_name}\" value=\"none\" {$prefix_checked['none']} class=\"{$element_id}_forums_groups_check\" onclick=\"checkAction('{$element_id}');\" style=\"vertical-align: middle;\" /> <strong>{$lang->none}</strong></label></dt> 1693 </dl> 1694 <script type=\"text/javascript\"> 1695 checkAction('{$element_id}'); 1696 </script>"; 1697 } 1698 else 1699 { 1700 $typecount = count($type); 1701 1702 if($type[0] == 'checkbox') 1703 { 1704 $multivalue = explode(',', $setting['value']); 1705 } 1706 1707 $option_list = array(); 1708 for($i = 0; $i < $typecount; $i++) 1709 { 1710 $optionsexp = explode("=", $type[$i]); 1711 if(!isset($optionsexp[1])) 1712 { 1713 continue; 1714 } 1715 $title_lang = "setting_{$setting['name']}_{$optionsexp[0]}"; 1716 if(isset($lang->$title_lang)) 1717 { 1718 $optionsexp[1] = $lang->$title_lang; 1719 } 1720 1721 if($type[0] == "select") 1722 { 1723 $option_list[$optionsexp[0]] = htmlspecialchars_uni($optionsexp[1]); 1724 } 1725 else if($type[0] == "radio") 1726 { 1727 if($setting['value'] == $optionsexp[0]) 1728 { 1729 $option_list[$i] = $form->generate_radio_button($element_name, $optionsexp[0], htmlspecialchars_uni($optionsexp[1]), array('id' => $element_id.'_'.$i, "checked" => 1, 'class' => $element_id)); 1730 } 1731 else 1732 { 1733 $option_list[$i] = $form->generate_radio_button($element_name, $optionsexp[0], htmlspecialchars_uni($optionsexp[1]), array('id' => $element_id.'_'.$i, 'class' => $element_id)); 1734 } 1735 } 1736 else if($type[0] == "checkbox") 1737 { 1738 if(in_array($optionsexp[0], $multivalue)) 1739 { 1740 $option_list[$i] = $form->generate_check_box("{$element_name}[]", $optionsexp[0], htmlspecialchars_uni($optionsexp[1]), array('id' => $element_id.'_'.$i, "checked" => 1, 'class' => $element_id)); 1741 } 1742 else 1743 { 1744 $option_list[$i] = $form->generate_check_box("{$element_name}[]", $optionsexp[0], htmlspecialchars_uni($optionsexp[1]), array('id' => $element_id.'_'.$i, 'class' => $element_id)); 1745 } 1746 } 1747 } 1748 1749 if($type[0] == "select") 1750 { 1751 $setting_code = $form->generate_select_box($element_name, $option_list, $setting['value'], array('id' => $element_id)); 1752 } 1753 else 1754 { 1755 $setting_code = implode("<br />", $option_list); 1756 1757 if($type[0] == 'checkbox') 1758 { 1759 $setting_code .= $form->generate_hidden_field("isvisible_{$setting['name']}", 1); 1760 } 1761 } 1762 } 1763 1764 // Do we have a custom language variable for this title or description? 1765 $title_lang = "setting_".$setting['name']; 1766 $desc_lang = $title_lang."_desc"; 1767 if(isset($lang->$title_lang)) 1768 { 1769 $setting['title'] = $lang->$title_lang; 1770 } 1771 if(isset($lang->$desc_lang)) 1772 { 1773 $setting['description'] = $lang->$desc_lang; 1774 } 1775 $form_container->output_row(htmlspecialchars_uni($setting['title']), $setting['description'], $setting_code, '', array(), array('id' => 'row_'.$element_id)); 1776 } 1777 $form_container->end(); 1778 1779 $form->output_submit_wrapper($buttons); 1780 $form->end(); 1781 echo '<br />'; 1782 } 1783 1784 print_setting_peekers(); 1785 1786 if(!isset($mybb->input['ajax_search'])) 1787 { 1788 $page->output_footer(); 1789 } 1790 } 1791 1792 if(!$mybb->input['action']) 1793 { 1794 $plugins->run_hooks("admin_config_settings_start"); 1795 1796 $page->extra_header .= <<<EOF 1797 <script type="text/javascript"> 1798 <!-- 1799 lang.searching = "{$lang->searching}"; 1800 lang.search_error = "{$lang->search_error}"; 1801 lang.search_done = "{$lang->search_done}"; 1802 // --> 1803 </script> 1804 EOF; 1805 1806 $page->output_header($lang->board_settings); 1807 if(isset($message)) 1808 { 1809 $page->output_inline_message($message); 1810 } 1811 1812 $sub_tabs['change_settings'] = array( 1813 'title' => $lang->change_settings, 1814 'link' => "index.php?module=config-settings", 1815 'description' => $lang->change_settings_desc 1816 ); 1817 1818 $sub_tabs['add_setting'] = array( 1819 'title' => $lang->add_new_setting, 1820 'link' => "index.php?module=config-settings&action=add" 1821 ); 1822 1823 $sub_tabs['add_setting_group'] = array( 1824 'title' => $lang->add_new_setting_group, 1825 'link' => "index.php?module=config-settings&action=addgroup" 1826 ); 1827 1828 $sub_tabs['modify_setting'] = array( 1829 'title' => $lang->modify_existing_settings, 1830 'link' => "index.php?module=config-settings&action=manage", 1831 ); 1832 1833 $page->output_nav_tabs($sub_tabs, 'change_settings'); 1834 1835 // Search form 1836 echo "<div style=\"text-align: right; margin-bottom: 3px;\">"; 1837 $search = new Form("index.php", 'get', 'settings_search', 0, 'settings_search'); 1838 echo $search->generate_hidden_field('module', 'config/settings'); 1839 echo $search->generate_hidden_field('action', 'change'); 1840 echo $search->generate_text_box('search', $lang->settings_search, array('id' => 'search', 'class' => 'search_default field150 field_small')); 1841 echo "<input type=\"submit\" class=\"search_button\" value=\"{$lang->search}\" />"; 1842 $search->end(); 1843 echo "</div>\n"; 1844 1845 echo '<div id="search_results"> </div><div id="group_list">'; 1846 $table = new Table; 1847 $table->construct_header($lang->setting_groups); 1848 1849 switch($db->type) 1850 { 1851 case "pgsql": 1852 $query = $db->query(" 1853 SELECT g.*, COUNT(s.sid) AS settingcount 1854 FROM ".TABLE_PREFIX."settinggroups g 1855 LEFT JOIN ".TABLE_PREFIX."settings s ON (s.gid=g.gid) 1856 WHERE g.isdefault = 1 1857 GROUP BY ".$db->build_fields_string("settinggroups", "g.")." 1858 ORDER BY g.disporder 1859 "); 1860 break; 1861 default: 1862 $query = $db->query(" 1863 SELECT g.*, COUNT(s.sid) AS settingcount 1864 FROM ".TABLE_PREFIX."settinggroups g 1865 LEFT JOIN ".TABLE_PREFIX."settings s ON (s.gid=g.gid) 1866 WHERE g.isdefault = 1 1867 GROUP BY g.gid 1868 ORDER BY g.disporder 1869 "); 1870 } 1871 while($group = $db->fetch_array($query)) 1872 { 1873 $group_lang_var = "setting_group_{$group['name']}"; 1874 if(isset($lang->$group_lang_var)) 1875 { 1876 $group_title = htmlspecialchars_uni($lang->$group_lang_var); 1877 } 1878 else 1879 { 1880 $group_title = htmlspecialchars_uni($group['title']); 1881 } 1882 1883 $group_desc_lang_var = "setting_group_{$group['name']}_desc"; 1884 if(isset($lang->$group_desc_lang_var)) 1885 { 1886 $group_desc = htmlspecialchars_uni($lang->$group_desc_lang_var); 1887 } 1888 else 1889 { 1890 $group_desc = htmlspecialchars_uni($group['description']); 1891 } 1892 1893 $table->construct_cell("<strong><a href=\"index.php?module=config-settings&action=change&gid={$group['gid']}\">{$group_title}</a></strong> ({$group['settingcount']} {$lang->bbsettings})<br /><small>{$group_desc}</small>"); 1894 $table->construct_row(); 1895 } 1896 1897 $table->output("<span style=\"float: right;\"><small><a href=\"index.php?module=config-settings&action=change\">{$lang->show_all_settings}</a></small></span>{$lang->board_settings}"); 1898 1899 // Plugin Settings 1900 switch($db->type) 1901 { 1902 case "pgsql": 1903 $query = $db->query(" 1904 SELECT g.*, COUNT(s.sid) AS settingcount 1905 FROM ".TABLE_PREFIX."settinggroups g 1906 LEFT JOIN ".TABLE_PREFIX."settings s ON (s.gid=g.gid) 1907 WHERE g.isdefault <> 1 1908 GROUP BY ".$db->build_fields_string("settinggroups", "g.")." 1909 ORDER BY g.disporder 1910 "); 1911 break; 1912 default: 1913 $query = $db->query(" 1914 SELECT g.*, COUNT(s.sid) AS settingcount 1915 FROM ".TABLE_PREFIX."settinggroups g 1916 LEFT JOIN ".TABLE_PREFIX."settings s ON (s.gid=g.gid) 1917 WHERE g.isdefault <> 1 1918 GROUP BY g.gid 1919 ORDER BY g.disporder 1920 "); 1921 } 1922 1923 if($db->num_rows($query)) 1924 { 1925 $table = new Table; 1926 $table->construct_header($lang->setting_groups); 1927 1928 while($group = $db->fetch_array($query)) 1929 { 1930 $group_lang_var = "setting_group_{$group['name']}"; 1931 if(isset($lang->$group_lang_var)) 1932 { 1933 $group_title = htmlspecialchars_uni($lang->$group_lang_var); 1934 } 1935 else 1936 { 1937 $group_title = htmlspecialchars_uni($group['title']); 1938 } 1939 1940 $group_desc_lang_var = "setting_group_{$group['name']}_desc"; 1941 if(isset($lang->$group_desc_lang_var)) 1942 { 1943 $group_desc = htmlspecialchars_uni($lang->$group_desc_lang_var); 1944 } 1945 else 1946 { 1947 $group_desc = htmlspecialchars_uni($group['description']); 1948 } 1949 1950 $table->construct_cell("<strong><a href=\"index.php?module=config-settings&action=change&gid={$group['gid']}\">{$group_title}</a></strong> ({$group['settingcount']} {$lang->bbsettings})<br /><small>{$group_desc}</small>"); 1951 $table->construct_row(); 1952 } 1953 1954 $table->output($lang->plugin_settings); 1955 } 1956 1957 echo '</div>'; 1958 1959 echo ' 1960 <script type="text/javascript" src="./jscripts/search.js?ver=1821"></script> 1961 <script type="text/javascript"> 1962 //<!-- 1963 $(function(){ 1964 SettingSearch.init("'.$lang->settings_search.'","'.$lang->error_ajax_unknown.'"); 1965 }); 1966 //--> 1967 </script>'; 1968 1969 print_setting_peekers(); 1970 $page->output_footer(); 1971 } 1972 1973 /** 1974 * Print all the peekers for all of the default settings 1975 */ 1976 function print_setting_peekers() 1977 { 1978 global $plugins; 1979 1980 $peekers = array( 1981 'new Peeker($(".setting_boardclosed"), $("#row_setting_boardclosed_reason"), 1, true)', 1982 'new Peeker($(".setting_gzipoutput"), $("#row_setting_gziplevel"), 1, true)', 1983 'new Peeker($(".setting_useerrorhandling"), $("#row_setting_errorlogmedium, #row_setting_errorloglocation"), 1, true)', 1984 'new Peeker($("#setting_subforumsindex"), $("#row_setting_subforumsstatusicons"), /[^0+|]/, false)', 1985 'new Peeker($(".setting_showsimilarthreads"), $("#row_setting_similarityrating, #row_setting_similarlimit"), 1, true)', 1986 'new Peeker($(".setting_disableregs"), $("#row_setting_regtype, #row_setting_securityquestion, #row_setting_regtime, #row_setting_allowmultipleemails, #row_setting_hiddencaptchaimage, #row_setting_betweenregstime"), 0, true)', 1987 'new Peeker($(".setting_hiddencaptchaimage"), $("#row_setting_hiddencaptchaimagefield"), 1, true)', 1988 'new Peeker($("#setting_failedlogincount"), $("#row_setting_failedlogintime, #row_setting_failedlogintext"), /[^0+|]/, false)', 1989 'new Peeker($(".setting_postfloodcheck"), $("#row_setting_postfloodsecs"), 1, true)', 1990 'new Peeker($("#setting_postmergemins"), $("#row_setting_postmergefignore, #row_setting_postmergeuignore, #row_setting_postmergesep"), /[^0+|]/, false)', 1991 'new Peeker($(".setting_enablememberlist"), $("#row_setting_membersperpage, #row_setting_default_memberlist_sortby, #row_setting_default_memberlist_order, #row_setting_memberlistmaxavatarsize"), 1, true)', 1992 'new Peeker($(".setting_enablereputation"), $("#row_setting_repsperpage, #row_setting_posrep, #row_setting_neurep, #row_setting_negrep, #row_setting_postrep, #row_setting_multirep, #row_setting_maxreplength, #row_setting_minreplength"), 1, true)', 1993 'new Peeker($(".setting_enablewarningsystem"), $("#row_setting_allowcustomwarnings, #row_setting_canviewownwarning, #row_setting_maxwarningpoints, #row_setting_allowanonwarningpms"), 1, true)', 1994 'new Peeker($(".setting_enablepms"), $("#row_setting_pmsallowhtml, #row_setting_pmsallowmycode, #row_setting_pmsallowsmilies, #row_setting_pmsallowimgcode, #row_setting_pmsallowvideocode, #row_setting_pmquickreply, #row_setting_pmfloodsecs, #row_setting_showpmip, #row_setting_maxpmquotedepth"), 1, true)', 1995 'new Peeker($(".setting_smilieinserter"), $("#row_setting_smilieinsertertot, #row_setting_smilieinsertercols"), 1, true)', 1996 'new Peeker($("#setting_mail_handler"), $("#row_setting_smtp_host, #row_setting_smtp_port, #row_setting_smtp_user, #row_setting_smtp_pass, #row_setting_secure_smtp"), "smtp", false)', 1997 'new Peeker($("#setting_mail_handler"), $("#row_setting_mail_parameters"), "mail", false)', 1998 'new Peeker($("#setting_captchaimage"), $("#row_setting_recaptchapublickey, #row_setting_recaptchaprivatekey"), /(4|5|8)/, false)', 1999 'new Peeker($("#setting_captchaimage"), $("#row_setting_recaptchascore"), /(8)/, false)', 2000 'new Peeker($("#setting_captchaimage"), $("#row_setting_hcaptchapublickey, #row_setting_hcaptchaprivatekey"), /(6|7)/, false)', 2001 'new Peeker($("#setting_captchaimage"), $("#row_setting_hcaptchaprivatekey, #row_setting_hcaptchaprivatekey"), /(6|7)/, false)', 2002 'new Peeker($("#setting_captchaimage"), $("#row_setting_hcaptchatheme"), 6, false)', 2003 'new Peeker($("#setting_captchaimage"), $("#row_setting_hcaptchasize"), 6, false)', 2004 'new Peeker($(".setting_contact"), $("#row_setting_contact_guests, #row_setting_contact_badwords, #row_setting_contact_maxsubjectlength, #row_setting_contact_minmessagelength, #row_setting_contact_maxmessagelength"), 1, true)', 2005 'new Peeker($(".setting_enablepruning"), $("#row_setting_enableprunebyposts, #row_setting_pruneunactived, #row_setting_prunethreads"), 1, true)', 2006 'new Peeker($(".setting_enableprunebyposts"), $("#row_setting_prunepostcount, #row_setting_dayspruneregistered, #row_setting_prunepostcountall"), 1, true)', 2007 'new Peeker($(".setting_pruneunactived"), $("#row_setting_dayspruneunactivated"), 1, true)', 2008 'new Peeker($(".setting_statsenabled"), $("#row_setting_statscachetime, #row_setting_statslimit, #row_setting_statstopreferrer"), 1, true)', 2009 'new Peeker($(".setting_purgespammergroups_forums_groups_check"), $("#row_setting_purgespammerpostlimit, #row_setting_purgespammerbandelete, #row_setting_purgespammerapikey"), /^(?!none)/, true)', 2010 'new Peeker($(".setting_purgespammerbandelete"),$("#row_setting_purgespammerbangroup, #row_setting_purgespammerbanreason"), "ban", true)', 2011 'new Peeker($("#setting_maxloginattempts"), $("#row_setting_loginattemptstimeout"), /[^0+|]/, false)', 2012 'new Peeker($(".setting_bbcodeinserter"), $("#row_setting_partialmode, #row_setting_smilieinserter"), 1, true)', 2013 'new Peeker($(".setting_portal"), $("#row_setting_portal_announcementsfid, #row_setting_portal_showwelcome, #row_setting_portal_showpms, #row_setting_portal_showstats, #row_setting_portal_showwol, #row_setting_portal_showsearch, #row_setting_portal_showdiscussions"), 1, true)', 2014 'new Peeker($(".setting_portal_announcementsfid_forums_groups_check"), $("#row_setting_portal_numannouncements"), /^(?!none)/, true)', 2015 'new Peeker($(".setting_portal_showdiscussions"), $("#row_setting_portal_showdiscussionsnum, #row_setting_portal_excludediscussion"), 1, true)', 2016 'new Peeker($(".setting_enableattachments"), $("#row_setting_maxattachments, #row_setting_attachthumbnails"), 1, true)', 2017 'new Peeker($(".setting_attachthumbnails"), $("#row_setting_attachthumbh, #row_setting_attachthumbw"), "yes", true)', 2018 'new Peeker($(".setting_showbirthdays"), $("#row_setting_showbirthdayspostlimit"), 1, true)', 2019 'new Peeker($("#setting_betweenregstime"), $("#row_setting_maxregsbetweentime"), /[^0+|]/, false)', 2020 'new Peeker($(".setting_usecdn"), $("#row_setting_cdnurl, #row_setting_cdnpath"), 1, true)', 2021 'new Peeker($("#setting_errorlogmedium"), $("#row_setting_errorloglocation"), /^(log|both)/, false)', 2022 'new Peeker($(".setting_sigmycode"), $("#row_setting_sigcountmycode, #row_setting_sigimgcode"), 1, true)', 2023 'new Peeker($(".setting_pmsallowmycode"), $("#row_setting_pmsallowimgcode, #row_setting_pmsallowvideocode"), 1, true)', 2024 'new Peeker($(".setting_enableshowteam"), $("#row_setting_showaddlgroups, #row_setting_showgroupleaders"), 1, true)', 2025 'new Peeker($(".setting_usereferrals"), $("#row_setting_referralsperpage"), 1, true)', 2026 ); 2027 2028 $peekers = $plugins->run_hooks("admin_settings_print_peekers", $peekers); 2029 2030 $setting_peekers = implode("\n ", $peekers); 2031 2032 echo '<script type="text/javascript" src="./jscripts/peeker.js?ver=1821"></script> 2033 <script type="text/javascript"> 2034 $(function() { 2035 ' . $setting_peekers . ' 2036 }); 2037 </script>'; 2038 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
2005 - 2021 © MyBB.de | Alle Rechte vorbehalten! | Sponsor: netcup | Cross-referenced by PHPXref |