OSDN Git Service

fd99897ca8e3f395a4477705b8b1748046d69634
[magic3/magic3.git] / widgets / evententry_main / include / db / evententry_mainDb.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-2015 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 evententry_mainDb extends BaseDb
19 {
20         /**
21          * イベント予約定義値を取得をすべて取得
22          *
23          * @param array  $rows                  レコード
24          * @return bool                                 1行以上取得 = true, 取得なし= false
25          */
26         function getAllConfig(&$rows)
27         {
28                 $queryStr  = 'SELECT * FROM news_config ';
29                 $queryStr .=   'ORDER BY nc_index';
30                 $retValue = $this->selectRecords($queryStr, array(), $rows);
31                 return $retValue;
32         }
33         /**
34          * イベント予約定義値を取得
35          *
36          * @param string $key           キーとなる項目値
37          * @return string $value        値
38          */
39         function getConfig($key)
40         {
41                 $retValue = '';
42                 $queryStr = 'SELECT nc_value FROM news_config ';
43                 $queryStr .=  'WHERE nc_id  = ?';
44                 $ret = $this->selectRecord($queryStr, array($key), $row);
45                 if ($ret) $retValue = $row['nc_value'];
46                 return $retValue;
47         }
48         /**
49          * イベント予約定義値を更新
50          *
51          * @param string $key           キーとなる項目値
52          * @param string $value         値
53          * @return                                      true = 正常、false=異常
54          */
55         function updateConfig($key, $value)
56         {
57                 // データの確認
58                 $queryStr = 'SELECT nc_value FROM news_config ';
59                 $queryStr .=  'WHERE nc_id  = ?';
60                 $ret = $this->isRecordExists($queryStr, array($key));
61                 if ($ret){
62                         $queryStr = "UPDATE news_config SET nc_value = ? WHERE nc_id = ?";
63                         return $this->execStatement($queryStr, array($value, $key));
64                 } else {
65                         $queryStr = "INSERT INTO news_config (nc_id, nc_value) VALUES (?, ?)";
66                         return $this->execStatement($queryStr, array($key, $value));
67                 }
68         }
69         /**
70          * イベント項目数を取得(管理用)
71          *
72          * @param string $contentType           コンテンツタイプ
73          * @param string $langId                        言語ID
74          * @param array  $keywords                      検索キーワード
75          * @return int                                                  項目数
76          */
77         function getEventListCount($contentType, $langId, $keywords)
78         {
79                 $params = array();
80                 switch ($contentType){
81                 case M3_VIEW_TYPE_EVENT:                // イベント情報
82                         $queryStr  = 'SELECT * FROM evententry_info LEFT JOIN event_entry ON ei_contents_id = ee_id AND ee_deleted = false ';
83                         $queryStr .=   'AND ee_language_id = ? '; $params[] = $langId;
84                         break;
85                 default:
86                         $queryStr = 'SELECT * FROM evententry_info ';
87                         break;
88                 }
89                 $queryStr .=  'WHERE ei_deleted = false ';                              // 削除されていない
90                 $queryStr .=    'AND ei_content_type = ? '; $params[] = $contentType;   // コンテンツタイプ
91
92                 // 検索キーワード条件
93                 if (!empty($keywords)){
94                         for ($i = 0; $i < count($keywords); $i++){
95                                 $keyword = addslashes($keywords[$i]);// 「'"\」文字をエスケープ
96                                 
97                                 switch ($contentType){
98                                 case M3_VIEW_TYPE_EVENT:                // イベント情報
99                                         $queryStr .=    'AND (ee_name LIKE \'%' . $keyword . '%\' ';
100                                         $queryStr .=    'OR ee_html LIKE \'%' . $keyword . '%\' ';
101                                         $queryStr .=    'OR ee_html_ext LIKE \'%' . $keyword . '%\' ';
102                                         $queryStr .=    'OR ee_summary LIKE \'%' . $keyword . '%\' ';
103                                         $queryStr .=    'OR ee_place LIKE \'%' . $keyword . '%\' ';
104                                         $queryStr .=    'OR ee_contact LIKE \'%' . $keyword . '%\' ';
105                                         $queryStr .=    'OR ee_url LIKE \'%' . $keyword . '%\' ';
106                                         $queryStr .=    'OR ee_option_fields LIKE \'%' . $keyword . '%\') ';    // ユーザ定義フィールド
107                                         break;
108                                 default:
109                                         break;
110                                 }
111                                 $queryStr .=    'AND (ei_code LIKE \'%' . $keyword . '%\' ';            // イベント予約受付コード
112                                 $queryStr .=    'OR ei_html LIKE \'%' . $keyword . '%\') ';                     // 説明
113                         }
114                 }
115                 return $this->selectRecordCount($queryStr, $params);
116         }
117         /**
118          * イベント項目を検索(管理用)
119          *
120          * @param string        $contentType            コンテンツタイプ
121          * @param string    $langId                             言語ID
122          * @param int           $limit                          取得する項目数
123          * @param int           $page                           取得するページ(1~)
124          * @param array         $keywords                       検索キーワード
125          * @param function      $callback                       コールバック関数
126          * @return                      なし
127          */
128         function getEventList($contentType, $langId, $limit, $page, $keywords, $callback)
129         {
130                 $offset = $limit * ($page -1);
131                 if ($offset < 0) $offset = 0;
132                 
133                 $params = array();
134                 switch ($contentType){
135                 case M3_VIEW_TYPE_EVENT:                // イベント情報
136                         $queryStr  = 'SELECT * FROM evententry_info LEFT JOIN event_entry ON ei_contents_id = ee_id AND ee_deleted = false ';
137                         $queryStr .=   'AND ee_language_id = ? '; $params[] = $langId;
138                         break;
139                 default:
140                         $queryStr = 'SELECT * FROM evententry_info ';
141                         break;
142                 }
143                 $queryStr .=  'WHERE ei_deleted = false ';                              // 削除されていない
144                 $queryStr .=    'AND ei_content_type = ? '; $params[] = $contentType;   // コンテンツタイプ
145
146                 // 検索キーワード条件
147                 if (!empty($keywords)){
148                         for ($i = 0; $i < count($keywords); $i++){
149                                 $keyword = addslashes($keywords[$i]);// 「'"\」文字をエスケープ
150                                 
151                                 switch ($contentType){
152                                 case M3_VIEW_TYPE_EVENT:                // イベント情報
153                                         $queryStr .=    'AND (ee_name LIKE \'%' . $keyword . '%\' ';
154                                         $queryStr .=    'OR ee_html LIKE \'%' . $keyword . '%\' ';
155                                         $queryStr .=    'OR ee_html_ext LIKE \'%' . $keyword . '%\' ';
156                                         $queryStr .=    'OR ee_summary LIKE \'%' . $keyword . '%\' ';
157                                         $queryStr .=    'OR ee_place LIKE \'%' . $keyword . '%\' ';
158                                         $queryStr .=    'OR ee_contact LIKE \'%' . $keyword . '%\' ';
159                                         $queryStr .=    'OR ee_url LIKE \'%' . $keyword . '%\' ';
160                                         $queryStr .=    'OR ee_option_fields LIKE \'%' . $keyword . '%\') ';    // ユーザ定義フィールド
161                                         break;
162                                 default:
163                                         break;
164                                 }
165                                 $queryStr .=    'AND (ei_code LIKE \'%' . $keyword . '%\' ';            // イベント予約受付コード
166                                 $queryStr .=    'OR ei_html LIKE \'%' . $keyword . '%\') ';                     // 説明
167                         }
168                 }
169                 
170                 $queryStr .=  'ORDER BY ei_contents_id DESC, ei_type limit ' . $limit . ' offset ' . $offset;                   // コンテンツID、受付タイプ
171                 $this->selectLoop($queryStr, $params, $callback);
172         }
173         /**
174          * イベント項目の追加、更新
175          *
176          * @param int     $serial               シリアル番号(0のときは新規追加)
177         
178          * @param string  $name                 コンテンツタイトル
179          * @param string  $message              メッセージ
180          * @param string  $url                  リンク先URL
181          * @param int     $mark                 表示マーク
182          * @param bool    $visible              表示するかどうか
183          * @param timestamp $regDt              登録日時
184          * @param int     $newSerial    新規シリアル番号
185          * @return bool                                 true = 成功、false = 失敗
186          */
187         function updateEventItem($serial, $name, $message, $url, $mark, $visible, $regDt, &$newSerial)
188         {
189                 $now = date("Y/m/d H:i:s");     // 現在日時
190                 $userId = $this->gEnv->getCurrentUserId();      // 現在のユーザ
191                         
192                 // トランザクション開始
193                 $this->startTransaction();
194                 
195                 // 引継ぎパラメータ初期化
196                 $otherParams = array();
197                 $otherQueryStr = '';
198                 $otherValueStr = '';
199                         
200                 if (empty($serial)){            // シリアル番号が0のときはIDを新規取得
201                         // イベント予約情報IDを決定する
202                         $queryStr = 'SELECT MAX(nw_id) AS mid FROM news';
203                         $ret = $this->selectRecord($queryStr, array(), $row);
204                         if ($ret){
205                                 $newsId = $row['mid'] + 1;
206                         } else {
207                                 $newsId = 1;
208                         }
209                         $historyIndex = 0;              // 履歴番号
210                 } else {
211                         // 指定のシリアルNoのレコードが削除状態でないかチェック
212                         $queryStr  = 'SELECT * FROM news ';
213                         $queryStr .=   'WHERE nw_serial = ? ';
214                         $ret = $this->selectRecord($queryStr, array($serial), $row);
215                         if ($ret){              // 既に登録レコードがあるとき
216                                 if ($row['nw_deleted']){                // レコードが削除されていれば終了
217                                         $this->endTransaction();
218                                         return false;
219                                 }
220                                 $newsId = $row['nw_id'];
221                                 $historyIndex = $row['nw_history_index'] + 1;
222                         } else {                // 存在しない場合は終了
223                                 $this->endTransaction();
224                                 return false;
225                         }
226                         // 古いレコードを削除
227                         $queryStr  = 'UPDATE news ';
228                         $queryStr .=   'SET nw_deleted = true, ';       // 削除
229                         $queryStr .=     'nw_update_user_id = ?, ';
230                         $queryStr .=     'nw_update_dt = ? ';
231                         $queryStr .=   'WHERE nw_serial = ?';
232                         $this->execStatement($queryStr, array($userId, $now, $serial));
233                         
234                         $keepFields = array();  // 値を引き継ぐフィールド名
235                         $keepFields[] = 'nw_type';
236                         $keepFields[] = 'nw_server_id';
237                         $keepFields[] = 'nw_content_type';
238                         $keepFields[] = 'nw_content_id';
239                         $keepFields[] = 'nw_content_dt';
240                         $keepFields[] = 'nw_site_name';
241                         $keepFields[] = 'nw_site_url';
242                 
243                         // 値を引き継ぐフィールドをセット
244                         for ($i = 0; $i < count($keepFields); $i++){
245                                 $fieldName = $keepFields[$i];
246                                 $otherParams[] = $row[$fieldName];
247                                 $otherQueryStr .= ', ' . $fieldName;
248                                 $otherValueStr .= ', ?';
249                         }
250                 }
251         
252                 // データを追加
253                 $params = array();
254                 $queryStr  = 'INSERT INTO news ';
255                 $queryStr .=   '(nw_id, ';                              $params[] = $newsId;
256                 $queryStr .=   'nw_history_index, ';    $params[] = $historyIndex;
257                 $queryStr .=   'nw_name, ';                             $params[] = $name;
258                 $queryStr .=   'nw_message, ';                  $params[] = $message;
259                 $queryStr .=   'nw_url, ';                              $params[] = $url;
260                 $queryStr .=   'nw_mark, ';                             $params[] = $mark;
261                 $queryStr .=   'nw_visible, ';                  $params[] = intval($visible);
262                 $queryStr .=   'nw_regist_dt, ';                $params[] = $regDt;
263                 $queryStr .=   'nw_create_user_id, ';   $params[] = $userId;
264                 $queryStr .=   'nw_create_dt';                  $params[] = $now;
265                 $queryStr .=   $otherQueryStr . ') ';
266                 $queryStr .= 'VALUES ';
267                 $queryStr .=   '(?, ?, ?, ?, ?, ?, ?, ?, ?, ?';
268                 $queryStr .=   $otherValueStr . ') ';
269                 $this->execStatement($queryStr, array_merge($params, $otherParams));
270                 
271                 // 新規のシリアル番号取得
272                 $newSerial = 0;
273                 $queryStr = 'SELECT MAX(nw_serial) AS ns FROM news ';
274                 $ret = $this->selectRecord($queryStr, array(), $row);
275                 if ($ret) $newSerial = $row['ns'];
276                         
277                 // トランザクション確定
278                 $ret = $this->endTransaction();
279                 return $ret;
280         }
281         /**
282          * イベント項目の削除
283          *
284          * @param array $serial                 シリアルNo
285          * @return                                              true=成功、false=失敗
286          */
287         function delEventItem($serial)
288         {
289                 $now = date("Y/m/d H:i:s");     // 現在日時
290                 $user = $this->gEnv->getCurrentUserId();        // 現在のユーザ
291                 
292                 if (!is_array($serial) || count($serial) <= 0) return true;
293                 
294                 // トランザクション開始
295                 $this->startTransaction();
296                 
297                 // 指定のシリアルNoのレコードが削除状態でないかチェック
298                 for ($i = 0; $i < count($serial); $i++){
299                         $queryStr  = 'SELECT * FROM news ';
300                         $queryStr .=   'WHERE nw_deleted = false ';             // 未削除
301                         $queryStr .=     'AND nw_serial = ? ';
302                         $ret = $this->isRecordExists($queryStr, array($serial[$i]));
303                         // 存在しない場合は、既に削除されたとして終了
304                         if (!$ret){
305                                 $this->endTransaction();
306                                 return false;
307                         }
308                 }
309                 
310                 // レコードを削除
311                 $queryStr  = 'UPDATE news ';
312                 $queryStr .=   'SET nw_deleted = true, ';       // 削除
313                 $queryStr .=     'nw_update_user_id = ?, ';
314                 $queryStr .=     'nw_update_dt = ? ';
315                 $queryStr .=   'WHERE nw_serial in (' . implode($serial, ',') . ') ';
316                 $this->execStatement($queryStr, array($user, $now));
317                 
318                 // トランザクション確定
319                 $ret = $this->endTransaction();
320                 return $ret;
321         }
322         /**
323          * イベント項目をシリアル番号で取得
324          *
325          * @param string        $serial                         シリアル番号
326          * @param array     $row                                レコード
327          * @return bool                                                 取得 = true, 取得なし= false
328          */
329         function getEventItem($serial, &$row)
330         {
331                 $queryStr  = 'SELECT * FROM news LEFT JOIN _login_user ON nw_create_user_id = lu_id AND lu_deleted = false ';
332                 $queryStr .=   'WHERE nw_serial = ? ';
333                 $ret = $this->selectRecord($queryStr, array($serial), $row);
334                 return $ret;
335         }
336         /**
337          * コンテンツ項目をコンテンツIDで取得
338          *
339          * @param string  $contentType          コンテンツタイプ
340          * @param string        $langId                 言語ID
341          * @param string        $contentId              コンテンツID
342          * @param array     $row                        レコード
343          * @return bool                                         取得 = true, 取得なし= false
344          */
345         function getContentById($contentType, $langId, $contentId, &$row)
346         {
347                 $queryStr  = 'SELECT * FROM content LEFT JOIN _login_user ON cn_create_user_id = lu_id AND lu_deleted = false ';
348                 $queryStr .=   'WHERE cn_deleted = false ';     // 削除されていない
349                 $queryStr .=    'AND cn_type = ? ';
350                 $queryStr .=   'AND cn_id = ? ';
351                 $queryStr .=   'AND cn_language_id = ? ';
352                 $ret = $this->selectRecord($queryStr, array($contentType, $contentId, $langId), $row);
353                 return $ret;
354         }
355         /**
356          * 商品を商品ID、言語IDで取得
357          *
358          * @param int           $id                                     商品ID
359          * @param string        $langId                         言語ID
360          * @param array     $row                                レコード
361          * @return bool                                                 取得 = true, 取得なし= false
362          */
363         function getProductById($id, $langId, &$row)
364         {
365                 $queryStr  = 'SELECT * FROM product LEFT JOIN product_record ON pt_id = pe_product_id AND pt_language_id = pe_language_id ';
366                 $queryStr .=   'WHERE pt_deleted = false ';     // 削除されていない
367                 $queryStr .=    'AND pt_visible = true ';               // 表示可能な商品
368                 $queryStr .=    'AND pt_id = ? ';
369                 $queryStr .=    'AND pt_language_id = ? ';
370                 $ret = $this->selectRecord($queryStr, array($id, $langId), $row);
371                 return $ret;
372         }
373         /**
374          * ブログ記事をエントリーIDで取得
375          *
376          * @param string        $id                                     エントリーID
377          * @param string        $langId                         言語ID
378          * @param array     $row                                レコード
379          * @return bool                                                 取得 = true, 取得なし= false
380          */
381         function getEntryById($id, $langId, &$row)
382         {
383                 $queryStr  = 'SELECT * FROM blog_entry ';
384                 $queryStr .=   'WHERE be_deleted = false ';     // 削除されていない
385                 $queryStr .=   'AND be_id = ? ';
386                 $queryStr .=   'AND be_language_id = ? ';
387                 $ret = $this->selectRecord($queryStr, array($id, $langId), $row);
388                 return $ret;
389         }
390         /**
391          * ルーム情報を識別IDで取得
392          *
393          * @param string        $id                                     識別ID
394          * @param string        $langId                         言語
395          * @param array     $row                                レコード
396          * @return bool                                                 取得 = true, 取得なし= false
397          */
398         function getRoomById($id, $langId, &$row)
399         {
400                 $queryStr  = 'SELECT * FROM user_content_room ';
401                 $queryStr .=   'WHERE ur_deleted = false ';
402                 $queryStr .=   'AND ur_id = ? ';
403                 $ret = $this->selectRecord($queryStr, array($id), $row);
404                 return $ret;
405         }
406         /**
407          * イベント情報を取得
408          *
409          * @param int           $id                                     イベントID
410          * @param string        $langId                         言語
411          * @param array     $row                                レコード
412          * @return bool                                                 取得 = true, 取得なし= false
413          */
414         function getEventById($id, $langId, &$row)
415         {
416                 $queryStr  = 'SELECT * FROM event_entry ';
417                 $queryStr .=   'WHERE ee_deleted = false ';     // 削除されていない
418                 $queryStr .=   'AND ee_id = ? ';
419                 $queryStr .=   'AND ee_language_id = ? ';
420                 $ret = $this->selectRecord($queryStr, array($id, $langId), $row);
421                 return $ret;
422         }
423         /**
424          * フォト情報を取得
425          *
426          * @param int           $id                                     公開画像ID
427          * @param string        $langId                         言語
428          * @param array     $row                                レコード
429          * @return bool                                                 取得 = true, 取得なし= false
430          */
431         function getPhotoById($id, $langId, &$row)
432         {
433                 $queryStr  = 'SELECT * FROM photo LEFT JOIN _login_user ON ht_owner_id = lu_id AND lu_deleted = false ';
434                 $queryStr .=   'WHERE ht_deleted = false ';
435                 $queryStr .=     'AND ht_public_id = ? ';
436                 $queryStr .=     'AND ht_language_id = ? ';
437                 $ret = $this->selectRecord($queryStr, array($id, $langId), $row);
438                 return $ret;
439         }
440 }
441 ?>