From fcc13d55fac77abe427b7619d24100624721ca3c Mon Sep 17 00:00:00 2001 From: Andy Green Date: Thu, 14 Dec 2017 11:53:30 +0300 Subject: [PATCH] Files (documents and archives): uploading, inserting --- .gitignore | 1 + .../admin/themes/default/css/default.css | 110 +++++++++++++ bl-kernel/admin/themes/default/init.php | 109 ++++++++++++- bl-kernel/admin/views/edit-content.php | 16 ++ bl-kernel/admin/views/new-content.php | 16 ++ bl-kernel/ajax/uploader.php | 14 +- bl-kernel/boot/init.php | 4 + bl-kernel/helpers/filesystem.class.php | 2 +- bl-kernel/js/bludit-filemenu-v8.js | 153 ++++++++++++++++++ bl-kernel/js/bludit-files-v8.js | 68 ++++++++ bl-kernel/js/bludit-images-v8.js | 2 +- bl-kernel/js/bludit-quick-files.js | 33 ++++ bl-kernel/js/functions.php | 2 + bl-languages/en.json | 8 + bl-plugins/simplemde/plugin.php | 5 + bl-plugins/tinymce/plugin.php | 4 + 16 files changed, 541 insertions(+), 6 deletions(-) create mode 100644 bl-kernel/js/bludit-filemenu-v8.js create mode 100644 bl-kernel/js/bludit-files-v8.js create mode 100644 bl-kernel/js/bludit-quick-files.js diff --git a/.gitignore b/.gitignore index 6d8587f9..c0bdefb1 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ bl-plugins/timemachine bl-plugins/remote-content bl-kernel/bludit.pro.php bl-themes/docs +*.geany \ No newline at end of file diff --git a/bl-kernel/admin/themes/default/css/default.css b/bl-kernel/admin/themes/default/css/default.css index 543c274a..3db23977 100644 --- a/bl-kernel/admin/themes/default/css/default.css +++ b/bl-kernel/admin/themes/default/css/default.css @@ -589,6 +589,116 @@ table.statistics tr:last-child td { } +/* ----------- BLUDIT FILES V8 ----------- */ +#bludit-files-v8 { + +} + +#bludit-files-v8-upload { + width: 100%; + padding: 0; + margin-bottom: 15px !important; +} + +#bludit-files-v8-drag-drop { + padding: 20px; +} + +#bludit-files-v8-progressbar { + display: none; + margin: 20px; +} + +#bludit-files-v8-thumbnails { + max-height: 350px; + overflow: auto; + font-size: 0; +} + +#bludit-files-v8-items .bludit-file-item { + width: 49% !important; +} + +/* Bludit File Menu v8 */ + +#bludit-filemenuV8 { + display: none; + z-index: 1020; + position: absolute; + overflow: hidden; + border: 1px solid #CCC; + background: #FFF; + color: #333; + border-radius: 2px; + list-style-type: none; + padding: 5px; + margin: 0; +} + +#bludit-filemenuV8 li { + padding: 8px 12px; + cursor: pointer; +} + +#bludit-filemenuV8 li:hover { + background-color: #2672ec; + color: #fff; +} + +#bludit-filemenuV8 li i { + margin-right: 10px; +} + +/* ----------- BLUDIT QUICK FILES ----------- */ +#bludit-quick-files { + +} + +#bludit-quick-files a.moreFiles { + margin: 15px 0 0; + width: 100%; + background: #F5F5F5 !important; + color: #555; +} + +#bludit-quick-files h4.label { + background: #f8f8f8; + color: #aaa; + padding: 2px 5px; + font-size: 0.9em; +} + +#bludit-quick-files-items { + font-size: auto; +} + +#bludit-quick-files-items .bludit-file-item { + width: 100%; +} + +/* ----------- BLUDIT FILE ITEMS ----------- */ +.bludit-file-item { + border: 1px solid white; + border-radius: 4px; + box-sizing: border-box; + display: inline-block; + height: auto; + margin: 2px; + padding: 4px 2px; + cursor: default; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} + +.bludit-file-item:hover { + border: 1px solid #ddd; +} + +.bludit-border-active { + border: solid 3px orange !important; +} + /* ----------- BLUDIT PROFILE PICTURE ----------- */ #bludit-profile-picture-drag-drop { diff --git a/bl-kernel/admin/themes/default/init.php b/bl-kernel/admin/themes/default/init.php index cdc2ce1b..e354e1c9 100644 --- a/bl-kernel/admin/themes/default/init.php +++ b/bl-kernel/admin/themes/default/init.php @@ -215,7 +215,7 @@ class HTML {
'; - $thumbnailList = Filesystem::listFiles(PATH_UPLOADS_THUMBNAILS,'*','*',true); + $thumbnailList = Filesystem::listFiles(PATH_UPLOADS_THUMBNAILS,'*','{'.ALLOWED_EXTENSIONS_IMAGES.'}',true); array_splice($thumbnailList, THUMBNAILS_AMOUNT); foreach($thumbnailList as $file) { $filename = basename($file); @@ -323,7 +323,7 @@ class HTML {
'; - $thumbnailList = Filesystem::listFiles(PATH_UPLOADS_THUMBNAILS,'*','*',true); + $thumbnailList = Filesystem::listFiles(PATH_UPLOADS_THUMBNAILS,'*','{'.ALLOWED_EXTENSIONS_IMAGES.'}',true); foreach($thumbnailList as $file) { $filename = basename($file); $html .= 'Thumbnail'; @@ -347,6 +347,111 @@ class HTML { echo $html; } + public static function bluditQuickFiles() + { + // Javascript code + include(PATH_JS.'bludit-quick-files.js'); + + global $L; + + $html = ''; + $html .= ' +
+
+ '; + + $thumbnailList = Filesystem::listFiles(PATH_UPLOADS,'*','{'.ALLOWED_EXTENSIONS_FILES.'}',true); + array_splice($thumbnailList, THUMBNAILS_AMOUNT); + foreach($thumbnailList as $file) { + $filename = basename($file); + $html .= '
'.$filename.'
'; + } + + $html .= ' +
+ '; + + $html .= '
'.$L->g('There are no files').'
'; + + $html .= ' + '.$L->g('Upload and more files').' + +
+ '; + + echo $html; + } + + public static function bluditFileMenuV8() + { + // Javascript code + include(PATH_JS.'bludit-filemenu-v8.js'); + + global $L; + + $html = ''; + $html .= ' +
    +
  • '.$L->g('Insert file').'
  • +
  • '.$L->g('Delete file').'
  • +
