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-2015 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 evententry_mainDb extends BaseDb
23 * @param array $rows レコード
24 * @return bool 1行以上取得 = true, 取得なし= false
26 function getAllConfig(&$rows)
28 $queryStr = 'SELECT * FROM news_config ';
29 $queryStr .= 'ORDER BY nc_index';
30 $retValue = $this->selectRecords($queryStr, array(), $rows);
36 * @param string $key キーとなる項目値
37 * @return string $value 値
39 function getConfig($key)
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'];
51 * @param string $key キーとなる項目値
52 * @param string $value 値
53 * @return true = 正常、false=異常
55 function updateConfig($key, $value)
58 $queryStr = 'SELECT nc_value FROM news_config ';
59 $queryStr .= 'WHERE nc_id = ?';
60 $ret = $this->isRecordExists($queryStr, array($key));
62 $queryStr = "UPDATE news_config SET nc_value = ? WHERE nc_id = ?";
63 return $this->execStatement($queryStr, array($value, $key));
65 $queryStr = "INSERT INTO news_config (nc_id, nc_value) VALUES (?, ?)";
66 return $this->execStatement($queryStr, array($key, $value));
72 * @param string $contentType コンテンツタイプ
73 * @param string $langId 言語ID
74 * @param array $keywords 検索キーワード
77 function getEventListCount($contentType, $langId, $keywords)
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;
86 $queryStr = 'SELECT * FROM evententry_info ';
89 $queryStr .= 'WHERE ei_deleted = false '; // 削除されていない
90 $queryStr .= 'AND ei_content_type = ? '; $params[] = $contentType; // コンテンツタイプ
93 if (!empty($keywords)){
94 for ($i = 0; $i < count($keywords); $i++){
95 $keyword = addslashes($keywords[$i]);// 「'"\」文字をエスケープ
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 . '%\') '; // ユーザ定義フィールド
111 $queryStr .= 'AND (ei_code LIKE \'%' . $keyword . '%\' '; // イベント予約受付コード
112 $queryStr .= 'OR ei_html LIKE \'%' . $keyword . '%\') '; // 説明
115 return $this->selectRecordCount($queryStr, $params);
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 コールバック関数
128 function getEventList($contentType, $langId, $limit, $page, $keywords, $callback)
130 $offset = $limit * ($page -1);
131 if ($offset < 0) $offset = 0;
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;
140 $queryStr = 'SELECT * FROM evententry_info ';
143 $queryStr .= 'WHERE ei_deleted = false '; // 削除されていない
144 $queryStr .= 'AND ei_content_type = ? '; $params[] = $contentType; // コンテンツタイプ
147 if (!empty($keywords)){
148 for ($i = 0; $i < count($keywords); $i++){
149 $keyword = addslashes($keywords[$i]);// 「'"\」文字をエスケープ
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 . '%\') '; // ユーザ定義フィールド
165 $queryStr .= 'AND (ei_code LIKE \'%' . $keyword . '%\' '; // イベント予約受付コード
166 $queryStr .= 'OR ei_html LIKE \'%' . $keyword . '%\') '; // 説明
170 $queryStr .= 'ORDER BY ei_contents_id DESC, ei_type limit ' . $limit . ' offset ' . $offset; // コンテンツID、受付タイプ
171 $this->selectLoop($queryStr, $params, $callback);
176 * @param int $serial シリアル番号(0のときは新規追加)
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 = 失敗
187 function updateEventItem($serial, $name, $message, $url, $mark, $visible, $regDt, &$newSerial)
189 $now = date("Y/m/d H:i:s"); // 現在日時
190 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
193 $this->startTransaction();
196 $otherParams = array();
200 if (empty($serial)){ // シリアル番号が0のときはIDを新規取得
202 $queryStr = 'SELECT MAX(nw_id) AS mid FROM news';
203 $ret = $this->selectRecord($queryStr, array(), $row);
205 $newsId = $row['mid'] + 1;
209 $historyIndex = 0; // 履歴番号
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();
220 $newsId = $row['nw_id'];
221 $historyIndex = $row['nw_history_index'] + 1;
222 } else { // 存在しない場合は終了
223 $this->endTransaction();
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));
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';
244 for ($i = 0; $i < count($keepFields); $i++){
245 $fieldName = $keepFields[$i];
246 $otherParams[] = $row[$fieldName];
247 $otherQueryStr .= ', ' . $fieldName;
248 $otherValueStr .= ', ?';
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));
273 $queryStr = 'SELECT MAX(nw_serial) AS ns FROM news ';
274 $ret = $this->selectRecord($queryStr, array(), $row);
275 if ($ret) $newSerial = $row['ns'];
278 $ret = $this->endTransaction();
284 * @param array $serial シリアルNo
285 * @return true=成功、false=失敗
287 function delEventItem($serial)
289 $now = date("Y/m/d H:i:s"); // 現在日時
290 $user = $this->gEnv->getCurrentUserId(); // 現在のユーザ
292 if (!is_array($serial) || count($serial) <= 0) return true;
295 $this->startTransaction();
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 // 存在しない場合は、既に削除されたとして終了
305 $this->endTransaction();
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));
319 $ret = $this->endTransaction();
325 * @param string $serial シリアル番号
326 * @param array $row レコード
327 * @return bool 取得 = true, 取得なし= false
329 function getEventItem($serial, &$row)
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);
339 * @param string $contentType コンテンツタイプ
340 * @param string $langId 言語ID
341 * @param string $contentId コンテンツID
342 * @param array $row レコード
343 * @return bool 取得 = true, 取得なし= false
345 function getContentById($contentType, $langId, $contentId, &$row)
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);
358 * @param int $id 商品ID
359 * @param string $langId 言語ID
360 * @param array $row レコード
361 * @return bool 取得 = true, 取得なし= false
363 function getProductById($id, $langId, &$row)
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);
376 * @param string $id エントリーID
377 * @param string $langId 言語ID
378 * @param array $row レコード
379 * @return bool 取得 = true, 取得なし= false
381 function getEntryById($id, $langId, &$row)
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);
393 * @param string $id 識別ID
394 * @param string $langId 言語
395 * @param array $row レコード
396 * @return bool 取得 = true, 取得なし= false
398 function getRoomById($id, $langId, &$row)
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);
409 * @param int $id イベントID
410 * @param string $langId 言語
411 * @param array $row レコード
412 * @return bool 取得 = true, 取得なし= false
414 function getEventById($id, $langId, &$row)
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);
426 * @param int $id 公開画像ID
427 * @param string $langId 言語
428 * @param array $row レコード
429 * @return bool 取得 = true, 取得なし= false
431 function getPhotoById($id, $langId, &$row)
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);