1
1
<?php
2
2
3
- namespace Webmaxsk \Model \ ObjectImagesExtension ;
3
+ namespace Webmaxsk \MaxImages ;
4
4
5
+ use ReflectionClass ;
5
6
use SilverStripe \ORM \DataExtension ;
7
+ use SilverStripe \Forms \FieldList ;
6
8
use SilverStripe \Assets \Image ;
7
9
use SilverStripe \Forms \DropdownField ;
8
- use SilverStripe \Forms \FieldList ;
9
- use SilverStripe \Forms \LiteralField ;
10
+ use SilverStripe \AssetAdmin \Forms \UploadField ;
10
11
use Bummzack \SortableFile \Forms \SortableUploadField ;
11
12
12
-
13
13
class ObjectImagesExtension extends DataExtension {
14
14
15
- private static $ allow_images = true ;
15
+ private static $ images = [
16
+ 'enabled ' => true ,
17
+ 'count ' => 20 ,
18
+ ];
16
19
17
- private static $ db = array (
20
+ private static $ db = [
18
21
'Sorter ' => 'Enum("SortOrder, Title, Name, ID") '
19
- ) ;
22
+ ] ;
20
23
21
- private static $ many_many = array (
24
+ private static $ many_many = [
22
25
'Images ' => Image::class
23
- );
24
-
25
- private static $ owns = [
26
- 'Images '
27
26
];
28
27
29
28
private static $ many_many_extraFields = [
30
29
'Images ' => ['SortOrder ' => 'Int ' ]
31
30
];
32
31
32
+ private static $ owns = [
33
+ 'Images '
34
+ ];
35
+
33
36
public function updateCMSFields (FieldList $ fields ) {
34
- // Use SortableUploadField instead of UploadField!
35
37
$ imagesTab = $ fields ->findOrMakeTab ('Root.Images ' );
36
38
37
- $ owner = $ this ->owner ;
38
- if ( $ owner:: config ()-> allow_images ) {
39
+ if ( $ this ->owner -> getImagesOption ( ' enabled ' )) {
40
+ $ limit = $ this -> owner -> getImagesOption ( ' count ' );
39
41
40
- $ imageField = SortableUploadField:: create ( ' Images ' ) ;
42
+ $ uploadClass = ( $ this -> owner -> Sorter == ' SortOrder ' ) ? SortableUploadField::class : UploadField::class ;
41
43
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 );
44
47
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
+ );
52
66
}
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 ));
58
67
59
68
$ fields ->addFieldToTab ('Root.Images ' , $ imageField );
60
69
}
61
- else
70
+ else {
71
+ $ fields ->removeByName ('Sorter ' );
62
72
$ fields ->removeByName ($ imagesTab ->Name );
73
+ }
63
74
}
64
75
65
76
public function SortedImages () {
@@ -69,6 +80,36 @@ public function SortedImages() {
69
80
public function MainImage () {
70
81
return $ this ->owner ->Images ()->Sort ($ this ->owner ->Sorter )->limit (1 )->First ();
71
82
}
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
+ }
72
113
}
73
114
74
115
// EOF
0 commit comments