Your IP : 172.28.240.42


Current Path : /var/www/html/clients/rebirth.e-nk.ru/upgrade/core/actions/
Upload File :
Current File : /var/www/html/clients/rebirth.e-nk.ru/upgrade/core/actions/install.php

<?php
/**
 * Invision Power Board
 * Action controller for install page
 */

class action_install
{
	var $install;
	
	var $helpfiles	= 0;
	
	function action_install( & $install )
	{
		$this->install =& $install;
	}
	
	// SQL > FINAL > SETTINGS > ACPPERMS / HELP FILE > DB CHECKER
	// After all sets have run: SKIN REVERT > TEMPLATES > OTHER [ Email Templates? ] > Build Caches > DB Check
	
	function run()
	{
		$this->install->get_version_latest();
		
		$this->install->saved_data['helpfile'] 	= intval($this->install->ipsclass->input['helpfile']) 	? intval($this->install->ipsclass->input['helpfile']) 	: $this->install->saved_data['helpfile'];
		$this->install->saved_data['man'] 		= intval($this->install->ipsclass->input['man']) 		? intval($this->install->ipsclass->input['man']) 		: $this->install->saved_data['man'];
		
		/* Switch */
		switch( $this->install->ipsclass->input['sub'] )
		{
			case 'sql':
				$this->install_sql();
			break;
			
			case 'settings':
				$this->install_settings();
			break;
			
			case 'acpperms':
				$this->install_acpperms();
			break;	

			case 'finish':
				$this->install_finish();
			break;
			
			case 'checkdb':
				$this->install_checkdb();
			break;			
			
			case 'skinrevert':
				$this->install_skinrevert();
			break;			
			
			case 'templates':
				$this->install_templates();
			break;
			
			case 'caches':
				$this->install_caches();
			break;
			
			default:
				/* Output */
				
				$count = $this->install->ipsclass->DB->build_and_exec_query( array( 'select' => 'count(*) as num', 'from' => 'posts' ) );
				
				if( $count['num'] > 100000 )
				{
					$do_manual = 1;
				}
				else
				{
					$do_manual = 0;
				}
				
				$this->install->template->append( $this->install->template->install_page( $do_manual ) );		
				$this->install->template->next_action = '?p=install&sub=sql';
				$this->install->template->hide_next   = 1;
			break;	
		}
		
		//----------------------------------------------
		// Log errors for tech support
		//----------------------------------------------
		
		if( count($this->install->error) > 0 )
		{
			$file_name = ROOT_PATH . 'cache/sql_upgrade_log_'.date('m_d_y').'.cgi';
			
			$_error_string  = "\n===================================================";
			$_error_string .= "\n Date: ". date( 'r' );
			$_error_string .= "\n IP Address: " . $_SERVER['REMOTE_ADDR'];
			$_error_string .= "\n Member ID: " . $this->install->ipsclass->member['id'];
			$_error_string .= "\n Version Folder: " .$this->install->current_upgrade;
			$_error_string .= "\n Current Sub Step: " .$this->install->ipsclass->input['sub'];
			$_error_string .= "\n Current workact: " .$this->install->saved_data['workact'];
			$_error_string .= "\n\n\n ".$this->install->ipsclass->my_br2nl(implode( "\n", $this->install->error ));
			
			$fh = fopen( $file_name, "a" );
			fwrite( $fh, $_error_string, strlen( $_error_string ) );
			fclose( $fh );
		}		
	}
	
