OSDN Git Service

システム初期化ウィザードに「デフォルトページ設定」画面追加。
authornaoki hirata <naoki@magic3.org>
Wed, 1 Jan 2014 13:44:42 +0000 (22:44 +0900)
committernaoki hirata <naoki@magic3.org>
Wed, 1 Jan 2014 13:44:42 +0000 (22:44 +0900)
templates/_admin3/css/style.css
widgets/admin_main/include/container/admin_mainInitwizardBaseWidgetContainer.php
widgets/admin_main/include/container/admin_mainInitwizardWidgetContainer.php
widgets/admin_main/include/container/admin_mainInitwizard_page1WidgetContainer.php [moved from widgets/admin_main/include/container/admin_mainInitwizard_pageWidgetContainer.php with 75% similarity]
widgets/admin_main/include/container/admin_mainInitwizard_page2WidgetContainer.php [new file with mode: 0644]
widgets/admin_main/include/template/initwizard_page1.tmpl.html [moved from widgets/admin_main/include/template/initwizard_page.tmpl.html with 94% similarity]
widgets/admin_main/include/template/initwizard_page2.tmpl.html [new file with mode: 0644]

index 9fe5cb3..7d7b832 100644 (file)
@@ -17,7 +17,10 @@ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
 /*label {
        font-weight: bold;
 }*/
