OSDN Git Service

インストール完了後、ログイン後にガイダンスを表示する機能追加。
authornaoki hirata <naoki@magic3.org>
Mon, 13 Jan 2014 11:18:12 +0000 (20:18 +0900)
committernaoki hirata <naoki@magic3.org>
Mon, 13 Jan 2014 11:18:12 +0000 (20:18 +0900)
include/global.php
include/sql/update_widgets.sql
widgets/_install/include/container/_installInitdbWidgetContainer.php
widgets/admin/message/include/container/admin_messageWidgetContainer.php
widgets/admin/message/include/db/admin_messageDb.php
widgets/admin/message/include/template/index.tmpl.html
widgets/admin_main/include/container/admin_mainMenuWidgetContainer.php
widgets/admin_main/include/template/menu_bs.tmpl.html

index a74e896..e338187 100644 (file)
@@ -12,7 +12,7 @@
  * @author     平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
  * @copyright  Copyright 2006-2014 Magic3 Project.
  * @license    http://www.gnu.org/copyleft/gpl.html  GPL License
- * @version    Release 2.7.x SVN: $Id$
+ * @version    Release 2.8.x SVN: $Id$
  * @link       http://www.magic3.org
  */
 if (defined("M3_SYSTEM_DEFINE_INCLUDED")) return;
@@ -48,7 +48,7 @@ define('M3_ENCODING', 'UTF-8');       // 内部エンコーディング
 // ########## システム関係 ##########
 // システム基本情報
 define('M3_SYSTEM_NAME',                       'Magic3');              // システム名称
-define('M3_SYSTEM_VERSION',                    '2.7.26');              // システムのバージョン
+define('M3_SYSTEM_VERSION',                    '2.8.0');               // システムのバージョン
 define('M3_SYSTEM_RELEASE_DATE',       '2014/1/10');   // システムのリリース日付
 define('M3_SYSTEM_ID',                         'M3');                  // コンポーネント識別用ID
 define('M3_SYSTEM_DESCRIPTION',                'Magic3 is open source cms and web communication platform.');           // システムの説明
index e0ff2e4..f2a0e96 100644 (file)
@@ -38,11 +38,11 @@ INSERT INTO _widgets
 DELETE FROM _widgets WHERE wd_id = 'admin/opelog';\r
 INSERT INTO _widgets\r
 (wd_id,             wd_name,            wd_admin, wd_version, wd_author,      wd_copyright, wd_license, wd_official_level, wd_add_script_lib, wd_available, wd_editable, wd_has_admin, wd_initialized,  wd_release_dt, wd_install_dt, wd_create_dt) VALUES\r
-('admin/opelog', '管理用運用ログ表示', true,     '1.1.0', 'Naoki Hirata', 'Magic3.org', 'GPL',      10,                '', false,        false,       true, true,           '2013-03-04', now(),         now());\r
+('admin/opelog', '管理用運用ログ表示', true,     '1.2.0', 'Naoki Hirata', 'Magic3.org', 'GPL',      10,                '', false,        false,       true, true,           '2014-01-13', now(),         now());\r
 DELETE FROM _widgets WHERE wd_id = 'admin/loginuser';\r
 INSERT INTO _widgets\r
 (wd_id,             wd_name,                    wd_admin, wd_version, wd_author,      wd_copyright, wd_license, wd_official_level, wd_add_script_lib, wd_available, wd_editable, wd_has_admin, wd_initialized,  wd_release_dt, wd_install_dt, wd_create_dt) VALUES\r
-('admin/loginuser', '管理用ログインユーザ情報', true,     '1.1.0',   'Naoki Hirata', 'Magic3.org', 'GPL',      10,                '', false,        false,       false, true, '2012-09-19',           now(),         now());\r
+('admin/loginuser', '管理用ログインユーザ情報', true,     '2.0.0',   'Naoki Hirata', 'Magic3.org', 'GPL',      10,                '', false,        false,       false, true, '2014-01-13',           now(),         now());\r
 DELETE FROM _widgets WHERE wd_id = 'admin/message';\r
 INSERT INTO _widgets\r
 (wd_id,           wd_name,            wd_admin, wd_version, wd_author,      wd_copyright, wd_license, wd_official_level, wd_add_script_lib, wd_available, wd_editable, wd_has_admin, wd_initialized,  wd_release_dt, wd_install_dt, wd_create_dt) VALUES\r
