Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
50.00% |
4 / 8 |
CRAP | |
79.55% |
35 / 44 |
AbstractAssetFileFilter | |
0.00% |
0 / 1 |
|
50.00% |
4 / 8 |
24.77 | |
79.55% |
35 / 44 |
setAssetFileFilterName | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 6 |
|||
getAssetFileFilterName | |
0.00% |
0 / 1 |
3.33 | |
66.67% |
2 / 3 |
|||
setOptions | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
getOptions | |
0.00% |
0 / 1 |
2.15 | |
66.67% |
2 / 3 |
|||
getCachedFilteredContentFilePath | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
getCachedFilteredContent | |
100.00% |
1 / 1 |
5 | |
100.00% |
9 / 9 |
|||
cacheFilteredAssetFileContent | |
0.00% |
0 / 1 |
3.01 | |
91.67% |
11 / 12 |
|||
getAssetFileFilterProcessedDirPath | |
100.00% |
1 / 1 |
3 | |
100.00% |
8 / 8 |
<?php | |
namespace AssetsBundle\AssetFile\AssetFileFilter; | |
abstract class AbstractAssetFileFilter extends \Zend\Stdlib\AbstractOptions implements \ AssetsBundle\AssetFile\AssetFileFilter\AssetFileFilterInterface | |
{ | |
/** | |
* @var string | |
*/ | |
protected $assetFileFilterName; | |
/** | |
* @var \AssetsBundle\Service\ServiceOptions | |
*/ | |
protected $options; | |
/** | |
* @var string | |
*/ | |
protected $assetFileFilterProcessedDirPath; | |
/** | |
* @param string $sAssetFileFilterName | |
* @return \AssetsBundle\Service\Filter\AbstractFilter | |
* @throws \InvalidArgumentException | |
*/ | |
public function setAssetFileFilterName($sAssetFileFilterName) | |
{ | |
if (empty($sAssetFileFilterName)) { | |
throw new \InvalidArgumentException('Filter name is empty'); | |
} | |
if (!is_string($sAssetFileFilterName)) { | |
throw new \InvalidArgumentException('Filter name expects string, "' . gettype($sAssetFileFilterName) . '" given'); | |
} | |
$this->assetFileFilterName = $sAssetFileFilterName; | |
return $this; | |
} | |
/** | |
* @return string | |
* @throws \LogicException | |
*/ | |
public function getAssetFileFilterName() | |
{ | |
if (is_string($this->assetFileFilterName) && !empty($this->assetFileFilterName)) { | |
return $this->assetFileFilterName; | |
} | |
throw new \LogicException('Filter name is undefined'); | |
} | |
/** | |
* @param \AssetsBundle\Service\ServiceOptions $oOptions | |
* @return \AssetsBundle\Service\Service | |
*/ | |
public function setOptions(\AssetsBundle\Service\ServiceOptions $oOptions) | |
{ | |
$this->options = $oOptions; | |
return $this; | |
} | |
/** | |
* @return \AssetsBundle\Service\ServiceOptions | |
*/ | |
public function getOptions() | |
{ | |
if (!($this->options instanceof \AssetsBundle\Service\ServiceOptions)) { | |
$this->setOptions(new \AssetsBundle\Service\ServiceOptions()); | |
} | |
return $this->options; | |
} | |
/** | |
* @param \AssetsBundle\AssetFile\AssetFile $oAssetFile | |
* @return string | |
*/ | |
public function getCachedFilteredContentFilePath(\AssetsBundle\AssetFile\AssetFile $oAssetFile) | |
{ | |
return $this->getAssetFileFilterProcessedDirPath() . DIRECTORY_SEPARATOR . md5($sAssetFilePath = $oAssetFile->getAssetFilePath()); | |
} | |
/** | |
* @param \AssetsBundle\AssetFile\AssetFile $oAssetFile | |
* @return boolean|string | |
*/ | |
public function getCachedFilteredContent(\AssetsBundle\AssetFile\AssetFile $oAssetFile) | |
{ | |
if (file_exists($sCachedFilteredContentFilePath = $this->getCachedFilteredContentFilePath($oAssetFile))) { | |
$oFilteredAssetFile = new \AssetsBundle\AssetFile\AssetFile(array( | |
'assetFilePath' => $sCachedFilteredContentFilePath, | |
'assetFileType' => $oAssetFile->getAssetFileType() | |
)); | |
if ( | |
//Retrieve cached filtered asset file last modified timestamp | |
($iFilteredAssetFileLastModified = $oFilteredAssetFile->getAssetFileLastModified()) | |
//Retrieve asset file last modified timestamp | |
&& ($iAssetFileLastModified = $oAssetFile->getAssetFileLastModified()) | |
//If cached filtered asset file is updated | |
&& $iFilteredAssetFileLastModified >= $iAssetFileLastModified | |
) { | |
return $oFilteredAssetFile->getAssetFileContents(); | |
} | |
} | |
return false; | |
} | |
/** | |
* @param \AssetsBundle\AssetFile\AssetFile $oAssetFile | |
* @param string $sFilteredContent | |
* @return \AssetsBundle\AssetFile\AssetFileFilter\AbstractAssetFileFilter | |
* @throws \InvalidArgumentException | |
*/ | |
public function cacheFilteredAssetFileContent(\AssetsBundle\AssetFile\AssetFile $oAssetFile, $sFilteredContent) | |
{ | |
if (is_string($sFilteredContent)) { | |
$sCachedFilteredContentFilePath = $this->getCachedFilteredContentFilePath($oAssetFile); | |
$bFileExists = file_exists($sCachedFilteredContentFilePath); | |
\Zend\Stdlib\ErrorHandler::start(); | |
file_put_contents($sCachedFilteredContentFilePath, $sFilteredContent); | |
\Zend\Stdlib\ErrorHandler::stop(true); | |
if (!$bFileExists) { | |
\Zend\Stdlib\ErrorHandler::start(); | |
chmod($sCachedFilteredContentFilePath, $this->getOptions()->getFilesPermissions()); | |
\Zend\Stdlib\ErrorHandler::stop(true); | |
} | |
return $this; | |
} | |
throw new \InvalidArgumentException('Filtered content expects string, "' . gettype($sFilteredContent) . '" given'); | |
} | |
/** | |
* @return string | |
*/ | |
public function getAssetFileFilterProcessedDirPath() | |
{ | |
if (!is_dir($this->assetFileFilterProcessedDirPath)) { | |
$this->assetFileFilterProcessedDirPath = $this->getOptions()->getProcessedDirPath() . DIRECTORY_SEPARATOR . strtolower(str_replace( | |
array('/', '<', '>', '?', '*', '"', '|'), '_', $this->getAssetFileFilterName() | |
)); | |
if (!is_dir($this->assetFileFilterProcessedDirPath)) { | |
\Zend\Stdlib\ErrorHandler::start(); | |
mkdir($this->assetFileFilterProcessedDirPath, $this->getOptions()->getDirectoriesPermissions()); | |
\Zend\Stdlib\ErrorHandler::stop(true); | |
} | |
} | |
return $this->assetFileFilterProcessedDirPath; | |
} | |
} |