Page MenuHomeIn-Portal Phabricator

in-portal
No OneTemporary

File Metadata

Created
Mon, Aug 25, 7:27 AM

in-portal

Index: branches/unlabeled/unlabeled-1.33.2/core/units/categories/categories_tag_processor.php
===================================================================
--- branches/unlabeled/unlabeled-1.33.2/core/units/categories/categories_tag_processor.php (nonexistent)
+++ branches/unlabeled/unlabeled-1.33.2/core/units/categories/categories_tag_processor.php (revision 7650)
@@ -0,0 +1,528 @@
+<?php
+
+class CategoriesTagProcessor extends kDBTagProcessor {
+
+ function SubCatCount($params)
+ {
+ $cat_object =& $this->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)
+ {
+ // only for categories, not structure
+ if ($this->Prefix != 'c') {
+ return parent::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)
+ {
+ $object =& $this->getObject($params);
+ if ($object->GetID() == $this->Application->GetVar('m_cat_id')) {
+ return true;
+ }
+ else {
+ return false;
+ }
+ }
+
+ /**
+ * Substitutes category in last template base on current category
+ * This is required becasue when you navigate catalog using AJAX, last_template is not updated
+ * but when you open item edit from catalog last_template is used to build opener_stack
+ * So, if we don't substitute m_cat_id in last_template, after saving item we'll get redirected
+ * to the first category we've opened, not the one we navigated to using AJAX
+ *
+ * @param Array $params
+ */
+ function UpdateLastTemplate($params)
+ {
+ $category_id = $this->Application->GetVar('m_cat_id');
+
+ $wid = $this->Application->GetVar('m_wid');
+ list($index_file, $env) = explode('|', $this->Application->RecallVar(rtrim('last_template_'.$wid, '_')), 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;
+ }
+
+ /**
+ * Parses warning block, but with style="display: none;". Used during permissions saving from AJAX
+ *
+ * @param Array $params
+ * @return string
+ */
+ function SaveWarning($params)
+ {
+ if ($this->Prefix != 'c') {
+ // don't use this method for other prefixes then Category, that use this tag processor
+ parent::SaveWarning($params);
+ return ;
+ }
+
+ $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 = substr($this->Application->GetVar($top_prefix.'_mode'), 0, 1) == '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, <prefixes_list>, 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);
+ }
+
+ function IsActive($params)
+ {
+ $cat_id = $this->Application->GetVar('c_id');
+ $current_cat = $this->getObject($params);
+ $current_path = $current_cat->GetDBField('ParentPath');
+
+ static $parent_path = null;
+ if (!isset($parent_path)) {
+ $parent_path = $this->Conn->GetOne('SELECT ParentPath FROM '.TABLE_PREFIX.'Category WHERE CategoryId = '.$this->Application->GetVar('m_cat_id'));
+ }
+ return strpos($parent_path, $current_path) !== false;
+ }
+}
+
+
+?>
\ No newline at end of file
Property changes on: branches/unlabeled/unlabeled-1.33.2/core/units/categories/categories_tag_processor.php
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.33
\ No newline at end of property
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property

Event Timeline