OSDN Git Service

システム初期化ウィザードに「管理者」画面追加。
authornaoki hirata <naoki@magic3.org>
Wed, 25 Dec 2013 13:41:11 +0000 (22:41 +0900)
committernaoki hirata <naoki@magic3.org>
Wed, 25 Dec 2013 13:41:11 +0000 (22:41 +0900)
widgets/admin_main/include/container/admin_mainInitwizardBaseWidgetContainer.php
widgets/admin_main/include/container/admin_mainInitwizardWidgetContainer.php
widgets/admin_main/include/container/admin_mainInitwizard_adminWidgetContainer.php
widgets/admin_main/include/container/admin_mainWidgetContainer.php
widgets/admin_main/include/template/initwizard.tmpl.html [new file with mode: 0644]
widgets/admin_main/include/template/initwizard_admin.tmpl.html
widgets/admin_main/include/template/initwizard_site.tmpl.html

index 135d466..5919113 100644 (file)
@@ -23,10 +23,13 @@ class admin_mainInitwizardBaseWidgetContainer extends admin_mainBaseWidgetContai
        protected $_taskTitleArray;             // 管理下のタスク名
        protected $_prevTask;
        protected $_nextTask;
-       const TASK_SITE         = 'initwizard_site';            // サイト情報
+       const TASK_START                = 'initwizard';
+       const TASK_SITE                 = 'initwizard_site';            // サイト情報
        const TASK_ADMIN                = 'initwizard_admin';           // システム管理者
+       const TASK_END                  = 'initwizard_end';             // 処理終了
        const TASK_TITLE_SITE           = 'サイト情報';            // サイト情報
        const TASK_TITLE_ADMIN          = '管理者';          // 管理者
