$var)
setObjectProperty($obj,$key,$argsArr[$key]);
}
/**
* @intellisense
*/
function GetImageFromDB($gQuery, $forPDF = false, $params = array())
{
global $cman;
if(!$forPDF)
{
$table = postvalue("table");
$strTableName = GetTableByShort($table);
$settings = new ProjectSettings($strTableName);
if (!checkTableName($table))
{
return '';
}
@ini_set("display_errors","1");
@ini_set("display_startup_errors","1");
if(!isLogged() || !CheckSecurity(@$_SESSION["_".$strTableName."_OwnerID"],"Search"))
{
HeaderRedirect("login");
return;
}
$field = postvalue("field");
if(!$settings->checkFieldPermissions($field))
return DisplayNoImage();
// construct sql
$keysArr = $settings->getTableKeys();
$keys = array();
foreach ($keysArr as $ind=>$k)
{
$keys[$k]=postvalue("key".($ind+1));
}
}
else
{
$table = @$params["table"];
$strTableName = GetTableByShort($table);
if (!checkTableName($table))
{
exit(0);
}
$settings = new ProjectSettings($strTableName);
$field = @$params["field"];
// construct sql
$keysArr = $settings->getTableKeys();
$keys = array();
foreach ($keysArr as $ind=>$k)
{
$keys[$k]=@$params["key".($ind+1)];
}
}
$connection = $cman->byTable( $strTableName );
if(!$gQuery->HasGroupBy())
{
// Do not select any fields except current (image) field.
// If query has 'group by' clause then other fields are used in it and we may not simply cut 'em off.
// Just don't do anything in that case.
$gQuery->RemoveAllFieldsExcept($settings->getFieldIndex($field));
}
$where = KeyWhere($keys);
$secOpt = $settings->getAdvancedSecurityType();
if ($secOpt == ADVSECURITY_VIEW_OWN)
{
$where = whereAdd($where, SecuritySQL("Search"));
}
$sql = $gQuery->gSQLWhere($where);
$data = $connection->query( $sql )->fetchAssoc();
if($forPDF)
{
if( $data )
return $data[ $field ];
}
else
{
if( !$data )
return DisplayNoImage();
if(postvalue('src') == 1)
{
$value = myfile_get_contents('images/icons/jpg.png');
}
else
$value = $connection->stripSlashesBinary( $data[ $field ] );
if(!$value)
{
if(postvalue("alt"))
{
$value = $connection->stripSlashesBinary( $data[ postvalue("alt") ] );
if(!$value)
return DisplayNoImage();
}
else
return DisplayNoImage();
}
$itype = SupposeImageType($value);
if(!$itype)
return DisplayFile();
if(!isset($pdf))
{
header("Content-Type: ".$itype);
header("Cache-Control: private");
SendContentLength(strlen_bin($value));
}
echoBinary($value);
return '';
}
}
/**
* Redirects to login.
* Displays Session expired message if the page was opened from within the project directory.
*
*/
function redirectToLogin()
{
$expired = "";
$url = "http://";
if( $_SERVER["HTTPS"] && $_SERVER["HTTPS"] != "off")
$url = "https://";
$url .= $_SERVER["HTTP_HOST"] . $_SERVER['REQUEST_URI'];
global $logoutPerformed;
if( !$logoutPerformed && isset($_SERVER['HTTP_REFERER']) )
{
if( getDirectoryFromURI( $_SERVER['HTTP_REFERER'] ) == getDirectoryFromURI( $url )
&& getFilenameFromURI( $_SERVER['HTTP_REFERER'] ) != "index.htm"
&& $_SERVER['HTTP_REFERER'] != getDirectoryFromURI( $url ))
$expired = "message=expired";
}
if( !$logoutPerformed )
$expired = "return=true&" . $expired;
HeaderRedirect("login", "", $expired);
exit();
}
/**
* Returns server and directory path from the file-based URI
* Examples:
* http://server.com:88/Calendar/login.php?a=expired => http://server.com:88/Calendar/
*
* Beware! These URLs are incorrect input:
* https://server.com/app1
* https://server.com
*
*/
function getDirectoryFromURI( $uri )
{
$qMark = strpos( $uri, "?" );
if( $qMark !== FALSE )
$uri = substr( $uri, 0, $qMark );
$lastSlash = strrpos( $uri, "/" );
if( $lastSlash !== FALSE )
return substr($uri, 0, $lastSlash )."/";
return $uri;
}
function getFilenameFromURI( $uri )
{
$qMark = strpos( $uri, "?" );
if( $qMark !== FALSE )
$uri = substr( $uri, $qMark );
$lastSlash = strrpos( $uri, "/" );
if( $lastSlash !== FALSE )
return substr($uri, $lastSlash + 1 );
return $uri;
}
/**
* @intellisense
*/
function getLangFileName($langName)
{
$langArr = array();
$langArr["Chinese (Hong Kong S.A.R.)"] = "Hongkong";
$langArr["English"] = "English";
return $langArr[$langName];
}
/**
* @intellisense
*/
function GetGlobalData($name, $defValue)
{
global $globalSettings;
if(!array_key_exists($name, $globalSettings))
return $defValue;
return $globalSettings[$name];
}
/**
* @intellisense
*/
function DisplayMap($params)
{
global $pageObject;
$pageObject->googleMapCfg['mapsData'][$params['id']]['addressField'] = $params['addressField'] ? $params['addressField'] : "";
$pageObject->googleMapCfg['mapsData'][$params['id']]['latField'] = $params['latField'] ? $params['latField'] : '';
$pageObject->googleMapCfg['mapsData'][$params['id']]['lngField'] = $params['lngField'] ? $params['lngField'] : '';
$pageObject->googleMapCfg['mapsData'][$params['id']]['weightField'] = $params['weightField'] ? $params['weightField'] : '';
$pageObject->googleMapCfg['mapsData'][$params['id']]['clustering'] = $params['clustering'];
$pageObject->googleMapCfg['mapsData'][$params['id']]['heatMap'] = $params['heatMap'];
$pageObject->googleMapCfg['mapsData'][$params['id']]['showAllMarkers'] = $params['showAllMarkers'] || $params['clustering'] || $params['heatMap'];
$pageObject->googleMapCfg['mapsData'][$params['id']]['width'] = $params['width'] ? $params['width'] : 0;
$pageObject->googleMapCfg['mapsData'][$params['id']]['height'] = $params['height'] ? $params['height'] : 0;
$pageObject->googleMapCfg['mapsData'][$params['id']]['type'] = 'BIG_MAP';
$pageObject->googleMapCfg['mapsData'][$params['id']]['showCenterLink'] = $params['showCenterLink'] ? $params['showCenterLink'] : 0;
$pageObject->googleMapCfg['mapsData'][$params['id']]['descField'] = $params['descField'] ? $params['descField'] : $pageObject->googleMapCfg['mapsData'][$params['id']]['addressField'];
$pageObject->googleMapCfg['mapsData'][$params['id']]['descField'] = $params['description'] ? $params['description'] : $pageObject->googleMapCfg['mapsData'][$params['id']]['addressField'];
$pageObject->googleMapCfg['mapsData'][$params['id']]['markerAsEditLink'] = $params['markerAsEditLink'];
$pageObject->googleMapCfg['mapsData'][$params['id']]['markerIcon'] = $params['markerIcon'] ? $params['markerIcon'] : '';
$pageObject->googleMapCfg['mapsData'][$params['id']]['markerField'] = $params['markerField'] ? $params['markerField'] : '';
if (isset($params['zoom']))
$pageObject->googleMapCfg['mapsData'][$params['id']]['zoom'] = $params['zoom'];
//$pageObject->googleMapCfg['bigMapDefZoom'] = $pageObject->googleMapCfg['mapsData'][$params['id']]['zoom'];
if ($pageObject->googleMapCfg['mapsData'][$params['id']]['showCenterLink'])
$pageObject->googleMapCfg['mapsData'][$params['id']]['centerLinkText'] = $params['centerLinkText'] ? $params['centerLinkText'] : '';
$pageObject->googleMapCfg['mainMapIds'][] = $params['id'];
if (isset($params['APIkey']))
$pageObject->googleMapCfg['APIcode'] = $params['APIkey'];
}
/**
* @intellisense
*/
function checkTableName($shortTName, $type=false)
{
if (!$shortTName)
return false;
if ("fpi_reg" == $shortTName && ($type===false || ($type!==false && $type == 0)))
return true;
if ("fpi_reg_no_display" == $shortTName && ($type===false || ($type!==false && $type == 1)))
return true;
if ("Joint_Account" == $shortTName && ($type===false || ($type!==false && $type == 1)))
return true;
if ("Individual_Account" == $shortTName && ($type===false || ($type!==false && $type == 1)))
return true;
if ("online_account_opening_audit" == $shortTName && ($type===false || ($type!==false && $type == 0)))
return true;
if ("opening_users" == $shortTName && ($type===false || ($type!==false && $type == 0)))
return true;
if ("Export_File__Equity_Front_" == $shortTName && ($type===false || ($type!==false && $type == 1)))
return true;
if ("fpi_funnel" == $shortTName && ($type===false || ($type!==false && $type == 0)))
return true;
return false;
}
/**
* Get password field on register page
* @intellisense
*/
function GetPasswordField($table = "")
{
global $cPasswordField;
return $cPasswordField;
}
/**
* Get user name field on register page
* @intellisense
*/
function GetUserNameField($table = "")
{
global $cUserNameField;
return $cUserNameField;
}
/**
* Get user name field on register page
* @intellisense
*/
function GetDisplayNameField($table = "")
{
global $cDisplayNameField;
return $cDisplayNameField;
}
/**
* Get user name field on register page
* @intellisense
*/
function GetEmailField($table = "")
{
global $cEmailField;
return $cEmailField;
}
/**
* @intellisense
*/
function GetTablesList($pdfMode = false)
{
$arr = array();
$strPerm = GetUserPermissions("fpi_reg");
if(strpos($strPerm, "P")!==false || ($pdfMode && strpos($strPerm, "S")!==false))
{
$arr[]="fpi_reg";
}
$strPerm = GetUserPermissions("fpi_reg_no_display");
if(strpos($strPerm, "P")!==false || ($pdfMode && strpos($strPerm, "S")!==false))
{
$arr[]="fpi_reg_no_display";
}
$strPerm = GetUserPermissions("Joint Account");
if(strpos($strPerm, "P")!==false || ($pdfMode && strpos($strPerm, "S")!==false))
{
$arr[]="Joint Account";
}
$strPerm = GetUserPermissions("Individual Account");
if(strpos($strPerm, "P")!==false || ($pdfMode && strpos($strPerm, "S")!==false))
{
$arr[]="Individual Account";
}
$strPerm = GetUserPermissions("online account opening_audit");
if(strpos($strPerm, "P")!==false || ($pdfMode && strpos($strPerm, "S")!==false))
{
$arr[]="online account opening_audit";
}
$strPerm = GetUserPermissions("opening_users");
if(strpos($strPerm, "P")!==false || ($pdfMode && strpos($strPerm, "S")!==false))
{
$arr[]="opening_users";
}
$strPerm = GetUserPermissions("Export File (Equity Front)");
if(strpos($strPerm, "P")!==false || ($pdfMode && strpos($strPerm, "S")!==false))
{
$arr[]="Export File (Equity Front)";
}
$strPerm = GetUserPermissions("fpi_funnel");
if(strpos($strPerm, "P")!==false || ($pdfMode && strpos($strPerm, "S")!==false))
{
$arr[]="fpi_funnel";
}
return $arr;
}
/**
* @intellisense
*/
function GetTablesListWithoutSecurity()
{
$arr = array();
$arr[]="fpi_reg";
$arr[]="fpi_reg_no_display";
$arr[]="Joint Account";
$arr[]="Individual Account";
$arr[]="online account opening_audit";
$arr[]="opening_users";
$arr[]="Export File (Equity Front)";
$arr[]="fpi_funnel";
return $arr;
}
/**
* DEPRECATED! Use RunnerPage::_getFieldSQLDecrypt instead
* Return the full database field original name
*
* @param string $field
* @param string $table The datasource table name
* @param boolean $addAs OPTIONAL
*
* @return String
* @intellisense
* @deprecated
*/
function GetFullFieldName($field, $table = "", $addAs = true, $connection = null)
{
global $strTableName, $cman;
if( $table == "" )
$table = $strTableName;
if( !$connection )
$connection = $cman->byTable( $table );
$pSet = new ProjectSettings($table);
$fname = RunnerPage::_getFieldSQL($field, $connection, $pSet);
if($pSet->hasEncryptedFields() && !$connection->isEncryptionByPHPEnabled())
{
$cipherer = new RunnerCipherer($table);
return $cipherer->GetFieldName($fname, $field)
.($cipherer->isFieldEncrypted($field) && $addAs ? " as ".$connection->addFieldWrappers($field) : "");
}
return $fname;
}
/**
* returns Chart type
* @intellisense
*/
function GetChartType($shorttable)
{
return "";
}
////////////////////////////////////////////////////////////////////////////////
// data output functions
////////////////////////////////////////////////////////////////////////////////
/**
* @intellisense
*/
function GetShorteningForLargeText($strValue, $cNumberOfChars)
{
$ret = runner_substr($strValue, 0, $cNumberOfChars );
return runner_htmlspecialchars($ret);
}
/**
* add prefix to the URL
* @intellisense
*/
function AddLinkPrefix($pSet, $field, $link)
{
if(strpos($link,"://")===false && substr($link,0,7)!="mailto:")
return $pSet->getLinkPrefix($field).$link;
return $link;
}
/**
* @intellisense
*/
function GetTotalsForTime($value)
{
$time=parsenumbers($value);
while(count($time)<3)
$time[]=0;
return $time;
}
/**
* return Totals string
* @intellisense
*/
function GetTotals($field, $value, $stype, $iNumberOfRows, $sFormat, $ptype, $pSet)
{
// global $strTableName;
// $pSet = new ProjectSettings($strTableName, $ptype);
$days = 0;
if($stype == "AVERAGE")
{
if($iNumberOfRows)
{
if($sFormat == FORMAT_TIME)
{
if($value)
{
$value = round($value/$iNumberOfRows,0);
$s = $value % 60;
$value -= $s;
$value /= 60;
$m = $value % 60;
$value -= $m;
$value /= 60;
$h = $value % 24;
$value -= $h;
$value /= 24;
$d = $value;
$value = ($d!=0 ? $d.'d ' : ''). mysprintf("%02d:%02d:%02d",array($h,$m,$s));
}
}
else $value = round($value/$iNumberOfRows,2);
}
else
return "";
}
if($stype == "TOTAL")
{
if($sFormat == FORMAT_TIME)
{
if($value)
{
$s = $value % 60;
$value -= $s;
$value /= 60;
$m = $value % 60;
$value -= $m;
$value /= 60;
$h = $value % 24;
$value -= $h;
$value /= 24;
$d = $value;
$value = ($d!=0 ? $d.'d ' : ''). mysprintf("%02d:%02d:%02d",array($h,$m,$s));
}
}
}
$sValue = "";
$data = array($field => $value);
if($sFormat == FORMAT_CURRENCY)
$sValue = str_format_currency($value);
else if($sFormat == FORMAT_PERCENT)
$sValue = str_format_number($value*100)."%";
else if($sFormat == FORMAT_NUMBER)
$sValue = str_format_number($value, $pSet->isDecimalDigits($field));
else if($sFormat == FORMAT_CUSTOM && $stype!="COUNT")
{
include_once getabspath('classes/controls/ViewControlsContainer.php');
$viewControls = new ViewControlsContainer($pSet, $ptype);
$sValue = $viewControls->showDBValue($field, $data);
}
else
$sValue = $value;
if($stype == "COUNT")
return $value;
if($stype == "TOTAL")
return $sValue;
if($stype == "AVERAGE")
return $sValue;
return "";
}
/**
* @intellisense
*/
function DisplayNoImage()
{
$path = getabspath("images/no_image.gif");
header("Content-Type: image/gif");
printfile($path);
}
/**
* @intellisense
*/
function DisplayFile()
{
$path = getabspath("images/file.gif");
header("Content-Type: image/gif");
printfile($path);
}
////////////////////////////////////////////////////////////////////////////////
// miscellaneous functions
////////////////////////////////////////////////////////////////////////////////
/**
* analog of strrpos function
* @intellisense
*/
function my_strrpos($haystack, $needle)
{
$index = strpos(strrev($haystack), strrev($needle));
if($index === false)
return false;
$index = strlen($haystack) - strlen($needle) - $index;
return $index;
}
/**
* prepare string for JavaScript. Replace ' with \' and linebreaks with \r\n
* @intellisense
*/
function jsreplace($str)
{
$ret= str_replace(array("\\","'","\r","\n"),array("\\\\","\\'","\\r","\\n"),$str);
return my_str_ireplace("","",$ret);
}
/**
* @intellisense
*/
function LogInfo($SQL)
{/*
global $dSQL,$dDebug;
$dSQL=$SQL;
if($dDebug)
{
echo $dSQL;
echo "
";
}*/
}
/**
* check if file extension is image extension
* @intellisense
*/
function CheckImageExtension($filename)
{
if(strlen($filename)<4)
return false;
$ext=strtoupper(substr($filename,strlen($filename)-4));
if($ext==".GIF" || $ext==".JPG" || $ext=="JPEG" || $ext==".PNG" || $ext==".BMP")
return $ext;
return false;
}
/**
* @intellisense
*/
function html_special_decode($str)
{
$ret=$str;
$ret=str_replace(">",">",$ret);
$ret=str_replace("<","<",$ret);
$ret=str_replace(""","\"",$ret);
$ret=str_replace("'","'",$ret);
$ret=str_replace("'","'",$ret);
$ret=str_replace("&","&",$ret);
return $ret;
}
////////////////////////////////////////////////////////////////////////////////
// database and SQL related functions
////////////////////////////////////////////////////////////////////////////////
/**
* add clause to WHERE or HAVING expression
* @intellisense
*/
function whereAdd($where,$clause)
{
if(!strlen($clause))
return $where;
if(!strlen($where))
return $clause;
return "(".$where.") and (".$clause.")";
}
/**
* combine SQL logincal clauses from array using AND (default) or OR
* @intellisense
*/
function combineSQLCriteria($arrElements, $and = true)
{
$ret="";
$union = $and ? " AND " : " OR ";
foreach($arrElements as $e)
{
if(strlen($e))
{
if(!strlen($ret))
{
$ret = "(".$e.")";
}
else
{
$ret .= $union."(".$e.")";
}
}
}
return $ret;
}
/**
* add WHERE clause to SQL string
* @intellisense
*/
function AddWhere($sql,$where)
{
if(!strlen($where))
return $sql;
$sql=str_replace(array("\r\n","\n","\t")," ",$sql);
$tsql = strtolower($sql);
$n = my_strrpos($tsql," where ");
$n1 = my_strrpos($tsql," group by ");
$n2 = my_strrpos($tsql," order by ");
if($n1===false)
$n1=strlen($tsql);
if($n2===false)
$n2=strlen($tsql);
if ($n1>$n2)
$n1=$n2;
if($n===false)
return substr($sql,0,$n1)." where ".$where.substr($sql,$n1);
else
return substr($sql,0,$n+strlen(" where "))."(".substr($sql,$n+strlen(" where "),$n1-$n-strlen(" where ")).") and (".$where.")".substr($sql,$n1);
}
/**
* DEPRECATED. Use RunnerPage::keysSQLExpression instead
* Construct WHERE clause with key values
*
* @param &Array $keys
* @param String $table Teh data source table name OPTIONAL
*
* @return String
* @intellisense
* @deprecated
*/
function KeyWhere(&$keys, $table = "")
{
global $strTableName, $cman;
if( !$table )
$table = $strTableName;
$strWhere="";
$pSet = new ProjectSettings($table);
$cipherer = new RunnerCipherer($table);
$connection = $cman->byTable( $table );
$keyFields = $pSet->getTableKeys();
foreach($keyFields as $kf)
{
if( strlen($strWhere) )
$strWhere.= " and ";
$value = $cipherer->MakeDBValue($kf, $keys[ $kf ], "", true);
if( $connection->dbType == nDATABASE_Oracle )
$valueisnull = $value === "null" || $value == "''";
else
$valueisnull = $value === "null";
if( $valueisnull )
$strWhere.= RunnerPage::_getFieldSQL($kf, $connection, $pSet)." is null";
else
$strWhere.= RunnerPage::_getFieldSQLDecrypt($kf, $connection, $pSet, $cipherer)."=".$cipherer->MakeDBValue($kf, $keys[ $kf ], "", true);
}
return $strWhere;
}
/**
* Get count of rows from the query
* @param String strSQL
* @param Connection connection
* @return Number
* @intellisense
*/
function GetRowCount($strSQL, $connection)
{
$strSQL = str_replace(array("\r\n","\n","\t")," ",$strSQL);
$tstr = strtoupper($strSQL);
$ind1 = strpos($tstr, "SELECT ");
$ind2 = my_strrpos($tstr," FROM ");
$ind3 = my_strrpos($tstr," GROUP BY ");
if($ind3 === false)
{
$ind3 = strpos($tstr," ORDER BY ");
if($ind3 === false)
$ind3 = strlen($strSQL);
}
$countstr = substr($strSQL, 0, $ind1 + 6)." count(*) ".substr($strSQL, $ind2 + 1, $ind3 -$ind2);
$countdata = $connection->query( $countstr )->fetchNumeric();
return $countdata[0];
}
/**
* add MSSQL Server TOP clause
* @intellisense
*/
function AddTop($strSQL, $n)
{
$tstr = strtoupper($strSQL);
$ind1 = strpos($tstr,"SELECT");
return substr($strSQL,0,$ind1+6)." top ".$n." ".substr($strSQL,$ind1+6);
}
/**
* add DB2 Server TOP clause
* @intellisense
*/
function AddTopDB2($strSQL, $n)
{
return $strSQL." fetch first ".$n." rows only";
}
/**
* @intellisense
*/
function AddTopIfx($strSQL,$n)
{
return substr($strSQL,0,7)."limit ".$n." ".substr($strSQL,7);
}
/**
* add Oracle ROWNUMBER checking
* @intellisense
*/
function AddRowNumber($strSQL, $n)
{
return "select * from (".$strSQL.") where rownum<".($n+1);
}
/**
* Apply a limit to an SQL-query
* @param String sql
* @param Number N
* @param Number dbType
* @return String
*/
function applyDBrecordLimit($sql, $N, $dbType)
{
if( !strlen($dbType) )
return $sql;
if( $dbType == nDATABASE_MySQL || $dbType == nDATABASE_PostgreSQL || $dbType == nDATABASE_SQLite3 )
return $sql." LIMIT ".$N;
if( $dbType == nDATABASE_Oracle )
return AddRowNumber($sql, $N);
if( $dbType == nDATABASE_MSSQLServer || $dbType == nDATABASE_Access )
return AddTop($sql, $N);
if( $dbType == nDATABASE_Informix )
return AddTopIfx($sql, $N);
if( $dbType == nDATABASE_DB2 )
return AddTopDB2($sql, $N);
return $sql;
}
/**
* test database type if values need to be quoted
* @intellisense
*/
function NeedQuotesNumeric($type)
{
if($type == 203 || $type == 8 || $type == 129 || $type == 130 ||
$type == 7 || $type == 133 || $type == 134 || $type == 135 ||
$type == 201 || $type == 205 || $type == 200 || $type == 202 || $type==72 || $type==13)
return true;
else
return false;
}
// using ADO DataTypeEnum constants
// the full list available at:
// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdcstdatatypeenum.asp
/**
* @intellisense
*/
function IsNumberType($type)
{
if($type==20 || $type==14 || $type==5 || $type==10 || $type==6
|| $type==3 || $type==131 || $type==4 || $type==2 || $type==16
|| $type==21 || $type==19 || $type==18 || $type==17 || $type==139
|| $type==11)
return true;
return false;
}
/**
* @intellisense
*/
function IsFloatType($type)
{
if($type==14 || $type==5 || $type==131 || $type==4 || $type==6)
return true;
return false;
}
/**
* @intellisense
*/
function NeedQuotes($type)
{
return !IsNumberType($type);
}
/**
* @intellisense
*/
function IsBinaryType($type)
{
if($type==128 || $type==205 || $type==204)
return true;
return false;
}
/**
* date and datetime
* @intellisense
*/
function IsDateFieldType($type)
{
if($type==7 || $type==133 || $type==135)
return true;
return false;
}
/**
* only datetime
* @intellisense
*/
function IsDateTimeFieldType($type)
{
if($type==135)
return true;
return false;
}
/**
* @intellisense
*/
function IsTimeType($type)
{
if($type==134)
return true;
return false;
}
/**
* @intellisense
*/
function IsCharType($type)
{
if(IsTextType($type) || $type==8 || $type==129 || $type==200 || $type==202 || $type==130)
return true;
return false;
}
/**
* @intellisense
*/
function IsTextType($type)
{
if($type==201 || $type==203)
return true;
return false;
}
/**
* @intellisense
*/
function IsGuid($type)
{
if($type==72)
return true;
return false;
}
function IsBigInt($type)
{
if($type==20)
return true;
return false;
}
////////////////////////////////////////////////////////////////////////////////
// security functions
////////////////////////////////////////////////////////////////////////////////
//the bDynamicPermissions block
/**
* @intellisense
*/
function GetUserPermissionsStatic( $table )
{
if( !isLogged() )
return "";
$extraPerm = $_SESSION["AccessLevel"] == ACCESS_LEVEL_ADMINGROUP ? 'M' : '';
$sUserGroup=@$_SESSION["GroupID"];
if($table=="fpi_reg" && $sUserGroup=="user")
{
return "".$extraPerm;
}
if($table=="fpi_reg" && $sUserGroup=="funonl")
{
return "SP".$extraPerm;
}
if($table=="fpi_reg" && $sUserGroup=="funnel")
{
return "".$extraPerm;
}
// default permissions
if($table=="fpi_reg")
{
return "AEDSP".$extraPerm;
}
if($table=="fpi_reg_no_display" && $sUserGroup=="user")
{
return "".$extraPerm;
}
if($table=="fpi_reg_no_display" && $sUserGroup=="funonl")
{
return "SP".$extraPerm;
}
if($table=="fpi_reg_no_display" && $sUserGroup=="funnel")
{
return "".$extraPerm;
}
// default permissions
if($table=="fpi_reg_no_display")
{
return "AEDSP".$extraPerm;
}
if($table=="Joint Account" && $sUserGroup=="user")
{
return "ESP".$extraPerm;
}
if($table=="Joint Account" && $sUserGroup=="funonl")
{
return "".$extraPerm;
}
if($table=="Joint Account" && $sUserGroup=="funnel")
{
return "".$extraPerm;
}
// default permissions
if($table=="Joint Account")
{
return "AEDSP".$extraPerm;
}
if($table=="Individual Account" && $sUserGroup=="user")
{
return "ESP".$extraPerm;
}
if($table=="Individual Account" && $sUserGroup=="funonl")
{
return "SP".$extraPerm;
}
if($table=="Individual Account" && $sUserGroup=="funnel")
{
return "".$extraPerm;
}
// default permissions
if($table=="Individual Account")
{
return "AEDSP".$extraPerm;
}
if($table=="online account opening_audit" && $sUserGroup=="user")
{
return "S".$extraPerm;
}
if($table=="online account opening_audit" && $sUserGroup=="funonl")
{
return "".$extraPerm;
}
if($table=="online account opening_audit" && $sUserGroup=="funnel")
{
return "".$extraPerm;
}
// default permissions
if($table=="online account opening_audit")
{
return "AEDSPI".$extraPerm;
}
if($table=="opening_users" && $sUserGroup=="user")
{
return "".$extraPerm;
}
if($table=="opening_users" && $sUserGroup=="funonl")
{
return "".$extraPerm;
}
if($table=="opening_users" && $sUserGroup=="funnel")
{
return "".$extraPerm;
}
// default permissions
if($table=="opening_users")
{
return "AEDSPI".$extraPerm;
}
if($table=="Export File (Equity Front)" && $sUserGroup=="user")
{
return "".$extraPerm;
}
if($table=="Export File (Equity Front)" && $sUserGroup=="funonl")
{
return "".$extraPerm;
}
if($table=="Export File (Equity Front)" && $sUserGroup=="funnel")
{
return "".$extraPerm;
}
// default permissions
if($table=="Export File (Equity Front)")
{
return "EDSP".$extraPerm;
}
if($table=="fpi_funnel" && $sUserGroup=="user")
{
return "".$extraPerm;
}
if($table=="fpi_funnel" && $sUserGroup=="funonl")
{
return "".$extraPerm;
}
if($table=="fpi_funnel" && $sUserGroup=="funnel")
{
return "ESP".$extraPerm;
}
// default permissions
if($table=="fpi_funnel")
{
return "".$extraPerm;
}
// grant nothing by default
return "";
}
// end of the bDynamicPermissions block
// end of the bCreateLoginPage block
/**
* Check if the current user is admin user
* @return Boolean
* @intellisense
*/
function IsAdmin()
{
return false;
}
/**
* Returns user permissions for a particular table
* A - Add
* D - Delete
* E - Edit
* S - List/View/Search
* P - Print/Expor
* @param String table
* @return String
* @intellisense
*/
function GetUserPermissions($table="")
{
global $strTableName, $globalEvents;
if(!$table)
$table = $strTableName;
$permissions = "";
if( !IsLogged() )
return "";
$permissions = GetUserPermissionsStatic($table);
if($globalEvents->exists("GetTablePermissions", $table))
{
$permissions = $globalEvents->GetTablePermissions($permissions, $table);
}
return $permissions;
}
/**
* @intellisense
*/
function isLogged()
{
if (@$_SESSION["UserID"])
return true;
return false;
}
/**
* @intellisense
*/
function guestHasPermissions()
{
$tables = GetTablesListWithoutSecurity();
return false;
}
/**
* Set session variables and permissions after login via Facebook
* @intellisense
*/
function AfterFBLogIn($pUsername, $pPassword, &$pageObject = null)
{
global $cman, $cUserNameFieldType, $cPasswordFieldType, $cUserNameField, $cDisplayNameField, $globalEvents;
$logged = false;
$strUsername = (string)$pUsername;
$sUsername = $strUsername;
$connection = $cman->getForLogin();
if(NeedQuotes($cUserNameFieldType))
$strUsername = $connection->prepareString($strUsername);
else
$strUsername = (0+$strUsername);
$strSQL = "select * from ".$connection->addTableWrappers("opening_users")
." where ".$connection->addFieldWrappers($cUserNameField)."=".$strUsername."";
$data = $connection->query( $strSQL )->fetchAssoc();
if( count($data) )
{
$logged = true;
$pDisplayUsername = $data[ $cDisplayNameField ] != '' ? $data[ $cDisplayNameField ] : $sUsername;
DoLogin(false, $pUsername, $pDisplayUsername, "", ACCESS_LEVEL_USER, $pPassword, $pageObject);
SetAuthSessionData($pUsername, $data, true, $pPassword, $pageObject);
}
}
/**
* SetAuthSessionData
* Add to session auth data and permissions
* @param {string} user identifier
* @param {string} user display name
* @param {object} fetched row from DB with user data
* @param {object} page object
* @intellisense
*/
function SetAuthSessionData($pUsername, &$data, $fromFacebook, $password, &$pageObject = null)
{
global $globalEvents;
$_SESSION["GroupID"] = $data["groupid"];
if($globalEvents->exists("AfterSuccessfulLogin"))
{
$globalEvents->AfterSuccessfulLogin($pUsername != "Guest" ? $pUsername : "", $password, $data, $pageObject);
}
}
/**
* @intellisense
*/
function DoLogin($callAfterLoginEvent = false, $userID = "Guest", $userName = "", $groupID = "", $accessLevel = ACCESS_LEVEL_GUEST, $password = "", &$pageObject = null)
{
global $globalEvents;
if($userID == "Guest" && $userName == "")
$userName = mlang_message("AA_GROUP_GUEST");
$_SESSION["UserID"] = $userID;
$_SESSION["UserName"] = runner_htmlspecialchars( $userName );
$_SESSION["GroupID"] = $groupID;
$_SESSION["AccessLevel"] = $accessLevel;
$auditObj = GetAuditObject();
if($auditObj)
{
$auditObj->LogLogin($userID);
$auditObj->LoginSuccessful();
}
if($callAfterLoginEvent && $globalEvents->exists("AfterSuccessfulLogin"))
{
$dummy = array();
$globalEvents->AfterSuccessfulLogin($userID != "Guest" ? $userID : "", $password, $dummy, $pageObject);
}
}
/**
* @intellisense
*/
function CheckSecurity($strValue, $strAction, $table = "")
{
global $cAdvSecurityMethod, $strTableName;
if( $table == "" )
$table = $strTableName;
$pSet = new ProjectSettings($table);
if($_SESSION["AccessLevel"]==ACCESS_LEVEL_ADMIN)
return true;
$strPerm = GetUserPermissions();
if( strpos($strPerm, "M") === false )
{
}
// check user group permissions
$localAction = strtolower($strAction);
if($localAction=="add" && !(strpos($strPerm, "A")===false) ||
$localAction=="edit" && !(strpos($strPerm, "E")===false) ||
$localAction=="delete" && !(strpos($strPerm, "D")===false) ||
$localAction=="search" && !(strpos($strPerm, "S")===false) ||
$localAction=="import" && !(strpos($strPerm, "I")===false) ||
$localAction=="export" && !(strpos($strPerm, "P")===false) )
return true;
else
return false;
return true;
}
/**
* @intellisense
*/
function CheckTablePermissions($strTableName, $permission)
{
if( strpos(GetUserPermissions($strTableName), $permission) === false )
return false;
return true;
}
function pagetypeToPermissions($pageType)
{
global $_pagetypeToPermissions_dict;
if(!$_pagetypeToPermissions_dict)
{
$_pagetypeToPermissions_dict = array();
$_pagetypeToPermissions_dict["list"] = "S";
$_pagetypeToPermissions_dict["search"] = "S";
$_pagetypeToPermissions_dict["view"] = "S";
$_pagetypeToPermissions_dict["add"] = "A";
$_pagetypeToPermissions_dict["edit"] = "E";
$_pagetypeToPermissions_dict["print"] = "P";
$_pagetypeToPermissions_dict["export"] = "P";
$_pagetypeToPermissions_dict["import"] = "I";
}
return $_pagetypeToPermissions_dict[$pageType];
}
/**
* Add security WHERE clause to SELECT SQL command
* @intellisense
*/
function SecuritySQL($strAction, $table="", $strPerm="")
{
global $cAdvSecurityMethod,$strTableName;
if (!strlen($table))
$table = $strTableName;
$pSet = new ProjectSettings($table);
$ownerid=@$_SESSION["_".$table."_OwnerID"];
$ret="";
if(@$_SESSION["AccessLevel"]==ACCESS_LEVEL_ADMIN)
return "";
$ret="";
if(!strlen($strPerm))
$strPerm = GetUserPermissions($table);
if( strpos($strPerm, "M") === false )
{
}
if($strAction=="Edit" && !(strpos($strPerm, "E")===false) ||
$strAction=="Delete" && !(strpos($strPerm, "D")===false) ||
$strAction=="Search" && !(strpos($strPerm, "S")===false) ||
$strAction=="Export" && !(strpos($strPerm, "P")===false) )
return $ret;
else
return "1=0";
return "";
}
////////////////////////////////////////////////////////////////////////////////
// editing functions
////////////////////////////////////////////////////////////////////////////////
/**
* @intellisense
*/
function make_db_value($field,$value,$controltype="",$postfilename="",$table="")
{
$ret = prepare_for_db($field, $value, $controltype, $postfilename, $table);
if($ret === false)
return $ret;
return add_db_quotes($field, $ret, $table);
}
/**
* @param String field
* @param Mixed value
* @param String table The datasource table name
* @param String type
* @intellisense
*/
function add_db_quotes($field, $value, $table = "", $type = null)
{
global $strTableName, $locale_info, $cman;
if( $table == "" )
$table=$strTableName;
$pSet = new ProjectSettings($table);
$connection = $cman->byTable( $table );
if( $type == null )
$type = $pSet->getFieldType($field);
if( IsBinaryType($type) )
return $connection->addSlashesBinary( $value );
if( ($value === "" || $value === FALSE || is_null($value)) && !IsCharType($type) )
return "null";
if(NeedQuotes($type))
{
if( !IsDateFieldType($type) )
$value = $connection->prepareString($value);
else
{
$y = "(\d\d\d\d)";
$m = "(0?[1-9]|1[0-2])";
$d = "(0?[1-9]|[1-2][0-9]|3[0-1])";
$delim = "(-|".preg_quote($locale_info["LOCALE_SDATE"], "/").")";
$reg = "/".$d.$delim.$m.$delim.$y."|".$m.$delim.$d.$delim.$y."|".$y.$delim.$m.$delim.$d."/";
if( !preg_match($reg, $value, $matches) )
return "null";
$value = $connection->addDateQuotes( $value );
}
}
else
{
$strvalue = (string)$value;
if(is_numeric($strvalue))
$value = str_replace(",",".",$strvalue);
else
$value=0;
if( $connection->dbType == nDATABASE_PostgreSQL )
{
// if boolean type field, add quotes
if ($type == 11)
{
$value = strtolower($value);
if (!strlen($value) || $value == 0 || $value == "0" || $value == "false" || $value == "f" || $value == "n" || $value == "no" || $value == "off")
$value = "f";
else
$value = "t";
$value = $connection->prepareString($value);
}
}
}
return $value;
}
/**
* @param String field
* @param Mixed value
* @param String controltype
* @param String postfilename
* @param String table The datasource table name
* @intellisense
*/
function prepare_for_db($field, $value, $controltype = "", $postfilename = "", $table = "")
{
global $strTableName, $cman;
if( $controltype == "display" )
return $value;
if($table == "")
$table = $strTableName;
$pSet = new ProjectSettings($table);
$connection = $cman->byTable( $table );
$filename = "";
$type = $pSet->getFieldType($field);
if((!$controltype || $controltype == "multiselect") && !IsTimeType($type))
{
if(is_array($value))
$value = combinevalues($value);
if(($value === "" || $value === FALSE) && !IsCharType($type))
return "";
if(IsGuid($type))
{
if(!IsGuidString($value))
return "";
}
if( IsFloatType($type) )
return makeFloat($value);
if( IsNumberType($type) && !is_int($value) )
{
$value = trim($value);
if( !is_numeric( str_replace(",", ".", $value) ) )
$value = "";
}
return $value;
}
else if($controltype == "time" || IsTimeType($type))
{
if(!strlen($value))
return "";
$time = localtime2db($value);
if( $connection->dbType == nDATABASE_PostgreSQL )
{
$timeArr = explode(":",$time);
if($timeArr[0]>24 || $timeArr[1]>59 || $timeArr[2]>59)
return "";
}
if( IsDateFieldType($type) )
$time = "2000-01-01 ".$time;
return $time;
}
else if(substr($controltype, 0, 4) == "date")
{
$dformat = substr($controltype, 4);
if($dformat == EDIT_DATE_SIMPLE || $dformat == EDIT_DATE_SIMPLE_INLINE || $dformat == EDIT_DATE_SIMPLE_DP)
{
$time = localdatetime2db($value);
if($time == "null")
return "";
return $time;
}
else if($dformat == EDIT_DATE_DD || $dformat == EDIT_DATE_DD_INLINE || $dformat == EDIT_DATE_DD_DP)
{
$a = explode("-",$value);
if(count($a) < 3)
return "";
else
{
$y = $a[0];
$m = $a[1];
$d = $a[2];
}
if($y < 100)
{
if($y < 70)
$y += 2000;
else
$y += 1900;
}
return mysprintf("%04d-%02d-%02d",array($y,$m,$d));
}
else
return "";
}
else if(substr($controltype, 0, 8) == "checkbox")
{
if($value == "on")
$ret = 1;
else if($value == "none")
return "";
else
$ret = 0;
return $ret;
}
else
return false;
}
/**
* delete uploaded files when deleting the record
* @intellisense
*/
function DeleteUploadedFiles($pSet, $deleted_values)
{
foreach($deleted_values as $field => $value)
{
if(($pSet->getEditFormat($field) == EDIT_FORMAT_FILE || $pSet->getPageTypeByFieldEditFormat($field, EDIT_FORMAT_FILE) != "")
&& $pSet->isDeleteAssociatedFile($field))
{
if(!strlen($value))
return;
$filesArray = my_json_decode($value);
if(!is_array($filesArray) || count($filesArray) == 0)
{
$filesArray = array(array("name" => $pSet->getUploadFolder($field).$value));
if($pSet->getCreateThumbnail($field))
$filesArray[0]["thumbnail"] = $pSet->getUploadFolder($field).$pSet->getStrThumbnail($field).$value;
}
foreach($filesArray as $delFile)
{
$filename = $delFile["name"];
$isAbs = $pSet->isAbsolute($field) || isAbsolutePath($filename);
if(!$isAbs)
$filename = getabspath($filename);
runner_delete_file($filename);
if($delFile["thumbnail"] != "")
{
$filename = $delFile["thumbnail"];
if(!$isAbs)
$filename = getabspath($filename);
runner_delete_file($filename);
}
}
}
}
}
/**
* combine checked values from multi-select list box
* @intellisense
*/
function combinevalues($arr)
{
$ret="";
foreach($arr as $item)
{
$val = $item;
if(strlen($ret))
$ret.=",";
if(strpos($val,",")===false && strpos($val,'"')===false)
$ret.=$val;
else
{
$val=str_replace('"','""',$val);
$ret.='"'.$val.'"';
}
}
return $ret;
}
/**
* split values for multi-select list box
* @intellisense
*/
function splitvalues($str)
{
$arr=array();
if($str=="")
{
$arr[] = "";
return $arr;
}
$start=0;
$i=0;
$inquot=false;
while($i<=strlen($str))
{
if($igetLookupTable($field);
$lookupType = $pSet->getLookupType($field);
$displayFieldName = $pSet->getDisplayField($field);
$linkFieldName = $pSet->getLinkField($field);
$linkAndDisplaySame = $linkFieldName == $displayFieldName;
if($lookupType == LT_QUERY)
{
$lookupPSet = new ProjectSettings($lookupTable);
$linkFieldIndex = $lookupPSet->getFieldIndex($linkFieldName) - 1;
if($linkAndDisplaySame)
$displayFieldIndex = $linkFieldIndex;
else
{
if($pSet->getCustomDisplay($field))
$displayFieldIndex = $lookupPSet->getCustomExpressionIndex($pSet->_table, $field);
else
$displayFieldIndex = $lookupPSet->getFieldIndex($displayFieldName) - 1;
}
}
else
{
$linkFieldIndex = 0;
$displayFieldIndex = $linkAndDisplaySame ? 0 : 1;
}
return array("linkFieldIndex" => $linkFieldIndex, "displayFieldIndex" => $displayFieldIndex);
}
//////////////////////////////////////////////////////////////////////////////
/**
* Get locale, am, pm for field edit as time
* @param integer $convention - 24 or 12 hours format for timePicker
* @param boolean $useTimePicker - use timePicker or not
* @return array
* @intellisense
*/
function getLacaleAmPmForTimePicker($convention, $useTimePicker = false)
{
$am = '';
$pm = '';
global $locale_info;
if($useTimePicker)
{
$locale_convention = $locale_info["LOCALE_ITIME"] ? 24 : 12;
if($convention == $locale_convention)
{
$am = $locale_info["LOCALE_S1159"];
$pm = $locale_info["LOCALE_S2359"];
$locale = $locale_info["LOCALE_STIMEFORMAT"];
}
else
{
if($convention == 24)
{
$am = '';
$pm = '';
$locale = "H:mm:ss";
}
else
{
$am = 'am';
$pm = 'pm';
$locale = "h:mm:ss tt";
}
}
}
else
$locale = $locale_info["LOCALE_STIMEFORMAT"];
return array('am'=>$am,'pm'=>$pm,'locale'=>$locale);
}
/**
* Get value for field edit as time and get dpTime settings
* @param integer $convention - 24 or 12 hours format for timePicker
* @param string $type - type of field
* @param string $value - value of field
* @param boolean $useTimePicker - use timePicker or not
* @return array
* @intellisense
*/
function getValForTimePicker($type,$value,$locale)
{
$val = "";
$dbtime = array();
if(IsDateFieldType($type))
{
$dbtime = db2time($value);
if(count($dbtime))
$val = format_datetime_custom($dbtime, $locale);
}
else
{
$arr = parsenumbers($value);
if(count($arr))
{
while(count($arr)<3)
$arr[] = 0;
$dbtime = array(0, 0, 0, $arr[0], $arr[1], $arr[2]);
$val = format_datetime_custom($dbtime, $locale);
}
}
return array('val'=>$val,'dbTime'=>$dbtime);
}
/**
* @intellisense
*/
function my_stripos($str,$needle, $offest)
{
if (strlen($needle)==0 || strlen($str)==0)
return false;
return strpos(strtolower($str),strtolower($needle), $offest);
}
/**
* @intellisense
*/
function my_str_ireplace($search, $replace,$str)
{
$pos=my_stripos($str,$search,0);
if($pos===false)
return $str;
return substr($str,0,$pos).$replace.substr($str,$pos+strlen($search));
}
/**
* @intellisense
*/
function in_assoc_array($name, $arr)
{
foreach ($arr as $key => $value)
{
if ($key==$name)
return true;
}
return false;
}
/**
* @intellisense
*/
function xmlencode($str)
{
$str = str_replace("&","&",$str);
$str = str_replace("<","<",$str);
$str = str_replace(">",">",$str);
$str = str_replace("'","'",$str);
return escapeEntities($str);
}
/**
* @intellisense
*/
function print_inline_array(&$arr,$printkey=false)
{
if(!$printkey)
{
foreach ( $arr as $key=>$val )
echo str_replace(array("&","<","\\","\r","\n"),array("&","<","\\\\","\\r","\\n"),str_replace(array("\\","\r","\n"),array("\\\\","\\r","\\n"),$val))."\\n";
}
else
{
foreach( $arr as $key=>$val )
echo str_replace(array("&","<","\\","\r","\n"),array("&","<","\\\\","\\r","\\n"),str_replace(array("\\","\r","\n"),array("\\\\","\\r","\\n"),$key))."\\n";
}
}
/**
* @intellisense
*/
function checkpassword($pwd)
{
$len = strlen($pwd);
if($len < 8)
return false;
$cUnique = array();
$cLower = $cUpper = $cDigit = 0;
for($i=0; $i<$len; $i++)
{
$c = substr($pwd, $i, 1);
if($c >= 'a' && $c <= 'z')
$cLower++;
else if($c >= 'A' && $c<= 'Z')
$cUpper++;
else
$cDigit++;
$cUnique[$c] = 1;
}
if(count($cUnique)<4)
return false;
if($cDigit<2)
return false;
return true;
}
/**
* @intellisense
*/
function GetChartXML($chartname)
{
$strTableName = GetTableByShort($chartname);
$settings = new ProjectSettings($strTableName);
return $settings->getChartXml();
}
function isSecureProtocol() {
return
(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
|| $_SERVER['SERVER_PORT'] == 443;
}
/**
* Returns site address without path
* Examples:
* http://server.com:88
* https://server.com
*
* @intellisense
*/
function GetSiteUrl()
{
$proto = "http://";
if( $_SERVER["HTTPS"] && $_SERVER["HTTPS"] != "off")
$proto = "https://";
return $proto . $_SERVER["HTTP_HOST"];
}
/**
* Returns site address with path
* Examples:
* http://server.com:88/Calendar
* https://server.com
*
* @intellisense
*/
function GetFullSiteUrl()
{
return getDirectoryFromURI( GetSiteUrl() . $_SERVER['REQUEST_URI'] );
}
/**
* @intellisense
*/
function GetAuditObject($table="")
{
$linkAudit = false;
if(!$table)
{
$linkAudit = true;
}
else
{
$settings = new ProjectSettings($table);
$linkAudit = $settings->auditEnabled();
}
if ($linkAudit)
{
require_once(getabspath("include/audit.php"));
return new AuditTrailTable();
}
else
{
return NULL;
}
}
/**
* @intellisense
*/
function GetLockingObject($table="")
{
return NULL;
if(!$table)
{
global $strTableName;
$table = $strTableName;
}
$settings = new ProjectSettings($table);
if ($settings->lockingEnabled())
{
require_once(getabspath("include/locking.php"));
return new oLocking();
}
else
{
return NULL;
}
}
/**
* @intellisense
*/
function isEnableSection508()
{
return GetGlobalData("isSection508",false);
}
/**
* Returns validation type which defined in js validation object.
* Use this function, because runner constants has another names of validation functions
*
* @param string $name
* @return string
* @intellisense
*/
function getJsValidatorName($name)
{
switch ($name)
{
case "Number":
return "IsNumeric";
break;
case "Password":
return "IsPassword";
break;
case "Email":
return "IsEmail";
break;
case "Currency":
return "IsMoney";
break;
case "US ZIP Code":
return "IsZipCode";
break;
case "US Phone Number":
return "IsPhoneNumber";
break;
case "US State":
return "IsState";
break;
case "US SSN":
return "IsSSN";
break;
case "Credit Card":
return "IsCC";
break;
case "Time":
return "IsTime";
break;
case "Regular expression":
return "RegExp";
break;
default:
return $name;
break;
}
}
/**
* @intellisense
*/
function SetLangVars($xt, $prefix, $pageName = "", $extraparams = "")
{
$xt->assign("lang_label", true);
if( @$_REQUEST["language"] )
$_SESSION["language"] = @$_REQUEST["language"];
$currentLang = mlang_getcurrentlang();
$var = GoodFieldName($currentLang)."_langattrs";
$xt->assign($var, "selected");
$xt->assign($currentLang . "LANGLINK_ACTIVE", true);
$xt->assign("Chinese (Hong Kong S.A.R.)LANGLINK", "Chinese (Hong Kong S.A.R.)" != $currentLang);
$xt->assign("EnglishLANGLINK", "English" != $currentLang);
if( isEnableSection508() )
$xt->assign_section("lang_label", "");
if( $extraparams )
$extraparams = $extraparams."&";
$dataAttr = 'data-params="'.$extraparams.'" data-prefix="'.$prefix.'"';
$xt->assign("langselector_attrs", "id=\"languageSelector\" ".$dataAttr);
$xt->assign("languages_block", true);
}
/**
* @intellisense
*/
function GetTableCaption($table)
{
global $tableCaptions;
return @$tableCaptions[mlang_getcurrentlang()][$table];
}
/**
* @intellisense
*/
function GetFieldByLabel($table, $label)
{
global $field_labels, $strTableName;
if (!$table)
{
$table = $strTableName;
}
if(!array_key_exists($table,$field_labels))
return "";
$currLang = mlang_getcurrentlang();
if(!array_key_exists($currLang,$field_labels[$table]))
return "";
$lables = $field_labels[$table][mlang_getcurrentlang()];
foreach ($lables as $key=>$val)
{
if ($val == $label)
{
return $key;
}
}
return '';
}
/**
* @intellisense
*/
function GetFieldLabel($table,$field)
{
global $field_labels;
if(!array_key_exists($table,$field_labels))
return "";
return @$field_labels[$table][mlang_getcurrentlang()][$field];
}
/**
* @intellisense
*/
function GetFieldToolTip($table, $field)
{
global $fieldToolTips;
if(!array_key_exists($table, $fieldToolTips))
return "";
return @$fieldToolTips[$table][mlang_getcurrentlang()][$field];
}
/**
* @intellisense
*/
function GetCustomLabel($custom)
{
global $custom_labels;
return @$custom_labels[mlang_getcurrentlang()][$custom];
}
/**
* @intellisense
*/
function mlang_getcurrentlang()
{
global $_currentLanguage, $mlang_messages,$mlang_defaultlang;
if(@$_REQUEST["language"])
$_SESSION["language"]=@$_REQUEST["language"];
if(@$_SESSION["language"])
return $_SESSION["language"];
return $mlang_defaultlang;
}
function isRTL()
{
global $mlang_charsets;
$cp = strtolower($mlang_charsets[mlang_getcurrentlang()]);
return ($cp == 'windows-1256' || $cp == 'windows-1255');
}
/**
* @intellisense
*/
function mlang_getlanglist()
{
global $mlang_messages,$mlang_defaultlang;
return array_keys($mlang_messages);
}
/**
* @intellisense
*/
function getMountNames()
{
$mounts = array();
$mounts[1] = mlang_message("MONTH_JAN");
$mounts[2] = mlang_message("MONTH_FEB");
$mounts[3] = mlang_message("MONTH_MAR");
$mounts[4] = mlang_message("MONTH_APR");
$mounts[5] = mlang_message("MONTH_MAY");
$mounts[6] = mlang_message("MONTH_JUN");
$mounts[7] = mlang_message("MONTH_JUL");
$mounts[8] = mlang_message("MONTH_AUG");
$mounts[9] = mlang_message("MONTH_SEP");
$mounts[10] = mlang_message("MONTH_OCT");
$mounts[11] = mlang_message("MONTH_NOV");
$mounts[12] = mlang_message("MONTH_DEC");
return $mounts;
}
/**
* @intellisense
*/
function displayDetailsOn($table,$page)
{
global $detailsTablesData;
if(!isset($detailsTablesData[$table]) || !is_array($detailsTablesData[$table]))
return false;
if($page == PAGE_EDIT)
$key="previewOnEdit";
elseif($page == PAGE_ADD)
$key="previewOnAdd";
elseif($page == PAGE_VIEW)
$key="previewOnView";
else
$key="previewOnList";
for($i=0;$iisDispGrid())
$params["dpObject"]->showPage();
$strTableName = $oldTableName;
}
/**
* update record on Edit page
* @intellisense
*/
function DoUpdateRecordSQL( $pageObject )
{
$table = $pageObject->pSet->getOriginalTableName();
$strWhereClause = $pageObject->getWhereClause( true );
$evalues = $pageObject->getNewRecordData();
$blobfields = $pageObject->getBlobFields();
if(!count($evalues))
return true;
$strSQL = "update ".$pageObject->connection->addTableWrappers($table)." set ";
$blobs = PrepareBlobs($evalues, $blobfields, $pageObject);
// construct SQL string
foreach($evalues as $ekey=>$value)
{
if(in_array($ekey,$blobfields))
$strValue = $value;
else
{
if( is_null( $pageObject->cipherer ) )
$strValue = add_db_quotes( $ekey, $value );
else
$strValue = $pageObject->cipherer->AddDBQuotes( $ekey, $value );
}
$strSQL .= $pageObject->getTableField($ekey)."=".$strValue.", ";
}
$strSQL = substr( $strSQL, 0, strlen($strSQL) - 2 );
if($strWhereClause === "")
{
$strWhereClause = " (1=1) ";
}
$strSQL.=" where ".$strWhereClause;
if(SecuritySQL("Edit", $pageObject->tName))
$strSQL .= " and (".SecuritySQL("Edit", $pageObject->tName).")";
if( !ExecuteUpdate($pageObject, $strSQL, $blobs) )
return false;
return true;
}
/**
* insert record on Add & Register pages
* @intellisense
*/
function DoInsertRecordSQL($table, &$avalues, &$blobfields, &$pageObject)
{
// make SQL string
$strSQL = "insert into ".$pageObject->connection->addTableWrappers($table)." ";
$strFields = "(";
$strValues = "(";
$blobs = PrepareBlobs($avalues, $blobfields, $pageObject);
foreach($avalues as $akey => $value)
{
$strFields.= $pageObject->getTableField($akey).", ";
if( in_array($akey, $blobfields) )
$strValues.= $value.", ";
else
{
if( is_null($pageObject->cipherer) )
$strValues.= add_db_quotes($akey, $value).", ";
else
$strValues.= $pageObject->cipherer->AddDBQuotes($akey, $value).", ";
}
}
if( substr($strFields, -2) == ", " )
$strFields = substr($strFields, 0, strlen($strFields) - 2);
if( substr($strValues, -2) == ", " )
$strValues = substr($strValues, 0, strlen($strValues) - 2);
$strSQL.= $strFields.") values ".$strValues.")";
if( !ExecuteUpdate($pageObject, $strSQL, $blobs) )
return false;
$pageObject->ProcessFiles();
return true;
}
/**
* insert record on Add page
* @param RunnerPage &pageObject
* @intellisense
*/
function DoInsertRecordSQLOnAdd( &$pageObject )
{
$table = $pageObject->pSet->getOriginalTableName();
$avalues = $pageObject->getNewRecordData();
$blobfields = $pageObject->getBlobFields();
// make SQL string
$strSQL = "insert into ".$pageObject->connection->addTableWrappers($table)." ";
$strFields="(";
$strValues="(";
$blobs = PrepareBlobs( $avalues, $blobfields, $pageObject );
foreach($avalues as $akey => $value)
{
$strFields.= $pageObject->getTableField($akey).", ";
if( in_array($akey, $blobfields) )
$strValues.= $value.", ";
else
{
if( is_null( $pageObject->cipherer ) )
$strValues.= add_db_quotes($akey, $value).", ";
else
$strValues.= $pageObject->cipherer->AddDBQuotes($akey, $value).", ";
}
}
if( substr($strFields, -2) == ", ")
$strFields = substr($strFields, 0, strlen($strFields) - 2);
if( substr($strValues, -2) == ", ")
$strValues = substr($strValues, 0, strlen($strValues) - 2);
$strSQL.= $strFields.") values ".$strValues.")";
if( !ExecuteUpdate($pageObject, $strSQL, $blobs) )
return false;
return true;
}
function &getEventObject($table)
{
global $tableEvents;
$ret = null;
if(!array_key_exists($table,$tableEvents))
return $ret;
return $tableEvents[$table];
}
/**
* @intellisense
*/
function tableEventExists($event,$table)
{
global $tableEvents;
if(!array_key_exists($table,$tableEvents))
return false;
return $tableEvents[$table]->exists($event);
}
/**
* @intellisense
*/
function add_nocache_headers()
{
header("Cache-Control: no-cache, no-store, max-age=0, must-revalidate");
header("Pragma: no-cache");
header("Expires: Fri, 01 Jan 1990 00:00:00 GMT");
}
/**
* @intellisense
*/
function IsGuidString(&$str)
{
// {3F2504E0-4F89-11D3-9A0C-0305E82C3301}
if(strlen($str)==36 && substr($str,0,1)!="{" && substr($str,-1)!="}")
$str="{".$str."}";
elseif(strlen($str)==37 && substr($str,0,1)=="{" && substr($str,-1)!="}")
$str=$str."}";
elseif(strlen($str)==37 && substr($str,0,1)!="{" && substr($str,-1)=="}")
$str="{".$str;
if(strlen($str)!=38)
return false;
for($i=0;$i<38;$i++)
{
$c = substr($str,$i,1);
if($i==0)
{
if($c!='{')
return false;
}
elseif($i==37 )
{
if($c!='}')
return false;
}
elseif($i==9 || $i==14 || $i==19 || $i==24)
{
if($c!='-')
return false;
}
else
{
if(($c<'0' || $c>'9') && ($c<'a' || $c>'f') && ($c<'A' || $c>'F'))
return false;
}
}
return true;
}
/**
* @intellisense
*/
function IsStoredProcedure($strSQL)
{
if(strlen($strSQL)>6)
{
$c=strtolower(substr($strSQL,6,1));
if(strtolower(substr($strSQL,0,6))=="select" && ($c<'0' || $c>'9') && ($c<'a' || $c>'z') && $c!='_')
return false;
else
return true;
}
else
return true;
}
/**
* Checks whether an browser for mobile devices
* Returns false - Browser stationary or it was not possible to determine
* 1-4 - the browser is running on your mobile device
* @return Mixed
* @intellisense
*/
function MobileDetected()
{
$user_agent = strtolower($_SERVER['HTTP_USER_AGENT']);
$accept = strtolower($_SERVER['HTTP_ACCEPT']);
if( strpos($accept,'text/vnd.wap.wml')!==false || strpos($accept,'application/vnd.wap.xhtml+xml')!==false )
return 1; // Mobile browser detected by HTTP-headers
if( isset($_SERVER['HTTP_X_WAP_PROFILE']) || isset($_SERVER['HTTP_PROFILE']) )
return 2; // Mobile browser detected by server settings
if(preg_match('/(ipad|android|symbianos|opera mini|ipod|blackberry|'.
'palm os|palm|hiptop|avantgo|plucker|xiino|blazer|elaine|iris|3g_t|'.
'windows ce|opera mobi|windows ce; smartphone;|windows ce; iemobile|'.
'mini 9.5|vx1000|lge |m800|e860|u940|ux840|compal|'.
'wireless| mobi|ahong|lg380|lgku|lgu900|lg210|lg47|lg920|lg840|'.
'lg370|sam-r|mg50|s55|g83|t66|vx400|mk99|d615|d763|el370|sl900|'.
'mp500|samu3|samu4|vx10|xda_|samu5|samu6|samu7|samu9|a615|b832|'.
'm881|s920|n210|s700|c-810|_h797|mob-x|sk16d|848b|mowser|s580|'.
'r800|471x|v120|rim8|c500foma:|160x|x160|480x|x640|t503|w839|'.
'i250|sprint|w398samr810|m5252|c7100|mt126|x225|s5330|s820|'.
'htil-g1|fly v71|s302|-x113|novarra|k610i|-three|8325rc|8352rc|'.
'sanyo|vx54|c888|nx250|n120|mtk |c5588|s710|t880|c5005|i;458x|'.
'p404i|s210|c5100|teleca|s940|c500|s590|foma|samsu|vx8|vx9|a1000|'.
'_mms|myx|a700|gu1100|bc831|e300|ems100|me701|me702m-three|sd588|'.
's800|8325rc|ac831|mw200|brew |d88|htc\/|htc_touch|355x|m50|km100|'.
'd736|p-9521|telco|sl74|ktouch|m4u\/|me702|8325rc|kddi|phone|lg |'.
'sonyericsson|samsung|240x|x320vx10|nokia|sony cmd|motorola|'.
'up.browser|up.link|mmp|symbian|smartphone|midp|wap|vodafone|o2|'.
'pocket|kindle|silk|hpwos|mobile|psp|treo)/', $user_agent))
{
return 3; // Mobile browser detected by User Agent signature
}
if(in_array(substr($user_agent,0,4),
Array("1207", "3gso", "4thp", "501i", "502i", "503i", "504i", "505i", "506i",
"6310", "6590", "770s", "802s", "a wa", "abac", "acer", "acoo", "acs-",
"aiko", "airn", "alav", "alca", "alco", "amoi", "anex", "anny", "anyw",
"aptu", "arch", "argo", "aste", "asus", "attw", "au-m", "audi", "aur ",
"aus ", "avan", "beck", "bell", "benq", "bilb", "bird", "blac", "blaz",
"brew", "brvw", "bumb", "bw-n", "bw-u", "c55/", "capi", "ccwa", "cdm-",
"cell", "chtm", "cldc", "cmd-", "cond", "craw", "dait", "dall", "dang",
"dbte", "dc-s", "devi", "dica", "dmob", "doco", "dopo", "ds-d", "ds12",
"el49", "elai", "eml2", "emul", "eric", "erk0", "esl8", "ez40", "ez60",
"ez70", "ezos", "ezwa", "ezze", "fake", "fetc", "fly-", "fly_", "g-mo",
"g1 u", "g560", "gene", "gf-5", "go.w", "good", "grad", "grun", "haie",
"hcit", "hd-m", "hd-p", "hd-t", "hei-", "hiba", "hipt", "hita", "hp i",
"hpip", "hs-c", "htc ", "htc-", "htc_", "htca", "htcg", "htcp", "htcs",
"htct", "http", "huaw", "hutc", "i-20", "i-go", "i-ma", "i230", "iac",
"iac-", "iac/", "ibro", "idea", "ig01", "ikom", "im1k", "inno", "ipaq",
"iris", "jata", "java", "jbro", "jemu", "jigs", "kddi", "keji", "kgt",
"kgt/", "klon", "kpt ", "kwc-", "kyoc", "kyok", "leno", "lexi", "lg g",
"lg-a", "lg-b", "lg-c", "lg-d", "lg-f", "lg-g", "lg-k", "lg-l", "lg-m",
"lg-o", "lg-p", "lg-s", "lg-t", "lg-u", "lg-w", "lg/k", "lg/l", "lg/u",
"lg50", "lg54", "lge-", "lge/", "libw", "lynx", "m-cr", "m1-w", "m3ga",
"m50/", "mate", "maui", "maxo", "mc01", "mc21", "mcca", "medi", "merc",
"meri", "midp", "mio8", "mioa", "mits", "mmef", "mo01", "mo02", "mobi",
"mode", "modo", "mot ", "mot-", "moto", "motv", "mozz", "mt50", "mtp1",
"mtv ", "mwbp", "mywa", "n100", "n101", "n102", "n202", "n203", "n300",
"n302", "n500", "n502", "n505", "n700", "n701", "n710", "nec-", "nem-",
"neon", "netf", "newg", "newt", "nok6", "noki", "nzph", "o2 x", "o2-x",
"o2im", "opti", "opwv", "oran", "owg1", "p800", "palm", "pana", "pand",
"pant", "pdxg", "pg-1", "pg-2", "pg-3", "pg-6", "pg-8", "pg-c", "pg13",
"phil", "pire", "play", "pluc", "pn-2", "pock", "port", "pose", "prox",
"psio", "pt-g", "qa-a", "qc-2", "qc-3", "qc-5", "qc-7", "qc07", "qc12",
"qc21", "qc32", "qc60", "qci-", "qtek", "qwap", "r380", "r600", "raks",
"rim9", "rove", "rozo", "s55/", "sage", "sama", "samm", "sams", "sany",
"sava", "sc01", "sch-", "scoo", "scp-", "sdk/", "se47", "sec-", "sec0",
"sec1", "semc", "send", "seri", "sgh-", "shar", "sie-", "siem", "sk-0",
"sl45", "slid", "smal", "smar", "smb3", "smit", "smt5", "soft", "sony",
"sp01", "sph-", "spv ", "spv-", "sy01", "symb", "t-mo", "t218", "t250",
"t600", "t610", "t618", "tagt", "talk", "tcl-", "tdg-", "teli", "telm",
"tim-", "topl", "tosh", "treo", "ts70", "tsm-", "tsm3", "tsm5", "tx-9",
"up.b", "upg1", "upsi", "utst", "v400", "v750", "veri", "virg", "vite",
"vk-v", "vk40", "vk50", "vk52", "vk53", "vm40", "voda", "vulc", "vx52",
"vx53", "vx60", "vx61", "vx70", "vx80", "vx81", "vx83", "vx85", "vx98",
"w3c ", "w3c-", "wap-", "wapa", "wapi", "wapj", "wapm", "wapp", "wapr",
"waps", "wapt", "wapu", "wapv", "wapy", "webc", "whit", "wig ", "winc",
"winw", "wmlb", "wonu", "x700", "xda-", "xda2", "xdag", "yas-", "your",
"zeto", "zte-")))
{
return 4; // Mobile browser detected by User Agent signature
}
return false; // Mobile browser not found
}
/**
* Check if user is using IE 8
* @intellisense
*/
function isIE8()
{
$matches = "";
preg_match('/MSIE (.*?);/', $_SERVER['HTTP_USER_AGENT'], $matches);
return (count($matches)>1 && $matches[1]<=8);
}
/**
* Check if the client application's part is run on a mobile device
* @intellisense
*/
function mobileDeviceDetected()
{
return false;
}
/**
* Check if the client application's part is run on a mobile device
* @return Boolean
*/
function detectMobileDevice()
{
return false;
}
function IsMobile()
{
return detectMobileDevice();
}
/**
* GetPageLayout
* Return reference to layout object by table name, page type and section (or tab) name
* @param {string} tableName the short table name (may be empty)
* @param {string} pageType the page's type
* @param {string} suffixName (optional) It could contain a section/tab name or a pages layout's suffix (eg 'success')
* @return {reference} a reference to the layout object
*/
function & GetPageLayout($tableName, $pageType, $suffixName = '')
{
global $page_layouts;
$layoutName = ($tableName != '' ? $tableName.'_' : '').$pageType.($suffixName != '' ? '_'.$suffixName : '');
$layout = $page_layouts[$layoutName];
if($layout)
{
if(postvalue("pdf"))
{
$layout->style = $layout->pdfStyle();
}
}
return $layout;
}
/**
* Check if the mobile template is set
* @param String templateFileName
* @return Boolean
*/
function isPageLayoutMobile( $templateFileName )
{
return false;
}
/**
* @intellisense
*/
function extractStyle($str)
{
$pos = my_stripos($str,'style="',0);
$quot = '"';
if($pos === false)
{
$pos = my_stripos($str,'style=\'',0);
$quot = '\'';
}
if($pos === false)
return;
$pos1 = strpos($str,$quot, $pos+7);
if($pos1 === false)
return "";
return substr($str, $pos+7, $pos1-$pos-7);
}
/**
* @intellisense
*/
function injectStyle($str, $style)
{
$pos = my_stripos($str,'style="',0);
$quot = '"';
if($pos === false)
{
$pos = my_stripos($str,'style=\'',0);
$quot = '\'';
}
if($pos === false)
return $str.' style="'.$style.'"';
return substr($str,0, $pos+7).$style.";".substr($str, $pos+7);
}
/**
* @intellisense
*/
function isSingleSign()
{
if( GetGlobalData("ADSingleSign",0) && $_SERVER["REMOTE_USER"] )
return false;
return true;
}
/**
* @intellisense
*/
function generatePassword($length)
{
$password="";
for($i=0;$i<$length;$i++)
{
$j = rand(0,35);
if($j<26)
$password.= chr(ord('a')+$j);
else
$password.= chr(ord('0')-26+$j);
}
return $password;
}
/**
* @intellisense
*/
function securityCheckFileName($fileName)
{
$maliciousStrings = array("../", "..\\");
for($i = 0; $i < count($maliciousStrings); $i++)
{
while(strpos($fileName, $maliciousStrings[$i]) !== FALSE)
{
$fileName = str_replace($maliciousStrings, "", $fileName);
}
}
return $fileName;
}
/**
* @intellisense
*/
function getOptionsForMultiUpload($pSet, $field)
{
if($pSet->isAbsolute($field))
$uploadDir = $pSet->getUploadFolder($field);
else
$uploadDir = getabspath($pSet->getUploadFolder($field));
$options = array(
"max_file_size" => $pSet->getMaxFileSize($field),
"max_totalFile_size" => $pSet->getMaxTotalFilesSize($field),
"max_number_of_files" => $pSet->getMaxNumberOfFiles($field),
"max_width" => $pSet->getMaxImageWidth($field),
"max_height" => $pSet->getMaxImageHeight($field));
if($pSet->getResizeOnUpload($field))
{
$options["resizeOnUpload"] = true;
$options["max_width"] = $pSet->getNewImageSize($field);
$options["max_height"] = $options["max_width"];
}
if($pSet->getCreateThumbnail($field))
{
$options['image_versions'] = array(
'thumbnail' => array(
'max_width' => $pSet->getThumbnailSize($field),
'max_height' => $pSet->getThumbnailSize($field),
'thumbnailPrefix' => $pSet->getStrThumbnail($field)
));
}
return $options;
}
/**
* @intellisense
*/
function getContentTypeByExtension($ext)
{
if( substr($ext,0,1) != "." )
$ext = ".".$ext;
if($ext==".asf")
$ctype = "video/x-ms-asf";
elseif($ext==".avi")
$ctype = "video/avi";
elseif($ext==".doc")
$ctype = "application/msword";
elseif($ext==".zip")
$ctype = "application/zip";
elseif($ext==".xls")
$ctype = "application/vnd.ms-excel";
elseif($ext==".png")
$ctype = "image/png";
elseif($ext==".gif")
$ctype = "image/gif";
elseif($ext==".jpg" || $ext=="jpeg")
$ctype = "image/jpeg";
elseif($ext==".wav")
$ctype = "audio/wav";
elseif($ext==".mp3")
$ctype = "audio/mpeg";
elseif($ext==".mpg" || $ext=="mpeg")
$ctype = "video/mpeg";
elseif($ext==".rtf")
$ctype = "application/rtf";
elseif($ext==".htm" || $ext=="html")
$ctype = "text/html";
elseif($ext==".asp")
$ctype = "text/asp";
elseif($ext == ".flv")
$ctype = "video/flv";
elseif($ext == ".mp4")
$ctype = "video/mp4";
elseif($ext == ".webm")
$ctype = "video/webm";
elseif($ext == ".pdf")
$ctype = "application/pdf";
else
$ctype = "application/octet-stream";
return $ctype;
}
/**
* @intellisense
*/
function getLatLngByAddr($addr)
{
switch( getMapProvider() ){
case GOOGLE_MAPS: $url = 'http://maps.googleapis.com/maps/api/geocode/json?address='.rawurlencode($addr).'&sensor=false';
$result = my_json_decode(myurl_get_contents($url));
if($result['status'] == 'OK')
{
return $result['results'][0]['geometry']['location'];
}
break;
case OPEN_STREET_MAPS: $url = 'http://nominatim.openstreetmap.org/search/'.rawurlencode($addr).'?format=json&addressdetails=1&limit=1';
$result = my_json_decode(myurl_get_contents($url));
if($result)
{
$lat = $result[0]['lat'];
if( !$lat )
$lat = 0;
$lng = $result[0]['lon'];
if( !$lng )
$lng = 0;
return array("lat"=>$lat,"lng"=>$lng);
}
break;
case BING_MAPS:
if( !GetGlobalData("apiGoogleMapsCode","") )
return false;
$url = 'http://dev.virtualearth.net/REST/v1/Locations?query='.rawurlencode( $addr ).'&output=json&key='.GetGlobalData("apiGoogleMapsCode","");
$result = my_json_decode(myurl_get_contents($url));
if($result)
{
$lat = $result["resourceSets"][0]["resources"][0]["geocodePoints"][0]["coordinates"][0];
if( !$lat )
$lat = 0;
$lng = $result["resourceSets"][0]["resources"][0]["geocodePoints"][0]["coordinates"][1];
if( !$lng )
$lng = 0;
return array("lat"=>$lat,"lng"=>$lng);
}
break;
}
return false;
}
/**
* @intellisense
*/
function isLoggedAsGuest()
{
if($_SESSION["UserID"] == "Guest" && $_SESSION["AccessLevel"] == ACCESS_LEVEL_GUEST)
return true;
return false;
}
/**
* Check if the "Login as Guest" option is turned on
* @return Boolean
*/
function isGuestLoginAvailable()
{
return false;
}
/**
* @intellisense
*/
function func_Override($page)
{
global $globalSettings;
if(!isset($globalSettings["override"][$page]))
return otNone;
return $globalSettings["override"][$page];
}
/**
* printMFHandlerHeaders
* Print HTTP headers for mfhandler.php
* @intellisense
*/
function printMFHandlerHeaders()
{
header('Content-Disposition: inline; filename="files.json"');
header('X-Content-Type-Options: nosniff');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: OPTIONS, HEAD, GET, POST');
header('Access-Control-Allow-Headers: X-File-Name, X-File-Type, X-File-Size');
}
/**
* @intellisense
*/
function GetFieldType($field,$table="")
{
global $pageObject;
if($table != "" || !isset($pageObject))
{
if($table == "")
{
global $strTableName;
$table = $strTableName;
}
$newSet = new ProjectSettings($table);
return $newSet->getFieldType($field);
}
else
return $pageObject->pSet->getFieldType($field);
}
/**
* @intellisense
*/
function Label($field,$table="")
{
global $pageObject;
if($table != "" || !isset($pageObject))
{
if($table == "")
{
global $strTableName;
$table = $strTableName;
}
$newSet = new ProjectSettings($table);
$result = $newSet->label($field);
}
else
$result = $pageObject->pSet->label($field);
return $result != "" ? $result : $field;
}
/**
* @intellisense
*/
function getIconByFileType($fileType, $sourceFileName)
{
switch($fileType)
{
case "text/html":
$fileName = "html.png";
break;
case "text/asp":
$fileName = "code.png";
break;
case "application/msword":
case "application/vnd.openxmlformats-officedocument.wordprocessingml.document":
$fileName = "doc.png";
break;
case "application/vnd.ms-excel":
case "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":
$fileName = "xls.png";
break;
case "application/rtf":
$fileName = "rtf.png";
break;
case "image/png":
case "image/x-png":
$fileName = "png.png";
break;
case "image/gif":
$fileName = "gif.png";
break;
case "image/jpeg":
case "image/pjpeg":
$fileName = "jpg.png";
break;
case "audio/wav":
$fileName = "wma.png";
break;
case "audio/mp3":
case "audio/mpeg3":
case "audio/mpeg":
$fileName = "mp2.png";
break;
case "video/mpeg":
$fileName = "mpeg.png";
break;
case "video/flv":
$fileName = "flv.png";
break;
case "video/mp4":
$fileName = "mp4.png";
break;
case "video/x-ms-asf":
$fileName = "asf.png";
break;
case "video/webm":
case "video/x-webm":
case "video/avi":
$fileName = "mpg.png";
break;
case "application/zip":
case "application/x-zip-compressed":
$fileName = "zip.png";
break;
default:
$fileName = "text.png";
$dotPosition = strrpos($sourceFileName, '.');
if($dotPosition !== false && $dotPosition < strlen($sourceFileName) - 1)
{
$ext = substr($sourceFileName, $dotPosition + 1);
$icons = array();
$icons['7z'] = '7z';
$icons['asf'] = 'asf';
$icons['asp'] = 'code';
$icons['avi'] = 'mpg';
$icons['chm'] = 'chm';
$icons['doc'] = 'doc';
$icons['docx'] = 'doc';
$icons['flv'] = 'flv';
$icons['gz'] = 'gz';
$icons['html'] = 'html';
$icons['mdb'] = 'mdb';
$icons['mdbx'] = 'mdb';
$icons['mp3'] = 'mp2';
$icons['mp4'] = 'mp4';
$icons['mpeg'] = 'mpeg';
$icons['mpg'] = 'mpg';
$icons['mov'] = 'mov';
$icons['pdf'] = 'pdf';
$icons['php'] = 'code';
$icons['pps'] = 'pps';
$icons['ppt'] = 'powerpoint';
$icons['psd'] = 'psd';
$icons['rar'] = 'rar';
$icons['rtf'] = 'rtf';
$icons['swf'] = 'swf';
$icons['tif'] = 'tif';
$icons['ttf'] = 'ttf';
$icons['txt'] = 'txt';
$icons['wav'] = 'wav';
$icons['webm'] = 'mpg';
$icons['wma'] = 'wma';
$icons['wmv'] = 'emv';
$icons['xls'] = 'xls';
$icons['xlsx'] = 'xls';
$icons['zip'] = 'zip';
if(isset($icons[$ext]))
$fileName = $icons[$ext].".png";
}
}
return $fileName;
}
function isImageType($type)
{
switch($type)
{
case "image/png":
case "image/x-png":
case "image/gif":
case "image/jpeg":
case "image/pjpeg":
return true;
}
return false;
}
function initArray(&$array, $key)
{
if(!isset($array[$key]))
{
$array[$key] = array();
}
}
/**
* GetKeysArray
* Form aray of primary keys and their values for audit
* @param {array} $arr array of inserting values
* @param {bool} $searchId - find last inserted id or not
* @return {array} array of keys and their values
*/
function GetKeysArray($arr, $pageObject, $searchId = false)
{
$keyfields = $pageObject->pSet->GetTableKeys();
$aKeys = array();
if(count($keyfields))
{
foreach ($keyfields as $kfield)
{
if(array_key_exists($kfield, $arr))
$aKeys[$kfield] = $arr[$kfield];
}
if(count($aKeys) == 0 && $searchId)
{
$lastId = $pageObject->connection->getInsertedId();
if($lastId > 0)
$aKeys[$keyfields[0]] = $lastId;
}
}
return $aKeys;
}
function GetBaseScriptsForPage($isDisplayLoading, $additionalScripts = "", $customText = "")
{
$result = "";
$result .= "";
$result .= $additionalScripts;
$result .= "";
if( getMapProvider() == BING_MAPS )
$result .= "";
if($isDisplayLoading)
{
$result .= "";
}
return $result;
}
/**
* @param Mixed data
* @param Bolean plainJSON (optional) The flag indicating that the JSON's html special chars mustn't be convarted
* @return String
*/
function printJSON($data, $returnPlainJSON = false)
{
$rJSON = my_json_encode( $data );
return $returnPlainJSON ? $rJSON : runner_htmlspecialchars( $rJSON );
}
/**
* Get the value of an interval limit's custom PHP expression
* @param String table
* @param String field
* @param Number idx
* @param Boolean isLowerBound
* @return Mixed
*/
function getIntervalLimitsExprs($table, $field, $idx, $isLowerBound)
{
}
function import_error_handler($errno, $errstr, $errfile, $errline)
{
/*global $error_happened;
$error_happened=1;*/
}
function PrepareForExcel($ret)
{
//$ret = htmlspecialchars($str); commented for bug #6823
if (substr($ret,0,1)== "=")
$ret = "=".substr($ret,1);
return $ret;
}
function countTotals(&$totals, $totalsFields, $data)
{
for($i = 0; $i < count($totalsFields); $i ++)
{
if($totalsFields[$i]['totalsType'] == 'COUNT')
$totals[$totalsFields[$i]['fName']]["value"] += ($data[$totalsFields[$i]['fName']]!= "");
else if($totalsFields[$i]['viewFormat'] == "Time")
{
$time = GetTotalsForTime($data[$totalsFields[$i]['fName']]);
$totals[$totalsFields[$i]['fName']]["value"] += $time[2]+$time[1]*60 + $time[0]*3600;
}
else
$totals[$totalsFields[$i]['fName']]["value"] += ($data[$totalsFields[$i]['fName']]+ 0);
if($totalsFields[$i]['totalsType'] == 'AVERAGE')
{
if(!is_null($data[$totalsFields[$i]['fName']]) && $data[$totalsFields[$i]['fName']]!=="")
$totals[$totalsFields[$i]['fName']]['numRows']++;
}
}
}
function XMLNameEncode($strValue)
{
$search=array(" ","#","'","/","\\","(",")",",","[");
$ret=str_replace($search,"",$strValue);
$search=array("]","+","\"","-","_","|","}","{","=");
$ret=str_replace($search,"",$ret);
return $ret;
}
/**
* Get the file extention string
* @param String fileName
* @return String
*/
function getFileExtension($fileName)
{
$pos = strrpos($fileName, ".");
if( $pos === FALSE )
return "";
return substr($fileName, $pos + 1);
}
/**
* Get the default db connection object
* @return Connection
*/
function getDefaultConnection()
{
global $cman;
return $cman->getDefault();
}
function isIOS()
{
return stripos($_SERVER['HTTP_USER_AGENT'],"iPod") !== false
|| stripos($_SERVER['HTTP_USER_AGENT'],"iPad") !== false
|| stripos($_SERVER['HTTP_USER_AGENT'],"iPhone") !== false;
}
/* Get map provider google = 0, openStreetMap = 1*/
function getMapProvider(){
return GetGlobalData("mapProvider", true);
}
function getBingMapsLang()
{
$arrBimgMapLang = array();
$arrBimgMapLang["Czech"] = "cs-CZ";
$arrBimgMapLang["Danish"] = "da-DK";
$arrBimgMapLang["Dutch"] = "nl-NL";
$arrBimgMapLang["English"] = "en-US";
$arrBimgMapLang["French"] = "fr-FR";
$arrBimgMapLang["German"] = "de-DE";
$arrBimgMapLang["Italian"] = "it-IT";
$arrBimgMapLang["Japanese"] = "ja-JP";
$arrBimgMapLang["Norwegian"] = "nb-NO";
$arrBimgMapLang["Polish"] = "pl-PL";
$arrBimgMapLang["Portugal"] = "pt-PT";
$arrBimgMapLang["Portuguese"] = "pt-BR";
$arrBimgMapLang["Russian"] = "ru-RU";
$arrBimgMapLang["Spanish"] = "es-ES";
$arrBimgMapLang["Swedish"] = "sw-SE";
$arrBimgMapLang["Chinese"] = "zh-TW";
$arrBimgMapLang["Hongkong"] = "zh-HK";
if( array_key_exists( mlang_getcurrentlang(), $arrBimgMapLang ) )
return $arrBimgMapLang[mlang_getcurrentlang()];
return $arrBimgMapLang["English"];
}
function getDefaultLanguage()
{
if( strlen($_SESSION["language"]) == 0 && $_SERVER['HTTP_ACCEPT_LANGUAGE'] )
{
$arrWizardLang = array();
$arrWizardLang[] = "Chinese (Hong Kong S.A.R.)";
$arrWizardLang[] = "English";
$arrLang = array();
$arrLang["af"] = "Afrikaans";
$arrLang["ar"] = "Arabic";
$arrLang["bs"] = "Bosnian"; //?
$arrLang["bg"] = "Bulgarian";
$arrLang["ca"] = "Catalan";
$arrLang["zh"] = "Chinese";// 1
$arrLang["hr"] = "Croatian";
$arrLang["cs"] = "Czech";
$arrLang["da"] = "Danish";
$arrLang["nl"] = "Dutch";
$arrLang["en"] = "English";
$arrLang["fa"] = "Farsi"; //?
$arrLang["fr"] = "French";
$arrLang["ka"] = "Georgian";
$arrLang["de"] = "German";
$arrLang["el"] = "Greek";
$arrLang["he"] = "Hebrew";//?
$arrLang["hk"] = "Hongkong";// 1
$arrLang["hu"] = "Hungarian";
$arrLang["id"] = "Indonesian";//?
$arrLang["it"] = "Italian";
$arrLang["ja"] = "Japanese";
$arrLang["ms"] = "Malay";
$arrLang["no"] = "Norwegian";
$arrLang["fl"] = "Phillipines";//?
$arrLang["pl"] = "Polish";
$arrLang["pt"] = "Portugal"; // 2
$arrLang["br"] = "Portuguese"; // 2
$arrLang["ro"] = "Romanian";
$arrLang["ru"] = "Russian";
$arrLang["sk"] = "Slovak";
$arrLang["es"] = "Spanish";
$arrLang["sv"] = "Swedish";
$arrLang["tw"] = "Taiwan";//??
$arrLang["th"] = "Thai";
$arrLang["tr"] = "Turkish";
$arrLang["ur"] = "Urdu";
$arrLang["cy"] = "Welsh";
$http_lang = strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']); //return string ex.:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
$http_lang = str_replace(";",",",$http_lang);
$http_lang = str_replace("-",",",$http_lang);
$langcode = array();
$langcode = explode(",", $http_lang);
foreach($langcode as $lang)
{
if( in_array($arrLang[$lang], $arrWizardLang) )
return $arrLang[$lang];
}
}
return "Chinese (Hong Kong S.A.R.)";
}
function xt_showchart($params)
{
$width = 700;
$height = 530;
$chartPreview = "";
if( $params["chartPreview"] )
$chartPreview = "&chartPreview=true";
if( isset($params["custom1"]) )
$width = $params["custom1"];
if( isset($params["custom2"]) )
$height = $params["custom2"];
if( $params["dashResize"] )
{
if( $params["dashWidth"] && $params["dashHeight"] )
{
$width = $params["dashWidth"];
$height = $params["dashHeight"];
}
elseif( $params["dashWidth"] )
{
$height = round( $height * $params["dashWidth"] / $width );
$width = $params["dashWidth"];
}
elseif( $params["dashHeight"] )
{
$width = round( $width * $params["dashHeight"] / $height );
$height = $params["dashHeight"];
}
// adjust the chart size to fit it in the dash cell
$width*= 0.95;
$height*= 0.95;
}
elseif( $params["resize"] )
{
$maxWidth = 400;
$maxHeight = 280;
$r = $maxWidth / $maxHeight;
$r2 = $width / $height;
if (($width > $maxWidth) || ($height > $maxHeight))
{
if ($r2 >= $r)
{ // width
$height = round( $height * $maxWidth / $width );
$width = $maxWidth;
}
else
{
$width = round ( $width * $maxHeight / $height );
$height = $maxHeight;
}
}
}
$showDetails = isset( $params["showDetails"] ) ? $params["showDetails"] : true;
$settings = new ProjectSettings(GetTableByShort($params["chartname"]));
$refresh = $settings->getChartRefreshTime();
$chartParams = array();
$chartParams['width'] = $width;
$chartParams['height'] = $height;
$chartParams['showDetails'] = $showDetails;
$chartParams['chartName'] = $params["chartname"];
//css id identifiers are not allowed to start with a number or underscore
$chartParams['containerId'] = "rnr".$params["chartname"].$params["id"];
$chartParams['chartType'] = $params["ctype"];
$chartParams['refreshTime'] = $refresh;
$chartParams['xmlFile'] = GetTableLink("dchartdata") . '?chartname=' . $params["chartname"] . $chartPreview .
'&ctype=' . $params["ctype"] .
'&showDetails=' . $showDetails;
if( isset( $params["dash"] ) && $params["dash"] )
{
$chartParams['xmlFile'] .= '&dashChart=' . $params["dash"];
$chartParams['dashChart'] = !!$params["dash"];
}
$chartParams['pageId'] = $params["id"];
if( isset( $params["dashTName"] ) && $params["dashTName"] )
{
$chartParams['dashTName'] = $params["dashTName"];
$chartParams['dashElementName'] = $params["dashElementName"];
$chartParams['pageId'] = $params["id"];
$chartParams['xmlFile'] .= '&dashTName=' . $params["dashTName"];
$chartParams['xmlFile'] .= '&dashElName=' . $params["dashElementName"];
$chartParams['xmlFile'] .= '&pageId=' . $params["id"];
$dashSet = new ProjectSettings( $params["dashTName"] );
$dashElement = $dashSet->getDashboardElementData( $params["dashElementName"] );
if( $dashElement )
{
if( $dashElement["reload"] )
{
$chartParams['refreshTime'] = $dashElement["reload"];
}
}
}
if ( isset($params["refreshTime"]) )
{
$chartParams['refreshTime'] = $params["refreshTime"];
}
echo ' ';
echo '';
if( !$params["singlePage"] )
{
$chartParams["webRootPath"] = GetWebRootPath();
echo '';
}
}
function setHomePage( $url )
{
global $globalSettings;
$globalSettings["LandingPageType"] = 2;
$globalSettings["LandingURL"] = $url;
}
function getHomePage()
{
global $globalSettings;
if( $globalSettings["LandingPageType"] == 2 )
{
return $globalSettings["LandingURL"];
}
// GetLocalLink makes any difference with GetTableLink in ASP.NET only
if( $globalSettings["LandingPageType"] == 0 )
return GetLocalLink("menu");
if( $globalSettings["LandingPage"]=="" || $globalSettings["LandingPage"] == "login" || $globalSettings["LandingPage"] == "register" )
return GetLocalLink("menu");
}
function printHomeLink( $params )
{
echo runner_htmlspecialchars( getHomePage() );
}
function setProjectLogo( $html, $lng="" )
{
global $globalSettings;
if(strlen($lng) == 0)
$lng = getDefaultLanguage();
$globalSettings["ProjectLogo"][$lng] = $html;
}
function getProjectLogo($lng="")
{
global $globalSettings;
if(strlen($lng) == 0)
$lng = getDefaultLanguage();
return $globalSettings["ProjectLogo"][$lng];
}
function printProjectLogo( $params )
{
echo getProjectLogo(mlang_getcurrentlang());
}
function xt_pagetitlelabel($params)
{
global $pageObject;
$record = isset($params["record"]) ? $params["record"] : null;
$settings = isset($params["settings"]) ? $params["settings"] : null;
if( isset($params["custom2"]) )
echo $pageObject->getPageTitle( $params["custom2"], $params["custom1"] , $record, $settings );
else
echo $pageObject->getPageTitle( $params["custom1"], "", $record, $settings );
}
function xt_label($params)
{
echo GetFieldLabel($params["custom1"],$params["custom2"]);
}
function xt_tooltip($params)
{
echo GetFieldToolTip( $params["custom1"], $params["custom2"] );
}
function xt_custom($params)
{
echo GetCustomLabel($params["custom1"]);
}
function xt_caption($params)
{
echo GetTableCaption($params["custom1"]);
}
// display tabs in group or simple section
function xt_displaytabs( $tabparams )
{
global $pageObject;
if(!isset( $pageObject ) || !isset( $tabparams[ "custom1" ] ) )
return;
$pageObject->displayTabsSections( $tabparams[ "custom1" ] );
}
// BuildEditControl wrapper
function xt_buildeditcontrol(&$params)
{
$pageObj = $params["pageObj"];
$data = $pageObj->getFieldControlsData();
$field = $params["field"];
if($params["mode"] == "edit")
$mode = MODE_EDIT;
else if($params["mode"] == "add")
$mode = MODE_ADD;
else if($params["mode"]=="inline_edit")
$mode = MODE_INLINE_EDIT;
else if($params["mode"]=="inline_add")
$mode = MODE_INLINE_ADD;
else
$mode = MODE_SEARCH;
$fieldNum = 0;
if(@$params["fieldNum"])
$fieldNum = $params["fieldNum"];
$id = "";
if(@$params["id"] !== "")
$id = $params["id"];
$validate = array();
if(count(@$params["validate"]))
$validate = @$params["validate"];
$additionalCtrlParams = array();
if(count(@$params["additionalCtrlParams"]))
$additionalCtrlParams = @$params["additionalCtrlParams"];
$extraParams = array();
if( count(@$params["extraParams"]) )
$extraParams = @$params["extraParams"];
$pageObj->getControl($field, $id, $extraParams)->buildControl(@$params["value"], $mode, $fieldNum, $validate, $additionalCtrlParams, $data);
}
?>