Index: trunk/admin/install.php
===================================================================
--- trunk/admin/install.php	(revision 25)
+++ trunk/admin/install.php	(revision 26)
@@ -1,1827 +1,1852 @@
 <?php
 error_reporting(0);
 
 //$new_version = '1.0.2';
 
+//echo '<pre>'.print_r($_REQUEST, true).'</pre>';
+
 define("GET_LICENSE_URL", "http://www.in-portal.net/licensing/license.php");
 define('BACKUP_NAME', 'dump(.*).txt'); // how backup dump files are named
 $general_error = '';
 
 if ($_POST['install_type'] != '') {
 	$install_type = $_POST['install_type'];
 }
 else if ($_GET['install_type'] != '') {
 	$install_type = $_GET['install_type'];
 }
 
+$force_finish = isset($_REQUEST['ff']) ? true : false;
+
 $pathtoroot = "";
 if(!strlen($pathtoroot))
 {
   //$path=dirname(realpath($_SERVER['SCRIPT_FILENAME']));PATH_TRANSLATED
   $path=dirname(realpath($_SERVER['PATH_TRANSLATED']));
   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;
 }
 
 $is_install = TRUE;
 $admin = substr($path,strlen($pathtoroot));
 $state = $_GET["state"];
 if(!strlen($state))
 {
 	$state = $_POST["state"];
 }
 
 include("install/install_lib.php");
 $ini_file = $pathtoroot."config.php";
 if(file_exists($ini_file))
 {
     $write_access = is_writable($ini_file);
     $ini_vars = parse_ini_file($ini_file,TRUE);
 
     foreach($ini_vars as $secname => $section)
     {
       foreach($section as $key => $value)
       {
           $key = "g_".$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";
 
 if(strlen($g_DBType)>0 && strlen($state)>0 && $state !="dbinfo" && $state !="db_config_save")
 {
     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);
 }
 
 require_once($pathtoroot.$admin."/install/inst_ado.php");
 
 ?>
 <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();
 			}
 		</SCRIPT>        
 </head>
 
 <body topmargin="0" leftmargin="0" marginwidth="0" marginheight="0" style="height: 100%">
 <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 alt="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 alt="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 alt="" 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 alt="" src="images/spacer.gif" width="1" height="14">In-Portal Version 1.0.0: English US</td></tr>
 				<tr><td><img alt="" src="images/blocks2.gif" width="400" height="2"><br></td></tr>
 				<tr><td bgcolor="black" colspan="4"><img alt="" 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();
     if($ado)
     {
         $installed = TableExists($ado,"ConfigurationAdmin,Category,Permissions");
     }
     
     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."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 Exportd directory must be writable (".$pathtoroot."admin/export/).";
         //die();
     }    
     
     if($installed)
     { 
         $state="reinstall";
     }
     else {
       $state="dbinfo";
     }
 
 }
 if($state=="reinstall_process")
 {
 	$lic = base64_decode($g_License);
     if(strlen($lic))
     {
             inst_ParseLicense($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
       {
 		$rfile = @fopen(GET_LICENSE_URL."?login=".md5($_POST['UserName'])."&password=".md5($_POST['UserPass'])."&domain=".$_SERVER['SERVER_NAME'], "r");
 		if (!$rfile) {
 			$LoggedIn = false;		
 		}
 		else {
 			$rcontents = '';
 			while (!feof($rfile)) {
 				$line = fgets($rfile, 10000);
 				$rcontents .= $line;
 			}
 			@fclose($rfile);
 			
 			if (substr($rcontents, 0, 5) == 'Error') {
 				$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);
 	              /* 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;
 	       }
 	    }
       }
       else
       {      
          $state="reinstall";
          $login_error = "Invalid Username or Password - Try Again";
       }
 }
 
 if ($state == "upgrade") {
     $ado = inst_GetADODBConnection();
     
     $Modules = array();
     $Texts = array();
 
 	$sql = "SELECT Name, Version FROM ".$g_TablePrefix."Modules";
 	$rs = $ado->Execute($sql);
 	
 	while ($rs && !$rs->EOF) {
 		$p = strtolower($rs->fields['Name']);
 //		$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>";
     	
     	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 != '') {
 	        		$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) {
 //	        			$sql = "SELECT Version FROM ".$g_TablePrefix."Modules WHERE Name = '".$p."'";
 //	        			$rs2 = $ado->Execute($sql);
 						$Texts[] = $rs->fields['Name']." (".$rs->fields['Version']." ".prompt_language("la_to")." ".$file.")";
 	        			$Modules[] = $rs->fields['Name'];
 	        		}
 	        	}
 	        }
     	}
     	$rs->MoveNext();    	
     }
     	
 	$include_file = "install/upgrade.php";
 }
 
 if ($state == "upgrade_process") {
 	
 	$mod_arr = $_POST['modules'];
 		
     foreach($mod_arr as $p)
     {
         $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 != '') {
 	        		$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();
 			    	}
     			}
     		}
     	}
     }
 	
-	// upgrade language pack if some module upgrade options selected
-	if( isset($mod_arr) && is_array($mod_arr) )
-	{
-		
-	}
-	
-	$state = "finish";
-	$include_file = "install/install_finish.php";
+	$state = 'languagepack_upgrade';
+}
+
+
+// upgrade language pack
+if($state=='languagepack_upgrade')
+{
+	$state = 'lang_install_init';
+	$_POST['lang'][] = 'english.lang';
+	$force_finish = true;
 }
 
 if($state=="db_reconfig_save")
 {
     $ini_vars = parse_ini_file($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 = inst_GetADODBConnection();
     if($ado->ErrorNo()!=0)
     {
         $db_error = "Connection Error: (".$ado->ErrorNo().") ".$ado->ErrorMsg();
         $state = "db_reconfig";
 
     }
     else
     {
         if(!TableExists($ado,"ConfigurationAdmin,Category,Permissions"))
         {
             $state="db_reconfig";
             $db_error = "An In-Portal Database was not found at this location";
         }
         else {
 		    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();        	
 		    
             $state = "finish";
             $include_file = "install/install_finish.php";
         }
     }
 }
 
 
 if($state=="db_reconfig")
 {
   $include_file = "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 = parse_ini_file($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 = "install/warning.php";
            }
 		}
 		else {
 			if ($_POST['backupdate'] != '') {
 				$include_file = "install/restore_select.php";
 		  		$restore_error = "$backupfile not found or could not be read";		
 			}
 			else {
 				$include_file = "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 = "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 = "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 = parse_ini_file($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 = inst_GetADODBConnection();
     if($ado->ErrorNo()!=0)
     {
         $db_error = "Connection Error: (".$ado->ErrorNo().") ".$ado->ErrorMsg();
         $state = "dbinfo";
 
     }
     else
     {
         if(TableExists($ado,"ConfigurationAdmin,Category,Permissions"))
         {
             $state="dbinfo";
             $db_error = "An In-Portal Database already exists at this location";
         }
         else
             $state = "license";
     }
 }
 
 if($state=="dbinfo")
 {
   	if ($install_type == '') {
   		$install_type = 1;
   	}
 	$include_file = "install/dbinfo.php";
 }
 
 if ($state == "download_license") {
 	$ValidLicense = FALSE;
 	if ($_POST['login'] != '' && $_POST['password'] != '') {
 		// Here we determine weather login is ok & check available licenses
 		
 		$rfile = @fopen(GET_LICENSE_URL."?login=".md5($_POST['login'])."&password=".md5($_POST['password'])."&domain=".$_SERVER['SERVER_NAME'], "r");
 		if (!$rfile) {
 			$get_license_error = "Unable to connect to the Intechnic server! Please try again later!";
 			$state = "get_license";
 			$include_file = "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 = "install/get_license.php";					
 			}
 			else {
 				if (substr($rcontents, 0, 3) == "SEL") {
 					$state = "download_license";
 					$license_select = substr($rcontents, 4);
 					$include_file = "install/download_license.php";
 				}
 				else {
 					// Here we get one license
 		            $data = base64_decode(str_replace("In-Portal License File - do not edit!\n", "", $rcontents));
 					inst_ParseLicense($data);
 		            $ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));
 		            if($ValidLicense)
 		            {
 		                set_ini_value("Intechnic","License",base64_encode($data));
 		                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 = "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'])."&domain=".$_POST['domain'], "r");
 		if (!$rfile) {
 			$get_license_error = "Unable to connect to the Intechnic server! Please try again later!";
 			$state = "get_license";
 			$include_file = "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 = "install/download_license.php";					
 			}
 			else {
 	            $data = base64_decode(str_replace("In-Portal License File - do not edit!\n", "", $rcontents));				
 	            inst_ParseLicense($data);
 	            $ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));
 	            if($ValidLicense)
 	            {
 	                set_ini_value("Intechnic","License",base64_encode($data));
 	                save_values();
 	                $state="domain_select";
 	            }
 	            else {
 	              $license_error="Invalid License File";				
 	            }
 		        if(!$ValidLicense)
 		        {
 		            $state="license";
 		        }	            
 			}			
 		}
 	}
 }
 
 if($state=="license_process")
 {
     $ValidLicense = FALSE;
     switch($_POST["lic_opt"])
     {
     case 1: /* download from intechnic */
         $include_file = "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");
             $fp = @fopen($pathtoroot."themes/tmp.lic","rb");
             if($fp)
             {
                 $lic = fread($fp,filesize($pathtoroot."themes/tmp.lic"));
                 fclose($fp);
             }      
             $data = inst_LoadLicense(FALSE,$pathtoroot."themes/tmp.lic");
             @unlink($pathtoroot."themes/tmp.lic");
             inst_ParseLicense($data);
             $ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));
             if($ValidLicense)
             {
                 set_ini_value("Intechnic","License",base64_encode($data));
                 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);
             inst_ParseLicense($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:
        $state="domain_select";
     break;
     }
   if($ValidLicense)
       $state="domain_select";
 }
 
 if($state=="license")
 {
     $include_file = "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>";
     	
     	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 != '') {
 	        		if ($p == '') {
 	        			$p = 'in-portal';
 	        		}
 	        		$sql = "SELECT Version FROM ".$g_TablePrefix."Modules WHERE Name = '".$p."'";
 	        		$rs = $ado->Execute($sql);
 	        		
 	        		if (str_replace(".", "", $rs->fields['Version']) < str_replace(".", "", $file)) {
 	        			$show_upgrade = true;
 	        		}
 	        	}
 	        }
     	}    	
     }
     	
     if ($install_type == '') {
     	$install_type = 2;
     }    
     
 	$include_file = "install/reinstall.php";
 }
 
 if($state=="login")
 {    
     $lic = base64_decode($g_License);
     if(strlen($lic))
     {
             inst_ParseLicense($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 = "install/login.php";
 }
 
 if($state=="set_domain")
 {
     if(!is_array($i_Keys))
     {
         $lic = base64_decode($g_License);
         if(strlen($lic))
         {
            inst_ParseLicense($lic);
            $ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));            
         }
     }
     if($_POST["domain"]==1)
     {
         $domain = $_SERVER['HTTP_HOST'];
         set_ini_value("Intechnic","Domain",$domain);
         save_values();
         $state="runsql";
     }
     else
     {
         $domain = str_replace(" ", "", $_POST["other"]);
         if ($domain != '') {
         	set_ini_value("Intechnic","Domain",$domain);
         	save_values();
         	$state="runsql";
         }
         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))
         {
            inst_ParseLicense($lic);
            $ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));            
         }
     }
   
     $include_file = "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 = "install/install_finish.php";
       $state="finish";
   }
 }
 
 if ($state == "finish") {
 	$include_file = "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 = "install/rootpass.php";
 }
 
 if($state=="lang_install_init")
 {
   include_once($pathtoroot."kernel/include/xml.php");
 
   $ado = inst_GetADODBConnection();
   
   if (TableExists($ado, "Language,Phrase")) {
 	  $MaxInserts = 200;
 	  $PhraseTable = GetTablePrefix()."ImportPhrases";
 	  $EventTable = GetTablePrefix()."ImportEvents";
 	
 	  $sql = "CREATE TABLE $PhraseTable SELECT Phrase,Translation,PhraseType,LanguageId FROM ".GetTablePrefix()."Phrase WHERE PhraseId=-1";
 	  $ado->Execute($sql);
 	
 	  $sql = "CREATE TABLE $EventTable SELECT Template,MessageType,EventId,LanguageId FROM ".GetTablePrefix()."EmailMessage WHERE EmailMessageId=-1";
 	  $ado->Execute($sql);          	 
 	  $sql = "SELECT EventId,Event,Type FROM ".GetTablePrefix()."Events";
 	  $rs = $ado->Execute($sql);
 	  $Events = array();
 	  while($rs && !$rs->EOF)
 	  {
 	    $Events[$rs->fields["Event"]."_".$rs->fields["Type"]] = $rs->fields["EventId"];		
 		$rs->MoveNext();
 	  }			 
 	  
 	  if(count($_POST["lang"])>0)
 	  {
 	      $Langs = $_POST["lang"];
 	      for($x=0;$x<count($Langs);$x++)
 	      {
 	      	 $lang = $Langs[$x];
 	      	 $p = $pathtoroot.$admin."/install/langpacks/".$lang;
 	         /* parse xml file */
 	         $fp = fopen($p,"r");
 	         $xml = fread($fp,filesize($p));
 	         fclose($fp);
 	         unset($objInXML);
 			 $objInXML = new xml_doc($xml);
 			 $objInXML->parse();      	
 				 
 			 $objInXML->getTag(0,$name,$attribs,$contents,$tags);
 				 
 			 if(is_array($tags))
 			 {
 			 	foreach($tags as $t)
 			 	{
 			 		$LangRoot =& $objInXML->getTagByID($t);
 			 		$PackName = $LangRoot->attributes["PACKNAME"];			 
 			 		$l = $objLanguages->GetItemByField("PackName",$PackName);
 			 		if(is_object($l))
 			 		{
 			 			$LangId = $l->Get("LanguageId");
 			 		}
 			 		else
 			 		{
 			 			$l = new clsLanguage();
 			 			$l->Set("Enabled",1);
 			 			$l->Create();
 			 			$NewLang = TRUE;
 			 			$LangId = $l->Get("LanguageId");
 			 		}
 					foreach($LangRoot->children as $tag)
 					{
 	  					switch($tag->name)
 	  					{
 	  					case "PHRASES":
 	  	  					foreach($tag->children as $PhraseTag)
 	  	  					{	  		
 	  							$Phrase = $PhraseTag->attributes["LABEL"];
 	  							$Translation = base64_decode($PhraseTag->contents);
 	  							$PhraseType = $PhraseTag->attributes["TYPE"];  	
 	  							$psql = "INSERT INTO $PhraseTable (Phrase,Translation,PhraseType,LanguageId) VALUES ('$Phrase','$Translation',$PhraseType,$LangId)";
 	  							$ado->Execute($psql);
 	  								//echo "$psql <br>\n";  	  						
 	  	  					}
 	  					break;
 	  					case "DATEFORMAT":
 	  						$DateFormat = $tag->contents;
 	  					break;
 	  					case "TIMEFORMAT":
 	  						$TimeFormat = $tag->contents;
 	  					break;
 	  					case "DECIMAL":
 	  						$Decimal = $tag->contents;
 	  					break;
 	  					case "THOUSANDS":
 	  						$Thousands = $tag->contents;
 	  					break;
 	  					case "EVENTS":
 	  	  					foreach($tag->children as $EventTag)
 	  	  					{
 	  	  						$event = $EventTag->attributes["EVENT"];
 	  	  						$MsgType = strtolower($EventTag->attributes["MESSAGETYPE"]);
 	  	  						$template = base64_decode($EventTag->contents);
 	  	  						$Type = $EventTag->attributes["TYPE"];
 	  	  						$EventId = $Events[$event."_".$Type];
 	  	  							
 	  	  						$esql = "INSERT INTO $EventTable (Template,MessageType,EventId,LanguageId) VALUES ('$template','$MsgType',$EventId,$LangId)";
 	  	  						$ado->Execute($esql);
 	  	  							//echo htmlentities($esql)."<br>\n";  	  						
 	  	  					}
 	  	  				break;		
 	  					}  		  
 	  					if($NewLang)
 	  					{
 	  						$l->Set("PackName",$PackName);
 	  						$l->Set("LocalName",$PackName);
 	  						$l->Set("DateFormat",$DateFormat);
 	  						$l->Set("TimeFormat",$TimeFormat);
 	  						$l->Set("DecimalPoint",$Decimal);
 	  						$l->Set("ThousandSep",$Thousands);
 	  						$l->Update();	
 	  					}
 					}				
 			 	}
 			 }
 			 
 	      }
 	      $state="lang_install";
 	  }
 	  else {
 	  	$state="lang_select";  
 	  }
   }
   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 = GetTablePrefix()."ImportPhrases";
   $EventTable = GetTablePrefix()."ImportEvents";
   if($Status==0)
   {
     $Total = TableCount($PhraseTable,"",0);
   }
   else
   {
   	$Total = TableCount($EventTable,"",0);
   }
   
   if($Status==0)
   { 
-    	$Offset = $objLanguages->ReadImportTable($PhraseTable, 1,"0,1,2",TRUE,200,$Offset);
+    	$Offset = $objLanguages->ReadImportTable($PhraseTable, 1,"0,1,2", $force_finish ? false : true, 200,$Offset);
   		if($Offset>=$Total)
   		{    	
     		$Offset=0;
     		$Status=1;        			
     	}
     	
     	if ($_POST['next_step']) {
     		$next_step = $_POST['next_step'];
     	}
     	else if ($_GET['next_step']) {
     		$next_step = $_GET['next_step'];
     	}
     	
+		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 = "install/lang_run.php";
   }
   else 
   {
   	  if(!is_object($objMessageList))
   	    $objMessageList = new clsEmailMessageList();
   	    
   	    
-  	  $Offset = $objMessageList->ReadImportTable($EventTable,TRUE,100,$Offset);
+  	  $Offset = $objMessageList->ReadImportTable($EventTable, $force_finish ? false : true,100,$Offset);
   	  
   	  if($Offset>$Total)
   	  {
     	if ($_POST['next_step']) {
     		$next_step = $_POST['next_step'];
     	}
     	else if ($_GET['next_step']) {
     		$next_step = $_GET['next_step'];
-    	}  	  	
+    	}
+    	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 = "install/lang_run.php";
   	  }
   	  else
-  	    $state="lang_default";
+  	  {
+  	    if( !$force_finish )
+  	    {
+  	    	$state = 'lang_default';
+  	    }
+  	    else
+  		{
+  	    	$_POST['next_step'] = 4;
+  	    	$state = 'finish';
+			$include_file = "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 $PhraseTable");
 	$ado->Execute("DROP TABLE $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 = "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( !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 != '') {
 	        		$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=="lang_select")
 {
 	$Packs = GetLanguageList();
 	$include_file = "install/lang_select.php";
 }
 
 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["SERVER_NAME"]);
     //$g_DomainName= $_SERVER["SERVER_NAME"];
     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);
     $Modules = inst_GetModuleList();
     $include_file = "install/modselect.php";
 }
 
 if(substr($state,0,10)=="postconfig")
 {
     $p = explode("_",$state);
     $step = $p[1];
     
     if ($_POST['Site_Path'] != '') {
 		//echo "ok<br>";
     	$rfile = @fopen(GET_LICENSE_URL."?url=".base64_encode($_SERVER['SERVER_NAME'].$_POST['Site_Path'])."&domain=".md5($_SERVER['SERVER_NAME']), "r");
 		if (!$rfile) {
 			$get_license_error = "Unable to connect to the Intechnic server! Please try again later!";
 			$state = "postconfig_1";
 			$include_file = "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 = "install/postconfig.php";
     }
     else
         $state = "theme_sel";       
 }
 
 if($state=="theme_sel")
 {
     $objThemes->CreateMissingThemes();
     $include_file = "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 = "install/install_finish.php";    
     $state="finish";
 }
 
 if ($state == "adm_login") {
 	echo "<script>window.location='index.php';</script>";
 }
 
 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>";
 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;
 }
 
 if ($_POST['next_step']) {
 	$tmp_step = $_POST['next_step'];
 }
 else if ($_GET['next_step']) {
 	$tmp_step = $_GET['next_step'];
 }
 
 if (!$tmp_step) {
 	$tmp_step = 1;
 }
 
 if ($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;
 }	
 ?>
 	
 	<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" alt=""><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 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 || $_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 == 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 == '') || $_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 == 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 == '') || $_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 } ?>>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 } ?>>Finish
