/** * * @param Mana_Db_Model_Formula_Context $context * @param Mana_Db_Model_Formula_Entity $entity */ public function select($context, $entity) { switch ($context->getMode()) { default: $context->setMode($this->getName())->setEntityHelper($this); /* @var $resource Mana_Db_Resource_Formula */ $resource = Mage::getResourceSingleton('mana_db/formula'); /* @var $dbHelper Mana_Db_Helper_Data */ $dbHelper = Mage::helper('mana_db'); foreach ($entity->getAggregateFields() as $field) { if (!$context->hasAlias($field['alias'])) { $context->getSelect()->joinLeft(array($context->registerAlias($field['alias']) => $resource->getTable($dbHelper->getScopedName($field['entity']))), $context->resolveAliases($field['join']), null); } } $context->setEntity($entity->getEntity())->setProcessor($entity->getProcessor())->setAlias($entity->getAlias()); break; } }
/** * @param Mana_Db_Model_Formula_Context $context * @param string $expr * @return string | string[] */ public function expr($context, $expr) { return $context->resolveAliases($expr); }
/** * @param Mana_Db_Model_Formula_Context $context * @param string $expr * @return string | string[] */ public function expr($context, $expr) { $result = array(); foreach ($this->getAliases() as $index => $alias) { $result[$index] = $context->resolveAliases($expr, true, $index); } return $result; }
/** * @param Mana_Db_Model_Formula_Context $context * @param SimpleXMLElement $selectXml * @return Varien_Db_Select */ public function createSelect($context, $selectXml) { /* @var $dbHelper Mana_Db_Helper_Data */ $dbHelper = Mage::helper('mana_db'); /* @var $resource Mana_Db_Resource_Formula */ $resource = Mage::getResourceSingleton('mana_db/formula'); $select = $context->getSelect(); /* @var $fromXml SimpleXMLElement */ /** @noinspection PhpUndefinedFieldInspection */ $fromXml = $selectXml->from; foreach ($fromXml->children() as $alias => $definition) { $entity = $alias == 'primary' ? $context->getPrimaryEntity() : (string) $definition->entity; $select->from(array($context->registerAlias($alias) => $resource->getTable($dbHelper->getScopedName($entity))), null); } if (isset($selectXml->join)) { $joinXml = $selectXml->join; /* @var $joinXml SimpleXMLElement */ foreach ($joinXml->children() as $alias => $definition) { $method = isset($definition->type) ? 'join' . ucfirst($definition->type) : 'joinInner'; $entity = $alias == 'primary' ? $context->getPrimaryEntity() : (string) $definition->entity; $select->{$method}(array($context->registerAlias($alias) => $resource->getTable($dbHelper->getScopedName($entity))), $context->resolveAliases((string) $definition->on), null); } } if (isset($selectXml->order)) { $select->order($context->resolveAliases((string) $selectXml->order, false)); } if (isset($selectXml->where)) { $select->where($context->resolveAliases((string) $selectXml->where)); } if ($formula = $context->getOption('entity_filter_formula')) { /* @var $selector Mana_Db_Helper_Formula_Selector */ $selector = Mage::helper('mana_db/formula_selector'); $selector->filterFormula($context, $this->parse($formula), $context->getOption('entity_filter_id')); } return $select; }