$Date: 2008-04-24 11:40:55 -0400 (Thu, 24 Apr 2008) $ | > $Revision: 1258 $ | > $Author: bfarber $ +--------------------------------------------------------------------------- | | > 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(); var $key_array = array(); var $get_by_key = ""; var $return_after_save = ""; var $html; var $parser; var $han_editor; var $image_dir = null; var $editor_loaded = 0; var $help_settings = array(); /** * Section title name * * @var string */ var $perm_main = "tools"; /** * Section title name * * @var string */ var $perm_child = "op"; function auto_run() { $this->ipsclass->admin->nav[] = array( "{$this->ipsclass->form_code}", "View General Settings" ); //----------------------------------------- // Load template //----------------------------------------- $this->html = $this->ipsclass->acp_load_template( 'cp_skin_settings' ); //----------------------------------------- // Get XML Class for help keys //----------------------------------------- require_once( KERNEL_PATH . 'class_xml.php' ); //----------------------------------------- $this->ipsclass->DB->sql_get_version(); $this->true_version = $this->ipsclass->DB->true_version; $this->mysql_version = $this->ipsclass->DB->mysql_version; switch($this->ipsclass->input['code']) { case 'settinggroup_resync': $this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':edit' ); $this->settinggroup_resync(); break; case 'settinggroup_delete': $this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':remove' ); $this->settinggroup_delete(); break; case 'settinggroup_new': $this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':add' ); $this->settinggroup_form('add'); break; case 'settinggroup_showedit': $this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':edit' ); $this->settinggroup_form('edit'); break; case 'settinggroup_add': $this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':add' ); $this->settinggroup_save('add'); break; case 'settinggroup_edit': $this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':edit' ); $this->settinggroup_save('edit'); break; case 'settingnew': $this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':add' ); $this->setting_form('add'); break; case 'setting_showedit': $this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':edit' ); $this->setting_form('edit'); break; case 'setting_add': $this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':add' ); $this->setting_save('add'); break; case 'setting_edit': $this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':edit' ); $this->setting_save('edit'); break; case 'setting_view': $this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':' ); $this->setting_view(); break; case 'setting_help': $this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':' ); $this->setting_help(); break; case 'setting_delete': $this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':remove' ); $this->setting_delete(); break; case 'setting_revert': $this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':edit' ); $this->setting_revert(); break; case 'setting_update': $this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':edit' ); $this->setting_update(); break; case 'setting_allexport': $this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':export' ); $this->setting_allexport(); break; case 'findsetting': $this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':search' ); $this->setting_findgroup(); break; case 'setting_someexport_start': $this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':export' ); $this->setting_someexport_start(); break; case 'setting_someexport_complete': $this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':export' ); $this->setting_someexport_complete(); break; case 'settings_do_import': $this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':import' ); $this->settings_do_import(); break; //----------------------------------------- // Full text //----------------------------------------- case 'dofulltext': $this->do_fulltext(); break; case 'phpinfo': phpinfo(); exit; case 'MOD_export_setting': $this->settinggroup_export(); break; //----------------------------------------- default: $this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':' ); $this->setting_start(); break; } } /*-------------------------------------------------------------------------*/ // Check differences /*-------------------------------------------------------------------------*/ function settings_check_differences( $content='' ) { //----------------------------------------- // INIT //----------------------------------------- $settings = array(); $xml_settings = array(); $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_add_cache' , 'conf_title_keyword' ); $upload_new = array(); $upload_missing = array(); $original_new = array(); $original_missing = array(); //----------------------------------------- // Get current settings //----------------------------------------- $this->ipsclass->DB->build_query( array( 'select' => 's.*', 'from' => array( 'conf_settings' => 's' ), 'add_join' => array( 0 => array( 'select' => 'c.*', 'from' => array( 'conf_settings_titles' => 'c' ), 'where' => 'c.conf_title_id=s.conf_group', 'type' => 'inner' ) ) ) ); $this->ipsclass->DB->exec_query(); while( $row = $this->ipsclass->DB->fetch_row() ) { $settings[ $row['conf_key'] ] = $row; } //----------------------------------------- // Sort out XML file //----------------------------------------- require_once( KERNEL_PATH.'class_xml.php' ); $xml = new class_xml(); //----------------------------------------- // Unpack the datafile //----------------------------------------- $xml->xml_parse_document( $content ); //----------------------------------------- // Fix up... //----------------------------------------- if ( ! is_array( $xml->xml_array['settingexport']['settinggroup']['setting'][0] ) ) { //----------------------------------------- // Ensure [0] is populated //----------------------------------------- $xml->xml_array['settingexport']['settinggroup']['setting'] = array( 0 => $xml->xml_array['settingexport']['settinggroup']['setting'] ); } //----------------------------------------- // Loop through and sort out settings... //----------------------------------------- foreach( $xml->xml_array['settingexport']['settinggroup']['setting'] as $entry ) { //----------------------------------------- // Is setting? //----------------------------------------- if ( ! $entry['conf_is_title']['VALUE'] ) { foreach( $fields as $f ) { $xml_settings[ $entry['conf_key']['VALUE'] ] = $entry[ $f ]['VALUE']; } } } //----------------------------------------- // Original: Missing //----------------------------------------- foreach( $xml_settings as $key => $data ) { if ( ! in_array( $key, array_keys( $settings ) ) ) { $original_missing[ $key ] = $data; } } //----------------------------------------- // Original: New //----------------------------------------- foreach( $settings as $key => $data ) { if ( ! in_array( $key, array_keys( $xml_settings ) ) ) { $original_new[ $key ] = $data; } } $this->ipsclass->html .= $this->html->settings_check_differences( $original_missing, $original_new ); $this->ipsclass->admin->output(); } /*-------------------------------------------------------------------------*/ // IMPORT PARTIAL SETTINGS /*-------------------------------------------------------------------------*/ function settings_do_import( $noreturn=0 ) { //----------------------------------------- // INIT //----------------------------------------- $updated = 0; $inserted = 0; $need_update = array(); $cur_settings = array(); $new_titles = array(); $new_settings = array(); $tool = $this->ipsclass->input['tool']; $this->setting_titles_check(); //----------------------------------------- // Get file //----------------------------------------- if ( $_FILES['FILE_UPLOAD']['name'] == "" or ! $_FILES['FILE_UPLOAD']['name'] or ($_FILES['FILE_UPLOAD']['name'] == "none") ) { //----------------------------------------- // check and load from server //----------------------------------------- if ( ! $this->ipsclass->input['file_location'] ) { $this->ipsclass->main_msg = "No upload file was found and no filename was specified."; $this->setting_start(); } if ( ! file_exists( ROOT_PATH . $this->ipsclass->input['file_location'] ) ) { $this->ipsclass->main_msg = "Could not find the file to open at: " . ROOT_PATH . $this->ipsclass->input['file_location']; $this->setting_start(); } if ( preg_match( "#\.gz$#", $this->ipsclass->input['file_location'] ) ) { if ( $FH = @gzopen( ROOT_PATH.$this->ipsclass->input['file_location'], 'rb' ) ) { while ( ! @gzeof( $FH ) ) { $content .= @gzread( $FH, 1024 ); } @gzclose( $FH ); } } else { if ( $FH = @fopen( ROOT_PATH.$this->ipsclass->input['file_location'], 'rb' ) ) { $content = @fread( $FH, filesize(ROOT_PATH.$this->ipsclass->input['file_location']) ); @fclose( $FH ); } } } else { //----------------------------------------- // Get uploaded schtuff //----------------------------------------- $tmp_name = $_FILES['FILE_UPLOAD']['name']; $tmp_name = preg_replace( "#\.gz$#", "", $tmp_name ); $content = $this->ipsclass->admin->import_xml( $tmp_name ); } if ( ! $content ) { $this->ipsclass->admin->error( "Import file is not in the correct format or is corrupt" ); } if ( $tool == 'check' ) { $this->settings_check_differences( $content ); return; } //----------------------------------------- // Get current settings. //----------------------------------------- $this->ipsclass->DB->simple_construct( array( 'select' => 'conf_id, conf_key', 'from' => 'conf_settings', 'order' => 'conf_id' ) ); $this->ipsclass->DB->simple_exec(); while ( $r = $this->ipsclass->DB->fetch_row() ) { $cur_settings[ $r['conf_key'] ] = $r['conf_id']; } //----------------------------------------- // Get current titles //----------------------------------------- $this->setting_get_groups(); //----------------------------------------- // Get xml mah-do-dah //----------------------------------------- require_once( 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_add_cache' , 'conf_title_keyword' ); $setting_fields = array( 'conf_title_keyword', 'conf_title_title', 'conf_title_desc', 'conf_title_noshow', 'conf_title_module' ); //----------------------------------------- // Fix up... //----------------------------------------- if ( ! is_array( $xml->xml_array['settingexport']['settinggroup']['setting'][0] ) ) { //----------------------------------------- // Ensure [0] is populated //----------------------------------------- $xml->xml_array['settingexport']['settinggroup']['setting'] = array( 0 => $xml->xml_array['settingexport']['settinggroup']['setting'] ); } //----------------------------------------- // Loop through and sort out settings... //----------------------------------------- foreach( $xml->xml_array['settingexport']['settinggroup']['setting'] as $entry ) { $newrow = array(); //----------------------------------------- // Is setting? //----------------------------------------- if ( ! $entry['conf_is_title']['VALUE'] ) { foreach( $fields as $f ) { $newrow[$f] = $entry[ $f ]['VALUE']; } $new_settings[] = $newrow; } //----------------------------------------- // Is title? //----------------------------------------- else { foreach( $setting_fields as $f ) { $newrow[$f] = $entry[ $f ]['VALUE']; } $new_titles[] = $newrow; } } //----------------------------------------- // Sort out titles... //----------------------------------------- if ( is_array( $new_titles ) and count( $new_titles ) ) { foreach( $new_titles as $data ) { if ( $data['conf_title_title'] AND $data['conf_title_keyword'] ) { //----------------------------------------- // Get ID based on key //----------------------------------------- $conf_id = $this->setting_groups_by_key[ $data['conf_title_keyword'] ]['conf_title_id']; $save = array( 'conf_title_title' => $data['conf_title_title'], 'conf_title_desc' => $data['conf_title_desc'], 'conf_title_keyword' => $data['conf_title_keyword'], 'conf_title_noshow' => $data['conf_title_noshow'], 'conf_title_module' => $data['conf_title_module'] ); //----------------------------------------- // Not got a row, insert first! //----------------------------------------- if ( ! $conf_id ) { $this->ipsclass->DB->do_insert( 'conf_settings_titles', $save ); $conf_id = $this->ipsclass->DB->get_insert_id(); } else { //----------------------------------------- // Update... //----------------------------------------- $this->ipsclass->DB->do_update( 'conf_settings_titles', $save, 'conf_title_id='.$conf_id ); } //----------------------------------------- // Update settings cache //----------------------------------------- $save['conf_title_id'] = $conf_id; $this->setting_groups_by_key[ $save['conf_title_keyword'] ] = $save; $this->setting_groups[ $save['conf_title_id'] ] = $save; //----------------------------------------- // Remove need update... //----------------------------------------- $need_update[] = $conf_id; } } } //----------------------------------------- // Sort out settings //----------------------------------------- if ( is_array( $new_settings ) and count( $new_settings ) ) { foreach( $new_settings as $data ) { //----------------------------------------- // Make PHP slashes safe // Not needed 2.1.0 'cos mysql_escape_slashes does a good job //----------------------------------------- //$data['conf_evalphp'] = str_replace( '\\', '\\\\', $data['conf_evalphp'] ); //----------------------------------------- // Now assign to the correct ID based on // our title keyword... //----------------------------------------- $data['conf_group'] = $this->setting_groups_by_key[ $data['conf_title_keyword'] ]['conf_title_id']; //----------------------------------------- // Remove from array //----------------------------------------- unset( $data['conf_title_keyword'] ); if ( $cur_settings[ $data['conf_key'] ] ) { //----------------------------------------- // Update //----------------------------------------- $this->ipsclass->DB->do_update( 'conf_settings', $data, 'conf_id='.$cur_settings[ $data['conf_key'] ] ); $updated++; } else { //----------------------------------------- // INSERT //----------------------------------------- $this->ipsclass->DB->do_insert( 'conf_settings', $data ); $inserted++; } } } //----------------------------------------- // Update group counts... //----------------------------------------- if ( count( $need_update ) ) { foreach( $need_update as $idx ) { $conf = $this->ipsclass->DB->simple_exec_query( array( 'select' => 'count(*) as count', 'from' => 'conf_settings', 'where' => 'conf_group='.$idx ) ); $count = intval($conf['count']); $this->ipsclass->DB->do_update( 'conf_settings_titles', array( 'conf_title_count' => $count ), 'conf_title_id='.$idx ); } } //----------------------------------------- // Update cache //----------------------------------------- $this->ipsclass->DB->do_delete( 'cache_store', "cs_key='in_dev_setting_update'" ); $this->ipsclass->DB->do_insert( 'cache_store', array( 'cs_value' => time(), 'cs_key' => "in_dev_setting_update" ) ); //----------------------------------------- // Resync //----------------------------------------- $this->ipsclass->main_msg = "$updated settings updated $inserted settings inserted"; if ( ! $noreturn ) { $this->setting_rebuildcache(); $this->setting_start(); } } //----------------------------------------- // // EXPORT Some Settings. DO IT NOW YES // //----------------------------------------- function setting_someexport_complete() { $ids = array(); $groups = array(); //----------------------------------------- // get ids... //----------------------------------------- foreach ($this->ipsclass->input as $key => $value) { if ( preg_match( "/^id_(\d+)$/", $key, $match ) ) { if ($this->ipsclass->input[$match[0]]) { $ids[] = $match[1]; } } } $ids = $this->ipsclass->clean_int_array( $ids ); //----------------------------------------- // Got any? //----------------------------------------- if ( ! count( $ids ) ) { $this->ipsclass->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(); $this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'conf_settings', 'where' => "conf_id IN (".implode(",",$ids).")", 'order' => 'conf_position, conf_title' ) ); $this->ipsclass->DB->simple_exec(); while ( $r = $this->ipsclass->DB->fetch_row() ) { $content = array(); $groups[ $r['conf_group'] ] = $r['conf_group']; $r['conf_value'] = ''; //----------------------------------------- // Add in setting key //----------------------------------------- $r['conf_title_keyword'] = $this->setting_groups[ $r['conf_group'] ]['conf_title_keyword']; foreach( $r as $k => $v ) { $content[] = $xml->xml_build_simple_tag( $k, $v ); } $entry[] = $xml->xml_build_entry( 'setting', $content ); } //----------------------------------------- // Add in groups... //----------------------------------------- if ( is_array( $groups ) AND count( $groups ) ) { foreach( $groups as $conf_group_id ) { $content = array(); $thisconf = array( 'conf_is_title' => 1, 'conf_title_keyword' => $this->setting_groups[ $conf_group_id ]['conf_title_keyword'], 'conf_title_title' => $this->setting_groups[ $conf_group_id ]['conf_title_title'], 'conf_title_desc' => $this->setting_groups[ $conf_group_id ]['conf_title_desc'], 'conf_title_noshow' => $this->setting_groups[ $conf_group_id ]['conf_title_noshow'], 'conf_title_module' => $this->setting_groups[ $conf_group_id ]['conf_title_module'] ); foreach( $thisconf 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 //----------------------------------------- $this->ipsclass->admin->show_download( $doc, 'ipb_settings_partial.xml', '', 0 ); } //----------------------------------------- // // EXPORT Some Settings. Co-co-ca-choo // //----------------------------------------- function setting_someexport_start() { $this->ipsclass->admin->page_title = "Export Selected System Settings"; $this->ipsclass->admin->page_detail = "Check the box of the setting you wish to export."; $this->ipsclass->admin->nav[] = array( '', "Export Settings" ); //----------------------------------------- // start form //----------------------------------------- $this->ipsclass->html .= $this->ipsclass->adskin->start_form( array( 1 => array( 'code' , 'setting_someexport_complete' ), 2 => array( 'act' , 'op' ), 4 => array( 'section', $this->ipsclass->section_code ), ) ); $this->ipsclass->html .= "
System Settings
"; $this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'conf_settings', 'order' => 'conf_id' ) ); $this->ipsclass->DB->simple_exec(); $per_row = 3; $td_width = 100 / $per_row; $count = 0; $output = "\n"; while ( $r = $this->ipsclass->DB->fetch_row() ) { $count++; $class = $count == 2 ? 'tablerow2' : 'tablerow1'; $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 .= ""; } $this->ipsclass->html .= $output; $this->ipsclass->html .= "
{$r['conf_key']} - {$r['conf_id']}
 
"; $this->ipsclass->admin->output(); } //----------------------------------------- // // Find setting group (don't rely on IDs) // //----------------------------------------- function setting_findgroup() { if ( ! $this->ipsclass->input['key'] ) { $this->setting_start(); } $this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'conf_settings_titles' ) ); $this->ipsclass->DB->simple_exec(); while ( $r = $this->ipsclass->DB->fetch_row() ) { if ( $r['conf_title_keyword'] == $this->ipsclass->input['key'] OR strtolower( str_replace( " ", "", trim($r['conf_title_title']) ) ) == urldecode(trim($this->ipsclass->input['key'])) ) { $this->ipsclass->boink_it( $this->ipsclass->base_url.'&'.$this->ipsclass->form_code.'&code=setting_view&conf_group='.$r['conf_title_id'] ); break; } } $this->setting_start(); } //----------------------------------------- // // Export all to to XML (DEV ONLY) // //----------------------------------------- function setting_allexport() { 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 $roar ) { //----------------------------------------- // First, add in setting group title //----------------------------------------- $content = array(); $thisconf = array( 'conf_is_title' => 1, 'conf_title_keyword' => $roar['conf_title_keyword'], 'conf_title_title' => $roar['conf_title_title'], 'conf_title_desc' => $roar['conf_title_desc'], 'conf_title_noshow' => $roar['conf_title_noshow'], 'conf_title_module' => $roar['conf_title_module'] ); foreach( $thisconf as $k => $v ) { $content[] = $xml->xml_build_simple_tag( $k, $v ); } $entry[] = $xml->xml_build_entry( 'setting', $content ); //----------------------------------------- // Get settings... //----------------------------------------- $this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'conf_settings', 'where' => "conf_group='{$roar['conf_title_id']}'", 'order' => 'conf_position, conf_title' ) ); $this->ipsclass->DB->simple_exec(); while ( $r = $this->ipsclass->DB->fetch_row() ) { $content = array(); //----------------------------------------- // Empty user value //----------------------------------------- $r['conf_value'] = ''; //----------------------------------------- // Add in setting key //----------------------------------------- $r['conf_title_keyword'] = $roar['conf_title_keyword']; //----------------------------------------- // Set :is setting flag //----------------------------------------- $r['conf_is_title'] = 0; //----------------------------------------- // Sort the rest... //----------------------------------------- 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 //----------------------------------------- $this->ipsclass->admin->show_download( $doc, 'settings.xml', '', 0 ); } //----------------------------------------- // // Delete setting group // //----------------------------------------- function settinggroup_delete() { if ( $this->ipsclass->input['id'] ) { $conf = $this->ipsclass->DB->simple_exec_query( array( 'select' => 'count(*) as count', 'from' => 'conf_settings', 'where' => 'conf_group='.intval($this->ipsclass->input['id']) ) ); $count = intval($conf['count']); if ( $count > 0 ) { $this->ipsclass->main_msg = "Cannot remove this setting group as it still contains active settings"; } else { $this->ipsclass->DB->simple_exec_query( array( 'delete' => 'conf_settings_titles', 'where' => 'conf_title_id='.intval($this->ipsclass->input['id']) ) ); $this->ipsclass->main_msg = "Setting Group Removed"; } } $this->setting_start(); } //----------------------------------------- // // Recount settings // //----------------------------------------- function settinggroup_resync() { if ( $this->ipsclass->input['id'] ) { $conf = $this->ipsclass->DB->simple_exec_query( array( 'select' => 'count(*) as count', 'from' => 'conf_settings', 'where' => 'conf_group='.intval($this->ipsclass->input['id']) ) ); $count = intval($conf['count']); $this->ipsclass->DB->do_update( 'conf_settings_titles', array( 'conf_title_count' => $count ), 'conf_title_id='.intval($this->ipsclass->input['id']) ); } $this->setting_start(); } //----------------------------------------- // // New setting group form // //----------------------------------------- function settinggroup_form( $type='add' ) { $this->ipsclass->admin->page_title = "System Configuration Settings"; $this->ipsclass->admin->page_detail = "This section contains all the configuration options for your IPB."; $this->ipsclass->admin->nav[] = array( '', "Add/Edit Settings" ); if ( $type == 'add' ) { $formcode = 'settinggroup_add'; $title = "Create New Board Setting Group"; $button = "Create New Setting Group"; $conf = array( 'conf_title_title' => '', 'conf_title_desc' => '', 'conf_title_keyword' => '', 'conf_title_noshow' => '', ); } else { $conf = $this->ipsclass->DB->simple_exec_query( array( 'select' => '*', 'from' => 'conf_settings_titles', 'where' => 'conf_title_id='.intval($this->ipsclass->input['id']) ) ); if ( ! $conf['conf_title_id'] ) { $this->ipsclass->main_msg = "No ID was passed, please try again."; $this->setting_start(); } $formcode = 'settinggroup_edit'; $title = "Edit Setting ".$conf['conf_title']; $button = "Save Changes"; } $this->ipsclass->admin->page_detail = ' '; $this->ipsclass->admin->page_title = $title; //----------------------------------------- // start form //----------------------------------------- $this->ipsclass->html .= $this->ipsclass->adskin->start_form( array( 1 => array( 'code' , $formcode ), 2 => array( 'act' , 'op' ), 3 => array( 'id' , $this->ipsclass->input['id'] ), 4 => array( 'section', $this->ipsclass->section_code ), ) ); //----------------------------------------- // start table //----------------------------------------- $this->ipsclass->adskin->td_header[] = array( "{none}" , "40%" ); $this->ipsclass->adskin->td_header[] = array( "{none}" , "60%" ); //----------------------------------------- // um.. //----------------------------------------- $this->ipsclass->html .= $this->ipsclass->adskin->start_table( $title ); $this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "Setting Group title?" , $this->ipsclass->adskin->form_input( 'conf_title_title', ( isset($_POST['conf_title_title']) AND $_POST['conf_title_title'] ) ? $_POST['conf_title_title'] : $conf['conf_title_title'] ) ) ); $this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "Setting Group Description?" , $this->ipsclass->adskin->form_textarea( 'conf_title_desc', ( isset($_POST['conf_title_desc']) AND $_POST['conf_title_desc'] ) ? $_POST['conf_title_desc'] : $conf['conf_title_desc'] ) ) ); $this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "Setting Group Keyword?
Used to pull this from the DB without relying on an ID
" , $this->ipsclass->adskin->form_input( 'conf_title_keyword', ( isset($_POST['conf_title_keyword']) AND $_POST['conf_title_keyword'] ) ? $_POST['conf_title_keyword'] : $conf['conf_title_keyword'] ) ) ); $this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "Setting Group Module?
Enter the filename of the PHP module file (eg: example.php) for pre and post setting parsing. The file name must be uploaded into the /sources/components_acp/setting_plugins directory." , $this->ipsclass->adskin->form_input( 'conf_title_module', ( isset($_POST['conf_title_module']) AND $_POST['conf_title_module'] ) ? $_POST['conf_title_module'] : $conf['conf_title_module'] ) ) ); //----------------------------------------- // er.... //----------------------------------------- if ( IN_DEV ) { $this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "Hide from main settings list?" , $this->ipsclass->adskin->form_yes_no( 'conf_title_noshow', ( isset($_POST['conf_title_noshow']) AND $_POST['conf_title_noshow'] ) ? $_POST['conf_title_noshow'] : $conf['conf_title_noshow'] ) ) ); } $this->ipsclass->html .= $this->ipsclass->adskin->end_form( $button ); $this->ipsclass->html .= $this->ipsclass->adskin->end_table(); $this->ipsclass->admin->output(); } //----------------------------------------- // Settings Group Save Form //----------------------------------------- function settinggroup_save($type='add') { //----------------------------------------- // INIT //----------------------------------------- $conf_title_keyword = $this->ipsclass->txt_stripslashes( $_POST['conf_title_keyword'] ); //----------------------------------------- // Check... //----------------------------------------- if ( ! $conf_title_keyword ) { $this->ipsclass->main_msg = "You must enter a unique keyword for: Setting Group Keyword"; $this->settinggroup_form(); return; } //----------------------------------------- // Make sure another setting doesn't have // this keyword //----------------------------------------- $test = $this->ipsclass->DB->build_and_exec_query( array( 'select' => '*', 'from' => 'conf_settings_titles', 'where' => "conf_title_keyword='{$conf_title_keyword}'" ) ); if ( $type == 'edit' ) { if ( ! $this->ipsclass->input['id'] ) { $this->ipsclass->main_msg = "No ID was passed, please try again"; $this->settinggroup_form(); return; } if ( $test['conf_title_title'] AND $test['conf_title_id'] != $this->ipsclass->input['id'] ) { $this->ipsclass->main_msg = "You are already using this keyword for another setting group"; $this->settinggroup_form(); return; } } else { if ( $test['conf_title_title'] ) { $this->ipsclass->main_msg = "You are already using this keyword for another setting group"; $this->settinggroup_form(); return; } } //----------------------------------------- // check... //----------------------------------------- $array = array( 'conf_title_title' => $this->ipsclass->input['conf_title_title'], 'conf_title_desc' => $this->ipsclass->txt_stripslashes( $_POST['conf_title_desc'] ), 'conf_title_keyword' => $conf_title_keyword, 'conf_title_noshow' => intval($this->ipsclass->input['conf_title_noshow']), 'conf_title_module' => $this->ipsclass->input['conf_title_module'] ); if ( $type == 'add' ) { $this->ipsclass->DB->do_insert( 'conf_settings_titles', $array ); $this->ipsclass->main_msg = 'New Setting Group Added'; } else { $this->ipsclass->DB->do_update( 'conf_settings_titles', $array, 'conf_title_id='.intval($this->ipsclass->input['id']) ); $this->ipsclass->main_msg = 'Setting Group Edited'; } $this->setting_rebuildcache(); $this->setting_start(); } //----------------------------------------- // // New setting form // //----------------------------------------- function setting_form( $type='add' ) { $this->ipsclass->admin->page_title = "System Configuration Settings"; $this->ipsclass->admin->page_detail = "This section contains all the configuration options for your IPB."; $this->ipsclass->admin->nav[] = array( '', "Add/Edit Settings" ); if ( $type == 'add' ) { $formcode = 'setting_add'; $title = "Create New Board Setting"; $button = "Create New Setting"; $conf = array( 'conf_group' => $this->ipsclass->input['conf_group'], 'conf_add_cache' => 1, 'conf_title' => '', 'conf_description' => '', 'conf_type' => '', 'conf_key' => '', 'conf_value' => '', 'conf_default' => '', 'conf_extra' => '', 'conf_evalphp' => '', 'conf_start_group' => '', 'conf_end_group' => '' ); if ( IN_DEV ) { $conf['conf_protected'] = 1; } if ( $this->ipsclass->input['conf_group'] ) { $max = $this->ipsclass->DB->simple_exec_query( array( 'select' => 'max(conf_position) as max', 'from' => 'conf_settings', 'where' => 'conf_group='.$this->ipsclass->input['conf_group'] ) ); } else { $max = $this->ipsclass->DB->simple_exec_query( array( 'select' => 'max(conf_position) as max', 'from' => 'conf_settings' ) ); } $conf['conf_position'] = $max['max'] + 1; } else { $conf = $this->ipsclass->DB->simple_exec_query( array( 'select' => '*', 'from' => 'conf_settings', 'where' => 'conf_id='.intval($this->ipsclass->input['id']) ) ); if ( ! $conf['conf_id'] ) { $this->ipsclass->main_msg = "No ID was passed, please try again."; $this->setting_start(); } $formcode = 'setting_edit'; $title = "Edit Setting ".$conf['conf_title']; $button = "Save Changes"; } $this->ipsclass->admin->page_detail = ' '; $this->ipsclass->admin->page_title = $title; //----------------------------------------- // Get groups //----------------------------------------- $this->setting_get_groups(); $groups = array(); foreach( $this->setting_groups as $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( 'editor' , 'Full Editor' ), 5 => array( 'multi' , 'Multi Select' ), ); //----------------------------------------- // start form //----------------------------------------- $this->ipsclass->html .= $this->ipsclass->adskin->start_form( array( 1 => array( 'code' , $formcode ), 2 => array( 'act' , 'op' ), 3 => array( 'id' , $this->ipsclass->input['id'] ), 4 => array( 'section', 'tools' ), ) ); //----------------------------------------- // start table //----------------------------------------- $this->ipsclass->adskin->td_header[] = array( "{none}" , "40%" ); $this->ipsclass->adskin->td_header[] = array( "{none}" , "60%" ); //----------------------------------------- // um.. //----------------------------------------- $this->ipsclass->html .= $this->ipsclass->adskin->start_table( $title ); $this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "Setting title?" , $this->ipsclass->adskin->form_input( 'conf_title', ( isset($_POST['conf_title']) AND $_POST['conf_title'] ) ? $_POST['conf_title'] : $conf['conf_title'] ) ) ); $this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "Setting Position?" , $this->ipsclass->adskin->form_input( 'conf_position', ( isset($_POST['conf_position']) AND $_POST['conf_position'] ) ? $_POST['conf_position'] : $conf['conf_position'] ) ) ); $this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "Setting Description?" , $this->ipsclass->adskin->form_textarea( 'conf_description', ( isset($_POST['conf_description']) AND $_POST['conf_description'] ) ? $_POST['conf_description'] : $conf['conf_description'] ) ) ); $this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "Setting Group?" , $this->ipsclass->adskin->form_dropdown( 'conf_group', $groups, ( isset($_POST['conf_group']) AND $_POST['conf_group'] ) ? $_POST['conf_group'] : $conf['conf_group'] ) ) ); $this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "Setting Type?" , $this->ipsclass->adskin->form_dropdown( 'conf_type', $types, ( isset($_POST['conf_type']) AND $_POST['conf_type'] ) ? $_POST['conf_type'] : $conf['conf_type'] ) ) ); $this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "Setting Key?" , $this->ipsclass->adskin->form_input( 'conf_key', ( isset($_POST['conf_key']) AND $_POST['conf_key'] ) ? $_POST['conf_key'] : $conf['conf_key'] ) ) ); $this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "Setting Current Value?" , $this->ipsclass->adskin->form_textarea( 'conf_value', $this->ipsclass->txt_htmlspecialchars( ( isset($_POST['conf_value']) AND $_POST['conf_value'] ) ? $_POST['conf_value'] : $conf['conf_value'] ) ) ) ); $this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "Setting Default Value?" , $this->ipsclass->adskin->form_textarea( 'conf_default', $this->ipsclass->txt_htmlspecialchars( ( isset($_POST['conf_default']) AND $_POST['conf_default'] ) ? $_POST['conf_default'] : $conf['conf_default'] ) ) ) ); $this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "Setting Extra?
Use for creating form element extras.
Drop down box use: Key=Value; one per line.
" , $this->ipsclass->adskin->form_textarea( 'conf_extra', ( isset($_POST['conf_extra']) AND $_POST['conf_extra'] ) ? $_POST['conf_extra'] : $conf['conf_extra'] ) ) ); $this->ipsclass->html .= $this->ipsclass->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.
" , $this->ipsclass->adskin->form_textarea( 'conf_evalphp', ( isset($_POST['conf_evalphp']) AND $_POST['conf_evalphp'] ) ? $_POST['conf_evalphp'] : $conf['conf_evalphp'] ) ) ); $this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "Start setting group?
Enter title here or leave blank to not start a setting group
" , $this->ipsclass->adskin->form_input( 'conf_start_group', ( isset($_POST['conf_start_group']) AND $_POST['conf_start_group'] ) ? $_POST['conf_start_group'] : $conf['conf_start_group'] ) ) ); $this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "End setting group?
End an opened setting group
" , $this->ipsclass->adskin->form_yes_no( 'conf_end_group', ( isset($_POST['conf_end_group']) AND $_POST['conf_end_group'] ) ? $_POST['conf_end_group'] : $conf['conf_end_group'] ) ) ); if ( IN_DEV ) { $this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "Make a default settings (cannot be removed by user)?" , $this->ipsclass->adskin->form_yes_no( 'conf_protected', ( isset($_POST['conf_protected']) AND $_POST['conf_protected'] ) ? $_POST['conf_protected'] : $conf['conf_protected'] ) ) ); } $this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "Add this option into the settings cache?" , $this->ipsclass->adskin->form_yes_no( 'conf_add_cache', ( isset($_POST['conf_add_cache']) AND $_POST['conf_add_cache'] ) ? $_POST['conf_add_cache'] : $conf['conf_add_cache'] ) ) ); $this->ipsclass->html .= $this->ipsclass->adskin->end_form( $button ); $this->ipsclass->html .= $this->ipsclass->adskin->end_table(); $this->ipsclass->admin->output(); } /*-------------------------------------------------------------------------*/ // VIEW SETTINGS TO EDIT /*-------------------------------------------------------------------------*/ /** * Grabs a group of settings by direct ID, search key or via * $this->get_by_key * * @return void; */ function setting_view( $conf_fields=array() ) { //----------------------------------------- // INIT //----------------------------------------- $search_key = isset($this->ipsclass->input['search']) ? trim( urldecode( $this->ipsclass->input['search'] ) ) : ''; $conf_group = $this->ipsclass->input['conf_group']; $conf_title_keyword = $this->ipsclass->input['conf_title_keyword']; $conf_titles = array(); $in_group = array(); $last_conf_id = -1; $start = intval($this->ipsclass->input['st']) >=0 ? intval($this->ipsclass->input['st']) : 0; $end = 150; $this->ipsclass->input['search'] = isset($this->ipsclass->input['search']) ? $this->ipsclass->input['search'] : ''; $load_modules = array(); $key_array = array(); $_show_error = 0; $html = ''; //----------------------------------------- // Sort out key stuff //----------------------------------------- $this->get_by_key = $this->get_by_key ? $this->get_by_key : ( $conf_title_keyword ? $conf_title_keyword : '' ); //----------------------------------------- // Load and config the std/rte editors //----------------------------------------- require_once( ROOT_PATH."sources/handlers/han_editor.php" ); $this->han_editor = new han_editor(); $this->han_editor->ipsclass =& $this->ipsclass; $this->han_editor->from_acp = 1; $this->han_editor->init(); //----------------------------------------- // Load and config the post parser //----------------------------------------- require_once( ROOT_PATH."sources/handlers/han_parse_bbcode.php" ); $this->parser = new parse_bbcode(); $this->parser->ipsclass =& $this->ipsclass; $this->parser->allow_update_caches = 1; $this->parser->bypass_badwords = 1; $this->ipsclass->DB->build_query( array( 'select' => '*', 'from' => 'acp_help', 'where' => "is_setting=1" ) ); $this->ipsclass->DB->exec_query(); while( $r = $this->ipsclass->DB->fetch_row() ) { $this->help_settings[ $r['page_key'] ] = $r; } //----------------------------------------- // Page headers //----------------------------------------- $this->ipsclass->admin->page_title = $this->ipsclass->admin->page_title ? $this->ipsclass->admin->page_title : "System Configuration Settings"; $this->ipsclass->admin->page_detail = $this->ipsclass->admin->page_detail ? $this->ipsclass->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."; //----------------------------------------- // Already got our fields? //----------------------------------------- if ( is_array( $conf_fields ) AND count( $conf_fields ) ) { foreach( $conf_fields as $_id => $_data ) { if ( ! $conf_group ) { $conf_group = $_data['conf_title_id']; $conf_title = $_data['conf_title_title']; } if ( $_data['conf_title_module'] ) { $load_modules[ $r['conf_title_module'] ] = $_data['conf_title_module']; } $this->ipsclass->my_group_helpkey = $_data['conf_title_keyword']; } $title = "Settings for group: {$group_title}"; $conf_entry = $conf_fields; } else { //----------------------------------------- // Grabbing by key? //----------------------------------------- if ( $this->get_by_key ) { $this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'conf_settings_titles' ) ); $this->ipsclass->DB->simple_exec(); while ( $r = $this->ipsclass->DB->fetch_row() ) { if ( $r['conf_title_keyword'] == $this->get_by_key ) { $conf_group = $r['conf_title_id']; $conf_title = $r['conf_title_title']; $this->ipsclass->my_group_helpkey = $r['conf_title_keyword']; if ( $r['conf_title_module'] ) { $load_modules[ $r['conf_title_module'] ] = $r['conf_title_module']; } } } } //----------------------------------------- // Check... //----------------------------------------- if ( ! $conf_group and ! $search_key ) { $this->ipsclass->main_msg = "No group was passed, please try again."; $this->setting_start(); } //----------------------------------------- // Get Groups //----------------------------------------- $this->setting_get_groups(); //----------------------------------------- // Did we search? //----------------------------------------- if ( $search_key ) { $keywords = strtolower($search_key); $this->ipsclass->DB->cache_add_query( 'settings_search', array( 'keywords' => $keywords, 'limit_a' => $start, 'limit_b' => $end ) ); $this->ipsclass->DB->cache_exec_query(); while ( $r = $this->ipsclass->DB->fetch_row() ) { if ( $r['conf_title_noshow'] == 1 ) { continue; } if ( $r['conf_title_module'] ) { $load_modules[ $r['conf_title_module'] ] = $r['conf_title_module']; } $r['conf_start_group'] = ""; $r['conf_end_group'] = ""; $conf_entry[ $r['conf_id'] ] = $r; } if ( ! count( $conf_entry ) ) { $this->ipsclass->main_msg = "Your search for '$keywords' produced no matches."; $this->setting_start(); } $title = "Searched for: ".$keywords; } //----------------------------------------- // Or not... //----------------------------------------- else { $in_g = ""; $this->ipsclass->DB->simple_construct( array( 'select' => 'c.*', 'from' => array( 'conf_settings' => 'c' ), 'where' => "c.conf_group='{$conf_group}'", 'order' => 'c.conf_position, c.conf_title', 'limit' => array( $start,$end ), 'add_join' => array( 0 => array( 'select' => 'cc.conf_title_title, cc.conf_title_module, cc.conf_title_keyword', 'from' => array( 'conf_settings_titles' => 'cc' ), 'where' => 'cc.conf_title_id=c.conf_group', 'type' => 'left' ) ) ) ); $this->ipsclass->DB->simple_exec(); while ( $r = $this->ipsclass->DB->fetch_row() ) { $group_title = $r['conf_title_title']; $conf_entry[ $r['conf_id'] ] = $r; $this->ipsclass->my_group_helpkey = $r['conf_title_keyword']; 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; } if ( $r['conf_title_module'] ) { $load_modules[ $r['conf_title_module'] ] = $r['conf_title_module']; } } $title = "Settings for group: {$group_title}"; } } //----------------------------------------- // start form //----------------------------------------- $this->ipsclass->html .= $this->ipsclass->adskin->start_form( array( 1 => array( 'code' , 'setting_update' ), 2 => array( 'act' , 'op' ), 3 => array( 'id' , $conf_group ), 4 => array( 'search' , $search_key ), 5 => array( 'section' , 'tools' ), 6 => array( 'bounceback' , $this->return_after_save ), ), "theAdminForm", "onclick='return ValidateForm()'", "postingform" ); //----------------------------------------- // Get settings in group //----------------------------------------- $pages = $this->ipsclass->adskin->build_pagelinks( array( 'TOTAL_POSS' => $this->setting_groups[$conf_group]['conf_title_count'], 'PER_PAGE' => $end, 'CUR_ST_VAL' => $start, 'L_SINGLE' => "", 'L_MULTI' => "Multi Page", 'BASE_URL' => $this->ipsclass->base_url."&{$this->ipsclass->form_code}&code=setting_view&search={$search_key}", 'search' => $search_key, ) ); //----------------------------------------- // start table //----------------------------------------- $html .= "
$title "; if ( ! $search_key AND ! $this->get_by_key ) { $html .= $this->ipsclass->adskin->js_make_button("Add New Setting" , $this->ipsclass->base_url."&{$this->ipsclass->form_code}&code=settingnew&conf_group=".$conf_group).' '; $html .= ""; } $html .= "  
"; //----------------------------------------- // Pre-parse... //----------------------------------------- if ( is_array( $load_modules ) AND count( $load_modules ) ) { foreach( $load_modules as $_module ) { $_module = $this->ipsclass->txt_filename_clean( $_module ); $_name = 'setting_' . str_replace( '.php', '', $_module ); $_file = ROOT_PATH . 'sources/components_acp/setting_plugins/'.$_module; if ( file_exists( $_file ) ) { require_once( $_file ); $_plugin = new $_name; $_plugin->ipsclass =& $this->ipsclass; $conf_entry = $_plugin->settings_pre_parse( $conf_entry ); } } } //----------------------------------------- // Continue... //----------------------------------------- if ( is_array( $conf_entry ) and count( $conf_entry ) ) { foreach( $conf_entry as $r ) { if ( ! $_show_error ) { if ( isset($r['_error']) AND $r['_error'] ) { $_show_error = 1; } } $html .= $this->_setting_process_entry( $r ); } } if ( $_show_error ) { $this->ipsclass->html .= $this->ipsclass->skin_acp_global->warning_box( "Settings Error", "One or more of the settings returned an error.
The settings were NOT updated." ) . "
"; } $this->ipsclass->html .= $html; $this->ipsclass->html .= ""; $this->ipsclass->html .= "
"; $this->ipsclass->html .= "

Settings Quick Jump".$this->setting_make_dropdown()."
"; $this->ipsclass->admin->output(); } function setting_help() { $key = trim( $this->ipsclass->input['key'] ); //----------------------------------------- // Load and parse help key file //----------------------------------------- $help = $this->ipsclass->DB->build_and_exec_query( array( 'select' => '*', 'from' => 'acp_help', 'where' => "page_key='{$key}' AND is_setting=1" ) ); if( !$help['page_key'] ) { $this->ipsclass->html = $this->ipsclass->skin_acp_global->warning_box( "Help text not found", "We're sorry - the help text you were looking for could not be found" ); } else { $help['title'] = str_replace( '{base_url}', $this->ipsclass->base_url, $help['help_title'] ); $help['helptext'] = str_replace( '{base_url}', $this->ipsclass->base_url, $help['help_body'] ); $help['title'] = str_replace( '{skin_url}', $this->ipsclass->skin_acp_url, $help['title'] ); $help['helptext'] = str_replace( '{skin_url}', $this->ipsclass->skin_acp_url, $help['helptext'] ); $this->ipsclass->html = $this->html->popup_help( $help['title'], $help['helptext'] ); } $this->ipsclass->admin->print_popup(); } //----------------------------------------- // Settings show - core routine... //----------------------------------------- function _setting_process_entry($r) { $form_element = ""; $dropdown = array(); $start = ""; $end = ""; $revert_button = ""; $tablerow1 = "tablerow1"; $tablerow2 = "tablerow2"; $key = $r['conf_key']; $value = $r['conf_value'] != "" ? $r['conf_value'] : $r['conf_default']; $show = 1; $r['conf_evalphp'] = str_replace("\", "\\", stripslashes($r['conf_evalphp'])); //----------------------------------------- // Default? //----------------------------------------- $css = ""; if ( $r['conf_value'] != "" and ( $r['conf_value'] != $r['conf_default'] ) ) { $tablerow1 = "tablerow1shaded"; $tablerow2 = "tablerow2shaded"; $revert_button = "
ipsclass->input['search']}' title='Revert to default value'>X
"; if( $r['conf_type'] == 'editor' ) { $revert_button .= "
"; } } //----------------------------------------- // Evil eval //----------------------------------------- if ( $r['conf_evalphp'] ) { if ( $this->ipsclass->hax_check_for_executable_code( $r['conf_evalphp'] ) === TRUE ) { $this->ipsclass->main_msg = "Setting PHP code not evaluated. EVAL code contains PHP command keywords."; } else { $save = 0; $show = 1; eval( $r['conf_evalphp'] ); } } switch( $r['conf_type'] ) { case 'input': $form_element = $this->ipsclass->adskin->form_input( $key, str_replace( "'", "'", str_replace( '"', """, $value ) ) ); break; case 'textarea': $form_element = $this->ipsclass->adskin->form_textarea( $key, $value, 45, 5 ); break; case 'editor': $this->parser->parse_html = 1; $this->parser->parse_nl2br = 1; $this->parser->parse_smilies = 1; $this->parser->parse_bbcode = 1; if ( $this->han_editor->method == 'rte' ) { $value = $this->parser->pre_display_parse( $this->parser->pre_db_parse( $value ) ); $value = $this->parser->convert_ipb_html_to_html( $value ); } else { $value = $this->parser->pre_edit_parse( $value ); } $form_element = $this->han_editor->show_editor( $value, $key ); break; case 'yes_no': $form_element = $this->ipsclass->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) //----------------------------------------- $this->ipsclass->forums->forums_init(); require_once( ROOT_PATH.'sources/lib/admin_forum_functions.php' ); $aff = new admin_forum_functions(); $aff->ipsclass =& $this->ipsclass; $dropdown = $aff->ad_forums_forum_list(1); } else if ( $r['conf_extra'] == '#show_groups#' ) { $this->ipsclass->DB->simple_construct( array( 'select' => 'g_id, g_title', 'from' => 'groups' ) ); $this->ipsclass->DB->simple_exec(); while( $row = $this->ipsclass->DB->fetch_row() ) { if( $row['g_id'] == $this->ipsclass->vars['admin_group'] AND $this->ipsclass->member['mgroup'] != $this->ipsclass->vars['admin_group'] ) { continue; } $dropdown[] = array( $row['g_id'], $row['g_title'] ); } } else if ( $r['conf_extra'] == '#show_skins#' ) { $dropdown = $this->ipsclass->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 = $this->ipsclass->adskin->form_dropdown( $key, $dropdown, $value ); } else { $form_element = $this->ipsclass->adskin->form_multiselect( $key, $dropdown, explode( ",", $value ), 5 ); } break; } $help_key = ''; if( array_key_exists( $r['conf_key'], $this->help_settings ) ) { $help_key = "  ipsclass->base_url}§ion=tools&act=op&code=setting_help&key={$r['conf_key']}', 400, 500, 'SettingHelp' );return false;\" title='{$this->help_settings[ $r['conf_key'] ]['help_mouseover']}'>{$this->help_settings[ $r["; } //----------------------------------------- // Error? //----------------------------------------- if ( isset($r['_error']) AND $r['_error'] ) { $form_element = "
".$r['_error']."
" . $form_element; } //----------------------------------------- // Continue //----------------------------------------- $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 //----------------------------------------- $this->ipsclass->input['search'] = isset($this->ipsclass->input['search']) ? $this->ipsclass->input['search'] : ''; if ( $this->ipsclass->input['search'] ) { $this->ipsclass->input['search'] = $this->ipsclass->txt_alphanumerical_clean( $this->ipsclass->input['search'] ); $r['conf_title'] = preg_replace( "/(".$this->ipsclass->input['search'].")/i", "\\1", $r['conf_title'] ); $r['conf_description'] = preg_replace( "/(".$this->ipsclass->input['search'].")/i", "\\1", $r['conf_description'] ); $r['conf_description'] .= "

