/app/code/core/Mage/Catalog/Model/Resource/Product/Option/Collection.php
https://bitbucket.org/acidel/buykoala · PHP · 197 lines · 104 code · 17 blank · 76 comment · 5 complexity · ff60894c1d2b6c19ff2ebf66f8df40cb MD5 · raw file
- <?php
- /**
- * Magento
- *
- * NOTICE OF LICENSE
- *
- * This source file is subject to the Open Software License (OSL 3.0)
- * that is bundled with this package in the file LICENSE.txt.
- * It is also available through the world-wide-web at this URL:
- * http://opensource.org/licenses/osl-3.0.php
- * If you did not receive a copy of the license and are unable to
- * obtain it through the world-wide-web, please send an email
- * to license@magentocommerce.com so we can send you a copy immediately.
- *
- * DISCLAIMER
- *
- * Do not edit or add to this file if you wish to upgrade Magento to newer
- * versions in the future. If you wish to customize Magento for your
- * needs please refer to http://www.magentocommerce.com for more information.
- *
- * @category Mage
- * @package Mage_Catalog
- * @copyright Copyright (c) 2011 Magento Inc. (http://www.magentocommerce.com)
- * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
- */
-
-
- /**
- * Catalog product options collection
- *
- * @category Mage
- * @package Mage_Catalog
- * @author Magento Core Team <core@magentocommerce.com>
- */
- class Mage_Catalog_Model_Resource_Product_Option_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract
- {
- /**
- * Resource initialization
- */
- protected function _construct()
- {
- $this->_init('catalog/product_option');
- }
-
- /**
- * Adds title, price & price_type attributes to result
- *
- * @param int $storeId
- * @return Mage_Catalog_Model_Resource_Product_Option_Collection
- */
- public function getOptions($storeId)
- {
- $this->addPriceToResult($storeId)
- ->addTitleToResult($storeId);
-
- return $this;
- }
-
- /**
- * Add title to result
- *
- * @param int $storeId
- * @return Mage_Catalog_Model_Resource_Product_Option_Collection
- */
- public function addTitleToResult($storeId)
- {
- $productOptionTitleTable = $this->getTable('catalog/product_option_title');
- $adapter = $this->getConnection();
- $titleExpr = $adapter->getCheckSql('store_option_title.title IS NULL', 'default_option_title.title', 'store_option_title.title');
-
- $this->getSelect()
- ->join(array('default_option_title' => $productOptionTitleTable),
- 'default_option_title.option_id = main_table.option_id',
- array('default_title' => 'title'))
- ->joinLeft(array('store_option_title' => $productOptionTitleTable),
- 'store_option_title.option_id = main_table.option_id AND ' . $adapter->quoteInto('store_option_title.store_id = ?', $storeId),
- array(
- 'store_title' => 'title',
- 'title' => $titleExpr
- ))
- ->where('default_option_title.store_id = ?', Mage_Catalog_Model_Abstract::DEFAULT_STORE_ID);
-
- return $this;
- }
-
- /**
- * Add price to result
- *
- * @param int $storeId
- * @return Mage_Catalog_Model_Resource_Product_Option_Collection
- */
- public function addPriceToResult($storeId)
- {
- $productOptionPriceTable = $this->getTable('catalog/product_option_price');
- $adapter = $this->getConnection();
- $priceExpr = $adapter->getCheckSql('store_option_price.price IS NULL', 'default_option_price.price', 'store_option_price.price');
- $priceTypeExpr = $adapter->getCheckSql('store_option_price.price_type IS NULL', 'default_option_price.price_type', 'store_option_price.price_type');
-
- $this->getSelect()
- ->joinLeft(array('default_option_price' => $productOptionPriceTable),
- 'default_option_price.option_id = main_table.option_id AND ' . $adapter->quoteInto('default_option_price.store_id = ?', Mage_Catalog_Model_Abstract::DEFAULT_STORE_ID),
- array(
- 'default_price' => 'price',
- 'default_price_type' => 'price_type'
- ))
- ->joinLeft(array('store_option_price' => $productOptionPriceTable),
- 'store_option_price.option_id = main_table.option_id AND ' . $adapter->quoteInto('store_option_price.store_id = ?', $storeId),
- array(
- 'store_price' => 'price',
- 'store_price_type' => 'price_type',
- 'price' => $priceExpr,
- 'price_type' => $priceTypeExpr
- ));
-
- return $this;
- }
-
- /**
- * Add value to result
- *
- * @param int $storeId
- * @return Mage_Catalog_Model_Resource_Product_Option_Collection
- */
- public function addValuesToResult($storeId = null)
- {
- if ($storeId === null) {
- $storeId = Mage::app()->getStore()->getId();
- }
- $optionIds = array();
- foreach ($this as $option) {
- $optionIds[] = $option->getId();
- }
- if (!empty($optionIds)) {
- /** @var $values Mage_Catalog_Model_Option_Value_Collection */
- $values = Mage::getModel('catalog/product_option_value')
- ->getCollection()
- ->addTitleToResult($storeId)
- ->addPriceToResult($storeId)
- ->addOptionToFilter($optionIds)
- ->setOrder('sort_order', self::SORT_ORDER_ASC)
- ->setOrder('title', self::SORT_ORDER_ASC);
-
- foreach ($values as $value) {
- $optionId = $value->getOptionId();
- if($this->getItemById($optionId)) {
- $this->getItemById($optionId)->addValue($value);
- $value->setOption($this->getItemById($optionId));
- }
- }
- }
-
- return $this;
- }
-
- /**
- * Add product_id filter to select
- *
- * @param array|Mage_Catalog_Model_Product|int $product
- * @return Mage_Catalog_Model_Resource_Product_Option_Collection
- */
- public function addProductToFilter($product)
- {
- if (empty($product)) {
- $this->addFieldToFilter('product_id', '');
- } elseif (is_array($product)) {
- $this->addFieldToFilter('product_id', array('in' => $product));
- } elseif ($product instanceof Mage_Catalog_Model_Product) {
- $this->addFieldToFilter('product_id', $product->getId());
- } else {
- $this->addFieldToFilter('product_id', $product);
- }
-
- return $this;
- }
-
- /**
- * Add filtering by option ids
- *
- * @param mixed $optionIds
- * @return Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Option_Collection
- */
- public function addIdsToFilter($optionIds)
- {
- $this->addFieldToFilter('main_table.option_id', $optionIds);
- return $this;
- }
-
- /**
- * Call of protected method reset
- *
- * @return Mage_Catalog_Model_Resource_Product_Option_Collection
- */
- public function reset()
- {
- return $this->_reset();
- }
- }