/** * DBから商品データを取得する * * @param integer $product_id 商品ID * @return array 商品データ配列 */ function lfGetProductData_FromDB($product_id) { $objQuery =& SC_Query_Ex::getSingletonInstance(); $arrProduct = array(); // 商品データ取得 $col = '*'; $table = <<<__EOF__ dtb_products AS T1 LEFT JOIN ( SELECT product_id AS product_id_sub, product_code, price01, price02, deliv_fee, stock, stock_unlimited, sale_limit, point_rate, product_type_id, down_filename, down_realfilename FROM dtb_products_class ) AS T2 ON T1.product_id = T2.product_id_sub __EOF__; $where = 'product_id = ?'; $objQuery->setLimit('1'); $arrProduct = $objQuery->select($col, $table, $where, array($product_id)); // カテゴリID取得 $col = 'category_id'; $table = 'dtb_product_categories'; $where = 'product_id = ?'; $objQuery->setOption(''); $arrProduct[0]['category_id'] = $objQuery->getCol($col, $table, $where, array($product_id)); // 規格情報ありなしフラグ取得 $objDb = new SC_Helper_DB_Ex(); $arrProduct[0]['has_product_class'] = $objDb->sfHasProductClass($product_id); // 規格が登録されていなければ規格ID取得 if ($arrProduct[0]['has_product_class'] == false) { $arrProduct[0]['product_class_id'] = SC_Utils_Ex::sfGetProductClassId($product_id, '0', '0'); } // 商品ステータス取得 $objProduct = new SC_Product_Ex(); $productStatus = $objProduct->getProductStatus(array($product_id)); $arrProduct[0]['product_status'] = $productStatus[$product_id]; // 関連商品データ取得 $arrRecommend = $this->lfGetRecommendProductsData_FromDB($product_id); $arrProduct[0] = array_merge($arrProduct[0], $arrRecommend); return $arrProduct[0]; }
/** * このフォーム特有の複雑な入力チェックを行う. * * @param array 確認対象データ * @param array エラー配列 * @return array エラー配列 */ public function lfCheckErrorDetail($item, $arrErr) { // 規格IDの存在チェック // FIXME 規格分類ID自体のが有効かを主眼においたチェックをすべきと感じる。 if (!$this->lfIsDbRecord('dtb_products_class', 'product_class_id', $item)) { $arrErr['product_class_id'] = '※ 指定の商品規格IDは、登録されていません。'; } // 商品ID、規格IDの組合せチェック if (array_search('product_class_id', $this->arrFormKeyList) !== FALSE && $item['product_class_id'] != '') { if ($item['product_id'] == '') { $arrErr['product_class_id'] = '※ 商品規格ID指定時には商品IDの指定が必須です。'; } else { if (!$this->objDb->sfIsRecord('dtb_products_class', 'product_id, product_class_id', array($item['product_id'], $item['product_class_id']))) { $arrErr['product_class_id'] = '※ 指定の商品IDと商品規格IDの組合せは正しくありません。'; } // product_class_idは(product_id, classcategory_id1, classcategory_id2)に対して一意。既に異なるproduct_class_idが存在した場合はエラー $classcategory_id1 = $item['classcategory_id'] ? $item['classcategory_id'] : 0; $classcategory_id2 = $item['parent_classcategory_id'] ? $item['parent_classcategory_id'] : 0; $product_class_id = SC_Utils_Ex::sfGetProductClassId($item['product_id'], $classcategory_id1, $classcategory_id2); if ($product_class_id && $product_class_id != $item['product_class_id']) { $arrErr['product_class_id'] = '※ 指定の商品ID/規格分類と、商品規格IDの組合せは正しくありません。'; } } } // 表示ステータスの存在チェック if (!$this->lfIsArrayRecord($this->arrDISP, 'status', $item)) { $arrErr['status'] = '※ 指定の表示ステータスは、登録されていません。'; } // メーカーIDの存在チェック if (!$this->lfIsArrayRecord($this->arrMaker, 'maker_id', $item)) { $arrErr['maker_id'] = '※ 指定のメーカーIDは、登録されていません。'; } // 発送日目安IDの存在チェック if (!$this->lfIsArrayRecord($this->arrDELIVERYDATE, 'deliv_date_id', $item)) { $arrErr['deliv_date_id'] = '※ 指定の発送日目安IDは、登録されていません。'; } // 商品種別IDの存在チェック if (!$this->lfIsArrayRecord($this->arrProductType, 'product_type_id', $item)) { $arrErr['product_type_id'] = '※ 指定の商品種別IDは、登録されていません。'; } // 既存の商品クラスを更新する場合、入力が必須となる項目が存在する(既存項目のデフォルト値による更新は望ましくない) if ($item['product_class_id'] != '') { if ($item['point_rate'] == '') { $arrErr['point_rate'] = '※ 既存の商品規格が存在する場合、ポイント付与率を未指定にする事はできません。'; } if ($item['product_type_id'] == '') { $arrErr['product_type_id'] = '※ 既存の商品規格が存在する場合、商品種別を未指定にする事はできません。'; } } // 関連商品IDのチェック $arrRecommendProductUnique = array(); for ($i = 1; $i <= RECOMMEND_PRODUCT_MAX; $i++) { $recommend_product_id_key = 'recommend_product_id' . $i; if (array_search($recommend_product_id_key, $this->arrFormKeyList) !== FALSE && $item[$recommend_product_id_key] != '') { // 商品IDの存在チェック if (!$this->objDb->sfIsRecord('dtb_products', 'product_id', (array) $item[$recommend_product_id_key])) { $arrErr[$recommend_product_id_key] = "※ 指定の関連商品ID({$i})は、登録されていません。"; continue; } // 商品IDの重複チェック $recommend_product_id = $item[$recommend_product_id_key]; if (isset($arrRecommendProductUnique[$recommend_product_id])) { $arrErr[$recommend_product_id_key] = "※ 指定の関連商品ID({$i})は、すでに登録されています。"; } else { $arrRecommendProductUnique[$recommend_product_id] = true; } } } // カテゴリIDの存在チェック if (!$this->lfIsDbRecordMulti('dtb_category', 'category_id', 'category_ids', $item, ',')) { $arrErr['category_ids'] = '※ 指定のカテゴリIDは、登録されていません。'; } // 商品ステータスIDの存在チェック if (!$this->lfIsArrayRecordMulti($this->arrSTATUS, 'product_statuses', $item, ',')) { $arrErr['product_statuses'] = '※ 指定の商品ステータスIDは、登録されていません。'; } // 削除フラグのチェック if (array_search('del_flg', $this->arrFormKeyList) !== FALSE && $item['del_flg'] != '') { if (!($item['del_flg'] == '0' or $item['del_flg'] == '1')) { $arrErr['del_flg'] = '※ 削除フラグは「0」(有効)、「1」(削除)のみが有効な値です。'; } } /* TODO: 在庫数の扱いが2.4仕様ではぶれているのでどうするか・・ // 在庫数/在庫無制限フラグの有効性に関するチェック if ($item['stock'] == '') { if (array_search('stock_unlimited', $this->arrFormKeyList) === FALSE) { $arrErr['stock'] = '※ 在庫数は必須です(無制限フラグ項目がある場合のみ空欄許可)。'; } elseif ($item['stock_unlimited'] != UNLIMITED_FLG_UNLIMITED) { $arrErr['stock'] = '※ 在庫数または在庫無制限フラグのいずれかの入力が必須です。'; } } */ // ダウンロード商品チェック if (array_search('product_type_id', $this->arrFormKeyList) !== FALSE && $item['product_type_id'] != PRODUCT_TYPE_DOWNLOAD) { //実商品の場合 if ($item['down_filename'] != '') { $arrErr['down_filename'] = '※ ダウンロード商品ではない場合、ダウンロードファイル名は入力できません。'; } if ($item['down_realfilename'] != '') { $arrErr['down_realfilename'] = '※ ダウンロード商品ではない場合、ダウンロード商品用ファイルアップロードは入力できません。'; } } elseif (array_search('product_type_id', $this->arrFormKeyList) !== FALSE && $item['product_type_id'] == PRODUCT_TYPE_DOWNLOAD) { //ダウンロード商品の場合 if ($item['down_filename'] == '') { $arrErr['down_filename'] = '※ ダウンロード商品の場合はダウンロードファイル名は必須です。'; } if ($item['down_realfilename'] == '') { $arrErr['down_realfilename'] = '※ ダウンロード商品の場合はダウンロード商品用ファイルアップロードは必須です。'; } } return $arrErr; }
public function lfInitParam($objFormParam) { parent::lfInitParam($objFormParam); # 端末情報 $objFormParam->addParam("device_name", "device_name"); $objFormParam->addParam("device_height", "device_height"); $objFormParam->addParam("device_width", "device_width"); $objFormParam->addParam("device_rate", "device_rate"); $objFormParam->addParam("device_lang", "device_lang"); # 各種初期設定 $objFormParam->setValue("classcategory_id1", "0"); $objFormParam->setValue("classcategory_id2", "0"); $objFormParam->setValue("quantity", "1"); $objFormParam->setValue("product_class_id", SC_Utils_Ex::sfGetProductClassId($this->tpl_product_id)); // 値の取得 $objFormParam->setParam($_REQUEST); // 入力値の変換 $objFormParam->convParam(); // 入力情報を渡す return $objFormParam->getFormParamList(); }