Ejemplo n.º 1
0
 /**
  * Apply the condition to the given collection by way of the resource specified on instantiation
  *
  * @param \Cm_Mongo_Model_Resource_Collection_Abstract $collection
  * @param \Mage_Adminhtml_Block_Widget_Grid_Column $column
  */
 public function apply(Cm_Mongo_Model_Resource_Collection_Abstract $collection, Mage_Adminhtml_Block_Widget_Grid_Column $column)
 {
     if (is_string($this->_resource)) {
         $filterCollection = Mage::getResourceModel($this->_resource);
     } else {
         $filterCollection = $this->_resource;
     }
     var_dump($filterCollection);
     if ($this->_filters) {
         $filterCollection->addFieldToFilter($this->_filters);
     }
     $field = $column->getFilterIndex() ? $column->getFilterIndex() : $column->getIndex();
     $cond = $column->getFilter()->getCondition();
     if ($field && isset($cond)) {
         $filterCollection->addFieldToFilter($field, $cond);
     }
     $collection->addFieldToFilter($this->_field, '$in', $filterCollection->getAllIds(TRUE));
 }
Ejemplo n.º 2
0
 /**
  * Applies a filter to the given collection based on this collection's field values.
  *
  * @param string $field
  * @param Cm_Mongo_Model_Resource_Collection_Abstract $collection
  * @throws Exception
  * @return Cm_Mongo_Model_Resource_Collection_Abstract
  */
 public function applyReferencedCollectionFilter($field, $collection)
 {
     $ids = array();
     // Get all ids for the given field
     switch ((string) $this->getResource()->getFieldType($field)) {
         case 'reference':
             foreach ($this->getItems() as $item) {
                 if ($ref = $item->getData($field)) {
                     $ids[] = $ref;
                 }
             }
             break;
             // Get unique set of ids from field
         // Get unique set of ids from field
         case 'referenceSet':
             foreach ($this->getItems() as $item) {
                 if ($refSet = $item->getData($field)) {
                     foreach ($refSet as $ref) {
                         $ids[] = $ref;
                     }
                 }
             }
             break;
         case 'referenceHash':
             $idField = (string) $this->getResource()->getFieldMapping($field)->id_field;
             if (!$idField) {
                 throw new Exception("Field definition for {$field} is missing 'id_field' definition.");
             }
             foreach ($this->getItems() as $item) {
                 if ($refSet = $item->getData($field)) {
                     foreach ($refSet as $ref) {
                         if (!empty($ref[$idField])) {
                             $ids[] = $ref[$idField];
                         }
                     }
                 }
             }
         default:
             throw new Exception("Cannot get referenced collection for field '{$field}'.");
     }
     // array_unique is slow, but required for compatibility with MongoId and possibly other id data types
     $ids = array_unique($ids);
     // Instantiate a collection filtered to the referenced objects using $in
     $collection->addFieldToFilter('_id', '$in', array_values($ids));
     return $this;
 }
Ejemplo n.º 3
0
 /**
  * @param Cm_Mongo_Model_Resource_Collection_Abstract $collection
  * @param array $filters
  */
 protected function _addFilters(Cm_Mongo_Model_Resource_Collection_Abstract $collection, array $filters)
 {
     foreach ($filters as $filter) {
         $field = $filter['field'];
         $filterType = isset($filter['type']) ? $filter['type'] : self::FILTER_TYPE_STRING;
         switch ($filterType) {
             case self::FILTER_TYPE_BOOLEAN:
                 $value = (bool) $filter['value'];
                 break;
             case self::FILTER_TYPE_INTEGER:
                 $value = intval($filter['value']);
                 break;
             case self::FILTER_TYPE_ARRAY:
                 $value = explode(',', $filter['value']);
                 break;
             case self::FILTER_TYPE_STRING:
             default:
                 $value = strval($filter['value']);
                 break;
         }
         $condition = isset($filter['condition']) ? $filter['condition'] : 'eq';
         // Add filter to collection
         $collection->addFieldToFilter($field, $condition, $value);
     }
 }