/** * 商品登録を行う. * * FIXME: 商品登録の実処理自体は、LC_Page_Admin_Products_Productと共通化して欲しい。 * * @param SC_Query $objQuery * SC_Queryインスタンス * @param string|integer $line * 処理中の行数 * @return void */ public function lfRegistProduct($objQuery, $line = '', &$objFormParam) { // 登録データ対象取得 $arrList = $objFormParam->getDbArray(); // 登録時間を生成(DBのCURRENT_TIMESTAMPだとcommitした際、全て同一の時間になってしまう) $arrList['update_date'] = $this->lfGetDbFormatTimeWithLine($line); // 商品登録情報を生成する。 // 商品テーブルのカラムに存在しているもののうち、Form投入設定されていないデータは上書きしない。 $sqlval = SC_Utils_Ex::sfArrayIntersectKeys($arrList, $this->arrProductColumn); // 必須入力では無い項目だが、空文字では問題のある特殊なカラム値の初期値設定 $sqlval = $this->lfSetProductDefaultData($sqlval); GC_Utils_Ex::gfPrintLog(print_r(array(__LINE__, $sqlval, $arrList), true), DEBUG_LOG_REALFILE); $sqlval = $objQuery->extractOnlyColsOf($this->table, $sqlval); if ($sqlval[$this->id_column] != '') { // 同じidが存在すればupdate存在しなければinsert $where = $this->id_column . ' = ?'; $product_exists = $objQuery->exists($this->table, $where, array($sqlval[$this->id_column])); if ($product_exists) { GC_Utils_Ex::gfPrintLog(print_r(array(__LINE__, $sqlval, $arrList), true), DEBUG_LOG_REALFILE); $objQuery->update($this->table, $sqlval, $where, array($sqlval[$this->id_column])); } else { $sqlval['create_date'] = $arrList['update_date']; // INSERTの実行 GC_Utils_Ex::gfPrintLog(print_r(array(__LINE__, $sqlval, $arrList), true), DEBUG_LOG_REALFILE); $objQuery->insert($this->table, $sqlval); // シーケンスの調整 $seq_count = $objQuery->currVal($this->seq_name); if ($seq_count < $sqlval[$this->id_column]) { $objQuery->setVal($this->seq_name, $sqlval[$this->id_column] + 1); } } $product_id = $sqlval[$this->id_column]; } else { // 新規登録 $sqlval[$this->id_column] = $objQuery->nextVal($this->seq_name); $product_id = $sqlval[$this->id_column]; $sqlval['create_date'] = $arrList['update_date']; // INSERTの実行 GC_Utils_Ex::gfPrintLog(print_r(array(__LINE__, $sqlval, $arrList), true), DEBUG_LOG_REALFILE); $objQuery->insert($this->table, $sqlval); } $objDb = new SC_Helper_DB_Ex(); // カテゴリ登録 if (isset($arrList['category_ids'])) { if ($objDb->sfColumnExists($this->categories_table, $this->id_column)) { $objQuery->delete($this->categories_table, $this->id_column . " = ?", array($sqlval[$this->id_column])); $arrCategory_id = explode(',', $arrList['category_ids']); $rank = 1; foreach ($arrCategory_id as $category_id) { $sqlval2 = array($this->id_column => $sqlval[$this->id_column], "category_id" => $category_id, "rank" => $rank++); $sqlval2 = $objQuery->extractOnlyColsOf($this->categories_table, $sqlval2); $objQuery->insert($this->categories_table, $sqlval2); } } } elseif (count($this->arrCategory) == 1) { if ($objDb->sfColumnExists($this->categories_table, $this->id_column)) { $objQuery->delete($this->categories_table, $this->id_column . " = ?", array($sqlval[$this->id_column])); $keys = array_keys($this->arrCategory); $sqlval2 = array($this->id_column => $sqlval[$this->id_column], "category_id" => $keys[0], "rank" => 1); $sqlval2 = $objQuery->extractOnlyColsOf($this->categories_table, $sqlval2); $objQuery->insert($this->categories_table, $sqlval2); } } }
/** * 配送情報のみ抜き出す。 * * @param string $arrSrc 元となる配列 * @return void */ public function extractShipping($arrSrc) { $arrKey = array(); foreach ($this->arrShippingKey as $key) { $arrKey[] = 'shipping_' . $key; } return SC_Utils_Ex::sfArrayIntersectKeys($arrSrc, $arrKey); }
/** * 商品規格登録を行う. * * FIXME: 商品規格登録の実処理自体は、LC_Page_Admin_Products_Productと共通化して欲しい。 * * @param SC_Query $objQuery SC_Queryインスタンス * @param array $arrList 商品規格情報配列 * @param integer $product_id 商品ID * @param integer $product_class_id 商品規格ID * @return void */ public function lfRegistProductClass($objQuery, $arrList, $product_id, $product_class_id) { $objProduct = new SC_Product_Ex(); // FIXME: dtb_csvテーブルの中で古いカラム名(右辺)が設定されている。sfArrayIntersectKeysでフィルタされてしまうので、名称を変更する必要がある if (array_key_exists('classcategory_id', $arrList) && $arrList['classcategory_id'] != '') { $arrList['classcategory_id1'] = $arrList['classcategory_id']; } if (array_key_exists('parent_classcategory_id', $arrList) && $arrList['classcategory_id'] != '') { $arrList['classcategory_id2'] = $arrList['parent_classcategory_id']; } // 商品規格登録情報を生成する。 // 商品規格テーブルのカラムに存在しているもののうち、Form投入設定されていないデータは上書きしない。 $sqlval = SC_Utils_Ex::sfArrayIntersectKeys($arrList, $this->arrProductClassColumn); if ($product_class_id == '') { // 新規登録 // 必須入力では無い項目だが、空文字では問題のある特殊なカラム値の初期値設定 $sqlval = $this->lfSetProductClassDefaultData($sqlval); $sqlval['product_id'] = $product_id; $sqlval['product_class_id'] = $objQuery->nextVal('dtb_products_class_product_class_id'); $sqlval['create_date'] = $arrList['update_date']; // INSERTの実行 $objQuery->insert('dtb_products_class', $sqlval); $product_class_id = $sqlval['product_class_id']; } else { // UPDATEの実行 // 必須入力では無い項目だが、空文字では問題のある特殊なカラム値の初期値設定 $sqlval = $this->lfSetProductClassDefaultData($sqlval, true); $where = 'product_class_id = ?'; $objQuery->update('dtb_products_class', $sqlval, $where, array($product_class_id)); } }
/** * 商品規格登録を行う. * * FIXME: 商品規格登録の実処理自体は、LC_Page_Admin_Products_Productと共通化して欲しい。 * * @param SC_Query $objQuery SC_Queryインスタンス * @param array $arrList 商品規格情報配列 * @param integer $product_id 商品ID * @param integer $product_class_id 商品規格ID * @return void */ function lfRegistProductClass($objQuery, $arrList, $product_id, $product_class_id) { $objProduct = new SC_Product_Ex(); // 商品規格登録情報を生成する。 // 商品規格テーブルのカラムに存在しているもののうち、Form投入設定されていないデータは上書きしない。 $sqlval = SC_Utils_Ex::sfArrayIntersectKeys($arrList, $this->arrProductClassColumn); if ($product_class_id == '') { // 新規登録 // 必須入力では無い項目だが、空文字では問題のある特殊なカラム値の初期値設定 $sqlval = $this->lfSetProductClassDefaultData($sqlval); $sqlval['product_id'] = $product_id; $sqlval['product_class_id'] = $objQuery->nextVal('dtb_products_class_product_class_id'); $sqlval['create_date'] = $arrList['update_date']; // INSERTの実行 $objQuery->insert('dtb_products_class', $sqlval); $product_class_id = $sqlval['product_class_id']; } else { // UPDATEの実行 // 必須入力では無い項目だが、空文字では問題のある特殊なカラム値の初期値設定 $sqlval = $this->lfSetProductClassDefaultData($sqlval, true); $where = 'product_class_id = ?'; $objQuery->update('dtb_products_class', $sqlval, $where, array($product_class_id)); } }
/** * カテゴリ登録を行う. * * FIXME: 登録の実処理自体は、LC_Page_Admin_Products_Categoryと共通化して欲しい。 * * @param SC_Query $objQuery SC_Queryインスタンス * @param string|integer $line 処理中の行数 * @return integer カテゴリID */ function lfRegistCategory($objQuery, $line, &$objFormParam) { // 登録データ対象取得 $arrList = $objFormParam->getHashArray(); // 登録時間を生成(DBのCURRENT_TIMESTAMPだとcommitした際、すべて同一の時間になってしまう) $arrList['update_date'] = $this->lfGetDbFormatTimeWithLine($line); // 登録情報を生成する。 // テーブルのカラムに存在しているもののうち、Form投入設定されていないデータは上書きしない。 $sqlval = SC_Utils_Ex::sfArrayIntersectKeys($arrList, $this->arrRegistColumn); // 必須入力では無い項目だが、空文字では問題のある特殊なカラム値の初期値設定 $sqlval = $this->lfSetCategoryDefaultData($sqlval); if ($sqlval['category_id'] != '') { // 同じidが存在すればupdate存在しなければinsert $where = 'category_id = ?'; $category_exists = $objQuery->exists('dtb_category', $where, array($sqlval['category_id'])); if ($category_exists) { // UPDATEの実行 $where = 'category_id = ?'; $objQuery->update('dtb_category', $sqlval, $where, array($sqlval['category_id'])); } else { $sqlval['create_date'] = $arrList['update_date']; // 新規登録 $category_id = $this->registerCategory($sqlval['parent_category_id'], $sqlval['category_name'], $_SESSION['member_id'], $sqlval['category_id']); } $category_id = $sqlval['category_id']; // TODO: 削除時処理 } else { // 新規登録 $category_id = $this->registerCategory($sqlval['parent_category_id'], $sqlval['category_name'], $_SESSION['member_id']); } return $category_id; }
/** * 規格を設定していない商品を商品規格テーブルに登録 * * @param array $arrList * @return void */ function lfInsertDummyProductClass($arrList) { $objQuery =& SC_Query_Ex::getSingletonInstance(); $objDb = new SC_Helper_DB_Ex(); // 配列の添字を定義 $checkArray = array('product_class_id', 'product_id', 'product_code', 'stock', 'stock_unlimited', 'price01', 'price02', 'sale_limit', 'deliv_fee', 'point_rate', 'product_type_id', 'down_filename', 'down_realfilename'); $sqlval = SC_Utils_Ex::sfArrayIntersectKeys($arrList, $checkArray); $sqlval = SC_Utils_Ex::arrayDefineIndexes($sqlval, $checkArray); $sqlval['stock_unlimited'] = $sqlval['stock_unlimited'] ? UNLIMITED_FLG_UNLIMITED : UNLIMITED_FLG_LIMITED; $sqlval['creator_id'] = strlen($_SESSION['member_id']) >= 1 ? $_SESSION['member_id'] : '0'; if (strlen($sqlval['product_class_id']) == 0) { $sqlval['product_class_id'] = $objQuery->nextVal('dtb_products_class_product_class_id'); $sqlval['create_date'] = 'CURRENT_TIMESTAMP'; $sqlval['update_date'] = 'CURRENT_TIMESTAMP'; // INSERTの実行 $objQuery->insert('dtb_products_class', $sqlval); } else { $sqlval['update_date'] = 'CURRENT_TIMESTAMP'; // UPDATEの実行 $objQuery->update('dtb_products_class', $sqlval, 'product_class_id = ?', array($sqlval['product_class_id'])); } }
/** * DBに商品データを登録する * * @param SC_UploadFile_Ex $objUpFile * SC_UploadFileインスタンス * @param SC_UploadFile_Ex $objDownFile * SC_UploadFileインスタンス * @param array $arrList * フォーム入力パラメーター配列 * @return integer 登録商品ID */ public function lfRegistProduct(SC_UploadFile &$objUpFile, SC_UploadFile &$objDownFile, $arrList) { $product_id = parent::lfRegistProduct($objUpFile, $objDownFile, $arrList); $objQuery = SC_Query_Ex::getSingletonInstance(); $objDb = new SC_Helper_DB_Ex(); // auto_display_ $arrList["auto_display_start_date"] = $this->sfGetTimestamp($arrList, "auto_display_start_date"); $arrList["auto_display_end_date"] = $this->sfGetTimestamp($arrList, "auto_display_end_date", true); // spass_provide_ $arrList["spass_provide_start_date"] = $this->sfGetTimestamp($arrList, "spass_provide_start_date"); $arrList["spass_provide_end_date"] = $this->sfGetTimestamp($arrList, "spass_provide_end_date", true); // FIXME 画像のリネーム $objProduct = new SC_Product_Ex(); $arrProduct = $objProduct->getDetail($product_id); $objUpFile->setDBFileList($arrProduct); $arrTemp = $objUpFile->getDBFileList(); GC_Utils_Ex::gfPrintLog(print_r($arrProduct, true), DEBUG_LOG_REALFILE); GC_Utils_Ex::gfPrintLog(print_r($arrTemp, true), DEBUG_LOG_REALFILE); $arrRet = SC_Utils_Ex::sfArrayIntersectKeys($arrList, array("kisekae_provider_id", "kisekae_site_id", "kisekae_contents_id", "auto_display_status", "auto_display_start_date", "auto_display_end_date", "spass_provide_start_date", "spass_provide_end_date", "bgcolor", "fgcolor", "lkcolor", "product_code_spass", "kisekae_contents_spass_id")); GC_Utils_Ex::gfPrintLog(print_r($arrTemp, true), DEBUG_LOG_REALFILE); $arrTemp = array_filter($arrTemp, function ($filename) { $filename_realpath = IMAGE_SAVE_REALDIR . $filename; list($width, $height) = getimagesize($filename_realpath); return is_file($filename_realpath) && $width > 0 && $height > 0; }); GC_Utils_Ex::gfPrintLog(print_r($arrTemp, true), DEBUG_LOG_REALFILE); foreach ($arrTemp as $key => $filename) { GC_Utils_Ex::gfPrintLog(print_r(array($key => $filename), true), DEBUG_LOG_REALFILE); $filename_realpath = IMAGE_SAVE_REALDIR . $filename; list($width, $height) = getimagesize($filename_realpath); $extension = pathinfo($filename_realpath, PATHINFO_EXTENSION); $pattern = "p%010d_%s_%04dx%04d.%s"; $rename = sprintf($pattern, $product_id, $key, $width, $height, $extension); $rename_realpath = IMAGE_SAVE_REALDIR . $rename; if (copy($filename_realpath, $rename_realpath)) { $arrRet[$key] = $rename; } } GC_Utils_Ex::gfPrintLog(print_r($arrRet, true), DEBUG_LOG_REALFILE); $arrRet = $objQuery->extractOnlyColsOf("dtb_products", $arrRet); GC_Utils_Ex::gfPrintLog(print_r($arrRet, true), DEBUG_LOG_REALFILE); if (count($arrRet) && $objProduct->isValidProductId($product_id, true)) { $objQuery->update("dtb_products", $arrRet, "product_id=?", array($product_id)); } if ($objDb->sfColumnExists("cp_dtb_product_characters", "product_id")) { $objQuery->delete("cp_dtb_product_characters", "product_id=?", array($product_id)); $character_ids = $arrList["character_id"]; if (!is_null($character_ids) && (is_array($character_ids) || is_numeric($character_ids))) { if (is_numeric($character_ids)) { $character_ids = array($character_ids); } $character_ids = array_unique($character_ids); foreach ($character_ids as $character_id) { $objQuery->insert("cp_dtb_product_characters", compact("product_id", "character_id")); } } } return $product_id; }