<?php

error_reporting(E_ALL);
ini_set('max_execution_time', 0);

define('BACKUP_NAME', 'dump(.*).txt'); // how backup dump files are named
$general_error = '';

$pathtoroot = "";
if(!strlen($pathtoroot))
{
  $path=dirname(realpath(__FILE__));
  //$path=dirname(realpath(__FILE__));
  if(strlen($path))
  {
    /* determine the OS type for path parsing */
    $pos = strpos($path,":");
    if ($pos === false)
    {
      $gOS_TYPE="unix";
      $pathchar = "/";
    }
    else
    {
      $gOS_TYPE="win";
      $pathchar="\\";
    }
    $p = $path.$pathchar;
    /*Start looking for the root flag file */
    while(!strlen($pathtoroot) && strlen($p))
    {
      $sub = substr($p,strlen($pathchar)*-1);
      if($sub==$pathchar)
      {
        $filename = $p."root.flg";
      }
      else
        $filename = $p.$pathchar."root.flg";
      if(file_exists($filename))
      {
        $pathtoroot = $p;
      }
      else
      {
        $parent = realpath($p.$pathchar."..".$pathchar);
	if($parent!=$p)
	{
	  $p = $parent;
	}
	else
	  $p = "";
      }
    }
    if(!strlen($pathtoroot))
      $pathtoroot = ".".$pathchar;
  }
  else
  {
    $pathtoroot = ".".$pathchar;
  }
}

$path_char = GetPathChar();
//phpinfo(INFO_VARIABLES);

$sub = substr($pathtoroot,strlen($pathchar)*-1);
if($sub!=$pathchar)
{
  $pathtoroot = $pathtoroot.$pathchar;
}

ini_set('include_path', '.');

if( file_exists($pathtoroot.'debug.php') && !defined('DEBUG_MODE') ) include_once($pathtoroot.'debug.php');
if(!defined('IS_INSTALL'))define('IS_INSTALL',1);
$admin = substr($path,strlen($pathtoroot));
$state = isset($_GET["state"]) ? $_GET["state"] : '';
if(!strlen($state))
{
	$state = isset($_POST['state']) ? $_POST['state'] : '';
}

if (!defined("GET_LICENSE_URL")) {
	define("GET_LICENSE_URL", "http://www.intechnic.com/myaccount/license.php");
}

include($pathtoroot.$admin."/install/install_lib.php");

$install_type = GetVar('install_type', true);
$force_finish = isset($_REQUEST['ff']) ? true : false;

$ini_file = $pathtoroot."config.php";
if(file_exists($ini_file))
{
    $write_access = is_writable($ini_file);
    $ini_vars = inst_parse_portal_ini($ini_file,TRUE);

    foreach($ini_vars as $secname => $section)
    {
      foreach($section as $key => $value)
      {
          $key = "g_".str_replace('-', '', $key);      
          global $$key;
          $$key = $value;
      }
    }    
}
else
{
  $state="";  
  $write_access = is_writable($pathtoroot);
  if($write_access)
  {  
    set_ini_value("Database", "DBType", "");
    set_ini_value("Database", "DBHost", "");
    set_ini_value("Database", "DBUser", "");
    set_ini_value("Database", "DBUserPassword", "");
    set_ini_value("Database", "DBName", "");
    set_ini_value("Module Versions", "In-Portal", "");
    save_values();
  }
}

$titles[1] = "General Site Setup";
$configs[1] = "in-portal:configure_general";
$mods[1] = "In-Portal";

$titles[2] = "User Setup";
$configs[2] = "in-portal:configure_users";
$mods[2] = "In-Portal:Users";

$titles[3] = "Category Display Setup";
$configs[3] = "in-portal:configure_categories";
$mods[3] = "In-Portal";

