/**
  * Populate the subject model's referenceMap with
  * localized versions of the given model.
  * @param String|Garp_Model_Db $relatedModel
  * @return Void
  */
 public function populate($relatedModel, $ruleKey = null)
 {
     // Sanity check: does the model have a reference to the
     // given model in the first place?
     // This will throw an exception if not.
     $relatedModel = $relatedModel instanceof Garp_Model_Db ? get_class($relatedModel) : $relatedModel;
     $relatedModel = (substr($relatedModel, 0, 6) !== 'Model_' ? 'Model_' : '') . $relatedModel;
     $ref = $this->_model->getReference($relatedModel, $ruleKey);
     $locales = Garp_I18n::getLocales();
     foreach ($locales as $locale) {
         $factory = new Garp_I18n_ModelFactory($locale);
         $localizedModel = $factory->getModel($relatedModel);
         $localizedModelName = get_class($localizedModel);
         $cleanLocalizedName = $localizedModel->getNameWithoutNamespace();
         $this->_model->addReference($cleanLocalizedName, $ref[Zend_Db_Table_Abstract::COLUMNS], $localizedModelName, $ref[Zend_Db_Table_Abstract::REF_COLUMNS]);
     }
     return $this;
 }
Exemplo n.º 2
0
 /**
  * For multilingual models: combine the referenceData with fresh data
  * from its counterpart in the primary language.
  * @param Array $referenceData
  * @param Garp_Model_Db $model
  * @return Void
  */
 protected function _modifyReferenceDataForMultilingualModels(array &$referenceData, Garp_Model_Db $model)
 {
     // Try to fetch the baseFields from the localised model
     $i18nModelFactory = new Garp_I18n_ModelFactory($referenceData[Garp_Model_Behavior_Translatable::LANG_COLUMN]);
     $unilingualModel = $model->getUnilingualModel();
     $localizedModel = $i18nModelFactory->getModel($unilingualModel);
     $localizedModel->unregisterObserver('Translatable');
     $localizedModel->unregisterObserver('Draftable');
     $referenceMap = $model->getReference(get_class($unilingualModel));
     // Construct a query that fetches the base fields from the parent model
     $baseFields = $this->_config['baseField'];
     $baseFields = $this->_baseFieldConfigToColumns($baseFields);
     $select = $localizedModel->select()->from($localizedModel->getName(), $baseFields);
     foreach ($referenceMap['columns'] as $i => $col) {
         if (!isset($referenceMap['refColumns'][$i])) {
             throw new Exception('ReferenceMap is invalid: columns does not match up with refColumns.');
         }
         $refCol = $referenceMap['refColumns'][$i];
         // If the required foreign key is not in $referenceData, we won't be able to solve the problem
         if (!isset($referenceData[$col])) {
             return null;
         }
         $select->where("{$refCol} = ?", $referenceData[$col]);
     }
     $localizedRecord = $localizedModel->fetchRow($select)->toArray();
     $referenceData = array_merge($localizedRecord, $referenceData);
 }
Exemplo n.º 3
0
 protected function _getForeignKeyColumns(Garp_Model_Db $i18nModel, Garp_Model_Db $model)
 {
     $reference = $i18nModel->getReference(get_class($model));
     $foreignKeyColumns = $reference['columns'];
     return $foreignKeyColumns;
 }