Admin Setting functions | > Module written by Matt Mecham | > Date started: 20th March 2002 | | > Module Version Number: 1.0.0 | > DBA Checked: Tue 25th May 2004 +-------------------------------------------------------------------------- */ if ( ! defined( 'IN_ACP' ) ) { print "

Incorrect access

You cannot access this file directly. If you have recently upgraded, make sure you upgraded 'admin.php'."; exit(); } class ad_settings { var $base_url; var $in_group = array(); function auto_run() { global $ibforums, $DB, $std, $forums, $HTTP_POST_VARS; //----------------------------------------- // Kill globals - globals bad, Homer good. //----------------------------------------- $tmp_in = array_merge( $_GET, $_POST, $_COOKIE ); foreach ( $tmp_in as $k => $v ) { unset($$k); } //----------------------------------------- $DB->sql_get_version(); $this->true_version = $DB->true_version; $this->mysql_version = $DB->mysql_version; switch($ibforums->input['code']) { case 'settinggroup_resync': $this->settinggroup_resync(); break; case 'settinggroup_delete': $this->settinggroup_delete(); break; case 'settinggroup_new': $this->settinggroup_form('add'); break; case 'settinggroup_showedit': $this->settinggroup_form('edit'); break; case 'settinggroup_add': $this->settinggroup_save('add'); break; case 'settinggroup_edit': $this->settinggroup_save('edit'); break; case 'settingnew': $this->setting_form('add'); break; case 'setting_showedit': $this->setting_form('edit'); break; case 'setting_add': $this->setting_save('add'); break; case 'setting_edit': $this->setting_save('edit'); break; case 'setting_view': $this->setting_view(); break; case 'setting_delete': $this->setting_delete(); break; case 'setting_revert': $this->setting_revert(); break; case 'setting_update': $this->setting_update(); break; case 'setting_allexport': $this->setting_allexport(); break; case 'findsetting': $this->setting_findgroup(); break; case 'setting_someexport_start': $this->setting_someexport_start(); break; case 'setting_someexport_complete': $this->setting_someexport_complete(); break; case 'settings_do_import': $this->settings_do_import(); break; //----------------------------------------- // Full text //----------------------------------------- case 'dofulltext': $this->do_fulltext(); break; case 'phpinfo': phpinfo(); exit; //----------------------------------------- default: $this->setting_start(); break; } } //----------------------------------------- // // IMPORT PARTIAL SETTINGS // //----------------------------------------- function settings_do_import() { global $ibforums, $DB, $std; $updated = 0; $inserted = 0; $need_update = array(); if ( $_FILES['FILE_UPLOAD']['name'] == "" or ! $_FILES['FILE_UPLOAD']['name'] or ($_FILES['FILE_UPLOAD']['name'] == "none") ) { //----------------------------------------- // check and load from server //----------------------------------------- if ( ! $ibforums->input['file_location'] ) { $ibforums->main_msg = "No upload file was found and no filename was specified."; $this->import(); } if ( ! file_exists( ROOT_PATH . $ibforums->input['file_location'] ) ) { $ibforums->main_msg = "Could not find the file to open at: " . ROOT_PATH . $ibforums->input['file_location']; $this->import(); } if ( preg_match( "#\.gz$#", $ibforums->input['file_location'] ) ) { if ( $FH = @gzopen( ROOT_PATH.$ibforums->input['file_location'], 'rb' ) ) { while ( ! @gzeof( $FH ) ) { $content .= @gzread( $FH, 1024 ); } @gzclose( $FH ); } } else { if ( $FH = @fopen( ROOT_PATH.$ibforums->input['file_location'], 'rb' ) ) { $content = @fread( $FH, filesize(ROOT_PATH.$ibforums->input['lang_location']) ); @fclose( $FH ); } } } else { //----------------------------------------- // Get uploaded schtuff //----------------------------------------- $tmp_name = $_FILES['FILE_UPLOAD']['name']; $tmp_name = preg_replace( "#\.gz$#", "", $tmp_name ); $content = $ibforums->admin->import_xml( $tmp_name ); } //----------------------------------------- // Get current settings. //----------------------------------------- $cur_settings = array(); $DB->simple_construct( array( 'select' => 'conf_id, conf_key', 'from' => 'conf_settings', 'order' => 'conf_id' ) ); $DB->simple_exec(); while ( $r = $DB->fetch_row() ) { $cur_settings[ $r['conf_key'] ] = $r['conf_id']; } //----------------------------------------- // Get xml mah-do-dah //----------------------------------------- require( KERNEL_PATH.'class_xml.php' ); $xml = new class_xml(); //----------------------------------------- // Unpack the datafile //----------------------------------------- $xml->xml_parse_document( $content ); //----------------------------------------- // pArse //----------------------------------------- $fields = array( 'conf_title' , 'conf_description', 'conf_group' , 'conf_type' , 'conf_key' , 'conf_default', 'conf_extra' , 'conf_evalphp' , 'conf_protected', 'conf_position', 'conf_start_group', 'conf_end_group', 'conf_help_key', 'conf_add_cache' ); foreach( $xml->xml_array['settingexport']['settinggroup']['setting'] as $id => $entry ) { $newrow = array(); //----------------------------------------- // Make PHP slashes safe //----------------------------------------- $entry['conf_evalphp']['VALUE'] = str_replace( '\\', '\\\\', $entry['conf_evalphp']['VALUE'] ); foreach( $fields as $f ) { $newrow[$f] = $entry[ $f ]['VALUE']; } if ( $cur_settings[ $entry['conf_key']['VALUE'] ] ) { //----------------------------------------- // Update //----------------------------------------- $DB->do_update( 'conf_settings', $newrow, 'conf_id='.$cur_settings[ $entry['conf_key']['VALUE'] ] ); $updated++; } else { //----------------------------------------- // INSERT //----------------------------------------- $DB->do_insert( 'conf_settings', $newrow ); $inserted++; } $need_update[ $entry['conf_group']['VALUE'] ] = $entry['conf_group']['VALUE']; } //----------------------------------------- // Update group counts... //----------------------------------------- if ( count( $need_update ) ) { foreach( $need_update as $id ) { $conf = $DB->simple_exec_query( array( 'select' => 'count(*) as count', 'from' => 'conf_settings', 'where' => 'conf_group='.$id ) ); $count = intval($conf['count']); $DB->do_update( 'conf_settings_titles', array( 'conf_title_count' => $count ), 'conf_title_id='.$id ); } } //----------------------------------------- // Resync //----------------------------------------- $this->setting_rebuildcache(); $ibforums->main_msg = "$updated settings updated $inserted settings inserted"; $this->setting_start(); } //----------------------------------------- // // EXPORT Some Settings. DO IT NOW YES // //----------------------------------------- function setting_someexport_complete() { global $ibforums, $DB, $std; $ids = array(); //----------------------------------------- // get ids... //----------------------------------------- foreach ($ibforums->input as $key => $value) { if ( preg_match( "/^id_(\d+)$/", $key, $match ) ) { if ($ibforums->input[$match[0]]) { $ids[] = $match[1]; } } } //----------------------------------------- // Got any? //----------------------------------------- if ( ! count( $ids ) ) { $ibforums->main_msg = "You must select SOME settings to export!"; $this->setting_someexport_start(); } //----------------------------------------- // Get XML class //----------------------------------------- require_once( KERNEL_PATH.'class_xml.php' ); $xml = new class_xml(); $xml->xml_set_root( 'settingexport', array( 'exported' => time() ) ); //----------------------------------------- // Get groups //----------------------------------------- $xml->xml_add_group( 'settinggroup' ); $this->setting_get_groups(); $entry = array(); $DB->simple_construct( array( 'select' => '*', 'from' => 'conf_settings', 'where' => "conf_id IN (".implode(",",$ids).")", 'order' => 'conf_position, conf_title' ) ); $DB->simple_exec(); while ( $r = $DB->fetch_row() ) { $content = array(); $r['conf_value'] = ''; foreach( $r as $k => $v ) { $content[] = $xml->xml_build_simple_tag( $k, $v ); } $entry[] = $xml->xml_build_entry( 'setting', $content ); } $xml->xml_add_entry_to_group( 'settinggroup', $entry ); $xml->xml_format_document(); $doc = $xml->xml_document; //----------------------------------------- // Print to browser //----------------------------------------- $ibforums->admin->show_download( $doc, 'ipb_settings_partial.xml', '', 0 ); } //----------------------------------------- // // EXPORT Some Settings. Co-co-ca-choo // //----------------------------------------- function setting_someexport_start() { global $ibforums, $DB, $std; $ibforums->admin->page_title = "Export Selected System Settings"; $ibforums->admin->page_detail = "Check the box of the setting you wish to export."; //----------------------------------------- // start form //----------------------------------------- $ibforums->html .= $ibforums->adskin->start_form( array( 1 => array( 'code' , 'setting_someexport_complete' ), 2 => array( 'act' , 'op' ), ) ); $ibforums->html .= "
System Settings
"; $DB->simple_construct( array( 'select' => '*', 'from' => 'conf_settings', 'order' => 'conf_id' ) ); $DB->simple_exec(); $per_row = 3; $td_width = 100 / $per_row; $count = 0; $output = "\n"; while ( $r = $DB->fetch_row() ) { $count++; $class = $count == 2 ? 'tdrow2' : 'tdrow1'; $output .= ""; if ($count == $per_row ) { $output .= "\n\n"; $count = 0; } } if ( $count > 0 and $count != $per_row ) { for ($i = $count ; $i < $per_row ; ++$i) { $output .= "\n"; } $output .= ""; } $ibforums->html .= $output; $ibforums->html .= "
{$r['conf_key']} - {$r['conf_id']}
 
"; $ibforums->admin->output(); } //----------------------------------------- // // Find setting group (don't rely on IDs) // //----------------------------------------- function setting_findgroup() { global $ibforums, $DB, $std; if ( ! $ibforums->input['key'] ) { $this->setting_start(); } $DB->simple_construct( array( 'select' => '*', 'from' => 'conf_settings_titles' ) ); $DB->simple_exec(); while ( $r = $DB->fetch_row() ) { if ( strtolower( str_replace( " ", "", trim($r['conf_title_title']) ) ) == urldecode(trim($ibforums->input['key'])) ) { $std->boink_it( $ibforums->base_url.'&act=op&code=setting_view&conf_group='.$r['conf_title_id'] ); break; } } $this->setting_start(); } //----------------------------------------- // // Export all to to XML (DEV ONLY) // //----------------------------------------- function setting_allexport() { global $ibforums, $DB, $std; if ( ! IN_DEV ) { $this->setting_start(); } //----------------------------------------- // Get XML class //----------------------------------------- require_once( KERNEL_PATH.'class_xml.php' ); $xml = new class_xml(); $xml->xml_set_root( 'settingexport', array( 'exported' => time() ) ); //----------------------------------------- // Get groups //----------------------------------------- $xml->xml_add_group( 'settinggroup' ); $this->setting_get_groups(); $entry = array(); foreach( $this->setting_groups as $i => $r ) { $DB->simple_construct( array( 'select' => '*', 'from' => 'conf_settings', 'where' => "conf_group='{$r['conf_title_id']}'", 'order' => 'conf_position, conf_title' ) ); $DB->simple_exec(); while ( $r = $DB->fetch_row() ) { $content = array(); $r['conf_value'] = ''; foreach( $r as $k => $v ) { $content[] = $xml->xml_build_simple_tag( $k, $v ); } $entry[] = $xml->xml_build_entry( 'setting', $content ); } } $xml->xml_add_entry_to_group( 'settinggroup', $entry ); $xml->xml_format_document(); $doc = $xml->xml_document; //----------------------------------------- // Print to browser //----------------------------------------- $ibforums->admin->show_download( $doc, 'ipb_settings.xml', '', 0 ); } //----------------------------------------- // // Delete setting group // //----------------------------------------- function settinggroup_delete() { global $ibforums, $DB, $std; if ( $ibforums->input['id'] ) { $conf = $DB->simple_exec_query( array( 'select' => 'count(*) as count', 'from' => 'conf_settings', 'where' => 'conf_group='.$ibforums->input['id'] ) ); $count = intval($conf['count']); if ( $count > 0 ) { $ibforums->main_msg = "Cannot remove this setting group as it still contains active settings"; } else { $DB->simple_exec_query( array( 'delete' => 'conf_settings_titles', 'where' => 'conf_title_id='.$ibforums->input['id'] ) ); $ibforums->main_msg = "Setting Group Removed"; } } $this->setting_start(); } //----------------------------------------- // // Recount settings // //----------------------------------------- function settinggroup_resync() { global $ibforums, $DB, $std; if ( $ibforums->input['id'] ) { $conf = $DB->simple_exec_query( array( 'select' => 'count(*) as count', 'from' => 'conf_settings', 'where' => 'conf_group='.$ibforums->input['id'] ) ); $count = intval($conf['count']); $DB->do_update( 'conf_settings_titles', array( 'conf_title_count' => $count ), 'conf_title_id='.$ibforums->input['id'] ); } $this->setting_start(); } //----------------------------------------- // // New setting group form // //----------------------------------------- function settinggroup_form( $type='add' ) { global $ibforums, $DB, $std; $ibforums->admin->page_title = "System Configuration Settings"; $ibforums->admin->page_detail = "This section contains all the configuration options for your IPB."; if ( $type == 'add' ) { $formcode = 'settinggroup_add'; $title = "Create New Board Setting Group"; $button = "Create New Setting Group"; } else { $conf = $DB->simple_exec_query( array( 'select' => '*', 'from' => 'conf_settings_titles', 'where' => 'conf_title_id='.$ibforums->input['id'] ) ); if ( ! $conf['conf_title_id'] ) { $ibforums->main_msg = "No ID was passed, please try again."; $this->setting_start(); } $formcode = 'settinggroup_edit'; $title = "Edit Setting ".$conf['conf_title']; $button = "Save Changes"; } $ibforums->admin->page_detail = ' '; $ibforums->admin->page_title = $title; //----------------------------------------- // start form //----------------------------------------- $ibforums->html .= $ibforums->adskin->start_form( array( 1 => array( 'code' , $formcode ), 2 => array( 'act' , 'op' ), 3 => array( 'id' , $ibforums->input['id'] ), ) ); //----------------------------------------- // start table //----------------------------------------- $ibforums->adskin->td_header[] = array( "{none}" , "40%" ); $ibforums->adskin->td_header[] = array( "{none}" , "60%" ); //----------------------------------------- // um.. //----------------------------------------- $ibforums->html .= $ibforums->adskin->start_table( $title ); $ibforums->html .= $ibforums->adskin->add_td_row( array( "Setting Group title?" , $ibforums->adskin->form_input( 'conf_title_title', $_POST['conf_title_title'] ? $_POST['conf_title_title'] : $conf['conf_title_title'] ) ) ); $ibforums->html .= $ibforums->adskin->add_td_row( array( "Setting Group Description?" , $ibforums->adskin->form_textarea( 'conf_title_desc', $_POST['conf_title_desc'] ? $_POST['conf_title_desc'] : $conf['conf_title_desc'] ) ) ); //----------------------------------------- // er.... //----------------------------------------- if ( IN_DEV ) { $ibforums->html .= $ibforums->adskin->add_td_row( array( "Setting Group Keyword?
Used to pull this from the DB without relying on an ID
" , $ibforums->adskin->form_input( 'conf_title_keyword', $_POST['conf_title_keyword'] ? $_POST['conf_title_keyword'] : $conf['conf_title_keyword'] ) ) ); $ibforums->html .= $ibforums->adskin->add_td_row( array( "Hide from main settings list?" , $ibforums->adskin->form_yes_no( 'conf_title_noshow', $_POST['conf_title_noshow'] ? $_POST['conf_title_noshow'] : $conf['conf_title_noshow'] ) ) ); } $ibforums->html .= $ibforums->adskin->end_form( $button ); $ibforums->html .= $ibforums->adskin->end_table(); $ibforums->admin->output(); } //----------------------------------------- // Settings Group Save Form //----------------------------------------- function settinggroup_save($type='add') { global $ibforums, $DB, $std; if ( $type == 'edit' ) { if ( ! $ibforums->input['id'] ) { $ibforums->main_msg = "No ID was passed, please try again"; $this->setting_form(); } } //----------------------------------------- // check... //----------------------------------------- $array = array( 'conf_title_title' => $ibforums->input['conf_title_title'], 'conf_title_desc' => $std->txt_safeslashes( $_POST['conf_title_desc'] ), 'conf_title_keyword' => $std->txt_safeslashes( $_POST['conf_title_keyword'] ), 'conf_title_noshow' => $ibforums->input['conf_title_noshow'], ); if ( $type == 'add' ) { $DB->do_insert( 'conf_settings_titles', $array ); $ibforums->main_msg = 'New Setting Group Added'; } else { $DB->do_update( 'conf_settings_titles', $array, 'conf_title_id='.$ibforums->input['id'] ); $ibforums->main_msg = 'Setting Group Edited'; } $this->setting_rebuildcache(); $this->setting_start(); } //----------------------------------------- // // New setting form // //----------------------------------------- function setting_form( $type='add' ) { global $ibforums, $DB, $std; $ibforums->admin->page_title = "System Configuration Settings"; $ibforums->admin->page_detail = "This section contains all the configuration options for your IPB."; if ( $type == 'add' ) { $formcode = 'setting_add'; $title = "Create New Board Setting"; $button = "Create New Setting"; $conf = array( 'conf_group' => $ibforums->input['conf_group'], 'conf_add_cache' => 1 ); if ( IN_DEV ) { $conf['conf_protected'] = 1; } if ( $ibforums->input['conf_group'] ) { $max = $DB->simple_exec_query( array( 'select' => 'max(conf_position) as max', 'from' => 'conf_settings', 'where' => 'conf_group='.$ibforums->input['conf_group'] ) ); } else { $max = $DB->simple_exec_query( array( 'select' => 'max(conf_position) as max', 'from' => 'conf_settings' ) ); } $conf['conf_position'] = $max['max'] + 1; } else { $conf = $DB->simple_exec_query( array( 'select' => '*', 'from' => 'conf_settings', 'where' => 'conf_id='.$ibforums->input['id'] ) ); if ( ! $conf['conf_id'] ) { $ibforums->main_msg = "No ID was passed, please try again."; $this->setting_start(); } $formcode = 'setting_edit'; $title = "Edit Setting ".$conf['conf_title']; $button = "Save Changes"; } $ibforums->admin->page_detail = ' '; $ibforums->admin->page_title = $title; //----------------------------------------- // Get groups //----------------------------------------- $this->setting_get_groups(); $groups = array(); foreach( $this->setting_groups as $i => $r ) { $groups[] = array( $r['conf_title_id'], $r['conf_title_title'] ); } //----------------------------------------- // Type //----------------------------------------- $types = array( 0 => array( 'input' , 'Text Input' ), 1 => array( 'dropdown', 'Drop Down' ), 2 => array( 'yes_no' , 'Yes/No Radio Buttons'), 3 => array( 'textarea', 'Textarea' ), 4 => array( 'multi' , 'Multi Select' ), ); //----------------------------------------- // start form //----------------------------------------- $ibforums->html .= $ibforums->adskin->start_form( array( 1 => array( 'code' , $formcode ), 2 => array( 'act' , 'op' ), 3 => array( 'id' , $ibforums->input['id'] ), ) ); //----------------------------------------- // start table //----------------------------------------- $ibforums->adskin->td_header[] = array( "{none}" , "40%" ); $ibforums->adskin->td_header[] = array( "{none}" , "60%" ); //----------------------------------------- // um.. //----------------------------------------- $ibforums->html .= $ibforums->adskin->start_table( $title ); $ibforums->html .= $ibforums->adskin->add_td_row( array( "Setting title?" , $ibforums->adskin->form_input( 'conf_title', $_POST['conf_title'] ? $_POST['conf_title'] : $conf['conf_title'] ) ) ); $ibforums->html .= $ibforums->adskin->add_td_row( array( "Setting Position?" , $ibforums->adskin->form_input( 'conf_position', $_POST['conf_position'] ? $_POST['conf_position'] : $conf['conf_position'] ) ) ); $ibforums->html .= $ibforums->adskin->add_td_row( array( "Setting Description?" , $ibforums->adskin->form_textarea( 'conf_description', $_POST['conf_description'] ? $_POST['conf_description'] : $conf['conf_description'] ) ) ); $ibforums->html .= $ibforums->adskin->add_td_row( array( "Setting Group?" , $ibforums->adskin->form_dropdown( 'conf_group', $groups, $_POST['conf_group'] ? $_POST['conf_group'] : $conf['conf_group'] ) ) ); $ibforums->html .= $ibforums->adskin->add_td_row( array( "Setting Type?" , $ibforums->adskin->form_dropdown( 'conf_type', $types, $_POST['conf_type'] ? $_POST['conf_type'] : $conf['conf_type'] ) ) ); $ibforums->html .= $ibforums->adskin->add_td_row( array( "Setting Key?" , $ibforums->adskin->form_input( 'conf_key', $_POST['conf_key'] ? $_POST['conf_key'] : $conf['conf_key'] ) ) ); $ibforums->html .= $ibforums->adskin->add_td_row( array( "Setting Current Value?" , $ibforums->adskin->form_textarea( 'conf_value', $_POST['conf_value'] ? $_POST['conf_value'] : $conf['conf_value'] ) ) ); $ibforums->html .= $ibforums->adskin->add_td_row( array( "Setting Default Value?" , $ibforums->adskin->form_textarea( 'conf_default', $_POST['conf_default'] ? $_POST['conf_default'] : $conf['conf_default'] ) ) ); $ibforums->html .= $ibforums->adskin->add_td_row( array( "Setting Extra?
Use for creating form element extras.
Drop down box use: Key=Value; one per line.
" , $ibforums->adskin->form_textarea( 'conf_extra', $_POST['conf_extra'] ? $_POST['conf_extra'] : $conf['conf_extra'] ) ) ); $ibforums->html .= $ibforums->adskin->add_td_row( array( "Raw PHP code to eval before showing and saving?
\$show = 1; is set when showing setting.
\$save = 1; is set when saving the setting.
Use \$key and \$value when writing PHP code.
" , $ibforums->adskin->form_textarea( 'conf_evalphp', $_POST['conf_evalphp'] ? $_POST['conf_evalphp'] : $conf['conf_evalphp'] ) ) ); $ibforums->html .= $ibforums->adskin->add_td_row( array( "Start setting group?
Enter title here or leave blank to not start a setting group
" , $ibforums->adskin->form_input( 'conf_start_group', $_POST['conf_start_group'] ? $_POST['conf_start_group'] : $conf['conf_start_group'] ) ) ); $ibforums->html .= $ibforums->adskin->add_td_row( array( "End setting group?
End an opened setting group
" , $ibforums->adskin->form_yes_no( 'conf_end_group', $_POST['conf_end_group'] ? $_POST['conf_end_group'] : $conf['conf_end_group'] ) ) ); $ibforums->html .= $ibforums->adskin->add_td_row( array( "Optional Help Key
'Key' which links to the ACP help system
" , $ibforums->adskin->form_input( 'conf_help_key', $_POST['conf_help_key'] ? $_POST['conf_help_key'] : $conf['conf_help_key'] ) ) ); if ( IN_DEV ) { $ibforums->html .= $ibforums->adskin->add_td_row( array( "Make a default settings (cannot be removed by user)?" , $ibforums->adskin->form_yes_no( 'conf_protected', $_POST['conf_protected'] ? $_POST['conf_protected'] : $conf['conf_protected'] ) ) ); } $ibforums->html .= $ibforums->adskin->add_td_row( array( "Add this option into the settings cache?" , $ibforums->adskin->form_yes_no( 'conf_add_cache', $_POST['conf_add_cache'] ? $_POST['conf_add_cache'] : $conf['conf_add_cache'] ) ) ); $ibforums->html .= $ibforums->adskin->end_form( $button ); $ibforums->html .= $ibforums->adskin->end_table(); $ibforums->admin->output(); } //----------------------------------------- // Settings View //----------------------------------------- function setting_view() { global $ibforums, $DB, $std, $forums; $ibforums->admin->page_title = "System Configuration Settings"; $ibforums->admin->page_detail = "This section contains all the configuration options for your IPB.
If you wish to leave an entry blank, please use the keyword: {blank} or enter a zero: 0."; $ibforums->admin->nav[] = array( 'act=op', "View General Settings" ); $ibforums->input['search'] = trim(urldecode($ibforums->input['search'])); if ( ! $ibforums->input['conf_group'] and ! $ibforums->input['search'] ) { $ibforums->main_msg = "No group was passed, please try again."; $this->setting_start(); } $this->setting_get_groups(); //----------------------------------------- // start form //----------------------------------------- $ibforums->html .= $ibforums->adskin->start_form( array( 1 => array( 'code' , 'setting_update' ), 2 => array( 'act' , 'op' ), 3 => array( 'id' , $ibforums->input['conf_group'] ), 4 => array( 'search' , $ibforums->input['search'] ), ) ); //----------------------------------------- // Get settings in group //----------------------------------------- $start = intval( $ibforums->input['st'] ); $end = 50; $pages = $std->build_pagelinks( array( 'TOTAL_POSS' => $this->setting_groups[$ibforums->input['conf_group']]['conf_title_count'], 'PER_PAGE' => $end, 'CUR_ST_VAL' => $start, 'L_SINGLE' => "", 'L_MULTI' => $un_all."Multi Page", 'BASE_URL' => $ibforums->adskin->base_url."&act=op&code=setting_view&search={$ibforums->input['search']}", 'search' => $ibforums->input['search'], ) ); $conf_titles = array(); $in_group = array(); $last_conf_id = -1; //----------------------------------------- // Did we search? //----------------------------------------- if ( $ibforums->input['search'] ) { $keywords = strtolower($ibforums->input['search']); $DB->cache_add_query( 'settings_search', array( 'keywords' => $keywords, 'limit_a' => $start, 'limit_b' => $end ) ); $DB->cache_exec_query(); while ( $r = $DB->fetch_row() ) { $r['conf_start_group'] = ""; $r['conf_end_group'] = ""; $conf_entry[ $r['conf_id'] ] = $r; } if ( ! count( $conf_entry ) ) { $ibforums->main_msg = "Your search for '$keywords' produced no matches."; $this->setting_start(); } $title = "Searched for: ".$keywords; } //----------------------------------------- // Or not... //----------------------------------------- else { $DB->simple_construct( array( 'select' => '*', 'from' => 'conf_settings', 'where' => "conf_group='{$ibforums->input['conf_group']}'", 'order' => 'conf_position, conf_title', 'limit' => array( $start,$end ) ) ); $DB->simple_exec(); while ( $r = $DB->fetch_row() ) { $conf_entry[ $r['conf_id'] ] = $r; if ( $r['conf_end_group'] ) { $in_g = 0; } if ( $in_g ) { $this->in_group[] = $r['conf_id']; } if ( $r['conf_start_group'] ) { $in_g = 1; } } $title = "Settings for group: {$this->setting_groups[$ibforums->input['conf_group']]['conf_title_title']}"; } $key_array = array(); //----------------------------------------- // start table //----------------------------------------- $ibforums->html .= "
$title "; if ( ! $ibforums->input['search'] ) { $ibforums->html .= $ibforums->adskin->js_make_button("Add New Setting" , $ibforums->base_url."&act=op&code=settingnew&conf_group=".$ibforums->input['conf_group']).' '; $ibforums->html .= ""; } $ibforums->html .= "  
"; if ( is_array( $conf_entry ) and count( $conf_entry ) ) { foreach( $conf_entry as $id => $r ) { $ibforums->html .= $this->_setting_process_entry( $r ); } } $ibforums->html .= ""; $ibforums->html .= "
"; $ibforums->html .= "

Settings Quick Jump".$this->setting_make_dropdown()."
"; $ibforums->admin->output(); } //----------------------------------------- // Settings show - core routine... //----------------------------------------- function _setting_process_entry($r) { global $ibforums, $DB, $std, $forums; $form_element = ""; $dropdown = array(); $start = ""; $end = ""; $revert_button = ""; $tdrow1 = "tdrow1"; $tdrow2 = "tdrow2"; $key = $r['conf_key']; $value = $r['conf_value'] != "" ? $r['conf_value'] : $r['conf_default']; $show = 1; //----------------------------------------- // Default? //----------------------------------------- $css = ""; if ( $r['conf_value'] != "" and ( $r['conf_value'] != $r['conf_default'] ) ) { $tdrow1 = "tdrow1shaded"; $tdrow2 = "tdrow2shaded"; $revert_button = "
input['search']}' title='Revert to default value'>X
"; } //----------------------------------------- // Evil eval //----------------------------------------- if ( $r['conf_evalphp'] ) { $show = 1; eval( $r['conf_evalphp'] ); } switch( $r['conf_type'] ) { case 'input': $form_element = $ibforums->adskin->form_input( $key, str_replace( "'", "'", $value ), 30 ); break; case 'textarea': $form_element = $ibforums->adskin->form_textarea( $key, $value, 45, 5 ); break; case 'yes_no': $form_element = $ibforums->adskin->form_yes_no( $key, $value ); break; default: if ( $r['conf_extra'] ) { if ( $r['conf_extra'] == '#show_forums#' ) { //----------------------------------------- // Require the library // (Not a building with books) //----------------------------------------- $forums->forums_init(); require_once( ROOT_PATH.'sources/admin/admin_forum_functions.php' ); $aff = new admin_forum_functions(); $dropdown = $aff->ad_forums_forum_list(1); } else if ( $r['conf_extra'] == '#show_groups#' ) { $DB->simple_construct( array( 'select' => 'g_id, g_title', 'from' => 'groups' ) ); $DB->simple_exec(); while( $row = $DB->fetch_row() ) { $dropdown[] = array( $row['g_id'], $row['g_title'] ); } } else if ( $r['conf_extra'] == '#show_skins#' ) { $dropdown = $ibforums->admin->skin_get_skin_dropdown(); } else { foreach( explode( "\n", $r['conf_extra'] ) as $l ) { list ($k, $v) = explode( "=", $l ); if ( $k != "" and $v != "" ) { $dropdown[] = array( trim($k), trim($v) ); } } } } if ( $r['conf_type'] == 'dropdown' ) { $form_element = $ibforums->adskin->form_dropdown( $key, $dropdown, $value ); } else { $form_element = $ibforums->adskin->form_multiselect( $key, $dropdown, explode( ",", $value ), 5 ); } break; } $delete = "| Delete"; $edit = "Edit"; $reorder = 1; if ( $r['conf_protected'] and ! IN_DEV ) { $delete = ""; $edit = ""; $reorder = 0; } if ( $r['conf_start_group'] ) { $start = "
{$r['conf_start_group']}
"; } else { if ( ! in_array( $r['conf_id'], $this->in_group ) and ! $r['conf_end_group'] ) { $start = "
"; } } if ( $r['conf_end_group'] ) { $end = "
"; } else { if ( ! in_array( $r['conf_id'], $this->in_group ) and ! $r['conf_start_group'] ) { $end = "
"; } } //----------------------------------------- // Search hi-lite //----------------------------------------- if ( $ibforums->input['search'] ) { $r['conf_title'] = preg_replace( "/(".$ibforums->input['search'].")/i", "\\1", $r['conf_title'] ); $r['conf_description'] = preg_replace( "/(".$ibforums->input['search'].")/i", "\\1", $r['conf_description'] ); } $html .= "$start "; if ( $edit or $delete ) { $html .= ""; } if ( ! $ibforums->input['search'] and $reorder ) { $html .= ""; } $html .= "
{$r['conf_title']}
{$r['conf_description']}
{$revert_button}
{$form_element}
{$edit} {$delete}
$end "; $this->key_array[] = preg_replace( "/\[\]$/", "", $key ); return $html; } //----------------------------------------- // Settings Start //----------------------------------------- function setting_start() { global $ibforums, $DB, $std; $ibforums->admin->page_title = "System Configuration Settings"; $ibforums->admin->page_detail = "This section contains all the configuration options for your IPB."; //----------------------------------------- // start table //----------------------------------------- $ibforums->adskin->td_header[] = array( "{none}" , "2%" ); $ibforums->adskin->td_header[] = array( "{none}" , "88%" ); $ibforums->adskin->td_header[] = array( "{none}" , "10%" ); $basic_title = "
System Settings
 
