tpl_mainpage = 'system/input.tpl'; // マスターデータから権限配列を取得 $masterData = new SC_DB_MasterData_Ex(); $this->arrAUTHORITY = $masterData->getMasterData('mtb_authority'); $this->httpCacheControl('nocache'); } /** * Page のプロセス. * * @return void */ function process() { $this->action(); $this->sendResponse(); } /** * Page のアクション. * * @return void */ function action() { // ページ送りの処理 $_REQUEST['pageno']が信頼しうる値かどうかチェックする。 $this->tpl_pageno = $this->lfCheckPageNo($_REQUEST['pageno']); $objFormParam = new SC_FormParam_Ex(); $arrErr = array(); $arrForm = array(); switch($this->getMode()) { case 'new': // パラメーターの初期化 $this->initForm($objFormParam, $_POST); // エラーチェック $arrErr = $this->validateData($objFormParam, $_POST, $this->getMode()); $this->arrForm = $objFormParam->getHashArray(); if(SC_Utils_Ex::isBlank($arrErr)) { $this->insertMemberData($this->arrForm); // 親ウィンドウを更新後、自ウィンドウを閉じる。 $url = ADMIN_SYSTEM_URLPATH . "?pageno=" . $this->arrForm['pageno']; $this->tpl_onload = "fnUpdateParent('".$url."'); window.close();"; } else { // 入力された値を保持する $this->tpl_mode = $this->getMode(); $this->tpl_member_id = ''; $this->tpl_old_login_id = ''; // パスワードは保持しない $this->arrForm['password'] = ''; // エラー情報をセットする $this->arrErr = $arrErr; } break; case 'edit': // パラメーターの初期化 $this->initForm($objFormParam, $_POST, $this->getMode()); // エラーチェック $arrErr = $this->validateData($objFormParam, $_POST, $this->getMode()); $this->arrForm = $objFormParam->getHashArray(); if(SC_Utils_Ex::isBlank($arrErr)) { $this->updateMemberData($this->arrForm['member_id'], $this->arrForm); // 親ウィンドウを更新後、自ウィンドウを閉じる。 $url = ADMIN_SYSTEM_URLPATH . "?pageno=" . $this->arrForm['pageno']; $this->tpl_onload = "fnUpdateParent('".$url."'); window.close();"; } else { // 入力された値を保持する $this->tpl_mode = $this->getMode(); $this->tpl_member_id = $this->arrForm['member_id']; $this->tpl_old_login_id = $this->arrForm['old_login_id']; // パスワードは保持しない $this->arrForm['password'] = ''; // エラー情報をセットする $this->arrErr = $arrErr; } break; default: // $_GET['id'](member_id)が登録済みのものかチェック。 // 登録されていない場合は不正なものとして、新規扱いとする。 $clean_id = ""; $clean_mode_flg = 'new'; // idが0より大きい数字で整数の場合 if (isset($_GET['id']) && SC_Utils_Ex::sfIsInt($_GET['id']) && $_GET['id'] > 0) { if ($this->memberDataExists('member_id = ? AND del_flg = 0', $_GET['id'])) { $clean_id = $_GET['id']; $clean_mode_flg = 'edit'; } } switch($clean_mode_flg) { case 'edit': $this->tpl_mode = $clean_mode_flg; $this->tpl_member_id = $clean_id; $this->tpl_onfocus = "fnClearText(this.name);"; $this->arrForm = $this->getMemberData($clean_id); $this->arrForm['password'] = DEFAULT_PASSWORD; $this->tpl_old_login_id = $this->arrForm['login_id']; break; case 'new': default: $this->tpl_mode = $clean_mode_flg; $this->arrForm['authority'] = -1; break; } break; } $this->setTemplate($this->tpl_mainpage); } /** * デストラクタ. * * @return void */ function destroy() { parent::destroy(); } /** * フォームパラメーター初期化 * * @param object $objFormParam * @param array $arrParams $_POST値 * @param string $mode editの時は指定 * @return void */ function initForm(&$objFormParam, &$arrParams, $mode = "") { $objFormParam->addParam('メンバーID', 'member_id', INT_LEN, 'n', array('NUM_CHECK')); $objFormParam->addParam('名前', 'name', STEXT_LEN, 'KV', array('EXIST_CHECK', 'MAX_LENGTH_CHECK')); $objFormParam->addParam('所属', 'department', STEXT_LEN, 'KV', array('MAX_LENGTH_CHECK')); $objFormParam->addParam('ログインID', 'login_id', '' , '', array('EXIST_CHECK', 'ALNUM_CHECK')); $objFormParam->addParam('変更前ログインID', 'old_login_id', '' , '', array('ALNUM_CHECK')); if ($mode == 'edit' && $arrParams['password'] == DEFAULT_PASSWORD) { $objFormParam->addParam('パスワード', 'password', '' , '', array('EXIST_CHECK')); } else { $objFormParam->addParam('パスワード', 'password', '' , '', array('EXIST_CHECK', 'ALNUM_CHECK')); } $objFormParam->addParam('権限', 'authority', INT_LEN, '', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK')); $objFormParam->addParam('稼働/非稼働', 'work', INT_LEN, '', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK')); $objFormParam->addParam('ページ', 'pageno', INT_LEN, 'n', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK')); $objFormParam->setParam($arrParams); $objFormParam->convParam(); } /** * パラメーターの妥当性検証を行う. * * @param void * @return array エラー情報の連想配列 */ function validateData(&$objFormParam, &$arrParams, $mode) { $arrErr = $objFormParam->checkError(); if (isset($arrErr) && count($arrErr) > 0) return $arrErr; // ログインID・パスワードの文字数チェック $objErr = new SC_CheckError_Ex(); if($mode == 'new') { $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")); } elseif($mode == 'edit') { $objErr->doFunc(array("パスワード", 'password', ID_MIN_LEN, ID_MAX_LEN), array("SPTAB_CHECK" ,"NUM_RANGE_CHECK")); $objErr->doFunc(array("ログインID", 'login_id', ID_MIN_LEN, ID_MAX_LEN), array("SPTAB_CHECK" ,"NUM_RANGE_CHECK")); } $arrErr = $objErr->arrErr; switch($mode) { case 'new': // 管理者名が登録済みでないか if ($this->memberDataExists('name = ? AND del_flg = 0', $arrParams['name'])) { $arrErr['name'] = "既に登録されている名前なので利用できません。
"; } // ログインIDが登録済みでないか if ($this->memberDataExists('login_id = ? AND del_flg = 0', $arrParams['login_id'])) { $arrErr['login_id'] = "既に登録されているIDなので利用できません。
"; } break; case 'edit': // ログインIDが変更されている場合はチェックする。 if ($arrParams['login_id'] != $arrParams['old_login_id']) { // ログインIDが登録済みでないか if ($this->memberDataExists('login_id = ? AND del_flg = 0', $arrParams['login_id'])) { $arrErr['login_id'] = "既に登録されているIDなので利用できません。
"; } } break; } return $arrErr; } /** * DBからmember_idに対応する管理者データを取得する * * @param integer $id メンバーID * @return array 管理者データの連想配列, 無い場合は空の配列を返す */ function getMemberData($id) { $table = 'dtb_member'; $columns = 'name,department,login_id,authority, work'; $where = 'member_id = ?'; $objQuery =& SC_Query_Ex::getSingletonInstance(); return $objQuery->getRow($columns, $table, $where, array($id)); } /** * 値が登録済みかどうかを調べる * * @param string $where WHERE句 * @param string $val 検索したい値 * @return boolean 登録済みならtrue, 未登録ならfalse */ function memberDataExists($where, $val) { $table = 'dtb_member'; $objQuery =& SC_Query_Ex::getSingletonInstance(); $count = $objQuery->count($table, $where, array($val)); if ($count > 0) return true; return false; } /** * ページ番号が信頼しうる値かチェックする. * * @access private * @param integer $pageno ページの番号 * @return integer $clean_pageno チェック後のページの番号 */ function lfCheckPageNo($pageno) { $clean_pageno = ""; // $pagenoが0以上の整数かチェック if(SC_Utils_Ex::sfIsInt($pageno) && $pageno > 0) { $clean_pageno = $pageno; } // 例外は全て1とする else { $clean_pageno = 1; } return $clean_pageno; } /** * 入力された管理者データをInsertする. * * @param array 管理者データの連想配列 * @return void */ function insertMemberData($arrMemberData) { $objQuery =& SC_Query_Ex::getSingletonInstance(); // INSERTする値を作成する. $salt = SC_Utils_Ex::sfGetRandomString(10); $sqlVal = array(); $sqlVal['name'] = $arrMemberData['name']; $sqlVal['department'] = $arrMemberData['department']; $sqlVal['login_id'] = $arrMemberData['login_id']; $sqlVal['password'] = SC_Utils_Ex::sfGetHashString($arrMemberData['password'], $salt); $sqlVal['salt'] = $salt; $sqlVal['authority'] = $arrMemberData['authority']; $sqlVal['rank'] = $objQuery->max('rank', 'dtb_member') + 1; $sqlVal['work'] = $arrMemberData['work']; $sqlVal['del_flg'] = '0'; // 削除フラグをOFFに設定 $sqlVal['creator_id'] = $_SESSION['member_id']; $sqlVal['create_date'] = 'CURRENT_TIMESTAMP'; $sqlVal['update_date'] = 'CURRENT_TIMESTAMP'; // INSERTの実行 $sqlVal['member_id'] = $objQuery->nextVal('dtb_member_member_id'); $objQuery->insert('dtb_member', $sqlVal); } /** * 管理者データをUpdateする. * * @param array 管理者データの連想配列 * @return void */ function updateMemberData($member_id, $arrMemberData) { $objQuery =& SC_Query_Ex::getSingletonInstance(); // Updateする値を作成する. $sqlVal = array(); $sqlVal['name'] = $arrMemberData['name']; $sqlVal['department'] = $arrMemberData['department']; $sqlVal['login_id'] = $arrMemberData['login_id']; $sqlVal['authority'] = $arrMemberData['authority']; $sqlVal['work'] = $arrMemberData['work']; $sqlVal['update_date'] = 'CURRENT_TIMESTAMP'; if($arrMemberData['password'] != DEFAULT_PASSWORD) { $salt = SC_Utils_Ex::sfGetRandomString(10); $sqlVal['salt'] = $salt; $sqlVal['password'] = SC_Utils_Ex::sfGetHashString($arrMemberData['password'], $salt); } $where = "member_id = ?"; // UPDATEの実行 $objQuery->update("dtb_member", $sqlVal, $where, array($member_id)); } } ?>