OSDN Git Service

初回コミット(v2.6.17.1)
[magic3/magic3.git] / widgets / admin_main / include / container / admin_mainOpelogWidgetContainer.php
1 <?php
2 /**
3  * コンテナクラス
4  *
5  * PHP versions 5
6  *
7  * LICENSE: This source file is licensed under the terms of the GNU General Public License.
8  *
9  * @package    Magic3 Framework
10  * @author     平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
11  * @copyright  Copyright 2006-2013 Magic3 Project.
12  * @license    http://www.gnu.org/copyleft/gpl.html  GPL License
13  * @version    SVN: $Id: admin_mainOpelogWidgetContainer.php 5801 2013-03-06 13:08:29Z fishbone $
14  * @link       http://www.magic3.org
15  */
16 require_once($gEnvManager->getCurrentWidgetContainerPath() .    '/admin_mainConditionBaseWidgetContainer.php');
17 require_once($gEnvManager->getCurrentWidgetDbPath() . '/admin_mainDb.php');
18 require_once($gEnvManager->getCurrentWidgetDbPath() . '/admin_serverDb.php');
19
20 class admin_mainOpelogWidgetContainer extends admin_mainConditionBaseWidgetContainer
21 {
22         private $db;    // DB接続オブジェクト
23         private $serverDb;              // DB接続オブジェクト
24         private $serialNo;      // シリアルNo
25         private $serialArray = array();         // 表示されているコンテンツシリアル番号
26         private $logLevelArray;                         // 表示するログレベル
27         private $logStatusArray;                                // 表示するログステータス
28         private $logLevel;                                      // 現在のログ表示レベル
29         private $logStatus;                                     // 現在のログ表示ステータス
30         private $clientIp;                      // クライアントのIPアドレス
31         private $browserIconFile;       // ブラウザアイコンファイル名
32         private $showMessage;           // メッセージ画面かどうか
33         private $message;                       // 表示メッセージ
34         private $server;                        // 指定サーバ
35         const DEFAULT_LIST_COUNT = 30;                  // 最大リスト表示数
36         const MAX_PAGE_COUNT = 20;                              // 最大ページ数
37         const INFO_ICON_FILE = '/images/system/info16.png';                     // 情報アイコン
38         const NOTICE_ICON_FILE = '/images/system/notice16.png';         // 注意アイコン
39         const ERROR_ICON_FILE = '/images/system/error16.png';           // エラーアイコン
40         const ACTION_ICON_FILE = '/images/system/action16.png';         // 操作要求アイコン
41         const BROWSER_ICON_DIR = '/images/system/browser/';             // ブラウザアイコンディレクトリ
42         const ICON_SIZE = 16;           // アイコンのサイズ
43         const DEFAULT_LOG_LEVEL = '0';          // デフォルトのログレベル
44         const DEFAULT_LOG_STATUS = '1';         // デフォルトのログステータス
45
46         /**
47          * コンストラクタ
48          */
49         function __construct()
50         {
51                 // 親クラスを呼び出す
52                 parent::__construct();
53                 
54                 // DB接続オブジェクト作成
55                 $this->db = new admin_mainDb();
56                 $this->serverDb = new admin_serverDb();
57                 
58                 // ログレベルタイプ
59                 $this->logLevelArray = array(   array(  'name' => $this->_('All'),                              'value' => '0'),        // すべて
60                                                                                 array(  'name' => $this->_('Check Required'),   'value' => '1'));               // 要確認項目のみ
61                 // ログステータスタイプ
62                 $this->logStatusArray = array(  array(  'name' => $this->_('All'),                      'value' => '0'),        // すべて
63                                                                                 array(  'name' => $this->_('Unchecked'),        'value' => '1'),        // 未確認項目
64                                                                                 array(  'name' => $this->_('Checked'),          'value' => '2'));       // 確認済項目
65                                                                                 
66                 // ブラウザアイコンファイル名
67                 $this->browserIconFile = array(
68                         'OP' => 'opera.png',    // opera
69                         'IE' => 'ie.png',       // microsoft internet explorer
70                         'NS' => 'netscape.png', // netscape
71                         'GA' => 'galeon.png',   // galeon
72                         'PX' => 'phoenix.png',  // phoenix
73                         'FF' => 'firefox.png',  // firefox
74                         'FB' => 'firebird.png', // mozilla firebird
75                         'SM' => 'seamonkey.png',        // seamonkey
76                         'CA' => 'camino.png',   // camino
77                         'SF' => 'safari.png',   // safari
78                         'CH' => 'chrome.gif',   // chrome
79                         'KM' => 'k-meleon.png', // k-meleon
80                         'MO' => 'mozilla.gif',  // mozilla
81                         'KO' => 'konqueror.png',        // konqueror
82                         'BB' => '',     // blackberry
83                         'IC' => 'icab.png',     // icab
84                         'LX' => '',     // lynx
85                         'LI' => '',     // links
86                         'MC' => '',     // ncsa mosaic
87                         'AM' => '',     // amaya
88                         'OW' => 'omniweb.png',  // omniweb
89                         'HJ' => '',     // hotjava
90                         'BX' => '',     // browsex
91                         'AV' => '',     // amigavoyager
92                         'AW' => '',     // amiga-aweb
93                         'IB' => '',     // ibrowse
94                         'AR' => '',     // arora
95                         'EP' => 'epiphany.png', // epiphany
96                         'FL' => 'flock.png',    // flock
97                         'SL' => 'sleipnir.gif'          ,// sleipnir
98                         'LU' => 'lunascape.gif',        // lunascape
99                         'SH' => 'shiira.gif',           // shiira
100                         'SW' => 'swift.png',    // swift
101                         'PS' => 'playstation.gif',      // playstation portable
102                         'PP' => 'playstation.gif',      // ワイプアウトピュア
103                         'NC' => 'netcaptor.gif',        // netcaptor
104                         'WT' => 'webtv.gif',    // webtv
105                         
106                         // クローラ
107                         'GB' => 'google.gif',   // Google
108                         'MS' => 'msn.gif',      // MSN
109                         'YA' => 'yahoo.gif',    // YahooSeeker
110                         'GO' => 'goo.gif',      // goo
111                         'HT' => 'hatena.gif',   // はてなアンテナ
112                         'NV' => 'naver.gif',    // Naver(韓国)
113                         
114                         // 携帯
115                         'DC' => 'docomo.gif',           // ドコモ
116                         'AU' => 'au.gif',               // au
117                         'SB' => 'softbank.gif',         // ソフトバンク
118                 );
119         }
120         /**
121          * テンプレートファイルを設定
122          *
123          * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。
124          * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。
125          *
126          * @param RequestManager $request               HTTPリクエスト処理クラス
127          * @param object         $param                 任意使用パラメータ。そのまま_assign()に渡る
128          * @return string                                               テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。
129          */
130         function _setTemplate($request, &$param)
131         {
132                 // サーバ指定されている場合は接続先DBを変更
133                 $this->server = $request->trimValueOf(M3_REQUEST_PARAM_SERVER);
134                 if (!empty($this->server)){
135                         // 設定データを取得
136                         $ret = $this->serverDb->getServerById($this->server, $row);
137                         if ($ret){
138                                 $dbDsn = $row['ts_db_connect_dsn'];             // DB接続情報
139                                 $dbAccount = $row['ts_db_account'];     // DB接続アカウント
140                                 $dbPassword = $row['ts_db_password'];// DB接続パスワード
141
142                                 // テスト用DBオブジェクト作成
143                                 $ret = $this->db->openLocalDb($dbDsn, $dbAccount, $dbPassword);// 接続先を変更
144                         }
145                         if (!$ret){             // サーバに接続できない場合
146                                 $this->showMessage = true;              // メッセージ画面かどうか
147                                 $this->message = $this->_('Could not connect to server.');              // サーバに接続できません
148                                 return 'message.tmpl.html';
149                         }
150                 }
151                 
152                 $task = $request->trimValueOf('task');
153                 if ($task == 'opelog_detail'){          // 詳細画面
154                         return 'opelog_detail.tmpl.html';
155                 } else {                        // 一覧画面
156                         return 'opelog.tmpl.html';
157                 }
158         }
159         /**
160          * テンプレートにデータ埋め込む
161          *
162          * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。
163          *
164          * @param RequestManager $request               HTTPリクエスト処理クラス
165          * @param object         $param                 任意使用パラメータ。_setTemplate()と共有。
166          * @param                                                               なし
167          */
168         function _assign($request, &$param)
169         {
170                 if ($this->showMessage){                // メッセージ画面かどうか
171                         $this->setMsg(self::MSG_APP_ERR, $this->message);
172                         return;
173                 }
174                 
175                 $localeText = array();
176                 $task = $request->trimValueOf('task');
177                 if ($task == 'opelog_detail'){  // 詳細画面
178                         $this->createDetail($request);
179                         
180                         // テキストをローカライズ
181                         $localeText['msg_update'] = $this->_('Update item?');           // 項目を更新しますか?
182                         $localeText['msg_delete'] = $this->_('Delete item?');           // 項目を削除しますか?
183                         $localeText['label_log_detail'] = $this->_('Operation Log Detail');             // 運用ログ詳細
184                         $localeText['label_go_back'] = $this->_('Go back');             // 戻る
185                         $localeText['label_type'] = $this->_('Type');                   // 種別
186                         $localeText['label_check'] = $this->_('Checked');               // 確認
187                         $localeText['label_message'] = $this->_('Message');                     // メッセージ
188                         $localeText['label_message_detail'] = $this->_('Message Detail');// メッセージ詳細
189                         $localeText['label_message_code'] = $this->_('Message Code');// メッセージコード
190                         $localeText['label_access_log_no'] = $this->_('Access Log No');                 // アクセスログ番号
191                         $localeText['label_date'] = $this->_('Date');                   // 日時
192                         $localeText['label_update'] = $this->_('Update');       // 更新
193                 } else {                        // 一覧画面
194                         $this->createList($request);
195                         
196                         // テキストをローカライズ
197                         $localeText['msg_select_item'] = $this->_('Select item to edit.');              // 編集する項目を選択してください
198                         $localeText['msg_select_del_item'] = $this->_('Select item to delete.');                // 削除する項目を選択してください
199                         $localeText['msg_delete_item'] = $this->_('Delete selected item?');// 選択項目を削除しますか?
200                         $localeText['label_log_list'] = $this->_('Operation Log List');                                 // 運用ログ一覧
201                         $localeText['label_log_level'] = $this->_('Level:');// 種別:
202                         $localeText['label_log_status'] = $this->_('Status:');// ステータス:
203                         $localeText['label_edit'] = $this->_('Edit');                           // 編集
204                         $localeText['label_check'] = $this->_('Select');                        // 選択
205                         $localeText['label_type'] = $this->_('Type');                   // 種別
206                         $localeText['label_message'] = $this->_('Message');                     // メッセージ
207                         $localeText['label_access_log'] = $this->_('Access Log');                       // アクセスログ
208                         $localeText['label_check'] = $this->_('Checked');                       // 確認
209                         $localeText['label_date'] = $this->_('Date');                   // 日時
210                         $localeText['label_range'] = $this->_('Range:');                // 範囲:
211                 }
212                 $this->setLocaleText($localeText);
213         }
214         /**
215          * 一覧画面作成
216          *
217          * @param RequestManager $request               HTTPリクエスト処理クラス
218          * @param                                                               なし
219          */
220         function createList($request)
221         {
222                 $act = $request->trimValueOf('act');
223                 $this->clientIp = $this->gRequest->trimServerValueOf('REMOTE_ADDR');            // クライアントのIPアドレス
224                 $this->logLevel = $request->trimValueOf('loglevel');// 現在のログ表示レベル
225                 if ($this->logLevel == '') $this->logLevel = self::DEFAULT_LOG_LEVEL;           // 現在のログ表示レベル
226                 $this->logStatus = $request->trimValueOf('logstatus');// 現在のログ表示ステータス
227                 if ($this->logStatus == '') $this->logStatus = self::DEFAULT_LOG_STATUS;                // 現在のログ表示ステータス(0=すべて、1=未確認のみ、2=確認済みのみ)
228                 
229                 // 表示するログを制限
230                 $viewLevel = 0;                         // 表示メッセージレベル(0すべて、1=注意以上、10=要確認)
231                 if ($this->logLevel == '1') $viewLevel = 10;
232
233                 // 表示条件
234                 $viewCount = $request->trimValueOf('viewcount');// 表示項目数
235                 if ($viewCount == '') $viewCount = self::DEFAULT_LIST_COUNT;                            // 表示項目数
236                 $pageNo = $request->trimValueOf('page');                                // ページ番号
237                 if (empty($pageNo)) $pageNo = 1;
238                 
239                 if ($act == 'delete'){          // 項目を参照済みに設定
240                         $listedItem = explode(',', $request->trimValueOf('seriallist'));
241                         $delItems = array();
242                         for ($i = 0; $i < count($listedItem); $i++){
243                                 // 項目がチェックされているかを取得
244                                 $itemName = 'item' . $i . '_selected';
245                                 $itemValue = ($request->trimValueOf($itemName) == 'on') ? 1 : 0;
246                                 
247                                 if ($itemValue){                // チェック項目
248                                         $delItems[] = $listedItem[$i];
249                                 }
250                         }
251                         if (count($delItems) > 0){
252                         /*
253                                 $ret = $this->db->delUserBySerial($delItems);
254                                 if ($ret){              // データ削除成功のとき
255                                         $this->setGuidanceMsg('データを削除しました');
256                                 } else {
257                                         $this->setAppErrorMsg('データ削除に失敗しました');
258                                 }*/
259                         }
260                 }
261                 // 表示するログレベル、ログステータス選択メニュー作成
262                 $this->createLogLevelMenu();
263                 $this->createLogStatusMenu();
264                 
265                 // 総数を取得
266                 $totalCount = $this->db->getOpeLogCount($viewLevel, $this->logStatus);
267
268                 // 表示するページ番号の修正
269                 $pageCount = (int)(($totalCount -1) / $viewCount) + 1;          // 総ページ数
270                 if ($pageNo < 1) $pageNo = 1;
271                 if ($pageNo > $pageCount) $pageNo = $pageCount;
272                 $startNo = ($pageNo -1) * $viewCount +1;                // 先頭の行番号
273                 $endNo = $pageNo * $viewCount > $totalCount ? $totalCount : $pageNo * $viewCount;// 最後の行番号
274                 
275                 // ページング用リンク作成
276                 $pageLink = '';
277                 if ($pageCount > 1){    // ページが2ページ以上のときリンクを作成
278                         for ($i = 1; $i <= $pageCount; $i++){
279                                 if ($i > self::MAX_PAGE_COUNT) break;                   // 最大ページ数以上のときは終了
280                                 if ($i == $pageNo){
281                                         $link = ' ' . $i;
282                                 } else {
283                                         //$link = '&nbsp;<a href="#" onclick="selpage(\'' . $i . '\');return false;">' . $i . '</a>';
284                                         $link = ' <a href="?task=opelog&act=selpage&page=' . $i . '">' . $i . '</a>';
285                                 }
286                                 $pageLink .= $link;
287                         }
288                 }
289                 $this->tmpl->addVar("_widget", "page_link", $pageLink);
290                 $this->tmpl->addVar("_widget", "total_count", sprintf($this->_('%d Total'), $totalCount));
291                 $this->tmpl->addVar("_widget", "page", $pageNo);        // ページ番号
292                 $this->tmpl->addVar("_widget", "view_count", $viewCount);       // 最大表示項目数
293                 $this->tmpl->addVar("search_range", "start_no", $startNo);
294                 $this->tmpl->addVar("search_range", "end_no", $endNo);
295                 if ($totalCount > 0) $this->tmpl->setAttribute('search_range', 'visibility', 'visible');// 検出範囲を表示
296                 
297                 // アクセスログURL
298                 $accessLogUrl = '?task=accesslog_detail&openby=simple';
299                 if (!empty($this->server)) $accessLogUrl .= '&_server=' . $this->server;
300                 $this->tmpl->addVar("_widget", "access_log_url", $accessLogUrl);
301                 
302                 // 運用ログ詳細URL
303                 $this->tmpl->addVar("_widget", "edit_url", '?task=opelog_detail');
304                 
305                 // 運用ログを取得
306                 $this->db->getOpeLogList($viewLevel, $this->logStatus, $viewCount, $pageNo, array($this, 'logListLoop'));
307                 $this->tmpl->addVar("_widget", "serial_list", implode($this->serialArray, ','));// 表示項目のシリアル番号を設定
308                 if (count($this->serialArray) == 0) $this->tmpl->setAttribute('loglist', 'visibility', 'hidden');               // ログがないときは非表示
309         }
310         /**
311          * 詳細画面作成
312          *
313          * @param RequestManager $request               HTTPリクエスト処理クラス
314          * @param                                                               なし
315          */
316         function createDetail($request)
317         {
318                 // 表示条件
319                 $viewCount = $request->trimValueOf('viewcount');// 表示項目数
320                 $page = $request->trimValueOf('page');                          // ページ番号
321                 $logLevel = $request->trimValueOf('loglevel');// 現在のログ表示レベル
322                 $logStatus = $request->trimValueOf('logstatus');// 現在のログ表示ステータス
323                 
324                 $act = $request->trimValueOf('act');
325                 $this->serialNo = $request->trimValueOf('serial');              // 選択項目のシリアル番号
326                 $isMsgChecked = ($request->trimValueOf('item_msgchecked') == 'on') ? 1 : 0;                     // 確認済みかどうか
327                         
328                 $reloadData = false;            // データの再読み込み
329                 if ($act == 'update'){          // 行更新のとき
330                         // 入力チェック
331                         
332                         // エラーなしの場合は、データを更新
333                         if ($this->getMsgCount() == 0){
334                                 $ret = $this->db->updateOpeLogChecked($this->serialNo, $isMsgChecked);
335                                 if ($ret){              // データ追加成功のとき
336                                         //$this->setMsg(self::MSG_GUIDANCE, 'データを更新しました');
337                                         $this->setMsg(self::MSG_GUIDANCE, $this->_('Data updated.'));           // データを更新しました
338                                         $reloadData = true;             // データの再読み込み
339                                 } else {
340                                         //$this->setMsg(self::MSG_APP_ERR, 'データ更新に失敗しました');
341                                         $this->setMsg(self::MSG_APP_ERR, $this->_('Failed in updating data.'));         // データ更新に失敗しました
342                                 }
343                         }
344                 } else {
345                         if (!empty($this->serialNo)) $reloadData = true;                // データの再読み込み
346                 }
347                 if ($reloadData){               // データの再読み込み
348                         // 設定データを取得
349                         $ret = $this->db->getOpeLog($this->serialNo, $row);
350                         if ($ret){
351                                 $iconUrl = '';
352                                 switch ($row['ot_level']){
353                                         case 0:         // 情報
354                                                 $iconUrl = $this->gEnv->getRootUrl() . self::INFO_ICON_FILE;
355                                                 break;
356                                         case 1:         // 操作要求アイコン
357                                                 $iconUrl = $this->gEnv->getRootUrl() . self::ACTION_ICON_FILE;
358                                                 break;
359                                         case 2:         // 注意
360                                                 $iconUrl = $this->gEnv->getRootUrl() . self::NOTICE_ICON_FILE;
361                                                 break;
362                                         case 10:        // 要確認
363                                                 $iconUrl = $this->gEnv->getRootUrl() . self::ERROR_ICON_FILE;
364                                                 break;
365                                         default:
366                                                 break;
367                                 }
368                                 $iconTitle = $row['ot_name'];
369                                 $iconTag = '<img src="' . $this->getUrl($iconUrl) . '" width="' . self::ICON_SIZE . '" height="' . self::ICON_SIZE . '" border="0" alt="' . $iconTitle . '" title="' . $iconTitle . '" />';
370                                 $msgTypeTag = $row['ot_name'];
371                                 // 操作画面リンク
372                                 if (!empty($row['ol_link'])){
373                                         $link = $this->gEnv->getDefaultAdminUrl() . '?' . $row['ol_link'];
374                                         $iconTag = '<a href="'. $this->getUrl($link) .'">' . $iconTag . '</a>';
375                                         $msgTypeTag = '<a href="'. $this->getUrl($link) .'">' . $msgTypeTag . '</a>';
376                                 }
377                                 
378                                 $isMsgChecked = $row['ol_checked'];             // 確認済みかどうか
379                                 $logMsg = $row['ol_message'];           // メッセージ
380                                 $logMsgDetail = $row['ol_message_ext'];// メッセージ詳細
381                                 $logMsgCode = $row['ol_message_code'];// メッセージコード
382                                 $accessLog = '';// アクセスログシリアル番号
383                                 if (!empty($row['ol_access_log_serial'])) $accessLog = $this->convertToDispString($row['ol_access_log_serial']);
384                                 $time = $this->convertToDispDateTime($row['ol_dt']);    // 出力日時
385                         }
386                 }
387                 // 取得データを設定
388                 $this->tmpl->addVar("_widget", "serial", $this->serialNo);
389                 $this->tmpl->addVar("_widget", "type_image", $iconTag);
390                 $this->tmpl->addVar("_widget", "type", $msgTypeTag);
391                 $isChecked = '';
392                 if ($isMsgChecked) $isChecked = 'checked';
393                 $this->tmpl->addVar("_widget", "msg_checked", $isChecked);
394                 $this->tmpl->addVar("_widget", "message", $this->convertToDispString($logMsg));
395                 $this->tmpl->addVar("_widget", "detail", $this->convertToDispString($logMsgDetail));
396                 $this->tmpl->addVar("_widget", "code", $this->convertToDispString($logMsgCode));
397                 $this->tmpl->addVar("_widget", "access_log_serial", $accessLog);
398                 $this->tmpl->addVar("_widget", "time", $time);
399                 
400                 // アクセスログURL
401                 $accessLogUrl = '?task=accesslog_detail&openby=simple';
402                 if (!empty($this->server)) $accessLogUrl .= '&_server=' . $this->server;
403                 $this->tmpl->addVar("_widget", "access_log_url", $accessLogUrl);
404                 
405                 // 一覧の表示条件
406                 $this->tmpl->addVar("_widget", "page", $page);  // ページ番号
407                 $this->tmpl->addVar("_widget", "view_count", $viewCount);       // 最大表示項目数
408                 $this->tmpl->addVar("_widget", "log_level", $logLevel); // ログ表示レベル
409                 $this->tmpl->addVar("_widget", "log_status", $logStatus);       // ログ表示ステータス
410                 
411                 $this->tmpl->setAttribute('update_button', 'visibility', 'visible');// 更新ボタン表示
412                 
413                 // サーバ指定の場合は更新ボタンを使用不可に設定
414                 if (!empty($this->server)){
415                         $this->tmpl->addVar("_widget", "msg_disabled", 'disabled');
416                         $this->tmpl->addVar("update_button", "update_disabled", 'disabled');
417                 }
418         }
419         /**
420          * 運用ログ一覧取得したデータをテンプレートに設定する
421          *
422          * @param int $index                    行番号(0~)
423          * @param array $fetchedRow             フェッチ取得した行
424          * @param object $param                 未使用
425          * @return bool                                 true=処理続行の場合、false=処理終了の場合
426          */
427         function logListLoop($index, $fetchedRow, $param)
428         {
429                 $serial = $fetchedRow['ol_serial'];
430                                 
431                 $msgChecked = '';
432                 if ($fetchedRow['ol_checked']){
433                         $msgChecked = 'checked';
434                 }
435                 // メッセージレベルの設定
436                 $iconUrl = '';
437                 switch ($fetchedRow['ot_level']){
438                         case 0:         // 情報
439                                 $iconUrl = $this->gEnv->getRootUrl() . self::INFO_ICON_FILE;
440                                 break;
441                         case 1:         // 操作要求アイコン
442                                 $iconUrl = $this->gEnv->getRootUrl() . self::ACTION_ICON_FILE;
443                                 break;
444                         case 2:         // 注意
445                                 $iconUrl = $this->gEnv->getRootUrl() . self::NOTICE_ICON_FILE;
446                                 break;
447                         case 10:        // 要確認
448                                 $iconUrl = $this->gEnv->getRootUrl() . self::ERROR_ICON_FILE;
449                                 break;
450                         default:
451                                 break;
452                 }
453                 $iconTitle = $fetchedRow['ot_name'];
454                 $iconTag = '<img src="' . $this->getUrl($iconUrl) . '" width="' . self::ICON_SIZE . '" height="' . self::ICON_SIZE . '" border="0" alt="' . $iconTitle . '" title="' . $iconTitle . '" />';
455                 $accessLog = '';
456                 if (!empty($fetchedRow['ol_access_log_serial'])) $accessLog = $this->convertToDispString($fetchedRow['ol_access_log_serial']);
457                 
458                 // アクセス元のクライアントIP
459                 $ip = $fetchedRow['al_ip'];
460                 $ipStr = $this->convertToDispString($ip);
461                 if ($ip == $this->clientIp){                    // クライアントのIPアドレスと同じときはグリーンで表示
462                         $ipStr = '<font color="green">' . $ipStr . '</font>';
463                 }
464                 
465                 // ブラウザ、プラットフォームの情報を取得
466                 $browserCode = $this->gInstance->getAnalyzeManager()->getBrowserType($fetchedRow['al_user_agent'], $version);
467                 $browserImg = '';
468                 if (!empty($browserCode)){
469                         $iconFile = $this->browserIconFile[$browserCode];
470                         if (!empty($iconFile)){
471                                 $iconTitle = $browserCode;
472                                 $iconUrl = $this->gEnv->getRootUrl() . self::BROWSER_ICON_DIR . $iconFile;
473                                 $browserImg = '<img src="' . $this->getUrl($iconUrl) . '" border="0" alt="' . $iconTitle . '" title="' . $iconTitle . '" />';
474                         }
475                 }
476                 
477                 // メッセージのリンク先
478                 $messageUrl = '?task=opelog_detail&serial=' . $serial;
479                 
480                 // 操作画面リンク
481                 if (!empty($fetchedRow['ol_link'])){
482                         $link = $this->gEnv->getDefaultAdminUrl() . '?' . $fetchedRow['ol_link'];
483                         $iconTag = '<a href="'. $this->getUrl($link) .'">' . $iconTag . '</a>';
484                 }
485                 
486                 $row = array(
487                         'index' => $index,                                                                                                      // 行番号
488                         'serial' => $this->convertToDispString($serial),                        // シリアル番号
489                         'type' => $iconTag,                     // メッセージタイプを示すアイコン
490                         'message' => $this->convertToDispString($fetchedRow['ol_message']),             // メッセージ
491                         'url' => $this->convertUrlToHtmlEntity($messageUrl),                    // メッセージのリンク先
492                         'ip' => $ipStr,         // クライアントIP
493                         'access_log' => $accessLog,             // アクセスログ番号
494                         'browser' => $browserImg,               // ブラウザ
495                         'output_dt' => $this->convertToDispDateTime($fetchedRow['ol_dt']),      // 出力日時
496                         'msg_checked' => $msgChecked,                                                                           // メッセージを確認したかどうか
497                         'selected' => $selected                                                                                         // 項目選択用ラジオボタン
498                 );
499                 $this->tmpl->addVars('loglist', $row);
500                 $this->tmpl->parseTemplate('loglist', 'a');
501                 
502                 // 表示中のコンテンツIDを保存
503                 $this->serialArray[] = $serial;
504                 return true;
505         }
506         /**
507          * 表示ログレベル選択メニュー作成
508          *
509          * @return なし
510          */
511         function createLogLevelMenu()
512         {
513                 for ($i = 0; $i < count($this->logLevelArray); $i++){
514                         $value = $this->logLevelArray[$i]['value'];
515                         $name = $this->logLevelArray[$i]['name'];
516                         
517                         $selected = '';
518                         if ($value == $this->logLevel) $selected = 'selected';
519                         
520                         $row = array(
521                                 'value'    => $value,                   // ログレベル
522                                 'name'     => $name,                    // ログレベル名
523                                 'selected' => $selected                 // 選択中かどうか
524                         );
525                         $this->tmpl->addVars('loglevel_list', $row);
526                         $this->tmpl->parseTemplate('loglevel_list', 'a');
527                 }
528         }
529         /**
530          * 表示ログステータス選択メニュー作成
531          *
532          * @return なし
533          */
534         function createLogStatusMenu()
535         {
536                 for ($i = 0; $i < count($this->logStatusArray); $i++){
537                         $value = $this->logStatusArray[$i]['value'];
538                         $name = $this->logStatusArray[$i]['name'];
539                         
540                         $selected = '';
541                         if ($value == $this->logStatus) $selected = 'selected';
542                         
543                         $row = array(
544                                 'value'    => $value,                   // ログレベル
545                                 'name'     => $name,                    // ログレベル名
546                                 'selected' => $selected                 // 選択中かどうか
547                         );
548                         $this->tmpl->addVars('logstatus_list', $row);
549                         $this->tmpl->parseTemplate('logstatus_list', 'a');
550                 }
551         }
552 }
553 ?>