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-2013 Magic3 Project.
12 * @license http://www.gnu.org/copyleft/gpl.html GPL License
13 * @version SVN: $Id: photo_mainDb.php 5968 2013-04-29 11:08:36Z fishbone $
14 * @link http://www.magic3.org
16 require_once($gEnvManager->getDbPath() . '/baseDb.php');
18 class photo_mainDb extends BaseDb
20 const PRODUCT_CLASS_PHOTO = 'photo'; // 商品クラス
23 * フォトギャラリー定義値を取得をすべて取得
25 * @param array $rows レコード
26 * @return bool 1行以上取得 = true, 取得なし= false
28 function getAllConfig(&$rows)
30 $queryStr = 'SELECT * FROM photo_config ';
31 $queryStr .= 'ORDER BY hg_index';
32 $retValue = $this->selectRecords($queryStr, array(), $rows);
38 * @param string $key キーとなる項目値
39 * @return string $value 値
41 function getConfig($key)
44 $queryStr = 'SELECT hg_value FROM photo_config ';
45 $queryStr .= 'WHERE hg_id = ?';
46 $ret = $this->selectRecord($queryStr, array($key), $row);
47 if ($ret) $retValue = $row['hg_value'];
53 * @param string $key キーとなる項目値
54 * @param string $value 値
55 * @return true = 正常、false=異常
57 function updateConfig($key, $value)
60 $queryStr = 'SELECT hg_value FROM photo_config ';
61 $queryStr .= 'WHERE hg_id = ?';
62 $ret = $this->isRecordExists($queryStr, array($key));
64 $queryStr = "UPDATE photo_config SET hg_value = ? WHERE hg_id = ?";
65 return $this->execStatement($queryStr, array($value, $key));
67 $queryStr = "INSERT INTO photo_config (hg_id, hg_value) VALUES (?, ?)";
68 return $this->execStatement($queryStr, array($key, $value));
74 * @param string $userOption 検索用ユーザオプション
75 * @param int $limit 取得する項目数
76 * @param int $page 取得するページ(1~)
77 * @param function $callback コールバック関数
80 function getAllUserList($userOption, $limit, $page, $callback)
82 $offset = $limit * ($page -1);
83 if ($offset < 0) $offset = 0;
85 $queryStr = 'SELECT * FROM _login_user LEFT JOIN _login_log on lu_id = ll_user_id ';
86 $queryStr .= 'WHERE lu_deleted = false ';// 削除されていない
87 $queryStr .= 'AND lu_user_type_option LIKE \'%' . addslashes($userOption) . '%\' ';
88 $queryStr .= 'ORDER BY lu_account limit ' . $limit . ' offset ' . $offset;
89 $this->selectLoop($queryStr, array(), $callback);
94 * @param string $userOption 検索用ユーザオプション
97 function getAllUserListCount($userOption)
99 $queryStr = 'SELECT * FROM _login_user ';
100 $queryStr .= 'WHERE lu_deleted = false ';// 削除されていない
101 $queryStr .= 'AND lu_user_type_option LIKE \'%' . addslashes($userOption) . '%\' ';
102 return $this->selectRecordCount($queryStr, array());
107 * @param string $userOption 検索用ユーザオプション
108 * @param array $rows レコード
109 * @return bool 1行以上取得 = true, 取得なし= false
111 function getAllUserForMenu($userOption, &$rows)
113 $queryStr = 'SELECT * FROM _login_user LEFT JOIN _login_log on lu_id = ll_user_id ';
114 $queryStr .= 'WHERE lu_deleted = false ';// 削除されていない
115 $queryStr .= 'AND lu_user_type_option LIKE \'%' . addslashes($userOption) . '%\' ';
116 $queryStr .= 'ORDER BY lu_account';
117 $retValue = $this->selectRecords($queryStr, array(), $rows);
123 * @param string $serial シリアル番号
124 * @param array $row レコード
125 * @return bool 取得 = true, 取得なし= false
127 function getUserBySerial($serial, &$row)
129 $queryStr = 'select * from _login_user ';
130 $queryStr .= 'WHERE lu_serial = ? ';
131 $ret = $this->selectRecord($queryStr, array($serial), $row);
137 * @param array $serial シリアルNo
138 * @return true=成功、false=失敗
140 function delUserBySerial($serial)
143 if (!is_array($serial)) return false;
144 if (count($serial) <= 0) return true;
146 $now = date("Y/m/d H:i:s"); // 現在日時
147 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
150 $this->startTransaction();
152 // 指定のシリアルNoのレコードが削除状態でないかチェック
153 for ($i = 0; $i < count($serial); $i++){
154 $queryStr = 'SELECT * FROM _login_user ';
155 $queryStr .= 'WHERE lu_deleted = false '; // 未削除
156 $queryStr .= 'AND lu_serial = ? ';
157 $ret = $this->isRecordExists($queryStr, array($serial[$i]));
158 // 存在しない場合は、既に削除されたとして終了
160 $this->endTransaction();
166 $queryStr = 'UPDATE _login_user ';
167 $queryStr .= 'SET lu_deleted = true, '; // 削除
168 $queryStr .= 'lu_update_user_id = ?, ';
169 $queryStr .= 'lu_update_dt = ? ';
170 $queryStr .= 'WHERE lu_serial in (' . implode($serial, ',') . ') ';
171 $this->execStatement($queryStr, array($userId, $now));
174 $ret = $this->endTransaction();
180 * @param int $userId ユーザID
181 * @return int 画像番号(1~)
183 function getNewPhotoNo($userId)
186 $queryStr = 'SELECT * FROM photo ';
187 $queryStr .= 'WHERE ht_owner_id = ? ';
188 $queryStr .= 'AND ht_history_index = 0 ';
189 return $this->selectRecordCount($queryStr, array($userId), $row) + 1;
194 * @param string $code 画像コード
195 * @return true=存在する、false=存在しない
197 function isExistsPhotoCode($code)
199 $queryStr = 'SELECT * FROM photo ';
200 $queryStr .= 'WHERE ht_code = ? ';
201 return $this->isRecordExists($queryStr, array($code));
204 * 画像が存在するかチェック(言語に関わらず)
206 * @param string $publicId 画像ID
207 * @return true=存在する、false=存在しない
209 function isExistsPhoto($publicId)
211 $queryStr = 'SELECT * FROM photo ';
212 $queryStr .= 'WHERE ht_deleted = false ';
213 $queryStr .= 'AND ht_public_id = ? ';
214 return $this->isRecordExists($queryStr, array($publicId));
219 * @param bool $limitedUser 制限ありのユーザかどうか
220 * @param int $serial シリアル番号。シリアル番号が0のときは新規追加。
221 * @param strin $langId 言語ID
222 * @param string $filename ファイル名
223 * @param string $dir ディレクトリ
224 * @param string $code 画像コード
225 * @param string $mimeType MIMEタイプ
226 * @param string $imageSize 画像サイズ
227 * @param string $originalName 元の画像名
228 * @param string $filesize ファイルサイズ
229 * @param string $name 画像名
230 * @param string $camera カメラ
231 * @param string $location 撮影場所
232 * @param timestamp $date 撮影日
233 * @param string $summary 画像概要
234 * @param string $description 画像説明
235 * @param string $license ライセンス
236 * @param int $ownerId 所有者ID
237 * @param string $keyword 検索用キーワード
238 * @param bool $visible 表示するかどうか
239 * @param int $sortOrder ソート順
240 * @param array $category 画像カテゴリー
241 * @param string $thumbFilename サムネールファイル名
242 * @param int $newSerial 新規シリアル番号
243 * @return bool true = 成功、false = 失敗
245 function updatePhotoInfo($limitedUser, $serial, $langId, $filename, $dir, $code, $mimeType, $imageSize, $originalName, $filesize,
246 $name, $camera, $location, $date, $summary, $description, $license, $ownerId, $keyword, $visible, $sortOrder, $category, $thumbFilename, &$newSerial)
248 $now = date("Y/m/d H:i:s"); // 現在日時
249 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
252 $this->startTransaction();
257 if ($this->isExistsPhotoCode($code)){
258 $this->endTransaction();
262 $queryStr = 'SELECT MAX(ht_id) AS mid FROM photo ';
263 $ret = $this->selectRecord($queryStr, array(), $row);
265 $photoId = $row['mid'] + 1;
270 $registDt = $now; // 画像アップロード日時
271 $rateAverage = 0; // 評価値
272 $viewCount = 0; // 参照数
273 $sortOrder = $photoId * 2; // ソート順
275 // 指定のシリアルNoのレコードが削除状態でないかチェック
276 $historyIndex = 0; // 履歴番号
277 $queryStr = 'SELECT * FROM photo ';
278 $queryStr .= 'WHERE ht_serial = ? ';
279 $ret = $this->selectRecord($queryStr, array($serial), $row);
280 if ($ret){ // 既に登録レコードがあるとき
281 if ($row['ht_deleted']){ // レコードが削除されていれば終了
282 $this->endTransaction();
285 // if ($limitedUser && $row['ht_owner_id'] != $ownerId){ // 制限ユーザの場合は所有者が異なるときは更新不可
286 // $this->endTransaction();
289 $photoId = $row['ht_id'];
290 $langId = $row['ht_language_id'];
291 $historyIndex = $row['ht_history_index'] + 1;
293 $registDt = $row['ht_regist_dt']; // 画像アップロード日時
294 $filename = $row['ht_public_id']; // 公開ID
295 $dir = $row['ht_dir']; // 画像格納ディレクトリ
296 $code = $row['ht_code']; // 画像コード
297 $mimeType = $row['ht_mime_type']; // 画像MIMEタイプ
298 $imageSize = $row['ht_image_size']; // 画像縦横サイズ
299 $originalName = $row['ht_original_filename']; // 元のファイル名
300 $thumbFilename = $row['ht_thumb_filename']; // サムネールファイル名
301 $filesize = $row['ht_file_size']; // ファイルサイズ
302 $ownerId = $row['ht_owner_id']; // 所有者
303 $rateAverage = $row['ht_rate_average']; // 評価値
304 $viewCount = $row['ht_view_count']; // 参照数
305 } else { // 存在しない場合は終了
306 $this->endTransaction();
310 $queryStr = 'UPDATE photo ';
311 $queryStr .= 'SET ht_deleted = true, '; // 削除
312 $queryStr .= 'ht_update_user_id = ?, ';
313 $queryStr .= 'ht_update_dt = ? ';
314 $queryStr .= 'WHERE ht_serial = ?';
315 $this->execStatement($queryStr, array($userId, $now, $serial));
319 $queryStr = 'INSERT INTO photo ';
320 $queryStr .= '(ht_id, ';
321 $queryStr .= 'ht_language_id, ';
322 $queryStr .= 'ht_history_index, ';
323 $queryStr .= 'ht_public_id, ';
324 $queryStr .= 'ht_dir, ';
325 $queryStr .= 'ht_code, ';
326 $queryStr .= 'ht_mime_type, ';
327 $queryStr .= 'ht_image_size, ';
328 $queryStr .= 'ht_original_filename, ';
329 $queryStr .= 'ht_thumb_filename, ';
330 $queryStr .= 'ht_file_size, ';
331 $queryStr .= 'ht_name, ';
332 $queryStr .= 'ht_camera, ';
333 $queryStr .= 'ht_location, ';
334 $queryStr .= 'ht_date, ';
335 $queryStr .= 'ht_summary, ';
336 $queryStr .= 'ht_description, ';
337 $queryStr .= 'ht_license, ';
338 $queryStr .= 'ht_rate_average, ';
339 $queryStr .= 'ht_view_count, ';
340 $queryStr .= 'ht_owner_id, ';
341 $queryStr .= 'ht_keyword, ';
342 $queryStr .= 'ht_visible, ';
343 $queryStr .= 'ht_sort_order, ';
344 $queryStr .= 'ht_regist_dt, ';
345 $queryStr .= 'ht_create_user_id, ';
346 $queryStr .= 'ht_create_dt) ';
347 $queryStr .= 'VALUES ';
348 $queryStr .= '(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
349 $this->execStatement($queryStr, array($photoId, $langId, $historyIndex, $filename, $dir, $code, $mimeType, $imageSize, $originalName, $thumbFilename, $filesize,
350 $name, $camera, $location, $date, $summary, $description, $license, $rateAverage, $viewCount, $ownerId, $keyword, intval($visible), $sortOrder, $registDt, $userId, $now));
354 $queryStr = 'SELECT MAX(ht_serial) AS ns FROM photo ';
355 $ret = $this->selectRecord($queryStr, array(), $row);
356 if ($ret) $newSerial = $row['ns'];
359 for ($i = 0; $i < count($category); $i++){
360 $ret = $this->updateCategory($newSerial, $i, $category[$i]);
362 $this->endTransaction();
368 $ret = $this->endTransaction();
374 * @param array $serial シリアルNo
375 * @return true=成功、false=失敗
377 function updatePhotoInfoViewCount($serial)
379 $now = date("Y/m/d H:i:s"); // 現在日時
380 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
383 $this->startTransaction();
385 // 指定のシリアルNoのレコードが削除状態でないかチェック
386 $historyIndex = 0; // 履歴番号
387 $queryStr = 'SELECT * FROM photo ';
388 $queryStr .= 'WHERE ht_serial = ? ';
389 $ret = $this->selectRecord($queryStr, array($serial), $row);
390 if ($ret){ // 既に登録レコードがあるとき
391 $newCount = $row['ht_view_count'] + 1;
394 $queryStr = 'UPDATE photo ';
396 $queryStr .= 'ht_view_count = ?, ';
397 $queryStr .= 'ht_update_user_id = ?, ';
398 $queryStr .= 'ht_update_dt = ? ';
399 $queryStr .= 'WHERE ht_serial = ?';
400 $this->execStatement($queryStr, array($newCount, $userId, $now, $serial));
401 } else { // 存在しない場合は終了
402 $this->endTransaction();
407 $ret = $this->endTransaction();
413 * @param string $filename ファイル名
414 * @param string $lang 言語ID
415 * @param array $row 取得データ
416 * @param array $categoryRows 画像カテゴリー
417 * @return true=正常、false=異常
419 function getPhotoInfo($filename, $lang, &$row, &$categoryRows = array())
421 $queryStr = 'SELECT * FROM photo LEFT JOIN _login_user ON ht_owner_id = lu_id AND lu_deleted = false ';
422 $queryStr .= 'WHERE ht_deleted = false ';
423 $queryStr .= 'AND ht_language_id = ? ';
424 $queryStr .= 'AND ht_public_id = ? ';
425 $ret = $this->selectRecord($queryStr, array($lang, $filename), $row);
429 $queryStr = 'SELECT * FROM photo_with_category LEFT JOIN photo_category ON hw_category_id = hc_id AND hc_deleted = false ';
430 $queryStr .= 'WHERE hw_photo_serial = ? ';
431 $queryStr .= 'ORDER BY hw_index ';
432 $this->selectRecords($queryStr, array($row['ht_serial']), $categoryRows);
439 * @param string $publicId 公開画像ID
440 * @param string $productClass 商品クラス
441 * @param string $productType 製品ID
442 * @param string $priceType 価格タイプ
443 * @param string $lang 言語ID
444 * @param array $row 取得データ
445 * @return true=正常、false=異常
447 function getPhotoInfoWithPrice($publicId, $productClass, $productType, $priceType, $lang, &$row)
449 $queryStr = 'SELECT * FROM photo RIGHT JOIN product_price ON (ht_id = pp_product_id OR pp_product_id = 0) AND ht_language_id = pp_language_id AND pp_deleted = false ';
450 $queryStr .= 'WHERE ht_deleted = false ';
451 $queryStr .= 'AND ht_language_id = ? ';
452 $queryStr .= 'AND ht_public_id = ? ';
453 $queryStr .= 'AND pp_product_class = ? ';
454 $queryStr .= 'AND pp_product_type_id = ? ';
455 $queryStr .= 'AND pp_price_type_id = ? ';
456 $queryStr .= 'ORDER BY pp_product_id DESC'; // 商品価格マスターの商品ID
457 $ret = $this->selectRecord($queryStr, array($lang, $publicId, $productClass, $productType, $priceType), $row);
463 * @param int $serial シリアル番号
464 * @param array $row 取得データ
465 * @param array $categoryRows 画像カテゴリー
466 * @return true=正常、false=異常
468 function getPhotoInfoBySerial($serial, &$row, &$categoryRows = array())
470 $queryStr = 'SELECT * FROM photo LEFT JOIN _login_user ON ht_owner_id = lu_id AND lu_deleted = false ';
471 $queryStr .= 'WHERE ht_serial = ? ';
472 $ret = $this->selectRecord($queryStr, array($serial), $row);
476 $queryStr = 'SELECT * FROM photo_with_category LEFT JOIN photo_category ON hw_category_id = hc_id AND hc_deleted = false ';
477 $queryStr .= 'WHERE hw_photo_serial = ? ';
478 $queryStr .= 'ORDER BY hw_index ';
479 $this->selectRecords($queryStr, array($serial), $categoryRows);
486 * @param array $serial シリアルNo
487 * @return true=成功、false=失敗
489 function delPhotoInfo($serial)
492 if (!is_array($serial)) return false;
493 if (count($serial) <= 0) return true;
495 $now = date("Y/m/d H:i:s"); // 現在日時
496 $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ
499 $this->startTransaction();
501 for ($i = 0; $i < count($serial); $i++){
502 $queryStr = 'SELECT * FROM photo ';
503 $queryStr .= 'WHERE ht_deleted = false '; // 未削除
504 $queryStr .= 'AND ht_serial = ? ';
505 $ret = $this->selectRecord($queryStr, array($serial[$i]), $row);
506 if ($ret){ // 既に登録レコードがあるとき
508 $queryStr = 'UPDATE photo ';
509 $queryStr .= 'SET ht_deleted = true, '; // 削除
510 $queryStr .= 'ht_update_user_id = ?, ';
511 $queryStr .= 'ht_update_dt = ? ';
512 $queryStr .= 'WHERE ht_serial = ?';
513 $this->execStatement($queryStr, array($userId, $now, $serial[$i]));
514 } else {// 指定のシリアルNoのレコードが削除状態のときはエラー
515 $this->endTransaction();
520 $ret = $this->endTransaction();
526 * @param int $userId ユーザID
527 * @param int $allCount 総数
528 * @param int $visbleCount 公開画像数
531 function getPhotoCount($userId, &$allCount, &$visbleCount)
533 $queryStr = 'SELECT * FROM photo ';
534 $queryStr .= 'WHERE ht_deleted = false ';
535 $queryStr .= 'AND ht_owner_id = ? ';
536 $allCount = $this->selectRecordCount($queryStr, array($userId));
538 $queryStr = 'SELECT * FROM photo ';
539 $queryStr .= 'WHERE ht_deleted = false ';
540 $queryStr .= 'AND ht_visible = true ';
541 $queryStr .= 'AND ht_owner_id = ? ';
542 $visbleCount = $this->selectRecordCount($queryStr, array($userId));
547 * @param int $limit 取得する項目数
548 * @param int $page 取得するページ(1~)
549 * @param string $langId 言語
550 * @param timestamp $startDt 期間(開始日)
551 * @param timestamp $endDt 期間(終了日)
552 * @param array $keywords 検索キーワード
553 * @param array $category カテゴリーID
554 * @param array $author 撮影者
555 * @param string $sortKey ソートキー(index=表示順,date=日付,rate=評価,ref=参照数)
556 * @param int $sortDirection 取得順(0=降順,1=昇順)
557 * @param function $callback コールバック関数
558 * @param string $urlOthers URL付加パラメータ
559 * @param array $authCategory 参照可能なカテゴリー
562 function searchPhotoItem($limit, $page, $langId, $startDt, $endDt, $keywords, $category, $author, $sortKey, $sortDirection, $callback, $urlOthers, $authCategory = null)
564 $offset = $limit * ($page -1);
565 if ($offset < 0) $offset = 0;
568 $queryStr = $this->_createSearchPhoto($startDt, $endDt, $keywords, $category, $author, $authCategory);
572 if (!empty($startDt)){
573 $queryStr .= 'AND ? <= ht_regist_dt ';
574 $params[] = $startDt;
577 $queryStr .= 'AND ht_regist_dt < ? ';
580 /* $queryStr = 'SELECT DISTINCT ht_public_id,ht_name,ht_rate_average,ht_view_count,ht_regist_dt FROM photo LEFT JOIN _login_user ON ht_owner_id = lu_id AND lu_deleted = false ';
581 if (!empty($category) || !empty($authCategory)) $queryStr .= 'RIGHT JOIN photo_with_category ON ht_serial = hw_photo_serial ';
582 $queryStr .= 'WHERE ht_deleted = false '; // 未削除
583 $queryStr .= 'AND ht_visible = true '; // 公開中
586 if (!empty($category)){
588 for ($i = 0; $i < count($category); $i++){
589 $idStr .= addslashes($category[$i]) . ',';
591 $idStr = rtrim($idStr, ',');
592 $queryStr .= 'AND hw_category_id in (' . $idStr . ') ';
595 if (!empty($authCategory)){
596 $queryStr .= 'AND (';
597 for ($i = 0; $i < count($authCategory); $i++){
598 $queryStr .= 'hw_category_id = ' . addslashes($authCategory[$i]) . ' ';
599 if ($i < count($authCategory) -1) $queryStr .= 'OR ';
604 if (!empty($keywords)){
605 for ($i = 0; $i < count($keywords); $i++){
606 $keyword = addslashes($keywords[$i]);// 「'"\」文字をエスケープ
607 $queryStr .= 'AND (ht_public_id LIKE \'%' . $keyword . '%\' '; // 公開用画像ID
608 $queryStr .= 'OR ht_name LIKE \'%' . $keyword . '%\' '; // 画像タイトル
609 $queryStr .= 'OR ht_camera LIKE \'%' . $keyword . '%\' '; // カメラ
610 $queryStr .= 'OR ht_location LIKE \'%' . $keyword . '%\' '; // 撮影場所
611 $queryStr .= 'OR ht_description LIKE \'%' . $keyword . '%\' '; // メモ
612 $queryStr .= 'OR ht_keyword LIKE \'%' . $keyword . '%\' '; // キーワード
613 $queryStr .= 'OR lu_name LIKE \'%' . $keyword . '%\') '; // 撮影者
617 if (!empty($author)){
619 for ($i = 0; $i < count($author); $i++){
620 $idStr .= '\'' . addslashes($author[$i]) . '\',';
622 $idStr = rtrim($idStr, ',');
623 $queryStr .= 'AND lu_account in (' . $idStr . ') ';
629 $orderKey = 'ht_sort_order ';
630 if (empty($sortDirection)) $orderKey .= 'DESC ';
631 $orderKey .= ',ht_regist_dt ';
634 $orderKey = 'ht_regist_dt ';
637 $orderKey = 'ht_rate_average ';
640 $orderKey = 'ht_view_count ';
644 if (empty($sortDirection)) $ord = 'DESC ';
645 $queryStr .= 'ORDER BY ' . $orderKey . $ord . 'LIMIT ' . $limit . ' OFFSET ' . $offset; // 画像アップロード日時順
646 $this->selectLoop($queryStr, array(), $callback, $urlOthers);
651 * @param int $limit 取得する項目数
652 * @param int $no 項目番号
653 * @param string $langId 言語
654 * @param timestamp $startDt 期間(開始日)
655 * @param timestamp $endDt 期間(終了日)
656 * @param array $keywords 検索キーワード
657 * @param array $category カテゴリーID
658 * @param array $author 撮影者
659 * @param string $sortKey ソートキー(index=表示順,date=日付,rate=評価,ref=参照数)
660 * @param int $sortDirection 取得順(0=降順,1=昇順)
661 * @param function $callback コールバック関数
662 * @param string $urlOthers URL付加パラメータ
663 * @param array $authCategory 参照可能なカテゴリー
666 function searchPhotoItemByNo($limit, $no, $langId, $startDt, $endDt, $keywords, $category, $author, $sortKey, $sortDirection, $callback, $urlOthers, $authCategory = null)
669 if ($offset < 0) $offset = 0;
672 $queryStr = $this->_createSearchPhoto($startDt, $endDt, $keywords, $category, $author, $authCategory);
676 if (!empty($startDt)){
677 $queryStr .= 'AND ? <= ht_regist_dt ';
678 $params[] = $startDt;
681 $queryStr .= 'AND ht_regist_dt < ? ';
684 /* $queryStr = 'SELECT DISTINCT ht_public_id,ht_name,ht_rate_average,ht_view_count,ht_regist_dt FROM photo LEFT JOIN _login_user ON ht_owner_id = lu_id AND lu_deleted = false ';
685 if (!empty($category) || !empty($authCategory)) $queryStr .= 'RIGHT JOIN photo_with_category ON ht_serial = hw_photo_serial ';
686 $queryStr .= 'WHERE ht_deleted = false '; // 未削除
687 $queryStr .= 'AND ht_visible = true '; // 公開中
690 if (!empty($category)){
692 for ($i = 0; $i < count($category); $i++){
693 $idStr .= addslashes($category[$i]) . ',';
695 $idStr = rtrim($idStr, ',');
696 $queryStr .= 'AND hw_category_id in (' . $idStr . ') ';
699 if (!empty($authCategory)){
700 $queryStr .= 'AND (';
701 for ($i = 0; $i < count($authCategory); $i++){
702 $queryStr .= 'hw_category_id = ' . addslashes($authCategory[$i]) . ' ';
703 if ($i < count($authCategory) -1) $queryStr .= 'OR ';
708 if (!empty($keywords)){
709 for ($i = 0; $i < count($keywords); $i++){
710 $keyword = addslashes($keywords[$i]);// 「'"\」文字をエスケープ
711 $queryStr .= 'AND (ht_public_id LIKE \'%' . $keyword . '%\' '; // 公開用画像ID
712 $queryStr .= 'OR ht_name LIKE \'%' . $keyword . '%\' '; // 画像タイトル
713 $queryStr .= 'OR ht_camera LIKE \'%' . $keyword . '%\' '; // カメラ
714 $queryStr .= 'OR ht_location LIKE \'%' . $keyword . '%\' '; // 撮影場所
715 $queryStr .= 'OR ht_description LIKE \'%' . $keyword . '%\' '; // メモ
716 $queryStr .= 'OR ht_keyword LIKE \'%' . $keyword . '%\' '; // キーワード
717 $queryStr .= 'OR lu_name LIKE \'%' . $keyword . '%\') '; // 撮影者
721 if (!empty($author)){
723 for ($i = 0; $i < count($author); $i++){
724 $idStr .= '\'' . addslashes($author[$i]) . '\',';
726 $idStr = rtrim($idStr, ',');
727 $queryStr .= 'AND lu_account in (' . $idStr . ') ';
733 $orderKey = 'ht_sort_order ';
734 if (empty($sortDirection)) $orderKey .= 'DESC ';
735 $orderKey .= ',ht_regist_dt ';
738 $orderKey = 'ht_regist_dt ';
741 $orderKey = 'ht_rate_average ';
744 $orderKey = 'ht_view_count ';
748 if (empty($sortDirection)) $ord = 'DESC ';
749 $queryStr .= 'ORDER BY ' . $orderKey . $ord . 'LIMIT ' . $limit . ' OFFSET ' . $offset; // 画像アップロード日時順
750 $this->selectLoop($queryStr, array(), $callback, $urlOthers);
755 * @param string $langId 言語
756 * @param timestamp $startDt 期間(開始日)
757 * @param timestamp $endDt 期間(終了日)
758 * @param array $keywords 検索キーワード
759 * @param array $category カテゴリーID
760 * @param array $author 撮影者
761 * @param array $authCategory 参照可能なカテゴリー
764 function searchPhotoItemCount($langId, $startDt, $endDt, $keywords, $category, $author, $authCategory = null)
767 $queryStr = $this->_createSearchPhoto($startDt, $endDt, $keywords, $category, $author, $authCategory);
770 if (!empty($startDt)){
771 $queryStr .= 'AND ? <= ht_regist_dt ';
772 $params[] = $startDt;
775 $queryStr .= 'AND ht_regist_dt < ? ';
779 $queryStr = 'SELECT DISTINCT ht_public_id,ht_name,ht_rate_average,ht_view_count,ht_regist_dt FROM photo LEFT JOIN _login_user ON ht_owner_id = lu_id AND lu_deleted = false ';
780 if (!empty($category) || !empty($authCategory)) $queryStr .= 'RIGHT JOIN photo_with_category ON ht_serial = hw_photo_serial ';
781 $queryStr .= 'WHERE ht_deleted = false '; // 未削除
782 $queryStr .= 'AND ht_visible = true '; // 公開中
785 if (!empty($category)){
787 for ($i = 0; $i < count($category); $i++){
788 $idStr .= addslashes($category[$i]) . ',';
790 $idStr = rtrim($idStr, ',');
791 $queryStr .= 'AND hw_category_id in (' . $idStr . ') ';
794 if (!empty($authCategory)){
795 $queryStr .= 'AND (';
796 for ($i = 0; $i < count($authCategory); $i++){
797 $queryStr .= 'hw_category_id = ' . addslashes($authCategory[$i]) . ' ';
798 if ($i < count($authCategory) -1) $queryStr .= 'OR ';
803 if (!empty($keywords)){
804 for ($i = 0; $i < count($keywords); $i++){
805 $keyword = addslashes($keywords[$i]); // 「'"\」文字をエスケープ
806 $queryStr .= 'AND (ht_public_id LIKE \'%' . $keyword . '%\' '; // 公開用画像ID
807 $queryStr .= 'OR ht_name LIKE \'%' . $keyword . '%\' '; // 画像タイトル
808 $queryStr .= 'OR ht_camera LIKE \'%' . $keyword . '%\' '; // カメラ
809 $queryStr .= 'OR ht_location LIKE \'%' . $keyword . '%\' '; // 撮影場所
810 $queryStr .= 'OR ht_description LIKE \'%' . $keyword . '%\' '; // メモ
811 $queryStr .= 'OR ht_keyword LIKE \'%' . $keyword . '%\' '; // キーワード
812 $queryStr .= 'OR lu_name LIKE \'%' . $keyword . '%\') '; // 撮影者
816 if (!empty($author)){
818 for ($i = 0; $i < count($author); $i++){
819 $idStr .= '\'' . addslashes($author[$i]) . '\',';
821 $idStr = rtrim($idStr, ',');
822 $queryStr .= 'AND lu_account in (' . $idStr . ') ';
824 return $this->selectRecordCount($queryStr, array());
829 * @param timestamp $startDt 期間(開始日)
830 * @param timestamp $endDt 期間(終了日)
831 * @param array $keywords 検索キーワード
832 * @param array $category カテゴリーID
833 * @param array $author 撮影者
834 * @param array $authCategory 参照可能なカテゴリー
835 * @return string クエリー文字列
837 function _createSearchPhoto($startDt, $endDt, $keywords, $category, $author, $authCategory)
841 if (!empty($startDt)){
842 $queryStr .= 'AND ? <= ht_regist_dt ';
843 $params[] = $startDt;
846 $queryStr .= 'AND ht_regist_dt < ? ';
849 $queryStr = 'SELECT DISTINCT ht_public_id,ht_name,ht_rate_average,ht_view_count,ht_regist_dt FROM photo LEFT JOIN _login_user ON ht_owner_id = lu_id AND lu_deleted = false ';
850 if (!empty($category) || !empty($authCategory)){
851 $tableStr = 'photo_with_category AS ta ';
852 $condStr = 'ht_serial = ta.hw_photo_serial ';
853 for ($i = 0; $i < count($category); $i++){
854 $categoryLine = $category[$i];
855 if (empty($categoryLine)) break;
856 $tableStr .= 'CROSS JOIN photo_with_category AS t' . $i . ' ';
857 $condStr .= 'AND ht_serial = t' . $i . '.hw_photo_serial ';
859 //$queryStr .= 'RIGHT JOIN (photo_with_category AS ta CROSS JOIN photo_with_category AS t2) ON ht_serial = ta.hw_photo_serial AND ht_serial = t2.hw_photo_serial ';
860 $queryStr .= 'RIGHT JOIN (' . $tableStr . ') ON '. $condStr;
862 $queryStr .= 'WHERE ht_deleted = false '; // 未削除
863 $queryStr .= 'AND ht_visible = true '; // 公開中
865 // ##### アクセス制限 #####
867 if (!empty($authCategory)){
868 $queryStr .= 'AND (';
869 for ($i = 0; $i < count($authCategory); $i++){
870 $queryStr .= 'ta.hw_category_id = ' . addslashes($authCategory[$i]) . ' ';
871 if ($i < count($authCategory) -1) $queryStr .= 'OR ';
878 if (!empty($category)){
880 for ($i = 0; $i < count($category); $i++){
881 $idStr .= addslashes($category[$i]) . ',';
883 $idStr = rtrim($idStr, ',');
884 $queryStr .= 'AND t2.hw_category_id in (' . $idStr . ') ';*/
885 for ($i = 0; $i < count($category); $i++){
886 $categoryLine = $category[$i];
887 if (empty($categoryLine)) break;
889 for ($j = 0; $j < count($categoryLine); $j++){
890 $idStr .= addslashes($categoryLine[$j]) . ',';
892 $idStr = rtrim($idStr, ',');
893 $queryStr .= 'AND t' . $i . '.hw_category_id in (' . $idStr . ') ';
897 if (!empty($keywords)){
898 for ($i = 0; $i < count($keywords); $i++){
899 $keyword = addslashes($keywords[$i]); // 「'"\」文字をエスケープ
900 $queryStr .= 'AND (ht_public_id LIKE \'%' . $keyword . '%\' '; // 公開用画像ID
901 $queryStr .= 'OR ht_name LIKE \'%' . $keyword . '%\' '; // 画像タイトル
902 $queryStr .= 'OR ht_camera LIKE \'%' . $keyword . '%\' '; // カメラ
903 $queryStr .= 'OR ht_location LIKE \'%' . $keyword . '%\' '; // 撮影場所
904 $queryStr .= 'OR ht_description LIKE \'%' . $keyword . '%\' '; // 説明
905 $queryStr .= 'OR ht_summary LIKE \'%' . $keyword . '%\' '; // 概要
906 $queryStr .= 'OR ht_keyword LIKE \'%' . $keyword . '%\' '; // キーワード
907 $queryStr .= 'OR lu_name LIKE \'%' . $keyword . '%\') '; // 撮影者
911 if (!empty($author)){
913 for ($i = 0; $i < count($author); $i++){
914 $idStr .= '\'' . addslashes($author[$i]) . '\',';
916 $idStr = rtrim($idStr, ',');
917 $queryStr .= 'AND lu_account in (' . $idStr . ') ';
924 * @param string $filename ファイル名
925 * @param string $lang 言語ID
926 * @param array $row 取得データ
927 * @param array $categoryRows 画像カテゴリー
928 * @return true=正常、false=異常
930 function getSearchPhotoInfo($filename, $lang, &$row, &$categoryRows = array())
932 $queryStr = 'SELECT * FROM photo LEFT JOIN _login_user ON ht_owner_id = lu_id AND lu_deleted = false ';
933 $queryStr .= 'WHERE ht_deleted = false ';
934 $queryStr .= 'AND ht_visible = true '; // 公開中
935 $queryStr .= 'AND ht_public_id = ? ';
936 $queryStr .= 'AND ht_language_id = ? ';
937 $ret = $this->selectRecord($queryStr, array($filename, $lang), $row);
941 $queryStr = 'SELECT * FROM photo_with_category LEFT JOIN photo_category ON hw_category_id = hc_id AND hc_deleted = false ';
942 $queryStr .= 'WHERE hw_photo_serial = ? ';
943 $queryStr .= 'ORDER BY hw_index ';
944 $this->selectRecords($queryStr, array($row['ht_serial']), $categoryRows);
951 * @param string $langId 言語
952 * @param array $rows 取得データ
953 * @return bool true=取得、false=取得せず
955 function getAllCategory($langId, &$rows)
957 $queryStr = 'SELECT * FROM photo_category LEFT JOIN _login_user ON hc_create_user_id = lu_id AND lu_deleted = false ';
958 $queryStr .= 'WHERE hc_language_id = ? ';
959 $queryStr .= 'AND hc_deleted = false '; // 削除されていない
960 $queryStr .= 'ORDER BY hc_id';
961 $retValue = $this->selectRecords($queryStr, array($langId), $rows);
967 * @param int $serial 写真情報シリアル番号
968 * @param int $index インデックス番号
969 * @param int $categoryId カテゴリーID
970 * @return bool true = 成功、false = 失敗
972 function updateCategory($serial, $index, $categoryId)
975 $queryStr = 'INSERT INTO photo_with_category ';
977 $queryStr .= 'hw_photo_serial, ';
978 $queryStr .= 'hw_index, ';
979 $queryStr .= 'hw_category_id) ';
980 $queryStr .= 'VALUES ';
981 $queryStr .= '(?, ?, ?)';
982 $ret =$this->execStatement($queryStr, array($serial, $index, $categoryId));
988 * @param string $key 外部用キー
989 * @param string $langId 言語ID
990 * @param array $row レコード
991 * @return bool 取得 = true, 取得なし= false
993 function getContentByKey($key, $langId, &$row)
995 $queryStr = 'SELECT * FROM content ';
996 $queryStr .= 'WHERE cn_deleted = false '; // 削除されていない
997 $queryStr .= 'AND cn_type = ? ';
998 $queryStr .= 'AND cn_key = ? ';
999 $queryStr .= 'AND cn_language_id = ? ';
1000 $ret = $this->selectRecord($queryStr, array(''/*デフォルトコンテンツ*/, $key, $langId), $row);
1006 * @param int $userId ユーザID
1007 * @param strin $contentType コンテンツタイプ
1008 * @param int $contentId コンテンツID
1009 * @param array $row レコード
1010 * @return bool 取得 = true, 取得なし= false
1012 function getContentAccess($userId, $contentType, $contentId, &$row)
1014 $queryStr = 'SELECT * FROM _content_access ';
1015 $queryStr .= 'WHERE cs_user_id = ? ';
1016 $queryStr .= 'AND cs_content_type = ? ';
1017 $queryStr .= 'AND cs_content_id = ? ';
1018 $ret = $this->selectRecord($queryStr, array($userId, $contentType, $contentId), $row);
1024 * @param string $clientId クライアントID
1025 * @param string $widgetId ウィジェットID
1028 function getClientParam($clientId, $widgetId)
1031 $queryStr = 'SELECT * FROM _client_param ';
1032 $queryStr .= 'WHERE cp_id = ? ';
1033 $queryStr .= 'AND cp_widget_id = ? ';
1034 $ret = $this->selectRecord($queryStr, array($clientId, $widgetId), $row);
1035 if ($ret) $retValue = $row['cp_param'];
1041 * @param string $clientId クライアントID
1042 * @param string $widgetId ウィジェットID
1043 * @param string $value 値
1044 * @return true = 正常、false=異常
1046 function updateClientParam($clientId, $widgetId, $value)
1048 $now = date("Y/m/d H:i:s"); // 現在日時
1049 $ip = $this->gRequest->trimServerValueOf('REMOTE_ADDR');
1052 $queryStr = 'SELECT cp_param FROM _client_param ';
1053 $queryStr .= 'WHERE cp_id = ? ';
1054 $queryStr .= 'AND cp_widget_id = ? ';
1055 $ret = $this->isRecordExists($queryStr, array($clientId, $widgetId));
1057 $queryStr = 'UPDATE _client_param ';
1058 $queryStr .= 'SET cp_param = ?, ';
1059 $queryStr .= 'cp_ip = ?, ';
1060 $queryStr .= 'cp_update_dt = ? ';
1061 $queryStr .= 'WHERE cp_id = ? ';
1062 $queryStr .= 'AND cp_widget_id = ? ';
1063 $ret = $this->execStatement($queryStr, array($value, $ip, $now, $clientId, $widgetId));
1066 $queryStr = 'INSERT INTO _client_param ';
1067 $queryStr .= '(cp_id, cp_widget_id, cp_param, cp_ip, cp_update_dt) VALUES (?, ?, ?, ?, ?)';
1068 $ret = $this->execStatement($queryStr, array($clientId, $widgetId, $value, $ip, $now));
1075 * @param string $lang 言語
1076 * @param function $callback コールバック関数
1079 function getAllProduct($lang, $callback)
1081 $queryStr = 'SELECT * FROM photo_product ';
1082 $queryStr .= 'WHERE hp_deleted = false ';// 削除されていない
1083 $queryStr .= 'AND hp_language_id = ? ';
1084 $queryStr .= 'ORDER BY hp_sort_order';
1085 $this->selectLoop($queryStr, array($lang), $callback);
1090 * @param int $serial シリアル番号
1091 * @param array $row レコード
1092 * @param array $row2 商品価格
1093 * @param array $row3 商品画像
1094 * @return bool 取得 = true, 取得なし= false
1096 function getProductBySerial($serial, &$row, &$row2, &$row3)
1098 $queryStr = 'SELECT * FROM photo_product ';
1099 $queryStr .= 'WHERE hp_serial = ? ';
1100 $ret = $this->selectRecord($queryStr, array($serial), $row);
1102 $queryStr = 'SELECT * FROM product_price ';
1103 $queryStr .= 'WHERE pp_deleted = false ';// 削除されていない
1104 $queryStr .= 'AND pp_product_class = ? '; // 商品クラス
1105 $queryStr .= 'AND pp_product_id = ? '; // 商品ID(画像ID)
1106 $queryStr .= 'AND pp_product_type_id = ? '; // 商品タイプ
1107 $queryStr .= 'AND pp_language_id = ? ';
1108 $this->selectRecords($queryStr, array(self::PRODUCT_CLASS_PHOTO/*フォト画像クラス*/, 0/*全画像対象*/, $row['hp_id'], $row['hp_language_id']), $row2);
1110 $queryStr = 'SELECT * FROM product_image ';
1111 $queryStr .= 'WHERE im_deleted = false ';// 削除されていない
1112 $queryStr .= 'AND im_product_class = ? '; // 商品クラス
1113 $queryStr .= 'AND im_type = 0 '; // デフォルト画像タイプ
1114 $queryStr .= 'AND im_id = ? ';
1115 $queryStr .= 'AND im_language_id = ? ';
1116 $this->selectRecords($queryStr, array(self::PRODUCT_CLASS_PHOTO/*フォト画像クラス*/, $row['hp_id'], $row['hp_language_id']), $row3);
1123 * @param int $id 商品ID
1124 * @param string $langId 言語ID
1125 * @param array $row レコード
1126 * @return bool 取得 = true, 取得なし= false
1128 function getProductByProductId($id, $langId, &$row)
1130 $queryStr = 'SELECT * FROM photo_product ';
1131 $queryStr .= 'WHERE hp_deleted = false '; // 削除されていない
1132 $queryStr .= 'AND hp_id = ? ';
1133 $queryStr .= 'AND hp_language_id = ? ';
1134 $ret = $this->selectRecord($queryStr, array($id, $langId), $row);