OSDN Git Service

初回コミット(v2.6.17.1)
[magic3/magic3.git] / widgets / photo_main / include / db / photo_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-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
15  */
16 require_once($gEnvManager->getDbPath() . '/baseDb.php');
17
18 class photo_mainDb extends BaseDb
19 {
20         const PRODUCT_CLASS_PHOTO       = 'photo';              // 商品クラス
21         
22         /**
23          * フォトギャラリー定義値を取得をすべて取得
24          *
25          * @param array  $rows                  レコード
26          * @return bool                                 1行以上取得 = true, 取得なし= false
27          */
28         function getAllConfig(&$rows)
29         {
30                 $queryStr  = 'SELECT * FROM photo_config ';
31                 $queryStr .=   'ORDER BY hg_index';
32                 $retValue = $this->selectRecords($queryStr, array(), $rows);
33                 return $retValue;
34         }
35         /**
36          * フォトギャラリー定義値を取得
37          *
38          * @param string $key           キーとなる項目値
39          * @return string $value        値
40          */
41         function getConfig($key)
42         {
43                 $retValue = '';
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'];
48                 return $retValue;
49         }
50         /**
51          * フォトギャラリー定義値を更新
52          *
53          * @param string $key           キーとなる項目値
54          * @param string $value         値
55          * @return                                      true = 正常、false=異常
56          */
57         function updateConfig($key, $value)
58         {
59                 // データの確認
60                 $queryStr = 'SELECT hg_value FROM photo_config ';
61                 $queryStr .=  'WHERE hg_id  = ?';
62                 $ret = $this->isRecordExists($queryStr, array($key));
63                 if ($ret){
64                         $queryStr = "UPDATE photo_config SET hg_value = ? WHERE hg_id = ?";
65                         return $this->execStatement($queryStr, array($value, $key));
66                 } else {
67                         $queryStr = "INSERT INTO photo_config (hg_id, hg_value) VALUES (?, ?)";
68                         return $this->execStatement($queryStr, array($key, $value));
69                 }
70         }
71         /**
72          * ユーザリスト取得
73          *
74          * @param string   $userOption  検索用ユーザオプション
75          * @param int      $limit               取得する項目数
76          * @param int      $page                取得するページ(1~)
77          * @param function $callback    コールバック関数
78          * @return                                              なし
79          */
80         function getAllUserList($userOption, $limit, $page, $callback)
81         {
82                 $offset = $limit * ($page -1);
83                 if ($offset < 0) $offset = 0;
84                 
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);
90         }
91         /**
92          * ユーザ総数取得
93          *
94          * @param string   $userOption  検索用ユーザオプション
95          * @return int                                  総数
96          */
97         function getAllUserListCount($userOption)
98         {
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());
103         }
104         /**
105          * メニュー用にすべてのユーザ取得
106          *
107          * @param string $userOption    検索用ユーザオプション
108          * @param array  $rows                  レコード
109          * @return bool                                 1行以上取得 = true, 取得なし= false
110          */
111         function getAllUserForMenu($userOption, &$rows)
112         {
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);
118                 return $retValue;
119         }
120         /**
121          * ユーザ情報をシリアル番号で取得
122          *
123          * @param string        $serial                         シリアル番号
124          * @param array     $row                                レコード
125          * @return bool                                                 取得 = true, 取得なし= false
126          */
127         function getUserBySerial($serial, &$row)
128         {
129                 $queryStr  = 'select * from _login_user ';
130                 $queryStr .=   'WHERE lu_serial = ? ';
131                 $ret = $this->selectRecord($queryStr, array($serial), $row);
132                 return $ret;
133         }
134         /**
135          * ユーザの削除
136          *
137          * @param array $serial                 シリアルNo
138          * @return                                              true=成功、false=失敗
139          */
140         function delUserBySerial($serial)
141         {
142                 // 引数のエラーチェック
143                 if (!is_array($serial)) return false;
144                 if (count($serial) <= 0) return true;
145                 
146                 $now = date("Y/m/d H:i:s");     // 現在日時
147                 $userId = $this->gEnv->getCurrentUserId();      // 現在のユーザ
148                 
149                 // トランザクション開始
150                 $this->startTransaction();
151                 
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                         // 存在しない場合は、既に削除されたとして終了
159                         if (!$ret){
160                                 $this->endTransaction();
161                                 return false;
162                         }
163                 }
164                 
165                 // レコードを削除
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));
172                 
173                 // トランザクション確定
174                 $ret = $this->endTransaction();
175                 return $ret;
176         }
177         /**
178          * 新規の画像Noを取得
179          *
180          * @param int $userId   ユーザID
181          * @return int                  画像番号(1~)
182          */
183         function getNewPhotoNo($userId)
184         {
185                 // 画像IDを決定する
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;
190         }
191         /**
192          * 画像コードが存在するかチェック
193          *
194          * @param string $code  画像コード
195          * @return                              true=存在する、false=存在しない
196          */
197         function isExistsPhotoCode($code)
198         {
199                 $queryStr  = 'SELECT * FROM photo ';
200                 $queryStr .=   'WHERE ht_code = ? ';
201                 return $this->isRecordExists($queryStr, array($code));
202         }
203         /**
204          * 画像が存在するかチェック(言語に関わらず)
205          *
206          * @param string $publicId      画像ID
207          * @return                                      true=存在する、false=存在しない
208          */
209         function isExistsPhoto($publicId)
210         {
211                 $queryStr  = 'SELECT * FROM photo ';
212                 $queryStr .=   'WHERE ht_deleted = false ';
213                 $queryStr .=     'AND ht_public_id = ? ';
214                 return $this->isRecordExists($queryStr, array($publicId));
215         }
216         /**
217          * 画像情報の新規追加、更新
218          *
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 = 失敗
244          */
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)
247         {
248                 $now = date("Y/m/d H:i:s");     // 現在日時
249                 $userId = $this->gEnv->getCurrentUserId();      // 現在のユーザ
250                                                 
251                 // トランザクション開始
252                 $this->startTransaction();
253                 
254                 // シリアル番号が0のときは新規追加
255                 if (empty($serial)){
256                         // 画像コードが存在すればエラー
257                         if ($this->isExistsPhotoCode($code)){
258                                 $this->endTransaction();
259                                 return false;
260                         }
261                         // 画像IDを決定する
262                         $queryStr = 'SELECT MAX(ht_id) AS mid FROM photo ';
263                         $ret = $this->selectRecord($queryStr, array(), $row);
264                         if ($ret){
265                                 $photoId = $row['mid'] + 1;
266                         } else {
267                                 $photoId = 1;
268                         }
269                         $historyIndex = 0;
270                         $registDt = $now;               // 画像アップロード日時
271                         $rateAverage = 0;               // 評価値
272                         $viewCount = 0;                 // 参照数
273                         $sortOrder = $photoId * 2;              // ソート順
274                 } else {
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();
283                                         return false;
284                                 }
285 //                              if ($limitedUser && $row['ht_owner_id'] != $ownerId){           // 制限ユーザの場合は所有者が異なるときは更新不可
286 //                                      $this->endTransaction();
287 //                                      return false;
288 //                              }
289                                 $photoId = $row['ht_id'];
290                                 $langId = $row['ht_language_id'];
291                                 $historyIndex = $row['ht_history_index'] + 1;
292                                 // 変更しない値
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();
307                                 return false;
308                         }
309                         // 古いレコードを削除
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));
316                 }
317                 
318                 // 新規レコード追加             
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));
351
352                 // 新規のシリアル番号取得
353                 $newSerial = 0;
354                 $queryStr = 'SELECT MAX(ht_serial) AS ns FROM photo ';
355                 $ret = $this->selectRecord($queryStr, array(), $row);
356                 if ($ret) $newSerial = $row['ns'];
357                 
358                 // 画像カテゴリーの更新
359                 for ($i = 0; $i < count($category); $i++){
360                         $ret = $this->updateCategory($newSerial, $i, $category[$i]);
361                         if (!$ret){
362                                 $this->endTransaction();
363                                 return false;
364                         }
365                 }
366                 
367                 // トランザクション確定
368                 $ret = $this->endTransaction();
369                 return $ret;
370         }
371         /**
372          * 画像情報の参照数を更新
373          *
374          * @param array   $serial               シリアルNo
375          * @return                                              true=成功、false=失敗
376          */
377         function updatePhotoInfoViewCount($serial)
378         {
379                 $now = date("Y/m/d H:i:s");     // 現在日時
380                 $userId = $this->gEnv->getCurrentUserId();      // 現在のユーザ
381                                                 
382                 // トランザクション開始
383                 $this->startTransaction();
384                 
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;
392                         
393                         // データを更新
394                         $queryStr  = 'UPDATE photo ';
395                         $queryStr .=   'SET ';
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();
403                         return false;
404                 }
405                         
406                 // トランザクション確定
407                 $ret = $this->endTransaction();
408                 return $ret;
409         }
410         /**
411          * 画像情報を取得(管理用)
412          *
413          * @param string $filename              ファイル名
414          * @param string $lang                  言語ID
415          * @param array $row                    取得データ
416          * @param array $categoryRows   画像カテゴリー
417          * @return                                              true=正常、false=異常
418          */
419         function getPhotoInfo($filename, $lang, &$row, &$categoryRows = array())
420         {
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);
426                 
427                 if ($ret){
428                         // 画像カテゴリー
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);
433                 }
434                 return $ret;
435         }
436         /**
437          * 画像情報を取得(管理用)
438          *
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=異常
446          */
447         function getPhotoInfoWithPrice($publicId, $productClass, $productType, $priceType, $lang, &$row)
448         {
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);
458                 return $ret;
459         }
460         /**
461          * 画像情報を取得
462          *
463          * @param int $serial                   シリアル番号
464          * @param array $row                    取得データ
465          * @param array $categoryRows   画像カテゴリー
466          * @return                                              true=正常、false=異常
467          */
468         function getPhotoInfoBySerial($serial, &$row, &$categoryRows = array())
469         {
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);
473                 
474                 if ($ret){
475                         // 画像カテゴリー
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);
480                 }
481                 return $ret;
482         }
483         /**
484          * 画像情報の削除
485          *
486          * @param array   $serial               シリアルNo
487          * @return                                              true=成功、false=失敗
488          */
489         function delPhotoInfo($serial)
490         {
491                 // 引数のエラーチェック
492                 if (!is_array($serial)) return false;
493                 if (count($serial) <= 0) return true;
494                 
495                 $now = date("Y/m/d H:i:s");     // 現在日時
496                 $userId = $this->gEnv->getCurrentUserId();      // 現在のユーザ
497                 
498                 // トランザクション開始
499                 $this->startTransaction();
500                 
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){              // 既に登録レコードがあるとき                      
507                                 // レコードを削除
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();
516                                 return false;
517                         }
518                 }
519                 // トランザクション確定
520                 $ret = $this->endTransaction();
521                 return $ret;
522         }
523         /**
524          * 画像数を取得(管理用)
525          *
526          * @param int $userId                   ユーザID
527          * @param int $allCount                 総数
528          * @param int $visbleCount              公開画像数
529          * @return                                              なし
530          */
531         function getPhotoCount($userId, &$allCount, &$visbleCount)
532         {
533                 $queryStr  = 'SELECT * FROM photo ';
534                 $queryStr .=   'WHERE ht_deleted = false ';
535                 $queryStr .=     'AND ht_owner_id = ? ';
536                 $allCount = $this->selectRecordCount($queryStr, array($userId));
537                 
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));
543         }
544         /**
545          * 写真一覧を取得(公開用)
546          *
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               参照可能なカテゴリー
560          * @return                      なし
561          */
562         function searchPhotoItem($limit, $page, $langId, $startDt, $endDt, $keywords, $category, $author, $sortKey, $sortDirection, $callback, $urlOthers, $authCategory = null)
563         {
564                 $offset = $limit * ($page -1);
565                 if ($offset < 0) $offset = 0;
566
567                 // クエリー文字列作成
568                 $queryStr = $this->_createSearchPhoto($startDt, $endDt, $keywords, $category, $author, $authCategory);
569                 
570                 // 日付範囲
571                 /*
572                 if (!empty($startDt)){
573                         $queryStr .=    'AND ? <= ht_regist_dt ';
574                         $params[] = $startDt;
575                 }
576                 if (!empty($endDt)){
577                         $queryStr .=    'AND ht_regist_dt < ? ';
578                         $params[] = $endDt;
579                 }*/
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 ';               // 公開中
584                 
585                 // カテゴリー
586                 if (!empty($category)){
587                         $idStr = '';
588                         for ($i = 0; $i < count($category); $i++){
589                                 $idStr .= addslashes($category[$i]) . ',';
590                         }
591                         $idStr = rtrim($idStr, ',');
592                         $queryStr .=  'AND hw_category_id in (' . $idStr . ') ';
593                 }
594                 // 参照可能なカテゴリー
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 ';
600                         }
601                         $queryStr .=  ') ';
602                 }
603                 // キーワード検索
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 . '%\') ';     // 撮影者
614                         }
615                 }
616                 // 撮影者
617                 if (!empty($author)){
618                         $idStr = '';
619                         for ($i = 0; $i < count($author); $i++){
620                                 $idStr .= '\'' . addslashes($author[$i]) . '\',';
621                         }
622                         $idStr = rtrim($idStr, ',');
623                         $queryStr .=  'AND lu_account in (' . $idStr . ') ';
624                 }*/
625                 // ソート順
626                 switch ($sortKey){
627                         case 'index':   // 表示順
628                         default:
629                                 $orderKey = 'ht_sort_order ';
630                                 if (empty($sortDirection)) $orderKey .= 'DESC ';
631                                 $orderKey .= ',ht_regist_dt ';
632                                 break;
633                         case 'date':            // 日付
634                                 $orderKey = 'ht_regist_dt ';
635                                 break;
636                         case 'rate':            // 評価
637                                 $orderKey = 'ht_rate_average ';
638                                 break;
639                         case 'ref':                     // 参照数
640                                 $orderKey = 'ht_view_count ';
641                                 break;
642                 }
643                 $ord = '';
644                 if (empty($sortDirection)) $ord = 'DESC ';
645                 $queryStr .=  'ORDER BY ' . $orderKey . $ord . 'LIMIT ' . $limit . ' OFFSET ' . $offset;        // 画像アップロード日時順
646                 $this->selectLoop($queryStr, array(), $callback, $urlOthers);
647         }
648         /**
649          * 写真一覧を取得(公開用)
650          *
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               参照可能なカテゴリー
664          * @return                      なし
665          */
666         function searchPhotoItemByNo($limit, $no, $langId, $startDt, $endDt, $keywords, $category, $author, $sortKey, $sortDirection, $callback, $urlOthers, $authCategory = null)
667         {
668                 $offset = $no -1;
669                 if ($offset < 0) $offset = 0;
670
671                 // クエリー文字列作成
672                 $queryStr = $this->_createSearchPhoto($startDt, $endDt, $keywords, $category, $author, $authCategory);
673                 
674                 // 日付範囲
675                 /*
676                 if (!empty($startDt)){
677                         $queryStr .=    'AND ? <= ht_regist_dt ';
678                         $params[] = $startDt;
679                 }
680                 if (!empty($endDt)){
681                         $queryStr .=    'AND ht_regist_dt < ? ';
682                         $params[] = $endDt;
683                 }*/
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 ';               // 公開中
688                 
689                 // カテゴリー
690                 if (!empty($category)){
691                         $idStr = '';
692                         for ($i = 0; $i < count($category); $i++){
693                                 $idStr .= addslashes($category[$i]) . ',';
694                         }
695                         $idStr = rtrim($idStr, ',');
696                         $queryStr .=  'AND hw_category_id in (' . $idStr . ') ';
697                 }
698                 // 参照可能なカテゴリー
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 ';
704                         }
705                         $queryStr .=  ') ';
706                 }
707                 // キーワード検索
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 . '%\') ';     // 撮影者
718                         }
719                 }
720                 // 撮影者
721                 if (!empty($author)){
722                         $idStr = '';
723                         for ($i = 0; $i < count($author); $i++){
724                                 $idStr .= '\'' . addslashes($author[$i]) . '\',';
725                         }
726                         $idStr = rtrim($idStr, ',');
727                         $queryStr .=  'AND lu_account in (' . $idStr . ') ';
728                 }*/
729                 // ソート順
730                 switch ($sortKey){
731                         case 'index':   // 表示順
732                         default:
733                                 $orderKey = 'ht_sort_order ';
734                                 if (empty($sortDirection)) $orderKey .= 'DESC ';
735                                 $orderKey .= ',ht_regist_dt ';
736                                 break;
737                         case 'date':            // 日付
738                                 $orderKey = 'ht_regist_dt ';
739                                 break;
740                         case 'rate':            // 評価
741                                 $orderKey = 'ht_rate_average ';
742                                 break;
743                         case 'ref':                     // 参照数
744                                 $orderKey = 'ht_view_count ';
745                                 break;
746                 }
747                 $ord = '';
748                 if (empty($sortDirection)) $ord = 'DESC ';
749                 $queryStr .=  'ORDER BY ' . $orderKey . $ord . 'LIMIT ' . $limit . ' OFFSET ' . $offset;        // 画像アップロード日時順
750                 $this->selectLoop($queryStr, array(), $callback, $urlOthers);
751         }
752         /**
753          * 写真一覧数を取得(公開用)
754          *
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               参照可能なカテゴリー
762          * @return                      なし
763          */
764         function searchPhotoItemCount($langId, $startDt, $endDt, $keywords, $category, $author, $authCategory = null)
765         {
766                 // クエリー文字列作成
767                 $queryStr = $this->_createSearchPhoto($startDt, $endDt, $keywords, $category, $author, $authCategory);
768                 // 日付範囲
769                 /*
770                 if (!empty($startDt)){
771                         $queryStr .=    'AND ? <= ht_regist_dt ';
772                         $params[] = $startDt;
773                 }
774                 if (!empty($endDt)){
775                         $queryStr .=    'AND ht_regist_dt < ? ';
776                         $params[] = $endDt;
777                 }*/
778                 /*
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 ';               // 公開中
783                 
784                 // カテゴリー
785                 if (!empty($category)){
786                         $idStr = '';
787                         for ($i = 0; $i < count($category); $i++){
788                                 $idStr .= addslashes($category[$i]) . ',';
789                         }
790                         $idStr = rtrim($idStr, ',');
791                         $queryStr .=  'AND hw_category_id in (' . $idStr . ') ';
792                 }
793                 // 参照可能なカテゴリー
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 ';
799                         }
800                         $queryStr .=  ') ';
801                 }
802                 // キーワード検索
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 . '%\') ';     // 撮影者
813                         }
814                 }
815                 // 撮影者
816                 if (!empty($author)){
817                         $idStr = '';
818                         for ($i = 0; $i < count($author); $i++){
819                                 $idStr .= '\'' . addslashes($author[$i]) . '\',';
820                         }
821                         $idStr = rtrim($idStr, ',');
822                         $queryStr .=  'AND lu_account in (' . $idStr . ') ';
823                 }*/
824                 return $this->selectRecordCount($queryStr, array());
825         }
826         /**
827          * 画像検索用クエリー作成
828          *
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                               クエリー文字列
836          */
837         function _createSearchPhoto($startDt, $endDt, $keywords, $category, $author, $authCategory)
838         {
839                 // 日付範囲
840                 /*
841                 if (!empty($startDt)){
842                         $queryStr .=    'AND ? <= ht_regist_dt ';
843                         $params[] = $startDt;
844                 }
845                 if (!empty($endDt)){
846                         $queryStr .=    'AND ht_regist_dt < ? ';
847                         $params[] = $endDt;
848                 }*/
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 ';
858                         }
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;
861                 }
862                 $queryStr .=  'WHERE ht_deleted = false ';              // 未削除
863                 $queryStr .=    'AND ht_visible = true ';               // 公開中
864                 
865                 // ##### アクセス制限 #####
866                 // 参照可能なカテゴリー
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 ';
872                         }
873                         $queryStr .=  ') ';
874                 }
875                 
876                 // ##### 検索条件 #####
877                 // カテゴリー
878                 if (!empty($category)){
879 /*                      $idStr = '';
880                         for ($i = 0; $i < count($category); $i++){
881                                 $idStr .= addslashes($category[$i]) . ',';
882                         }
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;
888                                 $idStr = '';
889                                 for ($j = 0; $j < count($categoryLine); $j++){
890                                         $idStr .= addslashes($categoryLine[$j]) . ',';
891                                 }
892                                 $idStr = rtrim($idStr, ',');
893                                 $queryStr .=  'AND t' . $i . '.hw_category_id in (' . $idStr . ') ';
894                         }
895                 }
896                 // キーワード検索
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 . '%\') ';     // 撮影者
908                         }
909                 }
910                 // 撮影者
911                 if (!empty($author)){
912                         $idStr = '';
913                         for ($i = 0; $i < count($author); $i++){
914                                 $idStr .= '\'' . addslashes($author[$i]) . '\',';
915                         }
916                         $idStr = rtrim($idStr, ',');
917                         $queryStr .=  'AND lu_account in (' . $idStr . ') ';
918                 }
919                 return $queryStr;
920         }
921         /**
922          * 画像情報を取得(公開用)
923          *
924          * @param string $filename              ファイル名
925          * @param string $lang                  言語ID
926          * @param array $row                    取得データ
927          * @param array $categoryRows   画像カテゴリー
928          * @return                                              true=正常、false=異常
929          */
930         function getSearchPhotoInfo($filename, $lang, &$row, &$categoryRows = array())
931         {
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);
938                 
939                 if ($ret){
940                         // 画像カテゴリー
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);
945                 }
946                 return $ret;
947         }
948         /**
949          * 画像カテゴリー一覧を取得
950          *
951          * @param string        $langId                         言語
952          * @param array         $rows                           取得データ
953          * @return bool                                                 true=取得、false=取得せず
954          */
955         function getAllCategory($langId, &$rows)
956         {
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);
962                 return $retValue;
963         }
964         /**
965          * 画像カテゴリーの更新
966          *
967          * @param int        $serial            写真情報シリアル番号
968          * @param int        $index                     インデックス番号
969          * @param int        $categoryId        カテゴリーID
970          * @return bool          true = 成功、false = 失敗
971          */
972         function updateCategory($serial, $index, $categoryId)
973         {
974                 // 新規レコード追加
975                 $queryStr  = 'INSERT INTO photo_with_category ';
976                 $queryStr .=   '(';
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));
983                 return $ret;
984         }
985         /**
986          * コンテンツ項目を外部用キーで取得
987          *
988          * @param string        $key                            外部用キー
989          * @param string        $langId                         言語ID
990          * @param array     $row                                レコード
991          * @return bool                                                 取得 = true, 取得なし= false
992          */
993         function getContentByKey($key, $langId, &$row)
994         {
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);
1001                 return $ret;
1002         }
1003         /**
1004          * コンテンツのアクセス権を取得
1005          *
1006          * @param int    $userId                ユーザID
1007          * @param strin  $contentType   コンテンツタイプ
1008          * @param int    $contentId             コンテンツID
1009          * @param array     $row                                レコード
1010          * @return bool                                                 取得 = true, 取得なし= false
1011          */
1012         function getContentAccess($userId, $contentType, $contentId, &$row)
1013         {
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);
1019                 return $ret;
1020         }
1021         /**
1022          * クライアント設定値を取得
1023          *
1024          * @param string $clientId              クライアントID
1025          * @param string $widgetId              ウィジェットID
1026          * @return string                               値
1027          */
1028         function getClientParam($clientId, $widgetId)
1029         {
1030                 $retValue = '';
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'];
1036                 return $retValue;
1037         }
1038         /**
1039          * クライアント設定値を更新
1040          *
1041          * @param string $clientId              クライアントID
1042          * @param string $widgetId              ウィジェットID
1043          * @param string $value                 値
1044          * @return                                              true = 正常、false=異常
1045          */
1046         function updateClientParam($clientId, $widgetId, $value)
1047         {
1048                 $now = date("Y/m/d H:i:s");     // 現在日時
1049                 $ip = $this->gRequest->trimServerValueOf('REMOTE_ADDR');
1050                 
1051                 // データの確認
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));
1056                 if ($ret){
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));
1064                         return $ret;
1065                 } else {
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));
1069                         return $ret;
1070                 }
1071         }
1072         /**
1073          * すべての商品一覧を取得
1074          *
1075          * @param string        $lang                           言語
1076          * @param function      $callback                       コールバック関数
1077          * @return                      なし
1078          */
1079         function getAllProduct($lang, $callback)
1080         {
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);
1086         }
1087         /**
1088          * 商品をシリアル番号で取得
1089          *
1090          * @param int           $serial                         シリアル番号
1091          * @param array     $row                                レコード
1092          * @param array     $row2                               商品価格
1093          * @param array     $row3                               商品画像
1094          * @return bool                                                 取得 = true, 取得なし= false
1095          */
1096         function getProductBySerial($serial, &$row, &$row2, &$row3)
1097         {
1098                 $queryStr  = 'SELECT * FROM photo_product ';
1099                 $queryStr .=   'WHERE hp_serial = ? ';
1100                 $ret = $this->selectRecord($queryStr, array($serial), $row);
1101                 if ($ret){
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);
1109                         
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);
1117                 }
1118                 return $ret;
1119         }
1120         /**
1121          * 商品を商品ID、言語IDで取得
1122          *
1123          * @param int           $id                                     商品ID
1124          * @param string        $langId                         言語ID
1125          * @param array     $row                                レコード
1126          * @return bool                                                 取得 = true, 取得なし= false
1127          */
1128         function getProductByProductId($id, $langId, &$row)
1129         {
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);
1135                 return $ret;
1136         }
1137 }
1138 ?>