source: branches/version-2_5-dev/data/class/pages/admin/design/LC_Page_Admin_Design_Template.php @ 19722

Revision 19722, 13.7 KB checked in by nanasess, 12 years ago (diff)

#748(モバイル/スマートフォンのデザイン管理)

  • tpl ファイルの取得方法を修正
  • 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; charset=UTF-8
Line 
1<?php
2/*
3 * This file is part of EC-CUBE
4 *
5 * Copyright(c) 2000-2010 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/admin/LC_Page_Admin.php");
26require_once(DATA_PATH . "module/Tar.php");
27require_once(CLASS_EX_PATH . "helper_extends/SC_Helper_FileManager_Ex.php");
28
29/**
30 * テンプレート設定 のページクラス.
31 *
32 * @package Page
33 * @author LOCKON CO.,LTD.
34 * @version $Id$
35 */
36class LC_Page_Admin_Design_Template extends LC_Page_Admin {
37
38    // }}}
39    // {{{ functions
40
41    /** テンプレートデータ種別 */
42    var $arrSubnavi = array(
43                     'title' => array(
44                                1 => 'top',
45                                2 => 'product',
46                                3 => 'detail',
47                                4 => 'mypage'
48                                             ),
49                     'name' =>array(
50                                1 => 'TOPページ',
51                                2 => '商品一覧ページ',
52                                3 => '商品詳細ページ',
53                                4 => 'MYページ'
54                              )
55                     );
56
57    /**
58     * Page を初期化する.
59     *
60     * @return void
61     */
62    function init() {
63        parent::init();
64        $this->tpl_mainpage = 'design/template.tpl';
65        $this->tpl_subnavi  = 'design/subnavi.tpl';
66        $this->tpl_subno    = 'template';
67        $this->tpl_mainno   = "design";
68        $this->tpl_subtitle = 'テンプレート設定';
69        $this->arrErr  = array();
70        $this->arrForm = array();
71        $this->tpl_select = TEMPLATE_NAME;
72        ini_set("max_execution_time", 300);
73    }
74
75    /**
76     * Page のプロセス.
77     *
78     * @return void
79     */
80    function process() {
81        $this->action();
82        $this->sendResponse();
83    }
84
85    /**
86     * Page のアクション.
87     *
88     * FIXME ロジックを見直し
89     *
90     * @return void
91     */
92    function action() {
93        // 認証可否の判定
94            $objSession = new SC_Session();
95            SC_Utils::sfIsSuccess($objSession);
96
97            // uniqidをテンプレートへ埋め込み
98            $this->uniqid = $objSession->getUniqId();
99
100            $objView = new SC_AdminView();
101
102            switch($this->lfGetMode()) {
103
104            // 登録ボタン押下時
105            case 'register':
106                // 画面遷移の正当性チェック
107                if (!SC_Utils::sfIsValidTransition($objSession)) {
108                    sfDispError('');
109                }
110                // パラメータ検証
111                $objForm = $this->lfInitRegister();
112                if ($objForm->checkError()) {
113                    SC_Utils_Ex::sfDispError('');
114                }
115
116                $template_code = $objForm->getValue('template_code');
117                $this->tpl_select = $template_code;
118
119                if($template_code == "") {
120                    $template_code = "default";
121                }
122
123                // DBへ使用するテンプレートを登録
124                $this->lfRegisterTemplate($template_code);
125
126                // XXX コンパイルファイルのクリア処理を行う
127                $objView->_smarty->clear_compiled_tpl();
128
129                // common.cssの内容を更新
130                $this->lfChangeCommonCss($template_code);
131               
132                // テンプレートのコピー
133                $this->lfCopyTemplate($template_code);
134               
135                // ブロック位置を更新
136                $this->lfChangeBloc($template_code);
137
138                // 完了メッセージ
139                $this->tpl_onload="alert('登録が完了しました。');";
140                break;
141
142            // 削除ボタン押下時
143            case 'delete':
144                // 画面遷移の正当性チェック
145                if (!SC_Utils::sfIsValidTransition($objSession)) {
146                    SC_Utils::sfDispError('');
147                }
148                // パラメータ検証
149                $objForm = $this->lfInitDelete();
150                if ($objForm->checkError()) {
151                    SC_Utils::sfDispError('');
152                }
153               
154                //現在使用中のテンプレートとデフォルトのテンプレートは削除できないようにする
155                $template_code = $objForm->getValue('template_code_temp');
156                if ($template_code == TEMPLATE_NAME || $template_code == DEFAULT_TEMPLATE_NAME) {
157                    $this->tpl_onload = "alert('選択中のテンプレートは削除出来ません');";
158                    break;
159                }
160                $this->lfDeleteTemplate($template_code);
161                break;
162
163            // downloadボタン押下時
164            case 'download':
165                // 画面遷移の正当性チェック
166                if (!SC_Utils::sfIsValidTransition($objSession)) {
167                    SC_Utils::sfDispError('');
168                }
169                // パラメータ検証
170                $objForm = $this->lfInitDownload();
171                $template_code = $objForm->getValue('template_code_temp');
172                // ユーザデータの下のファイルも保存する。
173                $from_dir = USER_TEMPLATE_PATH . $template_code . "/";
174                $to_dir = SMARTY_TEMPLATES_DIR . $template_code . "/_packages/";
175                SC_Utils::sfMakeDir($to_dir);
176                SC_Utils::sfCopyDir($from_dir, $to_dir);
177                SC_Helper_FileManager::downloadArchiveFiles(SMARTY_TEMPLATES_DIR . $template_code);
178                break;
179
180            // プレビューボタン押下時
181            case 'preview':
182                break;
183
184            default:
185                break;
186            }
187
188            // defaultパラメータのセット
189            $this->templates = $this->lfGetAllTemplates();
190            $this->now_template = TEMPLATE_NAME;
191            $this->device_type_id = $device_type_id;
192    }
193
194    /**
195     * デストラクタ.
196     *
197     * @return void
198     */
199    function destroy() {
200        parent::destroy();
201    }
202
203    function lfGetMode(){
204        if (isset($_POST['mode'])) return $_POST['mode'];
205    }
206
207    function lfInitRegister() {
208        $objForm = new SC_FormParam();
209        $objForm->addParam(
210            'template_code', 'template_code', STEXT_LEN, '',
211            array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK", "ALNUM_CHECK")
212        );
213        $objForm->setParam($_POST);
214
215        return $objForm;
216    }
217
218    function lfInitDelete() {
219        $objForm = new SC_FormParam();
220        $objForm->addParam(
221            'template_code_temp', 'template_code_temp', STEXT_LEN, '',
222            array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK", "ALNUM_CHECK")
223        );
224        $objForm->setParam($_POST);
225
226        return $objForm;
227    }
228
229    function lfInitDownload() {
230        $objForm = new SC_FormParam();
231        $objForm->addParam(
232            'template_code_temp', 'template_code_temp', STEXT_LEN, '',
233            array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK", "ALNUM_CHECK")
234        );
235        $objForm->setParam($_POST);
236
237        return $objForm;
238    }
239
240    /**
241     * 使用するテンプレートをDBへ登録する
242     */
243    function lfRegisterTemplate($template_code) {
244        $masterData = new SC_DB_MasterData_Ex();
245
246        $data = array('TEMPLATE_NAME' => var_export($template_code, TRUE));
247
248        // DBのデータを更新
249        $masterData->updateMasterData('mtb_constants', array(), $data);
250
251        // キャッシュを生成
252        $masterData->createCache('mtb_constants', array(), true, array('id', 'remarks'));
253    }
254
255    /**
256     * common.cssの更新
257     */
258    function lfChangeCommonCss($template_code) {
259        $css_path = USER_PATH . "css/common.css";
260       
261        // ファイル内容取得
262        $css_data = file_get_contents($css_path);
263       
264        // ファイル内容更新
265        $pt = '/(@import url\("\.\.\/packages\/.+\/css\/import\.css"\);)/';
266        $rp = '@import url("../packages/'. $template_code. '/css/import.css");';
267        $css = preg_replace($pt, $rp, $css_data);
268       
269        // ファイル更新
270        $fp = fopen($css_path,"w");
271        fwrite($fp, $css);
272        fclose($fp);
273    }
274   
275    /**
276     * ブロック位置の更新
277     */
278    function lfChangeBloc($template_code) {
279        $objQuery = new SC_Query();
280        $filepath = USER_TEMPLATE_PATH. $template_code. "/sql/update_bloc.sql";
281       
282        // ブロック位置更新SQLファイル有
283        if(file_exists($filepath)) {
284            if($fp = fopen($filepath, "r")) {
285                $sql = fread($fp, filesize($filepath));
286                fclose($fp);
287            }
288            // 改行、タブを1スペースに変換
289            $sql = preg_replace("/[\r\n\t]/", " " ,$sql);
290            $sql_split = split(";", $sql);
291            foreach($sql_split as $key => $val){
292                if (trim($val) != "") {
293                    $objQuery->query($val);
294                }
295            }
296        }
297    }
298
299    /**
300     * テンプレートパッケージの削除
301     */
302    function lfDeleteTemplate($template_code) {
303        // DB更新
304        $objQuery = new SC_Query();
305        $objQuery->delete('dtb_templates', 'template_code = ?', array($template_code));
306        // テンプレート削除
307        $templates_dir = SMARTY_TEMPLATES_DIR. $template_code. "/";
308        SC_Utils_Ex::sfDelFile($templates_dir);
309        // コンパイル削除
310        $templates_c_dir = DATA_PATH. "Smarty/templates_c/". $template_code. "/";
311        SC_Utils_Ex::sfDelFile($templates_c_dir);
312        // ユーザーデータ削除
313        $user_dir = USER_TEMPLATE_PATH. $template_code. "/";
314        SC_Utils_Ex::sfDelFile($user_dir);
315    }
316
317    function lfGetAllTemplates() {
318        $objQuery = new SC_Query();
319        $arrRet = $objQuery->select('*', 'dtb_templates');
320        if (empty($arrRet)) return array();
321
322        return $arrRet;
323    }
324
325   /*
326     * 関数名:lfCreateTemplate()
327     * 引数1 :ディレクトリパス
328     * 引数2 :作成ファイル名
329     * 説明 :キャンペーンの初期テンプレート作成
330     * 戻り値:無し
331     */
332    function lfCreateTemplate($dir, $file , $cart_flg) {
333        umask(0);
334        $objFileManager = new SC_Helper_FileManager_Ex();
335       
336        // 作成ファイルディレクトリ
337        $create_dir = $dir . $file;
338        $create_active_dir = $create_dir . "/" . CAMPAIGN_TEMPLATE_ACTIVE;
339        $create_end_dir = $create_dir . "/" . CAMPAIGN_TEMPLATE_END;
340        // デフォルトファイルディレクトリ
341        $default_dir = TEMPLATE_DIR . CAMPAIGN_TEMPLATE_DIR;
342        $default_active_dir = $default_dir . "/" . CAMPAIGN_TEMPLATE_ACTIVE;
343        $default_end_dir = $default_dir . "/" . CAMPAIGN_TEMPLATE_END;
344
345        $ret = $objFileManager->sfCreateFile($create_dir, 0755);
346        $ret = $objFileManager->sfCreateFile($create_active_dir, 0755);
347        $ret = $objFileManager->sfCreateFile($create_end_dir, 0755);
348
349        // キャンペーン実行PHPをコピー
350        $ret = $objFileManager->sfCreateFile(CAMPAIGN_PATH . $file);
351        copy(HTML_PATH . CAMPAIGN_TEMPLATE_DIR . "index.php", CAMPAIGN_PATH . $file . "/index.php");
352        copy(HTML_PATH . CAMPAIGN_TEMPLATE_DIR . "application.php", CAMPAIGN_PATH . $file . "/application.php");
353        copy(HTML_PATH . CAMPAIGN_TEMPLATE_DIR . "complete.php", CAMPAIGN_PATH . $file . "/complete.php");
354        copy(HTML_PATH . CAMPAIGN_TEMPLATE_DIR . "entry.php", CAMPAIGN_PATH . $file . "/entry.php");
355
356        // デフォルトテンプレート作成(キャンペーン中)
357        $header = $this->lfGetFileContents($default_active_dir."header.tpl");
358        SC_Utils_Ex::sfWriteFile($header, $create_active_dir."header.tpl", "w");
359        $contents = $this->lfGetFileContents($default_active_dir."contents.tpl");
360        if(!$cart_flg) {
361            $contents .= "\n" . '<!--{*ログインフォーム*}-->' . "\n";
362            $contents .= $this->lfGetFileContents(CAMPAIGN_BLOC_PATH . "login.tpl");
363            $contents .= '<!--{*会員登録フォーム*}-->'."\n";
364            $contents .= $this->lfGetFileContents(CAMPAIGN_BLOC_PATH . "entry.tpl");
365        }
366        SC_Utils_Ex::sfWriteFile($contents, $create_active_dir."contents.tpl", "w");
367        $footer = $this->lfGetFileContents($default_active_dir."footer.tpl");
368        SC_Utils_Ex::sfWriteFile($footer, $create_active_dir."footer.tpl", "w");
369
370        // サイトフレーム作成
371        $site_frame  = $header."\n";
372        $site_frame .= '<script type="text/javascript" src="<!--{$TPL_DIR}-->js/navi.js"></script>'."\n";
373        $site_frame .= '<script type="text/javascript" src="<!--{$TPL_DIR}-->js/site.js"></script>'."\n";
374        $site_frame .= '<!--{include file=$tpl_mainpage}-->'."\n";
375        $site_frame .= $footer."\n";
376        SC_Utils_Ex::sfWriteFile($site_frame, $create_active_dir."site_frame.tpl", "w");
377
378        /* デフォルトテンプレート作成(キャンペーン終了) */
379        $header = $this->lfGetFileContents($default_end_dir."header.tpl");
380        SC_Utils_Ex::sfWriteFile($header, $create_end_dir."header.tpl", "w");
381        $contents = $this->lfGetFileContents($default_end_dir."contents.tpl");
382        SC_Utils_Ex::sfWriteFile($contents, $create_end_dir."contents.tpl", "w");
383        $footer = $this->lfGetFileContents($default_end_dir."footer.tpl");
384        SC_Utils_Ex::sfWriteFile($footer, $create_end_dir."footer.tpl", "w");
385    }
386   
387    /*
388     * 関数名:lfGetFileContents()
389     * 引数1 :ファイルパス
390     * 説明 :ファイル読込
391     * 戻り値:無し
392     */
393    function lfGetFileContents($read_file) {
394
395        if(file_exists($read_file)) {
396            $contents = file_get_contents($read_file);
397        } else {
398            $contents = "";
399        }
400
401        return $contents;
402    }
403}
404?>
Note: See TracBrowser for help on using the repository browser.