Beispiel #1
0
 public function afterSave(\Model $model, $created, $options = array())
 {
     parent::afterSave($model, $created, $options);
     $class = get_class($model);
     if (isset($model->data['MultiLanguage'][$class])) {
         $data = array();
         foreach ($model->data['MultiLanguage'][$class] as $field => $value) {
             foreach ($value as $lang => $text) {
                 $data[$lang][$field] = $text;
             }
         }
         $dataExisted = Hash::combine($model->query('SELECT MultiLanguage.* FROM multilanguage_' . $model->useTable . ' MultiLanguage WHERE object_id = "' . Sanitize::escape($model->getID()) . '"'), '{n}.MultiLanguage.lang_code', '{n}.MultiLanguage.id');
         foreach ($data as $lang => $object) {
             if (isset($dataExisted[$lang])) {
                 $object['id'] = $dataExisted[$lang];
             }
             $object['object_id'] = $model->getID();
             $object['lang_code'] = $lang;
             $multiObj = new AppModel();
             $multiObj->useTable = 'multilanguage_' . $model->useTable;
             $multiObj->clear();
             $multiObj->save($object, array('validate' => false, 'callbacks' => false));
         }
     }
 }
Beispiel #2
0
 static function saveDataFromArray($object, $listData, $listKey)
 {
     if (count($listData) == 0) {
         return true;
     }
     $id = $object->getID();
     $msgError = '';
     $listLanguage = array_keys(Configure::read('MultiLanguage.fallback') + Configure::read('MultiLanguage.list'));
     $mapping = Configure::read('MultiLanguage.app_mapping_list');
     for ($ii = 1; $ii < count($listData[0]); $ii++) {
         $listData[0][$ii] = isset($mapping[strtolower($listData[0][$ii])]) ? $mapping[strtolower($listData[0][$ii])] : $listData[0][$ii];
     }
     $data = $listData[0];
     if (strtoupper($data[0]) != 'KEY' || count(array_intersect($listLanguage, $data)) != count($listLanguage)) {
         $msgError = __('The header of Excel file shoud be in format') . ': Key';
         foreach ($listLanguage as $lang) {
             $msgError .= ', ' . $lang;
         }
     } else {
         $listLanguage = $data;
         $numField = count($listLanguage);
         $dataMultiLang = array();
         for ($row = 1; $row < count($listData); $row++) {
             $data = $listData[$row];
             $num = count($data);
             if ($num != $numField || !in_array($data[0], $listKey)) {
                 $msgError .= __('Cannot import line %s', $row) . "<br />";
             } else {
                 for ($c = 1; $c < $num; $c++) {
                     $dataMultiLang[$listLanguage[$c]][$data[0]] = $data[$c];
                 }
             }
         }
     }
     $fallback = array_keys(Configure::read('MultiLanguage.fallback'));
     if (isset($dataMultiLang[$fallback[0]])) {
         $row = $dataMultiLang[$fallback[0]];
         $row['id'] = $id;
         $object->clear();
         $object->save($row, false);
         unset($dataMultiLang[$fallback[0]]);
     }
     $model = new AppModel();
     $model->useTable = 'multilanguage_' . $object->useTable;
     foreach ($dataMultiLang as $lang => $row) {
         $objMultiLang = $model->findByObjectIdAndLangCode($id, $lang);
         if (isset($objMultiLang['AppModel']['id'])) {
             $row['id'] = $objMultiLang['AppModel']['id'];
         }
         $row['lang_code'] = $lang;
         $row['object_id'] = $id;
         $model->clear();
         $model->save($row, false);
     }
     return $msgError;
 }