Index: /branches/feature-module-update/data/Smarty/templates/admin/system/input.tpl
===================================================================
--- /branches/feature-module-update/data/Smarty/templates/admin/system/input.tpl	(revision 15079)
+++ /branches/feature-module-update/data/Smarty/templates/admin/system/input.tpl	(revision 15602)
@@ -6,5 +6,4 @@
  */
 *}-->
-<!--　-->
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
@@ -37,109 +36,109 @@
 <!--★★メインコンテンツ★★-->
 <table width="500" border="0" cellspacing="0" cellpadding="0" summary=" ">
-<form name="form1" id="form1" method="post" action="<!--{$tpl_recv}-->" onsubmit="return fnRegistMember();">
-<input type="hidden" name="mode" value="<!--{$tpl_mode}-->">
-<input type="hidden" name="member_id" value="<!--{$tpl_member_id}-->">
-<input type="hidden" name="pageno" value="<!--{$tpl_pageno}-->">
-<input type="hidden" name="old_login_id" value="<!--{$tpl_old_login_id}-->">
-<input type="hidden" name="uniqid" value="<!--{$tpl_uniqid}-->">
-	<tr valign="top">
-		<td class="mainbg">
-			<!--▼登録テーブルここから-->
-			<table width="500" border="0" cellspacing="0" cellpadding="0" summary=" ">
-				<!--メインエリア-->
-				<tr>
-					<td align="center">
-						<table width="470" border="0" cellspacing="0" cellpadding="0" summary=" ">
-							<tr><td height="14"></td></tr>
-							<tr>
-								<td colspan="3"><img src="<!--{$smarty.const.URL_DIR}-->img/contents/main_top.jpg" width="470" height="14" alt=""></td>
-							</tr>
-							<tr>
-								<td background="<!--{$smarty.const.URL_DIR}-->img/contents/main_left.jpg"><img src="<!--{$smarty.const.URL_DIR}-->img/common/_.gif" width="14" height="1" alt=""></td>
-								<td bgcolor="#cccccc">
-									
-									<table width="440" border="0" cellspacing="0" cellpadding="0" summary=" ">
-										<tr>
-											<td colspan="3"><img src="<!--{$smarty.const.URL_DIR}-->img/contents/contents_title_top.gif" width="440" height="7" alt=""></td>
-										</tr>
-										<tr>
-											<td background="<!--{$smarty.const.URL_DIR}-->img/contents/contents_title_left_bg.gif"><img src="<!--{$smarty.const.URL_DIR}-->img/contents/contents_title_left.gif" width="22" height="12" alt=""></td>
-											<td bgcolor="#636469" width="400" class="fs14n"><span class="white"><!--コンテンツタイトル-->メンバー登録/編集</span></td>
-											<td background="<!--{$smarty.const.URL_DIR}-->img/contents/contents_title_right_bg.gif"><img src="<!--{$smarty.const.URL_DIR}-->img/common/_.gif" width="18" height="1" alt=""></td>
-										</tr>
-										<tr>
-											<td colspan="3"><img src="<!--{$smarty.const.URL_DIR}-->img/contents/contents_title_bottom.gif" width="440" height="7" alt=""></td>
-										</tr>
-										<tr>
-											<td colspan="3"><img src="<!--{$smarty.const.URL_DIR}-->img/contents/main_bar.jpg" width="440" height="10" alt=""></td>
-										</tr>
-									</table>
-									
-									<table width="440" border="0" cellspacing="1" cellpadding="8" summary=" ">
-										<tr class="fs12n">
-											<td width="90" bgcolor="#f3f3f3">名前</td>
-											<td width="337" bgcolor="#ffffff"><!--{if $arrErr.name}--><span class="red"><!--{$arrErr.name}--></span><!--{/if}--><input type="text" name="name" size="30" class="box30" value="<!--{$arrForm.name}-->" maxlength="<!--{$smarty.const.STEXT_LEN}-->"/>　<span class="red">※必須入力</span>
-											</td>
-										</tr>
-										<tr class="fs12n">
-											<td width="90" bgcolor="#f3f3f3">所属</td>
-											<td width="337" bgcolor="#ffffff"><!--{if $arrErr.department}--><span class="red"><!--{$arrErr.department}--></span><!--{/if}--><input type="text" name="department" size="30" class="box30" value="<!--{$arrForm.department}-->" maxlength="<!--{$smarty.const.STEXT_LEN}-->"/>
-											</td>
-										</tr>
-										<tr class="fs12">
-											<td width="90" bgcolor="#f3f3f3">ログインＩＤ</td>
-											<td width="337" bgcolor="#ffffff"><!--{if $arrErr.login_id}--><span class="red"><!--{$arrErr.login_id}--></span><!--{/if}--><input type="text" name="login_id" size="20" class="box20"  value="<!--{$arrForm.login_id}-->" maxlength="<!--{$smarty.const.STEXT_LEN}-->"/>　<span class="red">※必須入力</span><br />
-											※半角英数字・15文字以内</td>
-										</tr>
-										<tr class="fs12">
-											<td width="90" bgcolor="#f3f3f3">パスワード</td>
-											<td width="337" bgcolor="#ffffff"><!--{if $arrErr.password}--><span class="red"><!--{$arrErr.password}--></span><!--{/if}--><input type="password" name="password" size="20" class="box20" value="<!--{$arrForm.password}-->" onfocus="<!--{$tpl_onfocus}-->" maxlength="<!--{$smarty.const.STEXT_LEN}-->"/>　<span class="red">※必須入力</span><br />
-											※半角英数字・15文字以内</td>
-										</tr>
-										<tr class="fs12n">
-											<td width="90" bgcolor="#f3f3f3">管理権限</td>
-											<td width="337" bgcolor="#ffffff"><!--{if $arrErr.authority}--><span class="red"><!--{$arrErr.authority}--></span><!--{/if}--><select name="authority">
-											<option value="" >選択してください</option>
-											<!--{html_options options=$arrAUTHORITY selected=$arrForm.authority}-->
-											</select>　<span class="red">※必須入力</span></td>
-										</tr>
-									</table>
+<form name="form1" id="form1" method="post" action="" onsubmit="return fnRegistMember();">
+<input type="hidden" name="mode" value="<!--{$tpl_mode|escape}-->">
+<input type="hidden" name="member_id" value="<!--{$tpl_member_id|escape}-->">
+<input type="hidden" name="pageno" value="<!--{$tpl_pageno|escape}-->">
+<input type="hidden" name="old_login_id" value="<!--{$tpl_old_login_id|escape}-->">
+<input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid|escape}-->">
+    <tr valign="top">
+        <td class="mainbg">
+            <!--▼登録テーブルここから-->
+            <table width="500" border="0" cellspacing="0" cellpadding="0" summary=" ">
+                <!--メインエリア-->
+                <tr>
+                    <td align="center">
+                        <table width="470" border="0" cellspacing="0" cellpadding="0" summary=" ">
+                            <tr><td height="14"></td></tr>
+                            <tr>
+                                <td colspan="3"><img src="<!--{$smarty.const.URL_DIR}-->img/contents/main_top.jpg" width="470" height="14" alt=""></td>
+                            </tr>
+                            <tr>
+                                <td background="<!--{$smarty.const.URL_DIR}-->img/contents/main_left.jpg"><img src="<!--{$smarty.const.URL_DIR}-->img/common/_.gif" width="14" height="1" alt=""></td>
+                                <td bgcolor="#cccccc">
 
