source: branches/camp/camp-2_5-E/data/class/pages/admin/system/LC_Page_Admin_System_Input.php @ 19540

Revision 19540, 13.1 KB checked in by Yammy, 13 years ago (diff)

LC_Page::reload() を SC_DIsplay::reload() に変更

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