sourceContentType = $miscParams['image_type']; unset($miscParams['image_type']); } else { $this->sourceContentType = $this->contentType; } $this->mediaConfig = $mediaConfig; $this->context = $context; $this->filePath = $filePath; $this->miscParams = $miscParams; $this->encryptor = $encryptor; } /** * {@inheritdoc} */ public function getUrl() { return $this->context->getBaseUrl() . DIRECTORY_SEPARATOR . $this->getImageInfo(); } /** * {@inheritdoc} */ public function getContentType() { return $this->contentType; } /** * {@inheritdoc} */ public function getPath() { return $this->context->getPath() . DIRECTORY_SEPARATOR . $this->getImageInfo(); } /** * {@inheritdoc} */ public function getSourceFile() { return $this->mediaConfig->getBaseMediaPath() . DIRECTORY_SEPARATOR . ltrim($this->getFilePath(), DIRECTORY_SEPARATOR); } /** * Get source content type * * @return string */ public function getSourceContentType() { return $this->sourceContentType; } /** * {@inheritdoc} */ public function getContent() { return null; } /** * {@inheritdoc} */ public function getFilePath() { return $this->filePath; } /** * {@inheritdoc} * @return ContextInterface */ public function getContext() { return $this->context; } /** * {@inheritdoc} */ public function getModule() { return 'cache'; } /** * Retrieve part of path based on misc params * * @return string */ private function getMiscPath() { return $this->encryptor->hash( implode('_', $this->convertToReadableFormat($this->miscParams)), Encryptor::HASH_VERSION_MD5 ); } /** * Generate path from image info * * @return string */ private function getImageInfo() { $path = $this->getModule() . DIRECTORY_SEPARATOR . $this->getMiscPath() . DIRECTORY_SEPARATOR . $this->getFilePath(); return preg_replace('|\Q'. DIRECTORY_SEPARATOR . '\E+|', DIRECTORY_SEPARATOR, $path); } /** * Converting bool into a string representation * @param $miscParams * @return array */ private function convertToReadableFormat($miscParams) { $miscParams['image_height'] = 'h:' . ($miscParams['image_height'] ?? 'empty'); $miscParams['image_width'] = 'w:' . ($miscParams['image_width'] ?? 'empty'); $miscParams['quality'] = 'q:' . ($miscParams['quality'] ?? 'empty'); $miscParams['angle'] = 'r:' . ($miscParams['angle'] ?? 'empty'); $miscParams['keep_aspect_ratio'] = (isset($miscParams['keep_aspect_ratio']) ? '' : 'non') . 'proportional'; $miscParams['keep_frame'] = (isset($miscParams['keep_frame']) ? '' : 'no') . 'frame'; $miscParams['keep_transparency'] = (isset($miscParams['keep_transparency']) ? '' : 'no') . 'transparency'; $miscParams['constrain_only'] = (isset($miscParams['constrain_only']) ? 'do' : 'not') . 'constrainonly'; $miscParams['background'] = isset($miscParams['background']) ? 'rgb' . implode(',', $miscParams['background']) : 'nobackground'; return $miscParams; } }