+       const TASK_TITLE_END            = '完了';             // 完了
        
        /**
         * コンストラクタ
@@ -38,11 +41,11 @@ class admin_mainInitwizardBaseWidgetContainer extends admin_mainBaseWidgetContai
                
                $this->_mainDb = new admin_mainDb();
                
-               $this->_taskArray = array(self::TASK_SITE, self::TASK_ADMIN);           // 管理下のタスク
-               $this->_taskTitleArray = array(self::TASK_TITLE_SITE, self::TASK_TITLE_ADMIN);
+               $this->_taskArray = array(self::TASK_SITE, self::TASK_ADMIN, self::TASK_END);           // 管理下のタスク
+               $this->_taskTitleArray = array(self::TASK_TITLE_SITE, self::TASK_TITLE_ADMIN, self::TASK_TITLE_END);
        }
        /**
-        * テンプレート前処理
+        * テンプレート前処理
         *
         * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。
         *
@@ -54,17 +57,21 @@ class admin_mainInitwizardBaseWidgetContainer extends admin_mainBaseWidgetContai
        {
                // 表示画面を決定
                $task = $request->trimValueOf(M3_REQUEST_PARAM_OPERATION_TASK);
-               if (!in_array($task, $this->_taskArray)) $task = $this->_taskArray[0];
+//             if (!in_array($task, $this->_taskArray)) $task = $this->_taskArray[0];
                
                // 前後のタスクを取得
                $this->_prevTask = '';
                $this->_nextTask = '';
-               $taskCount = count($this->_taskArray);
-               for ($i = 0; $i < $taskCount; $i++){
-                       if ($task == $this->_taskArray[$i]){
-                               if ($i > 0) $this->_prevTask = $this->_taskArray[$i -1];
-                               if ($i < $taskCount -1) $this->_nextTask = $this->_taskArray[$i +1];
-                               break;
+               if ($task == self::TASK_END){           // 初期化終了
+                       // 前後タスクなし
+               } else {
+                       $taskCount = count($this->_taskArray);
+                       for ($i = 0; $i < $taskCount; $i++){
+                               if ($task == $this->_taskArray[$i]){
+                                       if ($i > 0) $this->_prevTask = $this->_taskArray[$i -1];
+                                       if ($i < $taskCount -1) $this->_nextTask = $this->_taskArray[$i +1];
+                                       break;
+                               }
                        }
                }
        }
@@ -83,30 +90,28 @@ class admin_mainInitwizardBaseWidgetContainer extends admin_mainBaseWidgetContai
                
                // 表示画面を決定
                $task = $request->trimValueOf(M3_REQUEST_PARAM_OPERATION_TASK);
-               if (!in_array($task, $this->_taskArray)) $task = $this->_taskArray[0];
+//             if (!in_array($task, $this->_taskArray)) $task = $this->_taskArray[0];
                
                // メニュー作成
                $menuHtml = '';
-               $prevTask = '';
                for ($i = 0; $i < count($this->_taskArray); $i++){
                        $url = $baseUrl . '?task=' . $this->_taskArray[$i];
                        $attr = '';
-                       if ($task == $this->_taskArray[$i]){
-                               $attr = ' class="active"';
-                               if ($i > 0) $prevTask = $this->_taskArray[$i -1];
-                       }
+                       if ($task == $this->_taskArray[$i]) $attr = ' class="active"';
                        $menuHtml .= '<li' . $attr . '><a href="' . $url . '">' . $this->convertToDispString($this->_taskTitleArray[$i]) . '</a></li>';
                }
                $menuHtml = '<ul class="nav nav-pills">' . $menuHtml . '</ul>';
                $this->tmpl->addVar("_widget", "menu_items", $menuHtml);
                
                // 前後エントリー移動ボタン
-               if (!empty($prevTask)){
+               if (!empty($this->_prevTask)){
                        $this->tmpl->setAttribute('show_prev_button', 'visibility', 'visible');
-                       $this->tmpl->addVar('show_prev_button', 'task', $prevTask);
+                       $this->tmpl->addVar('show_prev_button', 'task', $this->_prevTask);
+               }
+               if (!empty($this->_nextTask)){
+                       $this->tmpl->setAttribute('show_next_button', 'visibility', 'visible');
+                       $this->tmpl->addVar('show_next_button', 'task', '');
                }
-               $this->tmpl->setAttribute('show_next_button', 'visibility', 'visible');
-               $this->tmpl->addVar('show_next_button', 'task', '');
        }
 }
 ?>
index 11d50cc..a169187 100644 (file)
@@ -38,9 +38,53 @@ class admin_mainInitwizardWidgetContainer extends admin_mainInitwizardBaseWidget
         */
        function _dispatch($request, &$param)
        {
+               // 「initwizard」タスクはディスパッチ処理のみ行う。「initwizard_xxx」タスクではbootstrapライブラリが読み込まれる。
+               
                // 最初の画面へ遷移
-               $startPage = $this->gEnv->getDefaultAdminUrl() . '?task=' . $this->_taskArray[0];
-               $this->gPage->redirect($startPage);
+               $task = $request->trimValueOf(M3_REQUEST_PARAM_OPERATION_TASK);
+               if ($task == self::TASK_END){           // 初期化終了
+                       // このクラスで処理を行う
+               } else if (in_array($task, $this->_taskArray)){
+                       $this->gLaunch->goSubWidget($task);
+                       return false;
+               } else {
+                       $startPage = $this->gEnv->getDefaultAdminUrl() . '?task=' . $this->_taskArray[0];
+                       $this->gPage->redirect($startPage);
+               }
+               return true;
+       }
+       /**
+        * テンプレートファイルを設定
+        *
+        * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。
+        * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。
+        *
+        * @param RequestManager $request               HTTPリクエスト処理クラス
+        * @param object         $param                 任意使用パラメータ。そのまま_assign()に渡る
+        * @return string                                               テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。
+        */
+       function _setTemplate($request, &$param)
+       {
+               return 'initwizard.tmpl.html';
+       }
+       /**
+        * テンプレートにデータ埋め込む
+        *
+        * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。
+        *
+        * @param RequestManager $request               HTTPリクエスト処理クラス
+        * @param object         $param                 任意使用パラメータ。_setTemplate()と共有。
+        * @return                                                              なし
+        */
+       function _assign($request, &$param)
+       {
+               $task = $request->trimValueOf(M3_REQUEST_PARAM_OPERATION_TASK);
+               if ($task == self::TASK_END){   // 初期化終了
+//                     $title = '完了';
+                       $message = '初期化完了しました';
+//                     $this->tmpl->addVar('_widget', 'title', $title);
+                       $this->tmpl->addVar('_widget', 'message', $message);
+               }
        }
 }
 ?>
