source: branches/feature-module-update/data/class/pages/admin/design/LC_Page_Admin_Design_Bloc.php @ 16570

Revision 16570, 10.7 KB checked in by nanasess, 15 years ago (diff)

コメント修正

  • Property svn:keywords set to "Id Revision Date"
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_Design_Bloc 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 = 'design/bloc.tpl';
31        $this->tpl_subnavi = 'design/subnavi.tpl';
32        $this->tpl_subno_edit = 'bloc';
33        $this->text_row = 13;
34        $this->tpl_subno = "bloc";
35        $this->tpl_mainno = "design";
36        $this->tpl_subtitle = 'ブロック編集';
37    }
38
39    /**
40     * Page のプロセス.
41     *
42     * @return void
43     */
44    function process() {
45        $objView = new SC_AdminView();
46        $this->objLayout = new SC_Helper_PageLayout_Ex();
47
48        // 認証可否の判定
49        $objSess = new SC_Session();
50        SC_Utils_Ex::sfIsSuccess($objSess);
51
52        // ブロック一覧を取得
53        $this->arrBlocList = $this->lfgetBlocData();
54
55        // ブロックIDを取得
56        if (isset($_POST['bloc_id'])) {
57            $bloc_id = $_POST['bloc_id'];
58        }else if (isset($_GET['bloc_id'])) {
59            $bloc_id = $_GET['bloc_id'];
60        }else{
61            $bloc_id = '';
62        }
63        $this->bloc_id = $bloc_id;
64
65        // bloc_id が指定されている場合にはブロックデータの取得
66        if ($bloc_id != '') {
67            $arrBlocData = $this->lfgetBlocData(" bloc_id = ? " , array($bloc_id));
68
69            // ユーザー作成ブロックが存在する場合
70            if (is_file(USER_PATH . $arrBlocData[0]['tpl_path'])) {
71                $arrBlocData[0]['tpl_path'] = USER_PATH
72                    . $arrBlocData[0]['tpl_path'];
73
74            // 存在しない場合は指定テンプレートのブロックを取得
75            } else {
76                $arrBlocData[0]['tpl_path'] = TEMPLATE_DIR
77                    . $arrBlocData[0]['tpl_path'];
78            }
79
80            // テンプレートファイルの読み込み
81            $arrBlocData[0]['tpl_data'] = file_get_contents($arrBlocData[0]['tpl_path']);
82            $this->arrBlocData = $arrBlocData[0];
83        }
84
85        // メッセージ表示
86        if (isset($_GET['msg']) && $_GET['msg'] == "on") {
87            // 完了メッセージ
88            $this->tpl_onload="alert('登録が完了しました。');";
89        }
90
91        if (!isset($_POST['mode'])) $_POST['mode'] = "";
92
93        // プレビュー表示
94        if ($_POST['mode'] == "preview") {
95            // プレビューファイル作成
96            $prev_path = USER_INC_PATH . 'preview/bloc_preview.tpl';
97            // TODO 一応, is_write 等でチェックすべき?
98            $fp = fopen($prev_path,"w");
99            fwrite($fp, $_POST['bloc_html']); // FIXME いきなり POST はちょっと...
100            fclose($fp);
101
102            // プレビューデータ表示
103            $this->preview = "on";
104            $this->arrBlocData['tpl_data'] = $_POST['bloc_html'];
105            $this->arrBlocData['tpl_path'] = $prev_path;
106            $this->arrBlocData['bloc_name'] = $_POST['bloc_name'];
107            $this->arrBlocData['filename'] = $_POST['filename'];
108            $this->text_row = $_POST['html_area_row'];
109        }else{
110            $this->preview = "off";
111        }
112
113        // データ登録処理
114        if ($_POST['mode'] == 'confirm') {
115
116            // エラーチェック
117            $this->arrErr = $this->lfErrorCheck($_POST);
118
119            // エラーがなければ更新処理を行う
120            if (count($this->arrErr) == 0) {
121                // DBへデータを更新する
122                $this->lfEntryBlocData($_POST);
123
124                // ファイルの削除
125                //$del_file=BLOC_PATH . $arrBlocData[0]['filename']. '.tpl';
126                $del_file = USER_PATH . $arrBlocData[0]['tpl_path'];
127                if (file_exists($del_file)) {
128                    unlink($del_file);
129                }
130
131                // ファイル作成
132                $fp = fopen(USER_PATH . BLOC_DIR . $_POST['filename'] . '.tpl',"w");
133                fwrite($fp, $_POST['bloc_html']); // FIXME いきなり POST はちょっと...
134                fclose($fp);
135
136                $arrBlocData = $this->lfgetBlocData(" filename = ? " , array($_POST['filename']));
137
138                $bloc_id = $arrBlocData[0]['bloc_id'];
139                $this->sendRedirect($this->getLocation("./bloc.php",
140                                            array("bloc_id" => $bloc_id,
141                                                  "msg" => "on")));
142            }else{
143                // エラーがあれば入力時のデータを表示する
144                $this->arrBlocData = $_POST;
145            }
146        }
147
148        // データ削除処理
149        if ($_POST['mode'] == 'delete') {
150
151            // DBへデータを更新する
152            $objDBConn = new SC_DbConn;     // DB操作オブジェクト
153            $sql = "";                      // データ更新SQL生成用
154            $ret = "";                      // データ更新結果格納用
155            $arrDelData = array();          // 更新データ生成用
156
157            // 更新データ生成
158            $arrUpdData = array($arrData['bloc_name'], BLOC_DIR . $arrData['filename'] . '.tpl', $arrData['filename']);
159
160            // bloc_id が空でない場合にはdeleteを実行
161            if ($_POST['bloc_id'] !== '') {
162                // SQL生成
163                $sql = " DELETE FROM dtb_bloc WHERE bloc_id = ?";
164                // SQL実行
165                $ret = $objDBConn->query($sql,array($_POST['bloc_id']));
166
167                // ページに配置されているデータも削除する
168                $sql = "DELETE FROM dtb_blocposition WHERE bloc_id = ?";
169                // SQL実行
170                $ret = $objDBConn->query($sql,array($_POST['bloc_id']));
171
172                // ファイルの削除
173                $del_file = BLOC_PATH . $arrBlocData[0]['filename']. '.tpl';
174                if(file_exists($del_file)){
175                    unlink($del_file);
176                }
177            }
178            $this->sendRedirect($this->getLocation("./bloc.php"));
179        }
180
181        // 画面の表示
182        $objView->assignobj($this);
183        $objView->display(MAIN_FRAME);
184    }
185
186    /**
187     * デストラクタ.
188     *
189     * @return void
190     */
191    function destroy() {
192        parent::destroy();
193    }
194
195    /**
196     * ブロック情報を取得する.
197     *
198     * @param string $where Where句文
199     * @param array $arrVal Where句の絞込条件値
200     * @return array ブロック情報
201     */
202    function lfgetBlocData($where = '', $arrVal = ''){
203        $objDBConn = new SC_DbConn;     // DB操作オブジェクト
204        $sql = "";                      // データ取得SQL生成用
205        $arrRet = array();              // データ取得用
206
207        // SQL生成
208        $sql = " SELECT ";
209        $sql .= "   bloc_id";
210        $sql .= "   ,bloc_name";
211        $sql .= "   ,tpl_path";
212        $sql .= "   ,filename";
213        $sql .= "   ,create_date";
214        $sql .= "   ,update_date";
215        $sql .= "   ,php_path";
216        $sql .= "   ,del_flg";
217        $sql .= " FROM ";
218        $sql .= "   dtb_bloc";
219
220        // where句の指定があれば追加
221        if ($where != '') {
222            $sql .= " WHERE " . $where;
223        }
224
225        $sql .= " ORDER BY  bloc_id";
226
227        $arrRet = $objDBConn->getAll($sql, $arrVal);
228
229        return $arrRet;
230    }
231
232    /**
233     * ブロック情報を更新する.
234     *
235     * @param array $arrData 更新データ
236     * @return integer 更新結果
237     */
238    function lfEntryBlocData($arrData){
239        $objDBConn = new SC_DbConn;     // DB操作オブジェクト
240        $sql = "";                      // データ更新SQL生成用
241        $ret = "";                      // データ更新結果格納用
242        $arrUpdData = array();          // 更新データ生成用
243        $arrChk = array();              // 排他チェック用
244
245        // 更新データ生成
246        $arrUpdData = array($arrData['bloc_name'], BLOC_DIR . $arrData['filename'] . '.tpl', $arrData['filename']);
247
248        // データが存在しているかチェックを行う
249        if($arrData['bloc_id'] !== ''){
250            $arrChk = $this->lfgetBlocData("bloc_id = ?", array($arrData['bloc_id']));
251        }
252
253        // bloc_id が空 若しくは データが存在していない場合にはINSERTを行う
254        if ($arrData['bloc_id'] === '' or !isset($arrChk[0])) {
255            // SQL生成
256            $sql = " INSERT INTO dtb_bloc";
257            $sql .= " ( ";
258            $sql .= "     bloc_name ";      // ブロック名称
259            $sql .= "     ,tpl_path ";      // テンプレート保存先
260            $sql .= "     ,filename ";      // ファイル名称
261            $sql .= "     ,create_date ";   // 作成日
262            $sql .= "     ,update_date ";   // 更新日
263            $sql .= " ) VALUES ( ?,?,?,now(),now() )";
264            $sql .= " ";
265        }else{
266            // データが存在してる場合にはアップデートを行う
267            // SQL生成
268            $sql = " UPDATE dtb_bloc";
269            $sql .= " SET";
270            $sql .= "     bloc_name = ? ";  // ブロック名称
271            $sql .= "     ,tpl_path = ? ";  // テンプレート保存先
272            $sql .= "     ,filename = ? ";  // テンプレートファイル名
273            $sql .= "     ,update_date = now()";
274            $sql .= " WHERE bloc_id = ?";
275            $sql .= " ";
276
277            // 更新データにブロックIDを追加
278            array_push($arrUpdData, $arrData['bloc_id']);
279        }
280
281        // SQL実行
282        $ret = $objDBConn->query($sql,$arrUpdData);
283
284        return $ret;
285
286    }
287
288    /**
289     * 入力項目のエラーチェックを行う.
290     *
291     * @param array $arrData 入力データ
292     * @return array エラー情報
293     */
294    function lfErrorCheck($array) {
295        $objErr = new SC_CheckError($array);
296
297        $objErr->doFunc(array("ブロック名", "bloc_name", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
298        $objErr->doFunc(array("ファイル名", "filename", STEXT_LEN), array("EXIST_CHECK", "NO_SPTAB", "MAX_LENGTH_CHECK","FILE_NAME_CHECK"));
299
300        // 同一のファイル名が存在している場合にはエラー
301        if(!isset($objErr->arrErr['filename']) and $array['filename'] !== ''){
302            $arrChk = $this->lfgetBlocData("filename = ?", array($array['filename']));
303
304            if (count($arrChk[0]) >= 1 and $arrChk[0]['bloc_id'] != $array['bloc_id']) {
305                $objErr->arrErr['filename'] = '※ 同じファイル名のデータが存在しています。別の名称を付けてください。';
306            }
307        }
308
309        return $objErr->arrErr;
310    }
311}
312?>
Note: See TracBrowser for help on using the repository browser.