7 * LICENSE: This source file is licensed under the terms of the GNU General Public License.
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_mainDb.php 5941 2013-04-17 23:17:57Z fishbone $
14 * @link http://www.magic3.org
16 require_once($gEnvManager->getDbPath() . '/baseDb.php');
17 require_once($gEnvManager->getIncludePath() . '/common/userInfo.php'); // ユーザ情報クラス
19 class admin_mainDb extends BaseDb
22 private $userId; // ログイン中のユーザ
23 private $maxNo; // 最大管理番号
24 // const CF_DEFAULT_TEMPLATE = 'default_template'; // システム定義値取得用キー(PC用デフォルトテンプレート)
25 // const CF_DEFAULT_TEMPLATE_MOBILE = 'mobile_default_template'; // システム定義値取得用キー(携帯用デフォルトテンプレート)
28 const CAN_DETAIL_CONFIG = 'permit_detail_config'; // 詳細設定が可能かどうか
33 * @param string $key キーとなる項目値
34 * @return string $value 値
36 function getSystemConfig($key)
39 $queryStr = 'SELECT sc_value FROM _system_config ';
40 $queryStr .= 'WHERE sc_id = ?';
41 $ret = $this->selectRecord($queryStr, array($key), $row);
42 if ($ret) $retValue = $row['sc_value'];
48 * @param string $key キーとなる項目値
49 * @param string $value 値
50 * @return true = 正常、false=異常
52 function updateSystemConfig($key, $value)
55 $this->startTransaction();
57 $queryStr = 'SELECT sc_value FROM _system_config ';
58 $queryStr .= 'WHERE sc_id = ?';
59 $ret = $this->selectRecord($queryStr, array($key), $row);
61 $queryStr = 'UPDATE _system_config ';
62 $queryStr .= 'SET sc_value = ? ';
63 $queryStr .= 'WHERE sc_id = ?';
64 $ret = $this->execStatement($queryStr, array($value, $key));
66 $queryStr = 'INSERT INTO _system_config (';
67 $queryStr .= 'sc_id, ';
68 $queryStr .= 'sc_value ';
69 $queryStr .= ') VALUES (';
72 $ret = $this->execStatement($queryStr, array($key, $value));
75 $ret = $this->endTransaction();
81 * @param string $lang 言語
82 * @param string $key キーとなる項目値
83 * @param string $value 値
84 * @param int $user ユーザID
85 * @return true = 正常、false=異常
87 function updateSiteDef($lang, $key, $value)
89 $now = date("Y/m/d H:i:s"); // 現在日時
90 $user = $this->gEnv->getCurrentUserId(); // 現在のユーザ
93 $this->startTransaction();
96 $historyIndex = 0; // 履歴番号
97 $queryStr = 'SELECT * FROM _site_def ';
98 $queryStr .= 'WHERE sd_id = ? ';
99 $queryStr .= 'AND sd_language_id = ? ';
100 $queryStr .= 'ORDER BY sd_history_index desc ';
101 $ret = $this->selectRecord($queryStr, array($key, $lang), $row);
103 $historyIndex = $row['sd_history_index'] + 1;
105 // レコードが削除されていない場合は削除
106 if (!$row['sd_deleted']){
108 $queryStr = 'UPDATE _site_def ';
109 $queryStr .= 'SET sd_deleted = true, '; // 削除
110 $queryStr .= 'sd_update_user_id = ?, ';
111 $queryStr .= 'sd_update_dt = ? ';
112 $queryStr .= 'WHERE sd_serial = ?';
113 $ret = $this->execStatement($queryStr, array($user, $now, $row['sd_serial']));
114 if (!$ret) return false;
119 $queryStr = 'INSERT INTO _site_def ';
121 $queryStr .= 'sd_id, ';
122 $queryStr .= 'sd_language_id, ';
123 $queryStr .= 'sd_history_index, ';
124 $queryStr .= 'sd_value, ';
125 $queryStr .= 'sd_create_user_id, ';
126 $queryStr .= 'sd_create_dt) ';
127 $queryStr .= 'VALUES ';
128 $queryStr .= '(?, ?, ?, ?, ?, ?)';
129 $ret =$this->execStatement($queryStr, array($key, $lang, $historyIndex, $value, $user, $now));
132 $ret = $this->endTransaction();
138 * @param string $lang 言語
139 * @param string $key キーとなる項目値
142 function getSiteDef($lang, $key)
144 $queryStr = 'SELECT * FROM _site_def ';
145 $queryStr .= 'WHERE sd_deleted = false ';
146 $queryStr .= 'AND sd_id = ? ';
147 $queryStr .= 'AND sd_language_id = ? ';
148 $ret = $this->selectRecord($queryStr, array($key, $lang), $row);
150 return $row['sd_value'];
158 * @return bool true=可能、false=不可
160 function canDetailConfig()
162 $retValue = $this->getSystemConfig(self::CAN_DETAIL_CONFIG);
168 * @param int $type テンプレートのタイプ(0=PC用、1=携帯用、2=スマートフォン)
169 * @param function $callback コールバック関数
172 function getAllWidgetList($type, $callback)
174 // wd_device_typeは後で追加したため、wd_mobileを残しておく
175 $queryStr = 'SELECT * FROM _widgets ';
176 $queryStr .= 'WHERE wd_deleted = false ';// 削除されていない
180 case 2: // スマートフォン用テンプレート
182 $queryStr .= 'AND wd_mobile = false '; // 携帯用以外
183 $queryStr .= 'AND wd_device_type = ? '; $params[] = $type;
186 $queryStr .= 'AND wd_mobile = true '; // 携帯用
189 $queryStr .= 'ORDER BY wd_id';
190 $this->selectLoop($queryStr, $params, $callback);
193 * 管理メニュー項目用ウィジェットリスト(管理画面ありでPC携帯両方)取得
195 * @param function $callback コールバック関数
198 function getAvailableWidgetListForEditMenu($callback)
200 $queryStr = 'select * from _widgets ';
201 $queryStr .= 'where wd_deleted = false ';// 削除されていない
202 $queryStr .= 'and wd_available = true '; // メニューから選択可能なもの
203 $queryStr .= 'and wd_has_admin = true '; // 管理機能あり
204 $queryStr .= 'order by wd_sort_order,wd_id';
205 $this->selectLoop($queryStr, array(), $callback);
208 * ウィジェットリスト(メニューから選択可能なもの)取得
210 * @param function $callback コールバック関数
213 /*function getAvailableWidgetList($callback)
215 $queryStr = 'select * from _widgets ';
216 $queryStr .= 'where wd_deleted = false ';// 削除されていない
217 $queryStr .= 'and wd_available = true '; // メニューから選択可能なもの
218 $queryStr .= 'and wd_mobile = false '; // 携帯用ウィジェット以外
219 $queryStr .= 'order by wd_id';
220 $this->selectLoop($queryStr, array(), $callback);
223 * 携帯用のウィジェットリスト(メニューから選択可能なもの)取得
225 * @param function $callback コールバック関数
228 /*function getAvailableMobileWidgetList($callback)
230 $queryStr = 'select * from _widgets ';
231 $queryStr .= 'where wd_deleted = false ';// 削除されていない
232 $queryStr .= 'and wd_available = true '; // メニューから選択可能なもの
233 $queryStr .= 'and wd_mobile = true '; // 携帯用ウィジェット
234 $queryStr .= 'order by wd_id';
235 $this->selectLoop($queryStr, array(), $callback);
240 * @param array $rows 取得レコード
241 * @return true=取得、false=取得せず
243 function getAllWidgetIdList(&$rows)
245 $queryStr = 'select * from _widgets ';
246 $queryStr .= 'where wd_deleted = false ';// 削除されていない
247 $queryStr .= 'order by wd_id';
249 $retValue = $this->selectRecords($queryStr, array(), $rows);
255 * @param string $id ウィジェットID
256 * @return bool true=存在する、false=存在しない
258 function isExistsWidgetId($id)
260 $queryStr = 'SELECT * FROM _widgets ';
261 $queryStr .= 'WHERE wd_deleted = false ';// 削除されていない
262 $queryStr .= 'AND wd_id = ? ';
263 return $this->isRecordExists($queryStr, array($id));
268 * @param string $id ウィジェットID
269 * @param string $name ウィジェット名
270 * @param int $deviceType 端末タイプ(0=PC用、1=携帯用、2=スマートフォン)
271 * @param bool $readScripts スクリプトディレクトリを自動読み込みするかどうか
272 * @param bool $readCss cssディレクトリを自動読み込みするかどうか
273 * @param bool $hasAdmin 管理画面があるかどうか
276 function addNewWidget($id, $name, $deviceType = 0, $readScripts = false, $readCss = false, $hasAdmin = false)
278 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
279 $now = date("Y/m/d H:i:s"); // 現在日時
281 $mobile = 0; // 携帯端末かどうか
282 if ($deviceType == 1) $mobile = 1;
285 $this->startTransaction();
288 $queryStr = 'select * from _widgets ';
289 $queryStr .= 'where wd_id = ? ';
290 $queryStr .= 'order by wd_history_index desc ';
291 $ret = $this->selectRecord($queryStr, array($id), $row);
293 if (!$row['wd_deleted']){ // レコードが削除されていなければ、削除
295 $queryStr = 'UPDATE _widgets ';
296 $queryStr .= 'SET wd_deleted = true, '; // 削除
297 $queryStr .= 'wd_update_user_id = ?, ';
298 $queryStr .= 'wd_update_dt = ? ';
299 $queryStr .= 'WHERE wd_serial = ?';
300 $this->execStatement($queryStr, array($userId, $now, $row['wd_serial']));
302 $historyIndex = $row['wd_history_index'] + 1;
305 $queryStr = 'INSERT INTO _widgets ';
306 $queryStr .= '(wd_id, wd_history_index, wd_name, wd_device_type, wd_mobile, wd_read_scripts, wd_read_css, wd_has_admin, wd_create_user_id, wd_create_dt) ';
307 $queryStr .= 'VALUES ';
308 $queryStr .= '(?, ?, ?, ?, ?, ?, ?, ?, ?, now())';
309 $this->execStatement($queryStr, array($id, $historyIndex, $name, intval($deviceType), intval($mobile), intval($readScripts), intval($readCss), intval($hasAdmin), $userId));
312 $ret = $this->endTransaction();
317 * @param int $serial シリアル番号
318 * @param string $name ウィジェット名
319 * @param bool $available 利用可能かどうか
320 * @param bool $active ウィジェット実行可能かどうか
321 * @return bool true=成功、false=失敗
323 function updateWidget($serial, $name, $available, $active)
325 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
326 $now = date("Y/m/d H:i:s"); // 現在日時
327 $updateFields = array(); // 更新するフィールド名
328 $boolFields = array(); // boolタイプのフィールド名
329 $updateFields[] = 'wd_language'; // 対応言語ID(「,」区切りで複数指定可)
330 $updateFields[] = 'wd_name'; // ウィジェット名称
331 $updateFields[] = 'wd_type'; // ウィジェット種別(content=コンテンツ表示)
332 $updateFields[] = 'wd_version'; // バージョン文字列
333 $updateFields[] = 'wd_fingerprint'; // ソースコードレベルでウィジェットを識別するためのID
334 $updateFields[] = 'wd_group_id'; // ウィジェットグループ(管理用)
335 $updateFields[] = 'wd_compatible_id'; // 互換ウィジェットID
336 $updateFields[] = 'wd_joomla_class'; // Joomla!テンプレート用のクラス名
337 $updateFields[] = 'wd_suffix'; // HTMLタグのクラス名に付けるサフィックス文字列
338 $updateFields[] = 'wd_params'; // 各種パラメータ
339 $updateFields[] = 'wd_author'; // 作者名
340 $updateFields[] = 'wd_copyright'; // 著作権
341 $updateFields[] = 'wd_license'; // ライセンス
342 $updateFields[] = 'wd_official_level'; // 公認レベル(0=非公認、1=準公認、10=正規公認)
343 $updateFields[] = 'wd_status'; // 状態(0=通常,1=テスト中,-1=廃止予定,-10=廃止)
344 $updateFields[] = 'wd_cache_type'; // キャッシュタイプ(0=不可、1=可、2=非ログイン時可, 3=ページキャッシュのみ可)
345 $updateFields[] = 'wd_cache_lifetime'; // キャッシュの保持時間(分)
346 $updateFields[] = 'wd_view_control_type'; // 表示出力の制御タイプ(-1=固定、0=可変、1=ウィジェットパラメータ可変、2=URLパラメータ可変)
347 $updateFields[] = 'wd_description'; // 説明
348 $updateFields[] = 'wd_url'; // 取得先URL
349 $updateFields[] = 'wd_add_script_lib'; // 追加する共通スクリプトライブラリ(ライブラリ名で指定、「,」区切りで複数指定可)
350 $updateFields[] = 'wd_add_scripts'; // 追加スクリプトファイル(相対パス表記、「,」区切りで複数指定可)
351 $updateFields[] = 'wd_add_css'; // 追加CSSファイル(相対パス表記、「,」区切りで複数指定可)
352 $updateFields[] = 'wd_add_script_lib_a'; // (管理機能用)追加する共通スクリプトライブラリ(ライブラリ名で指定、「,」区切りで複数指定可)
353 $updateFields[] = 'wd_add_scripts_a'; // (管理機能用)追加スクリプトファイル(相対パス表記、「,」区切りで複数指定可)
354 $updateFields[] = 'wd_add_css_a'; // (管理機能用)追加CSSファイル(相対パス表記、「,」区切りで複数指定可)
355 $updateFields[] = 'wd_device_type'; // 端末タイプ(0=PC、1=携帯、2=スマートフォン)
356 $updateFields[] = 'wd_mobile'; $boolFields[] = 'wd_mobile'; // 携帯対応かどうか
357 $updateFields[] = 'wd_show_name'; $boolFields[] = 'wd_show_name'; // ウィジェット名称を表示するかどうか
358 $updateFields[] = 'wd_read_scripts'; $boolFields[] = 'wd_read_scripts'; // スクリプトディレクトリを自動読み込みするかどうか
359 $updateFields[] = 'wd_read_css'; $boolFields[] = 'wd_read_css'; // cssディレクトリを自動読み込みするかどうか
360 $updateFields[] = 'wd_use_ajax'; $boolFields[] = 'wd_use_ajax'; // Ajax共通ライブラリを読み込むかどうか
361 $updateFields[] = 'wd_active'; $boolFields[] = 'wd_active'; // 一般ユーザが実行可能かどうか
362 $updateFields[] = 'wd_available'; $boolFields[] = 'wd_available'; // メニューから選択可能かどうか
363 $updateFields[] = 'wd_editable'; $boolFields[] = 'wd_editable'; // データ編集可能かどうか
364 $updateFields[] = 'wd_has_admin'; $boolFields[] = 'wd_has_admin'; // 管理画面があるかどうか
365 $updateFields[] = 'wd_has_log'; $boolFields[] = 'wd_has_log'; // ログ参照画面があるかどうか
366 $updateFields[] = 'wd_enable_operation'; $boolFields[] = 'wd_enable_operation'; // 単体起動可能かどうか
367 $updateFields[] = 'wd_use_instance_def'; $boolFields[] = 'wd_use_instance_def'; // インスタンス定義が必要かどうか
368 $updateFields[] = 'wd_initialized'; $boolFields[] = 'wd_initialized'; // 初期化完了かどうか
369 $updateFields[] = 'wd_use_cache'; $boolFields[] = 'wd_use_cache'; // キャッシュ機能を使用するかどうか
370 $updateFields[] = 'wd_has_rss'; $boolFields[] = 'wd_has_rss'; // RSS機能があるかどうか
371 $updateFields[] = 'wd_sort_order'; // ソート順
372 $updateFields[] = 'wd_launch_index'; // 遅延実行制御が必要な場合の実行順(0=未設定、0以上=実行順)
373 $updateFields[] = 'wd_install_dt'; // インストール日時
374 $updateFields[] = 'wd_index_file'; // 起動クラスのファイル名
375 $updateFields[] = 'wd_index_class'; // 起動クラス名
376 $updateFields[] = 'wd_admin_file'; // 管理機能起動クラスのファイル名
377 $updateFields[] = 'wd_admin_class'; // 管理機能起動クラス名
378 $updateFields[] = 'wd_db'; // 対応DB種(mysql,pgsql等を「,」区切りで指定)
379 $updateFields[] = 'wd_table_access_type'; // テーブルのアクセス範囲(0=テーブル未使用、1=共通テーブルのみ、2=独自テーブル)
382 $this->startTransaction();
384 // 指定のシリアルNoのレコードが削除状態でないかチェック
385 $historyIndex = 0; // 履歴番号
386 $queryStr = 'select * from _widgets ';
387 $queryStr .= 'where wd_serial = ? ';
388 $ret = $this->selectRecord($queryStr, array($serial), $row);
389 if ($ret){ // 既に登録レコードがあるとき
390 if ($row['wd_deleted']){ // レコードが削除されていれば終了
391 $this->endTransaction();
394 $historyIndex = $row['wd_history_index'] + 1;
395 } else { // 存在しない場合は終了
396 $this->endTransaction();
401 $queryStr = 'UPDATE _widgets ';
402 $queryStr .= 'SET wd_deleted = true, '; // 削除
403 $queryStr .= 'wd_update_user_id = ?, ';
404 $queryStr .= 'wd_update_dt = ? ';
405 $queryStr .= 'WHERE wd_serial = ?';
406 $this->execStatement($queryStr, array($userId, $now, $serial));
408 // ##### データ更新処理 #####
410 $newParams = array();
411 $newParams['wd_name'] = $name;
412 $newParams['wd_available'] = intval($available);
413 $newParams['wd_active'] = intval($active);
414 $keys = array_keys($newParams);// キーを取得
417 $queryStr = 'INSERT INTO _widgets (';
418 $queryStr .= 'wd_id, ';
419 $queryStr .= 'wd_history_index, ';
420 $valueStr = '(?, ?, ';
421 $values = array($row['wd_id'], $historyIndex);
423 for ($i = 0; $i < count($keys); $i++){
424 $queryStr .= $keys[$i] . ', ';
426 $values[] = $newParams[$keys[$i]];
430 if ($this->getDbType() == M3_DB_TYPE_PGSQL){// PostgreSQLの場合
431 for ($i = 0; $i < count($updateFields); $i++){
432 $fieldName = $updateFields[$i];
433 if (!in_array($fieldName, $keys)){ // フィールドがないとき
434 $queryStr .= $fieldName . ', ';
436 if (in_array($fieldName, $boolFields)){
437 $values[] = intval($row[$fieldName]);
439 $values[] = $row[$fieldName];
444 for ($i = 0; $i < count($updateFields); $i++){
445 $fieldName = $updateFields[$i];
446 if (!in_array($fieldName, $keys)){ // フィールドがないとき
447 $queryStr .= $fieldName . ', ';
449 $values[] = $row[$fieldName];
455 $queryStr .= 'wd_create_user_id, wd_create_dt) ';
456 $valueStr .= '?, ?)';
457 $values = array_merge($values, array($userId, $now));
458 $queryStr .= 'VALUES ';
459 $queryStr .= $valueStr;
460 $this->execStatement($queryStr, $values);
463 $ret = $this->endTransaction();
469 * @param string $serial シリアル番号
470 * @return true=成功、false=失敗
472 function deleteWidget($serial)
474 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
475 $now = date("Y/m/d H:i:s"); // 現在日時
478 $this->startTransaction();
480 // 指定のシリアルNoのレコードが削除状態でないかチェック
481 $queryStr = 'select * from _widgets ';
482 $queryStr .= 'WHERE wd_serial = ? ';
483 $queryStr .= 'and wd_deleted = false';
484 $ret = $this->selectRecord($queryStr, array($serial), $row);
485 if (!$ret){ // 登録レコードがないとき
486 $this->endTransaction();
491 $queryStr = 'UPDATE _widgets ';
492 $queryStr .= 'SET wd_deleted = true, '; // 削除
493 $queryStr .= 'wd_update_user_id = ?, ';
494 $queryStr .= 'wd_update_dt = ? ';
495 $queryStr .= 'WHERE wd_serial = ?';
496 $this->execStatement($queryStr, array($userId, $now, $serial));
499 $ret = $this->endTransaction();
505 * @param string $serial シリアル番号
506 * @param array $row 取得データ
507 * @return true=正常、false=異常
509 function getWidget($serial, &$row)
511 $queryStr = 'select * from _widgets ';
512 $queryStr .= 'where wd_serial = ? ';
513 $ret = $this->selectRecord($queryStr, array($serial), $row);
519 * @param string $id ウィジェットID
520 * @return bool true=初期済み、false=未初期化
522 function isWidgetInitialized($id)
524 $queryStr = 'SELECT * from _widgets ';
525 $queryStr .= 'WHERE wd_deleted = false ';// 削除されていない
526 $queryStr .= 'AND wd_id = ?';
527 $ret = $this->selectRecord($queryStr, array($id), $row);
528 if ($ret && $row['wd_initialized']){
537 * @param string $id ウィジェットID
538 * @param bool $init 初期化状態
539 * @return bool true=成功、false=失敗
541 function updateIsWidgetInitialized($id, $init)
543 $now = date("Y/m/d H:i:s"); // 現在日時
544 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
547 $this->startTransaction();
549 $queryStr = 'SELECT * from _widgets ';
550 $queryStr .= 'WHERE wd_deleted = false ';// 削除されていない
551 $queryStr .= 'AND wd_id = ?';
552 $ret = $this->selectRecord($queryStr, array($id), $row);
553 if (!$ret){ // 登録レコードがないとき
554 $this->endTransaction();
559 $queryStr = 'UPDATE _widgets ';
560 $queryStr .= 'SET wd_initialized = ?, '; // 初期化状態
561 $queryStr .= 'wd_update_user_id = ?, ';
562 $queryStr .= 'wd_update_dt = ? ';
563 $queryStr .= 'WHERE wd_serial = ?';
564 $this->execStatement($queryStr, array(intval($init), $userId, $now, $row['wd_serial']));
567 $ret = $this->endTransaction();
573 * @param function $callback コールバック関数
574 * @param int $type リストの種別
575 * @param int $filter データのフィルタリング(-1=PC携帯スマートフォンに関係なく取得、0=PC用のみ、1=携帯用のみ、2=スマートフォン用のみ)
578 function getPageIdList($callback, $type, $filter = -1)
580 $params = array($type);
581 $queryStr = 'SELECT * FROM _page_id ';
582 $queryStr .= 'WHERE pg_type = ? ';
584 // pg_device_typeは後で追加したため、pg_mobileを残しておく
585 if ($filter != 1){ // 携帯以外のとき
586 $queryStr .= 'AND pg_device_type = ? '; $params[] = $filter;
589 $queryStr .= 'AND pg_mobile = ? ';
591 if ($filter == 1) $mobile = 1; // 携帯のとき
594 $queryStr .= 'ORDER BY pg_priority';
595 $this->selectLoop($queryStr, $params, $callback);
600 * @param int $type リストの種別(0=ページメインID,1=ページサブID)
601 * @param string $pageId ページID
602 * @param array $row 取得データ
603 * @return bool true=成功、false=失敗
605 function getPageIdRecord($type, $pageId, &$row)
607 $queryStr = 'SELECT * FROM _page_id ';
608 $queryStr .= 'WHERE pg_type = ? ';
609 $queryStr .= 'AND pg_id = ?';
610 return $this->selectRecord($queryStr, array($type, $pageId), $row);
615 * @param int $type リストの種別(0=ページメインID,1=ページサブID)
616 * @param array $row 取得データ
617 * @return bool true=成功、false=失敗
619 function getPageIdRecords($type, &$row)
621 $queryStr = 'select * from _page_id ';
622 $queryStr .= 'where pg_type = ? ';
623 $queryStr .= 'order by pg_priority';
624 return $this->selectRecords($queryStr, array($type), $row);
629 * @param string $pageId ページID
630 * @param string $langId 言語ID
631 * @param function $callback コールバック関数
634 function getPageSubIdList($pageId, $langId, $callback)
636 //$queryStr = 'SELECT * FROM _page_info RIGHT JOIN _page_id ON pn_sub_id = pg_id AND pg_type = 1 AND pn_deleted = false AND pn_id = ? ';
637 $queryStr = 'SELECT * FROM _page_info RIGHT JOIN _page_id ON pn_sub_id = pg_id AND pg_type = 1 AND pn_deleted = false AND pn_id = ? AND pn_language_id = ? ';// 2010/2/23更新
638 $queryStr .= 'WHERE (pn_deleted IS NULL ';
639 $queryStr .= 'AND pg_type = 1) '; // サブページID
640 $queryStr .= 'OR pn_deleted = false ';
641 $queryStr .= 'ORDER BY pg_priority';
642 $this->selectLoop($queryStr, array($pageId, $langId), $callback);
645 * ウィジェットが配置されているページサブIDのリストを取得
647 * @param string $pageId ページID
648 * @param function $callback コールバック関数
649 * @param int $setId 定義セットID
652 function getPageSubIdListWithWidget($pageId, $callback, $setId = 0)
654 $queryStr = 'SELECT DISTINCT pg_id, pg_name, pn_content_type FROM _page_def LEFT JOIN _page_id ON pd_sub_id = pg_id AND pg_type = 1 ';// ページサブID
655 $queryStr .= 'LEFT JOIN _page_info ON pd_id = pn_id AND pd_sub_id = pn_sub_id AND pn_deleted = false AND pn_language_id = \'\' ';
656 $queryStr .= 'WHERE pd_id = ? ';
657 $queryStr .= 'AND pd_sub_id != \'\' '; // 共通でないウィジェットが配置されている
658 $queryStr .= 'AND pd_set_id = ? ';
659 $queryStr .= 'AND pg_visible = true '; // 外部公開可能なページ
660 $queryStr .= 'AND pg_active = true '; // 外部公開可能なページ
661 $queryStr .= 'ORDER BY pg_priority';
662 $this->selectLoop($queryStr, array($pageId, $setId), $callback);
667 * @param string $pageId ページID
668 * @param string $pageSubId ページサブID
669 * @param array $row 取得データ
670 * @param string $langId 言語ID
671 * @return true=正常、false=異常
673 function getPageInfo($pageId, $pageSubId, &$row, $langId = '')
675 $queryStr = 'SELECT * FROM _page_info RIGHT JOIN _page_id ON pn_sub_id = pg_id AND pg_type = 1 AND pn_deleted = false AND pn_id = ? AND pn_language_id = ? ';// 2010/2/23更新
676 $queryStr .= 'WHERE (pn_deleted IS NULL ';
677 $queryStr .= 'AND pg_type = 1 AND pg_id = ?) '; // サブページID
678 $queryStr .= 'OR (pn_deleted = false ';
679 $queryStr .= 'AND pn_sub_id = ?) '; // サブページID
680 $ret = $this->selectRecord($queryStr, array($pageId, $langId, $pageSubId, $pageSubId), $row);
686 * @param string $pageId ページID
687 * @param string $pageSubId ページサブID
688 * @param string $contentType コンテンツタイプ
689 * @param string $template テンプレートID
690 * @param int $authType アクセス制御タイプ(0=管理者のみ、1=制限なし、2=ログインユーザ)
691 * @param bool $ssl SSLを使用するかどうか
692 * @param bool $userLimited ユーザ制限するかどうか
693 * @return true = 正常、false=異常
695 function updatePageInfo($pageId, $pageSubId, $contentType='', $template='', $authType=0, $ssl = false, $userLimited = false)
697 $now = date("Y/m/d H:i:s"); // 現在日時
698 $user = $this->gEnv->getCurrentUserId(); // 現在のユーザ
704 $this->startTransaction();
706 // コンテンツタイプが指定されている場合は、他のデータのコンテンツタイプをクリア
707 if (!empty($contentType)){
708 $queryStr = 'UPDATE _page_info ';
709 $queryStr .= 'SET pn_content_type = \'\', '; // コンテンツタイプをクリア
710 $queryStr .= 'pn_update_user_id = ?, ';
711 $queryStr .= 'pn_update_dt = ? ';
712 $queryStr .= 'WHERE pn_deleted = false ';
713 $queryStr .= 'AND pn_id = ? '; // ページID
714 $queryStr .= 'AND pn_content_type = ? '; // コンテンツタイプ
715 $queryStr .= 'AND pn_language_id = ? '; // 言語ID(2010/2/23追加)
716 $this->execStatement($queryStr, array($user, $now, $pageId, $contentType, ''/*言語なし*/));
719 // 指定のレコードの履歴インデックス取得
720 $historyIndex = 0; // 履歴番号
721 $queryStr = 'SELECT * FROM _page_info ';
722 $queryStr .= 'WHERE pn_id = ? ';
723 $queryStr .= 'AND pn_sub_id = ? ';
724 $queryStr .= 'AND pn_language_id = ? '; // 言語ID(2010/2/23追加)
725 $queryStr .= 'ORDER BY pn_history_index DESC ';
726 $ret = $this->selectRecord($queryStr, array($pageId, $pageSubId, ''/*言語なし*/), $row);
728 $historyIndex = $row['pn_history_index'] + 1;
729 $metaTitle = $row['pn_meta_title'];
730 $metaDesc = $row['pn_meta_description'];
731 $metaKeyword = $row['pn_meta_keywords'];
733 // レコードが削除されていない場合は削除
734 if (!$row['pn_deleted']){
736 $queryStr = 'UPDATE _page_info ';
737 $queryStr .= 'SET pn_deleted = true, '; // 削除
738 $queryStr .= 'pn_update_user_id = ?, ';
739 $queryStr .= 'pn_update_dt = ? ';
740 $queryStr .= 'WHERE pn_serial = ?';
741 $ret = $this->execStatement($queryStr, array($user, $now, $row['pn_serial']));
743 $this->endTransaction();
750 $queryStr = 'INSERT INTO _page_info ';
752 $queryStr .= 'pn_id, ';
753 $queryStr .= 'pn_sub_id, ';
754 $queryStr .= 'pn_language_id, ';// 言語ID(2010/2/23追加)
755 $queryStr .= 'pn_history_index, ';
756 $queryStr .= 'pn_template_id, ';
757 $queryStr .= 'pn_meta_title, ';
758 $queryStr .= 'pn_meta_description, ';
759 $queryStr .= 'pn_meta_keywords, ';
760 $queryStr .= 'pn_content_type, ';
761 $queryStr .= 'pn_auth_type, ';
762 $queryStr .= 'pn_use_ssl, ';
763 $queryStr .= 'pn_user_limited, ';
764 $queryStr .= 'pn_create_user_id, ';
765 $queryStr .= 'pn_create_dt) ';
766 $queryStr .= 'VALUES ';
767 $queryStr .= '(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
768 $ret =$this->execStatement($queryStr, array($pageId, $pageSubId, ''/*言語なし*/, $historyIndex, $template, $metaTitle, $metaDesc, $metaKeyword, $contentType, $authType, intval($ssl), intval($userLimited), $user, $now));
771 $ret = $this->endTransaction();
777 * @param string $pageId ページID
778 * @param string $pageSubId ページサブID
779 * @param string $langId 言語ID
780 * @param string $metaTitle METAタグ、タイトル
781 * @param string $metaDesc METAタグ、ページ要約
782 * @param string $metaKeyword METAタグ、検索用キーワード
783 * @param string $headOthers HEADタグ、その他
784 * @return true = 正常、false=異常
786 function updatePageHead($pageId, $pageSubId, $langId, $metaTitle='', $metaDesc='', $metaKeyword='', $headOthers='')
788 $now = date("Y/m/d H:i:s"); // 現在日時
789 $user = $this->gEnv->getCurrentUserId(); // 現在のユーザ
790 $template = ''; // テンプレートID
794 $userLimited = false;
797 $this->startTransaction();
799 // 指定のレコードの履歴インデックス取得
800 $historyIndex = 0; // 履歴番号
801 $queryStr = 'SELECT * FROM _page_info ';
802 $queryStr .= 'WHERE pn_id = ? ';
803 $queryStr .= 'AND pn_sub_id = ? ';
804 $queryStr .= 'AND pn_language_id = ? '; // 言語ID(2010/2/23追加)
805 $queryStr .= 'ORDER BY pn_history_index DESC ';
806 $ret = $this->selectRecord($queryStr, array($pageId, $pageSubId, $langId), $row);
808 $historyIndex = $row['pn_history_index'] + 1;
809 $template = $row['pn_template_id']; // テンプレートID
810 $contentType = $row['pn_content_type'];
811 $authType = $row['pn_auth_type'];
812 $ssl = $row['pn_use_ssl'];
813 $userLimited = $row['pn_user_limited'];
815 // レコードが削除されていない場合は削除
816 if (!$row['pn_deleted']){
818 $queryStr = 'UPDATE _page_info ';
819 $queryStr .= 'SET pn_deleted = true, '; // 削除
820 $queryStr .= 'pn_update_user_id = ?, ';
821 $queryStr .= 'pn_update_dt = ? ';
822 $queryStr .= 'WHERE pn_serial = ?';
823 $ret = $this->execStatement($queryStr, array($user, $now, $row['pn_serial']));
825 $this->endTransaction();
832 $queryStr = 'INSERT INTO _page_info ';
834 $queryStr .= 'pn_id, ';
835 $queryStr .= 'pn_sub_id, ';
836 $queryStr .= 'pn_language_id, ';// 言語ID(2010/2/23追加)
837 $queryStr .= 'pn_history_index, ';
838 $queryStr .= 'pn_template_id, ';
839 $queryStr .= 'pn_meta_title, ';
840 $queryStr .= 'pn_meta_description, ';
841 $queryStr .= 'pn_meta_keywords, ';
842 $queryStr .= 'pn_head_others, ';
843 $queryStr .= 'pn_content_type, ';
844 $queryStr .= 'pn_auth_type, ';
845 $queryStr .= 'pn_use_ssl, ';
846 $queryStr .= 'pn_user_limited, ';
847 $queryStr .= 'pn_create_user_id, ';
848 $queryStr .= 'pn_create_dt) ';
849 $queryStr .= 'VALUES ';
850 $queryStr .= '(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
851 $ret =$this->execStatement($queryStr, array($pageId, $pageSubId, $langId, $historyIndex, $template, $metaTitle, $metaDesc, $metaKeyword, $headOthers, $contentType, $authType, intval($ssl), intval($userLimited), $user, $now));
854 $ret = $this->endTransaction();
860 * @param int $type ページタイプ(0=ページID,1=ページサブID)
861 * @param string $id ID
862 * @param string $name 名前
863 * @param string $desc 説明
864 * @param int $priority 優先度
865 * @param bool $active 有効かどうか
866 * @return true=成功、false=失敗
868 function updatePageId($type, $id, $name, $desc, $priority, $active)
871 $this->startTransaction();
873 $ret = $this->isExistsPageId($type, $id);
874 if ($ret){ // データが存在する場合
876 $queryStr = 'UPDATE _page_id ';
878 $queryStr .= 'pg_name = ?, ';
879 $queryStr .= 'pg_description = ?, ';
880 $queryStr .= 'pg_priority = ?, ';
881 $queryStr .= 'pg_active = ? ';
882 $queryStr .= 'WHERE pg_id = ? ';
883 $queryStr .= 'AND pg_type = ? ';
884 $this->execStatement($queryStr, array($name, $desc, $priority, intval($active), $id, $type));
887 $queryStr = 'INSERT INTO _page_id (';
888 $queryStr .= 'pg_id, ';
889 $queryStr .= 'pg_type, ';
890 $queryStr .= 'pg_name, ';
891 $queryStr .= 'pg_description, ';
892 $queryStr .= 'pg_priority, ';
893 $queryStr .= 'pg_active ';
894 $queryStr .= ') VALUES (';
901 $this->execStatement($queryStr, array($id, $type, $name, $desc, $priority, intval($active)));
905 $ret = $this->endTransaction();
911 * @param int $type リストの種別
912 * @param string $id ID
913 * @return bool true=存在する、false=存在しない
915 function isExistsPageId($type, $id)
917 $queryStr = 'SELECT * FROM _page_id ';
918 $queryStr .= 'WHERE pg_type = ? ';
919 $queryStr .= 'AND pg_id = ? ';
920 return $this->isRecordExists($queryStr, array($type, $id));
925 * @param int $type リストの種別
926 * @param string $id ID
927 * @return bool true=存在する、false=存在しない
929 function deletePageId($type, $id)
932 $this->startTransaction();
934 $queryStr = 'DELETE FROM _page_id ';
935 $queryStr .= 'WHERE pg_type = ? ';
936 $queryStr .= 'AND pg_id = ? ';
937 $this->execStatement($queryStr, array($type, $id));
940 $ret = $this->endTransaction();
946 * @param function $callback コールバック関数
949 function getPagePositionList($callback)
951 $queryStr = 'select * from _template_position ';
952 $queryStr .= 'order by tp_sort_order';
953 $this->selectLoop($queryStr, array(), $callback);
958 * @param function $callback コールバック関数
959 * @param string $pageId ページID
960 * @param string $pageSubId ページサブID
961 * @param string $position 表示位置。空文字列のときはすべて取得。
962 * @param int $setId 定義セットID
965 function getPageDefList($callback, $pageId, $pageSubId, $position = '', $setId = 0)
967 $queryStr = 'select * from _page_def left join _widgets on pd_widget_id = wd_id and wd_deleted = false ';
968 $queryStr .= 'where pd_id = ? ';
969 $queryStr .= 'and (pd_sub_id = ? or pd_sub_id = \'\') '; // 空の場合は共通項目
970 $queryStr .= 'and pd_set_id = ? ';
971 if (empty($position)){
972 $queryStr .= 'order by pd_position_id, pd_index';
973 $this->selectLoop($queryStr, array($pageId, $pageSubId, $setId), $callback);
975 $queryStr .= 'and pd_position_id = ? ';
976 $queryStr .= 'order by pd_position_id, pd_index';
977 $this->selectLoop($queryStr, array($pageId, $pageSubId, $setId, $position), $callback);
983 * @param string $pageId ページID
984 * @param string $pageSubId ページサブID
985 * @param string $position 表示位置
986 * @param int $index 表示インデックス
987 * @param int $setId 定義セットID
988 * @return bool true=存在する、false=存在しない
991 function isPageDefExists($pageId, $pageSubId, $position, $index, $setId = 0)
993 $queryStr = 'select * from _page_def ';
994 $queryStr .= 'where pd_id = ? ';
995 $queryStr .= 'and pd_sub_id = ? ';
996 $queryStr .= 'and pd_position_id = ? ';
997 $queryStr .= 'and pd_index = ? ';
998 return $this->isRecordExists($queryStr, array($pageId, $pageSubId, $position, $index));
1003 * @param int $serialNo シリアルNo
1004 * @param array $rows 更新データ
1005 * @return bool true=存在する、false=存在しない
1007 function getPageDef($serialNo, &$row)
1009 $queryStr = 'SELECT * FROM _page_def LEFT JOIN _widgets on pd_widget_id = wd_id AND wd_deleted = false ';
1010 $queryStr .= 'WHERE pd_serial = ?';
1011 return $this->selectRecord($queryStr, array($serialNo), $row);
1016 * @param int $serialNo シリアルNo(0のとき新規追加)
1017 * @param string $pageId ページID
1018 * @param string $pageSubId ページサブID
1019 * @param string $position 表示位置
1020 * @param int $index 表示インデックスNo
1021 * @param string $widgetId ウィジェットID
1022 * @param int $configId 定義ID
1023 * @param string $suffix サフィックス
1024 * @param string $style css
1025 * @param bool $visible 表示状態
1026 * @param int $userId ユーザID(データ更新者)
1027 * @param int $setId 定義セットID
1028 * @return true=成功、false=失敗
1030 function updatePageDef($serialNo, $pageId, $pageSubId, $position, $index, $widgetId, $configId, $suffix, $style, $visible, $userId, $setId = 0)
1033 $this->now = date("Y/m/d H:i:s"); // 現在日時
1034 $this->userId = $userId;
1035 $editable = 1; // 編集可能
1038 $this->startTransaction();
1040 if ($serialNo == 0){ // 新規追加
1042 $queryStr = 'INSERT INTO _page_def (';
1043 $queryStr .= 'pd_id, ';
1044 $queryStr .= 'pd_sub_id, ';
1045 $queryStr .= 'pd_set_id, ';
1046 $queryStr .= 'pd_position_id, ';
1047 $queryStr .= 'pd_index, ';
1048 $queryStr .= 'pd_widget_id, ';
1049 $queryStr .= 'pd_config_id, ';
1050 $queryStr .= 'pd_suffix, ';
1051 $queryStr .= 'pd_style, ';
1052 $queryStr .= 'pd_visible, ';
1053 $queryStr .= 'pd_editable, ';
1054 $queryStr .= 'pd_update_user_id, ';
1055 $queryStr .= 'pd_update_dt) ';
1056 $queryStr .= 'VALUES (';
1070 $this->execStatement($queryStr, array($pageId, $pageSubId, $setId, $position, $index,
1071 $widgetId, $configId, $suffix, $style, $visible, $editable, $this->userId, $this->now));
1073 $queryStr = 'select * from _page_def ';
1074 $queryStr .= 'where pd_serial = ? ';
1075 $ret = $this->selectRecord($queryStr, array($serialNo), $row);
1077 if ($row['pd_id'] != $pageId || $row['pd_sub_id'] != $pageSubId){ // 表示ページが変更された
1078 // 新規に追加して、古いレコードを削除
1080 $queryStr = 'INSERT INTO _page_def (';
1081 $queryStr .= 'pd_id, ';
1082 $queryStr .= 'pd_sub_id, ';
1083 $queryStr .= 'pd_set_id, ';
1084 $queryStr .= 'pd_position_id, ';
1085 $queryStr .= 'pd_index, ';
1086 $queryStr .= 'pd_widget_id, ';
1087 $queryStr .= 'pd_config_id, ';
1088 $queryStr .= 'pd_suffix, ';
1089 $queryStr .= 'pd_style, ';
1090 $queryStr .= 'pd_visible, ';
1091 $queryStr .= 'pd_editable, ';
1092 $queryStr .= 'pd_update_user_id, ';
1093 $queryStr .= 'pd_update_dt) ';
1094 $queryStr .= 'VALUES (';
1108 $this->execStatement($queryStr, array($pageId, $pageSubId, $row['pd_set_id'], $position, $index,
1109 $widgetId, $configId, $suffix, $style, $visible, $editable, $this->userId, $this->now));
1112 $queryStr = 'DELETE FROM _page_def WHERE pd_serial = ?';
1113 $this->execStatement($queryStr, array($serialNo));
1116 $queryStr = 'UPDATE _page_def ';
1117 $queryStr .= 'SET ';
1118 $queryStr .= 'pd_position_id = ?, ';
1119 $queryStr .= 'pd_index = ?, ';
1120 $queryStr .= 'pd_widget_id = ?, ';
1121 $queryStr .= 'pd_config_id = ?, ';
1122 $queryStr .= 'pd_suffix = ?, ';
1123 $queryStr .= 'pd_style = ?, ';
1124 $queryStr .= 'pd_visible = ?, ';
1125 $queryStr .= 'pd_editable = ?, ';
1126 $queryStr .= 'pd_update_user_id = ?, ';
1127 $queryStr .= 'pd_update_dt = ? ';
1128 $queryStr .= 'WHERE pd_serial = ? ';
1129 $this->execStatement($queryStr, array($position, $index,
1130 $widgetId, $configId, $suffix, $style, $visible, $editable, $this->userId, $this->now, $serialNo));
1136 $ret = $this->endTransaction();
1142 * @param int $serialNo シリアルNo
1143 * @param string $style スタイル値
1144 * @param string $title タイトル
1145 * @param bool $titleVisible タイトルを表示するかどうか
1146 * @param bool $useRender Joomla!の描画処理を使用するかどうか
1147 * @param string $topContent 補助コンテンツ(上)
1148 * @param string $bottomContent 補助コンテンツ(下)
1149 * @param bool $showReadmore もっと読むボタンを表示するかどうか
1150 * @param string $readmoreTitle もっと読むボタンタイトル
1151 * @param string $readmoreUrl もっと読むリンク先URL
1152 * @return true=成功、false=失敗
1154 function updatePageDefInfo($serialNo, $style, $title, $titleVisible, $useRender, $topContent, $bottomContent, $showReadmore, $readmoreTitle, $readmoreUrl)
1156 $now = date("Y/m/d H:i:s"); // 現在日時
1157 $user = $this->gEnv->getCurrentUserId(); // 現在のユーザ
1160 $this->startTransaction();
1163 $queryStr = 'UPDATE _page_def ';
1164 $queryStr .= 'SET ';
1165 $queryStr .= 'pd_style = ?, ';
1166 $queryStr .= 'pd_title = ?, ';
1167 $queryStr .= 'pd_title_visible = ?, ';
1168 $queryStr .= 'pd_use_render = ?, ';
1169 $queryStr .= 'pd_top_content = ?, ';
1170 $queryStr .= 'pd_bottom_content = ?, ';
1171 $queryStr .= 'pd_show_readmore = ?, ';
1172 $queryStr .= 'pd_readmore_title = ?, ';
1173 $queryStr .= 'pd_readmore_url = ?, ';
1174 $queryStr .= 'pd_update_user_id = ?, ';
1175 $queryStr .= 'pd_update_dt = ? ';
1176 $queryStr .= 'WHERE pd_serial = ? ';
1177 $ret = $this->execStatement($queryStr, array($style, $title, intval($titleVisible), intval($useRender), $topContent, $bottomContent, intval($showReadmore), $readmoreTitle, $readmoreUrl, $user, $now, $serialNo));
1180 $ret = $this->endTransaction();
1186 * @param int $serialNo シリアルNo
1187 * @param array $updateData 更新データ(キー=フィールド名、値=更新値の配列)
1188 * @return true=成功、false=失敗
1190 function updatePageDefRecord($serialNo, $updateData)
1192 $now = date("Y/m/d H:i:s"); // 現在日時
1193 $user = $this->gEnv->getCurrentUserId(); // 現在のユーザ
1195 $keys = array_keys($updateData);// キーを取得
1198 $this->startTransaction();
1201 $queryStr = 'UPDATE _page_def ';
1202 $queryStr .= 'SET ';
1203 for ($i = 0; $i < count($keys); $i++){
1204 $queryStr .= $keys[$i] . ' = ?, ';
1205 $param[] = $updateData[$keys[$i]];
1207 $queryStr .= 'pd_update_user_id = ?, ';
1208 $queryStr .= 'pd_update_dt = ? ';
1209 $queryStr .= 'WHERE pd_serial = ? ';
1210 $ret = $this->execStatement($queryStr, array_merge($param, array($user, $now, $serialNo)));
1213 $ret = $this->endTransaction();
1219 * @param string $pageId ページID
1220 * @param string $pageSubId ページサブID
1221 * @param int $serial シリアル番号
1222 * @param int $shared 共通属性
1223 * @return bool true=成功、false=失敗
1225 function toggleSharedWidget($pageId, $pageSubId, $serial, $shared)
1227 $now = date("Y/m/d H:i:s"); // 現在日時
1228 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
1231 $this->startTransaction();
1234 $queryStr = 'SELECT * FROM _page_def ';
1235 $queryStr .= 'WHERE pd_serial = ? ';
1236 $ret = $this->selectRecord($queryStr, array($serial), $row);
1238 if (empty($shared)){ // 単独ウィジェットのとき
1239 $newPageSubId = $pageSubId;
1245 $queryStr = 'UPDATE _page_def ';
1246 $queryStr .= 'SET ';
1247 $queryStr .= 'pd_sub_id = ?, ';
1248 $queryStr .= 'pd_update_user_id = ?, ';
1249 $queryStr .= 'pd_update_dt = ? ';
1250 $queryStr .= 'WHERE pd_serial = ? ';
1251 $this->execStatement($queryStr, array($newPageSubId, $userId, $now, $serial));
1253 $this->endTransaction();
1258 $ret = $this->endTransaction();
1264 * @param int $serialNo シリアルNo
1265 * @param int $userId ユーザID(データ更新者)
1266 * @return true=成功、false=失敗
1268 function delPageDef($serialNo, $userId)
1271 $this->now = date("Y/m/d H:i:s"); // 現在日時
1272 $this->userId = $userId;
1275 $this->startTransaction();
1277 $queryStr = 'DELETE FROM _page_def WHERE pd_serial = ?';
1278 $this->execStatement($queryStr, array($serialNo));
1281 $ret = $this->endTransaction();
1288 * @param string $pageId ページID
1289 * @param string $pageSubId ページサブID
1290 * @param string $position 表示ポジション
1291 * @param bool $withCommon 共通項目も削除するかどうか
1292 * @param int $setId 定義セットID
1293 * @return true=成功、false=失敗
1295 function delPageDefAll($pageId, $pageSubId, $position, $withCommon, $setId = 0)
1298 $this->startTransaction();
1300 if (empty($position)){
1301 $queryStr = 'DELETE FROM _page_def ';
1302 $queryStr .= 'WHERE pd_id = ? ';
1304 $queryStr .= 'and (pd_sub_id = ? or pd_sub_id = \'\') '; // 空の場合は共通項目
1306 $queryStr .= 'and pd_sub_id = ? '; // 空の場合は共通項目
1308 $queryStr .= 'and pd_set_id = ? ';
1309 $this->execStatement($queryStr, array($pageId, $pageSubId, $setId));
1311 $queryStr = 'DELETE FROM _page_def ';
1312 $queryStr .= 'WHERE pd_id = ? ';
1314 $queryStr .= 'and (pd_sub_id = ? or pd_sub_id = \'\') '; // 空の場合は共通項目
1316 $queryStr .= 'and pd_sub_id = ? '; // 空の場合は共通項目
1318 $queryStr .= 'and pd_position_id = ? ';
1319 $queryStr .= 'and pd_set_id = ? ';
1320 $this->execStatement($queryStr, array($pageId, $pageSubId, $position, $setId));
1324 $ret = $this->endTransaction();
1330 * @param int $limit 取得する項目数
1331 * @param int $page 取得するページ(1~)
1332 * @param function $callback コールバック関数
1335 function getAllUserList($limit, $page, $callback)
1337 $offset = $limit * ($page -1);
1338 if ($offset < 0) $offset = 0;
1340 $queryStr = 'SELECT * FROM _login_user LEFT JOIN _login_log on lu_id = ll_user_id ';
1341 $queryStr .= 'WHERE lu_deleted = false ';// 削除されていない
1342 $queryStr .= 'ORDER BY lu_user_type, lu_account limit ' . $limit . ' offset ' . $offset;
1343 $this->selectLoop($queryStr, array(), $callback);
1350 function getAllUserListCount()
1352 $queryStr = 'select * from _login_user ';
1353 $queryStr .= 'where lu_deleted = false ';// 削除されていない
1354 return $this->selectRecordCount($queryStr, array());
1359 * @param int $limit 取得する項目数
1360 * @param int $page 取得するページ(1~)
1361 * @param function $callback コールバック関数
1364 function getUserLoginStatusList($limit, $page, $callback)
1366 $offset = $limit * ($page -1);
1367 if ($offset < 0) $offset = 0;
1369 $queryStr = 'SELECT lu_id,lu_account,lu_name,lu_user_type,lu_user_status,ll_login_count,ll_access_log_serial,ll_pre_login_dt,ll_last_login_dt, ';
1370 $queryStr .= 'CASE WHEN ll_last_login_dt IS NULL THEN 1 ELSE 0 ';
1371 $queryStr .= 'END AS ord ';
1372 $queryStr .= 'FROM _login_user LEFT JOIN _login_log on lu_id = ll_user_id ';
1373 $queryStr .= 'WHERE lu_deleted = false ';// 削除されていない
1374 $queryStr .= 'ORDER BY ord, ll_last_login_dt desc limit ' . $limit . ' offset ' . $offset;
1375 $this->selectLoop($queryStr, array(), $callback);
1382 function getUserLoginStatusListCount()
1384 $queryStr = 'SELECT * FROM _login_user LEFT JOIN _login_log on lu_id = ll_user_id ';
1385 $queryStr .= 'WHERE lu_deleted = false ';// 削除されていない
1386 return $this->selectRecordCount($queryStr, array());
1391 * @param string $name 名前
1392 * @param string $account アカウント
1393 * @param string $password パスワード
1394 * @param int $userType ユーザ種別
1395 * @param bool $canLogin ログインできるかどうか
1396 * @param timestamp $startDt 期間(開始日)
1397 * @param timestamp $endDt 期間(終了日)
1398 * @param int $newSerial 新規シリアル番号
1399 * @return true=成功、false=失敗
1401 /* function addNewUser($name, $account, $password, $userType, $canLogin, $startDt, $endDt, &$newSerial)
1403 $now = date("Y/m/d H:i:s"); // 現在日時
1404 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
1407 $this->startTransaction();
1411 $queryStr = 'select max(lu_id) as ms from _login_user ';
1412 $ret = $this->selectRecord($queryStr, array(), $row);
1413 if ($ret) $newId = $row['ms'] + 1;
1416 $queryStr = 'INSERT INTO _login_user (';
1417 $queryStr .= 'lu_id, ';
1418 $queryStr .= 'lu_history_index, ';
1419 $queryStr .= 'lu_name, ';
1420 $queryStr .= 'lu_account, ';
1421 $queryStr .= 'lu_password, ';
1422 $queryStr .= 'lu_user_type, ';
1423 $queryStr .= 'lu_enable_login, ';
1424 $queryStr .= 'lu_active_start_dt, ';
1425 $queryStr .= 'lu_active_end_dt, ';
1426 $queryStr .= 'lu_create_user_id, ';
1427 $queryStr .= 'lu_create_dt ';
1428 $queryStr .= ') VALUES (';
1440 $this->execStatement($queryStr, array($newId, 0, $name, $account, $password, $userType, $canLogin, $startDt, $endDt, $userId, $now));
1443 $queryStr = 'select max(lu_serial) as ns from _login_user ';
1444 $ret = $this->selectRecord($queryStr, array(), $row);
1445 if ($ret) $newSerial = $row['ns'];
1448 $ret = $this->endTransaction();
1454 * @param int $serial シリアル番号
1455 * @param string $name ユーザ名
1456 * @param string $account アカウント
1457 * @param string $password パスワード(空のときは更新しない)
1458 * @param int $userType ユーザ種別
1459 * @param string $canLogin ログイン可能かどうか
1460 * @param timestamp $startDt 期間(開始日)
1461 * @param timestamp $endDt 期間(終了日)
1462 * @param int $newSerial 新規シリアル番号
1463 * @return true=成功、false=失敗
1465 /* function updateUser($serial, $name, $account, $password, $userType, $canLogin, $startDt, $endDt, &$newSerial)
1467 $now = date("Y/m/d H:i:s"); // 現在日時
1468 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
1471 $this->startTransaction();
1473 // 指定のシリアルNoのレコードが削除状態でないかチェック
1474 $historyIndex = 0; // 履歴番号
1475 $queryStr = 'select * from _login_user ';
1476 $queryStr .= 'where lu_serial = ? ';
1477 $ret = $this->selectRecord($queryStr, array($serial), $row);
1478 if ($ret){ // 既に登録レコードがあるとき
1479 if ($row['lu_deleted']){ // レコードが削除されていれば終了
1480 $this->endTransaction();
1483 $historyIndex = $row['lu_history_index'] + 1;
1484 } else { // 存在しない場合は終了
1485 $this->endTransaction();
1489 // パスワードが設定されているときは更新
1490 $pwd = $row['lu_password'];
1491 if (!empty($password)) $pwd = $password;
1494 $queryStr = 'UPDATE _login_user ';
1495 $queryStr .= 'SET lu_deleted = true, '; // 削除
1496 $queryStr .= 'lu_update_user_id = ?, ';
1497 $queryStr .= 'lu_update_dt = ? ';
1498 $queryStr .= 'WHERE lu_serial = ?';
1499 $this->execStatement($queryStr, array($userId, $now, $serial));
1502 $queryStr = 'INSERT INTO _login_user (';
1503 $queryStr .= 'lu_id, ';
1504 $queryStr .= 'lu_history_index, ';
1505 $queryStr .= 'lu_name, ';
1506 $queryStr .= 'lu_account, ';
1507 $queryStr .= 'lu_password, ';
1508 $queryStr .= 'lu_user_type, ';
1509 $queryStr .= 'lu_assign, ';
1510 $queryStr .= 'lu_widget_id, ';
1511 $queryStr .= 'lu_enable_login, ';
1512 $queryStr .= 'lu_active_start_dt, ';
1513 $queryStr .= 'lu_active_end_dt, ';
1514 $queryStr .= 'lu_create_user_id, ';
1515 $queryStr .= 'lu_create_dt ';
1516 $queryStr .= ') VALUES (';
1530 $this->execStatement($queryStr, array($row['lu_id'], $historyIndex, $name, $account, $pwd, $userType, $row['lu_assign'], $row['lu_widget_id'], $canLogin, $startDt, $endDt, $userId, $now));
1533 $queryStr = 'select max(lu_serial) as ns from _login_user ';
1534 $ret = $this->selectRecord($queryStr, array(), $row);
1535 if ($ret) $newSerial = $row['ns'];
1538 $ret = $this->endTransaction();
1544 * @param array $serial シリアルNo
1545 * @return true=成功、false=失敗
1547 function delUserBySerial($serial)
1550 if (!is_array($serial)) return false;
1551 if (count($serial) <= 0) return true;
1553 $now = date("Y/m/d H:i:s"); // 現在日時
1554 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
1557 $this->startTransaction();
1559 // 指定のシリアルNoのレコードが削除状態でないかチェック
1560 for ($i = 0; $i < count($serial); $i++){
1561 $queryStr = 'SELECT * FROM _login_user ';
1562 $queryStr .= 'WHERE lu_deleted = false '; // 未削除
1563 $queryStr .= 'AND lu_serial = ? ';
1564 $ret = $this->isRecordExists($queryStr, array($serial[$i]));
1565 // 存在しない場合は、既に削除されたとして終了
1567 $this->endTransaction();
1573 $queryStr = 'UPDATE _login_user ';
1574 $queryStr .= 'SET lu_deleted = true, '; // 削除
1575 $queryStr .= 'lu_update_user_id = ?, ';
1576 $queryStr .= 'lu_update_dt = ? ';
1577 $queryStr .= 'WHERE lu_serial in (' . implode($serial, ',') . ') ';
1578 $this->execStatement($queryStr, array($userId, $now));
1581 $ret = $this->endTransaction();
1587 * @param string $serial シリアル番号
1588 * @param array $row レコード
1589 * @param array $groupRows ユーザグループ
1590 * @return bool 取得 = true, 取得なし= false
1592 function getUserBySerial($serial, &$row, &$groupRows)
1594 $queryStr = 'SELECT * FROM _login_user ';
1595 $queryStr .= 'WHERE lu_serial = ? ';
1596 $ret = $this->selectRecord($queryStr, array($serial), $row);
1600 $queryStr = 'SELECT * FROM _user_with_group LEFT JOIN _user_group ON uw_group_id = ug_id AND ug_deleted = false ';
1601 $queryStr .= 'WHERE uw_user_serial = ? ';
1602 $queryStr .= 'ORDER BY uw_index ';
1603 $this->selectRecords($queryStr, array($serial), $groupRows);
1610 * @param string $id ユーザID
1611 * @param array $row レコード
1612 * @return bool 取得 = true, 取得なし= false
1614 function getUserById($id, &$row)
1616 $queryStr = 'SELECT * FROM _login_user ';
1617 $queryStr .= 'WHERE lu_id = ? ';
1618 $queryStr .= 'AND lu_deleted = false';
1619 $ret = $this->selectRecord($queryStr, array($id), $row);
1625 * @param string $account アカウント
1626 * @param array $row レコード
1627 * @return bool 取得 = true, 取得なし= false
1629 function getUserByAccount($account, &$row)
1631 $queryStr = 'SELECT * FROM _login_user ';
1632 $queryStr .= 'WHERE lu_account = ? ';
1633 $queryStr .= 'AND lu_deleted = false';
1634 $ret = $this->selectRecord($queryStr, array($account), $row);
1638 * ユーザアカウントが存在するかチェック
1640 * @param string $account アカウント
1641 * @return true=存在する、false=存在しない
1644 function isExistsAccount($account)
1646 $queryStr = 'SELECT * from _login_user ';
1647 $queryStr .= 'WHERE lu_account = ? ';
1648 $queryStr .= 'AND lu_deleted = false';
1649 return $this->isRecordExists($queryStr, array($account));
1654 * @param int $type テンプレートのタイプ(0=PC用、1=携帯用、2=スマートフォン)
1655 * @param function $callback コールバック関数
1656 * @param bool $availableOnly 利用可能なテンプレートに制限するかどうか
1659 function getAllTemplateList($type, $callback, $availableOnly = true)
1661 // tm_device_typeは後で追加したため、tm_mobileを残しておく
1662 $queryStr = 'SELECT * FROM _templates ';
1663 $queryStr .= 'WHERE tm_deleted = false ';// 削除されていない
1664 if ($availableOnly) $queryStr .= 'AND tm_available = true '; // 利用可能
1667 case 0: // PC用テンプレート
1668 case 2: // スマートフォン用テンプレート
1670 $queryStr .= 'AND tm_mobile = false '; // 携帯用以外
1671 $queryStr .= 'AND tm_device_type = ? '; $params[] = $type;
1674 $queryStr .= 'AND tm_mobile = true '; // 携帯用
1677 $queryStr .= 'ORDER BY tm_id';
1678 $this->selectLoop($queryStr, $params, $callback);
1683 * @param array $rows 取得レコード
1684 * @return true=取得、false=取得せず
1686 function getAllTemplateIdList(&$rows)
1688 $queryStr = 'SELECT * FROM _templates ';
1689 $queryStr .= 'WHERE tm_deleted = false ';// 削除されていない
1690 $queryStr .= 'ORDER BY tm_id';
1691 $retValue = $this->selectRecords($queryStr, array(), $rows);
1697 * @param array $rows 取得レコード
1698 * @return true=取得、false=取得せず
1700 function getAllMobileTemplateIdList(&$rows)
1702 $queryStr = 'SELECT * FROM _templates ';
1703 $queryStr .= 'WHERE tm_deleted = false ';// 削除されていない
1704 $queryStr .= 'AND tm_mobile = true ';// 携帯
1705 $queryStr .= 'ORDER BY tm_id';
1706 $retValue = $this->selectRecords($queryStr, array(), $rows);
1712 * @param string $id テンプレートID
1713 * @param string $name テンプレート名
1714 * @param int $type テンプレートのタイプ
1715 * @param int $deviceType 端末タイプ(0=PC用、1=携帯用、2=スマートフォン)
1716 * @param int $cleanType クリーン処理タイプ
1719 function addNewTemplate($id, $name, $type, $deviceType = 0, $cleanType = 0)
1721 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
1722 $now = date("Y/m/d H:i:s"); // 現在日時
1724 $mobile = 0; // 携帯端末かどうか
1725 if ($deviceType == 1) $mobile = 1;
1728 $this->startTransaction();
1730 // 同じIDが登録済みかどうかチェック
1731 $queryStr = 'SELECT * FROM _templates ';
1732 $queryStr .= 'WHERE tm_id = ? ';
1733 $queryStr .= 'ORDER BY tm_history_index DESC ';
1734 $ret = $this->selectRecord($queryStr, array($id), $row);
1736 if (!$row['tm_deleted']){ // レコードが削除されていなければ、削除
1738 $queryStr = 'UPDATE _templates ';
1739 $queryStr .= 'SET tm_deleted = true, '; // 削除
1740 $queryStr .= 'tm_update_user_id = ?, ';
1741 $queryStr .= 'tm_update_dt = ? ';
1742 $queryStr .= 'WHERE tm_serial = ?';
1743 $this->execStatement($queryStr, array($userId, $now, $row['tm_serial']));
1745 $historyIndex = $row['tm_history_index'] + 1;
1748 $queryStr = 'INSERT INTO _templates ';
1749 $queryStr .= '(tm_id, tm_history_index, tm_name, tm_type, tm_device_type, tm_mobile, tm_clean_type, tm_create_dt, tm_create_user_id) ';
1750 $queryStr .= 'VALUES ';
1751 $queryStr .= '(?, ?, ?, ?, ?, ?, ?, ?, ?)';
1752 $this->execStatement($queryStr, array($id, $historyIndex, $name, $type, $deviceType, $mobile, $cleanType, $now, $userId));
1755 $ret = $this->endTransaction();
1761 * @param string $templateId テンプレートID
1762 * @param string $name ウィジェット名
1763 * @return true=成功、false=失敗
1765 function updateTemplate($templateId, $name)
1767 $now = date("Y/m/d H:i:s"); // 現在日時
1768 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
1771 $this->startTransaction();
1774 $historyIndex = 0; // 履歴番号
1775 $queryStr = 'SELECT * FROM _templates ';
1776 $queryStr .= 'WHERE tm_id = ? ';
1777 $queryStr .= 'ORDER BY tm_history_index DESC ';
1778 $ret = $this->selectRecord($queryStr, array($templateId), $row);
1780 if ($row['tm_deleted']){ // レコードが削除されていれば終了
1781 $this->endTransaction();
1783 } else { // レコードが削除されていなければ、削除
1785 $queryStr = 'UPDATE _templates ';
1786 $queryStr .= 'SET tm_deleted = true, '; // 削除
1787 $queryStr .= 'tm_update_user_id = ?, ';
1788 $queryStr .= 'tm_update_dt = ? ';
1789 $queryStr .= 'WHERE tm_serial = ?';
1790 $this->execStatement($queryStr, array($userId, $now, $row['tm_serial']));
1792 $historyIndex = $row['tm_history_index'] + 1;
1794 $this->endTransaction();
1799 $queryStr = 'INSERT INTO _templates (';
1800 $queryStr .= 'tm_id, ';
1801 $queryStr .= 'tm_history_index, ';
1802 $queryStr .= 'tm_name, ';
1803 $queryStr .= 'tm_type, ';
1804 $queryStr .= 'tm_device_type, ';
1805 $queryStr .= 'tm_mobile, ';
1806 $queryStr .= 'tm_clean_type, ';
1807 $queryStr .= 'tm_available, ';
1808 $queryStr .= 'tm_create_user_id, ';
1809 $queryStr .= 'tm_create_dt ';
1810 $queryStr .= ') VALUES (';
1821 $this->execStatement($queryStr, array($row['tm_id'], $historyIndex, $name, $row['tm_type'], intval($row['tm_device_type']), intval($row['tm_mobile']), $row['tm_clean_type'], intval($row['tm_available']), $userId, $now));
1824 $ret = $this->endTransaction();
1830 * @param string $templateId テンプレートID
1831 * @return true=成功、false=失敗
1833 function deleteTemplate($templateId)
1835 $now = date("Y/m/d H:i:s"); // 現在日時
1836 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
1839 $this->startTransaction();
1842 $queryStr = 'SELECT * FROM _templates ';
1843 $queryStr .= 'WHERE tm_deleted = false ';
1844 $queryStr .= 'AND tm_id = ? ';
1845 $ret = $this->selectRecord($queryStr, array($templateId), $row);
1847 $this->endTransaction();
1851 $queryStr = 'UPDATE _templates ';
1852 $queryStr .= 'SET tm_deleted = true, '; // 削除
1853 $queryStr .= 'tm_update_user_id = ?, ';
1854 $queryStr .= 'tm_update_dt = ? ';
1855 $queryStr .= 'WHERE tm_serial = ?';
1856 $this->execStatement($queryStr, array($userId, $now, $row['tm_serial']));
1859 $ret = $this->endTransaction();
1865 * @param string $id 言語ID
1866 * @param bool $available 利用可
1867 * @return true = 正常、false=異常
1869 function updateLangStatus($id, $available)
1872 $this->startTransaction();
1874 $queryStr = 'UPDATE _language ';
1875 $queryStr .= 'SET ln_available = ? ';
1876 $queryStr .= 'WHERE ln_id = ?';
1877 $ret = $this->execStatement($queryStr, array(intval($available), $id));
1880 $ret = $this->endTransaction();
1886 * @param function $callback コールバック関数
1887 * @return true=取得、false=取得せず
1889 function getAllLang($callback)
1891 $queryStr = 'SELECT * FROM _language ORDER BY ln_priority';
1892 $this->selectLoop($queryStr, array(), $callback, null);
1897 * @param array $langArray 取得言語のID
1898 * @param function $callback コールバック関数
1899 * @return true=取得、false=取得せず
1901 function getLangs($langArray, $callback)
1904 for ($i = 0; $i < count($langArray); $i++){
1905 $id .= '\'' . addslashes($langArray[$i]) . '\',';
1907 $id = rtrim($id, ',');
1908 $queryStr = 'SELECT * FROM _language ';
1909 $queryStr .= 'WHERE ln_id in (' . $id . ') ';
1910 $queryStr .= 'ORDER BY ln_priority';
1911 $this->selectLoop($queryStr, array(), $callback, null);
1916 * @param array $rows 取得レコード
1917 * @return true=取得、false=取得せず
1919 function getAvailableLang(&$rows)
1921 $queryStr = 'SELECT * FROM _language ';
1922 $queryStr .= 'WHERE ln_available = true ';
1923 $queryStr .= 'ORDER BY ln_priority';
1924 $retValue = $this->selectRecords($queryStr, array(), $rows);
1930 * @param string $groupId 更新対象グループID
1931 * @param bool $visible 表示状態
1932 * @return true = 正常、false=異常
1934 function updateMenuVisible($groupId, $visible)
1936 $sql = "UPDATE _nav_item SET ni_visible = ? WHERE ni_group_id = ?";
1937 $params = array($visible, $groupId);
1938 return $this->execStatement($sql, $params);
1943 * @param string $navId ナビゲーションバー識別ID
1944 * @param array $rows 取得レコード
1945 * @return true=取得、false=取得せず
1947 /*function getTopPageItems($navId, &$rows)
1949 $queryStr = 'SELECT * FROM _nav_item ';
1950 $queryStr .= 'WHERE ni_nav_id = ? ';
1951 $queryStr .= 'AND ni_top_page_index != 0 '; // 0以外を表示
1952 $queryStr .= 'AND ni_visible = true ';
1953 $queryStr .= 'ORDER BY ni_top_page_index';
1954 $retValue = $this->selectRecords($queryStr, array($navId), $rows);
1960 * @param string $navId ナビゲーションバー識別ID
1961 * @param string $parentId 親項目ID
1962 * @param array $rows 取得レコード
1963 * @return true=取得、false=取得せず
1965 function getNavItems($navId, $parentId, &$rows)
1967 $queryStr = 'SELECT * FROM _nav_item ';
1968 $queryStr .= 'WHERE ni_nav_id = ? ';
1969 $queryStr .= 'AND ni_parent_id = ? ';
1970 $queryStr .= 'AND ni_visible = true ';
1971 $queryStr .= 'ORDER BY ni_index';
1973 $retValue = $this->selectRecords($queryStr, array($navId, $parentId), $rows);
1979 * @param string $navId ナビゲーションバー識別ID
1980 * @param function $callback コールバック関数
1983 function getNavItemsAll($navId, $callback)
1985 $queryStr = 'SELECT * FROM _nav_item ';
1986 $queryStr .= 'WHERE ni_nav_id = ? ';
1987 $queryStr .= 'ORDER BY ni_id';
1988 $this->selectLoop($queryStr, array($navId), $callback, null);
1993 * @param string $navId ナビゲーションバー識別ID
1994 * @param array $rows 取得レコード
1997 function getNavItemsAllRecords($navId, &$rows)
1999 $queryStr = 'SELECT * FROM _nav_item ';
2000 $queryStr .= 'WHERE ni_nav_id = ? ';
2001 $queryStr .= 'ORDER BY ni_id';
2002 $retValue = $this->selectRecords($queryStr, array($navId), $rows);
2008 * @param string $menuId メニュー識別ID
2009 * @return true=成功、false=失敗
2011 function delNavItems($menuId)
2013 $sql = "DELETE FROM _nav_item WHERE ni_nav_id = ?";
2014 $params = array($menuId);
2015 $this->execStatement($sql, $params);
2018 * ナビゲーションバー項目の最大IDを取得
2022 function getNavItemsMaxId()
2025 $queryStr = 'SELECT max(ni_id) as mid FROM _nav_item ';
2026 $ret = $this->selectRecord($queryStr, array(), $row);
2027 if ($ret) $max = $row['mid'];
2031 * ナビゲーションバー項目キー存在チェック
2033 * @param string $menuId メニュー識別ID
2034 * @param string $taskId タスクID
2035 * @param string $param 追加パラメータ
2036 * @return bool true=存在する、false=存在しない
2038 function isExistsNavItemKey($menuId, $taskId, $param)
2040 $queryStr = 'SELECT * FROM _nav_item ';
2041 $queryStr .= 'WHERE ni_nav_id = ? ';
2042 $queryStr .= 'AND ni_task_id = ? ';
2043 $queryStr .= 'AND ni_param = ? ';
2044 return $this->isRecordExists($queryStr, array($menuId, $taskId, $param));
2049 * @param string $navId ナビゲーションバー識別ID
2050 * @param int $id 項目ID
2051 * @param int $parentId 項目親項目ID
2052 * @param int $index インデックス番号起動
2053 * @param string $taskId タスクID
2054 * @param string $param 追加パラメータ
2055 * @param int $control 改行指示(0=改行しない、1=改行)
2056 * @param string $name 項目名
2057 * @param string $helpTitle ヘルプタイトル
2058 * @param string $helpBody ヘルプ本体
2059 * @return true=成功、false=失敗
2061 function addNavItems($navId, $id, $parentId, $index, $taskId, $param, $control, $name, $helpTitle, $helpBody)
2065 $queryStr = 'INSERT INTO _nav_item (';
2066 $queryStr .= 'ni_id, ';
2067 $queryStr .= 'ni_parent_id, ';
2068 $queryStr .= 'ni_index, ';
2069 $queryStr .= 'ni_nav_id, ';
2070 $queryStr .= 'ni_task_id, ';
2071 $queryStr .= 'ni_param, ';
2072 $queryStr .= 'ni_group_id, ';
2073 $queryStr .= 'ni_view_control, ';
2074 $queryStr .= 'ni_name, ';
2075 $queryStr .= 'ni_help_title, ';
2076 $queryStr .= 'ni_help_body ';
2077 $queryStr .= ') VALUES (';
2089 $ret = $this->execStatement($queryStr, array($id, $parentId, $index, $navId, $taskId, $param, $groupId, $control, $name, $helpTitle, $helpBody));
2095 * @param string $key キー文字列
2096 * @param string $group グループID
2097 * @param function $callback コールバック関数
2100 function getAllKey($key, $group, $callback)
2102 $queryStr = 'SELECT * FROM _key_value ';
2103 $queryStr .= 'WHERE kv_deleted = false ';
2104 $queryStr .= 'AND kv_id LIKE \'' . $key . '%\' ';
2105 $queryStr .= 'AND kv_group_id = ? ';
2106 $queryStr .= 'ORDER BY kv_id';
2107 $this->selectLoop($queryStr, array($group), $callback, null);
2112 * @param int $level 取得ログのレベル(0すべて、1=注意以上、10=要確認)
2113 * @param int $status 取得するデータの状況(0=すべて、1=未参照のみ、2=参照済みのみ)
2114 * @param int $limit 取得する項目数
2115 * @param int $page 取得するページ(1~)
2116 * @param function $callback コールバック関数
2119 function getOpeLogList($level, $status, $limit, $page, $callback)
2122 // 通常メッセージ: info=情報,warn=警告,user_info=ユーザ操作
2123 // 参照必須メッセージ: error=通常エラー,fatal=致命的エラー,user_err=ユーザ操作エラー,user_access=不正アクセス,user_data=不正データ
2124 $offset = $limit * ($page -1);
2125 if ($offset < 0) $offset = 0;
2127 $queryStr = 'SELECT * FROM _operation_log LEFT JOIN _operation_type ON ol_type = ot_id ';
2128 $queryStr .= 'LEFT JOIN _access_log ON ol_access_log_serial = al_serial ';
2134 $addWhere .= 'WHERE ot_level >= ? ';
2138 if ($status == 1){ // 未参照
2139 if (empty($addWhere)){
2140 $addWhere .= 'WHERE ';
2142 $addWhere .= 'AND ';
2144 $addWhere .= 'ol_checked = false ';
2145 } else if ($status == 2){ // 参照済み
2146 if (empty($addWhere)){
2147 $addWhere .= 'WHERE ';
2149 $addWhere .= 'AND ';
2151 $addWhere .= 'ol_checked = true ';
2153 $queryStr .= $addWhere;
2154 $queryStr .= 'ORDER BY ol_serial DESC limit ' . $limit . ' offset ' . $offset;
2155 $this->selectLoop($queryStr, $params, $callback);
2160 * @param int $level 取得ログのレベル(0すべて、1=参照必須)
2161 * @param int $status 取得するデータの状況(0=すべて、1=未参照のみ、2=参照済みのみ)
2164 function getOpeLogCount($level, $status)
2166 $queryStr = 'SELECT * FROM _operation_log LEFT JOIN _operation_type ON ol_type = ot_id ';
2172 $addWhere .= 'WHERE ot_level >= ? ';
2176 if ($status == 1){ // 未参照
2177 if (empty($addWhere)){
2178 $addWhere .= 'WHERE ';
2180 $addWhere .= 'AND ';
2182 $addWhere .= 'ol_checked = false ';
2183 } else if ($status == 2){ // 参照済み
2184 if (empty($addWhere)){
2185 $addWhere .= 'WHERE ';
2187 $addWhere .= 'AND ';
2189 $addWhere .= 'ol_checked = true ';
2191 $queryStr .= $addWhere;
2192 return $this->selectRecordCount($queryStr, $params);
2197 * @param int,array $messageCode メッセージコード。配列の場合はORで取得。
2198 * @param string $searchOption 検索付加オプション
2199 * @param int $limit 取得する項目数
2200 * @param int $page 取得するページ(1~)
2201 * @param function $callback コールバック関数
2204 function getOpeLogListByMessageCode($messageCode, $searchOption, $limit, $page, $callback)
2206 $offset = $limit * ($page -1);
2207 if ($offset < 0) $offset = 0;
2209 if (!is_array($messageCode)) $messageCode = array($messageCode);
2212 $queryStr = 'SELECT * FROM _operation_log LEFT JOIN _operation_type ON ol_type = ot_id ';
2213 $queryStr .= 'LEFT JOIN _access_log ON ol_access_log_serial = al_serial ';
2214 $queryStr .= 'WHERE ol_search_option = ? '; $params[] = $searchOption;
2215 $queryStr .= 'AND (';
2216 for ($i = 0; $i < count($messageCode); $i++){
2217 if ($i > 0) $queryStr .= 'OR ';
2218 $queryStr .= 'ol_message_code = ? '; $params[] = $messageCode[$i];
2221 $queryStr .= 'ORDER BY ol_serial DESC limit ' . $limit . ' offset ' . $offset;
2222 $this->selectLoop($queryStr, $params, $callback);
2225 * メッセージコードから運用ログ総数取得
2227 * @param int,array $messageCode メッセージコード。配列の場合はORで取得。
2228 * @param string $searchOption 検索付加オプション
2231 function getOpeLogCountByMessageCode($messageCode, $searchOption)
2233 if (!is_array($messageCode)) $messageCode = array($messageCode);
2236 $queryStr = 'SELECT * FROM _operation_log LEFT JOIN _operation_type ON ol_type = ot_id ';
2237 $queryStr .= 'WHERE ol_search_option = ? '; $params[] = $searchOption;
2238 $queryStr .= 'AND (';
2239 for ($i = 0; $i < count($messageCode); $i++){
2240 if ($i > 0) $queryStr .= 'OR ';
2241 $queryStr .= 'ol_message_code = ? '; $params[] = $messageCode[$i];
2244 return $this->selectRecordCount($queryStr, $params);
2249 * @param string $serial シリアル番号
2250 * @return true=正常、false=異常
2252 function getOpeLog($serial, &$row)
2254 $queryStr = 'SELECT * FROM _operation_log LEFT JOIN _operation_type ON ol_type = ot_id ';
2255 $queryStr .= 'WHERE ol_serial = ? ';
2256 $ret = $this->selectRecord($queryStr, array($serial), $row);
2262 * @param string $serial シリアル番号
2263 * @param bool $checked 確認状況
2264 * @return true=正常、false=異常
2266 function updateOpeLogChecked($serial, $checked)
2268 $queryStr = "UPDATE _operation_log SET ol_checked = ? WHERE ol_serial = ?";
2269 $params = array(intval($checked), $serial);
2270 return $this->execStatement($queryStr, $params);
2275 * @param int $limit 取得する項目数
2276 * @param int $page 取得するページ(1~)
2277 * @param string $path アクセスパス
2278 * @param function $callback コールバック関数
2279 * @param timestamp $startDt 期間(開始日)
2280 * @param timestamp $endDt 期間(終了日)
2283 function getAccessLogList($limit, $page, $path, $callback, $startDt, $endDt)
2285 $offset = $limit * ($page -1);
2286 if ($offset < 0) $offset = 0;
2289 $queryStr = 'SELECT * FROM _access_log LEFT JOIN _login_user on al_user_id = lu_id ';
2290 if (!is_null($path)){
2291 $queryStr .= 'WHERE al_path = ? ';
2295 if (!empty($startDt)){
2296 if (count($params) > 0){
2297 $queryStr .= 'AND ? <= al_dt ';
2299 $queryStr .= 'WHERE ? <= al_dt ';
2301 $params[] = $startDt;
2303 if (!empty($endDt)){
2304 if (count($params) > 0){
2305 $queryStr .= 'AND al_dt < ? ';
2307 $queryStr .= 'WHERE al_dt < ? ';
2311 $queryStr .= 'ORDER BY al_serial DESC limit ' . $limit . ' offset ' . $offset;
2312 $this->selectLoop($queryStr, $params, $callback);
2317 * @param string $path アクセスパス
2318 * @param timestamp $startDt 期間(開始日)
2319 * @param timestamp $endDt 期間(終了日)
2322 function getAccessLogCount($path, $startDt, $endDt)
2325 $queryStr = 'SELECT * FROM _access_log ';
2326 if (!is_null($path)){
2327 $queryStr .= 'WHERE al_path = ? ';
2331 if (!empty($startDt)){
2332 if (count($params) > 0){
2333 $queryStr .= 'AND ? <= al_dt ';
2335 $queryStr .= 'WHERE ? <= al_dt ';
2337 $params[] = $startDt;
2339 if (!empty($endDt)){
2340 if (count($params) > 0){
2341 $queryStr .= 'AND al_dt < ? ';
2343 $queryStr .= 'WHERE al_dt < ? ';
2347 return $this->selectRecordCount($queryStr, $params);
2352 * @param string $serial シリアル番号
2353 * @return true=正常、false=異常
2355 function getAccessLog($serial, &$row)
2357 $queryStr = 'SELECT * FROM _access_log LEFT JOIN _login_user on al_user_id = lu_id ';
2358 $queryStr .= 'WHERE al_serial = ? ';
2359 $ret = $this->selectRecord($queryStr, array($serial), $row);
2365 * @param int $limit 取得する項目数
2366 * @param int $page 取得するページ(1~)
2367 * @param string $path アクセスパス
2368 * @param function $callback コールバック関数
2371 function getSearchWordLogList($limit, $page, $path, $callback)
2373 $offset = $limit * ($page -1);
2374 if ($offset < 0) $offset = 0;
2377 $queryStr = 'SELECT * FROM _search_word ';
2378 $queryStr .= 'LEFT JOIN _access_log ON sw_access_log_serial = al_serial ';
2379 $queryStr .= 'LEFT JOIN _login_user on al_user_id = lu_id ';
2380 if (!is_null($path)){
2381 $queryStr .= 'WHERE sw_path = ? ';
2384 $queryStr .= 'ORDER BY sw_serial DESC limit ' . $limit . ' offset ' . $offset;
2385 $this->selectLoop($queryStr, $params, $callback);
2390 * @param string $path アクセスパス
2393 function getSearchWordLogCount($path)
2396 $queryStr = 'SELECT * FROM _search_word ';
2397 if (!is_null($path)){
2398 $queryStr .= 'WHERE sw_path = ? ';
2401 return $this->selectRecordCount($queryStr, $params);
2406 * @param string $word 比較語
2407 * @param int $limit 取得する項目数
2408 * @param int $page 取得するページ(1~)
2409 * @param string $path アクセスパス
2410 * @param function $callback コールバック関数
2413 function getSearchWordLogListByWord($word, $limit, $page, $path, $callback)
2415 $offset = $limit * ($page -1);
2416 if ($offset < 0) $offset = 0;
2419 $queryStr = 'SELECT * FROM _search_word ';
2420 $queryStr .= 'LEFT JOIN _access_log ON sw_access_log_serial = al_serial ';
2421 $queryStr .= 'LEFT JOIN _login_user on al_user_id = lu_id ';
2422 $queryStr .= 'WHERE sw_basic_word = ? '; $params[] = $word;
2423 if (!is_null($path)){
2424 $queryStr .= 'AND sw_path = ? ';
2427 $queryStr .= 'ORDER BY sw_serial DESC limit ' . $limit . ' offset ' . $offset;
2428 $this->selectLoop($queryStr, $params, $callback);
2433 * @param string $word 比較語
2434 * @param string $path アクセスパス
2437 function getSearchWordLogCountByWord($word, $path)
2440 $queryStr = 'SELECT * FROM _search_word ';
2441 $queryStr .= 'WHERE sw_basic_word = ? '; $params[] = $word;
2442 if (!is_null($path)){
2443 $queryStr .= 'AND sw_path = ? ';
2446 return $this->selectRecordCount($queryStr, $params);
2451 * @param int $limit 取得する項目数
2452 * @param int $page 取得するページ(1~)
2453 * @param string $path アクセスパス
2454 * @param function $callback コールバック関数
2457 function getSearchWordSumList($limit, $page, $path, $callback)
2459 $offset = $limit * ($page -1);
2460 if ($offset < 0) $offset = 0;
2463 $queryStr = 'SELECT count(*) AS ct, sw_basic_word FROM _search_word ';
2464 if (!is_null($path)){
2465 $queryStr .= 'WHERE sw_path = ? ';
2468 $queryStr .= 'GROUP BY sw_basic_word ';
2469 $queryStr .= 'ORDER BY ct DESC limit ' . $limit . ' offset ' . $offset;
2470 $this->selectLoop($queryStr, $params, $callback);
2475 * @param string $path アクセスパス
2478 function getSearchWordSumCount($path)
2481 $queryStr = 'SELECT count(*) AS ct FROM _search_word ';
2482 if (!is_null($path)){
2483 $queryStr .= 'WHERE sw_path = ? ';
2486 $queryStr .= 'GROUP BY sw_basic_word';
2487 return $this->selectRecordCount($queryStr, $params);
2492 * @param int $serial シリアル番号
2493 * @return true=正常、false=異常
2495 function getSearchWordLog($serial, &$row)
2497 $queryStr = 'SELECT * FROM _search_word ';
2498 $queryStr .= 'LEFT JOIN _access_log ON sw_access_log_serial = al_serial ';
2499 $queryStr .= 'LEFT JOIN _login_user on al_user_id = lu_id ';
2500 $queryStr .= 'WHERE sw_serial = ? ';
2501 $ret = $this->selectRecord($queryStr, array($serial), $row);
2507 * @param string $word 比較語
2508 * @return true=正常、false=異常
2510 function getSearchWordLogByCompareWord($word, &$row)
2512 $queryStr = 'SELECT * FROM _search_word ';
2513 $queryStr .= 'LEFT JOIN _access_log ON sw_access_log_serial = al_serial ';
2514 $queryStr .= 'LEFT JOIN _login_user on al_user_id = lu_id ';
2515 $queryStr .= 'WHERE sw_basic_word = ? ';
2516 $queryStr .= 'ORDER BY sw_serial DESC ';
2517 $ret = $this->selectRecord($queryStr, array($word), $row);
2523 * @param string $menuId メニューID
2524 * @param string $parentId 親メニュー項目ID
2525 * @param string $name メニュー名
2526 * @param string $desc 説明
2527 * @param int $index インデックス番号(0のときは最大値を設定)
2528 * @param int $type 項目タイプ
2529 * @param int $linkType リンクタイプ
2530 * @param string $url URL
2531 * @param bool $visible 表示状態
2532 * @param bool $userLimited ユーザ制限するかどうか
2533 * @param int $newId 新規ID
2534 * @param string $contentType リンク先コンテンツタイプ
2535 * @param string $contentId リンク先コンテンツID
2536 * @return bool true = 成功、false = 失敗
2538 function addMenuItem($menuId, $parentId, $name, $desc, $index, $type, $linkType, $url, $visible, $userLimited, &$newId, $contentType = '', $contentId = '')
2540 $now = date("Y/m/d H:i:s"); // 現在日時
2541 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
2544 $this->startTransaction();
2548 $queryStr = 'SELECT max(md_id) as ms FROM _menu_def ';
2549 $ret = $this->selectRecord($queryStr, array(), $maxRow);
2550 if ($ret) $id = $maxRow['ms'] + 1;
2552 // インデックスが0のときは、最大値を格納
2555 $queryStr = 'SELECT max(md_index) as ms FROM _menu_def ';
2556 $queryStr .= 'WHERE md_menu_id = ? ';
2557 $ret = $this->selectRecord($queryStr, array($menuId), $maxRow);
2558 if ($ret) $index = $maxRow['ms'] + 1;
2560 $queryStr = 'INSERT INTO _menu_def ';
2561 $queryStr .= '(md_id, md_parent_id, md_index, md_menu_id, md_name, md_description, md_type, md_link_type, md_link_url, md_visible, md_user_limited, md_content_type, md_content_id, md_update_user_id, md_update_dt) ';
2562 $queryStr .= 'VALUES ';
2563 $queryStr .= '(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
2564 $this->execStatement($queryStr, array($id, $parentId, $index, $menuId, $name, $desc, $type, $linkType, $url, intval($visible), intval($userLimited), $contentType, $contentId, $userId, $now));
2567 $queryStr = 'select max(md_id) as ns from _menu_def ';
2568 $ret = $this->selectRecord($queryStr, array(), $row);
2569 if ($ret) $newId = $row['ns'];
2572 $ret = $this->endTransaction();
2578 * @param int $id メニュー項目ID
2579 * @param string $name メニュー名
2580 * @param string $desc 説明
2581 * @param int $type 項目タイプ
2582 * @param int $linkType リンクタイプ
2583 * @param string $url URL
2584 * @param bool $visible 表示状態
2585 * @param bool $userLimited ユーザ制限するかどうか
2586 * @param string $contentType リンク先コンテンツタイプ
2587 * @param string $contentId リンク先コンテンツID
2588 * @return bool true = 成功、false = 失敗
2590 function updateMenuItem($id, $name, $desc, $type, $linkType, $url, $visible, $userLimited, $contentType = '', $contentId = '')
2592 $now = date("Y/m/d H:i:s"); // 現在日時
2593 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
2596 $this->startTransaction();
2599 $queryStr = 'UPDATE _menu_def ';
2600 $queryStr .= 'SET md_name = ?, '; $params[] = $name;
2601 $queryStr .= 'md_description = ?, '; $params[] = $desc;
2602 $queryStr .= 'md_type = ?, '; $params[] = $type;
2603 $queryStr .= 'md_link_type = ?, '; $params[] = $linkType;
2604 $queryStr .= 'md_link_url = ?, '; $params[] = $url;
2605 $queryStr .= 'md_visible = ?, '; $params[] = intval($visible);
2606 $queryStr .= 'md_user_limited = ?, '; $params[] = intval($userLimited);
2607 $queryStr .= 'md_content_type = ?, '; $params[] = $contentType;
2608 $queryStr .= 'md_content_id = ?, '; $params[] = $contentId;
2609 $queryStr .= 'md_update_user_id = ?, '; $params[] = $userId;
2610 $queryStr .= 'md_update_dt = ? '; $params[] = $now;
2611 $queryStr .= 'WHERE md_id = ? '; $params[] = $id;
2612 $this->execStatement($queryStr, $params);
2615 $ret = $this->endTransaction();
2621 * @param string $id 複数シリアルNoをカンマ区切り
2622 * @return true=成功、false=失敗
2624 function delMenuItems($id)
2627 $this->startTransaction();
2630 $queryStr = 'DELETE FROM _menu_def ';
2631 $queryStr .= 'WHERE md_id in (' . $id . ') ';
2632 $this->execStatement($queryStr, array());
2635 $ret = $this->endTransaction();
2641 * @param int $id メニュー項目ID
2642 * @param array $row レコード
2643 * @return bool 取得 = true, 取得なし= false
2645 function getMenuItem($id, &$row)
2647 $queryStr = 'SELECT * FROM _menu_def ';
2648 $queryStr .= 'WHERE md_id = ? ';
2649 $ret = $this->selectRecord($queryStr, array($id), $row);
2655 * @param string $menuId メニュー識別ID
2656 * @param string $parentId 親項目ID
2657 * @param array $rows 取得レコード
2658 * @return true=取得、false=取得せず
2660 function getChildMenuItems($menuId, $parentId, &$rows)
2662 $queryStr = 'SELECT * FROM _menu_def ';
2663 $queryStr .= 'WHERE md_menu_id = ? ';
2664 $queryStr .= 'AND md_parent_id = ? ';
2665 $queryStr .= 'ORDER BY md_index';
2666 $retValue = $this->selectRecords($queryStr, array($menuId, $parentId), $rows);
2672 * @param string $menuId メニューID
2673 * @param function $callback コールバック関数
2676 function getAllMenuItems($menuId, $callback)
2678 $queryStr = 'SELECT * FROM _menu_def ';
2679 $queryStr .= 'WHERE md_menu_id = ? ';
2680 $queryStr .= 'ORDER BY md_parent_id, md_index';
2681 $this->selectLoop($queryStr, array($menuId), $callback);
2686 * @param string $menuId メニュー識別ID
2687 * @param int $parentId 親項目ID
2688 * @param int $id 項目ID
2689 * @param int $pos 新規の位置
2690 * @return true=成功、false=失敗
2692 function reorderMenuItem($menuId, $parentId, $id, $pos)
2694 $now = date("Y/m/d H:i:s"); // 現在日時
2695 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
2698 $this->startTransaction();
2700 $queryStr = 'SELECT * FROM _menu_def ';
2701 $queryStr .= 'WHERE md_menu_id = ? ';
2702 $queryStr .= 'AND md_parent_id = ? ';
2703 $queryStr .= 'ORDER BY md_index';
2704 $retValue = $this->selectRecords($queryStr, array($menuId, $parentId), $rows);
2707 $insPos = $pos; // 項目挿入位置
2708 for ($i = 0; $i < count($rows); $i++){
2709 if ($id == $rows[$i]['md_id']){
2710 //if ($i < $pos) $insPos++; // 2011/8/22 simpleTreeからjsTreeに変更のため仕様変更
2715 for ($i = 0; $i < $insPos; $i++){
2716 $itemId = $rows[$i]['md_id'];
2717 if ($itemId != $id){
2718 $queryStr = 'UPDATE _menu_def ';
2719 $queryStr .= 'SET md_index = ?, '; // インデックス
2720 $queryStr .= 'md_update_user_id = ?, ';
2721 $queryStr .= 'md_update_dt = ? ';
2722 $queryStr .= 'WHERE md_id = ?';
2723 $ret = $this->execStatement($queryStr, array($index, $userId, $now, $itemId));
2727 $queryStr = 'UPDATE _menu_def ';
2728 $queryStr .= 'SET md_index = ?, '; // インデックス
2729 $queryStr .= 'md_parent_id = ?, ';
2730 $queryStr .= 'md_update_user_id = ?, ';
2731 $queryStr .= 'md_update_dt = ? ';
2732 $queryStr .= 'WHERE md_id = ?';
2733 $ret = $this->execStatement($queryStr, array($index, $parentId, $userId, $now, $id));
2735 for ($i = $insPos; $i < count($rows); $i++){
2736 $itemId = $rows[$i]['md_id'];
2737 if ($itemId != $id){
2738 $queryStr = 'UPDATE _menu_def ';
2739 $queryStr .= 'SET md_index = ?, '; // インデックス
2740 $queryStr .= 'md_update_user_id = ?, ';
2741 $queryStr .= 'md_update_dt = ? ';
2742 $queryStr .= 'WHERE md_id = ?';
2743 $ret = $this->execStatement($queryStr, array($index, $userId, $now, $itemId));
2749 $ret = $this->endTransaction();
2755 * @param string $menuId メニューID
2756 * @param int $parentId 親項目ID
2757 * @param bool $visibleOnly 表示項目だけかどうか
2758 * @param array $menuItemNoArray 並び順
2759 * @return bool true = 成功、false = 失敗
2761 function orderMenuItems($menuId, $parentId, $visibleOnly, $menuItemNoArray)
2764 $queryStr = 'SELECT * FROM _menu_def ';
2765 $queryStr .= 'WHERE md_menu_id = ? ';
2766 $queryStr .= 'AND md_parent_id = ? ';
2767 if ($visibleOnly) $queryStr .= 'AND md_visible = true '; // 表示中の項目
2768 $queryStr .= 'ORDER BY md_index';
2769 $ret = $this->selectRecords($queryStr, array($menuId, $parentId), $rows);
2770 if (!$ret) return false;
2772 // メニュー数をチェックし、異なっている場合はエラー
2773 $menuItemCount = count($rows);
2774 if ($menuItemCount != count($menuItemNoArray)) return false;
2776 $now = date("Y/m/d H:i:s"); // 現在日時
2777 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
2780 $this->startTransaction();
2782 for ($i = 0; $i < $menuItemCount; $i++){
2783 $id = $rows[$menuItemNoArray[$i]]['md_id'];
2784 $index = $rows[$i]['md_index'];
2787 $queryStr = 'UPDATE _menu_def ';
2788 $queryStr .= 'SET ';
2789 $queryStr .= 'md_index = ?, ';
2790 $queryStr .= 'md_update_user_id = ?, ';
2791 $queryStr .= 'md_update_dt = ? ';
2792 $queryStr .= 'WHERE md_id = ? ';
2793 $this->execStatement($queryStr, array($index, $userId, $now, $id));
2797 $ret = $this->endTransaction();
2803 * @param string $lang 言語
2804 * @param string $contentType コンテンツタイプ
2805 * @param function $callback コールバック関数
2808 function getAllContents($lang, $contentType, $callback)
2810 $queryStr = 'SELECT * FROM content ';
2811 $queryStr .= 'WHERE cn_type = ? ';
2812 $queryStr .= 'AND cn_language_id = ? ';
2813 // $queryStr .= 'AND cn_visible = true '; // 画面に表示可能
2814 $queryStr .= 'AND cn_deleted = false '; // 削除されていない
2815 $queryStr .= 'ORDER BY cn_id';
2816 $this->selectLoop($queryStr, array($contentType, $lang), $callback, null);
2821 * @param string $contentType コンテンツタイプ
2822 * @param string $langId 言語ID
2823 * @param string $key 外部キー
2824 * @param array $row レコード
2825 * @return bool 取得 = true, 取得なし= false
2827 function getContentByKey($contentType, $langId, $key, &$row)
2829 $queryStr = 'SELECT * FROM content ';
2830 $queryStr .= 'WHERE cn_deleted = false '; // 削除されていない
2831 $queryStr .= 'AND cn_type = ? ';
2832 $queryStr .= 'AND cn_language_id = ? ';
2833 $queryStr .= 'AND cn_key = ? ';
2834 $queryStr .= 'ORDER BY cn_id';
2835 $ret = $this->selectRecord($queryStr, array($contentType, $langId, $key), $row);
2841 * @param string $serial シリアル番号
2842 * @param array $row レコード
2843 * @return bool 取得 = true, 取得なし= false
2845 function getContentBySerial($serial, &$row)
2847 $queryStr = 'SELECT * FROM content LEFT JOIN _login_user ON cn_create_user_id = lu_id AND lu_deleted = false ';
2848 $queryStr .= 'WHERE cn_serial = ? ';
2849 $ret = $this->selectRecord($queryStr, array($serial), $row);
2855 * @param function $callback コールバック関数
2856 * @param bool $getWidgetMenu ウィジェット専用メニューを取得するかどうか
2859 function getMenuIdList($callback, $getWidgetMenu = false)
2861 $queryStr = 'SELECT * FROM _menu_id ';
2862 if (!$getWidgetMenu) $queryStr .= 'WHERE mn_widget_id = \'\' ';
2863 $queryStr .= 'ORDER BY mn_sort_order';
2864 $this->selectLoop($queryStr, array(), $callback);
2869 * @param string $id メニューID
2870 * @param array $row レコード
2871 * @return bool 取得 = true, 取得なし= false
2873 function getMenuId($id, &$row)
2876 $queryStr = 'SELECT * FROM _menu_id ';
2877 $queryStr .= 'WHERE mn_id = ?';
2878 $ret = $this->selectRecord($queryStr, array($id), $row);
2884 * @param string $id メニューID(存在しない場合は新規追加)
2885 * @param string $name 名前
2886 * @param string $desc 説明
2887 * @param int $order ソート順
2888 * @return bool true=更新成功、false=更新失敗
2890 function updateMenuId($id, $name, $desc, $order)
2893 $this->startTransaction();
2895 $queryStr = 'SELECT * FROM _menu_id ';
2896 $queryStr .= 'WHERE mn_id = ?';
2897 $ret = $this->selectRecord($queryStr, array($id), $row);
2899 $queryStr = 'UPDATE _menu_id ';
2900 $queryStr .= 'SET mn_name = ?, ';
2901 $queryStr .= 'mn_description = ?, ';
2902 $queryStr .= 'mn_sort_order = ? ';
2903 $queryStr .= 'WHERE mn_id = ?';
2904 $ret = $this->execStatement($queryStr, array($name, $desc, $order, $id));
2906 $queryStr = 'INSERT INTO _menu_id (';
2907 $queryStr .= 'mn_id, ';
2908 $queryStr .= 'mn_name, ';
2909 $queryStr .= 'mn_description, ';
2910 $queryStr .= 'mn_sort_order ';
2911 $queryStr .= ') VALUES (';
2912 $queryStr .= '?, ?, ?, ?';
2914 $ret = $this->execStatement($queryStr, array($id, $name, $desc, $order));
2917 $ret = $this->endTransaction();
2923 * @param array $serial メニューIDの配列
2924 * @return true=成功、false=失敗
2926 function delMenuId($serial)
2929 if (!is_array($serial)) return false;
2930 if (count($serial) <= 0) return true;
2933 $this->startTransaction();
2935 // 指定のシリアルNoのレコードが削除状態でないかチェック
2937 for ($i = 0; $i < count($serial); $i++){
2938 $queryStr = 'SELECT * FROM _menu_id ';
2939 $queryStr .= 'WHERE mn_id = ? ';
2940 $ret = $this->isRecordExists($queryStr, array($serial[$i]));
2941 // 存在しない場合は、既に削除されたとして終了
2943 $this->endTransaction();
2946 $delId .= '\'' . addslashes($serial[$i]) . '\',';
2948 $delId = rtrim($delId, ',');
2951 $queryStr = 'DELETE FROM _menu_id ';
2952 $queryStr .= 'WHERE mn_id in (' . $delId . ') ';
2953 $this->execStatement($queryStr, array());
2956 $ret = $this->endTransaction();
2962 * @param string $id メニューID
2963 * @return bool true=存在する、false=存在しない
2965 function isExistsMenuId($id)
2967 $queryStr = 'SELECT * FROM _menu_id ';
2968 $queryStr .= 'WHERE mn_id = ? ';
2969 return $this->isRecordExists($queryStr, array($id));
2974 * @param string $lang 言語
2975 * @param function $callback コールバック関数
2978 function getAllUserGroup($lang, $callback)
2980 $queryStr = 'SELECT * FROM _user_group LEFT JOIN _login_user ON ug_create_user_id = lu_id AND lu_deleted = false ';
2981 $queryStr .= 'WHERE ug_language_id = ? ';
2982 $queryStr .= 'AND ug_deleted = false '; // 削除されていない
2983 $queryStr .= 'ORDER BY ug_sort_order';
2984 $this->selectLoop($queryStr, array($lang), $callback);
2989 * @param string $lang 言語
2990 * @param array $rows 取得データ
2991 * @return bool true=取得、false=取得せず
2993 function getAllUserGroupRows($lang, &$rows)
2995 $queryStr = 'SELECT * FROM _user_group LEFT JOIN _login_user ON ug_create_user_id = lu_id AND lu_deleted = false ';
2996 $queryStr .= 'WHERE ug_language_id = ? ';
2997 $queryStr .= 'AND ug_deleted = false '; // 削除されていない
2998 $queryStr .= 'ORDER BY ug_sort_order';
2999 $retValue = $this->selectRecords($queryStr, array($lang), $rows);
3005 * @param array $serial シリアルNo
3006 * @return true=成功、false=失敗
3008 function delUserGroupBySerial($serial)
3011 if (!is_array($serial)) return false;
3012 if (count($serial) <= 0) return true;
3014 $now = date("Y/m/d H:i:s"); // 現在日時
3015 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
3018 $this->startTransaction();
3020 // 指定のシリアルNoのレコードが削除状態でないかチェック
3021 for ($i = 0; $i < count($serial); $i++){
3022 $queryStr = 'SELECT * FROM _user_group ';
3023 $queryStr .= 'WHERE ug_deleted = false '; // 未削除
3024 $queryStr .= 'AND ug_serial = ? ';
3025 $ret = $this->isRecordExists($queryStr, array($serial[$i]));
3026 // 存在しない場合は、既に削除されたとして終了
3028 $this->endTransaction();
3034 $queryStr = 'UPDATE _user_group ';
3035 $queryStr .= 'SET ug_deleted = true, '; // 削除
3036 $queryStr .= 'ug_update_user_id = ?, ';
3037 $queryStr .= 'ug_update_dt = ? ';
3038 $queryStr .= 'WHERE ug_serial in (' . implode($serial, ',') . ') ';
3039 $this->execStatement($queryStr, array($userId, $now));
3042 $ret = $this->endTransaction();
3048 * @param int $serial シリアル番号
3049 * @param array $row レコード
3050 * @return bool 取得 = true, 取得なし= false
3052 function getUserGroupBySerial($serial, &$row)
3054 $queryStr = 'SELECT * FROM _user_group LEFT JOIN _login_user ON ug_create_user_id = lu_id AND lu_deleted = false ';
3055 $queryStr .= 'WHERE ug_serial = ? ';
3056 $ret = $this->selectRecord($queryStr, array($serial), $row);
3062 * @param string $id 識別ID
3063 * @param array $row レコード
3064 * @return bool 取得 = true, 取得なし= false
3066 function getUserGroupById($id, &$row)
3068 $queryStr = 'SELECT * FROM _user_group LEFT JOIN _login_user ON ug_create_user_id = lu_id AND lu_deleted = false ';
3069 $queryStr .= 'WHERE ug_deleted = false ';
3070 $queryStr .= 'AND ug_id = ? ';
3071 $ret = $this->selectRecord($queryStr, array($id), $row);
3077 * @param string $lang 言語
3080 function getUserGroupMaxIndex($lang)
3082 $queryStr = 'SELECT max(ug_sort_order) as mi FROM _user_group ';
3083 $queryStr .= 'WHERE ug_deleted = false ';
3084 $queryStr .= 'AND ug_language_id = ? ';
3085 $ret = $this->selectRecord($queryStr, array($lang), $row);
3087 $index = $row['mi'];
3096 * @param int $id 識別ID
3097 * @param string $lang 言語ID
3098 * @param string $name 名前
3099 * @param int $index 表示順
3100 * @param int $newSerial 新規シリアル番号
3101 * @return bool true = 成功、false = 失敗
3103 function addUserGroup($id, $lang, $name, $index, &$newSerial)
3105 $now = date("Y/m/d H:i:s"); // 現在日時
3106 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
3109 $this->startTransaction();
3111 // ユーザグループが存在していないかチェック
3112 $ret = $this->getUserGroupById($id, $row);
3114 $this->endTransaction();
3119 $queryStr = 'INSERT INTO _user_group ';
3120 $queryStr .= '(ug_id, ug_language_id, ug_name, ug_sort_order, ug_create_user_id, ug_create_dt) ';
3121 $queryStr .= 'VALUES ';
3122 $queryStr .= '(?, ?, ?, ?, ?, ?)';
3123 $this->execStatement($queryStr, array($id, $lang, $name, $index, $userId, $now));
3126 $queryStr = 'SELECT MAX(ug_serial) AS ns FROM _user_group ';
3127 $ret = $this->selectRecord($queryStr, array(), $row);
3128 if ($ret) $newSerial = $row['ns'];
3131 $ret = $this->endTransaction();
3137 * @param int $serial シリアル番号
3138 * @param string $name 名前
3139 * @param int $index 表示順
3140 * @param int $newSerial 新規シリアル番号
3141 * @return bool true = 成功、false = 失敗
3143 function updateUserGroup($serial, $name, $index, &$newSerial)
3145 $now = date("Y/m/d H:i:s"); // 現在日時
3146 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
3149 $this->startTransaction();
3151 // 指定のシリアルNoのレコードが削除状態でないかチェック
3152 $historyIndex = 0; // 履歴番号
3153 $queryStr = 'SELECT * FROM _user_group ';
3154 $queryStr .= 'WHERE ug_serial = ? ';
3155 $ret = $this->selectRecord($queryStr, array($serial), $row);
3156 if ($ret){ // 既に登録レコードがあるとき
3157 if ($row['ug_deleted']){ // レコードが削除されていれば終了
3158 $this->endTransaction();
3161 $historyIndex = $row['ug_history_index'] + 1;
3162 } else { // 存在しない場合は終了
3163 $this->endTransaction();
3168 $queryStr = 'UPDATE _user_group ';
3169 $queryStr .= 'SET ug_deleted = true, '; // 削除
3170 $queryStr .= 'ug_update_user_id = ?, ';
3171 $queryStr .= 'ug_update_dt = ? ';
3172 $queryStr .= 'WHERE ug_serial = ?';
3173 $this->execStatement($queryStr, array($userId, $now, $serial));
3176 $queryStr = 'INSERT INTO _user_group ';
3177 $queryStr .= '(ug_id, ug_language_id, ug_history_index, ug_name, ug_sort_order, ug_create_user_id, ug_create_dt) ';
3178 $queryStr .= 'VALUES ';
3179 $queryStr .= '(?, ?, ?, ?, ?, ?, ?)';
3180 $this->execStatement($queryStr, array($row['ug_id'], $row['ug_language_id'], $historyIndex, $name, $index, $userId, $now));
3183 $queryStr = 'SELECT MAX(ug_serial) AS ns FROM _user_group ';
3184 $ret = $this->selectRecord($queryStr, array(), $row);
3185 if ($ret) $newSerial = $row['ns'];
3188 $ret = $this->endTransaction();