// simulate rootURL variable: begin
	$rootURL = 'http://'.dirname($_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']);
	$tmp = explode('/', $rootURL);
	if( $tmp[ count($tmp) - 1 ] == $admin) unset( $tmp[ count($tmp) - 1 ] );
	$rootURL = implode('/', $tmp).'/';
	unset($tmp);
	//echo "RU: $rootURL<br>";
// simulate rootURL variable: end

$db_savings = Array('dbinfo', 'db_config_save', 'db_reconfig_save'); //, 'reinstall_process'
if( isset($g_DBType) && $g_DBType && strlen($state)>0 && !in_array($state, $db_savings) )
{
    require_once($pathtoroot."kernel/startup.php");
    $localURL=$rootURL."kernel/";
    $adminURL = $rootURL.$admin;
    $imagesURL = $adminURL."/images";

//admin only util

    $pathtolocal = $pathtoroot."kernel/";
    require_once ($pathtoroot.$admin."/include/elements.php");
    //require_once ($pathtoroot."kernel/admin/include/navmenu.php");
    require_once ($pathtolocal."admin/include/navmenu.php");
    require_once($pathtoroot.$admin."/toolbar.php");
}

function GetPathChar($path = null)
{
 	if( !isset($path) ) $path = $GLOBALS['pathtoroot'];
 	$pos = strpos($path, ':');
    return ($pos === false) ? "/" : "\\";
}

function SuperStrip($str, $inverse = false)
{
	$str = $inverse ? str_replace("%5C","\\",$str) : str_replace("\\","%5C",$str);
	return stripslashes($str);
}

$skip_step = false;

require_once($pathtoroot.$admin."/install/inst_ado.php");
$helpURL = $rootURL.$admin.'/help/install_help.php?destform=popup&help_usage=install';
?>
<html>
<head>
<title>In-Portal Installation</title>
		<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
		<meta name="generator" content="Notepad">
		<link rel="stylesheet" type="text/css" href="include/style.css">
        <LINK REL="stylesheet" TYPE="text/css" href="install/2col.css">
		<SCRIPT LANGUAGE="JavaScript1.2">
			function MM_preloadImages() { //v3.0
			 var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
			   var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
			   if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
			}
			
			function swap(imgid, src){
				var ob = document.getElementById(imgid);
				ob.src = 'images/' + src;
			}
			
			function Continue() {
				document.iform1.submit();
			}
			
			function CreatePopup(window_name, url, width, height)
			{
				// creates a popup window & returns it
				if(url == null && typeof(url) == 'undefined' ) url = '';
				if(width == null && typeof(width) == 'undefined' ) width = 750;
				if(height == null && typeof(height) == 'undefined' ) height = 400;
				
				
				return window.open(url,window_name,'width='+width+',height='+height+',status=yes,resizable=yes,menubar=no,scrollbars=yes,toolbar=no');  	
			}
			
			function ShowHelp(section)
			{
				var frm = document.getElementById('help_form');	
				
				frm.section.value = section;
				frm.method = 'POST';
				CreatePopup('HelpPopup','<?php echo $rootURL.$admin; ?>/help/blank.html'); // , null, 600);
				frm.target = 'HelpPopup';
				frm.submit();
			}

		</SCRIPT>        
</head>

<body topmargin="0" leftmargin="0" marginwidth="0" marginheight="0" style="height: 100%">
<form name="help_form" id="help_form" action="<?php echo $helpURL; ?>" method="post"><input type="hidden" id="section" name="section" value=""></form>
<form enctype="multipart/form-data" name="iform1" id="iform1" method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
<table cellpadding="0" cellspacing="0" border="0" width="100%" height="100%">
	<tr>
		<td height="90">
			<table cellpadding="0" cellspacing="0" border="0" width="100%" height="90">
				<tr>
					<td rowspan="3" valign="top"><a href="http://www.in-portal.net" target="_top"><img title="In-portal" src="images/globe.gif" width="84" height="91" border="0"></a></td>
					<td rowspan="3" valign="top"><a href="http://www.in-portal.net" target="_top"><img title="In-portal" src="images/logo.gif" width="150" height="91" border="0"></a></td>
					<td rowspan="3" width="100000" align="right">&nbsp;</td>
					<td width="400"><img title="" src="images/blocks.gif" width="400" height="73"></td>
				</tr>
				<tr><td align="right" background="images/version_bg.gif" class="head_version" valign="top"><img title="" src="images/spacer.gif" width="1" height="14">In-Portal Version <?php echo GetMaxPortalVersion($pathtoroot.$admin)?>: English US</td></tr>
				<tr><td><img title="" src="images/blocks2.gif" width="400" height="2"><br></td></tr>
				<tr><td bgcolor="black" colspan="4"><img title="" src="images/spacer.gif" width="1" height="1"><br></td></tr>
			</table>
		</td>
	</tr>
	
<?php
require_once($pathtoroot."kernel/include/adodb/adodb.inc.php");

if(!strlen($state))
    $state = @$_POST["state"];
//echo $state;

if(strlen($state)==0)
{
    $ado =& inst_GetADODBConnection();
    $installed = $ado ? TableExists($ado,"ConfigurationAdmin,Category,Permissions") : false;
    
    if(!minimum_php_version("4.1.2"))
    {    
        $general_error = "You have version ".phpversion()." - please upgrade!";
        //die();
    }

    if(!$write_access)
    {
        if ($general_error != '') {
        	$general_error .= '<br /><br />';
        }
    	$general_error .= "Install cannot write to config.php in the root directory of your in-portal installation ($pathtoroot).";
        //die();
    }

    if(!is_writable($pathtoroot."themes/"))
    {
        if ($general_error != '') {
        	$general_error .= '<br /><br />';
        }
    	$general_error .= "In-portal's Theme directory must be writable (".$pathtoroot."themes/).";
        //die();
    }
    
    if(!is_writable($pathtoroot."kernel/images/"))
    {
        if ($general_error != '') {
        	$general_error .= '<br /><br />';
        }
    	$general_error .= "In-portal's Image Upload directory must be writable (".$pathtoroot."kernel/images/).";
        //die();
    } 
    
    if(!is_writable($pathtoroot."kernel/images/pending"))
    {
        if ($general_error != '') {
        	$general_error .= '<br /><br />';
        }
    	$general_error .= "In-portal's Pending Image Upload directory must be writable (".$pathtoroot."kernel/images/pending).";
        //die();
    } 
    
    if(!is_writable($pathtoroot."admin/backupdata/"))
    {
        if ($general_error != '') {
        	$general_error .= '<br /><br />';
        }
    	$general_error .= "In-portal's Backup directory must be writable (".$pathtoroot."admin/backupdata/).";
        //die();
    }    
    
    if(!is_writable($pathtoroot."admin/export/"))
    {
        if ($general_error != '') {
        	$general_error .= '<br /><br />';
        }
    	$general_error .= "In-portal's Export directory must be writable (".$pathtoroot."admin/export/).";
        //die();
    }    
    
    if(!is_writable($pathtoroot."kernel/stylesheets/"))
    {
        if ($general_error != '') {
        	$general_error .= '<br /><br />';
        }
    	$general_error .= "In-portal's stylesheets directory must be writable (".$pathtoroot."kernel/stylesheets/).";
        //die();
    }
    
    if(!is_writable($pathtoroot."kernel/user_files/"))
    {
        if ($general_error != '') {
        	$general_error .= '<br /><br />';
        }
    	$general_error .= "In-portal's CMS images directory must be writable (".$pathtoroot."kernel/user_files/).";
        //die();
    }
    
    if(!is_writable($pathtoroot."kernel/cache/"))
    {
        if ($general_error != '') {
        	$general_error .= '<br /><br />';
        }
    	$general_error .= "In-portal's templates cache directory must be writable (".$pathtoroot."kernel/cache/).";
        //die();
    }
    
    if($installed)
    {     	
    	$state="reinstall";
    }
    else {
      $state="dbinfo";
    }

}

if($state=="reinstall_process")
{
	$login_err_mesg = ''; // always init vars before use
	if( !isset($g_License) ) $g_License = '';
	$lic = base64_decode($g_License);
    if(strlen($lic))
    {
            a83570933e44bc66b31dd7127cf3f23a($lic);
            $ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));            
    }

      $LoggedIn = FALSE;
      if($_POST["UserName"]=="root") 
      {
          $ado =& inst_GetADODBConnection();
          $sql = "SELECT * FROM ".$g_TablePrefix."ConfigurationValues WHERE VariableName='RootPass'";
          
          $rs = $ado->Execute($sql);
          if($rs && !$rs->EOF)
          {          
              $RootPass = $rs->fields["VariableValue"];
              
              if(strlen($RootPass)>0)
                  $LoggedIn = ($RootPass==md5($_POST["UserPass"]));
          }
      }
      else
      {
      	$act = '';
      	if (ConvertVersion($g_InPortal) >= ConvertVersion("1.0.5")) {
      		$act = 'check';
      	}
		$rfile = @fopen(GET_LICENSE_URL."?login=".md5($_POST['UserName'])."&password=".md5($_POST['UserPass'])."&action=$act&license_code=".base64_encode($g_LicenseCode)."&version=".GetMaxPortalVersion($pathtoroot.$admin)."&domain=".base64_encode($_SERVER['HTTP_HOST']), "r");
		if (!$rfile) {
			$login_err_mesg = "Unable to connect to the Intechnic server!";
			$LoggedIn = false;		
		}
		else {
			$rcontents = '';
			while (!feof($rfile)) {
				$line = fgets($rfile, 10000);
				$rcontents .= $line;
			}
			@fclose($rfile);
			
			if (substr($rcontents, 0, 5) == 'Error') {
				$login_err_mesg = substr($rcontents, 6);
				$LoggedIn = false;				
			}
			else {
				$LoggedIn = true;
			}
		}
      	//$LoggedIn = ($i_User == $_POST["UserName"] && ($i_Pswd == $_POST["UserPass"]) && strlen($i_User)>0) || strlen($i_User)==0;
      }
      
      if($LoggedIn)
      {
        if (!(int)$_POST["inp_opt"]) {
          	$state="reinstall";
          	$inst_error = "Please select one of the options above!";
        }
        else {        	
	      	switch((int)$_POST["inp_opt"])
	          {
	          case 0:
	              $inst_error = "Please select an option above";
	          break;
	          case 1:
	              /* clean out all tables */
	              $install_type = 4;
	              $ado =& inst_GetADODBConnection();
	              $filename = $pathtoroot.$admin."/install/inportal_remove.sql";  
	              RunSchemaFile($ado,$filename);
	              
	              // removing other tables
	              $tables = $ado->MetaTables();
	              
	              foreach($tables as $tab_name) {
	              	if (stristr($tab_name, $g_TablePrefix."ses_")) {
	              		$sql = "DROP TABLE IF EXISTS $tab_name";
	              		$ado->Execute($sql);
	              	}
	              }
	              
	              /* run install again */
	              $state="license";
	          break;
	          case 2:
	          	  $install_type = 3;
	              $state="dbinfo";              
	          break;
	          case 3:
	          	  $install_type = 5;
	              $state="license";
	          break;
	          case 4:
	          		$install_type = 6;
	              /* clean out all tables */
	              $ado =& inst_GetADODBConnection();
	              //$filename = $pathtoroot.$admin."/install/inportal_remove.sql";              
	              //RunSchemaFile($ado,$filename);
	              /* run install again */
	              $state="restore_select";          
	          break;
	          case 5:
	          	$install_type = 7;
	          	/* change DB config */
	          	$state="db_reconfig";
	          break;
	          case 6:
	          	$install_type = 8;
	          	$state = "upgrade";
	          break;
	          case 7:
	          	$install_type = 9;
	          	$state = "fix_paths";
	          break;	          
	       }
	    }
      }
      else
      {      
         $state="reinstall";
         $login_error = $login_err_mesg;//"Invalid Username or Password - Try Again";
      }
}

if ($state == "upgrade") {
    $ado =& inst_GetADODBConnection();
    
    $Modules = array();
    $Texts = array();    
    
    if (ConvertVersion(GetMaxPortalVersion($pathtoroot.$admin)) >= ConvertVersion("1.0.5") && ($g_LicenseCode == '' && $g_License != '')) {	
    	$state = 'reinstall';
    	$inst_error = "Your license must be updated before you can upgrade. Please don't use 'Existing License' option, instead either Download from Intechnic or Upload a new license file!";
    }
    else {
		$sql = "SELECT Name, Version, Path FROM ".$g_TablePrefix."Modules ORDER BY LoadOrder asc";
		
		$rs = $ado->Execute($sql);
		
		$i = 0;		
		while ($rs && !$rs->EOF) {
			$p = $rs->fields['Path'];        
	    
	    	if ($rs->fields['Name'] == 'In-Portal') {
	    		$p = '';
	    	}    
	    	
	    	$dir_name = $pathtoroot.$p."admin";///install/upgrades/";

			if($rs->fields['Version'] != $newver = GetMaxPortalVersion($dir_name))
			{

////////////////////

				$mod_path = $rs->fields['Path'];
				$current_version = $rs->fields['Version'];
		    	if ($rs->fields['Name'] == 'In-Portal') $mod_path = '';

		    	$dir_name = $pathtoroot.$mod_path."/admin/install/upgrades/";
		    	$dir = @dir($dir_name); 
		    	
		    	$upgrades_arr = Array();
		    	
		    	$new_version = '';
		    	while ($file = $dir->read()) {
						if ($file != "." && $file != ".." && !is_dir($dir_name.$file)) { 	        	
				        	if (strstr($file, 'inportal_check_v')) {
					        	$upgrades_arr[] = $file;	        		
				        	}
						}
		    	}
    	
		    	usort($upgrades_arr, "VersionSort");
				$result=0;
				$failCheck=1;
				$stopCheck=2;
				$CheckErrors = Array();

		    	foreach($upgrades_arr as $file)
		    	{
			      $file_tmp = str_replace("inportal_check_v", "", $file);
			      $file_tmp = str_replace(".php", "", $file_tmp);	
				        	
			   		if (ConvertVersion($file_tmp) > ConvertVersion($current_version)) {
		    			$filename = $pathtoroot.$mod_path."/admin/install/upgrades/$file";
				       	if(file_exists($filename))
					   		{
								include($filename);
								if($result&2)break;
					   		}	        		
			      	}		
		    	}

////////////////////

		    	$Modules[] = Array('module'=>$rs->fields['Name'],'curver'=>$rs->fields['Version'],'newver'=>$newver,'error'=>$result!='pass');
//		    	$Texts[] = $rs->fields['Name']." (".$rs->fields['Version']." ".prompt_language("la_to")." ".GetMaxPortalVersion($dir_name).")";
			}    	
	    	/*$dir = @dir($dir_name);    	
	    	
	    	while ($file = $dir->read()) {
		        if ($file != "." && $file != ".." && !is_dir($dir_name.$file))
		        { 		        	
		        	if (strstr($file, 'inportal_upgrade_v')) {
			        	$file = str_replace("inportal_upgrade_v", "", $file);
			        	$file = str_replace(".sql", "", $file);		        		
			        	
		        		//$sql = "SELECT count(*) AS count FROM ".$g_TablePrefix."Modules WHERE Name = '".$rs->fields['Name']."' AND Version = '$file'";
		        		//$rs1 = $ado->Execute($sql);
		        		
		        		if ($rs1->fields['count'] == 0 && ConvertVersion($file) > ConvertVersion($rs->fields['Version'])) {
		        			if ($Modules[$i-1] == $rs->fields['Name']) {
										$Texts[$i-1] = $rs->fields['Name']." (".$rs->fields['Version']." ".prompt_language("la_to")." ".$file.")";
		        				$i--;
		        			}
		        			else {
		        				$Texts[$i] = $rs->fields['Name']." (".$rs->fields['Version']." ".prompt_language("la_to")." ".$file.")";
		        				$Modules[$i] = $rs->fields['Name'];
		        			}
		        			
		        			$i++;
		        		}	        		
		        	}
		        }	        
	    	}*/
	    	
	    	$rs->MoveNext();    	
	    }
	    	
		$include_file = $pathtoroot.$admin."/install/upgrade.php";
	}
}

