Source for file LC_Page_Admin_Design_Bloc.php

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

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