From a83eda1c00f2255ffcf1dc8e6eb246e7a6490453 Mon Sep 17 00:00:00 2001 From: naoki hirata Date: Fri, 31 Jan 2014 08:45:53 +0900 Subject: [PATCH] =?utf8?q?=E3=82=B7=E3=82=B9=E3=83=86=E3=83=A0=E5=88=9D?= =?utf8?q?=E6=9C=9F=E5=8C=96=E3=82=A6=E3=82=A3=E3=82=B6=E3=83=BC=E3=83=89?= =?utf8?q?=E3=81=AB=E3=80=8C=E3=82=B3=E3=83=B3=E3=83=86=E3=83=B3=E3=83=84?= =?utf8?q?=E3=80=8D=E3=83=9A=E3=83=BC=E3=82=B8=E8=BF=BD=E5=8A=A0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- include/manager/envManager.php | 11 +- include/manager/pageManager.php | 12 + .../admin_mainInitwizardBaseWidgetContainer.php | 8 +- ...n_mainInitwizard_accesspointWidgetContainer.php | 3 - ...admin_mainInitwizard_contentWidgetContainer.php | 260 +++++++++++++++++++++ .../container/admin_mainPagedefWidgetContainer.php | 2 +- widgets/admin_main/include/db/admin_mainDb.php | 71 +++--- .../template/initwizard_accesspoint.tmpl.html | 2 +- .../include/template/initwizard_content.tmpl.html | 58 +++++ .../include/template/initwizard_page2.tmpl.html | 8 +- 10 files changed, 388 insertions(+), 47 deletions(-) create mode 100644 widgets/admin_main/include/container/admin_mainInitwizard_contentWidgetContainer.php create mode 100644 widgets/admin_main/include/template/initwizard_content.tmpl.html diff --git a/include/manager/envManager.php b/include/manager/envManager.php index b51b3cd4..696594e0 100644 --- a/include/manager/envManager.php +++ b/include/manager/envManager.php @@ -8,7 +8,7 @@ * * @package Magic3 Framework * @author 平田直毅(Naoki Hirata) - * @copyright Copyright 2006-2013 Magic3 Project. + * @copyright Copyright 2006-2014 Magic3 Project. * @license http://www.gnu.org/copyleft/gpl.html GPL License * @version SVN: $Id$ * @link http://www.magic3.org @@ -1843,6 +1843,15 @@ class EnvManager extends Core return self::DEFAULT_ADMIN_PAGE_ID; } /** + * 一般画面のデフォルトのページID取得 + * + * @return array ページID(0=PC,1=携帯,2=スマートフォン) + */ + public function getAllDefaultPageId() + { + return array(self::DEFAULT_PAGE_ID, self::DEFAULT_MOBILE_PAGE_ID, self::DEFAULT_SMARTPHONE_PAGE_ID); + } + /** * 現在のページID */ public function setCurrentPageId($id) diff --git a/include/manager/pageManager.php b/include/manager/pageManager.php index 3c64cc8c..24683aa4 100644 --- a/include/manager/pageManager.php +++ b/include/manager/pageManager.php @@ -4617,6 +4617,18 @@ class PageManager extends Core return $subId; } /** + * コンテンツタイプとページIDからページサブID取得 + * + * @param string $contentType コンテンツタイプ + * @param string $pageId ページID + * @return string ページサブID + */ + function getPageSubIdByContentType($contentType, $pageId) + { + $subId = $this->db->getSubPageIdWithContent($contentType, $pageId);// ページサブIDを取得 + return $subId; + } + /** * 指定のウィジェットがページ上にあるかを取得 * * @param string $pageId ページID diff --git a/widgets/admin_main/include/container/admin_mainInitwizardBaseWidgetContainer.php b/widgets/admin_main/include/container/admin_mainInitwizardBaseWidgetContainer.php index 51c0bce8..2714b81a 100644 --- a/widgets/admin_main/include/container/admin_mainInitwizardBaseWidgetContainer.php +++ b/widgets/admin_main/include/container/admin_mainInitwizardBaseWidgetContainer.php @@ -8,7 +8,7 @@ * * @package Magic3 Framework * @author 平田直毅(Naoki Hirata) - * @copyright Copyright 2006-2013 Magic3 Project. + * @copyright Copyright 2006-2014 Magic3 Project. * @license http://www.gnu.org/copyleft/gpl.html GPL License * @version SVN: $Id$ * @link http://www.magic3.org @@ -28,6 +28,7 @@ class admin_mainInitwizardBaseWidgetContainer extends admin_mainBaseWidgetContai const TASK_ADMIN = 'initwizard_admin'; // システム管理者 const TASK_ACCESS_POINT = 'initwizard_accesspoint'; // アクセスポイント const TASK_MENU = 'initwizard_menu'; // メニュー + const TASK_CONTENT = 'initwizard_content'; // コンテンツ const TASK_PAGE1 = 'initwizard_page1'; // ページ1 const TASK_PAGE2 = 'initwizard_page2'; // ページ2 const TASK_END = 'initwizard_end'; // 処理終了 @@ -35,6 +36,7 @@ class admin_mainInitwizardBaseWidgetContainer extends admin_mainBaseWidgetContai const TASK_TITLE_ADMIN = '管理者'; // 管理者 const TASK_TITLE_ACCESS_POINT = 'アクセスポイント'; const TASK_TITLE_MENU = 'メニュー'; + const TASK_TITLE_CONTENT = 'コンテンツ'; const TASK_TITLE_PAGE1 = 'ページ1'; const TASK_TITLE_PAGE2 = 'ページ2'; const TASK_TITLE_END = '完了'; // 完了 @@ -50,9 +52,9 @@ class admin_mainInitwizardBaseWidgetContainer extends admin_mainBaseWidgetContai $this->_mainDb = new admin_mainDb(); $this->_taskArray = array(self::TASK_SITE, self::TASK_ADMIN, self::TASK_ACCESS_POINT, self::TASK_MENU, - self::TASK_PAGE1, self::TASK_PAGE2, self::TASK_END); // 管理下のタスク + self::TASK_CONTENT, self::TASK_PAGE1, self::TASK_PAGE2, self::TASK_END); // 管理下のタスク $this->_taskTitleArray = array(self::TASK_TITLE_SITE, self::TASK_TITLE_ADMIN, self::TASK_TITLE_ACCESS_POINT, self::TASK_TITLE_MENU, - self::TASK_TITLE_PAGE1, self::TASK_TITLE_PAGE2, self::TASK_TITLE_END); + self::TASK_TITLE_CONTENT, self::TASK_TITLE_PAGE1, self::TASK_TITLE_PAGE2, self::TASK_TITLE_END); } /** * テンプレート前処理 diff --git a/widgets/admin_main/include/container/admin_mainInitwizard_accesspointWidgetContainer.php b/widgets/admin_main/include/container/admin_mainInitwizard_accesspointWidgetContainer.php index a0addeda..0d919731 100644 --- a/widgets/admin_main/include/container/admin_mainInitwizard_accesspointWidgetContainer.php +++ b/widgets/admin_main/include/container/admin_mainInitwizard_accesspointWidgetContainer.php @@ -18,9 +18,6 @@ require_once($gEnvManager->getCurrentWidgetContainerPath() . '/admin_mainInitwiz class admin_mainInitwizard_accesspointWidgetContainer extends admin_mainInitwizardBaseWidgetContainer { const MENU_ID = 'admin_menu'; // メニュー変換対象メニューバーID - const CF_SITE_PC_IN_PUBLIC = 'site_pc_in_public'; // PC用サイトの公開状況 - const CF_SITE_MOBILE_IN_PUBLIC = 'site_mobile_in_public'; // 携帯用サイトの公開状況 - const CF_SITE_SMARTPHONE_IN_PUBLIC = 'site_smartphone_in_public'; // スマートフォン用サイトの公開状況 /** * コンストラクタ diff --git a/widgets/admin_main/include/container/admin_mainInitwizard_contentWidgetContainer.php b/widgets/admin_main/include/container/admin_mainInitwizard_contentWidgetContainer.php new file mode 100644 index 00000000..189e3451 --- /dev/null +++ b/widgets/admin_main/include/container/admin_mainInitwizard_contentWidgetContainer.php @@ -0,0 +1,260 @@ + + * @copyright Copyright 2006-2014 Magic3 Project. + * @license http://www.gnu.org/copyleft/gpl.html GPL License + * @version SVN: $Id$ + * @link http://www.magic3.org + */ +require_once($gEnvManager->getCurrentWidgetContainerPath() . '/admin_mainInitwizardBaseWidgetContainer.php'); + +class admin_mainInitwizard_contentWidgetContainer extends admin_mainInitwizardBaseWidgetContainer +{ + private $idArray = array(); // 表示するコンテンツ + private $pageIdArray; // アクセスポイント + private $mainContentType; // 主要コンテンツタイプ + private $selectedContentType = array(); // 選択中のコンテンツタイプ + + /** + * コンストラクタ + */ + function __construct() + { + // 親クラスを呼び出す + parent::__construct(); + + $this->mainContentType = $this->gPage->getMainContentType(); // 主要コンテンツタイプ + $this->pageIdArray = $this->gEnv->getAllDefaultPageId(); + } + /** + * テンプレートファイルを設定 + * + * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 + * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 + * + * @param RequestManager $request HTTPリクエスト処理クラス + * @param object $param 任意使用パラメータ。そのまま_assign()に渡る + * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 + */ + function _setTemplate($request, &$param) + { + return 'initwizard_content.tmpl.html'; + } + /** + * テンプレートにデータ埋め込む + * + * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 + * + * @param RequestManager $request HTTPリクエスト処理クラス + * @param object $param 任意使用パラメータ。_setTemplate()と共有。 + * @param なし + */ + function _assign($request, &$param) + { + // デフォルト値取得 + $this->langId = $this->gEnv->getDefaultLanguage(); + + $act = $request->trimValueOf('act'); + + $reloadData = false; // データの再ロード + if ($act == 'update'){ // 設定更新のとき + $listedItem = explode(',', $request->trimValueOf('idlist')); + + // エラーなしの場合は、データを更新 + if ($this->getMsgCount() == 0){ + // ウィジェットの配置情報を取得 + $oldContentType = $this->getSelectedContentType($widgetInfoRows); + + for ($i = 0; $i < count($listedItem); $i++){ + // 項目がチェックされているかを取得 + $itemName = 'item' . $i . '_selected'; + $itemValue = ($request->trimValueOf($itemName) == 'on') ? 1 : 0; + $contentType = $listedItem[$i]; + + // コンテンツの表示可否によってウィジェットを配置 + if ($itemValue){ + // 表示に変更された場合のみウィジェットを配置 + if (!in_array($contentType, $oldContentType)){ + // アクセスポイントごとの処理 + for ($j = 0; $j < count($this->pageIdArray); $j++){ + // アクセスポイントが有効の場合のみ処理を行う + $isActive = $this->isActiveAccessPoint($j); + if (!$isActive) continue; + + $pageId = $this->pageIdArray[$j]; + + // コンテンツ属性からページサブIDを取得 + $pageSubId = $this->gPage->getPageSubIdByContentType($contentType, $pageId); + + // コンテンツに対するメインウィジェットを取得 + $ret = $this->_mainDb->getWidgetListByDeviceType($contentType, $j/*デバイスタイプ*/, $rows); + if ($ret){ + $widgetId = $rows[0]['wd_id']; + + // ウィジェットがなければウィジェットを配置 + $this->_db->addWidget($pageId, $pageSubId, 'main', $widgetId, 0/*インデックス*/); + } + + // ページの使用状況を更新 + $this->updatePageAvailable($pageSubId, true); // メニューから選択可能 + } + } + } else { + // 非選択のコンテンツタイプのウィジェットはページから削除 + if (in_array($contentType, $oldContentType)){ + for ($j = 0; $j < count($widgetInfoRows); $j++){ + // 指定のコンテンツタイプに対応するウィジェットを取得 + $widgetId = $widgetInfoRows[$j]['wd_id']; + if ($contentType == $widgetInfoRows[$j]['wd_type']){ + $ret = $this->_mainDb->delPageDefByWidgetId($widgetId); + + // アクセスポイントごとの処理 + for ($k = 0; $k < count($this->pageIdArray); $k++){ + $pageId = $this->pageIdArray[$k]; + + // コンテンツ属性からページサブIDを取得 + $pageSubId = $this->gPage->getPageSubIdByContentType($contentType, $pageId); + + // ページの使用状況を更新 + $this->updatePageAvailable($pageSubId, false); // メニューから選択不可 + } + } + } + } + } + } + if (true){ + // 次の画面へ遷移 + $this->_redirectNextTask(); + } else { + $this->setMsg(self::MSG_APP_ERR, 'データ更新に失敗しました'); // データ更新に失敗しました + } + } + } else { + $reloadData = true; + } + + if ($reloadData){ // データ再取得のとき + } + + // 使用しているコンテンツタイプを取得 + $this->selectedContentType = $this->getSelectedContentType($tmp); + + // コンテンツタイプ一覧を作成 + $this->createContentTypeList(); + $this->tmpl->addVar("_widget", "id_list", implode($this->idArray, ','));// 表示項目のIDを設定 + } + /** + * コンテンツタイプ一覧作成 + * + * @return なし + */ + function createContentTypeList() + { + for ($i = 0; $i < count($this->mainContentType); $i++){ + $value = $this->mainContentType[$i]['value']; + $name = $this->mainContentType[$i]['name']; + + $checked = ''; + if (in_array($value, $this->selectedContentType)) $checked = 'checked'; + $row = array( + 'index' => $i, + 'name' => $name, // コンテンツ名 + 'checked' => $checked + ); + $this->tmpl->addVars('content_type_list', $row); + $this->tmpl->parseTemplate('content_type_list', 'a'); + + // 表示中項目のページサブIDを保存 + $this->idArray[] = $value; + } + } + /** + * 使用中のコンテンツタイプを取得 + * + * @param array $widgetInfoRows 配置されているウィジェットの情報 + * @return array 使用されているコンテンツタイプ + */ + function getSelectedContentType(&$widgetInfoRows) + { + $selectedContentType = array(); + $menuItems = array(array(), array(), array()); + + $contentType = array( M3_VIEW_TYPE_CONTENT, // 汎用コンテンツ + M3_VIEW_TYPE_PRODUCT, // 製品 + M3_VIEW_TYPE_BBS, // BBS + M3_VIEW_TYPE_BLOG, // ブログ + M3_VIEW_TYPE_WIKI, // Wiki + M3_VIEW_TYPE_USER, // ユーザ作成コンテンツ + M3_VIEW_TYPE_EVENT, // イベント + M3_VIEW_TYPE_PHOTO); // フォトギャラリー + $ret = $this->_mainDb->getEditWidgetOnPage($this->langId, $this->pageIdArray, $contentType, $rows); + if ($ret){ + $widgetInfoRows = $rows; + + $usedContentType = array(); + $rowCount = count($rows); + for ($i = 0; $i < $rowCount; $i++){ + $usedContentType[] = $rows[$i]['wd_type']; + } + + for ($i = 0; $i < count($contentType); $i++){ + $type = $contentType[$i]; + if (in_array($type, $usedContentType)) $selectedContentType[] = $type; + } + } + return $selectedContentType; + } + /** + * ページの使用状況を更新 + * + * @param string $pageSubId ページサブID + * @param bool $available メニューから利用可能かどうか + * @return bool true=成功、false=失敗 + */ + function updatePageAvailable($pageSubId, $available) + { + // 使用ページにする + $ret = $this->_mainDb->getPageIdRecord(1/*ページサブIDを指定*/, $pageSubId, $row); + if ($ret){ + $ret = $this->_mainDb->updatePageId(1/*ページサブIDを指定*/, $pageSubId, $row['pg_name'], $row['pg_description'], $row['pg_priority'], $row['pg_active'], $available); + } + return $ret; + } + /** + * アクセスポイントが有効かどうか + * + * @param int $deviceType デバイスタイプ(0=PC,1=携帯,2=スマートフォン) + * @return bool true=有効、false=無効 + */ + function isActiveAccessPoint($deviceType) + { + // ページID作成 + switch ($deviceType){ + case 0: // PC + $pageId = 'index'; + break; + case 1: // 携帯 + $pageId = M3_DIR_NAME_MOBILE . '_index'; + break; + case 2: // スマートフォン + $pageId = M3_DIR_NAME_SMARTPHONE . '_index'; + break; + } + + $isActive = false; + $ret = $this->_mainDb->getPageIdRecord(0/*アクセスポイント*/, $pageId, $row); + if ($ret){ + $isActive = $row['pg_active']; + } + return $isActive; + } +} +?> diff --git a/widgets/admin_main/include/container/admin_mainPagedefWidgetContainer.php b/widgets/admin_main/include/container/admin_mainPagedefWidgetContainer.php index 311d43ab..84374f41 100644 --- a/widgets/admin_main/include/container/admin_mainPagedefWidgetContainer.php +++ b/widgets/admin_main/include/container/admin_mainPagedefWidgetContainer.php @@ -339,7 +339,7 @@ class admin_mainPagedefWidgetContainer extends BaseAdminWidgetContainer // キャッシュデータをクリア $this->gCache->clearAllCache(); } else if ($act == 'deleteline'){ // 削除のとき - $ret = $this->db->delPageDef($this->serialNo, $userId); + $ret = $this->db->delPageDef($this->serialNo); if ($ret){ // データ削除成功のとき $this->setMsg(self::MSG_GUIDANCE, $this->_('Data deleted.')); // データを削除しました } else { diff --git a/widgets/admin_main/include/db/admin_mainDb.php b/widgets/admin_main/include/db/admin_mainDb.php index b5471874..4baf770c 100644 --- a/widgets/admin_main/include/db/admin_mainDb.php +++ b/widgets/admin_main/include/db/admin_mainDb.php @@ -8,7 +8,7 @@ * * @package Magic3 Framework * @author 平田直毅(Naoki Hirata) - * @copyright Copyright 2006-2013 Magic3 Project. + * @copyright Copyright 2006-2014 Magic3 Project. * @license http://www.gnu.org/copyleft/gpl.html GPL License * @version SVN: $Id$ * @link http://www.magic3.org @@ -205,35 +205,23 @@ class admin_mainDb extends BaseDb $this->selectLoop($queryStr, array(), $callback); } /** - * ウィジェットリスト(メニューから選択可能なもの)取得 + * ウィジェットタイプとデバイスタイプからウィジェットリストを取得 * - * @param function $callback コールバック関数 - * @return なし + * @param string $widgetType ウィジェットタイプ + * @param int $deviceType デバイスタイプ + * @param array $rows レコード + * @return bool 1行以上取得 = true, 取得なし= false */ - /*function getAvailableWidgetList($callback) + function getWidgetListByDeviceType($widgetType, $deviceType, &$rows) { - $queryStr = 'select * from _widgets '; - $queryStr .= 'where wd_deleted = false ';// 削除されていない - $queryStr .= 'and wd_available = true '; // メニューから選択可能なもの - $queryStr .= 'and wd_mobile = false '; // 携帯用ウィジェット以外 - $queryStr .= 'order by wd_id'; - $this->selectLoop($queryStr, array(), $callback); - }*/ - /** - * 携帯用のウィジェットリスト(メニューから選択可能なもの)取得 - * - * @param function $callback コールバック関数 - * @return なし - */ - /*function getAvailableMobileWidgetList($callback) - { - $queryStr = 'select * from _widgets '; - $queryStr .= 'where wd_deleted = false ';// 削除されていない - $queryStr .= 'and wd_available = true '; // メニューから選択可能なもの - $queryStr .= 'and wd_mobile = true '; // 携帯用ウィジェット - $queryStr .= 'order by wd_id'; - $this->selectLoop($queryStr, array(), $callback); - }*/ + $queryStr = 'SELECT * FROM _widgets '; + $queryStr .= 'WHERE wd_deleted = false '; // 削除されていない + $queryStr .= 'AND wd_type = ? '; // ウィジェットタイプ + $queryStr .= 'AND wd_device_type = ? '; // デバイスタイプ + $queryStr .= 'ORDER BY wd_priority'; + $retValue = $this->selectRecords($queryStr, array($widgetType, $deviceType), $rows); + return $retValue; + } /** * ウィジェットIDリスト取得 * @@ -1268,15 +1256,10 @@ class admin_mainDb extends BaseDb * ページ定義項目の削除 * * @param int $serialNo シリアルNo - * @param int $userId ユーザID(データ更新者) * @return true=成功、false=失敗 */ - function delPageDef($serialNo, $userId) + function delPageDef($serialNo) { - // 更新ユーザ、日時設定 - $this->now = date("Y/m/d H:i:s"); // 現在日時 - $this->userId = $userId; - // トランザクション開始 $this->startTransaction(); @@ -1287,7 +1270,27 @@ class admin_mainDb extends BaseDb $ret = $this->endTransaction(); return $ret; } - + /** + * ウィジェットIDでページ定義項目の削除 + * + * @param string $widgetId ウィジェットID + * @param int $setId 定義セットID + * @return true=成功、false=失敗 + */ + function delPageDefByWidgetId($widgetId, $setId = 0) + { + // トランザクション開始 + $this->startTransaction(); + + $queryStr = 'DELETE FROM _page_def '; + $queryStr .= 'WHERE pd_widget_id = ? '; + $queryStr .= 'AND pd_set_id = ? '; + $this->execStatement($queryStr, array($widgetId, $setId)); + + // トランザクション確定 + $ret = $this->endTransaction(); + return $ret; + } /** * ページ定義項目をすべて削除 * diff --git a/widgets/admin_main/include/template/initwizard_accesspoint.tmpl.html b/widgets/admin_main/include/template/initwizard_accesspoint.tmpl.html index a6971fbe..7b10ce83 100644 --- a/widgets/admin_main/include/template/initwizard_accesspoint.tmpl.html +++ b/widgets/admin_main/include/template/initwizard_accesspoint.tmpl.html @@ -47,7 +47,7 @@ $(function(){
-
+
diff --git a/widgets/admin_main/include/template/initwizard_content.tmpl.html b/widgets/admin_main/include/template/initwizard_content.tmpl.html new file mode 100644 index 00000000..a54e0ffe --- /dev/null +++ b/widgets/admin_main/include/template/initwizard_content.tmpl.html @@ -0,0 +1,58 @@ +/** + * 表示データ作成用テンプレート(patTemplate) + * + * LICENSE: This source file is licensed under the terms of the GNU General Public License. + * + * @package Magic3 Framework + * @author 平田直毅(Naoki Hirata) + * @copyright Copyright 2006-2014 Magic3 Project. + * @license http://www.gnu.org/copyleft/gpl.html GPL License + * @version SVN: $Id$ + * @link http://www.magic3.org + */ + + +
+{MENU_ITEMS} + + +
+ + + +
+ +
+ +
+
+
+
+
+
+
\ No newline at end of file diff --git a/widgets/admin_main/include/template/initwizard_page2.tmpl.html b/widgets/admin_main/include/template/initwizard_page2.tmpl.html index 5810c927..ca58a869 100644 --- a/widgets/admin_main/include/template/initwizard_page2.tmpl.html +++ b/widgets/admin_main/include/template/initwizard_page2.tmpl.html @@ -5,7 +5,7 @@ * * @package Magic3 Framework * @author 平田直毅(Naoki Hirata) - * @copyright Copyright 2006-2013 Magic3 Project. + * @copyright Copyright 2006-2014 Magic3 Project. * @license http://www.gnu.org/copyleft/gpl.html GPL License * @version SVN: $Id$ * @link http://www.magic3.org @@ -48,7 +48,7 @@ $(function(){
-
+
@@ -68,7 +68,7 @@ $(function(){
-
+