	/*-------------------------------------------------------------------------*/
	// Installs the SQL
	/*-------------------------------------------------------------------------*/
	/**
	* Installs SQL schematic
	*
	* @return void
	*/
	function install_sql()
	{
		if ( $this->install->current_upgrade AND $this->install->current_upgrade < 20000 )
		{
			// Jump right to the finish routine for 1.x
			
			$this->install_finish();
			return;
		}
		
		$output					= "";
		$message 				= array();
		$this->install->error   = array();
		
		$SQL = array();
		$cnt = 0;

		if ( file_exists( INS_ROOT_PATH.'installfiles/upg_'.$this->install->current_upgrade.'/'.strtolower($this->install->ipsclass->vars['sql_driver']).'_updates.php' ) )
		{
			require_once ( INS_ROOT_PATH.'installfiles/upg_'.$this->install->current_upgrade.'/'.strtolower($this->install->ipsclass->vars['sql_driver']).'_updates.php' );
		}

		// Create/Alter tables
		if ( count( $SQL ) > 0 )
		{
			$this->sqlcount = 0;
			
			$this->install->ipsclass->DB->return_die = 1;
							
			foreach( $SQL as $q )
			{
				$this->install->ipsclass->DB->allow_sub_select 	= 1;
				$this->install->ipsclass->DB->error				= '';
									
				$q = str_replace( "<%time%>", time(), $q );
				
				if( $this->install->ipsclass->vars['mysql_tbl_type'] )
				{
					if( preg_match( "/^create table(.+?)/i", $q ) )
					{
						$q = preg_replace( "/^(.+?)\);$/is", "\\1) TYPE={$this->install->ipsclass->vars['mysql_tbl_type']};", $q );
					}
				}
				
				if( $this->install->saved_data['man'] )
				{
					$output .= preg_replace("/\sibf_(\S+?)([\s\.,]|$)/", " ".$this->install->ipsclass->DB->obj['sql_tbl_prefix']."\\1\\2", preg_replace( "/\s{1,}/", " ", $q ) )."\n\n";
				}
				else
				{
					$this->install->ipsclass->DB->query( $q );
					
					if ( $this->install->ipsclass->DB->error )
					{
						$this->install->error[] = $q."<br /><br />".$this->install->ipsclass->DB->error;
					}
					else
					{
						$this->sqlcount++;
					}
				}
			}
			
			$message[] = $this->sqlcount." queries run...";
		}
		else
		{
			// If there are no SQL queries to run, jump to settings
			
			$this->install_finish();
			return;
		}
		
		
		if ( count( $this->install->error ) > 0 )
		{
			$this->install->message = count($message) ? implode( "<br />", $message ) : "Proceeding with update";
			
			$this->install->template->warning( array_merge( array( $this->install->message ),
															array( 'Error in upgrade '.$this->install->versions[ $this->install->current_upgrade ]. ' (' . $this->install->current_upgrade . ')' ),
															array( "<span style='color:red'>".count($this->install->error).' errors found</span>' ),
															$this->install->error ) );
			$this->install->template->in_error   = 1;
			
			$this->install->template->next_action = '?p=install&sub=finish';
			
			return;
		}
			
		if( $this->install->saved_data['man'] AND $output )
		{
			$output = "<h3><b>Please run these queries in your MySQL database before continuing..</b></h3><br />".nl2br(htmlspecialchars($output));
			
			$this->install->template->next_action = '?p=install&sub=finish';
			$this->install->template->append( $output );
		}
		else
		{	
			$output[] = count($message) ? implode( "<br />", $message ) : "No queries, settings, or permissions to import...<br /><br />Proceeding with update";
			$this->install->template->next_action = '?p=install&sub=finish';
			$this->install->template->append( $this->install->template->install_page_refresh( $output ) );
			$this->install->template->hide_next = 1;
		}
	}
	
