protected static function getName($id, $id_field, $name_field, $table, $identifier, $cache_folder, $languages_id, $languages_code, $languages_field = "languages_id") { $id = (int) $id; $cache_filename = self::buildFileName($id, $languages_code); if (($name = SSUCache::read($cache_filename, $cache_folder)) !== false) { return $name; } $sql_query = "SELECT {$name_field} FROM {$table} WHERE {$id_field} ='{$id}'"; if ($languages_id != 0) { $sql_query .= " AND {$languages_field} = '{$languages_id}'"; } $_name = self::getNameFromDB($sql_query, $name_field); // fall back to default language if (empty($_name) && $languages_id != 0) { $sql_query = "SELECT {$name_field} FROM {$table} WHERE {$id_field} ='{$id}' AND {$languages_field} = 1"; $_name = self::getNameFromDB($sql_query, $name_field); } if (empty($_name)) { $_name = $name_field; } $_name = SSULanguage::parseName($_name, $languages_code); $name = $_name . $identifier . $id; SSUCache::write($cache_filename, $cache_folder, $name); // write to link alias if (SSUConfig::registry('configs', 'auto_alias')) { // here we want to make sure we use the product id without the attribute, we dont want to create aliases for attributes if (!is_numeric($id) && ($sem_pos = strpos($id, ':')) !== false) { $id = substr($id, 0, $sem_pos); $name = $_name . $identifier . $id; } SSUAlias::autoAlias($id, $cache_folder, $name, $_name); } return $name; }
static function retrieveAliases() { if (isset($_SESSION['ssu_aliases'])) { self::$aliases = $_SESSION['ssu_aliases']; } else { global $db; $aliases = $db->Execute('SELECT * FROM ' . TABLE_LINKS_ALIASES); while (!$aliases->EOF) { self::$aliases[] = array('link' => $aliases->fields['link_url'], 'alias' => $aliases->fields['link_alias']); $aliases->MoveNext(); } $_SESSION['ssu_aliases'] = self::$aliases; } }
static function retrieveAliases() { if (!(isset($_SESSION['ssu_aliases_created_on']) && $_SESSION['ssu_aliases_created_on'] > (int) SSU_CACHE_RESET_TIME)) { global $db; $aliases = $db->Execute('SELECT * FROM ' . TABLE_LINKS_ALIASES . ' ORDER BY length(link_alias) DESC'); while (!$aliases->EOF) { self::$aliases[] = $aliases->fields['link_alias']; self::$links[] = $aliases->fields['link_url']; if ($aliases->fields['status'] == 1) { self::$_aliases[] = $aliases->fields['link_alias']; self::$_links[] = $aliases->fields['link_url']; } $aliases->MoveNext(); } $_SESSION['ssu_aliases']['created_on'] = time(); self::$no_search = array('link_alias' => array(), 'link_url' => array()); } else { SSUCache::read(); } }
$ri_template = new RITemplate(true); switch ($_GET['action']) { case 'reset_cache': $ri_template->set('file_counter', SSUManager::resetCache($_GET['folder'])); $ri_template->setView('reset_cache_folder.php'); break; case 'reset_cache_timer': SSUManager::resetCacheTimer(); $ri_template->setView('reset_cache_timer.php'); break; case 'check_and_fix_cache': $ri_template->set('file_counter', SSUManager::checkAndFixCache()); $ri_template->setView('reset_cache_folder.php'); break; case 'link_aliases': SSUAlias::retrieveAliases(); $ri_template->set('link_aliases', SSUManager::retrieveAliases()); /*$languages = $db->Execute("SELECT * FROM ".TABLE_LANGUAGES); $languages_string = ""; while(!$languages->EOF){ $languages_string .= "{$languages->fields['languages_id']}:{$languages->fields['name']};"; $languages->MoveNext(); } $languages_string = trim($languages_string, ';');*/ break; } ?> <!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"> <html <?php echo HTML_PARAMS; ?>
function parseParams(&$languages_code, &$page, $parameters) { $parameters = trim($parameters, ' ?&'); $set_cache = false; $query_string = $params = ''; $main_page = $page; $languages_id = SSUConfig::registry('configs', 'languages_id'); if (!empty($parameters)) { $parsers = SSUConfig::registry('plugins', 'parsers'); $cache_filename = md5($page . $parameters); foreach ($parsers as $key => $parser) { if (call_user_func_array(array("{$parser}Parser", "identifyPage2"), array($page, $parameters)) !== false) { if (($params = SSUCache::read("{$cache_filename}_{$languages_code}", 'pc')) !== false) { return $params; } $set_cache = true; } elseif (call_user_func_array(array("{$parser}Parser", "identifyParam"), array($parameters)) !== false) { if (($params = SSUCache::read("{$cache_filename}_{$languages_code}", 'pc')) !== false) { return $params; } $set_cache = true; //unset($parsers[$key]); } else { unset($parsers[$key]); } } // take out the empty variables $params = array(); parse_str($parameters, $parameters); // parse language if (isset($parameters['language']) && !empty($parameters['language']) && ($languages_id = $this->getLanguagesID($parameters['language'])) !== false) { $languages_code = $parameters['language']; if (SSUConfig::registry('configs', 'multilang_status')) { unset($parameters['language']); } } foreach ($parameters as $key => $value) { if (!empty($value)) { // exclude certain query keys from being seo-iezed if ($this->checkQueryExcludedList($key)) { $query_string .= $key . '=' . $value . '&'; } else { $params[] = $key; $params[] = $value; } } } $parameters = $params; foreach ($parsers as $key => $parser) { call_user_func_array(array("{$parser}Parser", "parseParam"), array($main_page, &$parameters, $languages_id, $languages_code)); } $params = implode('/', $parameters); while (strpos($params, '//') !== false) { $params = str_replace('//', '/', $params); } if (SSUConfig::registry('configs', 'alias_status')) { SSUAlias::linkToAlias($params); } } if (SSUConfig::registry('configs', 'alias_status') && !empty($page)) { SSUAlias::linkToAlias($page); } // we cache the whole link so that we dont have to recalculate it again $params .= !empty($query_string) ? '?' . trim($query_string, '&') : ''; if ($set_cache) { SSUCache::write("{$cache_filename}_{$languages_code}", 'pc', $params); } return $params; }
static function getName($cPath, $languages_id, $languages_code) { $cache_filename = self::buildFileName($cPath, $languages_code); if (($name = SSUCache::read($cache_filename, self::$identifier)) !== false) { return $name; } $current_categories_id = self::getID($cPath, '_'); $category_ids = explode('_', $cPath); $cat_count = count($category_ids); $counter = $cat_count - SSUConfig::registry('configs', 'max_level'); if ($counter < 0) { $counter = 0; } $_name = array(); // this may not be the best way to build the category name, but we do this once per cPath only while ($counter <= $cat_count - 1) { $category_ids[$counter] = (int) $category_ids[$counter]; $sql_query = "SELECT categories_name FROM " . self::$table . " WHERE categories_id ='" . $category_ids[$counter] . "' AND language_id= '{$languages_id}' LIMIT 1"; $__name = self::getNameFromDB($sql_query, self::$name_field); // fall back to default language if (empty($__name) && $languages_id != 0) { $sql_query = "SELECT categories_name FROM " . self::$table . " WHERE categories_id ='" . $category_ids[$counter] . "' AND language_id = 1 LIMIT 1"; $__name = self::getNameFromDB($sql_query, self::$name_field); } //if(empty($__name)) // $__name = self::$name_field; $_name[] = SSULanguage::parseName($__name, $languages_code); $counter++; } if (empty($_name)) { $_name = SSULanguage::parseName($name_field, $languages_code); } if (SSUConfig::registry('configs', 'alias_status')) { $_name = implode(SSUConfig::registry('configs', 'category_separator'), $_name); $name = str_replace(SSUConfig::registry('configs', 'category_separator'), SSUConfig::registry('delimiters', 'name'), $_name) . SSUConfig::registry('identifiers', self::$identifier) . $cPath; } else { $_name = implode(SSUConfig::registry('delimiters', 'name'), $_name); $name = $_name . SSUConfig::registry('identifiers', self::$identifier) . $cPath; } // write to file EVEN if we get an empty content SSUCache::write($cache_filename, self::$identifier, $name); // write to link alias if (SSUConfig::registry('configs', 'auto_alias')) { SSUAlias::autoAlias($current_categories_id, self::$identifier, $name, $_name); } return $name; }
function parseParams(&$languages_code, &$page, $parameters) { $set_alias_cache = $set_cache = false; $query_string = $params = $excluded_queries = ''; $languages_id = SSUConfig::registry('configs', 'languages_id'); $_get = array('main_page' => $page); if (!empty($parameters)) { $parameters_string = trim($parameters, ' ?&'); // we shall not include the excluded query in our cache parse_str($parameters_string, $parameters); $excluded_queries = array(); // parse language if (isset($parameters['language']) && !empty($parameters['language']) && ($languages_id = $this->getLanguagesID($parameters['language'])) !== false) { $languages_code = $parameters['language']; if (SSUConfig::registry('configs', 'multilang_status')) { unset($parameters['language']); } } foreach ($parameters as $key => $value) { if ($value == "") { unset($parameters[$key]); } if ($this->checkQueryExcludedList($key)) { $excluded_queries[$key] = $value; unset($parameters[$key]); } } $excluded_queries = http_build_query($excluded_queries); } // here we will attempt to get the cache // note that there is a draw back here: we are attemthing to read cache file for every single link // but on another hand we may avoid querying the database for aliases $parameters_string = !empty($parameters) ? http_build_query($parameters) : ''; $cache_filename = md5(trim("{$page}&{$parameters_string}", "&")); if (($params = SSUCache::read("{$cache_filename}_{$languages_code}", 'pc', true)) !== false) { list($page, $params) = explode("|", $params); return trim("{$params}?{$excluded_queries}", "?"); } // from this point on, it means we have no cache file if (!empty($parameters)) { // we will use this to get the cache name $parsers = SSUConfig::registry('plugins', 'parsers'); // kind of a hack here, but we will check if this page exisits first if (file_exists(DIR_FS_CATALOG . DIR_WS_MODULES . "pages/{$page}/header_php.php")) { foreach ($parsers as $key => $parser) { if (call_user_func_array(array("{$parser}Parser", "identifyPage2"), array(&$page, $parameters_string)) !== false) { // $set_cache = true; } elseif (call_user_func_array(array("{$parser}Parser", "identifyParam"), array($parameters_string)) !== false) { // $set_cache = true; } else { unset($parsers[$key]); } } // to avoid having to querying the database for aliases, we will always cache a "real" page $set_cache = true; } // take out the empty variables $params = array(); foreach ($parameters as $key => $value) { if ($value == 0 || !empty($value)) { $params[] = $key; $params[] = $value; $_get[$key] = $value; } } $parameters = $params; $pc_id_list = array(); foreach ($parsers as $key => $parser) { $key = call_user_func_array(array("{$parser}Parser", "getStatic"), array('identifier')); $pc_id_list[$key] = call_user_func_array(array("{$parser}Parser", "parseParam"), array(&$_get, &$parameters, $languages_id, $languages_code)); } $params = implode('/', $parameters); while (strpos($params, '//') !== false) { $params = str_replace('//', '/', $params); } } if (SSUConfig::registry('configs', 'alias_status')) { //$alias_cache_filename = md5(trim("$page/$params", "/")); if (!empty($params)) { SSUAlias::linkToAlias($params); } if (!empty($page)) { SSUAlias::linkToAlias($page); } // comment out to reduce cache files //if($set_alias_cache = !SSUCache::exists($alias_cache_filename, 'aliases', true)){ // SSUCache::write($alias_cache_filename, 'aliases', http_build_query($_get), true); //} } if ($set_cache) { SSUCache::write("{$cache_filename}_{$languages_code}", 'pc', "{$page}|{$params}", true); //foreach ($pc_id_list as $type => $id) //SSUCache::saveCachePath(array($id), $type, "{$cache_filename}_{$languages_code}"); } // we cache the whole link so that we dont have to recalculate it again $params .= !empty($excluded_queries) ? '?' . trim($excluded_queries, '&') : ''; return $params; }