197 lines
5.0 KiB
PHP
197 lines
5.0 KiB
PHP
|
<?php
|
||
|
|
||
|
/*
|
||
|
* This file is part of the package thucke/th-rating.
|
||
|
*
|
||
|
* For the full copyright and license information, please read the
|
||
|
* LICENSE file that was distributed with this source code.
|
||
|
*/
|
||
|
|
||
|
namespace WapplerSystems\BookmarksLikesRatings\Domain\Model;
|
||
|
|
||
|
use TYPO3\CMS\Core\Core\Environment;
|
||
|
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||
|
use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;
|
||
|
use TYPO3\CMS\Frontend\Imaging\GifBuilder;
|
||
|
|
||
|
/**
|
||
|
* Model for rating votes
|
||
|
*
|
||
|
* @copyright Copyright belongs to the respective authors
|
||
|
* @license http://opensource.org/licenses/gpl-license.php GNU Public License, version 2
|
||
|
* @entity
|
||
|
*/
|
||
|
class RatingImage extends AbstractEntity
|
||
|
{
|
||
|
/**
|
||
|
* @var bool
|
||
|
*/
|
||
|
protected $isBuilderObject = false;
|
||
|
/**
|
||
|
* The filename of the final image
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
protected $imageFile;
|
||
|
/**
|
||
|
* The typoscript image configuration array
|
||
|
* Only the top level node ['GIFBUILDER'] will be used for building the image
|
||
|
*
|
||
|
* @var array
|
||
|
*/
|
||
|
protected $conf;
|
||
|
/**
|
||
|
* @var GifBuilder
|
||
|
*/
|
||
|
protected $gifBuilder;
|
||
|
|
||
|
/**
|
||
|
* @param GifBuilder $gifBuilder
|
||
|
*/
|
||
|
public function injectGifBuilder(GifBuilder $gifBuilder)
|
||
|
{
|
||
|
$this->gifBuilder = $gifBuilder;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Constructs a new image object
|
||
|
*
|
||
|
* @param mixed $conf either an array consisting of GIFBUILDER typoscript or a plain string having the filename
|
||
|
*/
|
||
|
public function __construct($conf = null)
|
||
|
{
|
||
|
$this->initializeObject();
|
||
|
if (!empty($conf)) {
|
||
|
$this->setConf($conf);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Initializes the new vote object
|
||
|
*/
|
||
|
public function initializeObject()
|
||
|
{
|
||
|
if (empty($this->gifBuilder)) {
|
||
|
$this->injectGifBuilder(GeneralUtility::makeInstance(GifBuilder::class));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Sets the typoscript configuration for the GIFBUILDER object
|
||
|
*
|
||
|
* @param mixed $conf either an array consisting of GIFBUILDER typoscript or a plain string having the filename
|
||
|
*/
|
||
|
public function setConf($conf)
|
||
|
{
|
||
|
switch (gettype($conf)) {
|
||
|
case 'string':
|
||
|
$this->setImageFile($conf);
|
||
|
break;
|
||
|
case 'array':
|
||
|
$this->conf = $conf;
|
||
|
$this->generateImage();
|
||
|
break;
|
||
|
default:
|
||
|
//TODO: Error message
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the current typoscript configuration of the GIFBUILDER object
|
||
|
*
|
||
|
* @return array
|
||
|
*/
|
||
|
public function getConf(): array
|
||
|
{
|
||
|
if (empty($this->conf)) {
|
||
|
return [];
|
||
|
}
|
||
|
|
||
|
return $this->conf;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Sets the filename of the image
|
||
|
*
|
||
|
* @param string $imageFile
|
||
|
*/
|
||
|
public function setImageFile($imageFile)
|
||
|
{
|
||
|
$fullImagePath = Environment::getPublicPath() . '/' . $imageFile;
|
||
|
if (file_exists($fullImagePath)) {
|
||
|
$this->imageFile = $imageFile;
|
||
|
$this->isBuilderObject = false;
|
||
|
} else {
|
||
|
//clear path if given file is invalid
|
||
|
unset($this->imageFile, $this->isBuilderObject);
|
||
|
//TODO: error handling
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the filename of the image
|
||
|
*
|
||
|
* @param mixed $fullPath
|
||
|
* @return string
|
||
|
*/
|
||
|
public function getImageFile($fullPath = false)
|
||
|
{
|
||
|
$checkedFile = $this->gifBuilder->checkFile($this->imageFile);
|
||
|
if (empty($checkedFile)) {
|
||
|
//clear image if file doe not exist
|
||
|
$this->setImageFile('xxx');
|
||
|
}
|
||
|
return $fullPath ? Environment::getPublicPath() . '/' . $this->imageFile : $this->imageFile;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Generates the image using the given typoscript
|
||
|
*
|
||
|
* @return bool The result; true if the given the image has been created successfully; otherwise false
|
||
|
*/
|
||
|
public function generateImage()
|
||
|
{
|
||
|
if (!empty($this->conf)) {
|
||
|
$this->gifBuilder->start($this->getConf(), []);
|
||
|
$genImageFile = $this->gifBuilder->gifBuild();
|
||
|
if (!file_exists($genImageFile)) {
|
||
|
//TODO: error handling
|
||
|
return false;
|
||
|
}
|
||
|
$this->setImageFile($genImageFile);
|
||
|
$this->isBuilderObject = true;
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the filename of the image
|
||
|
*
|
||
|
* @var bool switch if absolute path should be returned
|
||
|
* @return array('width','height')
|
||
|
*/
|
||
|
public function getImageDimensions()
|
||
|
{
|
||
|
if ($this->isBuilderObject) {
|
||
|
[$width, $height] = $this->gifBuilder->getImageDimensions($this->imageFile);
|
||
|
} else {
|
||
|
[$width, $height] = getimagesize($this->getImageFile(true));
|
||
|
}
|
||
|
|
||
|
return ['width' => $width, 'height' => $height, 'builderObject' => $this->isBuilderObject];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Method to use Object as plain string
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public function __toString()
|
||
|
{
|
||
|
return $this->imageFile;
|
||
|
}
|
||
|
}
|