short_date_format_php * 2 - time format. @see sys_options -> time_format_php * 3(5) - long date format. @see sys_options -> date_format_php * 6 - RFC 2822 date format. */ function getLocaleDate($sTimestamp = '', $iCode = BX_DOL_LOCALE_DATE_SHORT) { $sFormat = (int)$iCode == 6 ? 'r' : getLocaleFormat($iCode); return date($sFormat, $sTimestamp); } /** * Get data format in accordance with requested format code and format type. * * @param integer $iCode - format code * 1(4) - short date format. @see sys_options -> short_date_format_php * 2 - time format. @see sys_options -> time_format_php * 3(5) - long date format. @see sys_options -> date_format_php * 6 - RFC 2822 date format. * @param integer $iType - format type * 1 - for PHP code. * 2 - for database. */ function getLocaleFormat($iCode = BX_DOL_LOCALE_DATE_SHORT, $iType = BX_DOL_LOCALE_PHP) { $sPostfix = (int)$iType == BX_DOL_LOCALE_PHP ? '_php' : ''; $sResult = ''; switch ($iCode) { case 2: $sResult = getParam('time_format' . $sPostfix); break; case 1: case 4: $sResult = getParam('short_date_format' . $sPostfix); break; case 3: case 5: $sResult = getParam('date_format' . $sPostfix); break; } return $sResult; } /** * Function will check on blocked status; * * @param : $iFirstProfile (integer) - first profile's id; * @param : $iSecondProfile (integer) - second profile's id; * @return : (boolean) - true if pair will blocked; */ function isBlocked($iFirstProfile, $iSecondProfile) { $iFirstProfile = (int)$iFirstProfile; $iSecondProfile = (int)$iSecondProfile; $sQuery = "SELECT COUNT(*) FROM `sys_block_list` WHERE `ID` = {$iFirstProfile} AND `Profile` = {$iSecondProfile}"; return db_value( $sQuery) ? true : false; } /* * function for work with profile */ function is_friends($id1, $id2) { $id1 = (int)$id1; $id2 = (int)$id2; if ($id1 == 0 || $id2 == 0) return; $cnt = db_arr("SELECT SUM(`Check`) AS 'cnt' FROM `sys_friend_list` WHERE `ID`='{$id1}' AND `Profile`='{$id2}' OR `ID`='{$id2}' AND `Profile`='{$id1}'"); return ($cnt['cnt'] > 0 ? true : false); } /* * functions for limiting maximal word length (returned from ash). */ function WordWrapStr($input, $len = 35) { $output = wordwrap($input, $len, " ", true); return $output; } /* * functions for limiting maximal word length */ function strmaxwordlen($input, $len = 100) { return $input; } /* * functions for limiting maximal text length */ function strmaxtextlen($input, $len = 60) { if ( strlen($input) > $len ) return mb_substr($input, 0, $len - 4) . "..."; else return $input; } function html2txt($content, $tags = "") { while($content != strip_tags($content, $tags)) { $content = strip_tags($content, $tags); } return $content; } function html_encode($text) { $searcharray = array( "'([-_\w\d.]+@[-_\w\d.]+)'", "'((?:(?!://).{3}|^.{0,2}))(www\.[-\d\w\.\/]+)'", "'(http[s]?:\/\/[-_~\w\d\.\/]+)'"); $replacearray = array( "\\1", "\\1http://\\2", "\\1"); return preg_replace($searcharray, $replacearray, stripslashes($text)); } /* * functions for input data into database * @param $text string to pass to database * @param $strip_tags tags parameter: * BX_TAGS_STRIP - strip tags * BX_TAGS_SPECIAL_CHARS - translate to special html chars (not good to use this, it is better to do such thing during output to browser) * BX_TAGS_VALIDATE - validate HTML * BX_TAGS_NO_ACTION - do not perform any action with tags * @param $addslashes slashes parameter: * BX_SLASHES_AUTO - automatically detect magic_quotes_gpc setting * BX_SLASHES_STRIP - strip slashes * BX_SLASHES_ADD - add slashes * BX_SLASHES_NO_ACTION - do not perform any action with slashes */ function process_db_input( $text, $strip_tags = 0, $addslashes = 0 ) { if (is_array($text)) { foreach ($text as $k => $v) $text[$k] = process_db_input($v, $strip_tags, $addslashes); return $text; } if ((get_magic_quotes_gpc() && $addslashes == BX_SLASHES_AUTO) || $addslashes == BX_SLASHES_STRIP) $text = stripslashes($text); elseif ($addslashes == BX_SLASHES_ADD) $text = addslashes($text); switch ($strip_tags) { case BX_TAGS_STRIP_AND_NL2BR: return mysql_real_escape_string(nl2br(strip_tags($text))); case BX_TAGS_STRIP: return mysql_real_escape_string(strip_tags($text)); case BX_TAGS_SPECIAL_CHARS: return mysql_real_escape_string(htmlspecialchars($text, ENT_QUOTES, 'UTF-8')); case BX_TAGS_VALIDATE: return mysql_real_escape_string(clear_xss($text)); case BX_TAGS_NO_ACTION: default: return mysql_real_escape_string($text); } } /* * function for processing pass data * * This function cleans the GET/POST/COOKIE data if magic_quotes_gpc() is on * for data which should be outputed immediately after submit */ function process_pass_data( $text, $strip_tags = 0 ) { if ( $strip_tags ) $text = strip_tags($text); if ( !get_magic_quotes_gpc() ) return $text; else return stripslashes($text); } /* * function for output data from database into html */ function htmlspecialchars_adv( $string ) { //return htmlspecialchars($string, ENT_COMPAT, 'UTF-8'); $string = htmlspecialchars($string, ENT_COMPAT, 'UTF-8'); $replaces = array("ö", "ä", "ü", "Ö", "Ä", "Ü", "ß"); $patterns = array("ö", "ä", "ü", "Ö", "Ä", "Ü", "ß"); $string = str_replace($patterns, $replaces, $string); return $string; /* $patterns = array( "/(?!\d{2,};)&/m", "/>/m", "/ tags with names and values, specified in $Values array. */ function ConstructHiddenValues($Values) { /** * Recursive function, processes multidimensional arrays * * @param string $Name Full name of array, including all subarrays' names * * @param array $Value Array of values, can be multidimensional * * @return string Properly consctructed tags */ function ConstructHiddenSubValues($Name, $Value) { if (is_array($Value)) { $Result = ""; foreach ($Value as $KeyName => $SubValue) { $Result .= ConstructHiddenSubValues("{$Name}[{$KeyName}]", $SubValue); } } else // Exit recurse $Result = "\n"; return $Result; } /* End of ConstructHiddenSubValues function */ $Result = ''; if (is_array($Values)) { foreach ($Values as $KeyName => $Value) { $Result .= ConstructHiddenSubValues($KeyName, $Value); } } return $Result; } /** * Returns HTML/javascript code, which redirects to another URL with passing specified data (through specified method) * * @param string $ActionURL destination URL * * @param array $Params Parameters to be passed (through GET or POST) * * @param string $Method Submit mode. Only two values are valid: 'get' and 'post' * * @return mixed Correspondent HTML/javascript code or false, if input data is wrong */ function RedirectCode($ActionURL, $Params = NULL, $Method = "get", $Title = 'Redirect') { if ((strcasecmp(trim($Method), "get") && strcasecmp(trim($Method), "post")) || (trim($ActionURL) == "")) return false; ob_start(); ?>
";
print_r( $what );
echo "\n";
}
function echoDbgLog($mWhat, $sDesc = '', $sFileName = 'debug.log') {
global $dir;
$sCont =
'--- ' . date('r') . ' (' . BX_DOL_START_TIME . ") ---\n" .
$sDesc . "\n" .
print_r($mWhat, true) . "\n\n\n";
$rFile = fopen($dir['tmp'] . $sFileName, 'a');
fwrite($rFile, $sCont);
fclose($rFile);
}
function clear_xss($val) {
if ($GLOBALS['logged']['admin'])
return $val;
// HTML Purifier plugin
global $oHtmlPurifier;
require_once( BX_DIRECTORY_PATH_PLUGINS . 'htmlpurifier/HTMLPurifier.standalone.php' );
if (!isset($oHtmlPurifier)) {
HTMLPurifier_Bootstrap::registerAutoload();
$oConfig = HTMLPurifier_Config::createDefault();
$oConfig->set('Filter.YouTube', true);
$oConfig->set('HTML.DefinitionID', '1');
$oConfig->set('Filter.Custom', array (new HTMLPurifier_Filter_Vimeo(), new HTMLPurifier_Filter_LocalMovie()));
$oDef = $oConfig->getHTMLDefinition(true);
$oDef->addAttribute('a', 'target', 'Enum#_blank,_self,_target,_top');
$oHtmlPurifier = new HTMLPurifier($oConfig);
}
return $oHtmlPurifier->purify($val);
}
function _format_when ($iSec) {
$s = '';
if ($iSec>0) {
if ($iSec < 3600) {
$i = round($iSec/60);
$s .= (0 == $i || 1 == $i) ? _t('_x_minute_ago', '1') : _t('_x_minutes_ago', $i);
} else if ($iSec < 86400) {
$i = round($iSec/60/60);
$s .= (0 == $i || 1 == $i) ? _t('_x_hour_ago', '1') : _t('_x_hours_ago', $i);
} else {
$i = round($iSec/60/60/24);
$s .= (0 == $i || 1 == $i) ? _t('_x_day_ago', '1') : _t('_x_days_ago', $i);
}
} else {
if ($iSec > -3600) {
$i = round($iSec/60);
$s .= (0 == $i || 1 == $i) ? _t('_in_x_minute', '1') : _t('_in_x_minutes', -$i);
} else if ($iSec > -86400) {
$i = round($iSec/60/60);
$s .= (0 == $i || 1 == $i) ? _t('_in_x_hour', '1') : _t('_in_x_hours', -$i);
} elseif ($iSec < -86400) {
$i = round($iSec/60/60/24);
$s .= (0 == $i || 1 == $i) ? _t('_in_x_day', '1') : _t('_in_x_days', -$i);
}
}
return $s;
}
function defineTimeInterval($iTime) {
$iTime = time() - (int)$iTime;
$sCode = _format_when($iTime);
return $sCode;
}
function execSqlFile($sFileName) {
if (! $f = fopen($sFileName, "r"))
return false;
db_res( "SET NAMES 'utf8'" );
$s_sql = "";
while ( $s = fgets ( $f, 10240) ) {
$s = trim( $s ); //Utf with BOM only
if( !strlen( $s ) ) continue;
if ( mb_substr( $s, 0, 1 ) == '#' ) continue; //pass comments
if ( mb_substr( $s, 0, 2 ) == '--' ) continue;
$s_sql .= $s;
if ( mb_substr( $s, -1 ) != ';' ) continue;
db_res( $s_sql );
$s_sql = "";
}
fclose($f);
return true;
}
function replace_full_uris( $text ) {
$text = preg_replace_callback( '/([\s\n\r]src\=")([^"]+)(")/', 'replace_full_uri', $text );
return $text;
}
function replace_full_uri( $matches ) {
if( substr( $matches[2], 0, 7 ) != 'http://' and substr( $matches[2], 0, 6 ) != 'ftp://' )
$matches[2] = BX_DOL_URL_ROOT . $matches[2];
return $matches[1] . $matches[2] . $matches[3];
}
//--------------------------------------- friendly permalinks --------------------------------------//
//------------------------------------------- main functions ---------------------------------------//
function uriGenerate ($s, $sTable, $sField, $iMaxLen = 255) {
$s = uriFilter($s);
if (uriCheckUniq($s, $sTable, $sField)) return $s;
// try to add date
if (get_mb_len($s) > 240)
$s = get_mb_substr ($s, 0, 240);
$s .= '-' . date('Y-m-d');
if (uriCheckUniq($s, $sTable, $sField)) return $s;
// try to add number
for ($i = 0 ; $i < 999 ; ++$i) {
if (uriCheckUniq($s . '-' . $i, $sTable, $sField)) {
return ($s . '-' . $i);
}
}
return rand(0, 999999999);
}
function uriFilter ($s) {
if ($GLOBALS['oTemplConfig']->bAllowUnicodeInPreg)
$s = get_mb_replace ('/[^\pL^\pN]+/u', '-', $s); // unicode characters
else
$s = get_mb_replace ('/([^\d^\w]+)/u', '-', $s); // latin characters only
$s = get_mb_replace ('/([-^]+)/', '-', $s);
$s = get_mb_replace ('/([-]+)$/', '', $s); // remove trailing dash
if (!$s) $s = '-';
return $s;
}
function uriCheckUniq ($s, $sTable, $sField) {
return !db_arr("SELECT 1 FROM $sTable WHERE $sField = '$s' LIMIT 1");
}
function get_mb_replace ($sPattern, $sReplace, $s) {
return preg_replace ($sPattern, $sReplace, $s);
}
function get_mb_len ($s) {
return (function_exists('mb_strlen')) ? mb_strlen($s) : strlen($s);
}
function get_mb_substr ($s, $iStart, $iLen) {
return (function_exists('mb_substr')) ? mb_substr ($s, $iStart, $iLen) : substr ($s, $iStart, $iLen);
}
function isIPLoggedBanned() {
$iIPGlobalType = (int)getParam('ipListGlobalType');
//1 - all allowed except listed, 2 - all blocked except listed, 0 - disabled
switch ($iIPGlobalType) {
case 1:
$sCurIP = getVisitorIP();
//$in_addr = inet_pton($sCurIP);
$sCurLongIP = ip2long($sCurIP);
$sCheckSQL = "SELECT * FROM `sys_ip_list` WHERE `Type`='deny' AND `LastDT` > UNIX_TIMESTAMP()";
$vIPRes = db_res($sCheckSQL);
if (db_affected_rows()>0) {
while ( $aCheckIP = mysql_fetch_assoc($vIPRes) ) {
if ($aCheckIP['To']==0 && $aCheckIP['From']==$sCurLongIP) {
return true;
} elseif ($aCheckIP['To']>0 && $aCheckIP['From']<=$sCurLongIP && $aCheckIP['To']>=$sCurLongIP) {
return true;
}
}
}
break;
case 2:
$sCurIP = getVisitorIP();
$sCurLongIP = ip2long($sCurIP);
$sCheckSQL = "SELECT * FROM `sys_ip_list` WHERE `Type`='allow' AND `LastDT` > UNIX_TIMESTAMP()";
$vIPRes = db_res($sCheckSQL);
if (db_affected_rows()>0) {
while ( $aCheckIP = mysql_fetch_assoc($vIPRes) ) {
if ($aCheckIP['To']==0 && $aCheckIP['From']==$sCurLongIP) {
return false;
} elseif ($aCheckIP['To']>0 && $aCheckIP['From']<=$sCurLongIP && $aCheckIP['To']>=$sCurLongIP) {
return false;
}
}
}
return true;
break;
case 0:
default:
break;
}
return false;
}
function getmicrotime() {
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
/**
** @description : function will create cache file with all SQL queries ;
** @return :
*/
function genSiteStatCache() {
$sqlQuery = "SELECT `Name` as `name`,
`Title` as `capt`,
`UserQuery` as `query`,
`UserLink` as `link`,
`IconName` as `icon`,
`AdminQuery` as `adm_query`,
`AdminLink` as `adm_link`
FROM `sys_stat_site`
ORDER BY `StatOrder` ASC, `ID` ASC";
$rData = db_res($sqlQuery);
$sLine = "return array( \n";
while ($aVal = mysql_fetch_assoc($rData)) {
$sLine .= genSiteStatFile($aVal);
}
$sLine = rtrim($sLine, ",\n")."\n);";
$aResult = eval($sLine);
$oCache = $GLOBALS['MySQL']->getDbCacheObject();
return $oCache->setData ($GLOBALS['MySQL']->genDbCacheKey('sys_stat_site'), $aResult);
}
/**
* Function will cute the parameter from received string;
* remove received parameter from 'GET' query ;
*
* @param : $aExceptNames (string) - name of unnecessary parameter;
* @return : cleared string;
*/
function getClearedParam( $sExceptParam, $sString ) {
return preg_replace( "/(&|&){$sExceptParam}=([a-z0-9\_\-]{1,})/i",'', $sString);
}
/**
* import class file, it detect class path by its prefix or module array
*
* @param $sClassName - full class name or class postfix in a case of module class
* @param $aModule - module array or true to get module array from global variable
*/
function bx_import($sClassName, $aModule = array()) {
if (class_exists($sClassName))
return;
if ($aModule) {
$a = (true === $aModule) ? $GLOABLS['aModule'] : $aModule;
if (class_exists($a['class_prefix'] . $sClassName))
return;
require_once (BX_DIRECTORY_PATH_MODULES . $a['path'] . 'classes/' . $a['class_prefix'] . $sClassName . '.php');
}
if (0 == strncmp($sClassName, 'BxDol', 5)) {
require_once(BX_DIRECTORY_PATH_CLASSES . $sClassName . '.php');
return;
}
if (0 == strncmp($sClassName, 'BxBase', 6)) {
require_once(BX_DIRECTORY_PATH_BASE . 'scripts/' . $sClassName . '.php');
return;
}
if (0 == strncmp($sClassName, 'BxTempl', 7) && !class_exists($sClassName)) {
if(isset($GLOBALS['iAdminPage']) && (int)$GLOBALS['iAdminPage'] == 1)
require_once(BX_DIRECTORY_PATH_ROOT . "templates/tmpl_uni/scripts/" . $sClassName . '.php');
else
require_once(BX_DIRECTORY_PATH_ROOT . "templates/tmpl_{$GLOBALS['tmpl']}/scripts/" . $sClassName . '.php');
return;
}
}
/**
* Gets an instance of class pathing necessary parameters if it's necessary.
*
* @param string $sClassName class name.
* @param array $aParams an array of parameters to be pathed to the constructor of the class.
* @param array $aModule an array with module description. Is used when the requested class is located in some module.
* @return unknown
*/
function bx_instance($sClassName, $aParams = array(), $aModule = array()) {
if(isset($GLOBALS['bxDolClasses'][$sClassName]))
return $GLOBALS['bxDolClasses'][$sClassName];
else {
bx_import((empty($aModule) ? $sClassName : str_replace($aModule['class_prefix'], '', $sClassName)), $aModule);
if(empty($aParams))
$GLOBALS['bxDolClasses'][$sClassName] = new $sClassName();
else {
$sParams = "";
foreach($aParams as $mixedKey => $mixedValue)
$sParams .= "\$aParams[" . $mixedKey . "], ";
$sParams = substr($sParams, 0, -2);
$GLOBALS['bxDolClasses'][$sClassName] = eval("return new " . $sClassName . "(" . $sParams . ");");
}
return $GLOBALS['bxDolClasses'][$sClassName];
}
}
/**
* Escapes string/array ready to pass to js script with filtered symbols like ', " etc
*
* @param mixed $mixedInput - string/array which should be filtered
* @return converted string / array
*/
function bx_js_string ($mixedInput) {
$aUnits = array(
"\"" => """,
"'" => "'",
"\n" => " ",
"\r" => "",
);
return str_replace(array_keys($aUnits), array_values($aUnits), $mixedInput);
}
/**
* Return input string/array ready to pass to html attribute with filtered symbols like ', " etc
*
* @param mixed $mixedInput - string/array which should be filtered
* @return converted string / array
*/
function bx_html_attribute ($mixedInput) {
$aUnits = array(
"\"" => """,
"'" => "'",
);
return str_replace(array_keys($aUnits), array_values($aUnits), $mixedInput);
}
/**
* Escapes string/array ready to pass to php script with filtered symbols like ', " etc
*
* @param mixed $mixedInput - string/array which should be filtered
* @return converted string / array
*/
function bx_php_string_apos ($mixedInput) {
return str_replace("'", "\\'", $mixedInput);
}
function bx_php_string_quot ($mixedInput) {
return str_replace('"', '\\"', $mixedInput);
}
/**
* Gets file contents by URL.
*
* @param string $sFileUrl - file URL to be read.
* @param array $aParams - an array of parameters to be pathed with URL.
* @return string the file's contents.
*/
function bx_file_get_contents($sFileUrl, $aParams = array()) {
$sParams = '?';
foreach($aParams as $sKey => $sValue)
$sParams .= $sKey . '=' . $sValue . '&';
$sParams = substr($sParams, 0, -1);
$sResult = '';
if(function_exists('curl_init')) {
$rConnect = curl_init();
curl_setopt($rConnect, CURLOPT_URL, $sFileUrl . $sParams);
curl_setopt($rConnect, CURLOPT_HEADER, 0);
curl_setopt($rConnect, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($rConnect, CURLOPT_FOLLOWLOCATION, 1);
$sAllCookies = '';
foreach($_COOKIE as $sKey=>$sValue){
$sAllCookies .= $sKey."=".$sValue.";";
}
curl_setopt($rConnect, CURLOPT_COOKIE, $sAllCookies);
$sResult = curl_exec($rConnect);
curl_close($rConnect);
}
else
$sResult = @file_get_contents($sFileUrl . $sParams);
return $sResult;
}
/**
* perform write log into 'tmp/log.txt' (for any debug development)
*
* @param $sNewLineText - New line debug text
*/
function writeLog($sNewLineText = 'test') {
$sFileName = BX_DIRECTORY_PATH_ROOT . 'tmp/log.txt';
if (is_writable($sFileName)) {
if (! $vHandle = fopen($sFileName, 'a')) {
echo "Unable to open ({$sFileName})";
}
if (fwrite($vHandle, $sNewLineText . "\r\n") === FALSE) {
echo "Unable write to ({$sFileName})";
}
fclose($vHandle);
} else {
echo "{$sFileName} is not writeable";
}
}
function getLinkSet ($sLinkString, $sUrlPrefix, $sDivider = ';,', $bUriConvert = false) {
$aSet = preg_split( '/['.$sDivider.']/', $sLinkString, 0, PREG_SPLIT_NO_EMPTY);
foreach ($aSet as $sKey) {
$sLink = $sUrlPrefix . urlencode($bUriConvert ? title2uri($sKey) : $sKey);
$sFinalSet .= '' . $sKey . ' ';
}
return trim($sFinalSet, ' ');
}
function getRelatedWords (&$aInfo) {
$sString = implode(' ', $aInfo);
$aRes = array_unique(explode(' ', $sString));
$sString = implode(' ', $aRes);
return addslashes($sString);
}
function getSiteInfo($sSourceUrl)
{
$aResult = array();
$sContent = bx_file_get_contents($sSourceUrl);
if (strlen($sContent))
{
preg_match("/