	/*-------------------------------------------------------------------------*/
	// Installs the Settings
	/*-------------------------------------------------------------------------*/
	/**
	* Installs Partial Settings
	*
	* @return void
	*/
	function install_settings()
	{
		if ( $this->install->current_upgrade AND $this->install->current_upgrade < 20000 )
		{
			// Jump right to the finish routine for 1.x
			// Reorganized - should never hit here
			
			$this->install_finish();
			return;
		}
		
		$message 				= array();
		$this->install->error   = array();	
		
		//-------------------------------
		// Load module...
		//-------------------------------
		
		require_once( ROOT_PATH . 'sources/action_admin/settings.php' );
		$settings           =  new ad_settings();
		$settings->ipsclass =& $this->install->ipsclass;
		
		//-------------------------------
		// Set location
		//-------------------------------
		
		$this->install->ipsclass->input['file_location'] = 'resources/settings.xml';

		//-------------------------------
		// Run it
		//-------------------------------
		
		$settings->settings_do_import( 1 );
		
		$message[] = $this->install->ipsclass->main_msg;
		
		// 2.2.0 preserve login type
		
		if( $this->install->saved_data['ipbli_usertype'] )
		{
			$this->install->ipsclass->DB->do_update( "conf_settings", array( 'conf_value' => $this->install->saved_data['ipbli_usertype'] ), "conf_key='ipbli_usertype'" );
			
			$this->install->ipsclass->DB->do_update( "login_methods", array( 'login_user_id' => $this->install->saved_data['ipbli_usertype'] ), "login_folder_name='internal'" );
		}
		
		
		if ( count( $this->install->error ) > 0 )
		{
			$this->install->message = count($message) ? implode( "<br />", $message ) : "Proceeding with update";
			
			$this->install->template->warning( array_merge( array( $this->install->message ),
															array( 'Error in upgrade '.$this->install->versions[ $this->install->current_upgrade ]. ' (' . $this->install->current_upgrade . ')' ),
															array( "<span style='color:red'>".count($this->install->error).' errors found</span>' ),
															$this->install->error ) );
			$this->install->template->in_error   = 1;
			
			$this->install->template->next_action = '?p=install&sub=acpperms';
			
			return;
		}
					
		$output[] = count($message) ? implode( "<br />", $message ) : "No settings to import...<br /><br />Proceeding with update";
		$this->install->template->next_action = '?p=install&sub=acpperms';
		$this->install->template->append( $this->install->template->install_page_refresh( $output ) );
		$this->install->template->hide_next = 1;
	}
	
	/*-------------------------------------------------------------------------*/
	// Installs the ACP Permissions
	/*-------------------------------------------------------------------------*/
	/**
	* Installs ACP Permissions
	*
	* @return void
	*/
	function install_acpperms()
	{
		if( $this->install->current_upgrade AND $this->install->current_upgrade < 20000 )
		{
			// Jump right to the finish routine for 1.x
			// Reorganized - should never hit here
			
			$this->install_finish();
			return;
		}
		
		$message 				= array();
		$this->install->error   = array();	
		
		//-----------------------------------------
		// Do Tasks - Just stick it here shall we
		//-----------------------------------------

		require_once( ROOT_PATH . 'sources/api/api_tasks.php' );
		$api =  new api_tasks();
		$api->ipsclass =& $this->install->ipsclass;
		$api->api_init();
		
		$api->add_task();
		
		$message[] = $api->error ? "<span style='color:red;'>Could not rebuild tasks.  Please rebuild tasks in the ACP from the Task Manager page</span>" : "Rebuilt Tasks from XML...";
		
		//-------------------------------
		// Load module...
		//-------------------------------
		
		require_once( ROOT_PATH . 'sources/action_admin/acppermissions.php' );
		$settings           =  new ad_acppermissions();
		$settings->ipsclass =& $this->install->ipsclass;
		
		//-------------------------------
		// Set location
		//-------------------------------
		
		$this->install->ipsclass->input['file_location'] = 'resources/acpperms.xml';
		
		//-------------------------------
		// Run it
		//-------------------------------
		
		$settings->acpperms_xml_import( 1 );
		
		$message[] = $this->install->ipsclass->main_msg;
		
		//-----------------------------------------
		// Install FAQ
		//-----------------------------------------
		$message[] 	= "Updating FAQ information...";
		$xml 		= new class_xml();
		$xml->lite_parser = 1;

		$updatehelp = ( isset( $this->install->saved_data['helpfile'] ) && $this->install->saved_data['helpfile'] ) ? 1 : 0;
		
		$content = implode( "", file( ROOT_PATH . 'resources/faq.xml' ) );
		
		if ( $content )
		{
			$xml->xml_parse_document( $content );
			
			foreach( $xml->xml_array['export']['group']['row'] as $id => $entry )
			{
				$newrow = array();
				foreach( $entry as $f => $data )
				{
					if ( $f == 'VALUE' or $f == 'id' )
					{
						continue;
					}
					
					$newrow[$f] = $entry[ $f ]['VALUE'];
				}
	
				if ( $newrow['title'] )
				{
					$cur_faq = $this->install->ipsclass->DB->build_and_exec_query( array( 'select'	=> 'id', 'from' => 'faq', 'where' => "title = '".$this->install->ipsclass->DB->add_slashes( $newrow['title'] )."'" ) );

					if ( $cur_faq['id'] )
					{
						if ( $updatehelp )
						{
							$this->install->ipsclass->DB->do_update( 'faq', $newrow, "id = ".$cur_faq['id'] );
						}
					}
					else
					{
						$this->install->ipsclass->DB->do_insert( 'faq', $newrow );
					}
				}
			}
		}
		
		if ( count( $this->install->error ) > 0 )
		{
			$this->install->message = count($message) ? implode( "<br />", $message ) : "Proceeding with update";
			
			$this->install->template->warning( array_merge( array( $this->install->message ),
															array( 'Error in upgrade '.$this->install->versions[ $this->install->current_upgrade ]. ' (' . $this->install->current_upgrade . ')' ),
															array( "<span style='color:red'>".count($this->install->error).' errors found</span>' ),
															$this->install->error ) );
			$this->install->template->in_error   = 1;
			
			$this->install->template->next_action = '?p=install&sub=finish';
			
			return;
		}
					
		$this->install->template->next_action = '?p=install&sub=checkdb';
		$this->install->template->append( $this->install->template->install_page_refresh( $message ) );
		$this->install->template->hide_next = 1;
	}		