if ($state == "upgrade_process") {
  $ado =& inst_GetADODBConnection();	
	$mod_arr = $_POST['modules'];
	
	$mod_str = '';
	foreach ($mod_arr as $tmp_mod) {
		$mod_str .= "'$tmp_mod',";
	}
	
	$mod_str = substr($mod_str, 0, strlen($mod_str) - 1);
	
	$sql = "SELECT Name FROM ".$g_TablePrefix."Modules WHERE Name IN ($mod_str) ORDER BY LoadOrder";
	$rs = $ado->Execute($sql);
	
	$mod_arr = array();
	while ($rs && !$rs->EOF) {
		$mod_arr[] = $rs->fields['Name'];
		$rs->MoveNext();
	}
	
    foreach($mod_arr as $p)
    {
      $mod_name = strtolower($p);
        
			$sql = "SELECT Version, Path FROM ".$g_TablePrefix."Modules WHERE Name = '$p'";
			$rs = $ado->Execute($sql);	
	
			$current_version = $rs->fields['Version'];
        
    	if ($mod_name == 'in-portal') {
    		$mod_path = '';
    	}
    	else {
    		$mod_path = $rs->fields['Path'];
    	}
    	
    	$dir_name = $pathtoroot.$mod_path."/admin/install/upgrades/";
    	$dir = @dir($dir_name); 
    	
    	$upgrades_arr = Array();
    	
    	$new_version = '';
    	while ($file = $dir->read()) {
				if ($file != "." && $file != ".." && !is_dir($dir_name.$file)) { 	        	
		        	if (strstr($file, 'inportal_upgrade_v')) {
			        	$upgrades_arr[] = $file;	        		
		        	}
				}
    	}
    	
    	usort($upgrades_arr, "VersionSort");
    	
    	foreach($upgrades_arr as $file) {
	      $file_tmp = str_replace("inportal_upgrade_v", "", $file);
	      $file_tmp = str_replace(".sql", "", $file_tmp);	
		        	
	   		if (ConvertVersion($file_tmp) > ConvertVersion($current_version)) {
    			$filename = $pathtoroot.$mod_path."/admin/install/upgrades/$file";
		       	//echo "Running: $filename<br>";
		       	if(file_exists($filename))
			   		{
			   			RunSQLFile($ado, $filename);
			   		}	        		
	      	}		
    	}

    	set_ini_value("Module Versions", $p, GetMaxPortalVersion($pathtoroot.$mod_path."/admin/"));
  		save_values();    	
    }

    $state = 'languagepack_upgrade';    
}	

// upgrade language pack
if($state=='languagepack_upgrade')
{
	$state = 'lang_install_init';
	$_POST['lang'][] = 'english.lang';
	$force_finish = true;
}

if ($state == 'fix_paths') {
	$ado = inst_GetADODBConnection();
	$sql = "SELECT * FROM ".$g_TablePrefix."ConfigurationValues WHERE VariableName = 'Site_Name' OR VariableName LIKE '%Path%'";
	$path_rs = $ado->Execute($sql);
	$include_file = $pathtoroot.$admin."/install/fix_paths.php";
}

if ($state == 'fix_paths_process') {
	$ado = inst_GetADODBConnection();
	//$state = 'fix_paths';
	//$include_file = $pathtoroot.$admin."/install/fix_paths.php";
	foreach($_POST["values"] as $key => $value) {
		$sql = "UPDATE ".$g_TablePrefix."ConfigurationValues SET VariableValue = '".$value."' WHERE VariableName = '".$key."'";
		$ado->Execute($sql);
	}
	
	$state = "finish";
}

if($state=="db_reconfig_save")
{
    $ini_vars = inst_parse_portal_ini($ini_file,TRUE);

    foreach($ini_vars as $secname => $section)
    {
      foreach($section as $key => $value)
      {
          $key = "g_".str_replace("-", "", $key);      
          global $$key;
          $$key = $value;
      }
    }
    unset($ado);
	$ado = VerifyDB('db_reconfig', 'finish', 'SaveDBConfig', true);
}


if($state=="db_reconfig")
{
  $include_file = $pathtoroot.$admin."/install/db_reconfig.php";	
}

if($state=="restore_file")
{
	if($_POST["submit"]=="Update")
	{
		$filepath = $_POST["backupdir"];
		$state="restore_select";
	}
	else
	{		
		$filepath = stripslashes($_POST['backupdir']);
		$backupfile = $filepath.$path_char.str_replace('(.*)', $_POST['backupdate'], BACKUP_NAME);
		
		if(file_exists($backupfile) && is_readable($backupfile))
		{
           $ado =& inst_GetADODBConnection();

	       $show_warning = false;              
	       
           if (!$_POST['warning_ok']) {
	           // Here we comapre versions between backup and config
	           $file_contents = file_get_contents($backupfile);
	
	           $file_tmp_cont = explode("#------------------------------------------", $file_contents);
	           $tmp_vers = $file_tmp_cont[0];
	
	           $vers_arr = explode(";", $tmp_vers);           
	           $ini_values = inst_parse_portal_ini($ini_file);
	        
	           foreach ($ini_values as $key => $value) {
	           		foreach ($vers_arr as $k) {
	           			if (strstr($k, $key)) {
	           				if (!strstr($k, $value)) {
	           					$show_warning = true;
	           				}
	           			}
	           		}
	           }
	           //$show_warning = true;
           }
           
           if (!$show_warning) {
           		$filename = $pathtoroot.$admin.$path_char.'install'.$path_char.'inportal_remove.sql';              
           		RunSchemaFile($ado,$filename);			
           		$state="restore_run";
           }
           else {
           		$state = "warning";
           		$include_file = $pathtoroot.$admin."/install/warning.php";
           }
		}
		else {
			if ($_POST['backupdate'] != '') {
				$include_file = $pathtoroot.$admin."/install/restore_select.php";
		  		$restore_error = "$backupfile not found or could not be read";		
			}
			else {
				$include_file = $pathtoroot.$admin."/install/restore_select.php";
		  		$restore_error = "No backup selected!!!";	
			}					
		}
	}
	//echo $restore_error;
}

if($state=="restore_select")
{
	if( isset($_POST['backupdir']) ) $filepath = stripslashes($_POST['backupdir']);
	$include_file = $pathtoroot.$admin."/install/restore_select.php";	
}

if($state=="restore_run")
{
  $ado =& inst_GetADODBConnection();
  $FileOffset = (int)$_GET["Offset"];
  if(!strlen($backupfile))
    $backupfile = SuperStrip($_GET['File'], true);
      	
  $include_file = $pathtoroot.$admin."/install/restore_run.php";	
}

if($state=="db_config_save")
{
    set_ini_value("Database", "DBType",$_POST["ServerType"]);
    set_ini_value("Database", "DBHost",$_POST["ServerHost"]);
    set_ini_value("Database", "DBName",$_POST["ServerDB"]);
    set_ini_value("Database", "DBUser",$_POST["ServerUser"]);
    set_ini_value("Database", "DBUserPassword",$_POST["ServerPass"]);
    set_ini_value("Database","TablePrefix",$_POST["TablePrefix"]);           

    save_values();
    $ini_vars = inst_parse_portal_ini($ini_file,TRUE);

    foreach($ini_vars as $secname => $section)
    {
      foreach($section as $key => $value)
      {
          $key = "g_".str_replace("-", "", $key);    
          global $$key;
          $$key = $value;
      }
    }
    unset($ado);
    $ado = VerifyDB('dbinfo', 'license');
}

if($state=="dbinfo")
{
  	if ($install_type == '') {
  		$install_type = 1;
  	}
	$include_file = $pathtoroot.$admin."/install/dbinfo.php";
}

