*/ abstract class BaseAsset implements AssetInterface { private $filters; private $sourceRoot; private $sourcePath; private $targetPath; private $content; private $loaded; /** * Constructor. * * @param array $filters Filters for the asset */ public function __construct($filters = array(), $sourceRoot = null, $sourcePath = null) { $this->filters = new FilterCollection($filters); $this->sourceRoot = $sourceRoot; $this->sourcePath = $sourcePath; $this->loaded = false; } public function __clone() { $this->filters = clone $this->filters; } public function ensureFilter(FilterInterface $filter) { $this->filters->ensure($filter); } public function getFilters() { return $this->filters->all(); } public function clearFilters() { $this->filters->clear(); } /** * Encapsulates asset loading logic. * * @param string $content The asset content * @param FilterInterface $additionalFilter An additional filter */ protected function doLoad($content, FilterInterface $additionalFilter = null) { $filter = clone $this->filters; if ($additionalFilter) { $filter->ensure($additionalFilter); } $asset = clone $this; $asset->setContent($content); $filter->filterLoad($asset); $this->content = $asset->getContent(); $this->loaded = true; } public function dump(FilterInterface $additionalFilter = null) { if (!$this->loaded) { $this->load(); } $filter = clone $this->filters; if ($additionalFilter) { $filter->ensure($additionalFilter); } $asset = clone $this; $filter->filterDump($asset); return $asset->getContent(); } public function getContent() { return $this->content; } public function setContent($content) { $this->content = $content; } public function getSourceRoot() { return $this->sourceRoot; } public function getSourcePath() { return $this->sourcePath; } public function getTargetPath() { return $this->targetPath; } public function setTargetPath($targetPath) { $this->targetPath = $targetPath; } }