source: branches/comu-ver2/data/class/pages/admin/design/LC_Page_Admin_Design_CSS.php @ 17112

Revision 17112, 6.9 KB checked in by pineray, 13 years ago (diff)

管理画面上でpackage内のCSSを編集可能に

  • Property svn:eol-style set to LF
  • Property svn:keywords set to "Id Revision Date"
Line 
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
25require_once(CLASS_PATH . "pages/LC_Page.php");
26require_once(CLASS_EX_PATH . "helper_extends/SC_Helper_FileManager_Ex.php");
27
28/**
29 * CSS設定 のページクラス.
30 *
31 * @package Page
32 * @author LOCKON CO.,LTD.
33 * @version $Id$
34 */
35class LC_Page_Admin_Design_CSS extends LC_Page {
36
37    // }}}
38    // {{{ functions
39
40    /**
41     * Page を初期化する.
42     *
43     * @return void
44     */
45    function init() {
46        parent::init();
47        $this->tpl_mainpage = 'design/css.tpl';
48        $this->tpl_subnavi  = 'design/subnavi.tpl';
49        $this->area_row = 30;
50        $this->tpl_subno = "css";
51        $this->tpl_mainno = "design";
52        $this->tpl_subtitle = 'CSS編集';
53    }
54
55    /**
56     * Page のプロセス.
57     *
58     * @return void
59     */
60    function process() {
61        $objView = new SC_AdminView();
62
63        // 認証可否の判定
64        $objSess = new SC_Session();
65        SC_Utils_Ex::sfIsSuccess($objSess);
66
67        $objFileManager = new SC_Helper_FileManager_Ex();
68
69        // CSSファイル名を取得
70        if (isset($_POST['css_name'])) {
71            $css_name = $_POST['css_name'];
72        }else if (isset($_GET['css_name'])){
73            $css_name = $_GET['css_name'];
74        }else{
75            $css_name = '';
76        }
77        $this->css_name = $css_name;
78
79        if (isset($_POST['old_css_name'])) {
80            $old_css_name = $_POST['old_css_name'];
81        }else if (isset($_GET['css_name'])) {
82            $old_css_name = $_GET['css_name'];
83        }else{
84            $old_css_name = '';
85        }
86        $this->old_css_name = $old_css_name;
87
88        $css_dir =  USER_TEMPLATE_PATH . TEMPLATE_NAME . "/css/";
89        $css_path = $css_dir . $css_name . '.css';
90
91        // CSSファイルの読み込み
92        if($css_name != '' && file_exists($css_path)){
93            $css_data = file_get_contents($css_path);
94        }
95        // テキストエリアに表示
96        $this->css_data = $css_data;
97
98        if (!isset($_POST['mode'])) $_POST['mode'] = "";
99
100        switch($_POST['mode']) {
101            // データ更新処理
102            case 'confirm':
103                $this->lfExecuteConfirm($css_dir, $css_name, $old_css_name, $css_path);
104                break;
105            case 'delete':
106                $this->lfExecuteDelete($css_path);
107                break;
108            default:
109                if(isset($_POST['mode'])) {
110                   GC_Utils::gfPrintLog("MODEエラー:".$_POST['mode']);
111                }
112                break;
113        }
114
115        // ファイルリストを取得
116        $this->arrCSSList = $this->lfGetCSSList($css_dir);
117
118        // 画面の表示
119        $objView->assignobj($this);
120        $objView->display(MAIN_FRAME);
121    }
122
123    /**
124     * デストラクタ.
125     *
126     * @return void
127     */
128    function destroy() {
129        parent::destroy();
130    }
131
132    function lfExecuteConfirm($css_dir, $css_name, $old_css_name, $css_path) {
133        // エラーチェック
134        $this->arrErr = $this->lfErrorCheck($_POST, $css_dir);
135
136        // エラーがなければ更新処理を行う
137        if (count($this->arrErr) == 0) {
138            // 旧ファイルの削除
139            if ($old_css_name != '' && $old_css_name != $css_name && file_exists($css_dir . $old_css_name . '.css')) {
140                unlink($css_dir . $old_css_name . '.css');
141            }
142            // プレビュー用テンプレートに書き込み
143            $fp = fopen($css_path,"w"); // TODO
144            fwrite($fp, $_POST['css']);
145            fclose($fp);
146
147            $this->tpl_onload="alert('登録が完了しました。');";
148            $this->old_css_name = $css_name;
149        }
150        $this->css_data = $_POST['css'];
151    }
152
153    function lfExecuteDelete($css_path) {
154        // css_name が空でない場合にはdeleteを実行
155        if ($_POST['css_name'] !== '' && file_exists($css_path)) {
156            unlink($css_path);
157        }
158        $this->sendRedirect($this->getLocation("./css.php"));
159    }
160
161    /**
162     * CSSファイルのリストを取得.
163     *
164     * @param array $css_dir CSSディレクトリ
165     * @return array ファイルリスト
166     */
167    function lfGetCSSList($css_dir) {
168        $objFileManager = new SC_Helper_FileManager_Ex();
169
170        $arrFileList = $objFileManager->sfGetFileList($css_dir);
171        foreach ($arrFileList as $key => $val) {
172            if (!$val['is_dir']) {
173                $arrCSSList[] = array(
174                    'file_name' => $val['file_name'],
175                    'css_name'  => preg_replace('/(.+)\.(.+?)$/','$1',$val['file_name']),
176                );
177            }
178        }
179        return $arrCSSList;
180    }
181
182    /**
183     * 入力項目のエラーチェックを行う.
184     *
185     * @param array $arrData 入力データ
186     * @param array $css_dir CSSディレクトリ
187     * @return array エラー情報
188     */
189    function lfErrorCheck($array, $css_dir) {
190        $objErr = new SC_CheckError($array);
191
192        $objErr->doFunc(array("CSSファイル名", "css_name", STEXT_LEN), array("EXIST_CHECK", "NO_SPTAB", "MAX_LENGTH_CHECK"));
193
194        // 入力文字が英数字,"_","-"以外ならエラーを返す
195        if(!isset($objErr->arrErr['css_name'])){
196            if(!ereg("^[a-zA-Z0-9_\.-]+$", $array['css_name'])) {
197                $objErr->arrErr['css_name'] = '※ CSSファイル名は英数字と"_"および"-"だけを入力してください。<br />';
198            }
199        }
200
201        // 同一のファイル名が存在している場合にはエラー
202        if(!isset($objErr->arrErr['css_name'])){
203            $arrCSSList = $this->lfGetCSSList($css_dir);
204            foreach ($arrCSSList as $key => $val) {
205                if ($val['css_name'] == $array['css_name']) {
206                    if ($array['old_css_name'] == '' || $array['old_css_name'] != $array['css_name']) {
207                        $errFlg = TRUE;
208                    }
209                }
210            }
211            if ($errFlg) $objErr->arrErr['css_name'] = '※ 同じファイル名のデータが存在しています。別の名称を付けてください。<br />';
212        }
213
214        return $objErr->arrErr;
215    }
216}
217?>
Note: See TracBrowser for help on using the repository browser.