if ($state == "download_license") {
	$ValidLicense = FALSE;
	
	$lic_login = isset($_POST['login']) ? $_POST['login'] : '';
	$lic_password = isset($_POST['password']) ? $_POST['password'] : '';
	
	if ($lic_login != '' && $lic_password != '') {
		// Here we determine weather login is ok & check available licenses
		
		$rfile = @fopen(GET_LICENSE_URL."?login=".md5($_POST['login'])."&password=".md5($_POST['password'])."&version=".GetMaxPortalVersion($pathtoroot.$admin)."&domain=".base64_encode($_SERVER['HTTP_HOST']), "r");
		if (!$rfile) {
			$get_license_error = "Unable to connect to the Intechnic server! Please try again later!";
			$state = "get_license";
			$include_file = $pathtoroot.$admin."/install/get_license.php";			
		}
		else {
			$rcontents = '';
			while (!feof($rfile)) {
				$line = fgets($rfile, 10000);
				$rcontents .= $line;
			}
			@fclose($rfile);
			
			if (substr($rcontents, 0, 5) == 'Error') {
				$get_license_error = substr($rcontents, 6);
				$state = "get_license";
				$include_file = $pathtoroot.$admin."/install/get_license.php";					
			}
			else {
				if (substr($rcontents, 0, 3) == "SEL") {
					$state = "download_license";
					$license_select = substr($rcontents, 4);
					$include_file = $pathtoroot.$admin."/install/download_license.php";
				}
				else {
					// Here we get one license
					$tmp_data = explode('Code==:', $rcontents);
				
	            	$data = base64_decode(str_replace("In-Portal License File - do not edit!\n", "", $tmp_data[0]));				
					a83570933e44bc66b31dd7127cf3f23a($data);
		            $ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));
		            if($ValidLicense)
		            {
		                set_ini_value("Intechnic","License",base64_encode($data));
	                	set_ini_value("Intechnic","LicenseCode",$tmp_data[1]);		                
		                save_values();
		                $state="domain_select";
		                $got_license = 1;
		            }
		            else {
		              $license_error="Invalid License File";				
		            }
			        if(!$ValidLicense)
			        {
			            $state="license";
			        }						
				}				
			}
		}
			
	}
	else if ($_POST['licenses'] == '') {
		$state = "get_license";
		$get_license_error = "Username and / or password not specified!!!";
		$include_file = $pathtoroot.$admin."/install/get_license.php";
	}
	else {
		// Here we download license		
		$rfile = @fopen(GET_LICENSE_URL."?license_id=".md5($_POST['licenses'])."&dlog=".md5($_POST['dlog'])."&dpass=".md5($_POST['dpass'])."&version=".GetMaxPortalVersion($pathtoroot.$admin)."&domain=".base64_encode($_POST['domain']), "r");
		if (!$rfile) {
			$get_license_error = "Unable to connect to the Intechnic server! Please try again later!";
			$state = "get_license";
			$include_file = $pathtoroot.$admin."/install/get_license.php";			
		}
		else {
			$rcontents = '';
			while (!feof($rfile)) {
				$line = fgets($rfile, 10000);
				$rcontents .= $line;
			}
			@fclose($rfile);
			
			if (substr($rcontents, 0, 5) == 'Error') {
				$download_license_error = substr($rcontents, 6);
				$state = "download_license";
				$include_file = $pathtoroot.$admin."/install/download_license.php";					
			}
			else {
				$tmp_data = explode('Code==:', $rcontents);
							
	            $data = base64_decode(str_replace("In-Portal License File - do not edit!\n", "", $tmp_data[0]));				
	            a83570933e44bc66b31dd7127cf3f23a($data);
	            $ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));
	            if($ValidLicense)
	            {
	                set_ini_value("Intechnic","License",base64_encode($data));
	                // old licensing script doen't return 2nd parameter (licanse code)
	                if( isset($tmp_data[1]) ) set_ini_value("Intechnic","LicenseCode",$tmp_data[1]);
	                save_values();
	                $state="domain_select";
	            }
	            else {
	              $license_error="Invalid License File";				
	            }
		        if(!$ValidLicense)
		        {
		            $state="license";
		        }	            
			}			
		}
	}
}

if($state=="license_process")
{
    $ValidLicense = FALSE;    
    $tmp_lic_opt = GetVar('lic_opt', true);
    switch($tmp_lic_opt)
    {
    case 1: /* download from intechnic */
        $include_file = $pathtoroot.$admin."/install/get_license.php";
        $state = "get_license";
    	//if(!$ValidLicense)
        //{
        //    $state="license";
        //}
    break;
    case 2: /* upload file  */       
        $file = $_FILES["licfile"];
        if(is_array($file))
        {
            move_uploaded_file($file["tmp_name"],$pathtoroot."themes/tmp.lic");
            @chmod($pathtoroot."themes/tmp.lic", 0666);

            $fp = @fopen($pathtoroot."themes/tmp.lic","rb");
            if($fp)
            {
                $lic = fread($fp,filesize($pathtoroot."themes/tmp.lic"));
                fclose($fp);
            }      
            
            $tmp_data = ae666b1b8279502f4c4b570f133d513e(FALSE,$pathtoroot."themes/tmp.lic");            
            $data = $tmp_data[0];
            
            @unlink($pathtoroot."themes/tmp.lic");
            a83570933e44bc66b31dd7127cf3f23a($data);
            $ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));
            if($ValidLicense)
            {
                set_ini_value("Intechnic","License",base64_encode($data));
                set_ini_value("Intechnic","LicenseCode",$tmp_data[1]);
                save_values();
                $state="domain_select";
            }
            else
              $license_error="Invalid License File";
        }
        if(!$ValidLicense)
        {
            $state="license";
        }
    break;
    case 3: /* existing */
        if(strlen($g_License))
        {
            $lic = base64_decode($g_License);
            a83570933e44bc66b31dd7127cf3f23a($lic);
            $ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));
            if($ValidLicense)
            {            
                $state="domain_select";
            }
            else
            {
                $state="license";
                $license_error="Invalid or corrupt license detected";
            }
        }
        else
        {
            $state="license";            
            $license_error="Missing License File";
        }
        if(!$ValidLicense)
        {
            $state="license";
        }
    break;
    case 4:
       //set_ini_value("Intechnic","License",base64_encode("local"));
       //set_ini_value("Intechnic","LicenseCode",base64_encode("local"));
       //save_values();    
       $state="domain_select";
    break;
    }
  if($ValidLicense)
      $state="domain_select";
}

if($state=="license")
{
    $include_file = $pathtoroot.$admin."/install/sel_license.php";    

}

if($state=="reinstall")
{
    $ado =& inst_GetADODBConnection();
    
    $show_upgrade = false;

	$sql = "SELECT Name FROM ".$g_TablePrefix."Modules";
	$rs = $ado->Execute($sql);
	
	$modules = '';
	while ($rs && !$rs->EOF) {
		$modules .= strtolower($rs->fields['Name']).',';
		$rs->MoveNext();
	}
	
	$mod_arr = explode(",", substr($modules, 0, strlen($modules) - 1));
	
    foreach($mod_arr as $p)
    {        
    	if ($p == 'in-portal') {
    		$p = '';
    	}    
    	
    	$dir_name = $pathtoroot.$p."/admin/install/upgrades/";
    	
    	$dir = @dir($dir_name);    	
    	//echo "<pre>"; print_r($dir); echo "</pre>";
    	
    	if ($dir === false) continue;
    	
    	while ($file = $dir->read()) {
	        if ($file != "." && $file != ".." && !is_dir($dir_name.$file))
	        { 
	        	
	        	if (strstr($file, 'inportal_upgrade_v')) {
		        	$file = str_replace("inportal_upgrade_v", "", $file);
		        	$file = str_replace(".sql", "", $file);	        		
	        		if ($p == '') {
	        			$p = 'in-portal';
	        		}
	        		$sql = "SELECT Version FROM ".$g_TablePrefix."Modules WHERE Name = '".$p."'";
	        		$rs = $ado->Execute($sql);
	        		
	        		if (ConvertVersion($rs->fields['Version']) < ConvertVersion($file)) {
	        			$show_upgrade = true;
	        		}
	        	}
	        }
    	}    	
    }
  
    if ( !isset($install_type) || $install_type == '') {
    	$install_type = 2;
    }    
    
	$include_file = $pathtoroot.$admin."/install/reinstall.php";
}

if($state=="login")
{    
    $lic = base64_decode($g_License);
    if(strlen($lic))
    {
            a83570933e44bc66b31dd7127cf3f23a($lic);
            $ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));            
    }

    if(!$ValidLicense)
    {
        $state="license";
    }
    else
      if($i_User == $_POST["UserName"] || $i_Pswd == $_POST["UserPass"])
      {
         $state = "domain_select";
      }
      else
      {      
        $state="getuser";
        $login_error = "Invalid User Name or Password.  If you don't know your username or password, contact Intechnic Support";
      }
   
    //die();
}

if($state=="getuser")
{
        $include_file = $pathtoroot.$admin."/install/login.php";
}

