/** * @param Mana_Db_Model_Formula_Context $context * @param Mana_Db_Model_Formula_Entity $entity */ public function select($context, $entity) { switch ($context->getMode()) { default: if (!$context->hasAlias($entity->getAlias()->asString(0))) { /* @var $resource Mana_Db_Resource_Formula */ $resource = Mage::getResourceSingleton('mana_db/formula'); /* @var $dbHelper Mana_Db_Helper_Data */ $dbHelper = Mage::helper('mana_db'); /* @var $joinClosure Mana_Db_Model_Formula_Closure_ForeignJoinEnd */ $joinClosure = Mage::getModel('mana_db/formula_closure_foreignJoinEnd', compact('context', 'entity')); $context->getAlias()->each($joinClosure); } $context->setEntity($entity->getEntity())->setProcessor($entity->getProcessor())->setAlias($entity->getAlias())->setEntityHelper($this); break; } }
/** * @param Mana_Db_Model_Formula_Context $context * @param Varien_Simplexml_Element $xml * @param string $entity * @param string $mode * @return Mana_Db_Model_Formula_Entity */ protected function _selectEntityBasedOnXml($context, $xml, $entity, $mode) { if (isset($xml->{$entity})) { /* @var $formulaHelper Mana_Db_Helper_Formula */ $formulaHelper = Mage::helper('mana_db/formula'); /* @var $entityXml Varien_Simplexml_Element */ /** @noinspection PhpUndefinedFieldInspection */ $entityXml = $xml->{$entity}; /* @var $result Mana_Db_Model_Formula_Entity */ $result = Mage::getModel('mana_db/formula_entity'); if ($entity == 'primary') { /* @var $dbConfig Mana_Db_Helper_Config */ $dbConfig = Mage::helper('mana_db/config'); $scopeXml = $dbConfig->getScopeXml($context->getEntity()); /** @noinspection PhpUndefinedFieldInspection */ $entityName = (string) $scopeXml->flattens; } else { /** @noinspection PhpUndefinedFieldInspection */ $entityName = (string) $entityXml->entity; } $data = $entityXml->asArray(); $alias = $context->getAlias()->child($formulaHelper->createAlias($entity)); return $result->setHelper($mode)->setAlias($alias)->setEntity($entityName)->setProcessor($this->getProcessor($entityName))->addData($data ? $data : array()); } else { return false; } }