Используется для того, чтобы получить из базы данных без ссылки на 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( "
Введите название PHP-модуля (например, example.php). Указанный файл должен быть загружен в директорию /sources/components_acp/setting_plugins." ,
$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( "
Скрыть из списка системных настроек? " ,
$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 = "Вы должны ввести уникальное ключевое слово для: Ключевые слова для группы";
$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 = "Нет пригодного ID, попробуйте заново ";
$this->settinggroup_form();
return;
}
if ( $test['conf_title_title'] AND $test['conf_title_id'] != $this->ipsclass->input['id'] )
{
$this->ipsclass->main_msg = "Вы уже используете это ключевое слово для уже существующих групп";
$this->settinggroup_form();
return;
}
}
else
{
if ( $test['conf_title_title'] )
{
$this->ipsclass->main_msg = "Вы уже используете это ключевое слово для уже существующих групп";
$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' => $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 = 'Готово!';
}
else
{
$this->ipsclass->DB->do_update( 'conf_settings_titles', $array, 'conf_title_id='.intval($this->ipsclass->input['id']) );
$this->ipsclass->main_msg = 'Готово!';
}
$this->setting_rebuildcache();
$this->setting_start();
}
//-----------------------------------------
//
// New setting form
//
//-----------------------------------------
function setting_form( $type='add' )
{
$this->ipsclass->admin->page_title = "Настройка конфигурации системы";
$this->ipsclass->admin->page_detail = "Эта секция содержит все конфигурационные опции для вашего IPB.";
$this->ipsclass->admin->nav[] = array( '', "Добавление/изменение настройки" );
if ( $type == 'add' )
{
$formcode = 'setting_add';
$title = "Добавление настройки";
$button = "Создать";
$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' => '',
'conf_help_key' => '' );
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 = "Нет пригодного ID, попробуйте заново.";
$this->setting_start();
}
$formcode = 'setting_edit';
$title = "Редактирование настройки «{$conf['conf_title']}»";
$button = "Изменить";
}
$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' , 'Ввод текста (одна строка)' ),
1 => array( 'dropdown', 'Выпадающее меню' ),
2 => array( 'yes_no' , 'Да/нет (единичный выбор ответа)'),
3 => array( 'textarea', 'Текстовое поле' ),
4 => array( 'editor' , 'Редактор' ),
5 => array( 'multi' , 'Мульти-выбор' ),
);
//-----------------------------------------
// 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( "
Название " ,
$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( "
Расположение " ,
$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( "
Описание " ,
$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( "
Группа " ,
$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( "
Тип " ,
$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( "
Ключ " ,
$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( "
Текущее значение " ,
$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( "
Значение по умолчанию? " ,
$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( "
Дополнительно Используетя для ввода дополнительной информации. Пример использования для выпадающего меню: key=value (по одному на строку).
" ,
$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( "
Выполнение PHP-кода до отображения или сохранения настройки: \$show = 1; до отображения настройки.\$save = 1; до сохранения настройки. Используйте \$key и \$value во время написания PHP-кода.
" ,
$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( "
Начать группу настроек: Введите название или оставьте поле пустым, если вы не хотите начинать новую группу.
" ,
$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( "
Закончить группу настроек? Вы можете закрыть открытую группу.
" ,
$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'] )
) );
$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "
Ключ помощи (опционально) «Ключ» используется для ссылок к помощи админцентра.
" ,
$this->ipsclass->adskin->form_input( 'conf_help_key', ( isset($_POST['conf_help_key']) AND $_POST['conf_help_key'] ) ? $_POST['conf_help_key'] : $conf['conf_help_key'] )
) );
if ( IN_DEV )
{
$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "
Сделать настройкой по умолчанию? Пользователи не смогут удалить эту настройку.
" ,
$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( "
Добавить в кеш настроек? " ,
$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_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 = '';
//-----------------------------------------
// 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->init();
$this->han_editor->from_acp = 1;
//-----------------------------------------
// 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;
//-----------------------------------------
// Page headers
//-----------------------------------------
$this->ipsclass->admin->page_title = $this->ipsclass->admin->page_title ? $this->ipsclass->admin->page_title : "Настройки системной конфигурации";
$this->ipsclass->admin->page_detail = $this->ipsclass->admin->page_detail ? $this->ipsclass->admin->page_detail : "Эта секция содержит все конфигурационные настройки системы IP.Board.
Если вы желаете оставить запись пустой, пожалуйста используйте ключевую фразу:
{blank} или значение:
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'];
}
}
$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'];
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 = "Ни одна группа не выбрана, попробуйте снова.";
$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 = "Не найдено ни одной настройки, соответствующей запросу «{$keywords}».";
$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',
'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;
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 = "Список настроек группы «{$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' => "Страниц: ",
'BASE_URL' => $this->ipsclass->base_url."&{$this->ipsclass->form_code}&code=setting_view&search={$search_key}",
'search' => $search_key,
) );
//-----------------------------------------
// start table
//-----------------------------------------
$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 ( $r['_error'] )
{
$_show_error = 1;
}
}
$html .= $this->_setting_process_entry( $r );
}
}
if ( $_show_error )
{
$this->ipsclass->html .= $this->ipsclass->skin_acp_global->warning_box( "Ошибка настроек", "Одна или более настроек возвращают ошибку.Настройки не обновлены. " ) . " ";
}
$this->ipsclass->html .= $html;
$this->ipsclass->html .= " ";
$this->ipsclass->html .= "
";
$this->ipsclass->html .= "
Системные настройки ".$this->setting_make_dropdown()."
";
$this->ipsclass->admin->output();
}
//-----------------------------------------
// 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 = "
";
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() )
{
$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;
}
//-----------------------------------------
// Error?
//-----------------------------------------
if ( $r['_error'] )
{
$form_element = "
".$r['_error']."
" . $form_element;
}
//-----------------------------------------
// Continue
//-----------------------------------------
$delete = "|
Удалить ";
$edit = "
Изменить ";
$reorder = 1;
if ( $r['conf_protected'] and ! IN_DEV )
{
$delete = "";
$edit = "";
$reorder = 0;
}
if ( $r['conf_start_group'] )
{
$start = "
";
}
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'] .= "
Группа настроек: {$r['conf_title_title']}";
}
$html = "$start
$end
";
$this->key_array[] = preg_replace( "/\[\]$/", "", $key );
return $html;
}
//-----------------------------------------
// Settings Start
//-----------------------------------------
function setting_start()
{
$this->ipsclass->admin->page_title = "Системные настройки";
$this->ipsclass->admin->page_detail = "Эта секция позволяет вам изменять системные настройки вашего 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» обновлен",
"Файл «resources/settings.xml» был обновлен. Пожалуйста, посетите
эту страницу для повторного импортирования.
Дата последнего изменения файла «settings.xml»: $_mtime.
Последний запуск импортирования: $_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 = "
";
$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 = ' (скрытая группа)';
}
else
{
$hidden = '';
}
if( IN_DEV )
{
$in_dev_extra = "
";
}
else
{
$in_dev_extra = '';
}
$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "
",
"
{$r['conf_title_title']} $hidden
(настроек: ".intval($r['conf_title_count']).") {$r['conf_title_desc']}
" ,
array("
", 1, 'tablerow3' )
) );
}
$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( array("
".
$this->ipsclass->adskin->js_make_button("Добавить группу настроек", $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( "Импортирование настроек" );
$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "
Загрузка файла XML с настройками Этот файл должен начинаться с «ipb_» и иметь расширение «.xml» или «.xml.gz». Существующие настройки будут обновлены, другие — добавлены.
" ,
$this->ipsclass->adskin->form_upload( )
) );
$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "
ИЛИ введите название файлаЭтот файл должен быть загружен в корневую директорию вашего форума.
" ,
$this->ipsclass->adskin->form_input( 'file_location', 'resources/settings.xml' )
) );
$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "
Запуск инструмента Пожалуйста, выберите инструмент, который необходимо запустить.
" ,
$this->ipsclass->adskin->form_dropdown( 'tool', array( 0 => array( 'import', 'Импортирование' ), 1 => array( 'check', 'Сравнение' ) ) )
) );
$this->ipsclass->html .= $this->ipsclass->adskin->end_form("Импортировать");
$this->ipsclass->html .= $this->ipsclass->adskin->end_table();
//-----------------------------------------
// Other & Dev options
//-----------------------------------------
$this->ipsclass->html .= "
";
if ( IN_DEV )
{
$this->ipsclass->html .= "
";
}
$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 = "Вы должны ввести ID системной настройки";
$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 = "Системные настройки пересортированы";
$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 = "Нет полей для сохранения";
$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->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 = "Системные настройки обновлены";
$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 = "Вы должны ввести ID системной настройки";
$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'];
//-----------------------------------------
// Added by Artur (ibresource.ru)
//-----------------------------------------
//$_POST['conf_description'] = nl2br($_POST['conf_description']);
$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_help_key' => $this->ipsclass->input['conf_help_key'],
'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 = 'Новая системная настройка добавлена';
$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 = 'Системная настройка изменена';
}
$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 = "Вы должны ввести ID системной настройки";
$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 = "Системная настройка возвращена к первоначальному виду.";
$this->setting_rebuildcache();
$this->setting_view();
}
//-----------------------------------------
// Settings Delete
//-----------------------------------------
function setting_delete()
{
if ( ! $this->ipsclass->input['id'] )
{
$this->ipsclass->main_msg = "Вы должны ввести ID системной настройки";
$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 = "Системная настройка удалена";
$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 = "Продолжение невозможно";
$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("Извините, ваша версия MySQL не поддерживает поиск по полному тексту");
}
$this->ipsclass->admin->save_log("Обновлены настройки поиска по полному тексту");
$this->ipsclass->admin->done_screen("Индексы поиска по полному тексты обновлены", "Настройки поиска по полному тексту", "{$this->ipsclass->form_code}&code=setting_view&conf_group=19", "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("Обновлены настройки форума, Back Up записан");
$this->ipsclass->admin->done_screen("Конфигурация обновлена", "Начало Админцентра", "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 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:
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.
";
}
function settinggroup_export()
{
if( empty( $this->ipsclass->input['conf_group'] ) )
{
return;
}
/**
* Santy
*/
$this->ipsclass->input['conf_group'] = intval($this->ipsclass->input['conf_group']);
/**
* Require the XML class
*/
require_once( KERNEL_PATH . 'class_xml.php' );
$xml = new class_xml();
/**
* Set the root tag
*/
$xml->xml_set_root( 'settingexport', array( 'exported' => time() ) );
/**
* Create base group
*/
$xml->xml_add_group( 'settinggroup' );
/**
* Grab title keyword first
*/
$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']}" ) );
/**
* Die?
*/
if ( ! $conf_title )
{
return;
}
/**
* Create Content
*/
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 );
/**
* Grab settings
*/
$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 );
}
/**
* Format
*/
$xml->xml_format_document();
/**
* Send to browser
*/
$this->ipsclass->admin->show_download( $xml->xml_document, 'mod_settings.xml', '', 0 );
}
}
?>