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 blogDb extends BaseDb
23 * 掲示板IDが空のデフォルト値は常に読み込む
25 * @param array $rows レコード
26 * @param string $blogId ブログID(空の場合はデフォルト値を取得)
27 * @return bool 1行以上取得 = true, 取得なし= false
29 function getAllConfig(&$rows, $blogId = '')
31 $queryStr = 'SELECT * FROM blog_config ';
32 $queryStr .= 'WHERE bg_blog_id = \'\' ';
33 $queryStr .= 'OR bg_blog_id = ? ';
34 $queryStr .= 'ORDER BY bg_blog_id, bg_index';
35 $retValue = $this->selectRecords($queryStr, array($blogId), $rows);
41 * @param string $key キーとなる項目値
42 * @param string $value 値
43 * @param string $blogId 掲示板ID
44 * @return true = 正常、false=異常
46 function updateConfig($key, $value, $blogId = '')
49 $this->startTransaction();
51 $queryStr = 'SELECT bg_value FROM blog_config ';
52 $queryStr .= 'WHERE bg_blog_id = ? ';
53 $queryStr .= 'AND bg_id = ? ';
54 $ret = $this->selectRecord($queryStr, array($blogId, $key), $row);
56 $queryStr = 'UPDATE blog_config ';
57 $queryStr .= 'SET bg_value = ? ';
58 $queryStr .= 'WHERE bg_blog_id = ? ';
59 $queryStr .= 'AND bg_id = ? ';
60 $ret = $this->execStatement($queryStr, array($value, $blogId, $key));
62 $queryStr = 'INSERT INTO blog_config (';
63 $queryStr .= 'bg_blog_id, ';
64 $queryStr .= 'bg_id, ';
65 $queryStr .= 'bg_value ';
66 $queryStr .= ') VALUES (';
67 $queryStr .= '?, ?, ?';
69 $ret = $this->execStatement($queryStr, array($blogId, $key, $value));
72 $ret = $this->endTransaction();
78 * @param int $limit 取得する項目数
79 * @param int $page 取得するページ(1~)
80 * @param timestamp $now 現在日時(現在日時より未来の投稿日時の記事は取得しない)
81 * @param string $keyword 検索キーワード
82 * @param string $langId 言語
83 * @param function $callback コールバック関数
86 function searchEntryItemsByKeyword($limit, $page, $now, $keyword, $langId, $callback)
88 $offset = $limit * ($page -1);
89 if ($offset < 0) $offset = 0;
90 $initDt = $this->gEnv->getInitValueOfTimestamp(); // 日時初期化値
93 $queryStr = 'SELECT * FROM blog_entry ';
94 $queryStr .= 'WHERE be_language_id = ? '; $params[] = $langId;
95 $queryStr .= 'AND be_deleted = false '; // 削除されていない
96 $queryStr .= 'AND be_history_index >= 0 '; // 正規(Regular)記事を対象
97 $queryStr .= 'AND be_regist_dt <= ? '; $params[] = $now; // 投稿日時が現在日時よりも過去のものを取得
100 if (!empty($keyword)){
102 $keyword = addslashes($keyword);
104 $queryStr .= 'AND (be_name LIKE \'%' . $keyword . '%\' ';
105 $queryStr .= 'OR be_html LIKE \'%' . $keyword . '%\' ';
106 $queryStr .= 'OR be_html_ext LIKE \'%' . $keyword . '%\' ';
107 $queryStr .= 'OR be_description LIKE \'%' . $keyword . '%\') ';
111 $queryStr .= 'AND (be_active_start_dt = ? OR (be_active_start_dt != ? AND be_active_start_dt <= ?)) ';
112 $queryStr .= 'AND (be_active_end_dt = ? OR (be_active_end_dt != ? AND be_active_end_dt > ?)) ';
120 $queryStr .= 'ORDER BY be_regist_dt desc limit ' . $limit . ' offset ' . $offset;
121 $this->selectLoop($queryStr, $params, $callback, null);
124 * 検索条件のエントリー項目数を取得(表示用)
126 * @param timestamp $now 現在日時(現在日時より未来の投稿日時の記事は取得しない)
127 * @param string $keyword 検索キーワード
128 * @param string $langId 言語
131 function searchEntryItemsCountByKeyword($now, $keyword, $langId)
133 $initDt = $this->gEnv->getInitValueOfTimestamp(); // 日時初期化値
136 $queryStr = 'SELECT * FROM blog_entry ';
137 $queryStr .= 'WHERE be_language_id = ? '; $params[] = $langId;
138 $queryStr .= 'AND be_deleted = false '; // 削除されていない
139 $queryStr .= 'AND be_history_index >= 0 '; // 正規(Regular)記事を対象
140 $queryStr .= 'AND be_regist_dt <= ? '; $params[] = $now; // 投稿日時が現在日時よりも過去のものを取得
143 if (!empty($keyword)){
145 $keyword = addslashes($keyword);
147 $queryStr .= 'AND (be_name LIKE \'%' . $keyword . '%\' ';
148 $queryStr .= 'OR be_html LIKE \'%' . $keyword . '%\' ';
149 $queryStr .= 'OR be_html_ext LIKE \'%' . $keyword . '%\' ';
150 $queryStr .= 'OR be_description LIKE \'%' . $keyword . '%\') ';
154 $queryStr .= 'AND (be_active_start_dt = ? OR (be_active_start_dt != ? AND be_active_start_dt <= ?)) ';
155 $queryStr .= 'AND (be_active_end_dt = ? OR (be_active_end_dt != ? AND be_active_end_dt > ?)) ';
162 return $this->selectRecordCount($queryStr, $params);
167 * @param int $limit 取得する項目数
168 * @param int $page 取得するページ(1~)
169 * @param timestamp $now 現在日時(現在日時より未来の投稿日時の記事は取得しない)
170 * @param int $entryId エントリーID(0のときは期間で取得)
171 * @param timestamp $startDt 期間(開始日)
172 * @param timestamp $endDt 期間(終了日)
173 * @param string $langId 言語
174 * @param int $order 取得順(0=昇順,1=降順)
175 * @param function $callback コールバック関数
178 function getEntryItems($limit, $page, $now, $entryId, $startDt, $endDt, $langId, $order, $callback)
180 $offset = $limit * ($page -1);
181 if ($offset < 0) $offset = 0;
182 $initDt = $this->gEnv->getInitValueOfTimestamp(); // 日時初期化値
185 // エントリーIDの指定がない場合は、期間で取得
186 if (empty($entryId)){
187 $queryStr = 'SELECT * FROM blog_entry ';
188 $queryStr .= 'WHERE be_deleted = false '; // 削除されていない
189 $queryStr .= 'AND be_history_index >= 0 '; // 正規(Regular)記事を対象
190 $queryStr .= 'AND be_status = ? '; $params[] = 2; // 「公開」(2)データを表示
191 $queryStr .= 'AND be_language_id = ? '; $params[] = $langId;
192 $queryStr .= 'AND be_regist_dt <= ? '; $params[] = $now; // 投稿日時が現在日時よりも過去のものを取得
195 if (!empty($startDt)){
196 $queryStr .= 'AND ? <= be_regist_dt ';
197 $params[] = $startDt;
200 $queryStr .= 'AND be_regist_dt < ? ';
205 $queryStr .= 'AND (be_active_start_dt = ? OR (be_active_start_dt != ? AND be_active_start_dt <= ?)) ';
206 $queryStr .= 'AND (be_active_end_dt = ? OR (be_active_end_dt != ? AND be_active_end_dt > ?)) ';
215 if (!empty($order)) $ord = 'DESC ';
216 $queryStr .= 'ORDER BY be_regist_dt ' . $ord . 'LIMIT ' . $limit . ' offset ' . $offset;// 投稿順
217 $this->selectLoop($queryStr, $params, $callback, null);
219 $queryStr = 'SELECT * FROM blog_entry ';
220 $queryStr .= 'WHERE be_deleted = false '; // 削除されていない
221 $queryStr .= 'AND be_history_index >= 0 '; // 正規(Regular)記事を対象
222 $queryStr .= 'AND be_status = ? '; $params[] = 2; // 「公開」(2)データを表示
223 $queryStr .= 'AND be_id = ? '; $params[] = $entryId;
224 $queryStr .= 'AND be_language_id = ? '; $params[] = $langId;
225 $queryStr .= 'AND be_regist_dt <= ? '; $params[] = $now; // 投稿日時が現在日時よりも過去のものを取得
228 $queryStr .= 'AND (be_active_start_dt = ? OR (be_active_start_dt != ? AND be_active_start_dt <= ?)) ';
229 $queryStr .= 'AND (be_active_end_dt = ? OR (be_active_end_dt != ? AND be_active_end_dt > ?)) ';
236 $this->selectLoop($queryStr, $params, $callback, null); // 「公開」(2)データを表示
243 * @param timestamp $now 現在日時(現在日時より未来の投稿日時の記事は取得しない)
244 * @param timestamp $startDt 期間(開始日)
245 * @param timestamp $endDt 期間(終了日)
246 * @param string $langId 言語
249 function getEntryItemsCount($now, $startDt, $endDt, $langId)
251 $initDt = $this->gEnv->getInitValueOfTimestamp(); // 日時初期化値
254 $queryStr = 'SELECT * FROM blog_entry ';
255 $queryStr .= 'WHERE be_deleted = false '; // 削除されていない
256 $queryStr .= 'AND be_history_index >= 0 '; // 正規(Regular)記事を対象
257 $queryStr .= 'AND be_status = ? '; $params[] = 2; // 「公開」(2)データを表示
258 $queryStr .= 'AND be_language_id = ? '; $params[] = $langId;
259 $queryStr .= 'AND be_regist_dt <= ? '; $params[] = $now; // 投稿日時が現在日時よりも過去のものを取得
262 if (!empty($startDt)){
263 $queryStr .= 'AND ? <= be_regist_dt ';
264 $params[] = $startDt;
267 $queryStr .= 'AND be_regist_dt < ? ';
272 $queryStr .= 'AND (be_active_start_dt = ? OR (be_active_start_dt != ? AND be_active_start_dt <= ?)) ';
273 $queryStr .= 'AND (be_active_end_dt = ? OR (be_active_end_dt != ? AND be_active_end_dt > ?)) ';
280 return $this->selectRecordCount($queryStr, $params);
283 * エントリー項目をカテゴリー指定で取得(表示用)
285 * @param int $limit 取得する項目数
286 * @param int $page 取得するページ(1~)
287 * @param timestamp $now 現在日時(現在日時より未来の投稿日時の記事は取得しない)
288 * @param int $categoryId カテゴリーID
289 * @param string $langId 言語
290 * @param int $order 取得順(0=昇順,1=降順)
291 * @param function $callback コールバック関数
294 function getEntryItemsByCategory($limit, $page, $now, $categoryId, $langId, $order, $callback)
296 $offset = $limit * ($page -1);
297 if ($offset < 0) $offset = 0;
298 $initDt = $this->gEnv->getInitValueOfTimestamp(); // 日時初期化値
301 $queryStr = 'SELECT distinct(be_serial) FROM blog_entry RIGHT JOIN blog_entry_with_category ON be_serial = bw_entry_serial ';
302 $queryStr .= 'WHERE be_language_id = ? '; $params[] = $langId;
303 $queryStr .= 'AND be_deleted = false '; // 削除されていない
304 $queryStr .= 'AND be_history_index >= 0 '; // 正規(Regular)記事を対象
305 $queryStr .= 'AND be_status = ? '; $params[] = 2; // 「公開」(2)データ
306 $queryStr .= 'AND bw_category_id = ? '; $params[] = $categoryId;// 記事カテゴリー
307 $queryStr .= 'AND be_regist_dt <= ? '; $params[] = $now; // 投稿日時が現在日時よりも過去のものを取得
310 $queryStr .= 'AND (be_active_start_dt = ? OR (be_active_start_dt != ? AND be_active_start_dt <= ?)) ';
311 $queryStr .= 'AND (be_active_end_dt = ? OR (be_active_end_dt != ? AND be_active_end_dt > ?)) ';
320 $serialArray = array();
321 $ret = $this->selectRecords($queryStr, $params, $serialRows);
323 for ($i = 0; $i < count($serialRows); $i++){
324 $serialArray[] = $serialRows[$i]['be_serial'];
327 $serialStr = implode(',', $serialArray);
328 if (empty($serialStr)) $serialStr = '0'; // 0レコードのときはダミー値を設定
330 $queryStr = 'SELECT * FROM blog_entry ';
331 $queryStr .= 'WHERE be_serial in (' . $serialStr . ') ';
333 if (!empty($order)) $ord = 'DESC ';
334 $queryStr .= 'ORDER BY be_regist_dt ' . $ord . 'LIMIT ' . $limit . ' offset ' . $offset;// 投稿順
335 $this->selectLoop($queryStr, array(), $callback, null);
338 * エントリー項目数をカテゴリー指定で取得(表示用)
340 * @param timestamp $now 現在日時(現在日時より未来の投稿日時の記事は取得しない)
341 * @param int $categoryId カテゴリーID
342 * @param string $langId 言語
343 * @return int エントリー項目数
345 function getEntryItemsCountByCategory($now, $categoryId, $langId)
347 $initDt = $this->gEnv->getInitValueOfTimestamp(); // 日時初期化値
350 $queryStr = 'SELECT distinct(be_serial) FROM blog_entry RIGHT JOIN blog_entry_with_category ON be_serial = bw_entry_serial ';
351 $queryStr .= 'WHERE be_language_id = ? '; $params[] = $langId;
352 $queryStr .= 'AND be_deleted = false '; // 削除されていない
353 $queryStr .= 'AND be_history_index >= 0 '; // 正規(Regular)記事を対象
354 $queryStr .= 'AND be_status = ? '; $params[] = 2; // 「公開」(2)データ
355 $queryStr .= 'AND bw_category_id = ? '; $params[] = $categoryId;// 記事カテゴリー
356 $queryStr .= 'AND be_regist_dt <= ? '; $params[] = $now; // 投稿日時が現在日時よりも過去のものを取得
359 $queryStr .= 'AND (be_active_start_dt = ? OR (be_active_start_dt != ? AND be_active_start_dt <= ?)) ';
360 $queryStr .= 'AND (be_active_end_dt = ? OR (be_active_end_dt != ? AND be_active_end_dt > ?)) ';
369 $serialArray = array();
370 $ret = $this->selectRecords($queryStr, $params, $serialRows);
372 for ($i = 0; $i < count($serialRows); $i++){
373 $serialArray[] = $serialRows[$i]['be_serial'];
376 $serialStr = implode(',', $serialArray);
377 if (empty($serialStr)) $serialStr = '0'; // 0レコードのときはダミー値を設定
379 $queryStr = 'SELECT * FROM blog_entry ';
380 $queryStr .= 'WHERE be_serial in (' . $serialStr . ') ';
381 return $this->selectRecordCount($queryStr, array());
384 * ブログカテゴリーをカテゴリーIDで取得
386 * @param int $id カテゴリーID
387 * @param string $langId 言語ID
388 * @param array $row レコード
389 * @return bool 取得 = true, 取得なし= false
391 function getCategoryByCategoryId($id, $langId, &$row)
393 $queryStr = 'SELECT * FROM blog_category LEFT JOIN _login_user ON bc_create_user_id = lu_id AND lu_deleted = false ';
394 $queryStr .= 'WHERE bc_deleted = false '; // 削除されていない
395 $queryStr .= 'AND bc_id = ? ';
396 $queryStr .= 'AND bc_language_id = ? ';
397 $ret = $this->selectRecord($queryStr, array($id, $langId), $row);