source: branches/version-2_13-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Review.php @ 23546

Revision 23546, 15.4 KB checked in by shutta, 10 years ago (diff)

#2580 Copyrightを更新
Copyrightを2014に更新

  • Property svn:eol-style set to LF
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-httpd-php; charset=UTF-8
Line 
1<?php
2/*
3 * This file is part of EC-CUBE
4 *
5 * Copyright(c) 2000-2014 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
24require_once CLASS_EX_REALDIR . 'page_extends/admin/LC_Page_Admin_Ex.php';
25
26/**
27 * レビュー管理 のページクラス.
28 *
29 * @package Page
30 * @author LOCKON CO.,LTD.
31 * @version $Id$
32 */
33class LC_Page_Admin_Products_Review extends LC_Page_Admin_Ex
34{
35    /**
36     * Page を初期化する.
37     *
38     * @return void
39     */
40    public function init()
41    {
42        parent::init();
43        $this->tpl_mainpage = 'products/review.tpl';
44        $this->tpl_mainno = 'products';
45        $this->tpl_subno = 'review';
46        $this->tpl_pager = 'pager.tpl';
47        $this->tpl_maintitle = '商品管理';
48        $this->tpl_subtitle = 'レビュー管理';
49
50        $masterData = new SC_DB_MasterData_Ex();
51        $this->arrPageMax = $masterData->getMasterData('mtb_page_max');
52        $this->arrRECOMMEND = $masterData->getMasterData('mtb_recommend');
53        $this->arrSex = $masterData->getMasterData('mtb_sex');
54
55        $objDate = new SC_Date_Ex();
56        // 登録・更新検索開始年
57        $objDate->setStartYear(RELEASE_YEAR);
58        $objDate->setEndYear(DATE('Y'));
59        $this->arrStartYear = $objDate->getYear();
60        $this->arrStartMonth = $objDate->getMonth();
61        $this->arrStartDay = $objDate->getDay();
62        // 登録・更新検索終了年
63        $objDate->setStartYear(RELEASE_YEAR);
64        $objDate->setEndYear(DATE('Y'));
65        $this->arrEndYear = $objDate->getYear();
66        $this->arrEndMonth = $objDate->getMonth();
67        $this->arrEndDay = $objDate->getDay();
68    }
69
70    /**
71     * Page のプロセス.
72     *
73     * @return void
74     */
75    public function process()
76    {
77        $this->action();
78        $this->sendResponse();
79    }
80
81    /**
82     * Page のアクション.
83     *
84     * @return void
85     */
86    public function action()
87    {
88        $objReview = new SC_Helper_Review_Ex();
89        // パラメーター管理クラス
90        $objFormParam = new SC_FormParam_Ex();
91        $this->lfInitParam($objFormParam);
92        $objFormParam->setParam($_POST);
93        $objFormParam->convParam();
94        // URLを小文字に変換
95        $objFormParam->toLower('search_reviewer_url');
96
97        $this->arrForm = $objFormParam->getHashArray();
98        $this->arrHidden = $this->lfSetHidden($this->arrForm);
99
100        // 入力パラメーターチェック
101        $this->arrErr = $this->lfCheckError($objFormParam);
102        if (!SC_Utils_Ex::isBlank($this->arrErr)) {
103            return;
104        }
105
106        switch ($this->getMode()) {
107            case 'delete':
108                $objReview->delete($this->arrForm['review_id']);
109            case 'search':
110            case 'csv':
111
112                // 検索結果を取得
113                $this->arrReview = $this->lfGetReview($objReview);
114
115                //CSVダウンロード
116                if ($this->getMode() == 'csv') {
117                    // 検索条件を取得
118                    list($where, $arrWhereVal) = $this->lfGetWhere($this->arrForm);
119                    $this->lfDoOutputCsv($where, $arrWhereVal);
120
121                    SC_Response_Ex::actionExit();
122                }
123
124                break;
125            default:
126                break;
127        }
128
129    }
130
131    /**
132     * 入力内容のチェックを行う.
133     *
134     * @param  SC_FormParam $objFormParam SC_FormParam インスタンス
135     * @return void
136     */
137    public function lfCheckError(&$objFormParam)
138    {
139        // 入力データを渡す。
140        $arrRet =  $objFormParam->getHashArray();
141        $objErr = new SC_CheckError_Ex($arrRet);
142        $objErr->arrErr = $objFormParam->checkError();
143
144        switch ($this->getMode()) {
145            case 'search':
146                $objErr->doFunc(array('開始日', 'search_startyear', 'search_startmonth', 'search_startday'), array('CHECK_DATE'));
147                $objErr->doFunc(array('終了日', 'search_endyear', 'search_endmonth', 'search_endday'), array('CHECK_DATE'));
148                $objErr->doFunc(array('開始日', '終了日', 'search_startyear', 'search_startmonth', 'search_startday', 'search_endyear', 'search_endmonth', 'search_endday'), array('CHECK_SET_TERM'));
149                break;
150
151            case 'complete':
152                $objErr->doFunc(array('おすすめレベル', 'recommend_level'), array('SELECT_CHECK'));
153                $objErr->doFunc(array('タイトル', 'title', STEXT_LEN), array('EXIST_CHECK', 'SPTAB_CHECK', 'MAX_LENGTH_CHECK'));
154                $objErr->doFunc(array('コメント', 'comment', LTEXT_LEN), array('EXIST_CHECK', 'SPTAB_CHECK', 'MAX_LENGTH_CHECK'));
155                break;
156            default:
157                break;
158        }
159
160        return $objErr->arrErr;
161    }
162
163    /**
164     * hidden情報の作成
165     *
166     * @param  array $arrForm フォームデータ
167     * @return array hidden情報
168     */
169    public function lfSetHidden($arrForm)
170    {
171        $arrHidden = array();
172        foreach ($arrForm AS $key=>$val) {
173            if (preg_match('/^search_/', $key)) {
174                switch ($key) {
175                    case 'search_sex':
176                        $arrHidden[$key] = SC_Utils_Ex::sfMergeParamCheckBoxes($val);
177                        if (!is_array($val)) {
178                            $arrForm[$key] = explode('-', $val);
179                        }
180                        break;
181                    default:
182                        $arrHidden[$key] = $val;
183                        break;
184                }
185            }
186        }
187
188        return $arrHidden;
189    }
190
191    /**
192     * パラメーター情報の初期化を行う.
193     *
194     * @param  SC_FormParam $objFormParam SC_FormParam インスタンス
195     * @return void
196     */
197    public function lfInitParam(&$objFormParam)
198    {
199        $objFormParam->addParam('投稿者名', 'search_reviewer_name', STEXT_LEN, 'KVas', array('MAX_LENGTH_CHECK'), '', false);
200        $objFormParam->addParam('投稿者URL', 'search_reviewer_url', STEXT_LEN, 'KVas', array('MAX_LENGTH_CHECK'), '', false);
201        $objFormParam->addParam('商品名', 'search_name', STEXT_LEN, 'KVas', array('MAX_LENGTH_CHECK'), '', false);
202        $objFormParam->addParam('商品コード', 'search_product_code', STEXT_LEN, 'KVas', array('MAX_LENGTH_CHECK'), '', false);
203        $objFormParam->addParam('性別', 'search_sex', INT_LEN, 'n', array('MAX_LENGTH_CHECK'), '', false);
204        $objFormParam->addParam('おすすめレベル', 'search_recommend_level', INT_LEN, 'n', array('MAX_LENGTH_CHECK'), '', false);
205        $objFormParam->addParam('投稿年', 'search_startyear', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK'), '', false);
206        $objFormParam->addParam('投稿月', 'search_startmonth', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK'), '', false);
207        $objFormParam->addParam('投稿日', 'search_startday', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK'), '', false);
208        $objFormParam->addParam('投稿年', 'search_endyear', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK'), '', false);
209        $objFormParam->addParam('投稿月', 'search_endmonth', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK'), '', false);
210        $objFormParam->addParam('投稿日', 'search_endday', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK'), '', false);
211        $objFormParam->addParam('最大表示件数', 'search_page_max', INT_LEN, 'n', array('MAX_LENGTH_CHECK'), '', false);
212        $objFormParam->addParam('ページ番号件数', 'search_pageno', INT_LEN, 'n', array('MAX_LENGTH_CHECK'), '', false);
213        $objFormParam->addParam('レビューID', 'review_id', INT_LEN, 'n', array('MAX_LENGTH_CHECK'), '', false);
214    }
215
216    /**
217     * CSV ファイル出力実行
218     *
219     * @param  string $where       WHERE文
220     * @param  array  $arrWhereVal WHERE文の判定値
221     * @return void
222     */
223    public function lfDoOutputCsv($where, $arrWhereVal)
224    {
225        $objCSV = new SC_Helper_CSV_Ex();
226        $objCSV->sfDownloadCsv('4', $where, $arrWhereVal, '', true);
227    }
228
229    /**
230     * WHERE文の作成
231     *
232     * @param  array $arrForm フォームデータ
233     * @return array WHERE文、判定値
234     */
235    public function lfGetWhere($arrForm)
236    {
237        //削除されていない商品を検索
238        $where = 'A.del_flg = 0 AND B.del_flg = 0';
239        $arrWhereVal = array();
240
241        foreach ($arrForm AS $key=>$val) {
242            if (empty($val)) continue;
243
244            switch ($key) {
245                case 'search_reviewer_name':
246                    $val = preg_replace('/ /', '%', $val);
247                    $where.= ' AND reviewer_name LIKE ? ';
248                    $arrWhereVal[] = "%$val%";
249                    break;
250
251                case 'search_reviewer_url':
252                    $val = preg_replace('/ /', '%', $val);
253                    $where.= ' AND reviewer_url LIKE ? ';
254                    $arrWhereVal[] = "%$val%";
255                    break;
256
257                case 'search_name':
258                    $val = preg_replace('/ /', '%', $val);
259                    $where.= ' AND name LIKE ? ';
260                    $arrWhereVal[] = "%$val%";
261                    break;
262
263                case 'search_product_code':
264                    $val = preg_replace('/ /', '%', $val);
265                    $where.= ' AND A.product_id IN (SELECT product_id FROM dtb_products_class WHERE product_code LIKE ?)';
266                    $arrWhereVal[] = "%$val%";
267                    break;
268
269                case 'search_sex':
270                    $tmp_where = '';
271                    //$val=配列の中身,$element=各キーの値(1,2)
272                    if (is_array($val)) {
273                        foreach ($val as $element) {
274                            if ($element != '') {
275                                if ($tmp_where == '') {
276                                    $tmp_where .= ' AND (sex = ?';
277                                } else {
278                                    $tmp_where .= ' OR sex = ?';
279                                }
280                                $arrWhereVal[] = $element;
281                            }
282                        }
283                        if ($tmp_where != '') {
284                            $tmp_where .= ')';
285                            $where .= " $tmp_where ";
286                        }
287                    }
288
289                    break;
290
291                case 'search_recommend_level':
292                    $where.= ' AND recommend_level = ? ';
293                    $arrWhereVal[] = $val;
294                    break;
295
296                case 'search_startyear':
297                    if (isset($_POST['search_startyear']) && isset($_POST['search_startmonth']) && isset($_POST['search_startday'])) {
298                        $date = SC_Utils_Ex::sfGetTimestamp($_POST['search_startyear'], $_POST['search_startmonth'], $_POST['search_startday']);
299                        $where.= ' AND A.create_date >= ? ';
300                        $arrWhereVal[] = $date;
301                    }
302                    break;
303
304                case 'search_endyear':
305                    if (isset($_POST['search_startyear']) && isset($_POST['search_startmonth']) && isset($_POST['search_startday'])) {
306                        $date = SC_Utils_Ex::sfGetTimestamp($_POST['search_endyear'], $_POST['search_endmonth'], $_POST['search_endday']);
307                        $end_date = date('Y/m/d', strtotime('1 day', strtotime($date)));
308                        $where.= " AND A.create_date <= cast('$end_date' as date) ";
309                    }
310                    break;
311
312                default:
313                    break;
314            }
315
316        }
317
318        return array($where, $arrWhereVal);
319    }
320
321    /**
322     * レビュー検索結果の取得
323     *
324     * @param  SC_Helper_Review $objReview
325     * @return array  レビュー一覧
326     */
327    public function lfGetReview(SC_Helper_Review $objReview)
328    {
329        $arrForm = $this->arrForm;
330
331        $query = $this->makeQuery($arrForm);
332        $linemax = $objReview->count($query);
333
334        $this->tpl_linemax = $linemax;
335        $this->tpl_pageno = isset($arrForm['search_pageno']) ? $arrForm['search_pageno'] : '';
336
337        // ページ送りの取得
338        $page_max = SC_Utils_Ex::sfGetSearchPageMax($arrForm['search_page_max']);
339        $objNavi = new SC_PageNavi_Ex($this->tpl_pageno, $linemax, $page_max,
340                                      'eccube.moveNaviPage', NAVI_PMAX);
341        $this->arrPagenavi = $objNavi->arrPagenavi;
342        $startno = $objNavi->start_row;
343
344        // 取得範囲の指定(開始行番号、行数のセット)
345        $params = array(
346            'query' => $query,
347            'limit' => $page_max,
348            'offset' => $startno
349        );
350        $arrReview = $objReview->find($params);
351
352        return $arrReview;
353    }
354
355    /**
356     * SC_Helper_Reviewインスタンスへ渡す検索条件の配列を作成.
357     *
358     * @param array $data
359     * @return array
360     */
361    private function makeQuery($data = array()) {
362        $query = array();
363
364        foreach ($data AS $key => $val) {
365            if (empty($val)) continue;
366
367            switch ($key) {
368                case 'search_reviewer_name':
369                    $query['reviewer_name'] = $val;
370                    break;
371
372                case 'search_reviewer_url':
373                    $query['reviewer_url'] = $val;
374                    break;
375
376                case 'search_name':
377                    $query['product_name'] = $val;
378                    break;
379
380                case 'search_product_code':
381                    $query['product_code'] = $val;
382                    break;
383
384                case 'search_sex':
385                    $query['reviewer_sex'] = $val;
386                    break;
387
388                case 'search_recommend_level':
389                    $query['recommend_level'] = $val;
390                    break;
391
392                case 'search_startyear':
393                    if (isset($_POST['search_startyear']) && isset($_POST['search_startmonth']) && isset($_POST['search_startday'])) {
394                        $date = SC_Utils_Ex::sfGetTimestamp($_POST['search_startyear'], $_POST['search_startmonth'], $_POST['search_startday']);
395                        $query['date_from'] = $date;
396                    }
397                    break;
398
399                case 'search_endyear':
400                    if (isset($_POST['search_startyear']) && isset($_POST['search_startmonth']) && isset($_POST['search_startday'])) {
401                        $date = SC_Utils_Ex::sfGetTimestamp($_POST['search_endyear'], $_POST['search_endmonth'], $_POST['search_endday']);
402                        $end_date = date('Y/m/d', strtotime('1 day', strtotime($date)));
403                        $query['date_to'] = $end_date;
404                    }
405                    break;
406
407                default:
408                    break;
409            }
410
411        }
412
413        return $query;
414    }
415}
Note: See TracBrowser for help on using the repository browser.