/** * 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); }
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; }