" ."  
"; $ibforums->html .= $ibforums->adskin->start_table($basic_title); //----------------------------------------- // Get groups //----------------------------------------- $this->setting_get_groups(); foreach( $this->setting_groups as $i => $r ) { if ( $r['conf_title_noshow'] ) { $hidden = ' (Hidden)'; } else { $hidden = ''; } $ibforums->html .= $ibforums->adskin->add_td_row( array( "
Folder
", "{$r['conf_title_title']}$hidden (".intval($r['conf_title_count'])." settings)
{$r['conf_title_desc']}
" , array("
Edit Delete Recount
", 1, 'tdrow3' ) ) ); } $ibforums->html .= $ibforums->adskin->add_td_row( array( array("
". $ibforums->adskin->js_make_button("Add Setting Group", $ibforums->base_url."&act=op&code=settinggroup_new")."
", 3, 'pformstrip' ) ) ); $ibforums->html .= $ibforums->adskin->end_table(); //----------------------------------------- // Import partial settings? //----------------------------------------- $ibforums->html .= $ibforums->adskin->start_form( array( 1 => array( 'code' , 'settings_do_import' ), 2 => array( 'act' , 'op' ), 3 => array( 'MAX_FILE_SIZE' , '10000000000' ), ) , "uploadform", " enctype='multipart/form-data'" ); //----------------------------------------- $ibforums->adskin->td_header[] = array( " " , "50%" ); $ibforums->adskin->td_header[] = array( " " , "50%" ); //----------------------------------------- $ibforums->html .= $ibforums->adskin->start_table( "Import an XML settings file" ); $ibforums->html .= $ibforums->adskin->add_td_row( array( "Upload XML settings file from your computer
Duplicate entries will not be overwritten but the default setting and other options will be updated. The file must begin with 'ipb_' and end with either '.xml' or '.xml.gz'
" , $ibforums->adskin->form_upload( ) ) ); $ibforums->html .= $ibforums->adskin->add_td_row( array( "OR enter the filename of the XML settings file
The file must be uploaded into the forum's root folder
" , $ibforums->adskin->form_input( 'file_location', 'ipb_settings_partial.xml' ) ) ); $ibforums->html .= $ibforums->adskin->end_form("Import XML settings Set"); $ibforums->html .= $ibforums->adskin->end_table(); //----------------------------------------- // Other & Dev options //----------------------------------------- $ibforums->html .= "

