Skip to content

Commit 7f172ad

Browse files
author
Rastislav Brandobur
committed
tuning ss4 version
1 parent 1264273 commit 7f172ad

File tree

7 files changed

+99
-58
lines changed

7 files changed

+99
-58
lines changed

README.md

+11-9
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
11
# maximages
2-
Images for any data object
2+
Images for any data object
33

44
## Installation
55
```bash
66
composer require "webmaxsk/maximages:*"
77
```
88

9-
You can add images to any Page via CMS. You can disable images for any Page subclass by adding config to mysite/_config.php:
9+
You can add images to any Page via CMS. You can disable images for any Page subclass by adding config to _config/config.yml:
1010
```php
11-
Blog::config()->allow_images = false;
12-
Calendar::config()->allow_images = false;
13-
CalendarEvent::config()->allow_images = false;
14-
ErrorPage::config()->allow_images = false;
15-
RedirectorPage::config()->allow_images = false;
16-
UserDefinedForm::config()->allow_images = false;
17-
VirtualPage::config()->allow_images = false;
11+
SilverStripe\ErrorPage\ErrorPage:
12+
images:
13+
enabled: false
14+
SilverStripe\CMS\Model\VirtualPage:
15+
images:
16+
enabled: false
17+
SilverStripe\CMS\Model\RedirectorPage:
18+
images:
19+
enabled: false
1820
```
1921

2022
You can add images to any DataObject too, just extend DataObject with ObjectImagesExtension.

_config/extensions.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
2-
Name: maximages-extensions
2+
Name: maximages_extensions
33
---
44
Page:
55
extensions:
6-
- Webmaxsk\Model\ObjectImagesExtension\ObjectImagesExtension
6+
- Webmaxsk\Maximages\ObjectImagesExtension

composer.json

+14-15
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
2-
"name": "webmaxsk/maximages",
3-
"description": "Simple image gallery for any dataobject",
4-
"type": "silverstripe-module",
5-
"license": "BSD-3-Clause",
6-
"keywords": ["silverstripe", "gallery", "photos", "images"],
7-
"authors": [
2+
"name": "webmaxsk/maximages",
3+
"description": "Simple image gallery for any dataobject",
4+
"type": "silverstripe-module",
5+
"license": "BSD-3-Clause",
6+
"keywords": ["silverstripe", "gallery", "photos", "images"],
7+
"authors": [
88
{
99
"name": "Pali Ondras",
1010
"email": "[email protected]"
@@ -13,14 +13,13 @@
1313
"name": "Rastislav Brandobur",
1414
"email": "[email protected]"
1515
}
16-
],
17-
"require":
18-
{
19-
"silverstripe/framework": "^4.1",
16+
],
17+
"require": {
18+
"silverstripe/framework": "^4.0",
2019
"bummzack/sortablefile": "^2.0"
21-
},
22-
"suggest": {
23-
"heyday/silverstripe-optimisedimage": "*",
24-
"jonom/focuspoint": "*"
25-
}
20+
},
21+
"suggest": {
22+
"heyday/silverstripe-optimisedimage": "*",
23+
"jonom/focuspoint": "*"
24+
}
2625
}

lang/sk.yml

-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ sk:
44
IMAGESSORTERNOTICE: "Ak sa obrázky zoraďujú podľa 'Title' alebo 'ID', tak korektné usporiadanie je viditeľné iba na FrontEnde."
55
IMAGESTAB: Obrázky
66
IMAGESUPLOADHEADING: "<span style='color: green'>Obrázky môžete preusporiadať ťahaním miniatúr. Pozn.: Stránku následne netreba ukladať.</span>"
7-
IMAGESUPLOADHEADINGWRONG: "<span style='color: red'>Zoradenie obrázkov ťahaním miniatúr (SortOrder) nie je povolené. Chýba modul SortableUploadField.</span>"
87
IMAGESUPLOADLABEL: Obrázky
98
IMAGESUPLOADLIMIT: 'Max. počet obrázkov: %s'
109
IMAGETAB: Obrázok

src/ObjectImagesExtension.php

+72-31
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,76 @@
11
<?php
22

3-
namespace Webmaxsk\Model\ObjectImagesExtension;
3+
namespace Webmaxsk\MaxImages;
44

5+
use ReflectionClass;
56
use SilverStripe\ORM\DataExtension;
7+
use SilverStripe\Forms\FieldList;
68
use SilverStripe\Assets\Image;
79
use SilverStripe\Forms\DropdownField;
8-
use SilverStripe\Forms\FieldList;
9-
use SilverStripe\Forms\LiteralField;
10+
use SilverStripe\AssetAdmin\Forms\UploadField;
1011
use Bummzack\SortableFile\Forms\SortableUploadField;
1112

