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

Revision 20002, 13.8 KB checked in by AMUAMU, 13 years ago (diff)

#847 (パラメータ DUMMY_PASS や DEFAULT_PASSWORD の廃止)の対応

DEFAULT_PASSWORDに統一

  • 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        // 親ウィンドウを更新後、自ウィンドウを閉じる。
159        $url = ADMIN_SYSTEM_URLPATH . "?pageno=" . $_POST['pageno'];
160        $this->tpl_onload = "fnUpdateParent('".$url."'); window.close();";
161    }
162
163    /**
164     * newアクションの初期化.
165     * SC_FormParamのインスタンスをメンバ変数にセットする.
166     *
167     * @param void
168     * @return void
169     */
170    function initNewMode($mode = "") {
171        $objForm = new SC_FormParam();
172
173        $objForm->addParam('名前', 'name', STEXT_LEN, 'KV', array('EXIST_CHECK', 'MAX_LENGTH_CHECK'));
174        $objForm->addParam('所属', 'department', STEXT_LEN, 'KV', array('MAX_LENGTH_CHECK'));
175        $objForm->addParam('ログインID', 'login_id', '' , '', array('EXIST_CHECK', 'ALNUM_CHECK'));
176        if ($mode == "edit" && $_POST['password'] == DEFAULT_PASSWORD) {
177            $objForm->addParam('パスワード', 'password', '' , '', array('EXIST_CHECK'));
178        } else {
179            $objForm->addParam('パスワード', 'password', '' , '', array('EXIST_CHECK', 'ALNUM_CHECK'));
180        }
181        $objForm->addParam('権限', 'authority', INT_LEN, '', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK'));
182        $objForm->addParam('稼働/非稼働', 'work', INT_LEN, '', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK'));
183
184        $objForm->setParam($_POST);
185        $objForm->convParam();
186
187        $this->objForm = $objForm;
188    }
189
190    /**
191     * newアクションのパラメータ検証を行う.
192     *
193     * @param void
194     * @return array エラー情報の連想配列
195     */
196    function validateNewMode() {
197        $arrErr = $this->objForm->checkError();
198        if (isset($arrErr) && count($arrErr) > 0) return $arrErr;
199
200        // ログインID・パスワードの文字数チェック
201        $objErr = new SC_CheckError();
202        $objErr->doFunc(array("パスワード", 'password', ID_MIN_LEN, ID_MAX_LEN), array("NUM_RANGE_CHECK"));
203        $objErr->doFunc(array("ログインID", 'login_id', ID_MIN_LEN, ID_MAX_LEN), array("NUM_RANGE_CHECK"));
204
205        $arrErr = $objErr->arrErr;
206
207        // 管理者名が登録済みでないか
208        if ($this->memberDataExists('name = ?', $_POST['name'])) {
209            $arrErr['name'] = "既に登録されている名前なので利用できません。<br>";
210        }
211        // ログインIDが登録済みでないか
212        if ($this->memberDataExists('login_id = ?', $_POST['login_id'])) {
213            $arrErr['login_id'] = "既に登録されているIDなので利用できません。<br>";
214        }
215
216        return $arrErr;
217    }
218
219    /**
220     * editアクションの実行
221     * メンバーデータの更新を行う.
222     *
223     * @param void
224     * @return void
225     */
226    function execEditMode() {
227        if (SC_Helper_Session_Ex::isValidToken() !== true) {
228            SC_Utils::sfDispError('');
229        }
230
231        $this->initNewMode("edit");
232
233        $arrErr = $this->validateEditMode();
234
235        if (count($arrErr) > 0) {
236            // 入力された値を保持する
237            $this->tpl_mode      = $_POST['mode'];
238            $this->tpl_member_id = $_POST['member_id'];
239            $this->tpl_old_login_id = $_POST['old_login_id'];
240            $this->arrForm = $this->objForm->getHashArray();
241            // パスワードは保持しない
242            $this->arrForm['password'] = '';
243            // エラー情報をセットする
244            $this->arrErr = $arrErr;
245            // トランザクショントークンの取得
246            $this->transactionid = SC_Helper_Session_Ex::getToken();
247            return;
248        }
249
250        $this->updateMemberData($_POST['member_id'], $this->objForm->getHashArray());
251        // 親ウィンドウを更新後、自ウィンドウを閉じる。
252        $url = ADMIN_SYSTEM_URLPATH . "?pageno=" . $_POST['pageno'];
253        $this->tpl_onload = "fnUpdateParent('".$url."'); window.close();";
254    }
255
256    /**
257     * editアクションのパラメータ検証を行う.
258     *
259     * @param void
260     * @return array エラー情報の連想配列
261     */
262    function validateEditMode() {
263        $arrErr = $this->objForm->checkError();
264        if (isset($arrErr) && count($arrErr) > 0) return $arrErr;
265
266        // ログインID・パスワードの文字数チェック
267        $objErr = new SC_CheckError();
268        $objErr->doFunc(array("パスワード", 'password', ID_MIN_LEN, ID_MAX_LEN), array("SPTAB_CHECK" ,"NUM_RANGE_CHECK"));
269        $objErr->doFunc(array("ログインID", 'login_id', ID_MIN_LEN, ID_MAX_LEN), array("SPTAB_CHECK" ,"NUM_RANGE_CHECK"));
270
271        $arrErr = $objErr->arrErr;
272
273        // ログインIDが変更されている場合はチェックする。
274        if ($_POST['login_id'] != $_POST['old_login_id']) {
275            // ログインIDが登録済みでないか
276            if ($this->memberDataExists('login_id = ?', $_POST['login_id'])) {
277                $arrErr['login_id'] = "既に登録されているIDなので利用できません。<br>";
278            }
279        }
280
281        return $arrErr;
282    }
283
284    /**
285     * parent_reloadアクションを実行する.
286     * テンプレートに親windowをリロードするjavascriptをセットする.
287     *
288     * @param void
289     * @return void
290     */
291    function execParentReloadMode() {
292        $url = ADMIN_SYSTEM_URLPATH;
293        $this->tpl_onload = "fnUpdateParent('$url')";
294    }
295
296    /**
297     * defaultアクションを実行する.
298     * 初回表示時に実行される.
299     * $GET['id']が渡された場合、編集モードとして表示,
300     * 無い場合は新規登録モードとして表示する.
301     *
302     * @param void
303     * @return void
304     */
305    function execDefaultMode() {
306        // $_GET['id']があれば編集モードで表示する
307        if (isset($_GET['id']) && SC_Utils::sfIsInt($_GET['id'])) {
308            $this->tpl_mode      = 'edit';
309            $this->tpl_member_id = $_GET['id'];
310            $this->tpl_onfocus   = "fnClearText(this.name);";
311            $this->arrForm       = $this->getMemberData($_GET['id']);
312            $this->arrForm['password'] = DEFAULT_PASSWORD;
313            $this->tpl_old_login_id    = $this->arrForm['login_id'];
314        // 新規作成モードで表示
315        } else {
316            $this->tpl_mode = "new";
317            $this->arrForm['authority'] = -1;
318        }
319    }
320
321    /**
322     * DBからmember_idに対応する管理者データを取得する
323     *
324     * @param integer $id メンバーID
325     * @return array 管理者データの連想配列, 無い場合は空の配列を返す
326     */
327    function getMemberData($id) {
328        $table   = 'dtb_member';
329        $columns = 'name,department,login_id,authority, work';
330        $where   = 'member_id = ?';
331
332        $objQuery = new SC_Query();
333        $arrRet = $objQuery->select($columns, $table, $where, array($id));
334
335        if (is_null($arrRet)) return array();
336
337        return $arrRet[0];
338    }
339
340    /**
341     *  値が登録済みかどうかを調べる
342     *
343     * @param string $where WHERE句
344     * @param string $val 検索したい値
345     * @return boolean 登録済みならtrue, 未登録ならfalse
346     */
347    function memberDataExists($where, $val) {
348        $table = 'dtb_member';
349
350        $objQuery = new SC_Query();
351        $count = $objQuery->count($table, $where, array($val));
352
353        if ($count > 0) return true;
354        return false;
355    }
356
357    /**
358     * 入力された管理者データをInsertする.
359     *
360     * @param array 管理者データの連想配列
361     * @return void
362     */
363    function insertMemberData($arrMemberData) {
364        $objQuery = new SC_Query();
365
366        // INSERTする値を作成する.
367        $salt                  = SC_Utils_Ex::sfGetRandomString(10);
368        $sqlVal = array();
369        $sqlVal['name']        = $arrMemberData['name'];
370        $sqlVal['department']  = $arrMemberData['department'];
371        $sqlVal['login_id']    = $arrMemberData['login_id'];
372        $sqlVal['password']    = SC_Utils_Ex::sfGetHashString($arrMemberData['password'], $salt);
373        $sqlVal['salt']        = $salt;
374        $sqlVal['authority']   = $arrMemberData['authority'];
375        $sqlVal['rank']        = $objQuery->max('rank', 'dtb_member') + 1;
376        $sqlVal['work']        = $arrMemberData['work'];
377        $sqlVal['del_flg']     = '0'; // 削除フラグをOFFに設定
378        $sqlVal['creator_id']  = $_SESSION['member_id'];
379        $sqlVal['create_date'] = 'NOW()';
380        $sqlVal['update_date'] = 'NOW()';
381
382        // INSERTの実行
383        $sqlVal['member_id'] = $objQuery->nextVal('dtb_member_member_id');
384        $objQuery->insert('dtb_member', $sqlVal);
385    }
386
387    /**
388     * 管理者データをUpdateする.
389     *
390     * @param array 管理者データの連想配列
391     * @return void
392     */
393    function updateMemberData($member_id, $arrMemberData) {
394        $objQuery = new SC_Query();
395
396        // Updateする値を作成する.
397        $sqlVal = array();
398        $sqlVal['name']        = $arrMemberData['name'];
399        $sqlVal['department']  = $arrMemberData['department'];
400        $sqlVal['login_id']    = $arrMemberData['login_id'];
401        $sqlVal['authority']   = $arrMemberData['authority'];
402        $sqlVal['work']   = $arrMemberData['work'];
403        $sqlVal['update_date'] = 'NOW()';
404        if($arrMemberData['password'] != DEFAULT_PASSWORD) {
405            $salt = SC_Utils_Ex::sfGetRandomString(10);
406            $sqlVal['salt']     = $salt;
407            $sqlVal['password'] = SC_Utils_Ex::sfGetHashString($arrMemberData['password'], $salt);
408        }
409
410        $where = "member_id = ?";
411
412        // UPDATEの実行
413        $objQuery->update("dtb_member", $sqlVal, $where, array($member_id));
414    }
415}
416?>
Note: See TracBrowser for help on using the repository browser.