source: branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_UploadCSV.php @ 19670

Revision 19670, 25.7 KB checked in by nanasess, 11 years ago (diff)

スマートフォン対応(#787)

  • r19668 の差し戻し
  • SC_Helper_Session::getToken() 内の SC_Helper_Session::createToken() を static に変更
  • Property svn:eol-style set to LF
  • Property svn:keywords set to Id Revision Date
  • Property svn:mime-type set to text/x-httpd-php; charset=UTF-8
Line 
1<?php
2/*
3 * This file is part of EC-CUBE
4 *
5 * Copyright(c) 2000-2010 LOCKON CO.,LTD. All Rights Reserved.
6 *
7 * http://www.lockon.co.jp/
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.
22 */
23
24// {{{ requires
25require_once(CLASS_PATH . "pages/admin/LC_Page_Admin.php");
26
27/**
28 * 商品登録CSVのページクラス.
29 *
30 * @package Page
31 * @author LOCKON CO.,LTD.
32 * @version $Id:LC_Page_Admin_Products_UploadCSV.php 15532 2007-08-31 14:39:46Z nanasess $
33 *
34 * FIXME 同一商品IDで商品規格違いを登録できない。(更新は可能)
35 */
36class LC_Page_Admin_Products_UploadCSV extends LC_Page_Admin {
37
38    // }}}
39    // {{{ functions
40
41    /** フォームパラメータ */
42    var $objFormParam;
43
44    /** SC_UploadFile インスタンス */
45    var $objUpfile;
46
47    /**
48     * Page を初期化する.
49     *
50     * @return void
51     */
52    function init() {
53        parent::init();
54        $this->tpl_mainpage = 'products/upload_csv.tpl';
55        $this->tpl_subnavi = 'products/subnavi.tpl';
56        $this->tpl_mainno = 'products';
57        $this->tpl_subno = 'upload_csv';
58        $this->tpl_subtitle = '商品登録CSV';
59    }
60
61    /**
62     * Page のプロセス.
63     *
64     * @return void
65     */
66    function process() {
67        $this->action();
68        $this->sendResponse();
69    }
70
71    /**
72     * Page のアクション.
73     *
74     * @return void
75     */
76    function action() {
77        $objSess = new SC_Session();
78        $objDb = new SC_Helper_DB_Ex();
79        $objView = new SC_SiteView();
80
81        // 認証可否の判定
82        SC_Utils_Ex::sfIsSuccess($objSess);
83
84        // ファイル管理クラス
85        $this->objUpFile = new SC_UploadFile(IMAGE_TEMP_DIR, IMAGE_SAVE_DIR);
86        // ファイル情報の初期化
87        $this->lfInitFile();
88        // パラメータ管理クラス
89        $this->objFormParam = new SC_FormParam();
90        // パラメータ情報の初期化
91        $this->lfInitParam();
92        $colmax = $this->objFormParam->getCount();
93        $this->objFormParam->setHtmlDispNameArray();
94        $this->arrTitle = $this->objFormParam->getHtmlDispNameArray();
95
96        if (!isset($_POST['mode'])) $_POST['mode'] = "";
97
98        switch($_POST['mode']) {
99        case 'csv_upload':
100            $err = false;
101            // エラーチェック
102            $arrErr['csv_file'] = $this->objUpFile->makeTempFile('csv_file');
103
104            if($arrErr['csv_file'] == "") {
105                $arrErr = $this->objUpFile->checkEXISTS();
106            }
107
108            $objView->assignobj($this);
109            $objView->display('admin_popup_header.tpl');
110
111            // 実行時間を制限しない
112            set_time_limit(0);
113
114            // 出力をバッファリングしない(==日本語自動変換もしない)
115            ob_end_flush();
116
117            // IEのために256バイト空文字出力
118            echo str_pad('',256);
119
120            if(empty($arrErr['csv_file'])) {
121                // 一時ファイル名の取得
122                $filepath = $this->objUpFile->getTempFilePath('csv_file');
123                // エンコード
124                $enc_filepath = SC_Utils_Ex::sfEncodeFile($filepath,
125                                                          CHAR_CODE, CSV_TEMP_DIR);
126                $fp = fopen($enc_filepath, "r");
127
128                // 無効なファイルポインタが渡された場合はエラー表示
129                if ($fp === false) {
130                    SC_Utils_Ex::sfDispError("");
131                }
132
133                // レコード数を得る
134                $rec_count = $this->lfCSVRecordCount($fp);
135
136                $line = 0;      // 行数
137                $regist = 0;    // 登録数
138
139                $objQuery = new SC_Query();
140                $objQuery->begin();
141
142                echo "■ CSV登録進捗状況 <br/><br/>\n";
143
144                while(!feof($fp) && !$err) {
145                    $arrCSV = fgetcsv($fp, CSV_LINE_MAX);
146
147                    // 行カウント
148                    $line++;
149
150                    if($line <= 1) {
151                        continue;
152                    }
153
154                    // 項目数カウント
155                    $max = count($arrCSV);
156
157                    // 項目数が1以下の場合は無視する
158                    if($max <= 1) {
159                        continue;
160                    }
161
162                    // 項目数チェック
163                    if($max != $colmax) {
164                        echo "※ 項目数が" . $max . "個検出されました。項目数は" . $colmax . "個になります。</br>\n";
165                        $err = true;
166                    } else {
167                        // シーケンス配列を格納する。
168                        $this->objFormParam->setParam($arrCSV, true);
169                        $arrRet = $this->objFormParam->getHashArray();
170                        $this->objFormParam->setParam($arrRet);
171                        // 入力値の変換
172                        $this->objFormParam->convParam();
173                        // <br>なしでエラー取得する。
174                        $arrCSVErr = $this->lfCheckError();
175                    }
176
177                    //販売方法チェックを行う
178                    $this->checkSalesKind( $this->objFormParam->keyname ,$arrCSV , $arrCSVErr );
179
180                    // 入力エラーチェック
181                    if(count($arrCSVErr) > 0) {
182                        echo "<font color=\"red\">■" . $line . "行目でエラーが発生しました。</font></br>\n";
183                        foreach($arrCSVErr as $val) {
184                            $this->printError($val);
185                        }
186                        $err = true;
187                    }
188
189                    if(!$err) {
190                        $this->lfRegistProduct($objQuery, $line);
191                        $regist++;
192                    }
193                    $arrParam = $this->objFormParam->getHashArray();
194
195                    if(!$err) echo $line." / ".$rec_count. "行目 (商品ID:".$arrParam['product_id']." / 商品名:".$arrParam['name'].")\n<br />";
196                    flush();
197                }
198                fclose($fp);
199
200                if(!$err) {
201                    $objQuery->commit();
202                    echo "■" . $regist . "件のレコードを登録しました。";
203                    // 商品件数カウント関数の実行
204                    $objDb->sfCategory_Count($objQuery);
205                    $objDb->sfMaker_Count($objQuery);
206                } else {
207                    $objQuery->rollback();
208                }
209            } else {
210                foreach($arrErr as $val) {
211                    $this->printError($val);
212                }
213            }
214            echo "<br/><a href=\"javascript:window.close()\">→閉じる</a>";
215            flush();
216
217            $this->setTemplate('admin_popup_footer.tpl');
218
219            return;
220            break;
221        default:
222            break;
223        }
224    }
225
226    /**
227     * デストラクタ.
228     *
229     * @return void
230     */
231    function destroy() {
232        parent::destroy();
233    }
234
235
236    /**
237     * ファイル情報の初期化を行う.
238     *
239     * @return void
240     */
241    function lfInitFile() {
242        $this->objUpFile->addFile("CSVファイル", 'csv_file', array('csv'),
243                                  CSV_SIZE, true, 0, 0, false);
244    }
245
246    /**
247     * 入力情報の初期化を行う.
248     *
249     * @return void
250     */
251    function lfInitParam() {
252
253        // 商品ステータスの上限文字数の算出
254        $masterData = new SC_DB_MasterData_Ex();
255        $arrSTATUS = $masterData->getMasterData("mtb_status");
256        $product_flag_maxlen = max(array_keys($arrSTATUS));
257        unset($arrSTATUS);
258        unset($masterData);
259
260        $this->objFormParam->addParam("商品ID", "product_id", INT_LEN, "n", array("MAX_LENGTH_CHECK","NUM_CHECK"));
261        $this->objFormParam->addParam("商品規格ID", "product_class_id", INT_LEN, "n", array("MAX_LENGTH_CHECK","NUM_CHECK"));
262
263        $this->objFormParam->addParam("規格名1", "dummy1");
264        $this->objFormParam->addParam("規格名2", "dummy2");
265
266        $this->objFormParam->addParam("商品名", "name", STEXT_LEN, "KVa", array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK"));
267        $this->objFormParam->addParam("公開フラグ(1:公開 2:非公開)", "status", INT_LEN, "n", array("EXIST_CHECK","MAX_LENGTH_CHECK","NUM_CHECK"));
268        $this->objFormParam->addParam("商品ステータス", "product_flag", $product_flag_maxlen, "n", array("EXIST_CHECK","MAX_LENGTH_CHECK","NUM_CHECK"));
269        $this->objFormParam->addParam("商品コード", "product_code", STEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK"));
270        $this->objFormParam->addParam(NORMAL_PRICE_TITLE, "price01", PRICE_LEN, "n", array("MAX_LENGTH_CHECK","NUM_CHECK"));
271        $this->objFormParam->addParam(SALE_PRICE_TITLE, "price02", PRICE_LEN, "n", array("EXIST_CHECK","MAX_LENGTH_CHECK","NUM_CHECK"));
272        $this->objFormParam->addParam("在庫数", "stock", INT_LEN, "n", array("MAX_LENGTH_CHECK","NUM_CHECK"));
273        $this->objFormParam->addParam("送料", "deliv_fee", PRICE_LEN, "n", array("MAX_LENGTH_CHECK","NUM_CHECK"));
274        $this->objFormParam->addParam("ポイント付与率", "point_rate", PERCENTAGE_LEN, "n", array("EXIST_CHECK","MAX_LENGTH_CHECK","NUM_CHECK"));
275        $this->objFormParam->addParam("購入制限", "sale_limit", INT_LEN, "n", array("MAX_LENGTH_CHECK","NUM_CHECK"));
276        $this->objFormParam->addParam("メーカーURL", "comment1", URL_LEN, "KVa", array("SPTAB_CHECK","URL_CHECK","MAX_LENGTH_CHECK"));
277        $this->objFormParam->addParam("検索ワード", "comment3", LLTEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK"));
278        $this->objFormParam->addParam("備考欄(SHOP専用)", "note", LLTEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK"));
279        $this->objFormParam->addParam("一覧-メインコメント", "main_list_comment", MTEXT_LEN, "KVa", array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK"));
280        $this->objFormParam->addParam("一覧-メイン画像", "main_list_image", LTEXT_LEN, "KVa", array("FILE_EXISTS","SPTAB_CHECK","MAX_LENGTH_CHECK"));
281        $this->objFormParam->addParam("メインコメント", "main_comment", LLTEXT_LEN, "KVa", array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK"));
282        $this->objFormParam->addParam("メイン画像", "main_image", LTEXT_LEN, "KVa", array("FILE_EXISTS","SPTAB_CHECK","MAX_LENGTH_CHECK"));
283        $this->objFormParam->addParam("メイン拡大画像", "main_large_image", LTEXT_LEN, "KVa", array("FILE_EXISTS","SPTAB_CHECK","MAX_LENGTH_CHECK"));
284        $this->objFormParam->addParam("詳細-サブタイトル(1)", "sub_title1", STEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK"));
285        $this->objFormParam->addParam("詳細-サブコメント(1)", "sub_comment1", LLTEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK"));
286        $this->objFormParam->addParam("詳細-サブ画像(1)", "sub_image1", LTEXT_LEN, "KVa", array("FILE_EXISTS","SPTAB_CHECK","MAX_LENGTH_CHECK"));
287        $this->objFormParam->addParam("詳細-サブ拡大画像(1)", "sub_large_image1", LTEXT_LEN, "KVa", array("FILE_EXISTS","SPTAB_CHECK","MAX_LENGTH_CHECK"));
288
289        $this->objFormParam->addParam("詳細-サブタイトル(2)", "sub_title2", STEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK"));
290        $this->objFormParam->addParam("詳細-サブコメント(2)", "sub_comment2", LLTEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK"));
291        $this->objFormParam->addParam("詳細-サブ画像(2)", "sub_image2", LTEXT_LEN, "KVa", array("FILE_EXISTS","SPTAB_CHECK","MAX_LENGTH_CHECK"));
292        $this->objFormParam->addParam("詳細-サブ拡大画像(2)", "sub_large_image2", LTEXT_LEN, "KVa", array("FILE_EXISTS","SPTAB_CHECK","MAX_LENGTH_CHECK"));
293
294        $this->objFormParam->addParam("詳細-サブタイトル(3)", "sub_title3", STEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK"));
295        $this->objFormParam->addParam("詳細-サブコメント(3)", "sub_comment3", LLTEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK"));
296        $this->objFormParam->addParam("詳細-サブ画像(3)", "sub_image3", LTEXT_LEN, "KVa", array("FILE_EXISTS","SPTAB_CHECK","MAX_LENGTH_CHECK"));
297        $this->objFormParam->addParam("詳細-サブ拡大画像(3)", "sub_large_image3", LTEXT_LEN, "KVa", array("FILE_EXISTS","SPTAB_CHECK","MAX_LENGTH_CHECK"));
298
299        $this->objFormParam->addParam("詳細-サブタイトル(4)", "sub_title4", STEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK"));
300        $this->objFormParam->addParam("詳細-サブコメント(4)", "sub_comment4", LLTEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK"));
301        $this->objFormParam->addParam("詳細-サブ画像(4)", "sub_image4", LTEXT_LEN, "KVa", array("FILE_EXISTS","SPTAB_CHECK","MAX_LENGTH_CHECK"));
302        $this->objFormParam->addParam("詳細-サブ拡大画像(4)", "sub_large_image4", LTEXT_LEN, "KVa", array("FILE_EXISTS","SPTAB_CHECK","MAX_LENGTH_CHECK"));
303
304        $this->objFormParam->addParam("詳細-サブタイトル(5)", "sub_title5", STEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK"));
305        $this->objFormParam->addParam("詳細-サブコメント(5)", "sub_comment5", LLTEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK"));
306        $this->objFormParam->addParam("詳細-サブ画像(5)", "sub_image5", LTEXT_LEN, "KVa", array("FILE_EXISTS","SPTAB_CHECK","MAX_LENGTH_CHECK"));
307        $this->objFormParam->addParam("詳細-サブ拡大画像(5)", "sub_large_image5", LTEXT_LEN, "KVa", array("FILE_EXISTS","SPTAB_CHECK","MAX_LENGTH_CHECK"));
308
309        $this->objFormParam->addParam("発送日目安", "deliv_date_id", INT_LEN, "n", array("MAX_LENGTH_CHECK","NUM_CHECK"));
310
311        for ($cnt = 1; $cnt <= RECOMMEND_PRODUCT_MAX; $cnt++) {
312            $this->objFormParam->addParam("関連商品($cnt)", "recommend_product_id$cnt", INT_LEN, "n", array("MAX_LENGTH_CHECK","NUM_CHECK"));
313            $this->objFormParam->addParam("関連商品コメント($cnt)", "recommend_comment$cnt", LTEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK"));
314        }
315
316        $this->objFormParam->addParam("実商品・ダウンロード(1:実商品 2:ダウンロード)", "down", INT_LEN, "n", array("EXIST_CHECK","MAX_LENGTH_CHECK","NUM_CHECK"));
317        $this->objFormParam->addParam("ダウンロードファイル名", "down_filename", STEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK"));
318        $this->objFormParam->addParam("ダウンロード商品用ファイル", "down_realfilename", LTEXT_LEN, "KVa", array("DOWN_FILE_EXISTS","SPTAB_CHECK","MAX_LENGTH_CHECK"));
319
320        $this->objFormParam->addParam("商品カテゴリ", "category_id", STEXT_LEN, "n", array("EXIST_CHECK", "SPTAB_CHECK"));
321    }
322
323    /**
324     * 商品登録を行う.
325     *
326     * @param SC_Query $objQuery SC_Queryインスタンス
327     * @param string|integer $line 処理中の行数
328     * @return void
329     */
330    function lfRegistProduct($objQuery, $line = "") {
331
332        $objDb = new SC_Helper_DB_Ex();
333
334        $arrRet = $this->objFormParam->getHashArray();
335
336        // dtb_products以外に登録される値を除外する。
337        foreach($arrRet as $key => $val) {
338            switch($key) {
339            case 'product_code':
340            case 'price01':
341            case 'price02':
342            case 'stock':
343            case 'product_class_id':
344            case 'recommend_product_id1':
345            case 'recommend_product_id2':
346            case 'recommend_product_id3':
347            case 'recommend_product_id4':
348            case 'recommend_product_id5':
349            case 'recommend_product_id6':
350            case 'recommend_comment1':
351            case 'recommend_comment2':
352            case 'recommend_comment3':
353            case 'recommend_comment4':
354            case 'recommend_comment5':
355            case 'recommend_comment6':
356            case 'category_id':
357                break;
358            default:
359                if(!ereg("^dummy", $key)) {
360                    $sqlval[$key] = $val;
361                }
362                break;
363            }
364        }
365
366        // 登録時間を生成(DBのnow()だとcommitした際、すべて同一の時間になってしまう)
367        $time = date("Y-m-d H:i:s");
368        // 秒以下を生成
369        if($line != "") {
370            $microtime = sprintf("%06d", $line);
371            $time .= ".$microtime";
372        }
373        $sqlval['update_date'] = $time;
374        $sqlval['creator_id'] = $_SESSION['member_id'];
375
376        if($sqlval['status'] == "") {
377            $sqlval['status'] = 2;
378        }
379
380        if($sqlval['product_id'] != "") {
381
382            // UPDATEの実行
383            $where = "product_id = ?";
384            $objQuery->update("dtb_products", $sqlval, $where, array($sqlval['product_id']));
385
386            $product_id = $sqlval['product_id'];
387        } else {
388            // 新規登録
389
390            $sqlval['product_id'] = $objQuery->nextVal('dtb_products_product_id');
391            $product_id = $sqlval['product_id'];
392            $sqlval['create_date'] = $time;
393
394            // INSERTの実行
395            $objQuery->insert("dtb_products", $sqlval);
396        }
397
398        // カテゴリ登録
399        $arrCategory_id = explode("|", $arrRet["category_id"]);
400        $objDb->updateProductCategories($arrCategory_id, $product_id);
401
402        // 規格登録
403        $this->lfRegistProductClass($objQuery, $arrRet, $product_id, $arrRet['product_class_id']);
404
405        // 関連商品登録
406        $objQuery->delete("dtb_recommend_products", "product_id = ?", array($product_id));
407        for($i = 1; $i <= RECOMMEND_PRODUCT_MAX; $i++) {
408            $keyname = "recommend_product_id" . $i;
409            $comment_key = "recommend_comment" . $i;
410            if($arrRet[$keyname] != "") {
411                $arrProduct = $objQuery->select("product_id", "dtb_products", "product_id = ?", array($arrRet[$keyname]));
412                if($arrProduct[0]['product_id'] != "") {
413                    $arrval['product_id'] = $product_id;
414                    $arrval['recommend_product_id'] = $arrProduct[0]['product_id'];
415                    $arrval['comment'] = $arrRet[$comment_key];
416                    $arrval['update_date'] = "Now()";
417                    $arrval['create_date'] = "Now()";
418                    $arrval['creator_id'] = $_SESSION['member_id'];
419                    $arrval['rank'] = RECOMMEND_PRODUCT_MAX - $i + 1;
420                    $objQuery->insert("dtb_recommend_products", $arrval);
421                }
422            }
423        }
424    }
425
426    /**
427     * 商品規格登録を行う.
428     *
429     * @param SC_Query $objQuery SC_Queryインスタンス
430     * @param array $arrList 商品規格情報配列
431     * @param integer $product_id 商品ID
432     * @param integer $product_class_id 商品規格ID
433     * @return void
434     */
435    function lfRegistProductClass($objQuery, $arrList, $product_id, $product_class_id) {
436        $sqlval['product_code'] = $arrList["product_code"];
437        $sqlval['stock'] = $arrList["stock"];
438        if($sqlval['stock'] == "") {
439            $sqlval['stock_unlimited'] = '1';
440        } else {
441            $sqlval['stock_unlimited'] = '0';
442        }
443        $sqlval['price01'] = $arrList['price01'];
444        $sqlval['price02'] = $arrList['price02'];
445        $sqlval['creator_id'] = $_SESSION['member_id'];
446
447        // TODO $sqlval['member_id'] は何処から出てくる?
448        if($sqlval['member_id'] == "") {
449            $sqlval['creator_id'] = '0';
450        }
451
452        if($product_class_id == "") {
453            // 新規登録
454            $where = "product_id = ?";
455            // 念のために既存の規格を削除
456            $objQuery->delete("dtb_products_class", $where, array($product_id));
457            $sqlval['product_id'] = $product_id;
458            $sqlval['classcategory_id1'] = '0';
459            $sqlval['classcategory_id2'] = '0';
460            $sqlval['create_date'] = "now()";
461            $sqlval['product_class_id'] = $objQuery->nextVal('dtb_products_class_product_class_id');
462            $objQuery->insert("dtb_products_class", $sqlval);
463        } else {
464            // 既存編集
465            $where = "product_id = ? AND product_class_id = ?";
466            $objQuery->update("dtb_products_class", $sqlval, $where, array($product_id, $product_class_id));
467        }
468    }
469
470    /**
471     * 入力チェックを行う.
472     *
473     * @return void
474     */
475    function lfCheckError() {
476
477        // 入力データを渡す。
478        $arrRet =  $this->objFormParam->getHashArray();
479        $objErr = new SC_CheckError($arrRet);
480        $objErr->arrErr = $this->objFormParam->checkError(false);
481
482        if(count($objErr->arrErr) == 0) {
483            $objQuery = new SC_Query();
484            // 商品ID、規格IDの存在チェック
485            if($arrRet['product_id'] != "") {
486                $count = $objQuery->count("dtb_products", "product_id = ?", array($arrRet['product_id']));
487                if($count == 0) {
488                    $objErr->arrErr['product_id'] = "※ 指定の商品IDは、登録されていません。";
489                }
490            }
491
492            if($arrRet['product_class_id'] != "") {
493                $count = 0;
494                if($arrRet['product_id'] != "") {
495                    $count = $objQuery->count("dtb_products_class", "product_id = ? AND product_class_id = ?", array($arrRet['product_id'], $arrRet['product_class_id']));
496                }
497                if($count == 0) {
498                    $objErr->arrErr['product_class_id'] = "※ 指定の規格IDは、登録されていません。";
499                }
500            }
501
502            // 存在するカテゴリIDかチェック
503            $arrCategory_id = explode("|", $arrRet['category_id']);
504            foreach ($arrCategory_id as $category_id) {
505                $count = $objQuery->count("dtb_category", "category_id = ?", array($category_id));
506                if($count == 0) {
507                    $objErr->arrErr['product_id'] = "※ 指定のカテゴリIDは、登録されていません。";
508                }
509            }
510        }
511        return $objErr->arrErr;
512    }
513
514    /**
515     * CSVのカウント数を得る.
516     *
517     * @param resource $fp fopenを使用して作成したファイルポインタ
518     * @return integer CSV のカウント数
519     */
520    function lfCSVRecordCount($fp) {
521
522        $count = 0;
523        while(!feof($fp)) {
524            $arrCSV = fgetcsv($fp, CSV_LINE_MAX);
525            $count++;
526        }
527        // ファイルポインタを戻す
528        if (rewind($fp)) {
529            return $count-1;
530        } else {
531            SC_Utils_Ex::sfDispError("");
532        }
533    }
534
535    /**
536     * 引数の文字列をエラー出力する.
537     *
538     * 引数 $val の内容は, htmlspecialchars() によってサニタイズされる
539     *
540     * @param string $val 出力する文字列
541     * @return void
542     */
543    function printError($val) {
544         echo "<font color=\"red\">"
545             . htmlspecialchars($val, ENT_QUOTES)
546             . "</font></br>\n";
547    }
548
549    /**
550     * 実商品・ダウンロード判定チェック処理
551     *
552     * @param $p_keyname    csv項目番号配列
553     * @param $p_arrCSV     csv入力データ配列
554     * @param $p_arrCSVErr  エラー格納配列
555     */
556    function checkSalesKind( $p_keyname , $p_arrCSV , &$p_arrCSVErr ){
557
558        //実商品・ダウンロードカラムの値を取得する
559        $sDownFlg_Key = array_search('down', $p_keyname );
560        if( $sDownFlg_Key != '' ){
561            //実商品・ダウンロードカラムが存在する場合
562            //実商品・ダウンロードカラムの値を取得する
563            $sDownFlg = $p_arrCSV[$sDownFlg_Key];
564
565            //ダウンロードファイル名を取得する
566            $sFilename_Key = array_search('down_filename', $p_keyname );
567            $sFilename = $p_arrCSV[$sFilename_Key];
568
569            //ダウンロード商品用ファイルアップロードを取得する
570            $sRealdown_filename_Key = array_search('down_realfilename', $p_keyname );
571            $sRealdown_filename = $p_arrCSV[$sRealdown_filename_Key];
572
573            if( $sDownFlg == 1 ){
574                //実商品の場合
575                if( mb_strlen($sFilename) > 0 ){
576                    $p_arrCSVErr["down_filename"] = "※ 実商品の場合はダウンロードファイル名は入力できません。\n";
577                }
578                if( mb_strlen($sRealdown_filename) > 0 ){
579                    $p_arrCSVErr["down_realfilename"] = "※ 実商品の場合はダウンロード商品用ファイルアップロードは入力できません。\n";
580                }
581            }else if( $sDownFlg == 2 ){
582                //ダウンロード商品の場合
583                if( mb_strlen($sFilename) <= 0 ){
584                    $p_arrCSVErr["down_filename"] = "※ ダウンロード商品の場合はダウンロードファイル名は必須です。\n";
585                }
586                if( mb_strlen($sRealdown_filename) <=  0 ){
587                    $p_arrCSVErr["down_realfilename"] = "※ ダウンロード商品の場合はダウンロード商品用ファイルアップロードは必須です。\n";
588                }
589            }else{
590                //その他
591                $p_arrCSVErr["down"] = "※ 実商品・ダウンロード(1:実商品 2:ダウンロード)の設定が不正です。\n";
592            }
593        }
594    }
595}
596?>
Note: See TracBrowser for help on using the repository browser.