if($state=="set_domain")
{
    if( !is_array($i_Keys) || !count($i_Keys) )
    {
        $lic = base64_decode($g_License);
        if(strlen($lic))
        {
           a83570933e44bc66b31dd7127cf3f23a($lic);
           $ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));            
        }
    }
    
    if($_POST["domain"]==1)
    {
        $domain = $_SERVER['HTTP_HOST'];
        
        if (strstr($domain, $i_Keys[0]['domain']) || de3ec1b7a142cccd0d51f03d24280744($domain)) {
        	set_ini_value("Intechnic","Domain",$domain);
        	save_values();
        	$state="runsql";
        }
        else {
        	$DomainError = 'Domain name selected does not match domain name in the license!';
        	$state = "domain_select";
        }        	
    }
    else
    {
        $domain = str_replace(" ", "", $_POST["other"]);
        if ($domain != '') {
        	if (strstr($domain, $i_Keys[0]['domain']) || de3ec1b7a142cccd0d51f03d24280744($domain)) {
        		set_ini_value("Intechnic","Domain",$domain);
        		save_values();
        		$state="runsql";
        	}
	        else {
	        	$DomainError = 'Domain name entered does not match domain name in the license!';
	        	$state = "domain_select";
	        }         	
        }
        else {
        	$DomainError = 'Please enter valid domain!';
        	$state = "domain_select";
        }
    }
}

if($state=="domain_select")
{
    if(!is_array($i_Keys))
    {
        $lic = base64_decode($g_License);
        if(strlen($lic))
        {
           a83570933e44bc66b31dd7127cf3f23a($lic);
           $ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));            
        }
    }
  
    $include_file = $pathtoroot.$admin."/install/domain.php";
}


if($state=="runsql")
{    
  $ado =& inst_GetADODBConnection();
  $installed = TableExists($ado,"ConfigurationAdmin,Category,Permissions");
  if(!$installed)
  {  
  		// create tables
  		$filename = $pathtoroot.$admin."/install/inportal_schema.sql";
      	RunSchemaFile($ado,$filename);
		
		// insert default info
      	$filename = $pathtoroot.$admin."/install/inportal_data.sql";
      	RunSQLFile($ado,$filename);
      	
      	$sql = "SELECT Version FROM ".$g_TablePrefix."Modules WHERE Name = 'In-Portal'";
      	$rs = $ado->Execute($sql);
      	
      	set_ini_value("Module Versions", "In-Portal", $rs->fields['Version']);
      	save_values();
      	
      	require_once $pathtoroot.'kernel/include/tag-class.php';
        if( !is_object($objTagList) ) $objTagList = new clsTagList();
      	
      	// install kernel specific tags
      	$objTagList->DeleteTags(); // delete all existing tags in db
    	 
    	// create 3 predifined tags (because there no functions with such names
    	$t = new clsTagFunction();
    	$t->Set("name","include");
    	$t->Set("description","insert template output into the current template");
    	$t->Create();
    	$t->AddAttribute("_template","tpl","Template to insert","",TRUE);
    	$t->AddAttribute("_supresserror","bool","Supress missing template errors","",FALSE);
    	$t->AddAttribute("_dataexists","bool","Only include template output if content exists (content is defined by the tags in the template)","",FALSE);
    	$t->AddAttribute("_nodatatemplate","tpl","Template to include if the nodataexists condition is true","",FALSE);    
		unset($t);
		
    	$t = new clsTagFunction();
    	$t->Set("name","perm_include");
    	$t->Set("description","insert template output into the current template if permissions are set");
    	$t->Create();
    	$t->AddAttribute("_template","tpl","Template to insert","",TRUE);
    	$t->AddAttribute("_noaccess","tpl","Template to insert if access is denied","",FALSE);
    	$t->AddAttribute("_permission","","Comma-separated list of permissions, any of which will grant access","",FALSE);
    	$t->AddAttribute("_module","","Used in place of the _permission attribute, this attribute verifies the module listed is enabled","",FALSE);   
    	$t->AddAttribute("_system","bool","Must be set to true if any permissions in _permission list is a system permission","",FALSE);    
    	$t->AddAttribute("_supresserror","bool","Supress missing template errors","",FALSE);
    	$t->AddAttribute("_dataexists","bool","Only include template output if content exists (content is defined by the tags in the template)","",FALSE);    
    	$t->AddAttribute("_nodatatemplate","tpl","Template to include if the nodataexists condition is true","",FALSE);        
		unset($t);
		
    	$t = new clsTagFunction();
    	$t->Set("name","mod_include");
    	$t->Set("description","insert templates from all enabled modules.  No error occurs if the template does not exist.");
    	$t->Create();
    	$t->AddAttribute("_template","tpl","Template to insert.  This template path should be relative to the module template root directory","",TRUE);
    	$t->AddAttribute("_modules","","Comma-separated list of modules.  Defaults to all enabled modules if not set","",FALSE);
    	$t->AddAttribute("_supresserror","bool","Supress missing template errors","",FALSE);
    	$t->AddAttribute("_dataexists","bool","Only include template output if content exists (content is defined by the tags in the template)","",FALSE);
    	$t->AddAttribute("_nodatatemplate","tpl","Template to include if the nodataexists condition is true","",FALSE);        
      	
      	$objTagList->ParseFile($pathtoroot.'kernel/parser.php'); // insert module tags
      	
      	if( is_array($ItemTagFiles) )
    		foreach($ItemTagFiles as $file)
				$objTagList->ParseItemFile($pathtoroot.$file);
      	
       	$state="RootPass";
  }
  else {
  	  $include_file = $pathtoroot.$admin."/install/install_finish.php";
      $state="finish";
  }
}

if ($state == "finish") {
    $ado =& inst_GetADODBConnection();
  	$PhraseTable = $g_TablePrefix."ImportPhrases";
  	$EventTable = $g_TablePrefix."ImportEvents";    
	$ado->Execute("DROP TABLE IF EXISTS $PhraseTable");
	$ado->Execute("DROP TABLE IF EXISTS $EventTable");	
	
	$include_file = $pathtoroot.$admin."/install/install_finish.php";
}

if($state=="RootSetPass")
{
  $pass = $_POST["RootPass"];
  if(strlen($pass)<4)
  {
      $PassError = "Root Password must be at least 4 characters";
      $state = "RootPass";

  }
  else if ($pass != $_POST["RootPassConfirm"]) {
  	  $PassError = "Passwords does not match";
  	  $state = "RootPass";
  }
  else 
  {
  	  $pass = md5($pass);
      $sql = "UPDATE ".$g_TablePrefix."ConfigurationValues SET VariableValue = '$pass' WHERE VariableName='RootPass' OR VariableName='RootPassVerify'";
      $ado =& inst_GetADODBConnection();
      $ado->Execute($sql);
      $state="modselect";
  }
}

if($state=="RootPass")
{
    $include_file = $pathtoroot.$admin."/install/rootpass.php";
}

if($state=="lang_install_init")
{
	
  	$ado =& inst_GetADODBConnection();
  
  	if( TableExists($ado, 'Language,Phrase') )
  	{
		// KERNEL 4 INIT: BEGIN
		define('FULL_PATH', realpath(dirname(__FILE__).'/..'));
		define('APPLICATION_CLASS', 'MyApplication');
		define('ADMINS_LIST','/in-portal/users/users.php');
		include_once(FULL_PATH.'/kernel/kernel4/startup.php');
		
		$application =& kApplication::Instance();
		$application->Init();
		// KERNEL 4 INIT: END
		
  		$lang_xml =& $application->recallObject('LangXML');
  		
  		$lang_xml->renameTable('phrases', TABLE_PREFIX.'ImportPhrases');
  		$lang_xml->renameTable('emailmessages', TABLE_PREFIX.'ImportEvents');
  		
	  	if(!$force_finish)
	  	{
	  		$lang_xml->lang_object->TableName = $application->getUnitOption('lang','TableName');
	  	}
		$languages = $application->GetVar('lang');
		if($languages)
		{
			$kernel_db =& $application->GetADODBConnection();
			$modules_table = $application->getUnitOption('mod','TableName');
			
			$modules = $kernel_db->GetCol('SELECT Path, Name FROM '.$modules_table, 'Name');
			$modules['In-Portal'] = '';
			
			foreach($languages as $lang_file)
			{
				foreach($modules as $module_name => $module_folder)
				{
					$lang_path = DOC_ROOT.BASE_PATH.'/'.$module_folder.ADMIN_DIR.'/install/langpacks';
					$lang_xml->Parse($lang_path.'/'.$lang_file, Array(0,1,2), '');	
				}
			}
			
	      	$state = 'lang_install';
	  	}
	  	else
	  	{
	  		$state = 'lang_select';
	  	}
	  	
	  	$application->Done();
  	}
  	else
  	{
  		$general_error = 'Database error! No language tables found!';
  	}
}