Export Selected Settings
"; if ( IN_DEV ) { $ibforums->html .= "
Developer Options: Export all to XML
"; } $ibforums->admin->output(); } //----------------------------------------- // Settings Update //----------------------------------------- function setting_update( $donothing="" ) { global $ibforums, $DB, $std; if ( ! $ibforums->input['id'] and ! $ibforums->input['search'] ) { $ibforums->main_msg = "No ID was passed, please try again"; $this->setting_start(); } //----------------------------------------- // Reorder? //----------------------------------------- if ( $ibforums->input['reorder'] ) { foreach ($ibforums->input as $key => $value) { if ( preg_match( "/^cp_(\d+)$/", $key, $match ) ) { if ( isset( $ibforums->input[$match[0]]) ) { $DB->do_update( 'conf_settings', array( 'conf_position' => $ibforums->input[$match[0]] ), 'conf_id='.$match[1] ); } } } $ibforums->main_msg = "Settings reordered"; $ibforums->input['conf_group'] = $ibforums->input['id']; $this->setting_view(); } //----------------------------------------- // check... //----------------------------------------- $fields = explode(",", trim($ibforums->input['settings_save']) ); if ( ! count($fields ) ) { $ibforums->main_msg = "No fields were passed to be saved"; $ibforums->settings_view(); } //----------------------------------------- // Get info from DB //----------------------------------------- $db_fields = array(); $DB->simple_construct( array( 'select' => '*', 'from' => 'conf_settings', 'where' => "conf_key IN ('".implode( "','", $fields )."')" ) ); $DB->simple_exec(); while ( $r = $DB->fetch_row() ) { $db_fields[ $r['conf_key'] ] = $r; } foreach( $db_fields as $key => $data ) { if ( $data['conf_evalphp'] ) { $save = 1; eval( $data['conf_evalphp'] ); } if ( ($_POST[ $key ] != $data['conf_default']) ) { $value = str_replace( "'", "'", $std->txt_safeslashes($_POST[ $key ]) ); $DB->do_update( 'conf_settings', array( 'conf_value' => $value ), 'conf_id='.$data['conf_id'] ); } else if ( $ibforums->input[ $key ] != "" and ( $ibforums->input[ $key ] == $data['conf_default'] ) and $data['conf_value'] != '' ) { $DB->do_update( 'conf_settings', array( 'conf_value' => '' ), 'conf_id='.$data['conf_id'] ); } } $ibforums->input['conf_group'] = $ibforums->input['id']; $ibforums->main_msg = "Settings updated"; $this->setting_rebuildcache(); if ( ! $donothing ) { $this->setting_view(); } } //----------------------------------------- // Settings Save Form //----------------------------------------- function setting_save($type='add') { global $ibforums, $DB, $std; if ( $type == 'edit' ) { if ( ! $ibforums->input['id'] ) { $ibforums->main_msg = "No ID was passed, please try again"; $this->setting_form(); } } //----------------------------------------- // check... //----------------------------------------- $conf_group = $ibforums->input['conf_newgroup'] ? $ibforums->input['conf_newgroup'] : $ibforums->input['conf_group']; $array = array( 'conf_title' => $ibforums->input['conf_title'], 'conf_description' => $std->txt_safeslashes( $_POST['conf_description'] ), 'conf_group' => $ibforums->input['conf_group'], 'conf_type' => $ibforums->input['conf_type'], 'conf_key' => $ibforums->input['conf_key'], 'conf_value' => $std->txt_safeslashes( $_POST['conf_value'] ), 'conf_default' => $std->txt_safeslashes( $_POST['conf_default'] ), 'conf_extra' => $std->txt_safeslashes( $_POST['conf_extra'] ), 'conf_evalphp' => $std->txt_safeslashes( $_POST['conf_evalphp'] ), 'conf_protected' => intval( $ibforums->input['conf_protected'] ), 'conf_position' => intval( $ibforums->input['conf_position'] ), 'conf_start_group' => $ibforums->input['conf_start_group'], 'conf_end_group' => $ibforums->input['conf_end_group'], 'conf_help_key' => $ibforums->input['conf_help_key'], 'conf_add_cache' => intval( $ibforums->input['conf_add_cache'] ), ); if ( $type == 'add' ) { $DB->do_insert( 'conf_settings', $array ); $ibforums->main_msg = 'New Setting Added'; $DB->simple_exec_query( array( 'update' => 'conf_settings_titles', 'set' => 'conf_title_count=conf_title_count+1', 'where' => 'conf_title_id='.$ibforums->input['conf_group'] ) ); } else { $DB->do_update( 'conf_settings', $array, 'conf_id='.$ibforums->input['id'] ); $ibforums->main_msg = 'Setting Edited'; } $this->setting_rebuildcache(); $this->setting_view(); } //----------------------------------------- // Settings Revert //----------------------------------------- function setting_revert() { global $ibforums, $DB, $std; $ibforums->input['id'] = intval($ibforums->input['id']); if ( ! $ibforums->input['id'] ) { $ibforums->main_msg = "No ID was passed, please try again"; $this->setting_form(); } $conf = $DB->simple_exec_query( array( 'select' => '*', 'from' => 'conf_settings', 'where' => 'conf_id='.$ibforums->input['id'] ) ); //----------------------------------------- // Revert... //----------------------------------------- $DB->simple_exec_query( array( 'update' => 'conf_settings', 'set' => "conf_value=''", 'where' => 'conf_id='.$ibforums->input['id'] ) ); $ibforums->main_msg = "Configuration setting reverted back to default."; $this->setting_rebuildcache(); $this->setting_view(); } //----------------------------------------- // Settings Delete //----------------------------------------- function setting_delete() { global $ibforums, $DB, $std; if ( ! $ibforums->input['id'] ) { $ibforums->main_msg = "No ID was passed, please try again"; $this->setting_form(); } $conf = $DB->simple_exec_query( array( 'select' => '*', 'from' => 'conf_settings', 'where' => 'conf_id='.$ibforums->input['id'] ) ); //----------------------------------------- // Delete... //----------------------------------------- $DB->simple_exec_query( array( 'delete' => 'conf_settings', 'where' => 'conf_id='.$ibforums->input['id'] ) ); $DB->simple_exec_query( array( 'update' => 'conf_settings_titles', 'set' => 'conf_title_count=conf_title_count-1', 'where' => 'conf_title_id='.$conf['conf_group'] ) ); $ibforums->main_msg = "Configuration Setting Deleted"; $this->setting_rebuildcache(); $ibforums->input['conf_group'] = $conf['conf_group']; $this->setting_view(); } //----------------------------------------- // BBCODE Rebuild Cache //----------------------------------------- function setting_rebuildcache() { global $ibforums, $DB, $std; $ibforums->cache['settings'] = array(); $DB->simple_construct( array( 'select' => '*', 'from' => 'conf_settings', 'where' => 'conf_add_cache=1' ) ); $info = $DB->simple_exec(); while ( $r = $DB->fetch_row($info) ) { $value = $r['conf_value'] != "" ? $r['conf_value'] : $r['conf_default']; if ( $value == '{blank}' ) { $value = ''; } $ibforums->cache['settings'][ $r['conf_key'] ] = $value; } $std->update_cache( array( 'name' => 'settings', 'array' => 1, 'deletefirst' => 1 ) ); } //----------------------------------------- // Setting get cache //----------------------------------------- function setting_get_groups() { global $ibforums, $DB, $std; $this->setting_groups = array(); if ( IN_DEV ) { $DB->simple_construct( array( 'select' => '*', 'from' => 'conf_settings_titles', 'order' => 'conf_title_title' ) ); $DB->simple_exec(); } else { $DB->simple_construct( array( 'select' => '*', 'from' => 'conf_settings_titles', 'where' => 'conf_title_noshow=0', 'order' => 'conf_title_title' ) ); $DB->simple_exec(); } while( $r = $DB->fetch_row() ) { $this->setting_groups[ $r['conf_title_id'] ] = $r; } } //----------------------------------------- // Make drop down of available titles //----------------------------------------- function setting_make_dropdown() { global $ibforums, $DB, $std; if ( ! is_array( $this->setting_groups ) ) { $this->setting_get_groups(); } $ret = "
"; } //----------------------------------------- // Save full text options //----------------------------------------- function do_fulltext() { global $ibforums, $DB, $std, $HTTP_POST_VARS; $ibforums->admin-> get_mysql_version(); if ( $DB->sql_can_fulltext() ) { // How many posts do we have? $DB->simple_construct( array( 'select' => 'COUNT(*) as cnt', 'from' => 'posts' ) ); $DB->simple_exec(); $result = $DB->fetch_row(); // If over 15,000 posts... if ( $result['cnt'] > 15000 ) { // Explain how, why and what to do.. $ibforums->admin->page_detail = ""; $ibforums->admin->page_title = "Unable to continue"; $ibforums->html .= $ibforums->adskin->add_td_basic( $this->return_sql_no_no_cant_do_it_sorry_text(), 'left', 'faker' ); $ibforums->admin->output(); } else { // Index away! $DB->sql_add_fulltext_index( 'topics', 'title' ); $DB->sql_add_fulltext_index( 'posts' , 'post' ); } } else { $ibforums->admin->error("Sorry, the version of MySQL that you are using is unable to use FULLTEXT searches"); } $ibforums->admin->save_log("Full Text Options Updated"); $ibforums->admin->done_screen("Full Text Indexes Rebuilt", "Full Text Settings", "act=op&code=setting_view&conf_group=19", "redirect" ); } //----------------------------------------- // // Save config. Does the hard work, so you don't have to. // //----------------------------------------- function save_config( $new ) { global $ibforums, $DB, $std, $HTTP_POST_VARS; $master = array(); if ( is_array($new) ) { if ( count($new) > 0 ) { foreach( $new as $field ) { // Handle special.. if ($field == 'img_ext' or $field == 'avatar_ext' or $field == 'photo_ext') { $HTTP_POST_VARS[ $field ] = preg_replace( "/[\.\s]/", "" , $HTTP_POST_VARS[ $field ] ); $HTTP_POST_VARS[ $field ] = str_replace('|', "|", $HTTP_POST_VARS[ $field ]); $HTTP_POST_VARS[ $field ] = preg_replace( "/,/" , '|', $HTTP_POST_VARS[ $field ] ); } else if ($field == 'coppa_address') { $HTTP_POST_VARS[ $field ] = nl2br( $HTTP_POST_VARS[ $field ] ); } if ( $field == 'gd_font' OR $field == 'html_dir' OR $field == 'upload_dir') { $HTTP_POST_VARS[ $field ] = preg_replace( "/'/", "'", $HTTP_POST_VARS[ $field ] ); } else { $HTTP_POST_VARS[ $field ] = preg_replace( "/'/", "'", stripslashes($HTTP_POST_VARS[ $field ]) ); } $master[ $field ] = stripslashes($HTTP_POST_VARS[ $field ]); } $ibforums->admin->rebuild_config($master); } } $ibforums->admin->save_log("Board Settings Updated, Back Up Written"); $ibforums->admin->done_screen("Forum Configurations updated", "Administration CP Home", "act=index" ); } function return_sql_no_no_cant_do_it_sorry_text() { return "
Unable to automatically create the FULLTEXT indexes