index 7d2fb95..5b63f62 100644 (file)
@@ -18,7 +18,9 @@ require_once($gEnvManager->getCurrentWidgetDbPath() . '/admin_mainDb.php');
 
 class admin_mainInitwizard_adminWidgetContainer extends admin_mainInitwizardBaseWidgetContainer
 {
-
+       const DEFAULT_ADMIN_USER_ID = 1;                // デフォルトの管理者ユーザID
+       const DEFAULT_PASSWORD = '********';    // 設定済みを示すパスワード
+       
        /**
         * コンストラクタ
         */
@@ -54,6 +56,70 @@ class admin_mainInitwizard_adminWidgetContainer extends admin_mainInitwizardBase
         */
        function _assign($request, &$param)
        {
+               // 入力値を取得
+               $act = $request->trimValueOf('act');
+               $this->serialNo = intval($request->trimValueOf('serial'));              // 選択項目のシリアル番号
+               $name           = $request->trimValueOf('item_name');
+               $account        = $request->trimValueOf('item_account');
+               $password       = $request->trimValueOf('password');
+               $email          = $request->trimValueOf('item_email');          // Eメール
+
+               $reloadData = false;            // データの再読み込み
+               if ($act == 'update'){          // 行更新のとき
+                       // 入力チェック
+                       $this->checkInput($name,                        '管理者名');                // 名前
+                       $this->checkLoginAccount($account,      'アカウント', true);// アカウント
+                       $this->checkMailAddress($email,         'Eメール', true);            // Eメール
+                       
+                       // アカウント重複チェック
+                       // 設定データを取得
+                       $ret = $this->db->getUserBySerial($this->serialNo, $row, $groupRows);
+                       if ($ret){
+                               if ($row['lu_account'] != $account && $this->_db->isExistsAccount($account)) $this->setMsg(self::MSG_USER_ERR, 'アカウントが重複しています');
+                       } else {
+                               $this->setMsg(self::MSG_APP_ERR, 'データ取得に失敗しました');
+                       }
+                       
+                       // エラーなしの場合は、データを更新
+                       if ($this->getMsgCount() == 0){
+                               // 追加項目
+                               $otherParams = array();
+                               $otherParams['lu_email'] = $email;              // Eメール
+                               $ret = $this->_db->updateLoginUser($this->serialNo, $name, $account, $password, $this->userType, $canLogin, $startDt, $endDt, $newSerial,
+                                                                                                       null, null, $this->userGroupArray, $otherParams);
+                               if ($ret){              // データ追加成功のとき
+                                       $this->setMsg(self::MSG_GUIDANCE, 'データを更新しました');
+                                       
+                                       // 運用ログ出力
+                                       $ret = $this->db->getUserBySerial($newSerial, $row, $groupRows);
+                                       if ($ret) $loginUserId = $row['lu_id'];
+                                       $this->gOpeLog->writeUserInfo(__METHOD__, 'ユーザを更新しました。アカウント: ' . $account, 2100, 'userid=' . $loginUserId . ', username=' . $name);
+                                       
+                                       $this->serialNo = $newSerial;
+                                       $reloadData = true;             // データの再読み込み
+                               } else {
+                                       $this->setMsg(self::MSG_APP_ERR, 'データ更新に失敗しました');
+                               }
+                       }
+               } else {
+                       $reloadData = true;
+               }
+               if ($reloadData){               // データの再読み込み
+                       // 管理者の情報取得
+                       $ret = $this->_db->getLoginUserRecordById(self::DEFAULT_ADMIN_USER_ID, $row);
+                       if ($ret){
+                               $this->serialNo = $row['lu_serial'];
+                               $name = $row['lu_name'];
+                               $account = $row['lu_account'];
+                               $email = $row['lu_email'];              // Eメール
+                       }
+               }
+               $this->tmpl->addVar("_widget", "serial", $this->serialNo);
+               $this->tmpl->addVar("_widget", "admin_name",    $this->convertToDispString($name));
+               $this->tmpl->addVar("_widget", "admin_account", $this->convertToDispString($account));
+               $this->tmpl->addVar("_widget", "admin_email",   $this->convertToDispString($email));            // Eメール
+               $this->tmpl->addVar("_widget", "admin_password", self::DEFAULT_PASSWORD);// 入力済みを示すパスワードの設定
+               $this->tmpl->addVar("_widget", "admin_password2", self::DEFAULT_PASSWORD);// 入力済みを示すパスワードの設定
        }
 }
 ?>
