Source for file LC_Page_Admin_System_Input.php

Documentation is available at LC_Page_Admin_System_Input.php

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

Documentation generated on Tue, 28 Apr 2009 18:11:51 +0900 by phpDocumentor 1.4.2