	/*-------------------------------------------------------------------------*/
	// Finishes the version
	/*-------------------------------------------------------------------------*/
	/**
	* Runs version upgrade script and finishes the version
	*
	* @return void
	*/
	function install_finish()
	{				
		$continue = 0;

		$upg_file = INS_ROOT_PATH.'installfiles/upg_'.$this->install->current_upgrade.'/version_upgrade.php';

		if ( file_exists( $upg_file ) )
		{
			require_once( $upg_file );
			$upgrade = new version_upgrade( $this->install );
			$result  = $upgrade->auto_run();
			
			if ( count( $this->install->error ) > 0 )
			{
				$this->install->template->warning( array_merge( array( $this->install->message ),
																array( 'Error in upgrade '.$this->install->versions[ $this->install->current_upgrade ]. ' (' . $this->install->current_upgrade . ')' ),
																array( "<span style='color:red'>".count($this->install->error).' errors found</span>' ),
																$this->install->error ) );
				$this->install->template->in_error   = 1;
				
				if ( ! $result )
				{
					$this->install->template->next_action = '?p=install&sub=finish';
				}
				elseif ( $this->install->current_upgrade >= $this->install->last_poss_id || $this->install->current_upgrade == 0 )
				{
					$this->install->template->next_action = '?p=install&sub=settings';
				}
				else
				{
					$this->install->template->next_action = '?p=install&sub=sql';
				}
				
				$in_error = 1;
			}
			
			//-----------------------------------------
			// 'version_upgrade.php' is now done
			//-----------------------------------------
			
			if ( $result )
			{
				// The individual upgrade files all shoot you to 2.0...
				
				if ( $this->install->current_upgrade < 20000 )
				{
					$this->install->current_upgrade = '10004';
					unset($this->install->saved_data['vid']);
				}
				
				//------------------------------------------
				// Update DB
				//------------------------------------------
				
				$this->install->ipsclass->DB->do_insert( 'upgrade_history', array(	'upgrade_version_id'    	=> $this->install->current_upgrade,
																				  		'upgrade_version_human' => $this->install->versions[ $this->install->current_upgrade ],
																				  		'upgrade_date'  		=> time(),
																				  		'upgrade_mid'   		=> $this->install->saved_data['mid'],
						     						   )                         	  );

				if ( $in_error == 1 )
				{
					return;
				}

				if ( $this->install->message )
				{
					$output[] = $this->install->message;
				}
				
				$output[] = "Succesfully upgraded to version {$this->install->versions[ $this->install->current_upgrade ]}";
			}
			else
			{
				if ( $in_error == 1 )
				{
					return;
				}
								
				if ( $this->install->message )
				{
					$output[] = $this->install->message;
				}
				else
				{
					$output[] = "Proceeding with update...";
				}
				
				$continue = 1;
			}
		}
		else
		{
			//------------------------------------------
			// Update DB
			//------------------------------------------
			
			if ( $this->install->current_upgrade )
			{
				$this->install->ipsclass->DB->do_insert( 'upgrade_history', array(	'upgrade_version_id'    	=> $this->install->current_upgrade,
																				  	'upgrade_version_human' => $this->install->versions[ $this->install->current_upgrade ],
																				  	'upgrade_date'  		=> time(),
																				  	'upgrade_mid'   		=> $this->install->saved_data['mid'],
						     						   )                         );

				$output[] = "Succesfully upgraded to version {$this->install->versions[ $this->install->current_upgrade ]}";
			}
		}
			
		//-----------------------------------------
		// Next...
		//-----------------------------------------
		
		if ( $continue )
		{
			//-----------------------------------------
			// More to do?
			//-----------------------------------------
			
			$this->install->template->next_action = '?p=install&sub=finish';
		}
		elseif ( $this->install->current_upgrade >= $this->install->last_poss_id || $this->install->current_upgrade == 0 )
		{
			//-----------------------------------------
			// Last update?
			//-----------------------------------------
			
			$this->install->template->next_action = '?p=install&sub=settings';
		}
		else
		{
			//-----------------------------------------
			// Do SQL
			//-----------------------------------------
			
			$this->install->template->next_action = '?p=install&sub=sql';
		}

		if ( $this->install->do_man )
		{
			$this->install->template->append( implode( "<br />", $output ) );
		}
		else
		{
			$this->install->template->append( $this->install->template->install_page_refresh( $output ) );
			$this->install->template->hide_next   = 1;
		}
	}
	
	
	/*-------------------------------------------------------------------------*/
	// Runs the DB Checker after install
	/*-------------------------------------------------------------------------*/
	/**
	* Checks DB for errors
	*
	* @return void
	*/
	function install_checkdb()
	{
		$message 				= array();
		$this->install->error   = array();	
		
		if (  @file_exists( ROOT_PATH."/install/sql/{$this->install->ipsclass->vars['sql_driver']}_tables.php" ) )
		{
			//-------------------------------
			// Load ACP Skin...
			//-------------------------------			
			
			require_once( ROOT_PATH   . "sources/lib/admin_skin.php" );
			$this->install->ipsclass->skin_acp = 'IPB2_Standard';
			$this->install->ipsclass->skin_acp_url = $this->install->ipsclass->vars['board_url']."/skin_acp/".$this->install->ipsclass->skin_acp;
			
			$this->install->ipsclass->adskin           = new admin_skin();
			$this->install->ipsclass->adskin->ipsclass =& $this->install->ipsclass;
			$this->install->ipsclass->adskin->init_admin_skin();			

			//-------------------------------
			// Load module...
			//-------------------------------
			
			require_once( ROOT_PATH."sources/action_admin/sql_{$this->install->ipsclass->vars['sql_driver']}.php" );
			
			$this->sql_driver = new ad_sql_module();
			$this->sql_driver->ipsclass =& $this->install->ipsclass;
			
			$output = array();
			$output = $this->sql_driver->db_table_diag( 0 );
			
			$our_output = "		<style type='text/css' media='all'>
									.tableheader,
									.tableheaderalt
									{
										font-size:12px;
										vertical-align:middle;
										font-weight:bold;
										color:#FFF;
										padding:8px 0px 8px 5px;
										background-image: url({$this->install->ipsclass->vars['board_url']}/skin_acp/IPB2_Standard/images/folder_css_images/table_title_gradient.gif);
										background-repeat: repeat-x;
										background-color:#3363A1;
									}
									@import url('install.css');
								</style>
								<script type='text/javascript' src='dbchecker.js'></script>
						";

			if( $this->sql_driver->db_has_issues )
			{
				$this->install->ipsclass->adskin->td_header[] = array( "{none}"    	, "50%" );
				$this->install->ipsclass->adskin->td_header[] = array( "{none}"    	, "50%" );
				
				$our_output .= $this->install->ipsclass->adskin->start_table( "WARNING: ERRORS FOUND" );
				
				$our_output .= $this->install->ipsclass->adskin->add_td_row( array( array( "<script type='text/javascript'>var save_data = '".serialize($this->install->saved_data)."';</script><span class='rss-feed-invalid'>There were errors found with your database.  Please review them below, or click <a href='#' onclick='fix_all_dberrors();'>here</a> to correct these errors.", 2 ) ) );
				
				$our_output .= $this->install->ipsclass->adskin->end_table();
			}
			else
			{
				$this->install->ipsclass->adskin->td_header[] = array( "{none}"    	, "50%" );
				$this->install->ipsclass->adskin->td_header[] = array( "{none}"    	, "50%" );
				
				$our_output .= $this->install->ipsclass->adskin->start_table( "No Errors Found" );
				
				$our_output .= $this->install->ipsclass->adskin->add_td_row( array( array( "<span class='rss-feed-valid'>There were no errors found with your database.", 2 ) ) );
				
				$our_output .= $this->install->ipsclass->adskin->end_table();
			}							
			
			$this->install->ipsclass->adskin->td_header[] = array( "Table"    	, "30%" );
			$this->install->ipsclass->adskin->td_header[] = array( "Status"  	, "20%" );
			$this->install->ipsclass->adskin->td_header[] = array( "Fix"       	, "50%" );
			
			$our_output .= $this->install->ipsclass->adskin->start_table( "Database Table Results" );
			
			foreach( $output as $html_row )
			{
				$html_row = preg_replace( "#'&amp;section=help&amp;act=diag&amp;code=dbchecker&amp;query=(.*?)'#i", "'index.php?p=install&sub=checkdb&saved_data=".serialize($this->install->saved_data)."&query=$1'", $html_row );
				
				$our_output .= $html_row;
			}
			
			$our_output .= $this->install->ipsclass->adskin->end_table();
		}
		else
		{
			// Can't run db checker as table def isn't there
			$this->install_skinrevert();
			return;
		}
		
		$this->install->template->next_action = '?p=install&sub=skinrevert';
		$this->install->template->append( $our_output );
	}		
	