+ '; + + echo $html; + } + + public static function bluditFilesV8() + { + global $L; + + // Javascript code + include(PATH_JS.'bludit-files-v8.js'); + + $html = ''; + $html .= ' +
+
+ +
+ +
+
'.$L->g('Upload file').'
+
'.$L->g('Drag and drop or click here').'
+
+ +
+
0%
+
+ +
+ +
+ '; + + $thumbnailList = Filesystem::listFiles(PATH_UPLOADS,'*','{'.ALLOWED_EXTENSIONS_FILES.'}',true); + foreach($thumbnailList as $file) { + $filename = basename($file); + $html .= '
'.$filename.'
'; + } + + $html .= ' +
+ '; + + $html .= '
'.$L->g('There are no files').'
'; + + $html .= ' + + +
+
+ '; + + echo $html; + } + public static function profileUploader($username) diff --git a/bl-kernel/admin/views/edit-content.php b/bl-kernel/admin/views/edit-content.php index a1745a68..246a1655 100644 --- a/bl-kernel/admin/views/edit-content.php +++ b/bl-kernel/admin/views/edit-content.php @@ -114,6 +114,22 @@ echo '
'; echo ''; + // FILES TAB + // -------------------------------------------------------------------- + echo '
  • '; + echo ''; + // TAGS // -------------------------------------------------------------------- diff --git a/bl-kernel/admin/views/new-content.php b/bl-kernel/admin/views/new-content.php index 06a6c341..d1144eb1 100644 --- a/bl-kernel/admin/views/new-content.php +++ b/bl-kernel/admin/views/new-content.php @@ -93,6 +93,22 @@ echo '
    '; echo ''; + // FILES TAB + // -------------------------------------------------------------------- + echo '
  • '; + echo ''; + // TAGS // -------------------------------------------------------------------- echo '
  • '; diff --git a/bl-kernel/ajax/uploader.php b/bl-kernel/ajax/uploader.php index 7ecf5e73..a15c085b 100644 --- a/bl-kernel/ajax/uploader.php +++ b/bl-kernel/ajax/uploader.php @@ -15,7 +15,7 @@ $filename = Text::replace(' ', '', $filename); $filename = Text::replace('_', '', $filename); // Check extension -$validExtension = array('tiff', 'gif', 'png', 'jpg', 'jpeg', 'bmp', 'svg'); +$validExtension = explode(',',ALLOWED_EXTENSIONS_IMAGES.ALLOWED_EXTENSIONS_FILES); if (!in_array($fileExtension, $validExtension)) { $validExtensionString = implode(',', $validExtension); exit (json_encode(array( @@ -58,6 +58,16 @@ if ($type=='profilePicture') { $absoluteURLThumbnail = ''; $absolutePath = PATH_UPLOADS_PROFILES.$tmpName; } +// --- FILES --- +else if ($type=='bludit-files-v8') { + // Move the original to the upload folder + rename($originalFile, PATH_UPLOADS.$tmpName); + + // Paths + $absoluteURL = DOMAIN_UPLOADS.$tmpName; + $absoluteURLThumbnail = ''; + $absolutePath = PATH_UPLOADS.$tmpName; +} // --- OTHERS --- else { // Exclude generate thumbnail for SVG format @@ -89,7 +99,7 @@ if (Sanitize::pathFile($originalFile)) { exit (json_encode(array( 'status'=>0, - 'message'=>'Image uploaded success.', + 'message'=>'File uploaded success.', 'filename'=>$tmpName, 'absoluteURL'=>$absoluteURL, 'absoluteURLThumbnail'=>$absoluteURLThumbnail, diff --git a/bl-kernel/boot/init.php b/bl-kernel/boot/init.php index dc9f4c0d..a93f7e7b 100644 --- a/bl-kernel/boot/init.php +++ b/bl-kernel/boot/init.php @@ -76,6 +76,10 @@ define('ALERT_STATUS_OK', 0); // Alert status fail define('ALERT_STATUS_FAIL', 1); +// Allowed file extensions +define('ALLOWED_EXTENSIONS_IMAGES','jpg,jpeg,gif,png'); +define('ALLOWED_EXTENSIONS_FILES','doc,docx,xls,xlsx,ppt,pptx,rtf,pdf,zip,rar'); + // Amount of thumbnails shown on Bludit Quick images define('THUMBNAILS_AMOUNT', 6); diff --git a/bl-kernel/helpers/filesystem.class.php b/bl-kernel/helpers/filesystem.class.php index 50b9a0f0..3a3bccf8 100644 --- a/bl-kernel/helpers/filesystem.class.php +++ b/bl-kernel/helpers/filesystem.class.php @@ -24,7 +24,7 @@ class Filesystem { public static function listFiles($path, $regex='*', $extension='*', $sortByDate=false) { - $files = glob($path.$regex.'.'.$extension); + $files = glob($path.$regex.'.'.$extension,GLOB_BRACE); if (empty($files)) { return array(); diff --git a/bl-kernel/js/bludit-filemenu-v8.js b/bl-kernel/js/bludit-filemenu-v8.js new file mode 100644 index 00000000..0a3d1106 --- /dev/null +++ b/bl-kernel/js/bludit-filemenu-v8.js @@ -0,0 +1,153 @@ + \ No newline at end of file diff --git a/bl-kernel/js/bludit-files-v8.js b/bl-kernel/js/bludit-files-v8.js new file mode 100644 index 00000000..12ec0f90 --- /dev/null +++ b/bl-kernel/js/bludit-files-v8.js @@ -0,0 +1,68 @@ + diff --git a/bl-kernel/js/bludit-images-v8.js b/bl-kernel/js/bludit-images-v8.js index 8c2fbcfd..8acebfcf 100644 --- a/bl-kernel/js/bludit-images-v8.js +++ b/bl-kernel/js/bludit-images-v8.js @@ -30,7 +30,7 @@ $(document).ready(function() { { type: "json", action: HTML_PATH_ADMIN_ROOT+"ajax/uploader", - allow : "*.(jpg|jpeg|gif|png)", + allow : "*.("+ALLOWED_EXTENSIONS_IMAGES+")", params: {"tokenCSRF":tokenCSRF, "type":"bludit-images-v8"}, loadstart: function() { diff --git a/bl-kernel/js/bludit-quick-files.js b/bl-kernel/js/bludit-quick-files.js new file mode 100644 index 00000000..44cb1cf0 --- /dev/null +++ b/bl-kernel/js/bludit-quick-files.js @@ -0,0 +1,33 @@ + diff --git a/bl-kernel/js/functions.php b/bl-kernel/js/functions.php index fc5609e5..a57e65d9 100644 --- a/bl-kernel/js/functions.php +++ b/bl-kernel/js/functions.php @@ -7,6 +7,8 @@ echo 'var HTML_PATH_ADMIN_ROOT = "'.HTML_PATH_ADMIN_ROOT.'";'.PHP_EOL; echo 'var HTML_PATH_ADMIN_THEME = "'.HTML_PATH_ADMIN_THEME.'";'.PHP_EOL; echo 'var HTML_PATH_UPLOADS = "'.HTML_PATH_UPLOADS.'";'.PHP_EOL; echo 'var HTML_PATH_UPLOADS_THUMBNAILS = "'.HTML_PATH_UPLOADS_THUMBNAILS.'";'.PHP_EOL; +echo 'var ALLOWED_EXTENSIONS_IMAGES = "'.str_replace(',','|',ALLOWED_EXTENSIONS_IMAGES).'";'.PHP_EOL; +echo 'var ALLOWED_EXTENSIONS_FILES = "'.str_replace(',','|',ALLOWED_EXTENSIONS_FILES).'";'.PHP_EOL; echo 'var PARENT = "'.PARENT.'";'.PHP_EOL; echo 'var tokenCSRF = "'.$Security->getTokenCSRF().'";'.PHP_EOL; diff --git a/bl-languages/en.json b/bl-languages/en.json index 8229bb23..ce257611 100644 --- a/bl-languages/en.json +++ b/bl-languages/en.json @@ -59,17 +59,24 @@ "description": "Description", "this-field-can-help-describe-the-content": "This field can help describe the content in a few words. No more than 150 characters.", "images": "Images", + "files": "Files", "error": "Error", "supported-image-file-types": "Supported image file types", + "supported-data-file-types": "Supported data file types", "cover-image": "Cover image", "drag-and-drop-or-click-here": "Drag and drop or click here", "there-are-no-images": "There are no images", + "there-are-no-files": "There are no files", "upload-and-more-images": "Upload and more images", + "upload-and-more-files": "Upload and more files", "click-on-the-image-for-options": "Click on the image for options.", + "click-on-the-file-for-options": "Click on the file for options.", "click-here-to-cancel": "Click here to cancel.", "insert-image": "Insert image", + "insert-file": "Insert file", "set-as-cover-image": "Set as cover image", "delete-image": "Delete image", + "delete-file": "Delete file", "tags": "Tags", "add": "Add", "status": "Status", @@ -183,6 +190,7 @@ "token": "Token", "current-status": "Current status", "upload-image": "Upload image", + "upload-file": "Upload file", "the-changes-have-been-saved": "The changes have been saved", "label": "Label", "links": "Links", diff --git a/bl-plugins/simplemde/plugin.php b/bl-plugins/simplemde/plugin.php index a8215c05..a00b457c 100644 --- a/bl-plugins/simplemde/plugin.php +++ b/bl-plugins/simplemde/plugin.php @@ -109,6 +109,11 @@ class pluginsimpleMDE extends Plugin { addContentSimpleMDE("!['.$Language->get('Image description').']("+filename+")"); }'.PHP_EOL; + // This function is necesary on each Editor, it is used by Bludit Files v8. + $html .= 'function editorAddLink(filename) { + addContentSimpleMDE("["+filename+"]("+HTML_PATH_UPLOADS+filename+")"); + }'.PHP_EOL; + $html .= '$(document).ready(function() { '.PHP_EOL; $html .= 'simplemde = new SimpleMDE({ element: document.getElementById("jscontent"), diff --git a/bl-plugins/tinymce/plugin.php b/bl-plugins/tinymce/plugin.php index bfc62209..93067f14 100644 --- a/bl-plugins/tinymce/plugin.php +++ b/bl-plugins/tinymce/plugin.php @@ -26,6 +26,10 @@ class pluginTinymce extends Plugin { tinymce.activeEditor.insertContent("\"'.$Language-get('Image description').'\">" + "\n"); } + function editorAddLink(filename) { + tinymce.activeEditor.insertContent(""+filename+"" + "\n"); + } + tinymce.init({ selector: "#jscontent", theme: "modern",