Setting Group: {$r['conf_title_title']}"; } $html = "$start "; if ( ! $this->get_by_key AND ( $edit or $delete ) ) { $html .= ""; } if ( ! $this->ipsclass->input['search'] and $reorder AND ! $this->get_by_key ) { $html .= ""; } $html .= "
{$r['conf_title']}{$help_key}
{$r['conf_description']}
{$revert_button}
{$form_element}
{$edit} {$delete}
$end "; $this->key_array[] = preg_replace( "/\[\]$/", "", $key ); return $html; } //----------------------------------------- // Settings Start //----------------------------------------- function setting_start() { $this->ipsclass->admin->page_title = "System Configuration Settings"; $this->ipsclass->admin->page_detail = "This section contains all the configuration options for your IPB."; //----------------------------------------- // Are we, like, in dev or what? //----------------------------------------- if ( IN_DEV ) { $last_update = $this->ipsclass->DB->build_and_exec_query( array( 'select' => '*', 'from' => 'cache_store', 'where' => "cs_key='in_dev_setting_update'" ) ); if ( ! $last_update['cs_value'] ) { $this->ipsclass->DB->do_delete( 'cache_store', "cs_key='in_dev_setting_update'" ); $this->ipsclass->DB->do_insert( 'cache_store', array( 'cs_value' => time(), 'cs_key' => "in_dev_setting_update" ) ); $last_update = time(); } $last_settings_save = intval( @filemtime( ROOT_PATH . 'resources/settings.xml' ) ); if ( $last_settings_save > $last_update['cs_value'] ) { $_mtime = $this->ipsclass->get_date( $last_settings_save , 'JOINED' ); $_dbtime = $this->ipsclass->get_date( $last_update['cs_value'], 'JOINED' ); $_html = $this->ipsclass->skin_acp_global->warning_box( "settings.xml File Updated", "The 'resources/settings.xml' file has been updated. Please visit this page to re-import it to make sure your settings are up-to-date
Last modified time for 'settings.xml': $_mtime.
Last import run: $_dbtime" ) . "
"; $this->ipsclass->html .= $_html; } } //$this->setting_titles_check(); //----------------------------------------- // start table //----------------------------------------- $this->ipsclass->adskin->td_header[] = array( "{none}" , "2%" ); $this->ipsclass->adskin->td_header[] = array( "{none}" , "88%" ); $this->ipsclass->adskin->td_header[] = array( "{none}" , "10%" ); $basic_title = "
System Settings
 
