[15559] | 1 | <?php |
---|
| 2 | /* |
---|
[16582] | 3 | * This file is part of EC-CUBE |
---|
| 4 | * |
---|
[18701] | 5 | * Copyright(c) 2000-2010 LOCKON CO.,LTD. All Rights Reserved. |
---|
[15559] | 6 | * |
---|
| 7 | * http://www.lockon.co.jp/ |
---|
[16582] | 8 | * |
---|
| 9 | * This program is free software; you can redistribute it and/or |
---|
| 10 | * modify it under the terms of the GNU General Public License |
---|
| 11 | * as published by the Free Software Foundation; either version 2 |
---|
| 12 | * of the License, or (at your option) any later version. |
---|
| 13 | * |
---|
| 14 | * This program is distributed in the hope that it will be useful, |
---|
| 15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
| 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
---|
| 17 | * GNU General Public License for more details. |
---|
| 18 | * |
---|
| 19 | * You should have received a copy of the GNU General Public License |
---|
| 20 | * along with this program; if not, write to the Free Software |
---|
| 21 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
---|
[15559] | 22 | */ |
---|
| 23 | |
---|
| 24 | // {{{ requires |
---|
[20534] | 25 | require_once CLASS_EX_REALDIR . 'page_extends/admin/LC_Page_Admin_Ex.php'; |
---|
[15559] | 26 | |
---|
| 27 | /** |
---|
[17364] | 28 | * 商品登録(商品規格)のページクラス. |
---|
[15559] | 29 | * |
---|
| 30 | * @package Page |
---|
| 31 | * @author LOCKON CO.,LTD. |
---|
| 32 | * @version $Id$ |
---|
| 33 | */ |
---|
[20345] | 34 | class LC_Page_Admin_Products_ProductClass extends LC_Page_Admin_Ex { |
---|
[15559] | 35 | |
---|
| 36 | // }}} |
---|
| 37 | // {{{ functions |
---|
| 38 | |
---|
| 39 | /** |
---|
| 40 | * Page を初期化する. |
---|
| 41 | * |
---|
| 42 | * @return void |
---|
| 43 | */ |
---|
| 44 | function init() { |
---|
| 45 | parent::init(); |
---|
| 46 | $this->tpl_mainpage = 'products/product_class.tpl'; |
---|
| 47 | $this->tpl_subnavi = 'products/subnavi.tpl'; |
---|
| 48 | $this->tpl_mainno = 'products'; |
---|
| 49 | $this->tpl_subno = 'product'; |
---|
[17509] | 50 | $this->tpl_subtitle = '商品登録(商品規格)'; |
---|
[19993] | 51 | $masterData = new SC_DB_MasterData_Ex(); |
---|
| 52 | $this->arrProductType = $masterData->getMasterData("mtb_product_type"); |
---|
[20595] | 53 | // 規格プルダウンのリスト |
---|
| 54 | $this->arrClass = $this->getAllClass(); |
---|
[15559] | 55 | } |
---|
| 56 | |
---|
[19661] | 57 | /** |
---|
| 58 | * Page のプロセス. |
---|
| 59 | * |
---|
| 60 | * @return void |
---|
| 61 | */ |
---|
[15559] | 62 | function process() { |
---|
[19661] | 63 | $this->action(); |
---|
| 64 | $this->sendResponse(); |
---|
| 65 | } |
---|
| 66 | |
---|
| 67 | /** |
---|
| 68 | * Page のアクション. |
---|
| 69 | * |
---|
| 70 | * @return void |
---|
| 71 | */ |
---|
| 72 | function action() { |
---|
[20410] | 73 | // 商品マスタの検索条件パラメータを初期化 |
---|
[20501] | 74 | $objFormParam = new SC_FormParam_Ex(); |
---|
[20410] | 75 | $this->initParam($objFormParam); |
---|
[15559] | 76 | |
---|
[20410] | 77 | $objFormParam->setParam($_POST); |
---|
| 78 | $objFormParam->convParam(); |
---|
[18819] | 79 | |
---|
[20410] | 80 | $this->arrSearchHidden = $objFormParam->getSearchArray(); |
---|
[15559] | 81 | |
---|
[20041] | 82 | switch ($this->getMode()) { |
---|
[20410] | 83 | |
---|
| 84 | // 編集実行 |
---|
[18815] | 85 | case 'edit': |
---|
[20612] | 86 | $this->arrErr = $this->lfCheckProductsClass($objFormParam); |
---|
| 87 | |
---|
| 88 | // エラーの無い場合は確認画面を表示 |
---|
| 89 | if (SC_Utils_Ex::isBlank($this->arrErr)) { |
---|
[20440] | 90 | $this->tpl_mainpage = 'products/product_class_confirm.tpl'; |
---|
[20595] | 91 | $this->doDisp($objFormParam); |
---|
| 92 | $objFormParam->setParam($_POST); |
---|
| 93 | $objFormParam->convParam(); |
---|
[20612] | 94 | } |
---|
| 95 | // エラーが発生した場合 |
---|
| 96 | else { |
---|
| 97 | $objFormParam->setParam($_POST); |
---|
| 98 | $objFormParam->convParam(); |
---|
[15559] | 99 | } |
---|
| 100 | break; |
---|
| 101 | |
---|
[20410] | 102 | // 削除 |
---|
[18815] | 103 | case 'delete': |
---|
[20410] | 104 | $this->doDelete($objFormParam->getValue('product_id')); |
---|
[20617] | 105 | $objFormParam->setValue('check', array()); |
---|
[18815] | 106 | break; |
---|
| 107 | |
---|
[20410] | 108 | // 初期表示 |
---|
[15559] | 109 | case 'pre_edit': |
---|
[20595] | 110 | $this->doPreEdit($objFormParam); |
---|
[18815] | 111 | break; |
---|
[15559] | 112 | |
---|
[20410] | 113 | // 「表示する」ボタン押下時 |
---|
[15559] | 114 | case 'disp': |
---|
[20612] | 115 | $this->arrErr = $this->lfCheckSelectClass(); |
---|
[20595] | 116 | if (SC_Utils_Ex::isBlank($this->arrErr)) { |
---|
| 117 | $this->doDisp($objFormParam); |
---|
| 118 | } |
---|
[15559] | 119 | break; |
---|
[20410] | 120 | |
---|
[18819] | 121 | // ダウンロード商品ファイルアップロード |
---|
[20617] | 122 | case 'file_upload': |
---|
| 123 | $this->doFileUpload($objFormParam); |
---|
[18819] | 124 | break; |
---|
[20410] | 125 | |
---|
[18819] | 126 | // ダウンロードファイルの削除 |
---|
[20617] | 127 | case 'file_delete': |
---|
| 128 | $this->doFileDelete($objFormParam); |
---|
[18819] | 129 | break; |
---|
[20410] | 130 | |
---|
| 131 | // 確認画面からの戻り |
---|
[15559] | 132 | case 'confirm_return': |
---|
[20595] | 133 | $this->doPreEdit($objFormParam); |
---|
| 134 | $objFormParam->setParam($_POST); |
---|
| 135 | $objFormParam->convParam(); |
---|
[20617] | 136 | break; |
---|
[20595] | 137 | |
---|
[15559] | 138 | case 'complete': |
---|
| 139 | $this->tpl_mainpage = 'products/product_class_complete.tpl'; |
---|
[20617] | 140 | $this->doUploadComplete($objFormParam); |
---|
| 141 | $this->registerProductClass($objFormParam->getHashArray(), |
---|
| 142 | $objFormParam->getValue('product_id'), |
---|
[20595] | 143 | $objFormParam->getValue('total')); |
---|
[15559] | 144 | break; |
---|
[18815] | 145 | |
---|
[15559] | 146 | default: |
---|
| 147 | } |
---|
[20410] | 148 | |
---|
| 149 | // 登録対象の商品名を取得 |
---|
[20595] | 150 | $objFormParam->setValue('product_name', |
---|
| 151 | $this->getProductName($objFormParam->getValue('product_id'))); |
---|
| 152 | $this->arrForm = $objFormParam->getFormParamList(); |
---|
[15559] | 153 | } |
---|
| 154 | |
---|
| 155 | /** |
---|
| 156 | * デストラクタ. |
---|
| 157 | * |
---|
| 158 | * @return void |
---|
| 159 | */ |
---|
| 160 | function destroy() { |
---|
| 161 | parent::destroy(); |
---|
| 162 | } |
---|
[20617] | 163 | |
---|
[20410] | 164 | /** |
---|
| 165 | * パラメータ初期化 |
---|
| 166 | * |
---|
[20595] | 167 | * @param SC_FormParam $objFormParam SC_FormParam インスタンス |
---|
| 168 | * @return void |
---|
[20410] | 169 | */ |
---|
| 170 | function initParam(&$objFormParam) { |
---|
| 171 | // 商品マスタ検索パラメータ引き継ぎ |
---|
[20538] | 172 | $objFormParam->addParam("商品ID", "product_id", INT_LEN, 'n', array("NUM_CHECK", "MAX_LENGTH_CHECK")); |
---|
| 173 | $objFormParam->addParam("カテゴリID", "category_id", STEXT_LEN, 'n', array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); |
---|
| 174 | $objFormParam->addParam("ページ送り番号","search_pageno", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK")); |
---|
| 175 | $objFormParam->addParam("表示件数", "search_page_max", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK")); |
---|
| 176 | $objFormParam->addParam("商品ID", "search_product_id", INT_LEN, 'n', array("NUM_CHECK", "MAX_LENGTH_CHECK")); |
---|
| 177 | $objFormParam->addParam("商品コード", "search_product_code", STEXT_LEN, 'KVna', array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); |
---|
| 178 | $objFormParam->addParam("商品名", "search_name", STEXT_LEN, 'KVa', array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); |
---|
| 179 | $objFormParam->addParam("カテゴリ", "search_category_id", STEXT_LEN, 'n', array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); |
---|
| 180 | $objFormParam->addParam("種別", "search_status", INT_LEN, 'n', array("MAX_LENGTH_CHECK")); |
---|
| 181 | $objFormParam->addParam("開始年", "search_startyear", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK")); |
---|
| 182 | $objFormParam->addParam("開始月", "search_startmonth", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK")); |
---|
| 183 | $objFormParam->addParam("開始日", "search_startday", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK")); |
---|
| 184 | $objFormParam->addParam("終了年", "search_endyear", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK")); |
---|
| 185 | $objFormParam->addParam("終了月", "search_endmonth", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK")); |
---|
| 186 | $objFormParam->addParam("終了日", "search_endday", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK")); |
---|
| 187 | $objFormParam->addParam("ステータス", "search_product_flag", INT_LEN, 'n', array("MAX_LENGTH_CHECK")); |
---|
[15559] | 188 | |
---|
[20410] | 189 | // 規格プルダウン |
---|
[20595] | 190 | $objFormParam->addParam("規格1", "class_id1", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK")); |
---|
| 191 | $objFormParam->addParam("規格2", "class_id2", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK")); |
---|
[20410] | 192 | |
---|
[20595] | 193 | // 商品規格 |
---|
| 194 | $objFormParam->addParam("商品規格数", "total", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK")); |
---|
| 195 | $objFormParam->addParam("商品名", "product_name", STEXT_LEN, 'KVa', array("MAX_LENGTH_CHECK")); |
---|
| 196 | $objFormParam->addParam("商品コード", "product_code", STEXT_LEN, 'KVa', array("MAX_LENGTH_CHECK")); |
---|
| 197 | $objFormParam->addParam("規格ID1", "classcategory_id1", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK")); |
---|
| 198 | $objFormParam->addParam("規格ID2", "classcategory_id2", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK")); |
---|
| 199 | $objFormParam->addParam("規格名1", "classcategory_name1", STEXT_LEN, 'KVa', array("MAX_LENGTH_CHECK")); |
---|
| 200 | $objFormParam->addParam("規格名2", "classcategory_name2", STEXT_LEN, 'KVa', array("MAX_LENGTH_CHECK")); |
---|
| 201 | $objFormParam->addParam("商品規格ID", "product_class_id", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK")); |
---|
[20612] | 202 | $objFormParam->addParam("在庫数", "stock", AMOUNT_LEN, 'n', array("NUM_CHECK", "MAX_LENGTH_CHECK")); |
---|
[20595] | 203 | $objFormParam->addParam("在庫数", "stock_unlimited", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK")); |
---|
| 204 | $objFormParam->addParam(NORMAL_PRICE_TITLE, "price01", PRICE_LEN, 'n', array("NUM_CHECK", "MAX_LENGTH_CHECK")); |
---|
[20612] | 205 | $objFormParam->addParam(SALE_PRICE_TITLE, "price02", PRICE_LEN, 'n', array("NUM_CHECK", "MAX_LENGTH_CHECK")); |
---|
[20595] | 206 | $objFormParam->addParam("商品種別", "product_type_id", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK")); |
---|
| 207 | $objFormParam->addParam("削除フラグ", "del_flg", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK")); |
---|
[20617] | 208 | $objFormParam->addParam("ダウンロード販売用ファイル名", "down_filename", STEXT_LEN, 'KVa', array("MAX_LENGTH_CHECK")); |
---|
| 209 | $objFormParam->addParam("ダウンロード販売用ファイル名", "down_realfilename", STEXT_LEN, 'KVa', array("MAX_LENGTH_CHECK")); |
---|
[20595] | 210 | $objFormParam->addParam("チェックボックス", "check", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK")); |
---|
[20617] | 211 | $objFormParam->addParam("ファイルアップロード用キー", "upload_index", STEXT_LEN, 'KVa', array("MAX_LENGTH_CHECK")); |
---|
[20410] | 212 | } |
---|
| 213 | |
---|
[17581] | 214 | /** |
---|
[18815] | 215 | * 規格の登録または更新を行う. |
---|
[17581] | 216 | * |
---|
[18815] | 217 | * TODO dtb_class_combination は, dtb_product_categories に倣って, |
---|
| 218 | * DELETE to INSERT だが, UPDATE を検討する. |
---|
| 219 | * |
---|
| 220 | * @param array $arrList 入力フォームの内容 |
---|
| 221 | * @param integer $product_id 登録を行う商品ID |
---|
[17581] | 222 | */ |
---|
[20595] | 223 | function registerProductClass($arrList, $product_id, $total) { |
---|
[20507] | 224 | $objQuery =& SC_Query_Ex::getSingletonInstance(); |
---|
[18815] | 225 | $objDb = new SC_Helper_DB_Ex(); |
---|
[15559] | 226 | |
---|
[18815] | 227 | $objQuery->begin(); |
---|
[15559] | 228 | |
---|
[20595] | 229 | $arrProductsClass = $objQuery->select("*", "dtb_products_class", "product_id = ?", array($product_id)); |
---|
| 230 | $arrExists = array(); |
---|
| 231 | foreach ($arrProductsClass as $val) { |
---|
| 232 | $arrExists[$val['product_class_id']] = $val; |
---|
[15559] | 233 | } |
---|
| 234 | |
---|
[20595] | 235 | // デフォルト値として設定する値を取得しておく |
---|
| 236 | $arrDefault = $this->getProductsClass($product_id); |
---|
| 237 | |
---|
| 238 | for ($i = 0; $i < $total; $i++) { |
---|
| 239 | $del_flg = SC_Utils_Ex::isBlank($arrList['check'][$i]) ? 1 : 0; |
---|
| 240 | $stock_unlimited = SC_Utils_Ex::isBlank($arrList['stock_unlimited'][$i]) ? 0 : 1; |
---|
[20746] | 241 | $price02 = SC_Utils_Ex::isBlank($arrList['price02'][$i]) ? 0 : $arrList['price02'][$i]; |
---|
[20595] | 242 | // dtb_products_class 登録/更新用 |
---|
| 243 | $registerKeys = array('product_code', 'stock', |
---|
[20746] | 244 | 'price01', 'product_type_id', |
---|
[20595] | 245 | 'down_filename', 'down_realfilename'); |
---|
| 246 | |
---|
| 247 | $arrPC = array(); |
---|
| 248 | foreach ($registerKeys as $key) { |
---|
[20746] | 249 | if ($del_flg === 0) { |
---|
| 250 | $arrPC[$key] = $arrList[$key][$i]; |
---|
| 251 | } |
---|
[18815] | 252 | } |
---|
[20595] | 253 | $arrPC['product_id'] = $product_id; |
---|
| 254 | $arrPC['sale_limit'] = $arrDefault['sale_limit']; |
---|
| 255 | $arrPC['deliv_fee'] = $arrDefault['deliv_fee']; |
---|
| 256 | $arrPC['point_rate'] = $arrDefault['point_rate']; |
---|
| 257 | $arrPC['stock_unlimited'] = $stock_unlimited; |
---|
[20746] | 258 | $arrPC['price02'] = $price02; |
---|
[15559] | 259 | |
---|
[20595] | 260 | // 該当関数が無いため, セッションの値を直接代入 |
---|
| 261 | $arrPC['creator_id'] = $_SESSION['member_id']; |
---|
| 262 | $arrPC['update_date'] = 'now()'; |
---|
| 263 | $arrPC['del_flg'] = $del_flg; |
---|
| 264 | |
---|
| 265 | // 登録 or 更新 |
---|
| 266 | $is_update = false; |
---|
| 267 | if (!SC_Utils_Ex::isBlank($arrList['product_class_id'][$i])) { |
---|
| 268 | $is_update = true; |
---|
| 269 | |
---|
[18815] | 270 | // 更新の場合は規格組み合わせを検索し, 削除しておく |
---|
[20595] | 271 | $class_combination_id = $arrExists[$arrList['product_class_id'][$i]]['class_combination_id']; |
---|
[19731] | 272 | $existsCombi = $objQuery->getRow( |
---|
[20595] | 273 | '*', |
---|
| 274 | 'dtb_class_combination', |
---|
| 275 | 'class_combination_id = ?', |
---|
| 276 | array($class_combination_id)); |
---|
[15559] | 277 | |
---|
[20595] | 278 | $objQuery->delete('dtb_class_combination', |
---|
| 279 | 'class_combination_id IN (?, ?)', |
---|
[18815] | 280 | array($existsCombi['class_combination_id'], |
---|
| 281 | $existsCombi['parent_class_combination_id'])); |
---|
| 282 | } |
---|
[15559] | 283 | |
---|
[18815] | 284 | // 規格組み合わせを登録 |
---|
[20595] | 285 | $arrComb1['class_combination_id'] = $objQuery->nextVal('dtb_class_combination_class_combination_id'); |
---|
| 286 | $arrComb1['classcategory_id'] = $arrList['classcategory_id1'][$i]; |
---|
| 287 | $arrComb1['level'] = 1; |
---|
| 288 | $objQuery->insert('dtb_class_combination', $arrComb1); |
---|
[15559] | 289 | |
---|
[18815] | 290 | // 規格2も登録する場合 |
---|
[20595] | 291 | if (!SC_Utils_Ex::isBlank($arrList['classcategory_id2'][$i])) { |
---|
| 292 | $arrComb2['class_combination_id'] = $objQuery->nextVal('dtb_class_combination_class_combination_id'); |
---|
| 293 | $arrComb2['classcategory_id'] = $arrList['classcategory_id2'][$i]; |
---|
| 294 | $arrComb2['parent_class_combination_id'] = $arrComb1['class_combination_id']; |
---|
| 295 | $arrComb2['level'] = 2; |
---|
| 296 | $objQuery->insert('dtb_class_combination', $arrComb2); |
---|
[15559] | 297 | |
---|
[20595] | 298 | $arrPC['class_combination_id'] = $arrComb2['class_combination_id']; |
---|
| 299 | } else { |
---|
| 300 | $arrPC['class_combination_id'] = $arrComb1['class_combination_id']; |
---|
[18815] | 301 | } |
---|
[15559] | 302 | |
---|
[18815] | 303 | // 更新 |
---|
[20595] | 304 | if ($is_update) { |
---|
| 305 | $arrPC['product_class_id'] = $arrList['product_class_id'][$i]; |
---|
| 306 | $objQuery->update("dtb_products_class", $arrPC, |
---|
[18815] | 307 | "product_class_id = ?", |
---|
[20595] | 308 | array($arrPC['product_class_id'])); |
---|
[15559] | 309 | } |
---|
[18815] | 310 | // 新規登録 |
---|
| 311 | else { |
---|
[20595] | 312 | $arrPC['create_date'] = "now()"; |
---|
| 313 | $arrPC['product_class_id'] = $objQuery->nextVal('dtb_products_class_product_class_id'); |
---|
[20617] | 314 | /* |
---|
| 315 | * チェックを入れない商品は product_type_id が NULL になるので, 0 を入れる |
---|
| 316 | */ |
---|
| 317 | $arrPC['product_type_id'] = SC_Utils_Ex::isBlank($arrPC['product_type_id']) ? 0 : $arrPC['product_type_id']; |
---|
[20595] | 318 | $objQuery->insert("dtb_products_class", $arrPC); |
---|
[18815] | 319 | } |
---|
[15559] | 320 | } |
---|
| 321 | |
---|
[18815] | 322 | // 規格無し用の商品規格を非表示に |
---|
[20595] | 323 | $arrBlank['del_flg'] = 1; |
---|
| 324 | $arrBlank['update_date'] = 'now()'; |
---|
| 325 | $objQuery->update("dtb_products_class", $arrBlank, |
---|
| 326 | "product_id = ? AND class_combination_id IS NULL", |
---|
| 327 | array($product_id)); |
---|
[15559] | 328 | |
---|
[17509] | 329 | // 件数カウントバッチ実行 |
---|
[20032] | 330 | $objDb->sfCountCategory($objQuery); |
---|
[15559] | 331 | $objQuery->commit(); |
---|
| 332 | } |
---|
| 333 | |
---|
[20410] | 334 | /** |
---|
| 335 | * 規格選択エラーチェックを行う |
---|
| 336 | * |
---|
| 337 | * ※SC_FormParamで対応していないエラーチェックのため, SC_CheckErrorを使用している. |
---|
| 338 | * |
---|
| 339 | * @return array エラーの配列 |
---|
| 340 | */ |
---|
[20612] | 341 | function lfCheckSelectClass() { |
---|
[20503] | 342 | $objErr = new SC_CheckError_Ex(); |
---|
[20617] | 343 | $objErr->doFunc(array("規格1", "class_id1"), array("EXIST_CHECK")); |
---|
| 344 | $objErr->doFunc(array("規格", "class_id1", "select_class_id2"), array("TOP_EXIST_CHECK")); |
---|
| 345 | $objErr->doFunc(array("規格1", "規格2", "class_id1", "class_id2"), array("DIFFERENT_CHECK")); |
---|
[15559] | 346 | return $objErr->arrErr; |
---|
| 347 | } |
---|
| 348 | |
---|
[20612] | 349 | /** |
---|
| 350 | * 商品規格エラーチェック. |
---|
| 351 | * |
---|
| 352 | * @param SC_FormParam $objFormParam SC_FormParam インスタンス |
---|
| 353 | * @return array エラー結果の配列 |
---|
| 354 | */ |
---|
| 355 | function lfCheckProductsClass(&$objFormParam) { |
---|
| 356 | $arrValues = $objFormParam->getHashArray(); |
---|
| 357 | $arrErr = $objFormParam->checkError(); |
---|
| 358 | $total = $objFormParam->getValue('total'); |
---|
[15559] | 359 | |
---|
[20612] | 360 | if (SC_Utils_Ex::isBlank($arrValues['check'])) { |
---|
| 361 | $arrErr['check_empty'] = '※ 商品種別が選択されていません。<br />'; |
---|
| 362 | } |
---|
| 363 | |
---|
| 364 | for ($i = 0; $i < $total; $i++) { |
---|
| 365 | |
---|
| 366 | /* |
---|
| 367 | * チェックボックスの入っている項目のみ, 必須チェックを行う. |
---|
| 368 | * エラーを配列で返す必要があるため, SC_CheckError を使用しない. |
---|
| 369 | */ |
---|
| 370 | if (!SC_Utils_Ex::isBlank($arrValues['check'][$i])) { |
---|
| 371 | |
---|
| 372 | /* |
---|
| 373 | * 販売価格の必須チェック |
---|
| 374 | */ |
---|
| 375 | if (SC_Utils_Ex::isBlank($arrValues['price02'][$i])) { |
---|
| 376 | $arrErr['price02'][$i] = '※ ' . SALE_PRICE_TITLE . 'が入力されていません。<br />'; |
---|
[15559] | 377 | } |
---|
[20612] | 378 | /* |
---|
| 379 | * 在庫数の必須チェック |
---|
| 380 | */ |
---|
| 381 | if ((SC_Utils_Ex::isBlank($arrValues['stock_unlimited'][$i]) |
---|
| 382 | || $arrValues['stock_unlimited'][$i] != 1) |
---|
[18819] | 383 | |
---|
[20612] | 384 | && SC_Utils_Ex::isBlank($arrValues['stock'][$i])) { |
---|
| 385 | $arrErr['stock'][$i] = '※ 在庫数が入力されていません。<br />'; |
---|
[19993] | 386 | } |
---|
[20612] | 387 | /* |
---|
| 388 | * 商品種別の必須チェック |
---|
| 389 | */ |
---|
| 390 | if (SC_Utils_Ex::isBlank($arrValues['product_type_id'][$i])) { |
---|
| 391 | $arrErr['product_type_id'][$i] = "※ 商品種別は、いずれかを選択してください。<br />"; |
---|
| 392 | } |
---|
| 393 | /* |
---|
| 394 | * ダウンロード商品の必須チェック |
---|
| 395 | */ |
---|
| 396 | if($arrValues['product_type_id'][$i] == PRODUCT_TYPE_DOWNLOAD) { |
---|
| 397 | if (SC_Utils_Ex::isBlank($arrValues['down_filename'][$i])) { |
---|
| 398 | $arrErr['down_filename'][$i] = "※ ダウンロード商品の場合はダウンロードファイル名を入力してください。<br />"; |
---|
[18819] | 399 | } |
---|
[20612] | 400 | if (SC_Utils_Ex::isBlank($arrValues['down_realfilename'][$i])) { |
---|
| 401 | $arrErr['down_realfilename'][$i] = "※ ダウンロード商品の場合はダウンロード商品用ファイルをアップロードしてください。<br />"; |
---|
| 402 | } |
---|
[18819] | 403 | } |
---|
[20612] | 404 | /* |
---|
| 405 | * 通常商品チェック |
---|
| 406 | */ |
---|
| 407 | else if ($arrValues['product_type_id'][$i] == PRODUCT_TYPE_NORMAL) { |
---|
| 408 | if (!SC_Utils_Ex::isBlank($arrValues['down_filename'][$i])) { |
---|
[20744] | 409 | $arrErr['down_filename'][$i] = "※ 通常商品の場合はダウンロードファイル名を設定できません。<br />"; |
---|
[18819] | 410 | } |
---|
[20612] | 411 | if (!SC_Utils_Ex::isBlank($arrValues['down_realfilename'][$i])) { |
---|
| 412 | $arrErr['down_realfilename'][$i] = "※ 実商品の場合はダウンロード商品用ファイルをアップロードできません。<br />ファイルを取り消してください。<br />"; |
---|
[18819] | 413 | } |
---|
| 414 | } |
---|
[15559] | 415 | } |
---|
| 416 | } |
---|
[20612] | 417 | return $arrErr; |
---|
[15559] | 418 | } |
---|
| 419 | |
---|
[20410] | 420 | /** |
---|
[18815] | 421 | * 規格の組み合わせ一覧を表示する. |
---|
| 422 | * |
---|
[20595] | 423 | * 規格1, 規格2における規格分類のすべての組み合わせを取得し, |
---|
| 424 | * 該当商品の商品規格の内容を取得後, フォームに設定する. |
---|
| 425 | * |
---|
| 426 | * @param SC_FormParam $objFormParam SC_FormParam インスタンス |
---|
| 427 | * @return void |
---|
[18815] | 428 | */ |
---|
[20595] | 429 | function doDisp(&$objFormParam) { |
---|
| 430 | $product_id = $objFormParam->getValue('product_id'); |
---|
[20617] | 431 | $class_id1 = $objFormParam->getValue('class_id1'); |
---|
| 432 | $class_id2 = $objFormParam->getValue('class_id2'); |
---|
[18815] | 433 | |
---|
[20595] | 434 | // すべての組み合わせを取得し, フォームに設定 |
---|
[20617] | 435 | $arrClassCat = $this->getAllClassCategory($class_id1, $class_id2); |
---|
[20595] | 436 | $total = count($arrClassCat); |
---|
| 437 | $objFormParam->setValue('total', $total); |
---|
| 438 | $objFormParam->setParam(SC_Utils_Ex::sfSwapArray($arrClassCat)); |
---|
| 439 | |
---|
[20617] | 440 | // class_id1, class_id2 を, 入力値で上書き |
---|
| 441 | $objFormParam->setValue('class_id1', $class_id1); |
---|
| 442 | $objFormParam->setValue('class_id2', $class_id2); |
---|
[20595] | 443 | |
---|
| 444 | // 商品情報を取得し, フォームに設定 |
---|
| 445 | $arrProductsClass = $this->getProductsClass($product_id); |
---|
| 446 | |
---|
| 447 | foreach ($arrProductsClass as $key => $val) { |
---|
| 448 | // 組み合わせ数分の値の配列を生成する |
---|
| 449 | $arrValues = array(); |
---|
| 450 | for ($i = 0; $i < $total; $i++) { |
---|
| 451 | $arrValues[] = $val; |
---|
[18815] | 452 | } |
---|
[20595] | 453 | $objFormParam->setValue($key, $arrValues); |
---|
[18815] | 454 | } |
---|
[20636] | 455 | |
---|
| 456 | // 商品種別を 1 に初期化 |
---|
| 457 | $objFormParam->setValue('product_type_id', array_pad(array(), $total, 1)); |
---|
[18815] | 458 | } |
---|
| 459 | |
---|
| 460 | /** |
---|
[20410] | 461 | * 規格編集画面を表示する |
---|
| 462 | * |
---|
| 463 | * @param integer $product_id 商品ID |
---|
| 464 | * @param bool $existsValue |
---|
| 465 | * @param bool $usepostValue |
---|
[18815] | 466 | */ |
---|
[20595] | 467 | function doPreEdit(&$objFormParam) { |
---|
| 468 | $product_id = $objFormParam->getValue('product_id'); |
---|
[20612] | 469 | $objProduct = new SC_Product_Ex(); |
---|
| 470 | $existsProductsClass = $objProduct->getProductsClassFullByProductId($product_id, true); |
---|
[20410] | 471 | |
---|
[20595] | 472 | $class_id1 = $existsProductsClass[0]['class_id1']; |
---|
| 473 | $class_id2 = $existsProductsClass[0]['class_id2']; |
---|
| 474 | $objFormParam->setValue('class_id1', $class_id1); |
---|
| 475 | $objFormParam->setValue('class_id2', $class_id2); |
---|
| 476 | $this->doDisp($objFormParam); |
---|
[20410] | 477 | |
---|
[20595] | 478 | // 登録済みのデータで上書き |
---|
| 479 | $objFormParam->setParam(SC_Utils_Ex::sfSwapArray($existsProductsClass)); |
---|
| 480 | |
---|
| 481 | // $existsProductsClass で product_id が配列になってしまうため数値で上書き |
---|
| 482 | $objFormParam->setValue('product_id', $product_id); |
---|
| 483 | |
---|
| 484 | // check を設定 |
---|
| 485 | $arrChecks = array(); |
---|
| 486 | $index = 0; |
---|
| 487 | foreach ($objFormParam->getValue('del_flg') as $key => $val) { |
---|
| 488 | if ($val == 0) { |
---|
| 489 | $arrChecks[$index] = 1; |
---|
[18815] | 490 | } |
---|
[20595] | 491 | $index++; |
---|
[18819] | 492 | } |
---|
[20595] | 493 | $objFormParam->setValue('check', $arrChecks); |
---|
[18815] | 494 | |
---|
[20617] | 495 | // class_id1, class_id2 を取得値で上書き |
---|
[20612] | 496 | $objFormParam->setValue('class_id1', $class_id1); |
---|
| 497 | $objFormParam->setValue('class_id2', $class_id2); |
---|
[18815] | 498 | } |
---|
| 499 | |
---|
[20410] | 500 | /** |
---|
| 501 | * 規格の削除を実行する |
---|
| 502 | * |
---|
| 503 | * @param $product_id |
---|
| 504 | * @return void |
---|
| 505 | */ |
---|
| 506 | function doDelete($product_id) { |
---|
[20507] | 507 | $objQuery =& SC_Query_Ex::getSingletonInstance(); |
---|
[18815] | 508 | |
---|
| 509 | $objQuery->begin(); |
---|
[20595] | 510 | $objQuery->update("dtb_products_class", array('del_flg' => 0), |
---|
| 511 | "product_id = ? AND class_combination_id IS NULL", array($product_id)); |
---|
| 512 | $objQuery->update("dtb_products_class", array('del_flg' => 1), |
---|
| 513 | "product_id = ? AND class_combination_id IS NOT NULL", array($product_id)); |
---|
[18815] | 514 | $objQuery->commit(); |
---|
| 515 | |
---|
| 516 | // 在庫無し商品の非表示対応 |
---|
| 517 | if (NOSTOCK_HIDDEN === true) { |
---|
| 518 | // 件数カウントバッチ実行 |
---|
[20410] | 519 | $objDb = new SC_Helper_DB_Ex(); |
---|
[20032] | 520 | $objDb->sfCountCategory($objQuery); |
---|
[18815] | 521 | } |
---|
| 522 | } |
---|
| 523 | |
---|
| 524 | /** |
---|
[20617] | 525 | * ファイルアップロードを行う. |
---|
| 526 | * |
---|
| 527 | * 以下のチェックを行い, ファイルを一時領域へアップロードする. |
---|
| 528 | * 1. ファイルサイズチェック |
---|
| 529 | * 2. 拡張子チェック |
---|
| 530 | * |
---|
| 531 | * TODO |
---|
| 532 | * SC_CheckError クラスや, SC_UploadFile クラスが多次元配列に対応して |
---|
| 533 | * いないため, 独自のロジックを使用している. |
---|
| 534 | * |
---|
| 535 | * @param SC_FormParam $objFormParam SC_FormParam インスタンス |
---|
| 536 | * @return void |
---|
| 537 | */ |
---|
| 538 | function doFileUpload(&$objFormParam) { |
---|
| 539 | $index = $objFormParam->getValue('upload_index'); |
---|
| 540 | $arrDownRealFiles = $objFormParam->getValue('down_realfilename'); |
---|
| 541 | |
---|
| 542 | if ($_FILES['down_realfilename']['size'][$index] <= 0) { |
---|
| 543 | $this->arrErr['down_realfilename'][$index] = '※ ファイルがアップロードされていません'; |
---|
| 544 | } else if ($_FILES['down_realfilename']['size'][$index] > DOWN_SIZE * 1024 ) { |
---|
| 545 | $size = DOWN_SIZE; |
---|
| 546 | $byte = 'KB'; |
---|
| 547 | if ($size >= 1000) { |
---|
| 548 | $size = $size / 1000; |
---|
| 549 | $byte = 'MB'; |
---|
| 550 | } |
---|
| 551 | $this->arrErr['down_realfilename'][$index] = "※ ダウンロード販売用ファイル名のファイルサイズは" . $size . $byte . "以下のものを使用してください。<br />"; |
---|
| 552 | } else { |
---|
| 553 | $array_ext = explode(".", $_FILES['down_realfilename']['name'][$index]); |
---|
| 554 | $is_error = true; |
---|
| 555 | $strExt = ""; |
---|
| 556 | |
---|
| 557 | foreach (explode(",", DOWNLOAD_EXTENSION) as $checkExt ) { |
---|
| 558 | $ext = ""; |
---|
| 559 | // チェック拡張子のピリオドの数を取得('tar.gz'の場合1個、'jpg'のように通常は0個) |
---|
| 560 | $count_period = substr_count($checkExt, "."); |
---|
| 561 | if($count_period > 0) { |
---|
| 562 | for ($i = max(array_keys($array_ext)) - $count_period; $i < count($array_ext); $i++) { |
---|
| 563 | $ext .= $array_ext[$i] . "."; |
---|
| 564 | } |
---|
| 565 | $ext = preg_replace("/.$/", "" ,$ext); |
---|
| 566 | } else { |
---|
| 567 | $ext = $array_ext[ count ( $array_ext ) - 1 ]; |
---|
| 568 | } |
---|
| 569 | $ext = strtolower($ext); |
---|
| 570 | |
---|
| 571 | if ($ext == $checkExt) { |
---|
| 572 | $is_error = false; |
---|
| 573 | } |
---|
| 574 | if($strExt == "") { |
---|
| 575 | $strExt .= $checkExt; |
---|
| 576 | } else { |
---|
| 577 | $strExt .= "・$checkExt"; |
---|
| 578 | } |
---|
| 579 | } |
---|
| 580 | if ($is_error) { |
---|
| 581 | $this->arrErr['down_realfilename'][$index] = "※ ダウンロード販売用ファイル名で許可されている形式は、" . $strExt . "です。<br />"; |
---|
| 582 | } |
---|
| 583 | |
---|
| 584 | $uniqname = date('mdHi') . "_" . uniqid("")."."; |
---|
| 585 | $temp_file = preg_replace("/^.*\./", $uniqname, $_FILES['down_realfilename']['name'][$index]); |
---|
| 586 | |
---|
| 587 | if (move_uploaded_file($_FILES['down_realfilename']['tmp_name'][$index], DOWN_TEMP_REALDIR . $temp_file)) { |
---|
| 588 | $arrDownRealFiles[$index] = $temp_file; |
---|
| 589 | $objFormParam->setValue('down_realfilename', $arrDownRealFiles); |
---|
| 590 | GC_Utils_Ex::gfPrintLog($_FILES['down_realfilename']['name'][$index] ." -> ". realpath(DOWN_TEMP_REALDIR . $temp_file)); |
---|
| 591 | } else { |
---|
| 592 | $objErr->arrErr[$keyname] = '※ ファイルのアップロードに失敗しました。<br />'; |
---|
| 593 | GC_Utils_Ex::gfPrintLog('File Upload Error!: ' . $_FILES['down_realfilename']['name'][$index] . " -> " . DOWN_TEMP_REALDIR . $temp_file); |
---|
| 594 | } |
---|
| 595 | } |
---|
| 596 | } |
---|
| 597 | |
---|
| 598 | /** |
---|
| 599 | * アップロードしたファイルを削除する. |
---|
| 600 | * |
---|
| 601 | * TODO 一時ファイルの削除 |
---|
| 602 | * |
---|
| 603 | * @param SC_FormParam $objFormParam SC_FormParam インスタンス |
---|
| 604 | * @return void |
---|
| 605 | */ |
---|
| 606 | function doFileDelete(&$objFormParam) { |
---|
| 607 | $objImage = new SC_Image_Ex(DOWN_TEMP_REALDIR); |
---|
| 608 | $arrRealFileName = $objFormParam->getValue('down_realfilename'); |
---|
| 609 | $index = $objFormParam->getValue('upload_index'); |
---|
| 610 | $objImage->deleteImage($arrRealFileName[$index], DOWN_SAVE_REALDIR); |
---|
| 611 | $arrRealFileName[$index] = ''; |
---|
| 612 | $objFormParam->setValue('down_realfilename', $arrRealFileName); |
---|
| 613 | } |
---|
| 614 | |
---|
| 615 | /** |
---|
| 616 | * アップロードした一時ファイルを保存する. |
---|
| 617 | * |
---|
| 618 | * @param SC_FormParam $objFormParam SC_FormParam インスタンス |
---|
| 619 | * @return void |
---|
| 620 | */ |
---|
| 621 | function doUploadComplete(&$objFormParam) { |
---|
| 622 | $objImage = new SC_Image_Ex(DOWN_TEMP_REALDIR); |
---|
| 623 | $arrRealFileName = $objFormParam->getValue('down_realfilename'); |
---|
| 624 | foreach ($arrRealFileName as $real_file_name) { |
---|
| 625 | $objImage->moveTempImage($real_file_name, DOWN_SAVE_REALDIR); |
---|
| 626 | } |
---|
| 627 | } |
---|
| 628 | |
---|
| 629 | /** |
---|
[18815] | 630 | * 規格ID1, 規格ID2の規格分類すべてを取得する. |
---|
| 631 | * |
---|
| 632 | * @param integer $class_id1 規格ID1 |
---|
| 633 | * @param integer $class_id2 規格ID2 |
---|
| 634 | * @return array 規格と規格分類の配列 |
---|
| 635 | */ |
---|
| 636 | function getAllClassCategory($class_id1, $class_id2 = null) { |
---|
[20507] | 637 | $objQuery =& SC_Query_Ex::getSingletonInstance(); |
---|
[18815] | 638 | |
---|
[20612] | 639 | $col = <<< __EOF__ |
---|
| 640 | T1.class_id AS class_id1, |
---|
| 641 | T1.classcategory_id AS classcategory_id1, |
---|
| 642 | T1.name AS classcategory_name1, |
---|
| 643 | T1.rank AS rank1 |
---|
| 644 | __EOF__; |
---|
[20410] | 645 | $table = ''; |
---|
| 646 | $arrParams = array(); |
---|
[18815] | 647 | if(SC_Utils_Ex::isBlank($class_id2)) { |
---|
| 648 | $table = "dtb_classcategory T1 "; |
---|
[19755] | 649 | $objQuery->setWhere("T1.class_id = ?"); |
---|
| 650 | $objQuery->setOrder("T1.rank DESC"); |
---|
[20410] | 651 | $arrParams = array($class_id1); |
---|
[18815] | 652 | } else { |
---|
[20612] | 653 | $col .= <<< __EOF__ |
---|
| 654 | , |
---|
| 655 | T2.class_id AS class_id2, |
---|
| 656 | T2.classcategory_id AS classcategory_id2, |
---|
| 657 | T2.name AS classcategory_name2, |
---|
| 658 | T2.rank AS rank2 |
---|
| 659 | __EOF__; |
---|
[18815] | 660 | $table = "dtb_classcategory AS T1, dtb_classcategory AS T2"; |
---|
[19755] | 661 | $objQuery->setWhere("T1.class_id = ? AND T2.class_id = ?"); |
---|
| 662 | $objQuery->setOrder("T1.rank DESC, T2.rank DESC"); |
---|
[20410] | 663 | $arrParams = array($class_id1, $class_id2); |
---|
[18815] | 664 | } |
---|
[20410] | 665 | return $objQuery->select($col, $table, "", $arrParams); |
---|
[18815] | 666 | } |
---|
| 667 | |
---|
| 668 | /** |
---|
| 669 | * 商品名を取得する. |
---|
| 670 | * |
---|
| 671 | * @access private |
---|
| 672 | * @param integer $product_id 商品ID |
---|
| 673 | * @return string 商品名の文字列 |
---|
| 674 | */ |
---|
| 675 | function getProductName($product_id) { |
---|
[20507] | 676 | $objQuery =& SC_Query_Ex::getSingletonInstance(); |
---|
[20595] | 677 | return $objQuery->get('name', 'dtb_products', 'product_id = ?', array($product_id)); |
---|
[18815] | 678 | } |
---|
| 679 | |
---|
| 680 | /** |
---|
| 681 | * 規格分類の登録された, すべての規格を取得する. |
---|
| 682 | * |
---|
| 683 | * @access private |
---|
| 684 | * @return array 規格分類の登録された, すべての規格 |
---|
| 685 | */ |
---|
| 686 | function getAllClass() { |
---|
[20595] | 687 | $arrClass = SC_Helper_DB_Ex::sfGetIDValueList("dtb_class", 'class_id', 'name'); |
---|
[18815] | 688 | |
---|
| 689 | // 規格分類が登録されていない規格は表示しないようにする。 |
---|
| 690 | $arrClassCatCount = SC_Utils_Ex::sfGetClassCatCount(); |
---|
| 691 | |
---|
| 692 | $results = array(); |
---|
| 693 | if (!SC_Utils_Ex::isBlank($arrClass)) { |
---|
| 694 | foreach($arrClass as $key => $val) { |
---|
| 695 | if($arrClassCatCount[$key] > 0) { |
---|
| 696 | $results[$key] = $arrClass[$key]; |
---|
| 697 | } |
---|
| 698 | } |
---|
| 699 | } |
---|
| 700 | return $results; |
---|
| 701 | } |
---|
| 702 | |
---|
| 703 | /** |
---|
[20595] | 704 | * 商品IDをキーにして, 商品規格の初期値を取得する. |
---|
[18815] | 705 | * |
---|
[20595] | 706 | * 商品IDをキーにし, デフォルトに設定されている商品規格を取得する. |
---|
| 707 | * |
---|
[18815] | 708 | * @param integer $product_id 商品ID |
---|
| 709 | * @return array 商品規格の配列 |
---|
| 710 | */ |
---|
| 711 | function getProductsClass($product_id) { |
---|
[20507] | 712 | $objQuery =& SC_Query_Ex::getSingletonInstance(); |
---|
[20595] | 713 | $col = "product_code, price01, price02, stock, stock_unlimited, sale_limit, deliv_fee, point_rate"; |
---|
| 714 | return $objQuery->getRow($col, "dtb_products_class", "product_id = ? AND class_combination_id IS NULL", array($product_id)); |
---|
[18815] | 715 | } |
---|
[15559] | 716 | } |
---|