/** * @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; }
/** * @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; } }
/** * @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; } } }