[Svn-src-all:1370] [version-2_5-dev 20260] #974 [管理画面]システム設定 メンバー登録小窓

homan admin @ mail.ec-cube.net
2011年 2月 20日 (日) 19:36:40 JST


Subversion committed to /home/svn/open 20260
http://svn.ec-cube.net/open_trac/changeset/20260
┌────────────────────────────┐
│更新者 :  homan                                        │
│更新日時:  2011-02-20 19:36:40 +0900 (日, 20  2月 2011)│
└────────────────────────────┘

Log:
--------------------------------------------------------
#974 [管理画面]システム設定 メンバー登録小窓

Changed:                      [U:修正,A:追加,D:削除]
--------------------------------------------------------
U   branches/version-2_5-dev/data/class/pages/admin/system/LC_Page_Admin_System_Input.php

変更: branches/version-2_5-dev/data/class/pages/admin/system/LC_Page_Admin_System_Input.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/admin/system/LC_Page_Admin_System_Input.php	2011-02-20 09:23:10 UTC (rev 20259)
+++ branches/version-2_5-dev/data/class/pages/admin/system/LC_Page_Admin_System_Input.php	2011-02-20 10:36:40 UTC (rev 20260)
@@ -46,9 +46,6 @@
 
         $this->tpl_mainpage = 'system/input.tpl';
 
-        // ページ送り用ナンバーの取得
-        $this->tpl_pageno = isset($_REQUEST['pageno']) ? $_REQUEST['pageno'] : 1;
-
         // マスタ-データから権限配列を取得
         $masterData = new SC_DB_MasterData_Ex();
         $this->arrAUTHORITY = $masterData->getMasterData('mtb_authority');
@@ -78,6 +75,9 @@
         // トランザクショントークンの取得
         $this->transactionid = SC_Helper_Session_Ex::getToken();
 
+        // ページ送りの処理 $_REQUEST['pageno']が信頼しうる値かどうかチェックする。
+        $this->tpl_pageno = $this->lfCheckPageNo($_REQUEST['pageno']);
+
         switch($this->getMode()) {
         case 'new':
             $this->execNewMode();
@@ -87,10 +87,6 @@
             $this->execEditMode();
             break;
 
-        case 'parent_reload':
-            $this->execParentReloadMode();
-            // defaultアクションも実行させるためbreakしない
-
         default:
             $this->execDefaultMode();
             break;
@@ -119,16 +115,18 @@
             SC_Utils::sfDispError('');
         }
 
-        $this->initNewMode();
+        $this->objForm = $this->initNewMode();
 
         $arrErr = $this->validateNewMode();
 
+        $this->arrForm = $this->objForm->getHashArray();
+
         if (count($arrErr) > 0) {
             // 入力された値を保持する
             $this->tpl_mode      = $this->getMode();
-            $this->tpl_member_id = $_POST['member_id'];
-            $this->tpl_old_login_id = $_POST['old_login_id'];
-            $this->arrForm = $this->objForm->getHashArray();
+            $this->tpl_member_id = '';
+            $this->tpl_old_login_id = '';
+
             // パスワードは保持しない
             $this->arrForm['password'] = '';
             // エラー情報をセットする
@@ -138,9 +136,9 @@
             return;
         }
 
-        $this->insertMemberData($this->objForm->getHashArray());
+        $this->insertMemberData($this->arrForm);
         // 親ウィンドウを更新後、自ウィンドウを閉じる。
-        $url = ADMIN_SYSTEM_URLPATH . "?pageno=" . $_POST['pageno'];
+        $url = ADMIN_SYSTEM_URLPATH . "?pageno=" . $this->arrForm['pageno'];
         $this->tpl_onload = "fnUpdateParent('".$url."'); window.close();";
     }
 
@@ -148,15 +146,17 @@
      * newアクションの初期化.
      * SC_FormParamのインスタンスをメンバ変数にセットする.
      *
