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