	/*-------------------------------------------------------------------------*/
	// Install: Revert Skin Changes
	/*-------------------------------------------------------------------------*/
	/**
	* Install templates
	*
	* @return void
	*/
	function install_skinrevert()
	{	
		$message 				= array();
		$this->install->error   = array();	
		
		// First time around, we won't have this
		
		$this->install->saved_data['do'] = isset($this->install->ipsclass->input['do']) ? $this->install->ipsclass->input['do'] : $this->install->saved_data['do'];
		
		if( $this->install->saved_data['do'] == 'none' )
		{
			$this->install_templates();
			return;
		}
		
		if ( ! $this->install->saved_data['do'] )
		{
			$id = intval($this->install->saved_data['skinid']) ? intval($this->install->saved_data['skinid']) : 1;
			$this->install->saved_data['new_skin'] = intval($this->install->saved_data['new_skin']);
			
			$default = $this->install->ipsclass->DB->simple_exec_query( array( 'select' => '*',
																			   'from'   => 'skin_sets',
																			   'where'  => "set_skin_set_id > {$id}",
																			   'order'  => 'set_skin_set_id ASC',
																			   'limit'  => array(0,1) ) );
			
			if ( $default['set_skin_set_id'] AND ( $default['set_skin_set_id'] == $this->install->saved_data['new_skin'] ) )
			{
				$default = $this->install->ipsclass->DB->simple_exec_query( array( 'select' => '*',
																				   'from'   => 'skin_sets',
																				   'where'  => "set_skin_set_id > {$this->install->saved_data['new_skin']}",
																				   'order'  => 'set_skin_set_id ASC',
																				   'limit'  => array(0,1) ) );
			}
		
			if ( ! $default['set_skin_set_id'] )
			{
				$this->install->template->next_action = '?p=install&sub=templates';
				$this->install->template->append( $this->install->template->install_page_refresh( array( 'No further skins to revert' ) ) );
				$this->install->template->hide_next   = 1;
				return;
			}
			else
			{			
				$this->install->saved_data['skinid'] = $default['set_skin_set_id'];
				
				$this->install->template->next_action = '?p=install&sub=skinrevert';
				$this->install->template->append( $this->install->template->install_template_skinrevert( $default['set_name'] ) );
				return;
			}
		}
		else
		{
			$man     = intval( $this->install->saved_data['skinid'] );
			$cnt     = 0;
		
			$default = $this->install->ipsclass->DB->simple_exec_query( array( 'select' => '*', 'from' => 'skin_sets', 'where' => "set_skin_set_id=".$man ) );
			
			$this->install->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'skin_templates', 'where' => "set_id=".$man ) );
			$outer = $this->install->ipsclass->DB->simple_exec();
			