-
+img
+{
+       border:0;
+}
 legend, label
 {
        border: none;
index 069ea02..51c0bce 100644 (file)
@@ -28,13 +28,15 @@ class admin_mainInitwizardBaseWidgetContainer extends admin_mainBaseWidgetContai
        const TASK_ADMIN                = 'initwizard_admin';           // システム管理者
        const TASK_ACCESS_POINT = 'initwizard_accesspoint';             // アクセスポイント
        const TASK_MENU                 = 'initwizard_menu';            // メニュー
-       const TASK_PAGE                 = 'initwizard_page';            // ページ
+       const TASK_PAGE1                = 'initwizard_page1';           // ページ1
+       const TASK_PAGE2                = 'initwizard_page2';           // ページ2
        const TASK_END                  = 'initwizard_end';             // 処理終了
        const TASK_TITLE_SITE                   = 'サイト';          // サイト情報
        const TASK_TITLE_ADMIN                  = '管理者';          // 管理者
        const TASK_TITLE_ACCESS_POINT   = 'アクセスポイント';
        const TASK_TITLE_MENU                   = 'メニュー';
-       const TASK_TITLE_PAGE                   = 'ページ';
+       const TASK_TITLE_PAGE1                  = 'ページ1';
+       const TASK_TITLE_PAGE2                  = 'ページ2';
        const TASK_TITLE_END                    = '完了';             // 完了
        
        /**
@@ -47,8 +49,10 @@ 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_PAGE, 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_PAGE, self::TASK_TITLE_END);
+               $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);            // 管理下のタスク
+               $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);
        }
        /**
         * テンプレート前処理
index a169187..1738e21 100644 (file)
@@ -39,7 +39,7 @@ class admin_mainInitwizardWidgetContainer extends admin_mainInitwizardBaseWidget
        function _dispatch($request, &$param)
        {
                // 「initwizard」タスクはディスパッチ処理のみ行う。「initwizard_xxx」タスクではbootstrapライブラリが読み込まれる。
-               
+
                // 最初の画面へ遷移
                $task = $request->trimValueOf(M3_REQUEST_PARAM_OPERATION_TASK);
                if ($task == self::TASK_END){           // 初期化終了
@@ -15,7 +15,7 @@
  */
 require_once($gEnvManager->getCurrentWidgetContainerPath() .   '/admin_mainInitwizardBaseWidgetContainer.php');
 
-class admin_mainInitwizard_pageWidgetContainer extends admin_mainInitwizardBaseWidgetContainer
+class admin_mainInitwizard_page1WidgetContainer extends admin_mainInitwizardBaseWidgetContainer
 {
        private $idArray = array();                     // 表示するページ
        const MENU_ID = 'admin_menu';           // メニュー変換対象メニューバーID
@@ -43,7 +43,7 @@ class admin_mainInitwizard_pageWidgetContainer extends admin_mainInitwizardBaseW
         */
        function _setTemplate($request, &$param)
        {       
-               return 'initwizard_page.tmpl.html';
+               return 'initwizard_page1.tmpl.html';
        }
        /**
         * テンプレートにデータ埋め込む
@@ -64,23 +64,36 @@ class admin_mainInitwizard_pageWidgetContainer extends admin_mainInitwizardBaseW
                $reloadData = false;            // データの再ロード
                if ($act == 'update'){          // 設定更新のとき
                        $listedItem = explode(',', $request->trimValueOf('idlist'));
+
+                       // チェックされている項目数を確認
                        for ($i = 0; $i < count($listedItem); $i++){
                                // 項目がチェックされているかを取得
                                $itemName = 'item' . $i . '_selected';
                                $itemValue = ($request->trimValueOf($itemName) == 'on') ? 1 : 0;
+                               if ($itemValue) break;
+                       }
+                       if ($i == count($listedItem)) $this->setUserErrorMsg('1つ以上の選択が必要です。');
+                       
+                       // エラーなしの場合は、データを更新
+                       if ($this->getMsgCount() == 0){
+                               for ($i = 0; $i < count($listedItem); $i++){
+                                       // 項目がチェックされているかを取得
+                                       $itemName = 'item' . $i . '_selected';
+                                       $itemValue = ($request->trimValueOf($itemName) == 'on') ? 1 : 0;
                                
-                               $ret = $this->_mainDb->getPageIdRecord(1, $listedItem[$i], $row);
+                                       $ret = $this->_mainDb->getPageIdRecord(1/*ページサブIDを指定*/, $listedItem[$i], $row);
+                                       if ($ret){
+                                               $ret = $this->_mainDb->updatePageId(1/*ページサブIDを指定*/, $listedItem[$i], $row['pg_name'], $row['pg_description'], $row['pg_priority'], $row['pg_active'], $itemValue);
+                                               if (!$ret) break;
+                                       }
+                               }
                                if ($ret){
-                                       $ret = $this->_mainDb->updatePageId(1, $listedItem[$i], $row['pg_name'], $row['pg_description'], $row['pg_priority'], $row['pg_active'], $itemValue);
-                                       if (!$ret) break;
+                                       // 次の画面へ遷移
+                                       $this->_redirectNextTask();
+                               } else {
+                                       $this->setMsg(self::MSG_APP_ERR, 'データ更新に失敗しました');                       // データ更新に失敗しました
                                }
                        }
-                       if ($ret){
-                               // 次の画面へ遷移
-                               $this->_redirectNextTask();
-                       } else {
-                               $this->setMsg(self::MSG_APP_ERR, 'データ更新に失敗しました');                       // データ更新に失敗しました
-                       }
                } else {
                        $reloadData = true;
                }
@@ -88,7 +101,7 @@ class admin_mainInitwizard_pageWidgetContainer extends admin_mainInitwizardBaseW
                if ($reloadData){               // データ再取得のとき
                }
 
-               $this->_mainDb->getPageIdList(array($this, 'pageLoop'), 1);
+               $this->_mainDb->getPageIdList(array($this, 'pageLoop'), 1/*ページサブIDを指定*/);
                                        
                $this->tmpl->addVar("_widget", "id_list", implode($this->idArray, ','));// 表示項目のIDを設定
        }