index 3478b10..8244eff 100644 (file)
@@ -259,7 +259,7 @@ class _installInitdbWidgetContainer extends _installBaseWidgetContainer
                                
                                // 初期設定用画面への遷移を通知
                                $guideMsg = $this->_('If you want initializing the system easily, use \'System Initialize Wizard\'. Accessing to \'System Initialize Wizard\', push ESC key on the top page.'); // システムの初期化を簡単に行うには「システム初期化ウィザード」を使用します。「システム初期化ウィザード」機能にアクセスするには、トップ画面でESCキーを押します。
-                               $this->gOpeLog->writeGuide(__METHOD__, $guideMsg, 0, '', '', 'task=menu', true/*トップ表示*/);
+                               $this->gOpeLog->writeGuide(__METHOD__, $guideMsg, 0, '', '', 'task=iniwizard', true/*トップ表示*/);
                                
                                // 次の画面へ遷移
                                $this->gPage->redirect('?task=initother&install_type=' . $type . '&from=initdb' . '&' . M3_REQUEST_PARAM_OPERATION_LANG . '=' . $this->gEnv->getCurrentLanguage());
index 7ceb9fd..f480be1 100644 (file)
@@ -19,15 +19,13 @@ require_once($gEnvManager->getCurrentWidgetDbPath() . '/admin_messageDb.php');
 class admin_messageWidgetContainer extends BaseAdminWidgetContainer
 {
        private $db;    // DB接続オブジェクト
-       const DEFAULT_LOG_LEVEL = '0';          // デフォルトのログレベル
-       const DEFAULT_LOG_STATUS = '1';         // デフォルトのログステータス
-       const DEFAULT_LIST_COUNT = 30;                  // 最大リスト表示数
-       const DEFAULT_VIEW_COUNT = 10;                  // 一度に表示可能なリスト項目数
-//     const MAX_PAGE_COUNT = 20;                              // 最大ページ数
+       const DEFAULT_LOG_LEVEL = -1;           // デフォルトのログレベル
+       const DEFAULT_LIST_COUNT = 5;                   // 最大メッセージ表示数
        const INFO_ICON_FILE = '/images/system/info16.png';                     // 情報アイコン
        const NOTICE_ICON_FILE = '/images/system/notice16.png';         // 注意アイコン
        const ERROR_ICON_FILE = '/images/system/error16.png';           // エラーアイコン
        const ACTION_ICON_FILE = '/images/system/action16.png';         // 操作要求アイコン
+       const GUIDE_ICON_FILE = '/images/system/guide16.png';           // ガイダンスアイコン
        const ICON_SIZE = 16;           // アイコンのサイズ
        
        /**
@@ -66,15 +64,13 @@ class admin_messageWidgetContainer extends BaseAdminWidgetContainer
         */
        function _assign($request, &$param)
        {
-               $localeText = array();
+               $act = $request->trimValueOf('act');
+               $serialNo = $request->trimValueOf('serial');            // 選択項目のシリアル番号
+               $checked = $request->trimValueOf('checked');            // 確認済みかどうか
+               if ($act == 'update_message'){                  // メッセージの確認状況の更新
+                       $this->db->updateOpeLogChecked($serialNo, $checked);
+               }
                $this->createList($request);
-               
-               // テキストをローカライズ
-               $localeText['label_type'] = $this->_('Type');                   // 種別
-               $localeText['label_message'] = $this->_('Message');                     // メッセージ
-               $localeText['label_date'] = $this->_('Date');                   // 日時
-               
-               $this->setLocaleText($localeText);
        }
        /**
         * 一覧画面作成
@@ -84,52 +80,93 @@ class admin_messageWidgetContainer extends BaseAdminWidgetContainer
         */
        function createList($request)
        {
-//             $act = $request->trimValueOf('act');
-//             $this->clientIp = $this->gRequest->trimServerValueOf('REMOTE_ADDR');            // クライアントのIPアドレス
-//             $this->logLevel = $request->trimValueOf('loglevel');// 現在のログ表示レベル
-//             if ($this->logLevel == '') $this->logLevel = self::DEFAULT_LOG_LEVEL;           // 現在のログ表示レベル
-//             $this->logStatus = $request->trimValueOf('logstatus');// 現在のログ表示ステータス
-//             if ($this->logStatus == '') $this->logStatus = self::DEFAULT_LOG_STATUS;                // 現在のログ表示ステータス(0=すべて、1=未確認のみ、2=確認済みのみ)
-               $this->logLevel = self::DEFAULT_LOG_LEVEL;              // 現在のログ表示レベル
-               $this->logStatus = self::DEFAULT_LOG_STATUS;            // 現在のログ表示ステータス(0=すべて、1=未確認のみ、2=確認済みのみ)
-
-               // 表示するログを制限
-               $viewLevel = 0;                         // 表示メッセージレベル(0すべて、1=注意以上、10=要確認)
-               if ($this->logLevel == '1') $viewLevel = 10;
+               $logLevel = self::DEFAULT_LOG_LEVEL;            // ログ表示レベル
+               $listCount = self::DEFAULT_LIST_COUNT;          // 取得数
 
                // 表示条件
                $paramObj = $this->getWidgetParamObj();
-               if (empty($paramObj)){          // 既存データなしのとき
-                       // デフォルト値設定
-                       $listCount = self::DEFAULT_LIST_COUNT;          // 取得数
-                       $viewCount = self::DEFAULT_VIEW_COUNT;          // 表示数
-               } else {
+               if (!empty($paramObj)){         // 既存データなしのとき
                        $listCount = $paramObj->listCount;              // 取得数
                        if (!isset($listCount)) $listCount = self::DEFAULT_LIST_COUNT;          // 取得数
-                       $viewCount = $paramObj->viewCount;              // 表示数
-                       if (!isset($viewCount)) $viewCount = self::DEFAULT_VIEW_COUNT;          // 表示数
                }
-               $pageNo = 1;
-               
-               // 表示するログレベル、ログステータス選択メニュー作成
-               //$this->createLogLevelMenu();
-               //$this->createLogStatusMenu();
-               
-               // 総数を取得
-               $totalCount = $this->db->getOpeLogCount($viewLevel, $this->logStatus);
 
+               // 運用ログを取得
+               $this->db->getOpeLogList($logLevel, 1/*未確認*/, $listCount, 1/*ページ番号*/, array($this, 'logListLoop'));
+               if (count($this->serialArray) == 0) $this->tmpl->setAttribute('loglist', 'visibility', 'hidden');               // ログがないときは非表示
+       }
+       /**
+        * 運用ログ一覧取得したデータをテンプレートに設定する
+        *
+        * @param int $index                    行番号(0~)
+        * @param array $fetchedRow             フェッチ取得した行
+        * @param object $param                 未使用
+        * @return bool                                 true=処理続行の場合、false=処理終了の場合
+        */
+       function logListLoop($index, $fetchedRow, $param)
+       {
+               $serial = $fetchedRow['ol_serial'];
                
-               // アクセスログURL
-               $accessLogUrl = '?task=accesslog_detail&openby=simple';
-               $this->tmpl->addVar("_widget", "access_log_url", $accessLogUrl);
+               // メッセージレベルの設定
+               $iconUrl = '';
+               $title = '';
+               $alertType = '';
+               switch ($fetchedRow['ot_level']){
+                       case -1:                // ガイダンス
+                               $iconUrl = $this->gEnv->getRootUrl() . self::GUIDE_ICON_FILE;
+                               $title = 'ガイダンス';
+                               $alertType = 'alert-info';                      // アラートタイプ
+                               break;                  
+                       case 0:         // 情報
+                               $iconUrl = $this->gEnv->getRootUrl() . self::INFO_ICON_FILE;
+                               $title = '情報';
+                               $alertType = 'alert-info';                      // アラートタイプ
+                               break;
+                       case 1:         // 操作要求アイコン
+                               $iconUrl = $this->gEnv->getRootUrl() . self::ACTION_ICON_FILE;
+                               $title = '要操作';
+                               $alertType = 'alert-warning';                   // アラートタイプ
+                               break;
+                       case 2:         // 注意
+                               $iconUrl = $this->gEnv->getRootUrl() . self::NOTICE_ICON_FILE;
+                               $title = '注意';
+                               $alertType = 'alert-warning';                   // アラートタイプ
+                               break;
+                       case 10:        // 要確認
+                               $iconUrl = $this->gEnv->getRootUrl() . self::ERROR_ICON_FILE;
+                               $title = '要確認';
+                               $alertType = 'alert-danger';                    // アラートタイプ
+                               break;
+                       default:
+                               break;
+               }
+               $iconTitle = $fetchedRow['ot_name'];
+               $iconTag = '<img src="' . $this->getUrl($iconUrl) . '" width="' . self::ICON_SIZE . '" height="' . self::ICON_SIZE . '" border="0" alt="' . $iconTitle . '" title="' . $iconTitle . '" />';
+               $accessLog = '';
+               if (!empty($fetchedRow['ol_access_log_serial'])) $accessLog = $this->convertToDispString($fetchedRow['ol_access_log_serial']);
                
-               // 運用ログを取得
-//             $this->db->getOpeLogList($viewLevel, $this->logStatus, $listCount, $pageNo, array($this, 'logListLoop'));
-               //$this->tmpl->addVar("_widget", "serial_list", implode($this->serialArray, ','));// 表示項目のシリアル番号を設定
-//             if (count($this->serialArray) == 0) $this->tmpl->setAttribute('loglist', 'visibility', 'hidden');               // ログがないときは非表示
+               // 操作画面リンク
+               if (!empty($fetchedRow['ol_link'])){
+                       $linkUrl = $this->gEnv->getDefaultAdminUrl() . '?' . $fetchedRow['ol_link'];
+                       $iconTag = '<a href="'. $this->getUrl($linkUrl) .'">' . $iconTag . '</a>';
+                       
+                       // メッセージのリンク先
+                       $linkTag = '<a href="' . $linkUrl . '"><i class="glyphicon glyphicon-new-window"></i></a>';
+               }
+
+               $row = array(
+                       'serial'                => $this->convertToDispString($serial),                 // シリアル番号
+                       'alert_type'    => $alertType,          // アラートタイプ
+                       'type'                  => $iconTag,                    // メッセージタイプを示すアイコン
+                       'title'                 => $this->convertToDispString($title),          // メッセージ
+                       'message'               => $this->convertToDispString($fetchedRow['ol_message']),               // メッセージ
+                       'link'                  => $linkTag
+               );
+               $this->tmpl->addVars('loglist', $row);
+               $this->tmpl->parseTemplate('loglist', 'a');
                
-               $this->tmpl->addVar('_widget', 'view_count', $viewCount);                       // 一度に表示可能なリスト項目数
+               // 表示中のコンテンツIDを保存
+               $this->serialArray[] = $serial;
+               return true;
        }
-
 }
 ?>
index 77f2f27..ff36814 100644 (file)
@@ -20,7 +20,7 @@ class admin_messageDb extends BaseDb
        /**
         * 運用ログ取得
         *
-        * @param int           $level          取得ログのレベル(0すべて、1=注意以上、10=要確認)
+        * @param int           $level          取得ログのレベル
         * @param int           $status         取得するデータの状況(0=すべて、1=未参照のみ、2=参照済みのみ)
         * @param int           $limit          取得する項目数
         * @param int           $page           取得するページ(1~)
@@ -29,78 +29,44 @@ class admin_messageDb extends BaseDb
         */
        function getOpeLogList($level, $status, $limit, $page, $callback)
        {
-               // メッセージ種別
-               // 通常メッセージ: info=情報,warn=警告,user_info=ユーザ操作
-               // 参照必須メッセージ: error=通常エラー,fatal=致命的エラー,user_err=ユーザ操作エラー,user_access=不正アクセス,user_data=不正データ
                $offset = $limit * ($page -1);
                if ($offset < 0) $offset = 0;
                
-               $queryStr = 'SELECT * FROM _operation_log LEFT JOIN _operation_type ON ol_type = ot_id ';
-               $queryStr .= 'LEFT JOIN _access_log ON ol_access_log_serial = al_serial ';
-               
-               // 必須参照項目のみに限定
                $params = array();
-               $addWhere = '';
-               if ($level > 0){
-                       $addWhere .= 'WHERE ot_level >= ? ';
-                       $params[] = $level;
-               }
+               $queryStr  = 'SELECT * FROM _operation_log LEFT JOIN _operation_type ON ol_type = ot_id ';
+               
+               // 取得ログレベルを指定
+               $queryStr .= 'WHERE ol_show_top = true ';               // トップ表示メッセージ
+               $queryStr .=   'AND ot_level >= ? '; $params[] = $level;
+
                // 参照状況を制限
                if ($status == 1){              // 未参照
-                       if (empty($addWhere)){
-                               $addWhere .= 'WHERE ';
-                       } else {
-                               $addWhere .= 'AND ';
-                       }
-                       $addWhere .= 'ol_checked = false ';
+                       $queryStr .= 'AND ol_checked = false ';
                } else if ($status == 2){       // 参照済み
-                       if (empty($addWhere)){
-                               $addWhere .= 'WHERE ';
-                       } else {
-                               $addWhere .= 'AND ';
-                       }
-                       $addWhere .= 'ol_checked = true ';
+                       $queryStr .= 'AND ol_checked = true ';
                }
-               $queryStr .= $addWhere;
                $queryStr .=  'ORDER BY ol_serial DESC limit ' . $limit . ' offset ' . $offset;
                $this->selectLoop($queryStr, $params, $callback);
        }
        /**
-        * 運用ログ総数取得
+        * 運用ログの確認状況を更新
         *
-        * @param int           $level          取得ログのレベル(0すべて、1=参照必須)
-        * @param int           $status         取得するデータの状況(0=すべて、1=未参照のみ、2=参照済みのみ)
-        * @return int                                  総数
+        * @param string  $serial               シリアル番号
+        * @param bool    $checked              確認状況
+        * @return                                              true=正常、false=異常
         */
-       function getOpeLogCount($level, $status)
+       function updateOpeLogChecked($serial, $checked)
        {
-               $queryStr = 'SELECT * FROM _operation_log LEFT JOIN _operation_type ON ol_type = ot_id ';
+               // トランザクションスタート
+               $this->startTransaction();
                
-               // 必須参照項目のみに限定
-               $params = array();
-               $addWhere = '';
-               if ($level > 0){
-                       $addWhere .= 'WHERE ot_level >= ? ';
-                       $params[] = $level;
-               }
-               // 参照状況を制限
-               if ($status == 1){              // 未参照
-                       if (empty($addWhere)){
-                               $addWhere .= 'WHERE ';
-                       } else {
-                               $addWhere .= 'AND ';
-                       }
-                       $addWhere .= 'ol_checked = false ';
-               } else if ($status == 2){       // 参照済み
-                       if (empty($addWhere)){
-                               $addWhere .= 'WHERE ';
-                       } else {
-                               $addWhere .= 'AND ';
-                       }
-                       $addWhere .= 'ol_checked = true ';
-               }
-               $queryStr .= $addWhere;
-               return $this->selectRecordCount($queryStr, $params);
+               $queryStr = 'UPDATE _operation_log SET ol_checked = ? WHERE ol_serial = ?';
+               $params = array(intval($checked), $serial);
+               $ret = $this->execStatement($queryStr, $params);
+               
+               // トランザクション終了
+               $ret = $this->endTransaction();
+               return $ret;
        }
 }
 ?>
