source: branches/feature-module-update/data/class/pages/admin/system/LC_Page_Admin_System_Input.php @ 15606

Revision 15606, 12.0 KB checked in by adachi, 17 years ago (diff)

プロパティ設定

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