source: branches/feature-module-update/data/class/pages/admin/basis/LC_Page_Admin_Basis_Masterdata.php @ 16248

Revision 16248, 4.7 KB checked in by nanasess, 16 years ago (diff)

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

  • Property svn:eol-style set to LF
  • Property svn:keywords set to Id Revision Date
  • Property svn:mime-type set to text/x-httpd-php
Line 
1<?php
2/*
3 * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
4 *
5 * http://www.lockon.co.jp/
6 */
7
8// {{{ requires
9require_once(CLASS_PATH . "pages/LC_Page.php");
10
11/**
12 * マスタデータ管理 のページクラス.
13 *
14 * @package Page
15 * @author LOCKON CO.,LTD.
16 * @version $Id$
17 */
18class LC_Page_Admin_Basis_Masterdata extends LC_Page {
19
20    // }}}
21    // {{{ functions
22
23    /**
24     * Page を初期化する.
25     *
26     * @return void
27     */
28    function init() {
29        parent::init();
30        $this->tpl_mainpage = 'basis/masterdata.tpl';
31        $this->tpl_subnavi = 'basis/subnavi.tpl';
32        $this->tpl_subno = 'masterdata';
33        $this->tpl_mainno = 'basis';
34    }
35
36    /**
37     * Page のプロセス.
38     *
39     * @return void
40     */
41    function process() {
42        $objView = new SC_AdminView();
43        $this->arrMasterDataName = $this->getMasterDataNames(array("mtb_pref",
44                                                                   "mtb_zip",
45                                                                   "mtb_constants"));
46        $masterData = new SC_DB_MasterData_Ex();
47
48        if (!isset($_POST["mode"])) $_POST["mode"] = "";
49
50        switch ($_POST["mode"]) {
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:
88        }
89
90        $objView->assignobj($this);
91        $objView->display(MAIN_FRAME);
92    }
93
94    /**
95     * デストラクタ.
96     *
97     * @return void
98     */
99    function destroy() {
100        parent::destroy();
101    }
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    }
166}
167?>
Note: See TracBrowser for help on using the repository browser.