Ignore:
Timestamp:
2007/08/24 12:48:44 (17 years ago)
Author:
nanasess
Message:

クラス化対応

Location:
branches/feature-module-update/html/admin/products
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/feature-module-update/html/admin/products/index.php

    r15080 r15342  
    55 * http://www.lockon.co.jp/ 
    66 */ 
     7 
     8// {{{ requires 
    79require_once("../require.php"); 
    810require_once("./index_csv.php"); 
     11require_once(CLASS_PATH . "page_extends/admin/products/LC_Page_Admin_Products_Ex.php"); 
    912 
    10 class LC_Page { 
    11     var $arrForm; 
    12     var $arrHidden; 
    13     var $arrProducts; 
    14     var $arrPageMax; 
    15     function LC_Page() { 
    16         $this->tpl_mainpage = 'products/index.tpl'; 
    17         $this->tpl_mainno = 'products'; 
    18         $this->tpl_subnavi = 'products/subnavi.tpl'; 
    19         $this->tpl_subno = 'index'; 
    20         $this->tpl_pager = DATA_PATH . 'Smarty/templates/admin/pager.tpl'; 
    21         $this->tpl_subtitle = '商品マスタ'; 
     13// }}} 
     14// {{{ generate page 
    2215 
    23         global $arrPageMax; 
    24         $this->arrPageMax = $arrPageMax; 
    25         global $arrDISP; 
    26         $this->arrDISP = $arrDISP; 
    27         global $arrSTATUS; 
    28         $this->arrSTATUS = $arrSTATUS; 
    29         global $arrPRODUCTSTATUS_COLOR; 
    30         $this->arrPRODUCTSTATUS_COLOR = $arrPRODUCTSTATUS_COLOR; 
    31         /* 
    32          session_start時のno-cacheヘッダーを抑制することで 
    33          「戻る」ボタン使用時の有効期限切れ表示を抑制する。 
    34          private-no-expire:クライアントのキャッシュを許可する。 
    35         */ 
    36         session_cache_limiter('private-no-expire');      
    37     } 
    38 } 
    39  
    40 //$conn = new SC_DBConn(); 
    41 $objPage = new LC_Page(); 
    42 $objView = new SC_AdminView(); 
    43  
    44 $objDate = new SC_Date(); 
    45  
    46 // 登録・更新検索開始年 
    47 $objDate->setStartYear(RELEASE_YEAR); 
    48 $objDate->setEndYear(DATE("Y")); 
    49 $objPage->arrStartYear = $objDate->getYear(); 
    50 $objPage->arrStartMonth = $objDate->getMonth(); 
    51 $objPage->arrStartDay = $objDate->getDay(); 
    52 // 登録・更新検索終了年 
    53 $objDate->setStartYear(RELEASE_YEAR); 
    54 $objDate->setEndYear(DATE("Y")); 
    55 $objPage->arrEndYear = $objDate->getYear(); 
    56 $objPage->arrEndMonth = $objDate->getMonth(); 
    57 $objPage->arrEndDay = $objDate->getDay(); 
    58  
    59 // 認証可否の判定 
    60 $objSess = new SC_Session(); 
    61 sfIsSuccess($objSess); 
    62  
    63 //キャンペーンの編集時 
    64 if(sfIsInt($_POST['campaign_id']) && $_POST['mode'] == "camp_search") { 
    65     $objQuery = new SC_Query(); 
    66     $search_data = $objQuery->get("dtb_campaign", "search_condition", "campaign_id = ? ", array($_POST['campaign_id'])); 
    67     $arrSearch = unserialize($search_data); 
    68     foreach ($arrSearch as $key => $val) { 
    69         $_POST[$key] = $val; 
    70     } 
    71 } 
    72  
    73 // POST値の引き継ぎ 
    74 $objPage->arrForm = $_POST; 
    75  
    76 // 検索ワードの引き継ぎ 
    77 foreach ($_POST as $key => $val) { 
    78     if (ereg("^search_", $key) || ereg("^campaign_", $key)) { 
    79         switch($key) { 
    80             case 'search_product_flag': 
    81             case 'search_status': 
    82                 $objPage->arrHidden[$key] = sfMergeParamCheckBoxes($val); 
    83                 if(!is_array($val)) { 
    84                     $objPage->arrForm[$key] = split("-", $val); 
    85                 } 
    86                 break; 
    87             default: 
    88                 $objPage->arrHidden[$key] = $val; 
    89                 break; 
    90         } 
    91     } 
    92 } 
    93  
    94 // ページ送り用 
    95 $objPage->arrHidden['search_pageno'] = $_POST['search_pageno']; 
    96  
    97 // 商品削除 
    98 if ($_POST['mode'] == "delete") { 
    99      
    100     if($_POST['category_id'] != "") { 
    101         // ランク付きレコードの削除 
    102         $where = "category_id = " . addslashes($_POST['category_id']); 
    103         sfDeleteRankRecord("dtb_products", "product_id", $_POST['product_id'], $where); 
    104     } else { 
    105         sfDeleteRankRecord("dtb_products", "product_id", $_POST['product_id']); 
    106     } 
    107     // 子テーブル(商品規格)の削除 
    108     $objQuery = new SC_Query(); 
    109     $objQuery->delete("dtb_products_class", "product_id = ?", array($_POST['product_id'])); 
    110      
    111     // 件数カウントバッチ実行 
    112     sfCategory_Count($objQuery);     
    113 } 
    114  
    115  
    116 if ($_POST['mode'] == "search" || $_POST['mode'] == "csv"  || $_POST['mode'] == "delete" || $_POST['mode'] == "delete_all" || $_POST['mode'] == "camp_search") { 
    117     // 入力文字の強制変換 
    118     lfConvertParam(); 
    119     // エラーチェック 
    120     $objPage->arrErr = lfCheckError(); 
    121  
    122     $where = "del_flg = 0"; 
    123     $view_where = "del_flg = 0"; 
    124      
    125     // 入力エラーなし 
    126     if (count($objPage->arrErr) == 0) { 
    127  
    128         $arrval = array(); 
    129         foreach ($objPage->arrForm as $key => $val) { 
    130             $val = sfManualEscape($val); 
    131              
    132             if($val == "") { 
    133                 continue; 
    134             } 
    135              
    136             switch ($key) { 
    137                 case 'search_product_id':   // 商品ID 
    138                     $where .= " AND product_id = ?"; 
    139                     $view_where .= " AND product_id = ?"; 
    140                     $arrval[] = $val; 
    141                     break; 
    142                 case 'search_product_class_name': //規格名称 
    143                     $where_in = " (SELECT classcategory_id FROM dtb_classcategory WHERE class_id IN (SELECT class_id FROM dtb_class WHERE name LIKE ?)) "; 
    144                     $where .= " AND product_id IN (SELECT product_id FROM dtb_products_class WHERE classcategory_id1 IN " . $where_in; 
    145                     $where .= " OR classcategory_id2 IN" . $where_in . ")"; 
    146                     $view_where .= " AND product_id IN (SELECT product_id FROM dtb_products_class WHERE classcategory_id1 IN " . $where_in; 
    147                     $view_where .= " OR classcategory_id2 IN" . $where_in . ")"; 
    148                     $arrval[] = "%$val%"; 
    149                     $arrval[] = "%$val%"; 
    150                     $view_where = $where; 
    151                     break; 
    152                 case 'search_name':         // 商品名 
    153                     $where .= " AND name ILIKE ?"; 
    154                     $view_where .= " AND name ILIKE ?"; 
    155                     $arrval[] = "%$val%"; 
    156                     break; 
    157                 case 'search_category_id':  // カテゴリー 
    158                     list($tmp_where, $tmp_arrval) = sfGetCatWhere($val); 
    159                     if($tmp_where != "") { 
    160                         $where.= " AND $tmp_where"; 
    161                         $view_where.= " AND $tmp_where"; 
    162                         $arrval = array_merge((array)$arrval, (array)$tmp_arrval); 
    163                     } 
    164                     break; 
    165                 case 'search_product_code': // 商品コード 
    166                     $where .= " AND product_id IN (SELECT product_id FROM dtb_products_class WHERE product_code ILIKE ? GROUP BY product_id)"; 
    167                     $view_where .= " AND EXISTS (SELECT product_id FROM dtb_products_class as cls WHERE cls.product_code ILIKE ? AND dtb_products.product_id = cls.product_id GROUP BY cls.product_id )"; 
    168                     $arrval[] = "%$val%"; 
    169                     break; 
    170                 case 'search_startyear':    // 登録更新日(FROM) 
    171                     $date = sfGetTimestamp($_POST['search_startyear'], $_POST['search_startmonth'], $_POST['search_startday']); 
    172                     $where.= " AND update_date >= '" . $_POST['search_startyear'] . "/" . $_POST['search_startmonth']. "/" .$_POST['search_startday'] . "'"; 
    173                     $view_where.= " AND update_date >= '" . $_POST['search_startyear'] . "/" . $_POST['search_startmonth']. "/" .$_POST['search_startday'] . "'"; 
    174                     break; 
    175                 case 'search_endyear':      // 登録更新日(TO) 
    176                     $date = sfGetTimestamp($_POST['search_endyear'], $_POST['search_endmonth'], $_POST['search_endday']); 
    177                     $date = date('Y/m/d', strtotime($date) + 86400); 
    178                     $where.= " AND update_date < date('" . $date . "')"; 
    179                     $view_where.= " AND update_date < date('" . $date . "')"; 
    180                     break; 
    181                 case 'search_product_flag': //種別 
    182                     global $arrSTATUS; 
    183                     $search_product_flag = sfSearchCheckBoxes($val); 
    184                     if($search_product_flag != "") { 
    185                         $where.= " AND product_flag LIKE ?"; 
    186                         $view_where.= " AND product_flag LIKE ?"; 
    187                         $arrval[] = $search_product_flag;                    
    188                     } 
    189                     break; 
    190                 case 'search_status':       // ステータス 
    191                     $tmp_where = ""; 
    192                     foreach ($val as $element){ 
    193                         if ($element != ""){ 
    194                             if ($tmp_where == ""){ 
    195                                 $tmp_where.="AND (status LIKE ? "; 
    196                             }else{ 
    197                                 $tmp_where.="OR status LIKE ? "; 
    198                             } 
    199                             $arrval[]=$element; 
    200                         } 
    201                     } 
    202                     if ($tmp_where != ""){ 
    203                         $tmp_where.=")"; 
    204                         $where.= " $tmp_where"; 
    205                         $view_where.= " $tmp_where"; 
    206                     } 
    207                     break; 
    208                 default: 
    209                     break; 
    210             } 
    211         } 
    212  
    213         $order = "update_date DESC, product_id DESC"; 
    214         $objQuery = new SC_Query(); 
    215          
    216         switch($_POST['mode']) { 
    217         case 'csv': 
    218             // オプションの指定 
    219             $option = "ORDER BY $order"; 
    220             // CSV出力タイトル行の作成 
    221             $arrOutput = sfSwapArray(sfgetCsvOutput(1, " WHERE csv_id = 1 AND status = 1")); 
    222              
    223             if (count($arrOutput) <= 0) break; 
    224              
    225             $arrOutputCols = $arrOutput['col']; 
    226             $arrOutputTitle = $arrOutput['disp_name']; 
    227              
    228             $head = sfGetCSVList($arrOutputTitle); 
    229              
    230             $data = lfGetProductsCSV($where, $option, $arrval, $arrOutputCols); 
    231  
    232             // CSVを送信する。 
    233             sfCSVDownload($head.$data); 
    234             exit; 
    235             break; 
    236         case 'delete_all': 
    237             // 検索結果をすべて削除 
    238             $where = "product_id IN (SELECT product_id FROM vw_products_nonclass AS noncls  WHERE $where)"; 
    239             $sqlval['del_flg'] = 1; 
    240             $objQuery->update("dtb_products", $sqlval, $where, $arrval); 
    241             break; 
    242         default: 
    243             // 読み込む列とテーブルの指定 
    244             $col = "product_id, name, category_id, main_list_image, status, product_code, price01, price02, stock, stock_unlimited"; 
    245             $from = "vw_products_nonclass AS noncls "; 
    246  
    247             // 行数の取得 
    248             $linemax = $objQuery->count("dtb_products", $view_where, $arrval); 
    249             $objPage->tpl_linemax = $linemax;               // 何件が該当しました。表示用 
    250  
    251             // ページ送りの処理 
    252             if(is_numeric($_POST['search_page_max'])) {  
    253                 $page_max = $_POST['search_page_max']; 
    254             } else { 
    255                 $page_max = SEARCH_PMAX; 
    256             } 
    257  
    258             // ページ送りの取得 
    259             $objNavi = new SC_PageNavi($_POST['search_pageno'], $linemax, $page_max, "fnNaviSearchPage", NAVI_PMAX); 
    260             $startno = $objNavi->start_row; 
    261             $objPage->arrPagenavi = $objNavi->arrPagenavi; 
    262              
    263             //キャンペーン商品検索時は、全結果の商品IDを変数に格納する 
    264             if($_POST['search_mode'] == 'campaign') { 
    265                 $arrRet = $objQuery->select($col, $from, $where, $arrval); 
    266                 if(count($arrRet) > 0) { 
    267                     $arrRet = sfSwapArray($arrRet); 
    268                     $pid = implode("-", $arrRet['product_id']); 
    269                     $objPage->arrHidden['campaign_product_id'] = $pid; 
    270                 } 
    271             } 
    272  
    273             // 取得範囲の指定(開始行番号、行数のセット) 
    274             if(DB_TYPE != "mysql") $objQuery->setlimitoffset($page_max, $startno); 
    275             // 表示順序 
    276             $objQuery->setorder($order); 
    277              
    278             // viewも絞込みをかける(mysql用) 
    279             sfViewWhere("&&noncls_where&&", $view_where, $arrval, $objQuery->order . " " .  $objQuery->setlimitoffset($page_max, $startno, true)); 
    280  
    281             // 検索結果の取得 
    282             $objPage->arrProducts = $objQuery->select($col, $from, $where, $arrval); 
    283              
    284             break; 
    285         } 
    286     } 
    287 } 
    288      
    289 // カテゴリの読込 
    290 $objPage->arrCatList = sfGetCategoryList(); 
    291 $objPage->arrCatIDName = lfGetIDName($objPage->arrCatList); 
    292  
    293 // 画面の表示 
    294 $objView->assignobj($objPage); 
    295 $objView->display(MAIN_FRAME); 
    296  
    297 //--------------------------------------------------------------------------------------------------------------------------------------------------------- 
    298  
    299 // 取得文字列の変換  
    300 function lfConvertParam() { 
    301     global $objPage; 
    302     /* 
    303      *  文字列の変換 
    304      *  K :  「半角(ハンカク)片仮名」を「全角片仮名」に変換 
    305      *  C :  「全角ひら仮名」を「全角かた仮名」に変換 
    306      *  V :  濁点付きの文字を一文字に変換。"K","H"と共に使用します  
    307      *  n :  「全角」数字を「半角(ハンカク)」に変換 
    308      */ 
    309     $arrConvList['search_name'] = "KVa"; 
    310     $arrConvList['search_product_code'] = "KVa"; 
    311      
    312     // 文字変換 
    313     foreach ($arrConvList as $key => $val) { 
    314         // POSTされてきた値のみ変換する。 
    315         if(isset($objPage->arrForm[$key])) { 
    316             $objPage->arrForm[$key] = mb_convert_kana($objPage->arrForm[$key] ,$val); 
    317         } 
    318     } 
    319 } 
    320  
    321 // エラーチェック  
    322 // 入力エラーチェック 
    323 function lfCheckError() { 
    324     $objErr = new SC_CheckError(); 
    325     $objErr->doFunc(array("商品ID", "search_product_id"), array("NUM_CHECK")); 
    326     $objErr->doFunc(array("開始日", "search_startyear", "search_startmonth", "search_startday"), array("CHECK_DATE")); 
    327     $objErr->doFunc(array("終了日", "search_endyear", "search_endmonth", "search_endday"), array("CHECK_DATE")); 
    328     $objErr->doFunc(array("開始日", "終了日", "search_startyear", "search_startmonth", "search_startday", "search_endyear", "search_endmonth", "search_endday"), array("CHECK_SET_TERM")); 
    329     return $objErr->arrErr; 
    330 } 
    331  
    332 // チェックボックス用WHERE文作成 
    333 function lfGetCBWhere($key, $max) { 
    334     $str = ""; 
    335     $find = false; 
    336     for ($cnt = 1; $cnt <= $max; $cnt++) { 
    337         if ($_POST[$key . $cnt] == "1") { 
    338             $str.= "1"; 
    339             $find = true; 
    340         } else { 
    341             $str.= "_"; 
    342         } 
    343     } 
    344     if (!$find) { 
    345         $str = ""; 
    346     } 
    347     return $str; 
    348 } 
    349  
    350 // カテゴリIDをキー、カテゴリ名を値にする配列を返す。 
    351 function lfGetIDName($arrCatList) { 
    352     $max = count($arrCatList); 
    353     for ($cnt = 0; $cnt < $max; $cnt++ ) { 
    354         $key = $arrCatList[$cnt]['category_id']; 
    355         $val = $arrCatList[$cnt]['category_name']; 
    356         $arrRet[$key] = $val;    
    357     } 
    358     return $arrRet; 
    359 } 
    360  
     16$objPage = new LC_Page_Admin_Products_Ex(); 
     17$objPage->init(); 
     18$objPage->process(); 
     19register_shutdown_function(array($objPage, "destroy")); 
    36120?> 
  • branches/feature-module-update/html/admin/products/product.php

    r15080 r15342  
    55 * http://www.lockon.co.jp/ 
    66 */ 
     7 
     8// {{{ requires 
    79require_once("../require.php"); 
     10require_once(CLASS_PATH . "page_extends/admin/products/LC_Page_Admin_Products_Product_Ex.php"); 
    811 
    9 class LC_Page { 
    10     var $arrCatList; 
    11     var $arrSRANK; 
    12     var $arrForm; 
    13     var $arrSubList; 
    14     var $arrHidden; 
    15     var $arrTempImage; 
    16     var $arrSaveImage; 
    17     var $tpl_mode; 
    18     function LC_Page() { 
    19         $this->tpl_mainpage = 'products/product.tpl'; 
    20         $this->tpl_subnavi = 'products/subnavi.tpl'; 
    21         $this->tpl_mainno = 'products';      
    22         $this->tpl_subno = 'product'; 
    23         $this->tpl_subtitle = '商品登録'; 
    24         global $arrSRANK; 
    25         $this->arrSRANK = $arrSRANK; 
    26         global $arrDISP; 
    27         $this->arrDISP = $arrDISP; 
    28         global $arrCLASS; 
    29         $this->arrCLASS = $arrCLASS; 
    30         global $arrSTATUS; 
    31         $this->arrSTATUS = $arrSTATUS; 
    32         global $arrSTATUS_VALUE; 
    33         $this->arrSTATUS_VALUE = $arrSTATUS_VALUE; 
    34         global $arrSTATUS_IMAGE; 
    35         $this->arrSTATUS_IMAGE = $arrSTATUS_IMAGE; 
    36         global $arrDELIVERYDATE; 
    37         $this->arrDELIVERYDATE = $arrDELIVERYDATE; 
    38         $this->tpl_nonclass = true; 
    39     } 
    40 } 
     12// }}} 
     13// {{{ generate page 
    4114 
    42 $objPage = new LC_Page(); 
    43 $objView = new SC_AdminView(); 
    44 $objSiteInfo = new SC_SiteInfo(); 
    45 $objQuery = new SC_Query(); 
    46  
    47 // 認証可否の判定 
    48 $objSess = new SC_Session(); 
    49 sfIsSuccess($objSess); 
    50  
    51 // ファイル管理クラス 
    52 $objUpFile = new SC_UploadFile(IMAGE_TEMP_DIR, IMAGE_SAVE_DIR); 
    53  
    54 // ファイル情報の初期化 
    55 lfInitFile(); 
    56 // Hiddenからのデータを引き継ぐ 
    57 $objUpFile->setHiddenFileList($_POST); 
    58  
    59 // 検索パラメータの引き継ぎ 
    60 foreach ($_POST as $key => $val) { 
    61     if (ereg("^search_", $key)) { 
    62         $objPage->arrSearchHidden[$key] = $val;  
    63     } 
    64 } 
    65  
    66 // FORMデータの引き継ぎ 
    67 $objPage->arrForm = $_POST; 
    68  
    69 switch($_POST['mode']) { 
    70 // 検索画面からの編集 
    71 case 'pre_edit': 
    72 case 'copy' : 
    73     // 編集時 
    74     if(sfIsInt($_POST['product_id'])){ 
    75         // DBから商品情報の読込 
    76         $arrForm = lfGetProduct($_POST['product_id']); 
    77         // DBデータから画像ファイル名の読込 
    78         $objUpFile->setDBFileList($arrForm); 
    79          
    80         if($_POST['mode'] == "copy"){ 
    81             $arrForm["copy_product_id"] = $arrForm["product_id"]; 
    82             $arrForm["product_id"] = ""; 
    83             // 画像ファイルのコピー 
    84             $arrKey = $objUpFile->keyname; 
    85             $arrSaveFile = $objUpFile->save_file; 
    86              
    87             foreach($arrSaveFile as $key => $val){ 
    88                 lfMakeScaleImage($arrKey[$key], $arrKey[$key], true);  
    89             } 
    90         } 
    91         $objPage->arrForm = $arrForm; 
    92          
    93         // 商品ステータスの変換 
    94         $arrRet = sfSplitCBValue($objPage->arrForm['product_flag'], "product_flag"); 
    95         $objPage->arrForm = array_merge($objPage->arrForm, $arrRet); 
    96         // DBからおすすめ商品の読み込み 
    97         $objPage->arrRecommend = lfPreGetRecommendProducts($_POST['product_id']); 
    98          
    99         // 規格登録ありなし判定 
    100         $objPage->tpl_nonclass = lfCheckNonClass($_POST['product_id']); 
    101         lfProductPage();        // 商品登録ページ 
    102     } 
    103     break; 
    104 // 商品登録・編集 
    105 case 'edit': 
    106     // 規格登録ありなし判定 
    107     $tpl_nonclass = lfCheckNonClass($_POST['product_id']); 
    108      
    109     if($_POST['product_id'] == "" and sfIsInt($_POST['copy_product_id'])){ 
    110         $tpl_nonclass = lfCheckNonClass($_POST['copy_product_id']); 
    111     } 
    112     $objPage->tpl_nonclass = $tpl_nonclass; 
    113      
    114     // 入力値の変換 
    115     $objPage->arrForm = lfConvertParam($objPage->arrForm); 
    116     // エラーチェック 
    117     $objPage->arrErr = lfErrorCheck($objPage->arrForm); 
    118     // ファイル存在チェック 
    119     $objPage->arrErr = array_merge((array)$objPage->arrErr, (array)$objUpFile->checkEXISTS()); 
    120     // エラーなしの場合 
    121     if(count($objPage->arrErr) == 0) { 
    122         lfProductConfirmPage(); // 確認ページ 
    123     } else { 
    124         lfProductPage();        // 商品登録ページ 
    125     } 
    126     break; 
    127 // 確認ページから完了ページへ 
    128 case 'complete': 
    129     $objPage->tpl_mainpage = 'products/complete.tpl'; 
    130      
    131     $objPage->tpl_product_id = lfRegistProduct($_POST);     // データ登録 
    132      
    133     $objQuery = new SC_Query(); 
    134     // 件数カウントバッチ実行 
    135     sfCategory_Count($objQuery); 
    136     // 一時ファイルを本番ディレクトリに移動する 
    137     $objUpFile->moveTempFile(); 
    138  
    139     break; 
    140 // 画像のアップロード 
    141 case 'upload_image': 
    142     // ファイル存在チェック 
    143     $objPage->arrErr = array_merge((array)$objPage->arrErr, (array)$objUpFile->checkEXISTS($_POST['image_key'])); 
    144     // 画像保存処理 
    145     $objPage->arrErr[$_POST['image_key']] = $objUpFile->makeTempFile($_POST['image_key']); 
    146  
    147     // 中、小画像生成 
    148     lfSetScaleImage(); 
    149  
    150     lfProductPage(); // 商品登録ページ 
    151     break; 
    152 // 画像の削除 
    153 case 'delete_image': 
    154     $objUpFile->deleteFile($_POST['image_key']); 
    155     lfProductPage(); // 商品登録ページ 
    156     break; 
    157 // 確認ページからの戻り 
    158 case 'confirm_return': 
    159     // 規格登録ありなし判定 
    160     $objPage->tpl_nonclass = lfCheckNonClass($_POST['product_id']); 
    161     lfProductPage();        // 商品登録ページ 
    162     break; 
    163 // おすすめ商品選択 
    164 case 'recommend_select' : 
    165     lfProductPage();        // 商品登録ページ 
    166     break; 
    167 default: 
    168     // 公開・非公開のデフォルト値 
    169     $objPage->arrForm['status'] = DEFAULT_PRODUCT_DISP; 
    170     lfProductPage();        // 商品登録ページ 
    171     break; 
    172 } 
    173  
    174 if($_POST['mode'] != 'pre_edit') { 
    175     // おすすめ商品の読み込み 
    176     $objPage->arrRecommend = lfGetRecommendProducts(); 
    177 } 
    178  
    179 // 基本情報を渡す 
    180 $objPage->arrInfo = $objSiteInfo->data; 
    181  
    182 // サブ情報の入力があるかどうかチェックする 
    183 $sub_find = false; 
    184 for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 
    185     if( $objPage->arrForm['sub_title'.$cnt] != "" ||  
    186         $objPage->arrForm['sub_comment'.$cnt] != "" ||  
    187         $objPage->arrForm['sub_image'.$cnt] != "" ||  
    188         $objPage->arrForm['sub_large_image'.$cnt] != "" ||  
    189         is_array($objPage->arrFile['sub_image'.$cnt]) ||  
    190         is_array($objPage->arrFile['sub_large_image'.$cnt])) { 
    191         $sub_find = true; 
    192         break; 
    193     } 
    194 } 
    195 // サブ情報表示・非表示のチェックに使用する。 
    196 $objPage->sub_find = $sub_find; 
    197  
    198 $objView->assignobj($objPage); 
    199 $objView->display(MAIN_FRAME); 
    200 //----------------------------------------------------------------------------------------------------------------------------- 
    201  
    202 /* おすすめ商品の読み込み */ 
    203 function lfGetRecommendProducts() { 
    204     global $objPage; 
    205     $objQuery = new SC_Query(); 
    206      
    207     for($i = 1; $i <= RECOMMEND_PRODUCT_MAX; $i++) { 
    208         $keyname = "recommend_id" . $i; 
    209         $delkey = "recommend_delete" . $i; 
    210         $commentkey = "recommend_comment" . $i; 
    211  
    212         if($_POST[$keyname] != "" && $_POST[$delkey] != 1) { 
    213             $arrRet = $objQuery->select("main_list_image, product_code_min, name", "vw_products_allclass AS allcls", "product_id = ?", array($_POST[$keyname]));  
    214             $arrRecommend[$i] = $arrRet[0]; 
    215             $arrRecommend[$i]['product_id'] = $_POST[$keyname]; 
    216             $arrRecommend[$i]['comment'] = $objPage->arrForm[$commentkey]; 
    217         } 
    218     } 
    219     return $arrRecommend; 
    220 } 
    221  
    222 /* おすすめ商品の登録 */ 
    223 function lfInsertRecommendProducts($objQuery, $arrList, $product_id) { 
    224     // 一旦オススメ商品をすべて削除する 
    225     $objQuery->delete("dtb_recommend_products", "product_id = ?", array($product_id)); 
    226     $sqlval['product_id'] = $product_id; 
    227     $rank = RECOMMEND_PRODUCT_MAX; 
    228     for($i = 1; $i <= RECOMMEND_PRODUCT_MAX; $i++) { 
    229         $keyname = "recommend_id" . $i; 
    230         $commentkey = "recommend_comment" . $i; 
    231         $deletekey = "recommend_delete" . $i; 
    232         if($arrList[$keyname] != "" && $arrList[$deletekey] != '1') { 
    233             $sqlval['recommend_product_id'] = $arrList[$keyname]; 
    234             $sqlval['comment'] = $arrList[$commentkey]; 
    235             $sqlval['rank'] = $rank; 
    236             $sqlval['creator_id'] = $_SESSION['member_id']; 
    237             $sqlval['create_date'] = "now()"; 
    238             $sqlval['update_date'] = "now()"; 
    239             $objQuery->insert("dtb_recommend_products", $sqlval); 
    240             $rank--; 
    241         } 
    242     } 
    243 } 
    244  
    245 /* 登録済みおすすめ商品の読み込み */ 
    246 function lfPreGetRecommendProducts($product_id) { 
    247     $objQuery = new SC_Query(); 
    248     $objQuery->setorder("rank DESC"); 
    249     $arrRet = $objQuery->select("recommend_product_id, comment", "dtb_recommend_products", "product_id = ?", array($product_id)); 
    250     $max = count($arrRet); 
    251     $no = 1; 
    252      
    253     for($i = 0; $i < $max; $i++) { 
    254         $arrProductInfo = $objQuery->select("main_list_image, product_code_min, name", "vw_products_allclass AS allcls", "product_id = ?", array($arrRet[$i]['recommend_product_id']));  
    255         $arrRecommend[$no] = $arrProductInfo[0]; 
    256         $arrRecommend[$no]['product_id'] = $arrRet[$i]['recommend_product_id']; 
    257         $arrRecommend[$no]['comment'] = $arrRet[$i]['comment']; 
    258         $no++; 
    259     } 
    260     return $arrRecommend; 
    261 } 
    262  
    263 /* 商品情報の読み込み */ 
    264 function lfGetProduct($product_id) { 
    265     $objQuery = new SC_Query(); 
    266     $col = "*"; 
    267     $table = "vw_products_nonclass AS noncls "; 
    268     $where = "product_id = ?"; 
    269      
    270     // viewも絞込み(mysql対応) 
    271     sfViewWhere("&&noncls_where&&", $where, array($product_id)); 
    272      
    273     $arrRet = $objQuery->select($col, $table, $where, array($product_id)); 
    274          
    275     return $arrRet[0]; 
    276 } 
    277  
    278 /* 商品登録ページ表示用 */ 
    279 function lfProductPage() { 
    280     global $objPage; 
    281     global $objUpFile; 
    282      
    283     // カテゴリの読込 
    284     list($objPage->arrCatVal, $objPage->arrCatOut) = sfGetLevelCatList(false); 
    285  
    286     if($objPage->arrForm['status'] == "") { 
    287         $objPage->arrForm['status'] = 1; 
    288     } 
    289      
    290     if(!is_array($objPage->arrForm['product_flag'])) { 
    291         // 商品ステータスの分割読込 
    292         $objPage->arrForm['product_flag'] = sfSplitCheckBoxes($objPage->arrForm['product_flag']); 
    293     } 
    294      
    295     // HIDDEN用に配列を渡す。 
    296     $objPage->arrHidden = array_merge((array)$objPage->arrHidden, (array)$objUpFile->getHiddenFileList()); 
    297     // Form用配列を渡す。 
    298     $objPage->arrFile = $objUpFile->getFormFileList(IMAGE_TEMP_URL, IMAGE_SAVE_URL); 
    299      
    300      
    301     // アンカーを設定 
    302     if($_POST['image_key'] != ""){ 
    303         $anchor_hash = "location.hash='#" . $_POST['image_key'] . "'"; 
    304     }elseif($_POST['anchor_key'] != ""){ 
    305         $anchor_hash = "location.hash='#" . $_POST['anchor_key'] . "'"; 
    306     } 
    307          
    308     $objPage->tpl_onload = "fnCheckSaleLimit('" . DISABLED_RGB . "'); fnCheckStockLimit('" . DISABLED_RGB . "'); " . $anchor_hash; 
    309 } 
    310  
    311 /* ファイル情報の初期化 */ 
    312 function lfInitFile() { 
    313     global $objUpFile; 
    314     $objUpFile->addFile("一覧-メイン画像", 'main_list_image', array('jpg', 'gif', 'png'),IMAGE_SIZE, true, SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT); 
    315     $objUpFile->addFile("詳細-メイン画像", 'main_image', array('jpg', 'gif', 'png'), IMAGE_SIZE, true, NORMAL_IMAGE_WIDTH, NORMAL_IMAGE_HEIGHT); 
    316     $objUpFile->addFile("詳細-メイン拡大画像", 'main_large_image', array('jpg', 'gif', 'png'), IMAGE_SIZE, false, LARGE_IMAGE_WIDTH, LARGE_IMAGE_HEIGHT); 
    317     for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 
    318         $objUpFile->addFile("詳細-サブ画像$cnt", "sub_image$cnt", array('jpg', 'gif', 'png'), IMAGE_SIZE, false, NORMAL_SUBIMAGE_WIDTH, NORMAL_SUBIMAGE_HEIGHT);   
    319         $objUpFile->addFile("詳細-サブ拡大画像$cnt", "sub_large_image$cnt", array('jpg', 'gif', 'png'), IMAGE_SIZE, false, LARGE_SUBIMAGE_WIDTH, LARGE_SUBIMAGE_HEIGHT); 
    320     } 
    321     $objUpFile->addFile("商品比較画像", 'file1', array('jpg', 'gif', 'png'), IMAGE_SIZE, false, OTHER_IMAGE1_WIDTH, OTHER_IMAGE1_HEIGHT); 
    322     $objUpFile->addFile("商品詳細ファイル", 'file2', array('pdf'), PDF_SIZE, false, 0, 0, false); 
    323 } 
    324  
    325 /* 商品の登録 */ 
    326 function lfRegistProduct($arrList) { 
    327     global $objUpFile; 
    328     global $arrSTATUS; 
    329     $objQuery = new SC_Query(); 
    330     $objQuery->begin(); 
    331      
    332     // INSERTする値を作成する。 
    333     $sqlval['name'] = $arrList['name']; 
    334     $sqlval['category_id'] = $arrList['category_id']; 
    335     $sqlval['status'] = $arrList['status']; 
    336     $sqlval['product_flag'] = $arrList['product_flag']; 
    337     $sqlval['main_list_comment'] = $arrList['main_list_comment']; 
    338     $sqlval['main_comment'] = $arrList['main_comment']; 
    339     $sqlval['point_rate'] = $arrList['point_rate'];  
    340     $sqlval['deliv_fee'] = $arrList['deliv_fee']; 
    341     $sqlval['comment1'] = $arrList['comment1']; 
    342     $sqlval['comment2'] = $arrList['comment2']; 
    343     $sqlval['comment3'] = $arrList['comment3']; 
    344     $sqlval['comment4'] = $arrList['comment4']; 
    345     $sqlval['comment5'] = $arrList['comment5']; 
    346     $sqlval['comment6'] = $arrList['comment6']; 
    347     $sqlval['main_list_comment'] = $arrList['main_list_comment']; 
    348     $sqlval['sale_limit'] = $arrList['sale_limit']; 
    349     $sqlval['sale_unlimited'] = $arrList['sale_unlimited']; 
    350     $sqlval['deliv_date_id'] = $arrList['deliv_date_id']; 
    351     $sqlval['update_date'] = "Now()"; 
    352     $sqlval['creator_id'] = $_SESSION['member_id']; 
    353     $arrRet = $objUpFile->getDBFileList(); 
    354     $sqlval = array_merge($sqlval, $arrRet); 
    355          
    356     for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 
    357         $sqlval['sub_title'.$cnt] = $arrList['sub_title'.$cnt]; 
    358         $sqlval['sub_comment'.$cnt] = $arrList['sub_comment'.$cnt]; 
    359     } 
    360  
    361     if($arrList['product_id'] == "") { 
    362         if (DB_TYPE == "pgsql") { 
    363             $product_id = $objQuery->nextval("dtb_products", "product_id"); 
    364             $sqlval['product_id'] = $product_id; 
    365         } 
    366         // カテゴリ内で最大のランクを割り当てる 
    367         $sqlval['rank'] = $objQuery->max("dtb_products", "rank", "category_id = ?", array($arrList['category_id'])) + 1; 
    368         // INSERTの実行 
    369         $sqlval['create_date'] = "Now()"; 
    370         $objQuery->insert("dtb_products", $sqlval); 
    371  
    372         if (DB_TYPE == "mysql") { 
    373             $product_id = $objQuery->nextval("dtb_products", "product_id"); 
    374             $sqlval['product_id'] = $product_id; 
    375         } 
    376          
    377         // コピー商品の場合には規格もコピーする 
    378         if($_POST["copy_product_id"] != "" and sfIsInt($_POST["copy_product_id"])){ 
    379             // dtb_products_class のカラムを取得 
    380             $arrColList = sfGetColumnList("dtb_products_class", $objQuery); 
    381             $arrColList_tmp = array_flip($arrColList); 
    382  
    383             // コピーしない列 
    384             unset($arrColList[$arrColList_tmp["product_class_id"]]);     //規格ID 
    385             unset($arrColList[$arrColList_tmp["product_id"]]);           //商品ID 
    386  
    387             $col = sfGetCommaList($arrColList); 
    388  
    389             $objQuery->query("INSERT INTO dtb_products_class (product_id, ". $col .") SELECT ?, " . $col. " FROM dtb_products_class WHERE product_id = ? ORDER BY product_class_id", array($product_id, $_POST["copy_product_id"])); 
    390              
    391         } 
    392  
    393     } else { 
    394         $product_id = $arrList['product_id']; 
    395         // 削除要求のあった既存ファイルの削除 
    396         $arrRet = lfGetProduct($arrList['product_id']); 
    397         $objUpFile->deleteDBFile($arrRet); 
    398          
    399         // カテゴリ内ランクの調整処理 
    400         $old_catid = $objQuery->get("dtb_products", "category_id", "product_id = ?", array($arrList['product_id'])); 
    401         sfMoveCatRank($objQuery, "dtb_products", "product_id", "category_id", $old_catid, $arrList['category_id'], $arrList['product_id']); 
    402          
    403         // UPDATEの実行 
    404         $where = "product_id = ?"; 
    405         $objQuery->update("dtb_products", $sqlval, $where, array($arrList['product_id'])); 
    406     } 
    407      
    408     // 規格登録 
    409     sfInsertProductClass($objQuery, $arrList, $product_id); 
    410      
    411     // おすすめ商品登録 
    412     lfInsertRecommendProducts($objQuery, $arrList, $product_id); 
    413      
    414     $objQuery->commit(); 
    415     return $product_id; 
    416 } 
    417  
    418  
    419 /* 取得文字列の変換 */ 
    420 function lfConvertParam($array) { 
    421     /* 
    422      *  文字列の変換 
    423      *  K :  「半角(ハンカク)片仮名」を「全角片仮名」に変換 
    424      *  C :  「全角ひら仮名」を「全角かた仮名」に変換 
    425      *  V :  濁点付きの文字を一文字に変換。"K","H"と共に使用します  
    426      *  n :  「全角」数字を「半角(ハンカク)」に変換 
    427      */ 
    428     // 人物基本情報 
    429      
    430     // スポット商品 
    431     $arrConvList['name'] = "KVa"; 
    432     $arrConvList['main_list_comment'] = "KVa"; 
    433     $arrConvList['main_comment'] = "KVa"; 
    434     $arrConvList['price01'] = "n"; 
    435     $arrConvList['price02'] = "n"; 
    436     $arrConvList['stock'] = "n"; 
    437     $arrConvList['sale_limit'] = "n"; 
    438     $arrConvList['point_rate'] = "n"; 
    439     $arrConvList['product_code'] = "KVna"; 
    440     $arrConvList['comment1'] = "a"; 
    441     //ホネケーキ:送料の指定なし 
    442     $arrConvList['deliv_fee'] = "n"; 
    443      
    444     // 詳細-サブ 
    445     for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 
    446         $arrConvList["sub_title$cnt"] = "KVa"; 
    447     } 
    448     for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 
    449         $arrConvList["sub_comment$cnt"] = "KVa"; 
    450     } 
    451      
    452     // おすすめ商品 
    453     for ($cnt = 1; $cnt <= RECOMMEND_PRODUCT_MAX; $cnt++) { 
    454         $arrConvList["recommend_comment$cnt"] = "KVa"; 
    455     } 
    456  
    457     // 文字変換 
    458     foreach ($arrConvList as $key => $val) { 
    459         // POSTされてきた値のみ変換する。 
    460         if(isset($array[$key])) { 
    461             $array[$key] = mb_convert_kana($array[$key] ,$val); 
    462         } 
    463     } 
    464      
    465     global $arrSTATUS; 
    466     $array['product_flag'] = sfMergeCheckBoxes($array['product_flag'], count($arrSTATUS)); 
    467      
    468     return $array; 
    469 } 
    470  
    471 // 入力エラーチェック 
    472 function lfErrorCheck($array) { 
    473     global $objPage; 
    474     global $arrAllowedTag; 
    475      
    476     $objErr = new SC_CheckError($array); 
    477     $objErr->doFunc(array("商品名", "name", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
    478     $objErr->doFunc(array("商品カテゴリ", "category_id", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
    479     $objErr->doFunc(array("一覧-メインコメント", "main_list_comment", MTEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
    480     $objErr->doFunc(array("詳細-メインコメント", "main_comment", LLTEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
    481     $objErr->doFunc(array("詳細-メインコメント", "main_comment", $arrAllowedTag), array("HTML_TAG_CHECK")); 
    482     $objErr->doFunc(array("ポイント付与率", "point_rate", PERCENTAGE_LEN), array("EXIST_CHECK", "NUM_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
    483     $objErr->doFunc(array("商品送料", "deliv_fee", PRICE_LEN), array("NUM_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
    484     $objErr->doFunc(array("検索ワード", "comment3", LLTEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
    485     $objErr->doFunc(array("メーカーURL", "comment1", URL_LEN), array("SPTAB_CHECK", "URL_CHECK", "MAX_LENGTH_CHECK")); 
    486     $objErr->doFunc(array("発送日目安", "deliv_date_id", INT_LEN), array("NUM_CHECK")); 
    487      
    488     if($objPage->tpl_nonclass) { 
    489         $objErr->doFunc(array("商品コード", "product_code", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK","MAX_LENGTH_CHECK","MAX_LENGTH_CHECK")); 
    490         $objErr->doFunc(array("通常価格", "price01", PRICE_LEN), array("ZERO_CHECK", "SPTAB_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 
    491         $objErr->doFunc(array("商品価格", "price02", PRICE_LEN), array("EXIST_CHECK", "NUM_CHECK", "ZERO_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
    492              
    493         if($array['stock_unlimited'] != "1") { 
    494             $objErr->doFunc(array("在庫数", "stock", AMOUNT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 
    495         } 
    496     } 
    497      
    498     if($array['sale_unlimited'] != "1") {    
    499         $objErr->doFunc(array("購入制限", "sale_limit", AMOUNT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "ZERO_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 
    500     } 
    501      
    502     if(isset($objErr->arrErr['category_id'])) { 
    503         // 自動選択を防ぐためにダミー文字を入れておく 
    504         $objPage->arrForm['category_id'] = "#"; 
    505     } 
    506      
    507     for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 
    508         $objErr->doFunc(array("詳細-サブタイトル$cnt", "sub_title$cnt", STEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
    509         $objErr->doFunc(array("詳細-サブコメント$cnt", "sub_comment$cnt", LLTEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
    510         $objErr->doFunc(array("詳細-サブコメント$cnt", "sub_comment$cnt", $arrAllowedTag),  array("HTML_TAG_CHECK"));    
    511     } 
    512      
    513     for ($cnt = 1; $cnt <= RECOMMEND_PRODUCT_MAX; $cnt++) { 
    514         if($_POST["recommend_id$cnt"] != "" && $_POST["recommend_delete$cnt"] != 1) { 
    515             $objErr->doFunc(array("おすすめ商品コメント$cnt", "recommend_comment$cnt", LTEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
    516         } 
    517     } 
    518      
    519     return $objErr->arrErr; 
    520 } 
    521  
    522 /* 確認ページ表示用 */ 
    523 function lfProductConfirmPage() { 
    524     global $objPage; 
    525     global $objUpFile; 
    526     $objPage->tpl_mainpage = 'products/confirm.tpl'; 
    527     $objPage->arrForm['mode'] = 'complete'; 
    528     // カテゴリの読込 
    529     $objPage->arrCatList = sfGetCategoryList(); 
    530     // Form用配列を渡す。 
    531     $objPage->arrFile = $objUpFile->getFormFileList(IMAGE_TEMP_URL, IMAGE_SAVE_URL); 
    532 } 
    533  
    534 /* 規格あり判定用(規格が登録されていない場合:TRUE) */ 
    535 function lfCheckNonClass($product_id) { 
    536     if(sfIsInt($product_id)) { 
    537         $objQuery  = new SC_Query(); 
    538         $where = "product_id = ? AND classcategory_id1 <> 0 AND classcategory_id1 <> 0"; 
    539         $count = $objQuery->count("dtb_products_class", $where, array($product_id)); 
    540         if($count > 0) { 
    541             return false; 
    542         } 
    543     } 
    544     return true; 
    545 } 
    546  
    547 // 縮小した画像をセットする 
    548 function lfSetScaleImage(){ 
    549      
    550     $subno = str_replace("sub_large_image", "", $_POST['image_key']); 
    551     switch ($_POST['image_key']){ 
    552         case "main_large_image": 
    553             // 詳細メイン画像 
    554             lfMakeScaleImage($_POST['image_key'], "main_image"); 
    555         case "main_image": 
    556             // 一覧メイン画像 
    557             lfMakeScaleImage($_POST['image_key'], "main_list_image"); 
    558             break; 
    559         case "sub_large_image" . $subno: 
    560             // サブメイン画像 
    561             lfMakeScaleImage($_POST['image_key'], "sub_image" . $subno); 
    562             break; 
    563         default: 
    564             break; 
    565     } 
    566 } 
    567  
    568 // 縮小画像生成 
    569 function lfMakeScaleImage($from_key, $to_key, $forced = false){ 
    570     global $objUpFile; 
    571     $arrImageKey = array_flip($objUpFile->keyname); 
    572      
    573     if($objUpFile->temp_file[$arrImageKey[$from_key]]){ 
    574         $from_path = $objUpFile->temp_dir . $objUpFile->temp_file[$arrImageKey[$from_key]]; 
    575     }elseif($objUpFile->save_file[$arrImageKey[$from_key]]){ 
    576         $from_path = $objUpFile->save_dir . $objUpFile->save_file[$arrImageKey[$from_key]]; 
    577     }else{ 
    578         return ""; 
    579     } 
    580      
    581     if(file_exists($from_path)){ 
    582         // 元画像サイズを取得 
    583         list($from_w, $from_h) = getimagesize($from_path); 
    584          
    585         // 生成先の画像サイズを取得 
    586         $to_w = $objUpFile->width[$arrImageKey[$to_key]]; 
    587         $to_h = $objUpFile->height[$arrImageKey[$to_key]]; 
    588          
    589          
    590         if($forced) $objUpFile->save_file[$arrImageKey[$to_key]] = ""; 
    591          
    592         if(($objUpFile->temp_file[$arrImageKey[$to_key]] == "" and $objUpFile->save_file[$arrImageKey[$to_key]] == "")){ 
    593             $path = $objUpFile->makeThumb($from_path, $to_w, $to_h); 
    594             $objUpFile->temp_file[$arrImageKey[$to_key]] = basename($path); 
    595         } 
    596     }else{ 
    597         return ""; 
    598     } 
    599 } 
    600  
     15$objPage = new LC_Page_Admin_Products_Product_Ex(); 
     16$objPage->init(); 
     17$objPage->process(); 
     18register_shutdown_function(array($objPage, "destroy")); 
    60119?> 
Note: See TracChangeset for help on using the changeset viewer.