OSDN Git Service

初回コミット(v2.6.17.1)
[magic3/magic3.git] / widgets / ec_product_slide / include / db / ec_product_slideDb.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-2012 Magic3 Project.
12  * @license    http://www.gnu.org/copyleft/gpl.html  GPL License
13  * @version    SVN: $Id: ec_product_slideDb.php 5448 2012-12-09 01:45:44Z fishbone $
14  * @link       http://www.magic3.org
15  */
16 require_once($gEnvManager->getDbPath() . '/baseDb.php');
17
18 class ec_product_slideDb extends BaseDb
19 {
20         /**
21          * 商品一覧を取得(シリアル番号のみ)
22          *
23          * @param string        $lang                           言語
24          * @param int           $limit                          取得する項目数
25          * @param int           $offset                         取得する先頭位置(0~)
26          * @param array         $categoryArray          商品カテゴリー(空の場合は全商品対象)
27          * @param array     $rows                               取得レコード
28          * @return bool                                                 取得 = true, 取得なし= false
29          */
30         function getProductSerial($lang, $limit, $offset, $categoryArray, &$rows)
31         {
32                 $queryStr = 'SELECT distinct(pt_serial) ';
33                 $queryStr .=  'FROM product RIGHT JOIN product_with_category ON pt_serial = pw_product_serial ';
34                 $queryStr .=  'WHERE pt_deleted = false ';// 削除されていない
35                 $queryStr .=    'AND pt_visible = true ';               // 表示可能な商品        
36                 $queryStr .=    'AND pt_language_id = ? ';
37                 if (!empty($categoryArray)) $queryStr .=    'AND pw_category_id in (' . implode(',', $categoryArray) . ') ';
38                 $ret = $this->selectRecords($queryStr, array($lang), $rows);
39
40                 $serialArray = array();
41                 if ($ret){
42                         for ($i = 0; $i < count($rows); $i++){
43                                 $serialArray[] = $rows[$i]['pt_serial'];
44                         }
45                 }
46                 $serialStr = implode(',', $serialArray);
47                 if (empty($serialStr)) $serialStr = '0';                // 0レコードのときはダミー値を設定
48                 
49                 $queryStr = 'SELECT pt_serial, ';
50                 $queryStr .=    'CASE WHEN pe_promote_count IS NULL THEN 0 ELSE pe_promote_count ';
51                 $queryStr .=    'END AS promote_count ';                // 表示回数
52                 $queryStr .=  'FROM product LEFT JOIN product_record ON pt_id = pe_product_id AND pt_language_id = pe_language_id ';
53                 $queryStr .=  'WHERE pt_serial in (' . $serialStr . ') ';                       // 商品シリアル番号
54                 $queryStr .=  'ORDER BY promote_count limit ' . $limit . ' offset ' . $offset;          // 表示回数が少ないものを優先的に取得
55                 $ret = $this->selectRecords($queryStr, array(), $rows);
56                 return $ret;
57         }
58         /**
59          * 商品をシリアル番号で取得
60          *
61          * @param int           $serial                         シリアル番号
62          * @param array     $row                                レコード
63          * @param array     $row2                               商品価格
64          * @param array     $row3                               商品画像
65          * @param array     $row4                               商品ステータス
66          * @param array     $row5                               商品カテゴリー
67          * @return bool                                                 取得 = true, 取得なし= false
68          */
69         function getProductBySerial($serial, &$row, &$row2, &$row3, &$row4, &$row5)
70         {
71                 $queryStr = 'SELECT * ';
72                 $queryStr .=  'FROM product LEFT JOIN product_record ON pt_id = pe_product_id AND pt_language_id = pe_language_id ';
73                 $queryStr .=  'WHERE pt_serial = ? ';
74                 $ret = $this->selectRecord($queryStr, array($serial), $row);
75                 if ($ret){
76                         $queryStr  = 'SELECT * FROM product_price ';
77                         $queryStr .=   'WHERE pp_deleted = false ';// 削除されていない
78                         $queryStr .=     'AND pp_product_id = ? ';
79                         $queryStr .=     'AND pp_language_id = ? ';
80                         $this->selectRecords($queryStr, array($row['pt_id'], $row['pt_language_id']), $row2);
81                         
82                         $queryStr  = 'SELECT * FROM product_image ';
83                         $queryStr .=   'WHERE im_deleted = false ';// 削除されていない
84                         $queryStr .=     'AND im_type = 2 ';            // 商品画像
85                         $queryStr .=     'AND im_id = ? ';
86                         $queryStr .=     'AND im_language_id = ? ';
87                         $this->selectRecords($queryStr, array($row['pt_id'], $row['pt_language_id']), $row3);
88                         
89                         // 商品ステータス
90                         $queryStr  = 'SELECT * FROM product_status ';
91                         $queryStr .=   'WHERE ps_deleted = false ';// 削除されていない
92                         $queryStr .=     'AND ps_id = ? ';
93                         $queryStr .=     'AND ps_language_id = ? ';
94                         $this->selectRecords($queryStr, array($row['pt_id'], $row['pt_language_id']), $row4);
95                         
96                         // 商品カテゴリー
97                         $queryStr  = 'SELECT * FROM product_with_category ';
98                         $queryStr .=   'WHERE pw_product_serial = ? ';
99                         $queryStr .=  'ORDER BY pw_index ';
100                         $this->selectRecords($queryStr, array($row['pt_serial']), $row5);
101                 }
102                 return $ret;
103         }
104         /**
105          * 商品記録を更新
106          *
107          * @param int     $id                   商品ID
108          * @param string  $lang                 言語ID
109          * @param array $updateParam    更新パラメータ
110          * @return bool                                 true = 成功、false = 失敗
111          */
112         function updateProductRecord($id, $lang, $updateParam)
113         {
114                 global $gEnvManager;
115                 
116                 $now = date("Y/m/d H:i:s");     // 現在日時
117                 $userId = $gEnvManager->getCurrentUserId();     // 現在のユーザ
118                 
119                 // パラメータエラーチェック
120                 $keys = array_keys($updateParam);
121                 if (in_array('pe_serial', $keys)) return false;
122                                 
123                 // 既存データ取得
124                 $queryStr = 'SELECT * FROM product_record ';
125                 $queryStr .=  'WHERE pe_product_id = ? ';
126                 $queryStr .=    'AND pe_language_id = ? ';
127                 $ret = $this->selectRecord($queryStr, array($id, $lang), $stockRow);
128                 if ($ret){      // データが存在するとき
129                         // ##### データを更新 #####
130                         // レコード更新
131                         $queryStr = 'UPDATE product_record ';
132                         $queryStr .=  'SET ';
133                         $values = array();
134                         for ($i = 0; $i < count($keys); $i++){
135                                 $queryStr .= $keys[$i] . ' = ?, ';
136                                 $values[] = $updateParam[$keys[$i]];
137                         }
138                         $queryStr .= 'pe_update_user_id = ?, '; $values[] = $userId;
139                         $queryStr .= 'pe_update_dt = ? '; $values[] = $now;
140                         $queryStr .=  'WHERE pe_serial = ? ';
141                         $values[] = $stockRow['pe_serial'];
142                         $ret =$this->execStatement($queryStr, $values);
143                 } else {
144                         // ##### データを新規追加 #####
145                         // 新規レコード追加
146                         $queryStr = 'INSERT INTO product_record ';
147                         $queryStr .=  '(';
148                 
149                         $valueStr = '(';
150                         $values = array();
151                         for ($i = 0; $i < count($keys); $i++){
152                                 $queryStr .= $keys[$i] . ', ';
153                                 $valueStr .= '?, ';
154                                 $values[] = $updateParam[$keys[$i]];
155                         }
156                         $queryStr .= 'pe_product_id, pe_language_id, pe_update_user_id, pe_update_dt) ';
157                         $valueStr .= '?, ?, ?, ?) ';
158                         $values[] = $id;
159                         $values[] = $lang;
160                         $values[] = $userId;
161                         $values[] = $now;
162                         
163                         $queryStr .=  'VALUES ';
164                         $queryStr .=  $valueStr;
165                         $ret =$this->execStatement($queryStr, $values);
166                 }
167                 return $ret;
168         }
169         /**
170          * 商品ステータス一覧を取得
171          *
172          * @param string        $lang                           言語
173          * @param array     $rows                               取得レコード
174          * @return bool                                                 取得 = true, 取得なし= false
175          */
176         function getAllProductStatus($lang, &$rows)
177         {
178                 $queryStr = 'SELECT * FROM product_status_type ';
179                 $queryStr .=  'WHERE pa_language_id = ? ';
180                 $queryStr .=  'ORDER BY pa_priority';
181                 $ret = $this->selectRecords($queryStr, array($lang), $rows);
182                 return $ret;
183         }
184         /**
185          * 画像情報を取得
186          *
187          * @param string        $type                   画像タイプ
188          * @param array     $row                                レコード
189          * @return bool                                                 取得 = true, 取得なし= false
190          */
191         function getProductImageInfo($type, &$row)
192         {
193                 $queryStr  = 'SELECT * FROM image_size ';
194                 $queryStr .=   'WHERE is_id = ? ';
195                 $ret = $this->selectRecord($queryStr, array($type), $row);
196                 return $ret;
197         }
198         /**
199          * サブ商品カテゴリーを取得
200          *
201          * @param int           $id                     カテゴリーID
202          * @param string        $langId         言語ID
203          * @param array  $rows                  取得レコード
204          * @return bool                                 true=取得、false=取得せず
205          */
206         function getChildCategory($id, $langId, &$rows)
207         {
208                 $queryStr  = 'SELECT * FROM product_category ';
209                 $queryStr .=   'WHERE pc_deleted = false ';     // 削除されていない
210                 $queryStr .=     'AND pc_parent_id = ? ';
211                 $queryStr .=     'AND pc_language_id = ? ';
212                 $queryStr .=   'ORDER BY pc_sort_order';
213                 $retValue = $this->selectRecords($queryStr, array($id, $langId), $rows);
214                 return $retValue;
215         }
216         /**
217          * 商品を商品ID、言語IDで取得
218          *
219          * @param int           $id                                     商品ID
220          * @param string        $langId                         言語ID
221          * @param array     $row                                レコード
222          * @return bool                                                 取得 = true, 取得なし= false
223          */
224         function getProductWithCategory($id, $langId, &$row)
225         {
226                 $queryStr  = 'SELECT * FROM product RIGHT JOIN product_with_category ON pt_serial = pw_product_serial ';
227                 $queryStr .=   'WHERE pt_deleted = false ';     // 削除されていない
228                 $queryStr .=   'AND pt_id = ? ';
229                 $queryStr .=   'AND pt_language_id = ? ';
230                 $queryStr .=  'ORDER BY pw_index ';
231                 $ret = $this->selectRecord($queryStr, array(intval($id), $langId), $row);
232                 return $ret;
233         }
234 }
235 ?>