source: branches/feature-module-update/html/admin/develop/upload_csv.php @ 15080

Revision 15080, 8.7 KB checked in by nanasess, 17 years ago (diff)

svn properties 設定

  • svn:mime-type - application/x-httpd-php; charset=UTF-8
  • svn:keywords - Id
  • Property svn:keywords set to Id
  • Property svn:mime-type set to application/x-httpd-php; charset=UTF-8
Line 
1<?php
2/*
3 * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
4 *
5 * http://www.lockon.co.jp/
6 */
7require_once("../require.php");
8
9class LC_Page {
10    var $arrSession;
11    var $arrCSVErr;
12    function LC_Page() {
13        $this->tpl_mainpage = 'develop/upload_csv.tpl';
14        $this->tpl_subnavi = '';
15        $this->tpl_mainno = 'products';
16        $this->tpl_subno = 'upload_csv';
17    }
18}
19
20$conn = new SC_DBConn();
21$objPage = new LC_Page();
22$objView = new SC_AdminView();
23$objSess = new SC_Session();
24
25// 認証可否の判定
26sfIsSuccess($objSess);
27
28if(ADMIN_MODE != 1) {
29    print("このページには、アクセスできません。");
30    exit;
31}
32
33// ファイル管理クラス
34$objUpFile = new SC_UploadFile(IMAGE_TEMP_DIR, IMAGE_SAVE_DIR);
35// ファイル情報の初期化
36lfInitFile();
37// パラメータ管理クラス
38$objFormParam = new SC_FormParam();
39// パラメータ情報の初期化
40lfInitParam();
41$colmax = $objFormParam->getCount();
42$objPage->arrTitle = $objFormParam->getTitleArray();
43
44switch($_POST['mode']) {
45case 'csv_upload':
46    $err = false;
47    // エラーチェック
48    $objPage->arrErr['csv_file'] = $objUpFile->makeTempFile('csv_file');
49   
50    if($objPage->arrErr['css_file'] == "") {
51        $objPage->arrErr = $objUpFile->checkEXISTS();
52    }
53   
54    if($objPage->arrErr['csv_file'] == "") {
55        // 一時ファイル名の取得
56        $filepath = $objUpFile->getTempFilePath('csv_file');
57        // エンコード
58        $enc_filepath = sfEncodeFile($filepath, CHAR_CODE, CSV_TEMP_DIR);
59        $fp = fopen($enc_filepath, "r");
60       
61        $line = 0;      // 行数
62        $regist = 0;    // 登録数
63       
64        $objQuery = new SC_Query();
65        $objQuery->begin();
66       
67        while(!feof($fp) && !$err) {
68            $arrCSV = fgetcsv($fp, 10000);
69            // 行カウント
70            $line++;
71   
72            // 項目数カウント
73            $max = count($arrCSV);
74           
75            // 項目数が1以下の場合は無視する
76            if($max <= 1) {
77                continue;           
78            }
79           
80            // 項目数チェック
81            if($max != $colmax) {
82                $objPage->arrCSVErr['blank'] = "※ 項目数が" . $max . "個検出されました。項目数は" . $colmax . "個になります。";
83               
84                ob_start();
85                print_r($arrCSV);
86                $objPage->tpl_debug = ob_get_contents();
87                ob_end_clean();
88               
89                $err = true;
90            } else {
91                // シーケンス配列を格納する。
92                $objFormParam->setParam($arrCSV, true);
93                $arrRet = $objFormParam->getHashArray();
94                // 値をフォーマット変換して格納する。
95                $arrRet = lfConvFormat($arrRet);
96                $objFormParam->setParam($arrRet);
97                // 入力値の変換
98                $objFormParam->convParam();
99                // <br>なしでエラー取得する。
100                $objPage->arrCSVErr = lfCheckError();
101            }
102           
103            // 入力エラーチェック
104            if(count($objPage->arrCSVErr) > 0) {
105                $objPage->tpl_errtitle = "■" . $line . "行目でエラーが発生しました。";
106                $objPage->arrParam = $objFormParam->getHashArray();
107                $err = true;
108            }
109           
110            if(!$err) {
111                gfPrintLog("write $line");
112                lfInsertProduct($objQuery);
113                $regist++;
114            }
115        }
116        fclose($fp);
117       
118        if(!$err) {
119            $objQuery->commit();
120           
121            gfPrintLog("commit csv:$regist");
122                       
123            $objPage->tpl_oktitle = "■" . $regist . "件のレコードを登録しました。";
124        } else {
125            $objQuery->rollback();
126        }
127    }
128    break;
129default:
130    break;
131}
132
133$objView->assignobj($objPage);
134$objView->display(MAIN_FRAME);
135
136//--------------------------------------------------------------------------------------------------------------------------
137
138/* ファイル情報の初期化 */
139function lfInitFile() {
140    global $objUpFile;
141    $objUpFile->addFile("CSVファイル", 'csv_file', array('csv'), CSV_SIZE, true, 0, 0, false);
142}
143
144/* パラメータ情報の初期化 */
145function lfInitParam() {
146    global $objFormParam;
147   
148    $objFormParam->addParam("商品名", "name", MTEXT_LEN, "KVa", array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK"));
149    $objFormParam->addParam("カテゴリID", "category_id", INT_LEN, "n", array("EXIST_CHECK","MAX_LENGTH_CHECK","NUM_CHECK"));
150    $objFormParam->addParam("商品コード", "product_code", STEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK"));
151    $objFormParam->addParam("商品価格", "price02", PRICE_LEN, "n", array("EXIST_CHECK","MAX_LENGTH_CHECK","NUM_CHECK"));
152    $objFormParam->addParam("商品価格", "price01", PRICE_LEN, "n", array("MAX_LENGTH_CHECK","NUM_CHECK"));
153    $objFormParam->addParam("在庫数", "stock", INT_LEN, "n", array("MAX_LENGTH_CHECK","NUM_CHECK"));
154    $objFormParam->addParam("購入制限", "sale_limit", INT_LEN, "n", array("MAX_LENGTH_CHECK","NUM_CHECK"));
155    $objFormParam->addParam("メーカーURL", "comment1", LTEXT_LEN, "KVa", array("URL_CHECK", "SPTAB_CHECK","MAX_LENGTH_CHECK"));
156    $objFormParam->addParam("商品ステータス", "product_flag", INT_LEN, "n", array("MAX_LENGTH_CHECK","NUM_CHECK"));
157    $objFormParam->addParam("ポイント付与率", "point_rate", PERCENTAGE_LEN, "n", array("EXIST_CHECK","MAX_LENGTH_CHECK","NUM_CHECK"));
158    $objFormParam->addParam("メイン一覧コメント", "main_list_comment", LTEXT_LEN, "KVa", array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK"));
159    $objFormParam->addParam("メインコメント", "main_comment", LTEXT_LEN, "KVa", array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK"));
160   
161    for($i = 1; $i <= PRODUCTSUB_MAX; $i++) {
162        $objFormParam->addParam("詳細-サブタイトル($i)", "sub_title$i", LTEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK"));
163        $objFormParam->addParam("詳細-サブコメント($i)", "sub_comment$i", LTEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK"));
164        $objFormParam->addParam("詳細-サブ画像($i)", "sub_image$i", LTEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK","FIND_FILE"));
165        $objFormParam->addParam("詳細-サブ画像拡大($i)", "sub_large_image$i", LTEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK","FIND_FILE"));
166    }
167       
168    $objFormParam->addParam("メイン一覧画像", "main_list_image", LTEXT_LEN, "KVa", array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK","FIND_FILE"));
169    $objFormParam->addParam("メイン詳細画像", "main_image", LTEXT_LEN, "KVa", array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK","FIND_FILE"));
170    $objFormParam->addParam("メイン詳細拡大画像", "main_large_image", LTEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK","FIND_FILE"));
171    $objFormParam->addParam("比較画像", "file1", LTEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK","FIND_FILE"));
172    $objFormParam->addParam("商品詳細ファイル", "file2", LTEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK"));
173    $objFormParam->addParam("送料", "deliv_fee", PRICE_LEN, "n", array("MAX_LENGTH_CHECK","NUM_CHECK"));
174    $objFormParam->addParam("在庫無制限", "stock_unlimited", INT_LEN, "n", array("MAX_LENGTH_CHECK","NUM_CHECK"));
175    $objFormParam->addParam("販売無制限", "sale_unlimited", INT_LEN, "n", array("MAX_LENGTH_CHECK","NUM_CHECK"));
176}
177
178/* 特殊項目の変換 */
179function lfConvFormat($array) {
180    global $arrDISP;
181    foreach($array as $key => $val) {
182        switch($key) {
183        case 'status':
184            $arrRet[$key] = sfSearchKey($arrDISP, $val, 1);
185            break;
186        default:
187            $arrRet[$key] = $val;
188            break;
189        }
190    }
191    return $arrRet;
192}
193
194/* 商品の新規追加 */
195function lfInsertProduct($objQuery) {
196    global $objFormParam;
197    $arrRet = $objFormParam->getHashArray();
198   
199    // 規格に登録される値を除外する。
200    foreach($arrRet as $key => $val) {
201        switch($key) {
202        case 'product_code':
203        case 'price01':
204        case 'price02':
205        case 'stock':
206        case 'stock_unlimited':
207            break;
208        default:
209            $sqlval[$key] = $val;
210            break;
211        }
212    }
213
214    if (DB_TYPE == "pgsql") {
215        $product_id = $objQuery->nextval("dtb_products", "product_id");
216        $sqlval['product_id'] = $product_id;
217    }
218
219    $sqlval['status'] = 1;  // 表示に設定する。
220    $sqlval['update_date'] = "Now()";
221    $sqlval['create_date'] = "Now()";
222    $sqlval['creator_id'] = $_SESSION['member_id'];
223    $sqlval['rank'] = $objQuery->max("dtb_products", "rank", "del_flg = 0 AND category_id = ?", array($sqlval['category_id'])) + 1;
224   
225    // 規格登録
226    sfInsertProductClass($objQuery, $arrRet, $product_id);
227   
228    gfPrintLog("insert productclass end");
229   
230    // INSERTの実行
231    $objQuery->insert("dtb_products", $sqlval);
232   
233    if (DB_TYPE == "mysql") {
234        $product_id = $objQuery->nextval("dtb_products", "product_id");
235    }
236   
237    gfPrintLog("insert product end");
238}
239
240/* 入力内容のチェック */
241function lfCheckError() {
242    global $objFormParam;
243    // 入力データを渡す。
244    $arrRet =  $objFormParam->getHashArray();
245    $objErr = new SC_CheckError($arrRet);
246    $objErr->arrErr = $objFormParam->checkError(false);
247   
248    if(!isset($objErr->arrErr['category_id'])) {
249        $objQuery = new SC_Query();
250        $col = "level";
251        $table = "dtb_category";
252        $where = "category_id = ?";
253        $level = $objQuery->get($table, $col, $where, array($arrRet['category_id']));
254        if($level != LEVEL_MAX) {
255            $objErr->arrErr['category_id'] = "※ このカテゴリIDには商品を登録できません。";
256        }
257    }
258    return $objErr->arrErr;
259}
260?>
Note: See TracBrowser for help on using the repository browser.