%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/components/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/components/AssetManager.php |
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2017 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\components;
use Yii;
use yii\base\InvalidArgumentException;
use yii\base\InvalidConfigException;
use yii\helpers\FileHelper;
use yii\web\AssetBundle;
use humhub\assets\AppAsset;
use humhub\assets\CoreBundleAsset;
/**
* AssetManager
*
* @inheritdoc
* @author Luke
*/
class AssetManager extends \yii\web\AssetManager
{
private $_published = [];
/**
* @var bool if true will prevent `defer` on all asset bundle scripts
* @since 1.5
*/
public $preventDefer = false;
/**
* Clears all currently published assets
*/
public function clear()
{
if ($this->basePath == '') {
return;
}
foreach (scandir($this->basePath) as $file) {
if (substr($file, 0, 1) === '.') {
continue;
}
FileHelper::removeDirectory($this->basePath . DIRECTORY_SEPARATOR . $file);
}
}
/**
* @inheritDoc
*
* Adds defer support for non HumHub AssetBundles by $defer property and adds dependency to [[CoreBundleAsset]]
*
* @param string $name
* @param array $config
* @param bool $publish
* @return AssetBundle
* @throws InvalidConfigException
* @since 1.5
*/
protected function loadBundle($name, $config = [], $publish = true)
{
$bundle = parent::loadBundle($name, $config, $publish);
$bundleClass = get_class($bundle);
if($bundleClass !== AppAsset::class
&& !in_array($bundleClass, AppAsset::STATIC_DEPENDS)
&& !in_array($bundleClass, CoreBundleAsset::STATIC_DEPENDS)
&& !is_subclass_of($bundleClass, assets\AssetBundle::class)) {
// Force dependency to CoreBundleAsset
array_unshift($bundle->depends, CoreBundleAsset::class);
// Allows to add defer to non HumHub AssetBundles
if(property_exists($bundle,'defer') && $bundle->defer) {
$bundle->jsOptions['defer'] = 'defer';
}
}
if($this->preventDefer && isset($bundle->jsOptions['defer'])) {
unset($bundle->jsOptions['defer']);
}
return $bundle;
}
public function forcePublish(AssetBundle $bundle, $options = [])
{
$options['forceCopy'] = true;
if ($bundle->sourcePath !== null && !isset($bundle->basePath, $bundle->baseUrl)) {
$path = Yii::getAlias($bundle->sourcePath);
if (!is_string($path) || ($src = realpath($path)) === false) {
throw new InvalidArgumentException("The file or directory to be published does not exist: $path");
}
if (is_file($src)) {
return $this->publishFile($src);
} else {
return $this->publishDirectory($src, $options);
}
} else {
$bundle->publish($this);
}
}
}