index 0c2b916..6ebec71 100644 (file)
 <patTemplate:tmpl name="_widget">
 <script type="text/javascript">
 //<![CDATA[
-$(function(){
-       // スクロールバー付きのテーブルを作成
-       //m3_tableWithScrollbar('loglist', {VIEW_COUNT}, 0);
-
-});
+function closeOpeLog(serial)
+{
+       document.message_main.act.value = 'update_message';
+       document.message_main.serial.value = serial;
+       document.message_main.checked.value = '1';              // メッセージをチェック済みに
+       document.message_main.submit();
+       return false;
+}
 //]]>
 </script>
-<div align="center">
-<!-- m3:ErrorMessage -->
-</div>
-<!--
+<form method="post" name="message_main">
+<input type="hidden" name="act" />
+<input type="hidden" name="serial" />
+<input type="hidden" name="checked" />
+<patTemplate:tmpl name="loglist">
 <div class="row">
-<div class="alert alert-danger col-lg-6 col-lg-offset-3">
-    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
-    <strong>Warning!</strong> Best check yo self, you're not looking too good.
+<div class="alert {ALERT_TYPE} col-lg-6 col-lg-offset-3">
+    <button type="button" class="close" data-dismiss="alert" aria-hidden="true" onclick="closeOpeLog({SERIAL});">&times;</button>
+    {TYPE}<strong>{TITLE}</strong><br />
+       {MESSAGE} {LINK}
+</div>
 </div>
-</div>-->
+</patTemplate:tmpl>
+</form>
 </patTemplate:tmpl>
index 2658481..b3e240a 100644 (file)
@@ -58,6 +58,8 @@ class admin_mainMenuWidgetContainer extends admin_mainBaseWidgetContainer
         */
        function _assign($request, &$param)
        {
+               // 管理用URL設定
+               $this->tmpl->addVar("_widget", "admin_url", $this->gEnv->getDefaultAdminUrl());
        }
 }
 ?>
index f883574..8024c2c 100644 (file)
  * @link       http://www.magic3.org
  */
 <patTemplate:tmpl name="_widget">
+<script type="text/javascript">
+//<![CDATA[
+$(function(){
+       $(document).keyup(function(e){
+               if (e.which == 27) location.href = '{ADMIN_URL}';       // ESCキー
+       });
+});
+//]]>
+</script>
 <div class="panel panel-info" style="width:300px;margin:0 auto;" >
     <div class="panel-heading"><span >システム制御</span></div>
     <ul class="list-group">