<?php

/*
+--------------------------------------------------------------------------
|   Invision Power Board v1.2
|   ========================================
|   by Matthew Mecham
|   (c) 2001 - 2003 Invision Power Services
|   http://www.invisionpower.com
|   ========================================
|   Web: http://www.invisionboard.com
|   Email: matt@invisionpower.com
|   Licence Info: http://www.invisionboard.com/?license
+---------------------------------------------------------------------------
|
|   > Admin Setting functions
|   > Module written by Matt Mecham
|   > Date started: 20th March 2002
|
|	> Module Version Number: 1.0.0
+--------------------------------------------------------------------------
*/


$idx = new ad_settings();


class ad_settings {

	var $base_url;

	function ad_settings() {
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP, $HTTP_POST_VARS;
		
		//---------------------------------------
		// Kill globals - globals bad, Homer good.
		//---------------------------------------
		
		$tmp_in = array_merge( $_GET, $_POST, $_COOKIE );
		
		foreach ( $tmp_in as $k => $v )
		{
			unset($$k);
		}

		//---------------------------------------
		
		$DB->query("SELECT VERSION() AS version");
		
		if ( ! $row = $DB->fetch_row() )
		{
			$DB->query("SHOW VARIABLES LIKE 'version'");
			$row = $DB->fetch_row();
		}
		
		$this->true_version = $row['version'];
		
		$no_array = explode( '.', preg_replace( "/^(.+?)[-_]?/", "\\1", $row['version']) );
		
		$one   = (!isset($no_array) || !isset($no_array[0])) ? 3  : $no_array[0];
		$two   = (!isset($no_array[1]))                      ? 21 : $no_array[1];
		$three = (!isset($no_array[2]))                      ? 0  : $no_array[2];
		
   		$this->mysql_version = (int)sprintf('%d%02d%02d', $one, $two, intval($three));

		switch($IN['code'])
		{
			case 'fulltext':
				$this->fulltext();
				break;
				
			case 'dofulltext':
				$this->do_fulltext();
				break;
				
			case 'phpinfo':
				phpinfo();
				exit;
				
			case 'glines':
				$this->guidelines();
				break;
			case 'doglines':
				$this->do_guidelines();
				break;
				
			case 'cookie':
				$this->cookie();
				break;
			case 'docookie':
				$this->save_config( array( 'cookie_domain', 'cookie_id', 'cookie_path' ) );
				break;
				
			case 'warn':
				$this->warn();
				break;
			case 'dowarn':
				$HTTP_POST_VARS['warn_protected'] = ','. @implode( ",", $HTTP_POST_VARS['groups'] ) . ',';
				$this->save_config( array( 	'warn_show_rating', "warn_past_max", 'warn_show_own', 'warn_min', 'warn_protected', 'warn_mod_day', 'warn_gmod_day', "warn_gmod_ban","warn_gmod_modq","warn_gmod_post","warn_mod_post","warn_mod_modq","warn_mod_ban",'warn_max',"warn_on" ) );
				break;

			case 'secure':
				$this->secure();
				break;
			case 'dosecure':
				$this->save_config( array ( 'strip_space_chr', 'validate_day_prune', 'bot_antispam', 'use_ttf', 'gd_width', 'gd_height',"gd_font",  'disable_admin_anon', 'disable_online_ip', 'disable_reportpost', 'allow_dynamic_img','session_expiration','match_browser','allow_dup_email','allow_images', 'force_login', 'no_reg',
											'allow_flash','new_reg_notify','use_mail_form','flood_control', 'allow_online_list', 'reg_auth_type' ) );
				break;
			//-------------------------
			case 'post':
				$this->post();
				break;
			case 'dopost':
				$this->save_config( array ( 'poll_disable_noreply', 'siu_thumb', 'siu_width', 'siu_height', 'startpoll_cutoff', 'post_wordwrap', 'allow_result_view', 'max_poll_choices', 'poll_tags', 'guest_name_pre', 'guest_name_suf', 'max_w_flash', 'max_h_flash', 'hot_topic', 'display_max_topics','display_max_posts','max_emos','max_images','emo_per_row', 'etfilter_punct', 'etfilter_shout',
											'strip_quotes', 'max_post_length','show_img_upload','pre_polls','pre_moved','pre_pinned','img_ext' ) );
				break;
			//-------------------------
			case 'avatars':
				$this->avatars();
				break;
			case 'doavatars':
				$this->save_config( array ( 'av_gal_cols' , "disable_ipbsize", "photo_ext", 'subs_autoprune', 'topicpage_contents', 'postpage_contents', 'allow_skins', 'max_sig_length', 'sig_allow_ibc', 'sig_allow_html','avatar_ext','avatar_url','avup_size_max','avatars_on','avatar_dims','avatar_def', 'max_location_length', 'max_interest_length', 'post_titlechange', 'guests_ava', 'guests_img', 'guests_sig' ) );
				break;
			//-------------------------
			case 'dates':
				$this->dates();
				break;
			case 'dodates':
				$this->save_config( array ( 'time_offset','clock_short','clock_joined','clock_long', 'time_adjust' ) );
				break;
			//-------------------------
			
			case 'calendar':
				$this->calendar();
				break;
			case 'docalendar':
				$this->save_config( array ( 'autohide_bday', 'autohide_calendar', 'show_birthdays', 'show_bday_calendar', 'show_calendar','calendar_limit', 'year_limit', 'start_year' ) );
				break;
			//-------------------------
			
			case 'cpu':
				$this->cpu();
				break;
			case 'docpu':
				$this->save_config( array ( 'custom_profile_topic', 'min_search_word', 'short_forum_jump', 'no_au_forum', 'no_au_topic', 'au_cutoff', 'load_limit','show_active','show_birthdays','show_totals','allow_search', 'search_post_cut', 'show_user_posted', 'nocache' ) );
				break;
			//-------------------------
			case 'email':
				$this->email();
				break;
			case 'doemail':
				$this->save_config( array ( 'email_in', 'email_out', 'mail_method', 'smtp_host', 'smtp_port', 'smtp_user', 'smtp_pass' ) );
				break;
			//-------------------------
			case 'url':
				$this->url();
				break;
			case 'dourl':
				$this->save_config( array ( 'number_format', 'html_dir','safe_mode_skins', 'board_name','board_url','home_name','home_url', 'disable_gzip',
										    'html_url','upload_url', 'upload_dir', 'print_headers', 'header_redirect', 'debug_level', 'sql_debug') );
				break;
				break;
			//-------------------------
			case 'pm':
				$this->pm();
				break;
			case 'dopm':
				$this->save_config( array ( 'show_max_msg_list', 'msg_allow_code', 'msg_allow_html' ) );
				break;
			//-------------------------
			case 'news':
				$this->news();
				break;
			case 'donews':
				$this->save_config( array ( 'news_forum_id', 'index_news_link' ) );
				break;
			//-------------------------
			case 'coppa':
				$this->coppa();
				break;
			case 'docoppa':
				$this->save_config( array ( 'use_coppa', 'coppa_fax', 'coppa_address' ) );
				break;
			//-------------------------
			case 'board':
				$this->board();
				break;
			case 'doboard':
				$this->save_config( array ( 'board_offline', 'offline_msg' ) );
				break;
			//-------------------------
			case 'spider':
				$this->spider();
				break;
			case 'dospider':
				$this->save_config( array (  'spider_suit', "spider_sense","spider_visit","spider_group","spider_active",'sp_google' ,'sp_inktomi','sp_lycos'  ,'sp_jeeves','sp_wuseek', 'spider_anon' ) );
				break;
			//-------------------------
			case 'bw':
				$this->badword();
				break;
			case 'bw_add':
				$this->add_badword();
				break;
			case 'bw_remove':
				$this->remove_badword();
				break;
			case 'bw_edit':
				$this->edit_badword();
				break;
			case 'bw_doedit':
				$this->doedit_badword();
				break;
			//-------------------------
			case 'emo':
				$this->emoticons();
				break;
			case 'emo_add':
				$this->add_emoticons();
				break;
			case 'emo_remove':
				$this->remove_emoticons();
				break;
			case 'emo_edit':
				$this->edit_emoticons();
				break;
			case 'emo_doedit':
				$this->doedit_emoticons();
				break;
			case 'emo_upload':
				$this->upload_emoticon();			
			//-------------------------
			case 'count':
				$this->countstats();
				break;
			case 'docount':
				$this->docount();
				break;
			default:
				$this->cookie();
				break;
		}
		
	}
	
	
	
	//-------------------------------------------------------------
	// Full Text options page
	//--------------------------------------------------------------
	
	function fulltext()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP, $HTTP_POST_VARS;
	
		//---------------------------------------
		// Get the mySQL version.
		// Adapted from phpMyAdmin
		//---------------------------------------
		
		$DB->query("SELECT VERSION() AS version");
		
		if ( ! $row = $DB->fetch_row() )
		{
			$DB->query("SHOW VARIABLES LIKE 'version'");
			$row = $DB->fetch_row();
		}
		
		$this->true_version = $row['version'];
		
		$no_array = explode( '.', preg_replace( "/^(.+?)[-_]?/", "\\1", $row['version']) );
		
		$one   = (!isset($no_array) || !isset($no_array[0])) ? 3  : $no_array[0];
		$two   = (!isset($no_array[1]))                      ? 21 : $no_array[1];
		$three = (!isset($no_array[2]))                      ? 0  : $no_array[2];
		
   		$this->mysql_version = (int)sprintf('%d%02d%02d', $one, $two, intval($three));
   		
   		$this->common_header('dofulltext', '全文檢索設定', '您可以在下面變更組態');
   		
   		if ( $this->mysql_version < 32323 )
   		{
   			$ADMIN->html .= $SKIN->add_td_basic("<strong>抱歉，您安裝的 MySQL 沒有使用全文檢索的能力。</strong><br />請連絡您的主機服務商進行 MySQL 升級。");
											
   			$ADMIN->html .= $SKIN->end_form($button);
										 
			$ADMIN->html .= $SKIN->end_table();
		
			$ADMIN->output();
			
			exit();
		}
		else
		{
			$ADMIN->html .= $SKIN->add_td_basic("<strong>什麼是全文檢索？</strong><br />全文檢索是一種無須維護人工索引
												而能非常快速有效率地搜尋巨量文章的方式。");
												
			//-------------------------------------------
			// Do we already have full text enabled?
			//-------------------------------------------
			
			$DB->query("SHOW CREATE TABLE ibf_posts");
			
			$tbl_info = $DB->fetch_row();
			
			if ( preg_match( "/FULLTEXT KEY/i", $tbl_info['Create Table'] ) )
			{
				$ADMIN->html .= $SKIN->add_td_basic("<b>全文索引已經存在</b><input type='hidden' name='ftexist' value='1' />");
									 			 
				$ADMIN->html .= $SKIN->add_td_row( array( "<b>要使用的搜尋類型？</b>" ,
												  $SKIN->form_dropdown( "search_sql_method", array( 0 => array( 'ftext', '全文' ), 1 => array( 'man', '手動' ) ), $INFO['search_sql_method'] )
										 )      );
	
				$ADMIN->html .= $SKIN->add_td_row( array( "<b>預設搜尋模式？</b><br>只有在使用全文檢索時才有影響" ,
												  $SKIN->form_dropdown( "search_default_method", array( 0 => array( 'simple', '簡易搜尋' ), 1 => array( 'adv', '進階' ) ), $INFO['search_default_method']  )
										 )      );
			}
			else
			{
				$ADMIN->html .= $SKIN->add_td_basic( "<b>在您可以進行設定之前必須建立全文索引。只要送出此表單即可開始設置索引。</b>" .
											       "<input type='hidden' name='setup' value='1'>");
			}
			
			$this->common_footer();
		}						 
	}
	
