Index: trunk/kernel/include/modules.php
===================================================================
--- trunk/kernel/include/modules.php	(revision 88)
+++ trunk/kernel/include/modules.php	(revision 89)
@@ -1,899 +1,899 @@
 <?php
 /*	List of installed modules and module-specific variables	
 	Copyright 2002, Intechnic Corporation, All rights reserved
 */
 
 setcookie("CookiesTest", "1");
 
 $ExtraVars = array();    
 
 function ParseEnv()
 {
 	global $env, $var_list, $mod_prefix,$objSession, $SessionQueryString;
 
 	/* parse individual sections */
 	$env = isset($_GET['env']) ? $_GET['env'] : '';
 	if ($env == "")
 	{
 	  $var_list["t"] = "index";
       if(is_array($mod_prefix))
       {      
       	
           foreach($mod_prefix as $key => $value)
           {
             if(strlen($key))
             {
                 $parser_name = $key . "_ParseEnv";
                 if(function_exists($parser_name))
                 {
                     @$parser_name();
                 }
             }
           }
           
       }
 	}
 	else
 	{
        $envsections = explode(":", $env);
        foreach($mod_prefix as $key => $value)
        {
          if(strlen($key))
          {
            $parsed=FALSE;
            $parser_name = $key . "_ParseEnv";
            for($i=1; $i<sizeof($envsections); $i++)
            {
              $pieces = explode("-", $envsections[$i]);
              if(substr($pieces[0],0,strlen($key))==$key)
              {             
                 $parsed=TRUE;
                 if(function_exists($parser_name))
                 {
                   $parser_name($envsections[$i]);
                 }
              }
            }
            if(!$parsed)
            {
                if(function_exists($parser_name))
                {
                    @$parser_name();
                }
            }
          }
        }
        $req_vars = explode("-", $envsections[0]);
        $sid = $req_vars[0]; 
        if(!$SessionQueryString)
        {
          if(!strlen($sid) || $sid=="_")
          {       
        	   if($sid != "_")
            		$sid = $_COOKIE["sid"];
          }
          else
            $SessionQueryString = TRUE;                     
        }       
        $var_list["sid"] = $sid;
               
        $var_list["t"] = $req_vars[1];
        if( isset($_GET['dest']) )
           $var_list['dest'] = $_GET['dest'];        
     }
     
 }
 
 function LoadEnv()
 {
     global $env, $var_list, $mod_prefix,$objSession;
 
 	$env = $_GET["env"];
    // echo "Loading Variables..<br>\n";
 	if ($env != "")
 	{
         $envsections = explode(":", $env);
         foreach($mod_prefix as $key => $value)
         {
           if(strlen($key))
           {
             $parsed=FALSE;
             for($i=1; $i<sizeof($envsections); $i++)
             {
               $pieces = explode("-", $envsections[$i]);
               if(substr($pieces[0],0,strlen($key))==$key)
               {             
                 $parsed=TRUE;
                 break;
               }
             }
             if(!$parsed)
             {     
               $parser_name = $key . "_LoadEnv";
               //echo $parser_name;
               if(function_exists($parser_name))
               {
                  $parser_name();                 
               }
             }
             else
             {
                 $parser_name = $key . "_SaveEnv";
                 //echo $parser_name;
                 if(function_exists($parser_name))
                 {
                     $parser_name($envsections[$i]);
                 }
             }
           }
         }
     }
 }
 
 function BuildEnv()
 {  
     global $var_list,$m_var_list, $var_list_update, $mod_prefix, $objSession, $objConfig,
            $ExtraVars, $objThemes, $CurrentTheme, $SessionQueryString, $FrontEnd;
     
     static $theme;
 
     $env = "";  
     //echo "Query String: $SessionQueryString<br>\n";
     if(($objConfig->Get("CookieSessions")==0 || !$FrontEnd || ($objConfig->Get("CookieSessions")==2 && $SessionQueryString==TRUE)))
     {
     	if(!$objSession->UseTempKeys)
     	{
     	  $sessionkey = $objSession->GetSessionKey();
     	}
     	else
     	  $sessionkey = $objSession->Get("CurrentTempKey");
 	  $env = $sessionkey;
     }
     $env .= "-";	
 	if (isset($var_list_update["t"]))
     { 
     	if($var_list_update["t"]=="_referer_")
     	{
     		$var_list_update["t"] =$objSession->GetVariable("Template_Referer");
     	}
     	
         $t = $var_list_update["t"];         
         if(!is_numeric($t))
         {
             if(!is_object($theme))
                $theme = $objThemes->GetItem($m_var_list["theme"]);            
             $id = $theme->GetTemplateId($t);
             $var_list_update["t"] = $id;
         }
 		$env .= $var_list_update["t"];
     }
 	else
     {
         $t = $var_list["t"];
         if(!is_numeric($t))
         {
             if(!is_object($theme))
                $theme = $objThemes->GetItem($m_var_list["theme"]);           
             $id = $theme->GetTemplateId($t);
             $t = $id;            
         }
 		$env .= $t; 
     }
     if(is_array($mod_prefix))
     {    
       foreach($mod_prefix as $key => $value)
 	  {        
        	$builder_name = $key . "_BuildEnv";
         
         if(function_exists($builder_name))
 		  $env .= $builder_name();
 	  }
     }
     $extra = "";
     $keys = array_keys($ExtraVars);
     if(is_array($keys))
     {    
       for($i=0;$i<count($keys);$i++)   
       {
         $key = $keys[$i];
 
         $e = "&".$key."=".$ExtraVars[$key];
         $extra .= $e;
         $e = "";
       }
     }
     $env .= $extra;
     
 	return $env;
 }
 
 function CategoryActionFunc($basename,$CatList)
 {
     global $mod_prefix;
 
     foreach($mod_prefix as $key => $value)
 	{        
        	$function_name = $key."_".$basename;
         if(function_exists($function_name))
         {
             $function_name($CatList);
         }
     }
 }
 
 
 function RegisterEnv($Var,$Value)
 {
     global $ExtraVars;
 
     $ExtraVars[$Var] = $Value;    
 }
 
 function UnregisterEnv($Var)
 {
     global $ExtraVars;
 
     unset($ExtraVars[$Var]);
 }
 
 function ModuleTagPrefix($name)
 {
     global $modules_loaded;
 
     $ret = "";
     foreach($modules_loaded as $prefix=>$mod_name)
     {
         if($name==$mod_name)
         {
             $ret = $prefix;
             break;
         }
     }
     return $ret;
 }
 
 function ModuleEnabled($name)
 {
     global $template_path;
 
     $a = array_keys($template_path);
     if(in_array($name,$a))
         return TRUE;
     return FALSE;
 }
 
 function GetModuleArray($array_name="mod_prefix")
 {
     switch($array_name)
     {
     case "mod_prefix":
         global $mod_prefix;
         return $mod_prefix;
     break;
     case "admin":
         global $mod_prefix, $modules_loaded;
         $mod = array();
         if(is_array($mod_prefix) && is_array($modules_loaded))
         {        
           foreach ($mod_prefix as $key=>$value)
           {
             if(_ModuleLicensed($modules_loaded[$key]) || $key=="m")
             {
                 $mod[$key] = $value;
             }
           }
         }
         return $mod;
     break;
     case "loaded":
         global $modules_loaded;
         return $modules_loaded;
     break;
     case "template":
         global $template_path;
         return $template_path;
     case "rootcat":
     		global $mod_root_cats;
         return $mod_root_cats;
     break;
     }
 }
 
 function admin_login()
 {	
     global $objSession,$login_error, $objConfig,$g_Allow,$g_Deny;
    
     //echo "<pre>"; print_r($objSession); echo "</pre>";
 	
 	if( GetVar('help_usage') == 'install' ) return true;
 	
     $env_arr = explode('-', $_GET['env']);
     $get_session_key = $env_arr[0];
     if(!$objSession->ValidSession() || ($objSession->GetSessionKey() != $get_session_key && $_POST['adminlogin'] != 1)) {
       	if ($_GET['expired'] == 1) {
     		$login_error = admin_language("la_text_sess_expired");
       	}
     	return FALSE;
     	//echo "Expired<br>";
     }
     
 	if ($objSession->HasSystemPermission("ADMIN") == 1)
 		return TRUE;
 
     if(count($_POST)==0 || $_POST["adminlogin"]!=1)
       return FALSE;		
     $login=$_POST["login"];
     $password = $_POST["password"];
     
     if (strlen($login) && strlen($password))
     {    
       if(!_IpAccess($_SERVER['REMOTE_ADDR'],$g_Allow,$g_Deny))
       {
     	  $login_error = admin_language("la_text_address_denied");
     	  return FALSE;
       }
       $valid = $objSession->Login($login, md5($password));
       $hasperm = ($objSession->HasSystemPermission("ADMIN") == 1);
       if (($login=="root" || $hasperm) && $valid)
       {     	        	 
           if(_ValidateModules())
           {          
             return TRUE;
           }
           else
               $login_error = "Missing or invalid In-Portal License";
       }
 	  else
 	  {
 	  	if(!$hasperm && $valid)
 	  	{
 	  		$login_error = admin_language("la_text_nopermissions");
 	  	}
 	  	else
 	  	{
 	  	  $login_error = admin_language("la_Text_Access_Denied");
 	  	}
 	  	return FALSE;
 	  }
 	}
     else
     {
     	if(!strlen($login))
     	{
     	  $login_error = admin_language("la_Text_Missing_Username");
     	}
     	else
     	  if(!strlen($password))
     	  	$login_error = admin_language("la_Text_Missing_Password");
         return FALSE;
     }
 }
 
 
 #---------------------------------------------------------------------------
 
 function _EnableCookieSID()
 {
 	global $var_list, $objConfig;
 
 	if((!$_COOKIE["sid"] && $objConfig->Get("CookieSessions")>0 && strlen($var_list["sid"])<2 && !headers_sent()) 
 		|| strlen($_COOKIE["sid"])>0)
 		{
 		  return TRUE;	
 		}
 		else
 		 return FALSE;	
 }
 
 function _IsSpider($UserAgent)
 {
   global $robots, $pathtoroot;
 
   $lines = file($pathtoroot."robots_list.txt");
 
   if(!is_array($robots))
   {  
     $robots = array();
    for($i=0;$i<count($lines);$i++)
     { 
       $l = $lines[$i];
       $p = explode("\t",$l,3);
       $robots[] = $p[2];
     }
   }
   return in_array($UserAgent,$robots);
 }
 
 function _StripDomainHost($d)
 {
   	$dotcount = substr_count($d,".");
 	if($dotcount==3)
 	{
 	   $IsIp = TRUE;
 	   for($x=0;$x<strlen($d);$x++)
 	   {
 	   	  if(!is_numeric(substr($d,$x,1)) && substr($d,$x,1)!=".")	
 	   	  {
 	   	    $IsIp = FALSE;
 	   	    break;
 	   	  } 
 	   }	   
 	}
 	if($dotcount>1 && !$IsIp)
 	{
 		$p = explode(".",$d);
 		$ret = $p[count($p)-2].".".$p[count($p)-1];
 	}
 	else
 	  $ret = $d;
 	return $ret;
 }
 
 function _MatchIp($ip1,$ip2)
 {
   $matched = TRUE;
   	 
   $ip = explode(".",$ip1);
   $MatchIp = explode(".",$ip2);
   for($i=0;$i<count($ip);$i++)
   {
   	if($i==count($MatchIp))
   	  break;
   	if(trim($ip[$i]) != trim($MatchIp[$i]) || trim($ip[$i])=="*")
    	{
    		$matched=FALSE;
    		break;
    	}
   }
   return $matched;
 }
 
 function _IpAccess($IpAddress,$AllowList,$DenyList)
 {	
   $allowed = explode(",",$AllowList);
   $denied = explode(",",$DenyList);
 
   $MatchAllowed = FALSE;
   for($x=0;$x<count($allowed);$x++)
   {
   	 $ip = explode(".",$allowed[$x]);
   	 
 	 $MatchAllowed = _MatchIp($IpAddress,$allowed[$x]);  	 
   	 if($MatchAllowed)
   	   break;
   }	
   $MatchDenied = FALSE;
   for($x=0;$x<count($denied);$x++)
   {
   	 $ip = explode(".",$denied[$x]);
   	 
 	 $MatchDenied = _MatchIp($IpAddress,$denied[$x]);  	 
   	 if($MatchDenied)
   	   break;
   }	
   
   $Result = (($MatchAllowed && !$MatchDenied) || (!$MatchAllowed && !$MatchDenied) || 
   			($MatchAllowed && $MatchDenied));
   return $Result;
 }
 
 function _ValidateModules()
 {
     global $i_Keys, $objConfig, $g_License;
 
     $lic = base64_decode($g_License);
     _ParseLicense($lic);
     
     $modules = array();
     //echo "License: ".$lic."<br>";
     $domain = _GetDomain();    
     //echo "Domain: ".$domain."<br>";
     if(!_IsLocalSite($domain))
     {    
     	$domain = _StripDomainHost($domain);
     	//echo "New domain: $domain<br>";
     	//echo "<pre>"; print_r($i_Keys); echo "</pre>";
         for($x=0;$x<count($i_Keys);$x++)
         {
             $key = $i_Keys[$x];
             if(strlen(stristr($key["domain"],$domain)))            
             {
                 $modules = explode(",",$key["mod"]);
                 //echo "Modules: $modules";
             }
         }            
         if(count($modules)>0)
         {        	    
             return TRUE;
         }
     }
     else 
       return TRUE;    
     return FALSE;
 }
 
 function _ModuleLicensed($name)
 {
     global $i_Keys, $objConfig, $pathtoroot;
 
-	$vars = parse_ini_file($pathtoroot."config.php");
+	$vars = parse_portal_ini($pathtoroot."config.php");
 
 	while($key = key($vars))
 	{
   		$key = "g_".$key;
   		global $$key;
   		$$key = current($vars); //variable variables
   		if(strlen($$key)>80)
   		{
   		  $lic = base64_decode($$key);
   		}   		  
   		next($vars);
 	}    
     //$lic = base64_decode($g_License);
     _ParseLicense($lic);
     $modules = array();
     if(!_IsLocalSite(_GetDomain()))
     {    
         for($x=0;$x<count($i_Keys);$x++)
         {
             $key = $i_Keys[$x];
             if(strlen(stristr(_GetDomain(),$key["domain"])))             
             {
                 //echo "ok<br>";
             	$modules = explode(",",$key["mod"]);            	
             }
         }            
         if(in_array($name,$modules)) {
         	//echo "ok<br>";
             return TRUE;
         }
     }
     else {
         return TRUE;
     }
 
     return FALSE;
 }
 
 function _GetDomain()
 {
 	global $objConfig, $g_Domain;
 	
 	if($objConfig->Get("DomainDetect"))
 	{
 		$d = $_SERVER['HTTP_HOST'];
 	}
 	else
 	  $d = $g_Domain;
 	  
 	return $d;	
 }
 
 function _keyED($txt,$encrypt_key)
 {
  $encrypt_key = md5($encrypt_key);
  $ctr=0;
  $tmp = "";
  for ($i=0;$i<strlen($txt);$i++)
  {
      if ($ctr==strlen($encrypt_key)) $ctr=0;
         $tmp.= substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1); 
       $ctr++;
  }
  return $tmp;
 }
 
 
 function _decrypt($txt,$key)
 {
     $txt = _keyED($txt,$key);
     $tmp = ""; 
     for ($i=0;$i<strlen($txt);$i++) 
     {
         $md5 = substr($txt,$i,1);
         $i++;
         $tmp.= (substr($txt,$i,1) ^ $md5);
    }
     return $tmp; 
 } 
 
 function LoadFromRemote()
 {
     return "";
 }
 
 function DLid()
 {
     global $lid;
     echo $lid."\n";
     die();
 }
 
 function _LoadLicense($LoadRemote=FALSE)
 {
     global $pathtoroot, $objConfig;
     
     $f = $pathtoroot."intechnic.php";
     if(file_exists($f))
     {
         $contents = file($f);
         $data = base64_decode($contents[1]);
     }
     else
         if($LoadRemote)
             return $LoadFromRemote;   
    return $data;
 }
 
 function _VerifyKey($domain,$k)
 {
     $key = md5($domain);
     $lkey = substr($key,0,strlen($key)/2);
     $rkey = substr($key,strlen($key)/2);
     $r = $rkey.$lkey;
     if($k==$r)
         return TRUE;
     return FALSE;
 }
 
 function _ParseLicense($txt)
 {
   global $i_User, $i_Pswd, $i_Keys;
 
   $data = _decrypt($txt,"beagle");
   $i_Keys = array();
   $lines = explode("\n",$data);
   for($x=0;$x<count($lines);$x++)
   {
       $l = $lines[$x];
       $p = explode("=",$l,2);
       switch($p[0])
       {
       case "Username":
           $i_User = $p[1];
       break;
       case "UserPass":
           $i_Pswd = $p[1];
       break;
       default:
         if(substr($p[0],0,3)=="key")
         {            
             $parts = explode("|",$p[1]);
             if(_VerifyKey($parts[0],$parts[1]))
             {
                 unset($K);
                 $k["domain"]=$parts[0];
                 $k["key"]=$parts[1];
                 $k["desc"]=$parts[2];
                 $k["mod"]=$parts[3];
                 $i_Keys[] = $k;         
             }
         }
       break;
       }
   }
 }
 
 function _IsLocalSite($domain)
 {
     $localb = FALSE; 
     if(substr($domain,0,3)=="172")
     {
         $b = substr($domain,0,6);
         $p = explode(".",$domain);
         $subnet = $p[1];
         if($p[1]>15 && $p[1]<32)
             $localb=TRUE;
     }
     if($domain=="localhost" || $domain=="127.0.0.1" || substr($domain,0,7)=="192.168" ||
        substr($domain,0,3)=="10." || $localb || strpos($domain,".")==0)
     {
         return TRUE;
     }
     return FALSE;
 }
 
 LogEntry("Loading Modules\n");
 /* get the module list from the database */
 $adodbConnection = GetADODBConnection();	
 $sql = "SELECT Name, Path, Var,TemplatePath, RootCat from ".GetTablePrefix()."Modules where Loaded=1 ORDER BY LoadOrder";
 $rs = $adodbConnection->Execute($sql);
 
 while($rs && !$rs->EOF)
 {
     $key = $rs->fields["Var"];
     $mod_prefix[$key] = $rs->fields["Path"];
     $modules_loaded[$key] = $rs->fields["Name"];
     $name = $rs->fields["Name"];
     $template_path[$name] = $rs->fields["TemplatePath"];
     $mod_root_cats[$name] = $rs->fields["RootCat"];
    // echo $key . "=". $modules_loaded[$key]."<br>\n";
     $rs->MoveNext();
 }
 LogEntry("Loading Module Parser scripts\n");
 /* for each module enabled, load up parser.php */
 //foreach($mod_prefix as $key => $value)
 $LogLevel++;
 if(is_array($mod_prefix))
 {
   foreach($mod_prefix as $key => $value)
   {	
 
       $mod = $pathtoroot . $value . "parser.php";	 
 //      LogEntry("Loading parser $mod \n");
       require_once($mod);
           
   }
 }
 $LogLevel--;
 LogEntry("Finished Loading Module Parser scripts\n");
 /*now each module gets a look at the environment string */
 
 $SessionQueryString = FALSE;
 
 if(!isset($FrontEnd)) $FrontEnd = false;
 
 if($FrontEnd != 1)
   $SessionQueryString = TRUE;
 
 if(is_array($mod_prefix))
     ParseEnv(); 
 /* create the session object */
 
 $ip = $_SERVER["REMOTE_ADDR"];
 
 if ( !isset($var_list['sid']) ) $var_list['sid'] = '';
 if ( !isset($_GET['env']) ) $_GET['env'] = '';
 
 if(strlen($var_list["sid"])==0 && strlen($_GET["env"])>0 && $objConfig->Get("CookieSessions")==2)
 {   
     if(_IsSpider($_SERVER["HTTP_USER_AGENT"]))
     {    
         $UseSession = FALSE;
     }
     else
     {
         /* switch user to GET session var */
         if (!$_COOKIE['sid']) {
         	$SessionQueryString = TRUE;
         }
         //else {
         	//$SessionQueryString = FALSE;
         //}
         $UseSession = TRUE;
     }
 }
 else {
     $UseSession = TRUE;
 }
     
 if($var_list["sid"]=="_")
   $var_list["sid"]="";    
 
 /*setup action variable*/
 $Action = isset($_REQUEST['Action']) ? $_REQUEST['Action'] : '';
 
 if($Action=="m_logout")
 {
    $u = new clsUserSession($var_list["sid"] ,($SessionQueryString && $FrontEnd==1));
    $u->Logout();
    unset($u);	
    $var_list_update["t"] = "index";  
    $var_list["t"] = "";
    $var_list["sid"]="";
    setcookie("login","",time()-3600);
    setcookie("sid","",time()-3600);   
 }
 
 $CookieTest = isset($_COOKIE["CookiesTest"]) ? $_COOKIE["CookiesTest"] : '';
 $HTTP_REFERER = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
 
 if ( ($CookieTest == 1)  || !strstr($HTTP_REFERER, $_SERVER['SERVER_NAME'].$objConfig->Get("Site_Path"))) {
 	$SessionQueryString = FALSE;
 }
 
 if ($FrontEnd != 1) {
 	$SessionQueryString = TRUE;
 }
 
 $objSession = new clsUserSession($var_list["sid"],($SessionQueryString && $FrontEnd==1));
 
 if($UseSession)
 {  
   if(!$objSession->ValidSession())
   { 
     /* Get rid of Invalid Session and make a brand new one*/
 //    echo "Dumping Session ".$var_list["sid"]."<br>";
     unset($var_list["sid"]);
 	$objSession->GetNewSession();
     	$var_list["sid"] = $objSession->GetSessionKey();
 	$var_list_update["sid"]=$objSession->GetSessionKey();
     if(is_numeric($m_var_list["theme"]))       
       $objSession->SetThemeName($m_var_list["theme"]);  
     if($objConfig->Get("CookieSessions")>0 && !$SessionQueryString && !headers_sent())
         setcookie("sid",$var_list["sid"]);
     //echo "New Session: ".$objSession->GetSessionKey()."<br>\n";
     if(isset($_COOKIE["login"]) && $Action != "m_logout" && $FrontEnd==1)
     {
         $parts = explode("|",$_COOKIE["login"]);
         $username = $parts[0];
         $pass = $parts[1];
         $objSession->Login($username,$pass);
     }
   }
   else
   { //echo "Update Session<br>";
     if($objSession->Get("Language")!=$m_var_list["lang"])
     {
       $objSession->Set("Language",$m_var_list["lang"]);
     }
     $objSession->LoadSessionData();
     $objSession->UpdateAccessTime(); 
     $objSession->Update();
     LoadEnv();
   }
 }
 
 if(is_numeric($var_list["t"]))
 {
 	if( !isset($CurrentTheme) ) $CurrentTheme = null;
   if(!is_object($CurrentTheme))
      $CurrentTheme = $objThemes->GetItem($m_var_list["theme"]);
   
   $var_list["t"] = $CurrentTheme->GetTemplateById($var_list["t"]);
   $objSession->Set("Theme",$CurrentTheme->Get("Name"));
 }
 /*create the global current user object */
 $UserID=$objSession->Get("PortalUserId");
 $objCurrentUser = new clsPortalUser($UserID);
 $objLanguageCache = new clsLanguageCache($m_var_list["lang"]);
 
 /* include each module's action.php script */
 LogEntry("Loading Module action scripts\n");
 
 ## Global Referer Template
 $_local_t = $var_list["t"];	
 
 if(is_array($mod_prefix))
 {
  foreach($mod_prefix as $key => $value)
  {
     if($FrontEnd==0 || !is_numeric($FrontEnd) || $FrontEnd==2)
     { 
 	  $rootURL="http://".ThisDomain().$objConfig->Get("Site_Path");
 	  $admin = $objConfig->Get("AdminDirectory");
 	  if(!strlen($admin))
     		$admin = "admin";
 	  $adminURL = $rootURL.$admin;
       $imagesURL = $adminURL."/images"; 	
       if(_ModuleLicensed($modules_loaded[$key]))
       {           	  
       	
         $mod = $pathtoroot.$value."module_init.php";
         if(file_exists($mod))
       	  require_once($mod);    	 
       	      	
         $mod = $pathtoroot . $value . "action.php";
         if(file_exists($mod))
           require_once($mod);  
 
         $mod = $pathtoroot . $value . "searchaction.php";
         if(file_exists($mod))
           require_once($mod);
       }
     }
     if($FrontEnd==1 || $FrontEnd==2)
     {
     	$mod = $pathtoroot.$value."module_init.php";
         if(file_exists($mod))
           require_once($mod);      	
         $mod = $pathtoroot . $value . "frontaction.php";
         if(file_exists($mod))
           require_once($mod);      
     }
   }
 }
 if( !isset($SearchPerformed) ) $SearchPerformed = false;
 if($SearchPerformed == true) $objSearch->BuildIndexes();
 LogEntry("Finished Loading Module action scripts\n");
 ?>

