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

Revision 23461, 15.5 KB checked in by pineray, 10 years ago (diff)

#2560 pageクラスからdtb_reviewテーブルを直接指定している箇所をなくす

  • 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-2013 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                list($where, $arrWhereVal) = $this->lfGetWhere($this->arrForm);
114                // 検索結果を取得
115                $this->arrReview = $this->lfGetReview($objReview);
116
117                //CSVダウンロード
118                if ($this->getMode() == 'csv') {
119                    // 検索条件を取得
120                    list($where, $arrWhereVal) = $this->lfGetWhere($this->arrForm);
121                    $this->lfDoOutputCsv($where, $arrWhereVal);
122
123                    SC_Response_Ex::actionExit();
124                }
125
126                break;
127            default:
128                break;
129        }
130
131    }
132
133    /**
134     * 入力内容のチェックを行う.
135     *
136     * @param  SC_FormParam $objFormParam SC_FormParam インスタンス
137     * @return void
138     */
139    public function lfCheckError(&$objFormParam)
140    {
141        // 入力データを渡す。
142        $arrRet =  $objFormParam->getHashArray();
143        $objErr = new SC_CheckError_Ex($arrRet);
144        $objErr->arrErr = $objFormParam->checkError();
145
146        switch ($this->getMode()) {
147            case 'search':
148                $objErr->doFunc(array('開始日', 'search_startyear', 'search_startmonth', 'search_startday'), array('CHECK_DATE'));
149                $objErr->doFunc(array('終了日', 'search_endyear', 'search_endmonth', 'search_endday'), array('CHECK_DATE'));
150                $objErr->doFunc(array('開始日', '終了日', 'search_startyear', 'search_startmonth', 'search_startday', 'search_endyear', 'search_endmonth', 'search_endday'), array('CHECK_SET_TERM'));
151                break;
152
153            case 'complete':
154                $objErr->doFunc(array('おすすめレベル', 'recommend_level'), array('SELECT_CHECK'));
155                $objErr->doFunc(array('タイトル', 'title', STEXT_LEN), array('EXIST_CHECK', 'SPTAB_CHECK', 'MAX_LENGTH_CHECK'));
156                $objErr->doFunc(array('コメント', 'comment', LTEXT_LEN), array('EXIST_CHECK', 'SPTAB_CHECK', 'MAX_LENGTH_CHECK'));
157                break;
158            default:
159                break;
160        }
161
162        return $objErr->arrErr;
163    }
164
165    /**
166     * hidden情報の作成
167     *
168     * @param  array $arrForm フォームデータ
169     * @return array hidden情報
170     */
171    public function lfSetHidden($arrForm)
172    {
173        $arrHidden = array();
174        foreach ($arrForm AS $key=>$val) {
175            if (preg_match('/^search_/', $key)) {
176                switch ($key) {
177                    case 'search_sex':
178                        $arrHidden[$key] = SC_Utils_Ex::sfMergeParamCheckBoxes($val);
179                        if (!is_array($val)) {
180                            $arrForm[$key] = explode('-', $val);
181                        }
182                        break;
183                    default:
184                        $arrHidden[$key] = $val;
185                        break;
186                }
187            }
188        }
189
190        return $arrHidden;
191    }
192
193    /**
194     * パラメーター情報の初期化を行う.
195     *
196     * @param  SC_FormParam $objFormParam SC_FormParam インスタンス
197     * @return void
198     */
199    public function lfInitParam(&$objFormParam)
200    {
201        $objFormParam->addParam('投稿者名', 'search_reviewer_name', STEXT_LEN, 'KVas', array('MAX_LENGTH_CHECK'),'',false);
202        $objFormParam->addParam('投稿者URL', 'search_reviewer_url', STEXT_LEN, 'KVas', array('MAX_LENGTH_CHECK'),'',false);
203        $objFormParam->addParam('商品名', 'search_name', STEXT_LEN, 'KVas', array('MAX_LENGTH_CHECK'),'',false);
204        $objFormParam->addParam('商品コード', 'search_product_code', STEXT_LEN, 'KVas', array('MAX_LENGTH_CHECK'),'',false);
205        $objFormParam->addParam('性別', 'search_sex', INT_LEN, 'n', array('MAX_LENGTH_CHECK'),'',false);
206        $objFormParam->addParam('おすすめレベル', 'search_recommend_level', INT_LEN, 'n', array('MAX_LENGTH_CHECK'),'',false);
207        $objFormParam->addParam('投稿年', 'search_startyear', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK'),'',false);
208        $objFormParam->addParam('投稿月', 'search_startmonth', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK'),'',false);
209        $objFormParam->addParam('投稿日', 'search_startday', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK'),'',false);
210        $objFormParam->addParam('投稿年', 'search_endyear', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK'),'',false);
211        $objFormParam->addParam('投稿月', 'search_endmonth', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK'),'',false);
212        $objFormParam->addParam('投稿日', 'search_endday', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK'),'',false);
213        $objFormParam->addParam('最大表示件数', 'search_page_max', INT_LEN, 'n', array('MAX_LENGTH_CHECK'),'',false);
214        $objFormParam->addParam('ページ番号件数', 'search_pageno', INT_LEN, 'n', array('MAX_LENGTH_CHECK'),'',false);
215        $objFormParam->addParam('レビューID', 'review_id', INT_LEN, 'n', array('MAX_LENGTH_CHECK'),'',false);
216    }
217
218    /**
219     * CSV ファイル出力実行
220     *
221     * @param  string $where       WHERE文
222     * @param  array  $arrWhereVal WHERE文の判定値
223     * @return void
224     */
225    public function lfDoOutputCsv($where, $arrWhereVal)
226    {
227        $objCSV = new SC_Helper_CSV_Ex();
228        $objCSV->sfDownloadCsv('4', $where, $arrWhereVal, '', true);
229    }
230
231    /**
232     * WHERE文の作成
233     *
234     * @param  array $arrForm フォームデータ
235     * @return array WHERE文、判定値
236     */
237    public function lfGetWhere($arrForm)
238    {
239        //削除されていない商品を検索
240        $where = 'A.del_flg = 0 AND B.del_flg = 0';
241        $arrWhereVal = array();
242
243        foreach ($arrForm AS $key=>$val) {
244            if (empty($val)) continue;
245
246            switch ($key) {
247                case 'search_reviewer_name':
248                    $val = preg_replace('/ /', '%', $val);
249                    $where.= ' AND reviewer_name LIKE ? ';
250                    $arrWhereVal[] = "%$val%";
251                    break;
252
253                case 'search_reviewer_url':
254                    $val = preg_replace('/ /', '%', $val);
255                    $where.= ' AND reviewer_url LIKE ? ';
256                    $arrWhereVal[] = "%$val%";
257                    break;
258
259                case 'search_name':
260                    $val = preg_replace('/ /', '%', $val);
261                    $where.= ' AND name LIKE ? ';
262                    $arrWhereVal[] = "%$val%";
263                    break;
264
265                case 'search_product_code':
266                    $val = preg_replace('/ /', '%', $val);
267                    $where.= ' AND A.product_id IN (SELECT product_id FROM dtb_products_class WHERE product_code LIKE ?)';
268                    $arrWhereVal[] = "%$val%";
269                    break;
270
271                case 'search_sex':
272                    $tmp_where = '';
273                    //$val=配列の中身,$element=各キーの値(1,2)
274                    if (is_array($val)) {
275                        foreach ($val as $element) {
276                            if ($element != '') {
277                                if ($tmp_where == '') {
278                                    $tmp_where .= ' AND (sex = ?';
279                                } else {
280                                    $tmp_where .= ' OR sex = ?';
281                                }
282                                $arrWhereVal[] = $element;
283                            }
284                        }
285                        if ($tmp_where != '') {
286                            $tmp_where .= ')';
287                            $where .= " $tmp_where ";
288                        }
289                    }
290
291                    break;
292
293                case 'search_recommend_level':
294                    $where.= ' AND recommend_level = ? ';
295                    $arrWhereVal[] = $val;
296                    break;
297
298                case 'search_startyear':
299                    if (isset($_POST['search_startyear']) && isset($_POST['search_startmonth']) && isset($_POST['search_startday'])) {
300                        $date = SC_Utils_Ex::sfGetTimestamp($_POST['search_startyear'], $_POST['search_startmonth'], $_POST['search_startday']);
301                        $where.= ' AND A.create_date >= ? ';
302                        $arrWhereVal[] = $date;
303                    }
304                    break;
305
306                case 'search_endyear':
307                    if (isset($_POST['search_startyear']) && isset($_POST['search_startmonth']) && isset($_POST['search_startday'])) {
308                        $date = SC_Utils_Ex::sfGetTimestamp($_POST['search_endyear'], $_POST['search_endmonth'], $_POST['search_endday']);
309                        $end_date = date('Y/m/d',strtotime('1 day' ,strtotime($date)));
310                        $where.= " AND A.create_date <= cast('$end_date' as date) ";
311                    }
312                    break;
313
314                default:
315                    break;
316            }
317
318        }
319
320        return array($where, $arrWhereVal);
321    }
322
323    /**
324     * レビュー検索結果の取得
325     *
326     * @param  SC_Helper_Review $objReview
327     * @return array  レビュー一覧
328     */
329    public function lfGetReview(SC_Helper_Review $objReview)
330    {
331        $arrForm = $this->arrForm;
332
333        $query = $this->makeQuery($arrForm);
334        $linemax = $objReview->count($query);
335
336        $this->tpl_linemax = $linemax;
337        $this->tpl_pageno = isset($arrForm['search_pageno']) ? $arrForm['search_pageno'] : '';
338
339        // ページ送りの取得
340        $page_max = SC_Utils_Ex::sfGetSearchPageMax($arrForm['search_page_max']);
341        $objNavi = new SC_PageNavi_Ex($this->tpl_pageno, $linemax, $page_max,
342                                      'eccube.moveNaviPage', NAVI_PMAX);
343        $this->arrPagenavi = $objNavi->arrPagenavi;
344        $startno = $objNavi->start_row;
345
346        // 取得範囲の指定(開始行番号、行数のセット)
347        $params = array(
348            'query' => $query,
349            'limit' => $page_max,
350            'offset' => $startno
351        );
352        $arrReview = $objReview->find($params);
353
354        return $arrReview;
355    }
356
357    /**
358     * SC_Helper_Reviewインスタンスへ渡す検索条件の配列を作成.
359     *
360     * @param array $data
361     * @return array
362     */
363    private function makeQuery($data = array()) {
364        $query = array();
365
366        foreach ($data AS $key => $val) {
367            if (empty($val)) continue;
368
369            switch ($key) {
370                case 'search_reviewer_name':
371                    $query['reviewer_name'] = $val;
372                    break;
373
374                case 'search_reviewer_url':
375                    $query['reviewer_url'] = $val;
376                    break;
377
378                case 'search_name':
379                    $query['product_name'] = $val;
380                    break;
381
382                case 'search_product_code':
383                    $query['product_code'] = $val;
384                    break;
385
386                case 'search_sex':
387                    $query['reviewer_sex'] = $val;
388                    break;
389
390                case 'search_recommend_level':
391                    $query['recommend_level'] = $val;
392                    break;
393
394                case 'search_startyear':
395                    if (isset($_POST['search_startyear']) && isset($_POST['search_startmonth']) && isset($_POST['search_startday'])) {
396                        $date = SC_Utils_Ex::sfGetTimestamp($_POST['search_startyear'], $_POST['search_startmonth'], $_POST['search_startday']);
397                        $query['date_from'] = $date;
398                    }
399                    break;
400
401                case 'search_endyear':
402                    if (isset($_POST['search_startyear']) && isset($_POST['search_startmonth']) && isset($_POST['search_startday'])) {
403                        $date = SC_Utils_Ex::sfGetTimestamp($_POST['search_endyear'], $_POST['search_endmonth'], $_POST['search_endday']);
404                        $end_date = date('Y/m/d',strtotime('1 day' ,strtotime($date)));
405                        $query['date_to'] = $end_date;
406                    }
407                    break;
408
409                default:
410                    break;
411            }
412
413        }
414
415        return $query;
416    }
417}
Note: See TracBrowser for help on using the repository browser.