drg_elfinder 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +28 -0
- data/Rakefile +8 -0
- data/app/assets/config/drg_elfinder_manifest.js +1 -0
- data/app/assets/javascripts/drg_elfinder.js +15 -0
- data/app/assets/javascripts/elfinder/Changelog +1283 -0
- data/app/assets/javascripts/elfinder/LICENSE.md +15 -0
- data/app/assets/javascripts/elfinder/README.md +216 -0
- data/app/assets/javascripts/elfinder/bower.json +28 -0
- data/app/assets/javascripts/elfinder/composer.json +39 -0
- data/app/assets/javascripts/elfinder/css/elfinder.full.css +5350 -0
- data/app/assets/javascripts/elfinder/css/elfinder.min.css +9 -0
- data/app/assets/javascripts/elfinder/css/theme.css +430 -0
- data/app/assets/javascripts/elfinder/elfinder.html +74 -0
- data/app/assets/javascripts/elfinder/elfinder.legacy.html +94 -0
- data/app/assets/javascripts/elfinder/img/arrows-active.png +0 -0
- data/app/assets/javascripts/elfinder/img/arrows-normal.png +0 -0
- data/app/assets/javascripts/elfinder/img/crop.gif +0 -0
- data/app/assets/javascripts/elfinder/img/dialogs.png +0 -0
- data/app/assets/javascripts/elfinder/img/edit_aceeditor.png +0 -0
- data/app/assets/javascripts/elfinder/img/edit_ckeditor.png +0 -0
- data/app/assets/javascripts/elfinder/img/edit_ckeditor5.png +0 -0
- data/app/assets/javascripts/elfinder/img/edit_codemirror.png +0 -0
- data/app/assets/javascripts/elfinder/img/edit_creativecloud.png +0 -0
- data/app/assets/javascripts/elfinder/img/edit_onlineconvert.png +0 -0
- data/app/assets/javascripts/elfinder/img/edit_pixlreditor.png +0 -0
- data/app/assets/javascripts/elfinder/img/edit_pixlrexpress.png +0 -0
- data/app/assets/javascripts/elfinder/img/edit_simplemde.png +0 -0
- data/app/assets/javascripts/elfinder/img/edit_tinymce.png +0 -0
- data/app/assets/javascripts/elfinder/img/edit_tuiimgedit.png +0 -0
- data/app/assets/javascripts/elfinder/img/edit_zohooffice.png +0 -0
- data/app/assets/javascripts/elfinder/img/editor-icons.png +0 -0
- data/app/assets/javascripts/elfinder/img/icons-big.png +0 -0
- data/app/assets/javascripts/elfinder/img/icons-big.svg +1 -0
- data/app/assets/javascripts/elfinder/img/icons-small.png +0 -0
- data/app/assets/javascripts/elfinder/img/logo.png +0 -0
- data/app/assets/javascripts/elfinder/img/progress.gif +0 -0
- data/app/assets/javascripts/elfinder/img/quicklook-bg.png +0 -0
- data/app/assets/javascripts/elfinder/img/quicklook-icons.png +0 -0
- data/app/assets/javascripts/elfinder/img/resize.png +0 -0
- data/app/assets/javascripts/elfinder/img/spinner-mini.gif +0 -0
- data/app/assets/javascripts/elfinder/img/toolbar.png +0 -0
- data/app/assets/javascripts/elfinder/img/trashmesh.png +0 -0
- data/app/assets/javascripts/elfinder/img/tui-icon-a.svg +235 -0
- data/app/assets/javascripts/elfinder/img/tui-icon-b.svg +224 -0
- data/app/assets/javascripts/elfinder/img/tui-icon-c.svg +224 -0
- data/app/assets/javascripts/elfinder/img/tui-icon-d.svg +224 -0
- data/app/assets/javascripts/elfinder/img/ui-icons_ffffff_256x240.png +0 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_box.png +0 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_box.svg +1 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_dropbox.png +0 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_dropbox.svg +1 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_ftp.png +0 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_ftp.svg +1 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_googledrive.png +0 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_googledrive.svg +1 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_local.png +0 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_local.svg +1 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_network.png +0 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_network.svg +1 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_onedrive.png +0 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_onedrive.svg +1 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_sql.png +0 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_sql.svg +1 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_trash.png +0 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_trash.svg +1 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_zip.png +0 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_zip.svg +1 -0
- data/app/assets/javascripts/elfinder/js/elfinder.full.js +36019 -0
- data/app/assets/javascripts/elfinder/js/elfinder.min.js +25 -0
- data/app/assets/javascripts/elfinder/js/extras/editors.default.js +2643 -0
- data/app/assets/javascripts/elfinder/js/extras/editors.default.min.js +2 -0
- data/app/assets/javascripts/elfinder/js/extras/quicklook.googledocs.js +75 -0
- data/app/assets/javascripts/elfinder/js/extras/quicklook.googledocs.min.js +1 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.LANG.js +587 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.ar.js +580 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.bg.js +559 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.ca.js +375 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.cs.js +581 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.da.js +580 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.de.js +582 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.el.js +374 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.es.js +546 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.fa.js +580 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.fallback.js +11 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.fo.js +419 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.fr.js +578 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.fr_CA.js +580 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.he.js +375 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.hr.js +434 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.hu.js +580 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.id.js +498 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.it.js +552 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.ja.js +581 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.ko.js +582 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.nl.js +581 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.no.js +374 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.pl.js +580 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.pt_BR.js +580 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.ro.js +417 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.ru.js +582 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.si.js +537 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.sk.js +581 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.sl.js +374 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.sr.js +374 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.sv.js +375 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.tr.js +583 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.ug_CN.js +374 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.uk.js +580 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.vi.js +579 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.zh_CN.js +585 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.zh_TW.js +582 -0
- data/app/assets/javascripts/elfinder/js/i18n/help/cs.html.js +10 -0
- data/app/assets/javascripts/elfinder/js/i18n/help/de.html.js +15 -0
- data/app/assets/javascripts/elfinder/js/i18n/help/en.html.js +10 -0
- data/app/assets/javascripts/elfinder/js/i18n/help/es.html.js +10 -0
- data/app/assets/javascripts/elfinder/js/i18n/help/ja.html.js +10 -0
- data/app/assets/javascripts/elfinder/js/i18n/help/ko.html.js +10 -0
- data/app/assets/javascripts/elfinder/js/i18n/help/pl.html.js +10 -0
- data/app/assets/javascripts/elfinder/js/i18n/help/ru.html.js +10 -0
- data/app/assets/javascripts/elfinder/js/i18n/help/sk.html.js +10 -0
- data/app/assets/javascripts/elfinder/js/i18n/help/tr.html.js +10 -0
- data/app/assets/javascripts/elfinder/js/proxy/elFinderSupportVer1.js +408 -0
- data/app/assets/javascripts/elfinder/js/worker/calcfilehash.js +20 -0
- data/app/assets/javascripts/elfinder/js/worker/quicklook.tiff.js +7 -0
- data/app/assets/javascripts/elfinder/js/worker/quicklook.unzip.js +55 -0
- data/app/assets/javascripts/elfinder/main.default.js +175 -0
- data/app/assets/javascripts/elfinder/package.json +13 -0
- data/app/assets/javascripts/elfinder/php/MySQLStorage.sql +47 -0
- data/app/assets/javascripts/elfinder/php/autoload.php +56 -0
- data/app/assets/javascripts/elfinder/php/connector.maximal.php-dist +449 -0
- data/app/assets/javascripts/elfinder/php/connector.minimal.php-dist +180 -0
- data/app/assets/javascripts/elfinder/php/editors/OnlineConvert/editor.php +113 -0
- data/app/assets/javascripts/elfinder/php/editors/ZipArchive/editor.php +12 -0
- data/app/assets/javascripts/elfinder/php/editors/ZohoOffice/editor.php +206 -0
- data/app/assets/javascripts/elfinder/php/editors/editor.php +79 -0
- data/app/assets/javascripts/elfinder/php/elFinder.class.php +5401 -0
- data/app/assets/javascripts/elfinder/php/elFinderConnector.class.php +380 -0
- data/app/assets/javascripts/elfinder/php/elFinderFlysystemGoogleDriveNetmount.php +380 -0
- data/app/assets/javascripts/elfinder/php/elFinderPlugin.php +113 -0
- data/app/assets/javascripts/elfinder/php/elFinderSession.php +335 -0
- data/app/assets/javascripts/elfinder/php/elFinderSessionInterface.php +57 -0
- data/app/assets/javascripts/elfinder/php/elFinderVolumeBox.class.php +1972 -0
- data/app/assets/javascripts/elfinder/php/elFinderVolumeDriver.class.php +7651 -0
- data/app/assets/javascripts/elfinder/php/elFinderVolumeDropbox.class.php +1464 -0
- data/app/assets/javascripts/elfinder/php/elFinderVolumeDropbox2.class.php +1516 -0
- data/app/assets/javascripts/elfinder/php/elFinderVolumeFTP.class.php +1810 -0
- data/app/assets/javascripts/elfinder/php/elFinderVolumeGoogleDrive.class.php +2163 -0
- data/app/assets/javascripts/elfinder/php/elFinderVolumeGroup.class.php +315 -0
- data/app/assets/javascripts/elfinder/php/elFinderVolumeLocalFileSystem.class.php +1477 -0
- data/app/assets/javascripts/elfinder/php/elFinderVolumeMySQL.class.php +1022 -0
- data/app/assets/javascripts/elfinder/php/elFinderVolumeOneDrive.class.php +2131 -0
- data/app/assets/javascripts/elfinder/php/elFinderVolumeSFTPphpseclib.class.php +838 -0
- data/app/assets/javascripts/elfinder/php/elFinderVolumeTrash.class.php +51 -0
- data/app/assets/javascripts/elfinder/php/elFinderVolumeTrashMySQL.class.php +51 -0
- data/app/assets/javascripts/elfinder/php/libs/GdBmp.php +473 -0
- data/app/assets/javascripts/elfinder/php/mime.types +781 -0
- data/app/assets/javascripts/elfinder/php/plugins/AutoResize/plugin.php +151 -0
- data/app/assets/javascripts/elfinder/php/plugins/AutoRotate/plugin.php +148 -0
- data/app/assets/javascripts/elfinder/php/plugins/Normalizer/plugin.php +204 -0
- data/app/assets/javascripts/elfinder/php/plugins/Sanitizer/plugin.php +157 -0
- data/app/assets/javascripts/elfinder/php/plugins/Watermark/logo.png +0 -0
- data/app/assets/javascripts/elfinder/php/plugins/Watermark/plugin.php +432 -0
- data/app/assets/javascripts/elfinder/php/plugins/WinRemoveTailDots/plugin.php +114 -0
- data/app/assets/javascripts/elfinder/php/resources/image.png +0 -0
- data/app/assets/javascripts/elfinder/php/resources/video.png +0 -0
- data/app/assets/javascripts/elfinder/sounds/rm.wav +0 -0
- data/app/controllers/dc_elfinder_controller.rb +63 -0
- data/app/models/drgcms_form_fields/elfinder.rb +85 -0
- data/changelog.md +0 -0
- data/lib/drg_elfinder/engine.rb +5 -0
- data/lib/drg_elfinder/version.rb +3 -0
- data/lib/drg_elfinder.rb +9 -0
- data/lib/el_finder/action.rb +19 -0
- data/lib/el_finder/base64.rb +24 -0
- data/lib/el_finder/connector.rb +625 -0
- data/lib/el_finder/image.rb +33 -0
- data/lib/el_finder/mime_type.rb +86 -0
- data/lib/el_finder/pathname.rb +185 -0
- data/lib/el_finder/version.rb +5 -0
- data/lib/el_finder.rb +8 -0
- data/lib/patches/patch_for_elfinder.rb +115 -0
- data/lib/tasks/drg_elfinder_tasks.rake +10 -0
- metadata +245 -0
|
@@ -0,0 +1,432 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* elFinder Plugin Watermark
|
|
5
|
+
* Print watermark on file upload.
|
|
6
|
+
* ex. binding, configure on connector options
|
|
7
|
+
* $opts = array(
|
|
8
|
+
* 'bind' => array(
|
|
9
|
+
* 'upload.presave' => array(
|
|
10
|
+
* 'Plugin.Watermark.onUpLoadPreSave'
|
|
11
|
+
* )
|
|
12
|
+
* ),
|
|
13
|
+
* // global configure (optional)
|
|
14
|
+
* 'plugin' => array(
|
|
15
|
+
* 'Watermark' => array(
|
|
16
|
+
* 'enable' => true, // For control by volume driver
|
|
17
|
+
* 'source' => 'logo.png', // Path to Water mark image
|
|
18
|
+
* 'ratio' => 0.2, // Ratio to original image (ratio > 0 and ratio <= 1)
|
|
19
|
+
* 'position' => 'RB', // Position L(eft)/C(enter)/R(ight) and T(op)/M(edium)/B(ottom)
|
|
20
|
+
* 'marginX' => 5, // Margin horizontal pixel
|
|
21
|
+
* 'marginY' => 5, // Margin vertical pixel
|
|
22
|
+
* 'quality' => 95, // JPEG image save quality
|
|
23
|
+
* 'transparency' => 70, // Water mark image transparency ( other than PNG )
|
|
24
|
+
* 'targetType' => IMG_GIF|IMG_JPG|IMG_PNG|IMG_WBMP, // Target image formats ( bit-field )
|
|
25
|
+
* 'targetMinPixel' => 200, // Target image minimum pixel size
|
|
26
|
+
* 'interlace' => IMG_GIF|IMG_JPG, // Set interlacebit image formats ( bit-field )
|
|
27
|
+
* 'offDropWith' => null, // Enabled by default. To disable it if it is dropped with pressing the meta key
|
|
28
|
+
* // Alt: 8, Ctrl: 4, Meta: 2, Shift: 1 - sum of each value
|
|
29
|
+
* // In case of using any key, specify it as an array
|
|
30
|
+
* 'onDropWith' => null // Disabled by default. To enable it if it is dropped with pressing the meta key
|
|
31
|
+
* // Alt: 8, Ctrl: 4, Meta: 2, Shift: 1 - sum of each value
|
|
32
|
+
* // In case of using any key, specify it as an array
|
|
33
|
+
* )
|
|
34
|
+
* ),
|
|
35
|
+
* // each volume configure (optional)
|
|
36
|
+
* 'roots' => array(
|
|
37
|
+
* array(
|
|
38
|
+
* 'driver' => 'LocalFileSystem',
|
|
39
|
+
* 'path' => '/path/to/files/',
|
|
40
|
+
* 'URL' => 'http://localhost/to/files/'
|
|
41
|
+
* 'plugin' => array(
|
|
42
|
+
* 'Watermark' => array(
|
|
43
|
+
* 'enable' => true, // For control by volume driver
|
|
44
|
+
* 'source' => 'logo.png', // Path to Water mark image
|
|
45
|
+
* 'ratio' => 0.2, // Ratio to original image (ratio > 0 and ratio <= 1)
|
|
46
|
+
* 'position' => 'RB', // Position L(eft)/C(enter)/R(ight) and T(op)/M(edium)/B(ottom)
|
|
47
|
+
* 'marginX' => 5, // Margin horizontal pixel
|
|
48
|
+
* 'marginY' => 5, // Margin vertical pixel
|
|
49
|
+
* 'quality' => 95, // JPEG image save quality
|
|
50
|
+
* 'transparency' => 70, // Water mark image transparency ( other than PNG )
|
|
51
|
+
* 'targetType' => IMG_GIF|IMG_JPG|IMG_PNG|IMG_WBMP, // Target image formats ( bit-field )
|
|
52
|
+
* 'targetMinPixel' => 200, // Target image minimum pixel size
|
|
53
|
+
* 'interlace' => IMG_GIF|IMG_JPG, // Set interlacebit image formats ( bit-field )
|
|
54
|
+
* 'offDropWith' => null, // Enabled by default. To disable it if it is dropped with pressing the meta key
|
|
55
|
+
* // Alt: 8, Ctrl: 4, Meta: 2, Shift: 1 - sum of each value
|
|
56
|
+
* // In case of using any key, specify it as an array
|
|
57
|
+
* 'onDropWith' => null // Disabled by default. To enable it if it is dropped with pressing the meta key
|
|
58
|
+
* // Alt: 8, Ctrl: 4, Meta: 2, Shift: 1 - sum of each value
|
|
59
|
+
* // In case of using any key, specify it as an array
|
|
60
|
+
* )
|
|
61
|
+
* )
|
|
62
|
+
* )
|
|
63
|
+
* )
|
|
64
|
+
* );
|
|
65
|
+
*
|
|
66
|
+
* @package elfinder
|
|
67
|
+
* @author Naoki Sawada
|
|
68
|
+
* @license New BSD
|
|
69
|
+
*/
|
|
70
|
+
class elFinderPluginWatermark extends elFinderPlugin
|
|
71
|
+
{
|
|
72
|
+
|
|
73
|
+
private $watermarkImgInfo = null;
|
|
74
|
+
|
|
75
|
+
public function __construct($opts)
|
|
76
|
+
{
|
|
77
|
+
$defaults = array(
|
|
78
|
+
'enable' => true, // For control by volume driver
|
|
79
|
+
'source' => 'logo.png', // Path to Water mark image
|
|
80
|
+
'ratio' => 0.2, // Ratio to original image (ratio > 0 and ratio <= 1)
|
|
81
|
+
'position' => 'RB', // Position L(eft)/C(enter)/R(ight) and T(op)/M(edium)/B(ottom)
|
|
82
|
+
'marginX' => 5, // Margin horizontal pixel
|
|
83
|
+
'marginY' => 5, // Margin vertical pixel
|
|
84
|
+
'quality' => 95, // JPEG image save quality
|
|
85
|
+
'transparency' => 70, // Water mark image transparency ( other than PNG )
|
|
86
|
+
'targetType' => IMG_GIF | IMG_JPG | IMG_PNG | IMG_WBMP, // Target image formats ( bit-field )
|
|
87
|
+
'targetMinPixel' => 200, // Target image minimum pixel size
|
|
88
|
+
'interlace' => IMG_GIF | IMG_JPG, // Set interlacebit image formats ( bit-field )
|
|
89
|
+
'offDropWith' => null, // To disable it if it is dropped with pressing the meta key
|
|
90
|
+
// Alt: 8, Ctrl: 4, Meta: 2, Shift: 1 - sum of each value
|
|
91
|
+
// In case of using any key, specify it as an array
|
|
92
|
+
'marginRight' => 0, // Deprecated - marginX should be used
|
|
93
|
+
'marginBottom' => 0, // Deprecated - marginY should be used
|
|
94
|
+
'disableWithContentSaveId' => true // Disable on URL upload with post data "contentSaveId"
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
$this->opts = array_merge($defaults, $opts);
|
|
98
|
+
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
public function onUpLoadPreSave(&$thash, &$name, $src, $elfinder, $volume)
|
|
102
|
+
{
|
|
103
|
+
if (!$src) {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
$opts = $this->getCurrentOpts($volume);
|
|
108
|
+
|
|
109
|
+
if (!$this->iaEnabled($opts, $elfinder)) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
$imageType = null;
|
|
114
|
+
$srcImgInfo = null;
|
|
115
|
+
if (extension_loaded('fileinfo') && function_exists('mime_content_type')) {
|
|
116
|
+
$mime = mime_content_type($src);
|
|
117
|
+
if (substr($mime, 0, 5) !== 'image') {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
if (extension_loaded('exif') && function_exists('exif_imagetype')) {
|
|
122
|
+
$imageType = exif_imagetype($src);
|
|
123
|
+
if ($imageType === false) {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
} else {
|
|
127
|
+
$srcImgInfo = getimagesize($src);
|
|
128
|
+
if ($srcImgInfo === false) {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
$imageType = $srcImgInfo[2];
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// check target image type
|
|
135
|
+
$imgTypes = array(
|
|
136
|
+
IMAGETYPE_GIF => IMG_GIF,
|
|
137
|
+
IMAGETYPE_JPEG => IMG_JPEG,
|
|
138
|
+
IMAGETYPE_PNG => IMG_PNG,
|
|
139
|
+
IMAGETYPE_BMP => IMG_WBMP,
|
|
140
|
+
IMAGETYPE_WBMP => IMG_WBMP
|
|
141
|
+
);
|
|
142
|
+
if (!isset($imgTypes[$imageType]) || !($opts['targetType'] & $imgTypes[$imageType])) {
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// check Animation Gif
|
|
147
|
+
if ($imageType === IMAGETYPE_GIF && elFinder::isAnimationGif($src)) {
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
// check Animation Png
|
|
151
|
+
if ($imageType === IMAGETYPE_PNG && elFinder::isAnimationPng($src)) {
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
// check water mark image
|
|
155
|
+
if (!file_exists($opts['source'])) {
|
|
156
|
+
$opts['source'] = dirname(__FILE__) . "/" . $opts['source'];
|
|
157
|
+
}
|
|
158
|
+
if (is_readable($opts['source'])) {
|
|
159
|
+
$watermarkImgInfo = getimagesize($opts['source']);
|
|
160
|
+
if (!$watermarkImgInfo) {
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
} else {
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
if (!$srcImgInfo) {
|
|
168
|
+
$srcImgInfo = getimagesize($src);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
$watermark = $opts['source'];
|
|
172
|
+
$quality = $opts['quality'];
|
|
173
|
+
$transparency = $opts['transparency'];
|
|
174
|
+
|
|
175
|
+
// check target image size
|
|
176
|
+
if ($opts['targetMinPixel'] > 0 && $opts['targetMinPixel'] > min($srcImgInfo[0], $srcImgInfo[1])) {
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
$watermark_width = $watermarkImgInfo[0];
|
|
181
|
+
$watermark_height = $watermarkImgInfo[1];
|
|
182
|
+
|
|
183
|
+
// Specified as a ratio to the image size
|
|
184
|
+
if ($opts['ratio'] && $opts['ratio'] > 0 && $opts['ratio'] <= 1) {
|
|
185
|
+
$maxW = $srcImgInfo[0] * $opts['ratio'] - ($opts['marginX'] * 2);
|
|
186
|
+
$maxH = $srcImgInfo[1] * $opts['ratio'] - ($opts['marginY'] * 2);
|
|
187
|
+
$dx = $dy = 0;
|
|
188
|
+
if (($maxW >= $watermarkImgInfo[0] && $maxH >= $watermarkImgInfo[0]) || ($maxW <= $watermarkImgInfo[0] && $maxH <= $watermarkImgInfo[0])) {
|
|
189
|
+
$dx = abs($srcImgInfo[0] - $watermarkImgInfo[0]);
|
|
190
|
+
$dy = abs($srcImgInfo[1] - $watermarkImgInfo[1]);
|
|
191
|
+
} else if ($maxW < $watermarkImgInfo[0]) {
|
|
192
|
+
$dx = -1;
|
|
193
|
+
} else {
|
|
194
|
+
$dy = -1;
|
|
195
|
+
}
|
|
196
|
+
if ($dx < $dy) {
|
|
197
|
+
$ww = $maxW;
|
|
198
|
+
$wh = $watermarkImgInfo[1] * ($ww / $watermarkImgInfo[0]);
|
|
199
|
+
} else {
|
|
200
|
+
$wh = $maxH;
|
|
201
|
+
$ww = $watermarkImgInfo[0] * ($wh / $watermarkImgInfo[1]);
|
|
202
|
+
}
|
|
203
|
+
$watermarkImgInfo[0] = $ww;
|
|
204
|
+
$watermarkImgInfo[1] = $wh;
|
|
205
|
+
} else {
|
|
206
|
+
$opts['ratio'] = null;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
$opts['position'] = strtoupper($opts['position']);
|
|
210
|
+
|
|
211
|
+
// Set vertical position
|
|
212
|
+
if (strpos($opts['position'], 'T') !== false) {
|
|
213
|
+
// Top
|
|
214
|
+
$dest_x = $opts['marginX'];
|
|
215
|
+
} else if (strpos($opts['position'], 'M') !== false) {
|
|
216
|
+
// Middle
|
|
217
|
+
$dest_x = ($srcImgInfo[0] - $watermarkImgInfo[0]) / 2;
|
|
218
|
+
} else {
|
|
219
|
+
// Bottom
|
|
220
|
+
$dest_x = $srcImgInfo[0] - $watermarkImgInfo[0] - max($opts['marginBottom'], $opts['marginX']);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// Set horizontal position
|
|
224
|
+
if (strpos($opts['position'], 'L') !== false) {
|
|
225
|
+
// Left
|
|
226
|
+
$dest_y = $opts['marginY'];
|
|
227
|
+
} else if (strpos($opts['position'], 'C') !== false) {
|
|
228
|
+
// Middle
|
|
229
|
+
$dest_y = ($srcImgInfo[1] - $watermarkImgInfo[1]) / 2;
|
|
230
|
+
} else {
|
|
231
|
+
// Right
|
|
232
|
+
$dest_y = $srcImgInfo[1] - $watermarkImgInfo[1] - max($opts['marginRight'], $opts['marginY']);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
// check interlace
|
|
237
|
+
$opts['interlace'] = ($opts['interlace'] & $imgTypes[$imageType]);
|
|
238
|
+
|
|
239
|
+
// Repeated use of Imagick::compositeImage() may cause PHP to hang, so disable it
|
|
240
|
+
//if (class_exists('Imagick', false)) {
|
|
241
|
+
// return $this->watermarkPrint_imagick($src, $watermark, $dest_x, $dest_y, $quality, $transparency, $watermarkImgInfo, $opts);
|
|
242
|
+
//} else {
|
|
243
|
+
elFinder::expandMemoryForGD(array($watermarkImgInfo, $srcImgInfo));
|
|
244
|
+
return $this->watermarkPrint_gd($src, $watermark, $dest_x, $dest_y, $quality, $transparency, $watermarkImgInfo, $srcImgInfo, $opts);
|
|
245
|
+
//}
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
private function watermarkPrint_imagick($src, $watermarkSrc, $dest_x, $dest_y, $quality, $transparency, $watermarkImgInfo, $opts)
|
|
249
|
+
{
|
|
250
|
+
|
|
251
|
+
try {
|
|
252
|
+
|
|
253
|
+
// Open the original image
|
|
254
|
+
$img = new Imagick($src);
|
|
255
|
+
|
|
256
|
+
// Open the watermark
|
|
257
|
+
$watermark = new Imagick($watermarkSrc);
|
|
258
|
+
|
|
259
|
+
// zoom
|
|
260
|
+
if ($opts['ratio']) {
|
|
261
|
+
$watermark->scaleImage($watermarkImgInfo[0], $watermarkImgInfo[1]);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
// Set transparency
|
|
265
|
+
if (strtoupper($watermark->getImageFormat()) !== 'PNG') {
|
|
266
|
+
$watermark->setImageOpacity($transparency / 100);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// Overlay the watermark on the original image
|
|
270
|
+
$img->compositeImage($watermark, imagick::COMPOSITE_OVER, $dest_x, $dest_y);
|
|
271
|
+
|
|
272
|
+
// Set quality
|
|
273
|
+
if (strtoupper($img->getImageFormat()) === 'JPEG') {
|
|
274
|
+
$img->setImageCompression(imagick::COMPRESSION_JPEG);
|
|
275
|
+
$img->setCompressionQuality($quality);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
// set interlace
|
|
279
|
+
$opts['interlace'] && $img->setInterlaceScheme(Imagick::INTERLACE_PLANE);
|
|
280
|
+
|
|
281
|
+
$result = $img->writeImage($src);
|
|
282
|
+
|
|
283
|
+
$img->clear();
|
|
284
|
+
$img->destroy();
|
|
285
|
+
$watermark->clear();
|
|
286
|
+
$watermark->destroy();
|
|
287
|
+
|
|
288
|
+
return $result ? true : false;
|
|
289
|
+
} catch (Exception $e) {
|
|
290
|
+
$ermsg = $e->getMessage();
|
|
291
|
+
$ermsg && trigger_error($ermsg);
|
|
292
|
+
return false;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
private function watermarkPrint_gd($src, $watermark, $dest_x, $dest_y, $quality, $transparency, $watermarkImgInfo, $srcImgInfo, $opts)
|
|
297
|
+
{
|
|
298
|
+
|
|
299
|
+
$watermark_width = $watermarkImgInfo[0];
|
|
300
|
+
$watermark_height = $watermarkImgInfo[1];
|
|
301
|
+
|
|
302
|
+
$ermsg = '';
|
|
303
|
+
switch ($watermarkImgInfo['mime']) {
|
|
304
|
+
case 'image/gif':
|
|
305
|
+
if (imagetypes() & IMG_GIF) {
|
|
306
|
+
$oWatermarkImg = imagecreatefromgif($watermark);
|
|
307
|
+
} else {
|
|
308
|
+
$ermsg = 'GIF images are not supported as watermark image';
|
|
309
|
+
}
|
|
310
|
+
break;
|
|
311
|
+
case 'image/jpeg':
|
|
312
|
+
if (imagetypes() & IMG_JPG) {
|
|
313
|
+
$oWatermarkImg = imagecreatefromjpeg($watermark);
|
|
314
|
+
} else {
|
|
315
|
+
$ermsg = 'JPEG images are not supported as watermark image';
|
|
316
|
+
}
|
|
317
|
+
break;
|
|
318
|
+
case 'image/png':
|
|
319
|
+
if (imagetypes() & IMG_PNG) {
|
|
320
|
+
$oWatermarkImg = imagecreatefrompng($watermark);
|
|
321
|
+
} else {
|
|
322
|
+
$ermsg = 'PNG images are not supported as watermark image';
|
|
323
|
+
}
|
|
324
|
+
break;
|
|
325
|
+
case 'image/wbmp':
|
|
326
|
+
if (imagetypes() & IMG_WBMP) {
|
|
327
|
+
$oWatermarkImg = imagecreatefromwbmp($watermark);
|
|
328
|
+
} else {
|
|
329
|
+
$ermsg = 'WBMP images are not supported as watermark image';
|
|
330
|
+
}
|
|
331
|
+
break;
|
|
332
|
+
default:
|
|
333
|
+
$oWatermarkImg = false;
|
|
334
|
+
$ermsg = $watermarkImgInfo['mime'] . ' images are not supported as watermark image';
|
|
335
|
+
break;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
if (!$ermsg) {
|
|
340
|
+
// zoom
|
|
341
|
+
if ($opts['ratio']) {
|
|
342
|
+
$tmpImg = imagecreatetruecolor($watermarkImgInfo[0], $watermarkImgInfo[1]);
|
|
343
|
+
imagealphablending($tmpImg, false);
|
|
344
|
+
imagesavealpha($tmpImg, true);
|
|
345
|
+
imagecopyresampled($tmpImg, $oWatermarkImg, 0, 0, 0, 0, $watermarkImgInfo[0], $watermarkImgInfo[1], imagesx($oWatermarkImg), imagesy($oWatermarkImg));
|
|
346
|
+
imageDestroy($oWatermarkImg);
|
|
347
|
+
$oWatermarkImg = $tmpImg;
|
|
348
|
+
$tmpImg = null;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
switch ($srcImgInfo['mime']) {
|
|
352
|
+
case 'image/gif':
|
|
353
|
+
if (imagetypes() & IMG_GIF) {
|
|
354
|
+
$oSrcImg = imagecreatefromgif($src);
|
|
355
|
+
} else {
|
|
356
|
+
$ermsg = 'GIF images are not supported as source image';
|
|
357
|
+
}
|
|
358
|
+
break;
|
|
359
|
+
case 'image/jpeg':
|
|
360
|
+
if (imagetypes() & IMG_JPG) {
|
|
361
|
+
$oSrcImg = imagecreatefromjpeg($src);
|
|
362
|
+
} else {
|
|
363
|
+
$ermsg = 'JPEG images are not supported as source image';
|
|
364
|
+
}
|
|
365
|
+
break;
|
|
366
|
+
case 'image/png':
|
|
367
|
+
if (imagetypes() & IMG_PNG) {
|
|
368
|
+
$oSrcImg = imagecreatefrompng($src);
|
|
369
|
+
} else {
|
|
370
|
+
$ermsg = 'PNG images are not supported as source image';
|
|
371
|
+
}
|
|
372
|
+
break;
|
|
373
|
+
case 'image/wbmp':
|
|
374
|
+
if (imagetypes() & IMG_WBMP) {
|
|
375
|
+
$oSrcImg = imagecreatefromwbmp($src);
|
|
376
|
+
} else {
|
|
377
|
+
$ermsg = 'WBMP images are not supported as source image';
|
|
378
|
+
}
|
|
379
|
+
break;
|
|
380
|
+
default:
|
|
381
|
+
$oSrcImg = false;
|
|
382
|
+
$ermsg = $srcImgInfo['mime'] . ' images are not supported as source image';
|
|
383
|
+
break;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
if ($ermsg || false === $oSrcImg || false === $oWatermarkImg) {
|
|
388
|
+
$ermsg && trigger_error($ermsg);
|
|
389
|
+
return false;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
if ($srcImgInfo['mime'] === 'image/png') {
|
|
393
|
+
if (function_exists('imagecolorallocatealpha')) {
|
|
394
|
+
$bg = imagecolorallocatealpha($oSrcImg, 255, 255, 255, 127);
|
|
395
|
+
imagefill($oSrcImg, 0, 0, $bg);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
if ($watermarkImgInfo['mime'] === 'image/png') {
|
|
400
|
+
imagecopy($oSrcImg, $oWatermarkImg, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height);
|
|
401
|
+
} else {
|
|
402
|
+
imagecopymerge($oSrcImg, $oWatermarkImg, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, $transparency);
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
// set interlace
|
|
406
|
+
$opts['interlace'] && imageinterlace($oSrcImg, true);
|
|
407
|
+
|
|
408
|
+
switch ($srcImgInfo['mime']) {
|
|
409
|
+
case 'image/gif':
|
|
410
|
+
imagegif($oSrcImg, $src);
|
|
411
|
+
break;
|
|
412
|
+
case 'image/jpeg':
|
|
413
|
+
imagejpeg($oSrcImg, $src, $quality);
|
|
414
|
+
break;
|
|
415
|
+
case 'image/png':
|
|
416
|
+
if (function_exists('imagesavealpha') && function_exists('imagealphablending')) {
|
|
417
|
+
imagealphablending($oSrcImg, false);
|
|
418
|
+
imagesavealpha($oSrcImg, true);
|
|
419
|
+
}
|
|
420
|
+
imagepng($oSrcImg, $src);
|
|
421
|
+
break;
|
|
422
|
+
case 'image/wbmp':
|
|
423
|
+
imagewbmp($oSrcImg, $src);
|
|
424
|
+
break;
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
imageDestroy($oSrcImg);
|
|
428
|
+
imageDestroy($oWatermarkImg);
|
|
429
|
+
|
|
430
|
+
return true;
|
|
431
|
+
}
|
|
432
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
/**
|
|
3
|
+
* This class describes elFinder plugin window remove tail dots.
|
|
4
|
+
* This plugin is automatically loaded on the Windows server
|
|
5
|
+
* and enabled in the LocalFileSystem driver.
|
|
6
|
+
*/
|
|
7
|
+
class elFinderPluginWinRemoveTailDots extends elFinderPlugin
|
|
8
|
+
{
|
|
9
|
+
private $replaced = array();
|
|
10
|
+
private $keyMap = array(
|
|
11
|
+
'ls' => 'intersect',
|
|
12
|
+
'upload' => 'renames',
|
|
13
|
+
'mkdir' => array('name', 'dirs')
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
public function __construct($opts)
|
|
17
|
+
{
|
|
18
|
+
$defaults = array(
|
|
19
|
+
'enable' => false, // For control by volume driver
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
$this->opts = array_merge($defaults, $opts);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public function cmdPreprocess($cmd, &$args, $elfinder, $volume)
|
|
26
|
+
{
|
|
27
|
+
$opts = $this->getCurrentOpts($volume);
|
|
28
|
+
if (!$opts['enable']) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
$this->replaced[$cmd] = array();
|
|
32
|
+
$key = (isset($this->keyMap[$cmd])) ? $this->keyMap[$cmd] : 'name';
|
|
33
|
+
|
|
34
|
+
if (is_array($key)) {
|
|
35
|
+
$keys = $key;
|
|
36
|
+
} else {
|
|
37
|
+
$keys = array($key);
|
|
38
|
+
}
|
|
39
|
+
foreach ($keys as $key) {
|
|
40
|
+
if (isset($args[$key])) {
|
|
41
|
+
if (is_array($args[$key])) {
|
|
42
|
+
foreach ($args[$key] as $i => $name) {
|
|
43
|
+
if ($cmd === 'mkdir' && $key === 'dirs') {
|
|
44
|
+
// $name need '/' as prefix see #2607
|
|
45
|
+
$name = '/' . ltrim($name, '/');
|
|
46
|
+
$_names = explode('/', $name);
|
|
47
|
+
$_res = array();
|
|
48
|
+
foreach ($_names as $_name) {
|
|
49
|
+
$_res[] = $this->normalize($_name, $opts);
|
|
50
|
+
}
|
|
51
|
+
$this->replaced[$cmd][$name] = $args[$key][$i] = join('/', $_res);
|
|
52
|
+
} else {
|
|
53
|
+
$this->replaced[$cmd][$name] = $args[$key][$i] = $this->normalize($name, $opts);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
} else if ($args[$key] !== '') {
|
|
57
|
+
$name = $args[$key];
|
|
58
|
+
$this->replaced[$cmd][$name] = $args[$key] = $this->normalize($name, $opts);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if ($cmd === 'ls' || $cmd === 'mkdir') {
|
|
63
|
+
if (!empty($this->replaced[$cmd])) {
|
|
64
|
+
// un-regist for legacy settings
|
|
65
|
+
$elfinder->unbind($cmd, array($this, 'cmdPostprocess'));
|
|
66
|
+
$elfinder->bind($cmd, array($this, 'cmdPostprocess'));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
public function cmdPostprocess($cmd, &$result, $args, $elfinder, $volume)
|
|
73
|
+
{
|
|
74
|
+
if ($cmd === 'ls') {
|
|
75
|
+
if (!empty($result['list']) && !empty($this->replaced['ls'])) {
|
|
76
|
+
foreach ($result['list'] as $hash => $name) {
|
|
77
|
+
if ($keys = array_keys($this->replaced['ls'], $name)) {
|
|
78
|
+
if (count($keys) === 1) {
|
|
79
|
+
$result['list'][$hash] = $keys[0];
|
|
80
|
+
} else {
|
|
81
|
+
$result['list'][$hash] = $keys;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
} else if ($cmd === 'mkdir') {
|
|
87
|
+
if (!empty($result['hashes']) && !empty($this->replaced['mkdir'])) {
|
|
88
|
+
foreach ($result['hashes'] as $name => $hash) {
|
|
89
|
+
if ($keys = array_keys($this->replaced['mkdir'], $name)) {
|
|
90
|
+
$result['hashes'][$keys[0]] = $hash;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// NOTE: $thash is directory hash so it unneed to process at here
|
|
98
|
+
public function onUpLoadPreSave(&$thash, &$name, $src, $elfinder, $volume)
|
|
99
|
+
{
|
|
100
|
+
$opts = $this->getCurrentOpts($volume);
|
|
101
|
+
if (!$opts['enable']) {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
$name = $this->normalize($name, $opts);
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
protected function normalize($str, $opts)
|
|
110
|
+
{
|
|
111
|
+
$str = rtrim($str, '.');
|
|
112
|
+
return $str;
|
|
113
|
+
}
|
|
114
|
+
} // END class elFinderPluginWinRemoveTailDots
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
#coding: utf-8
|
|
2
|
+
#--
|
|
3
|
+
# Copyright (c) 2022+ Damjan Rems
|
|
4
|
+
#
|
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
6
|
+
# a copy of this software and associated documentation files (the
|
|
7
|
+
# "Software"), to deal in the Software without restriction, including
|
|
8
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
9
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
10
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
11
|
+
# the following conditions:
|
|
12
|
+
#
|
|
13
|
+
# The above copyright notice and this permission notice shall be
|
|
14
|
+
# included in all copies or substantial portions of the Software.
|
|
15
|
+
#
|
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
17
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
18
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
19
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
20
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
21
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
22
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
23
|
+
#++
|
|
24
|
+
##########################################################################
|
|
25
|
+
#
|
|
26
|
+
##########################################################################
|
|
27
|
+
#require 'el_finder/action'
|
|
28
|
+
|
|
29
|
+
class DcElfinderController < DcApplicationController
|
|
30
|
+
|
|
31
|
+
skip_before_action :verify_authenticity_token # otherwise it fails on post because of protect_from_forgery
|
|
32
|
+
##########################################################################
|
|
33
|
+
# elfinder file manager connector
|
|
34
|
+
##########################################################################
|
|
35
|
+
def connector
|
|
36
|
+
site = dc_get_site
|
|
37
|
+
home_dir = File.join('/',site.files_directory)
|
|
38
|
+
# it is convenient for admin to have access to root dir directly
|
|
39
|
+
if dc_user_has_role('admin') then home_dir = File.join('/',home_dir.split('/')[1])
|
|
40
|
+
else
|
|
41
|
+
user = DcUser.find(session[:user_id])
|
|
42
|
+
home_dir = File.join('/', user.root_folder) if user.respond_to?(:root_folder) and !user.root_folder.blank?
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
h, r = ElFinder::Connector.new(
|
|
46
|
+
:root => File.join(Rails.public_path, home_dir),
|
|
47
|
+
:url => home_dir,
|
|
48
|
+
:perms => { '.' => { :read => true, :write => true, :rm => true }},
|
|
49
|
+
:extractors => {
|
|
50
|
+
'application/zip' => ['unzip', '-qq', '-o'], # Each argument will be shellescaped (also true for archivers)
|
|
51
|
+
'application/x-gzip' => ['tar', '-xzf'],
|
|
52
|
+
},
|
|
53
|
+
:archivers => {
|
|
54
|
+
'application/zip' => ['.zip', 'zip', '-qr9'], # Note first argument is archive extension
|
|
55
|
+
'application/x-gzip' => ['.tgz', 'tar', '-czf'],
|
|
56
|
+
},
|
|
57
|
+
:user_roles => session[:user_roles]
|
|
58
|
+
).run(params)
|
|
59
|
+
headers.merge!(h)
|
|
60
|
+
render (r.empty? ? {:nothing => true} : {:plain => r.to_json}), :layout => false
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
end
|