source: branches/version-2_5-dev/data/class/pages/admin/system/LC_Page_Admin_System_Input.php @ 19909

Revision 19909, 13.2 KB checked in by uemoto, 11 years ago (diff)

#382(管理画面XHTMLに変更)

  • デザインを刷新
  • 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-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
25require_once(CLASS_REALDIR . "pages/admin/LC_Page_Admin.php");
26
27/**
28 * システム管理 のページクラス.
29 *
30 * @package Page
31 * @author LOCKON CO.,LTD.
32 * @version $Id$
33 */
34class LC_Page_Admin_System_Input extends LC_Page_Admin {
35
36    // }}}
37    // {{{ functions
38
39    /**
40     * Page を初期化する.
41     *
42     * @return void
43     */
44    function init() {
45        parent::init();
46
47        $this->tpl_mainpage = 'system/input.tpl';
48
49        // ページ送り用ナンバーの取得
50        $this->tpl_pageno = isset($_REQUEST['pageno']) ? $_REQUEST['pageno'] : 1;
51
52        // マスタ-データから権限配列を取得
53        $masterData = new SC_DB_MasterData_Ex();
54        $this->arrAUTHORITY = $masterData->getMasterData('mtb_authority');
55       
56        $this->httpCacheControl('nocache');
57    }
58
59    /**
60     * Page のプロセス.
61     *
62     * @return void
63     */
64    function process() {
65        $this->action();
66        $this->sendResponse();
67    }
68
69    /**
70     * Page のアクション.
71     *
72     * @return void
73     */
74    function action() {
75        // ログインチェック
76        SC_Utils::sfIsSuccess(new SC_Session());
77
78        // トランザクショントークンの取得
79        $this->transactionid = SC_Helper_Session_Ex::getToken();
80
81        switch($this->getMode()) {
82        case 'new':
83            $this->execNewMode();
84            break;
85
86        case 'edit':
87            $this->execEditMode();
88            break;
89
90        case 'parent_reload':
91            $this->execParentReloadMode();
92            // defaultアクションも実行させるためbreakしない
93
94        default:
95            $this->execDefaultMode();
96            break;
97        }
98        $this->setTemplate($this->tpl_mainpage);
99    }
100
101    /**
102     * デストラクタ.
103     *
104     * @return void
105     */
106    function destroy() {
107        parent::destroy();
108    }
109
110    /**
111     * switchアクション振り分け用パラメータを取得する.
112     *
113     * @param void
114     * @return string モード名
115     */
116    function getMode() {
117        $mode = '';
118        if ($_SERVER['REQUEST_METHOD'] == 'GET') {
119            if(isset($_GET['mode'])) $mode = $_GET['mode'];
120        } elseif ($_SERVER['REQUEST_METHOD'] == 'POST') {
121            if(isset($_POST['mode'])) $mode = $_POST['mode'];
122        }
123        return $mode;
124    }
125
126    /**
127     * newアクションの実行
128     * メンバーデータの新規登録を行う.
129     *
130     * @param void
131     * @return void
132     */
133    function execNewMode() {
134        if (SC_Helper_Session_Ex::isValidToken() !== true) {
135            SC_Utils::sfDispError('');
136        }
137
138        $this->initNewMode();
139
140        $arrErr = $this->validateNewMode();
141
142        if (count($arrErr) > 0) {
143            // 入力された値を保持する
144            $this->tpl_mode      = $_POST['mode'];
145            $this->tpl_member_id = $_POST['member_id'];
146            $this->tpl_old_login_id = $_POST['old_login_id'];
147            $this->arrForm = $this->objForm->getHashArray();
148            // パスワードは保持しない
149            $this->arrForm['password'] = '';
150            // エラー情報をセットする
151            $this->arrErr = $arrErr;
152            // トランザクショントークンの取得
153            $this->transactionid = SC_Helper_Session_Ex::getToken();
154            return;
155        }
156
157        $this->insertMemberData($this->objForm->getHashArray());
158        $this->objDisplay->reload(array('mode' => 'parent_reload'));
159    }
160
161    /**
162     * newアクションの初期化.
163     * SC_FormParamのインスタンスをメンバ変数にセットする.
164     *
165     * @param void
166     * @return void
167     */
168    function initNewMode($mode = "") {
169        $objForm = new SC_FormParam();
170
171        $objForm->addParam('名前', 'name', STEXT_LEN, 'KV', array('EXIST_CHECK', 'MAX_LENGTH_CHECK'));
172        $objForm->addParam('所属', 'department', STEXT_LEN, 'KV', array('MAX_LENGTH_CHECK'));
173        $objForm->addParam('ログインID', 'login_id', '' , '', array('EXIST_CHECK', 'ALNUM_CHECK'));
174        if ($mode == "edit" && $_POST['password'] == DUMMY_PASS) {
175            $objForm->addParam('パスワード', 'password', '' , '', array('EXIST_CHECK'));
176        } else {
177            $objForm->addParam('パスワード', 'password', '' , '', array('EXIST_CHECK', 'ALNUM_CHECK'));
178        }
179        $objForm->addParam('権限', 'authority', INT_LEN, '', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK'));
180
181        $objForm->setParam($_POST);
182        $objForm->convParam();
183
184        $this->objForm = $objForm;
185    }
186
187    /**
188     * newアクションのパラメータ検証を行う.
189     *
190     * @param void
191     * @return array エラー情報の連想配列
192     */
193    function validateNewMode() {
194        $arrErr = $this->objForm->checkError();
195        if (isset($arrErr) && count($arrErr) > 0) return $arrErr;
196
197        // ログインID・パスワードの文字数チェック
198        $objErr = new SC_CheckError();
199        $objErr->doFunc(array("パスワード", 'password', ID_MIN_LEN, ID_MAX_LEN), array("NUM_RANGE_CHECK"));
200        $objErr->doFunc(array("ログインID", 'login_id', ID_MIN_LEN, ID_MAX_LEN), array("NUM_RANGE_CHECK"));
201
202        $arrErr = $objErr->arrErr;
203
204        // 管理者名が登録済みでないか
205        if ($this->memberDataExists('name = ?', $_POST['name'])) {
206            $arrErr['name'] = "既に登録されている名前なので利用できません。<br>";
207        }
208        // ログインIDが登録済みでないか
209        if ($this->memberDataExists('login_id = ?', $_POST['login_id'])) {
210            $arrErr['login_id'] = "既に登録されているIDなので利用できません。<br>";
211        }
212
213        return $arrErr;
214    }
215
216    /**
217     * editアクションの実行
218     * メンバーデータの更新を行う.
219     *
220     * @param void
221     * @return void
222     */
223    function execEditMode() {
224        if (SC_Helper_Session_Ex::isValidToken() !== true) {
225            SC_Utils::sfDispError('');
226        }
227
228        $this->initNewMode("edit");
229
230        $arrErr = $this->validateEditMode();
231
232        if (count($arrErr) > 0) {
233            // 入力された値を保持する
234            $this->tpl_mode      = $_POST['mode'];
235            $this->tpl_member_id = $_POST['member_id'];
236            $this->tpl_old_login_id = $_POST['old_login_id'];
237            $this->arrForm = $this->objForm->getHashArray();
238            // パスワードは保持しない
239            $this->arrForm['password'] = '';
240            // エラー情報をセットする
241            $this->arrErr = $arrErr;
242            // トランザクショントークンの取得
243            $this->transactionid = SC_Helper_Session_Ex::getToken();
244            return;
245        }
246
247        $this->updateMemberData($_POST['member_id'], $this->objForm->getHashArray());
248        // 親ウィンドウを更新後、自ウィンドウを閉じる。
249        $url = ADMIN_SYSTEM_URL_PATH . "?pageno=" . $_POST['pageno'];
250        $this->tpl_onload = "fnUpdateParent('".$url."'); window.close();";
251    }
252
253    /**
254     * editアクションのパラメータ検証を行う.
255     *
256     * @param void
257     * @return array エラー情報の連想配列
258     */
259    function validateEditMode() {
260        $arrErr = $this->objForm->checkError();
261        if (isset($arrErr) && count($arrErr) > 0) return $arrErr;
262
263        // ログインID・パスワードの文字数チェック
264        $objErr = new SC_CheckError();
265        $objErr->doFunc(array("パスワード", 'password', ID_MIN_LEN, ID_MAX_LEN), array("SPTAB_CHECK" ,"NUM_RANGE_CHECK"));
266        $objErr->doFunc(array("ログインID", 'login_id', ID_MIN_LEN, ID_MAX_LEN), array("SPTAB_CHECK" ,"NUM_RANGE_CHECK"));
267
268        $arrErr = $objErr->arrErr;
269
270        // ログインIDが変更されている場合はチェックする。
271        if ($_POST['login_id'] != $_POST['old_login_id']) {
272            // ログインIDが登録済みでないか
273            if ($this->memberDataExists('login_id = ?', $_POST['login_id'])) {
274                $arrErr['login_id'] = "既に登録されているIDなので利用できません。<br>";
275            }
276        }
277
278        return $arrErr;
279    }
280
281    /**
282     * parent_reloadアクションを実行する.
283     * テンプレートに親windowをリロードするjavascriptをセットする.
284     *
285     * @param void
286     * @return void
287     */
288    function execParentReloadMode() {
289        $url = ADMIN_SYSTEM_URL_PATH;
290        $this->tpl_onload = "fnUpdateParent('$url')";
291    }
292
293    /**
294     * defaultアクションを実行する.
295     * 初回表示時に実行される.
296     * $GET['id']が渡された場合、編集モードとして表示,
297     * 無い場合は新規登録モードとして表示する.
298     *
299     * @param void
300     * @return void
301     */
302    function execDefaultMode() {
303        // $_GET['id']があれば編集モードで表示する
304        if (isset($_GET['id']) && SC_Utils::sfIsInt($_GET['id'])) {
305            $this->tpl_mode      = 'edit';
306            $this->tpl_member_id = $_GET['id'];
307            $this->tpl_onfocus   = "fnClearText(this.name);";
308            $this->arrForm       = $this->getMemberData($_GET['id']);
309            $this->arrForm['password'] = DUMMY_PASS;
310            $this->tpl_old_login_id    = $this->arrForm['login_id'];
311        // 新規作成モードで表示
312        } else {
313            $this->tpl_mode = "new";
314            $this->arrForm['authority'] = -1;
315        }
316    }
317
318    /**
319     * DBからmember_idに対応する管理者データを取得する
320     *
321     * @param integer $id メンバーID
322     * @return array 管理者データの連想配列, 無い場合は空の配列を返す
323     */
324    function getMemberData($id) {
325        $table   = 'dtb_member';
326        $columns = 'name,department,login_id,authority';
327        $where   = 'member_id = ?';
328
329        $objQuery = new SC_Query();
330        $arrRet = $objQuery->select($columns, $table, $where, array($id));
331
332        if (is_null($arrRet)) return array();
333
334        return $arrRet[0];
335    }
336
337    /**
338     *  値が登録済みかどうかを調べる
339     *
340     * @param string $where WHERE句
341     * @param string $val 検索したい値
342     * @return boolean 登録済みならtrue, 未登録ならfalse
343     */
344    function memberDataExists($where, $val) {
345        $table = 'dtb_member';
346
347        $objQuery = new SC_Query();
348        $count = $objQuery->count($table, $where, array($val));
349
350        if ($count > 0) return true;
351        return false;
352    }
353
354    /**
355     * 入力された管理者データをInsertする.
356     *
357     * @param array 管理者データの連想配列
358     * @return void
359     */
360    function insertMemberData($arrMemberData) {
361        $objQuery = new SC_Query();
362
363        // INSERTする値を作成する.
364        $sqlVal = array();
365        $sqlVal['name']        = $arrMemberData['name'];
366        $sqlVal['department']  = $arrMemberData['department'];
367        $sqlVal['login_id']    = $arrMemberData['login_id'];
368        $sqlVal['password']    = sha1($arrMemberData['password'] . ':' . AUTH_MAGIC);
369        $sqlVal['authority']   = $arrMemberData['authority'];
370        $sqlVal['rank']        = $objQuery->max('rank', 'dtb_member') + 1;
371        $sqlVal['work']        = '1'; // 稼働に設定
372        $sqlVal['del_flg']     = '0'; // 削除フラグをOFFに設定
373        $sqlVal['creator_id']  = $_SESSION['member_id'];
374        $sqlVal['create_date'] = 'NOW()';
375        $sqlVal['update_date'] = 'NOW()';
376
377        // INSERTの実行
378        $sqlval['member_id'] = $objQuery->nextVal('dtb_member_member_id');
379        $objQuery->insert('dtb_member', $sqlVal);
380    }
381
382    /**
383     * 管理者データをUpdateする.
384     *
385     * @param array 管理者データの連想配列
386     * @return void
387     */
388    function updateMemberData($member_id, $arrMemberData) {
389        $objQuery = new SC_Query();
390
391        // Updateする値を作成する.
392        $sqlVal = array();
393        $sqlVal['name']        = $arrMemberData['name'];
394        $sqlVal['department']  = $arrMemberData['department'];
395        $sqlVal['login_id']    = $arrMemberData['login_id'];
396        $sqlVal['authority']   = $arrMemberData['authority'];
397        $sqlVal['update_date'] = 'NOW()';
398        if($arrMemberData['password'] != DUMMY_PASS) {
399            $sqlVal['password'] = sha1($arrMemberData['password'] . ":" . AUTH_MAGIC);
400        }
401
402        $where = "member_id = ?";
403
404        // UPDATEの実行
405        $objQuery->update("dtb_member", $sqlVal, $where, array($member_id));
406    }
407}
408?>
Note: See TracBrowser for help on using the repository browser.