source: branches/comu-utf8/html/admin/system/input.php @ 16016

Revision 16016, 7.2 KB checked in by adachi, 15 years ago (diff)

branches/comuをマージ

Line 
1<?php
2/*
3 * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
4 *
5 * http://www.lockon.co.jp/
6 */
7require_once("../require.php");
8
9class LC_Page {
10    var $arrErr;        // エラーメッセージ出力用
11    var $tpl_recv;      // 入力情報POST先
12    var $tpl_onload;    // ページ読み込み時のイベント
13    var $arrForm;       // フォーム出力用
14    var $tpl_mode;      // 新規作成:new or 編集:edit
15    var $tpl_member_id; // 編集時に使用する。
16    var $tpl_pageno;
17    var $tpl_onfocus;   // パスワード項目選択時のイベント用
18    var $tpl_old_login_id;
19    function LC_Page() {
20        $this->tpl_recv =  'input.php';
21        $this->tpl_pageno = $_REQUEST['pageno'];
22        $this->SHORTTEXT_MAX = STEXT_LEN;
23        $this->MIDDLETEXT_MAX = MTEXT_LEN;
24        $this->LONGTEXT_MAX = LTEXT_LEN;
25        global $arrAUTHORITY;
26        $this->arrAUTHORITY = $arrAUTHORITY;
27    }
28}
29
30$conn = new SC_DbConn();
31$objPage = new LC_Page();
32$objView = new SC_AdminView();
33
34// 認証可否の判定
35$objSess = new SC_Session();
36sfIsSuccess($objSess);
37
38// member_idが指定されていた場合、編集モードとする。
39if(sfIsInt($_GET['id'])) {
40    $objPage->tpl_mode = 'edit';
41    $objPage->tpl_member_id = $_GET['id'];
42    $objPage->tpl_onfocus = "fnClearText(this.name);";
43    // DBのメンバー情報を読み出す
44    $data_list = fnGetMember($conn, $_GET['id']);
45    // 該当ユーザを表示させる
46    $objPage->arrForm = $data_list[0];
47    // ダミーのパスワードをセットしておく。
48    $objPage->arrForm['password'] = DUMMY_PASS;
49    // ログインIDを保管しておく。
50    $objPage->tpl_old_login_id = $data_list[0]['login_id'];
51   
52    $objPage->tpl_uniqid = $objSess->getUniqId();
53} else {
54    // 新規作成モード
55    $objPage->tpl_mode = "new";
56    $objPage->arrForm['authority'] = -1;
57}
58
59// 新規作成モード or 編集モード
60if( $_POST['mode'] == 'new' || $_POST['mode'] == 'edit') {
61    // 画面遷移の正当性チェック
62    if (sfIsValidTransition($objSess) == false) {
63        sfDispError(INVALID_MOVE_ERRORR);
64    }
65    // 入力エラーチェック
66    $objPage->arrErr = fnErrorCheck($conn);
67   
68    // 入力が正常であった場合は、DBに書き込む
69    if(count($objPage->arrErr) == 0) {
70        if($_POST['mode'] == 'new') {
71            // メンバーの追加
72            fnInsertMember();
73            // リロードによる二重登録対策のため、同じページに飛ばす。
74            header("Location: " . sfGetCurrentUri(true) . "?mode=reload"); 
75            exit;
76        }
77        if($_POST['mode'] == 'edit') {
78            // メンバーの追加
79            if(fnUpdateMember($_POST['member_id'])) {
80                // 親ウィンドウを更新後、自ウィンドウを閉じる。
81                $url = URL_SYSTEM_TOP . "?pageno=".$_POST['pageno'];
82                $objPage->tpl_onload="fnUpdateParent('".$url."'); window.close();";
83            }
84        }
85    // 入力エラーが発生した場合
86    } else {
87        // モードの設定
88        $objPage->tpl_mode = $_POST['mode'];
89        $objPage->tpl_member_id = $_POST['member_id'];
90        $objPage->tpl_old_login_id = $_POST['old_login_id'];
91        // すでに入力した値を表示する。
92        $objPage->arrForm = $_POST;
93        // 通常入力のパスワードは引き継がない。
94        if($objPage->arrForm['password'] != DUMMY_PASS) {
95            $objPage->arrForm['password'] = '';
96        }
97    }
98}
99
100// リロードの指定があった場合
101if( $_GET['mode'] == 'reload') {
102    // 親ウィンドウを更新するようにセットする。
103    $url = URL_SYSTEM_TOP;
104    $objPage->tpl_onload="fnUpdateParent('".$url."')";
105}
106
107// 画面遷移の正当性チェック用にuniqidを埋め込む
108$objPage->tpl_uniqid = $objSess->getUniqId();
109
110// テンプレート用変数の割り当て
111$objView->assignobj($objPage);
112$objView->display('system/input.tpl');
113
114/* 入力エラーのチェック */
115function fnErrorCheck($conn) {
116   
117    $objErr = new SC_CheckError();
118   
119    $_POST["name"] = mb_convert_kana($_POST["name"] ,"KV");
120    $_POST["department"] = mb_convert_kana($_POST["department"] ,"KV");
121   
122    // 名前チェック
123    $objErr->doFunc(array("名前",'name'), array("EXIST_CHECK"));
124    $objErr->doFunc(array("名前",'name',STEXT_LEN,"BIG"), array("MAX_LENGTH_CHECK"));
125   
126    // 編集モードでない場合は、重複チェック
127    if (!isset($objErr->arrErr['name']) && $_POST['mode'] != 'edit') {
128        $sql = "SELECT name FROM dtb_member WHERE del_flg <> 1 AND name = ?";
129        $result = $conn->getOne($sql, array($_POST['name']));
130        if ( $result ) {
131            $objErr->arrErr['name'] = "既に登録されている名前なので利用できません。<br>";
132        }
133    }
134       
135    // ログインIDチェック
136    $objErr->doFunc(array("ログインID",'login_id'), array("EXIST_CHECK", "ALNUM_CHECK"));
137    $objErr->doFunc(array("ログインID",'login_id',ID_MIN_LEN , ID_MAX_LEN) ,array("NUM_RANGE_CHECK"));
138
139    // 新規モードもしくは、編集モードでログインIDが変更されている場合はチェックする。
140    if (!isset($objErr->arrErr['login_id']) && $_POST['mode'] != 'edit' || ($_POST['mode'] == 'edit' && $_POST['login_id'] != $_POST['old_login_id'])) {
141        $sql = "SELECT login_id FROM dtb_member WHERE del_flg <> 1 AND login_id = ?";
142        $result = $conn->getOne($sql, array($_POST['login_id']));
143        if ( $result != "" ) {
144            $objErr->arrErr['login_id'] = "既に登録されているIDなので利用できません。<br>";
145        }
146    }
147   
148    // パスワードチェック(編集モードでDUMMY_PASSが入力されている場合は、スルーする)
149    if(!($_POST['mode'] == 'edit' && $_POST['password'] == DUMMY_PASS)) {
150        $objErr->doFunc(array("パスワード",'password'), array("EXIST_CHECK", "ALNUM_CHECK"));
151        if (!$arrErr['password']) {
152            // パスワードのチェック
153            $objErr->doFunc( array("パスワード",'password',4 ,15 ) ,array( "NUM_RANGE_CHECK" ) );   
154        }
155    }
156   
157    // 権限チェック
158    $objErr->doFunc(array("権限",'authority'),array("EXIST_CHECK"));
159    return $objErr->arrErr;
160}
161
162/* DBへのデータ挿入 */
163function fnInsertMember() {
164    // クエリークラスの宣言
165    $oquery = new SC_Query();
166    // INSERTする値を作成する。
167    $sqlval['name'] = $_POST['name'];
168    $sqlval['department'] = $_POST['department'];
169    $sqlval['login_id'] = $_POST['login_id'];
170    $sqlval['password'] = sha1($_POST['password'] . ":" . AUTH_MAGIC);
171    $sqlval['authority'] = $_POST['authority'];
172    $sqlval['rank']=  $oquery->max("dtb_member", "rank") + 1;
173    $sqlval['work'] = "1"; // 稼働に設定
174    $sqlval['del_flg'] = "0";   // 削除フラグをOFFに設定
175    $sqlval['creator_id'] = $_SESSION['member_id'];
176    $sqlval['create_date'] = "now()";
177    $sqlval['update_date'] = "now()";
178    // INSERTの実行
179    $ret = $oquery->insert("dtb_member", $sqlval);
180    return $ret;
181}
182
183/* DBへのデータ更新 */
184function fnUpdateMember($id) {
185    // クエリークラスの宣言
186    $oquery = new SC_Query();
187    // INSERTする値を作成する。
188    $sqlval['name'] = $_POST['name'];
189    $sqlval['department'] = $_POST['department'];
190    $sqlval['login_id'] = $_POST['login_id'];
191    if($_POST['password'] != DUMMY_PASS) {
192        $sqlval['password'] = sha1($_POST['password'] . ":" . AUTH_MAGIC);
193    }
194    $sqlval['authority'] = $_POST['authority'];
195    $sqlval['update_date'] = "now()";
196    // UPDATEの実行
197    $where = "member_id = " . $id;
198    $ret = $oquery->update("dtb_member", $sqlval, $where);
199    return $ret;
200}
201
202/* DBからデータの読み込み */
203function fnGetMember($conn, $id) {
204    $sqlse = "SELECT name,department,login_id,authority FROM dtb_member WHERE member_id = ?";
205    $ret = $conn->getAll($sqlse, Array($id));
206    return $ret;
207}
208?>
Note: See TracBrowser for help on using the repository browser.