	//-------------------------------------------------------------
	// Save full text options
	//--------------------------------------------------------------
	
	function do_fulltext()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP, $HTTP_POST_VARS;
		
		if ( $IN['ftexist'] == 1)
		{
			$master = array();
			$master['search_sql_method']      = $IN['search_sql_method'];
			$master['search_default_method']  = $IN['search_default_method'];
			
			$ADMIN->rebuild_config($master);
		}
		else
		{
			// They don't.
			// Check for correct version and if need be, attempt to create the indexes...
			
			if ( $this->mysql_version >= 32323 )
			{
				// How many posts do we have?
				
				$DB->query("SELECT COUNT(*) as cnt from ibf_posts");
				
				$result = $DB->fetch_row();
				
				// If over 15,000 posts...
				
				if ( $result['cnt'] > 15000 )
				{
					// Explain how, why and what to do..
					
					$ADMIN->page_detail = "";
					$ADMIN->page_title  = "無法繼續";
		
					$ADMIN->html .= $SKIN->add_td_basic( $this->return_sql_no_no_cant_do_it_sorry_text(), 'left', 'faker' );
					
					$ADMIN->output();
				}
				else
				{
					// Index away!
					
					$DB->query("alter table ibf_topics add fulltext(title)");
					
					$DB->query("alter table ibf_posts add fulltext(post)");
					
				}
			}
			else
			{
				$ADMIN->error("抱歉，您目前的 MySQL 版本無法使用全文檢索");
			}
		}
		
		$ADMIN->save_log("已更新全文選項");
		
