OSDN Git Service

DB更新スクリプト更新。
[magic3/magic3.git] / widgets / m / blog / include / db / blogDb.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 blogDb extends BaseDb
19 {
20         /**
21          * ブログ定義値をすべて取得
22          *
23          * 掲示板IDが空のデフォルト値は常に読み込む
24          *
25          * @param array  $rows                  レコード
26          * @param string $blogId                ブログID(空の場合はデフォルト値を取得)
27          * @return bool                                 1行以上取得 = true, 取得なし= false
28          */
29         function getAllConfig(&$rows, $blogId = '')
30         {
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);
36                 return $retValue;
37         }
38         /**
39          * ブログ定義値を更新
40          *
41          * @param string $key           キーとなる項目値
42          * @param string $value         値
43          * @param string $blogId                掲示板ID
44          * @return                                      true = 正常、false=異常
45          */
46         function updateConfig($key, $value, $blogId = '')
47         {
48                 // トランザクションスタート
49                 $this->startTransaction();
50                 
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);
55                 if ($ret){
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));                   
61                 } else {
62                         $queryStr  = 'INSERT INTO blog_config (';
63                         $queryStr .=   'bg_blog_id, ';
64                         $queryStr .=   'bg_id, ';
65                         $queryStr .=   'bg_value ';
66                         $queryStr .= ') VALUES (';
67                         $queryStr .=   '?, ?, ?';
68                         $queryStr .= ')';
69                         $ret = $this->execStatement($queryStr, array($blogId, $key, $value));   
70                 }
71                 // トランザクション終了
72                 $ret = $this->endTransaction();
73                 return $ret;
74         }
75         /**
76          * エントリー項目を検索(表示用)
77          *
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                       コールバック関数
84          * @return                      なし
85          */
86         function searchEntryItemsByKeyword($limit, $page, $now, $keyword, $langId, $callback)
87         {
88                 $offset = $limit * ($page -1);
89                 if ($offset < 0) $offset = 0;
90                 $initDt = $this->gEnv->getInitValueOfTimestamp();               // 日時初期化値
91                 $params = array();
92                 
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;       // 投稿日時が現在日時よりも過去のものを取得
98
99                 // タイトルと記事を検索
100                 if (!empty($keyword)){
101                         // 「'"\」文字をエスケープ
102                         $keyword = addslashes($keyword);
103                         
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 . '%\') ';
108                 }
109                 
110                 // 公開期間を指定
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 > ?)) ';
113                 $params[] = $initDt;
114                 $params[] = $initDt;
115                 $params[] = $now;
116                 $params[] = $initDt;
117                 $params[] = $initDt;
118                 $params[] = $now;
119                 
120                 $queryStr .=  'ORDER BY be_regist_dt desc limit ' . $limit . ' offset ' . $offset;
121                 $this->selectLoop($queryStr, $params, $callback, null);
122         }
123         /**
124          * 検索条件のエントリー項目数を取得(表示用)
125          *
126          * @param timestamp $now                                現在日時(現在日時より未来の投稿日時の記事は取得しない)
127          * @param string        $keyword                        検索キーワード
128          * @param string        $langId                         言語
129          * @return int                                                  項目数
130          */
131         function searchEntryItemsCountByKeyword($now, $keyword, $langId)
132         {
133                 $initDt = $this->gEnv->getInitValueOfTimestamp();               // 日時初期化値
134                 $params = array();
135                 
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;       // 投稿日時が現在日時よりも過去のものを取得
141
142                 // タイトルと記事を検索
143                 if (!empty($keyword)){
144                         // 「'"\」文字をエスケープ
145                         $keyword = addslashes($keyword);
146                         
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 . '%\') ';
151                 }
152                 
153                 // 公開期間を指定
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 > ?)) ';
156                 $params[] = $initDt;
157                 $params[] = $initDt;
158                 $params[] = $now;
159                 $params[] = $initDt;
160                 $params[] = $initDt;
161                 $params[] = $now;
162                 return $this->selectRecordCount($queryStr, $params);
163         }
164         /**
165          * エントリー項目を取得(表示用)
166          *
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                       コールバック関数
176          * @return                      なし
177          */
178         function getEntryItems($limit, $page, $now, $entryId, $startDt, $endDt, $langId, $order, $callback)
179         {
180                 $offset = $limit * ($page -1);
181                 if ($offset < 0) $offset = 0;
182                 $initDt = $this->gEnv->getInitValueOfTimestamp();               // 日時初期化値
183                 $params = array();
184                 
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;               // 投稿日時が現在日時よりも過去のものを取得
193                         
194                         // 検索条件
195                         if (!empty($startDt)){
196                                 $queryStr .=    'AND ? <= be_regist_dt ';
197                                 $params[] = $startDt;
198                         }
199                         if (!empty($endDt)){
200                                 $queryStr .=    'AND be_regist_dt < ? ';
201                                 $params[] = $endDt;
202                         }
203                         
204                         // 公開期間を指定
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 > ?)) ';
207                         $params[] = $initDt;
208                         $params[] = $initDt;
209                         $params[] = $now;
210                         $params[] = $initDt;
211                         $params[] = $initDt;
212                         $params[] = $now;
213                 
214                         $ord = '';
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);
218                 } else {
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;               // 投稿日時が現在日時よりも過去のものを取得
226                         
227                         // 公開期間を指定
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 > ?)) ';
230                         $params[] = $initDt;
231                         $params[] = $initDt;
232                         $params[] = $now;
233                         $params[] = $initDt;
234                         $params[] = $initDt;
235                         $params[] = $now;
236                         $this->selectLoop($queryStr, $params, $callback, null);         // 「公開」(2)データを表示
237                 }
238         }
239         
240         /**
241          * エントリー項目数を取得(表示用)
242          *
243          * @param timestamp $now                                現在日時(現在日時より未来の投稿日時の記事は取得しない)
244          * @param timestamp     $startDt                        期間(開始日)
245          * @param timestamp     $endDt                          期間(終了日)
246          * @param string        $langId                         言語
247          * @return int                                                  項目数
248          */
249         function getEntryItemsCount($now, $startDt, $endDt, $langId)
250         {
251                 $initDt = $this->gEnv->getInitValueOfTimestamp();               // 日時初期化値
252                 $params = array();
253                 
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;               // 投稿日時が現在日時よりも過去のものを取得
260                 
261                 // 検索条件
262                 if (!empty($startDt)){
263                         $queryStr .=    'AND ? <= be_regist_dt ';
264                         $params[] = $startDt;
265                 }
266                 if (!empty($endDt)){
267                         $queryStr .=    'AND be_regist_dt < ? ';
268                         $params[] = $endDt;
269                 }
270                 
271                 // 公開期間を指定
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 > ?)) ';
274                 $params[] = $initDt;
275                 $params[] = $initDt;
276                 $params[] = $now;
277                 $params[] = $initDt;
278                 $params[] = $initDt;
279                 $params[] = $now;
280                 return $this->selectRecordCount($queryStr, $params);
281         }
282         /**
283          * エントリー項目をカテゴリー指定で取得(表示用)
284          *
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                       コールバック関数
292          * @return                      なし
293          */
294         function getEntryItemsByCategory($limit, $page, $now, $categoryId, $langId, $order, $callback)
295         {
296                 $offset = $limit * ($page -1);
297                 if ($offset < 0) $offset = 0;
298                 $initDt = $this->gEnv->getInitValueOfTimestamp();               // 日時初期化値
299                 $params = array();
300                 
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;                       // 投稿日時が現在日時よりも過去のものを取得
308                 
309                 // 公開期間を指定
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 > ?)) ';
312                 $params[] = $initDt;
313                 $params[] = $initDt;
314                 $params[] = $now;
315                 $params[] = $initDt;
316                 $params[] = $initDt;
317                 $params[] = $now;
318                 
319                 // シリアル番号を取得
320                 $serialArray = array();
321                 $ret = $this->selectRecords($queryStr, $params, $serialRows);
322                 if ($ret){
323                         for ($i = 0; $i < count($serialRows); $i++){
324                                 $serialArray[] = $serialRows[$i]['be_serial'];
325                         }
326                 }
327                 $serialStr = implode(',', $serialArray);
328                 if (empty($serialStr)) $serialStr = '0';        // 0レコードのときはダミー値を設定
329         
330                 $queryStr = 'SELECT * FROM blog_entry ';
331                 $queryStr .=  'WHERE be_serial in (' . $serialStr . ') ';
332                 $ord = '';
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);
336         }
337         /**
338          * エントリー項目数をカテゴリー指定で取得(表示用)
339          *
340          * @param timestamp $now                                現在日時(現在日時より未来の投稿日時の記事は取得しない)
341          * @param int           $categoryId                     カテゴリーID
342          * @param string        $langId                         言語
343          * @return int                                                  エントリー項目数
344          */
345         function getEntryItemsCountByCategory($now, $categoryId, $langId)
346         {
347                 $initDt = $this->gEnv->getInitValueOfTimestamp();               // 日時初期化値
348                 $params = array();
349                 
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;                       // 投稿日時が現在日時よりも過去のものを取得
357                 
358                 // 公開期間を指定
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 > ?)) ';
361                 $params[] = $initDt;
362                 $params[] = $initDt;
363                 $params[] = $now;
364                 $params[] = $initDt;
365                 $params[] = $initDt;
366                 $params[] = $now;
367                 
368                 // シリアル番号を取得
369                 $serialArray = array();
370                 $ret = $this->selectRecords($queryStr, $params, $serialRows);
371                 if ($ret){
372                         for ($i = 0; $i < count($serialRows); $i++){
373                                 $serialArray[] = $serialRows[$i]['be_serial'];
374                         }
375                 }
376                 $serialStr = implode(',', $serialArray);
377                 if (empty($serialStr)) $serialStr = '0';        // 0レコードのときはダミー値を設定
378         
379                 $queryStr = 'SELECT * FROM blog_entry ';
380                 $queryStr .=  'WHERE be_serial in (' . $serialStr . ') ';
381                 return $this->selectRecordCount($queryStr, array());
382         }
383         /**
384          * ブログカテゴリーをカテゴリーIDで取得
385          *
386          * @param int           $id                                     カテゴリーID
387          * @param string        $langId                         言語ID
388          * @param array     $row                                レコード
389          * @return bool                                                 取得 = true, 取得なし= false
390          */
391         function getCategoryByCategoryId($id, $langId, &$row)
392         {
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);
398                 return $ret;
399         }
400 }
401 ?>