7 * LICENSE: This source file is licensed under the terms of the GNU General Public License.
10 * @author 株式会社 毎日メディアサービス
11 * @copyright Copyright 2010 株式会社 毎日メディアサービス.
12 * @license http://www.gnu.org/copyleft/gpl.html GPL License
13 * @version SVN: $Id: user_contentDb.php 3059 2010-04-23 06:23:11Z fishbone $
14 * @link http://www.m-media.co.jp
16 require_once($gEnvManager->getDbPath() . '/baseDb.php');
18 class user_contentDb extends BaseDb
23 * @param string $lang 言語
24 * @param int $groupId グループID
25 * @param function $callback コールバック関数
28 function getAllVisibleTabs($lang, $groupId, $callback)
30 $queryStr = 'SELECT * FROM user_content_tab ';
31 $queryStr .= 'WHERE ub_deleted = false '; // 削除されていない
32 $queryStr .= 'AND ub_visible = true '; // 表示中
33 $queryStr .= 'AND ub_language_id = ? ';
34 $queryStr .= 'AND ub_group_id = ? ';
35 $queryStr .= 'ORDER BY ub_index';
36 $this->selectLoop($queryStr, array($lang, $groupId), $callback);
41 * @param string $lang 言語
42 * @param function $callback コールバック関数
45 function getAllTabs($lang, $callback)
47 $queryStr = 'SELECT * FROM user_content_tab LEFT JOIN _login_user ON ub_create_user_id = lu_id AND lu_deleted = false ';
48 $queryStr .= 'WHERE ub_deleted = false '; // 削除されていない
49 $queryStr .= 'AND ub_language_id = ? ';
50 $queryStr .= 'ORDER BY ub_group_id, ub_index';
51 $this->selectLoop($queryStr, array($lang), $callback);
56 * @param string $serial シリアル番号
57 * @param array $row レコード
58 * @return bool 取得 = true, 取得なし= false
60 function getTabBySerial($serial, &$row)
62 $queryStr = 'SELECT * FROM user_content_tab LEFT JOIN _login_user ON ub_create_user_id = lu_id AND lu_deleted = false ';
63 $queryStr .= 'WHERE ub_serial = ? ';
64 $ret = $this->selectRecord($queryStr, array($serial), $row);
70 * @param string $lang 言語
71 * @param string $id 識別ID
72 * @param array $row レコード
73 * @return bool 取得 = true, 取得なし= false
75 function getTabById($lang, $id, &$row)
77 $queryStr = 'SELECT * FROM user_content_tab ';
78 $queryStr .= 'WHERE ub_deleted = false ';
79 $queryStr .= 'AND ub_id = ? ';
80 $queryStr .= 'AND ub_language_id = ? ';
81 $ret = $this->selectRecord($queryStr, array($id, $lang), $row);
89 function getMaxTabIndex()
91 $queryStr = 'SELECT max(ub_index) as mindex FROM user_content_tab ';
92 $queryStr .= 'WHERE ub_deleted = false ';
93 $ret = $this->selectRecord($queryStr, array(), $row);
95 $index = $row['mindex'];
104 * @param string $serial シリアル番号(0のときは新規登録)
105 * @param string $lang 言語ID
106 * @param string $id タブ識別キー
107 * @param string $name 名前
108 * @param string $html テンプレートHTML
109 * @param int $index 表示順
110 * @param bool $visible 表示制御
111 * @param string $useItemId 使用しているコンテンツ項目ID
112 * @param int $groupId グループID
113 * @param int $newSerial 新規シリアル番号
114 * @return true = 正常、false=異常
116 function updateTab($serial, $lang, $id, $name, $html, $index, $visible, $useItemId, $groupId, &$newSerial)
118 $now = date("Y/m/d H:i:s"); // 現在日時
119 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
120 $limited = false; // ユーザ制限
123 $this->startTransaction();
128 if (empty($serial)){ // 新規登録のとき
129 $queryStr = 'SELECT * FROM user_content_tab ';
130 $queryStr .= 'WHERE ub_id = ? ';
131 $queryStr .= 'AND ub_language_id = ? ';
132 $queryStr .= 'ORDER BY ub_history_index DESC ';
133 $ret = $this->selectRecord($queryStr, array($id, $lang), $row);
135 if (!$row['ub_deleted']){ // レコード存在していれば終了
136 $this->endTransaction();
139 $historyIndex = $row['ub_history_index'] + 1;
140 $desc = $row['ub_description'];
141 $limited = $row['ub_user_limited'];
144 // 指定のシリアルNoのレコードが削除状態でないかチェック
145 $queryStr = 'SELECT * FROM user_content_tab ';
146 $queryStr .= 'WHERE ub_serial = ? ';
147 $ret = $this->selectRecord($queryStr, array($serial), $row);
148 if ($ret){ // 既に登録レコードがあるとき
149 if ($row['ub_deleted']){ // レコードが削除されていれば終了
150 $this->endTransaction();
153 $historyIndex = $row['ub_history_index'] + 1;
154 $desc = $row['ub_description'];
155 $limited = $row['ub_user_limited'];
159 $lang = $row['ub_language_id'];
160 } else { // 存在しない場合は終了
161 $this->endTransaction();
166 $queryStr = 'UPDATE user_content_tab ';
167 $queryStr .= 'SET ub_deleted = true, '; // 削除
168 $queryStr .= 'ub_update_user_id = ?, ';
169 $queryStr .= 'ub_update_dt = ? ';
170 $queryStr .= 'WHERE ub_serial = ?';
171 $ret = $this->execStatement($queryStr, array($userId, $now, $serial));
173 $this->endTransaction();
179 $queryStr = 'INSERT INTO user_content_tab ';
180 $queryStr .= '(ub_id, ub_language_id, ub_history_index, ub_name, ub_description, ub_template_html, ub_use_item_id, ub_index, ub_visible, ub_user_limited, ub_group_id, ub_create_user_id, ub_create_dt) ';
181 $queryStr .= 'VALUES ';
182 $queryStr .= '(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
183 $this->execStatement($queryStr, array($id, $lang, $historyIndex, $name, $desc, $html, $useItemId, $index, intval($visible), intval($limited), intval($groupId), $userId, $now));
186 $queryStr = 'SELECT MAX(ub_serial) AS ns FROM user_content_tab ';
187 $ret = $this->selectRecord($queryStr, array(), $row);
188 if ($ret) $newSerial = $row['ns'];
191 $ret = $this->endTransaction();
197 * @param array $serial シリアルNo
198 * @return true=成功、false=失敗
200 function delTab($serial)
202 $now = date("Y/m/d H:i:s"); // 現在日時
203 $user = $this->gEnv->getCurrentUserId(); // 現在のユーザ
205 if (!is_array($serial) || count($serial) <= 0) return true;
208 $this->startTransaction();
210 // 指定のシリアルNoのレコードが削除状態でないかチェック
211 for ($i = 0; $i < count($serial); $i++){
212 $queryStr = 'SELECT * FROM user_content_tab ';
213 $queryStr .= 'WHERE ub_deleted = false '; // 未削除
214 $queryStr .= 'AND ub_serial = ? ';
215 $ret = $this->isRecordExists($queryStr, array($serial[$i]));
216 // 存在しない場合は、既に削除されたとして終了
218 $this->endTransaction();
224 $queryStr = 'UPDATE user_content_tab ';
225 $queryStr .= 'SET ub_deleted = true, '; // 削除
226 $queryStr .= 'ub_update_user_id = ?, ';
227 $queryStr .= 'ub_update_dt = ? ';
228 $queryStr .= 'WHERE ub_serial in (' . implode($serial, ',') . ') ';
229 $this->execStatement($queryStr, array($user, $now));
232 $ret = $this->endTransaction();
236 * コンテンツ項目定義一覧を取得(管理用)
238 * @param function $callback コールバック関数
241 function getAllItems($callback)
243 $queryStr = 'SELECT * FROM user_content_item LEFT JOIN _login_user ON ui_create_user_id = lu_id AND lu_deleted = false ';
244 $queryStr .= 'WHERE ui_deleted = false '; // 削除されていない
245 $queryStr .= 'ORDER BY ui_index, ui_id';
246 $this->selectLoop($queryStr, array(), $callback);
251 * @param array $rows 取得レコード
252 * @return true=取得、false=取得せず
254 function getAllContentItems(&$rows)
256 $queryStr = 'SELECT * FROM user_content_item ';
257 $queryStr .= 'WHERE ui_deleted = false '; // 削除されていない
258 $queryStr .= 'ORDER BY ui_index, ui_id';
259 $retValue = $this->selectRecords($queryStr, array(), $rows);
265 * @param string $id 識別ID
266 * @param array $row レコード
267 * @return bool 取得 = true, 取得なし= false
269 function getItemById($id, &$row)
271 $queryStr = 'SELECT * FROM user_content_item ';
272 $queryStr .= 'WHERE ui_deleted = false ';
273 $queryStr .= 'AND ui_id = ? ';
274 $ret = $this->selectRecord($queryStr, array($id), $row);
280 * @param string $serial シリアル番号
281 * @param array $row レコード
282 * @return bool 取得 = true, 取得なし= false
284 function getItemBySerial($serial, &$row)
286 $queryStr = 'SELECT * FROM user_content_item LEFT JOIN _login_user ON ui_create_user_id = lu_id AND lu_deleted = false ';
287 $queryStr .= 'WHERE ui_serial = ? ';
288 $ret = $this->selectRecord($queryStr, array($serial), $row);
294 * @param string $serial シリアル番号(0のときは新規登録)
295 * @param string $id コンテンツ項目識別キー
296 * @param string $name 名前
297 * @param string $desc 説明
298 * @param int $type コンテンツ項目タイプ
299 * @param string $key 外部参照キー
300 * @param int $newSerial 新規シリアル番号
301 * @return true = 正常、false=異常
303 function updateItem($serial, $id, $name, $desc, $type, $key, &$newSerial)
305 $now = date("Y/m/d H:i:s"); // 現在日時
306 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
309 $this->startTransaction();
313 if (empty($serial)){ // 新規登録のとき
314 $queryStr = 'SELECT * FROM user_content_item ';
315 $queryStr .= 'WHERE ui_id = ? ';
316 $queryStr .= 'ORDER BY ui_history_index DESC ';
317 $ret = $this->selectRecord($queryStr, array($id), $row);
319 if (!$row['ui_deleted']){ // レコード存在していれば終了
320 $this->endTransaction();
323 $historyIndex = $row['ui_history_index'] + 1;
326 // 指定のシリアルNoのレコードが削除状態でないかチェック
327 $queryStr = 'SELECT * FROM user_content_item ';
328 $queryStr .= 'WHERE ui_serial = ? ';
329 $ret = $this->selectRecord($queryStr, array($serial), $row);
330 if ($ret){ // 既に登録レコードがあるとき
331 if ($row['ui_deleted']){ // レコードが削除されていれば終了
332 $this->endTransaction();
335 $historyIndex = $row['ui_history_index'] + 1;
339 } else { // 存在しない場合は終了
340 $this->endTransaction();
345 $queryStr = 'UPDATE user_content_item ';
346 $queryStr .= 'SET ui_deleted = true, '; // 削除
347 $queryStr .= 'ui_update_user_id = ?, ';
348 $queryStr .= 'ui_update_dt = ? ';
349 $queryStr .= 'WHERE ui_serial = ?';
350 $ret = $this->execStatement($queryStr, array($userId, $now, $serial));
352 $this->endTransaction();
358 $queryStr = 'INSERT INTO user_content_item ';
359 $queryStr .= '(ui_id, ui_history_index, ui_name, ui_description, ui_type, ui_key, ui_create_user_id, ui_create_dt) ';
360 $queryStr .= 'VALUES ';
361 $queryStr .= '(?, ?, ?, ?, ?, ?, ?, ?)';
362 $this->execStatement($queryStr, array($id, $historyIndex, $name, $desc, $type, $key, $userId, $now));
365 $queryStr = 'SELECT MAX(ui_serial) AS ns FROM user_content_item ';
366 $ret = $this->selectRecord($queryStr, array(), $row);
367 if ($ret) $newSerial = $row['ns'];
370 $ret = $this->endTransaction();
376 * @param array $serial シリアルNo
377 * @return true=成功、false=失敗
379 function delItem($serial)
381 $now = date("Y/m/d H:i:s"); // 現在日時
382 $user = $this->gEnv->getCurrentUserId(); // 現在のユーザ
384 if (!is_array($serial) || count($serial) <= 0) return true;
387 $this->startTransaction();
389 // 指定のシリアルNoのレコードが削除状態でないかチェック
390 for ($i = 0; $i < count($serial); $i++){
391 $queryStr = 'SELECT * FROM user_content_item ';
392 $queryStr .= 'WHERE ui_deleted = false '; // 未削除
393 $queryStr .= 'AND ui_serial = ? ';
394 $ret = $this->isRecordExists($queryStr, array($serial[$i]));
395 // 存在しない場合は、既に削除されたとして終了
397 $this->endTransaction();
403 $queryStr = 'UPDATE user_content_item ';
404 $queryStr .= 'SET ui_deleted = true, '; // 削除
405 $queryStr .= 'ui_update_user_id = ?, ';
406 $queryStr .= 'ui_update_dt = ? ';
407 $queryStr .= 'WHERE ui_serial in (' . implode($serial, ',') . ') ';
408 $this->execStatement($queryStr, array($user, $now));
411 $ret = $this->endTransaction();
417 * @param function $callback コールバック関数
420 function getAllRooms($callback)
422 $queryStr = 'SELECT * FROM user_content_room LEFT JOIN _login_user ON ur_create_user_id = lu_id AND lu_deleted = false ';
423 $queryStr .= 'WHERE ur_deleted = false '; // 削除されていない
424 $queryStr .= 'ORDER BY ur_id';
425 $this->selectLoop($queryStr, array(), $callback);
430 * @param string $id 識別ID
431 * @param array $row レコード
432 * @return bool 取得 = true, 取得なし= false
434 function getRoomById($id, &$row)
436 $queryStr = 'SELECT * FROM user_content_room ';
437 $queryStr .= 'WHERE ur_deleted = false ';
438 $queryStr .= 'AND ur_id = ? ';
439 $ret = $this->selectRecord($queryStr, array($id), $row);
445 * @param string $id 識別ID
446 * @return bool true=存在する、false=存在しない
448 /*function isActiveRoom($id)
450 $queryStr = 'SELECT * FROM user_content_room ';
451 $queryStr .= 'WHERE ur_deleted = false ';
452 $queryStr .= 'AND ur_visible = true ';
453 $queryStr .= 'AND ur_id = ? ';
454 return $this->isRecordExists($queryStr, array($id));
459 * @param string $serial シリアル番号
460 * @param array $row レコード
461 * @return bool 取得 = true, 取得なし= false
463 function getRoomBySerial($serial, &$row)
465 $queryStr = 'SELECT * FROM user_content_room LEFT JOIN _login_user ON ur_create_user_id = lu_id AND lu_deleted = false ';
466 $queryStr .= 'WHERE ur_serial = ? ';
467 $ret = $this->selectRecord($queryStr, array($serial), $row);
473 * @param string $serial シリアル番号(0のときは新規登録)
474 * @param string $id コンテンツ項目識別キー
475 * @param string $name 名前
476 * @param int $groupId 所属グループID
477 * @param bool $visible 表示制御
478 * @param int $newSerial 新規シリアル番号
479 * @return true = 正常、false=異常
481 function updateRoom($serial, $id, $name, $groupId, $visible, &$newSerial)
483 $now = date("Y/m/d H:i:s"); // 現在日時
484 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
485 $contentUpdateDt = $this->gEnv->getInitValueOfTimestamp();
488 $this->startTransaction();
493 if (empty($serial)){ // 新規登録のとき
494 $queryStr = 'SELECT * FROM user_content_room ';
495 $queryStr .= 'WHERE ur_id = ? ';
496 $queryStr .= 'ORDER BY ur_history_index DESC ';
497 $ret = $this->selectRecord($queryStr, array($id), $row);
499 if (!$row['ur_deleted']){ // レコード存在していれば終了
500 $this->endTransaction();
503 $historyIndex = $row['ur_history_index'] + 1;
506 // 指定のシリアルNoのレコードが削除状態でないかチェック
507 $queryStr = 'SELECT * FROM user_content_room ';
508 $queryStr .= 'WHERE ur_serial = ? ';
509 $ret = $this->selectRecord($queryStr, array($serial), $row);
510 if ($ret){ // 既に登録レコードがあるとき
511 if ($row['ur_deleted']){ // レコードが削除されていれば終了
512 $this->endTransaction();
515 $historyIndex = $row['ur_history_index'] + 1;
517 // 識別IDとコンテンツ更新日時の変更は不可
519 $contentUpdateDt = $row['ur_content_update_dt'];
520 } else { // 存在しない場合は終了
521 $this->endTransaction();
526 $queryStr = 'UPDATE user_content_room ';
527 $queryStr .= 'SET ur_deleted = true, '; // 削除
528 $queryStr .= 'ur_update_user_id = ?, ';
529 $queryStr .= 'ur_update_dt = ? ';
530 $queryStr .= 'WHERE ur_serial = ?';
531 $ret = $this->execStatement($queryStr, array($userId, $now, $serial));
533 $this->endTransaction();
539 $queryStr = 'INSERT INTO user_content_room ';
540 $queryStr .= '(ur_id, ur_history_index, ur_name, ur_group_id, ur_visible, ur_content_update_dt, ur_create_user_id, ur_create_dt) ';
541 $queryStr .= 'VALUES ';
542 $queryStr .= '(?, ?, ?, ?, ?, ?, ?, ?)';
543 $this->execStatement($queryStr, array($id, $historyIndex, $name, intval($groupId), intval($visible), $contentUpdateDt, $userId, $now));
546 $queryStr = 'SELECT MAX(ur_serial) AS ns FROM user_content_room ';
547 $ret = $this->selectRecord($queryStr, array(), $row);
548 if ($ret) $newSerial = $row['ns'];
551 $ret = $this->endTransaction();
557 * @param string $roomId ルームID
558 * @param timestamp $dt 日時
559 * @return true = 正常、false=異常
561 function updateRoomContentUpdateDt($roomId, $dt)
563 $now = date("Y/m/d H:i:s"); // 現在日時
564 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
567 $this->startTransaction();
569 $queryStr = 'SELECT * FROM user_content_room ';
570 $queryStr .= 'WHERE ur_deleted = false ';
571 $queryStr .= 'AND ur_id = ? ';
572 $ret = $this->selectRecord($queryStr, array($roomId), $row);
574 $this->endTransaction();
579 $queryStr = 'UPDATE user_content_room ';
580 $queryStr .= 'SET ur_content_update_dt = ?, ';
581 $queryStr .= 'ur_update_user_id = ?, ';
582 $queryStr .= 'ur_update_dt = ? ';
583 $queryStr .= 'WHERE ur_serial = ?';
584 $ret = $this->execStatement($queryStr, array($dt, $userId, $now, $row['ur_serial']));
587 $ret = $this->endTransaction();
593 * @param array $serial シリアルNo
594 * @return true=成功、false=失敗
596 function delRoom($serial)
598 $now = date("Y/m/d H:i:s"); // 現在日時
599 $user = $this->gEnv->getCurrentUserId(); // 現在のユーザ
601 if (!is_array($serial) || count($serial) <= 0) return true;
604 $this->startTransaction();
606 // 指定のシリアルNoのレコードが削除状態でないかチェック
607 for ($i = 0; $i < count($serial); $i++){
608 $queryStr = 'SELECT * FROM user_content_room ';
609 $queryStr .= 'WHERE ur_deleted = false '; // 未削除
610 $queryStr .= 'AND ur_serial = ? ';
611 $ret = $this->isRecordExists($queryStr, array($serial[$i]));
612 // 存在しない場合は、既に削除されたとして終了
614 $this->endTransaction();
620 $queryStr = 'UPDATE user_content_room ';
621 $queryStr .= 'SET ur_deleted = true, '; // 削除
622 $queryStr .= 'ur_update_user_id = ?, ';
623 $queryStr .= 'ur_update_dt = ? ';
624 $queryStr .= 'WHERE ur_serial in (' . implode($serial, ',') . ') ';
625 $this->execStatement($queryStr, array($user, $now));
628 $ret = $this->endTransaction();
634 * @param string $id コンテンツID
635 * @param string $roomId ルームID
636 * @param string $langId 言語ID
637 * @param string $html 設定データ
638 * @param float $number 数値データ
639 * @param bool $visible 表示状態
640 * @param timestamp $startDt 期間(開始日)
641 * @param timestamp $endDt 期間(終了日)
642 * @param bool $limited ユーザ制限するかどうか
643 * @return bool true = 成功、false = 失敗
645 function updateContent($id, $roomId, $langId, $html, $number, $visible, $startDt, $endDt, $limited)
647 $now = date("Y/m/d H:i:s"); // 現在日時
648 $user = $this->gEnv->getCurrentUserId(); // 現在のユーザ
652 $this->startTransaction();
656 $queryStr = 'SELECT * FROM user_content ';
657 $queryStr .= 'WHERE uc_id = ? ';
658 $queryStr .= 'AND uc_room_id = ? ';
659 $queryStr .= 'AND uc_language_id = ? ';
660 $queryStr .= 'ORDER BY uc_history_index DESC ';
661 $ret = $this->selectRecord($queryStr, array($id, $roomId, $langId), $row);
663 $historyIndex = $row['uc_history_index'] + 1;
665 if (!$row['uc_deleted']){ // レコード存在していれば削除
667 $queryStr = 'UPDATE user_content ';
668 $queryStr .= 'SET uc_deleted = true, '; // 削除
669 $queryStr .= 'uc_update_user_id = ?, ';
670 $queryStr .= 'uc_update_dt = ? ';
671 $queryStr .= 'WHERE uc_serial = ?';
672 $this->execStatement($queryStr, array($user, $now, $row['uc_serial']));
677 $queryStr = 'INSERT INTO user_content ';
678 $queryStr .= '(uc_id, ';
679 $queryStr .= 'uc_room_id, ';
680 $queryStr .= 'uc_language_id, ';
681 $queryStr .= 'uc_history_index, ';
682 $queryStr .= 'uc_data, ';
683 $queryStr .= 'uc_data_search_num, ';
684 $queryStr .= 'uc_visible, ';
685 $queryStr .= 'uc_active_start_dt, ';
686 $queryStr .= 'uc_active_end_dt, ';
687 $queryStr .= 'uc_user_limited, ';
688 $queryStr .= 'uc_create_user_id, ';
689 $queryStr .= 'uc_create_dt) ';
690 $queryStr .= 'VALUES ';
691 $queryStr .= '(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
692 $this->execStatement($queryStr, array($id, $roomId, $langId, $historyIndex, $html, $number,
693 intval($visible), $startDt, $endDt, intval($limited), $user, $now));
696 $ret = $this->endTransaction();
702 * @param string $id コンテンツID
703 * @param string $roomId ルームID
704 * @param string $langId 言語ID
705 * @param array $row レコード
706 * @return bool 取得 = true, 取得なし= false
708 function getContent($id, $roomId, $langId, &$row)
710 $queryStr = 'SELECT * FROM user_content LEFT JOIN _login_user ON uc_create_user_id = lu_id AND lu_deleted = false ';
711 $queryStr .= 'WHERE uc_deleted = false '; // 削除されていない
712 $queryStr .= 'AND uc_id = ? ';
713 $queryStr .= 'AND uc_room_id = ? ';
714 $queryStr .= 'AND uc_language_id = ? ';
715 $ret = $this->selectRecord($queryStr, array($id, $roomId, $langId), $row);
721 * @param string $roomId ルームID
722 * @param string $langId 言語ID
723 * @param function $callback コールバック関数
726 function getAllContents($roomId, $langId, $callback)
728 if (empty($roomId) || empty($langId)) return;
730 $queryStr = 'SELECT * FROM (user_content RIGHT JOIN user_content_item ON uc_id = ui_id AND ui_deleted = false AND uc_deleted = false AND uc_room_id = ? AND uc_language_id = ?) ';
731 $queryStr .= 'LEFT JOIN _login_user ON uc_create_user_id = lu_id AND lu_deleted = false ';
732 $queryStr .= 'WHERE ui_deleted = false ';
733 $queryStr .= 'AND (uc_deleted IS NULL ';
734 $queryStr .= 'OR (uc_deleted = false '; // 削除されていない
735 $queryStr .= 'AND uc_room_id = ? ';
736 $queryStr .= 'AND uc_language_id = ?)) ';
737 $queryStr .= 'ORDER BY ui_index, ui_id';
738 $this->selectLoop($queryStr, array($roomId, $langId, $roomId, $langId), $callback);
743 * @param string $roomId ルームID
744 * @param string $langId 言語ID
745 * @param array $rows 取得レコード
746 * @return bool 取得 = true, 取得なし= false
748 function getAllContentsByRoomId($roomId, $langId, &$rows)
750 if (empty($roomId) || empty($langId)) return false;
752 $queryStr = 'SELECT * FROM user_content LEFT JOIN user_content_item ON uc_id = ui_id AND ui_deleted = false ';
753 $queryStr .= 'WHERE uc_deleted = false '; // 削除されていない
754 $queryStr .= 'AND uc_room_id = ? ';
755 $queryStr .= 'AND uc_language_id = ? ';
756 $retValue = $this->selectRecords($queryStr, array($roomId, $langId), $rows);
762 * @param string $serial シリアル番号
763 * @param array $row レコード
764 * @return bool 取得 = true, 取得なし= false
766 function getCategoryBySerial($serial, &$row)
768 $queryStr = 'SELECT * FROM user_content_category LEFT JOIN _login_user ON ua_create_user_id = lu_id AND lu_deleted = false ';
769 $queryStr .= 'WHERE ua_serial = ? ';
770 $ret = $this->selectRecord($queryStr, array($serial), $row);
776 * @param string $langId 言語ID
777 * @param function $callback コールバック関数
780 function getAllCategory($langId, $callback)
782 $queryStr = 'SELECT * FROM user_content_category LEFT JOIN _login_user ON ua_create_user_id = lu_id AND lu_deleted = false ';
783 $queryStr .= 'WHERE ua_deleted = false '; // 削除されていない
784 $queryStr .= 'AND ua_item_id = ? ';
785 $queryStr .= 'AND ua_language_id = ? ';
786 $queryStr .= 'ORDER BY ua_index';
787 $this->selectLoop($queryStr, array(''/*カテゴリのみ取得*/, $langId), $callback);
790 * メニュー作成用のカテゴリ一覧を取得(管理用)
792 * @param string $langId 言語ID
793 * @param function $callback コールバック関数
796 function getAllCategoryForMenu($langId, $callback)
799 $queryStr = 'SELECT ua_id FROM user_content_category ';
800 $queryStr .= 'WHERE ua_deleted = false '; // 削除されていない
801 $queryStr .= 'AND ua_item_id = ? ';
802 $queryStr .= 'AND ua_language_id = ? ';
803 $queryStr .= 'ORDER BY ua_index';
804 $retValue = $this->selectRecords($queryStr, array(''/*カテゴリ情報のみ*/, $langId), $rows);
805 if (!$retValue) return;
809 $caseStr = 'CASE ua_id ';
810 for ($i = 0; $i < count($rows); $i++){
811 $id = '\'' . addslashes($rows[$i]['ua_id']) . '\'';
812 $caseStr .= 'WHEN ' . $id . ' THEN ' . $i . ' ';
813 $categoryId .= $id . ',';
815 $caseStr .= 'END AS no,';
816 $categoryId = rtrim($categoryId, ',');
818 $caseStr .= 'CASE ua_item_id ';
819 $caseStr .= 'WHEN \'\' THEN 1 ';
820 $caseStr .= 'ELSE 0 ';
821 $caseStr .= 'END AS type ';
823 $queryStr = 'SELECT *, ' . $caseStr . ' FROM user_content_category ';
824 $queryStr .= 'WHERE ua_deleted = false '; // 削除されていない
825 $queryStr .= 'AND ua_language_id = ? ';
826 $queryStr .= 'AND ua_id in (' . $categoryId . ') ';
827 $queryStr .= 'ORDER BY no, type, ua_index';
828 $this->selectLoop($queryStr, array($langId), $callback);
833 * @param string $categoryId カテゴリID
834 * @param string $langId 言語ID
835 * @param array $row 取得レコード
836 * @return bool 取得 = true, 取得なし= false
838 function getCategoryById($categoryId, $langId, &$row)
840 if (empty($categoryId) || empty($langId)) return false;
842 $queryStr = 'SELECT * FROM user_content_category ';
843 $queryStr .= 'WHERE ua_deleted = false '; // 削除されていない
844 $queryStr .= 'AND ua_id = ? ';
845 $queryStr .= 'AND ua_item_id = ? ';
846 $queryStr .= 'AND ua_language_id = ? ';
847 $retValue = $this->selectRecord($queryStr, array($categoryId, ''/*カテゴリ情報*/, $langId), $row);
851 * カテゴリIDですべてのカテゴリ項目を取得
853 * @param string $categoryId カテゴリID
854 * @param string $langId 言語ID
855 * @param array $rows 取得レコード
856 * @return bool 取得 = true, 取得なし= false
858 function getAllCategoryItemsById($categoryId, $langId, &$rows)
860 if (empty($categoryId) || empty($langId)) return false;
862 $queryStr = 'SELECT * FROM user_content_category ';
863 $queryStr .= 'WHERE ua_deleted = false '; // 削除されていない
864 $queryStr .= 'AND ua_id = ? ';
865 $queryStr .= 'AND ua_item_id != ? ';
866 $queryStr .= 'AND ua_language_id = ? ';
867 $queryStr .= 'ORDER BY ua_index';
868 $retValue = $this->selectRecords($queryStr, array($categoryId, ''/*カテゴリ以外*/, $langId), $rows);
874 * @param string $serial シリアル番号(0のときは新規登録)
875 * @param string $id カテゴリID
876 * @param string $langId 言語ID
877 * @param string $name 名前
878 * @param int $index 表示順
879 * @param array $itemArray カテゴリ項目
880 * @param int $newSerial 新規シリアル番号
881 * @return true = 正常、false=異常
883 function updateCategory($serial, $id, $langId, $name, $index, $itemArray, &$newSerial)
885 $now = date("Y/m/d H:i:s"); // 現在日時
886 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
889 $this->startTransaction();
894 if (empty($serial)){ // 新規登録のとき
895 $queryStr = 'SELECT * FROM user_content_category ';
896 $queryStr .= 'WHERE ua_id = ? ';
897 $queryStr .= 'AND ua_item_id = ? ';
898 $queryStr .= 'AND ua_language_id = ? ';
899 $queryStr .= 'ORDER BY ua_history_index DESC ';
900 $ret = $this->selectRecord($queryStr, array($id, ''/*カテゴリタイトル*/, $langId), $row);
902 if (!$row['ua_deleted']){ // レコード存在していれば終了
903 $this->endTransaction();
906 $historyIndex = $row['ua_history_index'] + 1;
909 // 指定のシリアルNoのレコードが削除状態でないかチェック
910 $queryStr = 'SELECT * FROM user_content_category ';
911 $queryStr .= 'WHERE ua_serial = ? ';
912 $ret = $this->selectRecord($queryStr, array($serial), $row);
913 if ($ret){ // 既に登録レコードがあるとき
914 if ($row['ua_deleted']){ // レコードが削除されていれば終了
915 $this->endTransaction();
918 $historyIndex = $row['ua_history_index'] + 1;
922 $langId = $row['ua_language_id'];
923 } else { // 存在しない場合は終了
924 $this->endTransaction();
929 $queryStr = 'UPDATE user_content_category ';
930 $queryStr .= 'SET ua_deleted = true, '; // 削除
931 $queryStr .= 'ua_update_user_id = ?, ';
932 $queryStr .= 'ua_update_dt = ? ';
933 $queryStr .= 'WHERE ua_deleted = false '; // 削除されていない
934 $queryStr .= 'AND ua_id = ? ';
935 $queryStr .= 'AND ua_language_id = ? ';
936 $ret = $this->execStatement($queryStr, array($userId, $now, $id, $langId));
938 $this->endTransaction();
944 $queryStr = 'INSERT INTO user_content_category ';
945 $queryStr .= '(ua_id, ua_item_id, ua_language_id, ua_history_index, ua_name, ua_index, ua_create_user_id, ua_create_dt) ';
946 $queryStr .= 'VALUES ';
947 $queryStr .= '(?, ?, ?, ?, ?, ?, ?, ?)';
948 $this->execStatement($queryStr, array($id, ''/*カテゴリ種別*/, $langId, $historyIndex, $name, intval($index), $userId, $now));
951 for ($i = 0; $i < count($itemArray); $i++){
952 $line = $itemArray[$i];
954 $queryStr = 'INSERT INTO user_content_category ';
955 $queryStr .= '(ua_id, ua_item_id, ua_language_id, ua_history_index, ua_name, ua_index, ua_create_user_id, ua_create_dt) ';
956 $queryStr .= 'VALUES ';
957 $queryStr .= '(?, ?, ?, ?, ?, ?, ?, ?)';
958 $this->execStatement($queryStr, array($id, $line['ua_item_id'], $langId, $historyIndex, $line['ua_name'], intval($line['ua_index']), $userId, $now));
962 $queryStr = 'SELECT MAX(ua_serial) AS ns FROM user_content_category ';
963 $ret = $this->selectRecord($queryStr, array(), $row);
964 if ($ret) $newSerial = $row['ns'];
967 $ret = $this->endTransaction();
973 * @param array $serial シリアルNo
974 * @return true=成功、false=失敗
976 function delCategory($serial)
978 $now = date("Y/m/d H:i:s"); // 現在日時
979 $user = $this->gEnv->getCurrentUserId(); // 現在のユーザ
981 if (!is_array($serial) || count($serial) <= 0) return true;
984 $this->startTransaction();
986 // 指定のシリアルNoのレコードが削除状態でないかチェック
987 $delLines = array(); // 削除対象
988 for ($i = 0; $i < count($serial); $i++){
989 $queryStr = 'SELECT * FROM user_content_category ';
990 $queryStr .= 'WHERE ua_deleted = false '; // 未削除
991 $queryStr .= 'AND ua_serial = ? ';
992 $ret = $this->selectRecord($queryStr, array($serial[$i]), $row);
993 // 存在しない場合は、既に削除されたとして終了
995 $this->endTransaction();
999 $line['ua_id'] = $row['ua_id'];
1000 $line['ua_language_id'] = $row['ua_language_id'];
1001 $delLines[] = $line;
1005 for ($i = 0; $i < count($delLines); $i++){
1006 $queryStr = 'UPDATE user_content_category ';
1007 $queryStr .= 'SET ua_deleted = true, '; // 削除
1008 $queryStr .= 'ua_update_user_id = ?, ';
1009 $queryStr .= 'ua_update_dt = ? ';
1010 $queryStr .= 'WHERE ua_deleted = false '; // 削除されていない
1011 $queryStr .= 'AND ua_id = ? ';
1012 $queryStr .= 'AND ua_language_id = ? ';
1013 $this->execStatement($queryStr, array($user, $now, $delLines[$i]['ua_id'], $delLines[$i]['ua_language_id']));
1017 $ret = $this->endTransaction();
1023 * @param string $roomId ルームID
1024 * @param array $categoryValues カテゴリ選択値
1025 * @return true = 正常、false=異常
1027 function updateRoomCategory($roomId, $categoryValues)
1029 $now = date("Y/m/d H:i:s"); // 現在日時
1030 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
1033 $this->startTransaction();
1036 $queryStr = 'DELETE FROM user_content_room_category ';
1037 $queryStr .= 'WHERE um_room_id = ? ';
1038 $ret = $this->execStatement($queryStr, array($roomId));
1040 $this->endTransaction();
1045 $keys = array_keys($categoryValues);
1046 for ($i = 0; $i < count($keys); $i++){
1047 $queryStr = 'INSERT INTO user_content_room_category ';
1048 $queryStr .= '(um_room_id, um_category_id, um_category_item_id) ';
1049 $queryStr .= 'VALUES ';
1050 $queryStr .= '(?, ?, ?)';
1051 $this->execStatement($queryStr, array($roomId, $keys[$i], $categoryValues[$keys[$i]]));
1055 $ret = $this->endTransaction();
1061 * @param string $roomId ルームID
1062 * @param array $rows 取得レコード
1063 * @return bool 取得 = true, 取得なし= false
1065 function getRoomCategory($roomId, &$rows)
1067 if (empty($roomId)) return false;
1069 $queryStr = 'SELECT * FROM user_content_room_category ';
1070 $queryStr .= 'WHERE um_room_id = ? ';
1071 $retValue = $this->selectRecords($queryStr, array($roomId), $rows);
1077 * @param string $roomId ルームID
1078 * @return true = 正常、false=異常
1080 function delRoomCategory($roomId)
1083 $this->startTransaction();
1086 $queryStr = 'DELETE FROM user_content_room_category ';
1087 $queryStr .= 'WHERE um_room_id = ? ';
1088 $ret = $this->execStatement($queryStr, array($roomId));
1091 $ret = $this->endTransaction();