-									<table width="440" border="0" cellspacing="0" cellpadding="0" summary=" ">
-										<tr>
-											<td bgcolor="#cccccc"><img src="<!--{$smarty.const.URL_DIR}-->img/common/_.gif" width="1" height="5" alt=""></td>
-											<td><img src="<!--{$smarty.const.URL_DIR}-->img/contents/tbl_top.gif" width="438" height="7" alt=""></td>
-											<td bgcolor="#cccccc"><img src="<!--{$smarty.const.URL_DIR}-->img/common/_.gif" width="1" height="5" alt=""></td>
-										</tr>
-										<tr>
-											<td bgcolor="#cccccc"><img src="<!--{$smarty.const.URL_DIR}-->img/common/_.gif" width="1" height="10" alt=""></td>
-											<td bgcolor="#e9e7de" align="center">
-											<table border="0" cellspacing="0" cellpadding="0" summary=" ">
-												<tr>
-													<td><input type="image" onMouseover="chgImgImageSubmit('<!--{$smarty.const.URL_DIR}-->img/contents/btn_regist_on.jpg',this)" onMouseout="chgImgImageSubmit('<!--{$smarty.const.URL_DIR}-->img/contents/btn_regist.jpg',this)" src="<!--{$smarty.const.URL_DIR}-->img/contents/btn_regist.jpg" width="123" height="24" alt="この内容で登録する" border="0" name="subm" ></td>
-												</tr>
-											</table>
-											</td>
-											<td bgcolor="#cccccc"><img src="<!--{$smarty.const.URL_DIR}-->img/common/_.gif" width="1" height="10" alt=""></td>
-										</tr>
-										<tr>
-											<td colspan="3"><img src="<!--{$smarty.const.URL_DIR}-->img/contents/tbl_bottom.gif" width="440" height="8" alt=""></td>
-										</tr>
-									</table>
-								</td>
-								<td background="<!--{$smarty.const.URL_DIR}-->img/contents/main_right.jpg"><img src="<!--{$smarty.const.URL_DIR}-->img/common/_.gif" width="14" height="1" alt=""></td>
-							</tr>
-							<tr>
-								<td colspan="3"><img src="<!--{$smarty.const.URL_DIR}-->img/contents/main_bottom.jpg" width="470" height="14" alt=""></td>
-							</tr>
-							<tr><td height="30"></td></tr>
-						</table>
-					</td>
-				</tr>
-				<!--メインエリア-->
-			</table>
-			<!--▲登録テーブルここまで-->
-		</td>
-	</tr>
+                                    <table width="440" border="0" cellspacing="0" cellpadding="0" summary=" ">
+                                        <tr>
+                                            <td colspan="3"><img src="<!--{$smarty.const.URL_DIR}-->img/contents/contents_title_top.gif" width="440" height="7" alt=""></td>
+                                        </tr>
+                                        <tr>
+                                            <td background="<!--{$smarty.const.URL_DIR}-->img/contents/contents_title_left_bg.gif"><img src="<!--{$smarty.const.URL_DIR}-->img/contents/contents_title_left.gif" width="22" height="12" alt=""></td>
+                                            <td bgcolor="#636469" width="400" class="fs14n"><span class="white"><!--コンテンツタイトル-->メンバー登録/編集</span></td>
+                                            <td background="<!--{$smarty.const.URL_DIR}-->img/contents/contents_title_right_bg.gif"><img src="<!--{$smarty.const.URL_DIR}-->img/common/_.gif" width="18" height="1" alt=""></td>
+                                        </tr>
+                                        <tr>
+                                            <td colspan="3"><img src="<!--{$smarty.const.URL_DIR}-->img/contents/contents_title_bottom.gif" width="440" height="7" alt=""></td>
+                                        </tr>
+                                        <tr>
+                                            <td colspan="3"><img src="<!--{$smarty.const.URL_DIR}-->img/contents/main_bar.jpg" width="440" height="10" alt=""></td>
+                                        </tr>
+                                    </table>
+
+                                    <table width="440" border="0" cellspacing="1" cellpadding="8" summary=" ">
+                                        <tr class="fs12n">
+                                            <td width="90" bgcolor="#f3f3f3">名前</td>
+                                            <td width="337" bgcolor="#ffffff"><!--{if $arrErr.name}--><span class="red"><!--{$arrErr.name}--></span><!--{/if}--><input type="text" name="name" size="30" class="box30" value="<!--{$arrForm.name}-->" maxlength="<!--{$smarty.const.STEXT_LEN}-->"/>　<span class="red">※必須入力</span>
+                                            </td>
+                                        </tr>
+                                        <tr class="fs12n">
+                                            <td width="90" bgcolor="#f3f3f3">所属</td>
+                                            <td width="337" bgcolor="#ffffff"><!--{if $arrErr.department}--><span class="red"><!--{$arrErr.department}--></span><!--{/if}--><input type="text" name="department" size="30" class="box30" value="<!--{$arrForm.department}-->" maxlength="<!--{$smarty.const.STEXT_LEN}-->"/>
+                                            </td>
+                                        </tr>
+                                        <tr class="fs12">
+                                            <td width="90" bgcolor="#f3f3f3">ログインＩＤ</td>
+                                            <td width="337" bgcolor="#ffffff"><!--{if $arrErr.login_id}--><span class="red"><!--{$arrErr.login_id}--></span><!--{/if}--><input type="text" name="login_id" size="20" class="box20"  value="<!--{$arrForm.login_id}-->" maxlength="<!--{$smarty.const.STEXT_LEN}-->"/>　<span class="red">※必須入力</span><br />
+                                            ※半角英数字・15文字以内</td>
+                                        </tr>
+                                        <tr class="fs12">
+                                            <td width="90" bgcolor="#f3f3f3">パスワード</td>
+                                            <td width="337" bgcolor="#ffffff"><!--{if $arrErr.password}--><span class="red"><!--{$arrErr.password}--></span><!--{/if}--><input type="password" name="password" size="20" class="box20" value="<!--{$arrForm.password}-->" onfocus="<!--{$tpl_onfocus}-->" maxlength="<!--{$smarty.const.STEXT_LEN}-->"/>　<span class="red">※必須入力</span><br />
+                                            ※半角英数字・15文字以内</td>
+                                        </tr>
+                                        <tr class="fs12n">
+                                            <td width="90" bgcolor="#f3f3f3">管理権限</td>
+                                            <td width="337" bgcolor="#ffffff"><!--{if $arrErr.authority}--><span class="red"><!--{$arrErr.authority}--></span><!--{/if}--><select name="authority">
+                                            <option value="" >選択してください</option>
+                                            <!--{html_options options=$arrAUTHORITY selected=$arrForm.authority}-->
+                                            </select>　<span class="red">※必須入力</span></td>
+                                        </tr>
+                                    </table>
+
+                                    <table width="440" border="0" cellspacing="0" cellpadding="0" summary=" ">
+                                        <tr>
+                                            <td bgcolor="#cccccc"><img src="<!--{$smarty.const.URL_DIR}-->img/common/_.gif" width="1" height="5" alt=""></td>
+                                            <td><img src="<!--{$smarty.const.URL_DIR}-->img/contents/tbl_top.gif" width="438" height="7" alt=""></td>
+                                            <td bgcolor="#cccccc"><img src="<!--{$smarty.const.URL_DIR}-->img/common/_.gif" width="1" height="5" alt=""></td>
+                                        </tr>
+                                        <tr>
+                                            <td bgcolor="#cccccc"><img src="<!--{$smarty.const.URL_DIR}-->img/common/_.gif" width="1" height="10" alt=""></td>
+                                            <td bgcolor="#e9e7de" align="center">
+                                            <table border="0" cellspacing="0" cellpadding="0" summary=" ">
+                                                <tr>
+                                                    <td><input type="image" onMouseover="chgImgImageSubmit('<!--{$smarty.const.URL_DIR}-->img/contents/btn_regist_on.jpg',this)" onMouseout="chgImgImageSubmit('<!--{$smarty.const.URL_DIR}-->img/contents/btn_regist.jpg',this)" src="<!--{$smarty.const.URL_DIR}-->img/contents/btn_regist.jpg" width="123" height="24" alt="この内容で登録する" border="0" name="subm" ></td>
+                                                </tr>
+                                            </table>
+                                            </td>
+                                            <td bgcolor="#cccccc"><img src="<!--{$smarty.const.URL_DIR}-->img/common/_.gif" width="1" height="10" alt=""></td>
+                                        </tr>
+                                        <tr>
+                                            <td colspan="3"><img src="<!--{$smarty.const.URL_DIR}-->img/contents/tbl_bottom.gif" width="440" height="8" alt=""></td>
+                                        </tr>
+                                    </table>
+                                </td>
+                                <td background="<!--{$smarty.const.URL_DIR}-->img/contents/main_right.jpg"><img src="<!--{$smarty.const.URL_DIR}-->img/common/_.gif" width="14" height="1" alt=""></td>
+                            </tr>
+                            <tr>
+                                <td colspan="3"><img src="<!--{$smarty.const.URL_DIR}-->img/contents/main_bottom.jpg" width="470" height="14" alt=""></td>
+                            </tr>
+                            <tr><td height="30"></td></tr>
+                        </table>
+                    </td>
+                </tr>
+                <!--メインエリア-->
+            </table>
+            <!--▲登録テーブルここまで-->
+        </td>
+    </tr>
 </form>
 </table>
