From 41969b0c9e8168a55debebc684bc09bde225592d Mon Sep 17 00:00:00 2001 From: s-nakajima Date: Fri, 20 Jan 2017 12:48:59 +0900 Subject: [PATCH] =?UTF-8?q?=E3=82=A2=E3=83=83=E3=83=97=E3=82=B0=E3=83=AC?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=81=97=E3=81=9F=E9=9A=9B=E3=81=AB=E3=83=97?= =?UTF-8?q?=E3=83=A9=E3=82=A4=E3=83=99=E3=83=BC=E3=83=88=E3=81=8C=E8=8B=B1?= =?UTF-8?q?=E8=AA=9E=E3=81=8C=E5=87=BA=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Model/Behavior/SaveM17nBehavior.php | 77 +++++++++++++++++++++++++++-- 1 file changed, 74 insertions(+), 3 deletions(-) diff --git a/Model/Behavior/SaveM17nBehavior.php b/Model/Behavior/SaveM17nBehavior.php index ef98542..22778f3 100644 --- a/Model/Behavior/SaveM17nBehavior.php +++ b/Model/Behavior/SaveM17nBehavior.php @@ -120,6 +120,9 @@ protected function _copyOrignalDataByPlugin(Model $model, $plugin, $languageId) if (! $this->_executeOriginalCopy($TargetModel, $languageId, $plugin['Plugin']['type'])) { return false; } + if (! $this->_updateOriginalCopy($TargetModel)) { + return false; + } } return true; @@ -171,7 +174,7 @@ protected function _executeOriginalCopy(Model $TargetModel, $langId, $pluguinTyp $sql .= $this->_getSqlWhere($TargetModel, $pluguinType); CakeLog::info( - '[original copy] SystemPlugin ' . + '[original copy ' . $TargetModel->plugin . '] ' . $TargetModel->name . ' execute' ); @@ -179,13 +182,49 @@ protected function _executeOriginalCopy(Model $TargetModel, $langId, $pluguinTyp $TargetModel->query($sql); CakeLog::info( - '[original copy plguin_type:' . $pluguinType . ']' . + '[original copy ' . $TargetModel->plugin . '] ' . $TargetModel->name . ' success rows=' . $TargetModel->getAffectedRows() ); return true; } +/** + * 他言語データ更新処理 + * + * @param Model $TargetModel 実行するModel + * @return bool + * @throws InternalErrorException + */ + protected function _updateOriginalCopy(Model $TargetModel) { + if ($TargetModel->name === 'PagesLanguage') { + CakeLog::info( + '[original copy ' . $TargetModel->plugin . '] ' . + $TargetModel->name . ' update' + ); + $update = array( + 'is_translation' => true + ); + $conditions = array( + 'OR' => array( + 'page_id' => $this->_getPageIdTop($TargetModel), + 'name !=' => '' + ), + 'is_translation' => false + ); + if (! $TargetModel->updateAll($update, $conditions)) { + return false; + } + + CakeLog::info( + '[original copy ' . $TargetModel->plugin . '] ' . + $TargetModel->name . ' success' + ); + } + + return true; + } + /** * フィールドキーを取得する * @@ -193,6 +232,10 @@ protected function _executeOriginalCopy(Model $TargetModel, $langId, $pluguinTyp * @return string|bool */ protected function _getFieldKey(Model $TargetModel) { + if ($TargetModel->name === 'PagesLanguage') { + return $TargetModel->getM17nSettings('keyField'); + } + if (! $TargetModel->hasField('language_id') || ! $TargetModel->hasField('is_origin') || ! $TargetModel->hasField('is_translation') || @@ -245,7 +288,12 @@ protected function _getSqlWhere(Model $TargetModel, $pluguinType) { ' AND Origin.language_id IN (' . implode(', ', $this->_enableLangs) . ')' . ' AND Target.id IS NULL'; - if ($TargetModel->hasField('is_lastest')) { + if ($TargetModel->name === 'PagesLanguage') { + $pageIds = $this->_getPageIdTop($TargetModel); + $sql .= + ' AND (Origin.page_id IN (' . implode(', ', $pageIds) . ')' . + ' OR Origin.name = \'\')'; + } elseif ($TargetModel->hasField('is_lastest')) { $sql .= ' AND Origin.is_translation = 1' . ' AND Origin.is_lastest = 1'; @@ -254,9 +302,28 @@ protected function _getSqlWhere(Model $TargetModel, $pluguinType) { $sql .= ' AND Origin.is_translation = 1'; } + return $sql; } +/** + * page_id_topを取得する + * + * @param Model $TargetModel 実行するModel + * @return array + */ + protected function _getPageIdTop(Model $TargetModel) { + $TargetModel->loadModels(['Room' => 'Rooms.Room']); + $pageIds = $TargetModel->Room->find('list', array( + 'recursive' => -1, + 'fields' => array('Room.page_id_top', 'Room.page_id_top'), + 'conditions' => array( + 'Room.page_id_top NOT' => null, + ), + )); + return $pageIds; + } + /** * オリジナルのコピーをするかどうか * @@ -267,6 +334,10 @@ protected function _isOriginalCopy(Model $TargetModel) { if (! in_array($TargetModel->tablePrefix . $TargetModel->useTable, $this->_tables)) { return false; } + + if ($TargetModel->name === 'PagesLanguage') { + return true; + } if (! $TargetModel->hasField('language_id') || ! $TargetModel->hasField('is_origin') || ! $TargetModel->hasField('is_translation') ||