Index: trunk/globals.php =================================================================== diff -u -N -r742 -r747 --- trunk/globals.php (.../globals.php) (revision 742) +++ trunk/globals.php (.../globals.php) (revision 747) @@ -1,1508 +1,1495 @@ -\n") { - $resave = true; - } - $ln++; - $line = trim($line); - $line = eregi_replace(';[.]*','',$line); - if(strlen($line) > 0) { - //echo $line . " - "; - if(eregi('^[[a-z]+]$',str_replace(' ', '', $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 '
'; - } //end if - } //end foreach - if ($resave) { - $fp = fopen($file, "w"); - reset($contents); - fwrite($fp,'<'.'?'.'php die() ?'.">\n\n"); - foreach($contents as $line) fwrite($fp,"$line"); - fclose($fp); - } - - return $retval; -} - -/** - * @return object - * @desc Returns reference to database connection -*/ -function &GetADODBConnection() -{ - static $DB = null; - - global $g_DBType, $g_DBHost, $g_DBUser, $g_DBUserPassword, $g_DBName, $g_DebugMode; - global $ADODB_FETCH_MODE, $ADODB_COUNTRECS, $ADODB_CACHE_DIR, $pathtoroot; - - if( !isset($DB) && strlen($g_DBType) > 0 ) - { - $DB = ADONewConnection($g_DBType); - $connected = $DB->Connect($g_DBHost, $g_DBUser, $g_DBUserPassword, $g_DBName); - if(!$connected) die("Error connecting to database $g_DBHost
\n"); - - $ADODB_CACHE_DIR = $pathtoroot."cache"; - $ADODB_FETCH_MODE = 2; - $ADODB_COUNTRECS = false; - $DB->debug = defined('ADODB_OUTP') ? 1 : 0; - $DB->cacheSecs = 3600; - $DB->Execute('SET SQL_BIG_SELECTS = 1'); - } - elseif( !strlen($g_DBType) ) - { - global $rootURL; - echo 'In-Portal is probably not installed, or configuration file is missing.
'; - echo 'Please use the installation script to fix the problem.

'; - if ( !preg_match('/admin/', __FILE__) ) $ins = 'admin/'; - - echo 'Go to installation script

