source: branches/feature-module-update/data/class/pages/admin/contents/LC_Page_Admin_Contents_Campaign.php @ 16326

Revision 16326, 17.4 KB checked in by naka, 17 years ago (diff)

class_extendsディレクトリの追加

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