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-2010 Magic3 Project.
12 * @license http://www.gnu.org/copyleft/gpl.html GPL License
13 * @version SVN: $Id: blogDb.php 3835 2010-11-17 04:26:15Z fishbone $
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_regist_dt <= ? '; $params[] = $now; // 投稿日時が現在日時よりも過去のものを取得
99 if (!empty($keyword)){
101 $keyword = addslashes($keyword);
103 $queryStr .= 'AND (be_name LIKE \'%' . $keyword . '%\' ';
104 $queryStr .= 'OR be_html LIKE \'%' . $keyword . '%\' ';
105 $queryStr .= 'OR be_html_ext LIKE \'%' . $keyword . '%\' ';
106 $queryStr .= 'OR be_description LIKE \'%' . $keyword . '%\') ';
110 $queryStr .= 'AND (be_active_start_dt = ? OR (be_active_start_dt != ? AND be_active_start_dt <= ?)) ';
111 $queryStr .= 'AND (be_active_end_dt = ? OR (be_active_end_dt != ? AND be_active_end_dt > ?)) ';
119 $queryStr .= 'ORDER BY be_regist_dt desc limit ' . $limit . ' offset ' . $offset;
120 $this->selectLoop($queryStr, $params, $callback, null);
123 * 検索条件のエントリー項目数を取得(表示用)
125 * @param timestamp $now 現在日時(現在日時より未来の投稿日時の記事は取得しない)
126 * @param string $keyword 検索キーワード
127 * @param string $langId 言語
130 function searchEntryItemsCountByKeyword($now, $keyword, $langId)
132 $initDt = $this->gEnv->getInitValueOfTimestamp(); // 日時初期化値
135 $queryStr = 'SELECT * FROM blog_entry ';
136 $queryStr .= 'WHERE be_language_id = ? '; $params[] = $langId;
137 $queryStr .= 'AND be_deleted = false '; // 削除されていない
138 $queryStr .= 'AND be_regist_dt <= ? '; $params[] = $now; // 投稿日時が現在日時よりも過去のものを取得
141 if (!empty($keyword)){
143 $keyword = addslashes($keyword);
145 $queryStr .= 'AND (be_name LIKE \'%' . $keyword . '%\' ';
146 $queryStr .= 'OR be_html LIKE \'%' . $keyword . '%\' ';
147 $queryStr .= 'OR be_html_ext LIKE \'%' . $keyword . '%\' ';
148 $queryStr .= 'OR be_description LIKE \'%' . $keyword . '%\') ';
152 $queryStr .= 'AND (be_active_start_dt = ? OR (be_active_start_dt != ? AND be_active_start_dt <= ?)) ';
153 $queryStr .= 'AND (be_active_end_dt = ? OR (be_active_end_dt != ? AND be_active_end_dt > ?)) ';
160 return $this->selectRecordCount($queryStr, $params);
165 * @param int $limit 取得する項目数
166 * @param int $page 取得するページ(1~)
167 * @param timestamp $now 現在日時(現在日時より未来の投稿日時の記事は取得しない)
168 * @param int $entryId エントリーID(0のときは期間で取得)
169 * @param timestamp $startDt 期間(開始日)
170 * @param timestamp $endDt 期間(終了日)
171 * @param string $langId 言語
172 * @param int $order 取得順(0=昇順,1=降順)
173 * @param function $callback コールバック関数
176 function getEntryItems($limit, $page, $now, $entryId, $startDt, $endDt, $langId, $order, $callback)
178 $offset = $limit * ($page -1);
179 if ($offset < 0) $offset = 0;
180 $initDt = $this->gEnv->getInitValueOfTimestamp(); // 日時初期化値
183 // エントリーIDの指定がない場合は、期間で取得
184 if (empty($entryId)){
185 $queryStr = 'SELECT * FROM blog_entry ';
186 $queryStr .= 'WHERE be_deleted = false '; // 削除されていない
187 $queryStr .= 'AND be_status = ? '; $params[] = 2; // 「公開」(2)データを表示
188 $queryStr .= 'AND be_language_id = ? '; $params[] = $langId;
189 $queryStr .= 'AND be_regist_dt <= ? '; $params[] = $now; // 投稿日時が現在日時よりも過去のものを取得
192 if (!empty($startDt)){
193 $queryStr .= 'AND ? <= be_regist_dt ';
194 $params[] = $startDt;
197 $queryStr .= 'AND be_regist_dt < ? ';
202 $queryStr .= 'AND (be_active_start_dt = ? OR (be_active_start_dt != ? AND be_active_start_dt <= ?)) ';
203 $queryStr .= 'AND (be_active_end_dt = ? OR (be_active_end_dt != ? AND be_active_end_dt > ?)) ';
212 if (!empty($order)) $ord = 'DESC ';
213 $queryStr .= 'ORDER BY be_regist_dt ' . $ord . 'LIMIT ' . $limit . ' offset ' . $offset;// 投稿順
214 $this->selectLoop($queryStr, $params, $callback, null);
216 $queryStr = 'SELECT * FROM blog_entry ';
217 $queryStr .= 'WHERE be_deleted = false '; // 削除されていない
218 $queryStr .= 'AND be_status = ? '; $params[] = 2; // 「公開」(2)データを表示
219 $queryStr .= 'AND be_id = ? '; $params[] = $entryId;
220 $queryStr .= 'AND be_language_id = ? '; $params[] = $langId;
221 $queryStr .= 'AND be_regist_dt <= ? '; $params[] = $now; // 投稿日時が現在日時よりも過去のものを取得
224 $queryStr .= 'AND (be_active_start_dt = ? OR (be_active_start_dt != ? AND be_active_start_dt <= ?)) ';
225 $queryStr .= 'AND (be_active_end_dt = ? OR (be_active_end_dt != ? AND be_active_end_dt > ?)) ';
232 $this->selectLoop($queryStr, $params, $callback, null); // 「公開」(2)データを表示
239 * @param timestamp $now 現在日時(現在日時より未来の投稿日時の記事は取得しない)
240 * @param timestamp $startDt 期間(開始日)
241 * @param timestamp $endDt 期間(終了日)
242 * @param string $langId 言語
245 function getEntryItemsCount($now, $startDt, $endDt, $langId)
247 $initDt = $this->gEnv->getInitValueOfTimestamp(); // 日時初期化値
250 $queryStr = 'SELECT * FROM blog_entry ';
251 $queryStr .= 'WHERE be_deleted = false '; // 削除されていない
252 $queryStr .= 'AND be_status = ? '; $params[] = 2; // 「公開」(2)データを表示
253 $queryStr .= 'AND be_language_id = ? '; $params[] = $langId;
254 $queryStr .= 'AND be_regist_dt <= ? '; $params[] = $now; // 投稿日時が現在日時よりも過去のものを取得
257 if (!empty($startDt)){
258 $queryStr .= 'AND ? <= be_regist_dt ';
259 $params[] = $startDt;
262 $queryStr .= 'AND be_regist_dt < ? ';
267 $queryStr .= 'AND (be_active_start_dt = ? OR (be_active_start_dt != ? AND be_active_start_dt <= ?)) ';
268 $queryStr .= 'AND (be_active_end_dt = ? OR (be_active_end_dt != ? AND be_active_end_dt > ?)) ';
275 return $this->selectRecordCount($queryStr, $params);
278 * エントリー項目をカテゴリー指定で取得(表示用)
280 * @param int $limit 取得する項目数
281 * @param int $page 取得するページ(1~)
282 * @param timestamp $now 現在日時(現在日時より未来の投稿日時の記事は取得しない)
283 * @param int $categoryId カテゴリーID
284 * @param string $langId 言語
285 * @param int $order 取得順(0=昇順,1=降順)
286 * @param function $callback コールバック関数
289 function getEntryItemsByCategory($limit, $page, $now, $categoryId, $langId, $order, $callback)
291 $offset = $limit * ($page -1);
292 if ($offset < 0) $offset = 0;
293 $initDt = $this->gEnv->getInitValueOfTimestamp(); // 日時初期化値
296 $queryStr = 'SELECT distinct(be_serial) FROM blog_entry RIGHT JOIN blog_entry_with_category ON be_serial = bw_entry_serial ';
297 $queryStr .= 'WHERE be_language_id = ? '; $params[] = $langId;
298 $queryStr .= 'AND be_deleted = false '; // 削除されていない
299 $queryStr .= 'AND be_status = ? '; $params[] = 2; // 「公開」(2)データ
300 $queryStr .= 'AND bw_category_id = ? '; $params[] = $categoryId;// 記事カテゴリー
301 $queryStr .= 'AND be_regist_dt <= ? '; $params[] = $now; // 投稿日時が現在日時よりも過去のものを取得
304 $queryStr .= 'AND (be_active_start_dt = ? OR (be_active_start_dt != ? AND be_active_start_dt <= ?)) ';
305 $queryStr .= 'AND (be_active_end_dt = ? OR (be_active_end_dt != ? AND be_active_end_dt > ?)) ';
314 $serialArray = array();
315 $ret = $this->selectRecords($queryStr, $params, $serialRows);
317 for ($i = 0; $i < count($serialRows); $i++){
318 $serialArray[] = $serialRows[$i]['be_serial'];
321 $serialStr = implode(',', $serialArray);
322 if (empty($serialStr)) $serialStr = '0'; // 0レコードのときはダミー値を設定
324 $queryStr = 'SELECT * FROM blog_entry ';
325 $queryStr .= 'WHERE be_serial in (' . $serialStr . ') ';
327 if (!empty($order)) $ord = 'DESC ';
328 $queryStr .= 'ORDER BY be_regist_dt ' . $ord . 'LIMIT ' . $limit . ' offset ' . $offset;// 投稿順
329 $this->selectLoop($queryStr, array(), $callback, null);
332 * エントリー項目数をカテゴリー指定で取得(表示用)
334 * @param timestamp $now 現在日時(現在日時より未来の投稿日時の記事は取得しない)
335 * @param int $categoryId カテゴリーID
336 * @param string $langId 言語
337 * @return int エントリー項目数
339 function getEntryItemsCountByCategory($now, $categoryId, $langId)
341 $initDt = $this->gEnv->getInitValueOfTimestamp(); // 日時初期化値
344 $queryStr = 'SELECT distinct(be_serial) FROM blog_entry RIGHT JOIN blog_entry_with_category ON be_serial = bw_entry_serial ';
345 $queryStr .= 'WHERE be_language_id = ? '; $params[] = $langId;
346 $queryStr .= 'AND be_deleted = false '; // 削除されていない
347 $queryStr .= 'AND be_status = ? '; $params[] = 2; // 「公開」(2)データ
348 $queryStr .= 'AND bw_category_id = ? '; $params[] = $categoryId;// 記事カテゴリー
349 $queryStr .= 'AND be_regist_dt <= ? '; $params[] = $now; // 投稿日時が現在日時よりも過去のものを取得
352 $queryStr .= 'AND (be_active_start_dt = ? OR (be_active_start_dt != ? AND be_active_start_dt <= ?)) ';
353 $queryStr .= 'AND (be_active_end_dt = ? OR (be_active_end_dt != ? AND be_active_end_dt > ?)) ';
362 $serialArray = array();
363 $ret = $this->selectRecords($queryStr, $params, $serialRows);
365 for ($i = 0; $i < count($serialRows); $i++){
366 $serialArray[] = $serialRows[$i]['be_serial'];
369 $serialStr = implode(',', $serialArray);
370 if (empty($serialStr)) $serialStr = '0'; // 0レコードのときはダミー値を設定
372 $queryStr = 'SELECT * FROM blog_entry ';
373 $queryStr .= 'WHERE be_serial in (' . $serialStr . ') ';
374 return $this->selectRecordCount($queryStr, array());
377 * ブログカテゴリーをカテゴリーIDで取得
379 * @param int $id カテゴリーID
380 * @param string $langId 言語ID
381 * @param array $row レコード
382 * @return bool 取得 = true, 取得なし= false
384 function getCategoryByCategoryId($id, $langId, &$row)
386 $queryStr = 'SELECT * FROM blog_category LEFT JOIN _login_user ON bc_create_user_id = lu_id AND lu_deleted = false ';
387 $queryStr .= 'WHERE bc_deleted = false '; // 削除されていない
388 $queryStr .= 'AND bc_id = ? ';
389 $queryStr .= 'AND bc_language_id = ? ';
390 $ret = $this->selectRecord($queryStr, array($id, $langId), $row);