if($state=="lang_install")
{
	/* do pack install */
	$Offset = (int)$_GET["Offset"];
	$Status = (int)$_GET["Status"];

	$PhraseTable = $g_TablePrefix."ImportPhrases";
  	$EventTable = $g_TablePrefix."ImportEvents";

	$Total = TableCount($Status == 0 ? $PhraseTable : $EventTable, '', 0);
	
	if($Status == 0)
	{
		$Offset = $objLanguages->ReadImportTable($PhraseTable, 1,"0,1,2", $force_finish ? false : true, 200,$Offset);
		if($Offset >= $Total)
		{
			$Offset=0;
			$Status=1;
		}

		$next_step = GetVar('next_step', true);

		if($force_finish == true) $next_step = 3;
		$NextUrl = $_SERVER['PHP_SELF']."?Offset=$Offset&Status=$Status&state=lang_install&next_step=$next_step&install_type=$install_type";
		if($force_finish == true) $NextUrl .= '&ff=1';
		$include_file = $pathtoroot.$admin."/install/lang_run.php";
	}
	else
	{
		if(!is_object($objMessageList))
		$objMessageList = new clsEmailMessageList();

		$Offset = $objMessageList->ReadImportTable($EventTable, $force_finish ? false : true,100,$Offset);

		if($Offset > $Total)
		{
			$next_step = GetVar('next_step', true);

			if($force_finish == true) $next_step = 3;
			$NextUrl = $_SERVER['PHP_SELF']."?Offset=$Offset&Status=$Status&State=lang_install&next_step=$next_step&install_type=$install_type";
			if($force_finish == true) $NextUrl .= '&ff=1';
			$include_file = $pathtoroot.$admin."/install/lang_run.php";
		}
		else
		{
			$db =& GetADODBConnection();
			$prefix = $g_TablePrefix;
			$db->Execute('DROP TABLE IF EXISTS '.$PhraseTable);
			$db->Execute('DROP TABLE IF EXISTS '.$EventTable);
			
			if(!$force_finish)
			{
				$state = 'lang_default';
			}
			else
			{
				$_POST['next_step'] = 4;
				$state = 'finish';
				$include_file = $pathtoroot.$admin."/install/install_finish.php";
			}
		}
	}
}

if($state=="lang_default_set")
{
//	phpinfo(INFO_VARIABLES);
    /*$ado =& inst_GetADODBConnection();
  	$PhraseTable = GetTablePrefix()."ImportPhrases";
  	$EventTable = GetTablePrefix()."ImportEvents";    
	$ado->Execute("DROP TABLE IF EXISTS $PhraseTable");
	$ado->Execute("DROP TABLE IF EXISTS $EventTable");*/
    
	$Id = $_POST["lang"];
	
	$objLanguages->SetPrimary($Id);
	$state="postconfig_1";	
}

if($state=="lang_default")
{
	$Packs = Array();
	$objLanguages->Clear();
	
	$objLanguages->LoadAllLanguages();
	foreach($objLanguages->Items as $l)
	{
		$Packs[$l->Get("LanguageId")] = $l->Get("PackName");
	}
	$include_file = $pathtoroot.$admin."/install/lang_default.php";	
}



if($state=="modinstall")
{
    $doms = $_POST["domain"];
    if(is_array($doms))
    {
        $ado =& inst_GetADODBConnection();
        require_once $pathtoroot.'kernel/include/tag-class.php';
        if( !isset($objTagList) || !is_object($objTagList) ) $objTagList = new clsTagList();
        foreach($doms as $p)
        {
        	$filename = $pathtoroot.$p.'/admin/install.php';
            if(file_exists($filename) )
            {
                include($filename);
            }
        }
        
    }
    
/*    $sql = "SELECT Name FROM ".GetTablePrefix()."Modules";
    $rs = $ado->Execute($sql);
    
    while($rs && !$rs->EOF)
    {
        $p = $rs->fields['Name'];
    	$mod_name = strtolower($p);
        
    	if ($mod_name == 'in-portal') {
    		$mod_name = '';
    	}
    	
    	$dir_name = $pathtoroot.$mod_name."/admin/install/upgrades/";
    	$dir = @dir($dir_name); 
    	
    	$new_version = '';
    	$tmp1 = 0;
    	$tmp2 = 0;
    	while ($file = $dir->read()) {
	        if ($file != "." && $file != ".." && !is_dir($dir_name.$file))
	        { 
	        	$file = str_replace("inportal_upgrade_v", "", $file);
	        	$file = str_replace(".sql", "", $file);
	        	
	        	if ($file != '' && !strstr($file, 'changelog') && !strstr($file, 'readme')) {
	        		$tmp1 = str_replace(".", "", $file);	        		
	        		if ($tmp1 > $tmp2) {
	        			$new_version = $file;
	        		}
	        	}
	        }
	        $tmp2 = $tmp1;
    	}
	        		    		
    	
    	$version_nrs = explode(".", $new_version);
    	
    	for ($i = 0; $i < $version_nrs[0] + 1; $i++) {
    		for ($j = 0; $j < $version_nrs[1] + 1; $j++) {
    			for ($k = 0; $k < $version_nrs[2] + 1; $k++) {
    				$try_version = "$i.$j.$k";
    				
			    	$filename = $pathtoroot.$mod_name."/admin/install/upgrades/inportal_upgrade_v$try_version.sql";
			        
			        if(file_exists($filename))
			       	{
			    		RunSQLFile($ado, $filename);
				      	set_ini_value("Module Versions", $p, $try_version);
				      	save_values();
			    	}
    			}
    		}
    	}
    	
    	$rs->MoveNext();
    }    
*/   
    $state="lang_select";
}

if($state=="modselect")
{
 /* /admin/install.php */
 	$UrlLen = (strlen($admin) + 12)*-1;
    $pathguess =substr($_SERVER["SCRIPT_NAME"],0,$UrlLen);
    $sitepath = $pathguess;
    $esc_path = str_replace("\\","/",$pathtoroot);
    $esc_path = str_replace("/","\\",$esc_path);
    //set_ini_value("Site","DomainName",$_SERVER["HTTP_HOST"]);
    //$g_DomainName= $_SERVER["HTTP_HOST"];
    save_values();

    $ado =& inst_GetADODBConnection();
    if(substr($sitepath,0,1)!="/")
        $sitepath="/".$sitepath;
    if(substr($sitepath,-1)!="/")
        $sitepath .= "/";

    $sql = "UPDATE ".$g_TablePrefix."ConfigurationValues SET VariableValue = '$sitepath' WHERE VariableName='Site_Path'";
    $ado->Execute($sql);
    $sql = "UPDATE ".$g_TablePrefix."ConfigurationValues SET VariableValue = '$g_Domain' WHERE VariableName='Server_Name'";
    $ado->Execute($sql);
    $sql = "UPDATE ".$g_TablePrefix."ConfigurationValues SET VariableValue = '".$_SERVER['DOCUMENT_ROOT'].$sitepath."admin/backupdata' WHERE VariableName='Backup_Path'";
    $ado->Execute($sql);
    $Modules = a48d819089308a9aeb447e7248b2587f();
    
    if (count($Modules) > 0) {    
    	$include_file = $pathtoroot.$admin."/install/modselect.php";
    }
    else {
    	$state = "lang_select";
    	$skip_step = true;
    }
}

if($state=="lang_select")
{
	$Packs = GetLanguageList();
	$include_file = $pathtoroot.$admin."/install/lang_select.php";
}

if(substr($state,0,10)=="postconfig")
{
    $p = explode("_",$state);
    $step = $p[1];
    
    if ($_POST['Site_Path'] != '') {
		$sql = "SELECT Name, Version FROM ".$g_TablePrefix."Modules"; 
		$rs = $ado->Execute($sql);  
		
		$modules_str = '';  
		while ($rs && !$rs->EOF) { 
			$modules_str .= $rs->fields['Name'].' ('.$rs->fields['Version'].'),'; 
			$rs->MoveNext(); 
		} 

		$modules_str = substr($modules_str, 0, strlen($modules_str) - 1);  
		$rfile = @fopen(GET_LICENSE_URL."?url=".base64_encode($_SERVER['HTTP_HOST'].$_POST['Site_Path'])."&modules=".base64_encode($modules_str)."&license_code=".base64_encode($g_LicenseCode)."&version=".GetMaxPortalVersion($pathtoroot.$admin)."&domain=".md5($_SERVER['HTTP_HOST']), "r");
		if (!$rfile) {
			//$get_license_error = "Unable to connect to the Intechnic server! Please try again later!";
			//$state = "postconfig_1";
			//$include_file = $pathtoroot.$admin."/install/postconfig.php";			
		}
		else {	
			$rcontents = '';
			while (!feof($rfile)) {
				$line = fgets($rfile, 10000);
				$rcontents .= $line;
			}
			@fclose($rfile);
		}
			
    }    

    if(strlen($_POST["oldstate"])>0)
    {
      $s = explode("_",$_POST["oldstate"]);
      $oldstep = $s[1];
      if($oldstep<count($configs))
      {      
          $section = $configs[$oldstep];
          $module = $mods[$oldstep];
          $title = $titles[$oldstep];
          $objAdmin = new clsConfigAdmin($module,$section,TRUE);
          $objAdmin->SaveItems($_POST,TRUE);
      }
    }
    $section = $configs[$step];
    $module = $mods[$step];
    $title = $titles[$step];

    $step++;
        	
    if($step <= count($configs)+1)
    {
         $include_file = $pathtoroot.$admin."/install/postconfig.php";
    }
    else
        $state = "theme_sel";       
}

if($state=="theme_sel")
{
    $objThemes->CreateMissingThemes();
    $include_file = $pathtoroot.$admin."/install/theme_select.php";
}

