Changeset 16248


Ignore:
Timestamp:
2007/10/03 16:46:53 (16 years ago)
Author:
nanasess
Message:

マスタデータ管理機能追加

Location:
branches/feature-module-update/data
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/feature-module-update/data/Smarty/templates/default/admin/basis/masterdata.tpl

    r16233 r16248  
    88<!--★★メインコンテンツ★★--> 
    99<table width="878" border="0" cellspacing="0" cellpadding="0" summary=" "> 
    10 <form name="form1" id="form1" method="post" action="<!--{$smarty.server.PHP_SELF}-->"> 
    11 <input type="hidden" name="mode" value="edit"> 
    1210    <tr valign="top"> 
    1311        <td background="<!--{$TPL_DIR}-->img/contents/navi_bg.gif" height="402"> 
     
    4644                                    </tr> 
    4745                                </table> 
     46<form name="form1" id="form1" method="post" action="<!--{$smarty.server.PHP_SELF|escape}-->"> 
     47<input type="hidden" name="mode" value="show"> 
    4848 
    49                                 <table width="678" border="0" cellspacing="1" cellpadding="8" summary=" "> 
     49<table width="678" border="0" cellspacing="1" cellpadding="8" summary=" "> 
     50  <tr> 
     51    <td bgcolor="#f2f1ec" width="180" class="fs12n"> 
     52      <select name="master_data_name" id="master_data_name"> 
     53      <!--{html_options output=$arrMasterDataName values=$arrMasterDataName selected=$masterDataName}--> 
     54      </select> 
     55      <input type="submit" value="選択"> 
     56    </td> 
     57  </tr> 
     58</table> 
     59</form> 
     60<!--{if count($arrMasterData) > 0}--> 
     61<form name="form2" id="form2" method="post" action="<!--{$smarty.server.PHP_SELF|escape}-->"> 
     62<input type="hidden" name="mode" value="edit"> 
     63<input type="hidden" name="master_data_name" value="<!--{$masterDataName}-->"> 
     64<table width="678" border="0" cellspacing="1" cellpadding="8" summary=" "> 
     65  <tr class="fs12n"> 
     66    <td bgcolor="#f2f1ec" align="center" colspan="2"><strong>マスタデータ編集</strong></td> 
     67  </tr> 
     68  <tr class="fs12n"> 
     69    <td bgcolor="#ffffff" align="left" colspan="2"> 
     70      <ul class="red"> 
     71        <li>マスタデータの値を設定できます。</li> 
     72        <li>重複したIDを登録することはできません。</li> 
     73        <li>空のIDを登録すると、値は削除されます。</li> 
     74        <li>設定値によってはサイトが機能しなくなる場合もありますので、十分ご注意下さい。</li> 
     75      </ul> 
     76    </td> 
     77  </tr> 
     78  <!--{if $errorMessage != ""}--> 
     79  <tr class="fs12n"> 
     80    <td bgcolor="#ffffff" align="left" colspan="2"> 
     81      <span class="red"><!--{$errorMessage}--></span> 
     82    </td> 
     83  </tr> 
     84  <!--{/if}--> 
    5085 
    51                                     <tr> 
    52                                         <td bgcolor="#f2f1ec" width="180" class="fs12n"> 
    53                                         <select name="master_data_name"> 
    54                                         <option value="">選択してください</option> 
    55                                         <!--{html_options output=$arrMasterDataName values=$arrMasterDataName}--> 
    56                                         </select> 
    57                                         <input type="submit" value="選択"> 
    58                                         </td> 
    59                                     </tr> 
    60                                 </table> 
    61                                  
    62                                 <table width="678" border="0" cellspacing="1" cellpadding="8" summary=" "> 
    63                                     <tr class="fs12n"> 
    64                                         <td bgcolor="#f2f1ec" align="center"><strong>マスタデータ編集</strong></td> 
    65                                     </tr> 
    66                                     <!--{section name=cnt start=1 loop=$arrMasterData}-->                        
    67                                     <tr class="fs12n"> 
    68                                         <td bgcolor="#ffffff" align="left"> 
    69                                             値:<input type="text" name="bloc_name" value="<!--{$arrMasterData[cnt]}-->" maxlength="50" style="" size="60" class="box60" /> 
    70                                         </td> 
    71                                     </tr> 
    72                                     <!--{/section}--> 
    73                                 </table> 
    74                                  
    75                                  
    76                                  
    77                                  
    78                                  
     86  <!--{foreach from=$arrMasterData item=val key=key}--> 
     87  <tr class="fs12n"> 
     88    <td bgcolor="#ffffff" align="left"> 
     89    ID:<input type="text" name="id[]" value="<!--{$key|escape}-->" size="6"> 
     90    </td> 
     91    <td bgcolor="#ffffff" align="left"> 
     92    値:<input type="text" name="name[]" value="<!--{$val|escape}-->" style="" size="60" 
     93            class="box60" /> 
     94    </td> 
     95  </tr> 
     96  <!--{/foreach}--> 
     97  <tr class="fs12n"> 
     98    <td bgcolor="#f2f1ec" align="center" colspan="2">追加のデータ</td> 
     99  </tr> 
     100  <tr class="fs12n"> 
     101    <td bgcolor="#ffffff" align="left"> 
     102    ID:<input type="text" name="id[]" size="6"> 
     103    </td> 
     104    <td bgcolor="#ffffff" align="left"> 
     105    値:<input type="text" name="name[]" style="" size="60" 
     106            class="box60" /> 
     107    </td> 
     108  </tr> 
     109</table> 
     110</form> 
    79111                                <table width="678" border="0" cellspacing="0" cellpadding="0" summary=" "> 
    80112                                    <tr> 
     
    88120                                        <table border="0" cellspacing="0" cellpadding="0" summary=" "> 
    89121                                            <tr> 
    90                                                 <td><input type="image" onMouseover="chgImgImageSubmit('<!--{$TPL_DIR}-->img/contents/btn_regist_on.jpg',this)" onMouseout="chgImgImageSubmit('<!--{$TPL_DIR}-->img/contents/btn_regist.jpg',this)" src="<!--{$TPL_DIR}-->img/contents/btn_regist.jpg" width="123" height="24" alt="この内容で登録する" border="0" name="subm" ></td> 
     122                                                <td> 
     123<input onClick="return document.form2.submit()" type="image" onMouseover="chgImgImageSubmit('<!--{$TPL_DIR}-->img/contents/btn_regist_on.jpg',this)" onMouseout="chgImgImageSubmit('<!--{$TPL_DIR}-->img/contents/btn_regist.jpg',this)" src="<!--{$TPL_DIR}-->img/contents/btn_regist.jpg" width="123" height="24" alt="この内容で登録する" border="0" name="subm" > 
     124                                                </td> 
    91125                                            </tr> 
    92126                                        </table> 
     127 
    93128                                        </td> 
    94129                                        <td bgcolor="#cccccc"><img src="<!--{$TPL_DIR}-->img/common/_.gif" width="1" height="10" alt=""></td> 
     
    98133                                    </tr> 
    99134                                </table> 
     135<!--{/if}--> 
    100136                                </td> 
    101137                                <td background="<!--{$TPL_DIR}-->img/contents/main_right.jpg"><img src="<!--{$TPL_DIR}-->img/common/_.gif" width="14" height="1" alt=""></td> 
  • branches/feature-module-update/data/class/db/SC_DB_MasterData.php

    r15720 r16248  
    101101        $i = 0; 
    102102        foreach ($masterData as $key => $val) { 
    103             $sqlVal = array($columns[0] => $key, 
    104                             $columns[1] => $val, 
     103            $sqlVal = array($columns[0] => (string) $key, 
     104                            $columns[1] => (string) $val, 
    105105                            $columns[2] => (string) $i); 
    106106            $this->objQuery->insert($name, $sqlVal); 
  • branches/feature-module-update/data/class/pages/admin/basis/LC_Page_Admin_Basis_Masterdata.php

    r16233 r16248  
    3030        $this->tpl_mainpage = 'basis/masterdata.tpl'; 
    3131        $this->tpl_subnavi = 'basis/subnavi.tpl'; 
    32         $this->tpl_subno = 'index'; 
     32        $this->tpl_subno = 'masterdata'; 
    3333        $this->tpl_mainno = 'basis'; 
    3434    } 
     
    4141    function process() { 
    4242        $objView = new SC_AdminView(); 
    43         $dbFactory = SC_DB_DBFactory::getInstance(); 
    44         $this->arrMasterDataName = $dbFactory->findTableNames("mtb_"); 
     43        $this->arrMasterDataName = $this->getMasterDataNames(array("mtb_pref", 
     44                                                                   "mtb_zip", 
     45                                                                   "mtb_constants")); 
    4546        $masterData = new SC_DB_MasterData_Ex(); 
    46          
    47          
     47 
    4848        if (!isset($_POST["mode"])) $_POST["mode"] = ""; 
    49          
     49 
    5050        switch ($_POST["mode"]) { 
    51             case "edit": 
    52                  
    53                 $this->arrMasterData = $masterData->getDbMasterData($_POST["master_data_name"]); 
    54                 break; 
    55             default: 
     51        case "edit": 
     52            // POST 文字列の妥当性チェック 
     53            $this->checkMasterDataName(); 
     54            $this->errorMessage = $this->checkUniqueId(); 
     55 
     56            if (empty($this->errorMessage)) { 
     57                // 取得したデータからマスタデータを生成 
     58                $arrData = array(); 
     59                foreach ($_POST['id'] as $key => $val) { 
     60 
     61                    // ID が空のデータは生成しない 
     62                    if ($val != "") { 
     63                        $arrData[$val] = $_POST['name'][$key]; 
     64                    } 
     65                } 
     66 
     67                // マスタデータを更新 
     68                $masterData->objQuery = new SC_Query(); 
     69                $masterData->objQuery->begin(); 
     70                $masterData->deleteMasterData($this->masterDataName, false); 
     71                // TODO カラム名はメタデータから取得した方が良い 
     72                $masterData->registMasterData($this->masterDataName, 
     73                                              array("id", "name", "rank"), 
     74                                              $arrData, false); 
     75                $masterData->objQuery->commit(); 
     76            } 
     77 
     78        case "show": 
     79            // POST 文字列の妥当性チェック 
     80            $this->checkMasterDataName(); 
     81 
     82            // DB からマスタデータを取得 
     83            $this->arrMasterData = 
     84                $masterData->getDbMasterData($this->masterDataName); 
     85            break; 
     86 
     87        default: 
    5688        } 
    57          
     89 
    5890        $objView->assignobj($this); 
    5991        $objView->display(MAIN_FRAME); 
     
    68100        parent::destroy(); 
    69101    } 
     102 
     103    /** 
     104     * マスタデータ名チェックを行う 
     105     * 
     106     * @access private 
     107     * @return void 
     108     */ 
     109    function checkMasterDataName() { 
     110 
     111        if (in_array($_POST['master_data_name'], $this->arrMasterDataName)) { 
     112            $this->masterDataName = $_POST['master_data_name']; 
     113            return true; 
     114        } else { 
     115            SC_Utils_Ex::sfDispeError(""); 
     116        } 
     117    } 
     118 
     119    /** 
     120     * マスタデータ名を配列で取得する. 
     121     * 
     122     * @access private 
     123     * @param array $ignores 取得しないマスタデータ名の配列 
     124     * @return array マスタデータ名の配列 
     125     */ 
     126    function getMasterDataNames($ignores = array()) { 
     127        $dbFactory = SC_DB_DBFactory::getInstance(); 
     128        $arrMasterDataName = $dbFactory->findTableNames("mtb_"); 
     129 
     130        $i = 0; 
     131        foreach ($arrMasterDataName as $val) { 
     132            foreach ($ignores as $ignore) { 
     133                if ($val == $ignore) { 
     134                    unset($arrMasterDataName[$i]); 
     135                } 
     136            } 
     137            $i++; 
     138        } 
     139        return $arrMasterDataName; 
     140    } 
     141 
     142    /** 
     143     * ID の値がユニークかチェックする. 
     144     * 
     145     * 重複した値が存在する場合はエラーメッセージを表示する. 
     146     * 
     147     * @access private 
     148     * @return void|string エラーが発生した場合はエラーメッセージを返す. 
     149     */ 
     150    function checkUniqueID() { 
     151 
     152        $arrId = $_POST['id']; 
     153        for ($i = 0; $i < count($arrId); $i++) { 
     154 
     155            $id = $arrId[$i]; 
     156            // 空の値は無視 
     157            if ($arrId[$i] != "") { 
     158                for ($j = $i + 1; $j < count($arrId); $j++) { 
     159                    if ($id == $arrId[$j]) { 
     160                        return $id . " が重複しているため登録できません."; 
     161                    } 
     162                } 
     163            } 
     164        } 
     165    } 
    70166} 
    71167?> 
Note: See TracChangeset for help on using the changeset viewer.