		$ADMIN->done_screen("已更新全文設定", "全文設定", "act=op&code=fulltext" );
		
	}
	
	//-------------------------------------------------------------
	// WARNY PORNY!
	//--------------------------------------------------------------
	
	function warn()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP;
	
		$this->common_header('dowarn', '會員警告設定', '您可以在下面變更組態' );
		
		$DB->query("SELECT g_id, g_title FROM ibf_groups ORDER BY g_title");
		
		while ( $r = $DB->fetch_row() )
		{
			$mem_group[] = array( $r['g_id'] , $r['g_title'] );
		}
		
		$protected = explode(',', trim($INFO['warn_protected']) );
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>啟用警告系統？</b>" ,
										  $SKIN->form_yes_no( "warn_on", $INFO['warn_on']  )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>警告層級...</b><br />這與會員個人資料中的視覺指標有關" ,
										 '最小 '.$SKIN->form_simple_input( 'warn_min' , $INFO['warn_min']  == "" ? 0 : $INFO['warn_min'] ) .' 到 '.
										 '最大 '.$SKIN->form_simple_input( 'warn_max' , $INFO['warn_max']  == "" ? 10 : $INFO['warn_max'] ) .
										 "<br>允許負數。如果有使用負數，我們建議您不要使用圖形方塊及百分比，改用 '評價' 模式為 '警告模式' 則不用顧慮到起始數字為負數。<br>當會員註冊時警告層級都是從零開始。"
								 )      );	
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>受保護的群組...</b><br>無法被警告的群組<br />您可以選擇一個以上" ,
												  $SKIN->form_multiselect( "groups[]", $mem_group, $protected )
										 )      );
										 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>允許其他所有不受保護的群組看到 <em>他們自己</em> 的警告層級與理由？</b>" ,
										  $SKIN->form_yes_no( "warn_show_own", $INFO['warn_show_own']  )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>一旦達到最小或最大值時允許繼續警告？</b>" ,
										  $SKIN->form_yes_no( "warn_past_max", $INFO['warn_past_max']  )
								 )      );
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>視覺指標類型？</b>" ,
										  $SKIN->form_dropdown( 'warn_show_rating', array( 0 => array( 0, '警告模式：顯示圖形方塊 & 百分比' ), 1 => array( 1, '評價模式：顯示 < 最小 | 目前 | 最大 > 層級' ) ), $INFO['warn_show_rating']  )
								 )      );				 
								 
		//-----------------------------------------------------------------------------------------------------------						 
		
		$ADMIN->html .= $SKIN->add_td_basic( '討論區板主權限', 'left', 'catrow2' );
		
		//----------------------------------------------------------------------------------------------------------- 
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>板主可以由警告平台封鎖？</b><br />適用於那些被允許使用警告系統的板主<br />管理員可以由警告平台自動為之。" ,
										  $SKIN->form_yes_no( "warn_mod_ban", $INFO['warn_mod_ban']  )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>板主可以由警告平台管制佇列會員？</b><br />適用於那些被允許使用警告系統的板主<br />管理員可以由警告平台自動為之。" ,
										  $SKIN->form_yes_no( "warn_mod_modq", $INFO['warn_mod_modq']  )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>板主可以由警告平台移除發表權利？</b><br />適用於那些被允許使用警告系統的板主<br />管理員可以由警告平台自動為之。" ,
										  $SKIN->form_yes_no( "warn_mod_post", $INFO['warn_mod_post']  )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>板主可以警告會員...</b>" ,
										 $SKIN->form_input( 'warn_mod_day' , $INFO['warn_mod_day']  == "" ? 1 : $INFO['warn_mod_day'] ).'... 次一天'
								 )      );		
								 
		//-----------------------------------------------------------------------------------------------------------						 
		
		$ADMIN->html .= $SKIN->add_td_basic( '全體板主權限', 'left', 'catrow2' );
		
		//-----------------------------------------------------------------------------------------------------------
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>全體板主可以由警告平台封鎖？</b><br />管理員可以由警告平台自動為之。" ,
										  $SKIN->form_yes_no( "warn_gmod_ban", $INFO['warn_gmod_ban']  )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>全體板主可以由警告平台管制佇列會員？</b><br />管理員可以由警告平台自動為之。" ,
										  $SKIN->form_yes_no( "warn_gmod_modq", $INFO['warn_gmod_modq']  )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>全體板主可以由警告平台移除發表權利？</b><br />管理員可以由警告平台自動為之。" ,
										  $SKIN->form_yes_no( "warn_gmod_post", $INFO['warn_gmod_post']  )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>全體板主可以警告會員...</b>" ,
										 $SKIN->form_input( 'warn_gmod_day' , $INFO['warn_gmod_day']  == "" ? 1 : $INFO['warn_gmod_day'] ).'... 次一天'
								 )      );
								 
		$this->common_footer();
	
	}
	
	//-------------------------------------------------------------
	// SPIDER MAN! CHECK OUT THOSE CRAZY PANTS!
	//--------------------------------------------------------------
	
	function spider()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP;
	
		$this->common_header('dospider', '搜尋引擎蜘蛛/爬行設定', '您可以在下面變更組態<br />'.$SKIN->js_help_link('set_spider') );
		
		$DB->query("SELECT g_id, g_title FROM ibf_groups ORDER BY g_title");
		
		$mem_group = array();
		
		while ( $r = $DB->fetch_row() )
		{
			if ($INFO['admin_group'] == $r['g_id'])
			{
				if ($MEMBER['mgroup'] != $INFO['admin_group'])
				{
					continue;
				}
			}
			
			$mem_group[] = array( $r['g_id'] , $r['g_title'] );
		}
		
		$DB->query("SELECT sname, sid FROM ibf_skins ORDER BY sname");
		
		$skin_sets = array( 0 => array('', "使用預設面板" ) );
		
		while ( $s = $DB->fetch_row() )
		{
			$skin_sets[] = array( $s['sid'], $s['sname'] );
		}
		
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>啟用搜尋引擎蜘蛛識別？</b>" ,
										  $SKIN->form_yes_no( "spider_sense", $INFO['spider_sense']  )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>記錄所有蜘蛛訪問？</b><br />如果您遭到重度攻擊，請把這項關閉！" ,
										  $SKIN->form_yes_no( "spider_visit", $INFO['spider_visit']  )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>將蜘蛛/機器人當成哪個群組的一部份？</b>" ,
										  $SKIN->form_dropdown( "spider_group", $mem_group, $INFO['spider_group'] == "" ? $INFO['guest_group'] : $INFO['spider_group']  )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>強制蜘蛛/機器人使用面板：</b>" ,
										  $SKIN->form_dropdown( "spider_suit", $skin_sets, $INFO['spider_suit']  )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>在活動使用者列表顯示蜘蛛/機器人？</b>" ,
										  $SKIN->form_yes_no( "spider_active", $INFO['spider_active']  )
										  ."<br />".$SKIN->form_checkbox( 'spider_anon', $INFO['spider_anon'] )." 顯示為匿名者 (只有最高管理員可以看見)"
								 )      );
		//-----------------------------------------------------------------------------------------------------------						 
		
		$ADMIN->html .= $SKIN->add_td_basic( '在活動使用者列表...', 'left', 'catrow2' );
		
		//-----------------------------------------------------------------------------------------------------------
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>呼叫 Googlebot...</b>" ,
										 $SKIN->form_input( 'sp_google' , $INFO['sp_google']  == "" ? 'GoogleBot'   : $INFO['sp_google'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>呼叫 Microsoft / Hotbot...</b>" ,
										 $SKIN->form_input( 'sp_inktomi', $INFO['sp_inktomi'] == "" ? 'Hot Bot'     : $INFO['sp_inktomi'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>呼叫 Lycos...</b>" ,
										 $SKIN->form_input( 'sp_lycos'  , $INFO['sp_lycos']   == "" ? 'Lycos'       : $INFO['sp_lycos'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>呼叫 Ask Jeeves...</b>" ,
										 $SKIN->form_input( 'sp_jeeves' , $INFO['sp_jeeves']  == "" ? 'Ask Jeeves'  : $INFO['sp_jeeves'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>呼叫 What U Seek...</b>" ,
										 $SKIN->form_input( 'sp_wuseek' , $INFO['sp_wuseek']  == "" ? 'What U Seek' : $INFO['sp_wuseek'] )
								 )      );
		
		$this->common_footer();
	
	
	}
	
	
	//-------------------------------------------------------------
	// Board Guidelines
	//--------------------------------------------------------------
	
	function do_guidelines()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP, $HTTP_POST_VARS;
		
		$master = array();
		$master['gl_show']  = $IN['gl_show'];
		$master['gl_link']  = $IN['gl_link'];
		$master['gl_title'] = $DB->oopsAddSlashes($IN['gl_title']); /* 中文修正 */
		
		$ADMIN->rebuild_config($master);
		
		$glines = $std->txt_raw2form($HTTP_POST_VARS['gl_guidelines']);
		$glines = str_replace( "<br>", "<br />", $glines);
		
		$DB->query("SELECT * FROM ibf_cache_store WHERE cs_key='boardrules'");

		if ( $row = $DB->fetch_row() )
		{
			$DB->query("UPDATE ibf_cache_store SET cs_value='".$DB->oopsAddSlashes($glines)."' WHERE cs_key='boardrules'");
		}
		else
		{
			$db_string = $DB->compile_db_insert_string( array(
															   'cs_key' => 'boardrules',
															   'cs_value' => $glines,
										  ) );

			$DB->query("INSERT INTO ibf_cache_store (".$db_string['FIELD_NAMES'].") VALUES(".$db_string['FIELD_VALUES'].")");
		}

		$ADMIN->save_log("已更新論壇指南");
		
		$ADMIN->done_screen("已更新討論區組態", "管理控制台首頁", "act=index" );
		
	}
	
	//---------------------------------------------
	
	function guidelines()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP;
	
		$this->common_header('doglines', '論壇準則/規則', '您可以在下面變更組態');
		
		$DB->query("SELECT * FROM ibf_cache_store WHERE cs_key='boardrules'");
		
		$row = $DB->fetch_row();
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>在頁眉中顯示準則連結？</b>" ,
										  $SKIN->form_yes_no( "gl_show", $INFO['gl_show'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>外部準則頁面 http:// 連結？</b><br>留空使用內部頁面" ,
										  $SKIN->form_input( "gl_link", $INFO['gl_link'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>使用在頁眉上的抬頭？</b>" ,
										  $SKIN->form_input( "gl_title", $INFO['gl_title'] )
								 )      );
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>如果不使用外部連結；準則/規則文字</b><br>HTML 開放" ,
										  $SKIN->form_textarea( "gl_guidelines", $std->my_br2nl($row['cs_value']), 65, 20  )
								 )      );
								 
 
		$this->common_footer();
	
	
	}
	
	//-------------------------------------------------------------
	// COPPA
	//--------------------------------------------------------------
	
	function coppa()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP;
	
		$this->common_header('docoppa', 'COPPA 設定', '您可以在下面變更配置。注意，在您的論壇啟用 <a href="http://www.ftc.gov/ogc/coppa1.htm" target="_blank">COPPA</a> 時，會要求 13 歲以下的兒童以傳真或郵件表單取得父母的同意。');
		
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>使用 COPPA 註冊系統？</b>" ,
										  $SKIN->form_yes_no( "use_coppa", $INFO['use_coppa']  )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>接收 COPPA 表單的傳真號碼</b>" ,
										  $SKIN->form_input( "coppa_fax", $INFO['coppa_fax']  )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>接收 COPPA 表單的郵件地址</b>" ,
										  $SKIN->form_textarea( "coppa_address", str_replace( "\n\n", "\n", $std->my_br2nl(str_replace( "\r\n", "\n", $INFO['coppa_address']) ) )  )
								 )      );
		
		
		$this->common_footer();
	
	
	}
	
	//=====================================================
	
	function docount()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP;
		
		if ( (! $IN['posts']) and (! $IN['members'] ) and (! $IN['lastreg'] ) )
		{
			$ADMIN->error("沒有要重新計算的！");
		}
		
		$stats = array();
		
		if ($IN['posts'])
		{
			$DB->query("SELECT COUNT(pid) as posts FROM ibf_posts WHERE queued <> 1");
			$r = $DB->fetch_row();
			$stats['TOTAL_REPLIES'] = $r['posts'];
			$stats['TOTAL_REPLIES'] < 1 ? 0 : $stats['TOTAL_REPLIES'];
			
			$DB->query("SELECT COUNT(tid) as topics FROM ibf_topics WHERE approved = 1");
			$r = $DB->fetch_row();
			$stats['TOTAL_TOPICS'] = $r['topics'];
			$stats['TOTAL_TOPICS'] < 1 ? 0 : $stats['TOTAL_TOPICS'];
			
			$stats['TOTAL_REPLIES'] -= $stats['TOTAL_TOPICS'];
		}
		
		if ($IN['members'])
		{
			$DB->query("SELECT COUNT(uid) as members from ibf_members WHERE mgroup <> '".$INFO['auth_group']."'");
			$r = $DB->fetch_row();
			$stats['MEM_COUNT'] = $r['members'];
			// Remove "guest" account...
			$stats['MEM_COUNT']--;
			$stats['MEM_COUNT'] < 1 ? 0 : $stats['MEM_COUNT'];
		}
		
		if ($IN['lastreg'])
		{
			$DB->query("SELECT uid, uname FROM ibf_members WHERE mgroup <> '".$INFO['auth_group']."' ORDER BY uid DESC LIMIT 0,1");
			$r = $DB->fetch_row();
			$stats['LAST_MEM_NAME'] = $r['uname'];
			$stats['LAST_MEM_ID']   = $r['uid'];
		}
		
		if ($IN['online'])
		{
			$stats['MOST_DATE'] = time();
			$stats['MOST_COUNT'] = 1;
		}
		
		if ( count($stats) > 0 )
		{
			$db_string = $DB->compile_db_update_string( $stats );
			$DB->query("UPDATE ibf_stats SET $db_string");
		}
		else
		{
			$ADMIN->error("沒有要重新計算的！");
		}
		
		$ADMIN->done_screen("已重新計算統計", "管理控制台首頁", "act=index" );
		
	}
	
	
	
	function countstats()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP;
	
		$ADMIN->page_detail = "請選擇要重新計算的統計值";
		$ADMIN->page_title  = "重新計算統計控制";
		
		$ADMIN->html .= $SKIN->start_form( array( 1 => array( 'code'  , 'docount' ),
												  2 => array( 'act'   , 'op'     ),
									     )      );
									     
		//+-------------------------------
		
		$SKIN->td_header[] = array( "統計"    , "70%" );
		$SKIN->td_header[] = array( "選項"       , "30%" );
		
		//+-------------------------------
		
		$ADMIN->html .= $SKIN->start_table( "重新計算統計" );
		
		$ADMIN->html .= $SKIN->add_td_row( array( "重新計算所有主題與文章",
												  $SKIN->form_dropdown( 'posts', array( 0 => array( 1, '是'  ), 1 => array( 0, '否' ) ) )
										 )      );
										 
		$ADMIN->html .= $SKIN->add_td_row( array( "重新計算會員",
												  $SKIN->form_dropdown( 'members', array( 0 => array( 1, '是'  ), 1 => array( 0, '否' ) ) )
										 )      );
										 
		$ADMIN->html .= $SKIN->add_td_row( array( "重設最新註冊會員",
												  $SKIN->form_dropdown( 'lastreg', array( 0 => array( 1, '是'  ), 1 => array( 0, '否' ) ) )
										 )      );
										 
		$ADMIN->html .= $SKIN->add_td_row( array( "重設 '線上最高記錄' 統計？",
												  $SKIN->form_dropdown( 'online', array( 0 => array( 0, '否'  ), 1 => array( 1, '是' ) ) )
										 )      );
										 
		$ADMIN->html .= $SKIN->end_form('重設這些統計');
										 
		$ADMIN->html .= $SKIN->end_table();
		
		$ADMIN->output();
	
	}
	
	//-------------------------------------------------------------
	// CALENDAR
	//--------------------------------------------------------------
	
	function calendar()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP;
	
		$this->common_header('docalendar', '日曆設定', '您可以在下面變更配置');
		
		$INFO['start_year'] = (isset($INFO['start_year'])) ? $INFO['start_year'] : 2001;
		$INFO['year_limit'] = (isset($INFO['year_limit'])) ? $INFO['year_limit'] : 5;
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>在日曆主頁面顯示生日？</b>" ,
										  $SKIN->form_yes_no( "show_bday_calendar", $INFO['show_bday_calendar'] )
								 )      );
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>在論壇首頁顯示今天生日者？</b>" ,
										  $SKIN->form_yes_no( "show_birthdays", $INFO['show_birthdays'] )
										  ."<br />".$SKIN->form_checkbox( "autohide_bday", $INFO["autohide_bday"] )." 無可顯示時自動隱藏？"
								 )      );
								 						 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>顯示即將來臨的事件？</b><br>這會將日曆事件顯示在論壇首頁的統計區內" ,
										  $SKIN->form_yes_no( "show_calendar", $INFO['show_calendar'] )
										  ."<br />".$SKIN->form_checkbox( "autohide_calendar", $INFO["autohide_calendar"] )." 無可顯示時自動隱藏？"
								 )      );
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>顯示最近未來 [x] 天的事件</b><br>這適用於上面的選項" ,
										  $SKIN->form_input( "calendar_limit", $INFO['calendar_limit']  )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>日曆 '年份' 下拉選單的開始年份</b><br>這適用於檢視日曆 / 發表事件" ,
										  $SKIN->form_input( "start_year", $INFO['start_year']  )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>'年份' 下拉選單的年限</b><br>這適用於檢視日曆 / 發表事件。<br>範例：現在是 2002 年，您輸入 5 - 最後可選的年份 = 2007" ,
										  $SKIN->form_input( "year_limit", $INFO['year_limit']  )
								 )      );
								 
 		
								 
		$this->common_footer();
	
	
	}
	
	//-------------------------------------------------------------
	// URLs and ADDRESSES
	//--------------------------------------------------------------
	
	function board()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP;
	
		$this->common_header('doboard', '論壇關閉/開放', '您可以在下面變更配置');
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>關閉論壇？</b><br>有權限的人依然可以進入論壇" ,
										  $SKIN->form_yes_no( "board_offline", $INFO['board_offline'] )
								 )      );
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>要顯示的關閉訊息</b>" ,
										  $SKIN->form_textarea( "offline_msg", $INFO['offline_msg']  )
								 )      );
								 
 
		$this->common_footer();
	
	
	}
	
	//-------------------------------------------------------------
	// EMOTICON FUNCTIONS
	//-------------------------------------------------------------

	function doedit_emoticons()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP;

		if ($IN['before'] == "")
		{
			$ADMIN->error("您必須輸入一個要取代的文字!");
		}

		if ($IN['id'] == "")
		{
			$ADMIN->error("您必須輸入一個有效的表情圖示 id!");
		}

		if ( strstr( $IN['before'], '&#092;' ) )
		{
			$ADMIN->error("您不能在 \"{$IN['before']}\" 使用反斜線字元，請改用其他字元");
		}

		$IN['clickable'] = $IN['clickable'] ? 1 : 0;

		$db_string = $DB->compile_db_update_string( array( 'code'      => $IN['before'],
														   'smile_url' => $IN['after'],
														   'clickable' => $IN['click'],
												  )      );

		$DB->query("UPDATE ibf_emoticons SET $db_string WHERE id='".$IN['id']."'");

		$std->boink_it($SKIN->base_url."&act=op&code=emo");
		exit();


	}

	//=====================================================


	function edit_emoticons()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP;

		$ADMIN->page_detail = "您可以在下面編輯表情圖示過濾";
		$ADMIN->page_title  = "編輯表情圖示";

		//+-------------------------------

		if ($IN['id'] == "")
		{
			$ADMIN->error("您必須輸入一個有效的過濾 id!");
		}

		//+-------------------------------

		$DB->query("SELECT * FROM ibf_emoticons WHERE id='".$IN['id']."'");

		if ( ! $r = $DB->fetch_row() )
		{
			$ADMIN->error("無法在資料庫中找到該表情圖示");
		}

		//+-------------------------------

		$ADMIN->html .= $SKIN->start_form( array( 1 => array( 'code'  , 'emo_doedit' ),
												  2 => array( 'act'   , 'op'     ),
												  3 => array( 'id'    , $IN['id'] ),
									     )      );



		$SKIN->td_header[] = array( "之前"  , "40%" );
		$SKIN->td_header[] = array( "之後"   , "40%" );
		$SKIN->td_header[] = array( "+ 可點選"  , "20%" );

		//+-------------------------------

		$emos = array();

		if (! is_dir($INFO['html_dir'].'/../../../uploads') )
		{
			$ADMIN->error("無法找到表情圖示目錄 - 請確定 'html_dir' 路徑設置妥當");
		}

		//+-------------------------------


		$dh = opendir( $INFO['html_dir'].'/../../../uploads' ) or die("無法開啟要讀取的表情圖示目錄，請檢查路徑及權限");
 		while ( $file = readdir( $dh ) )
 		{
 			if ( preg_match( "/^smil.*/i", $file ) )
 			{
 				$emos[] = array( $file, $file );
 			}
 		}
 		closedir( $dh );

 		//+-------------------------------

		$ADMIN->html .= $SKIN->start_table( "編輯表情圖示" );

		$ADMIN->html .= "<script language='javascript'>
						 <!--
						 	function show_emo() {

						 		var emo_url = '{$INFO['html_url']}/../../../uploads/' + document.theAdminForm.after.options[document.theAdminForm.after.selectedIndex].value;

						 		document.images.emopreview.src = emo_url;
							}
						//-->
						</script>
						";

		$ADMIN->html .= $SKIN->add_td_row( array( $SKIN->form_input('before', stripslashes($r['code']) ),
												  $SKIN->form_dropdown('after', $emos, $r['smile_url'], "onChange='show_emo()'") . "&nbsp;&nbsp;<img src='../../uploads/{$r['smile_url']}' name='emopreview' border='0'>",
												  $SKIN->form_dropdown( 'click', array( 0 => array( 1, '是'  ), 1 => array( 0, '否' ) ), $r['clickable'] )
										 )      );

		$ADMIN->html .= $SKIN->end_form('編輯表情圖示');

		$ADMIN->html .= $SKIN->end_table();

		$ADMIN->output();

	}

	//=====================================================

	function remove_emoticons()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP;

		if ($IN['id'] == "")
		{
			$ADMIN->error("您必須輸入一個有效的表情圖示 id!");
		}

		$DB->query("DELETE FROM ibf_emoticons WHERE id='".$IN['id']."'");

		$std->boink_it($SKIN->base_url."&act=op&code=emo");
		exit();


	}

	//=====================================================

	function add_emoticons()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP;

		if ($IN['before'] == "")
		{
			$ADMIN->error("您必須輸入要置換的表情圖示文字!");
		}

		if ( strstr( $IN['before'], '&#092;' ) )
		{
			$ADMIN->error("您不能在 \"{$IN['before']}\" 使用反斜線字元，請改用其他的字元.");
		}

		$IN['click'] = $IN['click'] ? 1 : 0;

		$db_string = $DB->compile_db_insert_string( array( 'code'       => $IN['before'],
														   'smile_url'  => $IN['after'],
														   'clickable'  => $IN['click'],
												  )      );

		$DB->query("INSERT INTO ibf_emoticons (".$db_string['FIELD_NAMES'].") VALUES(".$db_string['FIELD_VALUES'].")");

		$std->boink_it($SKIN->base_url."&act=op&code=emo");
		exit();


	}


	function perly_length_sort($a, $b)
	{
		if ( strlen($a['code']) == strlen($b['code']) )
		{
			return 0;
		}
		return ( strlen($a['code']) > strlen($b['code']) ) ? -1 : 1;
	}

	function perly_word_sort($a, $b)
	{
		if ( strlen($a['code']) == strlen($b['code']) )
		{
			return 0;
		}
		return ( strlen($a['code']) > strlen($b['code']) ) ? -1 : 1;
	}

	//=====================================================

	function upload_emoticon()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP, $HTTP_POST_FILES;

		$FILE_NAME = $HTTP_POST_FILES['FILE_UPLOAD']['name'];
		$FILE_SIZE = $HTTP_POST_FILES['FILE_UPLOAD']['size'];
		$FILE_TYPE = $HTTP_POST_FILES['FILE_UPLOAD']['type'];

		// Naughty Opera adds the filename on the end of the
		// mime type - we don't want this.

		$FILE_TYPE = preg_replace( "/^(.+?);.*$/", "\\1", $FILE_TYPE );

		if (! is_dir($INFO['html_dir'].'../../../uploads') )
		{
			$ADMIN->error("無法找到表情圖示目錄 - 請確定 'html_dir' 路徑是否設定正確");
		}

		// Naughty Mozilla likes to use "none" to indicate an empty upload field.
		// I love universal languages that aren't universal.

		if ($HTTP_POST_FILES['FILE_UPLOAD']['name'] == "" or !$HTTP_POST_FILES['FILE_UPLOAD']['name'] or ($HTTP_POST_FILES['FILE_UPLOAD']['name'] == "none") )
		{
			$ADMIN->error("沒有選擇要上傳的檔案!");
		}

		//-------------------------------------------------
		// Copy the upload to the uploads directory
		//-------------------------------------------------

		if (! @move_uploaded_file( $HTTP_POST_FILES['FILE_UPLOAD']['tmp_name'], $INFO['html_dir'].'../../../uploads'."/"."smiles-".$FILE_NAME) )
		{
			$ADMIN->error("上傳失敗");
		}
		else
		{
			@chmod( $INFO['html_dir'].'../../../uploads'."/".$FILE_NAME, 0777 );
		}

		$std->boink_it($SKIN->base_url."&act=op&code=emo");
		exit();


	}

	function emoticons()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP;

		$ADMIN->page_detail = "您可以在這裡增加/編輯或移除表情圖示.<br>您只能選擇已經上傳到 <font color=blue>'yoursite.com/uploads'</font> 目錄的表情圖示<br><br>可點選與發表畫面 '可點選表情圖示' 表格中的表情圖示有關.";
		$ADMIN->page_title  = "表情圖示控制";

		//+-------------------------------

		$SKIN->td_header[] = array( "之前"      , "30%" );
		$SKIN->td_header[] = array( "之後"       , "30%" );
		$SKIN->td_header[] = array( "+ 可點選" , "20%" );
		$SKIN->td_header[] = array( "編輯"        , "10%" );
		$SKIN->td_header[] = array( "移除"      , "10%" );

		//+-------------------------------



		$ADMIN->html .= $SKIN->start_table( "目前的表情圖示" );

		$DB->query("SELECT * from ibf_emoticons");

		$emo_url = $INFO['html_url'] . '/../../../uploads';

		$smilies = array();

		if ( $DB->get_num_rows() )
		{
			while ( $r = $DB->fetch_row() )
			{
				$smilies[] = $r;
			}

			usort($smilies, array( 'ad_settings', 'perly_length_sort' ) );

			foreach( $smilies as $array_idx => $r )
			{

				$click = $r['clickable'] ? '是' : '否';

				$ADMIN->html .= $SKIN->add_td_row( array( stripslashes($r['code']),
														  "<center><img src='$emo_url/{$r['smile_url']}'></center>",
														  "<center>$click</center>",
														  "<center><a href='".$SKIN->base_url."&act=op&code=emo_edit&id={$r['id']}'>編輯</a></center>",
														  "<center><a href='".$SKIN->base_url."&act=op&code=emo_remove&id={$r['id']}'>移除</a></center>",
												 )      );



			}
		}

		$ADMIN->html .= $SKIN->end_table();

		//+-------------------------------

		$emos = array();

		if (! is_dir($INFO['html_dir'].'../../../uploads') )
		{
			$ADMIN->error("無法找到表情圖示目錄 - 請確定 'html_dir' 路徑是否設正確");
		}

		//+-------------------------------

		$cnt   = 0;
		$start = "";

		$dh = opendir( $INFO['html_dir'].'../../../uploads' ) or die("無法開啟表情圖示目錄以進行讀取，請檢查路徑與權限");
 		while ( $file = readdir( $dh ) )
 		{
			if (preg_match("/^smil.*/i",$file))
 			{
 				$emos[] = array( $file, $file );

 				if ($cnt == 0)
 				{
 					$cnt = 1;
 					$start = $file;
 				}
 			}
 		}
 		closedir( $dh );

 		//+-------------------------------

		$ADMIN->html .= $SKIN->start_form( array( 1 => array( 'code'  , 'emo_add' ),
												  2 => array( 'act'   , 'op'     ),
									     )      );


		$SKIN->td_header[] = array( "之前"       , "40%" );
		$SKIN->td_header[] = array( "之後"        , "40%" );
		$SKIN->td_header[] = array( "+ 可點選"  , "20%" );

		//+-------------------------------

		$ADMIN->html .= "<script language='javascript'>
						 <!--
						 	function show_emo() {

						 		var emo_url = '{$INFO['html_url']}/../../../uploads/' + document.theAdminForm.after.options[document.theAdminForm.after.selectedIndex].value;

						 		document.images.emopreview.src = emo_url;
							}
						//-->
						</script>
						";

		$ADMIN->html .= $SKIN->start_table( "新增表情圖示" );

		$ADMIN->html .= $SKIN->add_td_row( array( $SKIN->form_input('before'),
												  $SKIN->form_dropdown('after', $emos, "", "onChange='show_emo()'") . "&nbsp;&nbsp;<img src='../../uploads/$start' name='emopreview' border='0'>",
												  $SKIN->form_dropdown( 'click', array( 0 => array( 1, 'Yes'  ), 1 => array( 0, 'No' ) ) )
										 )      );

		$ADMIN->html .= $SKIN->end_form('增加表情圖示');

		$ADMIN->html .= $SKIN->end_table();

		//+-------------------------------
		//+-------------------------------

		$ADMIN->html .= $SKIN->start_form( array( 1 => array( 'code'  , 'emo_upload' ),
												  2 => array( 'act'   , 'op'     ),
												  3 => array( 'MAX_FILE_SIZE', '10000000000' ),
									     ) , "uploadform", " enctype='multipart/form-data'"     );


		$SKIN->td_header[] = array( "&nbsp;"       , "40%" );
		$SKIN->td_header[] = array( "&nbsp;"       , "60%" );


		$ADMIN->html .= $SKIN->start_table( "上傳一個表情圖示到表情圖示目錄" );

		$ADMIN->html .= $SKIN->add_td_row( array( "<b>從您的電腦選擇一個要上傳的檔案</b><br>上傳之後，可在上面的表單選用表情圖示.",
												  $SKIN->form_upload(),
										 )      );

		$ADMIN->html .= $SKIN->end_form('上傳表情圖示');

		$ADMIN->html .= $SKIN->end_table();

		$ADMIN->output();

	}

	//-------------------------------------------------------------
	// BADWORD FUNCTIONS
	//--------------------------------------------------------------
	
	
	function doedit_badword()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP;
		
		if ($IN['before'] == "")
		{
			$ADMIN->error("您必須輸入一個要取代的字彙，笨蛋！");
		}
		
		if ($IN['id'] == "")
		{
			$ADMIN->error("您必須輸入一個有效的過濾 id，笨蛋！");
		}
		
		$IN['match'] = $IN['match'] ? 1 : 0;
		
		strlen($IN['swop']) > 1 ?  $IN['swop'] : "";
		
		$db_string = $DB->compile_db_update_string( array( 'type'    => $IN['before'],
														   'swop'    => $IN['after'],
														   'm_exact' => $IN['match'],
												  )      );
												  
		$DB->query("UPDATE ibf_badwords SET $db_string WHERE wid='".$IN['id']."'");
		
		$std->boink_it($SKIN->base_url."&act=op&code=bw");
		exit();
			
		
	}
	
	//=====================================================
	
	function edit_badword()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP;
	
		$ADMIN->page_detail = "您可以在下面編輯所選的過濾";
		$ADMIN->page_title  = "不良字彙過濾";
		
		//+-------------------------------
		
		if ($IN['id'] == "")
		{
			$ADMIN->error("您必須輸入一個有效的過濾 id，笨蛋！");
		}
		
		//+-------------------------------
		
		$DB->query("SELECT * FROM ibf_badwords WHERE wid='".$IN['id']."'");
		
		if ( ! $r = $DB->fetch_row() )
		{
			$ADMIN->error("無法在資料庫中找到該過濾");
		}
		
		//+-------------------------------
		
		$ADMIN->html .= $SKIN->start_form( array( 1 => array( 'code'  , 'bw_doedit' ),
												  2 => array( 'act'   , 'op'     ),
												  3 => array( 'id'    , $IN['id'] ),
									     )      );
		
		
		
		$SKIN->td_header[] = array( "之前"  , "40%" );
		$SKIN->td_header[] = array( "之後"   , "40%" );
		$SKIN->td_header[] = array( "模式"  , "20%" );
		
		//+-------------------------------
		
		$ADMIN->html .= $SKIN->start_table( "編輯過濾" );
		
		$ADMIN->html .= $SKIN->add_td_row( array( $SKIN->form_input('before', stripslashes($r['type']) ),
												  $SKIN->form_input('after' , stripslashes($r['swop']) ),
												  $SKIN->form_dropdown( 'match', array( 0 => array( 1, '精確'  ), 1 => array( 0, '寬鬆' ) ), $r['m_exact'] )
										 )      );
										 
		$ADMIN->html .= $SKIN->end_form('編輯過濾');
										 
		$ADMIN->html .= $SKIN->end_table();
		
		$ADMIN->output();
	
	}
	
	//=====================================================
	
	function remove_badword()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP;
		
		if ($IN['id'] == "")
		{
			$ADMIN->error("您必須輸入一個有效的過濾 id，笨蛋！");
		}
		
		$DB->query("DELETE FROM ibf_badwords WHERE wid='".$IN['id']."'");
		
		$std->boink_it($SKIN->base_url."&act=op&code=bw");
		exit();
			
		
	}
	
	//=====================================================
	
	function add_badword()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP;
		
		if ($IN['before'] == "")
		{
			$ADMIN->error("您必須輸入一個要取代的字彙，笨蛋！");
		}
		
		$IN['match'] = $IN['match'] ? 1 : 0;
		
		strlen($IN['swop']) > 1 ?  $IN['swop'] : "";
		
		$db_string = $DB->compile_db_insert_string( array( 'type'    => $IN['before'],
														   'swop'    => $IN['after'],
														   'm_exact' => $IN['match'],
												  )      );
												  
		$DB->query("INSERT INTO ibf_badwords (".$db_string['FIELD_NAMES'].") VALUES(".$db_string['FIELD_VALUES'].")");
		
		$std->boink_it($SKIN->base_url."&act=op&code=bw");
		exit();
			
		
	}
	
	//=====================================================
	
	function badword()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP;
	
		$ADMIN->page_detail = "您可以在這裡增加/編輯與移除不良字彙過濾。<br>不良字彙過濾允許您從會員文章、簽名檔及主題標題做大範圍的取代。<br><br><b>寬鬆符合</b>：如果您輸入 'hell' 當作一個不良字彙，則會將 'hell' 及 'hello' 取代為您所輸入的替代字或 6 個井字號 (不分大小寫)<br><br><b>精確符合</b>：如果您輸入 'hell' 當作一個不良字彙，只會將 'hell' 取代為您所輸入的替代字或者 6 個井字號 (不分大小寫)";
		$ADMIN->page_title  = "不良字彙過濾";
		
		//+-------------------------------
		
		$ADMIN->html .= $SKIN->start_form( array( 1 => array( 'code'  , 'bw_add' ),
												  2 => array( 'act'   , 'op'     ),
									     )      );
		
		//+-------------------------------
		
		$SKIN->td_header[] = array( "之前"  , "30%" );
		$SKIN->td_header[] = array( "之後"   , "30%" );
		$SKIN->td_header[] = array( "模式"  , "20%" );
		$SKIN->td_header[] = array( "編輯"    , "10%" );
		$SKIN->td_header[] = array( "移除"  , "10%" );
		
		//+-------------------------------
		
		$ADMIN->html .= $SKIN->start_table( "目前過濾" );
		
		$DB->query("SELECT * from ibf_badwords");
		
		if ( $DB->get_num_rows() )
		{
			while ( $r = $DB->fetch_row() )
			{
				$words[] = $r;
			}
			
			usort($words, array( 'ad_settings', 'perly_word_sort' ) );
			
			foreach($words as $idx => $r)
			{
			
				$replace = $r['swop']    ? stripslashes($r['swop']) : '######';
				
				$method  = $r['m_exact'] ? '精確' : '寬鬆';
				
				$ADMIN->html .= $SKIN->add_td_row( array( stripslashes($r['type']),
														  $replace,
														  $method,
														  "<center><a href='".$SKIN->base_url."&act=op&code=bw_edit&id={$r['wid']}'>編輯</a></center>",
														  "<center><a href='".$SKIN->base_url."&act=op&code=bw_remove&id={$r['wid']}'>移除</a></center>",
												 )      );
			}
			
		}
		
		$ADMIN->html .= $SKIN->end_table();
		
		
		$SKIN->td_header[] = array( "之前"  , "40%" );
		$SKIN->td_header[] = array( "之後"   , "40%" );
		$SKIN->td_header[] = array( "模式"  , "20%" );
		
		//+-------------------------------
		
		$ADMIN->html .= $SKIN->start_table( "新增過濾" );
		
		$ADMIN->html .= $SKIN->add_td_row( array( $SKIN->form_input('before'),
												  $SKIN->form_input('after'),
												  $SKIN->form_dropdown( 'match', array( 0 => array( 1, '精確'  ), 1 => array( 0, '寬鬆' ) ) )
										 )      );
										 
		$ADMIN->html .= $SKIN->end_form('增加過濾');
										 
		$ADMIN->html .= $SKIN->end_table();
		
		$ADMIN->output();
	
	}
	
	//-------------------------------------------------------------
	// NEWS
	//--------------------------------------------------------------
	
	function news()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP;
	
		$this->common_header('donews', '新聞匯出設定', '您可以在下面變更配置');
		
		$DB->query("SELECT id, name FROM ibf_forums ORDER BY name");
		
		$form_array = array();
		
		while ( $r = $DB->fetch_row() )
		{
			$form_array[] = array( $r['id'], $r['name'] );
		}
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>從哪個討論區匯入新聞主題？</b>" ,
										  $SKIN->form_dropdown( "news_forum_id", $form_array, $INFO['news_forum_id']  )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>顯示 '最新消息' 連結於論壇首頁？</b>" ,
										  $SKIN->form_yes_no( "index_news_link", $INFO['index_news_link']  )
								 )      );
		
		
		$this->common_footer();
	
	
	}
	
	//-------------------------------------------------------------
	// PM
	//--------------------------------------------------------------
	
	function pm()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP;
	
		$this->common_header('dopm', '傳訊者設定', '您可以在下面變更配置');
		
		
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>允許在訊息中使用 IBF Code？</b>" ,
										  $SKIN->form_yes_no( "msg_allow_code", $INFO['msg_allow_code']  )
								 )      );
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>允許在訊息中使用 HTML？</b>" ,
										  $SKIN->form_yes_no( "msg_allow_html", $INFO['msg_allow_html']  )
								 )      );
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>當檢視訊息列表時每頁顯示的訊息數</b><br>預設為 50" ,
										  $SKIN->form_input( "show_max_msg_list", $INFO['show_max_msg_list']  )
								 )      );

		$this->common_footer();
	
	
	}
	
	//-------------------------------------------------------------
	// EMAIL functions
	//--------------------------------------------------------------
	
	function email()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP;
	
		$this->common_header('doemail', '電子郵件設定', '您可以在下面變更設定');
		
		$ADMIN->html .= $SKIN->add_td_basic( '電子郵件位址', 'left', 'catrow2' );
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>論壇接收電子郵件位址</b>" ,
										  $SKIN->form_input( "email_in", $INFO['email_in']  )
								 )      );
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>論壇外寄電子郵件位址</b>" ,
										  $SKIN->form_input( "email_out", $INFO['email_out']  )
								 )      );
								 
		//-----------------------------------------------------------------------------------------------------------
								 
		$ADMIN->html .= $SKIN->add_td_basic( '郵遞方式', 'left', 'catrow2' );
		
		//-----------------------------------------------------------------------------------------------------------
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>郵遞方式</b><br>如果 PHP 的 mail() 不可使用，請選擇 SMTP" ,
										  $SKIN->form_dropdown( "mail_method", 
										  						 array(
										  						 		0 => array( 'mail', 'PHP mail()' ),
										  						 		1 => array( 'smtp', 'SMTP'  ),
										  						 	  ),
										  						 $INFO['mail_method']  )
								 )      );
		
		//-----------------------------------------------------------------------------------------------------------
								 
		$ADMIN->html .= $SKIN->add_td_basic( 'SMTP 選項', 'left', 'catrow2' );
		
		//-----------------------------------------------------------------------------------------------------------
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>凌駕 SMTP 主機？</b><br>預設是 'localhost'" ,
										  $SKIN->form_input( "smtp_host", $INFO['smtp_host']  )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>凌駕 SMTP 埠號？</b><br>預設是 25" ,
										  $SKIN->form_input( "smtp_port", $INFO['smtp_port']  )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>SMTP 使用者名稱</b><br>當使用 'localhost' 時，多半不需要" ,
										  $SKIN->form_input( "smtp_user", $INFO['smtp_user']  )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>SMTP 密碼</b><br>當使用 'localhost' 時，多半不需要" ,
										  $SKIN->form_input( "smtp_pass", $INFO['smtp_pass'], 'password'  )
								 )      );
 
		$this->common_footer();
	
	
	}
	
	//-------------------------------------------------------------
	// URLs and ADDRESSES
	//--------------------------------------------------------------
	
	function url()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP;
	
		$this->common_header('dourl', '整體設定', '您可以在下面變更設定');
		
		//-----------------------------------------------------------------------------------------------------------
								 
		$ADMIN->html .= $SKIN->add_td_basic( '論壇名稱與 HTTP 位址', 'left', 'catrow2' );
		
		//-----------------------------------------------------------------------------------------------------------
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>論壇名稱</b>" ,
										  $SKIN->form_input( "board_name", $INFO['board_name']  )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>論壇網址</b>" ,
										  $SKIN->form_input( "board_url", $INFO['board_url']  )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>網站名稱</b>" ,
										  $SKIN->form_input( "home_name", $INFO['home_name']  )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>網站位址</b>" ,
										  $SKIN->form_input( "home_url", $INFO['home_url']  )
								 )      );
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>HTML URL</b><br>圖片...等等" ,
										  $SKIN->form_input( "html_url", $INFO['html_url']  )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>上傳 URL</b>" ,
										  $SKIN->form_input( "upload_url", $INFO['upload_url']  )
								 )      );
								 					 
		//-----------------------------------------------------------------------------------------------------------						 
		
		$ADMIN->html .= $SKIN->add_td_basic( '論壇伺服器路徑', 'left', 'catrow2' );
		
		//-----------------------------------------------------------------------------------------------------------
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>'html' 目錄路徑</b><br>注意：這是路徑，不是 URL" ,
										  $SKIN->form_input( "html_dir", $INFO['html_dir']  )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>上傳目錄</b>" ,
										  $SKIN->form_input( "upload_dir", $INFO['upload_dir']  )
								 )      );
								 
		//-----------------------------------------------------------------------------------------------------------						 
		
		$ADMIN->html .= $SKIN->add_td_basic( 'HTTP 環境', 'left', 'catrow2' );
		
		//-----------------------------------------------------------------------------------------------------------
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>輸出 HTTP 檔頭？</b><br>(某些 NT 安裝需要將此關閉)" ,
										  $SKIN->form_yes_no( "print_headers", $INFO['print_headers'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b><i>取消</I> GZIP 編碼？</b><br>(GZIP 可以加快頁面的傳送及降低頻寬的使用)" ,
										  $SKIN->form_yes_no( "disable_gzip", $INFO['disable_gzip'] )
								 )      );
								 
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>自動重新導向類型？</b><br>(這適用於快速無頁面重新導向)" ,
										  $SKIN->form_dropdown( 'header_redirect', 
										  						 array(
										  						 		0 => array( 'location', '定位形態 (*nix savvy)' ),
										  						 		1 => array( 'refresh' , '重新整理 (Windows savvy)' ),
										  						 		2 => array( 'html'    , 'HTML META 重新導向 (如果都失敗的話...)' ),
										  						 	  ),
										  						 $INFO['header_redirect']  )
								 )      );
		
		//-----------------------------------------------------------------------------------------------------------						 
		
		$ADMIN->html .= $SKIN->add_td_basic( '除錯', 'left', 'catrow2' );
		
		//-----------------------------------------------------------------------------------------------------------
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>除錯層級</b>" ,
										  $SKIN->form_dropdown( "debug_level", 
										  						 array(
										  						 		0 => array( 0, '0: None - 不要顯示任何除錯資訊' ),
										  						 		1 => array( 1, '1: 顯示伺服器負載、頁面產生時間及查詢計數' ),
										  						 		2 => array( 2, '2: 顯示層級 1 (上面) 及 GET、POST 資訊'),
										  						 		3 => array( 3, '3: 顯示層級 1 + 2 及資料庫查詢'),
										  						 	  ),
										  						 $INFO['debug_level']  )
								 )      );
								 
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b><i>啟用</I> SQL 除錯模式？</b><br>(如果是，將 '&debug=1' 加到任何頁面以便檢視 mySQL 除錯資訊)" ,
										  $SKIN->form_yes_no( "sql_debug", $INFO['sql_debug'] )
								 )      );
		
                //-----------------------------------------------------------------------------------------------------------
		
		$ADMIN->html .= $SKIN->add_td_basic( '給新進會員寄送私人訊息', 'left', 'catrow2' );
		
		//-----------------------------------------------------------------------------------------------------------
								 								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>使用自動訊息?</b><br>(如果是,當新進會員登入後將會收到私人訊息)" ,
										  $SKIN->form_yes_no( "auto_pm_on", $INFO['auto_pm_on'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>寄送者名稱?</b><br>(請填入一名寄送者ID)" ,
										  $SKIN->form_input( "auto_pm_from", $INFO['auto_pm_from'] )
								 )      );
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>訊息標題</b><br>(自動寄送的訊息標題)" ,
										  $SKIN->form_input( "auto_pm_subject", $INFO['auto_pm_subject'] )
								 )      );
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>訊息內容</b><br>(自動寄送的訊息內容)" ,
										  $SKIN->form_textarea( "auto_pm_message", $INFO['auto_pm_message'] )
								 )      );

		//-----------------------------------------------------------------------------------------------------------						 
		
		$ADMIN->html .= $SKIN->add_td_basic( '整體面板設定', 'left', 'catrow2' );
		
		//-----------------------------------------------------------------------------------------------------------
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>使用安全模式面板？</b><br>(注意：如果您曾經自訂/編輯過面板，在做這個改變之後您可能必須再次同步化您的模板組件。)" ,
										  $SKIN->form_dropdown( 'safe_mode_skins', 
										  						 array(
										  						 		0 => array( '0', '否' ),
										  						 		1 => array( '1' , '是' ),
										  						 	  ),
										  						 $INFO['safe_mode_skins']  )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>數字格式</b><br>您可以選擇用於分隔千、百的字元<br>(例如：美國及英國使用逗號)" ,
										  $SKIN->form_dropdown( 'number_format', 
										  						 array(
										  						 		0 => array( '無', '不使用' ),
										  						 		1 => array( '空格' , '空格' ),
										  						 		2 => array( ',' , ',' ),
										  						 		3 => array( '.' , '.' ),
										  						 	  ),
										  						 $INFO['number_format']  )
								 )      );
								 
 
		$this->common_footer();
	
	
	}
	
	
	
	//-------------------------------------------------------------
	// CPU SAVING
	//--------------------------------------------------------------
	
	function cpu()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP;
	
		$this->common_header('docpu', 'CPU 節省', '您可以選擇關閉某些功能以節省資源的耗用');
		
		
		if ($INFO['au_cutoff'] == "")
		{
			$INFO['au_cutoff'] = 15;
		}
		
		//-----------------------------------------------------------------------------------------------------------						 
		
		$ADMIN->html .= $SKIN->add_td_basic( 'SQL 節省', 'left', 'catrow2' );
		
		//-----------------------------------------------------------------------------------------------------------
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>顯示活動使用者？</b>" ,
										  $SKIN->form_yes_no( "show_active", $INFO['show_active'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>顯示若干分鐘以內的活動使用者</b>" ,
										  $SKIN->form_input( "au_cutoff", $INFO['au_cutoff'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>顯示生日？</b>" ,
										  $SKIN->form_yes_no( "show_birthdays", $INFO['show_birthdays'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>顯示論壇統計？</b>" ,
										  $SKIN->form_yes_no( "show_totals", $INFO['show_totals'] )
								 )      );
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>允許在主題檢視中使用自訂個人資料欄位資訊？</b>" ,
										  $SKIN->form_yes_no( "custom_profile_topic", $INFO['custom_profile_topic'] )
								 )      );
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>當顯示討論區時標記使用者參與發表過的主題？</b>" ,
										  $SKIN->form_yes_no( "show_user_posted", $INFO['show_user_posted'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>移除 '使用者正瀏覽此 <u>討論區</u>' 功能？</b><br>(每次檢視討論區時可以節省 1 個查詢)" ,
										  $SKIN->form_yes_no( "no_au_forum", $INFO['no_au_forum'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>移除 '使用者正瀏覽此 <u>主題</u>' 功能？</b><br>(每次檢視主題時可以節省 1 個查詢)" ,
										  $SKIN->form_yes_no( "no_au_topic", $INFO['no_au_topic'] )
								 )      );
		
		//-----------------------------------------------------------------------------------------------------------						 
		
		$ADMIN->html .= $SKIN->add_td_basic( 'CPU 節省', 'left', 'catrow2' );
		
		//-----------------------------------------------------------------------------------------------------------
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>伺服器負載限制</b><br>達到限制時將顯示 '忙碌' 訊息<br>可以留空不做限制" ,
										  $SKIN->form_input( "load_limit", $INFO['load_limit']  )
								 )      );
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>允許使用者 (被允許的地方) 使用搜尋？</b>" ,
										  $SKIN->form_yes_no( "allow_search", $INFO['allow_search'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>搜尋的文章裁切至 [x] 個字元</b><br>適用在以文章顯示搜尋結果時<br>留空會以適當的格式傳回整篇文章" ,
										  $SKIN->form_input( "search_post_cut", $INFO['search_post_cut'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>最小搜尋字串長度</b><br>允許較短的搜尋字串可以傳回更多的結果，例如 'if', 'at', 等等" ,
										  $SKIN->form_input( "min_search_word", $INFO['min_search_word'] )."<br>注意，如果您啟用全文檢索，最少需 4 個字元並且無法由 IPB 變更。"
								 )      );
								 
		//-----------------------------------------------------------------------------------------------------------						 
		
		$ADMIN->html .= $SKIN->add_td_basic( '頻寬節省', 'left', 'catrow2' );
		
		//-----------------------------------------------------------------------------------------------------------
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>輸出 HTTP 無快取檔頭？</b><br>(這會停止瀏覽器快取頁面)" ,
										  $SKIN->form_yes_no( "nocache", $INFO['nocache'] )
								 )      );
								 
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>顯示簡短的討論區跳躍列表？</b><br>這會將子討論區從下拉列表移除 - 如果您有很多子討論區這個蠻有用的" ,
										  $SKIN->form_yes_no( "short_forum_jump", $INFO['short_forum_jump'] )
								 )      );
 
		$this->common_footer();
	
	
	}
	
	//-------------------------------------------------------------
	// DATES
	//--------------------------------------------------------------
	
	function dates()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP;
	
		$this->common_header('dodates', '日期', '定義日期格式');
		
		$time_array = array();
		
		require ROOT_PATH."lang/tw/lang_ucp.php";
		
		foreach( $lang as $off => $words )
 		{
 			if (preg_match("/^time_(\S+)$/", $off, $match))
 			{
 				$time_select[] = array( $match[1], $words );
 			}
 		}
 		
 		$d_date = $std->get_date(time(), 'LONG');
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>原生伺服器時區</b><br><span style='color:red'>如果您已經選擇了正確的時區並且時鐘有一小時的誤差，這是因為日光節約時的緣故，您的會員可以經由使用者控制台編輯他們的 '論壇設定' 來校正。</span>" ,
										  $SKIN->form_dropdown( "time_offset", $time_select, $INFO['time_offset']  )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>伺服器時間調整 (分鐘)</b><br>微調伺服器時間，如果您需要從伺服器的時間減少數分鐘，數字開頭請加上 '-' (不須引號)。" ,
										  $SKIN->form_input( "time_adjust", $INFO['time_adjust'] ) . "<br>論壇時間 (綜合上面的時區及目前的調整) 現在為： $d_date"
								 )      );
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>短時間格式</b><br>配置方式與 <a href='http://www.php.net/date' target='_blank'>PHP 日期</a> 相同" ,
										  $SKIN->form_input( "clock_short", $INFO['clock_short'] )
								 )      );
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>註冊日期時間格式</b><br>配置方式與 <a href='http://www.php.net/date' target='_blank'>PHP 日期</a> 相同" ,
										  $SKIN->form_input( "clock_joined", $INFO['clock_joined'] )
								 )      );
									     
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>長時間格式</b><br>配置方式與 <a href='http://www.php.net/date' target='_blank'>PHP 日期</a> 相同" ,
										  $SKIN->form_input( "clock_long", $INFO['clock_long'] )
								 )      );
 
		$this->common_footer();
	
	
	}
	
	//-------------------------------------------------------------
	// AVATARS
	//--------------------------------------------------------------
	
	function avatars()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP;
	
		$this->common_header('doavatars', '使用者個人資料', '定義使用者個人資料權限');
		
		$INFO['avatar_ext'] = preg_replace( "/\|/", ",", $INFO['avatar_ext'] );
		$INFO['photo_ext']  = preg_replace( "/\|/", ",", $INFO['photo_ext'] );
		
		
		//-----------------------------------------------------------------------------------------------------------						 
		
		$ADMIN->html .= $SKIN->add_td_basic( '使用者個人資料 & 選項', 'left', 'catrow2' );
		
		//-----------------------------------------------------------------------------------------------------------
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>允許會員選擇面板？</b>" ,
										  $SKIN->form_yes_no( "allow_skins", $INFO['allow_skins'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>會員變更頭銜所需的文章數？</b><br>留空則會完全禁止" ,
										  $SKIN->form_input( "post_titlechange", $INFO['post_titlechange'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>位置欄位詞條的長度上限 (位元組)</b>" ,
										  $SKIN->form_input( "max_location_length", $INFO['max_location_length'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>興趣欄位詞條的長度上限 (位元組)</b>" ,
										  $SKIN->form_input( "max_interest_length", $INFO['max_interest_length'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>使用者簽名檔欄位詞條的長度上限 (位元組)</b>" ,
										  $SKIN->form_input( "max_sig_length", $INFO['max_sig_length'] )
								 )      );						 
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>允許簽名檔使用 HTML？</b>" ,
										  $SKIN->form_yes_no( "sig_allow_html", $INFO['sig_allow_html'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>允許簽名檔使用 IBF Code？</b>" ,
										  $SKIN->form_yes_no( "sig_allow_ibc", $INFO['sig_allow_ibc'] )
								 )      );
								 
		if ($INFO['postpage_contents'] == "")
		{
			$INFO['postpage_contents'] = '5,10,15,20,25,30,35,40';
		}
		
		if ($INFO['topicpage_contents'] == "")
		{
			$INFO['topicpage_contents'] = '5,10,15,20,25,30,35,40';
		}
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>使用者可選擇的每頁文章數下拉選單內容</b><br>以逗號隔開，會自動加入 '使用論壇預設'<br>範例： 5,15,20,25,30" ,
										  $SKIN->form_input( "postpage_contents", $INFO['postpage_contents'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>使用者可選擇的討論區頁面主題數下拉選單內容</b><br>以逗號隔開，會自動加入 '使用論壇預設'<br>範例： 5,15,20,25,30" ,
										  $SKIN->form_input( "topicpage_contents", $INFO['topicpage_contents'] )
								 )      );
								 
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>如果主題超過 [x] 天沒有回覆自動取消訂閱</b><br>留空則不會自動取消" ,
										  $SKIN->form_input( "subs_autoprune", $INFO['subs_autoprune'] )
								 )      );
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>允許的照片 URL 副檔名</b><br>以逗號隔開 (gif,png,jpeg) 等等" ,
										  $SKIN->form_input( "photo_ext", strlen($INFO['photo_ext']) > 1 ? $INFO['photo_ext'] : "gif,jpg,jpeg,png" )
								 )      );
		
		//-----------------------------------------------------------------------------------------------------------						 
		
		$ADMIN->html .= $SKIN->add_td_basic( '個人圖片', 'left', 'catrow2' );
		
		//-----------------------------------------------------------------------------------------------------------
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>禁止 IPB 自動縮小大張的照片/個人圖片？</b><br/ >這樣會要求會員輸入尺寸" ,
										  $SKIN->form_yes_no( "disable_ipbsize", $INFO['disable_ipbsize'] )
								 )      );
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>允許使用個人圖片？</b>" ,
										  $SKIN->form_yes_no( "avatars_on", $INFO['avatars_on'] )
								 )      );
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>允許的圖片副檔名</b><br>以逗號隔開 (gif,png,jpeg) 等等" ,
										  $SKIN->form_input( "avatar_ext", $INFO['avatar_ext'] )
								 )      );
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>允許使用遠端 URL 個人圖片？</b>" ,
										  $SKIN->form_yes_no( "avatar_url", $INFO['avatar_url'] )
								 )      );
									     
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>上傳的個人圖片檔案大小上限？ (K)</b>" ,
										  $SKIN->form_input( "avup_size_max", $INFO['avup_size_max'] )
								 )      );
 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>個人圖片最大尺寸</b><br>(寬<b>x</b>高)" ,
										  $SKIN->form_input( "avatar_dims", $INFO['avatar_dims'] )
								 )      );
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>預設的個人圖片集尺寸</b><br>(寬<b>x</b>高)" ,
										  $SKIN->form_input( "avatar_def", $INFO['avatar_def'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>個人圖片畫冊的欄位數？</b>" ,
										  $SKIN->form_input( 'av_gal_cols' 	, $INFO['av_gal_cols'] = $INFO['av_gal_cols'] ? $INFO['av_gal_cols'] : 5 )
								 )      );						 
								 
		//-----------------------------------------------------------------------------------------------------------						 
		
		$ADMIN->html .= $SKIN->add_td_basic( '訪客權限', 'left', 'catrow2' );
		
		//-----------------------------------------------------------------------------------------------------------
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>允許訪客看見簽名檔？</b>" ,
										  $SKIN->form_yes_no( "guests_sig", $INFO['guests_sig'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>允許訪客看見張貼的圖片？</b>" ,
										  $SKIN->form_yes_no( "guests_img", $INFO['guests_img'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>允許訪客看見使用者個人圖片？</b>" ,
										  $SKIN->form_yes_no( "guests_ava", $INFO['guests_ava'] )
								 )      );
								 
			     
								 					 
		$this->common_footer();
	
	
	}
	
	
	//-------------------------------------------------------------
	// TOPICS and POSTS
	//--------------------------------------------------------------
	
	function post()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP;
		
		$INFO['img_ext'] = preg_replace( "/\|/", ",", $INFO['img_ext'] );
	
		$this->common_header('dopost', '主題、文章及發表', '設定可見的發表元素和限制');
		
		//-----------------------------------------------------------------------------------------------------------						 
		
		$ADMIN->html .= $SKIN->add_td_basic( '主題', 'left', 'catrow2' );
		
		//-----------------------------------------------------------------------------------------------------------	
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>討論區每頁主題數</b>" ,
										  $SKIN->form_input( "display_max_topics", $INFO['display_max_topics'] )
								 )      );
									     
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>標示為 '熱門主題' 所需的文章數？</b>" ,
										  $SKIN->form_input( "hot_topic", $INFO['hot_topic'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>固定主題的前置名稱</b>" ,
										  $SKIN->form_input( "pre_pinned", $INFO['pre_pinned'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>搬移主題的前置名稱</b>" ,
										  $SKIN->form_input( "pre_moved", $INFO['pre_moved'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>投票主題的前置名稱</b>" ,
										  $SKIN->form_input( "pre_polls", $INFO['pre_polls'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>阻止在主題標題上咆哮？</b><br>(會將 CLICK HERE 轉為 Click Here)<br><font color=red>譯註：啟用這個選項中文會有問題。</font>" ,
										  $SKIN->form_yes_no( "etfilter_shout", $INFO['etfilter_shout'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>移除主題標題上多餘的驚歎號/問號？</b><br>(會將 This!!!!! 轉為 This!)" ,
										  $SKIN->form_yes_no( "etfilter_punct", $INFO['etfilter_punct'] )
								 )      );						 
		
		//-----------------------------------------------------------------------------------------------------------						 
		
		$ADMIN->html .= $SKIN->add_td_basic( '文章 & 發表', 'left', 'catrow2' );
		
		//-----------------------------------------------------------------------------------------------------------	
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>每個主題頁面的文章數？</b>" ,
										  $SKIN->form_input( "display_max_posts", $INFO['display_max_posts'] )
								 )      );						 
								 
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>每一個表格列可按的表情圖示數量</b>" ,
										  $SKIN->form_input( "emo_per_row", $INFO['emo_per_row'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>每篇文章可用的表情圖示上限</b>" ,
										  $SKIN->form_input( "max_emos", $INFO['max_emos'] )
								 )      );
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>每篇文章可張貼的圖片上限</b>" ,
										  $SKIN->form_input( "max_images", $INFO['max_images'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>每篇文章的大小上限 (千位元組 [kb])</b>" ,
										  $SKIN->form_input( "max_post_length", $INFO['max_post_length'] )
								 )      );
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>張貼的 Flash 影片寬度上限 (像素 pixels)</b>" ,
										  $SKIN->form_input( "max_w_flash", $INFO['max_w_flash'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>張貼的 Flash 影片高度上限 (像素 pixels)</b>" ,
										  $SKIN->form_input( "max_h_flash", $INFO['max_h_flash'] )
								 )      );
								 
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>可張貼的有效圖片副檔名</b><br>(以逗號分隔 (gif,jpeg,jpg) 等等" ,
										  $SKIN->form_input( "img_ext", $INFO['img_ext'] )
								 )      );
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>在文章中顯示上傳的圖片？</b>" ,
										  $SKIN->form_yes_no( "show_img_upload", $INFO['show_img_upload'] )
										 ."<br />".$SKIN->form_checkbox( 'siu_thumb', $INFO['siu_thumb'] )."顯示縮圖？ 大小 ".$SKIN->form_simple_input( 'siu_width', $INFO['siu_width'] )." x ".$SKIN->form_simple_input( 'siu_height', $INFO['siu_height'] )
								 )      );					 
		
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>禁止內嵌引言？</b><br>這會將引用的文章內含的任何引言文字移除<br><a href='#' title='如果這有任何的意義，那麼您的 IQ 比我還高。'>..</a>" ,
										  $SKIN->form_yes_no( "strip_quotes", $INFO['strip_quotes'] )
								 )      );
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>訪客名稱 <i>字首</i></b><br>(當訪客以與會員相同的名稱發表時，這樣可以做點區別以避免混淆)" ,
										  $SKIN->form_input( "guest_name_pre", $INFO['guest_name_pre'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>訪客名稱 <i>字尾</i></b><br>(當訪客以與會員相同的名稱發表時，這樣可以做點區別以避免混淆)" ,
										  $SKIN->form_input( "guest_name_suf", $INFO['guest_name_suf'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>文字換列的字元數？</b><br>防止表格被長串連續的字元撐開。建議 80 - 100<br><font color=red>譯註：中文會有問題，不要使用</font>" ,
										  $SKIN->form_input( "post_wordwrap", $INFO['post_wordwrap'] )
								 )      );
		
		//-----------------------------------------------------------------------------------------------------------						 
		
		$ADMIN->html .= $SKIN->add_td_basic( '投票', 'left', 'catrow2' );
		
		//-----------------------------------------------------------------------------------------------------------
		
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>允許投票選項使用 [IMG] 及 [URL] 標籤？</b>" ,
										  $SKIN->form_yes_no( "poll_tags", $INFO['poll_tags'] )
								 )      );
								 						 						 					 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>最多允許的投票選項數？</b><br>" ,
										  $SKIN->form_input( "max_poll_choices", $INFO['max_poll_choices'] ? $INFO['max_poll_choices'] : 10)
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>允許會員檢視投票結果而不會喪失其投票權？</b>" ,
										  $SKIN->form_yes_no( 'allow_result_view', $INFO['allow_result_view'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>取消會員發表 '不要回覆' 投票的能力？</b>" ,
										  $SKIN->form_yes_no( 'poll_disable_noreply', $INFO['poll_disable_noreply'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>主題發起者可以在其主題附加投票的時限 (小時)</b><br>對管理員或超級板主沒有影響" ,
										  $SKIN->form_input( 'startpoll_cutoff', $INFO['startpoll_cutoff'] ? $INFO['startpoll_cutoff'] : 24)
								 )      );
								 					 						 						 						 					 
		$this->common_footer();
	
	
	}
	
	//-------------------------------------------------------------
	// SECURITY
	//--------------------------------------------------------------
	
	function secure()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP;
	
		$this->common_header('dosecure', '安全性', '使用下面的配置定義您論壇的安全性處理層級');

		//-----------------------------------------------------------------------------------------------------------						 
		
		$ADMIN->html .= $SKIN->add_td_basic( '安全性 (程式/機器人灌水控制)', 'left', 'catrow2' );
		
		//-----------------------------------------------------------------------------------------------------------
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>啟動程式/機器人灌水控制？</b><br>強制使用者在註冊或變更電子郵件位址時輸入隨機代碼...等等，以防止機器人大量送出表單。".$SKIN->js_help_link('s_reg_antispam') ,
										  $SKIN->form_dropdown( "bot_antispam", 
										  						array(
										  								0 => array( '0'    , '無'                  ),
										  								1 => array( 'gd'   , '進階 (需要 GD 函式庫)'    ),
										  								2 => array( 'gif'  , '標準 (無特殊要求)'  ),
										  								
										  							 ),
										  					    $INFO['bot_antispam']
										  					  )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>採用 GD 時；使用 [是] TTF 方法，或 [否] 基本方法？</b><br />如果可用的話，TTF 是最佳的" ,
										  $SKIN->form_yes_no( "use_ttf", isset($INFO['use_ttf']) ? $INFO['use_ttf'] : 1 )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>如果使用 GD & TTF；影像寬度</b>" ,
										  $SKIN->form_input( "gd_width", isset($INFO['gd_width']) ? $INFO['gd_width'] : 250 )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>如果使用 GD & TTF；影像高度</b>" ,
										  $SKIN->form_input( "gd_height", isset($INFO['gd_height']) ? $INFO['gd_height'] : 70 )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>如果使用 GD & TTF；要使用的 .ttf 路徑</b>" ,
										  $SKIN->form_input( "gd_font", isset($INFO['gd_font']) ? $INFO['gd_font'] : getcwd().'/fonts/progbot.ttf' )
								 )      );
		
		//-----------------------------------------------------------------------------------------------------------						 
		
		$ADMIN->html .= $SKIN->add_td_basic( '安全性 (高)', 'left', 'catrow2' );
		
		//-----------------------------------------------------------------------------------------------------------
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>允許動態圖片？</b><br>如果 '是' 使用者可以張貼程式化的圖片產生器" ,
										  $SKIN->form_yes_no( "allow_dynamic_img", $INFO['allow_dynamic_img'] )
								 )      );
									     
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>Session 逾期 (秒)</b><br>移除已經超過您指定期限的閒置 sessions" ,
										  $SKIN->form_input( "session_expiration", $INFO['session_expiration'] )
								 )      );
 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>認證時配合使用者的瀏覽器？</b>" ,
										  $SKIN->form_yes_no( "match_browser", $INFO['match_browser'] )
								 )      );
								 
								 
		//-----------------------------------------------------------------------------------------------------------						 
		
		$ADMIN->html .= $SKIN->add_td_basic( '安全性 (中)', 'left', 'catrow2' );
		
		//-----------------------------------------------------------------------------------------------------------
		
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>使用安全的郵件表單作為會員之間的郵件往返？</b><br>隱藏使用者的電子郵件位址" ,
										  $SKIN->form_yes_no( "use_mail_form", $INFO['use_mail_form'] )
								 )      );
								 
		//-----------------------------------------------------------------------------------------------------------						 
		
		$ADMIN->html .= $SKIN->add_td_basic( '安全性 (低)', 'left', 'catrow2' );
		
		//-----------------------------------------------------------------------------------------------------------						 
								 					 
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>允許張貼圖片？</b><br>進階的程式設計師能夠強迫圖片當作程式執行，不過 IBF 可由這個方法限制其危險性。" ,
										  $SKIN->form_yes_no( "allow_images", $INFO['allow_images'] )
								 )      );
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>允許在文章中及個人圖片使用 flash 影片？</b><br>Flash 有內建的程式語言，有可能危及安全性。" ,
										  $SKIN->form_yes_no( "allow_flash", $INFO['allow_flash'] )
								 )      );	
								 
								 
		//-----------------------------------------------------------------------------------------------------------						 
		
		$ADMIN->html .= $SKIN->add_td_basic( '安全性 (討厭的使用者)', 'left', 'catrow2' );
		
		//-----------------------------------------------------------------------------------------------------------						 					 
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>當使用者註冊時允許重複的電子郵件？</b><br>不會檢查是否存在相同的電子郵件位址" ,
										  $SKIN->form_yes_no( "allow_dup_email", $INFO['allow_dup_email'] )
								 )      );
		
						 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>以電子郵件認證新人註冊？</b><br>管理員人工預覽所有新的帳號，或者讓新使用者以他們的電子郵件位址做認證。" ,
										  $SKIN->form_dropdown( "reg_auth_type", 
										  						array(
										  								0 => array( 'user' , '使用者電子郵件認證' ),
										  								1 => array( 'admin', '管理員認證'      ),
										  								2 => array( '0'    , '不用'                  )
										  							 ),
										  					    $INFO['reg_auth_type']
										  					  )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>移除未完成註冊啟動超過...</b>" ,
										  $SKIN->form_simple_input( 'validate_day_prune', $INFO['validate_day_prune'], 3 ). "... 天之後"
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>有新人註冊時，以電子郵件通知管理員？</b>" ,
										  $SKIN->form_dropdown( "new_reg_notify", 
										  						array(
										  								0 => array( '1' , '是' ),
										  								1 => array( '0' , '否'  )
										  							 ),
										  					    $INFO['new_reg_notify']
										  					  )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>強制訪客登入才可瀏覽論壇？</b>" ,
										  $SKIN->form_yes_no( "force_login", $INFO['force_login'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>禁止新人註冊？</b>" ,
										  $SKIN->form_yes_no( "no_reg", $INFO['no_reg'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>從輸入中移除 chr(0xCA)？</b><br />這個字元可被當成 '隱藏' 的空白冒充已註冊的名稱 - 但是在非西歐字元設定的編碼可能會造成問題。<br /><font color=red>譯註：中文會有問題，不要使用。</font>" ,
										  $SKIN->form_yes_no( 'strip_space_chr', $INFO['strip_space_chr'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>取消 '檢舉此篇文章' 連結？</b>" ,
										  $SKIN->form_yes_no( "disable_reportpost", $INFO['disable_reportpost'] )
								 )      ); // 
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>灌水控制延遲 (秒)</b><br>使用者需等待若干時間之後才能再次發表<br>可以留空不進行灌水控制" ,
										  $SKIN->form_input( "flood_control", $INFO['flood_control'] )
								 )      );
		
		//-----------------------------------------------------------------------------------------------------------						 
		
		$ADMIN->html .= $SKIN->add_td_basic( '隱私', 'left', 'catrow2' );
		
		//-----------------------------------------------------------------------------------------------------------	
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>允許使用者瀏覽線上人員列表？</b>" ,
										  $SKIN->form_yes_no( "allow_online_list", $INFO['allow_online_list'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>禁止最高管理群組檢視線上匿名使用者？</b><br>匿名使用者在他們的名稱後面會有星號" ,
										  $SKIN->form_yes_no( "disable_admin_anon", $INFO['disable_admin_anon'] )
								 )      );
								 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>禁止最高管理群組檢視線上列表中的使用者 IP 位址？</b>" ,
										  $SKIN->form_yes_no( "disable_online_ip", $INFO['disable_online_ip'] )
								 )      );
								 
		
								 					 
		$this->common_footer();
	
	
	}
	
	//-------------------------------------------------------------
	// COOKIES: Yum Yum!
	//--------------------------------------------------------------
	
	function cookie()
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP;
	
		$this->common_header('docookie', 'Cookies', '這些欄位可以全部留空。請實驗看看找出您主機的正確設定。');
		
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>Cookie 網域</b><br>提示：使用 <b>.your-domain.com</b> 作為整體 cookies" ,
										  $SKIN->form_input( "cookie_domain", $INFO['cookie_domain'] )
								 )      );
									     
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>Cookie 名稱字首</b><br>允許多個論壇在同一部主機。" ,
										  $SKIN->form_input( "cookie_id", $INFO['cookie_id'] )
								 )      );
 
		$ADMIN->html .= $SKIN->add_td_row( array( "<b>Cookie 路徑</b><br>從網域到 IBF 根目錄的相對路徑" ,
										  $SKIN->form_input( "cookie_path", $INFO['cookie_path'] )
								 )      );
		
		$this->common_footer();
	
	
	}
	

	//-------------------------------------------------------------
	//
	// Save config. Does the hard work, so you don't have to.
	//
	//--------------------------------------------------------------
	
	function save_config( $new )
	{
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP, $HTTP_POST_VARS;
		
		$master = array();
		
		if ( is_array($new) )
		{
			if ( count($new) > 0 )
			{
				foreach( $new as $field )
				{
				
					// Handle special..
					
					if ($field == 'img_ext' or $field == 'avatar_ext' or $field == 'photo_ext')
					{
						$HTTP_POST_VARS[ $field ] = preg_replace( "/[\.\s]/", "" , $HTTP_POST_VARS[ $field ] );
						$HTTP_POST_VARS[ $field ] = str_replace('|', "&#124;", $HTTP_POST_VARS[ $field ]);
						$HTTP_POST_VARS[ $field ] = preg_replace( "/,/"     , '|', $HTTP_POST_VARS[ $field ] );
					}
					else if ($field == 'coppa_address')
					{
						$HTTP_POST_VARS[ $field ] = nl2br( $HTTP_POST_VARS[ $field ] );
					}
					
					if ( $field == 'gd_font' OR $field == 'html_dir' OR $field == 'upload_dir')
					{
						$HTTP_POST_VARS[ $field ] = preg_replace( "/'/", "&#39;", $HTTP_POST_VARS[ $field ] );
					}
					else
					{
						$HTTP_POST_VARS[ $field ] = preg_replace( "/'/", "&#39;", $HTTP_POST_VARS[ $field ] ); /* 中文修正 */
					}
				
					$master[ $field ] = stripslashes($HTTP_POST_VARS[ $field ]);  
				}
				
				$ADMIN->rebuild_config($master);
			}
		}
		
		$ADMIN->save_log("更新論壇設定，已備份");
		
		$ADMIN->done_screen("論壇設定已更新", "管理控制台首頁", "act=index" );
		
		
		
	}
	//-------------------------------------------------------------
	//
	// Common header: Saves writing the same stuff out over and over
	//
	//--------------------------------------------------------------
	
	function common_header( $formcode = "", $section = "", $extra = "" )
	{
	
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP;
		
		$extra = $extra ? $extra."<br>" : $extra;
		
		$ADMIN->page_detail = $extra . "請在確定變更之前檢查您所輸入的資料";
		$ADMIN->page_title  = "論壇設定 ($section)";
		
		//+-------------------------------
		
		$ADMIN->html .= $SKIN->start_form( array( 1 => array( 'code'  , $formcode ),
												  2 => array( 'act'   , 'op'      ),
									     )      );
		
		//+-------------------------------
		
		$SKIN->td_header[] = array( "{none}"  , "40%" );
		$SKIN->td_header[] = array( "{none}"  , "60%" );
		
		//+-------------------------------
		
		$ADMIN->html .= $SKIN->start_table( "設定" );
		
	}

	//-------------------------------------------------------------
	//
	// Common footer: Saves writing the same stuff out over and over
	//
	//--------------------------------------------------------------
	
	function common_footer( $button="確定變更" )
	{
	
		global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP;

		$ADMIN->html .= $SKIN->end_form($button);
										 
		$ADMIN->html .= $SKIN->end_table();
		
		$ADMIN->output();
		
	}				
	
	function return_sql_no_no_cant_do_it_sorry_text()
	{
return "
<div style='line-height:150%'>
<span id='large'>無法自動建立全文索引</span>
<br /><br />
對於自動建立全文索引，您的文章量太多。很有可能在索引完成之前使 PHP 逾時中斷，
這會造成某些索引損壞。
<br />
建立全文索引是相當緩慢的過程，但是值得進行一次，
因為當您的會員搜尋時這樣將會節省您很多時間及 CPU 資源。
<br />
平均而言，一個普通的網站伺服器有能力一個小時索引大約 80,000 篇文章，不過這是相當劇烈的處理過程。
如果您使用 MySQL 4.0.12+ 時間絕對會更少。
<br />
<br />
<strong style='color:red;font-size:14px'>如何手動建立索引</strong>
<br />
如果您有 mysql 的 shell (SSH / Telnet) 使用權，此過程非常簡單。如果您沒有 shell 使用權，您必須
連絡主機商要求他們為您進行。
<br /><br />
<strong>步驟 1: 起始 mysql</strong>
<br />
在 shell 鍵入：
<br />
<pre>mysql -u{your_sql_user_name} -p{your_sql_password}</pre>
<br />
您的 MySQL 使用者名稱及密碼可在 conf_global.php 檔案中找到
<br />
<br />
<strong>步驟 2: 選擇您的資料庫</strong>
<br />
在 mysql 鍵入：
<br />
<pre>use {your_database_name_here};</pre>
<br />
務必在尾端加上分號。您的 MySQL 資料庫名稱可在 conf_global.php 中找到。
<br /><br />
<strong>步驟 3: 索引主題資料表</strong>
<br />
在 mysql 鍵入：
<br />
<pre>\g alter table ibf_topics add fulltext(title);</pre>
<br />
如果您未使用 'ibf_' 當成您的資料表延伸名稱，請調整該查詢對應，
此查詢所需的時間端賴您擁有的主題數而定。
<br />
<br />
<strong>步驟 4: 索引文章資料表</strong>
<br />
在 mysql 鍵入：
<br />
<pre>\g alter table ibf_posts add fulltext(post);</pre>
<br />
如果您未使用 'ibf_' 當成您的資料表延伸名稱，請調整該查詢對應，
此查詢所需的時間端賴您擁有的文章數而定。平均而言，MySQL 一個小時能夠索引 80,000 篇文章。如果您使用 MySQL 4，時間會大幅減少。
</div>
";
	}
}


?>