index 31cd6f4..cb7345f 100644 (file)
@@ -33,7 +33,7 @@ class admin_mainWidgetContainer extends admin_mainBaseWidgetContainer
                // 親クラスを呼び出す
                parent::__construct();
                
-               $this->permitTask = array('test_', 'initwizard_');              // 実行許可タスク
+               $this->permitTask = array('test', 'initwizard');                // 実行許可タスク
        }
        /**
         * ディスパッチ処理(メインコンテナのみ実行)
@@ -285,11 +285,8 @@ class admin_mainWidgetContainer extends admin_mainBaseWidgetContainer
                                                        break;
                                                default:
                                                        foreach ($this->permitTask as $taskStart){
-                                                               if (strStartsWith($task, $taskStart)){  // 「taskA_」パターン
-                                                                       $this->gLaunch->goSubWidget($task);
-                                                                       return false;
-                                                               } else if (strncmp($task, $taskStart, strlen($taskStart) -1)){  // 「taskA」パターン
-                                                                       $this->gLaunch->goSubWidget($task);
+                                                               if (strStartsWith($task, $taskStart)){  // 「taskA」「taskA_」パターン
+                                                                       $this->gLaunch->goSubWidget($taskStart);
                                                                        return false;
                                                                }
                                                        }
diff --git a/widgets/admin_main/include/template/initwizard.tmpl.html b/widgets/admin_main/include/template/initwizard.tmpl.html
new file mode 100644 (file)
index 0000000..00261b1
--- /dev/null
@@ -0,0 +1,22 @@
+/**
+ * 表示データ作成用テンプレート(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">
+<div id="main-content">
+{MENU_ITEMS}
+<!-- m3:ErrorMessage -->
+<div class="page-header">
+<h2>{TITLE}</h2>
+</div>
+{MESSAGE}
+</div>
+</patTemplate:tmpl>
index 258bd0d..c10a801 100644 (file)
  * @link       http://www.magic3.org
  */
 <patTemplate:tmpl name="_widget">
+<script type="text/javascript" src="{SCRIPT_URL}/md5.js"></script>
 <script type="text/javascript">
 //<![CDATA[
-$(function(){
-       // 前後エントリー移動ボタン
-       <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>
-});
+// 前の画面へ遷移
 function goPrev(task){
-       document.main.entryid.value = '';               // 値キャンセル
        document.main.task.value = task;
-       document.main.act.value = 'edit';
        document.main.submit();
 }
