/** * Changes the content language * */ function changeContentLanguage() { if ($this->request('i')) { $lngid = (int) $this->request('i'); if (rad_lang::changeContentLanguage($lngid)) { $lng = rad_lang::getLangByID($lngid); echo 'RADCHLangs.changeContentResult(1,' . $lng->lng_id . ',"' . $lng->lng_code . '");'; } else { echo 'RADCHLangs.changeContentResult(0);'; } } else { $this->securityHoleAlert(__FILE__, __LINE__, $this->getClassName()); } }
/** * Get URL using URL alias * @static * @param string $alias * @return false|string */ public static function getUrlByAlias($alias) { $result = rad_dbpdo::query('SELECT item_type, item_id, lang_id FROM ' . RAD . 'url_aliases WHERE alias=:alias', array('alias' => $alias)); if (empty($result['item_type'])) { return false; } $lng = rad_lang::getLangByID($result['lang_id']); rad_lang::changeLanguage($lng->lng_code); switch ($result['item_type']) { //List all supported item types here (if they don't need some special processing) case 'product': return rad_input::makeURL('alias=' . $result['item_type'] . '&p=' . $result['item_id'], false); default: return false; //For not supported item types } }
/** * Модификатор date: unix_timestamp, date, datetime => дата на человеческом языке * * @param string $string * @param string $format — 'date', 'time', 'datetime' * @return string */ function smarty_modifier_date($string, $format = 'datetime') { if (!isset($GLOBALS['config']['smarty.' . $format . '_format'][rad_lang::getCurrentLanguage()])) { trigger_error('Modifier date: invalid format specified in config!'); return ''; } $format = $GLOBALS['config']['smarty.' . $format . '_format'][rad_lang::getCurrentLanguage()]; if (!is_numeric($string)) { // try to read date and datetime $timestamp = strtotime($string); if ($timestamp !== FALSE) { $string = $timestamp; } } // is this like unix_timestamp? if (is_numeric($string)) { // Month on human language $format = str_replace('%B', rad_lang::lang('-' . date('F', $string)), $format); return strftime($format, $string); } // we are still here? Something wrong... trigger_error('Invalid data for date modifier!'); return ''; }
/** * Makes the url from standart params * @param string $context * @param bool $url_aliases_enabled * @return string * @example makeURL('alias=index.html&page=2&itemsperpage=10&category=754') */ public static function makeURL($context, $url_aliases_enabled = false) { static $alias_plugins = null; static $search = null; static $replace = null; if (!$alias_plugins) { $alias_plugins = rad_loader::getAliasInputClasses(); } if (!$search) { $search = array('SITE_URL'); $replace = array(SITE_URL); if (defined('SITE_ALIAS')) { $search[] = 'SITE_ALIAS'; $replace[] = SITE_ALIAS; } } $c = str_replace($search, $replace, $context); if (is_link_external($c)) { return $c; } $r = strstr($c, '?'); if ($r) { $c = substr($r, 1); } $r = explode('&', $c); $get = array(); foreach ($r as $id) { $r1 = explode('=', $id); if (count($r1) >= 2) { $get[$r1[0]] = $r1[1]; } else { $get[$r1[0]] = ''; } } if (!isset($get['alias'])) { $get['alias'] = SITE_ALIAS; } if ($url_aliases_enabled && rad_config::getParam('cleanurl.on')) { if ($alias = rad_cleanurl::getAliasByParams($get)) { return SITE_URL . $alias; } } if (isset($alias_plugins[$get['alias']])) { $model = rad_instances::get($alias_plugins[$get['alias']]); $string = $model->makeurl($get); } else { if ((!count($get) or count($get) == 1 and isset($get['alias'])) and trim($get['alias']) == rad_config::getParam('defaultAlias')) { $string = SITE_URL; } else { if (rad_config::getParam('lang.location_show')) { $string = SITE_URL . rad_lang::getCurrentLanguage() . '/' . $get['alias'] . '/'; } else { $string = SITE_URL . $get['alias'] . '/'; } if (strlen($context)) { foreach ($get as $prmname => $prmvalue) { if ($prmname != 'alias') { $string .= $prmname . '/' . $prmvalue . '/'; } } if (strpos($prmvalue, '.')) { if ($string[strlen($string) - 1] == '/') { $string = substr($string, 0, -1); } } } } } return $string; }
/** * Gets the content language ID * @return integer */ public function getContentLangID() { return rad_lang::getContentLangID(); }
/** * Makes the correct url from string to work with the access * It is not recommended overriding the function. Override protected _makeUrl*() instead. * @param array $get Parsed $GET array * @return string Full URI generated */ public final function makeurl($get = array()) { $string = SITE_URL; if (rad_config::getParam('lang.location_show')) { $string .= rad_lang::getCurrentLanguage() . '/'; } $string .= $get['alias'] . '/'; unset($get['alias']); $string .= $this->_makeUrlMiddle($get); $string .= $this->_makeUrlEnd($get); if (substr($string, -1) == '/') { $string .= 'index' . $this->_ending; } else { $string .= $this->_ending; } return $string; }
/** * @example * {url type="js" module="core" file="..." load="sync|defer|async|inplace" tag="0"} * * Parameter "tag" is used only with type="js|css|image": * tag="0" - return only link * tag="1" - return html code * for type="image" default value is "0", for type="js|css" default value is "1" * * Parameter "load" is used only with type="js": * load="defer" - the script will not run until after the page has loaded (default value) * load="async" - the script will be run asynchronously * load="inplace" - the script will be insert into template where {url} tag was placed * load="sync" - the script will be run in order during the page rendering * * Parameter "attr" contains a list of additional attributes, that will be inserted into the tag * @example * {url type="css" module="core" file="..." attr="media=screen"} * {url type="image" module="core" file="..." attr="border=0&class=preview"} */ function smarty_function_url($params, $smarty) { $valid_attributes = array('css' => array('media'), 'image' => array('class', 'border')); $params += array('load' => false, 'type' => '', 'tag' => isset($params['type']) && $params['type'] == 'image' ? 0 : 1, 'priority' => 0); if (isset($params['href']) != empty($params['file'])) { //Either both params are set or both ain't. if (rad_config::getParam('debug.showErrors')) { throw new rad_exception('url file=[EMPTY]!'); } else { return ''; } } if (isset($params['href'])) { $url = $params['href']; if (!is_link_absolute($url)) { if (!empty($params['canonical'])) { if (empty($url)) { $url = SITE_URL . 'index.php?lang=' . rad_lang::getCurrentLanguage(); } else { $url = SITE_URL . 'index.php?lang=' . rad_lang::getCurrentLanguage() . '&' . $url; } } else { $url = rad_input::makeURL($url, true); } } } else { if (!empty($params['type'])) { if (!isset($params['module'])) { if (rad_config::getParam('debug.showErrors')) { throw new RuntimeException("Module is required in {url type='{$params['type']}' TAG"); } else { return ''; } } try { switch ($params['type']) { case 'js': $url = rad_jscss::getLinkToJS($params['module'], $params['file']); break; case 'css': $url = rad_jscss::getLinkToCSS($params['module'], $params['file']); break; case 'dfile': //TODO: implement per-component dfiles folders and dfiles caching. return DOWNLOAD_FILES . $params['module'] . '/' . $params['file']; case 'image': $url = rad_gd_image::getLinkToImage($params['module'], $params['file'], $params['preset']); break; default: throw new rad_exception("Wrong parameter type in {url type='{$params['type']}'}"); } } catch (Exception $e) { if (rad_config::getParam('debug.showErrors')) { throw $e; } else { return ''; } } /* TODO: some draft for future #850 implementation } elseif(get_class($params['file'])=='struct_core_files') { if(!isset($params['module'])) { $smarty->_syntax_error("url: missing 'module' parameter for struct_core_files class when genere url", E_USER_ERROR); } $module = $params['module']; if( rad_input::getDefine( strtoupper($module.'PATH') ) != strtoupper($module.'PATH') ) { return SITE_URL.str_replace( rad_input::getDefine('rootPath') ,'', rad_input::getDefine( strtoupper($module.'PATH') )); } elseif(rad_input::getDefine('DOWNLOAD_FILES')!='DOWNLOAD_FILES') { return DOWNLOAD_FILES.$params['file']->rfl_filename.'/'.$module.'/'.$params['file']->rfl_name; } else { throw new rad_exception('DOWNLOAD_FILES_DIR or '.strtoupper($module.'PATH').' not defined in config!'); } */ } elseif (get_class($params['file']) == 'struct_corecatalog_cat_files') { return DOWNLOAD_FILES . $params['file']->rcf_filename . '/' . $params['file']->rcf_name; } else { if (rad_config::getParam('debug.showErrors')) { throw new rad_exception('Unknown class in url function "' . get_class($params['file']) . '" ', __LINE__); } else { return ''; } } } if (!empty($params['type']) && $params['tag']) { $attributes = ''; if (!empty($params['attr']) && !empty($valid_attributes[$params['type']])) { parse_str($params['attr'], $attr_array); $attributes_array = array_intersect_key($attr_array, array_flip($valid_attributes[$params['type']])); foreach ($attributes_array as $k => $v) { $v = htmlspecialchars($v); $attributes .= " {$k}='{$v}'"; } } switch ($params['type']) { case 'js': switch ($params['load']) { case 'async': $attributes .= " async='true'"; case 'defer': //NB: also for "async" mode for IE compatibility $attributes .= " defer='true'"; } $html = "<script type='text/javascript' src='{$url}'{$attributes}></script>"; if ($params['load'] == 'inplace') { return $html; } if (isset($params['href'])) { rad_jscss::addFile('--EXTERNAL--', $params['href'], $html, (int) $params['priority']); } else { rad_jscss::addFile($params['module'], $params['file'], $html, (int) $params['priority']); } return ''; case 'css': $html = "<link rel='stylesheet' type='text/css' href='{$url}'{$attributes} />"; if (isset($params['href'])) { rad_jscss::addFile('--EXTERNAL--', $params['href'], $html, (int) $params['priority']); } else { rad_jscss::addFile($params['module'], $params['file'], $html, (int) $params['priority']); } return ''; case 'image': return "<img src='{$url}'{$attributes} />"; } } return $url; }
/** * Makes the url from standart params * @param string $context * @param boolean $canonicad | false * @return string * @example makeURL('alias=index.html&page=2&itemsperpage=10&category=754') */ function makeURL($string, $canonical = false) { if ($canonical) { return SITE_URL . 'index.php?lang=' . rad_lang::getCurrentLanguage() . (empty($string) ? '' : '&' . $string); } return rad_input::makeURL($string); }
/** * Function that is called to show all variables and all the page! */ public static function show() { $o = rad_rsmarty::getSmartyObject(); //TODO: optimize memory if (count(self::$_html)) { foreach (self::$_html as $key => $value) { $o->assign($key, $value); } } $o->assign('_CURR_LANG_', rad_lang::getCurrentLanguage()); if (isset(self::$sendedParams[self::$_alias->filename])) { foreach (self::$sendedParams[self::$_alias->filename] as $pkey => $pval) { $o->assign($pkey, $pval); } } $file = rad_themer::getFilePath(null, 'templates', 'core', 'maintemplates' . DS . self::$_alias->filename . '.tpl'); rad_instances::setCurrentTemplate($file, true); $o->display($file); }
/** * Load cache for templates * @param array $templates */ public function loadCacheForTemplates($templates) { if (is_array($templates) and count($templates)) { foreach ($templates as $id => $template) { $this->_readCacheFor($template); } $codes = array(); foreach ($this->_langcodes as $template => $cod) { foreach ($cod as $code => $nul) { $codes[] = $code; } } $codes = rad_lang::getCodeValues($codes); foreach ($this->_langcodes as $template => $cod) { foreach ($cod as $code => $nul) { if ($code and strlen($code) and isset($codes[$code])) { $this->_langcodes[$template][$code] = $codes[$code] or null; } } } } }
function __get($name) { if (isset($this->_values[$name]) and isset($this->_values[$name]['value'])) { if ($this->_isMultilang($name) and is_array($this->_values[$name]['value'])) { if (isset($this->_values[$name]['value'][rad_lang::getCurrentLangID()])) { if (is_array($this->_values[$name]['value'][rad_lang::getCurrentLangID()])) { return $this->_values[$name]['value'][rad_lang::getCurrentLangID()]; } else { return stripslashes($this->_values[$name]['value'][rad_lang::getCurrentLangID()]); } } else { if (is_array($this->_values[$name]['value'])) { foreach ($this->_values[$name]['value'] as $key => $value) { $this->_values[$name]['value'][stripslashes($key)] = stripslashes($value); } return $this->_values[$name]['value']; } else { return stripslashes($this->_values[$name]['value']); } } } else { if (is_array($this->_values[$name]['value'])) { return $this->_values[$name]['value']; } else { return stripslashes($this->_values[$name]['value']); } } } }
} $mem = memory_get_usage(); require 'config.php'; foreach ($config['db_delimiters'] as $id => $value) { define($id, $value); } foreach ($config['folders'] as $id => $value) { define($id, $value); } define('SITE_URL', $config['url']); require LIBPATH . 'simplefunctions.php'; $time_start = microtime_float(); foreach ($config as $id => $value) { if (!is_array($value)) { rad_config::setParam($id, $value); } } rad_config::loadConfig(); rad_exception::setHandlers(); rad_input::init_all(); rad_session::start(); define('SITE_ALIAS', rad_input::get('alias', rad_config::getParam('defaultAlias', 'index.html'))); rad_lang::init(); call_user_func(array(rad_config::getParam('loader_class'), 'init')); if (rad_config::getParam('lang.caching')) { call_user_func(array(rad_config::getParam('loader_class'), 'saveLangCache')); } /* $time_end = microtime_float(); $time = $time_end - $time_start; */
/** * Set new current language in session * Example: ru en ua fr jp etc. * * @param string $newLangCode * @example rad_lang::changeLanguage('en'); * * @access public */ public static function changeLanguage($newLangCode = null) { if ($newLangCode && !empty(self::$allLanguages[$newLangCode])) { rad_session::setVar('currlang', $newLangCode); self::$currentLanguage = $newLangCode; return true; } return false; }