diff --git a/widgets/admin_main/include/container/admin_mainInitwizard_page2WidgetContainer.php b/widgets/admin_main/include/container/admin_mainInitwizard_page2WidgetContainer.php
new file mode 100644 (file)
index 0000000..90e7b47
--- /dev/null
@@ -0,0 +1,196 @@
+<?php
+/**
+ * コンテナクラス
+ *
+ * PHP versions 5
+ *
+ * LICENSE: This source file is licensed under the terms of the GNU General Public License.
+ *
+ * @package    Magic3 Framework
+ * @author     平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
+ * @copyright  Copyright 2006-2013 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_page2WidgetContainer extends admin_mainInitwizardBaseWidgetContainer
+{
+       private $deviceType;            // デバイスタイプ(0=PC,1=携帯,2=スマートフォン)
+       private $defaultPageId;                 // デフォルトのページサブID
+       
+       /**
+        * コンストラクタ
+        */
+       function __construct()
+       {
+               // 親クラスを呼び出す
+               parent::__construct();
+       }
+       /**
+        * テンプレートファイルを設定
+        *
+        * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。
+        * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。
+        *
+        * @param RequestManager $request               HTTPリクエスト処理クラス
+        * @param object         $param                 任意使用パラメータ。そのまま_assign()に渡る
+        * @return string                                               テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。
+        */
+       function _setTemplate($request, &$param)
+       {       
+               return 'initwizard_page2.tmpl.html';
+       }
+       /**
+        * テンプレートにデータ埋め込む
+        *
+        * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。
+        *
+        * @param RequestManager $request               HTTPリクエスト処理クラス
+        * @param object         $param                 任意使用パラメータ。_setTemplate()と共有。
+        * @param                                                               なし
+        */
+       function _assign($request, &$param)
+       {
+               // アクセスポイントの使用状況を取得
+               $siteOpenPc                     = $this->isActiveAccessPoint(0/*PC*/);                  // PC用サイトの公開状況
+               $siteOpenSmartphone = $this->isActiveAccessPoint(2/*スマートフォン*/);   // スマートフォン用サイトの公開状況
+               $siteOpenMobile         = $this->isActiveAccessPoint(1/*携帯*/);      // 携帯用サイトの公開状況
+               
+               $act = $request->trimValueOf('act');
+               $pageDefaultPc = $request->trimValueOf('page_default_pc');
+               $pageDefaultSmartphone = $request->trimValueOf('page_default_smartphone');
+               $pageDefaultMobile = $request->trimValueOf('page_default_mobile');
+               
+               $reloadData = false;            // データの再ロード
+               if ($act == 'update'){          // 設定更新のとき
+                       $ret = true;
+                       if ($siteOpenPc){
+                               $this->_db->updateDefaultPageSubId($this->gEnv->getDefaultPageId(), $pageDefaultPc);
+                       }
+                       if ($siteOpenSmartphone){
+                               $this->_db->updateDefaultPageSubId($this->gEnv->getDefaultSmartphonePageId(), $pageDefaultSmartphone);
+                       }
+                       if ($siteOpenMobile){
+                               $this->_db->updateDefaultPageSubId($this->gEnv->getDefaultMobilePageId(), $pageDefaultMobile);
+                       }
+                       if ($ret){
+                               // 次の画面へ遷移
+                               $this->_redirectNextTask();
+                       } else {
+                               $this->setMsg(self::MSG_APP_ERR, 'データ更新に失敗しました');                       // データ更新に失敗しました
+                       }
+               } else {
+                       $reloadData = true;
+               }
+                       
+               // デフォルトページ選択メニューの作成
+               $isFirstAccessPoint = true;
+               if ($siteOpenPc){
+                       // デフォルトのページID取得
+                       $this->deviceType = 0;
+                       $this->defaultPageId = $this->gEnv->getDefaultPageSubIdByPageId($this->gEnv->getDefaultPageId());
+                       
+                       $this->_mainDb->getPageIdList(array($this, 'pageLoop'), 1/*ページサブIDを指定*/);
+                       
+                       $this->tmpl->setAttribute('page_pc', 'visibility', 'visible');          // PC用アクセスポイント
+                       if (!$isFirstAccessPoint) $this->tmpl->addVar("page_pc", "offset_class", 'col-lg-offset-3');
+                       $isFirstAccessPoint = false;
+               }
+               if ($siteOpenSmartphone){
+                       // デフォルトのページID取得
+                       $this->deviceType = 2;
+                       $this->defaultPageId = $this->gEnv->getDefaultPageSubIdByPageId($this->gEnv->getDefaultSmartphonePageId());
+                       
+                       $this->_mainDb->getPageIdList(array($this, 'pageLoop'), 1/*ページサブIDを指定*/);
+                       
+                       $this->tmpl->setAttribute('page_smartphone', 'visibility', 'visible');          // スマートフォン用アクセスポイント
+                       if (!$isFirstAccessPoint) $this->tmpl->addVar("page_smartphone", "offset_class", 'col-lg-offset-3');
+                       $isFirstAccessPoint = false;
+               }
+               if ($siteOpenMobile){
+                       // デフォルトのページID取得
+                       $this->deviceType = 1;
+                       $this->defaultPageId = $this->gEnv->getDefaultPageSubIdByPageId($this->gEnv->getDefaultMobilePageId());
+                       
+                       $this->_mainDb->getPageIdList(array($this, 'pageLoop'), 1/*ページサブIDを指定*/);
+                       
+                       $this->tmpl->setAttribute('page_mobile', 'visibility', 'visible');              // 携帯用アクセスポイント
+                       if (!$isFirstAccessPoint) $this->tmpl->addVar("page_mobile", "offset_class", 'col-lg-offset-3');                
+                       $isFirstAccessPoint = false;
+               }
+       }
+       /**
+        * アクセスポイントが有効かどうか
+        *
+        * @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;
+       }
+       /**
+        * ページサブID、取得したデータをテンプレートに設定する
+        *
+        * @param int $index                    行番号(0~)
+        * @param array $fetchedRow             フェッチ取得した行
+        * @param object $param                 未使用
+        * @return bool                                 true=処理続行の場合、false=処理終了の場合
+        */
+       function pageLoop($index, $fetchedRow, $param)
+       {
+               $value = $fetchedRow['pg_id'];
+               
+               // 使用するページでない場合はメニューに追加しない
+               if (!$fetchedRow['pg_available']) return true;
+               
+               $selected = '';
+               if ($value == $this->defaultPageId) $selected = 'selected';
+                       
+               $row = array(
+                       'value'         => $this->convertToDispString($value),                  // ページID
+                       'name'          => $this->convertToDispString($fetchedRow['pg_name']),                  // ページ名
+                       'selected' => $selected                                                                                                         // 選択中かどうか
+               );
+               
+               switch ($this->deviceType){
+                       case 0:         // PC
+                               $this->tmpl->addVars('page_list_pc', $row);
+                               $this->tmpl->parseTemplate('page_list_pc', 'a');
+                               break;
+                       case 1:         // 携帯
+                               $this->tmpl->addVars('page_list_mobile', $row);
+                               $this->tmpl->parseTemplate('page_list_mobile', 'a');
+                               break;
+                       case 2:         // スマートフォン
+                               $this->tmpl->addVars('page_list_smartphone', $row);
+                               $this->tmpl->parseTemplate('page_list_smartphone', 'a');
+                               break;
+               }
+               
+               // 表示中項目のページサブIDを保存
+               $this->idArray[] = $value;
+               return true;
+       }
+}
+?>
@@ -38,12 +38,12 @@ $(function(){
 </script>
 <div id="main-content">
 {MENU_ITEMS}
-<!-- m3:ErrorMessage -->
+<div class="text-center"><!-- m3:ErrorMessage --></div>
 <div class="page-header">
 <!--<h1>ページ</h1>-->
 </div>
 <form method="post" name="main" role="form" class="form-horizontal">
-<input type="hidden" name="task" value="initwizard_page" />
+<input type="hidden" name="task" value="initwizard_page1" />
 <input type="hidden" name="act" />
 <input type="hidden" name="idlist" value="{ID_LIST}" />
 <div class="form-group">
diff --git a/widgets/admin_main/include/template/initwizard_page2.tmpl.html b/widgets/admin_main/include/template/initwizard_page2.tmpl.html
new file mode 100644 (file)
index 0000000..5810c92
--- /dev/null
@@ -0,0 +1,83 @@
+/**
+ * 表示データ作成用テンプレート(patTemplate)
+ *
+ * LICENSE: This source file is licensed under the terms of the GNU General Public License.
+ *
+ * @package    Magic3 Framework
+ * @author     平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
+ * @copyright  Copyright 2006-2013 Magic3 Project.
+ * @license    http://www.gnu.org/copyleft/gpl.html  GPL License
+ * @version    SVN: $Id$
+ * @link       http://www.magic3.org
+ */
+<patTemplate:tmpl name="_widget">
+<script type="text/javascript">
+//<![CDATA[
+// 前の画面へ遷移
+function goPrev(task){
+       document.main.task.value = task;
+       document.main.submit();
+}
+// 次の画面へ遷移
+function goNext(){
+       // 入力データ編集中のページ離脱を許可
+       m3CancelSafeContentEdit();
+       
+       document.main.act.value = 'update';
+       document.main.submit();
+}
+$(function(){
+       // 編集中の離脱を防止
+       m3SetSafeContentEdit();
+       
+       // 前後エントリー移動ボタン
+       <patTemplate:tmpl name="show_prev_button" visibility="hidden">m3SetPrevButtonEvent(goPrev, '{TASK}');</patTemplate:tmpl>
+       <patTemplate:tmpl name="show_next_button" visibility="hidden">m3SetNextButtonEvent(goNext);</patTemplate:tmpl>
+});
+//]]>
+</script>
+<div id="main-content">
+{MENU_ITEMS}
+<!-- m3:ErrorMessage -->
+<div class="page-header">
+<!--<h1>サイト情報</h1>-->
+</div>
+<form method="post" name="main" role="form" class="form-horizontal">
+<input type="hidden" name="task" value="initwizard_page2" />
+<input type="hidden" name="act" />
+<div class="form-group">
+<label class="col-lg-3 control-label"><span {_HELP_INITWIZARD_PAGE_DEFAULT}>デフォルトページ</span></label>
+<patTemplate:tmpl name="page_pc" visibility="hidden">
+<div class="{OFFSET_CLASS} col-lg-4">
+<label for="page_default_pc" class="control-label">PC用アクセスポイント</label>
+<select id="page_default_pc" name="page_default_pc" class="form-control">
+    <patTemplate:tmpl name="page_list_pc">
+    <option value="{VALUE}" {SELECTED}>{NAME}</option>
+    </patTemplate:tmpl>
+</select>
+</div>
+</patTemplate:tmpl>
+<patTemplate:tmpl name="page_smartphone" visibility="hidden">
+<div class="{OFFSET_CLASS} col-lg-4">
+<label for="page_default_smartphone" class="control-label">スマートフォン用アクセスポイント</label>
+<select id="page_default_smartphone" name="page_default_smartphone" class="form-control">
+    <patTemplate:tmpl name="page_list_smartphone">
+    <option value="{VALUE}" {SELECTED}>{NAME}</option>
+    </patTemplate:tmpl>
+</select>
+</div>
+</patTemplate:tmpl>
+<patTemplate:tmpl name="page_mobile" visibility="hidden">
+<div class="{OFFSET_CLASS} col-lg-4">
+<label for="page_default_mobile" class="control-label">携帯用アクセスポイント</label>
+<select id="page_default_mobile" name="page_default_mobile" class="form-control">
+    <patTemplate:tmpl name="page_list_mobile">
+    <option value="{VALUE}" {SELECTED}>{NAME}</option>
+    </patTemplate:tmpl>
+</select>
+</div>
+</patTemplate:tmpl>
+</div>
+</form>
+</div>
+</patTemplate:tmpl>
\ No newline at end of file