Property changes on: trunk/kernel/include/modules.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.3
\ No newline at end of property
+1.4
\ No newline at end of property
Index: trunk/admin/install.php
===================================================================
--- trunk/admin/install.php	(revision 88)
+++ trunk/admin/install.php	(revision 89)
@@ -1,1879 +1,1879 @@
 <?php
 error_reporting(0);
 
 //$new_version = '1.0.2';
 
 define("GET_LICENSE_URL", "http://www.intechnic.com/myaccount/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;
   }
 }
 
 if( file_exists($pathtoroot.'debug.php') ) include_once($pathtoroot.'debug.php');
 if( defined('DEBUG_MODE') )
 {
 	error_reporting(E_ALL & E_NOTICE);
 }
 else
 	error_reporting(0);
 
 $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 = isset($_GET["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);
+    $ini_vars = inst_parse_portal_ini($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", "");
+    set_ini_value("Modules", "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['SERVER_NAME'].$_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(strlen($g_DBType)>0 && 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);
 }
 
 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 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);
 	
 	$i = 0;
 	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 && str_replace('.', '', $file) > str_replace('.', '', $rs->fields['Version'])) {
 	        			//$sql = "SELECT Version FROM ".$g_TablePrefix."Modules WHERE Name = '".$p."'";
 	        			//$rs2 = $ado->Execute($sql);
 	        			if ($Modules[$i-1] == $rs->fields['Name']) {
 							$Texts[$i-1] = $rs->fields['Name']." (".$rs->fields['Version']." ".prompt_language("la_to")." ".$file.")";
 	        				//$Modules[] = $rs->fields['Name'];
 	        				$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 = "install/upgrade.php";
 }
 
 if ($state == "upgrade_process") {
     $ado = inst_GetADODBConnection();	
 	$mod_arr = $_POST['modules'];
 		
     foreach($mod_arr as $p)
     {
         $mod_name = strtolower($p);
         
 		$sql = "SELECT Version FROM ".$g_TablePrefix."Modules WHERE Name = '$p'";
 		$rs = $ado->Execute($sql);	
 
 		$current_version = $rs->fields['Version'];
         
     	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";
 			    	
 			    	if (str_replace('.', '', $try_version) > str_replace('.', '', $current_version)) {
     					$filename = $pathtoroot.$mod_name."/admin/install/upgrades/inportal_upgrade_v$try_version.sql";
 			        	//echo "Trying Version: $try_version<br>";
 			        	if(file_exists($filename))
 			       		{
 			    			RunSQLFile($ado, $filename);
-				      		set_ini_value("Module Versions", $p, $try_version);
+				      		set_ini_value("Modules", $p, $try_version);
 				      		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=="db_reconfig_save")
 {
-    $ini_vars = parse_ini_file($ini_file,TRUE);
+    $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 = "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);
+	           $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 = "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);
+    $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 = "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;
+    $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']);
+      	set_ini_value("Modules", "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 = $ado->qstr($PhraseTag->attributes["LABEL"]);
   								$Translation = $ado->qstr(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", $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, $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
   	  {
   	    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);
+				      	set_ini_value("Modules", $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'] != '') {
 		$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['SERVER_NAME'].$_POST['Site_Path'])."&modules=".base64_encode($modules_str)."&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 } ?>>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.15
\ No newline at end of property
+1.16
\ No newline at end of property
Index: trunk/admin/install/install_lib.php
===================================================================
--- trunk/admin/install/install_lib.php	(revision 88)
+++ trunk/admin/install/install_lib.php	(revision 89)
@@ -1,590 +1,628 @@
 <?php
 function minimum_php_version( $vercheck ) 
 {
   $minver = explode(".", $vercheck);
   $curver = explode(".", phpversion());
   if (($curver[0] < $minver[0])
      || (($curver[0] == $minver[0])
         && ($curver[1] < $minver[1]))
     || (($curver[0] == $minver[0]) && ($curver[1] == $minver[1])
        && ($curver[2][0] < $minver[2][0])))
        return false;
    else
        return true;
 } 
 
 
 function TableExists($ado, $tables)
 {
     global $g_TablePrefix;
 
     $t = explode(",",$tables);
     
     $i = $ado->MetaTables();
     for($x=0;$x<count($i);$x++)
         $i[$x] = strtolower($i[$x]);
 
     $AllFound = TRUE;
     for($tIndex=0;$tIndex<count($t);$tIndex++)
     {
         $table = $g_TablePrefix.$t[$tIndex];
         $table = strtolower($table);
         if(!in_array($table,$i))
         {
             $AllFound = FALSE;
         }
                 
     }
     return $AllFound;
 }
 
 function set_ini_value($section, $key, $newvalue)
 {     
    global $ini_vars;
    $ini_vars[$section][$key] = $newvalue;
 }
 
 function save_values()
 {
 	// Should write something to somwere, but it doesn't :(
   	global $ini_file,$ini_vars;
   	
   	//if( file_exists($ini_file) )
   	//{
   		$fp = fopen($ini_file, "w");
   		foreach($ini_vars as $secname => $section)
   		{
     		fwrite($fp,"[".$secname."]\n");
     		foreach($section as $key => $value) fwrite($fp,"$key = \"$value\"\n");
     		fwrite($fp,"\n");
   		}
   		fclose($fp);
 	//}
 }
 
 function RunSchemaFile($ado,$filename)
 {
     if(file_exists($filename))
     {    
       $fp = fopen($filename, "r");//open file
       $sql = fread($fp, filesize($filename));
       fclose($fp);
 	  if(strlen($sql))
 	    RunSchemaText($ado,$sql);
     }	
 }
 
 function RunSchemaText($ado,$sql)
 {
     global $g_TablePrefix;
     
       if(strlen($g_TablePrefix))
       { 
         $what = "CREATE TABLE ";
         $replace = "CREATE TABLE ".$g_TablePrefix;
         $sql = ereg_replace($what, $replace, $sql);
         
         $what = "DROP TABLE ";
         $replace = "DROP TABLE ".$g_TablePrefix;
         $sql = ereg_replace($what, $replace, $sql);
 
         $what = "INSERT INTO ";
         $replace = "INSERT INTO ".$g_TablePrefix;
         $sql = ereg_replace($what, $replace, $sql);
 
         $what = "UPDATE ";
         $replace = "UPDATE ".$g_TablePrefix;
         $sql = ereg_replace($what, $replace, $sql);
 
         $what = "ALTER TABLE ";
         $replace = "ALTER TABLE ".$g_TablePrefix;
         $sql = ereg_replace($what, $replace, $sql);
       }
       $commands = explode("# --------------------------------------------------------",$sql);
       if(count($commands)>0)
       {      
           for($i=0;$i<count($commands);$i++)
           {
               $cmd = $commands[$i];
               $cmd = trim($cmd);
               if(strlen($cmd)>0)
               {              
                 $ado->Execute($cmd);
                 if($ado->ErrorNo()!=0)
                 {
                   $db_error = $ado->ErrorMsg()." COMMAND:<PRE>$cmd</PRE>";
                   //echo "<br><p class=\"error\">$db_error</p>";
                   //break;
                 }
               }
           }
       }
 }
 
 function RunSQLText($ado,$allsql)
 {
 	global $g_TablePrefix;
 	
       $line = 0;
       while($line<count($allsql))
       {
         $sql = $allsql[$line];
         if(strlen(trim($sql))>0 && substr($sql,0,1)!="#")
         {  
             if(strlen($g_TablePrefix))
             { 
                 $what = "CREATE TABLE ";
                 $replace = "CREATE TABLE ".$g_TablePrefix;
                 $sql = ereg_replace($what, $replace, $sql);
 
                 $what = "DROP TABLE ";
                 $replace = "DROP TABLE ".$g_TablePrefix;
                 $sql = ereg_replace($what, $replace, $sql);
 
                 $what = "INSERT INTO ";
                 $replace = "INSERT INTO ".$g_TablePrefix;
                 $sql = ereg_replace($what, $replace, $sql);
 
                 $what = "UPDATE ";
                 $replace = "UPDATE ".$g_TablePrefix;
                 $sql = ereg_replace($what, $replace, $sql);
 
                 $what = "ALTER TABLE ";
                 $replace = "ALTER TABLE ".$g_TablePrefix;
                 $sql = ereg_replace($what, $replace, $sql);
             }
             $sql = trim($sql);
             if(strlen($sql)>0)
             {                          
               $ado->Execute($sql);
               if($ado->ErrorNo()!=0)
               {
                  $db_error = $ado->ErrorMsg()." COMMAND:<PRE>$sql</PRE>";
                  //echo "<br><p class=\"error\">$db_error</p>";
                  $error = TRUE;
               }
             }
         }
         $line++;
       }	
 }
 
 function RunSQLFile($ado,$filename)
 {
     if(file_exists($filename))
     {    
       $allsql = file($filename);
       RunSQLText($ado,$allsql);
     }
 }
 
 function RunRestoreFile($ado,$filename,$FileOffset,$MaxLines)
 {
   $size = filesize($filename);
   
   if($FileOffset > $size)
     return -2;	
     
   $fp = fopen($filename,"r");
   if(!$fp)
   	return -1;
   
   if($FileOffset>0)
   {
 	fseek($fp,$FileOffset);
   }
   else 
   {
   	$EndOfSQL = FALSE;
   	$sql = "";
   	while(!feof($fp) && !$EndOfSQL)
   	{
   		$l = fgets($fp,16384);
   		if(substr($l,0,11)=="INSERT INTO")
   		{
   		  $EndOfSQL = TRUE;
   		}
   		else
   		{
   		  $sql .= $l;
   		  $FileOffset = ftell($fp) - strlen($l);
   		}
   	}
   	if(strlen($sql))
   	{
 		RunSchemaText($ado,$sql);
   	}
   	fseek($fp,$FileOffset);
   }
   $LinesRead = 0;  
   $sql = "";
   $AllSql = array();
   while($LinesRead < $MaxLines && !feof($fp))
   {
   	$sql = fgets($fp, 16384);
   	if(strlen($sql))
   	{  		
   		$AllSql[] = $sql;
   		$LinesRead++;	
   	}
   }
   if(!feof($fp))
   {
   	$FileOffset = ftell($fp);  	
   }
   else
   {
     $FileOffset = $TotalSize;
   }  
   fclose($fp); 
   if(count($AllSql)>0)
     RunSQLText($ado,$AllSql);
   return (int)$FileOffset;  
 }	
 
 function inst_keyED($txt,$encrypt_key)
 {
  $encrypt_key = md5($encrypt_key);
  $ctr=0;
  $tmp = "";
  for ($i=0;$i<strlen($txt);$i++)
  {
      if ($ctr==strlen($encrypt_key)) $ctr=0;
         $tmp.= substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1); 
       $ctr++;
  }
  return $tmp;
 }
 
 
 function inst_decrypt($txt,$key)
 {
     $txt = inst_keyED($txt,$key);
     $tmp = ""; 
     for ($i=0;$i<strlen($txt);$i++) 
     {
         $md5 = substr($txt,$i,1);
         $i++;
         $tmp.= (substr($txt,$i,1) ^ $md5);
    }
     return $tmp; 
 } 
 
 function inst_LoadFromRemote()
 {
     return "";
 }
 
 function mod_DLid()
 {
     global $DownloadId;
     echo $DownloadId."\n";
     die();
 }
 
 function inst_LoadLicense($LoadRemote=FALSE,$file="")
 {
     global $path,$admin;
     
     if(!strlen($file))
     {    
       $f = $path.$admin."/include/inportal.dat";
     }
     else
         $f = $file;
     if(file_exists($f))
     {
         $contents = file($f);
         $data = base64_decode($contents[1]);
     }
     else
         if($LoadRemote)
             return $LoadFromRemote;   
    return $data;
 }
 
 function inst_SaveLicense($data)
 {
 
 }
 
 function inst_VerifyKey($domain,$k)
 {
     $key = md5($domain);
     $lkey = substr($key,0,strlen($key)/2);
     $rkey = substr($key,strlen($key)/2);
     $r = $rkey.$lkey;
     if($k==$r)
         return TRUE;
     return FALSE;
 }
 
 function inst_ParseLicense($txt)
 {
   global $i_User, $i_Pswd, $i_Keys;
 
   $data = inst_decrypt($txt,"beagle");
   $i_Keys = array();
   $lines = explode("\n",$data);
   for($x=0;$x<count($lines);$x++)
   {
       $l = $lines[$x];
       $p = explode("=",$l,2);
       switch($p[0])
       {
       case "Username":
           $i_User = $p[1];
       break;
       case "UserPass":
           $i_Pswd = $p[1];
       break;
       default:
         if(substr($p[0],0,3)=="key")
         {            
             $parts = explode("|",$p[1]);
             if(inst_VerifyKey($parts[0],$parts[1]))
             {
                 unset($K);
                 $k["domain"]=$parts[0];
                 $k["key"]=$parts[1];
                 $k["desc"]=$parts[2];
                 $k["mod"]=$parts[3];
                 $i_Keys[] = $k;         
             }
         }
       break;
       }
   }
 }
 
 function inst_IsLocalSite($domain)
 {
     $localb = FALSE;
     if(substr($domain,0,3)=="172")
     {
         $b = substr($domain,0,6);
         $p = explode(".",$domain);
         $subnet = $p[1];
         if($p[1]>15 && $p[1]<32)
             $localb=TRUE;
     }
     $localname = (strpos($domain,".")==0);
     if($domain=="localhost" || $domain=="127.0.0.1" || substr($domain,0,7)=="192.168" ||
        substr($domain,0,3)=="10." || $localb || $localname)
     {
         return TRUE;
     }
     return FALSE;
 }
 
 
 function inst_ModuleLicensed($name)
 {
     global $i_Keys, $objConfig, $g_License, $g_Domain;
 
     //$lic = LoadLicense();
     $lic = base64_decode($g_License);
     inst_ParseLicense($lic);
 //    echo "Checking $g_Domain..<br>\n";
 //    echo "<PRE>";print_r($i_Keys); echo "</PRE><br>";
     $modules = array();
     if(!inst_IsLocalSite($g_Domain))
     {    
         for($x=0;$x<count($i_Keys);$x++)
         {
             $key = $i_Keys[$x];
             if($key["domain"]==$g_Domain)            
             {
                 $modules = explode(",",strtolower($key["mod"]));
             }
         }    
         if(in_array($name,$modules))
 	{
 //	  echo "Module $name is licensed<br>\n";
             return TRUE;
 	}
 	else
  	{
 	 // echo "Module $name is not licensed<br>\n";
 	  return FALSE;
         }
     }
     else
         return TRUE;
 
     return FALSE;
 }
 
+function inst_parse_portal_ini($file, $parse_section = false) { 
+    if(!file_exists($file) && !is_readable($file))  
+        die('Could Not Open Ini File'); 
+     
+    $contents = file($file); 
+     
+    $retval = array(); 
+     
+    $section = ''; 
+    foreach($contents as $line) { 
+        $line = trim($line); 
+        $line = eregi_replace(';[.]*','',$line); 
+        if(strlen($line) > 0) { 
+            //echo $line . " - "; 
+            if(eregi('^[[a-z]+]$',$line)) { 
+                //echo 'section'; 
+                $section = substr($line,1,(strlen($line)-2)); 
+                if ($parse_section) {
+                	$retval[$section] = array(); 
+                }
+                continue;
+            } elseif(eregi('=',$line)) { 
+                //echo 'main element'; 
+                list($key,$val) = explode(' = ',$line); 
+                if (!$parse_section) {
+                	$retval[trim($key)] = str_replace('"', '', $val); 
+                }
+                else {
+					$retval[$section][trim($key)] = str_replace('"', '', $val);                 	
+                }
+            } //end if 
+            //echo '<br />'; 
+        } //end if 
+    } //end foreach 
+     
+    return $retval; 
+}
+
 function inst_GetModuleList()
 {
     global $rootpath,$pathchar,$admin, $pathtoroot;
 
     $path = $pathtoroot;
     
     $new = array();
     if ($dir = @opendir($path))
     {
       while (($file = readdir($dir)) !== false)
       {
        if($file !="." && $file !=".." && substr($file,0,1)!="_")
        {
            if(is_dir($path."/".$file))
            {
                $inst_file = $path.$file."/admin/install.php";
                if(file_exists($inst_file))
                {
 //                   if(inst_ModuleLicensed($file))
 //                   {               
                      $new[$file] = $inst_file;
 //                   }
                }
            }
        }
       }
       closedir($dir);
     }
     return array_keys($new);
 }
 
 function GetDirList ($dirName) 
 {  
     
     $filedates = array();
     $d = dir($dirName); 
 
     while($entry = $d->read()) 
     { 
         if ($entry != "." && $entry != "..") 
         { 
             if (!is_dir($dirName."/".$entry)) 
             {                 
                 $filedate[]=$entry;
             } 
         }  
     } 
     $d->close();    
     return $filedate;
 } 
 
 function GetLanguageList()
 {
 	global $pathtoroot, $admin;
 
 	$packs = array();
 	$dir = $pathtoroot.$admin."/install/langpacks";
 	$files = GetDirList($dir);
 	
 	if(is_array($files))
 	{
 	  foreach($files as $f)
   	  {
 		$p = pathinfo($f);
 		if($p["extension"]=="lang")
 		{
 			$packs[] = $f;
 		}
   	  }
 	}
 	return $packs;
 }
 
 function section_header($title, $return_result = false)
 {
 	$ret = '<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;'.$title.'</span>'.
 		 '</td><td align="right" class="tablenav" background="images/tabnav_back.jpg" width="100%">'.
 		 "<a class=\"link\" onclick=\"ShowHelp('in-portal:install');\"><img src=\"images/blue_bar_help.gif\" border=\"0\"></A>".
 		 '</td></tr></table>';
 	if( $return_result ) 
 		return $ret;
 	else
 		echo $ret;
 }
 
 function &VerifyDB($error_state, $next_state, $success_func = null, $db_must_exist = false)
 {    
 	// perform various check type to database specified
 	// 1. user is allowed to connect to database
 	// 2. user has all types of permissions in database
     global $state, $db_error;
     
     // enshure we use data from post & not from config
     $GLOBALS['g_DBType'] = $_POST["ServerType"];
 	$GLOBALS['g_DBHost'] = $_POST["ServerHost"];
 	$GLOBALS['g_DBName'] = $_POST["ServerDB"];
 	$GLOBALS['g_DBUser'] = $_POST["ServerUser"];
 	$GLOBALS['g_DBUserPassword'] = $_POST["ServerPass"];
     
     // connect to database
     $ado = inst_GetADODBConnection();
     if($ado->ErrorNo() != 0)
     {
         // was error while connecting
         $db_error = "Connection Error: (".$ado->ErrorNo().") ".$ado->ErrorMsg();
         $state = $error_state;
 
     }
     elseif( $ado->ErrorNo() == 0 )
     {
         // if connected, then check if all sql statements work
         $test_result = 1;
         
         $sql_tests[] = 'DROP TABLE IF EXISTS test_table';
         $sql_tests[] = 'CREATE TABLE test_table(test_col mediumint(6))';
         $sql_tests[] = 'INSERT INTO test_table(test_col) VALUES (5)';
         $sql_tests[] = 'UPDATE test_table SET test_col = 12';
         $sql_tests[] = 'ALTER TABLE test_table ADD COLUMN new_col varchar(10)';
         $sql_tests[] = 'SELECT * FROM test_table';
         $sql_tests[] = 'DELETE FROM test_table';
         $sql_tests[] = 'DROP TABLE test_table';
         
         foreach($sql_tests as $sql_test)
         {
         	$ado->Execute($sql_test);
         	if( $ado->ErrorNo()!=0 )
         	{
         		$test_result = 0;
         		break;	
         	}
         }
 
 		if($test_result == 1)
 		{
         	// if statements work & connection made, then check table existance
         	$db_exists = TableExists($ado,"ConfigurationAdmin,Category,Permissions");
         	if($db_exists != $db_must_exist)
         	{
         	    $state = $error_state;
         	    $db_error = $db_must_exist ? 'An In-Portal Database already exists at this location' : 'An In-Portal Database was not found at this location';
         	}
         	else
         	{
         	    $state = $next_state;
         	    if( isset($success_func) ) $success_func();
         	}
         }
         else
         {
         	 // user has insufficient permissions in database specified
         	 $db_error = "Permission Error: (".$ado->ErrorNo().") ".$ado->ErrorMsg();
         	 $state = $error_state;
         }
     }
     return $ado;
 }    
 
 function SaveDBConfig()
 {
 	// save new database configuration
 	echo "in_ere";
 	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();        	
 	$GLOBALS['include_file'] = 'install/install_finish.php';
 }
 
 ?>

Property changes on: trunk/admin/install/install_lib.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.3
\ No newline at end of property
+1.4
\ No newline at end of property
Index: trunk/globals.php
===================================================================
--- trunk/globals.php	(revision 88)
+++ trunk/globals.php	(revision 89)
@@ -1,1271 +1,1310 @@
 <?php
 
-$vars = parse_ini_file($pathtoroot."config.php");
+$vars = parse_portal_ini($pathtoroot."config.php");
 
 while($key = key($vars))
 {
   $key = "g_".$key;
   global $$key;
   $$key = current($vars); //variable variables
   next($vars);
 }
 
 /*list the tables which contain item data */
 $ItemTables = array();
 
 $KeywordIgnore = array();
 global $debuglevel;
 
 $debuglevel=0;
 $_GLOBALS["debuglevel"]=0;
 
 /*New, Hot, Pop field values */
 define('NEVER', 0);
 define('ALWAYS', 1);
 define('AUTO', 2);
 
 /*Status Values */
 define('STATUS_DISABLED', 0);
 define('STATUS_ACTIVE', 1);
 define('STATUS_PENDING', 2);
 
 $LogLevel=0;
 $LogFile = NULL;
 
+
+function parse_portal_ini($file, $parse_section = false) { 
+    if(!file_exists($file) && !is_readable($file))  
+        die('Could Not Open Ini File'); 
+     
+    $contents = file($file); 
+     
+    $retval = array(); 
+     
+    $section = ''; 
+    foreach($contents as $line) { 
+        $line = trim($line); 
+        $line = eregi_replace(';[.]*','',$line); 
+        if(strlen($line) > 0) { 
+            //echo $line . " - "; 
+            if(eregi('^[[a-z]+]$',$line)) { 
+                //echo 'section'; 
+                $section = substr($line,1,(strlen($line)-2)); 
+                if ($parse_section) {
+                	$retval[$section] = array(); 
+                }
+                continue;
+            } elseif(eregi('=',$line)) { 
+                //echo 'main element'; 
+                list($key,$val) = explode(' = ',$line); 
+                if (!$parse_section) {
+                	$retval[trim($key)] = str_replace('"', '', $val); 
+                }
+                else {
+					$retval[$section][trim($key)] = str_replace('"', '', $val);                 	
+                }
+            } //end if 
+            //echo '<br />'; 
+        } //end if 
+    } //end foreach 
+     
+    return $retval; 
+}
+
 function &GetADODBConnection()
 {
 	global $g_adodbConnection, $g_DBType, $g_DBHost,$g_DBUser,$g_DBUserPassword,$g_DBName,$g_DebugMode;
     global $ADODB_FETCH_MODE,$ADODB_COUNTRECS,$ADODB_CACHE_DIR,$pathtoroot; 
 	//echo '<pre>'.print_r( debug_backtrace() , true).'</pre>';
     if(!isset($g_adodbConnection) && strlen($g_DBType)>0)
     {
 		$g_adodbConnection = ADONewConnection($g_DBType);
 		$connected = $g_adodbConnection->Connect($g_DBHost,$g_DBUser,$g_DBUserPassword,$g_DBName);
         if(!$connected)
         {
             echo "Error connecting to database $g_DBHost <br>\n";
             die();
         }
         $ADODB_CACHE_DIR = $pathtoroot."cache"; 
         $ADODB_FETCH_MODE = 2;    
         $ADODB_COUNTRECS = FALSE; 
         $g_adodbConnection->debug = false;
         $g_adodbConnection->cacheSecs = 3600;
     }
     elseif (!strlen($g_DBType)) {
     	global $rootURL;
     	echo "In-Portal is probably not installed, or configuration file is missing.<br>";
 			echo "Please use the installation script to fix the problem.<br><br>";
 			if (!preg_match('/admin/', $_SERVER['SCRIPT_FILENAME'])) {
 				$ins = 'admin/'; 
 			}
 			echo "<a href='$rootURL".$ins."install.php'>Go to installation script</a><br><br>";
 			flush();
 			die();
     }
 	return $g_adodbConnection;
 }
 
 function GetNextResourceId($Increment=1)
 {
 	$sql = "UPDATE ".GetTablePrefix()."IdGenerator SET lastid=lastid+".$Increment;
     $adodbConnection = GetADODBConnection();
     $adodbConnection->Execute($sql);    
     $rs = $adodbConnection->Execute("SELECT lastid FROM ".GetTablePrefix()."IdGenerator");
     $val = $rs->fields["lastid"];
     if(!$rs || $rs->EOF)
     {   
     	echo $adodbConnection->ErrorMsg(); 
         $sql = "INSERT INTO ".GetTablePrefix()."IdGenerator (lastid) VALUES ($Increment)";
         $adodbConnection->Execute($sql);
         $val = 1;
     }
     $val = $val-($Increment-1); 
     return $val;
 }
 
 function AddSlash($s)
 {
     if(substr($s,-1) != "/")
     {
         return $s."/";
     }
     else
         return $s;
 }
 
 function StripNewline($s)
 {
 	$bfound = false;
 	while (strlen($s)>0 && !$bfound)
 	{
 		if(ord(substr($s,-1))<32)
 		{
 			$s = substr($s,0,-1);
 		}
 		else
 		  $bfound = true;
 	}
 	return $s;
 }
 
 function DeleteElement($array, $indice) 
 {
   for($i=$indice;$i<count($array)-1;$i++) 
         $array[$i] = $array[$i+1]; 
   unset($array[count($array)-1]);
   return $array;
 }
 
 function DeleteElementValue($needle, &$haystack) 
 {
   while(($gotcha = array_search($needle,$haystack)) > -1)
    unset($haystack[$gotcha]);
 }	
 
 function TableCount($TableName, $where="",$JoinCats=1)
 {
     $db = GetADODBConnection();
     if(!$JoinCats)
     {    
       $sql = "SELECT count(*) as TableCount FROM $TableName";
     }
     else
         $sql = "SELECT count(*) as TableCount FROM $TableName INNER JOIN ".GetTablePrefix()."CategoryItems ON ".GetTablePrefix()."CategoryItems.ItemResourceId=$TableName.ResourceId";
     if(strlen($where)>0)
         $sql .= " WHERE ".$where;
     $rs = $db->Execute($sql);
         
 //    echo "SQL TABLE COUNT: ".$sql."<br>\n";
     
     $res = $rs->fields["TableCount"];
     return $res;
 }
 
 Function QueryCount($sql)
 {
   $countsql = "SELECT count(*) as TableCount ".substr($sql,strpos($sql," FROM "));
   if(strpos($countsql,"LIMIT"))
     $countsql = substr($countsql,0,strpos($countsql,"LIMIT"));
   if(strpos($countsql,"ORDER BY"))
     $countsql = substr($countsql,0,strpos($countsql,"ORDER BY"));
     
   $db = GetADODBConnection();
   $rs = $db->Execute($countsql);
   //echo $countsql."<br>\n";
   $res = $rs->fields["TableCount"];
   return $res;  
 }
     
 function GetPageCount($ItemsPerPage,$NumItems)
 {
  if($ItemsPerPage==0 || $NumItems==0)
  {
    return 1;
  }            
  $value = $NumItems/$ItemsPerPage;
  return ceil($value);        
 }
 
 
 function GetTablePrefix()
 {
     global $g_TablePrefix;
 
     return $g_TablePrefix;
 }
 
 function TableHasPrefix($t)
 {
 	$pre = GetTablePrefix();
 	
 	if(strlen($pre)>0)
 	{
 		if(substr($t,0,strlen($pre))==$pre)
 		{
 			return TRUE;
 		}
 		else 
 		  return FALSE;
 	}
 	else
 	  return TRUE;
 }
 
 function AddTablePrefix($t)
 {
 	if(!TableHasPrefix($t))
 	  $t = GetTablePrefix().$t;
 	  
 	return $t;
 }
 
 function ThisDomain()
 {
 	global $objConfig, $g_Domain;
 	
 	if($objConfig->Get("DomainDetect"))
 	{
 		$d = $_SERVER['HTTP_HOST'];
 	}
 	else
 	  $d = $g_Domain;
 	  
 	return $d;
 }
 
 function GetIndexUrl($secure=0)
 {
     global $indexURL, $rootURL, $secureURL;
     
     switch($secure)
     {
     	case 0:
     		$ret = $indexURL;
     	break;
     	case 1:
     		$ret = $secureURL."index.php";    		
     	break;	
     	case 2:
     		$ret = $rootURL."index.php";
     	break;
     	default:
     		$ret = $i;    	
     }					
     return $ret;
 }
 
 function GetLimitSQL($Page,$PerPage)
 {
   if($Page<1)
     $Page=1;
 
   if(is_numeric($PerPage))
   {
   	  if($PerPage==0)  	  
   	    $PerPage = 20;
       $Start = ($Page-1)*$PerPage;
       $limit = "LIMIT ".$Start.",".$PerPage;
   }
   else
       $limit = NULL;
   return $limit;
 }
 
 function filelist ($currentdir, $startdir=NULL,$ext=NULL) 
 {
   global $pathchar;
 
   //chdir ($currentdir);
 
   // remember where we started from
   if (!$startdir) 
   {
       $startdir = $currentdir;
   }
 
   $d = @opendir($currentdir);
 
   $files = array();
   if(!$d)
     return $files;  
   //list the files in the dir
   while (false !== ($file = readdir($d))) 
   {
       if ($file != ".." && $file != ".") 
       {
           if (is_dir($currentdir."/".$file)) 
           {
               // If $file is a directory take a look inside
               $a = filelist ($currentdir."/".$file, $startdir,$ext); 
               if(is_array($a))
                 $files = array_merge($files,$a);
           } 
           else 
           {
               if($ext!=NULL)
               {
                   $extstr = stristr($file,".".$ext);
                   if(strlen($extstr))
                       $files[] = $currentdir."/".$file;
               }
               else
                 $files[] = $currentdir.'/'.$file;
           }
       }
   }
 
   closedir ($d);
 
   return $files;
 }        
 
 function DecimalToBin($dec,$WordLength=8)
 {
   $bits = array();
   
   $str = str_pad(decbin($dec),$WordLength,"0",STR_PAD_LEFT);
   for($i=$WordLength;$i>0;$i--)
   {
       $bits[$i-1] = (int)substr($str,$i-1,1);
   }
   return $bits;
 }
 
 function inp_escape($in, $html_enable=0)
 {
 	$out = stripslashes($in);
 	$out = str_replace("\n", "\n^br^", $out);
 	if($html_enable==0)
 	{
 		$out=ereg_replace("<","&lt;",$out);
 		$out=ereg_replace(">","&gt;",$out);
 		$out=ereg_replace("\"","&quot;",$out);
 		$out = str_replace("\n^br^", "\n<br />", $out);
 	}	
 	else
 		$out = str_replace("\n^br^", "\n", $out);
 	$out=addslashes($out);
 
 	return $out;
 }
 
 function inp_unescape($in)
 {
 	$out=stripslashes($in);
 
 	return $out;
 }
 
 function inp_textarea_unescape($in)
 {
 	$out=stripslashes($in);
 	$out = str_replace("\n<br />", "\n", $out);
 	return $out;
 }
 
 function HighlightKeywords($Keywords, $html, $OpenTag="", $CloseTag="")
 {
     global $objConfig;
 
     if(!strlen($OpenTag))
         $OpenTag = "<B>";
     if(!strlen($CloseTag))
             $CloseTag = "</B>";	
 	
    	$r = preg_split('((>)|(<))', $html, -1, PREG_SPLIT_DELIM_CAPTURE);
    	
    	foreach ($Keywords as $k) {	   	
 	   	for ($i = 0; $i < count($r); $i++) {
 	       if ($r[$i] == "<") {
 	           $i++; continue;
 	       }
 	       $r[$i] = preg_replace("/($k)/i", "$OpenTag\\1$CloseTag", $r[$i]);
 	    }
    	}
    	return join("", $r);
 }
 
 /*
 function HighlightKeywords($Keywords,$html, $OpenTag="", $CloseTag="")
 {
     global $objConfig;
 
     if(!strlen($OpenTag))
         $OpenTag = "<B>";
     if(!strlen($CloseTag))
             $CloseTag = "</B>";
     $ret = strip_tags($html);
 
     foreach ($Keywords as $k)
     {   
         if(strlen($k))
         {        
           //$html = str_replace("<$k>", ":#:", $html);
           //$html = str_replace("</$k>", ":##:", $html);
           //$html = strip_tags($html);
           if ($html = preg_replace("/($k)/Ui","$OpenTag\\1$CloseTag", $html))
           //if ($html = preg_replace("/(>[^<]*)($k)([^<]*< )/Ui","$OpenTag\\1$CloseTag", $html))
             $ret = $html;
           //$ret = str_replace(":#:", "<$k>", $ret);
           //$ret = str_replace(":##:", "</$k>", $ret);
         }
     }
     return $ret;        
 }
 */
 function ExtractDatePart($part,$datestamp)
 {
     switch($part)
     {
         case "month":
             if($datestamp<=0)
             {                        
                 $ret = "";
             }
             else
               $ret = adodb_date("m",$datestamp);
         break;		
         case "day":
             if($datestamp<=0)
             {                        
                 $ret = "";
             }
             else
                 $ret = adodb_date("d", $datestamp);
         break;		
         case "year":
             if($datestamp<=0)
             {                        
                 $ret = "";
             }
             else
                 $ret = adodb_date("Y", $datestamp);
         break;
         case "time_24hr":
             if($datestamp<=0)
             {                        
                 $ret = "";
             }
             else
                 $ret = adodb_date("H:i", $datestamp);
         break;
         case "time_12hr":
             if($datestamp<=0)
             {
                 $ret = "";
             }
             else
                 $ret = adodb_date("g:i a",$datestamp);
        break;
      }
     return $ret;
 }
 
 function GetLocalTime($TimeStamp,$TargetZone=NULL)
 {
     if($TargetZone==NULL)
         $TargetZone = $objConfig->Get("Config_Site_Time");   
     $server = $objConfig->Get("Config_Server_Time");
     if($TargetZone!=$server)
     {    
       $offset = ($server - $TargetZone) * -1;
       $TimeStamp = $TimeStamp + (3600 * $offset);
     }
     return $TimeStamp;
 }
 
 function _unhtmlentities ($string)
 {
     $trans_tbl = get_html_translation_table (HTML_ENTITIES);
     $trans_tbl = array_flip ($trans_tbl);
     return strtr ($string, $trans_tbl);
 }
 
 function getLastStr($hay, $need){
   $getLastStr = 0;
   $pos = strpos($hay, $need);
   if (is_int ($pos)){ //this is to decide whether it is "false" or "0"
    while($pos) {
      $getLastStr = $getLastStr + $pos + strlen($need);
      $hay = substr ($hay , $pos + strlen($need));
      $pos = strpos($hay, $need);
    }
    return $getLastStr - strlen($need);
   } else {
    return -1; //if $need wasn´t found it returns "-1" , because it could return "0" if it´s found on position "0".
   }
 } 
 
 function ReplaceSingleTag($tag,$text)
 {
   $opentag = "[".$tag;
   $closetag = "[/".$tag."]";
   
   if(strstr($text,$opentag))
   {   
     $pos = strpos($text,$opentag." ");
     if($pos === false)
     {
         $pos = strpos($text,$opentag."]");
     }
     $endopen = strpos($text,"]",$pos);
     $closepos = strpos($text,$closetag,$pos);
     
     if($closepos)
     {
         $taglength = ($closepos - $endopen) + strlen($closetag);
         $tagText = substr($text,$pos, $closepos + strlen($closetag) - $pos);       
         $innerText = substr($text,$endopen+1,$closepos - $endopen-1);
         if($tag=="UL")
             $innerText = str_replace("[*]","<LI>",$innerText);
         $tagText = substr($tagText,1,($endopen - $pos)-1);   
         //echo "Matched $tagText <br>\n";
         $tagText = "<".$tagText.">";
         $replace_text = $tagText.$innerText."</".$tag.">";
         $text = substr($text,0,$pos).$replace_text.substr($text,$closepos+strlen($closetag));
         return $text;
     }
     else
         return $text;
   }
   else
       return $text;
 }
 
 function ReplaceTag($tag,$text)
 {
   $new_text = ReplaceSingleTag($tag,$text);
   
   while($new_text != $text)
   {
       $text = $new_text;
       $new_text = ReplaceSingleTag($tag,$text);
   }
   return $new_text;
 }
 
 function ReplaceURL($text)
 {  
   while(strstr($text,"[URL"))
   {
     $urlpos = strpos($text,"[URL");
     $endopen = strpos($text,"]",$urlpos);
     if($endopen)
     {
         $url = "<A TARGET=\"_blank\"".substr($text,$urlpos+4,$endopen - ($urlpos+4));
         $url .= ">";
         $url = _unhtmlentities($url);
         $text = substr($text,0,$urlpos).$url.substr($text,$endopen+1);
     }
   }
   $text = str_replace("[/URL]","</A>",$text);
   return $text;
 }
 
 
 function ReplaceBBCode($text)
 {
   global $objConfig;
 
   $tags = explode(",",$objConfig->Get("BBTags"));
   for($i=0;$i<count($tags);$i++)
   {    
     $text = ReplaceTag(strtoupper($tags[$i]),$text);
   }
   $text = ReplaceURL($text);
   return $text;
 }
 
 function GetMinValue($Table,$Field, $Where=NULL)
 {
     $ret = 0;
     $sql = "SELECT min($Field) as val FROM $Table ";
     if(strlen($where))
         $sql .= "WHERE $Where";
     $ado = GetADODBConnection();
     $rs = $ado->execute($sql);
     if($rs)
         $ret = (int)$rs->fields["val"];
     return $ret;
 }
 
 function getmicrotime()
 { 
     list($usec, $sec) = explode(" ",microtime()); 
     return ((float)$usec + (float)$sec); 
 } 
 
 function SetMissingDataErrors($f)
 {
     global $FormError;
 
     $count = 0;
     if(is_array($_POST))
     {    
       if(is_array($_POST["required"]))
       {      
         foreach($_POST["required"] as $r)
         {
           $found = FALSE;
           if(is_array($_FILES))
           {
             if($_FILES[$r]["size"]>0)
                 $found=TRUE;
           }
         
           if(!strlen(trim($_POST[$r])) && !$found)
           {           
             $count++;
             
             if (($r == "dob_day") || ($r == "dob_month") || ($r == "dob_year"))
             	$r = "dob";            	
             	
             $tag = $_POST["errors"][$r];
             if(!strlen($tag))
               $tag = "lu_ferror_".$f."_".$r; 
             $FormError[$f][$r] = language($tag);
           }
         }
       }
     }
     return $count;
 }
 
 function makepassword($length=10)
 {
   $pass_length=$length; 
 
   $p1=array('b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z');
   $p2=array('a','e','i','o','u'); 
   $p3=array('1','2','3','4','5','6','7','8','9');   
   $p4=array('(','&',')',';','%');    // if you need real strong stuff 
 
   // how much elements in the array 
   // can be done with a array count but counting once here is faster 
 
   $s1=21;// this is the count of $p1    
   $s2=5; // this is the count of $p2 
   $s3=9; // this is the count of $p3 
   $s4=5; // this is the count of $p4 
 
   // possible readable combinations 
 
   $c1='121';    // will be like 'bab' 
   $c2='212';      // will be like 'aba' 
   $c3='12';      // will be like 'ab' 
   $c4='3';        // will be just a number '1 to 9'  if you dont like number delete the 3 
 // $c5='4';        // uncomment to active the strong stuff 
 
   $comb='4'; // the amount of combinations you made above (and did not comment out) 
 
 
 
   for ($p=0;$p<$pass_length;) 
   { 
     mt_srand((double)microtime()*1000000); 
     $strpart=mt_rand(1,$comb); 
     // checking if the stringpart is not the same as the previous one 
     if($strpart<>$previous) 
     { 
       $pass_structure.=${'c'.$strpart}; 
 
       // shortcutting the loop a bit 
       $p=$p+strlen(${'c'.$strpart}); 
     } 
     $previous=$strpart; 
   } 
 
 
   // generating the password from the structure defined in $pass_structure 
   for ($g=0;$g<strlen($pass_structure);$g++) 
   { 
     mt_srand((double)microtime()*1000000); 
     $sel=substr($pass_structure,$g,1); 
     $pass.=${'p'.$sel}[mt_rand(0,-1+${'s'.$sel})]; 
 
   } 
   return $pass; 
 }
 
 function LogEntry($text,$writefile=FALSE)
 {
   global $g_LogFile,$LogFile, $LogData, $LogLevel, $timestart;
   
   static $last;
 
   if(strlen($g_LogFile))
   { 
     $el = str_pad(getmicrotime()- $timestart,10," "); 
     if($last>0)
       $elapsed = getmicrotime() - $last; 
       
     if(strlen($el)>10)
         $el = substr($el,0,10);      
     $indent = str_repeat("  ",$LogLevel);
     $text = str_pad($text,$LogLevel,"==",STR_PAD_LEFT);
     $LogData .= "$el:". round($elapsed,6).":$indent $text";
     $last = getmicrotime();
     if($writefile==TRUE && is_writable($g_LogFile))
     {
       if(!$LogFile)       
       {
          if(file_exists($g_LogFile))
             unlink($g_LogFile);
         $LogFile=@fopen($g_LogFile,"w");
       }
       if($LogFile)
       {    
         fputs($LogFile,$LogData);
       }
     }
   }
 }
 
 function ValidEmail($email) 
 {
     if (eregi("^[a-z0-9]+([-_\.]?[a-z0-9])+@[a-z0-9]+([-_\.]?[a-z0-9])+\.[a-z]{2,4}", $email))
     {
         return TRUE;
     } 
     else 
     {
         return FALSE;
     }
 } 
 
 function language($phrase,$LangId=0)
 {
     global $objSession, $objLanguageCache, $objLanguages;
 
     if($LangId==0)
         $LangId = $objSession->Get("Language");
         
 	if($LangId==0)
       $LangId = $objLanguages->GetPrimary();        
 
     $translation = $objLanguageCache->GetTranslation($phrase,$LangId);
 
     return $translation;
 }
 
 function admin_language($phrase,$lang=0,$LinkMissing=FALSE)
 {
     global $objSession, $objLanguageCache, $objLanguages;
     
 	//echo "Language passed: $lang<br>";
 	
     if($lang==0)
        $lang = $objSession->Get("Language");
 
     //echo "Language from session: $lang<br>";
     
 	if($lang==0)
       $lang = $objLanguages->GetPrimary();   
 	
     //echo "Language after primary: $lang<br>";
     //echo "Phrase: $phrase<br>";
 	$translation = $objLanguageCache->GetTranslation($phrase,$lang);
     if($LinkMissing && substr($translation,0,1)=="!" && substr($translation,-1)=="!")
     {    	
     	$res = "<A href=\"javascript:OpenPhraseEditor('&direct=1&label=$phrase'); \">$translation</A>";
     	return $res;
     }
     else
     	return $translation;
 }
 
 function prompt_language($phrase,$lang=0)
 {
   return admin_language($phrase,$lang,TRUE);	
 }
 
 function GetPrimaryTranslation($Phrase)
 {
 	global $objLanguages;
 
 	$l = $objLanguages->GetPrimary();
 	return language($Phrase,$l);
 }
 
 function CategoryNameCount($ParentId,$Name)
 {
 	$cat_table = GetTablePrefix()."Category";
 	$sql = "SELECT Name from $cat_table WHERE ParentId=$ParentId AND ";
 	$sql .="(Name LIKE '".addslashes($Name)."' OR Name LIKE 'Copy of ".addslashes($Name)."' OR Name LIKE 'Copy % of ".addslashes($Name)."')";
 
 	$ado = GetADODBConnection();
 	$rs = $ado->Execute($sql);
 	$ret = array();
 	while($rs && !$rs->EOF)
 	{
 		$ret[] = $rs->fields["Name"];
 		$rs->MoveNext();
 	}
    	return $ret;
 }	
 
 function CategoryItemNameCount($CategoryId,$Table,$Field,$Name)
 {
 	$cat_table = GetTablePrefix()."CategoryItems";
 	$sql = "SELECT $Field FROM $Table INNER JOIN $cat_table ON ($Table.ResourceId=$cat_table.ItemResourceId) ";
 	$sql .=" WHERE ($Field LIKE 'Copy % of $Name' OR $Field LIKE '$Name' OR $Field LIKE 'Copy of $Name') AND CategoryId=$CategoryId";
 	//echo $sql."<br>\n ";
 	$ado = GetADODBConnection();
 	$rs = $ado->Execute($sql);
 	$ret = array();
 	while($rs && !$rs->EOF)
 	{
 		$ret[] = $rs->fields[$Field];
 		$rs->MoveNext();
 	}
    	return $ret;   	
 }
 
 function &GetItemCollection($ItemName)
 {
   global $objItemTypes;
 
   if(is_numeric($ItemName))
   {
   	$item = $objItemTypes->GetItem($ItemName);
   }
   else
     $item = $objItemTypes->GetTypeByName($ItemName);
   if(is_object($item))
   {
   	$module = $item->Get("Module");
   	$prefix = ModuleTagPrefix($module);
   	$func = $prefix."_ItemCollection";
   	if(function_exists($func))
   	{
   	  $var =& $func();
   	}
   }
   return $var;
 }
 
 	  
 function UpdateCategoryCount($ItemTypeName=0,$ListType=NULL)
 {
 	global $objCountCache, $objItemTypes;
 
   if(is_numeric($ItemName))
   {
   	$item = $objItemTypes->GetItem($ItemName);
   }
   else
     $item = $objItemTypes->GetTypeByName($ItemName);
   if(is_object($item))
   {	
   	$ItemType  = $item->Get("ItemType");
   	
 	$sql = "DELETE FROM ".$objCountCache->SourceTable." WHERE ItemType=$ItemType";
 	if(is_numeric($ListType))
 	{
 		$sql .= " AND ListType=$ListType";
 	}
 	$objCountCache->adodbConnection->Execute($sql);
   }  
 }
 
 function UpdateModifiedCategoryCount($ItemTypeName,$CatId=NULL,$Modifier=0,$ExtraId=NULL)
 {
 }
 
 function UpdateGroupCategoryCount($ItemTypeName,$CatId=NULL,$Modifier=0,$GroupId=NULL)
 {
 }
 
 function GetTagCache($module,$tag,$attribs,$env)
 {
     global $objSystemCache, $objSession, $objConfig;
 
     if($objConfig->Get("SystemTagCache"))
     { 
         $name = $tag;
         if(is_array($attribs))
         {    
             foreach($attribs as $n => $val)
             {    
                 $name .= "-".$val;
             }
         }
         $CachedValue = $objSystemCache->GetContextValue($name,$module,$env, $objSession->Get("GroupList"));
     }
     else
         $CachedValue="";
     return $CachedValue;
 }
 
 function SaveTagCache($module, $tag, $attribs, $env, $newvalue)
 {
     global $objSystemCache, $objSession, $objConfig;
 
     if($objConfig->Get("SystemTagCache"))
     {    
         $name = $tag;
         if(is_array($attribs))
         {    
             foreach($attribs as $a => $val)
             {    
                 $name .= "-".$val;
             }
         }
         $objSystemCache->EditCacheItem($name,$newvalue,$module,0,$env,$objSession->Get("GroupList"));
     }
 }
 
 function DeleteTagCache($name,$extraparams, $env="")
 {
     global $objSystemCache, $objConfig;
 
     if($objConfig->Get("SystemTagCache"))
     { 
         $where = "Name LIKE '$name%".$extraparams."'";
         if(strlen($env))
             $where .= " AND Context LIKE $env";
         $objSystemCache->DeleteCachedItem($where);
     }
 }
 
 function ParseTagLibrary()
 {
 	$objTagList = new clsTagList();
 	$objTagList->ParseInportalTags();
 	unset($objTagList);
 }
 
 function GetDateFormat($LangId=0)
 {
   global $objLanguages;	
   
   if(!$LangId)
     $LangId= $objLanguages->GetPrimary();
   $l = $objLanguages->GetItem($LangId);	
   if(is_object($l))
   {
   	$fmt = $l->Get("DateFormat");
   }
   else
     $fmt = "m-d-Y";
   return $fmt;	
 }
 
 function GetTimeFormat($LangId=0)
 {
   global $objLanguages;	
   
   if(!$LangId)
     $LangId= $objLanguages->GetPrimary();
   $l = $objLanguages->GetItem($LangId);	
   if(is_object($l))
   {
   	$fmt = $l->Get("TimeFormat");
   }
   else
     $fmt = "H:i:s";
   return $fmt;	
 }
 
 function LangDate($TimeStamp=NULL,$LangId=0)
 {  
   $fmt = GetDateFormat($LangId);
   $ret = adodb_date($fmt,$TimeStamp);
   return $ret;
 }
 
 function LangTime($TimeStamp=NULL,$LangId=0)
 { 
   $fmt = GetTimeFormat($LangId);
   $ret = adodb_date($fmt,$TimeStamp);
   return $ret;
 }
 
 function LangNumber($Num,$DecPlaces=NULL,$LangId=0)
 {
 	global $objLanguages;
 	
   if(!$LangId)
     $LangId= $objLanguages->GetPrimary();
   $l = $objLanguages->GetItem($LangId);	
   if(is_object($l))
   {
   	$ret = number_format($Num,$DecPlaces,$l->Get("DecimalPoint"),$l->Get("ThousandSep"));
   }
   else 
     $ret = $num;
     
   return $ret;	
 }
 
 function replacePngTags($x, $spacer="images/spacer.gif")
 {
 	global $rootURL,$pathtoroot;
 	
     // make sure that we are only replacing for the Windows versions of Internet
     // Explorer 5+, and not Opera identified as MSIE
     $msie='/msie\s([5-9])\.?[0-9]*.*(win)/i';
     $opera='/opera\s+[0-9]+/i';
     if(!isset($_SERVER['HTTP_USER_AGENT']) ||
         !preg_match($msie,$_SERVER['HTTP_USER_AGENT']) ||
         preg_match($opera,$_SERVER['HTTP_USER_AGENT']))
         return $x;
     
     // find all the png images in backgrounds
     preg_match_all('/background-image:\s*url\(\'(.*\.png)\'\);/Uis',$x,$background);
     for($i=0;$i<count($background[0]);$i++){
         // simply replace:
         //  "background-image: url('image.png');"
         // with:
         //  "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(
         //      enabled=true, sizingMethod=scale src='image.png');"
         // haven't tested to see if background-repeat styles work...
         $x=str_replace($background[0][$i],'filter:progid:DXImageTransform.'.
                 'Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale'.
                 ' src=\''.$background[1][$i].'\');',$x);
     }
 
     // OK, time to find all the IMG tags with ".png" in them
     preg_match_all('/(<img.*\.png.*>|<input.*type=([\'"])image\\2.*\.png.*>)/Uis',$x,$images);
     while(list($imgnum,$v)=@each($images[0])){
         $original=$v;
         $atts=''; $width=0; $height=0;
         // If the size is defined by styles, find
         preg_match_all('/style=".*(width: ([0-9]+))px.*'.
                         '(height: ([0-9]+))px.*"/Ui',$v,$arr2);
         if(is_array($arr2) && count($arr2[0])){
             // size was defined by styles, get values
             $width=$arr2[2][0];
             $height=$arr2[4][0];
         }
         // size was not defined by styles, get values
         preg_match_all('/width=\"?([0-9]+)\"?/i',$v,$arr2);
         if(is_array($arr2) && count($arr2[0])){
             $width=$arr2[1][0];
         }
         preg_match_all('/height=\"?([0-9]+)\"?/i',$v,$arr2);
         if(is_array($arr2) && count($arr2[0])){
             $height=$arr2[1][0];
         }
         preg_match_all('/src=\"([^\"]+\.png)\"/i',$v,$arr2);
         if(isset($arr2[1][0]) && !empty($arr2[1][0]))
             $image=$arr2[1][0];
         else
             $image=NULL;
 
         // We do this so that we can put our spacer.gif image in the same
         // directory as the image
         $tmp=split('[\\/]',$image);
         array_pop($tmp);
         $image_path=join('/',$tmp);
            if(substr($image,0,strlen($rootURL))==$rootURL)
            {
           		$path = str_replace($rootURL,$pathtoroot,$image);
            }
           else
           {
         		$path = $pathtoroot."themes/telestial/$image";
           }	
 //        echo "Sizing $path.. <br>\n";
 //        echo "Full Tag: ".htmlentities($image)."<br>\n";        
         //if(!$height || !$width)
         //{
 
           $g = imagecreatefrompng($path);
           if($g)
           {
           	$height = imagesy($g);
           	$width = imagesx($g);
           }	
         //}
         if(strlen($image_path)) $image_path.='/';
 
         // end quote is already supplied by originial src attribute
         $replace_src_with=$spacer.'" style="width: '.$width.
             'px; height: '.$height.'px; filter: progid:DXImageTransform.'.
             'Microsoft.AlphaImageLoader(src=\''.$image.'\', sizingMethod='.
             '\'scale\')';
         
         // now create the new tag from the old
         $new_tag=str_replace($image,$replace_src_with,$original);
         
         // now place the new tag into the content
         $x=str_replace($original,$new_tag,$x);
     }
     return $x;
 }
 
 function print_pre($str)
 {
 	// no comments here :)
 	echo '<pre>'.print_r($str, true).'</pre>';
 }
 
 function GetOptions($field) // by Alex
 {
 	// get dropdown values from custom field
 	$tmp =& new clsCustomField();
 	
 	$tmp->LoadFromDatabase($field, 'FieldName');
 	$tmp_values = $tmp->Get('ValueList');
 	unset($tmp);
 	$tmp_values = explode(',', $tmp_values);
 	
 	foreach($tmp_values as $mixed)
 	{
 		$elem = explode('=', trim($mixed));
 		$ret[ $elem[0] ] = $elem[1];
 	}
 	return $ret;
 }
 
 function ResetPage($module_prefix, $page_variable = 'p')
 {
 	// resets page in specific module when category is changed	
 	if(!is_object($objSession)) // when changing pages session doesn't exist -> InPortal BUG
 	{
 		global $var_list, $SessionQueryString, $FrontEnd;
 		//if(!$var_list["sid"]) $var_list["sid"] = $_COOKIE["sid"];
 		$objSession = new clsUserSession($var_list["sid"],($SessionQueryString && $FrontEnd==1));
 	}
 	//echo "SID_RESET: ".$GLOBALS['var_list']["sid"].'(COOKIE_SID: '.$_COOKIE["sid"].')<br>';
 	$last_cat = $objSession->GetVariable('last_category');
 	$prev_cat = $objSession->GetVariable('prev_category');
 	//echo "Resetting Page [$prev_cat] -> [$last_cat]<br>";
 	
 	if($prev_cat != $last_cat) $GLOBALS[$module_prefix.'_var_list'][$page_variable] = 1;
 }
 
 function GetVar($name)
 {
 	return isset($_REQUEST[$name]) ? $_REQUEST[$name] : false;
 }
 
 function PassVar(&$source)
 {
 	// source array + any count of key names in passed array	
 	$params = func_get_args();
 	array_shift($params);
 	
 	if( count($params) )
 	{
 		$ret = Array();
 		foreach($params as $var_name)
 			if( isset($source[$var_name]) )
 				$ret[] = $var_name.'='.$source[$var_name];
 		$ret = '&'.implode('&', $ret);
 	}
 	return $ret;
 }
 
 function GetSubmitVariable(&$array, $postfix)
 {
 	// gets edit status of module
 	// used in case if some modules share
 	// common action parsed by kernel parser,
 	// but each module uses own EditStatus variable
 	
 	$modules = Array('In-Link' => 'Link', 'In-News' => 'News', 'In-Bulletin' => 'Topic');
 	foreach($modules as $module => $prefix)
 		if( isset($array[$prefix.$postfix]) )
 			return Array('Module' => $module, 'variable' => $array[$prefix.$postfix]);
 	return false;
 }
 
 function GetModuleByAction()
 {
 	$prefix2module = Array('m' => 'In-Portal', 'l' => 'In-Link', 'n' => 'In-News', 'bb' => 'In-Bulletin');
 	$action = $_REQUEST['Action'];
 	$module_prefix = explode('_', $action);
 	return $prefix2module[ $module_prefix[0] ];
 }
 
 function dir_size($dir) {
    // calculates folder size based on filesizes inside it (recursively)
    $totalsize=0;
    if ($dirstream = @opendir($dir)) {
        while (false !== ($filename = readdir($dirstream))) {
            if ($filename!="." && $filename!="..")
            {
                if (is_file($dir."/".$filename))
                    $totalsize+=filesize($dir."/".$filename);
                
                if (is_dir($dir."/".$filename))
                    $totalsize+=dir_size($dir."/".$filename);
            }
        }
    }
    closedir($dirstream);
    return $totalsize;
 } 
 
 function size($bytes) {
   // shows formatted file/directory size
   $types =  Array("la_bytes","la_kilobytes","la_megabytes","la_gigabytes","la_terabytes");
    $current = 0;
   while ($bytes > 1024) {
    $current++;
    $bytes /= 1024;
   }
   return round($bytes,2)." ".language($types[$current]);
 } 
 
 function echod($str)
 {
 	// echo debug output
 	echo str_replace( Array('[',']'), Array('[<b>', '</b>]'), $str).'<br>';	
 }
 
 
 function PrepareParams($source, $to_lower, $mapping)
 {
 	// prepare array with form values to use with item
 	$result = Array();
 	foreach($to_lower as $field)
 		$result[ $field ] = $source[ strtolower($field) ];
 	
 	if( is_array($mapping) )
 	{
 		foreach($mapping as $field_from => $field_to)
 			$result[$field_to] = $source[$field_from];
 	}
 	
 	return $result;
 }
 
 function GetELT($field, $phrases = Array())
 {
 	// returns FieldOptions equivalent in In-Portal
 	$ret = Array();
 	foreach($phrases as $phrase)
 		$ret[] = admin_language($phrase);
 	$ret = "'".implode("','", $ret)."'";
 	return 'ELT('.$field.','.$ret.')';
 }
 
 function GetModuleImgPath($module)
 {
 	global $rootURL, $admin;
 	return $rootURL.$module.'/'.$admin.'/images';
 }
 
 function ActionPostProcess($StatusField, $ListClass, $ListObjectName = '', $IDField = null)
 {
 	// each action postprocessing stuff from admin
 	if( !isset($_REQUEST[$StatusField]) ) return false;
 	
 	$list =& $GLOBALS[$ListObjectName];
 	if( !is_object($list) ) $list = new $ListClass();
 	$SFValue = $_REQUEST[$StatusField]; // status field value
  	switch($SFValue)
 	{
  		case 1: // User hit "Save" button
     		$list->CopyFromEditTable($IDField);     
     		break;
 		case 2: // User hit "Cancel" button
 			$list->PurgeEditTable($IDField);
 			break;
  	}
 	if( function_exists('SpecificProcessing') ) SpecificProcessing($StatusField, $SFValue);
  	if($SFValue == 1 || $SFValue == 2) $list->Clear();
 }
 
 function GetElem(&$array, $index)
 {
 	// returns array element by index if
 	// such index exists
 	return isset($array[$index]) ? $array[$index] : false;
 }
 
 function MakeHTMLTag($element, $attrib_prefix)
 {
 	$result = Array();
 	$ap_length = strlen($attrib_prefix);
 	foreach($element->attributes as $attib_name => $attr_value)
 		if( substr($attib_name, $ap_length) == $ap_length )
 			$result[] = substr($attib_name, $ap_length, strlen($attib_name)).'="'.$attr_value.'"';
 	return count($result) ? implode(' ', $result) : false;
 }
 
 ?>

Property changes on: trunk/globals.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.4
\ No newline at end of property
+1.5
\ No newline at end of property