/** * 現在選択しているテンプレートパッケージをupload/temp_template/以下にコピーする * * @param string $to 保存先パス * @return void */ function lfCopyTplPackage($to) { $nowTpl = $this->lfGetNowTemplate(); if (!$nowTpl) { return; } $from = TPL_PKG_PATH . $nowTpl . '/'; SC_Utils::sfCopyDir($from, $to, ''); }
public function testSfCopyDir_上書きフラグがONかつ書き込み権限がない場合_同名ファイルが上書きされない() { mkdir(self::$TMP_DIR . "/src", 0777, true); mkdir(self::$TMP_DIR . "/dst", 0777, true); // コピー先も作成しておく $fp = fopen(self::$TMP_DIR . "/src/test.txt", "w"); fwrite($fp, "hello"); fclose($fp); // 上書きされないファイル $test_file = self::$TMP_DIR . "/dst/test.txt"; $fp = fopen($test_file, "w"); fwrite($fp, "good morning"); fclose($fp); chmod($test_file, 0444); // いったん読取専用にする $src = self::$TMP_DIR . "/src/"; $dst = self::$TMP_DIR . "/dst/"; $this->expected = array('dir_exists' => TRUE, 'files' => array('test.txt'), 'file_content' => 'good morning'); SC_Utils::sfCopyDir($src, $dst, '', TRUE); $this->actual['dir_exists'] = is_dir($dst); $this->actual['files'] = Test_Utils::mapCols(SC_Helper_FileManager::sfGetFileList($dst), 'file_name'); $fp = fopen($test_file, "r"); $this->actual['file_content'] = fread($fp, 100); chmod($test_file, 0777); // verifyする前にパーミッションを戻す $this->verify(); }
/** * 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 sfCopyDir($src, $des, $mess = "", $override = false) { if (!is_dir($src)) { return false; } $oldmask = umask(0); $mod = stat($src); // ディレクトリがなければ作成する if (!file_exists($des)) { if (!mkdir($des, $mod[2])) { print "path:" . $des; } } $fileArray = glob($src . "*"); foreach ($fileArray as $key => $data_) { // CVS管理ファイルはコピーしない if (ereg("/CVS/Entries", $data_)) { break; } if (ereg("/CVS/Repository", $data_)) { break; } if (ereg("/CVS/Root", $data_)) { break; } mb_ereg("^(.*[\\/])(.*)", $data_, $matches); $data = $matches[2]; if (is_dir($data_)) { $mess = SC_Utils::sfCopyDir($data_ . '/', $des . $data . '/', $mess); } else { if (!$override && file_exists($des . $data)) { $mess .= $des . $data . ":ファイルが存在します\n"; } else { if (@copy($data_, $des . $data)) { $mess .= $des . $data . ":コピー成功\n"; } else { $mess .= $des . $data . ":コピー失敗\n"; } } $mod = stat($data_); } } umask($oldmask); return $mess; }