Application->recallObject($this->getPrefixSpecial(),$this->Prefix, $params); $sql = ' SELECT COUNT(*) - 1 FROM '.$cat_object->TableName.' WHERE ParentPath LIKE "'.$cat_object->GetDBField('ParentPath').'%"'; if (isset($params['today'])) { $sql .= ' AND CreatedOn > '.(adodb_mktime()-86400); } return $this->Conn->GetOne($sql); } function IsNew($params) { $object =& $this->Application->recallObject($this->getPrefixSpecial(), $this->Prefix, $params); $ret = $object->GetDBField('IsNew') ? 1 : 0; return $ret; } function IsPick($params) { $object =& $this->Application->recallObject($this->getPrefixSpecial(), $this->Prefix, $params); $ret = $object->GetDBField('EditorsPick') ? 1 : 0; return $ret; } function ItemIcon($params) { $object =& $this->Application->recallObject($this->getPrefixSpecial(), $this->Prefix, $params); $status = $object->GetDBField('Status'); if($status == 1) { $ret = $object->GetDBField('IsNew') ? 'icon16_cat_new.gif' : 'icon16_cat.gif'; } else { $ret = $status ? 'icon16_cat_pending.gif' : 'icon16_cat_disabled.gif'; } return $ret; } function ItemCount($params) { $cat_object =& $this->getObject($params); $ci_table = $this->Application->getUnitOption('l-ci', 'TableName'); $sql = ' SELECT COUNT(*) FROM '.$cat_object->TableName.' c LEFT JOIN '.$ci_table.' ci ON c.CategoryId=ci.CategoryId WHERE c.ParentPath LIKE "'.$cat_object->GetDBField('ParentPath').'%" AND NOT (ci.CategoryId IS NULL)'; return $this->Conn->GetOne($sql); } function ListCategories($params) { return $this->PrintList2($params); } function RootCategoryName($params) { return $this->Application->ProcessParsedTag('m', 'RootCategoryName', $params); } function CheckModuleRoot($params) { $module_name = getArrayValue($params, 'module') ? $params['module'] : 'In-Commerce'; $module =& $this->Application->recallObject('mod.'.$module_name); $module_root_cat = $module->GetDBField('RootCat'); $additional_cats = $this->SelectParam($params, 'add_cats'); if ($additional_cats) { $additional_cats = explode(',', $additional_cats); } else { $additional_cats = array(); } if ($this->Application->GetVar('m_cat_id') == $module_root_cat || in_array($this->Application->GetVar('m_cat_id'), $additional_cats)) { $home_template = getArrayValue($params, 'home_template'); if (!$home_template) return; $this->Application->Redirect($home_template, Array('pass'=>'all')); }; } function CategoryPath($params) { $module_name = getArrayValue($params, 'module') ? $params['module'] : 'In-Commerce'; $module_category_id = $this->Application->findModule('Name', $module_name, 'RootCat'); $module_item_id = $this->Application->GetVar($this->Application->findModule('Name', $module_name, 'Var').'_id'); $block_params['separator'] = $params['separator']; if (!isset($params['cat_id'])) { $params['cat_id'] = getArrayValue($params, 'cat_id') ? $params['cat_id'] : $this->Application->GetVar('m_cat_id'); } if ($params['cat_id'] == 0) { $block_params['current'] = 1; $block_params['cat_id'] = 0; $block_params['cat_name'] = $this->Application->ProcessParsedTag('m', 'RootCategoryName', $params); $block_params['name'] = $this->SelectParam($params, 'root_cat_render_as,block_root_cat,rootcatblock,render_as'); return $this->Application->ParseBlock($block_params); } else { $ml_formatter =& $this->Application->recallObject('kMultiLanguage'); $navbar_field = $ml_formatter->LangFieldName('CachedNavBar'); $id_field = $this->Application->getUnitOption($this->Prefix, 'IDField'); $table_name = $this->Application->getUnitOption($this->Prefix, 'TableName'); $sql = 'SELECT '.$navbar_field.', ParentPath FROM '.$table_name.' WHERE '.$id_field.' = '.$params['cat_id']; $category_data = $this->Conn->GetRow($sql); $ret = ''; if ($category_data) { $category_names = explode('&|&', $category_data[$navbar_field]); $category_ids = explode('|', substr($category_data['ParentPath'], 1, -1)); // add "Home" category at beginning of path array_unshift($category_names, $this->Application->ProcessParsedTag('m', 'RootCategoryName', $params)); array_unshift($category_ids, 0); foreach ($category_ids as $category_pos => $category_id) { $block_params['cat_id'] = $category_id; $block_params['cat_name'] = $category_names[$category_pos]; $block_params['current'] = ($params['cat_id'] == $category_id) && !$module_item_id ? 1 : 0; $block_params['is_module_root'] = $category_id == $module_category_id ? 1 : 0; $block_params['name'] = $this->SelectParam($params, 'render_as,block'); // which block to parse as current ? if ($category_id == 0) { $block_params['name'] = $this->SelectParam($params, 'root_cat_render_as,block_root_cat,rootcatblock,render_as,block'); } if ($block_params['is_module_root'] == 1) { // module root $block_params['name'] = $this->SelectParam($params, 'module_root_render_as,block_module_root,rootmoduleblock,render_as,block'); } if ($block_params['current'] == 1) { // current cat (label) $block_params['name'] = $this->SelectParam($params, 'current_render_as,block_current,currentblock,render_as,block'); } $this->Application->SetVar($this->Prefix.'_id', $category_id); $ret .= $this->Application->ParseBlock($block_params, 1); } } return $ret; } } function CurrentCategoryName($params) { $cat_object =& $this->Application->recallObject($this->getPrefixSpecial(), $this->Prefix.'_List'); $sql = 'SELECT '.$this->getTitleField().' FROM '.$cat_object->TableName.' WHERE CategoryId = '.$this->Application->GetVar('m_cat_id'); return $this->Conn->GetOne($sql); } function getTitleField() { $ml_formatter =& $this->Application->recallObject('kMultiLanguage'); return $ml_formatter->LangFieldName('Name'); } function CategoryLink($params) { // 'p_id'=>'0', ?? $params = array_merge(array('pass'=>'m'), $params); $cat_id = getArrayValue($params,'cat_id'); if ($cat_id === false) { // $cat_id = $this->Application->Parser->GetParam('cat_id'); $cat_id = $this->Application->GetVar($this->getPrefixSpecial().'_id'); } if($cat_id == 'Root') { $object =& $this->Application->recallObject('mod.'.$params['module']); $params['m_cat_id'] = $object->GetDBField('RootCat'); unset($params['module']); } else{ $params['m_cat_id'] = $cat_id; } unset($params['cat_id']); $params['pass_category'] = 1; $main_processor =& $this->Application->recallObject('m_TagProcessor'); return $main_processor->T($params); } function CategoryList($params) { //$object =& $this->Application->recallObject( $this->getPrefixSpecial() , $this->Prefix.'_List', $params ); $object =& $this->GetList($params); if ($object->RecordsCount == 0) { if (isset($params['block_no_cats'])) { $params['name'] = $params['block_no_cats']; return $this->Application->ParseBlock($params); } else { return ''; } } if (isset($params['block'])) { return $this->PrintList($params); } else { $params['block'] = $params['block_main']; if (isset($params['block_row_start'])) { $params['row_start_block'] = $params['block_row_start']; } if (isset($params['block_row_end'])) { $params['row_end_block'] = $params['block_row_end']; } return $this->PrintList2($params); } } function Meta($params) { $name = getArrayValue($params, 'name'); $object =& $this->Application->recallObject($this->Prefix.'.-item'); $field = $object->GetField('Meta'.$name); if ($field) return $field; switch ($name) { case 'Description': $conf = 'Category_MetaDesc'; break; case 'Keywords': $conf = 'Category_MetaKey'; break; } return $this->Application->ConfigValue($conf); } function BuildListSpecial($params) { if ( isset($params['parent_cat_id']) ) { $parent_cat_id = $params['parent_cat_id']; } else { $parent_cat_id = $this->Application->GetVar($this->Prefix.'_id'); if (!$parent_cat_id) { $parent_cat_id = $this->Application->GetVar('m_cat_id'); } if (!$parent_cat_id) { $parent_cat_id = 0; } } $types = $this->SelectParam($params, 'types'); $except = $this->SelectParam($params, 'except'); $no_special = isset($params['no_special']) && $params['no_special']; if ($no_special) return $this->Special; if ($types.$except.$parent_cat_id == '') { return parent::BuildListSpecial($params); } $special = crc32($types.$except.$parent_cat_id); return $special; } function IsCurrent($params) { return false; } /** * Substitutes category in last template base on current category * * @param Array $params */ function UpdateLastTemplate($params) { $category_id = $this->Application->GetVar('m_cat_id'); list($index_file, $env) = explode('|', $this->Application->RecallVar('last_template'), 2); $this->Application->SetVar(ENV_VAR_NAME, str_replace('%5C', '\\', $env)); $this->Application->HttpQuery->processQueryString(); // update required fields $this->Application->SetVar('m_cat_id', $category_id); $this->Application->Session->SaveLastTemplate($params['template']); } function GetParentCategory($params) { $parent_id = 0; $id_field = $this->Application->getUnitOption($this->Prefix, 'IDField'); $table = $this->Application->getUnitOption($this->Prefix,'TableName'); $cat_id = $this->Application->GetVar('m_cat_id'); if ($cat_id > 0) { $sql = 'SELECT ParentId FROM '.$table.' WHERE '.$id_field.' = '.$cat_id; $parent_id = $this->Conn->GetOne($sql); } return $parent_id; } function InitCacheUpdater($params) { safeDefine('CACHE_PERM_CHUNK_SIZE', 30); $continue = $this->Application->GetVar('continue'); $total_cats = (int) $this->Conn->GetOne('SELECT COUNT(*) FROM '.TABLE_PREFIX.'Category'); if ($continue === false && $total_cats > CACHE_PERM_CHUNK_SIZE) { // first step, if category count > CACHE_PERM_CHUNK_SIZE, then ask for cache update return true; } if ($continue === false) { // if we don't have to ask, then assume user selected "Yes" in permcache update dialog $continue = 1; } $updater =& $this->Application->recallObject('kPermCacheUpdater', null, Array('continue' => $continue)); if ($continue === '0') { // No in dialog $updater->clearData(); $this->Application->Redirect($params['destination_template']); } $ret = false; // don't ask for update if ($continue == 1) { // Initial run $updater->setData(); } if ($continue == 2) { // Continuing // called from AJAX request => returns percent $needs_more = true; while ($needs_more && $updater->iteration <= CACHE_PERM_CHUNK_SIZE) { // until proceeeded in this step category count exceeds category per step limit $needs_more = $updater->DoTheJob(); } if ($needs_more) { // still some categories are left for next step $updater->setData(); } else { // all done -> redirect $updater->clearData(); $this->Application->RemoveVar('PermCache_UpdateRequired'); $this->Application->Redirect($params['destination_template']); } $ret = $updater->getDonePercent(); } return $ret; } function SaveWarning($params) { $main_prefix = getArrayValue($params, 'main_prefix'); if ($main_prefix && $main_prefix != '$main_prefix') { $top_prefix = $main_prefix; } else { $top_prefix = $this->Application->GetTopmostPrefix($this->Prefix); } $temp_tables = $this->Application->GetVar($top_prefix.'_mode') == 't'; $modified = $this->Application->RecallVar($top_prefix.'_modified'); if (!$temp_tables) { $this->Application->RemoveVar($top_prefix.'_modified'); return ''; } $block_name = $this->SelectParam($params, 'render_as,name'); if ($block_name) { $block_params = $this->prepareTagParams($params); $block_params['name'] = $block_name; $block_params['edit_mode'] = $temp_tables ? 1 : 0; $block_params['display'] = $temp_tables && $modified ? 1 : 0; return $this->Application->ParseBlock($block_params); } else { return $temp_tables && $modified ? 1 : 0; } return ; } /** * Allows to detect if this prefix has something in clipboard * * @param Array $params * @return bool */ function HasClipboard($params) { $clipboard = $this->Application->RecallVar('clipboard'); if ($clipboard) { $clipboard = unserialize($clipboard); foreach ($clipboard as $prefix => $clipboard_data) { foreach ($clipboard_data as $mode => $ids) { if (count($ids)) return 1; } } } return 0; } /** * Allows to detect if root category being edited * * @param Array $params */ function IsRootCategory($params) { $object =& $this->getObject($params); return $object->IsRoot(); } function CatalogItemCount($params) { $object =& $this->GetList($params); if (!$object->Counted) { $object->CountRecs(); } return $object->NoFilterCount != $object->RecordsCount ? $object->RecordsCount.' / '.$object->NoFilterCount : $object->RecordsCount; } /** * Print grid pagination using * block names specified * * @param Array $params * @return string * @access public */ function PrintPages($params) { if ($this->Application->Parser->GetParam('no_special')) { $params['no_special'] = $this->Application->Parser->GetParam('no_special'); } return parent::PrintPages($params); } function InitCatalog($params) { $tab_prefixes = $this->Application->GetVar('tp'); // {all, , none} if ($tab_prefixes === false) $tab_prefixes = 'all'; $skip_prefixes = isset($params['skip_prefixes']) && $params['skip_prefixes'] ? explode(',', $params['skip_prefixes']) : Array(); // get all prefixes available $prefixes = Array(); foreach ($this->Application->ModuleInfo as $module_name => $module_data) { if ($module_data['Var'] == 'm') continue; $prefixes[] = $module_data['Var']; } if ($tab_prefixes == 'none') { $skip_prefixes = array_unique(array_merge($skip_prefixes, $prefixes)); } elseif ($tab_prefixes != 'all') { // prefix list here $tab_prefixes = explode(',', $tab_prefixes); // list of prefixes that should stay $skip_prefixes = array_unique(array_merge($skip_prefixes, array_diff($prefixes, $tab_prefixes))); } $params['name'] = $params['render_as']; $params['skip_prefixes'] = implode(',', $skip_prefixes); return $this->Application->ParseBlock($params, 1); } } ?>