+					    		<li <?php if ($tmp_step == 3) { ?>class="current"<?php } ?>>Language Pack Upgrade
+					    		<li <?php if ($tmp_step == 4) { ?>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 echo $title;?></td>
 							    	</tr>
 							    	<tr>
 							    	  <td class="text"><?php echo $help;?></td>
 							    	</tr>
 							    </table>
 	            	</td>
 	            </tr>
 	          </table>
 						<br>
 					</td>
 				</tr>
 			</table>
 		</td>
 	</tr>
 	
 	<tr>
 		<td id="footer">
 			Powered by In-portal &copy; 1997-2004, Intechnic Corporation. All rights reserved.
 			<br><img src="images/spacer.gif" width="1" height="10" alt="">
 		</td>
 	</tr>
 </table>
 </form>
 
 </body>
 </html>
\ No newline at end of file

Property changes on: trunk/admin/install.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.2
\ No newline at end of property
+1.3
\ No newline at end of property
Index: trunk/admin/install/lang_run.php
===================================================================
--- trunk/admin/install/lang_run.php	(revision 25)
+++ trunk/admin/install/lang_run.php	(revision 26)
@@ -1,76 +1,77 @@
 <?php
 
 function stats($caption,$myprogress,$totalnum)
 {
-    global $rootURL, $CancelURL, $admin;
+    global $rootURL, $CancelURL, $admin, $force_finish;
     
+    $step_num = $force_finish ? 3 : 6;
     if($totalnum>0)
     {
       $pct=round(($myprogress/ $totalnum)*100);
     }
     else
     	$pct = 100;
     
     $o .='					<td>
 						<img src="images/icon_install.gif" width="46" height="46" alt="" align="absmiddle">&nbsp;<span class="admintitle">'.$caption.'</span><br><br>
 						
 			      <!-- toolbar buttons //-->
 			      <table border="0" cellpadding="2" cellspacing="0" class="tableborder_full" width="100%" height="30">
 			      	<tr>
-			      		<td class="tablenav" width="580" nowrap background="images/tabnav_left.jpg"><span class="tablenav_link">&nbsp;Step 6 - '.$caption."-".$pct.'%</span></td>
+			      		<td class="tablenav" width="580" nowrap background="images/tabnav_left.jpg"><span class="tablenav_link">&nbsp;Step '.$step_num.' - '.$caption."-".$pct.'%</span></td>
 			      		<td align="right" class="tablenav" background="images/tabnav_back.jpg" width="100%"><img src="images/blue_bar_help.gif"  border="0" ><br></td>
 			      	</tr>
 			      </table>
 			      <table border=0 cellpadding=0 cellspacing=0 width="100%" class="toolbar">
 			      	<tr>
 								<td><img src="images/toolbar/tool_cancel.gif" id="img_Cancel" width="32" height="32" border="0" alt="Next Category" onMouseOut="swap(\'img_Cancel\', \'images/toolbar/tool_cancel.gif\');" onMouseOver="swap(\'img_Cancel\',\'images/toolbar/tool_cancel_f2.gif\');" onClick="history.go(-1);"></td>
 								<!--<td><img src="images/toolbar/tool_divider.gif" width="4" height="32" border="0"><br></td>-->
 								<td width="100%">&nbsp;</td>
 							</tr>
 						</table>
 						<!-- toolbar button \\-->
 						
 						<table width="100%" border="0" cellspacing="0" cellpadding="0" class="tableborder">
 	            <tr valign="top">
 	            	<td width="60%" bgcolor="#F0F0F0"><table width="100%" height="100%" border="0" cellspacing="0" cellpadding="4">';
     
     echo "\n";   
     
     $o .= "				            <tr class=\"table_color2\">				              
 				              <td ALIGN=\"center\"> <br/>
 <TABLE CLASS=\"tableborder_full\" width=\"75%\">
     <TR border=1><TD bgcolor=\"#507F15\" width=\"".$pct."%\">&nbsp;</TD>";
     $comp_pct = 100-$pct;
     $o .= "  <TD bgcolor=#FFFFFF width=\"".$comp_pct."%\"></TD></TR>";
     $o .= "  </TABLE><BR /><input type=button VALUE=\"Cancel\" CLASS=\"button\" ONCLICK=\"document.location='".$CancelURL."';\">
 				              </td>
 				            </tr></table></td>";
     
     //$o .= "<!--<tr><td  class=\"tabletitle\" STYLE=\"border: 1px solid #000000;\" bgcolor=\"#333333\">".$caption."-".$pct."%</td></tr>-->";
     //$o .= "<TR><TD  align=\"middle\" bgcolor=\"#F0F0F0\"><br />"; 
     //$o .= "  <TABLE CLASS=\"tableborder_full\" width=\"75%\">";
     //$o .="  <TR border=1><TD bgcolor=\"#507F15\" width=\"".$pct."%\">&nbsp;</TD>";
     //$comp_pct = 100-$pct;
     //$o .= "  <TD bgcolor=#FFFFFF width=\"".$comp_pct."%\"></TD></TR>";
     //$o .= "  </TABLE>";
     //$o .= "  <BR /><input type=button VALUE=\"Cancel\" CLASS=\"button\" ONCLICK=\"document.location='".$CancelURL."';\">";
     echo $o."\n";
     //echo "</TD></TR></TABLE></td>";
 }
 
 function reload($url)
 {
 	print "<script language=\"javascript\">" ;
 	print "setTimeout(\"document.location='$url';\",40);";
 	print " </script>";
 	//echo "<A HREF=\"$url\">Next </A>";
 }
 
 $PageTitle = "Language Pack Installation In Progress";
 $CancelURL =   $rootURL ."admin/install.php";
 
 stats($PageTitle,$Offset,$Total);
 
 reload($NextUrl);
 
 ?>        

Property changes on: trunk/admin/install/lang_run.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.1
\ No newline at end of property
+1.2
\ No newline at end of property