OSDN Git Service

初回コミット(v2.6.17.1)
[magic3/magic3.git] / widgets / user_content / include / db / user_contentDb.php
1 <?php
2 /**
3  * DBクラス
4  *
5  * PHP versions 5
6  *
7  * LICENSE: This source file is licensed under the terms of the GNU General Public License.
8  *
9  * @package    ユーザ作成コンテンツ
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
15  */
16 require_once($gEnvManager->getDbPath() . '/baseDb.php');
17
18 class user_contentDb extends BaseDb
19 {
20         /**
21          * タブ定義をすべて取得(一般用)
22          *
23          * @param string        $lang                           言語
24          * @param int       $groupId                    グループID
25          * @param function      $callback                       コールバック関数
26          * @return                      なし
27          */
28         function getAllVisibleTabs($lang, $groupId, $callback)
29         {
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);
37         }
38         /**
39          * タブ定義一覧を取得(管理用)
40          *
41          * @param string        $lang                           言語
42          * @param function      $callback                       コールバック関数
43          * @return                      なし
44          */
45         function getAllTabs($lang, $callback)
46         {
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);
52         }
53         /**
54          * タブ項目をシリアル番号で取得
55          *
56          * @param string        $serial                         シリアル番号
57          * @param array     $row                                レコード
58          * @return bool                                                 取得 = true, 取得なし= false
59          */
60         function getTabBySerial($serial, &$row)
61         {
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);
65                 return $ret;
66         }
67         /**
68          * タブ項目を識別IDで取得
69          *
70          * @param string        $lang                           言語
71          * @param string        $id                                     識別ID
72          * @param array     $row                                レコード
73          * @return bool                                                 取得 = true, 取得なし= false
74          */
75         function getTabById($lang, $id, &$row)
76         {
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);
82                 return $ret;
83         }
84         /**
85          * 最大表示順を取得
86          *
87          * @return int                                  最大表示順
88          */
89         function getMaxTabIndex()
90         {
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);
94                 if ($ret){
95                         $index = $row['mindex'];
96                 } else {
97                         $index = 0;
98                 }
99                 return $index;
100         }
101         /**
102          * タブ情報を更新
103          *
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=異常
115          */
116         function updateTab($serial, $lang, $id, $name, $html, $index, $visible, $useItemId, $groupId, &$newSerial)
117         {
118                 $now = date("Y/m/d H:i:s");     // 現在日時
119                 $userId = $this->gEnv->getCurrentUserId();      // 現在のユーザ
120                 $limited = false;               // ユーザ制限
121                 
122                 // トランザクション開始
123                 $this->startTransaction();
124                 
125                 // 前レコードの削除状態チェック
126                 $historyIndex = 0;
127                 $desc = '';
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);
134                         if ($ret){
135                                 if (!$row['ub_deleted']){               // レコード存在していれば終了
136                                         $this->endTransaction();
137                                         return false;
138                                 }
139                                 $historyIndex = $row['ub_history_index'] + 1;
140                                 $desc = $row['ub_description'];
141                                 $limited = $row['ub_user_limited'];
142                         }
143                 } else {                // 更新のとき
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();
151                                         return false;
152                                 }
153                                 $historyIndex = $row['ub_history_index'] + 1;
154                                 $desc = $row['ub_description'];
155                                 $limited = $row['ub_user_limited'];
156                                 
157                                 // 識別IDと言語の変更は不可
158                                 $id = $row['ub_id'];
159                                 $lang = $row['ub_language_id'];
160                         } else {                // 存在しない場合は終了
161                                 $this->endTransaction();
162                                 return false;
163                         }
164                         
165                         // 古いレコードを削除
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));
172                         if (!$ret){
173                                 $this->endTransaction();
174                                 return false;
175                         }
176                 }
177                 
178                 // データを追加
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));
184                 
185                 // 新規のシリアル番号取得
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'];
189                 
190                 // トランザクション確定
191                 $ret = $this->endTransaction();
192                 return $ret;
193         }
194         /**
195          * タブ情報の削除
196          *
197          * @param array $serial                 シリアルNo
198          * @return                                              true=成功、false=失敗
199          */
200         function delTab($serial)
201         {
202                 $now = date("Y/m/d H:i:s");     // 現在日時
203                 $user = $this->gEnv->getCurrentUserId();        // 現在のユーザ
204                 
205                 if (!is_array($serial) || count($serial) <= 0) return true;
206                 
207                 // トランザクション開始
208                 $this->startTransaction();
209                 
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                         // 存在しない場合は、既に削除されたとして終了
217                         if (!$ret){
218                                 $this->endTransaction();
219                                 return false;
220                         }
221                 }
222                 
223                 // レコードを削除
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));
230                 
231                 // トランザクション確定
232                 $ret = $this->endTransaction();
233                 return $ret;
234         }
235         /**
236          * コンテンツ項目定義一覧を取得(管理用)
237          *
238          * @param function      $callback                       コールバック関数
239          * @return                      なし
240          */
241         function getAllItems($callback)
242         {
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);
247         }
248         /**
249          * コンテンツ項目定義一覧を取得
250          *
251          * @param array  $rows                  取得レコード
252          * @return                                              true=取得、false=取得せず
253          */
254         function getAllContentItems(&$rows)
255         {
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);
260                 return $retValue;
261         }
262         /**
263          * コンテンツ項目を識別IDで取得
264          *
265          * @param string        $id                                     識別ID
266          * @param array     $row                                レコード
267          * @return bool                                                 取得 = true, 取得なし= false
268          */
269         function getItemById($id, &$row)
270         {
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);
275                 return $ret;
276         }
277         /**
278          * コンテンツ項目をシリアル番号で取得
279          *
280          * @param string        $serial                         シリアル番号
281          * @param array     $row                                レコード
282          * @return bool                                                 取得 = true, 取得なし= false
283          */
284         function getItemBySerial($serial, &$row)
285         {
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);
289                 return $ret;
290         }
291         /**
292          * コンテンツ項目情報を更新
293          *
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=異常
302          */
303         function updateItem($serial, $id, $name, $desc, $type, $key, &$newSerial)
304         {
305                 $now = date("Y/m/d H:i:s");     // 現在日時
306                 $userId = $this->gEnv->getCurrentUserId();      // 現在のユーザ
307                 
308                 // トランザクション開始
309                 $this->startTransaction();
310                 
311                 // 前レコードの削除状態チェック
312                 $historyIndex = 0;
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);
318                         if ($ret){
319                                 if (!$row['ui_deleted']){               // レコード存在していれば終了
320                                         $this->endTransaction();
321                                         return false;
322                                 }
323                                 $historyIndex = $row['ui_history_index'] + 1;
324                         }
325                 } else {                // 更新のとき
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();
333                                         return false;
334                                 }
335                                 $historyIndex = $row['ui_history_index'] + 1;
336                                 
337                                 // 識別IDと言語の変更は不可
338                                 $id = $row['ui_id'];
339                         } else {                // 存在しない場合は終了
340                                 $this->endTransaction();
341                                 return false;
342                         }
343                         
344                         // 古いレコードを削除
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));
351                         if (!$ret){
352                                 $this->endTransaction();
353                                 return false;
354                         }
355                 }
356                 
357                 // データを追加
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));
363                 
364                 // 新規のシリアル番号取得
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'];
368                 
369                 // トランザクション確定
370                 $ret = $this->endTransaction();
371                 return $ret;
372         }
373         /**
374          * コンテンツ項目情報の削除
375          *
376          * @param array $serial                 シリアルNo
377          * @return                                              true=成功、false=失敗
378          */
379         function delItem($serial)
380         {
381                 $now = date("Y/m/d H:i:s");     // 現在日時
382                 $user = $this->gEnv->getCurrentUserId();        // 現在のユーザ
383                 
384                 if (!is_array($serial) || count($serial) <= 0) return true;
385                 
386                 // トランザクション開始
387                 $this->startTransaction();
388                 
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                         // 存在しない場合は、既に削除されたとして終了
396                         if (!$ret){
397                                 $this->endTransaction();
398                                 return false;
399                         }
400                 }
401                 
402                 // レコードを削除
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));
409                 
410                 // トランザクション確定
411                 $ret = $this->endTransaction();
412                 return $ret;
413         }
414         /**
415          * ルーム一覧を取得(管理用)
416          *
417          * @param function      $callback                       コールバック関数
418          * @return                      なし
419          */
420         function getAllRooms($callback)
421         {
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);
426         }
427         /**
428          * ルーム情報を識別IDで取得(管理用)
429          *
430          * @param string        $id                                     識別ID
431          * @param array     $row                                レコード
432          * @return bool                                                 取得 = true, 取得なし= false
433          */
434         function getRoomById($id, &$row)
435         {
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);
440                 return $ret;
441         }
442         /**
443          * 公開可能なルームかどうか
444          *
445          * @param string        $id                     識別ID
446          * @return bool                                 true=存在する、false=存在しない
447          */
448         /*function isActiveRoom($id)
449         {
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));
455         }*/
456         /**
457          * ルーム情報をシリアル番号で取得
458          *
459          * @param string        $serial                         シリアル番号
460          * @param array     $row                                レコード
461          * @return bool                                                 取得 = true, 取得なし= false
462          */
463         function getRoomBySerial($serial, &$row)
464         {
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);
468                 return $ret;
469         }
470         /**
471          * ルーム情報を更新
472          *
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=異常
480          */
481         function updateRoom($serial, $id, $name, $groupId, $visible, &$newSerial)
482         {
483                 $now = date("Y/m/d H:i:s");     // 現在日時
484                 $userId = $this->gEnv->getCurrentUserId();      // 現在のユーザ
485                 $contentUpdateDt = $this->gEnv->getInitValueOfTimestamp();
486                 
487                 // トランザクション開始
488                 $this->startTransaction();
489                 
490                 // 前レコードの削除状態チェック
491                 $historyIndex = 0;
492                 $desc = '';
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);
498                         if ($ret){
499                                 if (!$row['ur_deleted']){               // レコード存在していれば終了
500                                         $this->endTransaction();
501                                         return false;
502                                 }
503                                 $historyIndex = $row['ur_history_index'] + 1;
504                         }
505                 } else {                // 更新のとき
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();
513                                         return false;
514                                 }
515                                 $historyIndex = $row['ur_history_index'] + 1;
516                                 
517                                 // 識別IDとコンテンツ更新日時の変更は不可
518                                 $id = $row['ur_id'];
519                                 $contentUpdateDt = $row['ur_content_update_dt'];
520                         } else {                // 存在しない場合は終了
521                                 $this->endTransaction();
522                                 return false;
523                         }
524                         
525                         // 古いレコードを削除
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));
532                         if (!$ret){
533                                 $this->endTransaction();
534                                 return false;
535                         }
536                 }
537                 
538                 // データを追加
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));
544                 
545                 // 新規のシリアル番号取得
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'];
549                 
550                 // トランザクション確定
551                 $ret = $this->endTransaction();
552                 return $ret;
553         }
554         /**
555          * ルーム情報のコンテンツ更新日時を更新
556          *
557          * @param string $roomId                ルームID
558          * @param timestamp     $dt                     日時
559          * @return                                              true = 正常、false=異常
560          */
561         function updateRoomContentUpdateDt($roomId, $dt)
562         {
563                 $now = date("Y/m/d H:i:s");     // 現在日時
564                 $userId = $this->gEnv->getCurrentUserId();      // 現在のユーザ
565                 
566                 // トランザクション開始
567                 $this->startTransaction();
568                 
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);
573                 if (!$ret){
574                         $this->endTransaction();
575                         return false;
576                 }
577                 
578                 // コンテンツ更新日時を更新
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']));
585                 
586                 // トランザクション確定
587                 $ret = $this->endTransaction();
588                 return $ret;
589         }
590         /**
591          * ルーム情報の削除
592          *
593          * @param array $serial                 シリアルNo
594          * @return                                              true=成功、false=失敗
595          */
596         function delRoom($serial)
597         {
598                 $now = date("Y/m/d H:i:s");     // 現在日時
599                 $user = $this->gEnv->getCurrentUserId();        // 現在のユーザ
600                 
601                 if (!is_array($serial) || count($serial) <= 0) return true;
602                 
603                 // トランザクション開始
604                 $this->startTransaction();
605                 
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                         // 存在しない場合は、既に削除されたとして終了
613                         if (!$ret){
614                                 $this->endTransaction();
615                                 return false;
616                         }
617                 }
618                 
619                 // レコードを削除
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));
626                 
627                 // トランザクション確定
628                 $ret = $this->endTransaction();
629                 return $ret;
630         }
631         /**
632          * コンテンツの更新
633          *
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 = 失敗
644          */
645         function updateContent($id, $roomId, $langId, $html, $number, $visible, $startDt, $endDt, $limited)
646         {
647                 $now = date("Y/m/d H:i:s");     // 現在日時
648                 $user = $this->gEnv->getCurrentUserId();        // 現在のユーザ
649                 $contentType = '';
650                                 
651                 // トランザクション開始
652                 $this->startTransaction();
653                 
654                 // 前レコードの削除状態チェック
655                 $historyIndex = 0;
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);
662                 if ($ret){
663                         $historyIndex = $row['uc_history_index'] + 1;
664                         
665                         if (!$row['uc_deleted']){               // レコード存在していれば削除
666                                 // 古いレコードを削除
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']));
673                         }
674                 }
675
676                 // 新規レコード追加
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));
694                 
695                 // トランザクション確定
696                 $ret = $this->endTransaction();
697                 return $ret;
698         }
699         /**
700          * コンテンツをコンテンツIDで取得
701          *
702          * @param string  $id                   コンテンツID
703          * @param string  $roomId               ルームID
704          * @param string  $langId               言語ID
705          * @param array   $row                  レコード
706          * @return bool                                 取得 = true, 取得なし= false
707          */
708         function getContent($id, $roomId, $langId, &$row)
709         {
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);
716                 return $ret;
717         }
718         /**
719          * コンテンツ一覧を取得(管理用)
720          *
721          * @param string  $roomId               ルームID
722          * @param string  $langId               言語ID
723          * @param function      $callback                       コールバック関数
724          * @return                      なし
725          */
726         function getAllContents($roomId, $langId, $callback)
727         {
728                 if (empty($roomId) || empty($langId)) return;
729
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);
739         }
740         /**
741          * ルームIDですべてのコンテンツを取得
742          *
743          * @param string  $roomId               ルームID
744          * @param string  $langId               言語ID
745          * @param array   $rows                 取得レコード
746          * @return bool                                 取得 = true, 取得なし= false
747          */
748         function getAllContentsByRoomId($roomId, $langId, &$rows)
749         {
750                 if (empty($roomId) || empty($langId)) return false;
751                 
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);
757                 return $retValue;
758         }
759         /**
760          * カテゴリ情報をシリアル番号で取得
761          *
762          * @param string        $serial                         シリアル番号
763          * @param array     $row                                レコード
764          * @return bool                                                 取得 = true, 取得なし= false
765          */
766         function getCategoryBySerial($serial, &$row)
767         {
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);
771                 return $ret;
772         }
773         /**
774          * カテゴリ一覧を取得(管理用)
775          *
776          * @param string  $langId               言語ID
777          * @param function      $callback       コールバック関数
778          * @return                      なし
779          */
780         function getAllCategory($langId, $callback)
781         {
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);
788         }
789         /**
790          * メニュー作成用のカテゴリ一覧を取得(管理用)
791          *
792          * @param string  $langId               言語ID
793          * @param function      $callback       コールバック関数
794          * @return                      なし
795          */
796         function getAllCategoryForMenu($langId, $callback)
797         {
798                 // カテゴリ情報を取得
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;
806                 
807                 // CASE文作成
808                 $categoryId = '';
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 . ',';
814                 }
815                 $caseStr .= 'END AS no,';
816                 $categoryId = rtrim($categoryId, ',');
817                 // タイトルを最後にする
818                 $caseStr .=   'CASE ua_item_id ';
819                 $caseStr .=     'WHEN \'\' THEN 1 ';
820                 $caseStr .=     'ELSE 0 ';
821                 $caseStr .=   'END AS type ';
822                 
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);
829         }
830         /**
831          * カテゴリIDでカテゴリ情報を取得
832          *
833          * @param string  $categoryId   カテゴリID
834          * @param string  $langId               言語ID
835          * @param array   $row                  取得レコード
836          * @return bool                                 取得 = true, 取得なし= false
837          */
838         function getCategoryById($categoryId, $langId, &$row)
839         {
840                 if (empty($categoryId) || empty($langId)) return false;
841                 
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);
848                 return $retValue;
849         }
850         /**
851          * カテゴリIDですべてのカテゴリ項目を取得
852          *
853          * @param string  $categoryId   カテゴリID
854          * @param string  $langId               言語ID
855          * @param array   $rows                 取得レコード
856          * @return bool                                 取得 = true, 取得なし= false
857          */
858         function getAllCategoryItemsById($categoryId, $langId, &$rows)
859         {
860                 if (empty($categoryId) || empty($langId)) return false;
861                 
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);
869                 return $retValue;
870         }
871         /**
872          * カテゴリ情報を更新
873          *
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=異常
882          */
883         function updateCategory($serial, $id, $langId, $name, $index, $itemArray, &$newSerial)
884         {
885                 $now = date("Y/m/d H:i:s");     // 現在日時
886                 $userId = $this->gEnv->getCurrentUserId();      // 現在のユーザ
887                 
888                 // トランザクション開始
889                 $this->startTransaction();
890                 
891                 // 前レコードの削除状態チェック
892                 $historyIndex = 0;
893                 $desc = '';
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);
901                         if ($ret){
902                                 if (!$row['ua_deleted']){               // レコード存在していれば終了
903                                         $this->endTransaction();
904                                         return false;
905                                 }
906                                 $historyIndex = $row['ua_history_index'] + 1;
907                         }
908                 } else {                // 更新のとき
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();
916                                         return false;
917                                 }
918                                 $historyIndex = $row['ua_history_index'] + 1;
919                                 
920                                 // 識別IDと言語の変更は不可
921                                 $id = $row['ua_id'];
922                                 $langId = $row['ua_language_id'];
923                         } else {                // 存在しない場合は終了
924                                 $this->endTransaction();
925                                 return false;
926                         }
927                         
928                         // 古いレコードを削除
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));
937                         if (!$ret){
938                                 $this->endTransaction();
939                                 return false;
940                         }
941                 }
942                 
943                 // カテゴリ種別を追加
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));
949                 
950                 // カテゴリ項目を追加
951                 for ($i = 0; $i < count($itemArray); $i++){
952                         $line = $itemArray[$i];
953                         
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));
959                 }
960                 
961                 // 新規のシリアル番号取得
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'];
965                 
966                 // トランザクション確定
967                 $ret = $this->endTransaction();
968                 return $ret;
969         }
970         /**
971          * カテゴリ情報の削除
972          *
973          * @param array $serial                 シリアルNo
974          * @return                                              true=成功、false=失敗
975          */
976         function delCategory($serial)
977         {
978                 $now = date("Y/m/d H:i:s");     // 現在日時
979                 $user = $this->gEnv->getCurrentUserId();        // 現在のユーザ
980                 
981                 if (!is_array($serial) || count($serial) <= 0) return true;
982                 
983                 // トランザクション開始
984                 $this->startTransaction();
985                 
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                         // 存在しない場合は、既に削除されたとして終了
994                         if (!$ret){
995                                 $this->endTransaction();
996                                 return false;
997                         }
998                         $line = array();
999                         $line['ua_id'] = $row['ua_id'];
1000                         $line['ua_language_id'] = $row['ua_language_id'];
1001                         $delLines[] = $line;
1002                 }
1003                 
1004                 // レコードを削除
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']));
1014                 }
1015                 
1016                 // トランザクション確定
1017                 $ret = $this->endTransaction();
1018                 return $ret;
1019         }
1020         /**
1021          * ルームに対応するカテゴリの更新
1022          *
1023          * @param string $roomId                        ルームID
1024          * @param array $categoryValues         カテゴリ選択値
1025          * @return                                      true = 正常、false=異常
1026          */
1027         function updateRoomCategory($roomId, $categoryValues)
1028         {
1029                 $now = date("Y/m/d H:i:s");     // 現在日時
1030                 $userId = $this->gEnv->getCurrentUserId();      // 現在のユーザ
1031                 
1032                 // トランザクション開始
1033                 $this->startTransaction();
1034                 
1035                 // 古いレコードを削除
1036                 $queryStr = 'DELETE FROM user_content_room_category ';
1037                 $queryStr .=  'WHERE um_room_id = ? ';
1038                 $ret = $this->execStatement($queryStr, array($roomId));
1039                 if (!$ret){
1040                         $this->endTransaction();
1041                         return false;
1042                 }
1043
1044                 // データを追加
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]]));
1052                 }
1053                 
1054                 // トランザクション確定
1055                 $ret = $this->endTransaction();
1056                 return $ret;
1057         }
1058         /**
1059          * ルームに対応したカテゴリ情報を取得
1060          *
1061          * @param string  $roomId               ルームID
1062          * @param array   $rows                 取得レコード
1063          * @return bool                                 取得 = true, 取得なし= false
1064          */
1065         function getRoomCategory($roomId, &$rows)
1066         {
1067                 if (empty($roomId)) return false;
1068                 
1069                 $queryStr  = 'SELECT * FROM user_content_room_category ';
1070                 $queryStr .=   'WHERE um_room_id = ? ';
1071                 $retValue = $this->selectRecords($queryStr, array($roomId), $rows);
1072                 return $retValue;
1073         }
1074         /**
1075          * ルームに対応するカテゴリの削除
1076          *
1077          * @param string $roomId                        ルームID
1078          * @return                                      true = 正常、false=異常
1079          */
1080         function delRoomCategory($roomId)
1081         {
1082                 // トランザクション開始
1083                 $this->startTransaction();
1084                 
1085                 // 古いレコードを削除
1086                 $queryStr = 'DELETE FROM user_content_room_category ';
1087                 $queryStr .=  'WHERE um_room_id = ? ';
1088                 $ret = $this->execStatement($queryStr, array($roomId));
1089                 
1090                 // トランザクション確定
1091                 $ret = $this->endTransaction();
1092                 return $ret;
1093         }
1094 }
1095 ?>