Ignore:
Timestamp:
2011/03/12 00:02:29 (13 years ago)
Author:
nanasess
bzr:base-revision:
svn-v4:1e3b908f-19a9-db11-a64c-001125224ba8:branches/version-2_5-dev:20616
bzr:committer:
Kentaro Ohkouchi <ohkouchi@loop-az.jp>
bzr:file-ids:

data/Smarty/templates/admin/products/product_class.tpl 15732@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2FSmarty%2Ftemplates%2Fdefault%2Fadmin%2Fproducts%2Fproduct_class.tpl
data/class/SC_UploadFile.php 18171@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Fcomu-ver2%2Fdata%2Fclass%2FSC_UploadFile.php
data/class/pages/admin/products/LC_Page_Admin_Products_ProductClass.php 15559@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fpages%2Fadmin%2Fproducts%2FLC_Page_Admin_Products_ProductClass.php
data/module/gdthumb.php 15668@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fmodule%2Fgdthumb.php
bzr:mapping-version:
v4
bzr:merge:

ohkouchi@loop-az.jp-20110311150104-eyf782ssm47r344u
bzr:repository-uuid:
1e3b908f-19a9-db11-a64c-001125224ba8
bzr:revision-id:
ohkouchi@loop-az.jp-20110311150225-0v81rm3xh533aakt
bzr:revno:
3344
bzr:revprop:branch-nick:
branches/version-2_5-dev
bzr:root:
branches/version-2_5-dev
bzr:text-revisions:

data/class/SC_UploadFile.php ohkouchi@loop-az.jp-20110311150104-eyf782ssm47r344u
data/module/gdthumb.php ohkouchi@loop-az.jp-20110311150104-eyf782ssm47r344u
bzr:timestamp:
2011-03-12 00:02:25.581000090 +0900
bzr:user-agent:
bzr2.2.1+bzr-svn1.0.4
svn:original-date:
2011-03-11T15:02:25.581000Z
Message:

#991 (商品規格登録での不具合)

  • r20612 の続き. ファイルアップロードに対応

