Exemple #1
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);
 }