Source for file LC_Page_Admin_Contents_Campaign.php

Documentation is available at LC_Page_Admin_Contents_Campaign.php

  1. <?php
  2. /*
  3.  * This file is part of EC-CUBE
  4.  *
  5.  * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
  6.  *
  7.  * http://www.lockon.co.jp/
  8.  *
  9.  * This program is free software; you can redistribute it and/or
  10.  * modify it under the terms of the GNU General Public License
  11.  * as published by the Free Software Foundation; either version 2
  12.  * of the License, or (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  22.  */
  23.  
  24. // {{{ requires
  25. require_once(CLASS_PATH "pages/LC_Page.php");
  26. require_once(CLASS_EX_PATH "helper_extends/SC_Helper_CSV_Ex.php");
  27. require_once(CLASS_EX_PATH "helper_extends/SC_Helper_FileManager_Ex.php");
  28.  
  29. /**
  30.  * キャンペーン管理 のページクラス.
  31.  *
  32.  * @package Page
  33.  * @author LOCKON CO.,LTD.
  34.  * @version $Id: LC_Page_Admin_Contents_Campaign.php 17743 2009-01-17 01:51:29Z Seasoft $
  35.  */
  36.  
  37.     // }}}
  38.     // {{{ functions
  39.  
  40.     /**
  41.      * Page を初期化する.
  42.      *
  43.      * @return void 
  44.      */
  45.     function init({
  46.         parent::init();
  47.         $this->tpl_mainpage = 'contents/campaign.tpl';
  48.         $this->tpl_subnavi 'contents/subnavi.tpl';
  49.         $this->tpl_subno "campaign";
  50.         $this->tpl_mainno = 'contents';
  51.         $this->tpl_subtitle 'キャンペーン管理';
  52.         // カートに商品が入っているにチェックが入っているかチェック
  53.         $this->tpl_onload = "fnIsCartOn();";
  54.     }
  55.  
  56.     /**
  57.      * Page のプロセス.
  58.      *
  59.      * @return void 
  60.      */
  61.     function process({
  62.         //---- 認証可否の判定
  63.         $objSess new SC_Session();
  64.         SC_Utils_Ex::sfIsSuccess($objSess);
  65.  
  66.         $objView new SC_AdminView();
  67.         $objQuery new SC_Query();
  68.         $objFormParam new SC_FormParam();
  69.         $objCSV new SC_Helper_CSV_Ex();
  70.  
  71.         // パラメータ情報の初期化
  72.         $this->lfInitParam($objFormParam);
  73.         // フォームの値をセット
  74.         $objFormParam->setParam($_POST);
  75.  
  76.         // 編集処理の場合は状態を保持
  77.         $this->is_update = isset($_POST['is_update']$_POST['is_update'"";
  78.  
  79.         // フォームの値をテンプレートへ渡す
  80.         $this->arrForm $objFormParam->getHashArray();
  81.         $campaign_id = isset($_POST['campaign_id']$_POST['campaign_id'"";
  82.  
  83.         if (!isset($_POST['mode'])) $_POST['mode'"";
  84.  
  85.         switch($_POST['mode']{
  86.             // 新規登録/編集登録
  87.         case 'regist':
  88.             // エラーチェック
  89.             $this->arrErr $this->lfErrorCheck($campaign_id$objQuery$objFormParam);
  90.  
  91.             if(count($this->arrErr<= 0{
  92.                 // 登録
  93.                 $this->lfRegistCampaign($campaign_id$objQuery$objFormParam);
  94.  
  95.                 // キャンペーンTOPへリダイレクト
  96.                 $this->sendRedirect($this->getLocation(URL_CAMPAIGN_TOP));
  97.                 exit;
  98.             }
  99.  
  100.             break;
  101.             // 編集押下時
  102.         case 'update':
  103.             // キャンペーン情報を取得
  104.             $this->arrForm $this->lfGetCampaign($campaign_id$objQuery);
  105.             $this->is_update true;
  106.             break;
  107.             // 削除押下時
  108.         case 'delete':
  109.             // 削除
  110.             $this->lfDeleteCampaign($campaign_id$objQuery);
  111.             // キャンペーンTOPへリダイレクト
  112.             $this->sendRedirect($this->getLocation(URL_CAMPAIGN_TOP));
  113.             exit;
  114.             break;
  115.             // CSV出力
  116.         case 'csv':
  117.             // オプションの指定
  118.             $option "ORDER BY create_date DESC";
  119.  
  120.             // CSV出力タイトル行の作成
  121.             $arrCsvOutput SC_Utils_Ex::sfSwapArray($objCSV->sfgetCsvOutput(4" WHERE csv_id = 4 AND status = 1"));
  122.  
  123.             if (count($arrCsvOutput<= 0break;
  124.  
  125.             $arrCsvOutputCols $arrCsvOutput['col'];
  126.             $arrCsvOutputTitle $arrCsvOutput['disp_name'];
  127.             $head SC_Utils_Ex::sfGetCSVList($arrCsvOutputTitle);
  128.             $data $objCSV->lfGetCSV("dtb_campaign_order""campaign_id = ?"$optionarray($campaign_id)$arrCsvOutputCols);
  129.  
  130.             // CSVを送信する。
  131.             SC_Utils_Ex::sfCSVDownload($head.$data);
  132.             exit;
  133.             break;
  134.         default:
  135.             break;
  136.         }
  137.  
  138.         // キャンペーン一覧取得
  139.         $this->arrCampaign $this->lfGetCampaignList($objQuery);
  140.         $this->campaign_id $campaign_id;
  141.  
  142.         // キャンペーン期間用
  143.         $objDate new SC_Date();
  144.         $this->arrYear $objDate->getYear(min(date('Y')$this->arrForm['start_year']));
  145.         $this->arrMonth $objDate->getMonth();
  146.         $this->arrDay $objDate->getDay();
  147.         $this->arrHour $objDate->getHour();
  148.         $this->arrMinutes $objDate->getMinutes();
  149.  
  150.         //---- ページ表示
  151.         $objView->assignobj($this);
  152.         $objView->display(MAIN_FRAME);
  153.     }
  154.  
  155.     /**
  156.      * デストラクタ.
  157.      *
  158.      * @return void 
  159.      */
  160.     function destroy({
  161.         parent::destroy();
  162.     }
  163.  
  164.     /**
  165.      * 入力情報の初期化
  166.      */
  167.     function lfInitParam(&$objFormParam{
  168.  
  169.         $objFormParam->addParam("キャンペーン名""campaign_name"MTEXT_LEN"KVa"array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK"));
  170.  
  171.         $objFormParam->addParam("開始日時""start_year"INT_LEN"n"array("MAX_LENGTH_CHECK""NUM_CHECK"));
  172.         $objFormParam->addParam("開始日時""start_month"INT_LEN"n"array("MAX_LENGTH_CHECK""NUM_CHECK"));
  173.         $objFormParam->addParam("開始日時""start_day"INT_LEN"n"array("MAX_LENGTH_CHECK""NUM_CHECK"));
  174.         $objFormParam->addParam("開始日時""start_hour"INT_LEN"n"array("MAX_LENGTH_CHECK""NUM_CHECK"));
  175.         $objFormParam->addParam("開始日時""start_minute"INT_LEN"n"array("MAX_LENGTH_CHECK""NUM_CHECK"));
  176.  
  177.         $objFormParam->addParam("停止日時""end_year"INT_LEN"n"array("MAX_LENGTH_CHECK""NUM_CHECK"));
  178.         $objFormParam->addParam("停止日時""end_month"INT_LEN"n"array("MAX_LENGTH_CHECK""NUM_CHECK"));
  179.         $objFormParam->addParam("停止日時""end_day"INT_LEN"n"array("MAX_LENGTH_CHECK""NUM_CHECK"));
  180.         $objFormParam->addParam("停止日時""end_hour"INT_LEN"n"array("MAX_LENGTH_CHECK""NUM_CHECK"));
  181.         $objFormParam->addParam("停止日時""end_minute"INT_LEN"n"array("MAX_LENGTH_CHECK""NUM_CHECK"));
  182.  
  183.         $objFormParam->addParam("ディレクトリ名""directory_name"MTEXT_LEN"KVa"array("EXIST_CHECK","ALNUM_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK"));
  184.         $objFormParam->addParam("申込数制御""limit_count"INT_LEN"n"array("MAX_LENGTH_CHECK""NUM_CHECK"));
  185.         $objFormParam->addParam("重複申込制御""orverlapping_flg"INT_LEN"n"array("MAX_LENGTH_CHECK""NUM_CHECK"));
  186.         $objFormParam->addParam("カートに商品を入れる""cart_flg"INT_LEN"n"array("MAX_LENGTH_CHECK""NUM_CHECK"));
  187.         $objFormParam->addParam("送料無料設定""deliv_free_flg"INT_LEN"n"array("MAX_LENGTH_CHECK""NUM_CHECK"));
  188.  
  189.     }
  190.  
  191.     /*
  192.      * 関数名:lfErrorCheck()
  193.      * 引数1 :キャンペーンID
  194.      * 説明 :エラーチェック
  195.      * 戻り値:エラー文字格納配列
  196.      */
  197.     function lfErrorCheck($campaign_id ""&$objQuery&$objFormParam{
  198.  
  199.         $arrList $objFormParam->getHashArray();
  200.         $objErr new SC_CheckError($arrList);
  201.         $objErr->arrErr $objFormParam->checkError();
  202.  
  203.         $objErr->doFunc(array("開始日時""start_year""start_month""start_day""start_hour""start_minute""0")array("CHECK_DATE2"));
  204.         $objErr->doFunc(array("停止日時""end_year""end_month""end_day""end_hour""end_minute""0")array("CHECK_DATE2"));
  205.         $objErr->doFunc(array("開始日時""停止日時""start_year""start_month""start_day""start_hour""start_minute""00""end_year""end_month""end_day""end_hour""end_minute""59")array("CHECK_SET_TERM2"));
  206.  
  207.         if (!is_writable(CAMPAIGN_TEMPLATE_PATH)) {
  208.             $objErr->arrErr['campaign_template_path'"※" CAMPAIGN_TEMPLATE_PATH " へ書き込み権限を与えてください。 <br/>";
  209.         }
  210.         if (!is_writable(CAMPAIGN_PATH)) {
  211.             $objErr->arrErr['campaign_path'"※" CAMPAIGN_PATH " へ書き込み権限を与えてください。<br/>";
  212.         }
  213.  
  214.         if(count($objErr->arrErr<= 0{
  215.  
  216.             // 編集時用に元のディレクトリ名を取得する。
  217.             if($campaign_id != ""{
  218.                 $directory_name $objQuery->get("dtb_campaign""directory_name""campaign_id = ?"array($campaign_id));
  219.             else {
  220.                 $directory_name "";
  221.             }
  222.  
  223.             // 同名のフォルダが存在する場合はエラー
  224.             if(file_exists(CAMPAIGN_TEMPLATE_PATH.$arrList['directory_name']&& $directory_name != $arrList['directory_name']{
  225.                 $objErr->arrErr['directory_name'"※ 同名のディレクトリがすでに存在します。<br/>";
  226.             }
  227.             $ret $objQuery->get("dtb_campaign""directory_name""directory_name = ? AND del_flg = 0"array($arrList['directory_name']));
  228.             // DBにすでに登録されていないかチェック
  229.             if($ret != "" && $directory_name != $arrList['directory_name']{
  230.                 $objErr->arrErr['directory_name'"※ すでに登録されているディレクトリ名です。<br/>";
  231.             }
  232.         }
  233.  
  234.         return $objErr->arrErr;
  235.     }
  236.  
  237.     /*
  238.      * 関数名:lfRegistCampaign()
  239.      * 引数1 :キャンペーンID(アップデート時に指定)
  240.      * 説明 :キャンペーン登録/更新
  241.      * 戻り値:無し
  242.      */
  243.     function lfRegistCampaign($campaign_id ""&$objQuery&$objFormParam{
  244.  
  245.         $objSiteInfo new SC_SiteInfo();
  246.         $arrInfo $objSiteInfo->data;
  247.         $arrList $objFormParam->getHashArray();
  248.  
  249.         // 開始日時・終了日時整形
  250.         $start_date $arrList['start_year']."-".sprintf("%02d"$arrList['start_month'])."-".sprintf("%02d"$arrList['start_day'])." ".sprintf("%02d"$arrList['start_hour']).":".sprintf("%02d"$arrList['start_minute']).":00";
  251.         $end_date $arrList['end_year']."-".sprintf("%02d"$arrList['end_month'])."-".sprintf("%02d"$arrList['end_day'])." ".sprintf("%02d"$arrList['end_hour']).":".sprintf("%02d"$arrList['end_minute']).":00";
  252.  
  253.         // ポイントレートは設定されていなければ0を挿入
  254.         if($arrInfo['point_rate'== ""$arrInfo['point_rate'"0";
  255.         // フラグは設定されていなければ0を挿入
  256.         if(!$arrList['limit_count']$arrList['limit_count'"0";
  257.         if(!$arrList['orverlapping_flg']$arrList['orverlapping_flg'"0";
  258.         if(!$arrList['cart_flg']$arrList['cart_flg'"0";
  259.         if(!$arrList['deliv_free_flg']$arrList['deliv_free_flg'"0";
  260.  
  261.         $sqlval['campaign_name'$arrList['campaign_name'];
  262.         $sqlval['campaign_point_rate'$arrInfo['point_rate'];
  263.         $sqlval['start_date'$start_date;
  264.         $sqlval['end_date'$end_date;
  265.         $sqlval['directory_name'$arrList['directory_name'];
  266.         $sqlval['limit_count'$arrList['limit_count'];
  267.         $sqlval['orverlapping_flg'$arrList['orverlapping_flg'];
  268.         $sqlval['cart_flg'$arrList['cart_flg'];
  269.         $sqlval['deliv_free_flg'$arrList['deliv_free_flg'];
  270.         $sqlval['update_date'"now()";
  271.  
  272.         // キャンペーンIDで指定されている場合はupdate
  273.         if($campaign_id != ""{
  274.  
  275.             // 元のディレクトリ名を取得名
  276.             $directory_name $objQuery->get("dtb_campaign""directory_name""campaign_id = ?"array($campaign_id));
  277.             // ファイル名を変更
  278.             @rename(CAMPAIGN_TEMPLATE_PATH $directory_name CAMPAIGN_TEMPLATE_PATH $arrList['directory_name']);
  279.             @rename(CAMPAIGN_PATH $directory_name CAMPAIGN_PATH $arrList['directory_name']);
  280.  
  281.             // update
  282.             $objQuery->update("dtb_campaign"$sqlval"campaign_id = ?"array($campaign_id));
  283.  
  284.         else {
  285.  
  286.             // キャンペーンページディレクトリ作成
  287.             $this->lfCreateTemplate(CAMPAIGN_TEMPLATE_PATH$arrList['directory_name']$objFormParam);
  288.  
  289.             $sqlval['create_date'"now()";
  290.             // insert
  291.             $objQuery->insert("dtb_campaign"$sqlval);
  292.         }
  293.     }
  294.  
  295.     /*
  296.      * 関数名:lfGetCampaignList()
  297.      * 説明 :キャンペーン一覧を取得
  298.      * 戻り値:キャンペーン一覧配列
  299.      */
  300.     function lfGetCampaignList(&$objQuery{
  301.  
  302.         $col "campaign_id,campaign_name,directory_name,total_count";
  303.         $objQuery->setorder("update_date DESC");
  304.         $arrRet $objQuery->select($col"dtb_campaign""del_flg = 0");
  305.  
  306.         return $arrRet;
  307.     }
  308.  
  309.     /*
  310.      * 関数名:lfGetCampaign()
  311.      * 引数1 :キャンペーンID
  312.      * 説明 :キャンペーン情報取得
  313.      * 戻り値:キャンペーン情報配列
  314.      */
  315.     function lfGetCampaign($campaign_id&$objQuery{
  316.  
  317.         $col "campaign_id,campaign_name,start_date,end_date,directory_name,limit_count,orverlapping_flg,cart_flg,deliv_free_flg";
  318.         $arrRet $objQuery->select($col"dtb_campaign""campaign_id = ?"array($campaign_id));
  319.  
  320.         // 開始日時・停止日時を分解
  321.         $start_date (date("Y/m/d/H/i/s" strtotime($arrRet[0]['start_date'])));
  322.         list($arrRet[0]['start_year'],$arrRet[0]['start_month'],$arrRet[0]['start_day'],$arrRet[0]['start_hour']$arrRet[0]['start_minute']$arrRet[0]['start_second']split("/"$start_date);
  323.         $end_date (date("Y/m/d/H/i/s" strtotime($arrRet[0]['end_date'])));
  324.         list($arrRet[0]['end_year'],$arrRet[0]['end_month'],$arrRet[0]['end_day'],$arrRet[0]['end_hour']$arrRet[0]['end_minute']$arrRet[0]['end_second']split("/"$end_date);
  325.  
  326.         return $arrRet[0];
  327.     }
  328.  
  329.     /*
  330.      * 関数名:lfDeleteCampaign()
  331.      * 引数1 :キャンペーンID
  332.      * 説明 :キャンペーン削除
  333.      * 戻り値:無し
  334.      */
  335.     function lfDeleteCampaign($campaign_id&$objQuery{
  336.         $objFileManager new SC_Helper_FileManager_Ex();
  337.  
  338.         // ディレクトリ名を取得名
  339.         $directory_name $objQuery->get("dtb_campaign""directory_name""campaign_id = ?"array($campaign_id));
  340.         // ファイルを削除
  341.         $objFileManager->sfDeleteDir(CAMPAIGN_TEMPLATE_PATH $directory_name);
  342.         $objFileManager->sfDeleteDir(CAMPAIGN_PATH $directory_name);
  343.  
  344.         $sqlval['del_flg'1;
  345.         $sqlval['update_date'"now()";
  346.         // delete
  347.         $objQuery->update("dtb_campaign"$sqlval"campaign_id = ?"array($campaign_id));
  348.     }
  349.  
  350.     /*
  351.      * 関数名:lfCreateTemplate()
  352.      * 引数1 :ディレクトリパス
  353.      * 引数2 :作成ファイル名
  354.      * 説明 :キャンペーンの初期テンプレート作成
  355.      * 戻り値:無し
  356.      */
  357.     function lfCreateTemplate($dir$file&$objFormParam{
  358.  
  359.         $objFileManager new SC_Helper_FileManager_Ex();
  360.         $arrRet $objFormParam->getHashArray();
  361.  
  362.  
  363.         // 作成ファイルディレクトリ
  364.         $create_dir $dir $file;
  365.         $create_active_dir $create_dir "/" CAMPAIGN_TEMPLATE_ACTIVE;
  366.         $create_end_dir $create_dir "/" CAMPAIGN_TEMPLATE_END;
  367.         // デフォルトファイルディレクトリ
  368.         $default_dir TEMPLATE_DIR CAMPAIGN_TEMPLATE_DIR;
  369.         $default_active_dir $default_dir "/" CAMPAIGN_TEMPLATE_ACTIVE;
  370.         $default_end_dir $default_dir "/" CAMPAIGN_TEMPLATE_END;
  371.  
  372.         $ret $objFileManager->sfCreateFile($create_dir0755);
  373.         $ret $objFileManager->sfCreateFile($create_active_dir0755);
  374.         $ret $objFileManager->sfCreateFile($create_end_dir0755);
  375.  
  376.         // キャンペーン実行PHPをコピー
  377.         $ret $objFileManager->sfCreateFile(CAMPAIGN_PATH $file);
  378.         copy(HTML_PATH CAMPAIGN_TEMPLATE_DIR "index.php"CAMPAIGN_PATH $file "/index.php");
  379.         copy(HTML_PATH CAMPAIGN_TEMPLATE_DIR "application.php"CAMPAIGN_PATH $file "/application.php");
  380.         copy(HTML_PATH CAMPAIGN_TEMPLATE_DIR "complete.php"CAMPAIGN_PATH $file "/complete.php");
  381.         copy(HTML_PATH CAMPAIGN_TEMPLATE_DIR "entry.php"CAMPAIGN_PATH $file "/entry.php");
  382.  
  383.         // デフォルトテンプレート作成(キャンペーン中)
  384.         $header $this->lfGetFileContents($default_active_dir."header.tpl");
  385.         SC_Utils_Ex::sfWriteFile($header$create_active_dir."header.tpl""w");
  386.         $contents $this->lfGetFileContents($default_active_dir."contents.tpl");
  387.         if(!$arrRet['cart_flg']{
  388.             $contents .= "\n" '<!--{*ログインフォーム*}-->' "\n";
  389.             $contents .= $this->lfGetFileContents(CAMPAIGN_BLOC_PATH "login.tpl");
  390.             $contents .= '<!--{*会員登録フォーム*}-->'."\n";
  391.             $contents .= $this->lfGetFileContents(CAMPAIGN_BLOC_PATH "entry.tpl");
  392.         }
  393.         SC_Utils_Ex::sfWriteFile($contents$create_active_dir."contents.tpl""w");
  394.         $footer $this->lfGetFileContents($default_active_dir."footer.tpl");
  395.         SC_Utils_Ex::sfWriteFile($footer$create_active_dir."footer.tpl""w");
  396.  
  397.         // サイトフレーム作成
  398.         $site_frame  $header."\n";
  399.         $site_frame .= '<script type="text/javascript" src="<!--{$TPL_DIR}-->js/navi.js"></script>'."\n";
  400.         $site_frame .= '<script type="text/javascript" src="<!--{$TPL_DIR}-->js/site.js"></script>'."\n";
  401.         $site_frame .= '<!--{include file=$tpl_mainpage}-->'."\n";
  402.         $site_frame .= $footer."\n";
  403.         SC_Utils_Ex::sfWriteFile($site_frame$create_active_dir."site_frame.tpl""w");
  404.  
  405.         /* デフォルトテンプレート作成(キャンペーン終了) */
  406.         $header $this->lfGetFileContents($default_end_dir."header.tpl");
  407.         SC_Utils_Ex::sfWriteFile($header$create_end_dir."header.tpl""w");
  408.         $contents $this->lfGetFileContents($default_end_dir."contents.tpl");
  409.         SC_Utils_Ex::sfWriteFile($contents$create_end_dir."contents.tpl""w");
  410.         $footer $this->lfGetFileContents($default_end_dir."footer.tpl");
  411.         SC_Utils_Ex::sfWriteFile($footer$create_end_dir."footer.tpl""w");
  412.     }
  413.  
  414.     /*
  415.      * 関数名:lfGetFileContents()
  416.      * 引数1 :ファイルパス
  417.      * 説明 :ファイル読込
  418.      * 戻り値:無し
  419.      */
  420.     function lfGetFileContents($read_file{
  421.  
  422.         if(file_exists($read_file)) {
  423.             $contents file_get_contents($read_file);
  424.         else {
  425.             $contents "";
  426.         }
  427.  
  428.         return $contents;
  429.     }
  430. }
  431. ?>

Documentation generated on Tue, 28 Apr 2009 18:10:51 +0900 by phpDocumentor 1.4.2