Ticket #236: uploadCSVCategory.patch

File uploadCSVCategory.patch, 25.4 KB (added by nanasess, 15 years ago)

自動アップデートでも更新可能に修正

  • data/class_extends/page_extends/admin/products/LC_Page_Admin_Products_UploadCSVCategory_Ex.php

     
    11<?php 
    2  
     2/* 
     3 * This file is part of EC-CUBE 
     4 * 
     5 * Copyright(c) 2000-2007 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 */ 
    323// {{{ requires 
    4 require_once(CLASS_PATH . "pages/admin/products/LC_Page_Admin_Products_UploadCSV.php"); 
     24require_once(CLASS_PATH . "pages/admin/products/LC_Page_Admin_Products_UploadCSVCategory.php"); 
    525 
    626/** 
    7  * CSV アップロード のページクラス(拡張) 
     27 * カテゴリ CSV アップロード のページクラス(拡張) 
    828 * 
    9  * LC_Page_Admin_Products_UploadCSV をカスタマイズする場合はこのクラスを編集する. 
     29 * LC_Page_Admin_Products_UploadCSVCategory をカスタマイズする場合はこのクラスを編集する. 
    1030 * 
    1131 * @package Page 
    1232 * @author LOCKON CO.,LTD. 
    13  * @version $$Id: LC_Page_Admin_Products_UploadCSV_Ex.php 16741 2007-11-08 00:43:24Z adachi $$ 
     33 * @version $Id$ 
    1434 */ 
    15 class LC_Page_Admin_Products_UploadCSVCategory_Ex extends LC_Page_Admin_Products_UploadCSV { 
     35class LC_Page_Admin_Products_UploadCSVCategory_Ex extends LC_Page_Admin_Products_UploadCSVCategory { 
    1636 
    1737    // }}} 
    1838    // {{{ functions 
     
    2444     */ 
    2545    function init() { 
    2646        parent::init(); 
    27         $this->tpl_mainpage = 'products/upload_csv_category.tpl'; 
    28         $this->tpl_subnavi = 'products/subnavi.tpl'; 
    29         $this->tpl_mainno = 'products'; 
    30         $this->tpl_subno = 'upload_csv_category'; 
    3147    } 
    3248 
    3349    /** 
     
    3652     * @return void 
    3753     */ 
    3854    function process() { 
    39         $conn = new SC_DBConn(); 
    40         $objView = new SC_AdminView(); 
    41         $objSess = new SC_Session(); 
    42         $objDb = new SC_Helper_DB_Ex(); 
    43  
    44         // 認証可否の判定 
    45         SC_Utils_Ex::sfIsSuccess($objSess); 
    46  
    47         // ファイル管理クラス 
    48         $this->objUpFile = new SC_UploadFile(IMAGE_TEMP_DIR, IMAGE_SAVE_DIR); 
    49         // ファイル情報の初期化 
    50         $this->lfInitFile(); 
    51         // パラメータ管理クラス 
    52         $this->objFormParam = new SC_FormParam(); 
    53         // パラメータ情報の初期化 
    54         $this->lfInitParam(); 
    55         $colmax = $this->objFormParam->getCount(); 
    56         $this->objFormParam->setHtmlDispNameArray(); 
    57         $this->arrTitle = $this->objFormParam->getHtmlDispNameArray(); 
    58  
    59         if (!isset($_POST['mode'])) $_POST['mode'] = ""; 
    60  
    61         switch($_POST['mode']) { 
    62             case 'csv_upload': 
    63                 $err = false; 
    64                 // エラーチェック 
    65                 $arrErr['csv_file'] = $this->objUpFile->makeTempFile('csv_file'); 
    66  
    67                 if($arrErr['css_file'] == "") { 
    68                     $arrErr = $this->objUpFile->checkEXISTS(); 
    69                 } 
    70  
    71                 // 実行時間を制限しない 
    72                 set_time_limit(0); 
    73  
    74                 // 出力をバッファリングしない(==日本語自動変換もしない) 
    75                 ob_end_clean(); 
    76  
    77                 // IEのために256バイト空文字出力 
    78                 echo str_pad('',256); 
    79  
    80                 if(empty($arrErr['csv_file'])) { 
    81                     // 一時ファイル名の取得 
    82                     $filepath = $this->objUpFile->getTempFilePath('csv_file'); 
    83                     // エンコード 
    84                     $enc_filepath = SC_Utils_Ex::sfEncodeFile($filepath, 
    85                     CHAR_CODE, CSV_TEMP_DIR); 
    86  
    87                     // レコード数を得る 
    88                     $rec_count = $this->lfCSVRecordCount($enc_filepath); 
    89  
    90                     $fp = fopen($enc_filepath, "r"); 
    91                     $line = 0;      // 行数 
    92                     $regist = 0;    // 登録数 
    93  
    94                     $objQuery = new SC_Query(); 
    95                     $objQuery->begin(); 
    96  
    97                     echo "■ CSV登録進捗状況 <br/><br/>\n"; 
    98  
    99                     while(!feof($fp) && !$err) { 
    100                         $arrCSV = fgetcsv($fp, CSV_LINE_MAX); 
    101  
    102                         // 行カウント 
    103                         $line++; 
    104  
    105                         if($line <= 1) { 
    106                             continue; 
    107                         } 
    108  
    109                         // 項目数カウント 
    110                         $max = count($arrCSV); 
    111  
    112                         // 項目数が1以下の場合は無視する 
    113                         if($max <= 1) { 
    114                             continue; 
    115                         } 
    116  
    117                         // 項目数チェック 
    118                         if($max != $colmax) { 
    119                             echo "※ 項目数が" . $max . "個検出されました。項目数は" . $colmax . "個になります。</br>\n"; 
    120                             $err = true; 
    121                         } else { 
    122                             // シーケンス配列を格納する。 
    123                             $this->objFormParam->setParam($arrCSV, true); 
    124                             $arrRet = $this->objFormParam->getHashArray(); 
    125                             $this->objFormParam->setParam($arrRet); 
    126                             // 入力値の変換 
    127                             $this->objFormParam->convParam(); 
    128                             // <br>なしでエラー取得する。 
    129                             $arrCSVErr = $this->lfCheckError(); 
    130                         } 
    131  
    132                         // 入力エラーチェック 
    133                         if(count($arrCSVErr) > 0) { 
    134                             echo "<font color=\"red\">■" . $line . "行目でエラーが発生しました。</font></br>\n"; 
    135                             foreach($arrCSVErr as $val) { 
    136                                 $this->printError($val); 
    137                             } 
    138                             $err = true; 
    139                         } 
    140  
    141                         if(!$err) { 
    142                             $this->lfRegistProduct($objQuery, $line); 
    143                             $regist++; 
    144                         } 
    145                         $arrParam = $this->objFormParam->getHashArray(); 
    146  
    147                         if(!$err) echo $line." / ".$rec_count. "行目 (カテゴリID:".$arrParam['category_id']." / カテゴリ名:".$arrParam['category_name'].")\n<br />"; 
    148                         flush(); 
    149                     } 
    150                     fclose($fp); 
    151  
    152                     if(!$err) { 
    153                         $objQuery->commit(); 
    154                         echo "■" . $regist . "件のレコードを登録しました。"; 
    155                         // カテゴリ件数カウント関数の実行 
    156                         $objDb->sfCategory_Count($objQuery); 
    157                     } else { 
    158                         $objQuery->rollback(); 
    159                     } 
    160                 } else { 
    161                     foreach($arrErr as $val) { 
    162                         $this->printError($val); 
    163                     } 
    164                 } 
    165                 echo "<br/><a href=\"javascript:window.close()\">→閉じる</a>"; 
    166                 flush(); 
    167                 exit; 
    168                 break; 
    169             default: 
    170                 break; 
    171         } 
    172  
    173         $objView->assignobj($this); 
    174         $objView->display(MAIN_FRAME); 
     55        parent::process(); 
    17556    } 
    17657 
    17758    /** 
     
    18263    function destroy() { 
    18364        parent::destroy(); 
    18465    } 
    185  
    186  
    187     /** 
    188      * ファイル情報の初期化を行う. 
    189      * 
    190      * @return void 
    191      */ 
    192     function lfInitFile() { 
    193         $this->objUpFile->addFile("CSVファイル", 'csv_file', array('csv'), 
    194         CSV_SIZE, true, 0, 0, false); 
    195     } 
    196  
    197     /** 
    198      * 入力情報の初期化を行う. 
    199      * 
    200      * @return void 
    201      */ 
    202     function lfInitParam() { 
    203         $this->objFormParam->addParam("カテゴリID","category_id",INT_LEN,"n",array("MAX_LENGTH_CHECK","NUM_CHECK")); 
    204         $this->objFormParam->addParam("カテゴリ名","category_name",STEXT_LEN,"KVa",array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK")); 
    205         $this->objFormParam->addParam("親カテゴリID","parent_category_id",INT_LEN,"n",array("MAX_LENGTH_CHECK","NUM_CHECK")); 
    206         $this->objFormParam->addParam("階層","level",INT_LEN,"n",array("MAX_LENGTH_CHECK","NUM_CHECK")); 
    207         $this->objFormParam->addParam("表示順","rank",INT_LEN,"n",array("MAX_LENGTH_CHECK","NUM_CHECK")); 
    208         //     $this->objFormParam->addParam("削除フラグ","del_flg",INT_LEN,"n",array()); 
    209     } 
    210  
    211     /** 
    212      * カテゴリ登録を行う. 
    213      * 
    214      * @param SC_Query $objQuery SC_Queryインスタンス 
    215      * @param string|integer $line 処理中の行数 
    216      * @return void 
    217      */ 
    218     function lfRegistProduct($objQuery, $line = "") { 
    219         $objDb = new SC_Helper_DB_Ex(); 
    220         $arrRet = $this->objFormParam->getHashArray(); 
    221         foreach($arrRet as $key => $val) { 
    222             switch($key) { 
    223                 //             case 'recommend_comment6': 
    224                 //                 break; 
    225                 default: 
    226                     if(!ereg("^dummy", $key)) { 
    227                         $sqlval[$key] = $val; 
    228                     } 
    229                     break; 
    230             } 
    231         } 
    232             // 登録時間を生成(DBのnow()だとcommitした際、すべて同一の時間になってしまう) 
    233         $time = date("Y-m-d H:i:s"); 
    234         // 秒以下を生成 
    235         if($line != "") { 
    236             $microtime = sprintf("%06d", $line); 
    237             $time .= ".$microtime"; 
    238         } 
    239         $sqlval['update_date'] = $time; 
    240         $sqlval['creator_id'] = $_SESSION['member_id']; 
    241         $count = $objQuery->count("dtb_category", "category_id = ?", array($arrRet['category_id'])); 
    242         if($count != 0) { 
    243             // UPDATEの実行 
    244             echo "UPDATEの実行"; 
    245             $where = "category_id = ?"; 
    246             $objQuery->update("dtb_category", $sqlval, $where, array($sqlval['category_id'])); 
    247         } else { 
    248             // 新規登録 
    249             $sqlval['category_id'] = $arrRet['category_id']; 
    250             $sqlval['create_date'] = $time; 
    251             if($arrRet['rank'] == ""){ 
    252                 // カテゴリ内で最大のランクを割り当てる 
    253                 $sqlval['rank'] = $objQuery->max("dtb_category", "rank", "parent_category_id = ?", array($arrRet['parent_category_id'])) + 1; 
    254             } 
    255             // INSERTの実行 
    256             $objQuery->insert("dtb_category", $sqlval); 
    257         } 
    258     } 
    259  
    260     /** 
    261      * 入力チェックを行う. 
    262      * 
    263      * @return void 
    264      */ 
    265     function lfCheckError() { 
    266         // 入力データを渡す。 
    267         $arrRet =  $this->objFormParam->getHashArray(); 
    268         $objErr = new SC_CheckError($arrRet); 
    269         $objErr->arrErr = $this->objFormParam->checkError(false); 
    270         if(count($objErr->arrErr) == 0) { 
    271             $objQuery = new SC_Query(); 
    272             // 存在する親カテゴリIDかチェック 
    273             if($arrRet['parent_category_id'] != 0){ 
    274                 $count = $objQuery->count("dtb_category", "category_id = ?", array($arrRet['parent_category_id'])); 
    275                 if($count == 0) { 
    276                     $objErr->arrErr['parent_category_id'] = "※ 指定の親カテゴリID(".$arrRet['parent_category_id'].")は、存在しません。"; 
    277                 } 
    278             } 
    279         } 
    280         return $objErr->arrErr; 
    281     } 
    282  
    283     /** 
    284      * CSVのカウント数を得る. 
    285      * 
    286      * @param string $file_name ファイルパス 
    287      * @return integer CSV のカウント数 
    288      */ 
    289     function lfCSVRecordCount($file_name) { 
    290  
    291         $count = 0; 
    292         $fp = fopen($file_name, "r"); 
    293         while(!feof($fp)) { 
    294             $arrCSV = fgetcsv($fp, CSV_LINE_MAX); 
    295             $count++; 
    296         } 
    297  
    298         return $count-1; 
    299     } 
    300  
    301     /** 
    302      * 引数の文字列をエラー出力する. 
    303      * 
    304      * 引数 $val の内容は, htmlspecialchars() によってサニタイズされ 
    305      * 
    306      * @param string $val 出力する文字列 
    307      * @return void 
    308      */ 
    309     function printError($val) { 
    310         echo "<font color=\"red\">" 
    311         . htmlspecialchars($val, ENT_QUOTES) 
    312         . "</font></br>\n"; 
    313     } 
    314 } 
    31566?> 
  • data/class/pages/admin/products/LC_Page_Admin_Products_UploadCSVCategory.php

     
     1<?php 
     2/* 
     3 * This file is part of EC-CUBE 
     4 * 
     5 * Copyright(c) 2000-2007 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// {{{ requires 
     24require_once(CLASS_PATH . "pages/LC_Page.php"); 
     25 
     26/** 
     27 * カテゴリを CSV でアップロードする. 
     28 * 
     29 * LC_Page_Admin_Products_UploadCSV をカスタマイズする場合はこのクラスを編集する. 
     30 * 
     31 * @package Page 
     32 * @author Ryuichi Tokugami 
     33 * @version $Id$ 
     34 */ 
     35class LC_Page_Admin_Products_UploadCSVCategory extends LC_Page_Admin_Products_UploadCSV { 
     36 
     37    // }}} 
     38    // {{{ functions 
     39 
     40    /** 
     41     * Page を初期化する. 
     42     * 
     43     * @return void 
     44     */ 
     45    function init() { 
     46        parent::init(); 
     47        $this->tpl_mainpage = 'products/upload_csv_category.tpl'; 
     48        $this->tpl_subnavi = 'products/subnavi.tpl'; 
     49        $this->tpl_mainno = 'products'; 
     50        $this->tpl_subno = 'upload_csv_category'; 
     51    } 
     52 
     53    /** 
     54     * Page のプロセス. 
     55     * 
     56     * @return void 
     57     */ 
     58    function process() { 
     59        $conn = new SC_DBConn(); 
     60        $objView = new SC_AdminView(); 
     61        $objSess = new SC_Session(); 
     62        $objDb = new SC_Helper_DB_Ex(); 
     63 
     64        // 認証可否の判定 
     65        SC_Utils_Ex::sfIsSuccess($objSess); 
     66 
     67        // ファイル管理クラス 
     68        $this->objUpFile = new SC_UploadFile(IMAGE_TEMP_DIR, IMAGE_SAVE_DIR); 
     69        // ファイル情報の初期化 
     70        $this->lfInitFile(); 
     71        // パラメータ管理クラス 
     72        $this->objFormParam = new SC_FormParam(); 
     73        // パラメータ情報の初期化 
     74        $this->lfInitParam(); 
     75        $colmax = $this->objFormParam->getCount(); 
     76        $this->objFormParam->setHtmlDispNameArray(); 
     77        $this->arrTitle = $this->objFormParam->getHtmlDispNameArray(); 
     78 
     79        if (!isset($_POST['mode'])) $_POST['mode'] = ""; 
     80 
     81        switch($_POST['mode']) { 
     82            case 'csv_upload': 
     83                $err = false; 
     84                // エラーチェック 
     85                $arrErr['csv_file'] = $this->objUpFile->makeTempFile('csv_file'); 
     86 
     87                if($arrErr['css_file'] == "") { 
     88                    $arrErr = $this->objUpFile->checkEXISTS(); 
     89                } 
     90 
     91                // 実行時間を制限しない 
     92                set_time_limit(0); 
     93 
     94                // 出力をバッファリングしない(==日本語自動変換もしない) 
     95                ob_end_clean(); 
     96 
     97                // IEのために256バイト空文字出力 
     98                echo str_pad('',256); 
     99 
     100                if(empty($arrErr['csv_file'])) { 
     101                    // 一時ファイル名の取得 
     102                    $filepath = $this->objUpFile->getTempFilePath('csv_file'); 
     103                    // エンコード 
     104                    $enc_filepath = SC_Utils_Ex::sfEncodeFile($filepath, 
     105                    CHAR_CODE, CSV_TEMP_DIR); 
     106 
     107                    // レコード数を得る 
     108                    $rec_count = $this->lfCSVRecordCount($enc_filepath); 
     109 
     110                    $fp = fopen($enc_filepath, "r"); 
     111                    $line = 0;      // 行数 
     112                    $regist = 0;    // 登録数 
     113 
     114                    $objQuery = new SC_Query(); 
     115                    $objQuery->begin(); 
     116 
     117                    echo "■ CSV登録進捗状況 <br/><br/>\n"; 
     118 
     119                    while(!feof($fp) && !$err) { 
     120                        $arrCSV = fgetcsv($fp, CSV_LINE_MAX); 
     121 
     122                        // 行カウント 
     123                        $line++; 
     124 
     125                        if($line <= 1) { 
     126                            continue; 
     127                        } 
     128 
     129                        // 項目数カウント 
     130                        $max = count($arrCSV); 
     131 
     132                        // 項目数が1以下の場合は無視する 
     133                        if($max <= 1) { 
     134                            continue; 
     135                        } 
     136 
     137                        // 項目数チェック 
     138                        if($max != $colmax) { 
     139                            echo "※ 項目数が" . $max . "個検出されました。項目数は" . $colmax . "個になります。</br>\n"; 
     140                            $err = true; 
     141                        } else { 
     142                            // シーケンス配列を格納する。 
     143                            $this->objFormParam->setParam($arrCSV, true); 
     144                            $arrRet = $this->objFormParam->getHashArray(); 
     145                            $this->objFormParam->setParam($arrRet); 
     146                            // 入力値の変換 
     147                            $this->objFormParam->convParam(); 
     148                            // <br>なしでエラー取得する。 
     149                            $arrCSVErr = $this->lfCheckError(); 
     150                        } 
     151 
     152                        // 入力エラーチェック 
     153                        if(count($arrCSVErr) > 0) { 
     154                            echo "<font color=\"red\">■" . $line . "行目でエラーが発生しました。</font></br>\n"; 
     155                            foreach($arrCSVErr as $val) { 
     156                                $this->printError($val); 
     157                            } 
     158                            $err = true; 
     159                        } 
     160 
     161                        if(!$err) { 
     162                            $this->lfRegistProduct($objQuery, $line); 
     163                            $regist++; 
     164                        } 
     165                        $arrParam = $this->objFormParam->getHashArray(); 
     166 
     167                        if(!$err) echo $line." / ".$rec_count. "行目 (カテゴリID:".$arrParam['category_id']." / カテゴリ名:".$arrParam['category_name'].")\n<br />"; 
     168                        flush(); 
     169                    } 
     170                    fclose($fp); 
     171 
     172                    if(!$err) { 
     173                        $objQuery->commit(); 
     174                        echo "■" . $regist . "件のレコードを登録しました。"; 
     175                        // カテゴリ件数カウント関数の実行 
     176                        $objDb->sfCategory_Count($objQuery); 
     177                    } else { 
     178                        $objQuery->rollback(); 
     179                    } 
     180                } else { 
     181                    foreach($arrErr as $val) { 
     182                        $this->printError($val); 
     183                    } 
     184                } 
     185                echo "<br/><a href=\"javascript:window.close()\">→閉じる</a>"; 
     186                flush(); 
     187                exit; 
     188                break; 
     189            default: 
     190                break; 
     191        } 
     192 
     193        $objView->assignobj($this); 
     194        $objView->display(MAIN_FRAME); 
     195    } 
     196 
     197    /** 
     198     * デストラクタ. 
     199     * 
     200     * @return void 
     201     */ 
     202    function destroy() { 
     203        parent::destroy(); 
     204    } 
     205 
     206 
     207    /** 
     208     * ファイル情報の初期化を行う. 
     209     * 
     210     * @return void 
     211     */ 
     212    function lfInitFile() { 
     213        $this->objUpFile->addFile("CSVファイル", 'csv_file', array('csv'), 
     214        CSV_SIZE, true, 0, 0, false); 
     215    } 
     216 
     217    /** 
     218     * 入力情報の初期化を行う. 
     219     * 
     220     * @return void 
     221     */ 
     222    function lfInitParam() { 
     223        $this->objFormParam->addParam("カテゴリID","category_id",INT_LEN,"n",array("MAX_LENGTH_CHECK","NUM_CHECK")); 
     224        $this->objFormParam->addParam("カテゴリ名","category_name",STEXT_LEN,"KVa",array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK")); 
     225        $this->objFormParam->addParam("親カテゴリID","parent_category_id",INT_LEN,"n",array("MAX_LENGTH_CHECK","NUM_CHECK")); 
     226        $this->objFormParam->addParam("階層","level",INT_LEN,"n",array("MAX_LENGTH_CHECK","NUM_CHECK")); 
     227        $this->objFormParam->addParam("表示順","rank",INT_LEN,"n",array("MAX_LENGTH_CHECK","NUM_CHECK")); 
     228        //     $this->objFormParam->addParam("削除フラグ","del_flg",INT_LEN,"n",array()); 
     229    } 
     230 
     231    /** 
     232     * カテゴリ登録を行う. 
     233     * 
     234     * @param SC_Query $objQuery SC_Queryインスタンス 
     235     * @param string|integer $line 処理中の行数 
     236     * @return void 
     237     */ 
     238    function lfRegistProduct($objQuery, $line = "") { 
     239        $objDb = new SC_Helper_DB_Ex(); 
     240        $arrRet = $this->objFormParam->getHashArray(); 
     241        foreach($arrRet as $key => $val) { 
     242            switch($key) { 
     243                //             case 'recommend_comment6': 
     244                //                 break; 
     245                default: 
     246                    if(!ereg("^dummy", $key)) { 
     247                        $sqlval[$key] = $val; 
     248                    } 
     249                    break; 
     250            } 
     251        } 
     252            // 登録時間を生成(DBのnow()だとcommitした際、すべて同一の時間になってしまう) 
     253        $time = date("Y-m-d H:i:s"); 
     254        // 秒以下を生成 
     255        if($line != "") { 
     256            $microtime = sprintf("%06d", $line); 
     257            $time .= ".$microtime"; 
     258        } 
     259        $sqlval['update_date'] = $time; 
     260        $sqlval['creator_id'] = $_SESSION['member_id']; 
     261        $count = $objQuery->count("dtb_category", "category_id = ?", array($arrRet['category_id'])); 
     262        if($count != 0) { 
     263            // UPDATEの実行 
     264            echo "UPDATEの実行"; 
     265            $where = "category_id = ?"; 
     266            $objQuery->update("dtb_category", $sqlval, $where, array($sqlval['category_id'])); 
     267        } else { 
     268            // 新規登録 
     269            $sqlval['category_id'] = $arrRet['category_id']; 
     270            $sqlval['create_date'] = $time; 
     271            if($arrRet['rank'] == ""){ 
     272                // カテゴリ内で最大のランクを割り当てる 
     273                $sqlval['rank'] = $objQuery->max("dtb_category", "rank", "parent_category_id = ?", array($arrRet['parent_category_id'])) + 1; 
     274            } 
     275            // INSERTの実行 
     276            $objQuery->insert("dtb_category", $sqlval); 
     277        } 
     278    } 
     279 
     280    /** 
     281     * 入力チェックを行う. 
     282     * 
     283     * @return void 
     284     */ 
     285    function lfCheckError() { 
     286        // 入力データを渡す。 
     287        $arrRet =  $this->objFormParam->getHashArray(); 
     288        $objErr = new SC_CheckError($arrRet); 
     289        $objErr->arrErr = $this->objFormParam->checkError(false); 
     290        if(count($objErr->arrErr) == 0) { 
     291            $objQuery = new SC_Query(); 
     292            // 存在する親カテゴリIDかチェック 
     293            if($arrRet['parent_category_id'] != 0){ 
     294                $count = $objQuery->count("dtb_category", "category_id = ?", array($arrRet['parent_category_id'])); 
     295                if($count == 0) { 
     296                    $objErr->arrErr['parent_category_id'] = "※ 指定の親カテゴリID(".$arrRet['parent_category_id'].")は、存在しません。"; 
     297                } 
     298            } 
     299        } 
     300        return $objErr->arrErr; 
     301    } 
     302 
     303    /** 
     304     * CSVのカウント数を得る. 
     305     * 
     306     * @param string $file_name ファイルパス 
     307     * @return integer CSV のカウント数 
     308     */ 
     309    function lfCSVRecordCount($file_name) { 
     310 
     311        $count = 0; 
     312        $fp = fopen($file_name, "r"); 
     313        while(!feof($fp)) { 
     314            $arrCSV = fgetcsv($fp, CSV_LINE_MAX); 
     315            $count++; 
     316        } 
     317 
     318        return $count-1; 
     319    } 
     320 
     321    /** 
     322     * 引数の文字列をエラー出力する. 
     323     * 
     324     * 引数 $val の内容は, htmlspecialchars() によってサニタイズされ 
     325     * 
     326     * @param string $val 出力する文字列 
     327     * @return void 
     328     */ 
     329    function printError($val) { 
     330        echo "<span style=\"color: #FF0000\">" 
     331        . htmlspecialchars($val, ENT_QUOTES) 
     332        . "</span><br />\n"; 
     333    } 
     334} 
     335?>