You have too many posts for an automatic FULLTEXT index creation. It is more than likely that PHP will time out before the indexes are complete which could cause some index corruption.
Creating FULLTEXT indexes is a relatively slow process but it's one that's worth doing as it will save you a lot of time and CPU power when your members search.
On average, a normal webserver is capable of indexing about 80,000 posts an hour but it is a relatively intense process. If you are using MySQL 4.0.12+ then this time is reduced substaintially.

How to manually create the indexes
If you have shell (SSH / Telnet) access to mysql, the process is very straightforward. If you do not have access to shell, then you will have to contact your webhost and ask them to do this for you.

Step 1: Initiate mysql
In shell type:
mysql -u{your_sql_user_name} -p{your_sql_password}

Your MySQL username and password can be found in your conf_global.php file

Step 2: Select your database
In mysql type:
use {your_database_name_here};

Make sure you use a trailing semi-colon. Your MySQL database name can be found in conf_global.php

Step 3: Indexing the topics table
In mysql type:
\g alter table ibf_topics add fulltext(title);

If you are not using 'ibf_' as your table extension, adjust that query to suit. This query can take a while depending on the number of topics you have.

Step 4: Indexing the posts table
In mysql type:
\g alter table ibf_posts add fulltext(post);

If you are not using 'ibf_' as your table extension, adjust that query to suit. This query can take a while depending on the number of posts you have. On average MySQL can index 80,000 posts an hour. If you are using MySQL 4, the time is greatly reduced.
"; } } ?>