" ."  
"; $this->ipsclass->html .= $this->ipsclass->adskin->start_table($basic_title); //----------------------------------------- // Get groups //----------------------------------------- $this->setting_get_groups(); foreach( $this->setting_groups as $r ) { if ( $r['conf_title_noshow'] ) { $hidden = ' (Hidden)'; } else { $hidden = ''; } if( IN_DEV ) { $in_dev_extra = "Export"; } else { $in_dev_extra = ''; } $this->ipsclass->html .= $this->ipsclass->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 {$in_dev_extra}
", 1, 'tablerow3' ) ) ); } $this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( array("
". $this->ipsclass->adskin->js_make_button("Add Setting Group", $this->ipsclass->base_url."&{$this->ipsclass->form_code}&code=settinggroup_new")."
", 3, 'tablesubheader' ) ) ); $this->ipsclass->html .= $this->ipsclass->adskin->end_table(); //----------------------------------------- // Import partial settings? //----------------------------------------- $this->ipsclass->html .= $this->ipsclass->adskin->start_form( array( 1 => array( 'code' , 'settings_do_import' ), 2 => array( 'act' , 'op' ), 3 => array( 'MAX_FILE_SIZE' , '10000000000' ), 4 => array( 'section', $this->ipsclass->section_code ), ) , "uploadform", " enctype='multipart/form-data'" ); //----------------------------------------- $this->ipsclass->adskin->td_header[] = array( " " , "50%" ); $this->ipsclass->adskin->td_header[] = array( " " , "50%" ); //----------------------------------------- $this->ipsclass->html .= $this->ipsclass->adskin->start_table( "XML settings file tools" ); $this->ipsclass->html .= $this->ipsclass->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 end with either '.xml' or '.xml.gz'
" , $this->ipsclass->adskin->form_upload( ) ) ); $this->ipsclass->html .= $this->ipsclass->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
" , $this->ipsclass->adskin->form_input( 'file_location', 'resources/settings.xml' ) ) ); $this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "Tool To Run
Please choose the tool you wish to run
" , $this->ipsclass->adskin->form_dropdown( 'tool', array( 0 => array( 'import', 'Import Settings' ), 1 => array( 'check', 'Show New & Deleted Settings' ) ) ) ) ); $this->ipsclass->html .= $this->ipsclass->adskin->end_form("Run Tool"); $this->ipsclass->html .= $this->ipsclass->adskin->end_table(); //----------------------------------------- // Other & Dev options //----------------------------------------- $this->ipsclass->html .= "

