/** * @param Mage_Catalog_Model_Resource_Product_Collection $productCollection * @return mixed */ public function sort(Mage_Catalog_Model_Resource_Product_Collection $productCollection) { //Pass a small validation if (!$this->_getHelper()->isCategorySortingEnable() || $productCollection->getFlag(self::MARKETO_SORTED)) { return $productCollection; } $categoriesList = $this->_getPesonalizeCalculator()->getScoreCategoryParams(HooshMarketing_Marketo_Model_Personalize_Calculator::CATEGORY_ID_AND_SCORE); //get List of categories with key -> Category_id and value - Score if (!count($categoriesList)) { //if we havn`t score categories do nothing return $productCollection; } uasort($categoriesList, function ($f, $s) { return $f > $s ? 1 : -1; //sort by descending }); //Sort categories in order to show top scored categories first $categoriesList = array_keys($categoriesList); // get only category ids try { $productCategoryTable = $this->_getCoreResource()->getTableName("catalog_category_product"); $productCollection->getSelect()->joinLeft(array("marketo_category_table" => $productCategoryTable), "marketo_category_table.product_id = e.entity_id", array("top_category_id" => "marketo_category_table.category_id"))->group("entity_id")->order("FIELD(top_category_id, " . implode(',', $categoriesList) . ") DESC"); //order by top $productCollection->setFlag(self::MARKETO_SORTED, true); //to set order only one time } catch (Exception $e) { Mage::logException($e); } return $productCollection; }
/** * Add index select in product collection * * @param Mage_Catalog_Model_Resource_Product_Collection $collection * @param int $customerGroupId * @return Enterprise_CatalogPermissions_Model_Resource_Permission_Index */ public function addIndexToProductCollection($collection, $customerGroupId) { $parts = $collection->getSelect()->getPart(Zend_Db_Select::FROM); if (isset($parts['perm'])) { return $this; } if ($collection->getFlag('disable_root_category_filter')) { $permColumns = $this->_getPermColumns(); } else { $permColumns = array('grant_catalog_category_view', 'grant_catalog_product_price', 'grant_checkout_items'); } $collection->getSelect()->joinLeft(array('perm' => $this->getTable('permission_index')), 'perm.category_id=cat_index.category_id AND perm.customer_group_id= ' . $customerGroupId . ' AND perm.website_id=' . Mage::app()->getStore()->getWebsiteId(), $permColumns); if (!Mage::helper('enterprise_catalogpermissions')->isAllowedCategoryView()) { $collection->getSelect()->where('perm.grant_catalog_category_view = ?', Enterprise_CatalogPermissions_Model_Permission::PERMISSION_ALLOW); } else { $collection->getSelect()->where('perm.grant_catalog_category_view != ?' . ' OR perm.grant_catalog_category_view IS NULL', Enterprise_CatalogPermissions_Model_Permission::PERMISSION_DENY); } $collection->getSelect()->where('cat_index.store_id=' . $collection->getStoreId()); if ($collection->getFlag('disable_root_category_filter')) { $collection->getSelect()->where('cat_index.is_parent=1'); $collection->getSelect()->group('cat_index.product_id'); } if ($this->_isLinkCollection($collection)) { $collection->getSelect()->where('perm.grant_catalog_product_price!=' . Enterprise_CatalogPermissions_Model_Permission::PERMISSION_DENY . ' OR perm.grant_catalog_product_price IS NULL')->where('perm.grant_checkout_items!=' . Enterprise_CatalogPermissions_Model_Permission::PERMISSION_DENY . ' OR perm.grant_checkout_items IS NULL'); } return $this; }