OSDN Git Service

コンテンツタイプのユーザコンテンツ削除。
[magic3/magic3.git] / widgets / comment / include / db / commentDb.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    Magic3 Framework
10  * @author     平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
11  * @copyright  Copyright 2006-2016 Magic3 Project.
12  * @license    http://www.gnu.org/copyleft/gpl.html  GPL License
13  * @version    SVN: $Id$
14  * @link       http://www.magic3.org
15  */
16 require_once($gEnvManager->getDbPath() . '/baseDb.php');
17
18 class commentDb extends BaseDb
19 {
20         /**
21          * 汎用コメント定義値を取得
22          *
23          * @param string $contentType   コンテンツタイプ
24          * @param array  $rows                  レコード
25          * @return bool                                 1行以上取得 = true, 取得なし= false
26          */
27         function getAllConfig($contentType, &$rows)
28         {
29                 $queryStr  = 'SELECT * FROM comment_config ';
30                 $queryStr .=   'WHERE cf_content_type  = ?';
31                 $retValue = $this->selectRecords($queryStr, array($contentType), $rows);
32                 return $retValue;
33         }
34         /**
35          * 汎用コメント定義値を取得
36          *
37          * @param string $contentType   コンテンツタイプ
38          * @param string $contentsId            コンテンツID
39          * @param array  $row                   レコード
40          * @return string $value                値
41          */
42         function getConfig($contentType, $contentsId, &$row)
43         {
44                 $params = array();
45                 $queryStr  = 'SELECT * FROM comment_config ';
46                 $queryStr .=   'WHERE cf_content_type  = ?'; $params[] = $contentType;
47                 $queryStr .=     'AND cf_contents_id = ? '; $params[] = $contentsId;
48                 $ret = $this->selectRecord($queryStr, $params, $row);
49                 return $ret;
50         }
51         /**
52          * 汎用コメント定義値を更新
53          *
54          * @param string $contentType   コンテンツタイプ
55          * @param string $contentsId            コンテンツID
56          * @param array  $fieldValues   フィールド値
57          * @return                                              true = 正常、false=異常
58          */
59         function updateConfig($contentType, $contentsId, $fieldValues)
60         {
61                 // 引数チェック
62                 if (count($fieldValues) <= 0) return true;
63                 
64                 // データの確認
65                 $params = array();
66                 $queryStr  = 'SELECT * FROM comment_config ';
67                 $queryStr .=   'WHERE cf_content_type  = ?'; $params[] = $contentType;
68                 $queryStr .=     'AND cf_contents_id = ? '; $params[] = $contentsId;
69                 $ret = $this->isRecordExists($queryStr, $params);
70
71                 $params = array();
72                 $fieldQueryStr = '';
73                 $fieldValueStr = '';
74                 if ($ret){
75                         $keys = array_keys($fieldValues);               // キーを取得
76                         for ($i = 0; $i < count($keys); $i++){
77                                 $fieldName = $keys[$i];
78                                 $fieldValue = $fieldValues[$fieldName];
79                                 if (!isset($fieldValue)) continue;
80                                 $params[] = $fieldValue;
81                                 $fieldQueryStr .= $fieldName . ' = ?, ';
82                         }
83                         $fieldQueryStr = rtrim($fieldQueryStr, ', ');
84
85                         $queryStr  = 'UPDATE comment_config ';
86                         $queryStr .= 'SET ' . $fieldQueryStr . ' ';
87                         $queryStr .= 'WHERE cf_content_type  = ? '; $params[] = $contentType;
88                         $queryStr .=   'AND cf_contents_id = ? '; $params[] = $contentsId;
89                         $ret = $this->execStatement($queryStr, $params);
90                         return $ret;
91                 } else {
92                         $keys = array_keys($fieldValues);               // キーを取得
93                         for ($i = 0; $i < count($keys); $i++){
94                                 $fieldName = $keys[$i];
95                                 $fieldValue = $fieldValues[$fieldName];
96                                 if (!isset($fieldValue)) continue;
97                                 $params[] = $fieldValue;
98                                 $fieldQueryStr .= $fieldName . ', ';
99                                 $fieldValueStr .= '?, ';
100                         }
101                         $params[] = $contentType;
102                         $fieldQueryStr .= 'cf_content_type, ';
103                         $fieldValueStr .= '?, ';
104                         $params[] = $contentsId;
105                         $fieldQueryStr .= 'cf_contents_id';
106                         $fieldValueStr .= '?';
107                 
108                         $queryStr  = 'INSERT INTO comment_config ';
109                         $queryStr .= '(' . $fieldQueryStr . ') VALUES ';
110                         $queryStr .= '(' . $fieldValueStr . ')';
111                         $ret = $this->execStatement($queryStr, $params);
112                         return $ret;
113                 }
114         }
115         /**
116          * コメント項目一覧を取得(管理用)
117          *
118          * @param string $contentType                   コンテンツタイプ(空の場合はすべて)
119          * @param string        $langId                         言語
120          * @param int           $limit                          取得する項目数
121          * @param int           $page                           取得するページ(1~)
122          * @param timestamp     $startDt                        期間(開始日)
123          * @param timestamp     $endDt                          期間(終了日)
124          * @param array     $keywords                   検索キーワード
125          * @param function      $callback                       コールバック関数
126          * @return                      なし
127          */
128         function searchCommentItems($contentType, $langId, $limit, $page, $startDt, $endDt, $keywords, $callback)
129         {
130                 $offset = $limit * ($page -1);
131                 if ($offset < 0) $offset = 0;
132                 
133                 $params = array();
134                 $queryStr  = 'SELECT * FROM comment LEFT JOIN _login_user ON cm_create_user_id = lu_id AND lu_deleted = false ';
135                 $queryStr .=   'WHERE cm_language_id = ? '; $params[] = $langId;
136                 $queryStr .=     'AND cm_deleted = false ';             // 削除されていない
137                 if (!empty($contentType)){
138                         $queryStr .=     'AND cm_content_type = ? ';
139                         $params[] = $contentType;
140                 }
141                 
142                 // コメント内容を検索
143                 if (!empty($keywords)){
144                         for ($i = 0; $i < count($keywords); $i++){
145                                 $keyword = addslashes($keywords[$i]);// 「'"\」文字をエスケープ
146                                 $queryStr .=    'AND (cm_title LIKE \'%' . $keyword . '%\' ';
147                                 $queryStr .=    'OR cm_message LIKE \'%' . $keyword . '%\' ';
148                                 $queryStr .=    'OR cm_url LIKE \'%' . $keyword . '%\' ';
149                                 $queryStr .=    'OR cm_author LIKE \'%' . $keyword . '%\' ';
150                                 $queryStr .=    'OR cm_email LIKE \'%' . $keyword . '%\') ';
151                         }
152                 }
153                 
154                 // 日付範囲
155                 if (!empty($startDt)){
156                         $queryStr .=    'AND ? <= cm_regist_dt ';
157                         $params[] = $startDt;
158                 }
159                 if (!empty($endDt)){
160                         $queryStr .=    'AND cm_regist_dt < ? ';
161                         $params[] = $endDt;
162                 }
163                 $queryStr .=  'ORDER BY cm_serial DESC LIMIT ' . $limit . ' OFFSET ' . $offset;
164                 $this->selectLoop($queryStr, $params, $callback);
165         }
166         /**
167          * コメント項目数を取得(管理用)
168          *
169          * @param string $contentType                   コンテンツタイプ(空の場合はすべて)
170          * @param string        $langId                         言語
171          * @param timestamp     $startDt                        期間(開始日)
172          * @param timestamp     $endDt                          期間(終了日)
173          * @param array     $keyword                    検索キーワード
174          * @return int                                                  コメント数
175          */
176         function getCommentItemCount($contentType, $langId, $startDt, $endDt, $keyword)
177         {
178                 $params = array();
179                 $queryStr  = 'SELECT * FROM comment LEFT JOIN _login_user ON cm_create_user_id = lu_id AND lu_deleted = false ';
180                 $queryStr .=   'WHERE cm_language_id = ? '; $params[] = $langId;
181                 $queryStr .=     'AND cm_deleted = false ';             // 削除されていない
182                 if (!empty($contentType)){
183                         $queryStr .=     'AND cm_content_type = ? ';
184                         $params[] = $contentType;
185                 }
186                 
187                 // コメント内容を検索
188                 if (!empty($keywords)){
189                         for ($i = 0; $i < count($keywords); $i++){
190                                 $keyword = addslashes($keywords[$i]);// 「'"\」文字をエスケープ
191                                 $queryStr .=    'AND (cm_title LIKE \'%' . $keyword . '%\' ';
192                                 $queryStr .=    'OR cm_message LIKE \'%' . $keyword . '%\' ';
193                                 $queryStr .=    'OR cm_url LIKE \'%' . $keyword . '%\' ';
194                                 $queryStr .=    'OR cm_author LIKE \'%' . $keyword . '%\' ';
195                                 $queryStr .=    'OR cm_email LIKE \'%' . $keyword . '%\') ';
196                         }
197                 }
198                 
199                 // 日付範囲
200                 if (!empty($startDt)){
201                         $queryStr .=    'AND ? <= cm_regist_dt ';
202                         $params[] = $startDt;
203                 }
204                 if (!empty($endDt)){
205                         $queryStr .=    'AND cm_regist_dt < ? ';
206                         $params[] = $endDt;
207                 }
208                 return $this->selectRecordCount($queryStr, $params);
209         }
210         /**
211          * コメント項目の更新
212          *
213          * @param int     $serial               シリアル番号
214          * @param array   $fieldData    更新フィールド値
215          * @return bool                                 true = 成功、false = 失敗
216          */
217         function updateCommentItem($serial, $fieldData)
218         {
219                 $now = date("Y/m/d H:i:s");     // 現在日時
220                 $userId = $this->gEnv->getCurrentUserId();      // 現在のユーザ
221                                                 
222                 // トランザクション開始
223                 $this->startTransaction();
224                 
225                 // 指定のシリアルNoのレコードが削除状態でないかチェック
226                 $queryStr  = 'SELECT * FROM comment ';
227                 $queryStr .=   'WHERE cm_serial = ? ';
228                 $ret = $this->selectRecord($queryStr, array($serial), $row);
229                 if ($ret){              // 既に登録レコードがあるとき
230                         if ($row['cm_deleted']){                // レコードが削除されていれば終了
231                                 $this->endTransaction();
232                                 return false;
233                         }
234                 } else {                // 存在しない場合は終了
235                         $this->endTransaction();
236                         return false;
237                 }
238                 
239                 // フィールド値を追加
240                 $params = array();
241                 $otherValueStr = '';
242                 if (!empty($fieldData)){
243                         $keys = array_keys($fieldData);// キーを取得
244                         for ($i = 0; $i < count($keys); $i++){
245                                 $fieldName = $keys[$i];
246                                 $fieldValue = $fieldData[$fieldName];
247                                 if (!isset($fieldValue)) continue;
248                                 $params[] = $fieldValue;
249                                 $otherValueStr .= $fieldName . ' = ?,';
250                         }
251                 }
252                 
253                 // データを更新
254                 $queryStr  = 'UPDATE comment ';
255                 $queryStr .=   'SET ';
256                 $queryStr .=     $otherValueStr;
257                 $queryStr .=     'cm_update_user_id = ?, ';
258                 $queryStr .=     'cm_update_dt = ? ';
259                 $queryStr .=   'WHERE cm_serial = ?';
260                 $this->execStatement($queryStr, array_merge($params, array($userId, $now, $serial)));
261                 
262                 // トランザクション確定
263                 $ret = $this->endTransaction();
264                 return $ret;
265         }
266         /**
267          * コメント項目をシリアル番号で取得
268          *
269          * @param string        $serial                         シリアル番号
270          * @param array     $row                                レコード
271          * @return bool                                                 取得 = true, 取得なし= false
272          */
273         function getCommentItem($serial, &$row)
274         {
275                 $queryStr  = 'SELECT *, cdb.lu_name AS author, udb.lu_name AS update_user_name FROM comment LEFT JOIN _login_user AS cdb ON cm_create_user_id = cdb.lu_id AND cdb.lu_deleted = false ';
276 //              $queryStr  = 'SELECT * FROM comment LEFT JOIN _login_user ON cm_create_user_id = lu_id AND lu_deleted = false ';
277                 $queryStr .=   'LEFT JOIN _login_user AS udb ON cm_update_user_id = udb.lu_id AND udb.lu_deleted = false ';
278                 $queryStr .=   'WHERE cm_serial = ? ';
279                 $ret = $this->selectRecord($queryStr, array($serial), $row);
280                 return $ret;
281         }
282         /**
283          * コメント項目の削除
284          *
285          * @param array   $serial               シリアルNo
286          * @return                                              true=成功、false=失敗
287          */
288         function delCommentItem($serial)
289         {
290                 // 引数のエラーチェック
291                 if (!is_array($serial)) return false;
292                 if (count($serial) <= 0) return true;
293                 
294                 $now = date("Y/m/d H:i:s");     // 現在日時
295                 $userId = $this->gEnv->getCurrentUserId();      // 現在のユーザ
296                 
297                 // トランザクション開始
298                 $this->startTransaction();
299                 
300                 for ($i = 0; $i < count($serial); $i++){
301                         $queryStr  = 'SELECT * FROM comment ';
302                         $queryStr .=   'WHERE cm_deleted = false ';             // 未削除
303                         $queryStr .=     'AND cm_serial = ? ';
304                         $ret = $this->selectRecord($queryStr, array($serial[$i]), $row);
305                         if ($ret){              // 既に登録レコードがあるとき                      
306                                 // レコードを削除
307                                 $queryStr  = 'UPDATE comment ';
308                                 $queryStr .=   'SET cm_deleted = true, ';       // 削除
309                                 $queryStr .=     'cm_update_user_id = ?, ';
310                                 $queryStr .=     'cm_update_dt = ? ';
311                                 $queryStr .=   'WHERE cm_serial = ?';
312                                 $this->execStatement($queryStr, array($userId, $now, $serial[$i]));
313                         } else {// 指定のシリアルNoのレコードが削除状態のときはエラー
314                                 $this->endTransaction();
315                                 return false;
316                         }
317                 }
318                 // トランザクション確定
319                 $ret = $this->endTransaction();
320                 return $ret;
321         }
322         /**
323          * コメントを取得(一般表示用)
324          *
325          * @param string $contentType                   コンテンツタイプ
326          * @param string        $langId                         言語
327          * @param string    $contentsId                 共通コメントID
328          * @param int           $limit                          取得する項目数
329          * @param int           $page                           取得するページ(1~)
330          * @param int           $sortDirection          ソート方向(0=昇順、1=降順)
331          * @param bool      $authorizedOnly             承認済みコメントに制限するかどうか
332          * @param function      $callback                       コールバック関数
333          * @return                      なし
334          */
335         function getComment($contentType, $langId, $contentsId, $limit, $page, $sortDirection, $callback)
336         {
337                 $offset = $limit * ($page -1);
338                 if ($offset < 0) $offset = 0;
339                 
340                 $params = array();
341                 $queryStr  = 'SELECT * FROM comment LEFT JOIN _login_user ON cm_create_user_id = lu_id AND lu_deleted = false ';
342                 $queryStr .=   'WHERE cm_language_id = ? '; $params[] = $langId;
343                 $queryStr .=     'AND cm_deleted = false ';             // 削除されていない
344                 $queryStr .=     'AND cm_content_type = ? '; $params[] = $contentType;
345                 $queryStr .=     'AND cm_contents_id = ? '; $params[] = $contentsId;
346                 
347                 if ($authorizedOnly){                   // 公開可能なコメントのみ表示
348                         $queryStr .=     'AND cm_status = ? '; $params[] = 2;           // 公開
349                 } else {
350                         $queryStr .=     'AND cm_status != ? '; $params[] = 1;          // 非公開以外(未承認と公開)
351                 }
352                 $ord = '';
353                 if (!empty($sortDirection)) $ord = 'DESC ';
354                 $queryStr .=  'ORDER BY cm_no ' . $ord . 'LIMIT ' . $limit . ' OFFSET ' . $offset;
355                 $this->selectLoop($queryStr, $params, $callback);
356         }
357         
358         /**
359          * コメント数を取得(一般表示用)
360          *
361          * @param string $contentType                   コンテンツタイプ
362          * @param string $langId                                言語
363          * @param string    $contentsId                 共通コメントID
364          * @param bool   $authorizedOnly                承認済みコメントに制限するかどうか
365          * @return int                                                  コメント数
366          */
367         function getCommentCount($contentType, $langId, $contentsId, $authorizedOnly)
368         {
369                 $params = array();
370                 $queryStr  = 'SELECT * FROM comment LEFT JOIN _login_user ON cm_create_user_id = lu_id AND lu_deleted = false ';
371                 $queryStr .=   'WHERE cm_language_id = ? '; $params[] = $langId;
372                 $queryStr .=     'AND cm_deleted = false ';             // 削除されていない
373                 $queryStr .=     'AND cm_content_type = ? '; $params[] = $contentType;
374                 $queryStr .=     'AND cm_contents_id = ? '; $params[] = $contentsId;
375                 
376                 if ($authorizedOnly){                   // 公開可能なコメントのみ表示
377                         $queryStr .=     'AND cm_status = ? '; $params[] = 2;           // 公開
378                 } else {
379                         $queryStr .=     'AND cm_status != ? '; $params[] = 1;          // 非公開以外(未承認と公開)
380                 }
381                 return $this->selectRecordCount($queryStr, $params);
382         }
383         
384         /**
385          * コンテンツ一覧を取得(管理用)
386          *
387          * @param string        $contentType            コンテンツタイプ
388          * @param string        $langId                         言語
389          * @param int           $limit                          取得する項目数
390          * @param int           $page                           取得するページ(1~)
391          * @param function      $callback                       コールバック関数
392          * @return                      なし
393          */
394         function getContent($contentType, $langId, $limit, $page, $callback)
395         {
396                 $offset = $limit * ($page -1);
397                 if ($offset < 0) $offset = 0;
398                 
399                 $params = array();
400                 $queryStr  = 'SELECT *, cn_id AS contents_id, cn_name AS content_title, cn_create_dt AS update_dt FROM content LEFT JOIN _login_user ON cn_create_user_id = lu_id AND lu_deleted = false ';
401                 $queryStr .=   'WHERE cn_deleted = false ';             // 削除されていない
402                 $queryStr .=     'AND cn_type = ? ';$params[] = $contentType;
403                 $queryStr .=     'AND cn_language_id = ? ';$params[] = $langId;
404                 $queryStr .=   'ORDER BY cn_create_dt DESC ';
405                 $queryStr .=   'LIMIT ' . $limit . ' OFFSET ' . $offset;
406                 $this->selectLoop($queryStr, $params, $callback);
407         }
408         /**
409          * コンテンツ数を取得(管理用)
410          *
411          * @param string        $contentType            コンテンツタイプ
412          * @param string        $langId                         言語
413          * @return int                                                  項目数
414          */
415         function getContentCount($contentType, $langId)
416         {
417                 $params = array();
418                 $queryStr  = 'SELECT * FROM content ';
419                 $queryStr .=   'WHERE cn_deleted = false ';             // 削除されていない
420                 $queryStr .=     'AND cn_type = ? ';$params[] = $contentType;
421                 $queryStr .=     'AND cn_language_id = ? ';$params[] = $langId;
422
423                 $itemCount = $this->selectRecordCount($queryStr, $params);
424                 return $itemCount;
425         }
426         /**
427          * コンテンツ項目をコンテンツIDで取得
428          *
429          * @param string  $contentType          コンテンツタイプ
430          * @param string        $langId                 言語ID
431          * @param string        $contentId              コンテンツID
432          * @param array     $row                        レコード
433          * @return bool                                         取得 = true, 取得なし= false
434          */
435         function getContentById($contentType, $langId, $contentId, &$row)
436         {
437                 $queryStr  = 'SELECT * FROM content LEFT JOIN _login_user ON cn_create_user_id = lu_id AND lu_deleted = false ';
438                 $queryStr .=   'WHERE cn_deleted = false ';     // 削除されていない
439                 $queryStr .=    'AND cn_type = ? ';
440                 $queryStr .=   'AND cn_id = ? ';
441                 $queryStr .=   'AND cn_language_id = ? ';
442                 $ret = $this->selectRecord($queryStr, array($contentType, $contentId, $langId), $row);
443                 return $ret;
444         }
445         /**
446          * ブログ記事一覧を取得(管理用)
447          *
448          * @param string        $langId                         言語
449          * @param int           $limit                          取得する項目数
450          * @param int           $page                           取得するページ(1~)
451          * @param function      $callback                       コールバック関数
452          * @return                      なし
453          */
454         function getEntry($langId, $limit, $page, $callback)
455         {
456                 $offset = $limit * ($page -1);
457                 if ($offset < 0) $offset = 0;
458                 
459                 $params = array();
460                 $queryStr  = 'SELECT *, be_id AS contents_id, be_name AS content_title, be_create_dt AS update_dt FROM blog_entry LEFT JOIN _login_user ON be_create_user_id = lu_id AND lu_deleted = false ';
461                 $queryStr .=   'WHERE be_deleted = false ';             // 削除されていない
462                 $queryStr .=     'AND be_history_index >= 0 ';          // 正規(Regular)記事を対象
463                 $queryStr .=     'AND be_language_id = ? ';$params[] = $langId;
464                 $queryStr .=   'ORDER BY be_create_dt DESC ';
465                 $queryStr .=   'LIMIT ' . $limit . ' OFFSET ' . $offset;
466                 $this->selectLoop($queryStr, $params, $callback);
467         }
468         /**
469          * ブログ記事数を取得(管理用)
470          *
471          * @param string        $langId                         言語
472          * @return int                                                  項目数
473          */
474         function getEntryCount($langId)
475         {
476                 $params = array();
477                 $queryStr  = 'SELECT * FROM blog_entry LEFT JOIN _login_user ON be_create_user_id = lu_id AND lu_deleted = false ';
478                 $queryStr .=   'WHERE be_deleted = false ';             // 削除されていない
479                 $queryStr .=     'AND be_history_index >= 0 ';          // 正規(Regular)記事を対象
480                 $queryStr .=     'AND be_language_id = ? ';$params[] = $langId;
481                 return $this->selectRecordCount($queryStr, $params);
482         }
483         /**
484          * ブログ記事をエントリーIDで取得
485          *
486          * @param string        $id                                     エントリーID
487          * @param string        $langId                         言語ID
488          * @param array     $row                                レコード
489          * @return bool                                                 取得 = true, 取得なし= false
490          */
491         function getEntryById($id, $langId, &$row)
492         {
493                 $queryStr  = 'SELECT * FROM blog_entry ';
494                 $queryStr .=   'WHERE be_deleted = false ';     // 削除されていない
495                 $queryStr .=   'AND be_history_index >= 0 ';            // 正規(Regular)記事を対象
496                 $queryStr .=   'AND be_id = ? ';
497                 $queryStr .=   'AND be_language_id = ? ';
498                 $ret = $this->selectRecord($queryStr, array($id, $langId), $row);
499                 return $ret;
500         }
501         /**
502          * 商品情報一覧を取得(管理用)
503          *
504          * @param string        $langId                         言語
505          * @param int           $limit                          取得する項目数
506          * @param int           $page                           取得するページ(1~)
507          * @param function      $callback                       コールバック関数
508          * @return                      なし
509          */
510         function getProduct($langId, $limit, $page, $callback)
511         {
512                 $offset = $limit * ($page -1);
513                 if ($offset < 0) $offset = 0;
514                 
515                 $params = array();
516                 $queryStr  = 'SELECT *, pt_id AS contents_id, pt_name AS content_title, pt_create_dt AS update_dt FROM product LEFT JOIN _login_user ON pt_create_user_id = lu_id AND lu_deleted = false ';
517                 $queryStr .=   'WHERE pt_deleted = false ';             // 削除されていない
518                 $queryStr .=     'AND pt_language_id = ? ';$params[] = $langId;
519                 $queryStr .=   'ORDER BY pt_create_dt DESC ';
520                 $queryStr .=   'LIMIT ' . $limit . ' OFFSET ' . $offset;
521                 $this->selectLoop($queryStr, $params, $callback);
522         }
523         /**
524          * 商品情報数を取得(管理用)
525          *
526          * @param string        $langId                         言語
527          * @return int                                                  項目数
528          */
529         function getProductCount($langId)
530         {
531                 $params = array();
532                 $queryStr  = 'SELECT * FROM product LEFT JOIN _login_user ON pt_create_user_id = lu_id AND lu_deleted = false ';
533                 $queryStr .=   'WHERE pt_deleted = false ';             // 削除されていない
534                 $queryStr .=     'AND pt_language_id = ? ';$params[] = $langId;
535                 return $this->selectRecordCount($queryStr, $params);
536         }
537         /**
538          * 商品を商品ID、言語IDで取得
539          *
540          * @param int           $id                                     商品ID
541          * @param string        $langId                         言語ID
542          * @param array     $row                                レコード
543          * @return bool                                                 取得 = true, 取得なし= false
544          */
545         function getProductById($id, $langId, &$row)
546         {
547                 $queryStr  = 'SELECT * FROM product LEFT JOIN product_record ON pt_id = pe_product_id AND pt_language_id = pe_language_id ';
548                 $queryStr .=   'WHERE pt_deleted = false ';     // 削除されていない
549                 $queryStr .=    'AND pt_visible = true ';               // 表示可能な商品
550                 $queryStr .=    'AND pt_id = ? ';
551                 $queryStr .=    'AND pt_language_id = ? ';
552                 $ret = $this->selectRecord($queryStr, array($id, $langId), $row);
553                 return $ret;
554         }
555         /**
556          * イベント情報一覧を取得(管理用)
557          *
558          * @param string        $langId                         言語
559          * @param int           $limit                          取得する項目数
560          * @param int           $page                           取得するページ(1~)
561          * @param function      $callback                       コールバック関数
562          * @return                      なし
563          */
564         function getEvent($langId, $limit, $page, $callback)
565         {
566                 $offset = $limit * ($page -1);
567                 if ($offset < 0) $offset = 0;
568                 
569                 $params = array();
570                 $queryStr  = 'SELECT *, ee_id AS contents_id, ee_name AS content_title, ee_create_dt AS update_dt FROM event_entry LEFT JOIN _login_user ON ee_create_user_id = lu_id AND lu_deleted = false ';
571                 $queryStr .=   'WHERE ee_deleted = false ';             // 削除されていない
572                 $queryStr .=     'AND ee_language_id = ? ';$params[] = $langId;
573                 $queryStr .=   'ORDER BY ee_create_dt DESC ';
574                 $queryStr .=   'LIMIT ' . $limit . ' OFFSET ' . $offset;
575                 $this->selectLoop($queryStr, $params, $callback);
576         }
577         /**
578          * イベント情報数を取得(管理用)
579          *
580          * @param string        $langId                         言語
581          * @return int                                                  項目数
582          */
583         function getEventCount($langId)
584         {
585                 $params = array();
586                 $queryStr  = 'SELECT * FROM event_entry LEFT JOIN _login_user ON ee_create_user_id = lu_id AND lu_deleted = false ';
587                 $queryStr .=   'WHERE ee_deleted = false ';             // 削除されていない
588                 $queryStr .=     'AND ee_language_id = ? ';$params[] = $langId;
589                 return $this->selectRecordCount($queryStr, $params);
590         }
591         /**
592          * イベント情報を取得
593          *
594          * @param int           $id                                     イベントID
595          * @param string        $langId                         言語
596          * @param array     $row                                レコード
597          * @return bool                                                 取得 = true, 取得なし= false
598          */
599         function getEventById($id, $langId, &$row)
600         {
601                 $queryStr  = 'SELECT * FROM event_entry ';
602                 $queryStr .=   'WHERE ee_deleted = false ';     // 削除されていない
603                 $queryStr .=   'AND ee_id = ? ';
604                 $queryStr .=   'AND ee_language_id = ? ';
605                 $ret = $this->selectRecord($queryStr, array($id, $langId), $row);
606                 return $ret;
607         }
608         /**
609          * フォト情報一覧を取得(管理用)
610          *
611          * @param string        $langId                         言語
612          * @param int           $limit                          取得する項目数
613          * @param int           $page                           取得するページ(1~)
614          * @param function      $callback                       コールバック関数
615          * @return                      なし
616          */
617         function getPhoto($langId, $limit, $page, $callback)
618         {
619                 $offset = $limit * ($page -1);
620                 if ($offset < 0) $offset = 0;
621                 
622                 $params = array();
623                 $queryStr  = 'SELECT *, ht_public_id AS contents_id, ht_name AS content_title, ht_create_dt AS update_dt FROM photo LEFT JOIN _login_user ON ht_create_user_id = lu_id AND lu_deleted = false ';
624                 $queryStr .=   'WHERE ht_deleted = false ';
625                 $queryStr .=     'AND ht_language_id = ? '; $params[] = $langId;
626                 $queryStr .=   'ORDER BY ht_create_dt DESC ';
627                 $queryStr .=   'LIMIT ' . $limit . ' OFFSET ' . $offset;
628                 $this->selectLoop($queryStr, $params, $callback);
629         }
630         /**
631          * フォト情報を取得(管理用)
632          *
633          * @param string        $langId                         言語
634          * @return int                                                  項目数
635          */
636         function getPhotoCount($langId)
637         {
638                 $params = array();
639                 $queryStr  = 'SELECT * FROM photo LEFT JOIN _login_user ON ht_create_user_id = lu_id AND lu_deleted = false ';
640                 $queryStr .=   'WHERE ht_deleted = false ';
641                 $queryStr .=     'AND ht_language_id = ? '; $params[] = $langId;
642                 return $this->selectRecordCount($queryStr, $params);
643         }
644         /**
645          * フォト情報を取得
646          *
647          * @param int           $id                                     公開画像ID
648          * @param string        $langId                         言語
649          * @param array     $row                                レコード
650          * @return bool                                                 取得 = true, 取得なし= false
651          */
652         function getPhotoById($id, $langId, &$row)
653         {
654                 $queryStr  = 'SELECT * FROM photo LEFT JOIN _login_user ON ht_owner_id = lu_id AND lu_deleted = false ';
655                 $queryStr .=   'WHERE ht_deleted = false ';
656                 $queryStr .=     'AND ht_public_id = ? ';
657                 $queryStr .=     'AND ht_language_id = ? ';
658                 $ret = $this->selectRecord($queryStr, array($id, $langId), $row);
659                 return $ret;
660         }
661         /**
662          * Wiki情報一覧を取得(管理用)
663          *
664          * @param string        $langId                         言語
665          * @param int           $limit                          取得する項目数
666          * @param int           $page                           取得するページ(1~)
667          * @param function      $callback                       コールバック関数
668          * @return                      なし
669          */
670         function getWiki($langId, $limit, $page, $callback)
671         {
672                 $offset = $limit * ($page -1);
673                 if ($offset < 0) $offset = 0;
674                 
675                 $type = '';             // Wikiコンテンツタイプ
676                 $params = array();
677                 $queryStr  = 'SELECT *, wc_id AS contents_id, wc_id AS content_title, wc_create_dt AS update_dt FROM wiki_content LEFT JOIN _login_user ON wc_create_user_id = lu_id AND lu_deleted = false ';
678                 $queryStr .=   'WHERE wc_deleted = false ';             // 削除されていない
679                 $queryStr .=     'AND wc_type = ? ';$params[] = $type;
680                 $queryStr .=   'ORDER BY wc_create_dt DESC ';
681                 $queryStr .=   'LIMIT ' . $limit . ' OFFSET ' . $offset;
682                 $this->selectLoop($queryStr, $params, $callback);
683         }
684         /**
685          * Wiki情報数を取得(管理用)
686          *
687          * @param string        $langId                         言語
688          * @return int                                                  項目数
689          */
690         function getWikiCount($langId)
691         {
692                 $type = '';             // Wikiコンテンツタイプ
693                 $params = array();
694                 $queryStr  = 'SELECT * FROM wiki_content LEFT JOIN _login_user ON wc_create_user_id = lu_id AND lu_deleted = false ';
695                 $queryStr .=   'WHERE wc_deleted = false ';             // 削除されていない
696                 $queryStr .=     'AND wc_type = ? ';$params[] = $type;
697                 return $this->selectRecordCount($queryStr, $params);
698         }
699         /**
700          * コメントの新規追加
701          *
702          * @param int $addType                  追加タイプ(0=フラット、1=ツリー)
703          * @param string $contentType   コンテンツタイプ
704          * @param string $langId                言語
705          * @param string  $contentsId   共通コメントID
706          * @param int  $deviceType              デバイスタイプ(0=PC、1=携帯、2=スマートフォン)
707          * @param int  $parentSerial    親コメントシリアル番号
708          * @param string  $title                題名
709          * @param string  $message              コメントメッセージ
710          * @param string  $url                  URL
711          * @param string  $author               ユーザ名
712          * @param string  $email                Eメール
713          * @param int $status                   状態(0=未設定、1=非公開、2=公開)
714          * @param int     $newSerial    新規シリアル番号
715          * @return bool                                 true = 成功、false = 失敗
716          */
717         function addComment($addType, $contentType, $langId, $contentsId, $deviceType, $parentSerial, $title, $message, $url, $author, $email, $status, &$newSerial)
718         {
719                 $now = date("Y/m/d H:i:s");     // 現在日時
720                 $userId = $this->gEnv->getCurrentUserId();      // 現在のユーザ
721                 $nestLevel = 0;
722                 if (!empty($userId)){           // ログイン中の場合
723                         $author = '';
724                 }
725                 
726                 // トランザクション開始
727                 $this->startTransaction();
728                 
729                 // コメントNoを決定する
730                 $params = array();
731                 $queryStr  = 'SELECT MAX(cm_no) AS mid FROM comment ';
732                 $queryStr .=   'WHERE cm_content_type = ? '; $params[] = $contentType;
733                 $queryStr .=     'AND cm_contents_id = ? '; $params[] = $contentsId;
734                 $ret = $this->selectRecord($queryStr, $params, $row);
735                 if ($ret){
736                         $commentNo = $row['mid'] + 1;
737                 } else {
738                         $commentNo = 1;
739                 }
740                 
741                 // 親コメントがある場合は情報を取得
742                 if (!empty($parentSerial)){
743                         $queryStr  = 'SELECT * FROM comment ';
744                         $queryStr .=   'WHERE cm_serial = ? ';
745                         $ret = $this->selectRecord($queryStr, array(intval($parentSerial)), $row);
746                         if ($ret){
747                                 $nestLevel = $row['cm_nest_level'] + 1;
748                         }
749                 }
750                 // 表示順を作成
751                 if (empty($addType)){           // 最後に追加
752                         $sortOrder = $commentNo;
753                 } else {                // レスポンス先のコメントの最後に追加
754                 }
755                 // コメントを追加
756                 $queryStr  = 'INSERT INTO comment ';
757                 $queryStr .=   '(cm_content_type, cm_contents_id, cm_device_type, cm_language_id, cm_parent_serial, cm_no, cm_sort_order, cm_nest_level, cm_title, cm_message, cm_url, cm_author, cm_email, cm_status, cm_create_user_id, cm_create_dt) ';
758                 $queryStr .=   'VALUES ';
759                 $queryStr .=   '(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
760                 $this->execStatement($queryStr, array($contentType, $contentsId, $deviceType, $langId, $parentSerial, $commentNo, $sortOrder, $nestLevel, $title, $message, $url, $author, $email, $status, $userId, $now));
761                 
762                 // 新規のシリアル番号取得
763                 $newSerial = 0;
764                 $queryStr = 'SELECT MAX(cm_serial) AS ns FROM comment ';
765                 $ret = $this->selectRecord($queryStr, array(), $row);
766                 if ($ret) $newSerial = $row['ns'];
767                         
768                 // トランザクション確定
769                 $ret = $this->endTransaction();
770                 return $ret;
771         }
772 }
773 ?>