#595 (不正なファイルアップロードが行われる可能性)

  • move_uploaded_file() を使用するよう修正
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_ProductClass.php

    r20612 r20617  
    8282        // Downファイル管理クラスを初期化 
    8383        $this->objDownFile = new SC_UploadFile_Ex(DOWN_TEMP_REALDIR, DOWN_SAVE_REALDIR); 
    84         $this->initDownFile($count, $this->objDownFile); 
    8584 
    8685        switch ($this->getMode()) { 
     
    8887        // 編集実行 
    8988        case 'edit': 
    90  
    9189            $this->arrErr = $this->lfCheckProductsClass($objFormParam); 
    9290 
     
    117115        case 'delete': 
    118116            $this->doDelete($objFormParam->getValue('product_id')); 
     117            $objFormParam->setValue('check', array()); 
    119118            break; 
    120119 
     
    138137 
    139138        // ダウンロード商品ファイルアップロード 
    140         case 'upload_down': 
    141  
    142             /* TODO 
    143             $product_id = $objFormParam->getValue('product_id'); 
    144             $down_key   = $objFormParam->getValue('down_key'); 
    145             // 編集画面用パラメータをセット 
    146             $this->doPreEdit($product_id, true); 
    147             // Hiddenからのデータを引き継ぐ 
    148             $this->objDownFile->setHiddenKikakuFileList($_POST); 
    149             // ファイル存在チェック 
    150             $this->arrErr = array_merge((array)$this->arrErr, (array)$this->objDownFile->checkEXISTS($down_key)); 
    151             // ファイル保存処理 
    152             $this->arrErr[$down_key] = $this->objDownFile->makeTempDownFile($down_key); 
    153             // HIDDEN用に配列を渡す。 
    154             $this->arrHidden = array_merge((array)$this->arrHidden, (array)$this->objDownFile->getHiddenFileList()); 
    155             // Form用に配列を渡す。 
    156             $this->arrForm = array_merge((array)$this->arrForm, (array)$this->objDownFile->getFormKikakuDownFile()); 
    157             // 規格の組み合わせ一覧を表示 
    158             $this->doDisp($product_id, 
    159                           $objFormParam->getValue('select_class_id1'), 
    160                           $objFormParam->getValue('select_class_id2'), $objFormParam); 
    161             */ 
     139        case 'file_upload': 
     140            $this->doFileUpload($objFormParam); 
    162141            break; 
    163142 
    164143        // ダウンロードファイルの削除 
    165         case 'delete_down': 
    166  
    167             /* TODO 
    168             $product_id = $objFormParam->getValue('product_id'); 
    169             $down_key   = $objFormParam->getValue('down_key'); 
    170             // 編集画面用パラメータをセット 
    171             $this->doPreEdit($product_id, true); 
    172             // Hiddenからのデータを引き継ぐ 
    173             $this->objDownFile->setHiddenKikakuFileList($_POST); 
    174             // ファイル削除処理 
    175             $this->objDownFile->deleteKikakuFile($down_key); 
    176             // HIDDEN用に配列を渡す。 
    177             $this->arrHidden = array_merge((array)$this->arrHidden, (array)$this->objDownFile->getHiddenFileList()); 
    178             // Form用に配列を渡す。 
    179             $this->arrForm = array_merge((array)$this->arrForm, (array)$this->objDownFile->getFormKikakuDownFile()); 
    180             // 規格の組み合わせ一覧を表示 
    181             $this->doDisp($product_id, 
    182                           $objFormParam->getValue('select_class_id1'), 
    183                           $objFormParam->getValue('select_class_id2'), $objFormParam); 
    184             */ 
     144        case 'file_delete': 
     145            $this->doFileDelete($objFormParam); 
    185146            break; 
    186147 
     
    190151            $objFormParam->setParam($_POST); 
    191152            $objFormParam->convParam(); 
    192  
    193             /* TODO 
    194             // Hiddenからのデータを引き継ぐ 
    195             $this->objDownFile->setHiddenFileList($_POST); 
    196             // HIDDEN用に配列を渡す。 
    197             $this->arrHidden = array_merge((array)$this->arrHidden, (array)$this->objDownFile->getHiddenFileList()); 
    198             // Form用に配列を渡す。 
    199             $this->arrForm = array_merge((array)$this->arrForm, (array)$this->objDownFile->getFormKikakuDownFile()); 
    200             */ 
    201  
    202153            break; 
     154 
    203155        case 'complete': 
    204156            $this->tpl_mainpage = 'products/product_class_complete.tpl'; 
    205             // TODO $this->objDownFile->setHiddenFileList($_POST); 
    206  
    207             $this->registerProductClass($objFormParam->getHashArray(), $objFormParam->getValue('product_id'), 
     157            $this->doUploadComplete($objFormParam); 
     158            $this->registerProductClass($objFormParam->getHashArray(), 
     159                                        $objFormParam->getValue('product_id'), 
    208160                                        $objFormParam->getValue('total')); 
    209             // TODO 
    210             // 一時ファイルを本番ディレクトリに移動する 
    211             // $this->objDownFile->moveTempDownFile(); 
    212161            break; 
    213162 
     
    229178        parent::destroy(); 
    230179    } 
     180 
    231181    /** 
    232182     * パラメータ初期化 
     
    255205 
    256206        // 規格プルダウン 
    257         $objFormParam->addParam("規格1", "select_class_id1", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK")); 
    258         $objFormParam->addParam("規格2", "select_class_id2", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK")); 
    259207        $objFormParam->addParam("規格1", "class_id1", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK")); 
    260208        $objFormParam->addParam("規格2", "class_id2", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK")); 
     
    275223        $objFormParam->addParam("商品種別", "product_type_id", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK")); 
    276224        $objFormParam->addParam("削除フラグ", "del_flg", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK")); 
    277         $objFormParam->addParam("DLファイル名", "down_filename", STEXT_LEN, 'KVa', array("MAX_LENGTH_CHECK")); 
    278         $objFormParam->addParam("DLファイル名", "down_realfilename", STEXT_LEN, 'KVa', array("MAX_LENGTH_CHECK")); 
     225        $objFormParam->addParam("ダウンロード販売用ファイル名", "down_filename", STEXT_LEN, 'KVa', array("MAX_LENGTH_CHECK")); 
     226        $objFormParam->addParam("ダウンロード販売用ファイル名", "down_realfilename", STEXT_LEN, 'KVa', array("MAX_LENGTH_CHECK")); 
    279227        $objFormParam->addParam("チェックボックス", "check", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK")); 
    280         $objFormParam->addParam("ファイルアップロード用キー", "down_key", STEXT_LEN, 'KVa', array("MAX_LENGTH_CHECK")); 
    281     } 
    282  
    283     /** 
    284      * Downファイル管理クラスを初期化 
    285      * 
    286      * @param 行数 $count 
    287      * @param SC_FormParam $objDownFile 
    288      */ 
    289     function initDownFile($count, &$objDownFile) { 
    290         $i = 1; 
    291         for ($i = 1; $i < $count; $i++) { 
    292             $objDownFile->addFile("ダウンロード販売用ファイル", 'down_realfilename'. ":" . $i, explode(",", DOWNLOAD_EXTENSION), DOWN_SIZE, true, 0, 0); 
    293         } 
     228        $objFormParam->addParam("ファイルアップロード用キー", "upload_index", STEXT_LEN, 'KVa', array("MAX_LENGTH_CHECK")); 
    294229    } 
    295230 
     
    391326                $arrPC['create_date'] = "now()"; 
    392327                $arrPC['product_class_id'] = $objQuery->nextVal('dtb_products_class_product_class_id'); 
     328                /* 
     329                 * チェックを入れない商品は product_type_id が NULL になるので, 0 を入れる 
     330                 */ 
     331                $arrPC['product_type_id'] = SC_Utils_Ex::isBlank($arrPC['product_type_id']) ? 0 : $arrPC['product_type_id']; 
    393332                $objQuery->insert("dtb_products_class", $arrPC); 
    394333            } 
     
    416355    function lfCheckSelectClass() { 
    417356        $objErr = new SC_CheckError_Ex(); 
    418         $objErr->doFunc(array("規格1", "select_class_id1"), array("EXIST_CHECK")); 
    419         $objErr->doFunc(array("規格", "select_class_id1", "select_class_id2"), array("TOP_EXIST_CHECK")); 
    420         $objErr->doFunc(array("規格1", "規格2", "select_class_id1", "select_class_id2"), array("DIFFERENT_CHECK")); 
     357        $objErr->doFunc(array("規格1", "class_id1"), array("EXIST_CHECK")); 
     358        $objErr->doFunc(array("規格", "class_id1", "select_class_id2"), array("TOP_EXIST_CHECK")); 
     359        $objErr->doFunc(array("規格1", "規格2", "class_id1", "class_id2"), array("DIFFERENT_CHECK")); 
    421360        return $objErr->arrErr; 
    422361    } 
     
    504443    function doDisp(&$objFormParam) { 
    505444        $product_id = $objFormParam->getValue('product_id'); 
    506         $select_class_id1 = $objFormParam->getValue('select_class_id1'); 
    507         $select_class_id2 = $objFormParam->getValue('select_class_id2'); 
     445        $class_id1 = $objFormParam->getValue('class_id1'); 
     446        $class_id2 = $objFormParam->getValue('class_id2'); 
    508447 
    509448        // すべての組み合わせを取得し, フォームに設定 
    510         $arrClassCat = $this->getAllClassCategory($select_class_id1, $select_class_id2); 
     449        $arrClassCat = $this->getAllClassCategory($class_id1, $class_id2); 
    511450        $total = count($arrClassCat); 
    512451        $objFormParam->setValue('total', $total); 
    513452        $objFormParam->setParam(SC_Utils_Ex::sfSwapArray($arrClassCat)); 
    514453 
    515         // class_id1, class_id2 は select_class_id1 で上書き 
    516         $objFormParam->setValue('class_id1', $select_class_id1); 
    517         $objFormParam->setValue('class_id2', $select_class_id2); 
     454        // class_id1, class_id2 を, 入力値で上書き 
     455        $objFormParam->setValue('class_id1', $class_id1); 
     456        $objFormParam->setValue('class_id2', $class_id2); 
    518457 
    519458        // 商品情報を取得し, フォームに設定 
     
    546485        $objFormParam->setValue('class_id1', $class_id1); 
    547486        $objFormParam->setValue('class_id2', $class_id2); 
    548         $objFormParam->setValue('select_class_id1', $class_id1); 
    549         $objFormParam->setValue('select_class_id2', $class_id2); 
    550487        $this->doDisp($objFormParam); 
    551488 
     
    567504        $objFormParam->setValue('check', $arrChecks); 
    568505 
    569         // class_id1, class_id2 を上書き 
     506        // class_id1, class_id2 を取得値で上書き 
    570507        $objFormParam->setValue('class_id1', $class_id1); 
    571508        $objFormParam->setValue('class_id2', $class_id2); 
     
    598535            $objDb = new SC_Helper_DB_Ex(); 
    599536            $objDb->sfCountCategory($objQuery); 
     537        } 
     538    } 
     539 
     540    /** 
     541     * ファイルアップロードを行う. 
     542     * 
     543     * 以下のチェックを行い, ファイルを一時領域へアップロードする. 
     544     * 1. ファイルサイズチェック 
     545     * 2. 拡張子チェック 
     546     * 
     547     * TODO 
     548     * SC_CheckError クラスや, SC_UploadFile クラスが多次元配列に対応して 
     549     * いないため, 独自のロジックを使用している. 
     550     * 
     551     * @param SC_FormParam $objFormParam SC_FormParam インスタンス 
     552     * @return void 
     553     */ 
     554    function doFileUpload(&$objFormParam) { 
     555        $index   = $objFormParam->getValue('upload_index'); 
     556        $arrDownRealFiles = $objFormParam->getValue('down_realfilename'); 
     557 
     558        if ($_FILES['down_realfilename']['size'][$index] <= 0) { 
     559            $this->arrErr['down_realfilename'][$index] = '※ ファイルがアップロードされていません'; 
     560        } else if ($_FILES['down_realfilename']['size'][$index] > DOWN_SIZE *  1024 ) { 
     561            $size = DOWN_SIZE; 
     562            $byte = 'KB'; 
     563            if ($size >= 1000) { 
     564                $size = $size / 1000; 
     565                $byte = 'MB'; 
     566            } 
     567            $this->arrErr['down_realfilename'][$index] = "※ ダウンロード販売用ファイル名のファイルサイズは" . $size . $byte . "以下のものを使用してください。<br />"; 
     568        } else { 
     569            $array_ext = explode(".", $_FILES['down_realfilename']['name'][$index]); 
     570            $is_error = true; 
     571            $strExt = ""; 
     572 
     573            foreach (explode(",", DOWNLOAD_EXTENSION) as $checkExt ) { 
     574                $ext = ""; 
     575                // チェック拡張子のピリオドの数を取得('tar.gz'の場合1個、'jpg'のように通常は0個) 
     576                $count_period = substr_count($checkExt, "."); 
     577                if($count_period > 0) { 
     578                    for ($i = max(array_keys($array_ext)) - $count_period; $i < count($array_ext); $i++) { 
     579                        $ext .= $array_ext[$i] . "."; 
     580                    } 
     581                    $ext = preg_replace("/.$/", "" ,$ext); 
     582                } else { 
     583                    $ext = $array_ext[ count ( $array_ext ) - 1 ]; 
     584                } 
     585                $ext = strtolower($ext); 
     586 
     587                if ($ext == $checkExt) { 
     588                    $is_error = false; 
     589                } 
     590                if($strExt == "") { 
     591                    $strExt .= $checkExt; 
     592                } else { 
     593                    $strExt .= "・$checkExt"; 
     594                } 
     595            } 
     596            if ($is_error) { 
     597                $this->arrErr['down_realfilename'][$index] = "※ ダウンロード販売用ファイル名で許可されている形式は、" . $strExt . "です。<br />"; 
     598            } 
     599 
     600            $uniqname = date('mdHi') . "_" . uniqid("")."."; 
     601            $temp_file = preg_replace("/^.*\./", $uniqname, $_FILES['down_realfilename']['name'][$index]); 
     602 
     603            if (move_uploaded_file($_FILES['down_realfilename']['tmp_name'][$index], DOWN_TEMP_REALDIR . $temp_file)) { 
     604                $arrDownRealFiles[$index] = $temp_file; 
     605                $objFormParam->setValue('down_realfilename', $arrDownRealFiles); 
     606                GC_Utils_Ex::gfPrintLog($_FILES['down_realfilename']['name'][$index] ." -> ". realpath(DOWN_TEMP_REALDIR . $temp_file)); 
     607            } else { 
     608                $objErr->arrErr[$keyname] = '※ ファイルのアップロードに失敗しました。<br />'; 
     609                GC_Utils_Ex::gfPrintLog('File Upload Error!: ' . $_FILES['down_realfilename']['name'][$index] . " -> " . DOWN_TEMP_REALDIR . $temp_file); 
     610            } 
     611        } 
     612    } 
     613 
     614    /** 
     615     * アップロードしたファイルを削除する. 
     616     * 
     617     * TODO 一時ファイルの削除 
     618     * 
     619     * @param SC_FormParam $objFormParam SC_FormParam インスタンス 
     620     * @return void 
     621     */ 
     622    function doFileDelete(&$objFormParam) { 
     623        $objImage = new SC_Image_Ex(DOWN_TEMP_REALDIR); 
     624        $arrRealFileName = $objFormParam->getValue('down_realfilename'); 
     625        $index = $objFormParam->getValue('upload_index'); 
     626        $objImage->deleteImage($arrRealFileName[$index], DOWN_SAVE_REALDIR); 
     627        $arrRealFileName[$index] = ''; 
     628        $objFormParam->setValue('down_realfilename', $arrRealFileName); 
     629    } 
     630 
     631    /** 
     632     * アップロードした一時ファイルを保存する. 
     633     * 
     634     * @param SC_FormParam $objFormParam SC_FormParam インスタンス 
     635     * @return void 
     636     */ 
     637    function doUploadComplete(&$objFormParam) { 
     638        $objImage = new SC_Image_Ex(DOWN_TEMP_REALDIR); 
     639        $arrRealFileName = $objFormParam->getValue('down_realfilename'); 
     640        foreach ($arrRealFileName as $real_file_name) { 
     641            $objImage->moveTempImage($real_file_name, DOWN_SAVE_REALDIR); 
    600642        } 
    601643    } 
Note: See TracChangeset for help on using the changeset viewer.