2018-07-02 03:54:18 +02:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Created by PhpStorm.
|
|
|
|
* User: tony
|
|
|
|
* Date: 6/24/18
|
|
|
|
* Time: 1:46 AM
|
|
|
|
*/
|
|
|
|
|
|
|
|
namespace Site\Extensions;
|
|
|
|
|
|
|
|
use Dynamic\Elements\Image\Elements\ElementImage;
|
|
|
|
use Sheadawson\Linkable\Forms\LinkField;
|
|
|
|
use Sheadawson\Linkable\Models\Link;
|
|
|
|
use SilverStripe\Core\Config\Config;
|
2019-09-07 03:39:49 +02:00
|
|
|
use SilverStripe\Forms\CheckboxField;
|
2018-07-02 03:54:18 +02:00
|
|
|
use SilverStripe\Forms\DropdownField;
|
|
|
|
use SilverStripe\Forms\FieldList;
|
|
|
|
use SilverStripe\ORM\DataExtension;
|
|
|
|
|
|
|
|
class ElementImageWidget extends DataExtension
|
|
|
|
{
|
|
|
|
private static $available_heights = [
|
|
|
|
'300' => 'Small (300px)',
|
|
|
|
'400' => 'Medium (400px)',
|
|
|
|
'600' => 'Big (600px)',
|
|
|
|
];
|
|
|
|
|
|
|
|
private static $db = [
|
2019-09-07 03:39:49 +02:00
|
|
|
'Resize' => 'Boolean(1)',
|
2018-07-02 03:54:18 +02:00
|
|
|
'ImageHeight' => 'Float',
|
|
|
|
'Content' => 'HTMLText',
|
|
|
|
];
|
|
|
|
|
|
|
|
private static $has_one = [
|
|
|
|
'ImageLink' => Link::class,
|
|
|
|
];
|
|
|
|
|
|
|
|
public function updateCMSFields(FieldList $fields)
|
|
|
|
{
|
|
|
|
parent::updateCMSFields($fields);
|
|
|
|
|
|
|
|
$fields->insertBefore(
|
|
|
|
'Image',
|
|
|
|
LinkField::create('ImageLinkID', 'Link')
|
|
|
|
);
|
|
|
|
|
|
|
|
$this->owner->ImageHeight = $this->getHeight();
|
|
|
|
|
|
|
|
$heights = Config::inst()->get(__CLASS__, 'available_heights');
|
2019-09-07 03:39:49 +02:00
|
|
|
|
|
|
|
$fields->replaceField('Resize', CheckboxField::create(
|
|
|
|
'Resize',
|
|
|
|
'Would you like to scale image?'
|
|
|
|
));
|
|
|
|
|
2018-07-02 03:54:18 +02:00
|
|
|
if (count($heights)) {
|
|
|
|
$fields->replaceField(
|
|
|
|
'ImageHeight',
|
|
|
|
DropdownField::create(
|
|
|
|
'ImageHeight',
|
|
|
|
'Image Height',
|
|
|
|
$heights,
|
|
|
|
$this->getHeight()
|
2019-09-07 03:39:49 +02:00
|
|
|
)
|
|
|
|
->setEmptyString('(unspecified)')
|
|
|
|
->displayIf('Resize')->isChecked()->end()
|
2018-07-02 03:54:18 +02:00
|
|
|
);
|
|
|
|
} else {
|
|
|
|
$fields->dataFieldByName('ImageHeight')
|
|
|
|
->setValue($this->getHeight());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function ImageResized()
|
|
|
|
{
|
|
|
|
$image = $this->owner->Image();
|
2019-09-07 03:39:49 +02:00
|
|
|
|
|
|
|
if (!$this->owner->Resize) {
|
|
|
|
return $image;
|
|
|
|
}
|
|
|
|
|
2018-07-02 03:54:18 +02:00
|
|
|
$width = $this->getWidth();
|
|
|
|
$height = $this->getHeight();
|
|
|
|
|
|
|
|
if (!$width) {
|
|
|
|
return $height > 0
|
|
|
|
? $image->ScaleHeight($height)
|
|
|
|
: $image;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $height > 0
|
|
|
|
? $image->Fill($width, $height)
|
|
|
|
: $image->ScaleWidth($width);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getWidth()
|
|
|
|
{
|
2019-05-23 13:02:32 +02:00
|
|
|
return $this->owner->getColumnWidthRecursive();
|
2018-07-02 03:54:18 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public function getHeight()
|
|
|
|
{
|
|
|
|
$height = $this->owner->getField('ImageHeight');
|
|
|
|
if ($height > 0) {
|
|
|
|
return $height;
|
|
|
|
}
|
|
|
|
|
|
|
|
$sibling = $this->owner->getSibling(false, [
|
|
|
|
'ImageHeight:GreaterThan' => '0'
|
|
|
|
]);
|
|
|
|
|
|
|
|
if ($sibling && $sibling->getField('ImageHeight')) {
|
|
|
|
return $sibling->getField('ImageHeight');
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|