/**
  * DBおよびTPL_PKG_PATHにテンプレートパッケージを追加する.
  *
  * @param object $objForm SC_FormParamのインスタンス
  * @param object $objUpFile SC_UploadFileのインスタンス
  * @return void
  */
 function lfAddTemplates($objForm, $objUpFile)
 {
     $template_code = $objForm->getValue('template_code');
     $template_dir = SMARTY_TEMPLATES_DIR . $template_code;
     $compile_dir = DATA_PATH . "Smarty/templates_c/" . $template_code;
     // フォルダ作成
     if (!file_exists($template_dir)) {
         mkdir($template_dir);
     }
     if (!file_exists($compile_dir)) {
         mkdir($compile_dir);
     }
     // 一時フォルダから保存ディレクトリへ移動
     $objUpFile->moveTempFile();
     // 解凍
     SC_Helper_FileManager::unpackFile($template_dir . "/" . $_FILES['template_file']['name']);
     // ユーザデータの下のファイルをコピーする
     $from_dir = SMARTY_TEMPLATES_DIR . $template_code . "/_packages/";
     $to_dir = USER_PATH . "packages/" . $template_code . "/";
     SC_Utils::sfMakeDir($to_dir);
     SC_Utils::sfCopyDir($from_dir, $to_dir);
     // DBにテンプレート情報を保存
     $this->lfRegisterTemplates($objForm->getHashArray());
 }
 /**
  * Page のプロセス.
  *
  * @return void
  */
 function process()
 {
     $objView = new SC_AdminView();
     $this->objLayout = new SC_Helper_PageLayout_Ex();
     $package_path = USER_TEMPLATE_PATH . "/" . TEMPLATE_NAME . "/";
     // 認証可否の判定
     $objSess = new SC_Session();
     SC_Utils_Ex::sfIsSuccess($objSess);
     // ブロック一覧を取得
     $this->arrBlocList = $this->lfgetBlocData();
     // ブロックIDを取得
     if (isset($_POST['bloc_id'])) {
         $bloc_id = $_POST['bloc_id'];
     } else {
         if (isset($_GET['bloc_id'])) {
             $bloc_id = $_GET['bloc_id'];
         } else {
             $bloc_id = '';
         }
     }
     $this->bloc_id = $bloc_id;
     // bloc_id が指定されている場合にはブロックデータの取得
     if ($bloc_id != '') {
         $arrBlocData = $this->lfgetBlocData(" bloc_id = ? ", array($bloc_id));
         // ユーザー作成ブロックが存在する場合
         if (is_file($package_path . $arrBlocData[0]['tpl_path'])) {
             $arrBlocData[0]['tpl_path'] = $package_path . $arrBlocData[0]['tpl_path'];
             // 存在しない場合は指定テンプレートのブロックを取得
         } else {
             $arrBlocData[0]['tpl_path'] = TEMPLATE_DIR . $arrBlocData[0]['tpl_path'];
         }
         // テンプレートファイルの読み込み
         $arrBlocData[0]['tpl_data'] = file_get_contents($arrBlocData[0]['tpl_path']);
         $this->arrBlocData = $arrBlocData[0];
     }
     // メッセージ表示
     if (isset($_GET['msg']) && $_GET['msg'] == "on") {
         // 完了メッセージ
         $this->tpl_onload = "alert('登録が完了しました。');";
     }
     if (!isset($_POST['mode'])) {
         $_POST['mode'] = "";
     }
     switch ($_POST['mode']) {
         case 'preview':
             // プレビューファイル作成
             $prev_path = USER_INC_PATH . 'preview/bloc_preview.tpl';
             // ディレクトリの作成
             SC_Utils::sfMakeDir($prev_path);
             $fp = fopen($prev_path, "w");
             fwrite($fp, $_POST['bloc_html']);
             // FIXME いきなり POST はちょっと...
             fclose($fp);
             // プレビューデータ表示
             $this->preview = "on";
             $this->arrBlocData['tpl_data'] = $_POST['bloc_html'];
             $this->arrBlocData['tpl_path'] = $prev_path;
             $this->arrBlocData['bloc_name'] = $_POST['bloc_name'];
             $this->arrBlocData['filename'] = $_POST['filename'];
             $this->text_row = $_POST['html_area_row'];
             break;
         case 'confirm':
             $this->preview = "off";
             // エラーチェック
             $this->arrErr = $this->lfErrorCheck($_POST);
             // エラーがなければ更新処理を行う
             if (count($this->arrErr) == 0) {
                 // DBへデータを更新する
                 $this->lfEntryBlocData($_POST);
                 // 旧ファイルの削除
                 $old_bloc_path = $package_path . $arrBlocData[0]['tpl_path'];
                 if (file_exists($old_bloc_path)) {
                     unlink($old_bloc_path);
                 }
                 // ファイル作成
                 $new_bloc_path = $package_path . BLOC_DIR . $_POST['filename'] . ".tpl";
                 // ディレクトリの作成
                 SC_Utils::sfMakeDir($new_bloc_path);
                 $fp = fopen($new_bloc_path, "w");
                 fwrite($fp, $_POST['bloc_html']);
                 // FIXME いきなり POST はちょっと...
                 fclose($fp);
                 $arrBlocData = $this->lfgetBlocData(" filename = ? ", array($_POST['filename']));
                 $bloc_id = $arrBlocData[0]['bloc_id'];
                 $this->sendRedirect($this->getLocation("./bloc.php", array("bloc_id" => $bloc_id, "msg" => "on")));
                 exit;
             } else {
                 // エラーがあれば入力時のデータを表示する
                 $this->arrBlocData = $_POST;
             }
             break;
         case 'delete':
             $this->preview = "off";
             // DBへデータを更新する
             $objDBConn = new SC_DbConn();
             // DB操作オブジェクト
             $sql = "";
             // データ更新SQL生成用
             $ret = "";
             // データ更新結果格納用
             $arrDelData = array();
             // 更新データ生成用
             // 更新データ生成
             $arrUpdData = array($arrData['bloc_name'], BLOC_DIR . $arrData['filename'] . '.tpl', $arrData['filename']);
             // bloc_id が空でない場合にはdeleteを実行
             if ($_POST['bloc_id'] !== '') {
                 // SQL生成
                 $sql = " DELETE FROM dtb_bloc WHERE bloc_id = ?";
                 // SQL実行
                 $ret = $objDBConn->query($sql, array($_POST['bloc_id']));
                 // ページに配置されているデータも削除する
                 $sql = "DELETE FROM dtb_blocposition WHERE bloc_id = ?";
                 // SQL実行
                 $ret = $objDBConn->query($sql, array($_POST['bloc_id']));
                 // ファイルの削除
                 $del_file = $package_path . BLOC_DIR . $arrBlocData[0]['filename'] . '.tpl';
                 if (file_exists($del_file)) {
                     unlink($del_file);
                 }
             }
             $this->sendRedirect($this->getLocation("./bloc.php"));
             exit;
             break;
         default:
             if (isset($_POST['mode'])) {
                 GC_Utils::gfPrintLog("MODEエラー:" . $_POST['mode']);
             }
             break;
     }
     // 画面の表示
     $objView->assignobj($this);
     $objView->display(MAIN_FRAME);
 }
 /**
  * Page のプロセス.
  *
  * @return void
  */
 function process()
 {
     // 認証可否の判定
     $objSession = new SC_Session();
     SC_Utils::sfIsSuccess($objSession);
     // uniqidをテンプレートへ埋め込み
     $this->uniqid = $objSession->getUniqId();
     $objView = new SC_AdminView();
     switch ($this->lfGetMode()) {
         // 登録ボタン押下時
         case 'register':
             // 画面遷移の正当性チェック
             if (!SC_Utils::sfIsValidTransition($objSession)) {
                 sfDispError('');
             }
             // パラメータ検証
             $objForm = $this->lfInitRegister();
             if ($objForm->checkError()) {
                 SC_Utils_Ex::sfDispError('');
             }
             $template_code = $objForm->getValue('template_code');
             $this->tpl_select = $template_code;
             if ($template_code == "") {
                 $template_code = "default";
             }
             // DBへ使用するテンプレートを登録
             $this->lfRegisterTemplate($template_code);
             // XXX コンパイルファイルのクリア処理を行う
             $objView->_smarty->clear_compiled_tpl();
             // common.cssの内容を更新
             $this->lfChangeCommonCss($template_code);
             // テンプレートのコピー
             $this->lfCopyTemplate($template_code);
             // ブロック位置を更新
             $this->lfChangeBloc($template_code);
             // 完了メッセージ
             $this->tpl_onload = "alert('登録が完了しました。');";
             break;
             // 削除ボタン押下時
         // 削除ボタン押下時
         case 'delete':
             // 画面遷移の正当性チェック
             if (!SC_Utils::sfIsValidTransition($objSession)) {
                 SC_Utils::sfDispError('');
             }
             // パラメータ検証
             $objForm = $this->lfInitDelete();
             if ($objForm->checkError()) {
                 SC_Utils::sfDispError('');
             }
             //現在使用中のテンプレートとデフォルトのテンプレートは削除できないようにする
             $template_code = $objForm->getValue('template_code_temp');
             if ($template_code == TEMPLATE_NAME || $template_code == DEFAULT_TEMPLATE_NAME) {
                 $this->tpl_onload = "alert('選択中のテンプレートは削除出来ません');";
                 break;
             }
             $this->lfDeleteTemplate($template_code);
             break;
             // downloadボタン押下時
         // downloadボタン押下時
         case 'download':
             // 画面遷移の正当性チェック
             if (!SC_Utils::sfIsValidTransition($objSession)) {
                 SC_Utils::sfDispError('');
             }
             // パラメータ検証
             $objForm = $this->lfInitDownload();
             $template_code = $objForm->getValue('template_code_temp');
             // ユーザデータの下のファイルも保存する。
             $from_dir = USER_TEMPLATE_PATH . $template_code . "/";
             $to_dir = SMARTY_TEMPLATES_DIR . $template_code . "/_packages/";
             SC_Utils::sfMakeDir($to_dir);
             SC_Utils::sfCopyDir($from_dir, $to_dir);
             SC_Helper_FileManager::downloadArchiveFiles(SMARTY_TEMPLATES_DIR . $template_code);
             break;
             // プレビューボタン押下時
         // プレビューボタン押下時
         case 'preview':
             break;
         default:
             break;
     }
     // defaultパラメータのセット
     $this->templates = $this->lfGetAllTemplates();
     $this->now_template = TEMPLATE_NAME;
     // 画面の表示
     $objView->assignobj($this);
     $objView->display(MAIN_FRAME);
 }
Ejemplo n.º 4
0
 function sfMakeDir($path)
 {
     static $count = 0;
     $count++;
     // 無限ループ回避
     $dir = dirname($path);
     if (ereg("^[/]\$", $dir) || ereg("^[A-Z]:[\\]\$", $dir) || $count > 256) {
         // ルートディレクトリで終了
         return;
     } else {
         if (is_writable(dirname($dir))) {
             if (!file_exists($dir)) {
                 mkdir($dir);
                 GC_Utils::gfPrintLog("mkdir {$dir}");
             }
         } else {
             SC_Utils::sfMakeDir($dir);
             if (is_writable(dirname($dir))) {
                 if (!file_exists($dir)) {
                     mkdir($dir);
                     GC_Utils::gfPrintLog("mkdir {$dir}");
                 }
             }
         }
     }
     return;
 }