			if( $this->install->ipsclass->DB->get_num_rows($outer) )
			{
				while( $r = $this->install->ipsclass->DB->fetch_row($outer) )
				{
					if( $r['set_id'] == 1 )
					{
						continue;
					}
					else
					{
						$this->install->ipsclass->DB->simple_exec_query( array( 'delete' => 'skin_templates', 'where' => 'suid='.$r['suid'] ) );
						$cnt++;
					}
				}
			}
			
			$this->install->ipsclass->DB->do_update( 'skin_sets', array( 'set_css' => '', 'set_wrapper' => '' ), "set_skin_set_id=".$man );
			
			$next = $this->install->ipsclass->DB->simple_exec_query( array( 'select'  => '*',
																			'from'    => 'skin_sets',
																			'where'   => "set_skin_set_id > ".$man,
																			'order'   => 'set_skin_set_id ASC',
																			'limit'   => array(0,1) ) );
			
			if( $next['set_skin_set_id'] )
			{
				if( $this->install->saved_data['do'] == 'all' )
				{
					$this->install->saved_data['skinid'] = $next['set_skin_set_id'];
					$this->install->saved_data['do']	 = 'all';
					$this->install->template->next_action = '?p=install&sub=skinrevert';
					$this->install->template->append( $this->install->template->install_page_refresh( array( "$cnt skin template bits from skin set '{$default['set_name']}' reverted, proceeding to next skin set...." ) ) );
					$this->install->template->hide_next   = 1;
					return;
				}
				else
				{
					$this->install->saved_data['skinid'] = $next['set_skin_set_id'];
					$this->install->template->next_action = '?p=install&sub=skinrevert';
					unset($this->install->saved_data['do']);
					$this->install->template->append( $this->install->template->install_page_refresh( array( "$cnt skin template bits from skin set '{$default['set_name']}' reverted, proceeding to next skin set...." ) ) );
					$this->install->template->hide_next   = 1;
					return;					
				}
			}
			else
			{
				$this->install->template->next_action = '?p=install&sub=templates';
				$this->install->template->append( $this->install->template->install_page_refresh( array( "$cnt skin template bits from skin set '{$default['set_name']}' reverted, proceeding to rebuild templates...." ) ) );
				$this->install->template->hide_next   = 1;
				return;
			}
		}				
	}
	
	
	/*-------------------------------------------------------------------------*/
	// Install: Templates
	/*-------------------------------------------------------------------------*/
	/**
	* Install templates
	*
	* @return void
	*/
	function install_templates()
	{
		//-----------------------------------
		// Get XML
		//-----------------------------------
		
		$xml = new class_xml();
		$xml->lite_parser = 1;		
		
		//-----------------------------------
		// Get XML file (TEMPLATES)
		//-----------------------------------
		
		$xmlfile = ROOT_PATH.'resources/ipb_templates.xml';
		
		$setting_content = implode( "", file($xmlfile) );
		
		//-------------------------------
		// Unpack the datafile (TEMPLATES)
		//-------------------------------
		
		$xml->xml_parse_document( $setting_content );
		
		//-------------------------------
		// (TEMPLATES)
		//-------------------------------
		
		if ( ! is_array( $xml->xml_array['templateexport']['templategroup']['template'] ) )
		{
			$this->install->template->in_error   = 1;
			$this->install->error[] = "Error with resources/ipb_templates.xml - could not process XML properly";
			
			$this->install->template->warning( $this->install->error );		
			
			$this->install->template->next_action = '?p=install&sub=rebuild';
			return;	
		}
		else
		{
			$output[] = "Master templates rebuilt, proceeding to recache templates...";
			
			foreach( $xml->xml_array['templateexport']['templategroup']['template'] as $id => $entry )
			{
				$row = $this->install->ipsclass->DB->simple_exec_query( array( 'select' => 'suid',
																	  'from'   => 'skin_templates',
																	  'where'  => "group_name='{$entry[ 'group_name' ]['VALUE']}' AND func_name='{$entry[ 'func_name' ]['VALUE']}' and set_id=1"
															 )      );
				 
				$this->install->ipsclass->DB->free_result();
				
				$this->install->ipsclass->DB->allow_sub_select 	= 1;
				
				if ( $row['suid'] )
				{
					$this->install->ipsclass->DB->do_update( 'skin_templates', array( 'func_data'       => $entry[ 'func_data' ]['VALUE'],
																			 'section_content' => $entry[ 'section_content' ]['VALUE'],
																			 'updated'         => time()
																		   )
																	, 'suid='.$row['suid'] );
				}
				else
				{
					$this->install->ipsclass->DB->do_insert( 'skin_templates', array( 'func_data'       => $entry[ 'func_data' ]['VALUE'],
																			 'func_name'       => $entry[ 'func_name' ]['VALUE'],
																			 'section_content' => $entry[ 'section_content' ]['VALUE'],
																			 'group_name'      => $entry[ 'group_name' ]['VALUE'],
																			 'updated'         => time(),
																			 'set_id'          => 1
												 )                         );
				}
			}
		}

		//-----------------------------------------
		// Next...
		//-----------------------------------------
		
		unset($xml);
		
		$this->install->template->append( $this->install->template->install_page_refresh( $output ) );	
		$this->install->template->next_action = '?p=install&sub=caches';
		$this->install->template->hide_next   = 1;
	}
	
	/*-------------------------------------------------------------------------*/
	// Install: Caches
	/*-------------------------------------------------------------------------*/
	/**
	* Install Caches
	*
	* @return void
	*/
	function install_caches()
	{
		//-----------------------------------------
		// Do Caches
		//-----------------------------------------

		require_once( ROOT_PATH . 'sources/api/api_skins.php' );
		$api =  new api_skins();
		$api->ipsclass =& $this->install->ipsclass;
		$api->api_init();

		$this->install->ipsclass->DB->allow_sub_select 	= 1;
		
		if ( isset( $this->install->ipsclass->input['sid'] ) )
		{
			if ( $this->install->ipsclass->input['sid'] == 0 )
			{
				$output = $this->install->cache_and_cleanup();
				$this->install->template->next_action = '?p=done';
			}
			else
			{
				$messages = $api->skin_rebuild_caches( intval( $this->install->ipsclass->input['sid'] ) );
				$output = $messages['messages'];
				$this->install->template->next_action = '?p=install&sub=caches&sid='.$messages['completed'];
			}
		}
		else
		{
				$messages = $api->skin_rebuild_caches( 0 );
				$output = $messages['messages'];
				$this->install->template->next_action = '?p=install&sub=caches&sid='.$messages['completed'];
		}
					
		//-----------------------------------------
		// Next...
		//-----------------------------------------
		
		$this->install->template->hide_next   = 1;		
		$this->install->template->append( $this->install->template->install_page_refresh( $output ) );		
	}	
	
}

?>