if($state=="theme_set")
{
    ## get & define Non-Blocking & Blocking versions ## 
	$blocking_sockets = minimum_php_version("4.3.0")? 0 : 1;
	
	$ado =& inst_GetADODBConnection();
    $sql = "UPDATE ".$g_TablePrefix."ConfigurationValues SET VariableValue = '$blocking_sockets' WHERE VariableName='SocketBlockingMode'";
    $ado->Execute($sql);
    ## get & define Non-Blocking & Blocking versions ## 

	
	$theme_id = $_POST["theme"];
    $pathchar="/";
    //$objThemes->SetPrimaryTheme($theme_id);
    $t = $objThemes->GetItem($theme_id);
    $t->Set("Enabled",1);
    $t->Set("PrimaryTheme",1);
    $t->Update();
    $t->VerifyTemplates();
	$include_file = $pathtoroot.$admin."/install/install_finish.php";    
    $state="finish";
}

if ($state == "adm_login") {
	echo "<script>window.location='index.php';</script>";
}

// init variables
$vars = Array('db_error','restore_error','PassError','DomainError','login_error','inst_error');
foreach($vars as $var_name) ReSetVar($var_name);

switch($state)
{
case "modselect":
    $title = "Select Modules";
    $help = "<p>Select the In-Portal modules you wish to install.  The modules listed to the right ";
    $help .="are all modules included in this installation that are licensed to run on this server. </p>";
break;
case "reinstall":
    $title = "Installation Maintenance";
    $help = "<p>A Configuration file has been detected on your system and it appears In-Portal is correctly installed.  ";
    $help .="In order to work with the maintenance functions provided to the left you must provide the Intechnic ";
    $help .="Username and Password you used when obtaining the license file residing on the server, or your admin Root password. ";
    $help .=" <i>(Use Username 'root' if using your root password)</i></p>";         
    $help .= "<p>To removing your existing database and start with a fresh installation, select the first option ";
    $help .= "provided.  Note that this operation cannot be undone and no backups are made! Use at your own risk.</p>";
    $help .="<p>If you wish to scrap your current installation and install to a new location, choose the second option. ";
    $help .="If this option is selected you will be prompted for new database configuration information.</p>";
    $help .="<p>The <i>Update License Information</i> option is used to update your In-Portal license data.  Select this option if you have ";
    $help .="modified your licensing status with Intechnic, or you have received new license data via email</p>";
    $help .="<p>The <i>Fix Paths</i> option should be used when the location of the In-portal files has changed. For example, if you moved them from one folder to another. It will update all settings and ensure the program is operational at the new location.</p>";
break;
case "fix_paths":
	$title = "Fix Paths";
	$help = "<p>The <i>Fix Paths</i> option should be used when the location of the In-portal files has changed. For example, if you moved them from one folder to another. It will update all settings and ensure the program is operational at the new location.<p>";
break;
case "RootPass":
    $title = "Set Admin Root Password";
    $help = "<p>The Root Password is initially required to access the admin sections of In-Portal. ";
    $help .="The root user cannot be used to access the front-end of the system, so it is recommended that you ";
    $help .="create additional users with admin privlidges.</p>";
break;
case "finish":
    $title = "Thank You!";
    $help ="<P>Thanks for using In-Portal!  Be sure to visit <A TARGET=\"_new\" HREF=\"http://www.in-portal.net\">www.in-portal.net</A> ";
    $help.=" for the latest news, module releases and support. </p>";
break;
case "license":
    $title = "License Configuration";
    $help ="<p>A License is required to run In-Portal on a server connected to the Internet.  You ";
    $help.="can run In-Portal on localhost, non-routable IP addresses, or other computers on your LAN. ";
    $help.="If Intechnic has provided you with a license file, upload it here. Otherwise select the first ";
    $help.="option to allow Install to download your license for you.</p>";
    $help.="<p>If a valid license has been detected on your server, you can choose the <i>Use Existing License</i> ";
    $help.="and continue the installation process</p>";
break;
case "domain_select":
    $title="Select Licensed Domain";
    $help ="<p>Select the domain you wish to configure In-Portal for.  The <i>Other</i> option ";
    $help.=" can be used to configure In-Portal for use on a local domain.</p>";
    $help.="<p>For local domains, enter the hostname or LAN IP Address of the machine running In-Portal.</p>"; 
break;
case "db_reconfig":
case "dbinfo":
    $title="Database Configuration";
    $help = "<p>In-Portal needs to connect to your Database Server.  Please provide the database server type*, ";
    $help .="host name (<i>normally \"localhost\"</i>), Database user name, and database Password.  ";
    $help .="These fields are required to connect to the database.</p><p>If you would like In-Portal ";
    $help .="to use a table prefix, enter it in the field provided. This prefix can be any ";
    $help .=" text which can be used in the names of tables on your system.  The characters entered in this field ";
    $help .=" are placed <i>before</i> the names of the tables used by In-Portal.  For example, if you enter \"inp_\"";
    $help .=" into the prefix field, the table named Category will be named inp_Category.</p>";
break;
case "lang_select":
    $title="Language Pack Installation";
    $help = "<p>Select the language packs you wish to install. Each language pack contains all the phrases ";
    $help .="used by the In-Portal administration and the default template set. Note that at least one ";
    $help .="pack <b>must</b> be installed.</p>";
break;
case "lang_default":
    $title="Select Default Language";
    $help = "<p>Select which language should be considered the \"default\" language.  This is the language ";
    $help .="used by In-Portal when a language has not been selected by the user.  This selection is applicable ";
    $help .="to both the administration and front-end.</p>";
break;
case "lang_install":
	$title="Installing Language Packs";
	$help = "<p>The language packs you have selected are being installed.  You may install more languages at a ";
	$help.="later time from the Regional admin section.</p>";
break;
case "postconfig_1":
    $help = "<P>These options define the general operation of In-Portal.  Items listed here are ";
    $help .="required for In-Portal's operation.</p><p>When you have finished, click <i>save</i> to continue.</p>";
break;
case "postconfig_2":
    $help = "<P>User Management configuration options determine how In-Portal manages your user base.</p>";
    $help .="<p>The groups listed to the right are pre-defined by the installation process and may be changed ";
    $help .="through the Groups section of admin.</p>";
break;
case "postconfig_3":
    $help = "<P>The options listed here are used to control the category list display functions of In-Portal. </p>";
break;
case "theme_sel":
    $title="Select Default Theme";
    $help = "<P>This theme will be used whenever a front-end session is started. ";
    $help .="If you intend to upload a new theme and use that as default, you can do so through the ";
    $help .="admin at a later date.  A default theme is required for session management.</p>";
break;
case "get_license":
    $title="Download License from Intechnic";
    $help ="<p>A License is required to run In-Portal on a server connected to the Internet.  You ";
    $help.="can run In-Portal on localhost, non-routable IP addresses, or other computers on your LAN.</p>";
    $help.="<p>Here as you have selected download license from Intechnic you have to input your username and ";
    $help.="password of your In-Business account in order to download all your available licenses.</p>";
break;
case "download_license":
    $title="Download License from Intechnic";
    $help ="<p>A License is required to run In-Portal on a server connected to the Internet.  You ";
    $help.="can run In-Portal on localhost, non-routable IP addresses, or other computers on your LAN.</p>";
    $help.="<p>Please choose the license from the drop down for this site! </p> ";
break;
case "restore_select":
	$title="Select Restore File";
	$help = "<P>Select the restore file to use to reinstall In-Portal.  If your backups are not performed ";
	$help .= "in the default location, you can enter the location of the backup directory and click the ";
	$help .="<i>Update</i> button.</p>";
case "restore_run":
	$title= "Restore in Progress";
	$help = "<P>Restoration of your system is in progress.  When the restore has completed, the installation ";
	$help .="will continue as normal.  Hitting the <i>Cancel</i> button will restart the entire installation process. ";
break;
case "warning":
	$title = "Restore in Progress";
	$help = "<p>Please approve that you understand that you are restoring your In-Portal data base from other version of In-Portal.</p>";
break;
case "update":
	$title = "Update In-Portal";
	$help = "<p>Select modules from the list, you need to update to the last downloaded version of In-Portal</p>";
break;
}

$tmp_step = GetVar('next_step', true);

if (!$tmp_step) {
	$tmp_step = 1;
}

if ( isset($got_license) && $got_license == 1) {
	$tmp_step++;
}

$next_step = $tmp_step + 1;

if ($general_error != '') {
	$state = '';
	$title = '';
	$help = '';
	$general_error = $general_error.'<br /><br />Installation cannot continue!';
}

if ($include_file == '' && $general_error == '' && $state == '') {
	$state = '';
	$title = '';
	$help = '';
    $filename = $pathtoroot.$admin."/install/inportal_remove.sql";
    RunSQLFile($ado,$filename);	
	$general_error = 'Unexpected installation error! <br /><br />Installation has been stopped!';
}

if ($restore_error != '') {
	$next_step = 3;
	$tmp_step = 2;
}

if ($PassError != '') {
	$tmp_step = 4;
	$next_step = 5;
}

if ($DomainError != '') {
	$tmp_step--;
	$next_step = $tmp_step + 1;
}

if ($db_error != '') {
	$tmp_step--;
	$next_step = $tmp_step + 1;
}

if ($state == "warning") {
	$tmp_step--;
	$next_step = $tmp_step + 1;
}