-     * @param void
-     * @return void
+     * @param string $mode editの時は指定
+     * @return object SC_FormParamのインスタンス
      */
     function initNewMode($mode = "") {
         $objForm = new SC_FormParam();
 
+        $objForm->addParam('メンバーID', 'member_id', INT_LEN, 'n', array('NUM_CHECK'));
         $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('変更前ログインID', 'old_login_id', '' , '', array('ALNUM_CHECK'));
         if ($mode == "edit" && $_POST['password'] == DEFAULT_PASSWORD) {
             $objForm->addParam('パスワード', 'password', '' , '', array('EXIST_CHECK'));
         } else {
@@ -164,11 +164,12 @@
         }
         $objForm->addParam('権限', 'authority', INT_LEN, '', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK'));
         $objForm->addParam('稼働/非稼働', 'work', INT_LEN, '', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK'));
+        $objForm->addParam('ページ', 'pageno', INT_LEN, 'n', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK'));
 
         $objForm->setParam($_POST);
         $objForm->convParam();
 
-        $this->objForm = $objForm;
+        return $objForm;
     }
 
     /**
@@ -212,16 +213,18 @@
             SC_Utils::sfDispError('');
         }
 
-        $this->initNewMode("edit");
+        $this->objForm = $this->initNewMode("edit");
 
         $arrErr = $this->validateEditMode();
 
+        $this->arrForm = $this->objForm->getHashArray();
+
         if (count($arrErr) > 0) {
             // 入力された値を保持する
             $this->tpl_mode      = $this->getMode();
-            $this->tpl_member_id = $_POST['member_id'];
-            $this->tpl_old_login_id = $_POST['old_login_id'];
-            $this->arrForm = $this->objForm->getHashArray();
+            $this->tpl_member_id = $this->arrForm['member_id'];
+            $this->tpl_old_login_id = $this->arrForm['old_login_id'];
+
             // パスワードは保持しない
             $this->arrForm['password'] = '';
             // エラー情報をセットする
@@ -231,9 +234,9 @@
             return;
         }
 
-        $this->updateMemberData($_POST['member_id'], $this->objForm->getHashArray());
+        $this->updateMemberData($this->arrForm['member_id'], $this->arrForm);
         // 親ウィンドウを更新後、自ウィンドウを閉じる。
-        $url = ADMIN_SYSTEM_URLPATH . "?pageno=" . $_POST['pageno'];
+        $url = ADMIN_SYSTEM_URLPATH . "?pageno=" . $this->arrForm['pageno'];
         $this->tpl_onload = "fnUpdateParent('".$url."'); window.close();";
     }
 
@@ -266,18 +269,6 @@
     }
 
     /**
-     * parent_reloadアクションを実行する.
-     * テンプレートに親windowをリロードするjavascriptをセットする.
-     *
-     * @param void
-     * @return void
-     */
-    function execParentReloadMode() {
-        $url = ADMIN_SYSTEM_URLPATH;
-        $this->tpl_onload = "fnUpdateParent('$url')";
-    }
-
-    /**
      * defaultアクションを実行する.
      * 初回表示時に実行される.
      * $GET['id']が渡された場合、編集モードとして表示,
@@ -287,18 +278,35 @@
      * @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'];
+
+        // $_GET['id'](member_id)が登録済みのものかチェック。
+        // 登録されていない場合は不正なものとして、新規扱いとする。
+        $clean_id = "";
+        $clean_mode_flg = "new";
+        
+        // idが0より大きい数字で整数の場合
+        if (isset($_GET['id']) && SC_Utils::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($_GET['id']);
+            $this->arrForm       = $this->getMemberData($clean_id);
             $this->arrForm['password'] = DEFAULT_PASSWORD;
             $this->tpl_old_login_id    = $this->arrForm['login_id'];
-        // 新規作成モードで表示
-        } else {
-            $this->tpl_mode = "new";
+            break;
+
+        case 'new':
+        default:
+            $this->tpl_mode = $clean_mode_flg;
             $this->arrForm['authority'] = -1;
+            break;
         }
     }
 
@@ -313,7 +321,7 @@
         $columns = 'name,department,login_id,authority, work';
         $where   = 'member_id = ?';
 
-        $objQuery = new SC_Query();
+        $objQuery =& SC_Query::getSingletonInstance();
         $arrRet = $objQuery->select($columns, $table, $where, array($id));
 
         if (is_null($arrRet)) return array();
@@ -331,7 +339,7 @@
     function memberDataExists($where, $val) {
         $table = 'dtb_member';
 
-        $objQuery = new SC_Query();
+        $objQuery =& SC_Query::getSingletonInstance();
         $count = $objQuery->count($table, $where, array($val));
 
         if ($count > 0) return true;
@@ -339,13 +347,37 @@
     }
 
     /**
+     * ページ番号が信頼しうる値かチェックする.
+     *
+     * @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 = new SC_Query();
+        $objQuery =& SC_Query::getSingletonInstance();
 
         // INSERTする値を作成する.
         $salt                  = SC_Utils_Ex::sfGetRandomString(10);
@@ -375,7 +407,7 @@
      * @return void
      */
     function updateMemberData($member_id, $arrMemberData) {
-        $objQuery = new SC_Query();
+        $objQuery =& SC_Query::getSingletonInstance();
 
         // Updateする値を作成する.
         $sqlVal = array();




Svn-src-all メーリングリストの案内