$Date: 2006-02-03 16:54:26 +0000 (Fri, 03 Feb 2006) $
| > $Revision: 137 $
| > $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 "
Неверный вход У Вас нет доступа к директиве этого файла. Если Вы проводили обновления, убедитесь, что не забыли обновить 'admin.php'.";
exit();
}
class ad_settings {
var $base_url;
var $in_group = array();
var $key_array = array();
/**
* Section title name
*
* @var string
*/
var $perm_main = "tools";
/**
* Section title name
*
* @var string
*/
var $perm_child = "op";
function auto_run()
{
//-----------------------------------------
// Kill globals - globals bad, Homer good.
//-----------------------------------------
$tmp_in = array_merge( $_GET, $_POST, $_COOKIE );
foreach ( $tmp_in as $k => $v )
{
unset($$k);
}
//-----------------------------------------
$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_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;
//-----------------------------------------
default:
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':' );
$this->setting_start();
break;
}
}
//-----------------------------------------
//
// 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();
$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 = "Не выбрано ни одного файла для загрузки или неправильное название файла.";
$this->setting_start();
}
if ( ! file_exists( ROOT_PATH . $this->ipsclass->input['file_location'] ) )
{
$this->ipsclass->main_msg = "Невозможно найти файл, чтобы открыть: " . 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 );
}
//-----------------------------------------
// 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_help_key', 'conf_add_cache' , 'conf_title_keyword' );
$setting_fields = array( 'conf_title_keyword', 'conf_title_title', 'conf_title_desc', 'conf_title_noshow' );
//-----------------------------------------
// Fix up...
//-----------------------------------------
if ( ! is_array( $xml->xml_array['settingexport']['settinggroup']['setting'][0] ) )
{
//-----------------------------------------
// Ensure [0] is populated
//-----------------------------------------
$tmp = $xml->xml_array['settingexport']['settinggroup']['setting'];
unset($xml->xml_array['settingexport']['settinggroup']['setting']);
$xml->xml_array['settingexport']['settinggroup']['setting'][0] = $tmp;
}
//-----------------------------------------
// Loop through and sort out settings...
//-----------------------------------------
foreach( $xml->xml_array['settingexport']['settinggroup']['setting'] as $id => $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 $idx => $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'] );
//-----------------------------------------
// 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 $idx => $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 $i => $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 );
}
}
//-----------------------------------------
// Resync
//-----------------------------------------
$this->ipsclass->main_msg = "$updated настройки обновлены $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];
}
}
}
//-----------------------------------------
// Got any?
//-----------------------------------------
if ( ! count( $ids ) )
{
$this->ipsclass->main_msg = "Вы должны выделить хоть КАКИЕ-НИБУДЬ настройки для экспорта!";
$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 $id => $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'] );
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 = "Экспорт выделенных настроек системы";
$this->ipsclass->admin->page_detail = "Проверьте все поля, которые выделили для экспорта настроек";
//-----------------------------------------
// 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 .= "";
$this->ipsclass->admin->output();
}
//-----------------------------------------
//
// Find setting group (don't rely on IDs)
//
//-----------------------------------------
function setting_findgroup()
{
if ( ! $this->ipsclass->input['key'] AND ! $this->ipsclass->input['conf_title_keyword'])
{
$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'])) OR $r['conf_title_keyword'] == $this->ipsclass->input['conf_title_keyword'] )
{
$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 $i => $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'] );
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, 'ipb_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='.$this->ipsclass->input['id'] ) );
$count = intval($conf['count']);
if ( $count > 0 )
{
$this->ipsclass->main_msg = "Нельзя удалить эту группу настроек, так как в ней содержатся активные настройки";
}
else
{
$this->ipsclass->DB->simple_exec_query( array( 'delete' => 'conf_settings_titles', 'where' => 'conf_title_id='.$this->ipsclass->input['id'] ) );
$this->ipsclass->main_msg = "Группа настроек удалена";
}
}
$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='.$this->ipsclass->input['id'] ) );
$count = intval($conf['count']);
$this->ipsclass->DB->do_update( 'conf_settings_titles', array( 'conf_title_count' => $count ), 'conf_title_id='.$this->ipsclass->input['id'] );
}
$this->setting_start();
}
//-----------------------------------------
//
// New setting group form
//
//-----------------------------------------
function settinggroup_form( $type='add' )
{
$this->ipsclass->admin->page_title = "Настройка конфигурации системы";
$this->ipsclass->admin->page_detail = "Эта секция содержит все конфигурационные опции для вашего IPB.";
if ( $type == 'add' )
{
$formcode = 'settinggroup_add';
$title = "Создать новую группу настроек для форума";
$button = "Создать новую группу";
}
else
{
$conf = $this->ipsclass->DB->simple_exec_query( array( 'select' => '*', 'from' => 'conf_settings_titles', 'where' => 'conf_title_id='.$this->ipsclass->input['id'] ) );
if ( ! $conf['conf_title_id'] )
{
$this->ipsclass->main_msg = "Нет пригодного ID, попробуйте заново .";
$this->setting_start();
}
$formcode = 'settinggroup_edit';
$title = "Редактирование настройки ".$conf['conf_title'];
$button = "Сохранить изменения";
}
$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( "Заголовок для группы настроек? " ,
$this->ipsclass->adskin->form_input( 'conf_title_title', $_POST['conf_title_title'] ? $_POST['conf_title_title'] : $conf['conf_title_title'] )
) );
$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "Описание для группы настроек? " ,
$this->ipsclass->adskin->form_textarea( 'conf_title_desc', $_POST['conf_title_desc'] ? $_POST['conf_title_desc'] : $conf['conf_title_desc'] )
) );
$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "Ключевое слово для группы настроек? Используется для того, чтобы вытащить из базы данных без ссылки на ID
" ,
$this->ipsclass->adskin->form_input( 'conf_title_keyword', $_POST['conf_title_keyword'] ? $_POST['conf_title_keyword'] : $conf['conf_title_keyword'] )
) );
//-----------------------------------------
// er....
//-----------------------------------------
if ( IN_DEV )
{
$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "Спрятать из листа с главными настройками? " ,
$this->ipsclass->adskin->form_yes_no( 'conf_title_noshow', $_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'],
);
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='.$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.";
if ( $type == 'add' )
{
$formcode = 'setting_add';
$title = "Создать новую настройку для форума";
$button = "Создать новую настройку";
$conf = array( 'conf_group' => $this->ipsclass->input['conf_group'], 'conf_add_cache' => 1 );
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='.$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 $i => $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( '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', $_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', $_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', $_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, $_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, $_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', $_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( $_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( $_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', $_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', $_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', $_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', $_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', $_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', $_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', $_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()
{
//-----------------------------------------
// INIT
//-----------------------------------------
$search_key = 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'] );
$end = 150;
//-----------------------------------------
// 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 : "Эта секция содержит все конфигурационные настройки для вашего форума IPB. Если вы желаете оставить запись пустой, пожалуйста используйте ключевые фразы: {blank} или ноль: 0 .";
$this->ipsclass->admin->nav[] = array( "{$this->ipsclass->form_code}", "Просмотреть главные настройки" );
//-----------------------------------------
// 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'];
}
}
}
//-----------------------------------------
// Check...
//-----------------------------------------
if ( ! $conf_group and ! $search_key )
{
$this->ipsclass->main_msg = "Ни одна группа не выбрана, попробуйте снова.";
$this->setting_start();
}
//-----------------------------------------
// Get Groups
//-----------------------------------------
$this->setting_get_groups();
//-----------------------------------------
// 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 ),
) );
//-----------------------------------------
// Get settings in group
//-----------------------------------------
$pages = $this->ipsclass->build_pagelinks( array( 'TOTAL_POSS' => $this->setting_groups[$conf_group]['conf_title_count'],
'PER_PAGE' => $end,
'CUR_ST_VAL' => $start,
'L_SINGLE' => "",
'L_MULTI' => $un_all."Multi Page",
'BASE_URL' => $this->ipsclass->base_url."&{$this->ipsclass->form_code}&code=setting_view&search={$search_key}",
'search' => $search_key,
) );
//-----------------------------------------
// 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;
}
$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 = "Найдено для: ".$keywords;
}
//-----------------------------------------
// Or not...
//-----------------------------------------
else
{
$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',
'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;
}
}
$title = "Настройки для группы: {$group_title}";
}
$key_array = array();
//-----------------------------------------
// start table
//-----------------------------------------
$this->ipsclass->html .= "
";
if ( is_array( $conf_entry ) and count( $conf_entry ) )
{
foreach( $conf_entry as $id => $r )
{
$this->ipsclass->html .= $this->_setting_process_entry( $r );
}
}
$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 = "";
$tdrow1 = "tdrow1";
$tdrow2 = "tdrow2";
$key = $r['conf_key'];
$value = $r['conf_value'] != "" ? $r['conf_value'] : $r['conf_default'];
$show = 1;
//-----------------------------------------
// Default?
//-----------------------------------------
$css = "";
if ( $r['conf_value'] != "" and ( $r['conf_value'] != $r['conf_default'] ) )
{
$tdrow1 = "tdrow1shaded";
$tdrow2 = "tdrow2shaded";
$revert_button = "";
}
//-----------------------------------------
// Evil eval
//-----------------------------------------
if ( $r['conf_evalphp'] )
{
$show = 1;
eval( $r['conf_evalphp'] );
}
switch( $r['conf_type'] )
{
case 'input':
$form_element = $this->ipsclass->adskin->form_input( $key, str_replace( "'", "'", $value ) );
break;
case 'textarea':
$form_element = $this->ipsclass->adskin->form_textarea( $key, $value, 45, 5 );
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;
}
$delete = "| Удалить ";
$edit = "Изменить ";
$reorder = 1;
if ( $r['conf_protected'] and ! IN_DEV )
{
$delete = "";
$edit = "";
$reorder = 0;
}
if ( $r['conf_start_group'] )
{
$start = "
{$r['conf_start_group']}
";
}
else
{
if ( ! in_array( $r['conf_id'], $this->in_group ) and ! $r['conf_end_group'] )
{
$start = "
";
}
}
if ( $r['conf_end_group'] )
{
$end = "
";
}
else
{
if ( ! in_array( $r['conf_id'], $this->in_group ) and ! $r['conf_start_group'] )
{
$end = "
";
}
}
//-----------------------------------------
// Search hi-lite
//-----------------------------------------
if ( $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'] );
}
$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.";
//$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 $i => $r )
{
if ( $r['conf_title_noshow'] )
{
$hidden = ' (невидимые)';
}
else
{
$hidden = '';
}
$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, 'tdrow3' )
) );
}
$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, 'pformstrip' )
) );
$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)" );
$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', 'ipb_settings_partial.xml' )
) );
$this->ipsclass->html .= $this->ipsclass->adskin->end_form("Импортировать XML-архив с настройками");
$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'] );
//-----------------------------------------
// Check
//-----------------------------------------
if ( ! $this->ipsclass->input['id'] and ! $this->ipsclass->input['search'] )
{
$this->ipsclass->main_msg = "Вы должны ввести ID системной настройки";
$this->setting_start();
}
//-----------------------------------------
// Reorder?
//-----------------------------------------
if ( $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='.$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
//-----------------------------------------
$db_fields = array();
$this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'conf_settings', 'where' => "conf_key IN ('".implode( "','", $fields )."')" ) );
$this->ipsclass->DB->simple_exec();
while ( $r = $this->ipsclass->DB->fetch_row() )
{
$db_fields[ $r['conf_key'] ] = $r;
}
foreach( $db_fields as $key => $data )
{
if ( $data['conf_evalphp'] )
{
$save = 1;
eval( $data['conf_evalphp'] );
}
if ( ($_POST[ $key ] != $data['conf_default']) )
{
$value = str_replace( "'", "'", $this->ipsclass->txt_stripslashes($_POST[ $key ]) );
$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'] );
}
}
$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')
{
if ( $type == 'edit' )
{
if ( ! $this->ipsclass->input['id'] )
{
$this->ipsclass->main_msg = "Вы должны ввести ID системной настройки";
$this->setting_form();
}
}
//-----------------------------------------
// check...
//-----------------------------------------
$conf_group = $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->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='.$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='.$this->ipsclass->input['id'] ) );
//-----------------------------------------
// Delete...
//-----------------------------------------
$this->ipsclass->DB->simple_exec_query( array( 'delete' => 'conf_settings', 'where' => 'conf_id='.$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->ipsclass->adskin->add_td_basic( $this->return_sql_no_no_cant_do_it_sorry_text(), 'left', 'faker' );
$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 ] = preg_replace( "/'/", "'", $_POST[ $field ] );
}
else
{
$_POST[ $field ] = preg_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:
\g alter table ibf_topics add fulltext(title);
If you are not using 'ibf_' as your table extension, adjust that query to suit. This query can take a while
depending on the number of topics you have.
Step 4: Indexing the posts table
In mysql type:
\g alter table ibf_posts add fulltext(post);
If you are not using 'ibf_' as your table extension, adjust that query to suit. This query can take a while
depending on the number of posts you have. On average MySQL can index 80,000 posts an hour. If you are using MySQL 4, the time is greatly reduced.
";
}
}
?>