').addClass('mime-icon ico-' + item.icon));
+ }
+
+ carouselItem.find('.carousel-label').attr('target', '_blank').attr('href', item.url)
+ .append(item.name)
+ .append($('
'));
+
+ carousel.children('.carousel-inner').append(carouselItem);
+
+ var carouselIndicator = indicatorTemplate.clone()
+ .addClass(index === 0 ? 'active' : '')
+ .attr('data-slide-to', index);
+ carousel.children('.carousel-indicators').append(carouselIndicator);
+ });
+
+
+ // carousel swipe control
+ var touchStartX = null;
+
+ carousel.on('touchstart', function (event) {
+ var e = event.originalEvent;
+ if (e.touches.length == 1) {
+ var touch = e.touches[0];
+ touchStartX = touch.pageX;
+ }
+ }).on('touchmove', function (event) {
+ var e = event.originalEvent;
+ if (touchStartX != null) {
+ var touchCurrentX = e.changedTouches[0].pageX;
+ if ((touchCurrentX - touchStartX) > 60) {
+ touchStartX = null;
+ carousel.carousel('prev');
+ } else if ((touchStartX - touchCurrentX) > 60) {
+ touchStartX = null;
+ carousel.carousel('next');
+ }
+ }
+ }).on('touchend', function () {
+ touchStartX = null;
+ });
+ // end carousel swipe control
+
+ notify(carousel);
+}
+
+function move(items) {
+ performLfmRequest('move', { items: items.map(function (item) { return item.name; }) })
+ .done(refreshFoldersAndItems);
+}
+
+function getUrlParam(paramName) {
+ var reParam = new RegExp('(?:[\?&]|&)' + paramName + '=([^&]+)', 'i');
+ var match = window.location.search.match(reParam);
+ return ( match && match.length > 1 ) ? match[1] : null;
+}
+
+function use(items) {
+ function useTinymce3(url) {
+ if (!usingTinymce3()) { return; }
+
+ var win = tinyMCEPopup.getWindowArg("window");
+ win.document.getElementById(tinyMCEPopup.getWindowArg("input")).value = url;
+ if (typeof(win.ImageDialog) != "undefined") {
+ // Update image dimensions
+ if (win.ImageDialog.getImageData) {
+ win.ImageDialog.getImageData();
+ }
+
+ // Preview if necessary
+ if (win.ImageDialog.showPreviewImage) {
+ win.ImageDialog.showPreviewImage(url);
+ }
+ }
+ tinyMCEPopup.close();
+ }
+
+ function useTinymce4AndColorbox(url) {
+ if (!usingTinymce4AndColorbox()) { return; }
+
+ parent.document.getElementById(getUrlParam('field_name')).value = url;
+
+ if(typeof parent.tinyMCE !== "undefined") {
+ parent.tinyMCE.activeEditor.windowManager.close();
+ }
+ if(typeof parent.$.fn.colorbox !== "undefined") {
+ parent.$.fn.colorbox.close();
+ }
+ }
+
+ function useCkeditor3(url) {
+ if (!usingCkeditor3()) { return; }
+
+ if (window.opener) {
+ // Popup
+ window.opener.CKEDITOR.tools.callFunction(getUrlParam('CKEditorFuncNum'), url);
+ } else {
+ // Modal (in iframe)
+ parent.CKEDITOR.tools.callFunction(getUrlParam('CKEditorFuncNum'), url);
+ parent.CKEDITOR.tools.callFunction(getUrlParam('CKEditorCleanUpFuncNum'));
+ }
+ }
+
+ function useFckeditor2(url) {
+ if (!usingFckeditor2()) { return; }
+
+ var p = url;
+ var w = data['Properties']['Width'];
+ var h = data['Properties']['Height'];
+ window.opener.SetUrl(p,w,h);
+ }
+
+ var url = items[0].url;
+ var callback = getUrlParam('callback');
+ var useFileSucceeded = true;
+
+ if (usingWysiwygEditor()) {
+ useTinymce3(url);
+
+ useTinymce4AndColorbox(url);
+
+ useCkeditor3(url);
+
+ useFckeditor2(url);
+ } else if (callback && window[callback]) {
+ window[callback](getSelectedItems());
+ } else if (callback && parent[callback]) {
+ parent[callback](getSelecteditems());
+ } else if (window.opener) { // standalone button or other situations
+ window.opener.SetUrl(getSelectedItems());
+ } else {
+ useFileSucceeded = false;
+ }
+
+ if (useFileSucceeded) {
+ if (window.opener) {
+ window.close();
+ }
+ } else {
+ console.log('window.opener not found');
+ // No editor found, open/download file using browser's default method
+ window.open(url);
+ }
+}
+//end useFile
+
+// ==================================
+// == WYSIWYG Editors Check ==
+// ==================================
+
+function usingTinymce3() {
+ return !!window.tinyMCEPopup;
+}
+
+function usingTinymce4AndColorbox() {
+ return !!getUrlParam('field_name');
+}
+
+function usingCkeditor3() {
+ return !!getUrlParam('CKEditor') || !!getUrlParam('CKEditorCleanUpFuncNum');
+}
+
+function usingFckeditor2() {
+ return window.opener && typeof data != 'undefined' && data['Properties']['Width'] != '';
+}
+
+function usingWysiwygEditor() {
+ return usingTinymce3() || usingTinymce4AndColorbox() || usingCkeditor3() || usingFckeditor2();
+}
+
+// ==================================
+// == Others ==
+// ==================================
+
+function defaultParameters() {
+ return {
+ working_dir: $('#working_dir').val(),
+ type: $('#type').val()
+ };
+}
+
+function notImp() {
+ notify('Not yet implemented!');
+}
+
+function notify(body, callback) {
+ $('#notify').find('.btn-primary').toggle(callback !== undefined);
+ $('#notify').find('.btn-primary').unbind().click(callback);
+ $('#notify').modal('show').find('.modal-body').html(body);
+}
+
+function dialog(title, value, callback) {
+ $('#dialog').find('input').val(value);
+ $('#dialog').on('shown.bs.modal', function () {
+ $('#dialog').find('input').focus();
+ });
+ $('#dialog').find('.btn-primary').unbind().click(function (e) {
+ callback($('#dialog').find('input').val());
+ });
+ $('#dialog').modal('show').find('.modal-title').text(title);
+}
diff --git a/packages/iqcontent/laravel-filemanager/public/js/stand-alone-button.js b/packages/iqcontent/laravel-filemanager/public/js/stand-alone-button.js
new file mode 100644
index 0000000..690ba7a
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/public/js/stand-alone-button.js
@@ -0,0 +1,36 @@
+(function( $ ){
+
+ $.fn.filemanager = function(type, options) {
+ type = type || 'file';
+
+ this.on('click', function(e) {
+ var route_prefix = (options && options.prefix) ? options.prefix : '/laravel-filemanager';
+ var target_input = $('#' + $(this).data('input'));
+ var target_preview = $('#' + $(this).data('preview'));
+ window.open(route_prefix + '?type=' + type, 'FileManager', 'width=900,height=600');
+ window.SetUrl = function (items) {
+ var file_path = items.map(function (item) {
+ return item.url;
+ }).join(',');
+
+ // set the value of the desired input to image url
+ target_input.val('').val(file_path).trigger('change');
+
+ // clear previous preview
+ target_preview.html('');
+
+ // set or change the preview image src
+ items.forEach(function (item) {
+ target_preview.append(
+ $('
').css('height', '5rem').attr('src', item.thumb_url)
+ );
+ });
+
+ // trigger change event
+ target_preview.trigger('change');
+ };
+ return false;
+ });
+ }
+
+})(jQuery);
diff --git a/packages/iqcontent/laravel-filemanager/src/Controllers/Controller.php b/packages/iqcontent/laravel-filemanager/src/Controllers/Controller.php
new file mode 100644
index 0000000..4ff2926
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Controllers/Controller.php
@@ -0,0 +1,12 @@
+with([
+ 'working_dir' => request('working_dir'),
+ 'img' => $this->lfm->pretty(request('img'))
+ ]);
+ }
+
+ /**
+ * Crop the image (called via ajax).
+ */
+ public function getCropimage($overWrite = true)
+ {
+ $image_name = request('img');
+ $image_path = $this->lfm->setName($image_name)->path('absolute');
+ $crop_path = $image_path;
+
+ if (! $overWrite) {
+ $fileParts = explode('.', $image_name);
+ $fileParts[count($fileParts) - 2] = $fileParts[count($fileParts) - 2] . '_cropped_' . time();
+ $crop_path = $this->lfm->setName(implode('.', $fileParts))->path('absolute');
+ }
+
+ event(new ImageIsCropping($image_path));
+
+ $crop_info = request()->only('dataWidth', 'dataHeight', 'dataX', 'dataY');
+
+ // crop image
+ Image::make($image_path)
+ ->crop(...array_values($crop_info))
+ ->save($crop_path);
+
+ // make new thumbnail
+ $this->lfm->makeThumbnail($image_name);
+
+ event(new ImageWasCropped($image_path));
+ }
+
+ public function getNewCropimage()
+ {
+ $this->getCropimage(false);
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Controllers/DeleteController.php b/packages/iqcontent/laravel-filemanager/src/Controllers/DeleteController.php
new file mode 100644
index 0000000..328b73d
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Controllers/DeleteController.php
@@ -0,0 +1,58 @@
+lfm->pretty($name_to_delete);
+ $file_path = $file_to_delete->path();
+
+
+ event(new ImageIsDeleting($file_path));
+
+ if (is_null($name_to_delete)) {
+ return $this->response('error', parent::getError('folder-name'));
+ continue;
+ }
+
+ if (! $this->lfm->setName($name_to_delete)->exists()) {
+ return $this->response('error', parent::getError('folder-not-found', ['folder' => $file_path]));
+ }
+
+ if ($this->lfm->setName($name_to_delete)->isDirectory()) {
+ if (! $this->lfm->setName($name_to_delete)->directoryIsEmpty()) {
+ return $this->response('error', parent::getError('delete-folder'));
+ }
+ } else {
+ if ($file_to_delete->isImage()) {
+ $this->lfm->setName($name_to_delete)->thumb()->delete();
+ }
+ }
+ $file_to_delete->deleteModel();
+ $this->lfm->setName($name_to_delete)->delete();
+
+ event(new ImageWasDeleted($file_path));
+ }
+
+ if (count($errors) > 0) {
+ return $this->response('error', $errors);
+ }
+
+ return parent::$success_response;
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Controllers/DemoController.php b/packages/iqcontent/laravel-filemanager/src/Controllers/DemoController.php
new file mode 100644
index 0000000..3223546
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Controllers/DemoController.php
@@ -0,0 +1,11 @@
+download($this->lfm->setName(request('file'))->path('absolute'));
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Controllers/FolderController.php b/packages/iqcontent/laravel-filemanager/src/Controllers/FolderController.php
new file mode 100644
index 0000000..d779e86
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Controllers/FolderController.php
@@ -0,0 +1,61 @@
+helper->allowFolderType($type);
+ });
+
+ return view('laravel-filemanager::tree')
+ ->with([
+ 'root_folders' => array_map(function ($type) use ($folder_types) {
+ $path = $this->lfm->dir($this->helper->getRootFolder($type));
+
+ return (object) [
+ 'name' => trans('laravel-filemanager::lfm.title-' . $type),
+ 'url' => $path->path('working_dir'),
+ 'children' => $path->folders(),
+ 'has_next' => ! ($type == end($folder_types)),
+ ];
+ }, $folder_types),
+ ]);
+ }
+
+ /**
+ * Add a new folder.
+ *
+ * @return mixed
+ */
+ public function getAddfolder()
+ {
+ $folder_name = $this->helper->input('name');
+
+ if(config('lfm.alphanumeric_directory')){
+ $folder_name = $this->helper->sanitize($folder_name);
+ }
+ try {
+ if (empty($folder_name)) {
+ return $this->helper->error('folder-name');
+ } elseif ($this->lfm->setName($folder_name)->exists()) {
+ return $this->helper->error('folder-exist');
+ } elseif (config('lfm.alphanumeric_directory') && preg_match('/[^\w-]/i', $folder_name)) {
+ return $this->helper->error('folder-alnum');
+ } else {
+ $this->lfm->setName($folder_name)->createFolder();
+ }
+ } catch (\Exception $e) {
+ return $e->getMessage();
+ }
+
+ return parent::$success_response;
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Controllers/ItemsController.php b/packages/iqcontent/laravel-filemanager/src/Controllers/ItemsController.php
new file mode 100644
index 0000000..c7566bf
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Controllers/ItemsController.php
@@ -0,0 +1,79 @@
+ array_map(function ($item) {
+ return $item->fill()->attributes;
+ }, array_merge($this->lfm->folders(), $this->lfm->files())),
+ 'display' => $this->helper->getDisplayMode(),
+ 'working_dir' => $this->lfm->path('working_dir'),
+ ];
+ }
+
+ public function move()
+ {
+ $items = request('items');
+ $folder_types = array_filter(['user', 'share'], function ($type) {
+ return $this->helper->allowFolderType($type);
+ });
+ return view('laravel-filemanager::move')
+ ->with([
+ 'root_folders' => array_map(function ($type) use ($folder_types) {
+ $path = $this->lfm->dir($this->helper->getRootFolder($type));
+
+ return (object) [
+ 'name' => trans('laravel-filemanager::lfm.title-' . $type),
+ 'url' => $path->path('working_dir'),
+ 'children' => $path->folders(),
+ 'has_next' => ! ($type == end($folder_types)),
+ ];
+ }, $folder_types),
+ ])
+ ->with('items', $items);
+ }
+
+ public function domove()
+ {
+ $target = $this->helper->input('goToFolder');
+ $items = $this->helper->input('items');
+
+ foreach ($items as $item) {
+ $old_file = $this->lfm->pretty($item);
+ $is_directory = $old_file->isDirectory();
+
+ if ($old_file->hasThumb()) {
+ $new_file = $this->lfm->setName($item)->thumb()->dir($target);
+ if ($is_directory) {
+ event(new FolderIsMoving($old_file->path(), $new_file->path()));
+ } else {
+ event(new FileIsMoving($old_file->path(), $new_file->path()));
+ }
+ $this->lfm->setName($item)->thumb()->move($new_file);
+ }
+ $new_file = $this->lfm->setName($item)->dir($target);
+ $this->lfm->setName($item)->move($new_file);
+ if ($is_directory) {
+ event(new FolderWasMoving($old_file->path(), $new_file->path()));
+ } else {
+ event(new FileWasMoving($old_file->path(), $new_file->path()));
+ }
+ };
+
+ return parent::$success_response;
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Controllers/LfmController.php b/packages/iqcontent/laravel-filemanager/src/Controllers/LfmController.php
new file mode 100644
index 0000000..1d3dbbd
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Controllers/LfmController.php
@@ -0,0 +1,108 @@
+applyIniOverrides();
+ }
+
+ /**
+ * Set up needed functions.
+ *
+ * @return object|null
+ */
+ public function __get($var_name)
+ {
+ if ($var_name === 'lfm') {
+ return app(LfmPath::class);
+ } elseif ($var_name === 'helper') {
+ return app(Lfm::class);
+ }
+ }
+
+ /**
+ * Show the filemanager.
+ *
+ * @return mixed
+ */
+ public function show()
+ {
+ return view('laravel-filemanager::index')
+ ->withHelper($this->helper);
+ }
+
+ /**
+ * Check if any extension or config is missing.
+ *
+ * @return array
+ */
+ public function getErrors()
+ {
+ $arr_errors = [];
+
+ if (! extension_loaded('gd') && ! extension_loaded('imagick')) {
+ array_push($arr_errors, trans('laravel-filemanager::lfm.message-extension_not_found'));
+ }
+
+ if (! extension_loaded('exif')) {
+ array_push($arr_errors, 'EXIF extension not found.');
+ }
+
+ if (! extension_loaded('fileinfo')) {
+ array_push($arr_errors, 'Fileinfo extension not found.');
+ }
+
+ $mine_config_key = 'lfm.folder_categories.'
+ . $this->helper->currentLfmType()
+ . '.valid_mime';
+
+ if (! is_array(config($mine_config_key))) {
+ array_push($arr_errors, 'Config : ' . $mine_config_key . ' is not a valid array.');
+ }
+
+ return $arr_errors;
+ }
+
+ public function error($error_type, $variables = [])
+ {
+ return $this->helper->error($error_type, $variables);
+ }
+
+ public function getError($error_type, $variables = [])
+ {
+ return $this->helper->getError($error_type, $variables);
+ }
+
+
+ public function response($error_type, $variables = [])
+ {
+ return $this->helper->response($error_type, $variables);
+ }
+
+ /**
+ * Overrides settings in php.ini.
+ *
+ * @return null
+ */
+ public function applyIniOverrides()
+ {
+ $overrides = config('lfm.php_ini_overrides');
+ if ($overrides && is_array($overrides) && count($overrides) === 0) {
+ return;
+ }
+
+ foreach ($overrides as $key => $value) {
+ if ($value && $value != 'false') {
+ ini_set($key, $value);
+ }
+ }
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Controllers/RedirectController.php b/packages/iqcontent/laravel-filemanager/src/Controllers/RedirectController.php
new file mode 100644
index 0000000..636d5fa
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Controllers/RedirectController.php
@@ -0,0 +1,20 @@
+helper->config('disk'));
+
+ if (! $storage->exists($file_path)) {
+ abort(404);
+ }
+
+ return response($storage->get($file_path))
+ ->header('Content-Type', $storage->mimeType($file_path));
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Controllers/RenameController.php b/packages/iqcontent/laravel-filemanager/src/Controllers/RenameController.php
new file mode 100644
index 0000000..20c66a5
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Controllers/RenameController.php
@@ -0,0 +1,91 @@
+helper->input('file');
+ $new_name = $this->helper->input('new_name');
+
+
+
+ $old_file = $this->lfm->pretty($old_name);
+
+ return $old_file->path('working_dir');
+
+
+ $is_directory = $old_file->isDirectory();
+
+ if (empty($new_name)) {
+ if ($is_directory) {
+ return $this->response('error', parent::getError('folder-name'));
+ } else {
+ return $this->response('error', parent::getError('file-name'));
+ }
+ }
+
+
+ if ($is_directory) {
+ if(config('lfm.alphanumeric_directory')){
+ $new_name = $this->helper->sanitize($new_name);
+ if(preg_match('/[^\w-]/i', $new_name)){
+ return $this->response('error', parent::getError('folder-alnum'));
+ }
+ }
+ }else {
+ if (config('lfm.alphanumeric_filename')) {
+ $extension = $old_file->extension();
+ if ($extension) {
+ $new_name = str_replace('.' . $extension, '', $new_name);
+ $new_name = $this->helper->sanitize($new_name) . '.' . $extension;
+ }
+ }
+ }
+
+ if($this->lfm->setName($new_name)->exists()) {
+ return $this->response('error', parent::getError('rename'));
+ }
+
+ if (! $is_directory) {
+ $extension = $old_file->extension();
+ if ($extension) {
+ $new_name = str_replace('.' . $extension, '', $new_name) . '.' . $extension;
+ }
+ }
+
+ $new_file = $this->lfm->setName($new_name)->path('absolute');
+
+ if ($is_directory) {
+ event(new FolderIsRenaming($old_file->path(), $new_file));
+ } else {
+ event(new ImageIsRenaming($old_file->path(), $new_file));
+ }
+
+ if ($old_file->hasThumb()) {
+ $this->lfm->setName($old_name)->thumb()
+ ->move($this->lfm->setName($new_name)->thumb());
+ }
+
+ $this->lfm->setName($old_name)
+ ->move($this->lfm->setName($new_name));
+
+ //->renameModel($new_name)
+
+
+
+ if ($is_directory) {
+ event(new FolderWasRenamed($old_file->path(), $new_file));
+ } else {
+ event(new ImageWasRenamed($old_file->path(), $new_file));
+ }
+
+ return parent::$success_response;
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Controllers/ResizeController.php b/packages/iqcontent/laravel-filemanager/src/Controllers/ResizeController.php
new file mode 100644
index 0000000..3b36e73
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Controllers/ResizeController.php
@@ -0,0 +1,65 @@
+lfm->setName($image)->path('absolute'));
+ $original_width = $original_image->width();
+ $original_height = $original_image->height();
+
+ $scaled = false;
+
+ // FIXME size should be configurable
+ if ($original_width > 600) {
+ $ratio = 600 / $original_width;
+ $width = $original_width * $ratio;
+ $height = $original_height * $ratio;
+ $scaled = true;
+ } else {
+ $width = $original_width;
+ $height = $original_height;
+ }
+
+ if ($height > 400) {
+ $ratio = 400 / $original_height;
+ $width = $original_width * $ratio;
+ $height = $original_height * $ratio;
+ $scaled = true;
+ }
+
+ return view('laravel-filemanager::resize')
+ ->with('img', $this->lfm->pretty($image))
+ ->with('height', number_format($height, 0))
+ ->with('width', $width)
+ ->with('original_height', $original_height)
+ ->with('original_width', $original_width)
+ ->with('scaled', $scaled)
+ ->with('ratio', $ratio);
+ }
+
+ public function performResize()
+ {
+ $image_path = $this->lfm->setName(request('img'))->path('absolute');
+
+ event(new ImageIsResizing($image_path));
+ Image::make($image_path)->resize(request('dataWidth'), request('dataHeight'))->save();
+ event(new ImageWasResized($image_path));
+
+ return parent::$success_response;
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Controllers/UploadController.php b/packages/iqcontent/laravel-filemanager/src/Controllers/UploadController.php
new file mode 100644
index 0000000..18cb59e
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Controllers/UploadController.php
@@ -0,0 +1,58 @@
+errors = [];
+ }
+
+ /**
+ * Upload files
+ *
+ * @param void
+ * @return string
+ */
+ public function upload()
+ {
+ $uploaded_files = request()->file('upload');
+ $error_bag = [];
+ $new_filename = null;
+
+ foreach (is_array($uploaded_files) ? $uploaded_files : [$uploaded_files] as $file) {
+ try {
+ $new_filename = $this->lfm->upload($file);
+ } catch (\Exception $e) {
+ Log::error($e->getMessage(), [
+ 'file' => $e->getFile(),
+ 'line' => $e->getLine(),
+ 'trace' => $e->getTraceAsString()
+ ]);
+ array_push($error_bag, $e->getMessage());
+ }
+ }
+
+ if (is_array($uploaded_files)) {
+ $response = count($error_bag) > 0 ? $error_bag : parent::$success_response;
+ } else { // upload via ckeditor 'Upload' tab
+ if (is_null($new_filename)) {
+ $response = $error_bag[0];
+ } else {
+ $response = view(Lfm::PACKAGE_NAME . '::use')
+ ->withFile($this->lfm->setName($new_filename)->url());
+ }
+ }
+
+ return $response;
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Events/FileIsMoving.php b/packages/iqcontent/laravel-filemanager/src/Events/FileIsMoving.php
new file mode 100644
index 0000000..1db70a2
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Events/FileIsMoving.php
@@ -0,0 +1,28 @@
+old_path = $old_path;
+ $this->new_path = $new_path;
+ }
+
+ /**
+ * @return string
+ */
+ public function oldPath()
+ {
+ return $this->old_path;
+ }
+
+ public function newPath()
+ {
+ return $this->new_path;
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Events/FileWasMoving.php b/packages/iqcontent/laravel-filemanager/src/Events/FileWasMoving.php
new file mode 100644
index 0000000..dc3d7a8
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Events/FileWasMoving.php
@@ -0,0 +1,28 @@
+old_path = $old_path;
+ $this->new_path = $new_path;
+ }
+
+ /**
+ * @return string
+ */
+ public function oldPath()
+ {
+ return $this->old_path;
+ }
+
+ public function newPath()
+ {
+ return $this->new_path;
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Events/FolderIsMoving.php b/packages/iqcontent/laravel-filemanager/src/Events/FolderIsMoving.php
new file mode 100644
index 0000000..fc15504
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Events/FolderIsMoving.php
@@ -0,0 +1,28 @@
+old_path = $old_path;
+ $this->new_path = $new_path;
+ }
+
+ /**
+ * @return string
+ */
+ public function oldPath()
+ {
+ return $this->old_path;
+ }
+
+ public function newPath()
+ {
+ return $this->new_path;
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Events/FolderIsRenaming.php b/packages/iqcontent/laravel-filemanager/src/Events/FolderIsRenaming.php
new file mode 100644
index 0000000..a22dff7
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Events/FolderIsRenaming.php
@@ -0,0 +1,28 @@
+old_path = $old_path;
+ $this->new_path = $new_path;
+ }
+
+ /**
+ * @return string
+ */
+ public function oldPath()
+ {
+ return $this->old_path;
+ }
+
+ public function newPath()
+ {
+ return $this->new_path;
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Events/FolderWasMoving.php b/packages/iqcontent/laravel-filemanager/src/Events/FolderWasMoving.php
new file mode 100644
index 0000000..ecd05bb
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Events/FolderWasMoving.php
@@ -0,0 +1,28 @@
+old_path = $old_path;
+ $this->new_path = $new_path;
+ }
+
+ /**
+ * @return string
+ */
+ public function oldPath()
+ {
+ return $this->old_path;
+ }
+
+ public function newPath()
+ {
+ return $this->new_path;
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Events/FolderWasRenamed.php b/packages/iqcontent/laravel-filemanager/src/Events/FolderWasRenamed.php
new file mode 100755
index 0000000..c50d8c2
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Events/FolderWasRenamed.php
@@ -0,0 +1,28 @@
+old_path = $old_path;
+ $this->new_path = $new_path;
+ }
+
+ /**
+ * @return string
+ */
+ public function oldPath()
+ {
+ return $this->old_path;
+ }
+
+ public function newPath()
+ {
+ return $this->new_path;
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Events/ImageIsCropping.php b/packages/iqcontent/laravel-filemanager/src/Events/ImageIsCropping.php
new file mode 100644
index 0000000..6a3fda4
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Events/ImageIsCropping.php
@@ -0,0 +1,21 @@
+path = $path;
+ }
+
+ /**
+ * @return string
+ */
+ public function path()
+ {
+ return $this->path;
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Events/ImageIsDeleting.php b/packages/iqcontent/laravel-filemanager/src/Events/ImageIsDeleting.php
new file mode 100644
index 0000000..92d1ccb
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Events/ImageIsDeleting.php
@@ -0,0 +1,21 @@
+path = $path;
+ }
+
+ /**
+ * @return string
+ */
+ public function path()
+ {
+ return $this->path;
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Events/ImageIsRenaming.php b/packages/iqcontent/laravel-filemanager/src/Events/ImageIsRenaming.php
new file mode 100644
index 0000000..2e050eb
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Events/ImageIsRenaming.php
@@ -0,0 +1,28 @@
+old_path = $old_path;
+ $this->new_path = $new_path;
+ }
+
+ /**
+ * @return string
+ */
+ public function oldPath()
+ {
+ return $this->old_path;
+ }
+
+ public function newPath()
+ {
+ return $this->new_path;
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Events/ImageIsResizing.php b/packages/iqcontent/laravel-filemanager/src/Events/ImageIsResizing.php
new file mode 100644
index 0000000..4a3fe88
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Events/ImageIsResizing.php
@@ -0,0 +1,21 @@
+path = $path;
+ }
+
+ /**
+ * @return string
+ */
+ public function path()
+ {
+ return $this->path;
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Events/ImageIsUploading.php b/packages/iqcontent/laravel-filemanager/src/Events/ImageIsUploading.php
new file mode 100644
index 0000000..ce090a6
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Events/ImageIsUploading.php
@@ -0,0 +1,21 @@
+path = $path;
+ }
+
+ /**
+ * @return string
+ */
+ public function path()
+ {
+ return $this->path;
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Events/ImageWasCropped.php b/packages/iqcontent/laravel-filemanager/src/Events/ImageWasCropped.php
new file mode 100644
index 0000000..95e09b8
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Events/ImageWasCropped.php
@@ -0,0 +1,21 @@
+path = $path;
+ }
+
+ /**
+ * @return string
+ */
+ public function path()
+ {
+ return $this->path;
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Events/ImageWasDeleted.php b/packages/iqcontent/laravel-filemanager/src/Events/ImageWasDeleted.php
new file mode 100755
index 0000000..e7b58ad
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Events/ImageWasDeleted.php
@@ -0,0 +1,21 @@
+path = $path;
+ }
+
+ /**
+ * @return string
+ */
+ public function path()
+ {
+ return $this->path;
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Events/ImageWasRenamed.php b/packages/iqcontent/laravel-filemanager/src/Events/ImageWasRenamed.php
new file mode 100755
index 0000000..a82490f
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Events/ImageWasRenamed.php
@@ -0,0 +1,28 @@
+old_path = $old_path;
+ $this->new_path = $new_path;
+ }
+
+ /**
+ * @return string
+ */
+ public function oldPath()
+ {
+ return $this->old_path;
+ }
+
+ public function newPath()
+ {
+ return $this->new_path;
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Events/ImageWasResized.php b/packages/iqcontent/laravel-filemanager/src/Events/ImageWasResized.php
new file mode 100644
index 0000000..c90f0cc
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Events/ImageWasResized.php
@@ -0,0 +1,21 @@
+path = $path;
+ }
+
+ /**
+ * @return string
+ */
+ public function path()
+ {
+ return $this->path;
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Events/ImageWasUploaded.php b/packages/iqcontent/laravel-filemanager/src/Events/ImageWasUploaded.php
new file mode 100644
index 0000000..96276b4
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Events/ImageWasUploaded.php
@@ -0,0 +1,21 @@
+path = $path;
+ }
+
+ /**
+ * @return string
+ */
+ public function path()
+ {
+ return $this->path;
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Handlers/ConfigHandler.php b/packages/iqcontent/laravel-filemanager/src/Handlers/ConfigHandler.php
new file mode 100644
index 0000000..6825b2f
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Handlers/ConfigHandler.php
@@ -0,0 +1,11 @@
+id();
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Handlers/LfmConfigHandler.php b/packages/iqcontent/laravel-filemanager/src/Handlers/LfmConfigHandler.php
new file mode 100644
index 0000000..23d2b47
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Handlers/LfmConfigHandler.php
@@ -0,0 +1,11 @@
+loadTranslationsFrom(__DIR__.'/lang', 'laravel-filemanager');
+
+ $this->loadViewsFrom(__DIR__.'/views', 'laravel-filemanager');
+
+ $this->publishes([
+ __DIR__ . '/config/lfm.php' => base_path('config/lfm.php'),
+ ], 'lfm_config');
+
+ $this->publishes([
+ __DIR__.'/../public' => public_path('vendor/laravel-filemanager'),
+ ], 'lfm_public');
+
+ $this->publishes([
+ __DIR__.'/views' => base_path('resources/views/vendor/laravel-filemanager'),
+ ], 'lfm_view');
+
+ $this->publishes([
+ __DIR__.'/Handlers/LfmConfigHandler.php' => base_path('app/Handlers/LfmConfigHandler.php'),
+ ], 'lfm_handler');
+
+ $this->publishes([
+ __DIR__.'/../database/migrations' => base_path('database/migrations'),
+ ], 'lfm_migrations');
+
+ if (config('lfm.use_package_routes')) {
+ Route::group(['prefix' => 'laravel-filemanager', 'middleware' => ['web', 'auth']], function () {
+ \IqContent\LaravelFilemanager\Lfm::routes();
+ });
+ }
+ }
+
+ /**
+ * Register the application services.
+ *
+ * @return void
+ */
+ public function register()
+ {
+ $this->app->singleton('laravel-filemanager', function () {
+ return true;
+ });
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Lfm.php b/packages/iqcontent/laravel-filemanager/src/Lfm.php
new file mode 100644
index 0000000..a5b0a0e
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Lfm.php
@@ -0,0 +1,380 @@
+config = $config;
+ $this->request = $request;
+ }
+
+ public function getStorage($storage_path)
+ {
+ return new LfmStorageRepository($storage_path, $this);
+ }
+
+ public function input($key)
+ {
+ return $this->translateFromUtf8($this->request->input($key));
+ }
+
+ public function config($key)
+ {
+ return $this->config->get('lfm.' . $key);
+ }
+
+ /**
+ * Get only the file name.
+ *
+ * @param string $path Real path of a file.
+ * @return string
+ */
+ public function getNameFromPath($path)
+ {
+ return pathinfo($path, PATHINFO_BASENAME);
+ }
+
+ public function getDirFromPath($path)
+ {
+ return pathinfo($path, PATHINFO_DIRNAME);
+ }
+
+ public function allowFolderType($type)
+ {
+ if ($type == 'user') {
+ return $this->allowMultiUser();
+ } else {
+ return $this->allowShareFolder();
+ }
+ }
+
+ public function getCategoryName()
+ {
+ $type = $this->currentLfmType();
+
+ return $this->config->get('lfm.folder_categories.' . $type . '.folder_name', 'files');
+ }
+
+ /**
+ * Get current lfm type.
+ *
+ * @return string
+ */
+ public function currentLfmType()
+ {
+ $lfm_type = 'file';
+
+ $request_type = lcfirst(str_singular($this->input('type') ?: ''));
+ $available_types = array_keys($this->config->get('lfm.folder_categories') ?: []);
+
+ if (in_array($request_type, $available_types)) {
+ $lfm_type = $request_type;
+ }
+
+ return $lfm_type;
+ }
+
+ public function getDisplayMode()
+ {
+ $type_key = $this->currentLfmType();
+ $startup_view = $this->config->get('lfm.folder_categories.' . $type_key . '.startup_view');
+
+ $view_type = 'grid';
+ $target_display_type = $this->input('show_list') ?: $startup_view;
+
+ if (in_array($target_display_type, ['list', 'grid'])) {
+ $view_type = $target_display_type;
+ }
+
+ return $view_type;
+ }
+
+ public function getUserSlug()
+ {
+ $config = $this->config->get('lfm.user_folder_name');
+
+ if (is_callable($config)) {
+ return call_user_func($config);
+ }
+
+ if (class_exists($config)) {
+ return app()->make($config)->userField();
+ }
+
+ return empty(auth()->user()) ? '' : auth()->user()->$config;
+ }
+
+ public function getRootFolder($type = null)
+ {
+ if (is_null($type)) {
+ $type = 'share';
+ if ($this->allowFolderType('user')) {
+ $type = 'user';
+ }
+ }
+
+ if ($type === 'user') {
+ $folder = $this->getUserSlug();
+ } else {
+ $folder = $this->config->get('lfm.shared_folder_name');
+ }
+
+ // the slash is for url, dont replace it with directory seperator
+ return '/' . $folder;
+ }
+
+ public function getThumbFolderName()
+ {
+ return $this->config->get('lfm.thumb_folder_name');
+ }
+
+ public function getFileIcon($ext)
+ {
+ return $this->config->get("lfm.file_icon_array.{$ext}", 'fa-file');
+ }
+
+ public function getFileType($ext)
+ {
+ return $this->config->get("lfm.file_type_array.{$ext}", 'File');
+ }
+
+ public function availableMimeTypes()
+ {
+ return $this->config->get('lfm.folder_categories.' . $this->currentLfmType() . '.valid_mime');
+ }
+
+ public function maxUploadSize()
+ {
+ return $this->config->get('lfm.folder_categories.' . $this->currentLfmType() . '.max_size');
+ }
+
+ /**
+ * Check if users are allowed to use their private folders.
+ *
+ * @return bool
+ */
+ public function allowMultiUser()
+ {
+ return $this->config->get('lfm.allow_multi_user') === true;
+ }
+
+ /**
+ * Check if users are allowed to use the shared folder.
+ * This can be disabled only when allowMultiUser() is true.
+ *
+ * @return bool
+ */
+ public function allowShareFolder()
+ {
+ if (! $this->allowMultiUser()) {
+ return true;
+ }
+
+ return $this->config->get('lfm.allow_share_folder') === true;
+ }
+
+ /**
+ * Translate file name to make it compatible on Windows.
+ *
+ * @param string $input Any string.
+ * @return string
+ */
+ public function translateFromUtf8($input)
+ {
+ if ($this->isRunningOnWindows()) {
+ $input = iconv('UTF-8', mb_detect_encoding($input), $input);
+ }
+
+ return $input;
+ }
+
+ /**
+ * Get directory seperator of current operating system.
+ *
+ * @return string
+ */
+ public function ds()
+ {
+ $ds = Lfm::DS;
+ if ($this->isRunningOnWindows()) {
+ $ds = '\\';
+ }
+
+ return $ds;
+ }
+
+ /**
+ * Check current operating system is Windows or not.
+ *
+ * @return bool
+ */
+ public function isRunningOnWindows()
+ {
+ return strtoupper(substr(PHP_OS, 0, 3)) === 'WIN';
+ }
+
+ /**
+ * Shorter function of getting localized error message..
+ *
+ * @param mixed $error_type Key of message in lang file.
+ * @param mixed $variables Variables the message needs.
+ * @return string
+ */
+ public function error($error_type, $variables = [])
+ {
+ die(trans(self::PACKAGE_NAME . '::lfm.error-' . $error_type, $variables));
+ // throw new \Exception(trans(self::PACKAGE_NAME . '::lfm.error-' . $error_type, $variables));
+ }
+
+
+ public function getError($error_type, $variables = [])
+ {
+ return trans(self::PACKAGE_NAME . '::lfm.error-' . $error_type, $variables);
+
+ }
+
+
+ public function response($error_type, $variables = [])
+ {
+ return response()->json(['type' => $error_type, 'data'=>$variables], 200);
+
+ }
+
+
+
+
+ public function sanitize($string, $alphanumeric = true, $force_lowercase = false)
+ {
+ $strip = array("~", "`", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_", "=", "+", "[", "{", "]",
+ "}", "\\", "|", ";", ":", "\"", "'", "‘", "’", "“", "”", "–", "—",
+ "—", "–", ",", "<", ".", ">", "/", "?");
+ $clean = trim(str_replace($strip, "", strip_tags($string)));
+ $clean = preg_replace('/\s+/', "-", $clean); //leerzeichen
+ $clean = ($alphanumeric) ? preg_replace('/[^A-Za-z0-9\-\']/', "", $clean) : $clean ;
+
+ return ($force_lowercase) ?
+ (function_exists('mb_strtolower')) ?
+ mb_strtolower($clean, 'UTF-8') :
+ strtolower($clean) :
+ $clean;
+ }
+
+ /**
+ * Generates routes of this package.
+ *
+ * @return void
+ */
+ public static function routes()
+ {
+ $middleware = [ CreateDefaultFolder::class, MultiUser::class ];
+ $as = 'iqcontent.lfm.';
+ $namespace = '\\IqContent\\LaravelFilemanager\\Controllers\\';
+
+ Route::group(compact('middleware', 'as', 'namespace'), function () {
+
+ // display main layout
+ Route::get('/', [
+ 'uses' => 'LfmController@show',
+ 'as' => 'show',
+ ]);
+
+ // display integration error messages
+ Route::get('/errors', [
+ 'uses' => 'LfmController@getErrors',
+ 'as' => 'getErrors',
+ ]);
+
+ // upload
+ Route::any('/upload', [
+ 'uses' => 'UploadController@upload',
+ 'as' => 'upload',
+ ]);
+
+ // list images & files
+ Route::get('/jsonitems', [
+ 'uses' => 'ItemsController@getItems',
+ 'as' => 'getItems',
+ ]);
+
+ Route::get('/move', [
+ 'uses' => 'ItemsController@move',
+ 'as' => 'move',
+ ]);
+
+ Route::get('/domove', [
+ 'uses' => 'ItemsController@domove',
+ 'as' => 'domove'
+ ]);
+
+ // folders
+ Route::get('/newfolder', [
+ 'uses' => 'FolderController@getAddfolder',
+ 'as' => 'getAddfolder',
+ ]);
+
+ // list folders
+ Route::get('/folders', [
+ 'uses' => 'FolderController@getFolders',
+ 'as' => 'getFolders',
+ ]);
+
+ // crop
+ Route::get('/crop', [
+ 'uses' => 'CropController@getCrop',
+ 'as' => 'getCrop',
+ ]);
+ Route::get('/cropimage', [
+ 'uses' => 'CropController@getCropimage',
+ 'as' => 'getCropimage',
+ ]);
+ Route::get('/cropnewimage', [
+ 'uses' => 'CropController@getNewCropimage',
+ 'as' => 'getCropimage',
+ ]);
+
+ // rename
+ Route::get('/rename', [
+ 'uses' => 'RenameController@getRename',
+ 'as' => 'getRename',
+ ]);
+
+ // scale/resize
+ Route::get('/resize', [
+ 'uses' => 'ResizeController@getResize',
+ 'as' => 'getResize',
+ ]);
+ Route::get('/doresize', [
+ 'uses' => 'ResizeController@performResize',
+ 'as' => 'performResize',
+ ]);
+
+ // download
+ Route::get('/download', [
+ 'uses' => 'DownloadController@getDownload',
+ 'as' => 'getDownload',
+ ]);
+
+ // delete
+ Route::get('/delete', [
+ 'uses' => 'DeleteController@getDelete',
+ 'as' => 'getDelete',
+ ]);
+
+ Route::get('/demo', 'DemoController@index');
+ });
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/LfmItem.php b/packages/iqcontent/laravel-filemanager/src/LfmItem.php
new file mode 100644
index 0000000..7abad5d
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/LfmItem.php
@@ -0,0 +1,222 @@
+lfm = $lfm->thumb(false);
+ $this->helper = $helper;
+ }
+
+ public function __get($var_name)
+ {
+ if (!array_key_exists($var_name, $this->attributes)) {
+ $function_name = camel_case($var_name);
+ $this->attributes[$var_name] = $this->$function_name();
+ }
+
+ return $this->attributes[$var_name];
+ }
+
+ public function fill()
+ {
+ foreach ($this->columns as $column) {
+ $this->__get($column);
+ }
+
+ return $this;
+ }
+
+ public function name()
+ {
+ return $this->lfm->getName();
+ }
+
+ public function model()
+ {
+ return $this->lfm->getModel();
+ }
+
+ public function deleteModel()
+ {
+ return $this->lfm->deleteModel();
+ }
+
+ public function path($type = 'absolute')
+ {
+ return $this->lfm->path($type);
+ }
+
+ public function isDirectory()
+ {
+ return $this->lfm->isDirectory();
+ }
+
+ public function isFile()
+ {
+ return ! $this->isDirectory();
+ }
+
+ /**
+ * Check a file is image or not.
+ *
+ * @param mixed $file Real path of a file or instance of UploadedFile.
+ * @return bool
+ */
+ public function isImage()
+ {
+ return starts_with($this->mimeType(), 'image');
+ }
+
+ /**
+ * Get mime type of a file.
+ *
+ * @param mixed $file Real path of a file or instance of UploadedFile.
+ * @return string
+ */
+ // TODO: uploaded file
+ public function mimeType()
+ {
+ // if ($file instanceof UploadedFile) {
+ // return $file->getMimeType();
+ // }
+
+ return $this->lfm->mimeType();
+ }
+
+ public function extension()
+ {
+ return $this->lfm->extension();
+ }
+
+ public function url()
+ {
+ if ($this->isDirectory()) {
+ return $this->lfm->path('working_dir');
+ }
+
+ return $this->lfm->url();
+ }
+
+ public function size()
+ {
+ return $this->isFile() ? $this->humanFilesize($this->lfm->size()) : '';
+ }
+
+ public function time()
+ {
+ return $this->lfm->lastModified();
+ }
+
+ public function dimensions()
+ {
+
+ if ($this->isImage()) {
+ //return $this->lfm->thumb($this->hasThumb())->url(true);
+ }
+
+ return null;
+ }
+
+ public function thumbUrl()
+ {
+ //edit
+ if ($this->isDirectory()) {
+ return null;
+ }
+
+ if ($this->isImage()) {
+ return $this->lfm->thumb($this->hasThumb())->url(true);
+ }
+
+ return null;
+ }
+
+ public function icon()
+ {
+ //edit
+ if ($this->isDirectory()) {
+ return 'fa-folder';
+ }
+
+ if ($this->isImage()) {
+ return 'fa-image';
+ }
+ //edit
+ return $this->helper->getFileIcon($this->extension());
+ //return $this->extension();
+ }
+
+ public function type()
+ {
+ if ($this->isDirectory()) {
+ return trans(Lfm::PACKAGE_NAME . '::lfm.type-folder');
+ }
+
+ if ($this->isImage()) {
+ return $this->mimeType();
+ }
+
+ return $this->helper->getFileType($this->extension());
+ }
+
+ public function hasThumb()
+ {
+ if (!$this->isImage()) {
+ return false;
+ }
+
+ if (!$this->lfm->thumb()->exists()) {
+ return false;
+ }
+
+ return true;
+ }
+
+ public function shouldCreateThumb()
+ {
+ if (!$this->helper->config('should_create_thumbnails')) {
+ return false;
+ }
+
+ if (!$this->isImage()) {
+ return false;
+ }
+
+ if (in_array($this->mimeType(), ['image/gif', 'image/svg+xml'])) {
+ return false;
+ }
+
+ return true;
+ }
+
+ public function get()
+ {
+ return $this->lfm->get();
+ }
+
+ /**
+ * Make file size readable.
+ *
+ * @param int $bytes File size in bytes.
+ * @param int $decimals Decimals.
+ * @return string
+ */
+ public function humanFilesize($bytes, $decimals = 2)
+ {
+ $size = ['B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
+ $factor = floor((strlen($bytes) - 1) / 3);
+
+ return sprintf("%.{$decimals}f %s", $bytes / pow(1024, $factor), @$size[$factor]);
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/LfmPath.php b/packages/iqcontent/laravel-filemanager/src/LfmPath.php
new file mode 100644
index 0000000..ebdd91c
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/LfmPath.php
@@ -0,0 +1,437 @@
+helper = $lfm;
+ }
+
+ public function __get($var_name)
+ {
+ if ($var_name == 'storage') {
+ return $this->helper->getStorage($this->path('url'));
+ }
+ }
+
+ public function __call($function_name, $arguments)
+ {
+ return $this->storage->$function_name(...$arguments);
+ }
+
+ public function dir($working_dir)
+ {
+ $this->working_dir = $working_dir;
+
+ return $this;
+ }
+
+ public function thumb($is_thumb = true)
+ {
+ $this->is_thumb = $is_thumb;
+
+ return $this;
+ }
+
+ public function setName($item_name)
+ {
+ $this->item_name = $item_name;
+
+ return $this;
+ }
+
+ public function setModel()
+ {
+ $working_dir = $this->path('url');
+ $parent_dir = substr($working_dir, 0, strrpos($working_dir, '/'));
+ $parent_folder = IQContentFolder::where('path', $parent_dir)->first();
+
+ if ($this->isDirectory()) {
+ if($this->folder_model == null){
+ $this->folder_model = new IQContentFolder();
+ }
+
+ }else{
+ if($this->file_model == null){
+ $this->file_model = new IQContentFile();
+ $this->file_model = IQContentFile::where('name', $this->item_name)->where('folder_id', $parent_folder->id)->first();
+ }
+ }
+ //
+
+ return $this;
+ }
+
+ public function renameModel($new_name)
+ {
+
+ if ($this->isDirectory()) {
+ if($this->folder_model != null){
+ $this->folder_model->name = $new_name;
+ $this->folder_mode->save();
+ }
+
+ }else{
+ if($this->file_model != null){
+ $this->file_model->name = $new_name;
+ $this->file_model->save();
+ }
+ }
+ return $this;
+ }
+
+
+ public function getName()
+ {
+ return $this->item_name;
+ }
+
+ public function getModel()
+ {
+ if ($this->isDirectory()) {
+ return $this->folder_model;
+
+ }else{
+ return $this->file_model;
+ }
+ }
+
+ public function path($type = 'storage')
+ {
+ if ($type == 'working_dir') {
+ // working directory: /{user_slug}
+ return $this->translateToLfmPath($this->normalizeWorkingDir());
+ } elseif ($type == 'url') {
+ // storage: files/{user_slug}
+ return $this->helper->getCategoryName() . $this->path('working_dir');
+ } elseif ($type == 'storage') {
+ // storage: files/{user_slug}
+ // storage on windows: files\{user_slug}
+ return $this->translateToOsPath($this->path('url'));
+ } elseif ($type == 'dirname') {
+ return $this->helper->getDirFromPath($this->path('storage'));
+ } else {
+ // absolute: /var/www/html/project/storage/app/files/{user_slug}
+ // absolute on windows: C:\project\storage\app\files\{user_slug}
+ return $this->storage->rootPath() . $this->path('storage');
+ }
+ }
+
+ public function translateToLfmPath($path)
+ {
+ return str_replace($this->helper->ds(), Lfm::DS, $path);
+ }
+
+ public function translateToOsPath($path)
+ {
+ return str_replace(Lfm::DS, $this->helper->ds(), $path);
+ }
+
+ public function url()
+ {
+ return $this->storage->url($this->path('url'));
+ }
+
+ public function folders()
+ {
+ $all_folders = array_map(function ($directory_path) {
+ return $this->pretty($directory_path);
+ }, $this->storage->directories());
+
+ $folders = array_filter($all_folders, function ($directory) {
+ return $directory->name !== $this->helper->getThumbFolderName();
+ });
+
+ return $this->sortByColumn($folders);
+ }
+
+ public function files()
+ {
+ $files = array_map(function ($file_path) {
+ return $this->pretty($file_path);
+ }, $this->storage->files());
+
+ return $this->sortByColumn($files);
+ }
+
+ public function pretty($item_path)
+ {
+ return Container::getInstance()->makeWith(LfmItem::class, [
+ 'lfm' => (clone $this)
+ ->setName($this->helper->getNameFromPath($item_path))
+ ->setModel(),
+ 'helper' => $this->helper,
+
+ ]);
+ }
+
+ public function delete()
+ {
+ if ($this->isDirectory()) {
+ return $this->storage->deleteDirectory();
+ } else {
+ return $this->storage->delete();
+ }
+ }
+
+ public function deleteModel(){
+
+ if ($this->isDirectory()) {
+ if($this->folder_model){
+ $this->folder_model->delete();
+ return true;
+ }
+ }else{
+ if($this->file_model){
+ $this->file_model->delete();
+ return true;
+ }
+ }
+
+
+ return false;
+
+ }
+
+ /**
+ * Create folder if not exist.
+ *
+ * @param string $path Real path of a directory.
+ * @return bool
+ */
+ public function createFolder()
+ {
+ if ($this->storage->exists($this)) {
+ return false;
+ }
+
+ $working_dir = $this->path('url');
+ $parent_dir = substr($working_dir, 0, strrpos($working_dir, '/'));
+ $parent_folder = IQContentFolder::where('path', $parent_dir)->first();
+
+ $this->storage->makeDirectory(0777, true, true);
+
+
+ IQContentFolder::create([
+ 'folder_id' => $parent_folder->id,
+ 'name' => $this->item_name,
+ 'identifier' => $this->item_name,
+ 'path' => $this->path('url'),
+ ]);
+ }
+
+ public function isDirectory()
+ {
+ if($this->isDirectory !== null){
+ return $this->isDirectory;
+ }
+ $working_dir = $this->path('working_dir');
+ $parent_dir = substr($working_dir, 0, strrpos($working_dir, '/'));
+
+ $parent_directories = array_map(function ($directory_path) {
+ return app(static::class)->translateToLfmPath($directory_path);
+ }, app(static::class)->dir($parent_dir)->directories());
+
+ $this->isDirectory = in_array($this->path('url'), $parent_directories);
+ return $this->isDirectory;
+ }
+
+ /**
+ * Check a folder and its subfolders is empty or not.
+ *
+ * @param string $directory_path Real path of a directory.
+ * @return bool
+ */
+ public function directoryIsEmpty()
+ {
+ return count($this->storage->allFiles()) == 0;
+ }
+
+ public function normalizeWorkingDir()
+ {
+ $path = $this->working_dir
+ ?: $this->helper->input('working_dir')
+ ?: $this->helper->getRootFolder();
+
+ if ($this->is_thumb) {
+ $path .= Lfm::DS . $this->helper->getThumbFolderName();
+ }
+
+ if ($this->getName()) {
+ $path .= Lfm::DS . $this->getName();
+ }
+
+ return $path;
+ }
+
+ /**
+ * Sort files and directories.
+ *
+ * @param mixed $arr_items Array of files or folders or both.
+ * @return array of object
+ */
+ public function sortByColumn($arr_items)
+ {
+ $sort_by = $this->helper->input('sort_type');
+ if (in_array($sort_by, ['name', 'time'])) {
+ $key_to_sort = $sort_by;
+ } else {
+ $key_to_sort = 'name';
+ }
+
+ uasort($arr_items, function ($a, $b) use ($key_to_sort) {
+ return strcmp($a->{$key_to_sort}, $b->{$key_to_sort});
+ });
+
+ return $arr_items;
+ }
+
+ public function error($error_type, $variables = [])
+ {
+ return $this->helper->error($error_type, $variables);
+ }
+
+ // Upload section
+ public function upload($file)
+ {
+ $this->uploadValidator($file);
+ $new_file_name = $this->getNewName($file);
+ $new_file_path = $this->setName($new_file_name)->path('absolute');
+
+
+ $working_url = $this->path('url');
+ $working_dir = substr($working_url, 0, strrpos($working_url, '/'));
+
+ $working_folder = IQContentFolder::where('path', $working_dir)->first();
+
+
+ event(new ImageIsUploading($new_file_path));
+ try {
+ $new_file_name = $this->saveFile($file, $new_file_name);
+ } catch (\Exception $e) {
+ \Log::info($e);
+ return $this->error('invalid');
+ }
+ IQContentFile::create([
+ 'folder_id' => $working_folder->id,
+ 'name' => $new_file_name,
+ 'identifier' => $new_file_name,
+ 'ext' => $file->guessClientExtension(),
+ 'mine' => $file->getMimeType(),
+ 'size' => $file->getSize() / 1000,
+ 'dimensions' => $this->image_dimensions,
+ 'content' => $working_dir,
+ ]);
+ // TODO should be "FileWasUploaded"
+ event(new ImageWasUploaded($new_file_path));
+
+ return $new_file_name;
+ }
+
+ private function uploadValidator($file)
+ {
+ if (empty($file)) {
+ return $this->error('file-empty');
+ } elseif (! $file instanceof UploadedFile) {
+ return $this->error('instance');
+ } elseif ($file->getError() == UPLOAD_ERR_INI_SIZE) {
+ return $this->error('file-size', ['max' => ini_get('upload_max_filesize')]);
+ } elseif ($file->getError() != UPLOAD_ERR_OK) {
+ throw new \Exception('File failed to upload. Error code: ' . $file->getError());
+ }
+
+ $new_file_name = $this->getNewName($file);
+
+ if ($this->setName($new_file_name)->exists() && !config('lfm.over_write_on_duplicate')) {
+ return $this->error('file-exist');
+ }
+
+ if (config('lfm.should_validate_mime', false)) {
+ $mimetype = $file->getMimeType();
+ if (false === in_array($mimetype, $this->helper->availableMimeTypes())) {
+ return $this->error('mime') . $mimetype;
+ }
+ }
+
+ if (config('lfm.should_validate_size', false)) {
+ // size to kb unit is needed
+ $file_size = $file->getSize() / 1000;
+ if ($file_size > $this->helper->maxUploadSize()) {
+ return $this->error('size') . $file_size;
+ }
+ }
+
+ return 'pass';
+ }
+
+ private function getNewName($file)
+ {
+ $new_file_name = $this->helper
+ ->translateFromUtf8(trim(pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME)));
+
+ if (config('lfm.rename_file') === true) {
+ $new_file_name = uniqid();
+ } elseif (config('lfm.alphanumeric_filename') === true) {
+ $new_file_name = $this->helper->sanitize($new_file_name); //preg_replace('/[^A-Za-z0-9\-\']/', '_', $new_file_name);
+ }
+
+ $extension = $file->getClientOriginalExtension();
+
+ if ($extension) {
+ $new_file_name .= '.' . $extension;
+ }
+
+ return $new_file_name;
+ }
+
+ private function saveFile($file, $new_file_name)
+ {
+ $this->setName($new_file_name)->storage->save($file);
+
+ $this->makeThumbnail($new_file_name);
+
+ return $new_file_name;
+ }
+
+ public function makeThumbnail($file_name)
+ {
+ $original_image = $this->pretty($file_name);
+
+ if (!$original_image->shouldCreateThumb()) {
+ return;
+ }
+
+ // create folder for thumbnails
+ $this->setName(null)->thumb(true)->createFolder();
+
+ // generate cropped image content
+ $this->setName($file_name)->thumb(true);
+ $image = Image::make($original_image->get());
+ $this->image_dimensions = $image->width()."x".$image->height();
+ $image->fit(config('lfm.thumb_img_width', 200), config('lfm.thumb_img_height', 200));
+
+ $this->storage->put($image->stream()->detach());
+ }
+
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/LfmStorageRepository.php b/packages/iqcontent/laravel-filemanager/src/LfmStorageRepository.php
new file mode 100644
index 0000000..4740856
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/LfmStorageRepository.php
@@ -0,0 +1,67 @@
+helper = $helper;
+ $this->disk = Storage::disk($this->helper->config('disk'));
+ $this->path = $storage_path;
+ }
+
+ public function __call($function_name, $arguments)
+ {
+ // TODO: check function exists
+ return $this->disk->$function_name($this->path, ...$arguments);
+ }
+
+ public function rootPath()
+ {
+ $adapter = $this->disk->getDriver()->getAdapter();
+
+ if ($adapter instanceof CachedAdapter) {
+ $adapter = $adapter->getAdapter();
+ }
+
+ return $adapter->getPathPrefix();
+ }
+
+ public function move($new_lfm_path)
+ {
+ return $this->disk->move($this->path, $new_lfm_path->path('storage'));
+ }
+
+ public function save($file)
+ {
+ $nameint = strripos($this->path, "/");
+ $nameclean = substr($this->path, $nameint + 1);
+ $pathclean = substr_replace($this->path, "", $nameint);
+ $this->disk->putFileAs($pathclean, $file, $nameclean, 'public');
+ }
+
+ public function url($path)
+ {
+ return $this->disk->url($path);
+ }
+
+ public function makeDirectory()
+ {
+ $this->disk->makeDirectory($this->path, ...func_get_args());
+
+ $this->disk->setVisibility($this->path, 'public');
+ }
+
+ public function extension()
+ {
+ return pathinfo($this->path, PATHINFO_EXTENSION);
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Middlewares/CreateDefaultFolder.php b/packages/iqcontent/laravel-filemanager/src/Middlewares/CreateDefaultFolder.php
new file mode 100644
index 0000000..8b7725b
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Middlewares/CreateDefaultFolder.php
@@ -0,0 +1,36 @@
+lfm = app(LfmPath::class);
+ $this->helper = app(Lfm::class);
+ }
+
+ public function handle($request, Closure $next)
+ {
+ $this->checkDefaultFolderExists('user');
+ $this->checkDefaultFolderExists('share');
+
+ return $next($request);
+ }
+
+ private function checkDefaultFolderExists($type = 'share')
+ {
+ if (! $this->helper->allowFolderType($type)) {
+ return;
+ }
+
+ $this->lfm->dir($this->helper->getRootFolder($type))->createFolder();
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Middlewares/MultiUser.php b/packages/iqcontent/laravel-filemanager/src/Middlewares/MultiUser.php
new file mode 100644
index 0000000..70ceebc
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Middlewares/MultiUser.php
@@ -0,0 +1,45 @@
+helper = app(Lfm::class);
+ }
+
+ public function handle($request, Closure $next)
+ {
+ if ($this->helper->allowFolderType('user')) {
+ $previous_dir = $request->input('working_dir');
+ $working_dir = $this->helper->getRootFolder('user');
+
+ if ($previous_dir == null) {
+ $request->merge(compact('working_dir'));
+ } elseif (! $this->validDir($previous_dir)) {
+ $request->replace(compact('working_dir'));
+ }
+ }
+
+ return $next($request);
+ }
+
+ private function validDir($previous_dir)
+ {
+ if (starts_with($previous_dir, $this->helper->getRootFolder('share'))) {
+ return true;
+ }
+
+ if (starts_with($previous_dir, $this->helper->getRootFolder('user'))) {
+ return true;
+ }
+
+ return false;
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Models/IQContentCategory.php b/packages/iqcontent/laravel-filemanager/src/Models/IQContentCategory.php
new file mode 100644
index 0000000..23016ba
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Models/IQContentCategory.php
@@ -0,0 +1,34 @@
+ [
+ 'source' => 'name'
+ ]
+ ];
+ }
+
+
+ public function tags() {
+ return $this->hasMany('IqContent\LaravelFilemanager\Models\IQContentTag', 'category_id');
+ }
+}
\ No newline at end of file
diff --git a/packages/iqcontent/laravel-filemanager/src/Models/IQContentFile.php b/packages/iqcontent/laravel-filemanager/src/Models/IQContentFile.php
new file mode 100644
index 0000000..5d0c5f2
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Models/IQContentFile.php
@@ -0,0 +1,85 @@
+belongsTo('IqContent\LaravelFilemanager\Models\IQContentFolder', 'folder_id');
+ }
+
+ public function file_tags() {
+ return $this->hasMany('IqContent\LaravelFilemanager\Models\IQContentFileTag', 'file_id');
+ }
+
+ public function sluggable()
+ {
+ return [
+ 'slug' => [
+ 'source' => 'name'
+ ]
+ ];
+ }
+
+ public function setIdentifierAttribute( $value ) {
+ if(!isset($value) || $value == ""){
+ $this->attributes['identifier'] = Str::slug(pre_slug($this->name), '-');
+ }else{
+ $this->attributes['identifier'] = Str::slug(pre_slug($value), '-');
+ }
+ }
+
+ public function formatBytes($precision = 2)
+ {
+ $size = $this->size;
+
+ if ($size > 0) {
+ $size = (int) $size;
+ $base = log($size) / log(1024);
+ $suffixes = array(' KB', ' MB', ' GB', ' TB');
+
+ return round(pow(1024, $base - floor($base)), $precision) . $suffixes[floor($base)];
+ } else {
+ return $size;
+ }
+ }
+
+ public function hasTags()
+ {
+ if($this->file_tags()->count()){
+ return true;
+ }
+ return false;
+ }
+
+ /* public function hasThumb(){
+ if(\Storage::disk('local')->exists('thumb/'.$this->filename) || \Storage::disk('local')->exists('thumb/'.$this->filename.".jpg")){
+ return true;
+ }
+ return false;
+ }
+
+ public function hasBig(){
+ if(\Storage::disk('local')->exists('big/'.$this->filename) || \Storage::disk('local')->exists('big/'.$this->filename.".jpg")){
+ return true;
+ }
+ return false;
+ }*/
+
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Models/IQContentFileTag.php b/packages/iqcontent/laravel-filemanager/src/Models/IQContentFileTag.php
new file mode 100644
index 0000000..17c48a8
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Models/IQContentFileTag.php
@@ -0,0 +1,28 @@
+belongsTo('IqContent\LaravelFilemanager\Models\IQContentFile', 'file_id');
+ }
+
+ public function tag() {
+ return $this->belongsTo('IqContent\LaravelFilemanager\Models\IQContentTag', 'tag_id');
+ }
+
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Models/IQContentFolder.php b/packages/iqcontent/laravel-filemanager/src/Models/IQContentFolder.php
new file mode 100644
index 0000000..edcd66e
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Models/IQContentFolder.php
@@ -0,0 +1,52 @@
+ [
+ 'source' => 'name'
+ ]
+ ];
+ }
+
+ public function setIdentifierAttribute( $value ) {
+ if(!isset($value) || $value == ""){
+ $this->attributes['identifier'] = Str::slug(pre_slug($this->name), '-');
+ }else{
+ $this->attributes['identifier'] = Str::slug(pre_slug($value), '-');
+ }
+ }
+
+ public function folder() {
+ return $this->belongsTo('IqContent\LaravelFilemanager\Models\IQContentFolder', 'folder_id');
+ }
+
+ public function folders() {
+ return $this->hasMany('IqContent\LaravelFilemanager\Models\IQContentFolder', 'folder_id', 'id');
+ }
+
+ public function files() {
+ return $this->hasMany('IqContent\LaravelFilemanager\Models\IQContentFile', 'folder_id', 'id');
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/Models/IQContentTag.php b/packages/iqcontent/laravel-filemanager/src/Models/IQContentTag.php
new file mode 100644
index 0000000..8bdcac8
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/Models/IQContentTag.php
@@ -0,0 +1,37 @@
+ [
+ 'source' => 'name'
+ ]
+ ];
+ }
+
+ public function category() {
+ return $this->belongsTo('IqContent\LaravelFilemanager\Models\IQContentCategory', 'category_id');
+ }
+
+ public function file_tags() {
+ return $this->hasMany('IqContent\LaravelFilemanager\Models\IQContentFileTag', 'tag_id');
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/src/config/lfm.php b/packages/iqcontent/laravel-filemanager/src/config/lfm.php
new file mode 100644
index 0000000..2ca05d5
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/config/lfm.php
@@ -0,0 +1,191 @@
+ http://unisharp.github.io/laravel-filemanager/config
+| offline => vendor/unisharp/laravel-filemanager/docs/config.md
+ */
+
+return [
+ /*
+ |--------------------------------------------------------------------------
+ | Routing
+ |--------------------------------------------------------------------------
+ */
+
+ 'use_package_routes' => true,
+
+ // // Use relative paths (without domain)
+ // 'relative_paths' => false,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Multi-User Mode
+ |--------------------------------------------------------------------------
+ */
+
+ 'allow_multi_user' => true,
+
+ 'allow_share_folder' => true,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Folder Names
+ |--------------------------------------------------------------------------
+ */
+
+ // Flexible way to customize client folders accessibility
+ // If you want to customize client folders, publish tag="lfm_handler"
+ // Then you can rewrite userField function in App\Handler\ConfigHandler class
+ // And set 'user_field' to App\Handler\ConfigHandler::class
+ // Ex: The private folder of user will be named as the user id.
+ 'user_folder_name' => IqContent\LaravelFilemanager\Handlers\ConfigHandler::class,
+
+ 'shared_folder_name' => 'shares',
+
+ 'thumb_folder_name' => 'thumbs',
+
+ 'folder_categories' => [
+ 'file' => [
+ 'folder_name' => 'files',
+ 'startup_view' => 'grid',
+ 'max_size' => 50000, // size in KB
+ 'valid_mime' => [
+ 'image/jpeg',
+ 'image/pjpeg',
+ 'image/png',
+ 'image/gif',
+ 'image/svg+xml',
+ ],
+ ],
+ 'image' => [
+ 'folder_name' => 'photos',
+ 'startup_view' => 'list',
+ 'max_size' => 50000, // size in KB
+ 'valid_mime' => [
+ 'image/jpeg',
+ 'image/pjpeg',
+ 'image/png',
+ 'image/gif',
+ 'image/svg+xml',
+ 'application/pdf',
+ 'text/plain',
+ ],
+ ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Upload / Validation
+ |--------------------------------------------------------------------------
+ */
+
+ 'disk' => 'public',
+
+ 'rename_file' => false,
+
+ 'alphanumeric_filename' => false,
+
+ 'alphanumeric_directory' => false,
+
+ 'should_validate_size' => false,
+
+ 'should_validate_mime' => false,
+
+ // permissions to be set when create a new folder or when it creates automatically with thumbnails
+ 'create_folder_mode' => 0755,
+
+ // permissions to be set on file upload.
+ 'create_file_mode' => 0644,
+
+ // If true, it will attempt to chmod the file after upload
+ 'should_change_file_mode' => true,
+
+ // behavior on files with identical name
+ // setting it to true cause old file replace with new one
+ // setting it to false show `error-file-exist` error and stop upload
+ 'over_write_on_duplicate' => false,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Thumbnail
+ |--------------------------------------------------------------------------
+ */
+
+ // If true, image thumbnails would be created during upload
+ 'should_create_thumbnails' => true,
+
+ // Create thumbnails automatically only for listed types.
+ 'raster_mimetypes' => [
+ 'image/jpeg',
+ 'image/pjpeg',
+ 'image/png',
+ ],
+
+ 'thumb_img_width' => 200,
+
+ 'thumb_img_height' => 200,
+
+ /*
+ |--------------------------------------------------------------------------
+ | jQuery UI options
+ |--------------------------------------------------------------------------
+ */
+
+ 'resize_aspectRatio' => false,
+
+ 'resize_containment' => true,
+
+ /*
+ |--------------------------------------------------------------------------
+ | File Extension Information
+ |--------------------------------------------------------------------------
+ */
+
+ 'file_type_array' => [
+ 'pdf' => 'Adobe Acrobat',
+ 'doc' => 'Microsoft Word',
+ 'docx' => 'Microsoft Word',
+ 'xls' => 'Microsoft Excel',
+ 'xlsx' => 'Microsoft Excel',
+ 'zip' => 'Archive',
+ 'gif' => 'GIF Image',
+ 'jpg' => 'JPEG Image',
+ 'jpeg' => 'JPEG Image',
+ 'png' => 'PNG Image',
+ 'ppt' => 'Microsoft PowerPoint',
+ 'pptx' => 'Microsoft PowerPoint',
+ ],
+
+ 'file_icon_array' => [
+ 'pdf' => 'fa-file-pdf-o',
+ 'doc' => 'fa-file-word-o',
+ 'docx' => 'fa-file-word-o',
+ 'xls' => 'fa-file-excel-o',
+ 'xlsx' => 'fa-file-excel-o',
+ 'zip' => 'fa-file-archive-o',
+ 'gif' => 'fa-file-image-o',
+ 'jpg' => 'fa-file-image-o',
+ 'jpeg' => 'fa-file-image-o',
+ 'png' => 'fa-file-image-o',
+ 'ppt' => 'fa-file-powerpoint-o',
+ 'pptx' => 'fa-file-powerpoint-o',
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | php.ini override
+ |--------------------------------------------------------------------------
+ |
+ | These values override your php.ini settings before uploading files
+ | Set these to false to ingnore and apply your php.ini settings
+ |
+ | Please note that the 'upload_max_filesize' & 'post_max_size'
+ | directives are not supported.
+ */
+ 'php_ini_overrides' => [
+ 'memory_limit' => '256M',
+ ],
+];
diff --git a/packages/iqcontent/laravel-filemanager/src/lang/ar/lfm.php b/packages/iqcontent/laravel-filemanager/src/lang/ar/lfm.php
new file mode 100644
index 0000000..492eaac
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/lang/ar/lfm.php
@@ -0,0 +1,68 @@
+ 'الخلف',
+ 'nav-new' => 'مجلد جديد',
+ 'nav-upload' => 'رفع',
+ 'nav-thumbnails' => 'مصغرات',
+ 'nav-list' => 'قائمة',
+
+ 'menu-rename' => 'إعادة تسمية',
+ 'menu-delete' => 'حذف',
+ 'menu-view' => 'عرض',
+ 'menu-download' => 'تنزيل',
+ 'menu-resize' => 'تغيير الحجم',
+ 'menu-crop' => 'قص',
+
+ 'title-page' => 'مدير الملفات',
+ 'title-panel' => 'مدير الملفات',
+ 'title-upload' => 'رفع ملف',
+ 'title-view' => 'عرض الملف',
+ 'title-user' => 'الملفات',
+ 'title-share' => 'الملفات المشتركة',
+ 'title-item' => 'ملف',
+ 'title-size' => 'الحجم',
+ 'title-type' => 'النوع',
+ 'title-modified' => 'اخر تعديل',
+ 'title-action' => 'اجراء',
+
+ 'type-folder' => 'مجلد',
+
+ 'message-empty' => 'المجلد فارغ',
+ 'message-choose' => 'اختر ملف',
+ 'message-delete' => 'هل انت متاكد من حذف هذا الملف',
+ 'message-name' => 'اسم المجلد:',
+ 'message-rename' => 'اعادة تسمية الى:',
+ 'message-extension_not_found' => 'يجب تثبيت gd او imagick لقص او تغيير حجم الصورة.',
+
+ 'error-rename' => 'اسم الملف مستخدما مسبقا!',
+ 'error-file-empty' => 'يجب اختيارملف!',
+ 'error-file-exist' => 'يوجد ملف سابق بنفس الاسم!',
+ 'error-file-size' => 'File size exceeds server limit! (maximum size: :max)',
+ 'error-delete-folder'=> 'لا يمكن حذف هذا المجلد لانه غير فارغ!',
+ 'error-folder-name' => 'اسم المجلد لا يمكن ان يكون فاغ!',
+ 'error-folder-exist'=> 'اسم المجلد مستخدما مسبقا!',
+ 'error-folder-alnum'=> 'Only alphanumeric folder names are allowed!',
+ 'error-mime' => 'نوع الملف غير معروف: ',
+ 'error-instance' => 'The uploaded file should be an instance of UploadedFile',
+ 'error-invalid' => 'طلب رفع غير صالح',
+ 'error-other' => 'حدثت مشكلة: ',
+ 'error-too-large' => 'الملف كبير جدا',
+
+ 'btn-upload' => 'رفع الملف',
+ 'btn-uploading' => 'جاري الرفع...',
+ 'btn-close' => 'اغلاق',
+ 'btn-crop' => 'قص',
+ 'btn-cancel' => 'الغاء',
+ 'btn-resize' => 'تغيير الحجم',
+
+ 'resize-ratio' => 'النسبة:',
+ 'resize-scaled' => 'تم تغيير حجم الصورة:',
+ 'resize-true' => 'نعم',
+ 'resize-old-height' => 'الارتفاع الاصلي:',
+ 'resize-old-width' => 'العرض الاصلي:',
+ 'resize-new-height' => 'الارتفاع:',
+ 'resize-new-width' => 'العرض:',
+
+ 'locale-bootbox' => 'ar',
+];
diff --git a/packages/iqcontent/laravel-filemanager/src/lang/bg/lfm.php b/packages/iqcontent/laravel-filemanager/src/lang/bg/lfm.php
new file mode 100644
index 0000000..b1afda5
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/lang/bg/lfm.php
@@ -0,0 +1,66 @@
+ 'Назад',
+ 'nav-new' => 'Нова Папка',
+ 'nav-upload' => 'Качване',
+ 'nav-thumbnails' => 'Тъмб',
+ 'nav-list' => 'Списък',
+
+ 'menu-rename' => 'Преименувай',
+ 'menu-delete' => 'Изтрии',
+ 'menu-view' => 'Преглед',
+ 'menu-download' => 'Свали',
+ 'menu-resize' => 'Оразмер',
+ 'menu-crop' => 'Отрежи',
+
+ 'title-page' => 'Файлов мениджър',
+ 'title-panel' => 'Laravel FileManager',
+ 'title-upload' => 'Качи файл',
+ 'title-view' => 'Виж файл',
+ 'title-user' => 'Файлове',
+ 'title-share' => 'Споделени Файлове',
+ 'title-item' => 'Елемент',
+ 'title-size' => 'Размер',
+ 'title-type' => 'Тип',
+ 'title-modified' => 'Модифицирано',
+ 'title-action' => 'Действие',
+
+ 'type-folder' => 'Папка',
+
+ 'message-empty' => 'Папката е празна.',
+ 'message-choose' => 'Избери файл',
+ 'message-delete' => 'Сигурни ли сте, че изкате да изтриете този елемент ?',
+ 'message-name' => 'Име на папка:',
+ 'message-rename' => 'Преименувай на:',
+ 'message-extension_not_found' => '(translation wanted)',
+
+ 'error-rename' => 'Името е заето!',
+ 'error-file-empty' => 'Трябва да изберете файл !',
+ 'error-file-exist' => 'Файл с това име вече съществува!',
+ 'error-file-size' => 'File size exceeds server limit! (maximum size: :max)',
+ 'error-delete-folder'=> 'Не можете да изтриете тази папка, защото не е празна!',
+ 'error-folder-name' => 'Моля изберете име на папката',
+ 'error-folder-exist'=> 'Папка с това име вече съществува!',
+ 'error-folder-alnum'=> 'Only alphanumeric folder names are allowed!',
+ 'error-mime' => 'Грешен тип на файла: ',
+ 'error-instance' => 'The uploaded file should be an instance of UploadedFile ( Грешка )',
+ 'error-invalid' => 'Невалидна заявка за качване',
+
+ 'btn-upload' => 'Качи файл',
+ 'btn-uploading' => 'Качване...',
+ 'btn-close' => 'Затвори',
+ 'btn-crop' => 'Отрежи',
+ 'btn-cancel' => 'Откажи',
+ 'btn-resize' => 'Оразмери',
+
+ 'resize-ratio' => 'Аспект:',
+ 'resize-scaled' => 'Image scaled:',
+ 'resize-true' => 'Да',
+ 'resize-old-height' => 'Оригинална височина:',
+ 'resize-old-width' => 'Оригинална широчина:',
+ 'resize-new-height' => 'Височина:',
+ 'resize-new-width' => 'Широчина:',
+
+ 'locale-bootbox' => 'bg',
+];
diff --git a/packages/iqcontent/laravel-filemanager/src/lang/de/lfm.php b/packages/iqcontent/laravel-filemanager/src/lang/de/lfm.php
new file mode 100644
index 0000000..47aa412
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/lang/de/lfm.php
@@ -0,0 +1,87 @@
+ 'Zurück',
+ 'nav-new' => 'Neuer Ordner',
+ 'nav-upload' => 'Hochladen',
+ 'nav-thumbnails' => 'Thumbnails',
+ 'nav-list' => 'List',
+ 'nav-sort' => 'Sort',
+ 'nav-sort-alphabetic'=> 'Sort By Alphabets',
+ 'nav-sort-time' => 'Sort By Time',
+
+ 'menu-rename' => 'Umbenennen',
+ 'menu-delete' => 'Löschen',
+ 'menu-view' => 'Ansehen',
+ 'menu-download' => 'Download',
+ 'menu-resize' => 'Größe Ändern',
+ 'menu-crop' => 'Zuschneiden',
+ 'menu-move' => 'Move',
+ 'menu-multiple' => 'Multi-selection',
+
+ 'title-page' => 'File Manager',
+ 'title-panel' => 'FileManager',
+ 'title-upload' => 'Datei hochladen',
+ 'title-view' => 'Datei ansehen',
+ 'title-user' => 'Dateien',
+ 'title-share' => 'Medien',
+ 'title-item' => 'Item',
+ 'title-size' => 'Größe',
+ 'title-type' => 'Typ',
+ 'title-modified' => 'Geändert',
+ 'title-action' => 'Aktion',
+
+ 'type-folder' => 'Ordner',
+
+ 'message-empty' => 'Ordner ist leer.',
+ 'message-choose' => 'Datei wählen',
+ 'message-delete' => 'Sind Sie sicher, dass Sie dieses Einzelteil löschen möchten?',
+ 'message-name' => 'Ordnernamen:',
+ 'message-rename' => 'Umbenennen in:',
+ 'message-extension_not_found' => 'Installieren Sie gd oder imagick Erweiterung um Bilder zuzuschneiden, Größe ändern und Thumbnails zu erstellen.',
+ 'message-drop' => 'Or drop files here to upload',
+
+ 'error-rename' => 'Dateiname wird bereits verwendet!',
+ 'error-file-name' => 'File name cannot be empty!',
+ 'error-file-empty' => 'Sie müssen eine Datei auswählen!',
+ 'error-file-exist' => 'Eine Datei mit diesem Namen existiert bereits!',
+ 'error-file-size' => 'Dateigröße überschreitet das Serverlimit! (Maximale Größe: :max)',
+ 'error-delete-folder' => 'Sie können diesen Ordner nicht löschen, da er nicht leer ist!',
+ 'error-folder-name' => 'Der Ordnername darf nicht leer sein!',
+ 'error-folder-exist' => 'Ein Ordner mit diesem Namen ist bereits vorhanden!',
+ 'error-folder-alnum' => 'Nur alphanumerische Ordnernamen sind erlaubt!',
+ 'error-mime' => 'Unerwarteter Mimetyp:',
+ 'error-instance' => 'Die hochgeladene Datei sollte eine Instanz von UploadedFile sein',
+ 'error-invalid' => 'Ungültige Upload-Anfrage',
+ 'error-other' => 'Ein Fehler ist aufgetreten: ',
+ 'error-too-large' => 'Angeforderter Wert zu groß!',
+ 'error-cannotupload' => 'Sie sind nicht berechtigt, die Datei hochzuladen.',
+ 'error-cannotdelete' => 'Sie sind nicht berechtigt, neue Ordner / Dateien zu löschen',
+ 'error-cannotnewdirectory' => 'Sie sind nicht berechtigt, neue Ordner zu erstellen',
+ 'error-cannotrename' => 'Sie sind nicht berechtigt, Ordner / Dateien umzubenennen',
+ 'error-cannotresize' => 'Sie sind nicht berechtigt, die Dateigröße zu ändern',
+ 'error-folder-not-found'=> 'Folder not found! (:folder)',
+ 'error-size' => 'Over limit size:',
+
+ 'btn-upload' => 'Datei hochladen',
+ 'btn-uploading' => 'Hochladen...',
+ 'btn-close' => 'Schließen',
+ 'btn-crop' => 'Zuschneiden',
+ 'btn-cancel' => 'Stornieren',
+ 'btn-resize' => 'Größe ändern',
+ 'btn-copy-crop' => 'Copy & Crop',
+ 'btn-crop-free' => 'Free',
+ 'btn-confirm' => 'Okay',
+ 'btn-open' => 'Ordner öffnen Folder',
+
+ 'resize-ratio' => 'Verhältnis:',
+ 'resize-scaled' => 'Bild skaliert:',
+ 'resize-true' => 'Ja',
+ 'resize-old-height' => 'Original Höhe:',
+ 'resize-old-width' => 'Original Breite:',
+ 'resize-new-height' => 'Höhe:',
+ 'resize-new-width' => 'Breite:',
+
+ 'locale-bootbox' => 'de',
+];
diff --git a/packages/iqcontent/laravel-filemanager/src/lang/el/lfm.php b/packages/iqcontent/laravel-filemanager/src/lang/el/lfm.php
new file mode 100644
index 0000000..527ac26
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/lang/el/lfm.php
@@ -0,0 +1,69 @@
+ 'Επιστροφή',
+ 'nav-new' => 'Νέος φάκελος',
+ 'nav-upload' => 'Ανέβασμα',
+ 'nav-thumbnails' => 'Εικονίδια',
+ 'nav-list' => 'Λίστα',
+
+ 'menu-rename' => 'Μετονομασία',
+ 'menu-delete' => 'Διαγραφή',
+ 'menu-view' => 'Επισκόπηση',
+ 'menu-download' => 'Κατέβασμα',
+ 'menu-resize' => 'Αλλαγή μεγέθους',
+ 'menu-crop' => 'Κόψιμο',
+
+ 'title-page' => 'Διαχείριση αρχείων',
+ 'title-panel' => 'Laravel FileManager',
+ 'title-upload' => 'Ανέβασμα αρχείου',
+ 'title-view' => 'Επισκόπηση αρχείου',
+ 'title-user' => 'Αρχεία',
+ 'title-share' => 'Κοινόχρηστα αρχεία',
+ 'title-item' => 'Αντικείμενο',
+ 'title-size' => 'Μέγεθος',
+ 'title-type' => 'Τύπος',
+ 'title-modified' => 'Ανανεώθηκε',
+ 'title-action' => 'Ενέργεια',
+
+ 'type-folder' => 'Φάκελος',
+
+ 'message-empty' => 'Ο φάκελος είναι άδειος',
+ 'message-choose' => 'Επιλογή αρχείων',
+ 'message-delete' => 'Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το αντικείμενο?',
+ 'message-name' => 'Όνομα φακέλου:',
+ 'message-rename' => 'Μετονομασία σε:',
+ 'message-extension_not_found' => 'Παρακαλούμε κάντε εγκατάσταση του gd ή imagick php προσθετου προκειμένου να μπορείτε να κόψετε, αλλάξετε το μέγεθος και δημιουργήσετε εικονίδια των εικόνων.',
+
+ 'error-rename' => 'Αυτό το όνομα αρχείου χρησιμοποιείται ήδη',
+ 'error-file-empty' => 'Πρέπει να επιλέξετε ένα αρχείο!',
+ 'error-file-exist' => 'Υπάρχει ήδη αρχείο με αυτό το όνομα!',
+ 'error-file-size' => 'Το μέγεθος του αρχείου ξεπερνά το επιτρεπόμενο όριο σε μέγεθος (μέγιστο μέγεθος: :max)',
+ 'error-delete-folder'=> 'Δεν μπορείτε να διαγράψετε τον φάκελο γιατί περιέχει αρχεία!',
+ 'error-folder-name' => 'Ο φάκελος δεν γίνεται να είναι άδειος',
+ 'error-folder-exist'=> 'Υπάρχει ήδη φάκελος με αυτό το όνομα!',
+ 'error-folder-alnum'=> 'Επιτρέπονται μόνο γράμματα και αριθμοί για το όνομα των φακέλων!',
+ 'error-mime' => 'Λανθασμένος τύπος αρχείου: ',
+ 'error-size' => 'Μέγιστο μέγεθος αρχείου:',
+ 'error-instance' => 'Το ανεβασμένο αρχείο έπρεπε να είναι του τύπου UploadedFile',
+ 'error-invalid' => 'Λάθος αίτημα ανεβάσματος',
+ 'error-other' => 'Παρουσιάστηκε ένα σφάλμα: ',
+ 'error-too-large' => 'Το μέγεθος του αιτήματος είναι πολύ μεγάλο!',
+
+ 'btn-upload' => 'Ανέβασματα αρχείων',
+ 'btn-uploading' => 'Ανεβασμα...',
+ 'btn-close' => 'Κλείσιμο',
+ 'btn-crop' => 'Κόψιμο',
+ 'btn-cancel' => 'Ακύρωση',
+ 'btn-resize' => 'Αλλαγή μεγέθους',
+
+ 'resize-ratio' => 'Αναλογία:',
+ 'resize-scaled' => 'Η εικόνα άλλαξε μέγεθος:',
+ 'resize-true' => 'Ναι',
+ 'resize-old-height' => 'Πρωτότυπο ύψος:',
+ 'resize-old-width' => 'Πρωτότυπο πλάτος:',
+ 'resize-new-height' => 'Ύψος:',
+ 'resize-new-width' => 'Μπλάτος:',
+
+ 'locale-bootbox' => 'el',
+];
diff --git a/packages/iqcontent/laravel-filemanager/src/lang/en/lfm.php b/packages/iqcontent/laravel-filemanager/src/lang/en/lfm.php
new file mode 100644
index 0000000..fa5e875
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/lang/en/lfm.php
@@ -0,0 +1,79 @@
+ 'Back',
+ 'nav-new' => 'New Folder',
+ 'nav-upload' => 'Upload',
+ 'nav-thumbnails' => 'Thumbnails',
+ 'nav-list' => 'List',
+ 'nav-sort' => 'Sort',
+ 'nav-sort-alphabetic'=> 'Sort By Alphabets',
+ 'nav-sort-time' => 'Sort By Time',
+
+ 'menu-rename' => 'Rename',
+ 'menu-delete' => 'Delete',
+ 'menu-view' => 'Preview',
+ 'menu-download' => 'Download',
+ 'menu-resize' => 'Resize',
+ 'menu-crop' => 'Crop',
+ 'menu-move' => 'Move',
+ 'menu-multiple' => 'Multi-selection',
+
+ 'title-page' => 'File Manager',
+ 'title-panel' => 'Laravel FileManager',
+ 'title-upload' => 'Upload File(s)',
+ 'title-view' => 'View File',
+ 'title-user' => 'Files',
+ 'title-share' => 'Shared Files',
+ 'title-item' => 'Item',
+ 'title-size' => 'Size',
+ 'title-type' => 'Type',
+ 'title-modified' => 'Modified',
+ 'title-action' => 'Action',
+
+ 'type-folder' => 'Folder',
+
+ 'message-empty' => 'Folder is empty.',
+ 'message-choose' => 'Choose File(s)',
+ 'message-delete' => 'Are you sure you want to delete this item?',
+ 'message-name' => 'Folder name:',
+ 'message-rename' => 'Rename to:',
+ 'message-extension_not_found' => 'Please install gd or imagick extension to crop, resize, and make thumbnails of images.',
+ 'message-drop' => 'Or drop files here to upload',
+
+ 'error-rename' => 'File name already in use!',
+ 'error-file-name' => 'File name cannot be empty!',
+ 'error-file-empty' => 'You must choose a file!',
+ 'error-file-exist' => 'A file with this name already exists!',
+ 'error-file-size' => 'File size exceeds server limit! (maximum size: :max)',
+ 'error-delete-folder'=> 'You cannot delete this folder because it is not empty!',
+ 'error-folder-name' => 'Folder name cannot be empty!',
+ 'error-folder-exist'=> 'A folder with this name already exists!',
+ 'error-folder-alnum'=> 'Only alphanumeric folder names are allowed!',
+ 'error-folder-not-found'=> 'Folder not found! (:folder)',
+ 'error-mime' => 'Unexpected MimeType: ',
+ 'error-size' => 'Over limit size:',
+ 'error-instance' => 'The uploaded file should be an instance of UploadedFile',
+ 'error-invalid' => 'Invalid upload request',
+ 'error-other' => 'An error has occured: ',
+ 'error-too-large' => 'Request entity too large!',
+
+ 'btn-upload' => 'Upload File(s)',
+ 'btn-uploading' => 'Uploading...',
+ 'btn-close' => 'Close',
+ 'btn-crop' => 'Crop',
+ 'btn-copy-crop' => 'Copy & Crop',
+ 'btn-crop-free' => 'Free',
+ 'btn-cancel' => 'Cancel',
+ 'btn-confirm' => 'Confirm',
+ 'btn-resize' => 'Resize',
+ 'btn-open' => 'Open Folder',
+
+ 'resize-ratio' => 'Ratio:',
+ 'resize-scaled' => 'Image scaled:',
+ 'resize-true' => 'Yes',
+ 'resize-old-height' => 'Original Height:',
+ 'resize-old-width' => 'Original Width:',
+ 'resize-new-height' => 'Height:',
+ 'resize-new-width' => 'Width:',
+];
diff --git a/packages/iqcontent/laravel-filemanager/src/lang/es/lfm.php b/packages/iqcontent/laravel-filemanager/src/lang/es/lfm.php
new file mode 100644
index 0000000..07f836e
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/lang/es/lfm.php
@@ -0,0 +1,76 @@
+ 'Atrás',
+ 'nav-new' => 'Nueva Carpeta',
+ 'nav-upload' => 'Subir',
+ 'nav-thumbnails' => 'Miniaturas',
+ 'nav-list' => 'Listado',
+ 'nav-sort' => 'Ordenar',
+ 'nav-sort-alphabetic'=> 'Ordenar Alfabéticamente',
+ 'nav-sort-time' => 'Ordenar por Fecha',
+
+ 'menu-rename' => 'Cambiar Nombre',
+ 'menu-delete' => 'Eliminar',
+ 'menu-view' => 'Ver',
+ 'menu-download' => 'Descargar',
+ 'menu-resize' => 'Redimensionar',
+ 'menu-crop' => 'Recortar',
+
+ 'title-page' => 'Administrador de Archivos',
+ 'title-panel' => 'Administrador de Archivos',
+ 'title-upload' => 'Subir Archivo',
+ 'title-view' => 'Ver Archivo',
+ 'title-user' => 'Archivos',
+ 'title-share' => 'Archivos Compartidos',
+ 'title-item' => 'Item',
+ 'title-size' => 'Tamaño',
+ 'title-type' => 'Tipo',
+ 'title-modified' => 'Modificado',
+ 'title-action' => 'Acción',
+
+ 'type-folder' => 'Carpeta',
+
+ 'message-empty' => 'Carpeta está vacía.',
+ 'message-choose' => 'Seleccione Archivo',
+ 'message-delete' => '¿Está seguro que desea eliminar este item?',
+ 'message-name' => 'Nombre de Carpeta:',
+ 'message-rename' => 'Renombrar a:',
+ 'message-extension_not_found' => 'Por favor instale la extensión gd o imagick para recortar, redimensionar y hacer miniaturas de imágenes.',
+
+ 'error-rename' => '¡El nombre del archivo ya existe!',
+ 'error-file-name' => '¡El nombre del archivo no puede estar vacío!',
+ 'error-file-empty' => '¡Debes escoger un archivo!',
+ 'error-file-exist' => '¡Ya existe un archivo con este nombre!',
+ 'error-file-size' => '¡El tamaño del archivo supera el límite del servidor! (tamaño máx.: :max)',
+ 'error-delete-folder'=> '¡No puedes eliminar esta carpeta porque no está vacía!',
+ 'error-folder-name' => '¡El nombre de carpeta no puede ser vacío!',
+ 'error-folder-exist'=> '¡Ya existe una carpeta con este nombre!',
+ 'error-folder-alnum'=> '¡Únicamente son soportados nombres de carpetas alfanuméricos!',
+ 'error-folder-not-found'=> '¡La carpeta no ha sido encontrada! (:folder)',
+ 'error-mime' => 'MimeType inesperado: ',
+ 'error-size' => 'Supera el tamaño máximo:',
+ 'error-instance' => 'El archivo subido debe ser una instancia de UploadedFile',
+ 'error-invalid' => 'Petición de subida inválida',
+ 'error-other' => 'Se ha producido un error: ',
+ 'error-too-large' => '¡Entidad de petición demasiado grande!',
+
+ 'btn-upload' => 'Subir Archivo',
+ 'btn-uploading' => 'Subiendo...',
+ 'btn-close' => 'Cerrar',
+ 'btn-crop' => 'Recortar',
+ 'btn-copy-crop' => 'Copiar y recortar',
+ 'btn-cancel' => 'Cancelar',
+ 'btn-resize' => 'Redimensionar',
+
+ 'resize-ratio' => 'Ratio:',
+ 'resize-scaled' => 'Imagen escalada:',
+ 'resize-true' => 'Si',
+ 'resize-old-height' => 'Alto Original:',
+ 'resize-old-width' => 'Ancho Original:',
+ 'resize-new-height' => 'Alto:',
+ 'resize-new-width' => 'Ancho:',
+
+ 'locale-bootbox' => 'es',
+
+];
diff --git a/packages/iqcontent/laravel-filemanager/src/lang/eu/lfm.php b/packages/iqcontent/laravel-filemanager/src/lang/eu/lfm.php
new file mode 100644
index 0000000..2f1e199
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/lang/eu/lfm.php
@@ -0,0 +1,75 @@
+ 'Atzera',
+ 'nav-new' => 'Karpeta berria',
+ 'nav-upload' => 'Kargatu',
+ 'nav-thumbnails' => 'Koadro txikiak',
+ 'nav-list' => 'Zerrenda',
+ 'nav-sort' => 'Ordenatu',
+ 'nav-sort-alphabetic'=> 'Ordenatu alfabetikoki',
+ 'nav-sort-time' => 'Ordenatu denboraren arabera',
+
+ 'menu-rename' => 'Aldatu izena',
+ 'menu-delete' => 'Ezabatu',
+ 'menu-view' => 'Aurrebista',
+ 'menu-download' => 'Deskargatu',
+ 'menu-resize' => 'Aldatu tamaina',
+ 'menu-crop' => 'Moztu',
+
+ 'title-page' => 'Fitxategi-kudeatzailea',
+ 'title-panel' => 'Laravel fitxategi-kudeatzailea',
+ 'title-upload' => 'Kargatu fitxategia(k)',
+ 'title-view' => 'Ikusi fitxategia',
+ 'title-root' => 'Fitxategiak',
+ 'title-shares' => 'Partekatutako fitxategiak',
+ 'title-item' => 'Elementua',
+ 'title-size' => 'Tamaina',
+ 'title-type' => 'Mota',
+ 'title-modified' => 'Aldatua',
+ 'title-action' => 'Ekintza',
+
+ 'type-folder' => 'Karpeta',
+
+ 'message-empty' => 'Karpeta hutsik dago.',
+ 'message-choose' => 'Aukeratu fitxategia(k)',
+ 'message-delete' => 'Ziur zaude elementu hau ezabatu nahi duzula?',
+ 'message-name' => 'Karpetaren izena:',
+ 'message-rename' => 'Izen berria:',
+ 'message-extension_not_found' => 'Mesedez, instalatu gd edo imagick hedapena irudiak moztu, tamainaz aldatu eta koadro txikiak sortzeko.',
+
+ 'error-rename' => 'Fitxategi-izena lehendik badago!',
+ 'error-file-name' => 'Fitxategi-izenak ezin du hutsik egon!',
+ 'error-file-empty' => 'Fitxategi bat aukeratu behar duzu!',
+ 'error-file-exist' => 'Izen hau duen fitxategi bat existitzen da dagoeneko!',
+ 'error-file-size' => 'Fitxategi-tamainak zerbitzariaren muga gainditzen du! (gehienezko tamaina: :max)',
+ 'error-delete-folder'=> 'Ezin duzu karpeta hau ezabatu, ez baitago hutsik!',
+ 'error-folder-name' => 'Karpeta-izenak ezin du hutsik egon!',
+ 'error-folder-exist'=> 'Izen hau duen karpeta bat existitzen da dagoeneko!',
+ 'error-folder-alnum'=> 'Karpeta-izen alfanumerikoak soilik onartzen dira!',
+ 'error-folder-not-found'=> 'Ez da karpeta aurkitu! (:folder)',
+ 'error-mime' => 'Ustekabeko MIME mota: ',
+ 'error-size' => 'Muga gainditzen duen tamaina:',
+ 'error-instance' => 'Kargatutako fitxategiak UploadedFile-en instantzia bat izan behar luke',
+ 'error-invalid' => 'Kargatzeko eskaera baliogabea',
+ 'error-other' => 'Errore bat gertatu da: ',
+ 'error-too-large' => 'Eskaera entitatea handiegia da!',
+
+ 'btn-upload' => 'Kargatu fitxategia(k)',
+ 'btn-uploading' => 'Kargatzen...',
+ 'btn-close' => 'Itxi',
+ 'btn-crop' => 'Moztu',
+ 'btn-copy-crop' => 'Kopiatu eta moztu',
+ 'btn-cancel' => 'Utzi',
+ 'btn-resize' => 'Aldatu tamainaz',
+
+ 'resize-ratio' => 'Erlazioa:',
+ 'resize-scaled' => 'Eskalatutako irudia:',
+ 'resize-true' => 'Bai',
+ 'resize-old-height' => 'Jatorrizko altuera:',
+ 'resize-old-width' => 'Jatorrizko zabalera:',
+ 'resize-new-height' => 'Altuera:',
+ 'resize-new-width' => 'Zabalera:',
+
+ 'locale-bootbox' => 'eu',
+];
diff --git a/packages/iqcontent/laravel-filemanager/src/lang/fa/lfm.php b/packages/iqcontent/laravel-filemanager/src/lang/fa/lfm.php
new file mode 100644
index 0000000..f56bee2
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/lang/fa/lfm.php
@@ -0,0 +1,81 @@
+ 'بازگشت',
+ 'nav-new' => 'پوشه جدید',
+ 'nav-upload' => 'آپلود',
+ 'nav-thumbnails' => 'تصویرک ها',
+ 'nav-list' => 'لیست',
+ 'nav-sort' => 'مرتب سازی',
+ 'nav-sort-alphabetic'=> 'مرتب سازی الفبایی',
+ 'nav-sort-time' => 'مرتب سازی زمانی',
+
+ 'menu-rename' => 'تغییر نام',
+ 'menu-delete' => 'حذف',
+ 'menu-view' => 'مشاهده',
+ 'menu-download' => 'دانلود',
+ 'menu-resize' => 'تغییر اندازه',
+ 'menu-crop' => 'برش',
+ 'menu-move' => 'انتقال',
+ 'menu-multiple' => 'انتخاب چندتایی',
+
+ 'title-page' => 'مدیریت فایل',
+ 'title-panel' => 'مدیریت فایل لاراول',
+ 'title-upload' => 'آپلود فایل',
+ 'title-view' => 'مشاهده فایل',
+ 'title-user' => 'فایل ها',
+ 'title-share' => 'فایل های اشتراکی',
+ 'title-item' => 'آیتم',
+ 'title-size' => 'اندازه',
+ 'title-type' => 'نوع',
+ 'title-modified' => 'تاریخ آخرین ویرایش',
+ 'title-action' => 'اقدام',
+
+ 'type-folder' => 'پوشه',
+
+ 'message-empty' => 'پوشه خالی است.',
+ 'message-choose' => 'انتخاب فایل',
+ 'message-delete' => 'آیا از حذف این آیتم مطمئن هستید؟',
+ 'message-name' => 'نام پوشه:',
+ 'message-rename' => 'تغییر نام به:',
+ 'message-extension_not_found' => 'لطفا gd یا imagick را برای برش، تغییر اندازه و ایجاد تصویرک نصب کنید.',
+ 'message-drop' => 'یا فایل ها را برای آپلود اینجا رها کنید',
+
+ 'error-rename' => 'این نام قبلا استفاده شده!',
+ 'error-file-name' => 'نام فایل نباید خالی باشد!',
+ 'error-file-empty' => 'باید یک فایل انتخاب کنید!',
+ 'error-file-exist' => 'فایلی با این نام از قبل وجود دارد!',
+ 'error-file-size' => 'محدودیت حجم فایل سرور! (حداکثر حجم: :max)',
+ 'error-delete-folder'=> 'به دلیل خالی نبودن پوشه امکان حذف آن وجود ندارد!',
+ 'error-folder-name' => 'نام پوشه نمی تواند خالی باشد!',
+ 'error-folder-exist'=> 'پوشه ای با این نام از قبل وجود دارد!',
+ 'error-folder-alnum'=> 'فقط اسامی الفبایی برای پوشه مجاز است!',
+ 'error-folder-not-found'=> 'پوشهای یافت نشد! (:folder)',
+ 'error-mime' => 'پسوند غیرمجاز: ',
+ 'error-size' => 'سایز بیش از حد:',
+ 'error-instance' => 'فایل آپلود شده باید نمونه ای از UploadedFile باشد',
+ 'error-invalid' => 'درخواست آپلود غیرمعتبر',
+ 'error-other' => 'خطایی رخ داد: ',
+ 'error-too-large' => 'درخواست موجودیت خیلی طولانیست!',
+
+ 'btn-upload' => 'آپلود فایل',
+ 'btn-uploading' => 'در حال آپلود',
+ 'btn-close' => 'بستن',
+ 'btn-crop' => 'برش',
+ 'btn-copy-crop' => 'برش و ذخیره در فایل جدید',
+ 'btn-crop-free' => 'برش آزاد',
+ 'btn-cancel' => 'انصراف',
+ 'btn-confirm' => 'تایید',
+ 'btn-resize' => 'تغییر اندازه',
+ 'btn-open' => 'باز کردن پوشه',
+
+ 'resize-ratio' => 'نسبت:',
+ 'resize-scaled' => 'تصویر مقیاس شده:',
+ 'resize-true' => 'بله',
+ 'resize-old-height' => 'ارتفاع اصلی:',
+ 'resize-old-width' => 'عرض اصلی:',
+ 'resize-new-height' => 'ارتفاع:',
+ 'resize-new-width' => 'عرض:',
+
+ 'locale-bootbox' => 'fa',
+];
diff --git a/packages/iqcontent/laravel-filemanager/src/lang/fr/lfm.php b/packages/iqcontent/laravel-filemanager/src/lang/fr/lfm.php
new file mode 100644
index 0000000..8defc4f
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/lang/fr/lfm.php
@@ -0,0 +1,69 @@
+ 'Retour',
+ 'nav-new' => 'Nouveau dossier',
+ 'nav-upload' => 'Envoyer',
+ 'nav-thumbnails' => 'Vignettes',
+ 'nav-list' => 'Liste',
+ 'nav-sort' => 'Trier',
+ 'nav-sort-alphabetic'=> 'Trier par ordre alphabétique',
+ 'nav-sort-time' => 'Trier par date',
+
+ 'menu-rename' => 'Renommer',
+ 'menu-delete' => 'Effacer',
+ 'menu-view' => 'Voir',
+ 'menu-download' => 'Télécharger',
+ 'menu-resize' => 'Redimensionner',
+ 'menu-crop' => 'Rogner',
+
+ 'title-page' => 'Gestionnaire de fichiers',
+ 'title-panel' => 'Laravel FileManager',
+ 'title-upload' => 'Envoyer un/des fichier(s)',
+ 'title-view' => 'Voir le fichier',
+ 'title-user' => 'Fichiers',
+ 'title-share' => 'Fichiers partagés',
+ 'title-item' => 'Élement',
+ 'title-size' => 'Taille du fichier',
+ 'title-type' => 'Type de fichier',
+ 'title-modified' => 'Date de modification',
+ 'title-action' => 'Exécuter',
+
+ 'type-folder' => 'Dossier',
+
+ 'message-empty' => 'Dossier est vide',
+ 'message-choose' => 'Choisir un/des fichier(s)',
+ 'message-delete' => 'Êtes-vous sûr de vouloir supprimer ce fichier ?',
+ 'message-name' => 'Nom du dossier :',
+ 'message-rename' => 'Renommer le dossier :',
+ 'message-extension_not_found' => 'Extension inconnue',
+
+ 'error-rename' => 'Nom déjà utilisé',
+ 'error-file-empty' => 'Veuillez choisir un fichier',
+ 'error-file-exist' => 'Un fichier avec ce nom existe déjà',
+ 'error-file-size' => 'Le fichier dépasse la taille maximale autorisée de :max',
+ 'error-delete-folder'=> "Vous ne pouvez pas supprimer ce dossier car il n'est pas vide",
+ 'error-folder-name' => 'Le nom du dossier ne peut pas être vide',
+ 'error-folder-exist'=> 'Un dossier avec ce nom existe déjà',
+ 'error-folder-alnum'=> 'Seuls les caractéres alphanumériques sont autorisés',
+ 'error-mime' => 'Type de fichier MIME non autorisé: ',
+ 'error-instance' => 'Le fichier doit être une instance de UploadedFile',
+ 'error-invalid' => "Requête d'upload invalide",
+
+ 'btn-upload' => 'Envoyer le/les fichier(s)',
+ 'btn-uploading' => 'Envoi...',
+ 'btn-close' => 'Fermer',
+ 'btn-crop' => 'Rogner',
+ 'btn-cancel' => 'Annuler',
+ 'btn-resize' => 'Redimensionner',
+
+ 'resize-ratio' => 'Ratio:',
+ 'resize-scaled' => "Image à l'échelle:",
+ 'resize-true' => 'Oui',
+ 'resize-old-height' => 'Hauteur originale:',
+ 'resize-old-width' => 'Largeur originale:',
+ 'resize-new-height' => 'Hauteur',
+ 'resize-new-width' => 'Largeur',
+
+ 'locale-bootbox' => 'fr',
+];
diff --git a/packages/iqcontent/laravel-filemanager/src/lang/he/lfm.php b/packages/iqcontent/laravel-filemanager/src/lang/he/lfm.php
new file mode 100644
index 0000000..545ee98
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/lang/he/lfm.php
@@ -0,0 +1,65 @@
+ 'חזרה',
+ 'nav-new' => 'תיקייה חדשה',
+ 'nav-upload' => 'העלה',
+ 'nav-thumbnails' => 'תמונות ממוזערות',
+ 'nav-list' => 'רשימה',
+
+ 'menu-rename' => 'שנה שם',
+ 'menu-delete' => 'מחק',
+ 'menu-view' => 'צפה',
+ 'menu-download' => 'הורד',
+ 'menu-resize' => 'שנה גודל',
+ 'menu-crop' => 'חתוך',
+
+ 'title-page' => 'מנהל קבצים',
+ 'title-panel' => 'מנהל קבצים',
+ 'title-upload' => 'העלאת קובץ',
+ 'title-view' => 'צפייה בקובץ',
+ 'title-user' => 'קבצים',
+ 'title-share' => 'קבצים משותפים',
+ 'title-item' => 'פריט',
+ 'title-size' => 'גודל',
+ 'title-type' => 'סוג',
+ 'title-modified' => 'שונה',
+ 'title-action' => 'פעולה',
+
+ 'type-folder' => 'תיקייה',
+
+ 'message-empty' => 'התיקייה ריקה.',
+ 'message-choose' => 'בחר קובץ',
+ 'message-delete' => 'האם אתה בטוח שברצונך למחוק פריט זה?',
+ 'message-name' => 'שם התיקייה:',
+ 'message-rename' => 'שם חדש:',
+
+ 'error-rename' => 'הקובץ נמצא בשימוש!',
+ 'error-file-empty' => 'עליך לבחור קובץ!',
+ 'error-file-exist' => 'קובץ עם שם זה כבר קיים!',
+ 'error-file-size' => 'File size exceeds server limit! (maximum size: :max)',
+ 'error-delete-folder'=> 'לא ניתן למחוק תייקיה זו מכיוון שהיא לא ריקה!',
+ 'error-folder-name' => 'נא להזין שם תיקייה!',
+ 'error-folder-exist'=> 'תיקייה עם שם זהה כבר קיימת!',
+ 'error-folder-alnum'=> 'Only alphanumeric folder names are allowed!',
+ 'error-mime' => 'סוג קובץ לא תקין: ',
+ 'error-instance' => 'הקובץ שהועלה צריך להיות מופע של UploadedFile',
+ 'error-invalid' => 'בקשת העלה לא תיקנית.',
+
+ 'btn-upload' => 'העלה קובת',
+ 'btn-uploading' => 'מעלה...',
+ 'btn-close' => 'סגור',
+ 'btn-crop' => 'חתוך',
+ 'btn-cancel' => 'בטל',
+ 'btn-resize' => 'שנה גודל',
+
+ 'resize-ratio' => 'יחס:',
+ 'resize-scaled' => 'תמונה הוגדלה:',
+ 'resize-true' => 'כן',
+ 'resize-old-height' => 'גובה מקורי:',
+ 'resize-old-width' => 'אורך מקורי:',
+ 'resize-new-height' => 'גובה:',
+ 'resize-new-width' => 'אורך:',
+
+ 'locale-bootbox' => 'he',
+];
diff --git a/packages/iqcontent/laravel-filemanager/src/lang/hu/lfm.php b/packages/iqcontent/laravel-filemanager/src/lang/hu/lfm.php
new file mode 100644
index 0000000..2a54e96
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/lang/hu/lfm.php
@@ -0,0 +1,75 @@
+ 'Vissza',
+ 'nav-new' => 'Új mappa',
+ 'nav-upload' => 'Feltöltés',
+ 'nav-thumbnails' => 'Miniatűrök',
+ 'nav-list' => 'Lista',
+ 'nav-sort' => 'Rendezés',
+ 'nav-sort-alphabetic'=> 'ABC szerint',
+ 'nav-sort-time' => 'Idő szerint',
+
+ 'menu-rename' => 'Átnevezés',
+ 'menu-delete' => 'Törlés',
+ 'menu-view' => 'Megtekintés',
+ 'menu-download' => 'Letöltés',
+ 'menu-resize' => 'Átméretezés',
+ 'menu-crop' => 'Vágás',
+
+ 'title-page' => 'Fájlkezelő',
+ 'title-panel' => 'Fájlkezelő',
+ 'title-upload' => 'Fájl feltöltés',
+ 'title-view' => 'Fájl megtekintés',
+ 'title-user' => 'Fájlok',
+ 'title-share' => 'Megosztott fájlok',
+ 'title-item' => 'Elem',
+ 'title-size' => 'Méret',
+ 'title-type' => 'Típus',
+ 'title-modified' => 'Módosított',
+ 'title-action' => 'Művelet',
+
+ 'type-folder' => 'Mappa',
+
+ 'message-empty' => 'A mappa üres.',
+ 'message-choose' => 'Fájl kiválasztása',
+ 'message-delete' => 'Biztos vagy benne, hogy törölni akarod az elemet?',
+ 'message-name' => 'Mappa név:',
+ 'message-rename' => 'Átnevezés erre:',
+ 'message-extension_not_found' => 'Kérlek telepítsd a gd vagy az imagick kiterjesztést a vágáshoz, átméretezéshez, és a képek miniatűr elemeinek elkészítéséhez.',
+
+ 'error-rename' => 'A fájl neve használatban!',
+ 'error-file-name' => 'A fájlnév nem lehet üres!',
+ 'error-file-empty' => 'Ki kell választanod egy fájlt!',
+ 'error-file-exist' => 'Egy fájl már létezik ezzel a névvel.',
+ 'error-file-size' => 'A fájl mérete túl nagy a szerverre nem lehet feltölteni! (Maximális megengedett méret: :max)',
+ 'error-delete-folder'=> 'Nem tudod törölni ezt a mappát, mert nem üres!',
+ 'error-folder-name' => 'A mappa neve nem lehet üres!',
+ 'error-folder-exist'=> 'Egy mappa már létezik ezzel a névvel!',
+ 'error-folder-alnum'=> 'Csak alfanumerikus karakterek lehetnek a mappa nevében!',
+ 'error-folder-not-found'=> 'Nem található a(z) (:folder) nevű mappa!',
+ 'error-mime' => 'Váratlan fájltípusok (MimeType): ',
+ 'error-size' => 'Túl nagy méretű:',
+ 'error-instance' => 'A feltöltött fájlnak egy UploadedFile kérelemnek kellene lennie',
+ 'error-invalid' => 'Érvénytelen kérés a feltöltéssel kapcsolatban.',
+ 'error-other' => 'Hiba történt: ',
+ 'error-too-large' => 'Túl nagyméretű a fájl!',
+
+ 'btn-upload' => 'Fájl feltöltés',
+ 'btn-uploading' => 'Feltöltés folyamatban...',
+ 'btn-close' => 'Bezárás',
+ 'btn-crop' => 'Vágás',
+ 'btn-copy-crop' => 'Másolás és vágás',
+ 'btn-cancel' => 'Mégse',
+ 'btn-resize' => 'Átméretezés',
+
+ 'resize-ratio' => 'Arány:',
+ 'resize-scaled' => 'Kép méretarány:',
+ 'resize-true' => 'Igen',
+ 'resize-old-height' => 'Eredeti magasság:',
+ 'resize-old-width' => 'Eredeti szélesség:',
+ 'resize-new-height' => 'Magasság:',
+ 'resize-new-width' => 'Szélesség:',
+
+ 'locale-bootbox' => 'hu',
+];
diff --git a/packages/iqcontent/laravel-filemanager/src/lang/it/lfm.php b/packages/iqcontent/laravel-filemanager/src/lang/it/lfm.php
new file mode 100644
index 0000000..dc9415c
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/lang/it/lfm.php
@@ -0,0 +1,76 @@
+ 'Indietro',
+ 'nav-new' => 'Nuova Cartella',
+ 'nav-upload' => 'Carica',
+ 'nav-thumbnails' => 'Anteprima',
+ 'nav-list' => 'Elencare',
+ 'nav-sort' => 'Ordinare',
+ 'nav-sort-alphabetic'=> 'Ordine Alfabetico',
+ 'nav-sort-time' => 'Ordine Temporale',
+
+ 'menu-rename' => 'Rinomina',
+ 'menu-delete' => 'Elimina',
+ 'menu-view' => 'Anteprima',
+ 'menu-download' => 'Scarica',
+ 'menu-resize' => 'Ridimensiona',
+ 'menu-crop' => 'Taglia',
+
+ 'title-page' => 'File Manager',
+ 'title-panel' => 'Laravel FileManager',
+ 'title-upload' => 'Carica File(s)',
+ 'title-view' => 'Vedi File',
+ 'title-user' => 'Files',
+ 'title-share' => 'Files Condivisi',
+ 'title-item' => 'Voce',
+ 'title-size' => 'Dimensione',
+ 'title-type' => 'Tipo',
+ 'title-modified' => 'Modificato',
+ 'title-action' => 'Azione',
+
+ 'type-folder' => 'Cartella',
+
+ 'message-empty' => 'La cartella è vuota.',
+ 'message-choose' => 'Scegli i File(s)',
+ 'message-delete' => 'Sei sicuro di voler cancellare questa voce?',
+ 'message-name' => 'Nome Cartella:',
+ 'message-rename' => 'Rinomina:',
+ 'message-extension_not_found' => 'Per favore installa gd oppure la estensione di imagick per tagliare, ridimensionare e creare anteprime delle immagini.',
+
+ 'error-rename' => 'Il nome del file è già in uso!',
+ 'error-file-name' => 'Il nome del file non può essere vuoto!',
+ 'error-file-empty' => 'Devi scegliere un file!',
+ 'error-file-exist' => 'Esiste già un file con questo nome!',
+ 'error-file-size' => 'La dimensione del file eccede il limite del server! (dimensione massima: :max)',
+ 'error-delete-folder'=> 'Non puoi cancellare questa cartella perchè non è vuota!',
+ 'error-folder-name' => 'Il nome della cartella non può essere vuoto!',
+ 'error-folder-exist'=> 'Esiste già una cartella con questo nome!',
+ 'error-folder-alnum'=> 'Si può nominare una cartella solo con caratteri alfanumerici!',
+ 'error-folder-not-found'=> 'Cartella non trovata! (:folder)',
+ 'error-mime' => 'Unexpected MimeType: ',
+ 'error-size' => 'Superato il limite di dimensione:',
+ 'error-instance' => 'Il file caricato deve essere una istanza di UploadedFile',
+ 'error-invalid' => 'Richiesta di caricamento non valida',
+ 'error-other' => 'Si è veriifcato un errore: ',
+ 'error-too-large' => 'Richiesta di entità troppo grande!',
+
+ 'btn-upload' => 'Carica File(s)',
+ 'btn-uploading' => 'Sto Caricando...',
+ 'btn-close' => 'Chiudi',
+ 'btn-crop' => 'Taglia',
+ 'btn-copy-crop' => 'Copia & Taglia',
+ 'btn-cancel' => 'Cancella',
+ 'btn-resize' => 'Ridimensiona',
+
+ 'resize-ratio' => 'Proporzione:',
+ 'resize-scaled' => 'Immagine scalata:',
+ 'resize-true' => 'Sì',
+ 'resize-old-height' => 'Altezza Originale:',
+ 'resize-old-width' => 'Larghezza Originale:',
+ 'resize-new-height' => 'Altezza:',
+ 'resize-new-width' => 'Larghezza:',
+
+ 'locale-bootbox' => 'it',
+];
diff --git a/packages/iqcontent/laravel-filemanager/src/lang/ka/lfm.php b/packages/iqcontent/laravel-filemanager/src/lang/ka/lfm.php
new file mode 100644
index 0000000..12fa9e8
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/lang/ka/lfm.php
@@ -0,0 +1,75 @@
+ 'უკან',
+ 'nav-new' => 'ახალი საქაღალდე',
+ 'nav-upload' => 'ატვირთვა',
+ 'nav-thumbnails' => 'ესკიზები',
+ 'nav-list' => 'სია',
+ 'nav-sort' => 'სორტირება',
+ 'nav-sort-alphabetic' => 'სორტირება ანბანის მიხედვით',
+ 'nav-sort-time' => 'სორტირება დროის მიხედვით',
+
+ 'menu-rename' => 'სახელის შეცვლა',
+ 'menu-delete' => 'წაშლა',
+ 'menu-view' => 'ნახვა',
+ 'menu-download' => 'გადმოწერა',
+ 'menu-resize' => 'ზომის შეცვლა',
+ 'menu-crop' => 'ამოჭრა',
+
+ 'title-page' => 'ფაილების მენეჯერი',
+ 'title-panel' => 'ფაილების მენეჯერი',
+ 'title-upload' => 'ფაილ(ებ)ის ატვირთვა',
+ 'title-view' => 'ფაილის ნახვა',
+ 'title-root' => 'ფაილები',
+ 'title-shares' => 'გაზიარებული ფაილები',
+ 'title-item' => 'Item',
+ 'title-size' => 'ზომა',
+ 'title-type' => 'ტიპი',
+ 'title-modified' => 'დარედაქტირდა',
+ 'title-action' => 'ქმედება',
+
+ 'type-folder' => 'საქაღალდე',
+
+ 'message-empty' => 'საქაღალდე ცარიელია.',
+ 'message-choose' => 'ფაილ(ებ)ის არჩევა',
+ 'message-delete' => 'ნამდვილად გსურთ აღნიშნულის წაშლა?',
+ 'message-name' => 'საქაღალდის დასახელება:',
+ 'message-rename' => 'სახელის შეცვლა:',
+ 'message-extension_not_found' => 'გთხოვთ დააყენოთ gd ან imagick გაფართოებები რათა ამოჭრათ, ზომა შეუცვალოთ და გააკეთოთ გამოსახულების ესკიზი.',
+
+ 'error-rename' => 'ფაილი იდენტური დასახელებით უკვე არსებობს!',
+ 'error-file-name' => 'ფაილის დასახელება არ შეიძლება იყოს ცარიელი!',
+ 'error-file-empty' => 'თქვენ უნდა აირჩიოთ ფაილი!',
+ 'error-file-exist' => 'ფაილი იდენტური სახელით უკვე არსებობს!',
+ 'error-file-size' => 'ფაილის ზომა მეტია დასაშვებზე! (მაქსიმალური ზომა: :max)',
+ 'error-delete-folder' => 'საქაღალდის წაშლა შეუძლებელია, რადგან არ არის ცარიელი!',
+ 'error-folder-name' => 'საქაღალდის დასახელება არ შეიძლება იყოს ცარიელი!',
+ 'error-folder-exist' => 'საქაღალდე იდენტური დასახელებით უკვე არსებობს!',
+ 'error-folder-alnum' => 'დასაშვებია მხოლოდ ციფრები და ასოები!',
+ 'error-folder-not-found' => 'საქაღალდე ვერ მოიძებნა! (:folder)',
+ 'error-mime' => 'არასწორი MimeType: ',
+ 'error-size' => 'ლიმიტის გადაჭარბება:',
+ 'error-instance' => 'აღნიშნული ფაილი უნდა იყოს UploadedFile-ის ინსტანსი',
+ 'error-invalid' => 'არასწორი ატვირთვის მოთხოვნა',
+ 'error-other' => 'შეცდომაა: ',
+ 'error-too-large' => 'აღნიშნული ფაილი ძალიან დიდია!',
+
+ 'btn-upload' => 'ფაილ(ებ)ის ატვირთვა',
+ 'btn-uploading' => 'იტვირთება...',
+ 'btn-close' => 'დახურვა',
+ 'btn-crop' => 'ამოჭრა',
+ 'btn-copy-crop' => 'დაკოპირება & ამოჭრა',
+ 'btn-cancel' => 'გაუქმება',
+ 'btn-resize' => 'ზომის შეცვლა',
+
+ 'resize-ratio' => 'პროპორცია:',
+ 'resize-scaled' => 'სკალირებული გამოსახულება:',
+ 'resize-true' => 'კი',
+ 'resize-old-height' => 'ორიგინალის სიმაღლე:',
+ 'resize-old-width' => 'ორიგინალის სიგანე:',
+ 'resize-new-height' => 'სიმაღლე:',
+ 'resize-new-width' => 'სიგანე:',
+
+ 'locale-bootbox' => 'ka',
+];
diff --git a/packages/iqcontent/laravel-filemanager/src/lang/nl/lfm.php b/packages/iqcontent/laravel-filemanager/src/lang/nl/lfm.php
new file mode 100644
index 0000000..57f4c48
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/lang/nl/lfm.php
@@ -0,0 +1,73 @@
+ 'Terug',
+ 'nav-new' => 'Nieuwe Map',
+ 'nav-upload' => 'Upload',
+ 'nav-thumbnails' => 'Thumbnails',
+ 'nav-list' => 'Lijst',
+ 'nav-sort' => 'Sorteren',
+ 'nav-sort-alphabetic' => 'Sorteer op naam',
+ 'nav-sort-time' => 'Sorteer op tijd',
+
+ 'menu-rename' => 'Hernoemen',
+ 'menu-delete' => 'Verwijderen',
+ 'menu-view' => 'Bekijken',
+ 'menu-download' => 'Download',
+ 'menu-resize' => 'Formaat aanpassen',
+ 'menu-crop' => 'Bijsnijden',
+
+ 'title-page' => 'File Manager',
+ 'title-panel' => 'Laravel FileManager',
+ 'title-upload' => 'Bestand uploaden',
+ 'title-view' => 'Bestand bekijken',
+ 'title-user' => 'Bestanden',
+ 'title-share' => 'Openbare map',
+ 'title-item' => 'Item',
+ 'title-size' => 'Grootte',
+ 'title-type' => 'Type',
+ 'title-modified' => 'Gewijzigd',
+ 'title-action' => 'Actie',
+
+ 'type-folder' => 'Map',
+
+ 'message-empty' => 'De map is leeg.',
+ 'message-choose' => 'Kies bestand',
+ 'message-delete' => 'Weet u zeker dat u dit bestand wilt verwijderen?',
+ 'message-name' => 'Mapnaam:',
+ 'message-rename' => 'Hernoemen naar:',
+ 'message-extension_not_found' => 'Installeer de GD of Imagick extensie om afbeeldingen te kunnen bewerken.',
+
+ 'error-rename' => 'Bestandsnaam is al in gebruik!',
+ 'error-file-empty' => 'U dient een bestand te kiezen!',
+ 'error-file-exist' => 'Een bestand met deze naam bestaat al!',
+ 'error-file-size' => 'Bestandsgrootte overschrijdt de server limiet! (maximale grootte: :max)',
+ 'error-delete-folder' => 'U kunt deze map niet verwijderen omdat deze nog bestanden bevat!',
+ 'error-folder-name' => 'Mapnaam mag niet leeg zijn!',
+ 'error-folder-exist' => 'Een map met deze naam bestaat al!',
+ 'error-folder-alnum' => 'Alleen alfanumerieke map namen zijn toegestaan!',
+ 'error-mime' => 'Onverwacht MimeType: ',
+ 'error-instance' => 'Het geuploade bestand moet een instantie zijn van UploadedFile',
+ 'error-invalid' => 'Ongeldig upload verzoek',
+ 'error-other' => 'Er is een fout opgetreden: ',
+ 'error-size' => 'U heeft de maximale bestandsgrootte overschreden:',
+ 'error-too-large' => 'De verzoek entiteit is te groot!',
+
+ 'btn-upload' => 'Bestand uploaden',
+ 'btn-uploading' => 'Uploaden...',
+ 'btn-close' => 'Sluiten',
+ 'btn-crop' => 'Bijsnijden',
+ 'btn-copy-crop' => 'Kopiëren & Bijsnijden',
+ 'btn-cancel' => 'Annuleren',
+ 'btn-resize' => 'Formaat aanpassen',
+
+ 'resize-ratio' => 'Ratio:',
+ 'resize-scaled' => 'Afbeelding geschaald:',
+ 'resize-true' => 'Ja',
+ 'resize-old-height' => 'Originele hoogte:',
+ 'resize-old-width' => 'Originele breedte:',
+ 'resize-new-height' => 'Hoogte:',
+ 'resize-new-width' => 'Breedte:',
+
+ 'locale-bootbox' => 'nl',
+];
diff --git a/packages/iqcontent/laravel-filemanager/src/lang/pl/lfm.php b/packages/iqcontent/laravel-filemanager/src/lang/pl/lfm.php
new file mode 100644
index 0000000..65f030e
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/lang/pl/lfm.php
@@ -0,0 +1,68 @@
+ 'Powrót',
+ 'nav-new' => 'Nowy Folder',
+ 'nav-upload' => 'Wgraj plik',
+ 'nav-thumbnails' => 'Miniaturki',
+ 'nav-list' => 'Lista',
+
+ 'menu-rename' => 'Zmień nazwę',
+ 'menu-delete' => 'Usuń',
+ 'menu-view' => 'Wyświetl',
+ 'menu-download' => 'Pobierz',
+ 'menu-resize' => 'Zmień rozmiar',
+ 'menu-crop' => 'Przytnij',
+
+ 'title-page' => 'Menedżer plików',
+ 'title-panel' => 'Laravel FileManager',
+ 'title-upload' => 'Wgraj plik',
+ 'title-view' => 'Podgląd',
+ 'title-user' => 'Pliki',
+ 'title-share' => 'Udostępnione pliki',
+ 'title-item' => 'Nazwa',
+ 'title-size' => 'Rozmiar',
+ 'title-type' => 'Typ',
+ 'title-modified' => 'Utworzono',
+ 'title-action' => 'Akcje',
+
+ 'type-folder' => 'Folder',
+
+ 'message-empty' => 'Przepraszamy, ten folder jest pusty.',
+ 'message-choose' => 'Wybierz plik',
+ 'message-delete' => 'Czy na pewno chcesz usunąć ten plik?',
+ 'message-name' => 'Nazwa folderu:',
+ 'message-rename' => 'Zmień nazwę:',
+ 'message-extension_not_found' => 'Niestety, nie znaleziono wymaganych rozszerzeń. Zainstaluj gd lub imagick aby manipulować grafiką',
+
+ 'error-rename' => 'Niestety, istnieje już plik o takiej nazwie!',
+ 'error-file-empty' => 'You must choose a file!',
+ 'error-file-exist' => 'Niestety, istnieje już plik o takiej nazwie!',
+ 'error-file-size' => 'Przekroczono maksymalny rozmiar wgrywanych plików! (maximum size: :max)',
+ 'error-delete-folder'=> 'Nie możesz usunąć tego folderu, ponieważ nie jest pusty!',
+ 'error-folder-name' => 'Nazwa folderu nie może być pusta!',
+ 'error-folder-exist'=> 'Folder o tej nazwie już istnieje!',
+ 'error-folder-alnum'=> 'Dozwolone są jedynie nazwy alfanumeryczne!',
+ 'error-mime' => 'Nierozpoznawany MimeType: ',
+ 'error-instance' => 'Wgrywany obiekt powinien być instanją UploadedFile',
+ 'error-invalid' => 'Nieprawidłowe zapytanie',
+ 'error-other' => 'Napotkano następujący błąd: ',
+ 'error-too-large' => 'Przekroczono dozwolony czas operacji!',
+
+ 'btn-upload' => 'Wgraj plik',
+ 'btn-uploading' => 'Wgrywanie...',
+ 'btn-close' => 'Zamknij',
+ 'btn-crop' => 'Przytnij',
+ 'btn-cancel' => 'Anuluj',
+ 'btn-resize' => 'Zmień rozmiar',
+
+ 'resize-ratio' => 'Stosunek:',
+ 'resize-scaled' => 'Zmieniono rozmiar:',
+ 'resize-true' => 'tak',
+ 'resize-old-height' => 'Orginalna wysokość:',
+ 'resize-old-width' => 'Orginalna szerokość:',
+ 'resize-new-height' => 'Wysokość:',
+ 'resize-new-width' => 'Szerokość:',
+
+ 'locale-bootbox' => 'pl',
+];
diff --git a/packages/iqcontent/laravel-filemanager/src/lang/pt-BR/lfm.php b/packages/iqcontent/laravel-filemanager/src/lang/pt-BR/lfm.php
new file mode 100644
index 0000000..ac5a89d
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/lang/pt-BR/lfm.php
@@ -0,0 +1,75 @@
+ 'Voltar',
+ 'nav-new' => 'Nova Pasta',
+ 'nav-upload' => 'Enviar',
+ 'nav-thumbnails' => 'Miniatura',
+ 'nav-list' => 'Lista',
+ 'nav-sort' => 'Ordenar',
+ 'nav-sort-alphabetic'=> 'Ordenar alfabeticamente',
+ 'nav-sort-time' => 'Ordenar por data',
+
+ 'menu-rename' => 'Renomear',
+ 'menu-delete' => 'Deletar',
+ 'menu-view' => 'Ver',
+ 'menu-download' => 'Download',
+ 'menu-resize' => 'Redimensionar',
+ 'menu-crop' => 'Cortar',
+
+ 'title-page' => 'Gerenciador de Arquivos',
+ 'title-panel' => 'Gerenciador de Arquivos',
+ 'title-upload' => 'Envio de Arquivo',
+ 'title-view' => 'Ver Arquivo',
+ 'title-user' => 'Arquivos',
+ 'title-share' => 'Arquivos Compartilhados',
+ 'title-item' => 'Item',
+ 'title-size' => 'Tamanho',
+ 'title-type' => 'Tipo',
+ 'title-modified' => 'Modificado',
+ 'title-action' => 'Ação',
+
+ 'type-folder' => 'Pasta',
+
+ 'message-empty' => 'A pasta está vazia.',
+ 'message-choose' => 'Escolha um arquivo',
+ 'message-delete' => 'Você está certo que quer deletar este arquivo?',
+ 'message-name' => 'Nome da pasta:',
+ 'message-rename' => 'Renomear para:',
+ 'message-extension_not_found' => 'Por favor instale a extenção gd ou imagick para recortar, redimensionar e criar miniaturas das imagens.',
+
+ 'error-rename' => 'Nome de arquivo já está em uso!',
+ 'error-file-name' => 'O nome do arquivo não pode estar vazio!',
+ 'error-file-empty' => 'Você deve escolher um arquivo!',
+ 'error-file-exist' => 'Um arquivo com este nome já existe!',
+ 'error-file-size' => 'Tamanho do arquivo excedeu o limite permitido pelo servidor! (Tamanho máximo: :max)',
+ 'error-delete-folder'=> 'Você não pode deletar esta pasta, pois ela não está vazia!',
+ 'error-folder-name' => 'Nome da pasta não pode ser vazio!',
+ 'error-folder-exist'=> 'Uma pasta com este nome já existe!',
+ 'error-folder-alnum'=> 'Permitido somente caracteres alfanuméricos para nomes de pastas!',
+ 'error-folder-not-found'=> 'A pasta não foi encontrada! (:folder)',
+ 'error-mime' => 'MimeType inesperado: ',
+ 'error-size' => 'Excede o tamanho máximo:',
+ 'error-instance' => 'O arquivo enviado deve ser uma instância de UploadedFile',
+ 'error-invalid' => 'Pedido de upload inválido',
+ 'error-other' => 'Ocorreu um erro: ',
+ 'error-too-large' => 'Solicitar entidade muito grande!',
+
+ 'btn-upload' => 'Enviar Arquivo',
+ 'btn-uploading' => 'Enviando...',
+ 'btn-close' => 'Fechar',
+ 'btn-crop' => 'Cortar',
+ 'btn-copy-crop' => 'Copie e corte',
+ 'btn-cancel' => 'Cancelar',
+ 'btn-resize' => 'Redimensionar',
+
+ 'resize-ratio' => 'Proporção:',
+ 'resize-scaled' => 'Imagem dimensionada:',
+ 'resize-true' => 'Sim',
+ 'resize-old-height' => 'Altura Original:',
+ 'resize-old-width' => 'Largura Original:',
+ 'resize-new-height' => 'Altura:',
+ 'resize-new-width' => 'Largura:',
+
+ 'locale-bootbox' => 'pt_BR',
+];
diff --git a/packages/iqcontent/laravel-filemanager/src/lang/pt/lfm.php b/packages/iqcontent/laravel-filemanager/src/lang/pt/lfm.php
new file mode 100644
index 0000000..4563809
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/lang/pt/lfm.php
@@ -0,0 +1,66 @@
+ 'Voltar',
+ 'nav-new' => 'Nova Pasta',
+ 'nav-upload' => 'Upload',
+ 'nav-thumbnails' => 'Miniatura',
+ 'nav-list' => 'Lista',
+
+ 'menu-rename' => 'Renomear',
+ 'menu-delete' => 'Apagar',
+ 'menu-view' => 'Ver',
+ 'menu-download' => 'Download',
+ 'menu-resize' => 'Redimensionar',
+ 'menu-crop' => 'Cortar',
+
+ 'title-page' => 'Gestor de Arquivos',
+ 'title-panel' => 'Gestor de Arquivos',
+ 'title-upload' => 'Envio de Arquivo',
+ 'title-view' => 'Ver Arquivo',
+ 'title-user' => 'Arquivos',
+ 'title-share' => 'Arquivos Partilhados',
+ 'title-item' => 'Item',
+ 'title-size' => 'Tamanho',
+ 'title-type' => 'Tipo',
+ 'title-modified' => 'Modificado',
+ 'title-action' => 'Ação',
+
+ 'type-folder' => 'Pasta',
+
+ 'message-empty' => 'A pasta está vazia.',
+ 'message-choose' => 'Escolha um arquivo',
+ 'message-delete' => 'Tem a certeza que quer pagar este arquivo?',
+ 'message-name' => 'Nome da pasta:',
+ 'message-rename' => 'Renomear para:',
+ 'message-extension_not_found' => '(translation wanted)',
+
+ 'error-rename' => 'Nome de arquivo já está em uso!',
+ 'error-file-empty' => 'Deve escolher um arquivo!',
+ 'error-file-exist' => 'Um arquivo com este nome já existe!',
+ 'error-file-size' => 'O tamanho do ficheiro excede o limite permitido! (tamanho máximo: :max)',
+ 'error-delete' => 'Não pode apagar esta pasta, não está vazia!',
+ 'error-folder-name' => 'Nome da pasta não pode ser vazio!',
+ 'error-folder-exist'=> 'Uma pasta com este nome já existe!',
+ 'error-folder-alnum'=> 'Apenas valores alfanuméricos são permitidos para o nome da pasta!',
+ 'error-mime' => 'Tipo de ficheiro não suportado: ',
+ 'error-instance' => 'O ficheiro carregado deve ser uma instância de UploadedFile',
+ 'error-invalid' => 'Pedido de upload inválido',
+
+ 'btn-upload' => 'Enviar Arquivo',
+ 'btn-uploading' => 'A enviar...',
+ 'btn-close' => 'Fechar',
+ 'btn-crop' => 'Cortar',
+ 'btn-cancel' => 'Cancelar',
+ 'btn-resize' => 'Redimensionar',
+
+ 'resize-ratio' => 'Proporção:',
+ 'resize-scaled' => 'Imagem dimensionada:',
+ 'resize-true' => 'Sim',
+ 'resize-old-height' => 'Altura Original:',
+ 'resize-old-width' => 'Largura Original:',
+ 'resize-new-height' => 'Altura:',
+ 'resize-new-width' => 'Largura:',
+
+ 'locale-bootbox' => 'pt',
+];
diff --git a/packages/iqcontent/laravel-filemanager/src/lang/ro/lfm.php b/packages/iqcontent/laravel-filemanager/src/lang/ro/lfm.php
new file mode 100644
index 0000000..281e794
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/lang/ro/lfm.php
@@ -0,0 +1,71 @@
+ 'Înapoi',
+ 'nav-new' => 'Folder Nou',
+ 'nav-upload' => 'Încarcă',
+ 'nav-thumbnails' => 'Miniatură',
+ 'nav-list' => 'Listă',
+
+ 'menu-rename' => 'Redenumește',
+ 'menu-delete' => 'Șterge',
+ 'menu-view' => 'Previzualizează',
+ 'menu-download' => 'Descarcă',
+ 'menu-resize' => 'Redimensionează',
+ 'menu-crop' => 'Taie',
+
+ 'title-page' => 'Manager fișiere',
+ 'title-panel' => 'Laravel FileManager',
+ 'title-upload' => 'Încarcă fișier(e)',
+ 'title-view' => 'Vezi fișier',
+ 'title-user' => 'Fișiere',
+ 'title-share' => 'Fișiere distribuite',
+ 'title-item' => 'Element',
+ 'title-size' => 'Dimensiune',
+ 'title-type' => 'Tip',
+ 'title-modified' => 'Modificat',
+ 'title-action' => 'Acțiune',
+
+ 'type-folder' => 'Folder',
+
+ 'message-empty' => 'Folderul este gol.',
+ 'message-choose' => 'Alege fișier(e)',
+ 'message-delete' => 'Ești sigur că vrei să ștergi acest element?',
+ 'message-name' => 'Nume folder:',
+ 'message-rename' => 'Redenumește în:',
+ 'message-extension_not_found' => 'Te rog instalează extensia gd sau imagick ca să poți tăia, redimensiona sau genera miniaturi ale imaginilor.',
+
+ 'error-rename' => 'Nume fișier este deja folosit!',
+ 'error-file-name' => 'Numele fișierului nu poate fi gol!',
+ 'error-file-empty' => 'Trebuie să alegi un fișier!',
+ 'error-file-exist' => 'Există deja un fișier cu acest nume!',
+ 'error-file-size' => 'Dimeniunea fișierului depășeste limita maximă a serverului! (limită maximă: :max)',
+ 'error-delete-folder'=> 'Nu poți șterge acest folder pentru că nu este gol!',
+ 'error-folder-name' => 'Numele folderului nu poate fi gol!',
+ 'error-folder-exist'=> 'Există deja un folder cu acest nume!',
+ 'error-folder-alnum'=> 'Sunt permise doar nume alfanumerice pentru foldere!',
+ 'error-folder-not-found'=> 'Folderul nu a fost gasit! (:folder)',
+ 'error-mime' => 'Unexpected MimeType: ',
+ 'error-size' => 'Dimensiune peste limită:',
+ 'error-instance' => 'Fișierul încărcat trebuie să fie o instanță a UploadedFile',
+ 'error-invalid' => 'Cerere invalidă de upload',
+ 'error-other' => 'A apărut o eroare: ',
+ 'error-too-large' => 'Entitate request prea mare!',
+
+ 'btn-upload' => 'Încarcă fișier(e)',
+ 'btn-uploading' => 'Încarcare...',
+ 'btn-close' => 'Închide',
+ 'btn-crop' => 'Taie',
+ 'btn-cancel' => 'Anulează',
+ 'btn-resize' => 'Redimensionează',
+
+ 'resize-ratio' => 'Rație:',
+ 'resize-scaled' => 'Imagine scalată:',
+ 'resize-true' => 'Da',
+ 'resize-old-height' => 'Înălțime originală:',
+ 'resize-old-width' => 'Lățime originală:',
+ 'resize-new-height' => 'Înălțime:',
+ 'resize-new-width' => 'Lățime:',
+
+ 'locale-bootbox' => 'ro',
+];
diff --git a/packages/iqcontent/laravel-filemanager/src/lang/ru/lfm.php b/packages/iqcontent/laravel-filemanager/src/lang/ru/lfm.php
new file mode 100644
index 0000000..57107ef
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/lang/ru/lfm.php
@@ -0,0 +1,71 @@
+ 'Назад',
+ 'nav-new' => 'Новая папка',
+ 'nav-upload' => 'Загрузить',
+ 'nav-thumbnails' => 'Миниатюры',
+ 'nav-list' => 'Список',
+ 'nav-sort' => 'Сортировать',
+ 'nav-sort-alphabetic'=> 'Сортировать по алфавиту',
+ 'nav-sort-time' => 'Сортировать по времени',
+
+ 'menu-rename' => 'Переименовать',
+ 'menu-delete' => 'Удалить',
+ 'menu-view' => 'Просмотр',
+ 'menu-download' => 'Загрузить',
+ 'menu-resize' => 'Изменить размер',
+ 'menu-crop' => 'Обрезать',
+
+ 'title-page' => 'Менеджер файлов',
+ 'title-panel' => 'Laravel FileManager',
+ 'title-upload' => 'Загрузка файла',
+ 'title-view' => 'Просмотр файла',
+ 'title-user' => 'Файлы',
+ 'title-share' => 'Общие файлы',
+ 'title-item' => 'Номер',
+ 'title-size' => 'Размер',
+ 'title-type' => 'Тип',
+ 'title-modified' => 'Изменен',
+ 'title-action' => 'Действие',
+
+ 'type-folder' => 'Папка',
+
+ 'message-empty' => 'Папка пуста.',
+ 'message-choose' => 'Выберите файл',
+ 'message-delete' => 'Вы уверены что хотите это удалить?',
+ 'message-name' => 'Название папки:',
+ 'message-rename' => 'Переименовать в:',
+ 'message-extension_not_found' => 'Требуется установка GD или Imagick расширения для обрезания, масштабирования и создания миниатюр изображений.',
+
+ 'error-rename' => 'Имя файла уже используется!',
+ 'error-file-empty' => 'Вы должны выбрать файл!',
+ 'error-file-exist' => 'Файл с этим именем уже существует!',
+ 'error-file-size' => 'Размер файла превышает разрешенный сервером размер! (максимальный размер: :max)',
+ 'error-delete-folder'=> 'Вы не можете удалить эту папку, потому что она не пустая!',
+ 'error-folder-name' => 'Имя папки не может быть пустым!',
+ 'error-folder-exist'=> 'Папка с таким названием уже существует!',
+ 'error-folder-alnum'=> 'Название папки должно содержать только цифры и латинские буквы!',
+ 'error-mime' => 'Неподдерживаемый MimeType: ',
+ 'error-instance' => 'Загруженный файл должен быть экземпляром UploadedFile',
+ 'error-invalid' => 'Неверный запрос загрузки',
+ 'error-other' => 'Произошла ошибка: ',
+ 'error-too-large' => 'Размер загружаемого файла слишком велик!',
+
+ 'btn-upload' => 'Загрузить файл',
+ 'btn-uploading' => 'Загрузка...',
+ 'btn-close' => 'Закрыть',
+ 'btn-crop' => 'Обрезать',
+ 'btn-cancel' => 'Отмена',
+ 'btn-resize' => 'Изменить размер',
+
+ 'resize-ratio' => 'Соотношение:',
+ 'resize-scaled' => 'Масштабировать изображение:',
+ 'resize-true' => 'Да',
+ 'resize-old-height' => 'Оригинальная высота:',
+ 'resize-old-width' => 'Оригинальная ширина:',
+ 'resize-new-height' => 'Высота:',
+ 'resize-new-width' => 'Ширина:',
+
+ 'locale-bootbox' => 'ru',
+];
diff --git a/packages/iqcontent/laravel-filemanager/src/lang/sv/lfm.php b/packages/iqcontent/laravel-filemanager/src/lang/sv/lfm.php
new file mode 100644
index 0000000..7004546
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/lang/sv/lfm.php
@@ -0,0 +1,75 @@
+ 'Tillbaka',
+ 'nav-new' => 'Ny mapp',
+ 'nav-upload' => 'Ladda up',
+ 'nav-thumbnails' => 'Miniatyrer',
+ 'nav-list' => 'Lista',
+ 'nav-sort' => 'Sortera',
+ 'nav-sort-alphabetic'=> 'Sortera efter alfabetet',
+ 'nav-sort-time' => 'Sortera efter tid',
+
+ 'menu-rename' => 'Byt namn',
+ 'menu-delete' => 'Ta bort',
+ 'menu-view' => 'Förhandsgranska',
+ 'menu-download' => 'Ladda ner',
+ 'menu-resize' => 'Ändra storlek',
+ 'menu-crop' => 'Beskär',
+
+ 'title-page' => 'Filhanterare',
+ 'title-panel' => 'Laravel Filhanterare',
+ 'title-upload' => 'Ladda upp fil(er)',
+ 'title-view' => 'Visa fil',
+ 'title-user' => 'Filer',
+ 'title-share' => 'Delade filer',
+ 'title-item' => 'Objekt',
+ 'title-size' => 'Storlek',
+ 'title-type' => 'Typ',
+ 'title-modified' => 'Ändrat',
+ 'title-action' => 'Hantera',
+
+ 'type-folder' => 'Map',
+
+ 'message-empty' => 'Mappen är tom',
+ 'message-choose' => 'Välj fil(er)',
+ 'message-delete' => 'Är du säker på att du vill radera det här objektet?',
+ 'message-name' => 'Mappnamn:',
+ 'message-rename' => 'Byt namn till:',
+ 'message-extension_not_found' => 'Vänligen installera gd- eller imagick-tillägget för att beskära, ändra storlek och göra miniatyrer av bilder.',
+
+ 'error-rename' => 'Filnamnet finns redan!',
+ 'error-file-name' => 'Filnamnet kan inte vara tomt!',
+ 'error-file-empty' => 'Du måste välja en fil!',
+ 'error-file-exist' => 'En fil med detta namn finns redan!',
+ 'error-file-size' => 'Filstorleken överstiger servergränsen! (maximal storlek:: max) ',
+ 'error-delete-folder'=> 'Du kan inte radera den här mappen eftersom den inte är tom!',
+ 'error-folder-name' => 'Mappnamnet kan inte vara tomt!',
+ 'error-folder-exist'=> 'En mapp med detta namn finns redan!',
+ 'error-folder-alnum'=> 'Endast alfanumeriska mappnamn är tillåtna!',
+ 'error-folder-not-found'=> 'Mappen hittades inte! (:folder)',
+ 'error-mime' => 'Oväntad MimeType: ',
+ 'error-size' => 'Över storleksgräns:',
+ 'error-instance' => 'Den uppladdade filen måste vara en typ UploadedFile',
+ 'error-invalid' => 'Ogiltig uppladdningsförfrågan',
+ 'error-other' => 'Ett fel har uppstått:',
+ 'error-too-large' => 'Objektet i begäran är för stor!',
+
+ 'btn-upload' => 'Ladda upp fil(er)',
+ 'btn-uploading' => 'Laddar upp...',
+ 'btn-close' => 'Stäng',
+ 'btn-crop' => 'Beskär',
+ 'btn-copy-crop' => 'Kopiera & Beskär',
+ 'btn-cancel' => 'Avbryt',
+ 'btn-resize' => 'Ändra stolek',
+
+ 'resize-ratio' => 'Förhållande:',
+ 'resize-scaled' => 'Bildskala:',
+ 'resize-true' => 'Ja',
+ 'resize-old-height' => 'Original höjd:',
+ 'resize-old-width' => 'Original bredd:',
+ 'resize-new-height' => 'Höjd:',
+ 'resize-new-width' => 'Bredd:',
+
+ 'locale-bootbox' => 'sv',
+];
diff --git a/packages/iqcontent/laravel-filemanager/src/lang/tr/lfm.php b/packages/iqcontent/laravel-filemanager/src/lang/tr/lfm.php
new file mode 100644
index 0000000..def3cab
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/lang/tr/lfm.php
@@ -0,0 +1,75 @@
+ 'Geri',
+ 'nav-new' => 'Yeni Klasör',
+ 'nav-upload' => 'Yükle',
+ 'nav-thumbnails' => 'Küçük Resim',
+ 'nav-list' => 'Liste',
+ 'nav-sort' => 'Sırala',
+ 'nav-sort-alphabetic'=> 'A-Z Sırala',
+ 'nav-sort-time' => 'Zamana Göre Sırala',
+
+ 'menu-rename' => 'Ad değiştir',
+ 'menu-delete' => 'Sil',
+ 'menu-view' => 'Görüntüle',
+ 'menu-download' => 'İndir',
+ 'menu-resize' => 'Boyutlandır',
+ 'menu-crop' => 'Kırp',
+
+ 'title-page' => 'Dosya Kütüphanesi',
+ 'title-panel' => 'Laravel Dosya Kütüphanesi',
+ 'title-upload' => 'Dosya Yükle',
+ 'title-view' => 'Dosya Gör',
+ 'title-user' => 'Dosyalarım',
+ 'title-share' => 'Paylaşılan Dosyalar',
+ 'title-item' => 'Dosya',
+ 'title-size' => 'Boyut',
+ 'title-type' => 'Tür',
+ 'title-modified' => 'Güncelleme',
+ 'title-action' => 'Komutlar',
+
+ 'type-folder' => 'Klasör',
+
+ 'message-empty' => 'Klasör boş.',
+ 'message-choose' => 'Dosya seç',
+ 'message-delete' => 'Bu dosyayı silmek istediğinizden emin misiniz?',
+ 'message-name' => 'Klasör adı:',
+ 'message-rename' => 'Yeni ad:',
+ 'message-extension_not_found' => 'Lütfen resimleri kesmek, yeniden boyutlandırmak ve küçük resimler oluşturmak için gd veya imagick eklentisini yükleyin',
+
+ 'error-rename' => 'Dosya adı kullanımda!',
+ 'error-file-name' => 'Dosya adı boş bırakılamaz!',
+ 'error-file-empty' => 'Bir dosya seçmelisiniz!',
+ 'error-file-exist' => 'Bu adda bir dosya zaten var!',
+ 'error-file-size' => 'Dosya boyutu sunucu limitini aşıyor! (maximum boyut: :max)',
+ 'error-delete-folder'=> 'Klasör boş olmadığından, klasörü silemezsiniz!',
+ 'error-folder-name' => 'Klasör adı yazılmalıdır!',
+ 'error-folder-exist'=> 'Bu adda bir klasör zaten var!',
+ 'error-folder-alnum'=> 'Yalnızca alfasayısal klasör adlarına izin verilir!',
+ 'error-folder-not-found'=> 'Klasör bulunamadı! (:folder)',
+ 'error-mime' => 'Beklenmeyen Mime Türü: ',
+ 'error-size' => 'Boyut sınırın üstünde:',
+ 'error-instance' => 'Yüklenen dosya, UploadedFile örneğinde olmalıdır',
+ 'error-invalid' => 'Geçersiz yükleme isteği',
+ 'error-other' => 'Bir hata oluştu: ',
+ 'error-too-large' => 'Girilen veri çok fazla!',
+
+ 'btn-upload' => 'Yükle',
+ 'btn-uploading' => 'Yükleniyor...',
+ 'btn-close' => 'Kapat',
+ 'btn-crop' => 'Kırp',
+ 'btn-copy-crop' => 'Kopyala & Kes',
+ 'btn-cancel' => 'İptal',
+ 'btn-resize' => 'Boyutlandır',
+
+ 'resize-ratio' => 'Oran:',
+ 'resize-scaled' => 'Boyutlandırıldı:',
+ 'resize-true' => 'Evet',
+ 'resize-old-height' => 'Orijinal Yükseklik:',
+ 'resize-old-width' => 'Orijinal Genişlik:',
+ 'resize-new-height' => 'Yükseklik:',
+ 'resize-new-width' => 'Genişlik:',
+
+ 'locale-bootbox' => 'tr',
+];
diff --git a/packages/iqcontent/laravel-filemanager/src/lang/uk/lfm.php b/packages/iqcontent/laravel-filemanager/src/lang/uk/lfm.php
new file mode 100644
index 0000000..7c79e1b
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/lang/uk/lfm.php
@@ -0,0 +1,81 @@
+ 'Назад',
+ 'nav-new' => 'Нова папка',
+ 'nav-upload' => 'Завантажити',
+ 'nav-thumbnails' => 'Мініатюри',
+ 'nav-list' => 'Список',
+ 'nav-sort' => 'Сортувати',
+ 'nav-sort-alphabetic'=> 'Сортувати за алфавітом',
+ 'nav-sort-time' => 'Сортувати за часом',
+
+ 'menu-rename' => 'Перейменувати',
+ 'menu-delete' => 'Вилучити',
+ 'menu-view' => 'Перегляд',
+ 'menu-download' => 'Завантажити',
+ 'menu-resize' => 'Змінити розмір',
+ 'menu-crop' => 'Обрізати',
+ 'menu-move' => 'Перемістити',
+ 'menu-multiple' => 'Multi-виділення',
+
+ 'title-page' => 'Менеджер файлів',
+ 'title-panel' => 'Laravel FileManager',
+ 'title-upload' => 'Завантаження файлу',
+ 'title-view' => 'Перегляд файлу',
+ 'title-user' => 'Файли',
+ 'title-share' => 'Спільні файли',
+ 'title-item' => 'Номер',
+ 'title-size' => 'Розмір',
+ 'title-type' => 'Тип',
+ 'title-modified' => 'Змінений',
+ 'title-action' => 'Дія',
+
+ 'type-folder' => 'Папка',
+
+ 'message-empty' => 'Папка порожня.',
+ 'message-choose' => 'Виберіть файл(-и)',
+ 'message-delete' => 'Ви впевнені, що хочете вилучити цей елемент?',
+ 'message-name' => 'Назва папки:',
+ 'message-rename' => 'Перейменувати в:',
+ 'message-extension_not_found' => 'Інсталюйте, будь ласка, розширення GD чи ImageMagick щоб мати можливість кадрувати, змінювати розміри чи створювати ескізи зображень.',
+ 'message-drop' => 'Або перетягніть файли сюди для завантаження',
+
+ 'error-rename' => 'Ім\'я файлу вже використовується!',
+ 'error-file-name' => 'Ім\'я файлу не може бути порожнім!',
+ 'error-file-empty' => 'Ви повинні вибрати файл!',
+ 'error-file-exist' => 'Файл з таким ім\'ям вже існує!',
+ 'error-file-size' => 'Розмір файлу перевищує обмеження сервера! (максимальний розмір: :max)',
+ 'error-delete-folder'=> 'Ви не можете вилучити цю папку, оскільки вона не порожня!',
+ 'error-folder-name' => 'Ім\'я папки не може бути порожнім!',
+ 'error-folder-exist'=> 'Папка з тиким ім\'ям вже існує!',
+ 'error-folder-alnum'=> 'Дозволені лише буквено-цифрові імена папок!',
+ 'error-folder-not-found'=> 'Папку не знайдено! (:folder)',
+ 'error-mime' => 'Недозволений MimeType: ',
+ 'error-size' => 'Розмір перевищує дозволений:',
+ 'error-instance' => 'Завантажений файл має бути екземпляром UploadedFile',
+ 'error-invalid' => 'Неправильний запит на завантаження',
+ 'error-other' => 'Сталася помилка: ',
+ 'error-too-large' => 'Занадто великий об\'єкт запиту!',
+
+ 'btn-upload' => 'Завантажити файл',
+ 'btn-uploading' => 'Завантаження...',
+ 'btn-close' => 'Закрити',
+ 'btn-crop' => 'Обрізати',
+ 'btn-copy-crop' => 'Скопіювати & Обрізати',
+ 'btn-crop-free' => 'Звільнити',
+ 'btn-cancel' => 'Скасувати',
+ 'btn-confirm' => 'Підтвердити',
+ 'btn-resize' => 'Змінити розмір',
+ 'btn-open' => 'Відкрити папку',
+
+ 'resize-ratio' => 'Співвідношення:',
+ 'resize-scaled' => 'Масштабоване зображення:',
+ 'resize-true' => 'Так',
+ 'resize-old-height' => 'Оригінальна висота:',
+ 'resize-old-width' => 'Оригінальна ширина:',
+ 'resize-new-height' => 'Висота:',
+ 'resize-new-width' => 'Ширина:',
+
+ 'locale-bootbox' => 'uk',
+];
diff --git a/packages/iqcontent/laravel-filemanager/src/lang/vi/lfm.php b/packages/iqcontent/laravel-filemanager/src/lang/vi/lfm.php
new file mode 100644
index 0000000..b613c92
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/lang/vi/lfm.php
@@ -0,0 +1,75 @@
+ 'Quay lại',
+ 'nav-new' => 'Tạo thư mục mới',
+ 'nav-upload' => 'Tải lên',
+ 'nav-thumbnails' => 'Ảnh đại diện',
+ 'nav-list' => 'Danh sách',
+ 'nav-sort' => 'Sắp xếp',
+ 'nav-sort-alphabetic'=> 'Sắp xếp theo thứ tự Alphabet',
+ 'nav-sort-time' => 'Sắp xếp theo thời gian',
+
+ 'menu-rename' => 'Đổi tên',
+ 'menu-delete' => 'Xoá',
+ 'menu-view' => 'Xem trước',
+ 'menu-download' => 'Tải xuống',
+ 'menu-resize' => 'Thay đổi kích thước',
+ 'menu-crop' => 'Cắt hình',
+
+ 'title-page' => 'Trình quản lý tập tin',
+ 'title-panel' => 'Trình quản lý tập tin Laravel',
+ 'title-upload' => 'Tải lên',
+ 'title-view' => 'Xem tập tin',
+ 'title-root' => 'Các tập tin',
+ 'title-shares' => 'Các tập tin được chia sẽ',
+ 'title-item' => 'Mục',
+ 'title-size' => 'Kích thước',
+ 'title-type' => 'Loại',
+ 'title-modified' => 'Đã chỉnh sửa',
+ 'title-action' => 'Hành động',
+
+ 'type-folder' => 'Thư mục',
+
+ 'message-empty' => 'Thư mục trống.',
+ 'message-choose' => 'Chọn tập tin',
+ 'message-delete' => 'Bạn có chắc chắn muốn xoá mục này?',
+ 'message-name' => 'Tên thư mục:',
+ 'message-rename' => 'Đổi tên thành:',
+ 'message-extension_not_found' => 'Vui lòng cài đặt gói mở rộng gd hoặc imagick để cắt, thay đổi kích thước và tạo ảnh đại điện cho các hình ảnh.',
+
+ 'error-rename' => 'Tên tập tin đã được chọn!',
+ 'error-file-name' => 'Tên tập tin không được trống!',
+ 'error-file-empty' => 'Bạn phải lựa chọn 1 tập tin!',
+ 'error-file-exist' => 'Cùng tên với tập tin khác!',
+ 'error-file-size' => 'Kích thước tập tin đạt tối đa! (kích thước tối đa: :max)',
+ 'error-delete-folder'=> 'Bạn không thể xoá thư mục này bởi vì nó không trống!',
+ 'error-folder-name' => 'Tên thư mục không được trống!',
+ 'error-folder-exist'=> 'Tên thư mục đã được sử dụng!',
+ 'error-folder-alnum'=> 'Tên thư mục chỉ được sử dụng chữ hoặc số!',
+ 'error-folder-not-found'=> 'Không tìm thấy thư mục! (:folder)',
+ 'error-mime' => 'Không hỗ trợ MimeType: ',
+ 'error-size' => 'Kích thước quá lớn:',
+ 'error-instance' => 'Tập tin được tải lên phải là một kiểu UploadedFile',
+ 'error-invalid' => 'Yêu cầu tải lên không hợp lệ',
+ 'error-other' => 'Có lỗi xảy ra: ',
+ 'error-too-large' => 'Kích thước yêu cầu quá lơn!',
+
+ 'btn-upload' => 'Tải tập tin',
+ 'btn-uploading' => 'Đang tải lên...',
+ 'btn-close' => 'Đóng',
+ 'btn-crop' => 'Cắt',
+ 'btn-copy-crop' => 'Sao chép và Cắt',
+ 'btn-cancel' => 'Huỷ bỏ',
+ 'btn-resize' => 'Thay đổi kích thước',
+
+ 'resize-ratio' => 'Tỷ lệ:',
+ 'resize-scaled' => 'Hình ảnh thu nhỏ:',
+ 'resize-true' => 'Đồng ý',
+ 'resize-old-height' => 'Chiều cao ban đầu:',
+ 'resize-old-width' => 'Chiều rộng ban đầu:',
+ 'resize-new-height' => 'Chiều cao:',
+ 'resize-new-width' => 'Chiều rộng:',
+
+ 'locale-bootbox' => 'vi',
+];
diff --git a/packages/iqcontent/laravel-filemanager/src/lang/zh-CN/lfm.php b/packages/iqcontent/laravel-filemanager/src/lang/zh-CN/lfm.php
new file mode 100644
index 0000000..5bc1be8
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/lang/zh-CN/lfm.php
@@ -0,0 +1,75 @@
+ '回上一页',
+ 'nav-new' => '添加文件夹',
+ 'nav-upload' => '上传档案',
+ 'nav-thumbnails' => '缩略图显示',
+ 'nav-list' => '列表显示',
+ 'nav-sort' => '排序',
+ 'nav-sort-alphabetic'=> '按字母排序',
+ 'nav-sort-time' => '按时间排序',
+
+ 'menu-rename' => '重命名',
+ 'menu-delete' => '删除',
+ 'menu-view' => '预览',
+ 'menu-download' => '下载',
+ 'menu-resize' => '缩放',
+ 'menu-crop' => '裁剪',
+
+ 'title-page' => '档案管理',
+ 'title-panel' => '档案管理',
+ 'title-upload' => '上传档案',
+ 'title-view' => '预览档案',
+ 'title-user' => '我的档案',
+ 'title-share' => '共享的文件',
+ 'title-item' => '项目名称',
+ 'title-size' => '档案大小',
+ 'title-type' => '档案类型',
+ 'title-modified' => '上次修改',
+ 'title-action' => '操作',
+
+ 'type-folder' => '文件夹',
+
+ 'message-empty' => '空的文件夹',
+ 'message-choose' => '选择档案',
+ 'message-delete' => '确定要删除此项目吗?',
+ 'message-name' => '文件夹名称:',
+ 'message-rename' => '重命名为:',
+ 'message-extension_not_found' => '请安装 gd 或 imagick 以使用缩放、裁剪、及缩图功能',
+
+ 'error-rename' => '名称重复,请重新输入!',
+ 'error-file-name' => '文件名不能为空!',
+ 'error-file-empty' => '请选择档案!',
+ 'error-file-exist' => '相同档名的档案已存在!',
+ 'error-file-size' => '档案过大,无法上传! (档案大小上限: :max)',
+ 'error-delete-folder'=> '文件夹未清空,无法删除!',
+ 'error-folder-name' => '请输入文件夹名称!',
+ 'error-folder-exist'=> '相同名称的文件夹已存在!',
+ 'error-folder-alnum'=> '文件夹名称只能包含英数字',
+ 'error-folder-not-found'=> '找不到文件夹 :folder',
+ 'error-mime' => 'Mime 格式错误 : ',
+ 'error-size' => '大小超出限制:',
+ 'error-instance' => '上传档案的 instance 应为 UploadedFile',
+ 'error-invalid' => '验证失败,上传未成功',
+ 'error-other' => '发生错误: ',
+ 'error-too-large' => '请求内容太大!',
+
+ 'btn-upload' => '上传',
+ 'btn-uploading' => '上传中...',
+ 'btn-close' => '关闭',
+ 'btn-crop' => '裁剪',
+ 'btn-copy-crop' => '复制并裁剪',
+ 'btn-cancel' => '取消',
+ 'btn-resize' => '缩放',
+
+ 'resize-ratio' => '比例:',
+ 'resize-scaled' => '是否已缩放:',
+ 'resize-true' => '是',
+ 'resize-old-height' => '原始高度:',
+ 'resize-old-width' => '原始宽度:',
+ 'resize-new-height' => '目前高度:',
+ 'resize-new-width' => '目前宽度:',
+
+ 'locale-bootbox' => 'zh_CN',
+];
diff --git a/packages/iqcontent/laravel-filemanager/src/lang/zh-TW/lfm.php b/packages/iqcontent/laravel-filemanager/src/lang/zh-TW/lfm.php
new file mode 100644
index 0000000..5c4ced9
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/lang/zh-TW/lfm.php
@@ -0,0 +1,80 @@
+ '回上一頁',
+ 'nav-new' => '新增資料夾',
+ 'nav-upload' => '上傳檔案',
+ 'nav-thumbnails' => '縮圖顯示',
+ 'nav-list' => '列表顯示',
+ 'nav-sort' => '排序',
+ 'nav-sort-alphabetic'=> '依字母排序',
+ 'nav-sort-time' => '依時間排序',
+
+ 'menu-rename' => '重新命名',
+ 'menu-delete' => '刪除',
+ 'menu-view' => '預覽',
+ 'menu-download' => '下載',
+ 'menu-resize' => '縮放',
+ 'menu-crop' => '裁剪',
+ 'menu-move' => '搬移',
+ 'menu-multiple' => '多選',
+
+ 'title-page' => '檔案管理',
+ 'title-panel' => '檔案管理',
+ 'title-upload' => '上傳檔案',
+ 'title-view' => '預覽檔案',
+ 'title-user' => '我的檔案',
+ 'title-share' => '共享的檔案',
+ 'title-item' => '項目名稱',
+ 'title-size' => '檔案大小',
+ 'title-type' => '檔案類型',
+ 'title-modified' => '上次修改',
+ 'title-action' => '操作',
+
+ 'type-folder' => '資料夾',
+
+ 'message-empty' => '空的資料夾',
+ 'message-choose' => '選擇檔案',
+ 'message-delete' => '確定要刪除此項目嗎?',
+ 'message-name' => '資料夾名稱:',
+ 'message-rename' => '重新命名為:',
+ 'message-extension_not_found' => '請安裝 gd 或 imagick 以使用縮放、裁剪、及縮圖功能',
+ 'message-drop' => '或將檔案拖拉到此處',
+
+ 'error-rename' => '名稱重複,請重新輸入!',
+ 'error-file-name' => '請輸入檔案名稱!',
+ 'error-file-empty' => '請選擇檔案!',
+ 'error-file-exist' => '相同檔名的檔案已存在!',
+ 'error-file-size' => '檔案過大,無法上傳! (檔案大小上限: :max)',
+ 'error-delete-folder'=> '資料夾未清空,無法刪除!',
+ 'error-folder-name' => '請輸入資料夾名稱!',
+ 'error-folder-exist'=> '相同名稱的資料夾已存在!',
+ 'error-folder-alnum'=> '資料夾名稱只能包含英數字!',
+ 'error-folder-not-found'=> '找不到資料夾: :folder',
+ 'error-mime' => 'Mime 格式錯誤 : ',
+ 'error-instance' => '上傳檔案的 instance 應為 UploadedFile',
+ 'error-invalid' => '驗證失敗,上傳未成功',
+ 'error-other' => '發生錯誤: ',
+ 'error-too-large' => '請求內容太大!',
+
+ 'btn-upload' => '上傳',
+ 'btn-uploading' => '上傳中...',
+ 'btn-close' => '關閉',
+ 'btn-crop' => '裁剪',
+ 'btn-copy-crop' => '裁剪為新的檔案',
+ 'btn-crop-free' => '不限比例',
+ 'btn-cancel' => '取消',
+ 'btn-confirm' => '確認',
+ 'btn-resize' => '縮放',
+ 'btn-open' => '開啟資料夾',
+
+ 'resize-ratio' => '比例:',
+ 'resize-scaled' => '是否已縮放:',
+ 'resize-true' => '是',
+ 'resize-old-height' => '原始高度:',
+ 'resize-old-width' => '原始寬度:',
+ 'resize-new-height' => '目前高度:',
+ 'resize-new-width' => '目前寬度:',
+
+ 'locale-bootbox' => 'zh_TW',
+];
diff --git a/packages/iqcontent/laravel-filemanager/src/views/crop.blade.php b/packages/iqcontent/laravel-filemanager/src/views/crop.blade.php
new file mode 100644
index 0000000..094ebd2
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/views/crop.blade.php
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 16:9
+
+
+ 4:3
+
+
+ 1:1
+
+
+ 2:3
+
+
+ {{ trans('laravel-filemanager::lfm.btn-crop-free') }}
+
+
+
+
+
+ {{ trans('laravel-filemanager::lfm.btn-cancel') }}
+ {{ trans('laravel-filemanager::lfm.btn-copy-crop') }}
+ {{ trans('laravel-filemanager::lfm.btn-crop') }}
+
+
+
+
+
+
+
diff --git a/packages/iqcontent/laravel-filemanager/src/views/demo.blade.php b/packages/iqcontent/laravel-filemanager/src/views/demo.blade.php
new file mode 100644
index 0000000..e40cc2c
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/views/demo.blade.php
@@ -0,0 +1,174 @@
+
+
+
+
+
+
Laravel Filemanager
+
+
+
+
+
+
+
+
+
+
CKEditor
+
+
+
+
TinyMCE
+
+
+
+
+
+
Summernote
+
+
+
+
Standalone Image Button
+
+
+
Standalone File Button
+
+
+
+
+
+
+
Embed file manager
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/iqcontent/laravel-filemanager/src/views/index.blade.php b/packages/iqcontent/laravel-filemanager/src/views/index.blade.php
new file mode 100644
index 0000000..6601a06
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/views/index.blade.php
@@ -0,0 +1,290 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ trans('laravel-filemanager::lfm.title-page') }}
+
+
+
+
+
+
+
+
+ {{-- Use the line below instead of the above if you need to cache the css. --}}
+ {{--
--}}
+
+
+
+
+
+ {{ trans('laravel-filemanager::lfm.nav-back') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ trans('laravel-filemanager::lfm.btn-open') }}
+ {{ trans('laravel-filemanager::lfm.menu-view') }}
+ {{ trans('laravel-filemanager::lfm.btn-confirm') }}
+
+
+
+
+
+
+
+
+
+
+ Home
+
+
+
+
+
+ {{ trans('laravel-filemanager::lfm.message-empty') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{-- Use the line below instead of the above if you need to cache the script. --}}
+ {{-- --}}
+
+
+
diff --git a/packages/iqcontent/laravel-filemanager/src/views/move.blade.php b/packages/iqcontent/laravel-filemanager/src/views/move.blade.php
new file mode 100644
index 0000000..c055f95
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/views/move.blade.php
@@ -0,0 +1,40 @@
+
+
+
diff --git a/packages/iqcontent/laravel-filemanager/src/views/resize.blade.php b/packages/iqcontent/laravel-filemanager/src/views/resize.blade.php
new file mode 100644
index 0000000..3f783e3
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/views/resize.blade.php
@@ -0,0 +1,125 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ trans('laravel-filemanager::lfm.btn-cancel') }}
+ {{ trans('laravel-filemanager::lfm.btn-resize') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/iqcontent/laravel-filemanager/src/views/tree.blade.php b/packages/iqcontent/laravel-filemanager/src/views/tree.blade.php
new file mode 100644
index 0000000..e7bf1f0
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/views/tree.blade.php
@@ -0,0 +1,34 @@
+
+
Laravel File Manager
+
Ver 2.0
+
+
+
+
+
+
+
Current usage :
+
20 GB (Max : 1 TB)
+
+
+
+
+
+
diff --git a/packages/iqcontent/laravel-filemanager/src/views/use.blade.php b/packages/iqcontent/laravel-filemanager/src/views/use.blade.php
new file mode 100644
index 0000000..c471eac
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/src/views/use.blade.php
@@ -0,0 +1,16 @@
+
diff --git a/packages/iqcontent/laravel-filemanager/tests/ApiTest.php.bak b/packages/iqcontent/laravel-filemanager/tests/ApiTest.php.bak
new file mode 100644
index 0000000..3a1e845
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/tests/ApiTest.php.bak
@@ -0,0 +1,386 @@
+filename = $uniq . '.jpg';
+ $this->filename_s = $uniq . '_S.jpg';
+ $this->file = UploadedFile::fake()->image($this->filename);
+
+ $this->dir_name = uniqid();
+ }
+
+ public function tearDown()
+ {
+ $storage_path = implode(DIRECTORY_SEPARATOR, [
+ config('lfm.base_directory'),
+ config('lfm.files_folder_name'),
+ (new TestConfigHandler)->userField(),
+ ]);
+ Storage::deleteDirectory($storage_path);
+ parent::tearDown();
+ }
+
+ /**
+ * test directory api.
+ *
+ * @group directory
+ */
+ public function testFolder()
+ {
+ // auth()->loginUsingId(1);
+
+ $create = $this->getResponseByRouteName('getAddfolder', [
+ 'name' => 'testcase',
+ ]);
+
+ $create_duplicate = $this->getResponseByRouteName('getAddfolder', [
+ 'name' => 'testcase',
+ ]);
+
+ $create_empty = $this->getResponseByRouteName('getAddfolder', [
+ 'name' => '',
+ ]);
+
+ Config::set('lfm.alphanumeric_directory', true);
+ $create_alphanumeric = $this->getResponseByRouteName('getAddfolder', [
+ 'name' => '測試資料夾',
+ ]);
+
+ $rename = $this->getResponseByRouteName('getRename', [
+ 'file' => 'testcase',
+ 'new_name' => 'testcase2',
+ ]);
+
+ $delete = $this->getResponseByRouteName('getDelete', [
+ 'items' => 'testcase2',
+ ]);
+
+ $this->assertEquals('OK', $create);
+ $this->assertEquals(trans('laravel-filemanager::lfm.error-folder-exist'), $create_duplicate);
+ $this->assertEquals(trans('laravel-filemanager::lfm.error-folder-name'), $create_empty);
+ $this->assertEquals(trans('laravel-filemanager::lfm.error-folder-alnum'), $create_alphanumeric);
+ $this->assertEquals('OK', $rename);
+ $this->assertEquals('OK', $delete);
+ }
+
+ /**
+ * upload a file.
+ *
+ * @group image
+ */
+ public function testUploadImage()
+ {
+ $response = $this->json('GET', route('unisharp.lfm.upload'), [
+ 'upload' => [$this->file],
+ 'working_dir' => $this->root_dir,
+ ]);
+
+ $response->assertStatus(200);
+
+ $files_path = $this->getStoragedFilePathWithThumb($this->filename, $this->filename_s, $this->root_dir);
+ $this->assertFileExists($files_path['file']);
+ $this->assertFileExists($files_path['file_s']);
+ }
+
+ /**
+ * delete a file.
+ *
+ * @group image
+ * @group delete
+ */
+ public function testDeleteImage()
+ {
+ $this->json('GET', route('unisharp.lfm.upload'), [
+ 'upload' => [$this->file],
+ 'working_dir' => $this->root_dir,
+ ]);
+ $response = $this->json('GET', route('unisharp.lfm.getDelete'), [
+ 'items' => $this->filename,
+ 'working_dir' => $this->root_dir,
+ ]);
+
+ $response->assertStatus(200);
+
+ $files_path = $this->getStoragedFilePathWithThumb($this->filename, $this->filename_s, $this->root_dir);
+ $this->assertFileNotExists($files_path['file']);
+ $this->assertFileNotExists($files_path['file_s']);
+ }
+
+ /**
+ * upload file which exists already.
+ *
+ * @group image
+ * @group doubleUpload
+ */
+ public function testDoubleUpload()
+ {
+ $this->json('GET', route('unisharp.lfm.upload'), [
+ 'upload' => [$this->file],
+ 'working_dir' => $this->root_dir,
+ ]);
+ $response = $this->json('GET', route('unisharp.lfm.upload'), [
+ 'upload' => [$this->file],
+ 'working_dir' => $this->root_dir,
+ ]);
+
+ $response->assertStatus(200);
+ $this->assertEquals($response->getContent(), '["A file with this name already exists!"]');
+ }
+
+ /**
+ * change file name.
+ *
+ * @group image
+ * @group rename
+ */
+ public function testRenameImage()
+ {
+ $this->json('GET', route('unisharp.lfm.upload'), [
+ 'upload' => [$this->file],
+ 'working_dir' => $this->root_dir,
+ ]);
+ $uniq = uniqid();
+ $new_name = $uniq . '.jpg';
+ $new_name_s = $uniq . '_S.jpg';
+ $response = $this->json('GET', route('unisharp.lfm.getRename'), [
+ 'file' => $this->filename,
+ 'new_name' => $new_name,
+ 'working_dir' => $this->root_dir,
+ ]);
+
+ $response->assertStatus(200);
+
+ $files_path = $this->getStoragedFilePathWithThumb($new_name, $new_name_s, $this->root_dir);
+ $this->assertFileExists($files_path['file']);
+ $this->assertFileExists($files_path['file_s']);
+ }
+
+ /**
+ * add directory.
+ *
+ * @group directory
+ */
+ public function testAddDirectory()
+ {
+ $response = $this->json('GET', route('unisharp.lfm.getAddfolder'), [
+ 'name' => $this->dir_name,
+ 'working_dir' => $this->root_dir,
+ ]);
+
+ $response->assertStatus(200);
+
+ $dir_path = $this->getStoragedFilePath($this->dir_name, $this->root_dir);
+ $this->assertFileExists($dir_path);
+ }
+
+ /**
+ * delete directory.
+ *
+ * @group directory
+ * @group delete
+ */
+ public function testDeleteDirectory()
+ {
+ $this->json('GET', route('unisharp.lfm.getAddfolder'), [
+ 'name' => $this->dir_name,
+ 'working_dir' => $this->root_dir,
+ ]);
+ $reponse = $this->json('GET', route('unisharp.lfm.getDelete'), [
+ 'items' => $this->dir_name,
+ 'working_dir' => $this->root_dir,
+ ]);
+
+ $reponse->assertStatus(200);
+
+ $dir_path = $this->getStoragedFilePath($this->dir_name, $this->root_dir);
+ $this->assertFileNotExists($dir_path);
+ }
+
+ /**
+ * rename directory.
+ *
+ * @group directory
+ * @group rename
+ */
+ public function testRenameDirectory()
+ {
+ $this->json('GET', route('unisharp.lfm.getAddfolder'), [
+ 'name' => $this->dir_name,
+ 'working_dir' => $this->root_dir,
+ ]);
+ $new_dir_name = uniqid();
+ $response = $this->json('GET', route('unisharp.lfm.getRename'), [
+ 'file' => $this->dir_name,
+ 'new_name' => $new_dir_name,
+ 'working_dir' => $this->root_dir,
+ ]);
+
+ $response->assertStatus(200);
+
+ $new_dir_path = $this->getStoragedFilePath($new_dir_name, $this->root_dir);
+ $this->assertFileExists($new_dir_path);
+ }
+
+ /**
+ * upload file in a directory.
+ *
+ * @group image
+ * @group directory
+ */
+ public function testUploadFileInDirectory()
+ {
+ $this->json('GET', route('unisharp.lfm.getAddfolder'), [
+ 'name' => $this->dir_name,
+ 'working_dir' => $this->root_dir,
+ ]);
+ $working_dir = $this->root_dir . DIRECTORY_SEPARATOR . $this->dir_name;
+ $response = $this->json('GET', route('unisharp.lfm.upload'), [
+ 'upload' => [$this->file],
+ 'working_dir' => $working_dir,
+ ]);
+
+ $response->assertStatus(200);
+
+ $files_path = $this->getStoragedFilePathWithThumb($this->filename, $this->filename_s, $working_dir);
+ $this->assertFileExists($files_path['file']);
+ $this->assertFileExists($files_path['file_s']);
+ }
+
+ /**
+ * delete file in a directory.
+ *
+ * @group image
+ * @group directory
+ */
+ public function testDeleteFileInDirectory()
+ {
+ $this->json('GET', route('unisharp.lfm.getAddfolder'), [
+ 'name' => $this->dir_name,
+ 'working_dir' => $this->root_dir,
+ ]);
+
+ $working_dir = $this->root_dir . DIRECTORY_SEPARATOR . $this->dir_name;
+ $response = $this->json('GET', route('unisharp.lfm.upload'), [
+ 'upload' => [$this->file],
+ 'working_dir' => $working_dir,
+ ]);
+
+ $reponse = $this->json('GET', route('unisharp.lfm.getDelete'), [
+ 'items' => $this->filename,
+ 'working_dir' => $working_dir,
+ ]);
+
+ $reponse->assertStatus(200);
+
+ $files_path = $this->getStoragedFilePathWithThumb($this->filename, $this->filename_s, $working_dir);
+ $this->assertFileNotExists($files_path['file']);
+ $this->assertFileNotExists($files_path['file_s']);
+ }
+
+ /**
+ * rename file in directory.
+ *
+ * @group image
+ * @group directory
+ */
+ public function testRenameFileInDirectory()
+ {
+ $this->json('GET', route('unisharp.lfm.getAddfolder'), [
+ 'name' => $this->dir_name,
+ 'working_dir' => $this->root_dir,
+ ]);
+
+ $working_dir = $this->root_dir . DIRECTORY_SEPARATOR . $this->dir_name;
+ $response = $this->json('GET', route('unisharp.lfm.upload'), [
+ 'upload' => [$this->file],
+ 'working_dir' => $working_dir,
+ ]);
+
+ $uniq = uniqid();
+ $new_name = $uniq . '.jpg';
+ $new_name_s = $uniq . '_S.jpg';
+ $response = $this->json('GET', route('unisharp.lfm.getRename'), [
+ 'file' => $this->filename,
+ 'new_name' => $new_name,
+ 'working_dir' => $working_dir,
+ ]);
+
+ $response->assertStatus(200);
+
+ $files_path = $this->getStoragedFilePathWithThumb($new_name, $new_name_s, $working_dir);
+ $this->assertFileExists($files_path['file']);
+ $this->assertFileExists($files_path['file_s']);
+ }
+
+ /**
+ * upload file with lfm.rename_file = true.
+ *
+ * @group image
+ */
+ public function testUploadImageWithRename()
+ {
+ config(['lfm.rename_file' => true]);
+ $response = $this->json('GET', route('unisharp.lfm.upload'), [
+ 'upload' => [$this->file],
+ 'working_dir' => $this->root_dir,
+ ]);
+
+ $response->assertStatus(200);
+
+ $files_path = $this->getStoragedFilePathWithThumb($this->filename, $this->filename_s, $this->root_dir);
+ $this->assertFileNotExists($files_path['file']);
+ $this->assertFileNotExists($files_path['file_s']);
+ }
+
+ /*
+ * upload file with lfm.alphanumeric_filename = true
+ *
+ * @group image
+ * @group
+ */
+}
diff --git a/packages/iqcontent/laravel-filemanager/tests/LfmItemTest.php b/packages/iqcontent/laravel-filemanager/tests/LfmItemTest.php
new file mode 100644
index 0000000..820af0b
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/tests/LfmItemTest.php
@@ -0,0 +1,206 @@
+lfm = m::mock(Lfm::class);
+
+ $this->lfm_path = m::mock(LfmPath::class);
+ $this->lfm_path->shouldReceive('thumb')->andReturn($this->lfm_path);
+ }
+
+ public function tearDown()
+ {
+ m::close();
+
+ parent::tearDown();
+ }
+
+ public function testMagicGet()
+ {
+ $this->lfm_item = new LfmItem($this->lfm_path, m::mock(Lfm::class));
+
+ $this->lfm_item->attributes['foo'] = 'bar';
+
+ $this->assertEquals('bar', $this->lfm_item->foo);
+ }
+
+ public function testName()
+ {
+ $this->lfm_path->shouldReceive('getName')->andReturn('bar');
+
+ $item = new LfmItem($this->lfm_path, $this->lfm);
+
+ $this->assertEquals('bar', $item->name());
+ }
+
+ public function testAbsolutePath()
+ {
+ $this->lfm_path->shouldReceive('path')->with('absolute')->andReturn('foo/bar.baz');
+
+ $item = new LfmItem($this->lfm_path, $this->lfm);
+
+ $this->assertEquals('foo/bar.baz', $item->path());
+ }
+
+ public function testIsDirectory()
+ {
+ $this->lfm_path->shouldReceive('isDirectory')->andReturn(false);
+
+ $item = new LfmItem($this->lfm_path, $this->lfm);
+
+ $this->assertFalse($item->isDirectory());
+ }
+
+ public function testIsFile()
+ {
+ $this->lfm_path->shouldReceive('isDirectory')->andReturn(false);
+
+ $item = new LfmItem($this->lfm_path, $this->lfm);
+
+ $this->assertTrue($item->isFile());
+ }
+
+ public function testIsImage()
+ {
+ $this->lfm_path->shouldReceive('mimeType')->andReturn('application/plain');
+
+ $item = new LfmItem($this->lfm_path, $this->lfm);
+
+ $this->assertFalse($item->isImage());
+ }
+
+ public function testMimeType()
+ {
+ $this->lfm_path->shouldReceive('mimeType')->andReturn('application/plain');
+
+ $item = new LfmItem($this->lfm_path, $this->lfm);
+
+ $this->assertEquals('application/plain', $item->mimeType());
+ }
+
+ public function testType()
+ {
+ $this->lfm_path->shouldReceive('isDirectory')->andReturn(false);
+ $this->lfm_path->shouldReceive('mimeType')->andReturn('application/plain');
+ $this->lfm_path->shouldReceive('path')->with('absolute')->andReturn('foo/bar.baz');
+ $this->lfm_path->shouldReceive('extension')->andReturn('baz');
+
+ $this->lfm->shouldReceive('getFileType')->with('baz')->andReturn('File');
+
+ $item = new LfmItem($this->lfm_path, $this->lfm);
+
+ $this->assertEquals('File', $item->type());
+ }
+
+ public function testExtension()
+ {
+ $this->lfm_path->shouldReceive('path')->with('absolute')->andReturn('foo/bar.baz');
+ $this->lfm_path->shouldReceive('extension')->andReturn('baz');
+
+ $item = new LfmItem($this->lfm_path, $this->lfm);
+
+ $this->assertEquals('baz', $item->extension());
+ }
+
+ public function testThumbUrl()
+ {
+ $this->lfm_path->shouldReceive('isDirectory')->andReturn(false);
+ $this->lfm_path->shouldReceive('mimeType')->andReturn('application/plain');
+
+ $item = new LfmItem($this->lfm_path, $this->lfm);
+
+ $this->assertNull($item->thumbUrl());
+ }
+
+ // TODO: refactor
+ public function testUrl()
+ {
+ $this->lfm_path->shouldReceive('isDirectory')->andReturn(false);
+ $this->lfm_path->shouldReceive('getName')->andReturn('bar');
+ $this->lfm_path->shouldReceive('setName')->andReturn($this->lfm_path);
+ $this->lfm_path->shouldReceive('url')->andReturn('foo/bar');
+
+ $item = new LfmItem($this->lfm_path, $this->lfm);
+
+ $this->assertEquals('foo/bar', $item->url());
+ }
+
+ public function testSize()
+ {
+ $this->lfm_path->shouldReceive('size')->andReturn(1024);
+ $this->lfm_path->shouldReceive('isDirectory')->andReturn(false);
+
+ $item = new LfmItem($this->lfm_path, $this->lfm);
+
+ $this->assertEquals('1.00 kB', $item->size());
+ }
+
+ public function testTime()
+ {
+ $this->lfm_path->shouldReceive('lastModified')->andReturn(0);
+
+ $item = new LfmItem($this->lfm_path, $this->lfm);
+
+ $this->assertEquals(0, $item->time());
+ }
+
+ public function testIcon()
+ {
+ $this->lfm_path->shouldReceive('isDirectory')->andReturn(false);
+ $this->lfm_path->shouldReceive('mimeType')->andReturn('application/plain');
+ $this->lfm_path->shouldReceive('path')->with('absolute')->andReturn('foo/bar.baz');
+ $this->lfm_path->shouldReceive('extension')->andReturn('baz');
+
+ $this->lfm->shouldReceive('getFileIcon')->with('baz')->andReturn('fa-file');
+
+ $item = new LfmItem($this->lfm_path, $this->lfm);
+
+ $this->assertEquals('baz', $item->icon());
+
+ // $path1 = m::mock(LfmPath::class);
+ // $path1->shouldReceive('path')->with('absolute')->andReturn('foo/bar');
+ // $path1->shouldReceive('isDirectory')->andReturn(false);
+ // $path1->shouldReceive('mimeType')->andReturn('image/png');
+
+ // $path3 = m::mock(LfmPath::class);
+ // $path3->shouldReceive('path')->with('absolute')->andReturn('foo/biz');
+ // $path3->shouldReceive('isDirectory')->andReturn(true);
+
+ // $this->assertEquals('fa-image', (new LfmItem($path1))->icon());
+ // $this->assertEquals('fa-folder-o', (new LfmItem($path3))->icon());
+ }
+
+ public function testHasThumb()
+ {
+ $this->lfm_path->shouldReceive('mimeType')->andReturn('application/plain');
+
+ $item = new LfmItem($this->lfm_path, $this->lfm);
+
+ $this->assertFalse($item->hasThumb());
+ }
+
+ public function testHumanFilesize()
+ {
+ $item = new LfmItem($this->lfm_path, $this->lfm);
+
+ $this->assertEquals('1.00 kB', $item->humanFilesize(1024));
+ $this->assertEquals('1.00 MB', $item->humanFilesize(1024 ** 2));
+ $this->assertEquals('1.00 GB', $item->humanFilesize(1024 ** 3));
+ $this->assertEquals('1.00 TB', $item->humanFilesize(1024 ** 4));
+ $this->assertEquals('1.00 PB', $item->humanFilesize(1024 ** 5));
+ $this->assertEquals('1.00 EB', $item->humanFilesize(1024 ** 6));
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/tests/LfmPathTest.php b/packages/iqcontent/laravel-filemanager/tests/LfmPathTest.php
new file mode 100644
index 0000000..aa1db03
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/tests/LfmPathTest.php
@@ -0,0 +1,201 @@
+shouldReceive('getStorage')->with('files/bar')->andReturn($storage);
+ $helper->shouldReceive('getCategoryName')->andReturn('files');
+ $helper->shouldReceive('input')->with('working_dir')->andReturn('/bar');
+ $helper->shouldReceive('isRunningOnWindows')->andReturn(false);
+ $helper->shouldReceive('ds')->andReturn('/');
+
+ $path = new LfmPath($helper);
+
+ $this->assertEquals($storage, $path->storage);
+ }
+
+ public function testMagicCall()
+ {
+ $storage = m::mock(LfmStorage::class);
+ $storage->shouldReceive('foo')->andReturn('bar');
+
+ $helper = m::mock(Lfm::class);
+ $helper->shouldReceive('getStorage')->with('files/bar')->andReturn($storage);
+ $helper->shouldReceive('getCategoryName')->andReturn('files');
+ $helper->shouldReceive('input')->with('working_dir')->andReturn('/bar');
+ $helper->shouldReceive('isRunningOnWindows')->andReturn(false);
+ $helper->shouldReceive('ds')->andReturn('/');
+
+ $path = new LfmPath($helper);
+
+ $this->assertEquals('bar', $path->foo());
+ }
+
+ public function testDirAndNormalizeWorkingDir()
+ {
+ $helper = m::mock(Lfm::class);
+ $helper->shouldReceive('input')->with('working_dir')->once()->andReturn('foo');
+ $helper->shouldReceive('isRunningOnWindows')->andReturn(false);
+
+ $path = new LfmPath($helper);
+
+ $this->assertEquals('foo', $path->normalizeWorkingDir());
+ $this->assertEquals('bar', $path->dir('bar')->normalizeWorkingDir());
+ }
+
+ public function testSetNameAndGetName()
+ {
+ $path = new LfmPath(m::mock(Lfm::class));
+
+ $path->setName('bar');
+
+ $this->assertEquals('bar', $path->getName());
+ }
+
+ public function testPath()
+ {
+ $helper = m::mock(Lfm::class);
+ $helper->shouldReceive('getRootFolder')->andReturn('/foo');
+ $helper->shouldReceive('basePath')->andReturn(realpath(__DIR__ . '/../'));
+ $helper->shouldReceive('input')->with('working_dir')->andReturnNull();
+ $helper->shouldReceive('getCategoryName')->andReturn('files');
+ $helper->shouldReceive('isRunningOnWindows')->andReturn(false);
+ $helper->shouldReceive('ds')->andReturn('/');
+
+ $storage = m::mock(LfmStorage::class);
+ $storage->shouldReceive('rootPath')->andReturn(realpath(__DIR__ . '/../') . '/storage/app');
+
+ $helper->shouldReceive('getStorage')->andReturn($storage);
+
+ $path = new LfmPath($helper);
+
+ $this->assertEquals('files/foo', $path->path());
+ $this->assertEquals('files/foo/bar', $path->setName('bar')->path('storage'));
+ }
+
+ public function testUrl()
+ {
+ $helper = m::mock(Lfm::class);
+ $helper->shouldReceive('getRootFolder')->andReturn('/foo');
+ $helper->shouldReceive('input')->with('working_dir')->andReturnNull();
+ $helper->shouldReceive('getCategoryName')->andReturn('files');
+ $helper->shouldReceive('isRunningOnWindows')->andReturn(false);
+ $helper->shouldReceive('ds')->andReturn('/');
+
+ $storage = m::mock(LfmStorage::class);
+ $storage->shouldReceive('url')->andReturn('/files/foo/foo');
+
+ $helper->shouldReceive('getStorage')->andReturn($storage);
+
+ $path = new LfmPath($helper);
+
+ $this->assertEquals('/files/foo/foo', $path->setName('foo')->url());
+ }
+
+ public function testFolders()
+ {
+ $storage = m::mock(LfmStorage::class);
+ $storage->shouldReceive('directories')->andReturn(['foo/bar']);
+
+ $helper = m::mock(Lfm::class);
+ $helper->shouldReceive('getCategoryName')->andReturn('files');
+ $helper->shouldReceive('input')->with('working_dir')->andReturn('/shares');
+ $helper->shouldReceive('input')->with('sort_type')->andReturn('alphabetic');
+ $helper->shouldReceive('getStorage')->andReturn($storage);
+ $helper->shouldReceive('getNameFromPath')->andReturn('bar');
+ $helper->shouldReceive('getThumbFolderName')->andReturn('thumbs');
+ $helper->shouldReceive('isRunningOnWindows')->andReturn(false);
+ $helper->shouldReceive('ds')->andReturn('/');
+
+ $path = new LfmPath($helper);
+
+ $this->assertInstanceOf(LfmItem::class, $path->folders()[0]);
+ }
+
+ public function testFiles()
+ {
+ $storage = m::mock(LfmStorage::class);
+ $storage->shouldReceive('files')->andReturn(['foo/bar']);
+
+ $helper = m::mock(Lfm::class);
+ $helper->shouldReceive('getCategoryName')->andReturn('files');
+ $helper->shouldReceive('input')->with('working_dir')->andReturn('/shares');
+ $helper->shouldReceive('input')->with('sort_type')->andReturn('alphabetic');
+ $helper->shouldReceive('getStorage')->andReturn($storage);
+ $helper->shouldReceive('getNameFromPath')->andReturn('bar');
+ $helper->shouldReceive('isRunningOnWindows')->andReturn(false);
+ $helper->shouldReceive('ds')->andReturn('/');
+
+ $path = new LfmPath($helper);
+
+ $this->assertInstanceOf(LfmItem::class, $path->files()[0]);
+ }
+
+ public function testPretty()
+ {
+ $helper = m::mock(Lfm::class);
+ $helper->shouldReceive('getNameFromPath')->andReturn('bar');
+ $helper->shouldReceive('isRunningOnWindows')->andReturn(false);
+
+ $path = new LfmPath($helper);
+
+ $this->assertInstanceOf(LfmItem::class, $path->pretty('foo'));
+ }
+
+ public function testCreateFolder()
+ {
+ $storage = m::mock(LfmStorage::class);
+ $storage->shouldReceive('rootPath')->andReturn(realpath(__DIR__ . '/../') . '/storage/app');
+ $storage->shouldReceive('exists')->andReturn(false);
+ $storage->shouldReceive('makeDirectory')->andReturn(true);
+
+ $helper = m::mock(Lfm::class);
+ $helper->shouldReceive('getStorage')->with('files/bar')->andReturn($storage);
+ $helper->shouldReceive('getCategoryName')->andReturn('files');
+ $helper->shouldReceive('input')->with('working_dir')->andReturn('/bar');
+ $helper->shouldReceive('isRunningOnWindows')->andReturn(false);
+ $helper->shouldReceive('ds')->andReturn('/');
+
+ $path = new LfmPath($helper);
+
+ $this->assertNull($path->createFolder('bar'));
+ }
+
+ public function testCreateFolderButFolderAlreadyExists()
+ {
+ $storage = m::mock(LfmStorage::class);
+ $storage->shouldReceive('exists')->andReturn(true);
+ $storage->shouldReceive('makeDirectory')->andReturn(true);
+
+ $helper = m::mock(Lfm::class);
+ $helper->shouldReceive('getStorage')->with('files/bar')->andReturn($storage);
+ $helper->shouldReceive('getCategoryName')->andReturn('files');
+ $helper->shouldReceive('input')->with('working_dir')->andReturn('/bar');
+ $helper->shouldReceive('isRunningOnWindows')->andReturn(false);
+ $helper->shouldReceive('ds')->andReturn('/');
+
+ $path = new LfmPath($helper);
+
+ $this->assertFalse($path->createFolder('foo'));
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/tests/LfmStorageRepositoryTest.php b/packages/iqcontent/laravel-filemanager/tests/LfmStorageRepositoryTest.php
new file mode 100644
index 0000000..d5823a1
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/tests/LfmStorageRepositoryTest.php
@@ -0,0 +1,58 @@
+shouldReceive('getDriver')->andReturn($disk);
+ $disk->shouldReceive('getAdapter')->andReturn($disk);
+ $disk->shouldReceive('getPathPrefix')->andReturn('foo/bar');
+ $disk->shouldReceive('functionToCall')->with('foo/bar')->andReturn('baz');
+ $disk->shouldReceive('directories')->with('foo')->andReturn(['foo/bar']);
+ $disk->shouldReceive('move')->with('foo/bar', 'foo/bar/baz')->andReturn(true);
+
+ $helper = m::mock(Lfm::class);
+ $helper->shouldReceive('config')->with('disk')->andReturn('local');
+
+ Storage::shouldReceive('disk')->with('local')->andReturn($disk);
+
+ $this->storage = new LfmStorageRepository('foo/bar', $helper);
+ }
+
+ public function tearDown()
+ {
+ m::close();
+ }
+
+ public function testMagicCall()
+ {
+ $this->assertEquals('baz', $this->storage->functionToCall());
+ }
+
+ public function testRootPath()
+ {
+ $this->assertEquals('foo/bar', $this->storage->rootPath());
+ }
+
+ public function testMove()
+ {
+ $new_lfm_path = m::mock(LfmPath::class);
+ $new_lfm_path->shouldReceive('path')->with('storage')->andReturn('foo/bar/baz');
+
+ $this->assertTrue($this->storage->move($new_lfm_path));
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/tests/LfmTest.php b/packages/iqcontent/laravel-filemanager/tests/LfmTest.php
new file mode 100644
index 0000000..32f6b4d
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/tests/LfmTest.php
@@ -0,0 +1,195 @@
+shouldReceive('get')->with('lfm.disk')->once()->andReturn('local');
+
+ $lfm = new Lfm($config);
+ $this->assertInstanceOf(LfmStorageRepository::class, $lfm->getStorage('foo/bar'));
+ }
+
+ public function testInput()
+ {
+ $request = m::mock(Request::class);
+ $request->shouldReceive('input')->with('foo')->andReturn('bar');
+
+ $lfm = new Lfm(m::mock(Config::class), $request);
+
+ $this->assertEquals('bar', $lfm->input('foo'));
+ }
+
+ public function testGetNameFromPath()
+ {
+ $this->assertEquals('bar', (new Lfm)->getNameFromPath('foo/bar'));
+ }
+
+ public function testAllowFolderType()
+ {
+ $config = m::mock(Config::class);
+ $config->shouldReceive('get')->with('lfm.allow_multi_user')->once()->andReturn(true);
+ $config->shouldReceive('get')->with('lfm.allow_multi_user')->once()->andReturn(false);
+ $config->shouldReceive('get')->with('lfm.allow_multi_user')->once()->andReturn(true);
+ $config->shouldReceive('get')->with('lfm.allow_share_folder')->once()->andReturn(false);
+
+ $lfm = new Lfm($config);
+
+ $this->assertTrue($lfm->allowFolderType('user'));
+ $this->assertTrue($lfm->allowFolderType('shared'));
+ $this->assertFalse($lfm->allowFolderType('shared'));
+ }
+
+ public function testGetCategoryName()
+ {
+ $config = m::mock(Config::class);
+ $config->shouldReceive('get')
+ ->with('lfm.folder_categories.file.folder_name', m::type('string'))
+ ->once()
+ ->andReturn('files');
+ $config->shouldReceive('get')
+ ->with('lfm.folder_categories.image.folder_name', m::type('string'))
+ ->once()
+ ->andReturn('photos');
+ $config->shouldReceive('get')
+ ->with('lfm.folder_categories')
+ ->andReturn(['file' => [], 'image' => []]);
+
+ $request = m::mock(Request::class);
+ $request->shouldReceive('input')->with('type')->once()->andReturn('file');
+ $request->shouldReceive('input')->with('type')->once()->andReturn('image');
+
+ $lfm = new Lfm($config, $request);
+
+ $this->assertEquals('files', $lfm->getCategoryName('file'));
+ $this->assertEquals('photos', $lfm->getCategoryName('image'));
+ }
+
+ public function testCurrentLfmType()
+ {
+ $request = m::mock(Request::class);
+ $request->shouldReceive('input')->with('type')->once()->andReturn('file');
+ $request->shouldReceive('input')->with('type')->once()->andReturn('image');
+ $request->shouldReceive('input')->with('type')->once()->andReturn('foo');
+
+ $config = m::mock(Config::class);
+ $config->shouldReceive('get')
+ ->with('lfm.folder_categories')
+ ->andReturn(['file' => [], 'image' => []]);
+
+ $lfm = new Lfm($config, $request);
+
+ $this->assertEquals('file', $lfm->currentLfmType());
+ $this->assertEquals('image', $lfm->currentLfmType());
+ $this->assertEquals('file', $lfm->currentLfmType());
+ }
+
+ public function testGetUserSlug()
+ {
+ $config = m::mock(Config::class);
+ $config->shouldReceive('get')->with('lfm.user_folder_name')->once()->andReturn(function () {
+ return 'foo';
+ });
+
+ $lfm = new Lfm($config);
+
+ $this->assertEquals('foo', $lfm->getUserSlug());
+ }
+
+ public function testGetRootFolder()
+ {
+ $config = m::mock(Config::class);
+ $config->shouldReceive('get')->with('lfm.allow_multi_user')->andReturn(true);
+ $config->shouldReceive('get')->with('lfm.user_folder_name')->once()->andReturn(function () {
+ return 'foo';
+ });
+ $config->shouldReceive('get')->with('lfm.shared_folder_name')->once()->andReturn('bar');
+
+ $lfm = new Lfm($config);
+
+ $this->assertEquals('/foo', $lfm->getRootFolder('user'));
+ $this->assertEquals('/bar', $lfm->getRootFolder('shared'));
+ }
+
+ public function testGetThumbFolderName()
+ {
+ $config = m::mock(Config::class);
+ $config->shouldReceive('get')->with('lfm.thumb_folder_name')->once()->andReturn('foo');
+
+ $lfm = new Lfm($config);
+
+ $this->assertEquals('foo', $lfm->getThumbFolderName());
+ }
+
+ public function testGetFileIcon()
+ {
+ $config = m::mock(Config::class);
+ $config->shouldReceive('get')->with('lfm.file_icon_array.foo', m::type('string'))->once()->andReturn('fa-foo');
+ $config->shouldReceive('get')->with(m::type('string'), m::type('string'))->once()->andReturn('fa-file');
+
+ $lfm = new Lfm($config);
+
+ $this->assertEquals('fa-foo', $lfm->getFileIcon('foo'));
+ $this->assertEquals('fa-file', $lfm->getFileIcon('bar'));
+ }
+
+ public function testGetFileType()
+ {
+ $config = m::mock(Config::class);
+ $config->shouldReceive('get')->with('lfm.file_type_array.foo', m::type('string'))->once()->andReturn('foo');
+ $config->shouldReceive('get')->with(m::type('string'), m::type('string'))->once()->andReturn('File');
+
+ $lfm = new Lfm($config);
+
+ $this->assertEquals('foo', $lfm->getFileType('foo'));
+ $this->assertEquals('File', $lfm->getFileType('bar'));
+ }
+
+ public function testAllowMultiUser()
+ {
+ $config = m::mock(Config::class);
+ $config->shouldReceive('get')->with('lfm.allow_multi_user')->once()->andReturn(true);
+
+ $lfm = new Lfm($config);
+
+ $this->assertTrue($lfm->allowMultiUser());
+ }
+
+ public function testAllowShareFolder()
+ {
+ $config = m::mock(Config::class);
+ $config->shouldReceive('get')->with('lfm.allow_multi_user')->once()->andReturn(false);
+ $config->shouldReceive('get')->with('lfm.allow_multi_user')->once()->andReturn(true);
+ $config->shouldReceive('get')->with('lfm.allow_share_folder')->once()->andReturn(false);
+
+ $lfm = new Lfm($config);
+
+ $this->assertTrue($lfm->allowShareFolder());
+ $this->assertFalse($lfm->allowShareFolder());
+ }
+
+ public function testTranslateFromUtf8()
+ {
+ $input = 'test/測試';
+
+ $this->assertEquals($input, (new Lfm)->translateFromUtf8($input));
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/tests/TestCase.php.bak b/packages/iqcontent/laravel-filemanager/tests/TestCase.php.bak
new file mode 100644
index 0000000..d77dc2d
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/tests/TestCase.php.bak
@@ -0,0 +1,169 @@
+set('lfm.use_package_routes', true);
+
+ $app['config']->set('lfm.middlewares', []);
+
+ $app['config']->set('lfm.prefix', 'laravel-filemanager');
+
+ $app['config']->set('lfm.urls_prefix', '');
+
+ $app['config']->set('lfm.allow_multi_user', true);
+ $app['config']->set('lfm.allow_share_folder', true);
+
+ $app['config']->set('lfm.user_field', TestConfigHandler::class);
+
+ $app['config']->set('lfm.base_directory', 'public');
+
+ $app['config']->set('lfm.images_folder_name', 'photos');
+ $app['config']->set('lfm.files_folder_name', 'files');
+
+ $app['config']->set('lfm.shared_folder_name', 'shares');
+ $app['config']->set('lfm.thumb_folder_name', 'thumbs');
+
+ $app['config']->set('lfm.images_startup_view', 'grid');
+ $app['config']->set('lfm.files_startup_view', 'list');
+
+ $app['config']->set('lfm.rename_file', false);
+
+ $app['config']->set('lfm.alphanumeric_filename', true);
+
+ $app['config']->set('lfm.alphanumeric_directory', false);
+
+ $app['config']->set('lfm.should_validate_size', false);
+
+ $app['config']->set('lfm.max_image_size', 50000);
+ $app['config']->set('lfm.max_file_size', 50000);
+
+ $app['config']->set('lfm.should_validate_mime', false);
+
+ $app['config']->set('lfm.valid_image_mimetypes', [
+ 'image/jpeg',
+ 'image/pjpeg',
+ 'image/png',
+ 'image/gif',
+ 'image/svg+xml',
+ ]);
+
+ $app['config']->set('lfm.valid_file_mimetypes', [
+ 'image/jpeg',
+ 'image/pjpeg',
+ 'image/png',
+ 'image/gif',
+ 'image/svg+xml',
+ 'application/pdf',
+ 'text/plain',
+ ]);
+
+ $app['config']->set('lfm.thumb_img_width', 200);
+ $app['config']->set('lfm.thumb_img_height', 200);
+
+ $app['config']->set('lfm.file_type_array', [
+ 'pdf' => 'Adobe Acrobat',
+ 'doc' => 'Microsoft Word',
+ 'docx' => 'Microsoft Word',
+ 'xls' => 'Microsoft Excel',
+ 'xlsx' => 'Microsoft Excel',
+ 'zip' => 'Archive',
+ 'gif' => 'GIF Image',
+ 'jpg' => 'JPEG Image',
+ 'jpeg' => 'JPEG Image',
+ 'png' => 'PNG Image',
+ 'ppt' => 'Microsoft PowerPoint',
+ 'pptx' => 'Microsoft PowerPoint',
+ ]);
+
+ $app['config']->set('lfm.file_icon_array', [
+ 'pdf' => 'fa-file-pdf-o',
+ 'doc' => 'fa-file-word-o',
+ 'docx' => 'fa-file-word-o',
+ 'xls' => 'fa-file-excel-o',
+ 'xlsx' => 'fa-file-excel-o',
+ 'zip' => 'fa-file-archive-o',
+ 'gif' => 'fa-file-image-o',
+ 'jpg' => 'fa-file-image-o',
+ 'jpeg' => 'fa-file-image-o',
+ 'png' => 'fa-file-image-o',
+ 'ppt' => 'fa-file-powerpoint-o',
+ 'pptx' => 'fa-file-powerpoint-o',
+ ]);
+
+ $app['config']->set('lfm.php_ini_overrides', [
+ 'memory_limit' => '256M',
+ ]);
+
+ $app['config']->set('fileapi.path', ['/images/event/']);
+ $app['config']->set('fileapi.watermark', 'public/img/watermark.png');
+
+ $app['config']->set('fileapi.default_thumbs', ['S' => '96x96', 'M' => '256x256', 'L' => '480x480']);
+
+ $app['config']->set('fileapi.compress_quality', 90);
+ }
+
+ public function getResponseByRouteName($route_name, $input = [], $file = [])
+ {
+ $response = $this->call('GET', route('unisharp.lfm.' . $route_name), $input, $file);
+ $data = json_encode($response);
+
+ return $response->getContent();
+ }
+
+ protected function getPackageAliases($app)
+ {
+ return [
+ 'Image' => 'Intervention\Image\Facades\Image',
+ ];
+ }
+
+ public function getStoragedFilePathWithThumb($filename, $filename_s, $working_dir)
+ {
+ $files_path['file'] = $this->getStoragedFilePath($filename, $working_dir);
+
+ $files_path['file_s'] = $this->getStoragedFilePath($filename_s, $working_dir);
+
+ return $files_path;
+ }
+
+ public function getStoragedFilePath($filename, $working_dir)
+ {
+ return storage_path(implode(DIRECTORY_SEPARATOR, [
+ 'app',
+ config('lfm.base_directory'),
+ config('lfm.files_folder_name'),
+ $working_dir,
+ $filename,
+ ]));
+ }
+
+ public function unlinkFiles(array $files_path)
+ {
+ foreach ($files_path as $file_path) {
+ @unlink($file_path);
+ }
+ }
+
+ public function test()
+ {
+ $this->assertEquals(1, 1);
+ }
+}
diff --git a/packages/iqcontent/laravel-filemanager/tests/TestConfigHandler.php.bak b/packages/iqcontent/laravel-filemanager/tests/TestConfigHandler.php.bak
new file mode 100644
index 0000000..ab24b31
--- /dev/null
+++ b/packages/iqcontent/laravel-filemanager/tests/TestConfigHandler.php.bak
@@ -0,0 +1,11 @@
+ ul').prepend(
+ $('
').addClass('nav-item').append(
+ $('').addClass('nav-link d-none')
+ .attr('data-action', action.name)
+ .attr('data-multiple', action.multiple)
+ .append($('').addClass('fas fa-fw fa-' + action.icon))
+ .append($('').text(action.label))
+ )
+ );
+ });
+
+ sortings.forEach(function (sort) {
+ $('#nav-buttons .dropdown-menu').append(
+ $('').addClass('dropdown-item').attr('data-sortby', sort.by)
+ .append($('').addClass('fas fa-fw fa-' + sort.icon))
+ .append($('').text(sort.label))
+ .click(function() {
+ sort_type = sort.by;
+ loadItems();
+ })
+ );
+ });
+ */
+
+ if($(lfm_content).length) {
+ loadItems();
+ performLfmRequest('errors')
+ .done(function (response) {
+ JSON.parse(response).forEach(function (message) {
+ $('#alerts').append(
+ $('').addClass('alert alert-warning')
+ .append($('
').addClass('fas fa-exclamation-circle'))
+ .append(' ' + message)
+ );
+ });
+ });
+
+ $(lfm_content).on('dragenter', function () {
+ $('#uploadModal').modal('show');
+ });
+
+
+
+ }
+ /* if (usingWysiwygEditor()) {
+ $('#multi_selection_toggle').hide();
+ }*/
+});
+
+// ======================
+// == Navbar actions ==
+// ======================
+/*
+$('#multi_selection_toggle').click(function () {
+ multi_selection_enabled = !multi_selection_enabled;
+
+ $('#multi_selection_toggle i')
+ .toggleClass('fa-times', multi_selection_enabled)
+ .toggleClass('fa-check-double', !multi_selection_enabled);
+
+ if (!multi_selection_enabled) {
+ clearSelected();
+ }
+});
+
+*/
+
+
+$(document).on('click', '#lfm_add-folder', function () {
+ dialog(lang['message-name'], '', createFolder);
+});
+
+$(document).on('click', '#lfm_upload', function () {
+ $('#uploadModal').modal('show');
+});
+/*
+$(document).on('click', '[data-display]', function() {
+ show_list = $(this).data('display');
+ loadItems();
+});
+
+$(document).on('click', '[data-action]', function() {
+ window[$(this).data('action')]($(this).data('multiple') ? getSelectedItems() : getOneSelectedElement());
+});
+
+// ==========================
+// == Multiple Selection ==
+// ==========================
+*/
+
+/*
+function clearSelected () {
+ selected = [];
+
+ multi_selection_enabled = false;
+
+ updateSelectedStyle();
+}
+
+function updateSelectedStyle() {
+ items.forEach(function (item, index) {
+ $('[data-id=' + index + ']')
+ .find('.square')
+ .toggleClass('selected', selected.indexOf(index) > -1);
+ });
+ toggleActions();
+}
+
+function getOneSelectedElement(orderOfItem) {
+ var index = orderOfItem !== undefined ? orderOfItem : selected[0];
+ return items[index];
+}
+function getSelectedItems() {
+ return selected.reduce(function (arr_objects, id) {
+ arr_objects.push(getOneSelectedElement(id));
+ return arr_objects
+ }, []);
+}
+
+*/
+
+
+function getSelectedItems() {
+ var items = [];
+
+ $('input.lfm-control-input').each(function () {
+ if($(this).prop('checked')){
+ items.push(getOneSelectedElement($(this).parents('.file-item').data('id')));
+ }
+ });
+ return items;
+}
+
+function hasSelectedItems() {
+ $('input.lfm-control-input').each(function () {
+ console.log($(this).prop('checked'));
+ if($(this).prop('checked')){
+ return true;
+ }
+ });
+ return false;
+}
+
+function getOneSelectedElement(orderOfItem) {
+ var index = orderOfItem !== undefined ? orderOfItem : lfm_selected[0];
+ return lfm_items[index];
+}
+
+function toggleActions() {
+
+ $('a[data-action=item_rename]').on('click', function () {
+ item = getOneSelectedElement($(this).parents('.file-item').data('id'));
+ rename(item);
+ });
+
+ $('a[data-action=item_move]').on('click', function () {
+ var items = [];
+ items.push(getOneSelectedElement($(this).parents('.file-item').data('id')));
+ move(items);
+ });
+
+
+ $('a[data-action=item_trash]').on('click', function () {
+ var items = [];
+ items.push(getOneSelectedElement($(this).parents('.file-item').data('id')));
+ trash(items);
+ });
+
+ $('a[data-action=item_download]').on('click', function () {
+ var items = [];
+ items.push(getOneSelectedElement($(this).parents('.file-item').data('id')));
+ download(items);
+ });
+
+
+
+ $('a[data-action=selected_items_move]').on('click', function () {
+ var items = getSelectedItems();
+ move(items);
+ });
+
+ $('a[data-action=selected_items_remove]').on('click', function () {
+ var items = getSelectedItems();
+ trash(items);
+ });
+
+ $('a[data-action=selected_items_download]').on('click', function () {
+ var items = getSelectedItems();
+ download(items);
+ });
+
+
+ /* var one_selected = selected.length === 1;
+ var many_selected = selected.length >= 1;
+ var only_image = getSelectedItems()
+ .filter(function (item) { return !item.is_image; })
+ .length === 0;
+ var only_file = getSelectedItems()
+ .filter(function (item) { return !item.is_file; })
+ .length === 0;
+
+ $('[data-action=use]').toggleClass('d-none', !(many_selected && only_file));
+ $('[data-action=rename]').toggleClass('d-none', !one_selected);
+ $('[data-action=preview]').toggleClass('d-none', !(many_selected && only_file));
+ $('[data-action=move]').toggleClass('d-none', !many_selected);
+ $('[data-action=download]').toggleClass('d-none', !(many_selected && only_file));
+ $('[data-action=resize]').toggleClass('d-none', !(one_selected && only_image));
+ $('[data-action=crop]').toggleClass('d-none', !(one_selected && only_image));
+ $('[data-action=trash]').toggleClass('d-none', !many_selected);
+ $('[data-action=open]').toggleClass('d-none', !one_selected || only_file);
+ $('#multi_selection_toggle').toggleClass('d-none', usingWysiwygEditor() || !many_selected);
+ $('#actions').toggleClass('d-none', selected.length === 0);
+ */
+
+}
+
+
+
+// ======================
+// == Folder actions ==
+// ======================
+
+
+
+function goTo(new_dir) {
+ $('#working_dir').val(new_dir);
+ loadItems();
+}
+
+function getPreviousDir() {
+ var working_dir = $('#working_dir').val();
+ return working_dir.substring(0, working_dir.lastIndexOf('/'));
+}
+
+
+// ====================
+// == Ajax actions ==
+// ====================
+
+function performLfmRequest(url, parameter, type) {
+ var data = defaultParameters();
+ if (parameter != null) {
+ $.each(parameter, function (key, value) {
+ data[key] = value;
+ });
+ }return $.ajax({
+ type: 'GET',
+ beforeSend: function(request) {
+ var token = getUrlParam('token');
+ if (token !== null) {
+ request.setRequestHeader("Authorization", 'Bearer ' + token);
+ }
+ },
+ dataType: type || 'text',
+ url: lfm_route + '/' + url,
+ data: data,
+ cache: false
+ }).done(function (data) {
+ console.log(data);
+ /* if(data !== "OK"){
+ var response = JSON.parse(data);
+ console.log("done");
+ console.log(response);
+ if(response.type === "error"){
+ $.growl({
+ title: "Error",
+ message: response.data,
+ location: 'tr'
+ });
+ }
+ }
+ */
+
+ }).fail(function (jqXHR, textStatus, errorThrown) {
+ console.log(jqXHR);
+ console.log(textStatus);
+ console.log(errorThrown);
+ displayErrorResponse(jqXHR);
+ });
+}
+
+function displayErrorResponse(jqXHR) {
+ notify(' ' + jqXHR.responseText + '
');
+};
+
+function isJSON(text) {
+ if (typeof text!=="string"){
+ return false;
+ }
+ try{
+ JSON.parse(text);
+ return true;
+ }
+ catch (error){
+ return false;
+ }
+}
+
+var refreshFoldersAndItems = function (data) {
+ loadItems();
+ if(isJSON(data)){
+ var response = JSON.parse(data);
+ console.log("done");
+ console.log(response);
+ if(response.type === "error"){
+ $.growl({
+ title: "Error",
+ message: response.data,
+ location: 'tr'
+ });
+ }
+ }else{
+ if(data != 'OK') {
+ data = Array.isArray(data) ? data.join(' ') : data;
+ notify(data);
+ }
+
+ }
+};
+
+var hideNavAndShowEditor = function (data) {
+ $('#nav-buttons > ul').addClass('d-none');
+ $(lfm_content).html(data).removeClass('preserve_actions_space');
+ clearSelected();
+};
+
+function loadItems() {
+ loading(true);
+ performLfmRequest('jsonitems', {show_list: lfm_show_list, sort_type: lfm_sort_type}, 'html')
+ .done(function (data) {
+ //console.log(data);
+ lfm_selected = [];
+ var response = JSON.parse(data);
+ var working_dir = response.working_dir;
+ lfm_items = response.items;
+ var hasItems = lfm_items.length !== 0;
+ $('#lfm_empty').toggleClass('d-none', hasItems);
+
+ //$(lfm_content).html(''); //.removeAttr('class');
+
+ var toprev = $('');
+ $(lfm_content).html('').append(toprev);
+
+ if (hasItems) {
+
+ $(lfm_content).addClass(response.display).addClass('preserve_actions_space');
+
+ lfm_items.forEach(function (item, index) {
+ var template = $('#lfm_item-template').clone()
+ .removeAttr('id').removeClass('d-none')
+ .attr('data-id', index)
+ //.click(toggleSelected)
+ .click(function (e) {
+ if(!$(e.target).hasClass('lfm-click-disable') && !$(e.target).hasClass('dropdown-item')){
+ if (item.is_file) {
+ if($(e.target).hasClass('file-item-img') || $(e.target).hasClass('file-item-icon')){
+ preview_item(item);
+ }else{
+ if($(this).hasClass('file-item')){
+ $(this).find('.lfm-control-input').click();
+ }
+
+ }
+ } else {
+ goTo(item.url);
+ }
+ }
+ if($(e.target).hasClass('lfm-control-input')){
+ if(getSelectedItems().length > 0){
+ if($('.media-multi-settings').hasClass('d-none')){
+ $('.media-multi-settings').removeClass('d-none');
+ }
+ }else{
+ if(!$('.media-multi-settings').hasClass('d-none')){
+ $('.media-multi-settings').addClass('d-none');
+ }
+ }
+ }
+
+ });
+
+ if (item.thumb_url) {
+ var image = $('').addClass('file-item-img').css('background-image', 'url("' + item.thumb_url + '?timestamp=' + item.time + '")');
+ } else {
+ var image = $('
').addClass('file-item-icon text-secondary fa ' + item.icon);
+ }
+ template.find('.file-item-name').before(image);
+ template.find('.file-item-name').text(item.name);
+ template.find('file-item-changed').text((new Date(item.time * 1000)).toLocaleString());
+ $(lfm_content).append(template);
+ });
+ }
+
+ //$('#nav-buttons > ul').removeClass('d-none');
+
+ $('#working_dir').val(working_dir);
+ console.log('Current working_dir : ' + working_dir);
+ var breadcrumbs = [];
+ var validSegments = working_dir.split('/').filter(function (e) { return e; });
+ validSegments.forEach(function (segment, index) {
+ if (index === 0) {
+ // set root folder name as the first breadcrumb
+ breadcrumbs.push("Medien");
+ //breadcrumbs.push($("[data-path='/" + segment + "']").text());
+ } else {
+ breadcrumbs.push(segment);
+ }
+ });
+
+ $('#current_folder').text(breadcrumbs[breadcrumbs.length - 1]);
+ $('#lfm_breadcrumbs > ol').html('');
+ breadcrumbs.forEach(function (breadcrumb, index) {
+ var li = $('
').addClass('breadcrumb-item').text(breadcrumb);
+
+ if (index === breadcrumbs.length - 1) {
+ li.addClass('active').attr('aria-current', 'page');
+ } else {
+ li.click(function () {
+ // go to corresponding path
+ goTo('/' + validSegments.slice(0, 1 + index).join('/'));
+ });
+ }
+
+ $('#lfm_breadcrumbs > ol').append(li);
+ });
+ var atRootFolder = getPreviousDir() == '';
+ $('#to-previous').toggleClass('d-none', atRootFolder);
+ $('#to-previous').click(function () {
+ var previous_dir = getPreviousDir();
+ if (previous_dir == '') return;
+ goTo(previous_dir);
+ });
+
+ loading(false);
+ toggleActions();
+ });
+}
+
+function loading(show_loading) {
+ $('#lfm_loading').toggleClass('d-none', !show_loading);
+}
+
+function createFolder(folder_name) {
+ performLfmRequest('newfolder', {name: folder_name})
+ .done(refreshFoldersAndItems);
+}
+
+
+// ==================================
+// == File Actions ==
+// ==================================
+
+function rename(item) {
+ dialog(lang['message-rename'], item.name, function (new_name) {
+ performLfmRequest('rename', {
+ file: item.name,
+ new_name: new_name
+ }).done(refreshFoldersAndItems);
+ });
+}
+
+function trash(items) {
+ notify(lang['message-delete'], function () {
+ var d = performLfmRequest('delete', {
+ items: items.map(function (item) { return item.name; })
+ }).done(refreshFoldersAndItems);
+ // console.log(d);
+
+ });
+}
+
+function crop(item) {
+ performLfmRequest('crop', {img: item.name})
+ .done(hideNavAndShowEditor);
+}
+
+function resize(item) {
+ performLfmRequest('resize', {img: item.name})
+ .done(hideNavAndShowEditor);
+}
+
+function move(items) {
+ performLfmRequest('move', { items: items.map(function (item) { return item.name; }) })
+ .done(refreshFoldersAndItems);
+}
+
+
+
+function download(items) {
+ items.forEach(function (item, index) {
+ var data = defaultParameters();
+
+ data['file'] = item.name;
+
+ var token = getUrlParam('token');
+ if (token) {
+ data['token'] = token;
+ }
+
+ setTimeout(function () {
+ location.href = lfm_route + '/download?' + $.param(data);
+ }, index * 100);
+ });
+}
+
+function open(item) {
+ goTo(item.url);
+}
+
+function preview_item(item) {
+ //var items = [];
+ //items.push(item);
+ preview(item);
+}
+
+function preview(item) {
+ var media = $('#previewTemplate').clone().attr('id', 'previewMedia').removeClass('d-none');
+
+
+ media.find('.media-preview').attr('src', item.url + '?timestamp=' + item.time);
+ media.find('.media-name').html(item.name);
+ media.find('.media-url').val(item.url);
+ media.find('.media-download').attr('target', '_blank').attr('href', item.url);
+
+ /* if (item.thumb_url) {
+ media.find('.carousel-image').css('background-image', 'url(\'' + item.url + '?timestamp=' + item.time + '\')');
+ } else {
+ media.find('.carousel-image').css('width', '50vh').append($('').addClass('mime-icon ico-' + item.icon));
+ }
+
+ media.find('.carousel-label')
+
+ .append($('
'));
+*/
+
+
+
+ notify(media);
+}
+
+/*function preview(items) {
+ var carousel = $('#carouselTemplate').clone().attr('id', 'previewCarousel').removeClass('d-none');
+ var imageTemplate = carousel.find('.carousel-item').clone().removeClass('active');
+ var indicatorTemplate = carousel.find('.carousel-indicators > li').clone().removeClass('active');
+ carousel.children('.carousel-inner').html('');
+ carousel.children('.carousel-indicators').html('');
+ carousel.children('.carousel-indicators,.carousel-control-prev,.carousel-control-next').toggle(items.length > 1);
+
+ items.forEach(function (item, index) {
+ var carouselItem = imageTemplate.clone()
+ .addClass(index === 0 ? 'active' : '');
+
+ if (item.thumb_url) {
+ carouselItem.find('.carousel-image').css('background-image', 'url(\'' + item.url + '?timestamp=' + item.time + '\')');
+ } else {
+ carouselItem.find('.carousel-image').css('width', '50vh').append($('
').addClass('mime-icon ico-' + item.icon));
+ }
+
+ carouselItem.find('.carousel-label').attr('target', '_blank').attr('href', item.url)
+ .append(item.name)
+ .append($('
'));
+
+ carousel.children('.carousel-inner').append(carouselItem);
+
+ var carouselIndicator = indicatorTemplate.clone()
+ .addClass(index === 0 ? 'active' : '')
+ .attr('data-slide-to', index);
+ carousel.children('.carousel-indicators').append(carouselIndicator);
+ });
+
+
+ // carousel swipe control
+ var touchStartX = null;
+
+ carousel.on('touchstart', function (event) {
+ var e = event.originalEvent;
+ if (e.touches.length == 1) {
+ var touch = e.touches[0];
+ touchStartX = touch.pageX;
+ }
+ }).on('touchmove', function (event) {
+ var e = event.originalEvent;
+ if (touchStartX != null) {
+ var touchCurrentX = e.changedTouches[0].pageX;
+ if ((touchCurrentX - touchStartX) > 60) {
+ touchStartX = null;
+ carousel.carousel('prev');
+ } else if ((touchStartX - touchCurrentX) > 60) {
+ touchStartX = null;
+ carousel.carousel('next');
+ }
+ }
+ }).on('touchend', function () {
+ touchStartX = null;
+ });
+ // end carousel swipe control
+
+ notify(carousel);
+}*/
+
+
+/*
+function use(items) {
+ function useTinymce3(url) {
+ if (!usingTinymce3()) { return; }
+
+ var win = tinyMCEPopup.getWindowArg("window");
+ win.document.getElementById(tinyMCEPopup.getWindowArg("input")).value = url;
+ if (typeof(win.ImageDialog) != "undefined") {
+ // Update image dimensions
+ if (win.ImageDialog.getImageData) {
+ win.ImageDialog.getImageData();
+ }
+
+ // Preview if necessary
+ if (win.ImageDialog.showPreviewImage) {
+ win.ImageDialog.showPreviewImage(url);
+ }
+ }
+ tinyMCEPopup.close();
+ }
+
+ function useTinymce4AndColorbox(url) {
+ if (!usingTinymce4AndColorbox()) { return; }
+
+ parent.document.getElementById(getUrlParam('field_name')).value = url;
+
+ if(typeof parent.tinyMCE !== "undefined") {
+ parent.tinyMCE.activeEditor.windowManager.close();
+ }
+ if(typeof parent.$.fn.colorbox !== "undefined") {
+ parent.$.fn.colorbox.close();
+ }
+ }
+
+ function useCkeditor3(url) {
+ if (!usingCkeditor3()) { return; }
+
+ if (window.opener) {
+ // Popup
+ window.opener.CKEDITOR.tools.callFunction(getUrlParam('CKEditorFuncNum'), url);
+ } else {
+ // Modal (in iframe)
+ parent.CKEDITOR.tools.callFunction(getUrlParam('CKEditorFuncNum'), url);
+ parent.CKEDITOR.tools.callFunction(getUrlParam('CKEditorCleanUpFuncNum'));
+ }
+ }
+
+ function useFckeditor2(url) {
+ if (!usingFckeditor2()) { return; }
+
+ var p = url;
+ var w = data['Properties']['Width'];
+ var h = data['Properties']['Height'];
+ window.opener.SetUrl(p,w,h);
+ }
+
+ var url = items[0].url;
+ var callback = getUrlParam('callback');
+ var useFileSucceeded = true;
+
+ if (usingWysiwygEditor()) {
+ useTinymce3(url);
+
+ useTinymce4AndColorbox(url);
+
+ useCkeditor3(url);
+
+ useFckeditor2(url);
+ } else if (callback && window[callback]) {
+ window[callback](getSelectedItems());
+ } else if (callback && parent[callback]) {
+ parent[callback](getSelecteditems());
+ } else if (window.opener) { // standalone button or other situations
+ window.opener.SetUrl(getSelectedItems());
+ } else {
+ useFileSucceeded = false;
+ }
+
+ if (useFileSucceeded) {
+ if (window.opener) {
+ window.close();
+ }
+ } else {
+ console.log('window.opener not found');
+ // No editor found, open/download file using browser's default method
+ window.open(url);
+ }
+}
+//end useFile
+
+// ==================================
+// == WYSIWYG Editors Check ==
+// ==================================
+
+function usingTinymce3() {
+ return !!window.tinyMCEPopup;
+}
+
+function usingTinymce4AndColorbox() {
+ return !!getUrlParam('field_name');
+}
+
+function usingCkeditor3() {
+ return !!getUrlParam('CKEditor') || !!getUrlParam('CKEditorCleanUpFuncNum');
+}
+
+function usingFckeditor2() {
+ return window.opener && typeof data != 'undefined' && data['Properties']['Width'] != '';
+}
+
+function usingWysiwygEditor() {
+ return usingTinymce3() || usingTinymce4AndColorbox() || usingCkeditor3() || usingFckeditor2();
+}
+*/
+// ==================================
+// == Others ==
+// ==================================
+
+function getUrlParam(paramName) {
+ var reParam = new RegExp('(?:[\?&]|&)' + paramName + '=([^&]+)', 'i');
+ var match = window.location.search.match(reParam);
+ return ( match && match.length > 1 ) ? match[1] : null;
+}
+
+function defaultParameters() {
+ return {
+ working_dir: $('#working_dir').val(),
+ type: $('#type').val()
+ };
+}
+
+function notImp() {
+ notify('Not yet implemented!');
+}
+
+function notify(body, callback) {
+
+ $('#notify').find('.btn-primary').toggle(callback !== undefined);
+ $('#notify').find('.btn-primary').unbind().click(callback);
+ $('#notify').modal('show').find('.modal-body').html(body);
+}
+
+function dialog(title, value, callback) {
+ $('#dialog').find('input').val(value);
+ $('#dialog').on('shown.bs.modal', function () {
+ $('#dialog').find('input').focus();
+ });
+ $('#dialog').find('.btn-primary').unbind().click(function (e) {
+ callback($('#dialog').find('input').val());
+ });
+ $('#dialog').modal('show').find('.modal-title').text(title);
+}
diff --git a/public/js/pages_file-manager.js b/public/js/pages_file-manager.js
new file mode 100644
index 0000000..a2a2585
--- /dev/null
+++ b/public/js/pages_file-manager.js
@@ -0,0 +1,33 @@
+$(function() {
+
+ // Checkboxes
+
+ $('.file-manager-container').on('change', '.file-item-checkbox input', function() {
+ $(this).parents('.file-item')[this.checked ? 'addClass': 'removeClass']('selected border-primary');
+ });
+
+ // Focus
+
+ $('.file-manager-container').on('focusin', '.file-item', function() {
+ $(this).addClass('focused');
+ });
+
+ $('.file-manager-container').on('focusout', '.file-item', function() {
+ if ($('.file-item-actions.show').length) return;
+ $(this).removeClass('focused');
+ });
+
+ $('.file-manager-container').on('hide.bs.dropdown', '.file-item-actions', function() {
+ if ($(this).parents('.file-item').find(':focus').length) return;
+ $(this).parents('.file-item').removeClass('focused');
+ });
+
+ // Change view
+
+ $('[name="file-manager-view"]').on('change', function() {
+ $('.file-manager-container')
+ .removeClass('file-manager-col-view file-manager-row-view')
+ .addClass(this.value);
+ });
+
+});
diff --git a/public/storage b/public/storage
new file mode 120000
index 0000000..4f86ed6
--- /dev/null
+++ b/public/storage
@@ -0,0 +1 @@
+/Users/kevinadametz/Websites/mein.sterntours.local/storage/app/public
\ No newline at end of file
diff --git a/resources/views/booking/_detail.blade.php b/resources/views/booking/_detail.blade.php
new file mode 100644
index 0000000..f7782a2
--- /dev/null
+++ b/resources/views/booking/_detail.blade.php
@@ -0,0 +1,193 @@
+@extends('layouts.layout-2')
+
+@section('content')
+
+
+
+ Buchung verwalten
+
+
+
+ {!! Form::open(['url' => route('booking_detail', [$id]), 'class' => 'form-horizontal', 'id'=>'lead-form-validation']) !!}
+
+
+
+
+
+
+
+ {{ __('MyJack Nr.') }}*
+ {{ Form::text('merlin_order_number', $booking->merlin_order_number, array('placeholder'=>__('MyJack Nr.'), 'class'=>'form-control', 'id'=>'merlin_order_number')) }}
+
+
+
+ {{ __('Nr.') }}*
+ {{ Form::text('id', $booking->id, array('placeholder'=>__('Nr.'), 'class'=>'form-control', 'id'=>'booking_id', 'readonly')) }}
+
+
+
+
+
+
+
+
+
+
+ @if($booking->new_drafts )
+
+ @php($i = 1)
+
+ Neue Leistung hinzufügen
+
+
+ @foreach($booking->booking_draft_items as $booking_draft_item)
+
+
draft_type) style="background-color: {{ $booking_draft_item->draft_type->color }}" @endif>
+
+ #{{ $i++ }}
+
+
+
+
+
+
+
+
+
+ Vorlagen-Typ*
+ {!! HTMLHelper::getDraftTypes($booking_draft_item->draft_type_id) !!}
+
+
+
+
+ {{ Form::text('draft_item['.$booking_draft_item->id.'][start_date]', $booking_draft_item->start_date, array('placeholder'=>__('Start Datum'), 'class'=>'form-control datepicker-base', 'id'=>'draft_item_'.$booking_draft_item->id.'_start_dat')) }}
+
+
+
+ {{ Form::text('draft_item['.$booking_draft_item->id.'][end_date]', $booking_draft_item->end_date, array('placeholder'=>__('End Datum'), 'class'=>'form-control datepicker-base', 'id'=>'draft_item_'.$booking_draft_item->id.'_end_date')) }}
+
+
+
+
+ @if(in_array($booking_draft_item->draft_type_id, [24, 26, 30, 31, 32, 33, 34, 35, 36, 37, 41]))
+
+
+
+ @endif
+
+
+
+ @if(in_array($booking_draft_item->draft_type_id, [36, 37]))
+
+
+
+ @endforeach
+
+ @endif
+
+
+ Neue Leistung hinzufügen
+
+
+
+
+ {!! Form::close() !!}
+
+
+
+
+
+
+
+
+
+@endsection
\ No newline at end of file
diff --git a/resources/views/booking/detail.blade.php b/resources/views/booking/detail.blade.php
index a6820db..7ec7736 100755
--- a/resources/views/booking/detail.blade.php
+++ b/resources/views/booking/detail.blade.php
@@ -2,6 +2,40 @@
@section('content')
+
+
Buchung verwalten
@@ -24,8 +58,19 @@
{{ Form::text('id', $booking->id, array('placeholder'=>__('Nr.'), 'class'=>'form-control', 'id'=>'booking_id', 'readonly')) }}
+
+
+
{{ __('save changes') }}
{{ __('zur Übersicht') }}
@@ -39,123 +84,119 @@
Neue Leistung hinzufügen
-
- @foreach($booking->booking_draft_items as $booking_draft_item)
-
-
draft_type) style="background-color: {{ $booking_draft_item->draft_type->color }}" @endif>
-
-
-
- Vorlagen-Typ*
- {!! HTMLHelper::getDraftTypes($booking_draft_item->draft_type_id) !!}
-
-
-
-
- {{ Form::text('draft_item['.$booking_draft_item->id.'][start_date]', $booking_draft_item->start_date, array('placeholder'=>__('Start Datum'), 'class'=>'form-control datepicker-base', 'id'=>'draft_item_'.$booking_draft_item->id.'_start_dat')) }}
-
-
-
- {{ Form::text('draft_item['.$booking_draft_item->id.'][end_date]', $booking_draft_item->end_date, array('placeholder'=>__('End Datum'), 'class'=>'form-control datepicker-base', 'id'=>'draft_item_'.$booking_draft_item->id.'_end_date')) }}
-
-
-
-
#{{ $i++ }}
-
-
-
-
-
- @if(in_array($booking_draft_item->draft_type_id, [36, 37]))
-