+// 次の画面へ遷移
 function goNext(){
-       document.main.entryid.value = '';               // 値キャンセル
-//     document.main.task.value = 'entry_detail';
+       // 入力データ編集中のページ離脱を許可
+       m3CancelSafeContentEdit();
+       
        document.main.act.value = 'update';
+       if (document.main.item_password.value != '********') document.main.password.value = hex_md5(document.main.item_password.value);
        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>-->
+<!--<h1>管理者</h1>-->
 </div>
-<form method="post" name="main" role="form" class="form-horizontal">
-<input type="hidden" name="task" value="entry_detail" />
+<form method="post" name="main" role="form" class="form-horizontal" autocomplete="off">
+<input type="hidden" name="task" value="initwizard_admin" />
 <input type="hidden" name="act" />
-<input type="hidden" name="entryid" value="{ENTRYID}" />
+<input type="hidden" name="serial" value="{SERIAL}" />
+<input type="hidden" name="password" />
+<div class="form-group">
+<label for="admin_name" class="col-lg-3 control-label">管理者名</label>
+<div class="col-lg-4"><input id="admin_name" name="admin_name" type="text" class="form-control textbox-imeoff" size="30" maxlength="30" value="{ADMIN_NAME}" /></div>
+</div>
 <div class="form-group">
-<label for="site_name" class="col-lg-2 control-label">サイト名</label>
-<div class="col-lg-4"><input id="site_name" name="site_name" type="text" class="form-control textbox-imeoff" size="30" maxlength="30" value="{SITE_NAME}" /></div>
+<label for="admin_account" class="col-lg-3 control-label">アカウント</label>
+<div class="col-lg-4"><input id="admin_account" name="admin_account" type="text" class="form-control textbox-imeoff" size="30" maxlength="30" value="{ADMIN_ACCOUNT}" /></div>
 </div>
 <div class="form-group">
-<label for="site_email" class="col-lg-2 control-label">Eメール</label>
-<div class="col-lg-4"><input id="site_email" name="site_email" type="text" class="form-control textbox-imeoff" size="30" maxlength="30" value="{SITE_EMAIL}" /></div>
+<label for="admin_password" class="col-lg-3 control-label">パスワード</label>
+<div class="col-lg-4"><input id="admin_password" name="admin_password" type="password" class="form-control textbox-imeoff" size="30" maxlength="30" value="{ADMIN_PASSWORD}" /></div>
 </div>
 <div class="form-group">
-<label for="site_description" class="col-lg-2 control-label">サイト説明</label>
-<div class="col-lg-6"><textarea id="site_description" name="site_description" class="form-control" />{SITE_DESCRIPTION}</textarea></div>
+<label for="admin_password2" class="col-lg-3 control-label">パスワード(確認)</label>
+<div class="col-lg-4"><input id="admin_password2" name="admin_password2" type="password" class="form-control textbox-imeoff" size="30" maxlength="30" value="{ADMIN_PASSWORD2}" /></div>
 </div>
 <div class="form-group">
-<label for="site_keyword" class="col-lg-2 control-label">検索キーワード</label>
-<div class="col-lg-6"><textarea id="site_keyword" name="site_keyword" class="form-control" />{SITE_KEYWORD}</textarea></div>
+<label for="admin_email" class="col-lg-3 control-label">Eメール</label>
+<div class="col-lg-4"><input id="admin_email" name="admin_email" type="text" class="form-control textbox-imeoff" size="30" maxlength="30" value="{ADMIN_EMAIL}" /></div>
 </div>
 </form>
 </div>
index a427114..f4b1c26 100644 (file)
@@ -20,10 +20,16 @@ function goPrev(task){
 }
 // 次の画面へ遷移
 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>
@@ -40,19 +46,19 @@ $(function(){
 <input type="hidden" name="task" value="initwizard_site" />
 <input type="hidden" name="act" />
 <div class="form-group">
-<label for="site_name" class="col-lg-2 control-label">サイト名</label>
+<label for="site_name" class="col-lg-3 control-label">サイト名</label>
 <div class="col-lg-4"><input id="site_name" name="site_name" type="text" class="form-control textbox-imeoff" size="30" maxlength="30" value="{SITE_NAME}" /></div>
 </div>
 <div class="form-group">
-<label for="site_email" class="col-lg-2 control-label">Eメール</label>
+<label for="site_email" class="col-lg-3 control-label">Eメール</label>
 <div class="col-lg-4"><input id="site_email" name="site_email" type="text" class="form-control textbox-imeoff" size="30" maxlength="30" value="{SITE_EMAIL}" /></div>
 </div>
 <div class="form-group">
-<label for="site_description" class="col-lg-2 control-label">サイト説明</label>
+<label for="site_description" class="col-lg-3 control-label">サイト説明</label>
 <div class="col-lg-6"><textarea id="site_description" name="site_description" class="form-control" />{SITE_DESCRIPTION}</textarea></div>
 </div>
 <div class="form-group">
-<label for="site_keyword" class="col-lg-2 control-label">検索キーワード</label>
+<label for="site_keyword" class="col-lg-3 control-label">検索キーワード</label>
 <div class="col-lg-6"><textarea id="site_keyword" name="site_keyword" class="form-control" />{SITE_KEYWORD}</textarea></div>
 </div>
 </form>