'; - flush(); - exit; - } - return $DB; -} - -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 -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."
\n"; - - $res = $rs->fields["TableCount"]; - return $res; -} - -Function QueryCount($sql) -{ - $sql = preg_replace('/SELECT(.*)FROM[ \n\r](.*)/is','SELECT COUNT(*) AS TableCount FROM $2', $sql); - $sql = preg_replace('/(.*)LIMIT(.*)/is','$1', $sql); - $sql = preg_replace('/(.*)ORDER BY(.*)/is','$1', $sql); - - $db =& GetADODBConnection(); - return $db->GetOne($sql); -} - -function GetPageCount($ItemsPerPage,$NumItems) -{ - if($ItemsPerPage==0 || $NumItems==0) - { - return 1; - } - $value = $NumItems/$ItemsPerPage; - return ceil($value); -} - - -/** - * @return string - * @desc Returns database table prefix entered while installation -*/ -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; - break; - } - 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("<","<",$out); - $out=ereg_replace(">",">",$out); - $out=ereg_replace("\"",""",$out); - $out = str_replace("\n^br^", "\n
", $out); - } - else - $out = str_replace("\n^br^", "\n", $out); - $out=addslashes($out); - - return $out; -} -*/ -function inp_escape($var,$html=0) -{ - if($html)return $var; - if(is_array($var)) - foreach($var as $k=>$v) - $var[$k]=inp_escape($v); - else -// $var=htmlspecialchars($var,ENT_NOQUOTES); - $var=strtr($var,Array('<'=>'<','>'=>'>',)); - return $var; -} -function inp_striptags($var,$html=0) -{ - if($html)return $var; - if(is_array($var)) - foreach($var as $k=>$v) - $var[$k]=inp_striptags($v); - else - $var=strip_tags($var); - return $var; -} - -function inp_unescape($in) -{ - return $in; - $out=stripslashes($in); - - return $out; -} - -function inp_textarea_unescape($in) -{ - return $in; - $out=stripslashes($in); - $out = str_replace("\n
", "\n", $out); - return $out; -} - -function HighlightKeywords($Keywords, $html, $OpenTag="", $CloseTag="") -{ - global $objConfig; - - if(!strlen($OpenTag)) - $OpenTag = ""; - if(!strlen($CloseTag)) - $CloseTag = ""; - - $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 = ""; - if(!strlen($CloseTag)) - $CloseTag = ""; - $ret = strip_tags($html); - - foreach ($Keywords as $k) - { - if(strlen($k)) - { - //$html = str_replace("<$k>", ":#:", $html); - //$html = str_replace("", ":##:", $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(":##:", "", $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; - default: - $ret = adodb_date($part, $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". - } -} - -// --- bbcode processing function: begin ---- -function PreformatBBCodes($text) -{ - // convert phpbb url bbcode to valid in-bulletin's format - // 1. urls - $text = preg_replace('/\[url=(.*)\](.*)\[\/url\]/Ui','[url href="$1"]$2[/url]',$text); - $text = preg_replace('/\[url\](.*)\[\/url\]/Ui','[url href="$1"]$1[/url]',$text); - // 2. images - $text = preg_replace('/\[img\](.*)\[\/img\]/Ui','[img src="$1" border="0"][/img]',$text); - // 3. color - $text = preg_replace('/\[color=(.*)\](.*)\[\/color\]/Ui','[font color="$1"]$2[/font]',$text); - // 4. size - $text = preg_replace('/\[size=(.*)\](.*)\[\/size\]/Ui','[font size="$1"]$2[/font]',$text); - // 5. lists - $text = preg_replace('/\[list(.*)\](.*)\[\/list\]/Uis','[ul]$2[/ul]',$text); - // 6. email to link - $text = preg_replace('/\[email\](.*)\[\/email\]/Ui','[url href="mailto:$1"]$1[/url]',$text); - //7. b tag - $text = preg_replace('/\[(b|i|u):(.*)\](.*)\[\/(b|i|u):(.*)\]/Ui','[$1]$3[/$4]',$text); - //8. code tag - $text = preg_replace('/\[code:(.*)\](.*)\[\/code:(.*)\]/Uis','[code]$2[/code]',$text); - return $text; -} - -/** - * @return string - * @param string $BBCode - * @param string $TagParams - * @param string $TextInside - * @param string $ParamsAllowed - * @desc Removes not allowed params from tag and returns result -*/ -function CheckBBCodeAttribs($BBCode, $TagParams, $TextInside, $ParamsAllowed) -{ - // $BBCode - bbcode to check, $TagParams - params string entered by user - // $TextInside - text between opening and closing bbcode tag - // $ParamsAllowed - list of allowed parameter names ("|" separated) - - preg_match_all('/(.+)="(.+)"/Uis',$TagParams,$params); - if( count($params[0]) > 0 ) - { - array_shift($params); - $param_count = count($params[0]); // count passed parameter names - $ParamsAllowed = explode('|',$ParamsAllowed); - - $i = 0; - $ret = Array(); - while($i < $param_count) - { - // remove spaces in both parameter name & value & lowercase parameter name - $params[0][$i] = strtolower(trim($params[0][$i])); // name lowercased - $params[1][$i] = trim($params[1][$i]); // value - - if( in_array($params[0][$i],$ParamsAllowed) ) - { - $ret[] = $params[0][$i].'="'.$params[1][$i].'"'; - - } - $i++; - } - $ret = count($ret) ? implode(' ',$ret) : ''; - return '<'.$BBCode.' '.$ret.'>'.$TextInside.''; - } - else - { - return '['.$BBCode.' '.$TagParams.']'.$TextInside.'[/'.$BBCode.']'; // params allowed, but not entered - } - return false; -} - -function ReplaceBBCode($text) -{ - global $objConfig, $objSmileys; - - // convert phpbb bbcodes to in-bulletin bbcodes - $text = PreformatBBCodes($text); - -// $tag_defs = 'b:;i:;u:;ul:type|align;font:color|face|size;url:href;img:src|border'; - - $tags_defs = explode(';',$objConfig->Get('BBTags')); - $i = 0; $tags_defs_count = count($tags_defs); - while($i < $tags_defs_count) - { - $tag = explode(':',$tags_defs[$i]); - $tag_name = $tag[0]; - $tag_params = $tag[1]; - if( strlen($tag_params) > 0 ) - { - $text = preg_replace('/\['.$tag_name.'(.*)\](.*)\[\/'.$tag_name.'\]/Uise','CheckBBCodeAttribs("'.$tag_name.'","$1","$2","'.$tag_params.'");', $text); - } - else - { - $text = preg_replace('/\['.$tag_name.'\](.*)\[\/'.$tag_name.'\]/Uis','<'.$tag_name.'>$1', $text); - } - $i++; - } - - // additional processing for [url], [*], [img] bbcode - $text = str_replace( Array('','[*]'), - Array('','
  • '), - $text); - - // bbcode [code]xxx[/code] processing - $text = preg_replace('/\[code\](.*)\[\/code\]/Ues', 'ReplaceCodeBBCode(highlight_string("UndoSmileys(_unhtmlentities( stripslashes(\'$1\') ) ). "?>" , true));', $text); - return $text; -} - -function ReplaceCodeBBCode($input_string) -{ - if( strlen($input_string) ) - { - $input_string = str_replace(Array('<?php','?>'),Array('',''),$input_string); - } - - $input_string = str_replace("
    ","",$input_string); - return $input_string; -} - -// --- bbcode processing function: end ---- - -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( isset($_FILES[$r]) && $_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 = isset($_POST["errors"]) ? $_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;$g0) - $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
    "; - - if($lang==0) - $lang = $objSession->Get("Language"); - - //echo "Language from session: $lang
    "; - - if($lang==0) - $lang = $objLanguages->GetPrimary(); - - //echo "Language after primary: $lang
    "; - //echo "Phrase: $phrase
    "; - $translation = $objLanguageCache->GetTranslation($phrase,$lang); - if($LinkMissing && substr($translation,0,1)=="!" && substr($translation,-1)=="!") - { - $res = "
    $translation"; - 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."
    \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($ItemTypeName)) - $item = $objItemTypes->GetItem($ItemTypeName); - else - $item = $objItemTypes->GetTypeByName($ItemTypeName); - - 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"; - - if(isset($GLOBALS['FrontEnd'])&&$GLOBALS['FrontEnd']) - return $fmt; - return preg_replace('/y+/i','Y',$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|)/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..
    \n"; -// echo "Full Tag: ".htmlentities($image)."
    \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 '
    '.print_r($str, true).'
    '; -} - -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 - global $objSession; - 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"].')
    '; - $last_cat = $objSession->GetVariable('last_category'); - $prev_cat = $objSession->GetVariable('prev_category'); - //echo "Resetting Page [$prev_cat] -> [$last_cat]
    "; - - if($prev_cat != $last_cat) $GLOBALS[$module_prefix.'_var_list'][$page_variable] = 1; -} - -if( !function_exists('GetVar') ) -{ - /** - * @return string - * @param string $name - * @param bool $post_priority - * @desc Get's variable from http query - */ - function GetVar($name, $post_priority = false) - { - if(!$post_priority) // follow gpc_order in php.ini - return isset($_REQUEST[$name]) ? $_REQUEST[$name] : false; - else // get variable from post 1stly if not found then from get - return isset($_POST[$name]) && $_POST[$name] !== false ? $_POST[$name] : ( isset($_GET[$name]) && $_GET[$name] ? $_GET[$name] : false ); - } -} - -function SetVar($VarName, $VarValue) -{ - $_REQUEST[$VarName] = $VarValue; - $_POST[$VarName] = $VarValue; -} - -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 = GetVar('Action'); - if($action) - { - $module_prefix = explode('_', $action); - return $prefix2module[ $module_prefix[0] ]; - } - else - return false; -} - -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('[', ']'), $str).'
    '; -} - - -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; -} - -function GetImportScripts() -{ - // return currently installed import scripts - static $import_scripts = Array(); - if( count($import_scripts) == 0 ) - { - $sql = 'SELECT * FROM '.GetTablePrefix().'ImportScripts ORDER BY is_id'; - $db =&GetADODBConnection(); - $rs = $db->Execute($sql); - if( $rs && $rs->RecordCount() > 0 ) - { - while(!$rs->EOF) - { - $rec =& $rs->fields; - $import_scripts[] = Array( 'label' => $rec['is_label'], 'url' => $rec['is_script'], - 'enabled' => $rec['is_enabled'], 'field_prefix' => $rec['is_field_prefix'], - 'id' => $rec['is_string_id'], 'required_fields' => $rec['is_requred_fields'], - 'module' => strtolower($rec['is_Module']) ); - $rs->MoveNext(); - } - } - else - { - $import_scripts = Array(); - } - } - return $import_scripts; -} - -function GetImportScript($id) -{ - $scripts = GetImportScripts(); - return isset($scripts[$id]) ? $scripts[$id] : false; -} -function GetNextTemplate($current_template) -{ - // used on front, returns next template to make - // redirect to - $dest = GetVar('dest', true); - if(!$dest) $dest = GetVar('DestTemplate', true); - return $dest ? $dest : $current_template; -} - - -// functions for dealign with enviroment variable construction -function GenerateModuleEnv($prefix, $var_list) -{ - // globalize module varible arrays - $main =& $GLOBALS[$prefix.'_var_list']; - $update =& $GLOBALS[$prefix.'_var_list_update']; - //echo "VAR: [$main]; VAR_UPDATE: [$update]
    "; - - // ensure that we have no empty values in enviroment variable - foreach($update as $vl_key => $vl_value) - if(!$vl_value) $update[$vl_key] = '0'; // unset($update[$vl_key]); - - // if update var count is zero, then do nothing - if(count($update) == 0) return ''; - - foreach($main as $vl_key => $vl_value) - if(!$vl_value) $main[$vl_key] = '0'; // unset($main[$vl_key]); - - $ret = Array(); - foreach($var_list as $var_name) - $ret[] = GetEnvVar($prefix, $var_name); - - return ':'.$prefix.implode('-',$ret); -} - -function GetEnvVar($prefix, $name) -{ - // get variable from template variable's list - // (used in module parsers to build env string) - $main =& $GLOBALS[$prefix.'_var_list']; - $update =& $GLOBALS[$prefix.'_var_list_update']; - - return isset($update[$name]) ? $update[$name] : ( isset($main[$name]) ? $main[$name] : ''); -} - -/** - * @return int - * @desc Checks for debug mode -*/ -function IsDebugMode() -{ - return defined('DEBUG_MODE') && constant('DEBUG_MODE') == 1 ? 1 : 0; -} - - -?> +\n") { + $resave = true; + } + $ln++; + $line = trim($line); + $line = eregi_replace(';[.]*','',$line); + if(strlen($line) > 0) { + //echo $line . " - "; + if(eregi('^[[a-z]+]$',str_replace(' ', '', $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 '
    '; + } //end if + } //end foreach + if ($resave) { + $fp = fopen($file, "w"); + reset($contents); + fwrite($fp,'<'.'?'.'php die() ?'.">\n\n"); + foreach($contents as $line) fwrite($fp,"$line"); + fclose($fp); + } + + return $retval; +} + +/** + * @return object + * @desc Returns reference to database connection +*/ +function &GetADODBConnection() +{ + static $DB = null; + + global $g_DBType, $g_DBHost, $g_DBUser, $g_DBUserPassword, $g_DBName, $g_DebugMode; + global $ADODB_FETCH_MODE, $ADODB_COUNTRECS, $ADODB_CACHE_DIR, $pathtoroot; + + if( !isset($DB) && strlen($g_DBType) > 0 ) + { + $DB = ADONewConnection($g_DBType); + $connected = $DB->Connect($g_DBHost, $g_DBUser, $g_DBUserPassword, $g_DBName); + if(!$connected) die("Error connecting to database $g_DBHost
    \n"); + + $ADODB_CACHE_DIR = $pathtoroot."cache"; + $ADODB_FETCH_MODE = 2; + $ADODB_COUNTRECS = false; + $DB->debug = defined('ADODB_OUTP') ? 1 : 0; + $DB->cacheSecs = 3600; + $DB->Execute('SET SQL_BIG_SELECTS = 1'); + } + elseif( !strlen($g_DBType) ) + { + global $rootURL; + echo 'In-Portal is probably not installed, or configuration file is missing.
    '; + echo 'Please use the installation script to fix the problem.

    '; + if ( !preg_match('/admin/', __FILE__) ) $ins = 'admin/'; + + echo 'Go to installation script

    '; + flush(); + exit; + } + return $DB; +} + +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 -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."
    \n"; + + $res = $rs->fields["TableCount"]; + return $res; +} + +Function QueryCount($sql) +{ + $sql = preg_replace('/SELECT(.*)FROM[ \n\r](.*)/is','SELECT COUNT(*) AS TableCount FROM $2', $sql); + $sql = preg_replace('/(.*)LIMIT(.*)/is','$1', $sql); + $sql = preg_replace('/(.*)ORDER BY(.*)/is','$1', $sql); + + $db =& GetADODBConnection(); + return $db->GetOne($sql); +} + +function GetPageCount($ItemsPerPage,$NumItems) +{ + if($ItemsPerPage==0 || $NumItems==0) + { + return 1; + } + $value = $NumItems/$ItemsPerPage; + return ceil($value); +} + + +/** + * @return string + * @desc Returns database table prefix entered while installation +*/ +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; + break; + } + 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("<","<",$out); + $out=ereg_replace(">",">",$out); + $out=ereg_replace("\"",""",$out); + $out = str_replace("\n^br^", "\n
    ", $out); + } + else + $out = str_replace("\n^br^", "\n", $out); + $out=addslashes($out); + + return $out; +} +*/ +function inp_escape($var,$html=0) +{ + if($html)return $var; + if(is_array($var)) + foreach($var as $k=>$v) + $var[$k]=inp_escape($v); + else +// $var=htmlspecialchars($var,ENT_NOQUOTES); + $var=strtr($var,Array('<'=>'<','>'=>'>',)); + return $var; +} +function inp_striptags($var,$html=0) +{ + if($html)return $var; + if(is_array($var)) + foreach($var as $k=>$v) + $var[$k]=inp_striptags($v); + else + $var=strip_tags($var); + return $var; +} + +function inp_unescape($in) +{ + return $in; + $out=stripslashes($in); + + return $out; +} + +function inp_textarea_unescape($in) +{ + return $in; + $out=stripslashes($in); + $out = str_replace("\n
    ", "\n", $out); + return $out; +} + +function HighlightKeywords($Keywords, $html, $OpenTag="", $CloseTag="") +{ + global $objConfig; + + if(!strlen($OpenTag)) + $OpenTag = ""; + if(!strlen($CloseTag)) + $CloseTag = ""; + + $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 = ""; + if(!strlen($CloseTag)) + $CloseTag = ""; + $ret = strip_tags($html); + + foreach ($Keywords as $k) + { + if(strlen($k)) + { + //$html = str_replace("<$k>", ":#:", $html); + //$html = str_replace("", ":##:", $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(":##:", "", $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; + default: + $ret = adodb_date($part, $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". + } +} + +// --- bbcode processing function: begin ---- +function PreformatBBCodes($text) +{ + // convert phpbb url bbcode to valid in-bulletin's format + // 1. urls + $text = preg_replace('/\[url=(.*)\](.*)\[\/url\]/Ui','[url href="$1"]$2[/url]',$text); + $text = preg_replace('/\[url\](.*)\[\/url\]/Ui','[url href="$1"]$1[/url]',$text); + // 2. images + $text = preg_replace('/\[img\](.*)\[\/img\]/Ui','[img src="$1" border="0"][/img]',$text); + // 3. color + $text = preg_replace('/\[color=(.*)\](.*)\[\/color\]/Ui','[font color="$1"]$2[/font]',$text); + // 4. size + $text = preg_replace('/\[size=(.*)\](.*)\[\/size\]/Ui','[font size="$1"]$2[/font]',$text); + // 5. lists + $text = preg_replace('/\[list(.*)\](.*)\[\/list\]/Uis','[ul]$2[/ul]',$text); + // 6. email to link + $text = preg_replace('/\[email\](.*)\[\/email\]/Ui','[url href="mailto:$1"]$1[/url]',$text); + //7. b tag + $text = preg_replace('/\[(b|i|u):(.*)\](.*)\[\/(b|i|u):(.*)\]/Ui','[$1]$3[/$4]',$text); + //8. code tag + $text = preg_replace('/\[code:(.*)\](.*)\[\/code:(.*)\]/Uis','[code]$2[/code]',$text); + return $text; +} + +/** + * @return string + * @param string $BBCode + * @param string $TagParams + * @param string $TextInside + * @param string $ParamsAllowed + * @desc Removes not allowed params from tag and returns result +*/ +function CheckBBCodeAttribs($BBCode, $TagParams, $TextInside, $ParamsAllowed) +{ + // $BBCode - bbcode to check, $TagParams - params string entered by user + // $TextInside - text between opening and closing bbcode tag + // $ParamsAllowed - list of allowed parameter names ("|" separated) + $TagParams=str_replace('\\\'','\'',$TagParams); + if( $ParamsAllowed && preg_match_all('/ +([^=]*)=["\']?([^ "\']*)["\']?/is',$TagParams,$params,PREG_SET_ORDER) ) + { + $ret = Array(); + foreach($params as $param) + { + // remove spaces in both parameter name & value & lowercase parameter name + $param[1] = strtolower($param[1]); // name lowercased + + if( isset($ParamsAllowed[ $param[1] ]) ) + $ret[] = $param[1].'="'.$param[2].'"'; + } + $ret = count($ret) ? ' '.implode(' ',$ret) : ''; + return '<'.$BBCode.$ret.'>'.$TextInside.''; + } + else + return '<'.$BBCode.'>'.$TextInside.''; + return false; +} +function ReplaceBBCode($text) +{ + global $objConfig; + + // convert phpbb bbcodes to in-bulletin bbcodes + $text = PreformatBBCodes($text); + +// $tag_defs = 'b:;i:;u:;ul:type|align;font:color|face|size;url:href;img:src|border'; + + $tags_defs = $objConfig->Get('BBTags'); + foreach(explode(';',$tags_defs) as $tag) + { + $tag = explode(':',$tag); + $tag_name = $tag[0]; + $tag_params = $tag[1]?array_flip(explode('|',$tag[1])):0; + $text = preg_replace('/\['.$tag_name.'(.*)\](.*)\[\/'.$tag_name.' *\]/Uise','CheckBBCodeAttribs("'.$tag_name.'","$1","$2",$tag_params);', $text); + } + + // additional processing for [url], [*], [img] bbcode + $text = preg_replace('/(.*)<\/url>/Usi','$1',$text); + $text = preg_replace('/(.*)<\/font>/Usi','$1',$text); // skip empty fonts + $text = str_replace( Array('','[*]'), + Array('','
  • '), + $text); + + // bbcode [code]xxx[/code] processing + $text = preg_replace('/\[code\](.*)\[\/code\]/Use', "ReplaceCodeBBCode('$1')", $text); + return $text; +} +function ReplaceCodeBBCode($input_string) +{ + $input_string=str_replace('\"','"',$input_string); + $input_string=$GLOBALS['objSmileys']->UndoSmileys(_unhtmlentities($input_string)); + if(false!==strpos($input_string,'<'.'?')) + { + $input_string=str_replace('<'.'?','<'.'?php',$input_string); + $input_string=str_replace('<'.'?phpphp','<'.'?php',$input_string); + $input_string=@highlight_string($input_string,1); + } + else + { + $input_string = @highlight_string('<'.'?php'.$input_string.'?'.'>',1); + $input_string = str_replace('<?php', '', str_replace('?>', '', $input_string)); + } + return str_replace('
    ','',$input_string); + +} + + +// --- bbcode processing function: end ---- + +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( isset($_FILES[$r]) && $_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 = isset($_POST["errors"]) ? $_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;$g0) + $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
    "; + + if($lang==0) + $lang = $objSession->Get("Language"); + + //echo "Language from session: $lang
    "; + + if($lang==0) + $lang = $objLanguages->GetPrimary(); + + //echo "Language after primary: $lang
    "; + //echo "Phrase: $phrase
    "; + $translation = $objLanguageCache->GetTranslation($phrase,$lang); + if($LinkMissing && substr($translation,0,1)=="!" && substr($translation,-1)=="!") + { + $res = "
    $translation"; + 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."
    \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($ItemTypeName)) + $item = $objItemTypes->GetItem($ItemTypeName); + else + $item = $objItemTypes->GetTypeByName($ItemTypeName); + + 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"; + + if(isset($GLOBALS['FrontEnd'])&&$GLOBALS['FrontEnd']) + return $fmt; + return preg_replace('/y+/i','Y',$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|)/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..
    \n"; +// echo "Full Tag: ".htmlentities($image)."
    \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 '
    '.print_r($str, true).'
    '; +} + +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 + global $objSession; + 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"].')
    '; + $last_cat = $objSession->GetVariable('last_category'); + $prev_cat = $objSession->GetVariable('prev_category'); + //echo "Resetting Page [$prev_cat] -> [$last_cat]
    "; + + if($prev_cat != $last_cat) $GLOBALS[$module_prefix.'_var_list'][$page_variable] = 1; +} + +if( !function_exists('GetVar') ) +{ + /** + * @return string + * @param string $name + * @param bool $post_priority + * @desc Get's variable from http query + */ + function GetVar($name, $post_priority = false) + { + if(!$post_priority) // follow gpc_order in php.ini + return isset($_REQUEST[$name]) ? $_REQUEST[$name] : false; + else // get variable from post 1stly if not found then from get + return isset($_POST[$name]) && $_POST[$name] !== false ? $_POST[$name] : ( isset($_GET[$name]) && $_GET[$name] ? $_GET[$name] : false ); + } +} + +function SetVar($VarName, $VarValue) +{ + $_REQUEST[$VarName] = $VarValue; + $_POST[$VarName] = $VarValue; +} + +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 = GetVar('Action'); + if($action) + { + $module_prefix = explode('_', $action); + return $prefix2module[ $module_prefix[0] ]; + } + else + return false; +} + +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('[', ']'), $str).'
    '; +} + + +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; +} + +function GetImportScripts() +{ + // return currently installed import scripts + static $import_scripts = Array(); + if( count($import_scripts) == 0 ) + { + $sql = 'SELECT * FROM '.GetTablePrefix().'ImportScripts ORDER BY is_id'; + $db =&GetADODBConnection(); + $rs = $db->Execute($sql); + if( $rs && $rs->RecordCount() > 0 ) + { + while(!$rs->EOF) + { + $rec =& $rs->fields; + $import_scripts[] = Array( 'label' => $rec['is_label'], 'url' => $rec['is_script'], + 'enabled' => $rec['is_enabled'], 'field_prefix' => $rec['is_field_prefix'], + 'id' => $rec['is_string_id'], 'required_fields' => $rec['is_requred_fields'], + 'module' => strtolower($rec['is_Module']) ); + $rs->MoveNext(); + } + } + else + { + $import_scripts = Array(); + } + } + return $import_scripts; +} + +function GetImportScript($id) +{ + $scripts = GetImportScripts(); + return isset($scripts[$id]) ? $scripts[$id] : false; +} +function GetNextTemplate($current_template) +{ + // used on front, returns next template to make + // redirect to + $dest = GetVar('dest', true); + if(!$dest) $dest = GetVar('DestTemplate', true); + return $dest ? $dest : $current_template; +} + + +// functions for dealign with enviroment variable construction +function GenerateModuleEnv($prefix, $var_list) +{ + // globalize module varible arrays + $main =& $GLOBALS[$prefix.'_var_list']; + $update =& $GLOBALS[$prefix.'_var_list_update']; + //echo "VAR: [$main]; VAR_UPDATE: [$update]
    "; + + // ensure that we have no empty values in enviroment variable + foreach($update as $vl_key => $vl_value) + if(!$vl_value) $update[$vl_key] = '0'; // unset($update[$vl_key]); + + // if update var count is zero, then do nothing + if(count($update) == 0) return ''; + + foreach($main as $vl_key => $vl_value) + if(!$vl_value) $main[$vl_key] = '0'; // unset($main[$vl_key]); + + $ret = Array(); + foreach($var_list as $var_name) + $ret[] = GetEnvVar($prefix, $var_name); + + return ':'.$prefix.implode('-',$ret); +} + +function GetEnvVar($prefix, $name) +{ + // get variable from template variable's list + // (used in module parsers to build env string) + $main =& $GLOBALS[$prefix.'_var_list']; + $update =& $GLOBALS[$prefix.'_var_list_update']; + + return isset($update[$name]) ? $update[$name] : ( isset($main[$name]) ? $main[$name] : ''); +} + +/** + * @return int + * @desc Checks for debug mode +*/ +function IsDebugMode() +{ + return defined('DEBUG_MODE') && constant('DEBUG_MODE') == 1 ? 1 : 0; +} + + +?>