Source for file LC_Page_Admin_Design_Up_Down.php

Documentation is available at LC_Page_Admin_Design_Up_Down.php

  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
  25. require_once(CLASS_PATH "pages/LC_Page.php");
  26. require_once(DATA_PATH"module/Tar.php");
  27. require_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: LC_Page_Admin_Design_Up_Down.php 16582 2007-10-29 03:06:29Z nanasess $
  35.  */
  36.  
  37.     // }}}
  38.     // {{{ functions
  39.  
  40.     /**
  41.      * Page を初期化する.
  42.      *
  43.      * @return void 
  44.      */
  45.     function init({
  46.         parent::init();
  47.         $this->tpl_mainpage = 'design/up_down.tpl';
  48.         $this->tpl_subnavi  'design/subnavi.tpl';
  49.         $this->tpl_subno    'up_down';
  50.         $this->tpl_mainno   = "design";
  51.         $this->tpl_subtitle 'アップロード/ダウンロード';
  52.         $this->arrErr  array();
  53.         $this->arrForm array();
  54.         ini_set("max_execution_time"300);
  55.     }
  56.  
  57.     /**
  58.      * Page のプロセス.
  59.      *
  60.      * @return void 
  61.      */
  62.     function process({
  63.         // ログインチェック
  64.         $objSession new SC_Session();
  65.         SC_Utils::sfIsSuccess($objSession);
  66.         $this->now_template $this->lfGetNowTemplate();
  67.         
  68.         // uniqidをテンプレートへ埋め込み
  69.         $this->uniqid $objSession->getUniqId();
  70.         
  71.         switch($this->lfGetMode()) {
  72.         
  73.         // ダウンロードボタン押下時の処理
  74.         case 'download':
  75.             break;
  76.         // アップロードボタン押下時の処理
  77.         case 'upload':
  78.             // 画面遷移の正当性チェック
  79.             if (!SC_Utils::sfIsValidTransition($objSession)) {
  80.                 SC_Utils::sfDispError('');
  81.             }
  82.             // フォームパラメータ初期化
  83.             $objForm $this->lfInitUpload();
  84.             // エラーチェック
  85.             if ($arrErr $this->lfValidateUpload($objForm)) {
  86.                 $this->arrErr  $arrErr;
  87.                 $this->arrForm $objForm->getFormParamList();
  88.                 break;
  89.             }
  90.             // アップロードファイル初期化
  91.             $objUpFile $this->lfInitUploadFile($objForm);
  92.             // 一時ファイルへ保存
  93.             $errMsg $objUpFile->makeTempFile('template_file'false);
  94.             // 書き込みエラーチェック
  95.             if(isset($errMsg)) {
  96.                 $this->arrErr['template_file'$errMsg;
  97.                 $this->arrForm $objForm->getFormParamList();
  98.                 break;
  99.             }
  100.             $this->lfAddTemplates($objForm$objUpFile);
  101.             $this->tpl_onload = "alert('テンプレートファイルをアップロードしました。');";
  102.             break;
  103.         
  104.         // 初回表示
  105.         default:
  106.             break;
  107.         }
  108.         
  109.         // 画面の表示
  110.         $objView new SC_AdminView();
  111.         $objView->assignobj($this);
  112.         $objView->display(MAIN_FRAME);
  113.     }
  114.  
  115.     /**
  116.      * デストラクタ.
  117.      *
  118.      * @return void 
  119.      */
  120.     function destroy({
  121.         parent::destroy();
  122.     }
  123.  
  124.     /**
  125.      * POSTされるmodeパラメータを取得する.
  126.      *
  127.      * @param void 
  128.      * @return string modeパラメータ, 無ければnull
  129.      */
  130.     function lfGetMode(){
  131.         if (isset($_POST['mode'])) return $_POST['mode'];
  132.     }
  133.     /**
  134.      * SC_UploadFileクラスの初期化.
  135.      *
  136.      * @param object $objForm SC_FormParamのインスタンス
  137.      * @return object SC_UploadFileのインスタンス 
  138.      */
  139.     function lfInitUploadFile($objForm{
  140.         $pkg_dir SMARTY_TEMPLATES_DIR $objForm->getValue('template_code');
  141.         $objUpFile new SC_UploadFile(TEMPLATE_TEMP_DIR$pkg_dir);
  142.         $objUpFile->addFile("テンプレートファイル"'template_file'array()TEMPLATE_SIZEtrue00false);
  143.     
  144.         return $objUpFile;
  145.     }
  146.     /**
  147.      * SC_FormParamクラスの初期化.
  148.      *
  149.      * @param void 
  150.      * @retrun object SC_FormParamのインスタンス
  151.      */
  152.     function lfInitUpload({
  153.         $objForm new SC_FormParam;
  154.     
  155.         $objForm->addParam("テンプレートコード""template_code"STEXT_LEN"KVa"array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK""ALNUM_CHECK"));
  156.         $objForm->addParam("テンプレート名""template_name"STEXT_LEN"KVa"array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK"));
  157.         $objForm->setParam($_POST);
  158.     
  159.         return $objForm;
  160.     }
  161.     /**
  162.      * uploadモードのパラメータ検証を行う.
  163.      *
  164.      * @param object $objForm SC_FormParamのインスタンス
  165.      * @return array エラー情報を格納した連想配列, エラーが無ければ(多分)nullを返す
  166.      */
  167.     function lfValidateUpload($objForm{
  168.         $arrErr $objForm->checkError();
  169.         if (!empty($arrErr)) {
  170.             return $arrErr;
  171.         }
  172.     
  173.         $arrForm $objForm->getHashArray();
  174.     
  175.         // 同名のフォルダが存在する場合はエラー
  176.         if(file_exists(USER_TEMPLATE_PATH $arrForm['template_code'])) {
  177.             $arrErr['template_code'"※ 同名のファイルがすでに存在します。<br/>";
  178.         }
  179.     
  180.         // 登録不可の文字列チェック
  181.         $arrIgnoreCode array(
  182.             'admin''mobile''default'
  183.         );
  184.         if(in_array($arrForm['template_code']$arrIgnoreCode)) {
  185.             $arrErr['template_code'"※ このテンプレートコードは使用できません。<br/>";
  186.         }
  187.     
  188.         // DBにすでに登録されていないかチェック
  189.         $objQuery new SC_Query();
  190.         $ret $objQuery->count("dtb_templates""template_code = ?"array($arrForm['template_code']));
  191.         if(!empty($ret)) {
  192.             $arrErr['template_code'"※ すでに登録されているテンプレートコードです。<br/>";
  193.         }
  194.     
  195.         // ファイルの拡張子チェック(.tar/tar.gzのみ許可)
  196.         $errFlag true;
  197.         $array_ext explode("."$_FILES['template_file']['name']);
  198.         $ext $array_extcount $array_ext ];
  199.         $ext strtolower($ext);
  200.         // .tarチェック
  201.         if ($ext == 'tar'{
  202.             $errFlag false;
  203.         }
  204.         $ext $array_extcount $array_ext ].".".$ext;
  205.         $ext strtolower($ext);
  206.         // .tar.gzチェック
  207.         if ($ext== 'tar.gz'{
  208.             $errFlag false;
  209.         }
  210.     
  211.         if($errFlag{
  212.             $arrErr['template_file'"※ アップロードするテンプレートファイルで許可されている形式は、tar/tar.gzです。<br />";
  213.         }
  214.     
  215.         return $arrErr;
  216.     }
  217.     /**
  218.      * DBおよびTPL_PKG_PATHにテンプレートパッケージを追加する.
  219.      *
  220.      * @param object $objForm SC_FormParamのインスタンス
  221.      * @param object $objUpFile SC_UploadFileのインスタンス
  222.      * @return void 
  223.      */
  224.     function lfAddTemplates($objForm$objUpFile{
  225.         $template_code $objForm->getValue('template_code');
  226.         $template_dir SMARTY_TEMPLATES_DIR $template_code;
  227.         $compile_dir  DATA_PATH "Smarty/templates_c/" $template_code;
  228.         // フォルダ作成
  229.         if(!file_exists($template_dir)) {
  230.             mkdir($template_dir);
  231.         }
  232.         if(!file_exists($compile_dir)) {
  233.             mkdir($compile_dir);
  234.         }
  235.                 
  236.         // 一時フォルダから保存ディレクトリへ移動
  237.         $objUpFile->moveTempFile();
  238.         
  239.         // 解凍
  240.         SC_Helper_FileManager::unpackFile($template_dir "/" $_FILES['template_file']['name']);
  241.         // ユーザデータの下のファイルをコピーする
  242.         $from_dir SMARTY_TEMPLATES_DIR $template_code "/_packages/";        
  243.         $to_dir USER_PATH "packages/" $template_code "/";
  244.         SC_Utils::sfMakeDir($to_dir);
  245.         SC_Utils::sfCopyDir($from_dir$to_dir);
  246.         
  247.         // DBにテンプレート情報を保存
  248.         $this->lfRegisterTemplates($objForm->getHashArray());
  249.     }
  250.     
  251.     /**
  252.      * dtb_templatesへ入力内容を登録する.
  253.      *
  254.      * @param array $arrForm POSTされたパラメータ
  255.      * @return void 
  256.      */
  257.     function lfRegisterTemplates($arrForm{
  258.         $objQuery new SC_Query();
  259.         $sqlval $arrForm;
  260.         $sqlval['create_date'"now()";
  261.         $sqlval['update_date'"now()";
  262.         $objQuery->insert('dtb_templates'$sqlval);
  263.     }
  264.  
  265.     /**
  266.      * デザイン管理で作成されたファイルをupload/temp_template/以下にコピーする
  267.      *
  268.      * @param string $to 
  269.      * @return void 
  270.      */
  271.     function lfCopyUserEdit($to{
  272.         $arrDirs array(
  273.             'css',
  274.             'include',
  275.             'templates'
  276.         );
  277.     
  278.         foreach ($arrDirs as $dir{
  279.             $from USER_PATH .  $dir;
  280.             SC_Utils::sfCopyDir($from$to''true);
  281.         }
  282.     }
  283.     /**
  284.      * 現在選択しているテンプレートパッケージをupload/temp_template/以下にコピーする
  285.      *
  286.      * @param string $to 保存先パス
  287.      * @return void 
  288.      */
  289.     function lfCopyTplPackage($to{
  290.         $nowTpl $this->lfGetNowTemplate();
  291.         if (!$nowTplreturn;
  292.     
  293.         $from TPL_PKG_PATH $nowTpl '/';
  294.         SC_Utils::sfCopyDir($from$to'');
  295.     }
  296.     /**
  297.      * 現在適用しているテンプレートパッケージ名を取得する.
  298.      *
  299.      * @param void 
  300.      * @return string テンプレートパッケージ名
  301.      */
  302.     function lfGetNowTemplate({
  303.         $objQuery new SC_Query();
  304.         $arrRet $objQuery->select('top_tpl''dtb_baseinfo');
  305.         if (isset($arrRet[0]['top_tpl'])) {
  306.             return $arrRet[0]['top_tpl'];
  307.         }
  308.         return null;
  309.     }    
  310. }
  311. ?>

Documentation generated on Tue, 28 Apr 2009 18:11:11 +0900 by phpDocumentor 1.4.2