7 * LICENSE: This source file is licensed under the terms of the GNU General Public License.
9 * @package Magic3 Framework
10 * @author 平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
11 * @copyright Copyright 2006-2016 Magic3 Project.
12 * @license http://www.gnu.org/copyleft/gpl.html GPL License
14 * @link http://www.magic3.org
16 require_once($gEnvManager->getDbPath() . '/baseDb.php');
18 class commentDb extends BaseDb
23 * @param string $contentType コンテンツタイプ
24 * @param array $rows レコード
25 * @return bool 1行以上取得 = true, 取得なし= false
27 function getAllConfig($contentType, &$rows)
29 $queryStr = 'SELECT * FROM comment_config ';
30 $queryStr .= 'WHERE cf_content_type = ?';
31 $retValue = $this->selectRecords($queryStr, array($contentType), $rows);
37 * @param string $contentType コンテンツタイプ
38 * @param string $contentsId コンテンツID
39 * @param array $row レコード
40 * @return string $value 値
42 function getConfig($contentType, $contentsId, &$row)
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);
54 * @param string $contentType コンテンツタイプ
55 * @param string $contentsId コンテンツID
56 * @param array $fieldValues フィールド値
57 * @return true = 正常、false=異常
59 function updateConfig($contentType, $contentsId, $fieldValues)
62 if (count($fieldValues) <= 0) return true;
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);
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 . ' = ?, ';
83 $fieldQueryStr = rtrim($fieldQueryStr, ', ');
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);
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 .= '?, ';
101 $params[] = $contentType;
102 $fieldQueryStr .= 'cf_content_type, ';
103 $fieldValueStr .= '?, ';
104 $params[] = $contentsId;
105 $fieldQueryStr .= 'cf_contents_id';
106 $fieldValueStr .= '?';
108 $queryStr = 'INSERT INTO comment_config ';
109 $queryStr .= '(' . $fieldQueryStr . ') VALUES ';
110 $queryStr .= '(' . $fieldValueStr . ')';
111 $ret = $this->execStatement($queryStr, $params);
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 コールバック関数
128 function searchCommentItems($contentType, $langId, $limit, $page, $startDt, $endDt, $keywords, $callback)
130 $offset = $limit * ($page -1);
131 if ($offset < 0) $offset = 0;
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;
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 . '%\') ';
155 if (!empty($startDt)){
156 $queryStr .= 'AND ? <= cm_regist_dt ';
157 $params[] = $startDt;
160 $queryStr .= 'AND cm_regist_dt < ? ';
163 $queryStr .= 'ORDER BY cm_serial DESC LIMIT ' . $limit . ' OFFSET ' . $offset;
164 $this->selectLoop($queryStr, $params, $callback);
169 * @param string $contentType コンテンツタイプ(空の場合はすべて)
170 * @param string $langId 言語
171 * @param timestamp $startDt 期間(開始日)
172 * @param timestamp $endDt 期間(終了日)
173 * @param array $keyword 検索キーワード
176 function getCommentItemCount($contentType, $langId, $startDt, $endDt, $keyword)
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;
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 . '%\') ';
200 if (!empty($startDt)){
201 $queryStr .= 'AND ? <= cm_regist_dt ';
202 $params[] = $startDt;
205 $queryStr .= 'AND cm_regist_dt < ? ';
208 return $this->selectRecordCount($queryStr, $params);
213 * @param int $serial シリアル番号
214 * @param array $fieldData 更新フィールド値
215 * @return bool true = 成功、false = 失敗
217 function updateCommentItem($serial, $fieldData)
219 $now = date("Y/m/d H:i:s"); // 現在日時
220 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
223 $this->startTransaction();
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();
234 } else { // 存在しない場合は終了
235 $this->endTransaction();
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 . ' = ?,';
254 $queryStr = 'UPDATE comment ';
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)));
263 $ret = $this->endTransaction();
269 * @param string $serial シリアル番号
270 * @param array $row レコード
271 * @return bool 取得 = true, 取得なし= false
273 function getCommentItem($serial, &$row)
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);
285 * @param array $serial シリアルNo
286 * @return true=成功、false=失敗
288 function delCommentItem($serial)
291 if (!is_array($serial)) return false;
292 if (count($serial) <= 0) return true;
294 $now = date("Y/m/d H:i:s"); // 現在日時
295 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
298 $this->startTransaction();
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){ // 既に登録レコードがあるとき
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();
319 $ret = $this->endTransaction();
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 コールバック関数
335 function getComment($contentType, $langId, $contentsId, $limit, $page, $sortDirection, $callback)
337 $offset = $limit * ($page -1);
338 if ($offset < 0) $offset = 0;
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;
347 if ($authorizedOnly){ // 公開可能なコメントのみ表示
348 $queryStr .= 'AND cm_status = ? '; $params[] = 2; // 公開
350 $queryStr .= 'AND cm_status != ? '; $params[] = 1; // 非公開以外(未承認と公開)
353 if (!empty($sortDirection)) $ord = 'DESC ';
354 $queryStr .= 'ORDER BY cm_no ' . $ord . 'LIMIT ' . $limit . ' OFFSET ' . $offset;
355 $this->selectLoop($queryStr, $params, $callback);
361 * @param string $contentType コンテンツタイプ
362 * @param string $langId 言語
363 * @param string $contentsId 共通コメントID
364 * @param bool $authorizedOnly 承認済みコメントに制限するかどうか
367 function getCommentCount($contentType, $langId, $contentsId, $authorizedOnly)
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;
376 if ($authorizedOnly){ // 公開可能なコメントのみ表示
377 $queryStr .= 'AND cm_status = ? '; $params[] = 2; // 公開
379 $queryStr .= 'AND cm_status != ? '; $params[] = 1; // 非公開以外(未承認と公開)
381 return $this->selectRecordCount($queryStr, $params);
387 * @param string $contentType コンテンツタイプ
388 * @param string $langId 言語
389 * @param int $limit 取得する項目数
390 * @param int $page 取得するページ(1~)
391 * @param function $callback コールバック関数
394 function getContent($contentType, $langId, $limit, $page, $callback)
396 $offset = $limit * ($page -1);
397 if ($offset < 0) $offset = 0;
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);
411 * @param string $contentType コンテンツタイプ
412 * @param string $langId 言語
415 function getContentCount($contentType, $langId)
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;
423 $itemCount = $this->selectRecordCount($queryStr, $params);
429 * @param string $contentType コンテンツタイプ
430 * @param string $langId 言語ID
431 * @param string $contentId コンテンツID
432 * @param array $row レコード
433 * @return bool 取得 = true, 取得なし= false
435 function getContentById($contentType, $langId, $contentId, &$row)
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);
448 * @param string $langId 言語
449 * @param int $limit 取得する項目数
450 * @param int $page 取得するページ(1~)
451 * @param function $callback コールバック関数
454 function getEntry($langId, $limit, $page, $callback)
456 $offset = $limit * ($page -1);
457 if ($offset < 0) $offset = 0;
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);
471 * @param string $langId 言語
474 function getEntryCount($langId)
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);
486 * @param string $id エントリーID
487 * @param string $langId 言語ID
488 * @param array $row レコード
489 * @return bool 取得 = true, 取得なし= false
491 function getEntryById($id, $langId, &$row)
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);
504 * @param string $langId 言語
505 * @param int $limit 取得する項目数
506 * @param int $page 取得するページ(1~)
507 * @param function $callback コールバック関数
510 function getProduct($langId, $limit, $page, $callback)
512 $offset = $limit * ($page -1);
513 if ($offset < 0) $offset = 0;
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);
526 * @param string $langId 言語
529 function getProductCount($langId)
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);
540 * @param int $id 商品ID
541 * @param string $langId 言語ID
542 * @param array $row レコード
543 * @return bool 取得 = true, 取得なし= false
545 function getProductById($id, $langId, &$row)
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);
558 * @param string $langId 言語
559 * @param int $limit 取得する項目数
560 * @param int $page 取得するページ(1~)
561 * @param function $callback コールバック関数
564 function getEvent($langId, $limit, $page, $callback)
566 $offset = $limit * ($page -1);
567 if ($offset < 0) $offset = 0;
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);
580 * @param string $langId 言語
583 function getEventCount($langId)
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);
594 * @param int $id イベントID
595 * @param string $langId 言語
596 * @param array $row レコード
597 * @return bool 取得 = true, 取得なし= false
599 function getEventById($id, $langId, &$row)
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);
611 * @param string $langId 言語
612 * @param int $limit 取得する項目数
613 * @param int $page 取得するページ(1~)
614 * @param function $callback コールバック関数
617 function getPhoto($langId, $limit, $page, $callback)
619 $offset = $limit * ($page -1);
620 if ($offset < 0) $offset = 0;
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);
633 * @param string $langId 言語
636 function getPhotoCount($langId)
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);
647 * @param int $id 公開画像ID
648 * @param string $langId 言語
649 * @param array $row レコード
650 * @return bool 取得 = true, 取得なし= false
652 function getPhotoById($id, $langId, &$row)
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);
664 * @param string $langId 言語
665 * @param int $limit 取得する項目数
666 * @param int $page 取得するページ(1~)
667 * @param function $callback コールバック関数
670 function getWiki($langId, $limit, $page, $callback)
672 $offset = $limit * ($page -1);
673 if ($offset < 0) $offset = 0;
675 $type = ''; // Wikiコンテンツタイプ
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);
687 * @param string $langId 言語
690 function getWikiCount($langId)
692 $type = ''; // Wikiコンテンツタイプ
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);
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 = 失敗
717 function addComment($addType, $contentType, $langId, $contentsId, $deviceType, $parentSerial, $title, $message, $url, $author, $email, $status, &$newSerial)
719 $now = date("Y/m/d H:i:s"); // 現在日時
720 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
722 if (!empty($userId)){ // ログイン中の場合
727 $this->startTransaction();
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);
736 $commentNo = $row['mid'] + 1;
742 if (!empty($parentSerial)){
743 $queryStr = 'SELECT * FROM comment ';
744 $queryStr .= 'WHERE cm_serial = ? ';
745 $ret = $this->selectRecord($queryStr, array(intval($parentSerial)), $row);
747 $nestLevel = $row['cm_nest_level'] + 1;
751 if (empty($addType)){ // 最後に追加
752 $sortOrder = $commentNo;
753 } else { // レスポンス先のコメントの最後に追加
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));
764 $queryStr = 'SELECT MAX(cm_serial) AS ns FROM comment ';
765 $ret = $this->selectRecord($queryStr, array(), $row);
766 if ($ret) $newSerial = $row['ns'];
769 $ret = $this->endTransaction();