Export Selected Settings
"; if ( IN_DEV ) { $this->ipsclass->html .= "
Developer Options: Export all to XML
"; } $this->ipsclass->admin->output(); } //----------------------------------------- // Settings Update //----------------------------------------- function setting_update( $donothing="" ) { //----------------------------------------- // INIT //----------------------------------------- $bounceback = str_replace( '&', '&', $this->ipsclass->input['bounceback'] ); $load_modules = array(); $db_fields = array(); //----------------------------------------- // Check //----------------------------------------- if ( ! $this->ipsclass->input['id'] and ! $this->ipsclass->input['search'] ) { $this->ipsclass->main_msg = "No ID was passed, please try again"; $this->setting_start(); } //----------------------------------------- // Reorder? //----------------------------------------- if ( isset($this->ipsclass->input['reorder']) AND $this->ipsclass->input['reorder'] ) { foreach ($this->ipsclass->input as $key => $value) { if ( preg_match( "/^cp_(\d+)$/", $key, $match ) ) { if ( isset( $this->ipsclass->input[$match[0]]) ) { $this->ipsclass->DB->do_update( 'conf_settings', array( 'conf_position' => $this->ipsclass->input[$match[0]] ), 'conf_id='.intval($match[1]) ); } } } $this->ipsclass->main_msg = "Settings reordered"; $this->ipsclass->input['conf_group'] = $this->ipsclass->input['id']; $this->setting_view(); } //----------------------------------------- // check... //----------------------------------------- $fields = explode(",", trim($this->ipsclass->input['settings_save']) ); if ( ! count($fields ) ) { $this->ipsclass->main_msg = "No fields were passed to be saved"; $this->ipsclass->settings_view(); } //----------------------------------------- // Get info from DB //----------------------------------------- $this->ipsclass->DB->build_query( array( 'select' => 's.*', 'from' => array( 'conf_settings' => 's' ), 'where' => "conf_key IN ('".implode( "','", $fields )."')", 'add_join' => array( 0 => array( 'select' => 'c.*', 'from' => array( 'conf_settings_titles' => 'c' ), 'where' => 'c.conf_title_id=s.conf_group', 'type' => 'inner' ) ) ) ); $this->ipsclass->DB->exec_query(); while ( $r = $this->ipsclass->DB->fetch_row() ) { if ( $r['conf_title_module'] ) { $load_modules[ $r['conf_title_module'] ] = $r['conf_title_module']; } $r['_value'] = $_POST[ $r['conf_key'] ]; $db_fields[ $r['conf_id'] ] = $r; } //----------------------------------------- // Post-parse... //----------------------------------------- if ( is_array( $load_modules ) AND count( $load_modules ) ) { foreach( $load_modules as $_module ) { $_module = $this->ipsclass->txt_filename_clean( $_module ); $_name = 'setting_' . str_replace( '.php', '', $_module ); $_file = ROOT_PATH . 'sources/components_acp/setting_plugins/'.$_module; if ( file_exists( $_file ) ) { require_once( $_file ); $_plugin = new $_name; $_plugin->ipsclass =& $this->ipsclass; $db_fields = $_plugin->settings_post_parse( $db_fields ); } } //----------------------------------------- // Got any errors? //----------------------------------------- $_error = 0; foreach( $db_fields as $_id => $data ) { if ( $data['_error'] ) { $_error = 1; break; } } if ( $_error ) { $this->setting_view( $db_fields ); return; } } //----------------------------------------- // Continue //----------------------------------------- foreach( $db_fields as $id => $data ) { //----------------------------------------- // INIT //----------------------------------------- $key = $data['conf_key']; //----------------------------------------- // Evil eval //----------------------------------------- if ( $data['conf_evalphp'] ) { if ( $this->ipsclass->hax_check_for_executable_code( $data['conf_evalphp'] ) === TRUE ) { $this->ipsclass->main_msg = "Setting PHP code not evaluated. EVAL code contains PHP command keywords."; } else { $value = $data['_value']; $show = 0; $save = 1; eval( $data['conf_evalphp'] ); $data['_value'] = $_POST[ $key ]; } } if ( $data['conf_type'] == 'editor' ) { if ( ! $this->editor_loaded ) { //----------------------------------------- // Load and config the std/rte editors //----------------------------------------- require_once( ROOT_PATH."sources/handlers/han_editor.php" ); $this->han_editor = new han_editor(); $this->han_editor->ipsclass =& $this->ipsclass; $this->han_editor->from_acp = 1; $this->han_editor->init(); //----------------------------------------- // Load and config the post parser //----------------------------------------- require_once( ROOT_PATH."sources/handlers/han_parse_bbcode.php" ); $this->parser = new parse_bbcode(); $this->parser->ipsclass =& $this->ipsclass; $this->parser->allow_update_caches = 1; $this->parser->bypass_badwords = 1; $this->editor_loaded = 1; } $data['_value'] = $this->han_editor->process_raw_post( $key ); $this->parser->parse_smilies = 1; $this->parser->parse_html = 1; $this->parser->parse_bbcode = 1; $data['_value'] = $this->parser->pre_display_parse( $this->parser->pre_db_parse( $data['_value'] ) ); } $data['_value'] = $this->ipsclass->txt_stripslashes( str_replace( "\r", "", $data['_value'] ) ); if ( ($data['_value'] != $data['conf_default']) ) { $value = str_replace( "'", "'", $this->ipsclass->txt_stripslashes($data['_value']) ); $this->ipsclass->DB->do_update( 'conf_settings', array( 'conf_value' => $value ), 'conf_id='.$data['conf_id'] ); } else if ( $this->ipsclass->input[ $key ] != "" and ( $this->ipsclass->input[ $key ] == $data['conf_default'] ) and $data['conf_value'] != '' ) { $this->ipsclass->DB->do_update( 'conf_settings', array( 'conf_value' => '' ), 'conf_id='.$data['conf_id'] ); } else if ( isset($this->ipsclass->input[ $key ]) AND empty($this->ipsclass->input[ $key ]) ) { $this->ipsclass->DB->do_update( 'conf_settings', array( 'conf_value' => '' ), 'conf_id='.$data['conf_id'] ); } } $this->ipsclass->input['conf_group'] = $this->ipsclass->input['id']; $this->ipsclass->main_msg = "Settings updated"; $this->setting_rebuildcache(); //----------------------------------------- // We're bouncing back (Boing boing) //----------------------------------------- if ( $bounceback ) { $this->ipsclass->admin->redirect_noscreen( $this->ipsclass->base_url.'&'.$bounceback ); } //----------------------------------------- // Still here? //----------------------------------------- if ( ! $donothing ) { $this->setting_view(); } } //----------------------------------------- // Settings Save Form //----------------------------------------- function setting_save($type='add') { //----------------------------------------- // What are we doing? //----------------------------------------- if ( $type == 'edit' ) { if ( ! $this->ipsclass->input['id'] ) { $this->ipsclass->main_msg = "No ID was passed, please try again"; $this->setting_form( $type ); } } //----------------------------------------- // EVAL check //----------------------------------------- if ( $this->ipsclass->hax_check_for_executable_code( $_POST['conf_evalphp'] ) === TRUE ) { $this->ipsclass->main_msg = "You cannot use executable PHP function keywords such as (include, require, include_once, require_once, exec, system and passthru)."; $this->setting_form( $type ); } //----------------------------------------- // check... //----------------------------------------- $conf_group = ( isset($this->ipsclass->input['conf_newgroup']) ANd $this->ipsclass->input['conf_newgroup'] ) ? $this->ipsclass->input['conf_newgroup'] : $this->ipsclass->input['conf_group']; $array = array( 'conf_title' => $this->ipsclass->input['conf_title'], 'conf_description' => $this->ipsclass->txt_stripslashes( $_POST['conf_description'] ), 'conf_group' => $this->ipsclass->input['conf_group'], 'conf_type' => $this->ipsclass->input['conf_type'], 'conf_key' => $this->ipsclass->input['conf_key'], 'conf_value' => $this->ipsclass->txt_stripslashes( $this->ipsclass->txt_UNhtmlspecialchars($_POST['conf_value']) ), 'conf_default' => $this->ipsclass->txt_stripslashes( $this->ipsclass->txt_UNhtmlspecialchars($_POST['conf_default']) ), 'conf_extra' => $this->ipsclass->txt_stripslashes( $_POST['conf_extra'] ), 'conf_evalphp' => ($this->ipsclass->member['mgroup'] == $this->ipsclass->vars['admin_group'] ) ? $this->ipsclass->txt_stripslashes( $_POST['conf_evalphp'] ) : '', 'conf_protected' => intval( $this->ipsclass->input['conf_protected'] ), 'conf_position' => intval( $this->ipsclass->input['conf_position'] ), 'conf_start_group' => $this->ipsclass->input['conf_start_group'], 'conf_end_group' => $this->ipsclass->input['conf_end_group'], 'conf_add_cache' => intval( $this->ipsclass->input['conf_add_cache'] ), ); if ( $type == 'add' ) { $this->ipsclass->DB->do_insert( 'conf_settings', $array ); $this->ipsclass->main_msg = 'New Setting Added'; $this->ipsclass->DB->simple_exec_query( array( 'update' => 'conf_settings_titles', 'set' => 'conf_title_count=conf_title_count+1', 'where' => 'conf_title_id='.$this->ipsclass->input['conf_group'] ) ); } else { $this->ipsclass->DB->do_update( 'conf_settings', $array, 'conf_id='.intval($this->ipsclass->input['id']) ); $this->ipsclass->main_msg = 'Setting Edited'; } $this->setting_rebuildcache(); $this->setting_view(); } //----------------------------------------- // Settings Revert //----------------------------------------- function setting_revert() { $this->ipsclass->input['id'] = intval($this->ipsclass->input['id']); if ( ! $this->ipsclass->input['id'] ) { $this->ipsclass->main_msg = "No ID was passed, please try again"; $this->setting_form(); } $conf = $this->ipsclass->DB->simple_exec_query( array( 'select' => '*', 'from' => 'conf_settings', 'where' => 'conf_id='.$this->ipsclass->input['id'] ) ); //----------------------------------------- // Revert... //----------------------------------------- $this->ipsclass->DB->simple_exec_query( array( 'update' => 'conf_settings', 'set' => "conf_value=''", 'where' => 'conf_id='.$this->ipsclass->input['id'] ) ); $this->ipsclass->main_msg = "Configuration setting reverted back to default."; $this->setting_rebuildcache(); $this->setting_view(); } //----------------------------------------- // Settings Delete //----------------------------------------- function setting_delete() { if ( ! $this->ipsclass->input['id'] ) { $this->ipsclass->main_msg = "No ID was passed, please try again"; $this->setting_form(); } $conf = $this->ipsclass->DB->simple_exec_query( array( 'select' => '*', 'from' => 'conf_settings', 'where' => 'conf_id='.intval($this->ipsclass->input['id']) ) ); //----------------------------------------- // Delete... //----------------------------------------- $this->ipsclass->DB->simple_exec_query( array( 'delete' => 'conf_settings', 'where' => 'conf_id='.intval($this->ipsclass->input['id']) ) ); $this->ipsclass->DB->simple_exec_query( array( 'update' => 'conf_settings_titles', 'set' => 'conf_title_count=conf_title_count-1', 'where' => 'conf_title_id='.$conf['conf_group'] ) ); $this->ipsclass->main_msg = "Configuration Setting Deleted"; $this->setting_rebuildcache(); $this->ipsclass->input['conf_group'] = $conf['conf_group']; $this->setting_view(); } //----------------------------------------- // BBCODE Rebuild Cache //----------------------------------------- function setting_rebuildcache() { $this->ipsclass->cache['settings'] = array(); $this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'conf_settings', 'where' => 'conf_add_cache=1' ) ); $info = $this->ipsclass->DB->simple_exec(); while ( $r = $this->ipsclass->DB->fetch_row($info) ) { $value = $r['conf_value'] != "" ? $r['conf_value'] : $r['conf_default']; if ( $value == '{blank}' ) { $value = ''; } $this->ipsclass->cache['settings'][ $r['conf_key'] ] = $this->ipsclass->txt_stripslashes($value); $this->ipsclass->vars[ $r['conf_key'] ] = $this->ipsclass->cache['settings'][ $r['conf_key'] ]; } $this->ipsclass->update_cache( array( 'name' => 'settings', 'array' => 1, 'deletefirst' => 1 ) ); } //----------------------------------------- // Setting get cache //----------------------------------------- function setting_get_groups() { $this->setting_groups = array(); if ( IN_DEV ) { $this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'conf_settings_titles', 'order' => 'conf_title_title' ) ); $this->ipsclass->DB->simple_exec(); } else { $this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'conf_settings_titles', 'where' => 'conf_title_noshow=0', 'order' => 'conf_title_title' ) ); $this->ipsclass->DB->simple_exec(); } while( $r = $this->ipsclass->DB->fetch_row() ) { $this->setting_groups[ $r['conf_title_id'] ] = $r; $this->setting_groups_by_key[ $r['conf_title_keyword'] ] = $r; } } //----------------------------------------- // Make drop down of available titles //----------------------------------------- function setting_make_dropdown() { if ( ! is_array( $this->setting_groups ) ) { $this->setting_get_groups(); } $ret = "
"; } //----------------------------------------- // Save full text options //----------------------------------------- function do_fulltext() { $this->ipsclass->admin-> get_mysql_version(); if ( $this->ipsclass->DB->sql_can_fulltext() ) { // How many posts do we have? $this->ipsclass->DB->simple_construct( array( 'select' => 'COUNT(*) as cnt', 'from' => 'posts' ) ); $this->ipsclass->DB->simple_exec(); $result = $this->ipsclass->DB->fetch_row(); // If over 15,000 posts... if ( $result['cnt'] > 15000 ) { // Explain how, why and what to do.. $this->ipsclass->admin->page_detail = ""; $this->ipsclass->admin->page_title = "Unable to continue"; $this->ipsclass->html .= $this->return_sql_no_no_cant_do_it_sorry_text(); $this->ipsclass->admin->output(); } else { // Index away! $this->ipsclass->DB->sql_add_fulltext_index( 'topics', 'title' ); $this->ipsclass->DB->sql_add_fulltext_index( 'posts' , 'post' ); } } else { $this->ipsclass->admin->error("Sorry, the version of MySQL that you are using is unable to use FULLTEXT searches"); } $this->ipsclass->admin->save_log("Full Text Options Updated"); $query = urlencode( 'Type of search to use' ); $this->ipsclass->admin->done_screen("Full Text Indexes Rebuilt", "Full Text Settings", "{$this->ipsclass->form_code}&code=setting_view&search={$query}", "redirect" ); } /*-------------------------------------------------------------------------*/ // Checks all the settings titles to ensure they have a key associated. /*-------------------------------------------------------------------------*/ function setting_titles_check() { //----------------------------------------- // Get 'em //----------------------------------------- $this->ipsclass->DB->build_query( array( 'select' => '*', 'from' => 'conf_settings_titles' ) ); $outer = $this->ipsclass->DB->exec_query(); while( $row = $this->ipsclass->DB->fetch_row( $outer ) ) { if ( ! $row['conf_title_keyword'] ) { $new_keyword = strtolower( preg_replace( "#[^\d\w]#", "", $row['conf_title_title'] ) ); $this->ipsclass->DB->do_update( 'conf_settings_titles', array( 'conf_title_keyword' => $new_keyword ), 'conf_title_id='.$row['conf_title_id'] ); } } } //----------------------------------------- // // Save config. Does the hard work, so you don't have to. // //----------------------------------------- /** * @deprecated */ function save_config( $new ) { $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') { $_POST[ $field ] = preg_replace( "/[\.\s]/", "" , $_POST[ $field ] ); $_POST[ $field ] = str_replace('|', "|", $_POST[ $field ]); $_POST[ $field ] = preg_replace( "/,/" , '|', $_POST[ $field ] ); } else if ($field == 'coppa_address') { $_POST[ $field ] = nl2br( $_POST[ $field ] ); } if ( $field == 'gd_font' OR $field == 'html_dir' OR $field == 'upload_dir') { $_POST[ $field ] = str_replace( "'", "'", $_POST[ $field ] ); } else { $_POST[ $field ] = str_replace( "'", "'", stripslashes($_POST[ $field ]) ); } $master[ $field ] = stripslashes($_POST[ $field ]); } $this->ipsclass->admin->rebuild_config($master); } } $this->ipsclass->admin->save_log("Board Settings Updated, Back Up Written"); $this->ipsclass->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:
alter table " . SQL_PREFIX . "topics add fulltext(title);