12-
1313
class ObjectImagesExtension extends DataExtension {
1414

15-
private static $allow_images = true;
15+
private static $images = [
16+
'enabled' => true,
17+
'count' => 20,
18+
];
1619

17-
private static $db = array(
20+
private static $db = [
1821
'Sorter' => 'Enum("SortOrder, Title, Name, ID")'
19-
);
22+
];
2023

21-
private static $many_many = array(
24+
private static $many_many = [
2225
'Images' => Image::class
23-
);
24-
25-
private static $owns = [
26-
'Images'
2726
];
2827

2928
private static $many_many_extraFields = [
3029
'Images' => ['SortOrder' => 'Int']
3130
];
3231

32+
private static $owns = [
33+
'Images'
34+
];
35+
3336
public function updateCMSFields(FieldList $fields) {
34-
// Use SortableUploadField instead of UploadField!
3537
$imagesTab = $fields->findOrMakeTab('Root.Images');
3638

37-
$owner = $this->owner;
38-
if ($owner::config()->allow_images) {
39+
if ($this->owner->getImagesOption('enabled')) {
40+
$limit = $this->owner->getImagesOption('count');
3941

40-
$imageField = SortableUploadField::create('Images');
42+
$uploadClass = ($this->owner->Sorter == 'SortOrder') ? SortableUploadField::class : UploadField::class;
4143

42-
$imageField->setFolderName('Uploads/'.$this->owner->ClassName.'/'.$this->owner->ID);
43-
$imageField->getValidator()->setAllowedExtensions(array('jpg', 'jpeg', 'png', 'gif'));
44+
$imageField = $uploadClass::create('Images');
45+
$imageField->setAllowedMaxFileNumber($limit);
46+
$imageField->setFolderName('Uploads/' . (new ReflectionClass($this->owner))->getShortName() . '/' . $this->owner->ID);
4447

45-
$imagesTab->setTitle(_t("Object.IMAGESTAB", "Images"));
46-
$imageField->setTitle(_t("Object.IMAGESUPLOADLABEL", "Images"));
47-
48-
if ($this->owner->Sorter == "SortOrder") {
49-
$message = _t("Object.IMAGESUPLOADHEADING", "<span style='color: green'>Sort images by draging thumbnail</span>");
50-
} else {
51-
$message = _t("Object.IMAGESSORTERNOTICE", "Correct image sorting is visible on frontend only (if Sort by = Title, ID)");
48+
if ($limit == 1) {
49+
$imagesTab->setTitle(_t('Object.IMAGETAB', 'Images'));
50+
$imageField->setTitle(_t('Object.IMAGEUPLOADLABEL', 'Image'));
51+
}
52+
else {
53+
$imagesTab->setTitle(_t('Object.IMAGESTAB', 'Images'));
54+
$imageField->setTitle(_t('Object.IMAGESUPLOADLABEL', 'Images'));
55+
$imageField->setDescription(sprintf(_t('Object.IMAGESUPLOADLIMIT','Images count limit: %s'), $limit));
56+
57+
if ($this->owner->Sorter == 'SortOrder')
58+
$message = _t('Object.IMAGESUPLOADHEADING', '<span style="color: green">Sort images by draging thumbnail</span>');
59+
else
60+
$message = _t('Object.IMAGESSORTERNOTICE', 'Correct image sorting is visible on frontend only (if Sort by = Title, ID)');
61+
62+
$fields->addFieldToTab('Root.Images',
63+
DropdownField::create('Sorter', _t('Object.IMAGESSORTER', 'Sort images by: '))->setSource($this->owner->dbObject('Sorter')->enumValues())
64+
->setDescription($message)
65+
);
5266
}
53-
54-
$dropdownSorter = DropdownField::create('Sorter', _t("Object.IMAGESSORTER", "Sort images by: "))->setSource($this->owner->dbObject('Sorter')->enumValues());
55-
$fields->addFieldToTab('Root.Images', $dropdownSorter);
56-
57-
$fields->addFieldToTab('Root.Images', LiteralField::create('ImagesNotice', $message));
5867

5968
$fields->addFieldToTab('Root.Images', $imageField);
6069
}
61-
else
70+
else {
71+
$fields->removeByName('Sorter');
6272
$fields->removeByName($imagesTab->Name);
73+
}
6374
}
6475

6576
public function SortedImages() {
@@ -69,6 +80,36 @@ public function SortedImages() {
6980
public function MainImage() {
7081
return $this->owner->Images()->Sort($this->owner->Sorter)->limit(1)->First();
7182
}
83+
84+
public function getImagesOption($key)
85+
{
86+
$settings = $this->getImagesOptions();
87+
$value = null;
88+
89+
if (isset($settings[$key])) {
90+
$value = $settings[$key];
91+
}
92+
93+
// To allow other extensions to customise this option
94+
if ($this->owner) {
95+
$this->owner->extend('updateImagesOption', $key, $value);
96+
}
97+
98+
return $value;
99+
}
100+
101+
public function getImagesOptions()
102+
{
103+
$settings = [];
104+
105+
if ($this->owner) {
106+
$settings = $this->owner->config()->get('images');
107+
} else {
108+
$settings = Config::inst()->get(__CLASS__, 'images');
109+
}
110+
111+
return $settings;
112+
}
72113
}
73114

74115
// EOF
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)