本文整理汇总了PHP中CFileHelper::copyDirectory方法的典型用法代码示例。如果您正苦于以下问题:PHP CFileHelper::copyDirectory方法的具体用法?PHP CFileHelper::copyDirectory怎么用?PHP CFileHelper::copyDirectory使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CFileHelper
的用法示例。
在下文中一共展示了CFileHelper::copyDirectory方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: run
public function run($args = null)
{
$theme = $args[0];
$themePath = realpath(dirname(__FILE__) . '/../../themes') . '/' . $theme;
if (!file_exists($themePath)) {
mkdir($themePath);
mkdir($themePath . '/views');
}
// Find all modules views and copy to theme directory
$files = glob(realpath(dirname(__FILE__) . '/../') . '/modules/*', GLOB_ONLYDIR);
foreach ($files as $file) {
$parts = explode('/', $file);
$module = end($parts);
// Don't copy next modules to theme dir.
if (in_array($module, array('admin', 'install', 'rights'))) {
continue;
}
$moduleThemePath = $themePath . '/views/' . $module;
$moduleViews = glob($file . '/views/*', GLOB_ONLYDIR);
foreach ($moduleViews as $viewsDirPath) {
$parts = explode('/', $viewsDirPath);
if (end($parts) != 'admin') {
if (!file_exists($moduleThemePath)) {
mkdir($moduleThemePath, 0777, true);
}
CFileHelper::copyDirectory($viewsDirPath, $moduleThemePath . '/' . end($parts));
}
}
}
}
示例2: run
public function run($args = null)
{
$theme = $args[0];
$themePath = realpath(dirname(__FILE__) . '/../../themes') . DIRECTORY_SEPARATOR . $theme;
if (!file_exists($themePath)) {
mkdir($themePath);
mkdir($themePath . '/views');
}
// Find all modules views and copy to theme directory
$files = glob(realpath(dirname(__FILE__) . '/../') . '/modules/*', GLOB_ONLYDIR);
foreach ($files as $file) {
$parts = explode('/', $file);
$module = end($parts);
$moduleThemePath = $themePath . '/views/' . $module;
$moduleViews = glob($file . '/views/*', GLOB_ONLYDIR);
foreach ($moduleViews as $viewsDirPath) {
$parts = explode('/', $viewsDirPath);
if (end($parts) != 'admin') {
if (!file_exists($moduleThemePath)) {
mkdir($moduleThemePath);
}
CFileHelper::copyDirectory($viewsDirPath, $moduleThemePath . '/' . end($parts));
}
}
}
}
示例3: _installExampleTemplates
/**
* Install templates
*
* @return void
*/
private function _installExampleTemplates()
{
try {
$fileHelper = new \CFileHelper();
@mkdir(craft()->path->getSiteTemplatesPath() . 'sproutemail');
$fileHelper->copyDirectory(craft()->path->getPluginsPath() . 'sproutemail/templates/_special/examples/emails', craft()->path->getSiteTemplatesPath() . 'sproutemail');
} catch (\Exception $e) {
$this->_handleError($e);
}
}
示例4: run
function run($args)
{
if (empty($args[1])) {
echo $this->getHelp();
return;
}
$path = $args[0];
$version = $args[1];
echo "Preparing {$path} release.\n";
require dirname(__FILE__) . '/GenerateDocsCommand.php';
$docProcessor = new GenerateDocsCommand($this->getName(), $this->getCommandRunner());
$outFiles = $docProcessor->processDocuments($path);
// copy extension dir to temp
$extPath = Yii::getPathOfAlias('ext') . '/' . $path;
$copiedExtRoot = Yii::getPathOfAlias('application.runtime.extension');
echo "Removing {$copiedExtRoot}.\n";
if (file_exists($copiedExtRoot)) {
$this->recursiveDelete($copiedExtRoot);
}
$copiedExtPath = $copiedExtRoot . '/' . $path;
if (!file_exists($copiedExtPath)) {
mkdir($copiedExtPath, 0777, true);
}
echo "Copying extension files from {$extPath} to {$copiedExtPath}.\n";
CFileHelper::copyDirectory($extPath, $copiedExtPath, array('exclude' => array('.svn', 'readme_en.txt', 'readme_ru.txt')));
echo "Copying documentation to {$copiedExtPath}.\n";
foreach ($outFiles as $file) {
copy($file, $copiedExtPath . '/' . basename($file));
}
$pathExp = explode('/', $path);
$zipName = end($pathExp) . '_' . $version . '.zip';
$releasePath = Yii::getPathOfAlias('application.releases');
if (!file_exists($releasePath)) {
mkdir($releasePath, 0777, true);
}
$zipPath = "{$releasePath}/{$zipName}";
if (file_exists($zipPath)) {
unlink($zipPath);
}
//touch($zipPath);
echo "Creating Zip {$zipPath}.\n";
require dirname(__FILE__) . '/Zip.php';
$zip = new Zip();
if ($zip->open($zipPath, ZipArchive::OVERWRITE | ZipArchive::CREATE) !== TRUE) {
die("Failed to open Zip {$zipPath}.\n");
}
if (!$zip->addDir($copiedExtRoot)) {
die("Failed adding {$copiedExtRoot} to Zip.\n");
}
if ($zip->close()) {
echo "Done.\n";
} else {
die("Failed to write Zip {$zipPath}.\n");
}
}
示例5: testCopyDirectory_subDir_modeShoudBe0777
public function testCopyDirectory_subDir_modeShoudBe0777()
{
if (substr(PHP_OS, 0, 3) == 'WIN') {
$this->markTestSkipped("Can't reliably test it on Windows because fileperms() always return 0777.");
}
$this->createTestStruct($this->testDir);
$src = $this->testDir . DIRECTORY_SEPARATOR . $this->rootDir1;
$dst = $this->testDir . DIRECTORY_SEPARATOR . $this->rootDir2;
CFileHelper::copyDirectory($src, $dst);
$subDir2Mode = $this->getMode($dst . DIRECTORY_SEPARATOR . $this->subDir);
$expectedMode = sprintf('%o', 0777);
$this->assertEquals($expectedMode, $subDir2Mode, "Subdir mode is not {$expectedMode}");
}
示例6: generateMessagesModules
public function generateMessagesModules($locale)
{
$modules = ModulesModel::getModules();
$t = new yandexTranslate();
$result = array();
$num = -1;
$params = array();
foreach ($modules as $key => $mod) {
$pathDefault = Yii::getPathOfAlias(self::PATH_MOD . '.' . $key . '.messages.ru');
$listfile = CFileHelper::findFiles($pathDefault, array('fileTypes' => array('php'), 'absolutePaths' => false));
$path = Yii::getPathOfAlias(self::PATH_MOD . '.' . $key . '.messages' . DS . $locale);
//CFileHelper::createDirectory($path, 0777);
CFileHelper::copyDirectory($pathDefault, $path, array('fileTypes' => array('php'), 'level' => 1));
foreach ($listfile as $file) {
// $file = str_replace('.php', '', $file);
$openFileContent = self::PATH_MOD . ".{$key}.messages.{$locale}";
$contentList = (include Yii::getPathOfAlias($openFileContent) . DS . $file);
// foreach($contentList as $pkey=>$value){
foreach ($contentList as $pkey => $val) {
$params[] = $val;
$num++;
$spec[$num] = $pkey;
}
$response = $t->translate(array('ru', $locale), $contentList);
foreach ($response['text'] as $k => $v) {
$result[$spec[$k]] = $v;
}
if (!@file_put_contents($path . DS . $file, '<?php
/**
* Message translations. (auto translate)
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of \'@@\' marks.
*
* @author Andrew (Panix) Semenov <andrew.panix@gmail.com>
* @package modules.messages.' . $locale . '
*/
return ' . var_export($result, true) . ';')) {
throw new CException(Yii::t('admin', 'Error write modules setting in {file}...', array('{file}' => $file)));
}
}
die('finish ' . $key);
}
die('Complate');
// $locale
}
示例7: publish
public function publish($path, $hashByName = false, $level = -1, $forceCopy = false)
{
if (isset($this->_published[$path])) {
return $this->_published[$path];
} else {
if (($src = realpath($path)) !== false) {
if (is_file($src)) {
$dir = $this->hash($hashByName ? basename($src) : dirname($src));
$fileName = basename($src);
$dstDir = $this->getBasePath() . DIRECTORY_SEPARATOR . $dir;
$dstFile = $dstDir . '_' . $fileName;
if ($this->linkAssets) {
if (!is_file($dstFile)) {
symlink($src, $dstFile);
}
} else {
if (@filemtime($dstFile) < @filemtime($src) || $forceCopy) {
copy($src, $dstFile);
}
}
return $this->_published[$path] = $this->getBaseUrl() . '/' . $dir . '_' . $fileName;
} else {
if (is_dir($src)) {
$dir = $this->hash($hashByName ? basename($src) : $src);
$dstDir = $this->getBasePath() . DIRECTORY_SEPARATOR . $dir;
if ($this->linkAssets) {
if (!is_dir($dstDir)) {
symlink($src, $dstDir);
}
} else {
if (!is_dir($dstDir) || $forceCopy) {
CFileHelper::copyDirectory($src, $dstDir, array('exclude' => $this->excludeFiles, 'level' => $level));
}
}
return $this->_published[$path] = $this->getBaseUrl() . '/' . $dir;
}
}
}
}
throw new CException(Yii::t('yii', 'The asset "{asset}" to be published does not exist.', array('{asset}' => $path)));
}
示例8: publish
public function publish($path, $hashByName = false, $level = -1, $forceCopy = null)
{
if ($forceCopy === null) {
$forceCopy = $this->forceCopy;
}
if ($forceCopy && $this->linkAssets) {
throw new CException(Yii::t('yii', 'The "forceCopy" and "linkAssets" cannot be both true.'));
}
if (isset($this->_published[$path])) {
return $this->_published[$path];
} else {
if (($src = realpath($path)) !== false) {
$dir = $this->generatePath($src, $hashByName);
$dstDir = $this->getBasePath() . DIRECTORY_SEPARATOR . $dir;
if (is_file($src)) {
$fileName = basename($src);
$dstFile = $dstDir . DIRECTORY_SEPARATOR . $fileName;
if (!is_dir($dstDir)) {
mkdir($dstDir, $this->newDirMode, true);
chmod($dstDir, $this->newDirMode);
}
if ($this->linkAssets && !is_file($dstFile)) {
symlink($src, $dstFile);
} elseif (@filemtime($dstFile) < @filemtime($src)) {
copy($src, $dstFile);
chmod($dstFile, $this->newFileMode);
}
return $this->_published[$path] = $this->getBaseUrl() . "/{$dir}/{$fileName}";
} elseif (is_dir($src)) {
if ($this->linkAssets && !is_dir($dstDir)) {
symlink($src, $dstDir);
} elseif (!is_dir($dstDir) || $forceCopy) {
CFileHelper::copyDirectory($src, $dstDir, array('exclude' => $this->excludeFiles, 'level' => $level, 'newDirMode' => $this->newDirMode, 'newFileMode' => $this->newFileMode));
}
return $this->_published[$path] = $this->getBaseUrl() . '/' . $dir;
}
}
}
throw new CException(Yii::t('yii', 'The asset "{asset}" to be published does not exist.', array('{asset}' => $path)));
}
示例9: publish
public function publish($path,$hashByName=false,$level=-1,$forceCopy=false)
{
if(isset($this->_published[$path]))
{
return $this->_published[$path];
}
else if(($src=realpath($path))!==false)
{
if(is_file($src))
{
$dir=$this->hash($hashByName ? basename($src) : dirname($src));
$fileName=basename($src);
$suffix=substr(strrchr($fileName, '.'), 1);
$dstDir=$this->getBasePath().DIRECTORY_SEPARATOR.$dir;
if (array_key_exists($suffix, $this->parsers))
{
$fileName=basename($src, $suffix).$this->parsers[$suffix]['output'];
}
$dstFile=$dstDir.DIRECTORY_SEPARATOR.$fileName;
if($this->force || @filemtime($dstFile)<@filemtime($src))
{
if(!is_dir($dstDir))
{
mkdir($dstDir);
@chmod($dstDir,0777);
}
if (array_key_exists($suffix, $this->parsers))
{
$parserClass = Yii::import($this->parsers[$suffix]['class']);
$parser = new $parserClass($this->parsers[$suffix]['options']);
file_put_contents($dstFile, $parser->parse($src));
}
else
{
copy($src,$dstFile);
}
}
return $this->_published[$path]=$this->getBaseUrl()."/$dir/$fileName";
}
else if(is_dir($src))
{
$dir=$this->hash($hashByName ? basename($src) : $src);
$dstDir=$this->getBasePath().DIRECTORY_SEPARATOR.$dir;
if($this->linkAssets)
{
if(!is_dir($dstDir))
symlink($src,$dstDir);
}
else if(!is_dir($dstDir) || $forceCopy)
{
CFileHelper::copyDirectory($src,$dstDir,array(
'exclude'=>$this->excludeFiles,
'level'=>$level,
'newDirMode'=>$this->newDirMode,
'newFileMode'=>$this->newFileMode
));
}
return $this->_published[$path]=$this->getBaseUrl().'/'.$dir;
}
}
}
示例10: buildOfflinePages
protected function buildOfflinePages($docPath, $themePath)
{
$this->themePath = $themePath;
@mkdir($docPath);
$content = $this->render('index', null, true);
$content = preg_replace_callback(self::URL_PATTERN, array($this, 'fixOfflineLink'), $content);
file_put_contents($docPath . '/index.html', $content);
foreach ($this->classes as $name => $class) {
$this->currentClass = $name;
$this->pageTitle = $name;
$content = $this->render('class', array('class' => $class), true);
$content = preg_replace_callback(self::URL_PATTERN, array($this, 'fixOfflineLink'), $content);
file_put_contents($docPath . '/' . $name . '.html', $content);
}
CFileHelper::copyDirectory($this->themePath . '/assets', $docPath);
$content = $this->renderPartial('chmProject', null, true);
file_put_contents($docPath . '/manual.hhp', $content);
$content = $this->renderPartial('chmIndex', null, true);
file_put_contents($docPath . '/manual.hhk', $content);
$content = $this->renderPartial('chmContents', null, true);
file_put_contents($docPath . '/manual.hhc', $content);
}
示例11: XMLImportSurvey
/**
* This function imports a LimeSurvey .lss survey XML file
*
* @param mixed $sFullFilePath The full filepath of the uploaded file
*/
function XMLImportSurvey($sFullFilePath, $sXMLdata = NULL, $sNewSurveyName = NULL, $iDesiredSurveyId = NULL, $bTranslateInsertansTags = true, $bConvertInvalidQuestionCodes = true)
{
Yii::app()->loadHelper('database');
$clang = Yii::app()->lang;
$aGIDReplacements = array();
if ($sXMLdata == NULL) {
$sXMLdata = file_get_contents($sFullFilePath);
}
$xml = @simplexml_load_string($sXMLdata, 'SimpleXMLElement', LIBXML_NONET);
if (!$xml || $xml->LimeSurveyDocType != 'Survey') {
$results['error'] = $clang->gT("This is not a valid LimeSurvey survey structure XML file.");
return $results;
}
$pre_personal_characteristics = "";
$question_groups['R'] = array();
$question_groups['I'] = array();
$question_groups['O'] = array();
$iDBVersion = (int) $xml->DBVersion;
$aQIDReplacements = array();
$aQuestionCodeReplacements = array();
$aQuotaReplacements = array();
$results['defaultvalues'] = 0;
$results['answers'] = 0;
$results['surveys'] = 0;
$results['questions'] = 0;
$results['subquestions'] = 0;
$results['question_attributes'] = 0;
$results['groups'] = 0;
$results['assessments'] = 0;
$results['quota'] = 0;
$results['quotals'] = 0;
$results['quotamembers'] = 0;
$results['survey_url_parameters'] = 0;
$results['importwarnings'] = array();
$aLanguagesSupported = array();
foreach ($xml->languages->language as $language) {
$aLanguagesSupported[] = (string) $language;
}
$results['languages'] = count($aLanguagesSupported);
// Import surveys table ====================================================
foreach ($xml->surveys->rows->row as $row) {
$insertdata = array();
foreach ($row as $key => $value) {
$insertdata[(string) $key] = (string) $value;
}
$iOldSID = $results['oldsid'] = $insertdata['sid'];
if ($iDesiredSurveyId != NULL) {
$insertdata['wishSID'] = GetNewSurveyID($iDesiredSurveyId);
} else {
$insertdata['wishSID'] = $iOldSID;
}
if ($iDBVersion < 145) {
if (isset($insertdata['private'])) {
$insertdata['anonymized'] = $insertdata['private'];
}
unset($insertdata['private']);
unset($insertdata['notification']);
}
//Make sure it is not set active
$insertdata['active'] = 'N';
//Set current user to be the owner
$insertdata['owner_id'] = Yii::app()->session['loginID'];
if (isset($insertdata['bouncetime']) && $insertdata['bouncetime'] == '') {
$insertdata['bouncetime'] = NULL;
}
if (isset($insertdata['showXquestions'])) {
$insertdata['showxquestions'] = $insertdata['showXquestions'];
unset($insertdata['showXquestions']);
}
// Special code to set javascript in
Yii::app()->loadHelper('admin/template');
$newname = "watson_" . time();
$newdirname = Yii::app()->getConfig('usertemplaterootdir') . "/" . $newname;
$copydirname = getTemplatePath("watson_personal_constructs_copy_me");
$oFileHelper = new CFileHelper();
$mkdirresult = mkdir_p($newdirname);
if ($mkdirresult == 1) {
$oFileHelper->copyDirectory($copydirname, $newdirname);
$templatename = $newname;
//$this->index("startpage.pstpl", "welcome", $templatename);
} elseif ($mkdirresult == 2) {
$results['Error'] = sprintf($clang->gT("Directory with the name `%s` already exists - choose another name", "js"), $newname);
} else {
$results['Error'] = sprintf($clang->gT("Unable to create directory `%s`.", "js"), $newname) . " " . $clang->gT("Please check the directory permissions.", "js");
}
$insertdata['template'] = $newname;
// End special copy code (taken from templates.php templatecopy() method
if (isset($insertdata['googleAnalyticsStyle'])) {
$insertdata['googleanalyticsstyle'] = $insertdata['googleAnalyticsStyle'];
unset($insertdata['googleAnalyticsStyle']);
}
if (isset($insertdata['googleAnalyticsAPIKey'])) {
$insertdata['googleanalyticsapikey'] = $insertdata['googleAnalyticsAPIKey'];
unset($insertdata['googleAnalyticsAPIKey']);
}
//.........这里部分代码省略.........
示例12: templatecopy
/**
* Function responsible to copy a template.
*
* @access public
* @return void
*/
public function templatecopy()
{
if (!Permission::model()->hasGlobalPermission('templates', 'create')) {
die('No permission');
}
$clang = $this->getController()->lang;
$newname = sanitize_dirname(Yii::app()->request->getPost("newname"));
$copydir = sanitize_dirname(Yii::app()->request->getPost("copydir"));
$action = Yii::app()->request->getPost("action");
if ($newname && $copydir) {
// Copies all the files from one template directory to a new one
Yii::app()->loadHelper('admin/template');
$newdirname = Yii::app()->getConfig('usertemplaterootdir') . "/" . $newname;
$copydirname = getTemplatePath($copydir);
$oFileHelper = new CFileHelper();
$mkdirresult = mkdir_p($newdirname);
if ($mkdirresult == 1) {
$oFileHelper->copyDirectory($copydirname, $newdirname);
$templatename = $newname;
$this->getController()->redirect(array("admin/templates/sa/view", 'templatename' => $newname));
} elseif ($mkdirresult == 2) {
Yii::app()->setFlashMessage(sprintf($clang->gT("Directory with the name `%s` already exists - choose another name"), $newname), 'error');
$this->getController()->redirect(array("admin/templates/sa/view", 'templatename' => $copydir));
} else {
Yii::app()->setFlashMessage(sprintf($clang->gT("Unable to create directory `%s`."), $newname), 'error');
Yii::app()->setFlashMessage($clang->gT("Please check the directory permissions."));
$this->getController()->redirect(array("admin/templates/sa/view"));
}
} else {
$this->getController()->redirect(array("admin/templates/sa/view"));
}
}
示例13: actionUploadIronWorker
/**
* Run this action like this: yiic myAction uploadIronWorker
*
* This command can be integrated to your deployment system. When you have committed your code you can
* run this command to deploy the code to the iron.io servers.
*
* This command zips all the code needed to be uploaded to the Iron Workers
* Upload the zipped file to Iron Workers. This will create a new version of the code for the current project
*
* It will also create a task in the iron.io hud named after the command file. All the actions in this command file
* will run as this task on iron.io.
*
* It prepares all the files in the runtoime directory and cleans up when finished.
* TODO: Test in Windows environment
*/
public function actionUploadIronWorker()
{
/**
* The EYiiron class instance. It is our gateway to all iron.io services
* @var EYiiron $yiiron
*/
$yiiron = Yii::app()->yiiron;
//This is where we store the files before deploying them on iron.io
$tmpDir = Yii::app()->getRuntimePath() . DIRECTORY_SEPARATOR . 'ironworkers' . DIRECTORY_SEPARATOR;
echo "Using PHP Stack :" . $yiiron->stack . "\n";
//Clean up in the directory. We do this before we start in case the old code was not fully removed.
EIronWorkersCommand::deleteDir($tmpDir);
//Make sure we have a clean environment before preparing the runtime environment for iron.io.
//THis is crucial so we know that the code we deploy is exactly the same as we run locally.
if (!file_exists($tmpDir)) {
echo $tmpDir . " doesn't exist creating it now...\n";
if (!mkdir($tmpDir)) {
echo "**Error**: Creation failed. Please check your permissions!\n";
exit(0);
}
} else {
echo "**Error**: " . $tmpDir . " existed even though we tried to fully remove it.\n" . "It could be a permission problem please remove " . $tmpDir . " manually before running this command again.\n";
exit(0);
}
echo "Copying Yii Framework to tmp dir...\n";
/**
* The Framework path
* @var string $yiiPath
*/
$yiiPath = Yii::getFrameworkPath() . "/../";
/**
* The path of your Yii app. Usually the protected folder
* @var string $appPath
*/
$appPath = Yii::app()->getBasePath() . "/";
echo "Yii path: " . $yiiPath . "\n";
CFileHelper::copyDirectory($yiiPath, $tmpDir . 'yii');
echo "Copying app from " . $appPath . " to the tmp dir " . $tmpDir . 'app/' . basename($appPath) . "\n";
//Exclude as much as we can to get a slim file to upload
CFileHelper::copyDirectory($appPath, $tmpDir . 'app/' . basename($appPath), Yii::app()->yiiron->workerFileCopyOptions);
echo "Zipping code to " . $tmpDir . "iron_worker.zip\n";
IronWorker::zipDirectory($tmpDir, $tmpDir . 'iron_worker.zip', true);
echo "Uploading the code for the worker " . $this->name . "...\n";
//This is so we can handle custom extension paths
$ironWorkerExtensionPath = str_replace($appPath, "app/" . basename($appPath) . "/", Yii::app()->getExtensionPath());
//Read the config array into an array
$configFile = json_encode(require $appPath . $yiiron->configFile);
//Posting the code and the initial php file to execute. This on the Iron Worker platform, not locally
$res = $yiiron->workerPostCode($ironWorkerExtensionPath . "/yiiron/yiic-yiiron.php", $tmpDir . 'iron_worker.zip', $this->getName(), array('config' => $configFile, 'stack' => $yiiron->stack));
echo "Finished uploading iron_worker.zip (" . EIronWorkersCommand::format_bytes(filesize($tmpDir . 'iron_worker.zip')) . ")\n";
//Remove all files
echo "Remove all temp files...\n";
//EIronWorkersCommand::deleteDir($tmpDir);
echo "Done!\n";
echo "Find the worker here http://hud.iron.io/tq/projects/" . Yii::app()->yiiron->projectId . "/tasks/" . $res->id . "/activity\n";
echo "Now run your command like this: './yiic " . $this->name . " myAction --ironWorker=true' to execute it as an Iron Worker.\n";
}
示例14: copyImagesToTmp
protected function copyImagesToTmp($path)
{
if (is_dir($path)) {
echo " Copying images to tmpdir [" . $path . "].\n";
CFileHelper::copyDirectory($path, $this->tmpPath, array('fileTypes' => array('jpg', 'jpeg', 'png', 'gif', 'css'), 'level' => 0));
}
}
示例15: publish
public function publish($path,$hashByName=false,$level=-1,$forceCopy=false)
{
if($forceCopy===null)
$forceCopy=$this->forceCopy;
if(isset($this->_published[$path]))
return $this->_published[$path];
else if(($src=realpath($path))!==false)
{
if(is_file($src))
{
$dir=$this->hash($hashByName ? basename($src) : dirname($src).filemtime($src));
$fileName=basename($src);
$dstDir=$this->getBasePath().DIRECTORY_SEPARATOR.$dir;
$suffix=pathinfo($src, PATHINFO_EXTENSION);
if (array_key_exists($suffix, $this->parsers))
{
$fileName=basename($src, $suffix).$this->parsers[$suffix]['output'];
}
$dstFile=$dstDir.DIRECTORY_SEPARATOR.$fileName;
if ($this->linkAssets)
{
if(!is_file($dstFile))
{
if(!is_dir($dstDir))
{
mkdir($dstDir);
@chmod($dstDir, $this->newDirMode);
}
symlink($src,$dstFile);
}
}
else if(@filemtime($dstFile)<@filemtime($src))
{
if(!is_dir($dstDir))
{
mkdir($dstDir);
@chmod($dstDir, $this->newDirMode);
}
if (array_key_exists($suffix, $this->parsers))
{
$parserClass = Yii::import($this->parsers[$suffix]['class']);
$parser = new $parserClass($this->parsers[$suffix]['options']);
file_put_contents($dstFile, $parser->parse($src));
}
else
{
copy($src,$dstFile);
}
@chmod($dstFile, $this->newFileMode);
}
return $this->_published[$path]=$this->getBaseUrl()."/$dir/$fileName";
}
else if(is_dir($src))
{
$dir=$this->hash($hashByName ? basename($src) : $src.filemtime($src));
$dstDir=$this->getBasePath().DIRECTORY_SEPARATOR.$dir;
if($this->linkAssets)
{
if(!is_dir($dstDir))
symlink($src,$dstDir);
}
else if(!is_dir($dstDir) || $forceCopy)
{
CFileHelper::copyDirectory($src,$dstDir,array(
'exclude'=>$this->excludeFiles,
'level'=>$level,
'newDirMode'=>$this->newDirMode,
'newFileMode'=>$this->newFileMode,
));
}
return $this->_published[$path]=$this->getBaseUrl().'/'.$dir;
}
}
throw new CException(Yii::t('yii','The asset "{asset}" to be published does not exist.',
array('{asset}'=>$path)));
}