Example #1
0
 /**
  * @param Mana_Db_Model_Formula_Context $context
  * @param string $entity
  * @return Mana_Db_Model_Formula_Entity | bool
  */
 public function selectEntity($context, $entity)
 {
     if ($aggregateContext = parent::selectEntity($context, $entity)) {
         return $aggregateContext;
     }
     /* @var $dbConfig Mana_Db_Helper_Config */
     $dbConfig = Mage::helper('mana_db/config');
     /* @var $formulaHelper Mana_Db_Helper_Formula */
     $formulaHelper = Mage::helper('mana_db/formula');
     $scopeXml = $dbConfig->getScopeXml($context->getEntity());
     if ($result = $this->_selectEntityBasedOnXml($context, $scopeXml->formula->base->from, $entity, 'foreign')) {
         $this->setForeignJoin($context, $result);
         return $result;
     }
     if ($result = $this->_selectEntityBasedOnXml($context, $scopeXml->formula->base->join, $entity, 'foreign')) {
         $this->setForeignJoin($context, $result);
         return $result;
     }
     if ($result = $this->_selectEntityBasedOnXml($context, $scopeXml->formula->aggregate, $entity, 'aggregate')) {
         return $result;
     }
     if ($result = $this->_selectEntityBasedOnXml($context, $scopeXml->formula->frontend, $entity, 'frontend')) {
         return $result;
     }
     $field = $entity . '_id_0';
     if (isset($scopeXml->fields->{$field})) {
         $fieldPrefix = $entity . '_id_';
         /* @var $result Mana_Db_Model_Formula_Entity */
         $result = Mage::getModel('mana_db/formula_entity');
         $entityName = (string) $scopeXml->fields->{$field}->foreign->entity;
         $fields = array();
         $result->setHelper('aggregate_field')->setEntity($entityName)->setProcessor($this->getProcessor($entityName));
         /* @var $core Mana_Core_Helper_Data */
         $core = Mage::helper('mana_core');
         $compositeAlias = array();
         /* @var $joinClosure Mana_Db_Model_Formula_Closure_AggregateFieldJoin */
         $joinClosure = Mage::getModel('mana_db/formula_closure_aggregateFieldJoin', compact('context', 'result'));
         foreach ($scopeXml->fields->children() as $fieldName => $fieldXml) {
             if ($core->startsWith($fieldName, $fieldPrefix)) {
                 $index = (int) substr($fieldName, strlen($fieldPrefix));
                 $context->getAlias()->child($formulaHelper->createAlias($entity . $index))->each($joinClosure->setTargetIndex($index)->setEntityName($entityName)->setFieldXml($fieldXml));
             }
         }
         $compositeAlias = $joinClosure->getCompositeAlias();
         $fields = $joinClosure->getFields();
         ksort($compositeAlias);
         ksort($fields);
         return $result->setAlias($formulaHelper->createAlias($compositeAlias))->setAggregateFields($fields);
     }
     return false;
 }
Example #2
0
 /**
  * @param Mana_Db_Model_Formula_Context $context
  * @param string $field
  * @return Mana_Db_Model_Formula_Expr | bool
  */
 public function selectField($context, $field)
 {
     if ($result = parent::selectField($context, $field)) {
         return $result;
     }
     $eavEntityType = $this->getEavEntityType($context->getEntity());
     /* @var $attribute Mage_Eav_Model_Entity_Attribute */
     $attribute = $eavEntityType->getAttributeCollection()->getItemByColumnValue('attribute_code', $field);
     if ($attribute) {
         return $context->getHelper()->expr()->setFieldExpr($context->getAlias()->fieldExpr($context, $field))->setFieldName($field)->setType($attribute->getBackendType());
     } else {
         return false;
     }
 }
Example #3
0
 /**
  * @param Mana_Db_Model_Formula_Context $context
  * @param string $field
  * @return Mana_Db_Model_Formula_Expr | bool
  */
 public function selectField($context, $field)
 {
     if ($result = parent::selectField($context, $field)) {
         return $result;
     }
     /* @var $resource Mana_Db_Resource_Formula */
     $resource = Mage::getResourceSingleton('mana_db/formula');
     $fields = $resource->getTableFields($context->getEntity());
     if (isset($fields[$field])) {
         return $context->getHelper()->expr()->setFieldExpr($context->getAlias()->fieldExpr($context, $field))->setFieldName($field)->setType($fields[$field]['DATA_TYPE']);
     } else {
         /* @var $dbConfig Mana_Db_Helper_Config */
         $dbConfig = Mage::helper('mana_db/config');
         /* @var $formulaHelper Mana_Db_Helper_Formula */
         $formulaHelper = Mage::helper('mana_db/formula');
         /* @var $fieldsXml Varien_Simplexml_Element */
         /** @noinspection PhpUndefinedFieldInspection */
         $fieldsXml = $dbConfig->getTableXml($context->getEntity())->fields;
         if (isset($fieldsXml->{$field})) {
             $alias = $context->getAlias();
             $formula = $fieldsXml->{$field}->formula;
             $context->resetLocalAliases();
             if (isset($formula->join)) {
                 /* @var $joinContainerXml Varien_Simplexml_Element */
                 $joinContainerXml = $formula->join;
                 foreach ($joinContainerXml->children() as $joinAlias => $definition) {
                     /* @var $joinClosure Mana_Db_Model_Formula_Closure_Join */
                     $joinClosure = Mage::getModel('mana_db/formula_closure_join', compact('context', 'definition'));
                     $alias->child($formulaHelper->createAlias($joinAlias))->each($joinClosure);
                 }
             }
             return $context->getHelper()->expr()->setFieldExpr($alias->expr($context, (string) $formula->expr))->setFieldName($field)->setType((string) $fieldsXml->{$field}->type);
         } else {
             return false;
         }
     }
 }