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($sString, $iWidth = 35, $sWrapCharacter = ' ') { if(empty($sString) || mb_strlen($sString, 'UTF-8') <= $iWidth) return $sString; $sResult = ''; $aWords = mb_split("[\s\r\n]", $sString); foreach($aWords as $sWord) { $sWord = trim($sWord); if(($iWord = mb_strlen($sWord, 'UTF-8')) <= $iWidth) { if($iWord > 0) $sResult .= $sWord . $sWrapCharacter; continue; } $iPosition = 0; while($iPosition < $iWord) { $sResult .= mb_substr($sWord, $iPosition, $iWidth, 'UTF-8') . $sWrapCharacter; $iPosition += $iWidth; } } return trim($sResult); } /* * functions for limiting maximal word length */ function strmaxwordlen($input, $len = 100) { return $input; } /* * functions for limiting maximal text length */ function strmaxtextlen($sInput, $iMaxLen = 60) { $sTail = ''; $s = trim(strip_tags($sInput)); if (mb_strlen($s) > $iMaxLen) { $s = mb_substr($s, 0, $iMaxLen); $sTail = '…'; } return htmlspecialchars_adv($s) . $sTail; } 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'); /* $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('HTML.SafeIframe', 'true');
$oConfig->set('HTML.SafeObject', 'true');
$oConfig->set('Output.FlashCompat', 'true');
$oConfig->set('HTML.FlashAllowFullScreen', 'true');
if (getParam('sys_antispam_add_nofollow')) {
$sHost = parse_url(BX_DOL_URL_ROOT, PHP_URL_HOST);
$oConfig->set('URI.Host', $sHost);
$oConfig->set('HTML.Nofollow', 'true');
}
$oConfig->set('URI.SafeIframeRegexp', '%^(https?:)?//(www\.youtube(?:-nocookie)?\.com/embed/|player\.vimeo\.com/video/|www\.twitch\.tv)%'); //allow YouTube and Vimeo and twitch.tv
// $oConfig->set('URI.SafeIframeRegexp', '%^(https?:)?//(www\.youtube(?:-nocookie)?\.com/embed/|player\.vimeo\.com/video/)%'); //allow YouTube and Vimeo
// $oConfig->set('Filter.Custom', array (new HTMLPurifier_Filter_LocalMovie(), new HTMLPurifier_Filter_YouTube(), new HTMLPurifier_Filter_YoutubeIframe()));
$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') : _t('_x_minutes_ago', $i);
} else if ($iSec < 86400) {
$i = round($iSec/60/60);
$s .= (0 == $i || 1 == $i) ? _t('_x_hour_ago') : _t('_x_hours_ago', $i);
} else {
$i = round($iSec/60/60/24);
$s .= (0 == $i || 1 == $i) ? _t('_yesterday') : _t('_x_days_ago', $i);
}
} else {
if ($iSec > -3600) {
$i = round($iSec/60);
$s .= (0 == $i || 1 == $i) ? _t('_in_x_minute') : _t('_in_x_minutes', -$i);
} else if ($iSec > -86400) {
$i = round($iSec/60/60);
$s .= (0 == $i || 1 == $i) ? _t('_in_x_hour') : _t('_in_x_hours', -$i);
} elseif ($iSec < -86400) {
$i = round($iSec/60/60/24);
$s .= (0 == $i || 1 == $i) ? _t('_tomorrow') : _t('_in_x_days', -$i);
}
}
return $s;
}
function _format_time($iSec, $aParams = array())
{
$sDivider = isset($aParams['divider']) ? $aParams['divider'] : ':';
$iSec = (int)$iSec;
$sFormat = $iSec > 3600 ? 'H' . $sDivider . 'i' . $sDivider . 's' : 'i' . $sDivider . 's';
return gmdate($sFormat, $iSec);
}
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, 8 ) != 'https://' 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);
}
/**
* Block user IP
*
* @param $sIP mixed
* @param $iExpirationInSec integer
* @param $sComment string
* @return void
*/
function bx_block_ip($mixedIP, $iExpirationInSec = 86400, $sComment = '')
{
if (preg_match('/^[0-9]+$/', $mixedIP))
$iIP = $mixedIP;
else
$iIP = sprintf("%u", ip2long($sIP));
$iExpirationInSec = time() + (int)$iExpirationInSec;
$sComment = process_db_input($sComment, BX_TAGS_STRIP);
if (!db_value("SELECT ID FROM `sys_ip_list` WHERE `From` = {$iIP} AND `To` = {$iIP} LIMIT 1"))
return db_res("INSERT INTO `sys_ip_list` SET `From` = {$iIP}, `To` = {$iIP}, `Type` = 'deny', `LastDT` = {$iExpirationInSec}, `Desc` = '{$sComment}'");
return false;
}
function bx_is_ip_dns_blacklisted($sCurIP = '', $sType = '')
{
if (defined('BX_DOL_CRON_EXECUTE'))
return false;
if (!$sCurIP)
$sCurIP = getVisitorIP(false);
if (bx_is_ip_whitelisted())
return false;
$o = bx_instance('BxDolDNSBlacklists');
if (BX_DOL_DNSBL_POSITIVE == $o->dnsbl_lookup_ip(BX_DOL_DNSBL_CHAIN_SPAMMERS, $sCurIP) && BX_DOL_DNSBL_POSITIVE != $o->dnsbl_lookup_ip(BX_DOL_DNSBL_CHAIN_WHITELIST, $sCurIP)) {
$o->onPositiveDetection ($sCurIP, $sType);
return true;
}
return false;
}
function bx_is_ip_whitelisted($sCurIP = '')
{
if (defined('BX_DOL_CRON_EXECUTE'))
return true;
$iIPGlobalType = (int)getParam('ipListGlobalType');
if ($iIPGlobalType != 1 && $iIPGlobalType != 2) // 0 - disabled
return false;
if (!$sCurIP)
$sCurIP = getVisitorIP();
$iCurIP = sprintf("%u", ip2long($sCurIP));
$iCurrTume = time();
return db_value("SELECT `ID` FROM `sys_ip_list` WHERE `Type` = 'allow' AND `LastDT` > $iCurrTume AND `From` <= '$iCurIP' AND `To` >= '$iCurIP' LIMIT 1") ? true : false;
}
function bx_is_ip_blocked($sCurIP = '')
{
if (defined('BX_DOL_CRON_EXECUTE'))
return false;
$iIPGlobalType = (int)getParam('ipListGlobalType');
if ($iIPGlobalType != 1 && $iIPGlobalType != 2) // 0 - disabled
return false;
if (!$sCurIP)
$sCurIP = getVisitorIP();
$iCurIP = sprintf("%u", ip2long($sCurIP));
$iCurrTume = time();
if (bx_is_ip_whitelisted($sCurIP))
return false;
$isBlocked = db_value("SELECT `ID` FROM `sys_ip_list` WHERE `Type` = 'deny' AND `LastDT` > $iCurrTume AND `From` <= '$iCurIP' AND `To` >= '$iCurIP' LIMIT 1");
if ($isBlocked)
return true;
// 1 - all allowed except listed
// 2 - all blocked except listed
return $iIPGlobalType == 2 ? true : false;
}
/**
* spam checking function
* @param $s content to check for spam
* @param $isStripSlashes slashes parameter:
* BX_SLASHES_AUTO - automatically detect magic_quotes_gpc setting
* BX_SLASHES_NO_ACTION - do not perform any action with slashes
* @return true if spam detected
*/
function bx_is_spam ($val, $isStripSlashes = BX_SLASHES_AUTO)
{
if (defined('BX_DOL_CRON_EXECUTE'))
return false;
if (isAdmin())
return false;
if (bx_is_ip_whitelisted())
return false;
if (get_magic_quotes_gpc() && $isStripSlashes == BX_SLASHES_AUTO)
$val = stripslashes($val);
$bRet = false;
if ('on' == getParam('sys_uridnsbl_enable')) {
$oBxDolDNSURIBlacklists = bx_instance('BxDolDNSURIBlacklists');
if ($oBxDolDNSURIBlacklists->isSpam($val)) {
$oBxDolDNSURIBlacklists->onPositiveDetection($val);
$bRet = true;
}
}
if ('on' == getParam('sys_akismet_enable')) {
$oBxDolAkismet = bx_instance('BxDolAkismet');
if ($oBxDolAkismet->isSpam($val)) {
$oBxDolAkismet->onPositiveDetection($val);
$bRet = true;
}
}
if ($bRet && 'on' == getParam('sys_antispam_report')) {
bx_import('BxDolEmailTemplates');
$oEmailTemplates = new BxDolEmailTemplates();
$aTemplate = $oEmailTemplates->getTemplate('t_SpamReportAuto', 0);
$iProfileId = getLoggedId();
$aPlus = array(
'SpammerUrl' => getProfileLink($iProfileId),
'SpammerNickName' => getNickName($iProfileId),
'Page' => htmlspecialchars_adv($_SERVER['PHP_SELF']),
'Get' => print_r($_GET, true),
'SpamContent' => htmlspecialchars_adv($val),
);
sendMail($GLOBALS['site']['email'], $aTemplate['Subject'], $aTemplate['Body'], '', $aPlus);
}
if ($bRet && 'on' == getParam('sys_antispam_block'))
return true;
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 genSiteStatFile($aVal)
{
$oMenu = new BxDolMenu();
$sLink = $oMenu -> getCurrLink($aVal['link']);
$sAdmLink = $oMenu -> getCurrLink($aVal['adm_link']);
$sLine = "'{$aVal['name']}'=>array('capt'=>'{$aVal['capt']}', 'query'=>'".addslashes($aVal['query'])."', 'link'=>'$sLink', 'icon'=>'{$aVal['icon']}', 'adm_query'=>'".addslashes($aVal['adm_query'])."', 'adm_link'=>'$sAdmLink', ),\n";
return $sLine;
}
function getSiteStatArray()
{
$oCache = $GLOBALS['MySQL']->getDbCacheObject();
$aStats = $oCache->getData($GLOBALS['MySQL']->genDbCacheKey('sys_stat_site'));
if($aStats === null) {
genSiteStatCache();
$aStats = $oCache->getData($GLOBALS['MySQL']->genDbCacheKey('sys_stat_site'));
}
if(!$aStats)
$aStats = array();
return $aStats;
}
/**
* 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) ? $GLOBALS['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 $mixedInput - string/array which should be filtered
* @param $iQuoteType - string escaping method: BX_ESCAPE_STR_AUTO(default), BX_ESCAPE_STR_APOS or BX_ESCAPE_STR_QUOTE
* @return converted string / array
*/
function bx_js_string ($mixedInput, $iQuoteType = BX_ESCAPE_STR_AUTO)
{
$aUnits = array(
"\n" => "\\n",
"\r" => "",
);
if (BX_ESCAPE_STR_APOS == $iQuoteType) {
$aUnits["'"] = "\\'";
$aUnits[''] = '';
} else {
$aUnits['"'] = '"e;';
$aUnits["'"] = ''';
$aUnits["<"] = '<';
$aUnits[">"] = '>';
}
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())
{
$sFileUrl = bx_append_url_params($sFileUrl, $aParams);
$sResult = '';
if(function_exists('curl_init')) {
$rConnect = curl_init();
curl_setopt($rConnect, CURLOPT_TIMEOUT, 10);
curl_setopt($rConnect, CURLOPT_URL, $sFileUrl);
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);
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 getLink($sString, $sUrl)
{
return '' . $sString . ' ';
}
function getLinkSet($sLinkString, $sUrlPrefix, $sDivider = ';,', $bUriConvert = false)
{
$aSet = preg_split( '/['.$sDivider.']/', $sLinkString, 0, PREG_SPLIT_NO_EMPTY);
$sFinalSet = '';
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("/