Page
[ class tree: Page ] [ index: Page ] [ all elements ]

Source for file LC_Page_Admin_Products.php

Documentation is available at LC_Page_Admin_Products.php

  1. <?php
  2. /*
  3.  * This file is part of EC-CUBE
  4.  *
  5.  * Copyright(c) 2000-2010 LOCKON CO.,LTD. All Rights Reserved.
  6.  *
  7.  * http://www.lockon.co.jp/
  8.  *
  9.  * This program is free software; you can redistribute it and/or
  10.  * modify it under the terms of the GNU General Public License
  11.  * as published by the Free Software Foundation; either version 2
  12.  * of the License, or (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  22.  */
  23.  
  24. // {{{ requires
  25. require_once(CLASS_PATH "pages/LC_Page.php");
  26.  
  27. /**
  28.  * 商品管理 のページクラス.
  29.  *
  30.  * @package Page
  31.  * @author LOCKON CO.,LTD.
  32.  * @version $Id:LC_Page_Admin_Products.php 15532 2007-08-31 14:39:46Z nanasess $
  33.  */
  34. class LC_Page_Admin_Products extends LC_Page {
  35.  
  36.     // }}}
  37.     // {{{ functions
  38.  
  39.     /**
  40.      * Page を初期化する.
  41.      *
  42.      * @return void 
  43.      */
  44.     function init({
  45.         parent::init();
  46.         $this->tpl_mainpage = 'products/index.tpl';
  47.         $this->tpl_mainno = 'products';
  48.         $this->tpl_subnavi 'products/subnavi.tpl';
  49.         $this->tpl_subno 'index';
  50.         $this->tpl_pager TEMPLATE_DIR 'admin/pager.tpl';
  51.         $this->tpl_subtitle '商品マスタ';
  52.  
  53.         $masterData new SC_DB_MasterData_Ex();
  54.         $this->arrPageMax $masterData->getMasterData("mtb_page_max");
  55.         $this->arrDISP $masterData->getMasterData("mtb_disp");
  56.         $this->arrSTATUS $masterData->getMasterData("mtb_status");
  57.         $this->arrPRODUCTSTATUS_COLOR $masterData->getMasterData("mtb_product_status_color");
  58.  
  59.         $this->allowClientCache();
  60.     }
  61.  
  62.     /**
  63.      * Page のプロセス.
  64.      *
  65.      * @return void 
  66.      */
  67.     function process({
  68.         $objView new SC_AdminView();
  69.         $objDb new SC_Helper_DB_Ex();
  70.         $objDate new SC_Date();
  71.  
  72.         // 登録・更新検索開始年
  73.         $objDate->setStartYear(RELEASE_YEAR);
  74.         $objDate->setEndYear(DATE("Y"));
  75.         $this->arrStartYear $objDate->getYear();
  76.         $this->arrStartMonth $objDate->getMonth();
  77.         $this->arrStartDay $objDate->getDay();
  78.         // 登録・更新検索終了年
  79.         $objDate->setStartYear(RELEASE_YEAR);
  80.         $objDate->setEndYear(DATE("Y"));
  81.         $this->arrEndYear $objDate->getYear();
  82.         $this->arrEndMonth $objDate->getMonth();
  83.         $this->arrEndDay $objDate->getDay();
  84.  
  85.         // 認証可否の判定
  86.         $objSess new SC_Session();
  87.         SC_Utils_Ex::sfIsSuccess($objSess);
  88.  
  89.         if (!isset($_POST['mode'])) $_POST['mode'"";
  90.  
  91.         //キャンペーンの編集時
  92.         if(isset($_POST['campaign_id']&& SC_Utils_Ex::sfIsInt($_POST['campaign_id'])
  93.                 && $_POST['mode'== "camp_search"{
  94.             $objQuery new SC_Query();
  95.             $search_data $objQuery->get("dtb_campaign""search_condition""campaign_id = ? "array($_POST['campaign_id']));
  96.             $arrSearch unserialize($search_data);
  97.             foreach ($arrSearch as $key => $val{
  98.                 $_POST[$key$val;
  99.             }
  100.         }
  101.  
  102.         // POST値の引き継ぎ
  103.         $this->arrForm $_POST;
  104.  
  105.         // 検索ワードの引き継ぎ
  106.         foreach ($_POST as $key => $val{
  107.             if (ereg("^search_"$key|| ereg("^campaign_"$key)) {
  108.                 switch($key{
  109.                     case 'search_product_flag':
  110.                     case 'search_status':
  111.                         $this->arrHidden[$keySC_Utils_Ex::sfMergeParamCheckBoxes($val);
  112.                         if(!is_array($val)) {
  113.                             $this->arrForm[$keysplit("-"$val);
  114.                         }
  115.                         break;
  116.                     default:
  117.                         $this->arrHidden[$key$val;
  118.                         break;
  119.                 }
  120.             }
  121.         }
  122.  
  123.         // ページ送り用
  124.         $this->arrHidden['search_pageno'= isset($_POST['search_pageno']$_POST['search_pageno'"";
  125.  
  126.         // 商品削除
  127.         if ($_POST['mode'== "delete"{
  128.  
  129.             if($_POST['category_id'!= ""{
  130.                 // ランク付きレコードの削除
  131.                 $where "category_id = " SC_Utils_Ex::sfQuoteSmart($_POST['category_id']);
  132.                 $objDb->sfDeleteRankRecord("dtb_products""product_id"$_POST['product_id']$where);
  133.             else {
  134.                 $objDb->sfDeleteRankRecord("dtb_products""product_id"$_POST['product_id']);
  135.             }
  136.             // 子テーブル(商品規格)の削除
  137.             $objQuery new SC_Query();
  138.             $objQuery->delete("dtb_products_class""product_id = ?"array($_POST['product_id']));
  139.  
  140.             // 件数カウントバッチ実行
  141.             $objDb->sfCategory_Count($objQuery);
  142.         }
  143.  
  144.  
  145.         if ($_POST['mode'== "search" || $_POST['mode'== "csv"  || $_POST['mode'== "delete" || $_POST['mode'== "delete_all" || $_POST['mode'== "camp_search"{
  146.             // 入力文字の強制変換
  147.             $this->lfConvertParam();
  148.             // エラーチェック
  149.             $this->arrErr $this->lfCheckError();
  150.  
  151.             $where "del_flg = 0";
  152.             $view_where "del_flg = 0";
  153.  
  154.             // 入力エラーなし
  155.             if (count($this->arrErr== 0{
  156.  
  157.                 $arrval array();
  158.                 foreach ($this->arrForm as $key => $val{
  159.                     $val SC_Utils_Ex::sfManualEscape($val);
  160.  
  161.                     if($val == ""{
  162.                         continue;
  163.                     }
  164.  
  165.                     switch ($key{
  166.                         case 'search_product_id'// 商品ID
  167.                             $where .= " AND product_id = ?";
  168.                             $view_where .= " AND product_id = ?";
  169.                             $arrval[$val;
  170.                             break;
  171.                         case 'search_product_class_name'//規格名称
  172.                             $where_in " (SELECT classcategory_id FROM dtb_classcategory WHERE class_id IN (SELECT class_id FROM dtb_class WHERE name LIKE ?)) ";
  173.                             $where .= " AND product_id IN (SELECT product_id FROM dtb_products_class WHERE classcategory_id1 IN " $where_in;
  174.                             $where .= " OR classcategory_id2 IN" $where_in ")";
  175.                             $view_where .= " AND product_id IN (SELECT product_id FROM dtb_products_class WHERE classcategory_id1 IN " $where_in;
  176.                             $view_where .= " OR classcategory_id2 IN" $where_in ")";
  177.                             $arrval["%$val%";
  178.                             $arrval["%$val%";
  179.                             $view_where $where;
  180.                             break;
  181.                         case 'search_name'// 商品名
  182.                             $where .= " AND name ILIKE ?";
  183.                             $view_where .= " AND name ILIKE ?";
  184.                             $arrval["%$val%";
  185.                             break;
  186.                         case 'search_category_id'// カテゴリー
  187.                             list($tmp_where$tmp_arrval$objDb->sfGetCatWhere($val);
  188.                             if($tmp_where != ""{
  189.                                 $where.= " AND product_id IN (SELECT product_id FROM dtb_product_categories WHERE " $tmp_where ")";
  190.                                 $view_where.= " AND product_id IN (SELECT product_id FROM dtb_product_categories WHERE " $tmp_where ")";
  191.                                 $arrval array_merge((array)$arrval(array)$tmp_arrval);
  192.                             }
  193.                             break;
  194.                         case 'search_product_code'// 商品コード
  195.                             $where .= " AND product_id IN (SELECT product_id FROM dtb_products_class WHERE product_code ILIKE ? GROUP BY product_id)";
  196.                             $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 )";
  197.                             $arrval["%$val%";
  198.                             break;
  199.                         case 'search_startyear'// 登録更新日(FROM)
  200.                             $date SC_Utils_Ex::sfGetTimestamp($_POST['search_startyear']$_POST['search_startmonth']$_POST['search_startday']);
  201.                             $where.= " AND update_date >= '" $_POST['search_startyear'"/" $_POST['search_startmonth']"/" .$_POST['search_startday'"'";
  202.                             $view_where.= " AND update_date >= '" $_POST['search_startyear'"/" $_POST['search_startmonth']"/" .$_POST['search_startday'"'";
  203.                             break;
  204.                         case 'search_endyear'// 登録更新日(TO)
  205.                             $date SC_Utils_Ex::sfGetTimestamp($_POST['search_endyear']$_POST['search_endmonth']$_POST['search_endday']);
  206.                             $date date('Y/m/d'strtotime($date86400);
  207.                             $where.= " AND update_date < date('" $date "')";
  208.                             $view_where.= " AND update_date < date('" $date "')";
  209.                             break;
  210.                         case 'search_product_flag'//種別
  211.                             global $arrSTATUS;
  212.                             $search_product_flag SC_Utils_Ex::sfSearchCheckBoxes($val);
  213.                             if($search_product_flag != ""{
  214.                                 $where.= " AND product_flag LIKE ?";
  215.                                 $view_where.= " AND product_flag LIKE ?";
  216.                                 $arrval[$search_product_flag;
  217.                             }
  218.                             break;
  219.                         case 'search_status'// ステータス
  220.                             $tmp_where "";
  221.                             foreach ($val as $element){
  222.                                 if ($element != ""){
  223.                                     if ($tmp_where == ""){
  224.                                         $tmp_where.="AND (status = ? ";
  225.                                     }else{
  226.                                         $tmp_where.="OR status = ? ";
  227.                                     }
  228.                                     $arrval[]=$element;
  229.                                 }
  230.                             }
  231.                             if ($tmp_where != ""){
  232.                                 $tmp_where.=")";
  233.                                 $where.= " $tmp_where";
  234.                                 $view_where.= " $tmp_where";
  235.                             }
  236.                             break;
  237.                         default:
  238.                             break;
  239.                     }
  240.                 }
  241.  
  242.                 $order "update_date DESC, product_id DESC";
  243.                 $objQuery new SC_Query();
  244.  
  245.                 switch($_POST['mode']{
  246.                     case 'csv':
  247.                         require_once(CLASS_EX_PATH "helper_extends/SC_Helper_CSV_Ex.php");
  248.  
  249.                         $objCSV new SC_Helper_CSV_Ex();
  250.  
  251.                         // CSVを送信する。正常終了の場合、終了。
  252.                         $objCSV->sfDownloadProductsCsv($where$arrval$order&& exit;
  253.  
  254.                         break;
  255.                     case 'delete_all':
  256.                         // 検索結果をすべて削除
  257.                         $where "product_id IN (SELECT product_id FROM vw_products_allclass_detail AS alldtl WHERE $where)";
  258.                         $sqlval['del_flg'1;
  259.                         $objQuery->update("dtb_products"$sqlval$where$arrval);
  260.                         $objQuery->delete("dtb_customer_favorite_products"$where$arrval);
  261.                         break;
  262.                     default:
  263.                         // 読み込む列とテーブルの指定
  264.                         $col "product_id, name, category_id, main_list_image, status, product_code, price01, price02, stock, stock_unlimited";
  265.                         $from "vw_products_nonclass AS noncls ";
  266.  
  267.                         // 行数の取得
  268.                         $linemax $objQuery->count("dtb_products"$view_where$arrval);
  269.                         $this->tpl_linemax $linemax// 何件が該当しました。表示用
  270.  
  271.                         // ページ送りの処理
  272.                         if(is_numeric($_POST['search_page_max'])) {
  273.                             $page_max $_POST['search_page_max'];
  274.                         else {
  275.                             $page_max SEARCH_PMAX;
  276.                         }
  277.  
  278.                         // ページ送りの取得
  279.                         $objNavi new SC_PageNavi($this->arrHidden['search_pageno']$linemax$page_max"fnNaviSearchPage"NAVI_PMAX);
  280.                         $startno $objNavi->start_row;
  281.                         $this->arrPagenavi $objNavi->arrPagenavi;
  282.  
  283.                         //キャンペーン商品検索時は、全結果の商品IDを変数に格納する
  284.                         if(isset($_POST['search_mode']&& $_POST['search_mode'== 'campaign'{
  285.                             $arrRet $objQuery->select($col$from$where$arrval);
  286.                             if(count($arrRet0{
  287.                                 $arrRet sfSwapArray($arrRet);
  288.                                 $pid implode("-"$arrRet['product_id']);
  289.                                 $this->arrHidden['campaign_product_id'$pid;
  290.                             }
  291.                         }
  292.  
  293.                         // 取得範囲の指定(開始行番号、行数のセット)
  294.                         //                    if(DB_TYPE != "mysql") $objQuery->setLimitOffset($page_max, $startno);
  295.                         $objQuery->setLimitOffset($page_max$startno);
  296.                         // 表示順序
  297.                         $objQuery->setOrder($order);
  298.  
  299.                         // 検索結果の取得
  300.                         $this->arrProducts $objQuery->select($col$from$where$arrval);
  301.  
  302.                         // 各商品ごとのカテゴリIDを取得
  303.                         if (count($this->arrProducts0{
  304.                             foreach ($this->arrProducts as $key => $val{
  305.                                 $this->arrProducts[$key]["categories"$objDb->sfGetCategoryId($val["product_id"]);
  306.                                 $objDb->g_category_on false;
  307.                             }
  308.                         }
  309.                 }
  310.             }
  311.         }
  312.  
  313.         // カテゴリの読込
  314.         list($this->arrCatKey$this->arrCatVal$objDb->sfGetLevelCatList(false);
  315.         $this->arrCatList $this->lfGetIDName($this->arrCatKey$this->arrCatVal);
  316.  
  317.         // 画面の表示
  318.         $objView->assignobj($this);
  319.         $objView->display(MAIN_FRAME);
  320.     }
  321.  
  322.     /**
  323.      * デストラクタ.
  324.      *
  325.      * @return void 
  326.      */
  327.     function destroy({
  328.         parent::destroy();
  329.     }
  330.  
  331.     // 取得文字列の変換
  332.     function lfConvertParam({
  333.         global $objPage;
  334.         /*
  335.          * 文字列の変換
  336.          * K :  「半角(ハンカク)片仮名」を「全角片仮名」に変換
  337.          * C :  「全角ひら仮名」を「全角かた仮名」に変換
  338.          * V :  濁点付きの文字を一文字に変換。"K","H"と共に使用します
  339.          * n :  「全角」数字を「半角(ハンカク)」に変換
  340.          */
  341.         $arrConvList['search_name'"KVa";
  342.         $arrConvList['search_product_code'"KVa";
  343.  
  344.         // 文字変換
  345.         foreach ($arrConvList as $key => $val{
  346.             // POSTされてきた値のみ変換する。
  347.             if(isset($objPage->arrForm[$key])) {
  348.                 $objPage->arrForm[$keymb_convert_kana($objPage->arrForm[$key,$val);
  349.             }
  350.         }
  351.     }
  352.  
  353.     // エラーチェック
  354.     // 入力エラーチェック
  355.     function lfCheckError({
  356.         $objErr new SC_CheckError();
  357.         $objErr->doFunc(array("商品ID""search_product_id")array("NUM_CHECK"));
  358.         $objErr->doFunc(array("開始日""search_startyear""search_startmonth""search_startday")array("CHECK_DATE"));
  359.         $objErr->doFunc(array("終了日""search_endyear""search_endmonth""search_endday")array("CHECK_DATE"));
  360.         $objErr->doFunc(array("開始日""終了日""search_startyear""search_startmonth""search_startday""search_endyear""search_endmonth""search_endday")array("CHECK_SET_TERM"));
  361.         return $objErr->arrErr;
  362.     }
  363.  
  364.     // チェックボックス用WHERE文作成
  365.     function lfGetCBWhere($key$max{
  366.         $str "";
  367.         $find false;
  368.         for ($cnt 1$cnt <= $max$cnt++{
  369.             if ($_POST[$key $cnt== "1"{
  370.                 $str.= "1";
  371.                 $find true;
  372.             else {
  373.                 $str.= "_";
  374.             }
  375.         }
  376.         if (!$find{
  377.             $str "";
  378.         }
  379.         return $str;
  380.     }
  381.  
  382.     // カテゴリIDをキー、カテゴリ名を値にする配列を返す。
  383.     function lfGetIDName($arrCatKey$arrCatVal{
  384.         $max count($arrCatKey);
  385.         for ($cnt 0$cnt $max$cnt++ {
  386.             $key = isset($arrCatKey[$cnt]$arrCatKey[$cnt"";
  387.             $val = isset($arrCatVal[$cnt]$arrCatVal[$cnt"";
  388.             $arrRet[$key$val;
  389.         }
  390.         return $arrRet;
  391.     }
  392. }
  393. ?>

Documentation generated on Fri, 24 Feb 2012 13:58:58 +0900 by Seasoft