tpl_pageno = isset($_REQUEST['pageno']) ? $_REQUEST['pageno'] : 1;
// マスタ-データから権限配列を取得
$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() {
// ログインチェック
SC_Utils::sfIsSuccess(new SC_Session());
// トランザクショントークンの取得
$this->transactionid = SC_Helper_Session_Ex::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;
}
}
/**
* デストラクタ.
*
* @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 (SC_Helper_Session_Ex::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 = SC_Helper_Session_Ex::getToken();
return;
}
$this->insertMemberData($this->objForm->getHashArray());
$this->objDisplay->reload(array('mode' => 'parent_reload'));
}
/**
* newアクションの初期化.
* SC_FormParamのインスタンスをメンバ変数にセットする.
*
* @param void
* @return void
*/
function initNewMode($mode = "") {
$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'));
if ($mode == "edit" && $_POST['password'] == DUMMY_PASS) {
$objForm->addParam('パスワード', 'password', '' , '', array('EXIST_CHECK'));
} else {
$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'] = "既に登録されている名前なので利用できません。
";
}
// ログインIDが登録済みでないか
if ($this->memberDataExists('login_id = ?', $_POST['login_id'])) {
$arrErr['login_id'] = "既に登録されているIDなので利用できません。
";
}
return $arrErr;
}
/**
* editアクションの実行
* メンバーデータの更新を行う.
*
* @param void
* @return void
*/
function execEditMode() {
if (SC_Helper_Session_Ex::isValidToken() !== true) {
SC_Utils::sfDispError('');
}
$this->initNewMode("edit");
$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 = SC_Helper_Session_Ex::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("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;
// ログインIDが変更されている場合はチェックする。
if ($_POST['login_id'] != $_POST['old_login_id']) {
// ログインIDが登録済みでないか
if ($this->memberDataExists('login_id = ?', $_POST['login_id'])) {
$arrErr['login_id'] = "既に登録されているIDなので利用できません。
";
}
}
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の実行
$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 = 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));
}
}
?>