shell bypass 403
## Note Check `vendor/unisharp/laravel-filemanager/src/views/demo.blade.php`, which already integrated all options from below. ## WYSIWYG Editor Integration: ### Option 1: CKEditor ```html <textarea id="my-editor" name="content" class="form-control">{!! old('content', 'test editor content') !!}</textarea> <script src="//cdn.ckeditor.com/4.6.2/standard/ckeditor.js"></script> <script> var options = { filebrowserImageBrowseUrl: '/laravel-filemanager?type=Images', filebrowserImageUploadUrl: '/laravel-filemanager/upload?type=Images&_token={{csrf_token()}}', filebrowserBrowseUrl: '/laravel-filemanager?type=Files', filebrowserUploadUrl: '/laravel-filemanager/upload?type=Files&_token={{csrf_token()}}' }; </script> ``` * Sample 1 - Replace by ID: ```html <script> CKEDITOR.replace('my-editor', options); </script> ``` * Sample 2 - With JQuery Selector: ```html <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> <script src="/vendor/unisharp/laravel-ckeditor/adapters/jquery.js"></script> <script> $('textarea.my-editor').ckeditor(options); </script> ``` ### Option 2: TinyMCE5 ```html <script src="/path-to-your-tinymce/tinymce.min.js"></script> <textarea name="content" class="form-control my-editor">{!! old('content', $content) !!}</textarea> <script> var editor_config = { path_absolute : "/", selector: 'textarea.my-editor', relative_urls: false, plugins: [ "advlist autolink lists link image charmap print preview hr anchor pagebreak", "searchreplace wordcount visualblocks visualchars code fullscreen", "insertdatetime media nonbreaking save table directionality", "emoticons template paste textpattern" ], toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image media", file_picker_callback : function(callback, value, meta) { var x = window.innerWidth || document.documentElement.clientWidth || document.getElementsByTagName('body')[0].clientWidth; var y = window.innerHeight|| document.documentElement.clientHeight|| document.getElementsByTagName('body')[0].clientHeight; var cmsURL = editor_config.path_absolute + 'laravel-filemanager?editor=' + meta.fieldname; if (meta.filetype == 'image') { cmsURL = cmsURL + "&type=Images"; } else { cmsURL = cmsURL + "&type=Files"; } tinyMCE.activeEditor.windowManager.openUrl({ url : cmsURL, title : 'Filemanager', width : x * 0.8, height : y * 0.8, resizable : "yes", close_previous : "no", onMessage: (api, message) => { callback(message.content); } }); } }; tinymce.init(editor_config); </script> ``` ### Option 3: TinyMCE4 ```html <script src="//cdn.tinymce.com/4/tinymce.min.js"></script> <textarea name="content" class="form-control my-editor">{!! old('content', $content) !!}</textarea> <script> var editor_config = { path_absolute : "/", selector: "textarea.my-editor", plugins: [ "advlist autolink lists link image charmap print preview hr anchor pagebreak", "searchreplace wordcount visualblocks visualchars code fullscreen", "insertdatetime media nonbreaking save table contextmenu directionality", "emoticons template paste textcolor colorpicker textpattern" ], toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image media", relative_urls: false, file_browser_callback : function(field_name, url, type, win) { var x = window.innerWidth || document.documentElement.clientWidth || document.getElementsByTagName('body')[0].clientWidth; var y = window.innerHeight|| document.documentElement.clientHeight|| document.getElementsByTagName('body')[0].clientHeight; var cmsURL = editor_config.path_absolute + 'laravel-filemanager?field_name=' + field_name; if (type == 'image') { cmsURL = cmsURL + "&type=Images"; } else { cmsURL = cmsURL + "&type=Files"; } tinyMCE.activeEditor.windowManager.open({ file : cmsURL, title : 'Filemanager', width : x * 0.8, height : y * 0.8, resizable : "yes", close_previous : "no" }); } }; tinymce.init(editor_config); </script> ``` ### Option 4: Summernote ```html <!-- dependencies (Summernote depends on Bootstrap & jQuery) --> <link href="http://netdna.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.css" rel="stylesheet"> <script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.js"></script> <script src="http://netdna.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.js"></script> <link href="http://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.3/summernote.css" rel="stylesheet"> <script src="http://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.3/summernote.js"></script> <!-- markup --> <textarea id="summernote-editor" name="content">{!! old('content', $content) !!}</textarea> <!-- summernote config --> <script> $(document).ready(function(){ // Define function to open filemanager window var lfm = function(options, cb) { var route_prefix = (options && options.prefix) ? options.prefix : '/laravel-filemanager'; window.open(route_prefix + '?type=' + options.type || 'file', 'FileManager', 'width=900,height=600'); window.SetUrl = cb; }; // Define LFM summernote button var LFMButton = function(context) { var ui = $.summernote.ui; var button = ui.button({ contents: '<i class="note-icon-picture"></i> ', tooltip: 'Insert image with filemanager', click: function() { lfm({type: 'image', prefix: '/laravel-filemanager'}, function(lfmItems, path) { lfmItems.forEach(function (lfmItem) { context.invoke('insertImage', lfmItem.url); }); }); } }); return button.render(); }; // Initialize summernote with LFM button in the popover button group // Please note that you can add this button to any other button group you'd like $('#summernote-editor').summernote({ toolbar: [ ['popovers', ['lfm']], ], buttons: { lfm: LFMButton } }) }); </script> ``` ## Standalone button If you are going to use filemanager independently, meaning set the value of an input to selected photo/file url, follow this structure: 1. Create a button, input, and image preview holder if you are going to choose images. Specify the id to the input and image preview by `data-input` and `data-preview`. ```html <div class="input-group"> <span class="input-group-btn"> <a id="lfm" data-input="thumbnail" data-preview="holder" class="btn btn-primary"> <i class="fa fa-picture-o"></i> Choose </a> </span> <input id="thumbnail" class="form-control" type="text" name="filepath"> </div> <div id="holder" style="margin-top:15px;max-height:100px;"></div> ``` 1. Import lfm.js(run `php artisan vendor:publish` if you need). ```html <script src="/vendor/laravel-filemanager/js/stand-alone-button.js"></script> ``` 1. Init filemanager with type. (requires jQuery) ```javascript $('#lfm').filemanager('image'); ``` or ```javascript $('#lfm').filemanager('file'); ``` Domain can be specified in the second parameter(optional, but will be required when developing on Windows mechines) : ```javascript var route_prefix = "url-to-filemanager"; $('#lfm').filemanager('image', {prefix: route_prefix}); ``` ## JavaScript integration In case you are developing javascript application and you want dynamically to trigger filemanager popup, you can create function like this. It doesn't rely on jQuery. ```javascript var lfm = function(id, type, options) { let button = document.getElementById(id); button.addEventListener('click', function () { var route_prefix = (options && options.prefix) ? options.prefix : '/laravel-filemanager'; var target_input = document.getElementById(button.getAttribute('data-input')); var target_preview = document.getElementById(button.getAttribute('data-preview')); window.open(route_prefix + '?type=' + options.type || 'file', '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.value = file_path; target_input.dispatchEvent(new Event('change')); // clear previous preview target_preview.innerHtml = ''; // set or change the preview image src items.forEach(function (item) { let img = document.createElement('img') img.setAttribute('style', 'height: 5rem') img.setAttribute('src', item.thumb_url) target_preview.appendChild(img); }); // trigger change event target_preview.dispatchEvent(new Event('change')); }; }); }; ``` And use it like this: ```javascript var route_prefix = "url-to-filemanager"; lfm('lfm', 'image', {prefix: route_prefix}); lfm('lfm2', 'file', {prefix: route_prefix}); ``` The first parameter is id, the second parameter is the type of laravel filemanager(which ). ## Embed file manager ```html <iframe src="/laravel-filemanager" style="width: 100%; height: 500px; overflow: hidden; border: none;"></iframe> ```