Index: /branches/feature-module-update/data/class/pages/admin/system/LC_Page_Admin_System_Input.php
===================================================================
--- /branches/feature-module-update/data/class/pages/admin/system/LC_Page_Admin_System_Input.php	(revision 15602)
+++ /branches/feature-module-update/data/class/pages/admin/system/LC_Page_Admin_System_Input.php	(revision 15602)
@@ -0,0 +1,378 @@
+<?php
+/*
+ * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
+ *
+ * http://www.lockon.co.jp/
+ */
+
+// {{{ requires
+require_once(CLASS_PATH . "pages/LC_Page.php");
+
+/**
+ * システム管理 のページクラス.
+ *
+ * @package Page
+ * @author LOCKON CO.,LTD.
+ * @version $Id$
+ */
+class LC_Page_Admin_System_Input extends LC_Page {
+
+    // }}}
+    // {{{ functions
+
+    /**
+     * Page を初期化する.
+     *
+     * @return void
+     */
+    function init() {
+        parent::init();
+
+        // ページ送り用ナンバーの取得
+        $this->tpl_pageno = isset($_REQUEST['pageno']) ? $_REQUEST['pageno'] : 1;
+
+        // マスタ-データから権限配列を取得
+        $masterData = new SC_DB_MasterData_Ex();
+        $this->arrAUTHORITY = $masterData->getMasterData('mtb_authority');
+    }
+
+    /**
+     * Page のプロセス.
+     *
+     * @return void
+     */
+    function process() {
+
+        // ログインチェック
+        SC_Utils::sfIsSuccess(new SC_Session());
+
+        // トランザクショントークンの取得
+        $this->transactionid = $this->getToken();
+
+        switch($this->getMode()) {
+        case 'new':
+            $this->execNewMode();
+            break;
+
+        case 'edit':
+            $this->execEditMode();
+            break;
+
+        case 'parent_reload':
+            $this->execParentReloadMode();
+            // defaultアクションも実行させるためbreakしない
+
+        default:
+            $this->execDefaultMode();
+            break;
+        }
+
+        $objView = new SC_AdminView();
+        $objView->assignobj($this);
+        $objView->display('system/input.tpl');
+    }
+
+    /**
+     * デストラクタ.
+     *
+     * @return void
+     */
+    function destroy() {
+        parent::destroy();
+    }
+
+    /**
+     * switchアクション振り分け用パラメータを取得する.
+     *
+     * @param void
+     * @return string モード名
+     */
+    function getMode() {
+        $mode = '';
+        if ($_SERVER['REQUEST_METHOD'] == 'GET') {
+            if(isset($_GET['mode'])) $mode = $_GET['mode'];
+        } elseif ($_SERVER['REQUEST_METHOD'] == 'POST') {
+            if(isset($_POST['mode'])) $mode = $_POST['mode'];
+        }
+        return $mode;
+    }
+
+    /**
+     * newアクションの実行
+     * メンバーデータの新規登録を行う.
+     *
+     * @param void
+     * @return void
+     */
+    function execNewMode() {
+        if ($this->isValidToken() !== true) {
+            SC_Utils::sfDispError('');
+        }
+
+        $this->initNewMode();
+
+        $arrErr = $this->validateNewMode();
+
+        if (count($arrErr) > 0) {
+            // 入力された値を保持する
+            $this->tpl_mode      = $_POST['mode'];
+            $this->tpl_member_id = $_POST['member_id'];
+            $this->tpl_old_login_id = $_POST['old_login_id'];
+            $this->arrForm = $this->objForm->getHashArray();
+            // パスワードは保持しない
+            $this->arrForm['password'] = '';
+            // エラー情報をセットする
+            $this->arrErr = $arrErr;
+            // トランザクショントークンの取得
+            $this->transactionid = $this->getToken();
+            return;
+        }
+
+        $this->insertMemberData($this->objForm->getHashArray());
+        $this->reload(array('mode' => 'parent_reload'));
+    }
+
+    /**
+     * newアクションの初期化.
+     * SC_FormParamのインスタンスをメンバ変数にセットする.
+     *
+     * @param void
+     * @return void
+     */
+    function initNewMode() {
+        $objForm = new SC_FormParam();
+
+        $objForm->addParam('名前', 'name', STEXT_LEN, 'KV', array('EXIST_CHECK', 'MAX_LENGTH_CHECK'));
+        $objForm->addParam('所属', 'department', STEXT_LEN, 'KV', array('MAX_LENGTH_CHECK'));
+        $objForm->addParam('ログインID', 'login_id', '' , '', array('EXIST_CHECK', 'ALNUM_CHECK'));
+        //$objForm->addParam('パスワード', 'password', '' , '', array('EXIST_CHECK', 'ALNUM_CHECK'));
+        $objForm->addParam('権限', 'authority', INT_LEN, '', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK'));
+
+        $objForm->setParam($_POST);
+        $objForm->convParam();
+
+        $this->objForm = $objForm;
+    }
+
+    /**
+     * newアクションのパラメータ検証を行う.
+     *
+     * @param void
+     * @return array エラー情報の連想配列
+     */
+    function validateNewMode() {
+        $arrErr = $this->objForm->checkError();
+        if (isset($arrErr) && count($arrErr) > 0) return $arrErr;
+
+        // ログインID・パスワードの文字数チェック
+        $objErr = new SC_CheckError();
+        $objErr->doFunc(array("パスワード", 'password', ID_MIN_LEN, ID_MAX_LEN), array("NUM_RANGE_CHECK"));
+        $objErr->doFunc(array("ログインID", 'login_id', ID_MIN_LEN, ID_MAX_LEN), array("NUM_RANGE_CHECK"));
+
+        $arrErr = $objErr->arrErr;
+
+        // 管理者名が登録済みでないか
+        if ($this->memberDataExists('name = ?', $_POST['name'])) {
+            $arrErr['name'] = "既に登録されている名前なので利用できません。<br>";
+        }
+        // ログインIDが登録済みでないか
+        if ($this->memberDataExists('login_id = ?', $_POST['login_id'])) {
+            $arrErr['login_id'] = "既に登録されているIDなので利用できません。<br>";
+        }
+
+        return $arrErr;
+    }
+
+    /**
+     * editアクションの実行
+     * メンバーデータの更新を行う.
+     *
+     * @param void
+     * @return void
+     */
+    function execEditMode() {
+        if ($this->isValidToken() !== true) {
+            SC_Utils::sfDispError('');
+        }
+
+        // newアクションと同じパラメータを使用するので。。。分けた方が良い？
+        $this->initNewMode();
+
+        $arrErr = $this->validateEditMode();
+
+        if (count($arrErr) > 0) {
+            // 入力された値を保持する
+            $this->tpl_mode      = $_POST['mode'];
+            $this->tpl_member_id = $_POST['member_id'];
+            $this->tpl_old_login_id = $_POST['old_login_id'];
+            $this->arrForm = $this->objForm->getHashArray();
+            // パスワードは保持しない
+            $this->arrForm['password'] = '';
+            // エラー情報をセットする
+            $this->arrErr = $arrErr;
+            // トランザクショントークンの取得
+            $this->transactionid = $this->getToken();
+            return;
+        }
+
+        $this->updateMemberData($_POST['member_id'], $this->objForm->getHashArray());
+        // 親ウィンドウを更新後、自ウィンドウを閉じる。
+        $url = URL_SYSTEM_TOP . "?pageno=" . $_POST['pageno'];
+        $this->tpl_onload = "fnUpdateParent('".$url."'); window.close();";
+    }
+
+    /**
+     * editアクションのパラメータ検証を行う.
+     *
+     * @param void
+     * @return array エラー情報の連想配列
+     */
+    function validateEditMode() {
+        $arrErr = $this->objForm->checkError();
+        if (isset($arrErr) && count($arrErr) > 0) return $arrErr;
+
+        // ログインID・パスワードの文字数チェック
+        $objErr = new SC_CheckError();
+        $objErr->doFunc(array("パスワード", 'password', ID_MIN_LEN, ID_MAX_LEN), array("NUM_RANGE_CHECK"));
+        $objErr->doFunc(array("ログインID", 'login_id', ID_MIN_LEN, ID_MAX_LEN), array("NUM_RANGE_CHECK"));
+
+        $arrErr = $objErr->arrErr;
+
+        // ログインIDが変更されている場合はチェックする。
+        if ($_POST['login_id'] != $_POST['old_login_id']) {
+            // ログインIDが登録済みでないか
+            if ($this->memberDataExists('login_id = ?', $_POST['login_id'])) {
+                $arrErr['login_id'] = "既に登録されているIDなので利用できません。<br>";
+            }
+        }
+
+        return $arrErr;
+    }
+
+    /**
+     * parent_reloadアクションを実行する.
+     * テンプレートに親windowをリロードするjavascriptをセットする.
+     *
+     * @param void
+     * @return void
+     */
+    function execParentReloadMode() {
+        $url = URL_SYSTEM_TOP;
+        $this->tpl_onload = "fnUpdateParent('$url')";
+    }
+
+    /**
+     * defaultアクションを実行する.
+     * 初回表示時に実行される.
+     * $GET['id']が渡された場合、編集モードとして表示,
+     * 無い場合は新規登録モードとして表示する.
+     *
+     * @param void
+     * @return void
+     */
+    function execDefaultMode() {
+        // $_GET['id']があれば編集モードで表示する
+        if (isset($_GET['id']) && SC_Utils::sfIsInt($_GET['id'])) {
+            $this->tpl_mode      = 'edit';
+            $this->tpl_member_id = $_GET['id'];
+            $this->tpl_onfocus   = "fnClearText(this.name);";
+            $this->arrForm       = $this->getMemberData($_GET['id']);
+            $this->arrForm['password'] = DUMMY_PASS;
+            $this->tpl_old_login_id    = $this->arrForm['login_id'];
+        // 新規作成モードで表示
+        } else {
+            $this->tpl_mode = "new";
+            $this->arrForm['authority'] = -1;
+        }
+    }
+
+    /**
+     * DBからmember_idに対応する管理者データを取得する
+     *
+     * @param integer $id メンバーID
+     * @return array 管理者データの連想配列, 無い場合は空の配列を返す
+     */
+    function getMemberData($id) {
+        $table   = 'dtb_member';
+        $columns = 'name,department,login_id,authority';
+        $where   = 'member_id = ?';
+
+        $objQuery = new SC_Query();
+        $arrRet = $objQuery->select($columns, $table, $where, array($id));
+
+        if (is_null($arrRet)) return array();
+
+        return $arrRet[0];
+    }
+
+    /**
+     *  値が登録済みかどうかを調べる
+     *
+     * @param string $where WHERE句
+     * @param string $val 検索したい値
+     * @return boolean 登録済みならtrue, 未登録ならfalse
+     */
+    function memberDataExists($where, $val) {
+        $table = 'dtb_member';
+
+        $objQuery = new SC_Query();
+        $count = $objQuery->count($table, $where, array($val));
+
+        if ($count > 0) return true;
+        return false;
+    }
+
+    /**
+     * 入力された管理者データをInsertする.
+     *
+     * @param array 管理者データの連想配列
+     * @return void
+     */
+    function insertMemberData($arrMemberData) {
+        $objQuery = new SC_Query();
+
+        // INSERTする値を作成する.
+        $sqlVal = array();
+        $sqlVal['name']        = $arrMemberData['name'];
+        $sqlVal['department']  = $arrMemberData['department'];
+        $sqlVal['login_id']    = $arrMemberData['login_id'];
+        $sqlVal['password']    = sha1($arrMemberData['password'] . ':' . AUTH_MAGIC);
+        $sqlVal['authority']   = $arrMemberData['authority'];
+        $sqlVal['rank']        = $objQuery->max('dtb_member', 'rank') + 1;
+        $sqlVal['work']        = '1'; // 稼働に設定
+        $sqlVal['del_flg']     = '0'; // 削除フラグをOFFに設定
+        $sqlVal['creator_id']  = $_SESSION['member_id'];
+        $sqlVal['create_date'] = 'NOW()';
+        $sqlVal['update_date'] = 'NOW()';
+
+        // INSERTの実行
+        $objQuery->insert('dtb_member', $sqlVal);
+    }
+
+    /**
+     * 管理者データをUpdateする.
+     *
+     * @param array 管理者データの連想配列
+     * @return void
+     */
+    function updateMemberData($member_id, $arrMemberData) {
+        $objQuery = new SC_Query();
+
+        // Updateする値を作成する.
+        $sqlVal = array();
+        $sqlVal['name']        = $arrMemberData['name'];
+        $sqlVal['department']  = $arrMemberData['department'];
+        $sqlVal['login_id']    = $arrMemberData['login_id'];
+        $sqlVal['authority']   = $arrMemberData['authority'];
+        $sqlVal['update_date'] = 'NOW()';
+        if($arrMemberData['password'] != DUMMY_PASS) {
+            $sqlVal['password'] = sha1($arrMemberData['password'] . ":" . AUTH_MAGIC);
+        }
+
+        $where = "member_id = ?";
+
+        // UPDATEの実行
+        $objQuery->update("dtb_member", $sqlVal, $where, array($member_id));
+    }
+}
+?>
Index: /branches/feature-module-update/data/class/page_extends/admin/system/LC_Page_Admin_System_Input_Ex.php
===================================================================
--- /branches/feature-module-update/data/class/page_extends/admin/system/LC_Page_Admin_System_Input_Ex.php	(revision 15602)
+++ /branches/feature-module-update/data/class/page_extends/admin/system/LC_Page_Admin_System_Input_Ex.php	(revision 15602)
@@ -0,0 +1,52 @@
+<?php
+/*
+ * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
+ *
+ * http://www.lockon.co.jp/
+ */
+
+// {{{ requires
+require_once(CLASS_PATH . "pages/admin/system/LC_Page_Admin_System_Input.php");
+
+/**
+ * システム管理 のページクラス(拡張).
+ *
+ * LC_Page_Admin_System_Input をカスタマイズする場合はこのクラスを編集する.
+ *
+ * @package Page
+ * @author LOCKON CO.,LTD.
+ * @version $Id$
+ */
+class LC_Page_Admin_System_Input_Ex extends LC_Page_Admin_System_Input {
+
+    // }}}
+    // {{{ functions
+
+    /**
+     * Page を初期化する.
+     *
+     * @return void
+     */
+    function init() {
+        parent::init();
+    }
+
+    /**
+     * Page のプロセス.
+     *
+     * @return void
+     */
+    function process() {
+        parent::process();
+    }
+
+    /**
+     * デストラクタ.
+     *
+     * @return void
+     */
+    function destroy() {
+        parent::destroy();
+    }
+}
+?>
Index: /branches/feature-module-update/html/admin/system/input.php
===================================================================
--- /branches/feature-module-update/html/admin/system/input.php	(revision 15532)
+++ /branches/feature-module-update/html/admin/system/input.php	(revision 15602)
@@ -5,204 +5,15 @@
  * http://www.lockon.co.jp/
  */
+
+// {{{ requires
 require_once("../require.php");
+require_once(CLASS_PATH . "page_extends/admin/system/LC_Page_Admin_System_Input_Ex.php");
 
-class LC_Page {
-	var $arrErr;		// エラーメッセージ出力用
-	var $tpl_recv;		// 入力情報POST先
-	var $tpl_onload;	// ページ読み込み時のイベント
-	var $arrForm;		// フォーム出力用
-	var $tpl_mode;		// 新規作成:new or 編集:edit
-	var $tpl_member_id; // 編集時に使用する。
-	var $tpl_pageno;
-	var $tpl_onfocus;	// パスワード項目選択時のイベント用
-	var $tpl_old_login_id;
-	function LC_Page() {
-		$this->tpl_recv =  'input.php';
-		$this->tpl_pageno = $_REQUEST['pageno'];
-		$this->SHORTTEXT_MAX = STEXT_LEN;
-		$this->MIDDLETEXT_MAX = MTEXT_LEN;
-		$this->LONGTEXT_MAX = LTEXT_LEN;
-		global $arrAUTHORITY;
-		$this->arrAUTHORITY = $arrAUTHORITY;
-	}
-}
+// }}}
+// {{{ generate page
 
-$conn = new SC_DbConn();
-$objPage = new LC_Page();
-$objView = new SC_AdminView();
-
-// 認証可否の判定
-$objSess = new SC_Session();
-sfIsSuccess($objSess);
-
-// member_idが指定されていた場合、編集モードとする。
-if(sfIsInt($_GET['id'])) {
-	$objPage->tpl_mode = 'edit';
-	$objPage->tpl_member_id = $_GET['id'];
-	$objPage->tpl_onfocus = "fnClearText(this.name);";
-	// DBのメンバー情報を読み出す
-	$data_list = fnGetMember($conn, $_GET['id']);
-	// 該当ユーザを表示させる
-	$objPage->arrForm = $data_list[0];
-	// ダミーのパスワードをセットしておく。
-	$objPage->arrForm['password'] = DUMMY_PASS;
-	// ログインIDを保管しておく。
-	$objPage->tpl_old_login_id = $data_list[0]['login_id'];
-    
-    $objPage->tpl_uniqid = $objSess->getUniqId();
-} else {
-	// 新規作成モード
-	$objPage->tpl_mode = "new";
-	$objPage->arrForm['authority'] = -1;
-}
-
-// 新規作成モード or 編集モード
-if( $_POST['mode'] == 'new' || $_POST['mode'] == 'edit') {
-    // 画面遷移の正当性チェック
-	if (sfIsValidTransition($objSess) == false) {
-        sfDispError(INVALID_MOVE_ERRORR);
-    }
-    // 入力エラーチェック
-	$objPage->arrErr = fnErrorCheck($conn);
-	
-	// 入力が正常であった場合は、DBに書き込む
-	if(count($objPage->arrErr) == 0) {
-		if($_POST['mode'] == 'new') {
-			// メンバーの追加
-			fnInsertMember();
-			// リロードによる二重登録対策のため、同じページに飛ばす。
-			header("Location: ". $_SERVER['PHP_SELF'] . "?mode=reload");	
-			exit;
-		}
-		if($_POST['mode'] == 'edit') {
-			// メンバーの追加
-			if(fnUpdateMember($_POST['member_id'])) {
-				// 親ウィンドウを更新後、自ウィンドウを閉じる。
-				$url = URL_SYSTEM_TOP . "?pageno=".$_POST['pageno'];
-				$objPage->tpl_onload="fnUpdateParent('".$url."'); window.close();";
-			}
-		}
-	// 入力エラーが発生した場合
-	} else {
-		// モードの設定
-		$objPage->tpl_mode = $_POST['mode'];
-		$objPage->tpl_member_id = $_POST['member_id'];
-		$objPage->tpl_old_login_id = $_POST['old_login_id'];
-		// すでに入力した値を表示する。
-		$objPage->arrForm = $_POST;
-		// 通常入力のパスワードは引き継がない。
-		if($objPage->arrForm['password'] != DUMMY_PASS) {
-			$objPage->arrForm['password'] = '';
-		}
-	}
-}
-
-// リロードの指定があった場合
-if( $_GET['mode'] == 'reload') {
-	// 親ウィンドウを更新するようにセットする。
-	$url = URL_SYSTEM_TOP;
-	$objPage->tpl_onload="fnUpdateParent('".$url."')";
-}
-
-// 画面遷移の正当性チェック用にuniqidを埋め込む
-$objPage->tpl_uniqid = $objSess->getUniqId();
-
-// テンプレート用変数の割り当て
-$objView->assignobj($objPage);
-$objView->display('system/input.tpl');
-
-/* 入力エラーのチェック */
-function fnErrorCheck($conn) {
-	
-	$objErr = new SC_CheckError();
-	
-	$_POST["name"] = mb_convert_kana($_POST["name"] ,"KV");
-	$_POST["department"] = mb_convert_kana($_POST["department"] ,"KV");
-	
-	// 名前チェック
-	$objErr->doFunc(array("名前",'name'), array("EXIST_CHECK"));
-	$objErr->doFunc(array("名前",'name',STEXT_LEN,"BIG"), array("MAX_LENGTH_CHECK"));
-	
-	// 編集モードでない場合は、重複チェック
-	if (!isset($objErr->arrErr['name']) && $_POST['mode'] != 'edit') {
-		$sql = "SELECT name FROM dtb_member WHERE del_flg <> 1 AND name = ?";
-		$result = $conn->getOne($sql, array($_POST['name'])); 
-		if ( $result ) {
-			$objErr->arrErr['name'] = "既に登録されている名前なので利用できません。<br>";
-		}
-	}
-		
-	// ログインIDチェック
-	$objErr->doFunc(array("ログインID",'login_id'), array("EXIST_CHECK", "ALNUM_CHECK"));
-	$objErr->doFunc(array("ログインID",'login_id',ID_MIN_LEN , ID_MAX_LEN) ,array("NUM_RANGE_CHECK"));
-
-	// 新規モードもしくは、編集モードでログインIDが変更されている場合はチェックする。
-	if (!isset($objErr->arrErr['login_id']) && $_POST['mode'] != 'edit' || ($_POST['mode'] == 'edit' && $_POST['login_id'] != $_POST['old_login_id'])) {
-		$sql = "SELECT login_id FROM dtb_member WHERE del_flg <> 1 AND login_id = ?";
-		$result = $conn->getOne($sql, array($_POST['login_id'])); 
-		if ( $result != "" ) {
-			$objErr->arrErr['login_id'] = "既に登録されているIDなので利用できません。<br>";
-		}
-	}
-	
-	// パスワードチェック(編集モードでDUMMY_PASSが入力されている場合は、スルーする)
-	if(!($_POST['mode'] == 'edit' && $_POST['password'] == DUMMY_PASS)) { 
-		$objErr->doFunc(array("パスワード",'password'), array("EXIST_CHECK", "ALNUM_CHECK"));
-		if (!$arrErr['password']) {
-			// パスワードのチェック
-			$objErr->doFunc( array("パスワード",'password',4 ,15 ) ,array( "NUM_RANGE_CHECK" ) );	
-		}
-	}
-	
-	// 権限チェック
-	$objErr->doFunc(array("権限",'authority'),array("EXIST_CHECK"));
-	return $objErr->arrErr;
-}
-
-/* DBへのデータ挿入 */
-function fnInsertMember() {
-	// クエリークラスの宣言
-	$oquery = new SC_Query();
-	// INSERTする値を作成する。
-	$sqlval['name'] = $_POST['name'];
-	$sqlval['department'] = $_POST['department'];
-	$sqlval['login_id'] = $_POST['login_id'];
-	$sqlval['password'] = sha1($_POST['password'] . ":" . AUTH_MAGIC);
-	$sqlval['authority'] = $_POST['authority'];
-	$sqlval['rank']=  $oquery->max("dtb_member", "rank") + 1;
-	$sqlval['work'] = "1"; // 稼働に設定
-	$sqlval['del_flg'] = "0";	// 削除フラグをOFFに設定
-	$sqlval['creator_id'] = $_SESSION['member_id'];
-	$sqlval['create_date'] = "now()";
-	$sqlval['update_date'] = "now()";
-	// INSERTの実行
-	$ret = $oquery->insert("dtb_member", $sqlval);
-	return $ret;
-}
-
-/* DBへのデータ更新 */
-function fnUpdateMember($id) {
-	// クエリークラスの宣言
-	$oquery = new SC_Query();
-	// INSERTする値を作成する。
-	$sqlval['name'] = $_POST['name'];
-	$sqlval['department'] = $_POST['department'];
-	$sqlval['login_id'] = $_POST['login_id'];
-	if($_POST['password'] != DUMMY_PASS) {
-		$sqlval['password'] = sha1($_POST['password'] . ":" . AUTH_MAGIC);
-	}
-	$sqlval['authority'] = $_POST['authority'];
-	$sqlval['update_date'] = "now()";
-	// UPDATEの実行
-	$where = "member_id = " . $id;
-	$ret = $oquery->update("dtb_member", $sqlval, $where);
-	return $ret;
-}
-
-/* DBからデータの読み込み */
-function fnGetMember($conn, $id) {
-	$sqlse = "SELECT name,department,login_id,authority FROM dtb_member WHERE member_id = ?";
-	$ret = $conn->getAll($sqlse, Array($id));
-	return $ret;
-}
+$objPage = new LC_Page_Admin_System_Input_Ex();
+$objPage->init();
+$objPage->process();
+register_shutdown_function(array($objPage, "destroy"));
 ?>