This query can take a while depending on the number of topics you have.

Step 4: Indexing the posts table
In mysql type:
alter table " . SQL_PREFIX . "posts add fulltext(post);

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.
"; } function settinggroup_export() { if( empty( $this->ipsclass->input['conf_group'] ) ) { return; } $this->ipsclass->input['conf_group'] = intval($this->ipsclass->input['conf_group']); require_once( KERNEL_PATH . 'class_xml.php' ); $xml = new class_xml(); $xml->xml_set_root( 'settingexport', array( 'exported' => time() ) ); $xml->xml_add_group( 'settinggroup' ); $conf_title = $this->ipsclass->DB->simple_exec_query( array( 'select' => 'conf_title_title, conf_title_desc, conf_title_noshow, conf_title_keyword, conf_title_module', 'from' => 'conf_settings_titles', 'where' => "conf_title_id = {$this->ipsclass->input['conf_group']}" ) ); if ( ! $conf_title ) { return; } foreach( $conf_title as $field_name=>$field_value ) { $content[] = $xml->xml_build_simple_tag( $field_name, $field_value ); } $content[] = $xml->xml_build_simple_tag( 'conf_is_title', 1 ); $entry[] = $xml->xml_build_entry( 'setting', $content ); $this->ipsclass->DB->simple_select( '*', 'conf_settings', "conf_group = {$this->ipsclass->input['conf_group']}" ); $this->ipsclass->DB->exec_query(); if( $this->ipsclass->DB->get_num_rows() ) { while( $row = $this->ipsclass->DB->fetch_row() ) { unset( $content ); foreach( $row as $field_name=>$field_value ) { $content[] = $xml->xml_build_simple_tag( $field_name, $field_value ); } $content[] = $xml->xml_build_simple_tag( 'conf_title_keyword', $conf_title['conf_title_keyword'] ); $content[] = $xml->xml_build_simple_tag( 'conf_is_title', 0 ); $entry[] = $xml->xml_build_entry( 'setting', $content ); } $xml->xml_add_entry_to_group( 'settinggroup', $entry ); } $xml->xml_format_document(); $this->ipsclass->admin->show_download( $xml->xml_document, 'mod_settings.xml', '', 0 ); } } ?>