/app/code/core/Mage/Adminhtml/Block/Catalog/Product/Widget/Chooser.php
PHP | 292 lines | 183 code | 20 blank | 89 comment | 20 complexity | 8446c3af0cf271148aefb1feaf75224b 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_Adminhtml
- * @copyright Copyright (c) 2012 X.commerce, Inc. (http://www.magentocommerce.com)
- * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
- */
- /**
- * Product Chooser for "Product Link" Cms Widget Plugin
- *
- * @category Mage
- * @package Mage_Adminhtml
- * @author Magento Core Team <core@magentocommerce.com>
- */
- class Mage_Adminhtml_Block_Catalog_Product_Widget_Chooser extends Mage_Adminhtml_Block_Widget_Grid
- {
- protected $_selectedProducts = array();
- /**
- * Block construction, prepare grid params
- */
- protected function _construct()
- {
- parent::_construct();
- $this->setDefaultSort('name');
- $this->setUseAjax(true);
- }
- /**
- * Prepare chooser element HTML
- *
- * @param Varien_Data_Form_Element_Abstract $element Form Element
- * @return Varien_Data_Form_Element_Abstract
- */
- public function prepareElementHtml(Varien_Data_Form_Element_Abstract $element)
- {
- $uniqId = Mage::helper('Mage_Core_Helper_Data')->uniqHash($element->getId());
- $sourceUrl = $this->getUrl('*/catalog_product_widget/chooser', array(
- 'uniq_id' => $uniqId,
- 'use_massaction' => false,
- ));
- $chooser = $this->getLayout()->createBlock('Mage_Widget_Block_Adminhtml_Widget_Chooser')
- ->setElement($element)
- ->setTranslationHelper($this->getTranslationHelper())
- ->setConfig($this->getConfig())
- ->setFieldsetId($this->getFieldsetId())
- ->setSourceUrl($sourceUrl)
- ->setUniqId($uniqId);
- if ($element->getValue()) {
- $value = explode('/', $element->getValue());
- $productId = false;
- if (isset($value[0]) && isset($value[1]) && $value[0] == 'product') {
- $productId = $value[1];
- }
- $categoryId = isset($value[2]) ? $value[2] : false;
- $label = '';
- if ($categoryId) {
- $label = Mage::getResourceSingleton('Mage_Catalog_Model_Resource_Category')
- ->getAttributeRawValue($categoryId, 'name', Mage::app()->getStore()) . '/';
- }
- if ($productId) {
- $label .= Mage::getResourceSingleton('Mage_Catalog_Model_Resource_Product')
- ->getAttributeRawValue($productId, 'name', Mage::app()->getStore());
- }
- $chooser->setLabel($label);
- }
- $element->setData('after_element_html', $chooser->toHtml());
- return $element;
- }
- /**
- * Checkbox Check JS Callback
- *
- * @return string
- */
- public function getCheckboxCheckCallback()
- {
- if ($this->getUseMassaction()) {
- return "function (grid, element) {
- $(grid.containerId).fire('product:changed', {element: element});
- }";
- }
- }
- /**
- * Grid Row JS Callback
- *
- * @return string
- */
- public function getRowClickCallback()
- {
- if (!$this->getUseMassaction()) {
- $chooserJsObject = $this->getId();
- return '
- function (grid, event) {
- var trElement = Event.findElement(event, "tr");
- var productId = trElement.down("td").innerHTML;
- var productName = trElement.down("td").next().next().innerHTML;
- var optionLabel = productName;
- var optionValue = "product/" + productId.replace(/^\s+|\s+$/g,"");
- if (grid.categoryId) {
- optionValue += "/" + grid.categoryId;
- }
- if (grid.categoryName) {
- optionLabel = grid.categoryName + " / " + optionLabel;
- }
- '.$chooserJsObject.'.setElementValue(optionValue);
- '.$chooserJsObject.'.setElementLabel(optionLabel);
- '.$chooserJsObject.'.close();
- }
- ';
- }
- }
- /**
- * Category Tree node onClick listener js function
- *
- * @return string
- */
- public function getCategoryClickListenerJs()
- {
- $js = '
- function (node, e) {
- {jsObject}.addVarToUrl("category_id", node.attributes.id);
- {jsObject}.reload({jsObject}.url);
- {jsObject}.categoryId = node.attributes.id != "none" ? node.attributes.id : false;
- {jsObject}.categoryName = node.attributes.id != "none" ? node.text : false;
- }
- ';
- $js = str_replace('{jsObject}', $this->getJsObjectName(), $js);
- return $js;
- }
- /**
- * Filter checked/unchecked rows in grid
- *
- * @param Mage_Adminhtml_Block_Widget_Grid_Column $column
- * @return Mage_Adminhtml_Block_Catalog_Product_Widget_Chooser
- */
- protected function _addColumnFilterToCollection($column)
- {
- if ($column->getId() == 'in_products') {
- $selected = $this->getSelectedProducts();
- if ($column->getFilter()->getValue()) {
- $this->getCollection()->addFieldToFilter('entity_id', array('in'=>$selected));
- } else {
- $this->getCollection()->addFieldToFilter('entity_id', array('nin'=>$selected));
- }
- } else {
- parent::_addColumnFilterToCollection($column);
- }
- return $this;
- }
- /**
- * Prepare products collection, defined collection filters (category, product type)
- *
- * @return Mage_Adminhtml_Block_Widget_Grid
- */
- protected function _prepareCollection()
- {
- /* @var $collection Mage_Catalog_Model_Resource_Product_Collection */
- $collection = Mage::getResourceModel('Mage_Catalog_Model_Resource_Product_Collection')
- ->setStoreId(0)
- ->addAttributeToSelect('name');
- if ($categoryId = $this->getCategoryId()) {
- $category = Mage::getModel('Mage_Catalog_Model_Category')->load($categoryId);
- if ($category->getId()) {
- // $collection->addCategoryFilter($category);
- $productIds = $category->getProductsPosition();
- $productIds = array_keys($productIds);
- if (empty($productIds)) {
- $productIds = 0;
- }
- $collection->addFieldToFilter('entity_id', array('in' => $productIds));
- }
- }
- if ($productTypeId = $this->getProductTypeId()) {
- $collection->addAttributeToFilter('type_id', $productTypeId);
- }
- $this->setCollection($collection);
- return parent::_prepareCollection();
- }
- /**
- * Prepare columns for products grid
- *
- * @return Mage_Adminhtml_Block_Widget_Grid
- */
- protected function _prepareColumns()
- {
- if ($this->getUseMassaction()) {
- $this->addColumn('in_products', array(
- 'header_css_class' => 'a-center',
- 'type' => 'checkbox',
- 'name' => 'in_products',
- 'inline_css' => 'checkbox entities',
- 'field_name' => 'in_products',
- 'values' => $this->getSelectedProducts(),
- 'align' => 'center',
- 'index' => 'entity_id',
- 'use_index' => true,
- ));
- }
- $this->addColumn('entity_id', array(
- 'header' => Mage::helper('Mage_Catalog_Helper_Data')->__('ID'),
- 'sortable' => true,
- 'width' => '60px',
- 'index' => 'entity_id'
- ));
- $this->addColumn('chooser_sku', array(
- 'header' => Mage::helper('Mage_Catalog_Helper_Data')->__('SKU'),
- 'name' => 'chooser_sku',
- 'width' => '80px',
- 'index' => 'sku'
- ));
- $this->addColumn('chooser_name', array(
- 'header' => Mage::helper('Mage_Catalog_Helper_Data')->__('Product Name'),
- 'name' => 'chooser_name',
- 'index' => 'name'
- ));
- return parent::_prepareColumns();
- }
- /**
- * Adds additional parameter to URL for loading only products grid
- *
- * @return string
- */
- public function getGridUrl()
- {
- return $this->getUrl('*/catalog_product_widget/chooser', array(
- 'products_grid' => true,
- '_current' => true,
- 'uniq_id' => $this->getId(),
- 'use_massaction' => $this->getUseMassaction(),
- 'product_type_id' => $this->getProductTypeId()
- ));
- }
- /**
- * Setter
- *
- * @param array $selectedProducts
- * @return Mage_Adminhtml_Block_Catalog_Product_Widget_Chooser
- */
- public function setSelectedProducts($selectedProducts)
- {
- $this->_selectedProducts = $selectedProducts;
- return $this;
- }
- /**
- * Getter
- *
- * @return array
- */
- public function getSelectedProducts()
- {
- if ($selectedProducts = $this->getRequest()->getParam('selected_products', null)) {
- $this->setSelectedProducts($selectedProducts);
- }
- return $this->_selectedProducts;
- }
- }