openrat-cms

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

FileGenerator.class.php (3287B)


      1 <?php
      2 
      3 
      4 namespace cms\generator;
      5 
      6 
      7 use cms\generator\filter\AbstractFilter;
      8 use cms\model\File;
      9 use cms\model\Value;
     10 use logger\Logger;
     11 use util\exception\GeneratorException;
     12 
     13 class FileGenerator extends BaseGenerator
     14 {
     15 
     16 
     17 	public function __construct($fileContext )
     18 	{
     19 		$this->context = $fileContext;
     20 	}
     21 
     22 	protected function generate()
     23 	{
     24 		$file = new File( $this->context->sourceObjectId );
     25 		$file->load();
     26 		return $this->filterValue( $file );
     27 	}
     28 
     29 	public function getPublicFilename()
     30 	{
     31 		$file = new File( $this->context->sourceObjectId );
     32 		$file->load();
     33 
     34 		$filename = $file->filename();
     35 
     36 		if   ( $file->extension )
     37 			$filename .= '.'.$file->extension;
     38 
     39 		return $file->path().'/'.$filename;
     40 	}
     41 
     42 
     43 	/**
     44 	 * @param $file File
     45 	 * @return string
     46 	 */
     47 	protected function filterValue( $file )
     48 	{
     49 		$contentId = $file->contentid;
     50 
     51 		$totalSettings = $file->getTotalSettings();
     52 		$proxyFileId = @$totalSettings['proxy-file-id'];
     53 
     54 		if   ( $proxyFileId ) {
     55 			$proxyFile = new File( $proxyFileId ); // This is a proxy for another file.
     56 			$proxyFile->load();
     57 			$contentId = $proxyFile->contentid;
     58 		}
     59 
     60 		$v = new Value();
     61 		$v->contentid = $contentId;
     62 
     63 		if    ( $this->context->scheme == Producer::SCHEME_PREVIEW )
     64 			$v->load();
     65 		else
     66 			$v->loadPublished();
     67 
     68 		$value = $v->file;
     69 
     70 		foreach(\util\ArrayUtils::getSubArray($totalSettings, array( 'filter')) as $filterEntry )
     71 		{
     72 			$filterName = ucfirst(@$filterEntry['name']);
     73 			$extension  = @$filterEntry['extension'];
     74 
     75 			if   ( $extension && strtolower($extension) != strtolower($file->getRealExtension()) )
     76 				continue; // File extension does not match
     77 
     78 			$filterType = $this->context->scheme==Producer::SCHEME_PUBLIC?'public':'preview';
     79 
     80 			$onPublish = (array) @$filterEntry['on'];
     81 			if ( ! $onPublish || in_array('all',$onPublish ) )
     82 				$onPublish = ['edit','public','preview','show'];
     83 
     84 			if   ( $onPublish && ! in_array($filterType,$onPublish))
     85 				continue; // Publish type does not match
     86 
     87 			$parameter = (array) @$filterEntry['parameter'];
     88 
     89 			$filterClassNameWithNS = 'cms\\generator\\filter\\' . $filterName.'Filter';
     90 
     91 			if   ( !class_exists( $filterClassNameWithNS ) )
     92 				throw new \LogicException("Filter '$filterName' does not exist.");
     93 
     94 			/** @var AbstractFilter $filter */
     95 			$filter = new $filterClassNameWithNS();
     96 			$filter->context = $this->context;
     97 
     98 			// Copy filter configuration to filter instance.
     99 			foreach( $parameter as $parameterName=>$parameterValue) {
    100 				if   ( property_exists($filter,$parameterName))
    101 					$filter->$parameterName = $parameterValue;
    102 			}
    103 
    104 
    105 			// Execute the filter.
    106 			Logger::debug("Filtering '$file->filename' with filter '$filterName'.");
    107 
    108 			try {
    109 
    110 				$value = $filter->filter( $value );
    111 			} catch( \Exception $e ) {
    112 				// Filter has some undefined error.
    113 				Logger::warn( $e->getTraceAsString() );
    114 				throw new GeneratorException('Could not generate file '.$file->objectid.'. Filter '.$filterName.' has an error.', $e );
    115 			}
    116 		}
    117 
    118 		return $value;
    119 
    120 	}
    121 
    122 
    123 	/**
    124 	 * Calculates the MIME type of this file.
    125 	 *
    126 	 * @return string
    127 	 */
    128 	public function getMimeType()
    129 	{
    130 		$file = new File( $this->context->sourceObjectId );
    131 		$file->load();
    132 		$ext = strtolower( $file->getRealExtension() );
    133 
    134 		$mimeType = File::getMimeType( $ext );
    135 
    136 		return( $mimeType );
    137 	}
    138 }