Changeset 20386


Ignore:
Timestamp:
2011/02/24 19:28:12 (11 years ago)
Author:
kotani
Message:

#973 ([管理画面]商品管理(登録・編集・検索))

  • 商品登録・編集ページ リファクタリング
Location:
branches/version-2_5-dev/data
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_5-dev/data/Smarty/templates/admin/products/confirm.tpl

    r20116 r20386  
    2323*}--> 
    2424<form name="form1" id="form1" method="post" action="?" enctype="multipart/form-data"> 
     25<!--{foreach key=key item=item from=$arrSearchHidden}--> 
     26<input type="hidden" name="<!--{$key}-->" value="<!--{$item|h}-->" /> 
     27<!--{/foreach}--> 
     28<input type="hidden" name="mode" value="complete" /> 
    2529  <!--{foreach key=key item=item from=$arrForm}--> 
    2630    <!--{if $key == 'product_status'}--> 
     
    4448      <th>商品カテゴリ</th> 
    4549      <td> 
    46       <!--{section name=cnt loop=$arrCategory_id}--> 
    47         <!--{assign var=key value=$arrCategory_id[cnt]}--> 
     50      <!--{section name=cnt loop=$arrForm.arrCategoryId}--> 
     51        <!--{assign var=key value=$arrForm.arrCategoryId[cnt]}--> 
    4852        <!--{$arrCatList[$key]|strip|sfTrim}--><br /> 
    4953      <!--{/section}--> 
     
    6569    </tr> 
    6670 
    67     <!--{if $tpl_nonclass == true}--> 
     71    <!--{if $arrForm.has_product_class != true}--> 
    6872    <tr> 
    6973      <th>商品種別</th> 
     
    7377    </tr> 
    7478    <tr> 
    75       <th>ダウンロードファイル名</th> 
     79      <th>ダウンロード商品ファイル名</th> 
    7680      <td> 
    7781      <!--{$arrForm.down_filename|h}--> 
     
    188192      <td> 
    189193      <!--{assign var=key value="main_list_image"}--> 
    190       <!--{if $arrFile[$key].filepath != ""}--> 
    191       <img src="<!--{$arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /><br /> 
     194      <!--{if $arrForm.arrFile[$key].filepath != ""}--> 
     195      <img src="<!--{$arrForm.arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /><br /> 
    192196      <!--{/if}--> 
    193197      </td> 
     
    197201      <td> 
    198202      <!--{assign var=key value="main_image"}--> 
    199       <!--{if $arrFile[$key].filepath != ""}--> 
    200       <img src="<!--{$arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /><br /> 
     203      <!--{if $arrForm.arrFile[$key].filepath != ""}--> 
     204      <img src="<!--{$arrForm.arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /><br /> 
    201205      <!--{/if}--> 
    202206      </td> 
     
    206210      <td> 
    207211      <!--{assign var=key value="main_large_image"}--> 
    208       <!--{if $arrFile[$key].filepath != ""}--> 
    209       <img src="<!--{$arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /><br /> 
     212      <!--{if $arrForm.arrFile[$key].filepath != ""}--> 
     213      <img src="<!--{$arrForm.arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /><br /> 
    210214      <!--{/if}--> 
    211215      </td> 
     
    237241      <td> 
    238242      <!--{assign var=key value="sub_image`$smarty.section.cnt.iteration`"}--> 
    239       <!--{if $arrFile[$key].filepath != ""}--> 
    240       <img src="<!--{$arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /><br /> 
     243      <!--{if $arrForm.arrFile[$key].filepath != ""}--> 
     244      <img src="<!--{$arrForm.arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /><br /> 
    241245      <!--{/if}--> 
    242246      </td> 
     
    246250      <td> 
    247251      <!--{assign var=key value="sub_large_image`$smarty.section.cnt.iteration`"}--> 
    248       <!--{if $arrFile[$key].filepath != ""}--> 
    249       <img src="<!--{$arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /><br /> 
     252      <!--{if $arrForm.arrFile[$key].filepath != ""}--> 
     253      <img src="<!--{$arrForm.arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /><br /> 
    250254      <!--{/if}--> 
    251255      </td> 
  • branches/version-2_5-dev/data/Smarty/templates/admin/products/product.tpl

    r20116 r20386  
    2323*}--> 
    2424<script type="text/javascript"> 
    25 // URLの表示非表示切り替え 
     25// 表示非表示切り替え 
    2626function lfDispSwitch(id){ 
    2727  var obj = document.getElementById(id); 
     
    6969<input type="hidden" name="copy_product_id" value="<!--{$arrForm.copy_product_id}-->" /> 
    7070<input type="hidden" name="anchor_key" value="" /> 
    71 <!--{foreach key=key item=item from=$arrHidden}--> 
     71<input type="hidden" name="has_product_class" value="<!--{$arrForm.has_product_class|h}-->" /> 
     72<!--{foreach key=key item=item from=$arrForm.arrHidden}--> 
    7273<input type="hidden" name="<!--{$key}-->" value="<!--{$item|h}-->" /> 
    7374<!--{/foreach}--> 
     
    123124      </td> 
    124125    </tr> 
    125     <!--{if $tpl_nonclass == true}--> 
     126    <!--{if $arrForm.has_product_class == false}--> 
    126127    <tr> 
    127128      <th>商品種別<span class="attention"> *</span></th> 
     
    131132    </tr> 
    132133    <tr> 
    133       <th>ダウンロードファイル名<span class="attention"> *</span></th> 
     134      <th>ダウンロード商品ファイル名<span class="attention"> *</span></th> 
    134135      <td> 
    135136        <span class="attention"><!--{$arrErr.down_filename}--></span> 
     
    140141    <tr> 
    141142      <!--{assign var=key value="down_file"}--> 
    142       <th>ダウンロード商品用ファイルアップロード<span class="attention"> *</span></th> 
    143       <td> 
     143      <th>ダウンロード商品用<br />ファイルアップロード<span class="attention"> *</span></th> 
     144      <td> 
     145        <a name="<!--{$key}-->"></a> 
    144146        <span class="attention"><!--{$arrErr[$key]}--><!--{$arrErr.down_realfilename}--></span> 
    145147          <!--{if $arrForm.down_realfilename != ""}--> 
     
    198200      <td> 
    199201        <span class="attention"><!--{$arrErr.point_rate}--></span> 
    200         <input type="text" name="point_rate" value="<!--{$arrForm.point_rate|default:$arrInfo.point_rate|h}-->" size="6" class="box6" maxlength="<!--{$smarty.const.PERCENTAGE_LEN}-->" style="<!--{if $arrErr.point_rate != ""}-->background-color: <!--{$smarty.const.ERR_COLOR}-->;<!--{/if}-->"/>% 
     202        <input type="text" name="point_rate" value="<!--{$arrForm.point_rate|default:$arrForm.arrInfo.point_rate|h}-->" size="6" class="box6" maxlength="<!--{$smarty.const.PERCENTAGE_LEN}-->" style="<!--{if $arrErr.point_rate != ""}-->background-color: <!--{$smarty.const.ERR_COLOR}-->;<!--{/if}-->"/>% 
    201203        <span class="attention"> (半角数字で入力)</span> 
    202204      </td> 
     
    278280        <a name="main_large_image"></a> 
    279281        <span class="attention"><!--{$arrErr[$key]}--></span> 
    280         <!--{if $arrFile[$key].filepath != ""}--> 
    281         <img src="<!--{$arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /> <a href="" onclick="selectAll('category_id'); fnModeSubmit('delete_image', 'image_key', '<!--{$key}-->'); return false;">[画像の取り消し]</a><br /> 
     282        <!--{if $arrForm.arrFile[$key].filepath != ""}--> 
     283        <img src="<!--{$arrForm.arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /> <a href="" onclick="selectAll('category_id'); fnModeSubmit('delete_image', 'image_key', '<!--{$key}-->'); return false;">[画像の取り消し]</a><br /> 
    282284        <!--{/if}--> 
    283285        <input type="file" name="main_list_image" size="40" style="<!--{$arrErr[$key]|sfGetErrorColor}-->" /> 
     
    290292      <td> 
    291293        <span class="attention"><!--{$arrErr[$key]}--></span> 
    292         <!--{if $arrFile[$key].filepath != ""}--> 
    293         <img src="<!--{$arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /> <a href="" onclick="selectAll('category_id'); fnModeSubmit('delete_image', 'image_key', '<!--{$key}-->'); return false;">[画像の取り消し]</a><br /> 
     294        <!--{if $arrForm.arrFile[$key].filepath != ""}--> 
     295        <img src="<!--{$arrForm.arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /> <a href="" onclick="selectAll('category_id'); fnModeSubmit('delete_image', 'image_key', '<!--{$key}-->'); return false;">[画像の取り消し]</a><br /> 
    294296        <!--{/if}--> 
    295297        <input type="file" name="main_image" size="40" style="<!--{$arrErr[$key]|sfGetErrorColor}-->" /> 
     
    302304      <td> 
    303305        <span class="attention"><!--{$arrErr[$key]}--></span> 
    304         <!--{if $arrFile[$key].filepath != ""}--> 
    305         <img src="<!--{$arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /> <a href="" onclick="selectAll('category_id'); fnModeSubmit('delete_image', 'image_key', '<!--{$key}-->'); return false;">[画像の取り消し]</a><br /> 
     306        <!--{if $arrForm.arrFile[$key].filepath != ""}--> 
     307        <img src="<!--{$arrForm.arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /> <a href="" onclick="selectAll('category_id'); fnModeSubmit('delete_image', 'image_key', '<!--{$key}-->'); return false;">[画像の取り消し]</a><br /> 
    306308        <!--{/if}--> 
    307309        <input type="file" name="<!--{$key}-->" size="40" style="<!--{$arrErr[$key]|sfGetErrorColor}-->" /> 
     
    320322  </div> 
    321323 
    322   <!--{if $sub_find == true}--> 
     324  <!--{if $arrForm.sub_find == true}--> 
    323325  <div id="sub_detail" style=""> 
    324326  <!--{else}--> 
     
    355357        <a name="<!--{$largekey}-->"></a> 
    356358        <span class="attention"><!--{$arrErr[$key]}--></span> 
    357         <!--{if $arrFile[$key].filepath != ""}--> 
    358         <img src="<!--{$arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /> <a href="" onclick="selectAll('category_id'); fnModeSubmit('delete_image', 'image_key', '<!--{$key}-->'); return false;">[画像の取り消し]</a><br /> 
     359        <!--{if $arrForm.arrFile[$key].filepath != ""}--> 
     360        <img src="<!--{$arrForm.arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /> <a href="" onclick="selectAll('category_id'); fnModeSubmit('delete_image', 'image_key', '<!--{$key}-->'); return false;">[画像の取り消し]</a><br /> 
    359361        <!--{/if}--> 
    360362        <input type="file" name="<!--{$key}-->" size="40" style="<!--{$arrErr[$key]|sfGetErrorColor}-->"/> 
     
    367369      <td> 
    368370        <span class="attention"><!--{$arrErr[$key]}--></span> 
    369         <!--{if $arrFile[$key].filepath != ""}--> 
    370         <img src="<!--{$arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /> <a href="" onclick="selectAll('category_id'); fnModeSubmit('delete_image', 'image_key', '<!--{$key}-->'); return false;">[画像の取り消し]</a><br /> 
     371        <!--{if $arrForm.arrFile[$key].filepath != ""}--> 
     372        <img src="<!--{$arrForm.arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /> <a href="" onclick="selectAll('category_id'); fnModeSubmit('delete_image', 'image_key', '<!--{$key}-->'); return false;">[画像の取り消し]</a><br /> 
    371373        <!--{/if}--> 
    372374        <input type="file" name="<!--{$key}-->" size="40" style="<!--{$arrErr[$key]|sfGetErrorColor}-->"/> 
     
    383385  </div> 
    384386 
     387  <!--{if $smarty.const.OPTION_RECOMMEND == 1}--> 
    385388  <!--{if count($arrRecommend) > 0}--> 
    386389  <div id="recommend_select" style=""> 
     
    390393  <h2>関連商品</h2> 
    391394  <table class="form"> 
    392     <!--{if $smarty.const.OPTION_RECOMMEND == 1}--> 
    393395    <!--▼関連商品--> 
    394396    <!--{section name=cnt loop=$smarty.const.RECOMMEND_PRODUCT_MAX}--> 
     
    418420    <!--{/section}--> 
    419421    <!--▲関連商品--> 
    420     <!--{/if}--> 
    421422  </table> 
    422423  </div> 
     424  <!--{/if}--> 
    423425 
    424426  <div class="btn-area"> 
  • branches/version-2_5-dev/data/class/SC_Product.php

    r20148 r20386  
    531531        $objQuery->delete('dtb_product_status', 'product_id = ?', array($productId)); 
    532532        foreach ($productStatusIds as $productStatusId) { 
     533            if($productStatusId == '') continue; 
    533534            $val['product_status_id'] = $productStatusId; 
    534535            $objQuery->insert('dtb_product_status', $val); 
  • branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php

    r20345 r20386  
    2323 
    2424// {{{ requires 
    25 require_once(CLASS_EX_REALDIR . "page_extends/admin/LC_Page_Admin_Ex.php"); 
     25require_once(CLASS_EX_REALDIR . "page_extends/admin/products/LC_Page_Admin_Products_Ex.php"); 
    2626 
    2727/** 
     
    3232 * @version $Id$ 
    3333 */ 
    34 class LC_Page_Admin_Products_Product extends LC_Page_Admin_Ex { 
    35  
    36     // {{{ properties 
    37  
    38     /** ファイル管理クラスのインスタンス */ 
    39     var $objUpFile; 
    40  
    41     /** ダウンロード用ファイル管理クラスのインスタンス */ 
    42     var $objDownFile; 
    43  
    44     /** hidden 項目の配列 */ 
    45     var $arrHidden; 
    46  
    47     /** エラー情報 */ 
    48     var $arrErr; 
     34class LC_Page_Admin_Products_Product extends LC_Page_Admin_Products_Ex { 
    4935 
    5036    // }}} 
     
    6349        $this->tpl_subno = 'product'; 
    6450        $this->tpl_subtitle = '商品登録'; 
    65         $this->arrErr = array(); 
    6651 
    6752        $masterData = new SC_DB_MasterData_Ex(); 
     53        $this->arrProductType = $masterData->getMasterData("mtb_product_type"); 
    6854        $this->arrDISP = $masterData->getMasterData("mtb_disp"); 
    6955        $this->arrCLASS = $masterData->getMasterData("mtb_class"); 
     
    7157        $this->arrSTATUS_IMAGE = $masterData->getMasterData("mtb_status_image"); 
    7258        $this->arrDELIVERYDATE = $masterData->getMasterData("mtb_delivery_date"); 
     59        $this->arrMaker = SC_Helper_DB_Ex::sfGetIDValueList("dtb_maker", "maker_id", "name"); 
    7360        $this->arrAllowedTag = $masterData->getMasterData("mtb_allowed_tag"); 
    74         $this->arrProductType = $masterData->getMasterData("mtb_product_type"); 
    75         $this->arrMaker = SC_Helper_DB_Ex::sfGetIDValueList("dtb_maker", "maker_id", "name"); 
    76         $this->tpl_nonclass = true; 
    7761    } 
    7862 
     
    9377     */ 
    9478    function action() { 
    95         $objSiteInfo = new SC_SiteInfo(); 
    96         $objQuery = new SC_Query(); 
    97         $objDb = new SC_Helper_DB_Ex(); 
    98         $objProduct = new SC_Product(); 
    99  
    100         // Downファイル管理クラス 
    101         $this->objDownFile = new SC_UploadFile(DOWN_TEMP_REALDIR, DOWN_SAVE_REALDIR); 
    102         // Downファイル情報の初期化 
    103         $this->lfInitDownFile(); 
    104         // Hiddenからのデータを引き継ぐ 
    105         $this->objDownFile->setHiddenFileList($_POST); 
    106  
    107         // ファイル管理クラス 
    108         $this->objUpFile = new SC_UploadFile(IMAGE_TEMP_REALDIR, IMAGE_SAVE_REALDIR); 
    109  
    110         // ファイル情報の初期化 
    111         $this->lfInitFile(); 
    112         // Hiddenからのデータを引き継ぐ 
    113         $this->objUpFile->setHiddenFileList($_POST); 
    114  
    115         // 規格の有り無し判定 
    116         $this->tpl_nonclass = !$objDb->sfHasProductClass($_POST['product_id']); 
    117  
    118         // 検索パラメータの引き継ぎ 
    119         foreach ($_POST as $key => $val) { 
    120             if (ereg("^search_", $key)) { 
    121                 $this->arrSearchHidden[$key] = $val; 
    122             } 
    123         } 
    124  
    125         // FORMデータの引き継ぎ 
    126         $this->arrForm = $_POST; 
    127  
    128         switch($this->getMode()) { 
    129             // 検索画面からの編集 
    130             case 'pre_edit': 
    131             case 'copy' : 
    132                 if (!SC_Utils_Ex::sfIsInt($_POST['product_id'])) { 
    133                     SC_Utils_Ex::sfDispException(); 
    134                 } 
    135  
    136                 // DBから商品情報の読込 
    137                 $this->arrForm = $this->lfGetProduct($_POST['product_id']); 
    138                 $productStatus= $objProduct->getProductStatus(array($_POST['product_id'])); 
    139                 $this->arrForm['product_status'] = $productStatus[$_POST['product_id']]; 
    140  
    141                 // DBデータから画像ファイル名の読込 
    142                 $this->objUpFile->setDBFileList($this->arrForm); 
    143                 // DBデータからダウンロードファイル名の読込 
    144                 $this->objDownFile->setDBDownFile($this->arrForm); 
    145  
    146                 // 商品ステータスの変換 
    147                 $arrRet = SC_Utils_Ex::sfSplitCBValue($this->arrForm['product_flag'], "product_flag"); 
    148                 $this->arrForm = array_merge($this->arrForm, $arrRet); 
    149                 // DBから関連商品の読み込み 
    150                 $this->lfPreGetRecommendProducts($_POST['product_id']); 
    151  
    152                 $this->lfProductPage();     // 商品登録ページ 
    153                 //TODO 要リファクタリング(MODE if利用) 
    154                 if($this->getMode() == "copy"){ 
    155                     $this->arrForm["copy_product_id"] = $this->arrForm["product_id"]; 
    156                     $this->arrForm["product_id"] = ""; 
    157                     // 画像ファイルのコピー 
    158                     $arrKey = $this->objUpFile->keyname; 
    159                     $arrSaveFile = $this->objUpFile->save_file; 
    160  
    161                     foreach($arrSaveFile as $key => $val){ 
    162                         $this->lfMakeScaleImage($arrKey[$key], $arrKey[$key], true); 
    163                     } 
     79        $objFormParam = new SC_FormParam(); 
     80 
     81        // アップロードファイル情報の初期化 
     82        $objUpFile = new SC_UploadFile(IMAGE_TEMP_REALDIR, IMAGE_SAVE_REALDIR); 
     83        $this->lfInitFile($objUpFile); 
     84        $objUpFile->setHiddenFileList($_POST); 
     85 
     86        // ダウンロード販売ファイル情報の初期化 
     87        $objDownFile = new SC_UploadFile(DOWN_TEMP_REALDIR, DOWN_SAVE_REALDIR); 
     88        $this->lfInitDownFile($objDownFile); 
     89        $objDownFile->setHiddenFileList($_POST); 
     90 
     91        // 検索パラメータ引き継ぎ 
     92        $this->arrSearchHidden = $this->lfGetSearchParam($_POST); 
     93 
     94        $mode = $this->getMode(); 
     95        switch($mode) { 
     96        case 'pre_edit': 
     97        case 'copy' : 
     98            // パラメータ初期化(商品ID) 
     99            $this->lfInitFormParam_PreEdit($objFormParam, $_POST); 
     100            // エラーチェック 
     101            $this->arrErr = $objFormParam->checkError(); 
     102            if(count($this->arrErr) > 0) { 
     103                SC_Utils_Ex::sfDispException(); 
     104            } 
     105 
     106            // 商品ID取得 
     107            $product_id = $objFormParam->getValue('product_id'); 
     108            // 商品データ取得 
     109            $arrForm = $this->lfGetFormParam_PreEdit($objUpFile, $objDownFile, $product_id); 
     110            // ページ表示用パラメータ設定 
     111            $this->arrForm = $this->lfSetViewParam_InputPage($objUpFile, $objDownFile, $arrForm); 
     112 
     113            // 商品複製の場合、画像ファイルコピー 
     114            if($mode == "copy") { 
     115                $this->arrForm["copy_product_id"] = $this->arrForm["product_id"]; 
     116                $this->arrForm["product_id"] = ""; 
     117                // 画像ファイルのコピー 
     118                $this->lfCopyProductImageFiles($objUpFile); 
     119            } 
     120 
     121            // ページonload時のJavaScript設定 
     122            $this->tpl_onload = $this->lfSetOnloadJavaScript_InputPage(); 
     123            break; 
     124 
     125        case 'edit': 
     126            // パラメータ初期化, 取得 
     127            $this->lfInitFormParam($objFormParam, $_POST); 
     128            $arrForm = $objFormParam->getHashArray(); 
     129            // エラーチェック 
     130            $this->arrErr = $this->lfCheckError_Edit($objFormParam, $objUpFile, $objDownFile, $arrForm); 
     131            if(count($this->arrErr) == 0) { 
     132                // 確認画面表示設定 
     133                $this->tpl_mainpage = 'products/confirm.tpl'; 
     134                $this->arrCatList = $this->lfGetCategoryList_Edit(); 
     135                $this->arrForm = $this->lfSetViewParam_ConfirmPage($objUpFile, $objDownFile, $arrForm); 
     136            } else { 
     137                // 入力画面表示設定 
     138                $this->arrForm = $this->lfSetViewParam_InputPage($objUpFile, $objDownFile, $arrForm); 
     139                // ページonload時のJavaScript設定 
     140                $this->tpl_onload = $this->lfSetOnloadJavaScript_InputPage(); 
     141            } 
     142            break; 
     143 
     144        case 'complete': 
     145            // パラメータ初期化, 取得 
     146            $this->lfInitFormParam($objFormParam, $_POST); 
     147            $arrForm = $this->lfGetFormParam_Complete($objFormParam); 
     148            // エラーチェック 
     149            $this->arrErr = $this->lfCheckError_Edit($objFormParam, $objUpFile, $objDownFile, $arrForm); 
     150            if(count($this->arrErr) == 0) { 
     151                // DBへデータ登録 
     152                $product_id = $this->lfRegistProduct($objUpFile, $objDownFile, $arrForm); 
     153 
     154                // 件数カウントバッチ実行 
     155                $objQuery =& SC_Query::getSingletonInstance(); 
     156                $objDb = new SC_Helper_DB_Ex(); 
     157                $objDb->sfCountCategory($objQuery); 
     158                $objDb->sfCountMaker($objQuery); 
     159 
     160                // 一時ファイルを本番ディレクトリに移動する 
     161                $this->lfSaveUploadFiles($objUpFile, $objDownFile, $product_id); 
     162 
     163                $this->tpl_mainpage = 'products/complete.tpl'; 
     164                $this->arrForm['product_id'] = $product_id; 
     165            } else { 
     166                // 入力画面表示設定 
     167                $this->arrForm = $this->lfSetViewParam_InputPage($objUpFile, $objDownFile, $arrForm); 
     168                // ページonload時のJavaScript設定 
     169                $this->tpl_onload = $this->lfSetOnloadJavaScript_InputPage(); 
     170            } 
     171            break; 
     172 
     173        // 画像のアップロード 
     174        case 'upload_image': 
     175        case 'delete_image': 
     176            // パラメータ初期化 
     177            $this->lfInitFormParam_UploadImage($objFormParam); 
     178            $this->lfInitFormParam($objFormParam, $_POST); 
     179            $arrForm = $objFormParam->getHashArray(); 
     180 
     181            switch($mode) { 
     182            case 'upload_image': 
     183                // ファイルを一時ディレクトリにアップロード 
     184                $this->arrErr[$arrForm['image_key']] = $objUpFile->makeTempFile($arrForm['image_key'], IMAGE_RENAME); 
     185                if($this->arrErr[$arrForm['image_key']] == "") { 
     186                    // 縮小画像作成 
     187                    $this->lfSetScaleImage($objUpFile, $arrForm['image_key']); 
    164188                } 
    165189                break; 
    166             // 商品登録・編集 
    167             case 'edit': 
    168                 if($_POST['product_id'] == "" and SC_Utils_Ex::sfIsInt($_POST['copy_product_id'])){ 
    169                     $this->tpl_nonclass = !$objDb->sfHasProductClass($_POST['copy_product_id']); 
    170                 } 
    171  
    172                 // 入力値の変換 
    173                 $this->arrForm = $this->lfConvertParam($this->arrForm); 
    174                 // エラーチェック 
    175                 $this->arrErr = $this->lfErrorCheck($this->arrForm); 
    176                 // ファイル存在チェック 
    177                 $this->arrErr = array_merge((array)$this->arrErr, (array)$this->objUpFile->checkEXISTS()); 
    178                 // エラーなしの場合 
    179                 if(count($this->arrErr) == 0) { 
    180                     $this->lfProductConfirmPage(); // 確認ページ 
    181                 } else { 
    182                     $this->lfProductPage();     // 商品登録ページ 
    183                 } 
     190            case 'delete_image': 
     191                // ファイル削除 
     192                $this->lfDeleteTempFile($objUpFile, $arrForm['image_key']); 
    184193                break; 
    185             // 確認ページから完了ページへ 
    186             case 'complete': 
    187                 $this->tpl_mainpage = 'products/complete.tpl'; 
    188  
    189                 $this->arrForm['product_id'] = $this->lfRegistProduct($_POST);      // データ登録 
    190  
    191                 // 件数カウントバッチ実行 
    192                 $objDb->sfCountCategory($objQuery); 
    193                 $objDb->sfCountMaker($objQuery); 
    194                 // 一時ファイルを本番ディレクトリに移動する 
    195                 // TODO: SC_UploadFile::moveTempFileの画像削除条件見直し要 
    196                 $objImage = new SC_Image($this->objUpFile->temp_dir); 
    197                 $arrKeyName = $this->objUpFile->keyname; 
    198                 $arrTempFile = $this->objUpFile->temp_file; 
    199                 $arrSaveFile = $this->objUpFile->save_file; 
    200                 $arrImageKey = array(); 
    201                 foreach ($arrTempFile as $key => $temp_file) { 
    202                     if ($temp_file) { 
    203                         $objImage->moveTempImage($temp_file, $this->objUpFile->save_dir); 
    204                         $arrImageKey[] = $arrKeyName[$key]; 
    205                         if (!empty($arrSaveFile[$key]) && !$this->lfHasSameProductImage($this->arrForm['product_id'], $arrImageKey, $arrSaveFile[$key]) && !in_array($temp_file, $arrSaveFile)) { 
    206                             $objImage->deleteImage($arrSaveFile[$key], $this->objUpFile->save_dir); 
    207                         } 
    208                     } 
    209                 } 
    210                 $this->objDownFile->moveTempDownFile(); 
    211  
     194            } 
     195 
     196            // 入力画面表示設定 
     197            $this->arrForm = $this->lfSetViewParam_InputPage($objUpFile, $objDownFile, $arrForm); 
     198            // ページonload時のJavaScript設定 
     199            $anchor_hash = $this->getAnchorHash($arrForm['image_key']); 
     200            $this->tpl_onload = $this->lfSetOnloadJavaScript_InputPage($anchor_hash); 
     201            break; 
     202 
     203        // ダウンロード商品ファイルアップロード 
     204        case 'upload_down': 
     205        case 'delete_down': 
     206            // パラメータ初期化 
     207            $this->lfInitFormParam_UploadDown($objFormParam); 
     208            $this->lfInitFormParam($objFormParam, $_POST); 
     209            $arrForm = $objFormParam->getHashArray(); 
     210 
     211            switch($mode) { 
     212            case 'upload_down': 
     213                // ファイルを一時ディレクトリにアップロード 
     214                $this->arrErr[$arrForm['down_key']] = $objDownFile->makeTempDownFile(); 
    212215                break; 
    213             // 画像のアップロード 
    214             case 'upload_image': 
    215                 // ファイル存在チェック 
    216                 $this->arrErr = array_merge((array)$this->arrErr, (array)$this->objUpFile->checkEXISTS($_POST['image_key'])); 
    217                 // 画像保存処理 
    218                 $this->arrErr[$_POST['image_key']] = $this->objUpFile->makeTempFile($_POST['image_key'],IMAGE_RENAME); 
    219  
    220                 // 中、小画像生成 
    221                 $this->lfSetScaleImage(); 
    222  
    223                 $this->lfProductPage(); // 商品登録ページ 
     216            case 'delete_down': 
     217                // ファイル削除 
     218                $objDownFile->deleteFile($arrForm['down_key']); 
    224219                break; 
    225             // 画像の削除 
    226             case 'delete_image': 
    227                 // TODO: SC_UploadFile::deleteFileの画像削除条件見直し要 
    228                 $arrTempFile = $this->objUpFile->temp_file; 
    229                 $arrKeyName = $this->objUpFile->keyname; 
    230                 foreach ($arrKeyName as $key => $keyname) { 
    231                     if ($keyname != $_POST['image_key']) continue; 
    232                     if (!empty($arrTempFile[$key])) { 
    233                         $temp_file = $arrTempFile[$key]; 
    234                         $arrTempFile[$key] = ''; 
    235                         if (!in_array($temp_file, $arrTempFile)) { 
    236                             $this->objUpFile->deleteFile($_POST['image_key']); 
    237                         } else { 
    238                             $this->objUpFile->temp_file[$key] = ''; 
    239                             $this->objUpFile->save_file[$key] = ''; 
    240                         } 
    241                     } else { 
    242                         $this->objUpFile->temp_file[$key] = ''; 
    243                         $this->objUpFile->save_file[$key] = ''; 
    244                     } 
    245                 } 
    246                 $this->lfProductPage(); // 商品登録ページ 
    247                 break; 
    248             // ダウンロード商品ファイルアップロード 
    249             case 'upload_down': 
    250                 // ファイル存在チェック 
    251                 $this->arrErr = array_merge((array)$this->arrErr, (array)$this->objDownFile->checkEXISTS($_POST['down_key'])); 
    252                 // 画像保存処理 
    253                 $this->arrErr[$_POST['down_key']] = $this->objDownFile->makeTempDownFile(); 
    254  
    255                 $this->lfProductPage(); // 商品登録ページ 
    256                 break; 
    257             // ダウンロードファイルの削除 
    258             case 'delete_down': 
    259                 $this->objDownFile->deleteFile($_POST['down_key']); 
    260                 $this->lfProductPage(); // 商品登録ページ 
    261                 break; 
    262             // 確認ページからの戻り 
    263             case 'confirm_return': 
    264                 $this->lfProductPage();     // 商品登録ページ 
    265                 break; 
    266             // 関連商品選択 
    267             case 'recommend_select' : 
    268                 $this->lfProductPage();     // 商品登録ページ 
    269                 break; 
    270             default: 
    271                 $this->lfProductPage();     // 商品登録ページ 
    272                 break; 
     220            } 
     221 
     222            // 入力画面表示設定 
     223            $this->arrForm = $this->lfSetViewParam_InputPage($objUpFile, $objDownFile, $arrForm); 
     224            // ページonload時のJavaScript設定 
     225            $anchor_hash = $this->getAnchorHash($arrForm['down_key']); 
     226            $this->tpl_onload = $this->lfSetOnloadJavaScript_InputPage($anchor_hash); 
     227            break; 
     228 
     229        // 関連商品選択 
     230        case 'recommend_select' : 
     231            // パラメータ初期化 
     232            $this->lfInitFormParam_RecommendSelect($objFormParam); 
     233            $this->lfInitFormParam($objFormParam, $_POST); 
     234            $arrForm = $objFormParam->getHashArray(); 
     235            // 入力画面表示設定 
     236            $this->arrForm = $this->lfSetViewParam_InputPage($objUpFile, $objDownFile, $arrForm); 
     237            // ページonload時のJavaScript設定 
     238            $anchor_hash = $this->getAnchorHash($arrForm['anchor_key']); 
     239            $this->tpl_onload = $this->lfSetOnloadJavaScript_InputPage($anchor_hash); 
     240            break; 
     241 
     242        // 確認ページからの戻り 
     243        case 'confirm_return': 
     244            // パラメータ初期化 
     245            $this->lfInitFormParam($objFormParam, $_POST); 
     246            $arrForm = $objFormParam->getHashArray(); 
     247            // 入力画面表示設定 
     248            $this->arrForm = $this->lfSetViewParam_InputPage($objUpFile, $objDownFile, $arrForm); 
     249            // ページonload時のJavaScript設定 
     250            $this->tpl_onload = $this->lfSetOnloadJavaScript_InputPage(); 
     251            break; 
     252 
     253        default: 
     254            // 入力画面表示設定 
     255            $arrForm = array(); 
     256            $this->arrForm = $this->lfSetViewParam_InputPage($objUpFile, $objDownFile, $arrForm); 
     257            // ページonload時のJavaScript設定 
     258            $this->tpl_onload = $this->lfSetOnloadJavaScript_InputPage(); 
     259            break; 
    273260        } 
    274261 
    275262        // 関連商品の読み込み 
    276         $this->arrRecommend = $this->lfGetRecommendProducts(); 
    277  
    278         // 基本情報を渡す 
    279         $this->arrInfo = $objSiteInfo->data; 
    280  
    281         // サブ情報の入力があるかどうかチェックする 
    282         $sub_find = false; 
    283         for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 
    284             if( (isset($this->arrForm['sub_title'.$cnt]) 
    285             && !empty($this->arrForm['sub_title'.$cnt])) || 
    286             (isset($this->arrForm['sub_comment'.$cnt]) 
    287             && !empty($this->arrForm['sub_comment'.$cnt])) || 
    288             (isset($this->arrForm['sub_image'.$cnt]) 
    289             && !empty($this->arrForm['sub_image'.$cnt])) || 
    290             (isset($this->arrForm['sub_large_image'.$cnt]) 
    291             && !empty($this->arrForm['sub_large_image'.$cnt])) || 
    292             (isset($this->arrForm['sub_image'.$cnt]) 
    293             && is_array($this->arrFile['sub_image'.$cnt])) || 
    294             (isset($this->arrForm['sub_large_image'.$cnt]) 
    295             && is_array($this->arrFile['sub_large_image'.$cnt]))) { 
    296                 $sub_find = true; 
    297                 break; 
    298             } 
    299         } 
    300  
    301         // サブ情報表示・非表示のチェックに使用する。 
    302         $this->sub_find = $sub_find; 
     263        $this->arrRecommend = $this->lfGetRecommendProducts($this->arrForm); 
    303264    } 
    304265 
     
    313274 
    314275    /** 
    315      * 関連商品の名称などを商品マスタから読み込み、一つの配列にまとめて返す 
    316      * 
    317      * @return array 関連商品の情報を格納した2次元配列 
    318      */ 
    319     function lfGetRecommendProducts() { 
     276     * パラメータ情報の初期化 
     277     * - 編集/複製モード 
     278     * 
     279     * @param object $objFormParam SC_FormParamインスタンス 
     280     * @param array $arrPost $_POSTデータ 
     281     * @return void 
     282     */ 
     283    function lfInitFormParam_PreEdit(&$objFormParam, $arrPost) { 
     284        $objFormParam->addParam("商品ID", "product_id", INT_LEN, "n", array("NUM_CHECK", "MAX_LENGTH_CHECK")); 
     285        $objFormParam->setParam($arrPost); 
     286        $objFormParam->convParam(); 
     287    } 
     288 
     289    /** 
     290     * パラメータ情報の初期化 
     291     * 
     292     * @param object $objFormParam SC_FormParamインスタンス 
     293     * @param array $arrPost $_POSTデータ 
     294     * @return void 
     295     */ 
     296    function lfInitFormParam(&$objFormParam, $arrPost) { 
     297        $objFormParam->addParam("商品ID", "product_id", INT_LEN, "n", array("NUM_CHECK", "MAX_LENGTH_CHECK")); 
     298        $objFormParam->addParam("商品名", "name", STEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
     299        $objFormParam->addParam("商品カテゴリ", "category_id", INT_LEN, "n", array("EXIST_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 
     300        $objFormParam->addParam("公開・非公開", "status", INT_LEN, "n", array("EXIST_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 
     301        $objFormParam->addParam("商品ステータス", "product_status", INT_LEN, "n", array("NUM_CHECK", "MAX_LENGTH_CHECK")); 
     302 
     303        if($this->lfGetProductClassFlag($arrPost['has_product_class']) == false) { 
     304            // 新規登録, 規格なし商品の編集の場合 
     305            $objFormParam->addParam("商品種別", "product_type_id", INT_LEN, "n", array("EXIST_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 
     306            $objFormParam->addParam("ダウンロード商品ファイル名", "down_filename", STEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
     307            $objFormParam->addParam("ダウンロード商品実ファイル名", "down_realfilename", MTEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
     308            $objFormParam->addParam("temp_down_file", "temp_down_file", '', "", array()); 
     309            $objFormParam->addParam("save_down_file", "save_down_file", '', "", array()); 
     310            $objFormParam->addParam("商品コード", "product_code", STEXT_LEN, "KVna", array("EXIST_CHECK", "SPTAB_CHECK","MAX_LENGTH_CHECK")); 
     311            $objFormParam->addParam(NORMAL_PRICE_TITLE, "price01", PRICE_LEN, "n", array("NUM_CHECK", "MAX_LENGTH_CHECK")); 
     312            $objFormParam->addParam(SALE_PRICE_TITLE, "price02", PRICE_LEN, "n", array("EXIST_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 
     313            $objFormParam->addParam("在庫数", "stock", AMOUNT_LEN, "n", array("SPTAB_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 
     314            $objFormParam->addParam("在庫無制限", "stock_unlimited", INT_LEN, "n", array("SPTAB_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 
     315        } 
     316        $objFormParam->addParam("商品送料", "deliv_fee", PRICE_LEN, "n", array("NUM_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
     317        $objFormParam->addParam("ポイント付与率", "point_rate", PERCENTAGE_LEN, "n", array("EXIST_CHECK", "NUM_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
     318        $objFormParam->addParam("発送日目安", "deliv_date_id", INT_LEN, "n", array("NUM_CHECK")); 
     319        $objFormParam->addParam("購入制限", "sale_limit", AMOUNT_LEN, "n", array("SPTAB_CHECK", "ZERO_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 
     320        $objFormParam->addParam("メーカー", "maker_id", INT_LEN, "n", array("NUM_CHECK")); 
     321        $objFormParam->addParam("メーカーURL", "comment1", URL_LEN, "a", array("SPTAB_CHECK", "URL_CHECK", "MAX_LENGTH_CHECK")); 
     322        $objFormParam->addParam("検索ワード", "comment3", LLTEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
     323        $objFormParam->addParam("備考欄(SHOP専用)", "note", LLTEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
     324        $objFormParam->addParam("一覧-メインコメント", "main_list_comment", MTEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
     325        $objFormParam->addParam("詳細-メインコメント", "main_comment", LLTEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
     326        $objFormParam->addParam("save_main_list_image", "save_main_list_image", '', "", array()); 
     327        $objFormParam->addParam("save_main_image", "save_main_image", '', "", array()); 
     328        $objFormParam->addParam("save_main_large_image", "save_main_large_image", '', "", array()); 
     329        $objFormParam->addParam("temp_main_list_image", "temp_main_list_image", '', "", array()); 
     330        $objFormParam->addParam("temp_main_image", "temp_main_image", '', "", array()); 
     331        $objFormParam->addParam("temp_main_large_image", "temp_main_large_image", '', "", array()); 
     332 
     333        for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 
     334            $objFormParam->addParam("詳細-サブタイトル" . $cnt, "sub_title" . $cnt, STEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
     335            $objFormParam->addParam("詳細-サブコメント" . $cnt, "sub_comment" . $cnt, LLTEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
     336            $objFormParam->addParam("save_sub_image" . $cnt, "save_sub_image" . $cnt, '', "", array()); 
     337            $objFormParam->addParam("save_sub_large_image" . $cnt, "save_sub_large_image" . $cnt, '', "", array()); 
     338            $objFormParam->addParam("temp_sub_image" . $cnt, "temp_sub_image" . $cnt, '', "", array()); 
     339            $objFormParam->addParam("temp_sub_large_image" . $cnt, "temp_sub_large_image" . $cnt, '', "", array()); 
     340        } 
     341 
     342        for ($cnt = 1; $cnt <= RECOMMEND_PRODUCT_MAX; $cnt++) { 
     343            $objFormParam->addParam("関連商品コメント" . $cnt, "recommend_comment" . $cnt, LTEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
     344            $objFormParam->addParam("関連商品ID" . $cnt, "recommend_id" . $cnt, INT_LEN, "n", array("NUM_CHECK", "MAX_LENGTH_CHECK")); 
     345            $objFormParam->addParam("recommend_delete" . $cnt, "recommend_delete" . $cnt, '', "n", array()); 
     346        } 
     347 
     348                $objFormParam->addParam("商品ID", "copy_product_id", INT_LEN, "n", array("NUM_CHECK", "MAX_LENGTH_CHECK")); 
     349 
     350        $objFormParam->addParam("has_product_class", "has_product_class", INT_LEN, "n", array("NUM_CHECK", "MAX_LENGTH_CHECK")); 
     351        $objFormParam->addParam("product_class_id", "product_class_id", INT_LEN, "n", array("NUM_CHECK", "MAX_LENGTH_CHECK")); 
     352 
     353        $objFormParam->setParam($arrPost); 
     354        $objFormParam->convParam(); 
     355    } 
     356 
     357    /** 
     358     * パラメータ情報の初期化 
     359     * - 画像ファイルアップロードモード 
     360     * 
     361     * @param object $objFormParam SC_FormParamインスタンス 
     362     * @return void 
     363     */ 
     364    function lfInitFormParam_UploadImage(&$objFormParam) { 
     365        $objFormParam->addParam("image_key", "image_key", "", "", array()); 
     366    } 
     367 
     368    /** 
     369     * パラメータ情報の初期化 
     370     * - ダウンロード商品ファイルアップロードモード 
     371     * 
     372     * @param object $objFormParam SC_FormParamインスタンス 
     373     * @return void 
     374     */ 
     375    function lfInitFormParam_UploadDown(&$objFormParam) { 
     376        $objFormParam->addParam("down_key", "down_key", "", "", array()); 
     377    } 
     378 
     379    /** 
     380     * パラメータ情報の初期化 
     381     * - 関連商品追加モード 
     382     * 
     383     * @param object $objFormParam SC_FormParamインスタンス 
     384     * @return void 
     385     */ 
     386    function lfInitFormParam_RecommendSelect(&$objFormParam) { 
     387        $objFormParam->addParam("anchor_key", "anchor_key", "", "", array()); 
     388    } 
     389 
     390    /** 
     391     * アップロードファイルパラメータ情報の初期化 
     392     * - 画像ファイル用 
     393     *  
     394     * @param object $objUpFile SC_UploadFileインスタンス 
     395     * @return void 
     396     */ 
     397    function lfInitFile(&$objUpFile) { 
     398        $objUpFile->addFile("一覧-メイン画像", 'main_list_image', array('jpg', 'gif', 'png'),IMAGE_SIZE, false, SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT); 
     399        $objUpFile->addFile("詳細-メイン画像", 'main_image', array('jpg', 'gif', 'png'), IMAGE_SIZE, false, NORMAL_IMAGE_WIDTH, NORMAL_IMAGE_HEIGHT); 
     400        $objUpFile->addFile("詳細-メイン拡大画像", 'main_large_image', array('jpg', 'gif', 'png'), IMAGE_SIZE, false, LARGE_IMAGE_WIDTH, LARGE_IMAGE_HEIGHT); 
     401        for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 
     402            $objUpFile->addFile("詳細-サブ画像$cnt", "sub_image$cnt", array('jpg', 'gif', 'png'), IMAGE_SIZE, false, NORMAL_SUBIMAGE_WIDTH, NORMAL_SUBIMAGE_HEIGHT); 
     403            $objUpFile->addFile("詳細-サブ拡大画像$cnt", "sub_large_image$cnt", array('jpg', 'gif', 'png'), IMAGE_SIZE, false, LARGE_SUBIMAGE_WIDTH, LARGE_SUBIMAGE_HEIGHT); 
     404        } 
     405    } 
     406 
     407    /** 
     408     * アップロードファイルパラメータ情報の初期化 
     409     * - ダウンロード商品ファイル用 
     410     * 
     411     * @param object $objDownFile SC_UploadFileインスタンス 
     412     * @return void 
     413     */ 
     414    function lfInitDownFile(&$objDownFile) { 
     415        $objDownFile->addFile("ダウンロード販売用ファイル", 'down_file', explode(",", DOWNLOAD_EXTENSION),DOWN_SIZE, true, 0, 0); 
     416    } 
     417 
     418    /** 
     419     * フォーム入力パラメータのエラーチェック 
     420     *  
     421     * @param object $objFormParam SC_FormParamインスタンス 
     422     * @param object $objUpFile SC_UploadFileインスタンス 
     423     * @param object $objDownFile SC_UploadFileインスタンス 
     424     * @param array $arrForm フォーム入力パラメータ配列 
     425     * @return array エラー情報を格納した連想配列 
     426     */ 
     427    function lfCheckError_Edit(&$objFormParam, &$objUpFile, &$objDownFile, $arrForm) { 
     428        $objErr = new SC_CheckError($arrForm); 
     429        $arrErr = array(); 
     430 
     431        // 入力パラメータチェック 
     432        $arrErr = $objFormParam->checkError(); 
     433 
     434        // アップロードファイル必須チェック 
     435        $arrErr = array_merge((array)$arrErr, (array)$objUpFile->checkEXISTS()); 
     436 
     437        // HTMLタグ許可チェック 
     438        $objErr->doFunc(array("詳細-メインコメント", "main_comment", $this->arrAllowedTag), array("HTML_TAG_CHECK")); 
     439        for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 
     440            $objErr->doFunc(array("詳細-サブコメント" . $cnt, "sub_comment" . $cnt, $this->arrAllowedTag), array("HTML_TAG_CHECK")); 
     441        } 
     442 
     443        // 規格情報がない商品の場合のチェック 
     444        if($arrForm['has_product_class'] != true) { 
     445            // 在庫必須チェック(在庫無制限ではない場合) 
     446            if(!isset($arrForm['stock_unlimited']) && $arrForm['stock_unlimited'] != UNLIMITED_FLG_UNLIMITED) { 
     447                $objErr->doFunc(array("在庫数", "stock"), array("EXIST_CHECK")); 
     448            } 
     449            // ダウンロード商品ファイル必須チェック(ダウンロード商品の場合) 
     450            if($arrForm['product_type_id'] == PRODUCT_TYPE_DOWNLOAD) { 
     451                $arrErr = array_merge((array)$arrErr, (array)$objDownFile->checkEXISTS()); 
     452            } 
     453        } 
     454 
     455        $arrErr = array_merge((array)$arrErr, (array)$objErr->arrErr); 
     456        return $arrErr; 
     457    } 
     458 
     459    /** 
     460     * 検索パラメータ引き継ぎ用配列取得 
     461     * 
     462     * @param array $arrPost $_POSTデータ 
     463     * @return array 検索パラメータ配列 
     464     */ 
     465    function lfGetSearchParam($arrPost) { 
     466        $arrSearchParam = array(); 
     467        $objFormParam = new SC_FormParam(); 
     468 
     469        parent::lfInitParam($objFormParam); 
     470        $objFormParam->setParam($arrPost); 
     471        $arrSearchParam = $objFormParam->getSearchArray(); 
     472 
     473        return $arrSearchParam; 
     474    } 
     475 
     476    /** 
     477     * フォームパラメータ取得 
     478     * - 編集/複製モード 
     479     *  
     480     * @param object $objUpFile SC_UploadFileインスタンス 
     481     * @param object $objDownFile SC_UploadFileインスタンス 
     482     * @param integer $product_id 商品ID 
     483     * @return array フォームパラメータ配列 
     484     */ 
     485    function lfGetFormParam_PreEdit(&$objUpFile, &$objDownFile, $product_id) { 
     486        $arrForm = array(); 
     487 
     488        // DBから商品データ取得 
     489        $arrForm = $this->lfGetProductData_FromDB($product_id); 
     490        // DBデータから画像ファイル名の読込 
     491        $objUpFile->setDBFileList($arrForm); 
     492        // DBデータからダウンロードファイル名の読込 
     493        $objDownFile->setDBDownFile($arrForm); 
     494 
     495        return $arrForm; 
     496    } 
     497 
     498    /** 
     499     * フォームパラメータ取得 
     500     * - 登録モード 
     501     *  
     502     * @param object $objFormParam SC_FormParamインスタンス 
     503     * @return array フォームパラメータ配列 
     504     */ 
     505    function lfGetFormParam_Complete(&$objFormParam) { 
     506        $arrForm = $objFormParam->getHashArray(); 
     507        $arrForm['category_id'] = unserialize($arrForm['category_id']); 
     508        $objFormParam->setValue('category_id', $arrForm['category_id']); 
     509 
     510        return $arrForm; 
     511    } 
     512 
     513    /** 
     514     * 表示用フォームパラメータ取得 
     515     * - 入力画面 
     516     * 
     517     * @param object $objUpFile SC_UploadFileインスタンス 
     518     * @param object $objDownFile SC_UploadFileインスタンス 
     519     * @param array $arrForm フォーム入力パラメータ配列 
     520     * @return array 表示用フォームパラメータ配列 
     521     */ 
     522    function lfSetViewParam_InputPage(&$objUpFile, &$objDownFile, &$arrForm) { 
     523        // カテゴリマスタデータ取得 
     524        $objDb = new SC_Helper_DB_Ex(); 
     525        list($this->arrCatVal, $this->arrCatOut) = $objDb->sfGetLevelCatList(false); 
     526 
     527        if (isset($arrForm['category_id']) && !is_array($arrForm['category_id'])) { 
     528            $arrForm['category_id'] = unserialize($arrForm['category_id']); 
     529        } 
     530        if($arrForm['status'] == "") { 
     531            $arrForm['status'] = DEFAULT_PRODUCT_DISP; 
     532        } 
     533        if($arrForm['product_type_id'] == "") { 
     534            $arrForm['product_type_id'] = DEFAULT_PRODUCT_DOWN; 
     535        } 
     536        // アップロードファイル情報取得(Hidden用) 
     537        $arrHidden = $objUpFile->getHiddenFileList(); 
     538        $arrForm['arrHidden'] = array_merge((array)$arrHidden, (array)$objDownFile->getHiddenFileList()); 
     539 
     540        // 画像ファイル表示用データ取得 
     541        $arrForm['arrFile'] = $objUpFile->getFormFileList(IMAGE_TEMP_URLPATH, IMAGE_SAVE_URLPATH); 
     542 
     543        // ダウンロード商品実ファイル名取得 
     544        $arrForm['down_realfilename'] = $objDownFile->getFormDownFile(); 
     545 
     546        // 基本情報(デフォルトポイントレート用) 
     547        $arrForm['arrInfo'] = SC_Helper_DB::sfGetBasisData(); 
     548 
     549        // サブ情報ありなしフラグ 
     550        $arrForm['sub_find'] = $this->hasSubProductData($arrForm); 
     551 
     552        return $arrForm; 
     553    } 
     554 
     555    /** 
     556     * 表示用フォームパラメータ取得 
     557     * - 確認画面 
     558     * 
     559     * @param object $objUpFile SC_UploadFileインスタンス 
     560     * @param object $objDownFile SC_UploadFileインスタンス 
     561     * @param array $arrForm フォーム入力パラメータ配列 
     562     * @return array 表示用フォームパラメータ配列 
     563     */ 
     564    function lfSetViewParam_ConfirmPage(&$objUpFile, &$objDownFile, &$arrForm) { 
     565        // カテゴリ表示用 
     566        $arrForm['arrCategoryId'] = $arrForm['category_id']; 
     567        // hidden に渡す値は serialize する 
     568        $arrForm['category_id'] = serialize($arrForm['category_id']); 
     569        // 画像ファイル用データ取得 
     570        $arrForm['arrFile'] = $objUpFile->getFormFileList(IMAGE_TEMP_URLPATH, IMAGE_SAVE_URLPATH); 
     571        // ダウンロード商品実ファイル名取得 
     572        $arrForm['down_realfilename'] = $objDownFile->getFormDownFile(); 
     573 
     574        return $arrForm; 
     575    } 
     576 
     577    /** 
     578     * 縮小した画像をセットする 
     579     *  
     580     * @param object $objUpFile SC_UploadFileインスタンス 
     581     * @param string $image_key 画像ファイルキー 
     582     * @return void 
     583     */ 
     584    function lfSetScaleImage(&$objUpFile, $image_key){ 
     585        $subno = str_replace("sub_large_image", "", $image_key); 
     586        switch ($image_key){ 
     587        case "main_large_image": 
     588            // 詳細メイン画像 
     589            $this->lfMakeScaleImage($objUpFile, $image_key, "main_image"); 
     590        case "main_image": 
     591            // 一覧メイン画像 
     592            $this->lfMakeScaleImage($objUpFile, $image_key, "main_list_image"); 
     593            break; 
     594        case "sub_large_image" . $subno: 
     595            // サブメイン画像 
     596            $this->lfMakeScaleImage($objUpFile, $_POST['image_key'], "sub_image" . $subno); 
     597            break; 
     598        default: 
     599            break; 
     600        } 
     601    } 
     602 
     603    /** 
     604     * 画像ファイルのコピー 
     605     *  
     606     * @param object $objUpFile SC_UploadFileインスタンス 
     607     * @return void 
     608     */ 
     609    function lfCopyProductImageFiles(&$objUpFile) { 
     610        $arrKey = $objUpFile->keyname; 
     611        $arrSaveFile = $objUpFile->save_file; 
     612 
     613        foreach($arrSaveFile as $key => $val){ 
     614            $this->lfMakeScaleImage($objUpFile, $arrKey[$key], $arrKey[$key], true); 
     615        } 
     616    } 
     617 
     618    /** 
     619     * 縮小画像生成 
     620     * 
     621     * @param object $objUpFile SC_UploadFileインスタンス 
     622     * @param string $from_key 元画像ファイルキー 
     623     * @param string $to_key 縮小画像ファイルキー 
     624     * @param boolean $forced 
     625     * @return void 
     626     */ 
     627    function lfMakeScaleImage(&$objUpFile, $from_key, $to_key, $forced = false){ 
     628        $arrImageKey = array_flip($objUpFile->keyname); 
     629        $from_path = ""; 
     630 
     631        if($objUpFile->temp_file[$arrImageKey[$from_key]]) { 
     632            $from_path = $objUpFile->temp_dir . $objUpFile->temp_file[$arrImageKey[$from_key]]; 
     633        } elseif($objUpFile->save_file[$arrImageKey[$from_key]]){ 
     634            $from_path = $objUpFile->save_dir . $objUpFile->save_file[$arrImageKey[$from_key]]; 
     635        } 
     636 
     637        if(file_exists($from_path)) { 
     638            // 生成先の画像サイズを取得 
     639            $to_w = $objUpFile->width[$arrImageKey[$to_key]]; 
     640            $to_h = $objUpFile->height[$arrImageKey[$to_key]]; 
     641 
     642            if($forced) $objUpFile->save_file[$arrImageKey[$to_key]] = ""; 
     643 
     644            if(empty($objUpFile->temp_file[$arrImageKey[$to_key]]) 
     645                    && empty($objUpFile->save_file[$arrImageKey[$to_key]])) { 
     646                // リネームする際は、自動生成される画像名に一意となるように、Suffixを付ける 
     647                $dst_file = $objUpFile->lfGetTmpImageName(IMAGE_RENAME, "", $objUpFile->temp_file[$arrImageKey[$from_key]]) . $this->lfGetAddSuffix($to_key); 
     648                $path = $objUpFile->makeThumb($from_path, $to_w, $to_h, $dst_file); 
     649                $objUpFile->temp_file[$arrImageKey[$to_key]] = basename($path); 
     650            } 
     651        } 
     652    } 
     653 
     654    /** 
     655     * アップロードファイルパラメータ情報から削除 
     656     * 一時ディレクトリに保存されている実ファイルも削除する 
     657     * 
     658     * @param object $objUpFile SC_UploadFileインスタンス 
     659     * @param string $image_key 画像ファイルキー 
     660     * @return void 
     661     */ 
     662    function lfDeleteTempFile(&$objUpFile, $image_key) { 
     663        // TODO: SC_UploadFile::deleteFileの画像削除条件見直し要 
     664        $arrTempFile = $objUpFile->temp_file; 
     665        $arrKeyName = $objUpFile->keyname; 
     666 
     667        foreach($arrKeyName as $key => $keyname) { 
     668            if($keyname != $image_key) continue; 
     669 
     670            if(!empty($arrTempFile[$key])) { 
     671                $temp_file = $arrTempFile[$key]; 
     672                $arrTempFile[$key] = ''; 
     673 
     674                if(!in_array($temp_file, $arrTempFile)) { 
     675                    $objUpFile->deleteFile($image_key); 
     676                } else { 
     677                    $objUpFile->temp_file[$key] = ''; 
     678                    $objUpFile->save_file[$key] = ''; 
     679                } 
     680            } else { 
     681                $objUpFile->temp_file[$key] = ''; 
     682                $objUpFile->save_file[$key] = ''; 
     683            } 
     684        } 
     685    } 
     686 
     687    /** 
     688     * アップロードファイルを保存する 
     689     *  
     690     * @param object $objUpFile SC_UploadFileインスタンス 
     691     * @param object $objDownFile SC_UploadFileインスタンス 
     692     * @param integer $product_id 商品ID 
     693     * @return void 
     694     */ 
     695    function lfSaveUploadFiles(&$objUpFile, &$objDownFile, $product_id) { 
     696        // TODO: SC_UploadFile::moveTempFileの画像削除条件見直し要 
     697        $objImage = new SC_Image($objUpFile->temp_dir); 
     698        $arrKeyName = $objUpFile->keyname; 
     699        $arrTempFile = $objUpFile->temp_file; 
     700        $arrSaveFile = $objUpFile->save_file; 
     701        $arrImageKey = array(); 
     702        foreach($arrTempFile as $key => $temp_file) { 
     703            if($temp_file) { 
     704                $objImage->moveTempImage($temp_file, $objUpFile->save_dir); 
     705                $arrImageKey[] = $arrKeyName[$key]; 
     706                if(!empty($arrSaveFile[$key]) 
     707                        && !$this->lfHasSameProductImage($product_id, $arrImageKey, $arrSaveFile[$key]) 
     708                        && !in_array($temp_file, $arrSaveFile)) { 
     709                    $objImage->deleteImage($arrSaveFile[$key], $objUpFile->save_dir); 
     710                } 
     711            } 
     712        } 
     713        $objDownFile->moveTempDownFile(); 
     714    } 
     715 
     716    /** 
     717     * 同名画像ファイル登録の有無を確認する. 
     718     * 
     719     * 画像ファイルの削除可否判定用。 
     720     * 同名ファイルの登録がある場合には画像ファイルの削除を行わない。 
     721     * 戻り値: 同名ファイル有り(true) 同名ファイル無し(false) 
     722     * 
     723     * @param string $product_id 商品ID 
     724     * @param string $arrImageKey 対象としない画像カラム名 
     725     * @param string $image_file_name 画像ファイル名 
     726     * @return boolean 
     727     */ 
     728    function lfHasSameProductImage($product_id, $arrImageKey, $image_file_name) { 
     729        if (!SC_Utils_Ex::sfIsInt($product_id)) return false; 
     730        if (!$arrImageKey) return false; 
     731        if (!$image_file_name) return false; 
     732 
     733        $arrWhere = array(); 
     734        $sqlval = array('0', $product_id); 
     735        foreach ($arrImageKey as $image_key) { 
     736            $arrWhere[] = "{$image_key} = ?"; 
     737            $sqlval[] = $image_file_name; 
     738        } 
     739        $where = implode(" OR ", $arrWhere); 
     740        $where = "del_flg = ? AND ((product_id <> ? AND ({$where}))"; 
     741 
     742        $arrKeyName = $this->objUpFile->keyname; 
     743        foreach ($arrKeyName as $key => $keyname) { 
     744            if (in_array($keyname, $arrImageKey)) continue; 
     745            $where .= " OR {$keyname} = ?"; 
     746            $sqlval[] = $image_file_name; 
     747        } 
     748        $where .= ")"; 
     749 
    320750        $objQuery = new SC_Query(); 
    321         $arrRecommend = array(); 
    322         for($i = 1; $i <= RECOMMEND_PRODUCT_MAX; $i++) { 
    323             $keyname = "recommend_id" . $i; 
    324             $delkey = "recommend_delete" . $i; 
    325             $commentkey = "recommend_comment" . $i; 
    326  
    327             if (!isset($this->arrForm[$delkey])) $this->arrForm[$delkey] = null; 
    328  
    329             if((isset($this->arrForm[$keyname]) && !empty($this->arrForm[$keyname])) && $this->arrForm[$delkey] != 1) { 
    330                 $objProduct = new SC_Product(); 
    331                 $arrRecommend[$i] = $objProduct->getDetail($this->arrForm[$keyname]); 
    332                 $arrRecommend[$i]['product_id'] = $this->arrForm[$keyname]; 
    333                 $arrRecommend[$i]['comment'] = $this->arrForm[$commentkey]; 
    334             } 
    335         } 
    336         return $arrRecommend; 
    337     } 
    338  
    339     /* 関連商品の登録 */ 
    340     function lfInsertRecommendProducts($objQuery, $arrList, $product_id) { 
    341         // 一旦関連商品をすべて削除する 
    342         $objQuery->delete("dtb_recommend_products", "product_id = ?", array($product_id)); 
    343         $sqlval['product_id'] = $product_id; 
    344         $rank = RECOMMEND_PRODUCT_MAX; 
    345         for($i = 1; $i <= RECOMMEND_PRODUCT_MAX; $i++) { 
    346             $keyname = "recommend_id" . $i; 
    347             $commentkey = "recommend_comment" . $i; 
    348             $deletekey = "recommend_delete" . $i; 
    349  
    350             if (!isset($arrList[$deletekey])) $arrList[$deletekey] = null; 
    351  
    352             if($arrList[$keyname] != "" && $arrList[$deletekey] != '1') { 
    353                 $sqlval['recommend_product_id'] = $arrList[$keyname]; 
    354                 $sqlval['comment'] = $arrList[$commentkey]; 
    355                 $sqlval['rank'] = $rank; 
    356                 $sqlval['creator_id'] = $_SESSION['member_id']; 
    357                 $sqlval['create_date'] = "now()"; 
    358                 $sqlval['update_date'] = "now()"; 
    359                 $objQuery->insert("dtb_recommend_products", $sqlval); 
    360                 $rank--; 
    361             } 
    362         } 
    363     } 
    364  
    365     /** 
    366      * 指定商品の関連商品をDBから読み込む 
    367      * 
    368      * @param string $product_id 商品ID 
    369      * @return void 
    370      */ 
    371     function lfPreGetRecommendProducts($product_id) { 
    372         $objQuery = new SC_Query(); 
    373         $objQuery->setOrder("rank DESC"); 
    374         $arrRet = $objQuery->select("recommend_product_id, comment", "dtb_recommend_products", "product_id = ?", array($product_id)); 
    375         $no = 1; 
    376  
    377         foreach ($arrRet as $ret) { 
    378             $this->arrForm['recommend_id' . $no] = $ret['recommend_product_id']; 
    379             $this->arrForm['recommend_comment' . $no] = $ret['comment']; 
    380             $no++; 
    381         } 
    382     } 
    383  
    384     /* 商品情報の読み込み */ 
    385     function lfGetProduct($product_id) { 
    386         $objQuery = new SC_Query(); 
    387         $objDb = new SC_Helper_DB_Ex(); 
    388  
     751        $count = $objQuery->count('dtb_products', $where, $sqlval); 
     752        if (!$count) return false; 
     753        return true; 
     754    } 
     755 
     756    /** 
     757     * DBから商品データを取得する 
     758     *  
     759     * @param integer $product_id 商品ID 
     760     * @return array 商品データ配列 
     761     */ 
     762    function lfGetProductData_FromDB($product_id) { 
     763        $objQuery =& SC_Query::getSingletonInstance(); 
     764        $arrProduct = array(); 
     765 
     766        // 商品データ取得 
    389767        $col = "*"; 
    390768        $table = <<< __EOF__ 
     
    395773                              price01, 
    396774                              price02, 
     775                              deliv_fee, 
    397776                              stock, 
    398777                              stock_unlimited, 
     
    402781                              down_filename, 
    403782                              down_realfilename 
    404                          FROM dtb_products_class 
     783                        FROM dtb_products_class 
    405784                        WHERE class_combination_id IS NULL 
    406785                       ) AS T2 
     
    408787__EOF__; 
    409788        $where = "product_id = ?"; 
    410  
     789        $arrProduct = $objQuery->select($col, $table, $where, array($product_id)); 
     790 
     791        // カテゴリID取得 
     792        $col = "category_id"; 
     793        $table = "dtb_product_categories"; 
     794        $where = "product_id = ?"; 
     795        $arrProduct[0]['category_id'] = $objQuery->getCol($col, $table, $where, array($product_id)); 
     796 
     797        // 規格情報ありなしフラグ取得 
     798        $objDb = new SC_Helper_DB_Ex(); 
     799        $arrProduct[0]['has_product_class'] = $objDb->sfHasProductClass($product_id); 
     800 
     801        // 規格が登録されていなければ規格ID取得 
     802        if ($arrProduct[0]['has_product_class'] == false) { 
     803            $arrProduct[0]['product_class_id'] = SC_Utils::sfGetProductClassId($product_id,"0","0"); 
     804        } 
     805 
     806        // 商品ステータス取得 
     807        $objProduct = new SC_Product(); 
     808        $productStatus = $objProduct->getProductStatus(array($product_id)); 
     809        $arrProduct[0]['product_status'] = $productStatus[$product_id]; 
     810 
     811        // 関連商品データ取得 
     812        $arrRecommend = $this->lfGetRecommendProductsData_FromDB($product_id); 
     813        $arrProduct[0] = array_merge($arrProduct[0], $arrRecommend); 
     814 
     815        return $arrProduct[0]; 
     816    } 
     817 
     818    /** 
     819     * DBから関連商品データを取得する 
     820     *  
     821     * @param integer $product_id 商品ID 
     822     * @return array 関連商品データ配列 
     823     */ 
     824    function lfGetRecommendProductsData_FromDB($product_id) { 
     825        $objQuery =& SC_Query::getSingletonInstance(); 
     826        $arrRecommendProducts = array(); 
     827 
     828        $col = 'recommend_product_id,'; 
     829        $col.= 'comment'; 
     830        $table = 'dtb_recommend_products'; 
     831        $where = 'product_id = ?'; 
     832        $objQuery->setOrder("rank DESC"); 
    411833        $arrRet = $objQuery->select($col, $table, $where, array($product_id)); 
    412834 
    413         // カテゴリID を取得 
    414         $arrRet[0]['category_id'] = $objQuery->getCol( 
    415             "category_id", 
    416             "dtb_product_categories", 
    417             "product_id = ?", 
    418             array($product_id) 
    419         ); 
    420         //編集時に規格IDが変わってしまうのを防ぐために規格が登録されていなければ規格IDを取得する 
    421         if (!$objDb->sfHasProductClass($_POST['product_id'])) { 
    422             $arrRet[0]['product_class_id'] = SC_Utils::sfGetProductClassId($product_id,"0","0"); 
    423         } 
    424         return $arrRet[0]; 
    425     } 
    426  
    427     /* 商品登録ページ表示用 */ 
    428     function lfProductPage() { 
     835        $no = 1; 
     836        foreach ($arrRet as $arrVal) { 
     837            $arrRecommendProducts['recommend_id' . $no] = $arrVal['recommend_product_id']; 
     838            $arrRecommendProducts['recommend_comment' . $no] = $arrVal['comment']; 
     839            $no++; 
     840        } 
     841 
     842        return $arrRecommendProducts; 
     843    } 
     844 
     845    /** 
     846     * 関連商品データ表示用配列を取得する 
     847     *  
     848     * @param string $arrForm フォーム入力パラメータ配列 
     849     * @return array 関連商品データ配列 
     850     */ 
     851    function lfGetRecommendProducts(&$arrForm) { 
     852        $arrRecommend = array(); 
     853 
     854        for($i = 1; $i <= RECOMMEND_PRODUCT_MAX; $i++) { 
     855            $keyname = "recommend_id" . $i; 
     856            $delkey = "recommend_delete" . $i; 
     857            $commentkey = "recommend_comment" . $i; 
     858 
     859            if (!isset($arrForm[$delkey])) $arrForm[$delkey] = null; 
     860 
     861            if((isset($arrForm[$keyname]) && !empty($arrForm[$keyname])) && $arrForm[$delkey] != 1) { 
     862                $objProduct = new SC_Product(); 
     863                $arrRecommend[$i] = $objProduct->getDetail($arrForm[$keyname]); 
     864                $arrRecommend[$i]['product_id'] = $arrForm[$keyname]; 
     865                $arrRecommend[$i]['comment'] = $arrForm[$commentkey]; 
     866            } 
     867        } 
     868        return $arrRecommend; 
     869    } 
     870 
     871    /** 
     872     * 表示用カテゴリマスタデータ配列を取得する 
     873     * - 編集モード 
     874     *  
     875     * @param void 
     876     * @return array カテゴリマスタデータ配列 
     877     */ 
     878    function lfGetCategoryList_Edit() { 
    429879        $objDb = new SC_Helper_DB_Ex(); 
    430  
    431         // カテゴリの読込 
    432         list($this->arrCatVal, $this->arrCatOut) = $objDb->sfGetLevelCatList(false); 
    433  
    434         if (isset($this->arrForm['category_id']) && !is_array($this->arrForm['category_id'])) { 
    435             $this->arrForm['category_id'] = unserialize($this->arrForm['category_id']); 
    436         } 
    437         if($this->arrForm['status'] == "") { 
    438             $this->arrForm['status'] = DEFAULT_PRODUCT_DISP; 
    439         } 
    440         if($this->arrForm['product_type_id'] == "") { 
    441             $this->arrForm['product_type_id'] = DEFAULT_PRODUCT_DOWN; 
    442         } 
    443  
    444         // HIDDEN用に配列を渡す。 
    445         $this->arrHidden = array_merge((array)$this->arrHidden, (array)$this->objUpFile->getHiddenFileList()); 
    446         $this->arrHidden = array_merge((array)$this->arrHidden, (array)$this->objDownFile->getHiddenFileList()); 
    447         // Form用配列を渡す。 
    448         $this->arrFile = $this->objUpFile->getFormFileList(IMAGE_TEMP_URLPATH, IMAGE_SAVE_URLPATH); 
    449  
    450         $this->arrForm['down_realfilename'] = $this->objDownFile->getFormDownFile(); 
    451  
    452         // アンカーを設定 
    453         if (isset($_POST['image_key']) && !empty($_POST['image_key'])) { 
    454             $anchor_hash = "location.hash='#" . $_POST['image_key'] . "'"; 
    455         } elseif (isset($_POST['anchor_key']) && !empty($_POST['anchor_key'])) { 
    456             $anchor_hash = "location.hash='#" . $_POST['anchor_key'] . "'"; 
     880        $arrCategoryList = array(); 
     881 
     882        list($arrCatVal, $arrCatOut) = $objDb->sfGetLevelCatList(false); 
     883        for ($i = 0; $i < count($arrCatVal); $i++) { 
     884            $arrCategoryList[$arrCatVal[$i]] = $arrCatOut[$i]; 
     885        } 
     886 
     887        return $arrCategoryList; 
     888    } 
     889 
     890    /** 
     891     * 入力フォームパラメータの規格ありなしフラグを判定 
     892     *  
     893     * @param string $has_product_class 入力フォームパラメータの規格ありなしフラグ 
     894     * @return boolean true: 規格あり, false: 規格なし 
     895     */ 
     896    function lfGetProductClassFlag($has_product_class) { 
     897        if($has_product_class == '1') { 
     898            return true; 
    457899        } else { 
    458             $anchor_hash = ""; 
    459         } 
    460  
    461         $this->tpl_onload = "fnCheckStockLimit('" . DISABLED_RGB . "'); fnMoveSelect('category_id_unselect', 'category_id');" . $anchor_hash; 
    462     } 
    463  
    464     /* ファイル情報の初期化 */ 
    465     function lfInitFile() { 
    466         $this->objUpFile->addFile("一覧-メイン画像", 'main_list_image', array('jpg', 'gif', 'png'),IMAGE_SIZE, false, SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT); 
    467         $this->objUpFile->addFile("詳細-メイン画像", 'main_image', array('jpg', 'gif', 'png'), IMAGE_SIZE, false, NORMAL_IMAGE_WIDTH, NORMAL_IMAGE_HEIGHT); 
    468         $this->objUpFile->addFile("詳細-メイン拡大画像", 'main_large_image', array('jpg', 'gif', 'png'), IMAGE_SIZE, false, LARGE_IMAGE_WIDTH, LARGE_IMAGE_HEIGHT); 
    469         for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 
    470             $this->objUpFile->addFile("詳細-サブ画像$cnt", "sub_image$cnt", array('jpg', 'gif', 'png'), IMAGE_SIZE, false, NORMAL_SUBIMAGE_WIDTH, NORMAL_SUBIMAGE_HEIGHT); 
    471             $this->objUpFile->addFile("詳細-サブ拡大画像$cnt", "sub_large_image$cnt", array('jpg', 'gif', 'png'), IMAGE_SIZE, false, LARGE_SUBIMAGE_WIDTH, LARGE_SUBIMAGE_HEIGHT); 
    472         } 
    473     } 
    474  
    475     /* 商品の登録 */ 
    476     function lfRegistProduct($arrList) { 
    477         $objQuery = new SC_Query(); 
     900            return false; 
     901        } 
     902    } 
     903 
     904    /** 
     905     * ページonload用JavaScriptを取得する 
     906     * - 入力画面 
     907     * 
     908     * @param string $anchor_hash アンカー用ハッシュ文字列(省略可) 
     909     * @return string ページonload用JavaScript 
     910     */ 
     911    function lfSetOnloadJavaScript_InputPage($anchor_hash = "") { 
     912        return "fnCheckStockLimit('" . DISABLED_RGB . "'); fnMoveSelect('category_id_unselect', 'category_id');" . $anchor_hash; 
     913    } 
     914 
     915    /** 
     916     * DBに商品データを登録する 
     917     *  
     918     * @param object $objUpFile SC_UploadFileインスタンス 
     919     * @param object $objDownFile SC_UploadFileインスタンス 
     920     * @param array $arrList フォーム入力パラメータ配列 
     921     * @return integer 登録商品ID 
     922     */ 
     923    function lfRegistProduct(&$objUpFile, &$objDownFile, $arrList) { 
     924        $objQuery =& SC_Query::getSingletonInstance(); 
    478925        $objDb = new SC_Helper_DB_Ex(); 
    479         $objQuery->begin(); 
    480926 
    481927        // 配列の添字を定義 
     
    504950        $sqlval['update_date'] = "Now()"; 
    505951        $sqlval['creator_id'] = $_SESSION['member_id']; 
    506         $arrRet = $this->objUpFile->getDBFileList(); 
     952        $arrRet = $objUpFile->getDBFileList(); 
    507953        $sqlval = array_merge($sqlval, $arrRet); 
    508954 
    509         $arrList['category_id'] = unserialize($arrList['category_id']); 
    510  
    511         for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 
     955        for($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 
    512956            $sqlval['sub_title'.$cnt] = $arrList['sub_title'.$cnt]; 
    513957            $sqlval['sub_comment'.$cnt] = $arrList['sub_comment'.$cnt]; 
    514958        } 
    515959 
     960        $objQuery->begin(); 
     961 
    516962        // 新規登録(複製時を含む) 
    517         if ($arrList['product_id'] == "") { 
     963        if($arrList['product_id'] == "") { 
    518964            $product_id = $objQuery->nextVal("dtb_products_product_id"); 
    519965            $sqlval['product_id'] = $product_id; 
     
    529975 
    530976            // 複製商品の場合には規格も複製する 
    531             if($_POST["copy_product_id"] != "" and SC_Utils_Ex::sfIsInt($_POST["copy_product_id"])){ 
    532  
    533                 if($this->tpl_nonclass) 
    534                 { 
     977            if($arrList["copy_product_id"] != "" && SC_Utils_Ex::sfIsInt($arrList["copy_product_id"])) { 
     978                if($arrList["has_product_class"] == "1") { 
    535979                    //規格なしの場合、複製は価格等の入力が発生しているため、その内容で追加登録を行う 
    536980                    $this->lfCopyProductClass($arrList, $objQuery); 
    537                 } 
    538                 else 
    539                 { 
     981                } else { 
    540982                    //規格がある場合の複製は複製元の内容で追加登録を行う 
    541983                    // dtb_products_class のカラムを取得 
     
    551993                    $col = SC_Utils_Ex::sfGetCommaList($arrColList); 
    552994                    $product_class_id = $objQuery->nextVal('dtb_products_class_product_class_id'); 
    553                     $objQuery->query("INSERT INTO dtb_products_class (product_class_id, product_id, create_date, ". $col .") SELECT ?, now(), " . $col. " FROM dtb_products_class WHERE product_id = ? ORDER BY product_class_id", array($product_class_id, $product_id, $_POST["copy_product_id"])); 
     995                    $objQuery->query("INSERT INTO dtb_products_class (product_class_id, product_id, create_date, ". $col .") SELECT ?, now(), " . $col. " FROM dtb_products_class WHERE product_id = ? ORDER BY product_class_id", array($product_class_id, $product_id, $arrList["copy_product_id"])); 
    554996                } 
    555997            } 
    556         } 
    557998        // 更新 
    558         else { 
     999        } else { 
    5591000            $product_id = $arrList['product_id']; 
    5601001            // 削除要求のあった既存ファイルの削除 
    561             $arrRet = $this->lfGetProduct($arrList['product_id']); 
     1002            $arrRet = $this->lfGetProductData_FromDB($arrList['product_id']); 
    5621003            // TODO: SC_UploadFile::deleteDBFileの画像削除条件見直し要 
    563             $objImage = new SC_Image($this->objUpFile->temp_dir); 
    564             $arrKeyName = $this->objUpFile->keyname; 
    565             $arrSaveFile = $this->objUpFile->save_file; 
     1004            $objImage = new SC_Image($objUpFile->temp_dir); 
     1005            $arrKeyName = $objUpFile->keyname; 
     1006            $arrSaveFile = $objUpFile->save_file; 
    5661007            $arrImageKey = array(); 
    5671008            foreach ($arrKeyName as $key => $keyname) { 
     
    5701011                    $has_same_image = $this->lfHasSameProductImage($arrList['product_id'], $arrImageKey, $arrRet[$keyname]); 
    5711012                    if (!$has_same_image) { 
    572                         $objImage->deleteImage($arrRet[$keyname], $this->objUpFile->save_dir); 
     1013                        $objImage->deleteImage($arrRet[$keyname], $objUpFile->save_dir); 
    5731014                    } 
    5741015                } 
    5751016            } 
    576             $this->objDownFile->deleteDBDownFile($arrRet); 
    577  
     1017            $objDownFile->deleteDBDownFile($arrRet); 
    5781018            // UPDATEの実行 
    5791019            $where = "product_id = ?"; 
     
    5851025 
    5861026        //商品登録の時は規格を生成する。複製の場合は規格も複製されるのでこの処理は不要。 
    587         if( $_POST["copy_product_id"] == "" ){ 
     1027        if($arrList["copy_product_id"] == "") { 
    5881028            // 規格登録 
    5891029            $this->lfInsertDummyProductClass($arrList); 
     
    5991039        $objQuery->commit(); 
    6001040        return $product_id; 
    601     } 
    602  
    603  
    604     /* 取得文字列の変換 */ 
    605     function lfConvertParam($array) { 
    606         /* 
    607          *  文字列の変換 
    608          *  K :  「半角(ハンカク)片仮名」を「全角片仮名」に変換 
    609          *  C :  「全角ひら仮名」を「全角かた仮名」に変換 
    610          *  V :  濁点付きの文字を一文字に変換。"K","H"と共に使用します 
    611          *  n :  「全角」数字を「半角(ハンカク)」に変換 
    612          */ 
    613  
    614         // スポット商品 
    615         $arrConvList['name'] = "KVa"; 
    616         $arrConvList['main_list_comment'] = "KVa"; 
    617         $arrConvList['main_comment'] = "KVa"; 
    618         $arrConvList['price01'] = "n"; 
    619         $arrConvList['price02'] = "n"; 
    620         $arrConvList['stock'] = "n"; 
    621         $arrConvList['sale_limit'] = "n"; 
    622         $arrConvList['point_rate'] = "n"; 
    623         $arrConvList['product_code'] = "KVna"; 
    624         $arrConvList['comment1'] = "a"; 
    625         $arrConvList['deliv_fee'] = "n"; 
    626  
    627         // 詳細-サブ 
    628         for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 
    629             $arrConvList["sub_title$cnt"] = "KVa"; 
    630         } 
    631         for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 
    632             $arrConvList["sub_comment$cnt"] = "KVa"; 
    633         } 
    634  
    635         // 関連商品 
    636         for ($cnt = 1; $cnt <= RECOMMEND_PRODUCT_MAX; $cnt++) { 
    637             $arrConvList["recommend_comment$cnt"] = "KVa"; 
    638         } 
    639  
    640         // 文字変換 
    641         foreach ($arrConvList as $key => $val) { 
    642             // POSTされてきた値のみ変換する。 
    643             if(isset($array[$key])) { 
    644                 $array[$key] = mb_convert_kana($array[$key] ,$val); 
    645             } 
    646         } 
    647  
    648         if (!isset($array['product_flag'])) $array['product_flag'] = ""; 
    649         $max = max(array_keys($this->arrSTATUS)); 
    650         $array['product_flag'] = SC_Utils_Ex::sfMergeCheckBoxes($array['product_flag'], $max); 
    651  
    652         return $array; 
    653     } 
    654  
    655     // 入力エラーチェック 
    656     function lfErrorCheck($array) { 
    657  
    658         $objErr = new SC_CheckError($array); 
    659         $objErr->doFunc(array("商品名", "name", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
    660         $objErr->doFunc(array("一覧-メインコメント", "main_list_comment", MTEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
    661         $objErr->doFunc(array("詳細-メインコメント", "main_comment", LLTEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
    662         $objErr->doFunc(array("詳細-メインコメント", "main_comment", $this->arrAllowedTag), array("HTML_TAG_CHECK")); 
    663         $objErr->doFunc(array("ポイント付与率", "point_rate", PERCENTAGE_LEN), array("EXIST_CHECK", "NUM_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
    664         $objErr->doFunc(array("商品送料", "deliv_fee", PRICE_LEN), array("NUM_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
    665         $objErr->doFunc(array("備考欄(SHOP専用)", "note", LLTEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
    666         $objErr->doFunc(array("検索ワード", "comment3", LLTEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
    667         $objErr->doFunc(array("メーカーURL", "comment1", URL_LEN), array("SPTAB_CHECK", "URL_CHECK", "MAX_LENGTH_CHECK")); 
    668         $objErr->doFunc(array("発送日目安", "deliv_date_id", INT_LEN), array("NUM_CHECK")); 
    669         $objErr->doFunc(array("メーカー", 'maker_id', INT_LEN), array("NUM_CHECK")); 
    670  
    671         if($this->tpl_nonclass) { 
    672             $objErr->doFunc(array("商品コード", "product_code", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK","MAX_LENGTH_CHECK")); 
    673             $objErr->doFunc(array(NORMAL_PRICE_TITLE, "price01", PRICE_LEN), array("NUM_CHECK", "MAX_LENGTH_CHECK")); 
    674             $objErr->doFunc(array(SALE_PRICE_TITLE, "price02", PRICE_LEN), array("EXIST_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 
    675  
    676             if(!isset($array['stock_unlimited']) && $array['stock_unlimited'] != UNLIMITED_FLG_UNLIMITED) { 
    677                 $objErr->doFunc(array("在庫数", "stock", AMOUNT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 
    678             } 
    679  
    680             //ダウンロード商品チェック 
    681             if($array['product_type_id'] == PRODUCT_TYPE_DOWNLOAD) { 
    682                 $objErr->doFunc(array("ダウンロードファイル名", "down_filename", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
    683                 if($array['down_realfilename'] == "") { 
    684                     $objErr->arrErr['down_realfilename'] = "※ ダウンロード商品の場合はダウンロード商品用ファイルをアップロードしてください。<br />"; 
    685                 } 
    686             } 
    687             //実商品チェック 
    688             if($array['product_type_id'] == PRODUCT_TYPE_NORMAL) { 
    689                 if($array['down_filename'] != "") { 
    690                     $objErr->arrErr['down_filename'] = "※ 通常商品の場合はダウンロードファイル名を設定できません。<br />"; 
    691                 } 
    692                 if($array['down_realfilename'] != "") { 
    693                     $objErr->arrErr['down_realfilename'] = "※ 通常商品の場合はダウンロード商品用ファイルをアップロードできません。<br />ファイルを取り消してください。<br />"; 
    694                 } 
    695             } 
    696         } 
    697  
    698         $objErr->doFunc(array("購入制限", "sale_limit", AMOUNT_LEN), array("SPTAB_CHECK", "ZERO_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 
    699  
    700         for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 
    701             $objErr->doFunc(array("詳細-サブタイトル$cnt", "sub_title$cnt", STEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
    702             $objErr->doFunc(array("詳細-サブコメント$cnt", "sub_comment$cnt", LLTEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
    703             $objErr->doFunc(array("詳細-サブコメント$cnt", "sub_comment$cnt", $this->arrAllowedTag),  array("HTML_TAG_CHECK")); 
    704         } 
    705  
    706         for ($cnt = 1; $cnt <= RECOMMEND_PRODUCT_MAX; $cnt++) { 
    707  
    708             if (!isset($_POST["recommend_delete$cnt"]))  $_POST["recommend_delete$cnt"] = ""; 
    709  
    710             if(isset($_POST["recommend_id$cnt"]) 
    711             && $_POST["recommend_id$cnt"] != "" 
    712             && $_POST["recommend_delete$cnt"] != 1) { 
    713                 $objErr->doFunc(array("関連商品コメント$cnt", "recommend_comment$cnt", LTEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
    714             } 
    715         } 
    716  
    717         // カテゴリID のチェック 
    718         if (empty($array['category_id'])) { 
    719             $objErr->arrErr['category_id'] = "※ 商品カテゴリが選択されていません。<br />"; 
    720         } else { 
    721             $arrCategory_id = array(); 
    722             for ($i = 0; $i < count($array['category_id']); $i++) { 
    723                 $arrCategory_id['category_id' . $i] = $array['category_id'][$i]; 
    724             } 
    725             $objCheckCategory = new SC_CheckError($arrCategory_id); 
    726             for ($i = 0; $i < count($array['category_id']); $i++) { 
    727                 $objCheckCategory->doFunc(array("商品カテゴリ", "category_id" . $i, STEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
    728             } 
    729             if (!empty($objCheckCategory->arrErr)) { 
    730                 $objErr->arrErr = array_merge($objErr->arrErr, 
    731                 $objCheckCategory->arrErr); 
    732             } 
    733         } 
    734         return $objErr->arrErr; 
    735     } 
    736  
    737     /* 確認ページ表示用 */ 
    738     function lfProductConfirmPage() { 
    739         $this->tpl_mainpage = 'products/confirm.tpl'; 
    740         $this->arrForm['mode'] = 'complete'; 
    741  
    742         $objDb = new SC_Helper_DB_Ex(); 
    743  
    744         // カテゴリ表示 
    745         $this->arrCategory_id = $this->arrForm['category_id']; 
    746         $this->arrCatList = array(); 
    747         list($arrCatVal, $arrCatOut) = $objDb->sfGetLevelCatList(false); 
    748         for ($i = 0; $i < count($arrCatVal); $i++) { 
    749             $this->arrCatList[$arrCatVal[$i]] = $arrCatOut[$i]; 
    750         } 
    751  
    752         // hidden に渡す値は serialize する 
    753         $this->arrForm['category_id'] = serialize($this->arrForm['category_id']); 
    754  
    755         // Form用配列を渡す。 
    756         $this->arrFile = $this->objUpFile->getFormFileList(IMAGE_TEMP_URLPATH, IMAGE_SAVE_URLPATH); 
    757         $this->arrForm['down_realfilename'] = $this->objDownFile->getFormDownFile(); 
    758     } 
    759  
    760     // 縮小した画像をセットする 
    761     function lfSetScaleImage(){ 
    762  
    763         $subno = str_replace("sub_large_image", "", $_POST['image_key']); 
    764         switch ($_POST['image_key']){ 
    765             case "main_large_image": 
    766                 // 詳細メイン画像 
    767                 $this->lfMakeScaleImage($_POST['image_key'], "main_image"); 
    768             case "main_image": 
    769                 // 一覧メイン画像 
    770                 $this->lfMakeScaleImage($_POST['image_key'], "main_list_image"); 
    771                 break; 
    772             case "sub_large_image" . $subno: 
    773                 // サブメイン画像 
    774                 $this->lfMakeScaleImage($_POST['image_key'], "sub_image" . $subno); 
    775                 break; 
    776             default: 
    777                 break; 
    778         } 
    779     } 
    780  
    781     // 縮小画像生成 
    782     function lfMakeScaleImage($from_key, $to_key, $forced = false){ 
    783         $arrImageKey = array_flip($this->objUpFile->keyname); 
    784  
    785         if($this->objUpFile->temp_file[$arrImageKey[$from_key]]){ 
    786             $from_path = $this->objUpFile->temp_dir . $this->objUpFile->temp_file[$arrImageKey[$from_key]]; 
    787         }elseif($this->objUpFile->save_file[$arrImageKey[$from_key]]){ 
    788             $from_path = $this->objUpFile->save_dir . $this->objUpFile->save_file[$arrImageKey[$from_key]]; 
    789         }else{ 
    790             return ""; 
    791         } 
    792  
    793         if(file_exists($from_path)){ 
    794             // 生成先の画像サイズを取得 
    795             $to_w = $this->objUpFile->width[$arrImageKey[$to_key]]; 
    796             $to_h = $this->objUpFile->height[$arrImageKey[$to_key]]; 
    797  
    798             if($forced) $this->objUpFile->save_file[$arrImageKey[$to_key]] = ""; 
    799  
    800             if(empty($this->objUpFile->temp_file[$arrImageKey[$to_key]]) && 
    801             empty($this->objUpFile->save_file[$arrImageKey[$to_key]])) { 
    802  
    803                 // リネームする際は、自動生成される画像名に一意となるように、Suffixを付ける 
    804                 $dst_file = $this->objUpFile->lfGetTmpImageName(IMAGE_RENAME, "", $this->objUpFile->temp_file[$arrImageKey[$from_key]]) . $this->lfGetAddSuffix($to_key); 
    805                 $path = $this->objUpFile->makeThumb($from_path, $to_w, $to_h, $dst_file); 
    806                 $this->objUpFile->temp_file[$arrImageKey[$to_key]] = basename($path); 
    807             } 
    808         }else{ 
    809             return ""; 
    810         } 
    811     } 
    812  
    813     /** 
    814      * リネームする際は、自動生成される画像名に一意となるように、Suffixを付ける 
    815      */ 
    816     function lfGetAddSuffix($to_key){ 
    817         if( IMAGE_RENAME === true ){ return ; } 
    818  
    819         // 自動生成される画像名 
    820         $dist_name = ""; 
    821         switch($to_key){ 
    822             case "main_list_image": 
    823                 $dist_name = '_s'; 
    824                 break; 
    825             case "main_image": 
    826                 $dist_name = '_m'; 
    827                 break; 
    828             default: 
    829                 $arrRet = explode('sub_image', $to_key); 
    830                 $dist_name = '_sub' .$arrRet[1]; 
    831                 break; 
    832         } 
    833         return $dist_name; 
    834     } 
    835  
    836     /** 
    837      * dtb_products_classの複製 
    838      * 複製後、価格や商品コードを更新する 
    839      * 
    840      * @param array $arrList 
    841      * @param array $objQuery 
    842      * @return bool 
    843      */ 
    844     function lfCopyProductClass($arrList,$objQuery) 
    845     { 
    846         // 複製元のdtb_products_classを取得(規格なしのため、1件のみの取得) 
    847         $col = "*"; 
    848         $table = "dtb_products_class"; 
    849         $where = "product_id = ?"; 
    850         $arrProductClass = $objQuery->select($col, $table, $where, array($arrList["copy_product_id"])); 
    851  
    852         //トランザクション開始 
    853         $objQuery->begin(); 
    854         $err_flag = false; 
    855         //非編集項目は複製、編集項目は上書きして登録 
    856         foreach($arrProductClass as $records) 
    857         { 
    858             foreach($records as $key => $value) 
    859             { 
    860                 if(isset($arrList[$key])) 
    861                 { 
    862                     $records[$key] = $arrList[$key]; 
    863                 } 
    864             } 
    865  
    866             $records["product_class_id"] = $objQuery->nextVal('dtb_products_class_product_class_id'); 
    867             $records["update_date"] = 'now()'; 
    868             $records["create_date"] = "Now()"; 
    869             $objQuery->insert($table, $records); 
    870             //エラー発生時は中断 
    871             if($objQuery->isError()) 
    872             { 
    873                 $err_flag = true; 
    874                 continue; 
    875             } 
    876         } 
    877         //トランザクション終了 
    878         if($err_flag) 
    879         { 
    880             $objQuery->rollback(); 
    881         } 
    882         else 
    883         { 
    884             $objQuery->commit(); 
    885         } 
    886         return !$err_flag; 
    8871041    } 
    8881042 
     
    9231077    } 
    9241078 
    925     /* ダウンロードファイル情報の初期化 */ 
    926     function lfInitDownFile() { 
    927         $this->objDownFile->addFile("ダウンロード販売用ファイル", 'down_file', explode(",", DOWNLOAD_EXTENSION),DOWN_SIZE, true, 0, 0); 
    928     } 
    929  
    930     /** 
    931      * 同名画像ファイル登録の有無を確認する. 
    932      * 
    933      * 画像ファイルの削除可否判定用。 
    934      * 同名ファイルの登録がある場合には画像ファイルの削除を行わない。 
    935      * 戻り値: 同名ファイル有り(true) 同名ファイル無し(false) 
    936      * 
    937      * @param string $product_id 商品ID 
    938      * @param string $arrImageKey 対象としない画像カラム名 
    939      * @param string $image_file_name 画像ファイル名 
    940      * @return boolean 
    941      */ 
    942     function lfHasSameProductImage($product_id, $arrImageKey, $image_file_name) { 
    943         if (!SC_Utils_Ex::sfIsInt($product_id)) return false; 
    944         if (!$arrImageKey) return false; 
    945         if (!$image_file_name) return false; 
    946  
    947         $arrWhere = array(); 
    948         $sqlval = array('0', $product_id); 
    949         foreach ($arrImageKey as $image_key) { 
    950             $arrWhere[] = "{$image_key} = ?"; 
    951             $sqlval[] = $image_file_name; 
    952         } 
    953         $where = implode(" OR ", $arrWhere); 
    954         $where = "del_flg = ? AND ((product_id <> ? AND ({$where}))"; 
    955  
    956         $arrKeyName = $this->objUpFile->keyname; 
    957         foreach ($arrKeyName as $key => $keyname) { 
    958             if (in_array($keyname, $arrImageKey)) continue; 
    959             $where .= " OR {$keyname} = ?"; 
    960             $sqlval[] = $image_file_name; 
    961         } 
    962         $where .= ")"; 
    963  
    964         $objQuery = new SC_Query(); 
    965         $count = $objQuery->count('dtb_products', $where, $sqlval); 
    966         if (!$count) return false; 
    967         return true; 
     1079    /** 
     1080     * DBに関連商品データを登録する 
     1081     *  
     1082     * @param object $objQuery SC_Queryインスタンス 
     1083     * @param string $arrList フォーム入力パラメータ配列 
     1084     * @param integer $product_id 登録する商品ID 
     1085     * @return void 
     1086     */ 
     1087    function lfInsertRecommendProducts($objQuery, $arrList, $product_id) { 
     1088        // 一旦関連商品をすべて削除する 
     1089        $objQuery->delete("dtb_recommend_products", "product_id = ?", array($product_id)); 
     1090        $sqlval['product_id'] = $product_id; 
     1091        $rank = RECOMMEND_PRODUCT_MAX; 
     1092        for($i = 1; $i <= RECOMMEND_PRODUCT_MAX; $i++) { 
     1093            $keyname = "recommend_id" . $i; 
     1094            $commentkey = "recommend_comment" . $i; 
     1095            $deletekey = "recommend_delete" . $i; 
     1096 
     1097            if (!isset($arrList[$deletekey])) $arrList[$deletekey] = null; 
     1098 
     1099            if($arrList[$keyname] != "" && $arrList[$deletekey] != '1') { 
     1100                $sqlval['recommend_product_id'] = $arrList[$keyname]; 
     1101                $sqlval['comment'] = $arrList[$commentkey]; 
     1102                $sqlval['rank'] = $rank; 
     1103                $sqlval['creator_id'] = $_SESSION['member_id']; 
     1104                $sqlval['create_date'] = "now()"; 
     1105                $sqlval['update_date'] = "now()"; 
     1106                $objQuery->insert("dtb_recommend_products", $sqlval); 
     1107                $rank--; 
     1108            } 
     1109        } 
     1110    } 
     1111 
     1112    /** 
     1113     * 規格データをコピーする 
     1114     *  
     1115     * @param array $arrList フォーム入力パラメータ配列 
     1116     * @param object $objQuery SC_Queryインスタンス 
     1117     * @return boolean エラーフラグ 
     1118     */ 
     1119    function lfCopyProductClass($arrList, $objQuery) { 
     1120        // 複製元のdtb_products_classを取得(規格なしのため、1件のみの取得) 
     1121        $col = "*"; 
     1122        $table = "dtb_products_class"; 
     1123        $where = "product_id = ?"; 
     1124        $arrProductClass = $objQuery->select($col, $table, $where, array($arrList["copy_product_id"])); 
     1125 
     1126        //トランザクション開始 
     1127        $objQuery->begin(); 
     1128        $err_flag = false; 
     1129        //非編集項目は複製、編集項目は上書きして登録 
     1130        foreach($arrProductClass as $records) { 
     1131            foreach($records as $key => $value) { 
     1132                if(isset($arrList[$key])) { 
     1133                    $records[$key] = $arrList[$key]; 
     1134                } 
     1135            } 
     1136 
     1137            $records["product_class_id"] = $objQuery->nextVal('dtb_products_class_product_class_id'); 
     1138            $records["update_date"] = 'now()'; 
     1139            $records["create_date"] = "Now()"; 
     1140            $objQuery->insert($table, $records); 
     1141            //エラー発生時は中断 
     1142            if($objQuery->isError()) { 
     1143                $err_flag = true; 
     1144                continue; 
     1145            } 
     1146        } 
     1147        //トランザクション終了 
     1148        if($err_flag) { 
     1149            $objQuery->rollback(); 
     1150        } else { 
     1151            $objQuery->commit(); 
     1152        } 
     1153        return !$err_flag; 
     1154    } 
     1155 
     1156    /** 
     1157     * リネームする際は、自動生成される画像名に一意となるように、Suffixを付ける 
     1158     *  
     1159     * @param string $to_key 
     1160     * @return string  
     1161     */ 
     1162    function lfGetAddSuffix($to_key){ 
     1163        if( IMAGE_RENAME === true ) return ; 
     1164 
     1165        // 自動生成される画像名 
     1166        $dist_name = ""; 
     1167        switch($to_key) { 
     1168        case "main_list_image": 
     1169            $dist_name = '_s'; 
     1170            break; 
     1171        case "main_image": 
     1172            $dist_name = '_m'; 
     1173            break; 
     1174        default: 
     1175            $arrRet = explode('sub_image', $to_key); 
     1176            $dist_name = '_sub' .$arrRet[1]; 
     1177            break; 
     1178        } 
     1179        return $dist_name; 
     1180    } 
     1181 
     1182    /** 
     1183     * サブ情報の登録があるかを取得する 
     1184     * タイトル, コメント, 画像のいずれかに登録があれば「あり」と判定する 
     1185     *  
     1186     * @param array $arrSubProductData サブ情報配列 
     1187     * @return boolean true: サブ情報あり, false: サブ情報なし 
     1188     */ 
     1189    function hasSubProductData($arrSubProductData) { 
     1190        $has_subproduct_data = false; 
     1191 
     1192        for($i = 1; $i <= PRODUCTSUB_MAX; $i++) { 
     1193            if(SC_Utils_Ex::isBlank($arrSubProductData['sub_title'.$i]) == false 
     1194                    || SC_Utils_Ex::isBlank($arrSubProductData['sub_comment'.$i]) == false 
     1195                    || SC_Utils_Ex::isBlank($arrSubProductData['sub_image'.$i]) == false 
     1196                    || SC_Utils_Ex::isBlank($arrSubProductData['sub_large_image'.$i]) == false 
     1197                    || SC_Utils_Ex::isBlank($arrSubProductData['temp_sub_image'.$i]) == false 
     1198                    || SC_Utils_Ex::isBlank($arrSubProductData['temp_sub_large_image'.$i]) == false) { 
     1199                $has_subproduct_data = true; 
     1200                break; 
     1201            } 
     1202        } 
     1203 
     1204        return $has_subproduct_data; 
     1205    } 
     1206 
     1207    /** 
     1208     * アンカーハッシュ文字列を取得する 
     1209     * アンカーキーをサニタイジングする 
     1210     *  
     1211     * @param string $anchor_key フォーム入力パラメータで受け取ったアンカーキー 
     1212     * @return <type>  
     1213     */ 
     1214    function getAnchorHash($anchor_key) { 
     1215        if($anchor_key != "") { 
     1216            return "location.hash='#" . htmlspecialchars($anchor_key) . "'"; 
     1217        } else { 
     1218            return ""; 
     1219        } 
    9681220    } 
    9691221} 
Note: See TracChangeset for help on using the changeset viewer.