* @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;
// ########## システム関係 ##########
// システム基本情報
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.'); // システムの説明
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
// 初期設定用画面への遷移を通知
$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());
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; // アイコンのサイズ
/**
*/
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);
}
/**
* 一覧画面作成
*/
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;
}
-
}
?>
/**
* 運用ログ取得
*
- * @param int $level 取得ログのレベル(0すべて、1=注意以上、10=要確認)
+ * @param int $level 取得ログのレベル
* @param int $status 取得するデータの状況(0=すべて、1=未参照のみ、2=参照済みのみ)
* @param int $limit 取得する項目数
* @param int $page 取得するページ(1~)
*/
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;
}
}
?>
<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">×</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});">×</button>
+ {TYPE}<strong>{TITLE}</strong><br />
+ {MESSAGE} {LINK}
+</div>
</div>
-</div>-->
+</patTemplate:tmpl>
+</form>
</patTemplate:tmpl>
*/
function _assign($request, &$param)
{
+ // 管理用URL設定
+ $this->tmpl->addVar("_widget", "admin_url", $this->gEnv->getDefaultAdminUrl());
}
}
?>
* @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">