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-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
16 require_once($gEnvManager->getDbPath() . '/baseDb.php');
18 class ec_product_slideDb extends BaseDb
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
30 function getProductSerial($lang, $limit, $offset, $categoryArray, &$rows)
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);
40 $serialArray = array();
42 for ($i = 0; $i < count($rows); $i++){
43 $serialArray[] = $rows[$i]['pt_serial'];
46 $serialStr = implode(',', $serialArray);
47 if (empty($serialStr)) $serialStr = '0'; // 0レコードのときはダミー値を設定
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);
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
69 function getProductBySerial($serial, &$row, &$row2, &$row3, &$row4, &$row5)
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);
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);
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);
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);
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);
107 * @param int $id 商品ID
108 * @param string $lang 言語ID
109 * @param array $updateParam 更新パラメータ
110 * @return bool true = 成功、false = 失敗
112 function updateProductRecord($id, $lang, $updateParam)
116 $now = date("Y/m/d H:i:s"); // 現在日時
117 $userId = $gEnvManager->getCurrentUserId(); // 現在のユーザ
120 $keys = array_keys($updateParam);
121 if (in_array('pe_serial', $keys)) return false;
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 // ##### データを更新 #####
131 $queryStr = 'UPDATE product_record ';
134 for ($i = 0; $i < count($keys); $i++){
135 $queryStr .= $keys[$i] . ' = ?, ';
136 $values[] = $updateParam[$keys[$i]];
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);
144 // ##### データを新規追加 #####
146 $queryStr = 'INSERT INTO product_record ';
151 for ($i = 0; $i < count($keys); $i++){
152 $queryStr .= $keys[$i] . ', ';
154 $values[] = $updateParam[$keys[$i]];
156 $queryStr .= 'pe_product_id, pe_language_id, pe_update_user_id, pe_update_dt) ';
157 $valueStr .= '?, ?, ?, ?) ';
163 $queryStr .= 'VALUES ';
164 $queryStr .= $valueStr;
165 $ret =$this->execStatement($queryStr, $values);
172 * @param string $lang 言語
173 * @param array $rows 取得レコード
174 * @return bool 取得 = true, 取得なし= false
176 function getAllProductStatus($lang, &$rows)
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);
187 * @param string $type 画像タイプ
188 * @param array $row レコード
189 * @return bool 取得 = true, 取得なし= false
191 function getProductImageInfo($type, &$row)
193 $queryStr = 'SELECT * FROM image_size ';
194 $queryStr .= 'WHERE is_id = ? ';
195 $ret = $this->selectRecord($queryStr, array($type), $row);
201 * @param int $id カテゴリーID
202 * @param string $langId 言語ID
203 * @param array $rows 取得レコード
204 * @return bool true=取得、false=取得せず
206 function getChildCategory($id, $langId, &$rows)
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);
219 * @param int $id 商品ID
220 * @param string $langId 言語ID
221 * @param array $row レコード
222 * @return bool 取得 = true, 取得なし= false
224 function getProductWithCategory($id, $langId, &$row)
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);