if ($skip_step) {
	$tmp_step++;
	$next_step = $tmp_step + 1;
}
?>
	
	<tr height="100%">
		<td valign="top">
			<table cellpadding=10 cellspacing=0 border=0 width="100%" height="100%">
				<tr valign="top">
					<td style="width: 200px; background: #009ff0 url(images/bg_install_menu.gif) no-repeat bottom right; border-right: 1px solid #000">
				    <img src="images/spacer.gif" width="180" height="1" border="0" title=""><br>
				    <span class="admintitle-white">Installation</span>
				    <!--<ol class="install">
				    	<li class="current">Licence Verification
				    	<li>Configuration
				    	<li>File Permissions
				    	<li>Security
				    	<li>Integrity Check
				    </ol>
					</td>-->
				    <?php 
				    $lic_opt = isset($_POST['lic_opt']) ? $_POST['lic_opt'] : false;
				    if ($general_error == '') { 
				    ?>
					    <?php if ($install_type == 1) { ?>
							<ol class="install">
					    		<li <?php if ($tmp_step == 1) { ?>class="current"<?php } ?>>Database Configuration
					    		<li <?php if ($tmp_step == 2 || $lic_opt == 1) { ?>class="current"<?php } ?>>Select License
					    		<li <?php if ($tmp_step == 3 && $lic_opt != 1) { ?>class="current"<?php } ?>>Select Domain
					    		<li <?php if ($tmp_step == 4 ) { ?>class="current"<?php } ?>>Set Root Password
					    		<li <?php if ($tmp_step == 5) { ?>class="current"<?php } ?>>Select Modules to Install
					    		<li <?php if ($tmp_step == 6) { ?>class="current"<?php } ?>>Install Language Packs
					    		<li <?php if ($tmp_step == 7) { ?>class="current"<?php } ?>>Post-Install Configuration
					    		<li <?php if ($tmp_step == 8) { ?>class="current"<?php } ?>>Finish
					    	</ol>				    
					    <?php } else if ($install_type == 2) { ?>
							<ol class="install">
					    		<li <?php if ($tmp_step == 1 || $login_error != '' || $inst_error != '') { ?>class="current"<?php } ?>>License Verification
					    		<!--<li <?php if (($tmp_step == 2 && $login_error == '' && $inst_error == '') || $_POST['lic_opt'] == 1) { ?>class="current"<?php } ?>>Select License
					    		<li <?php if ($tmp_step == 3 && $_POST['lic_opt'] != 1) { ?>class="current"<?php } ?>>Select Domain
					    		<li <?php if ($tmp_step == 4) { ?>class="current"<?php } ?>>Set Root Password
					    		<li <?php if ($tmp_step == 5) { ?>class="current"<?php } ?>>Select Modules to Install
					    		<li <?php if ($tmp_step == 6) { ?>class="current"<?php } ?>>Install Language Packs
					    		<li <?php if ($tmp_step == 7) { ?>class="current"<?php } ?>>Post-Install Configuration
					    		<li <?php if ($tmp_step == 8) { ?>class="current"<?php } ?>>Finish-->
					    	</ol>				    				    
					    <?php } else if ($install_type == 3) { ?>
							<ol class="install">
								<li>License Verification
					    		<li <?php if ($tmp_step == 2) { ?>class="current"<?php } ?>>Database Configuration
					    		<li <?php if ($tmp_step == 3 || $_POST['lic_opt'] == 1) { ?>class="current"<?php } ?>>Select License
					    		<li <?php if ($tmp_step == 4 && $_POST['lic_opt'] != 1) { ?>class="current"<?php } ?>>Select Domain
					    		<li <?php if ($tmp_step == 5) { ?>class="current"<?php } ?>>Set Root Password
					    		<li <?php if ($tmp_step == 6) { ?>class="current"<?php } ?>>Select Modules to Install
					    		<li <?php if ($tmp_step == 7) { ?>class="current"<?php } ?>>Install Language Packs
					    		<li <?php if ($tmp_step == 8) { ?>class="current"<?php } ?>>Post-Install Configuration
					    		<li <?php if ($tmp_step == 9) { ?>class="current"<?php } ?>>Finish
					    	</ol>				    				    
					    <?php } else if ($install_type == 4) { ?>
							<ol class="install">
					    		<li <?php if ($tmp_step == 1 || $login_error != '' || $inst_error != '') { ?>class="current"<?php } ?>>License Verification
					    		<li <?php if (($tmp_step == 2 && $login_error == '' && $inst_error == '') || $lic_opt == 1) { ?>class="current"<?php } ?>>Select License
					    		<li <?php if ($tmp_step == 3 && $_POST['lic_opt'] != 1) { ?>class="current"<?php } ?>>Select Domain
					    		<li <?php if ($tmp_step == 4) { ?>class="current"<?php } ?>>Set Root Password
					    		<li <?php if ($tmp_step == 5) { ?>class="current"<?php } ?>>Select Modules to Install
					    		<li <?php if ($tmp_step == 6) { ?>class="current"<?php } ?>>Install Language Packs
					    		<li <?php if ($tmp_step == 7) { ?>class="current"<?php } ?>>Post-Install Configuration
					    		<li <?php if ($tmp_step == 8) { ?>class="current"<?php } ?>>Finish
					    	</ol>				    				    
					    <?php } else if ($install_type == 5) { ?>
							<ol class="install">
					    		<li <?php if ($tmp_step == 1 || $login_error != '' || $inst_error != '') { ?>class="current"<?php } ?>>License Verification
					    		<li <?php if (($tmp_step == 2 && $login_error == '' && $inst_error == '') || $lic_opt == 1) { ?>class="current"<?php } ?>>Select License
					    		<li <?php if ($tmp_step == 3 && $lic_opt != 1) { ?>class="current"<?php } ?>>Select Domain
					    		<li <?php if ($tmp_step == 4) { ?>class="current"<?php } ?>>Finish
					    	</ol>				    				    
					    <?php } else if ($install_type == 6) { ?>
							<ol class="install">
					    		<li <?php if ($tmp_step == 1 || $login_error != '' || $inst_error != '') { ?>class="current"<?php } ?>>License Verification
					    		<li <?php if (($tmp_step == 2 && $login_error == '' && $inst_error == '') || $_GET['show_prev'] == 1 || $_POST['backupdir']) { ?>class="current"<?php } ?>>Select Backup File
					    		<li <?php if ($tmp_step == 3 && $_POST['lic_opt'] != 1 && $_GET['show_prev'] != 1 && !$_POST['backupdir']) { ?>class="current"<?php } ?>>Finish
					    	</ol>				    				    
					    <?php } else if ($install_type == 7) { ?>
							<ol class="install">
					    		<li <?php if ($tmp_step == 1 || $login_error != '' || $inst_error != '') { ?>class="current"<?php } ?>>License Verification
					    		<li <?php if ($tmp_step == 2 && $login_error == '' && $inst_error == '') { ?>class="current"<?php } ?>>Database Configuration
					    		<li <?php if ($tmp_step == 3) { ?>class="current"<?php } ?>>Finish
					    	</ol>				    				    	
					    <?php } else if ($install_type == 8) { ?>
							<ol class="install">
					    		<li <?php if ($tmp_step == 1 || $login_error != '' || $inst_error != '') { ?>class="current"<?php } ?>>License Verification
					    		<li <?php if ($tmp_step == 2 && $login_error == '' && $inst_error == '') { ?>class="current"<?php } ?>>Select Modules to Upgrade
					    		<li <?php if ($tmp_step == 3) { ?>class="current"<?php } ?>>Language Pack Upgrade
					    		<li <?php if ($tmp_step == 4) { ?>class="current"<?php } ?>>Finish
					    	</ol>				    				    
					    <?php } else if ($install_type == 9) { ?>
							<ol class="install">
					    		<li <?php if ($tmp_step == 1 || $login_error != '' || $inst_error != '') { ?>class="current"<?php } ?>>License Verification
					    		<li <?php if ($tmp_step == 2 && $login_error == '' && $inst_error == '') { ?>class="current"<?php } ?>>Fix Paths
					    		<li <?php if ($tmp_step == 3) { ?>class="current"<?php } ?>>Finish
					    	</ol>				    				    
					    <?php } ?>					    			    
						<?php include($include_file); ?>
					<?php } else { ?>
						<?php include("install/general_error.php"); ?>
					<?php } ?>
	            	<td width="40%" style="border-left: 1px solid #000; background: #f0f0f0">
	            		<table width="100%" border="0" cellspacing="0" cellpadding="4">
							    	<tr>
							    	  <td class="subsectiontitle" style="border-bottom: 1px solid #000000; background-color:#999"><?php if( isset($title) ) echo $title;?></td>
							    	</tr>
							    	<tr>
							    	  <td class="text"><?php if( isset($help) ) echo $help;?></td>
							    	</tr>
							    </table>
	            	</td>
	            </tr>
	          </table>
						<br>
					</td>
				</tr>
			</table>
		</td>
	</tr>
	
	<tr>
		<td id="footer">
			Powered by In-portal &copy; 1997-2005, Intechnic Corporation. All rights reserved.
			<br><img src="images/spacer.gif" width="1" height="10" title="">
		</td>
	</tr>
</table>
</form>

</body>
</html>