]> _ Git - cubist_cms-back.git/commitdiff
wip #4216 @1
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 30 Aug 2022 17:41:57 +0000 (19:41 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 30 Aug 2022 17:41:57 +0000 (19:41 +0200)
src/app/Magic/Fields/Files.php
src/resources/views/fields/dropzone_media.blade.php

index 85eb2d9682596c67a14ccc051002d97147c8aed5..7a3c2278256823e14b52c4a95995c05558332c7c 100644 (file)
@@ -14,6 +14,7 @@ class Files extends Field
     protected $_databaseType = 'text';
     protected $_thumbConversion = 'backpack_thumb';
     protected $_nameAsCollection = false;
+    protected $_renameCollectionOnChange = false;
     protected $_maxFiles = 1;
     protected $_cast = 'string';
 
@@ -22,6 +23,7 @@ class Files extends Field
         $collection = '_TBD_';
         return array_merge(parent::getDefaultAttributes(), [
             'name_as_collection' => $this->_nameAsCollection,
+            'rename_collection_on_change' => $this->_renameCollectionOnChange,
             'form' => 'update',
             'collection' => $collection,
             'thumb_conversion' => $this->_thumbConversion,
index 0d072ea465ff0c7ddb18f397c5a19c04fb701d44..6ea4d07e6051e14d528589ca71834920dedca1d0 100644 (file)
@@ -16,6 +16,7 @@ $blank = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAA
     <input type="hidden" value="{{$collection}}" name="{{$field['name']}}"/>
     <div data-url="{{ url($crud->route . '/' . $entry->id . '/media') }}"
          data-options='@json($field['options'])'
+         data-rename-on-change="{{$field['rename_collection_on_change']}}"
          class="dropzone dz-clickable sortable">
         <div class="dz-message">
             {{__('Drop files here or click to upload')}}
@@ -158,54 +159,53 @@ $blank = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAA
 
         {{-- FIELD JS - will be loaded in the after_scripts section --}}
         @push('crud_fields_scripts')
-            <?php
+                <?php
 
 
+                $files = [];
+                $filesrand = 'files_' . rand(1, 10000);
+                foreach ($entry->getAllMedia() as $media) {
+                    $collection = $media->collection_name;
+                    if (!isset($files[$collection])) {
+                        $files[$collection] = [];
+                    }
 
-            $files = [];
-            $filesrand = 'files_' . rand(1, 10000);
-            foreach ($entry->getAllMedia() as $media) {
-                $collection = $media->collection_name;
-                if (!isset($files[$collection])) {
-                    $files[$collection] = [];
-                }
-
-                $full = null;
-                $thumb_url = null;
-
-                try {
-                    $full = $media->getUrl();
-                } catch (Exception $e) {
-                    $full = '';
-                }
-
-                $e = explode('.', $full);
-                $ext = mb_strtolower(array_pop($e));
+                    $full = null;
+                    $thumb_url = null;
 
-                if (in_array($ext, $images)) {
                     try {
-                        $thumb_url = $media->getUrl($field['thumb_conversion'] ?? null);
+                        $full = $media->getUrl();
                     } catch (Exception $e) {
+                        $full = '';
+                    }
+
+                    $e = explode('.', $full);
+                    $ext = mb_strtolower(array_pop($e));
+
+                    if (in_array($ext, $images)) {
+                        try {
+                            $thumb_url = $media->getUrl($field['thumb_conversion'] ?? null);
+                        } catch (Exception $e) {
 
+                        }
+                    }
+                    if (!isset($thumb_url)) {
+                        $thumb_url = $blank;
                     }
-                }
-                if (!isset($thumb_url)) {
-                    $thumb_url = $blank;
-                }
 
 
-                $files[$collection][] = [
-                    'id' => $media->id,
-                    'order_column' => $media->order_column,
-                    'size' => $media->size,
-                    'name' => $media->file_name,
-                    'full_url' => $full,
-                    'thumb_url' => $thumb_url
-                ];
-            }
+                    $files[$collection][] = [
+                        'id' => $media->id,
+                        'order_column' => $media->order_column,
+                        'size' => $media->size,
+                        'name' => $media->file_name,
+                        'full_url' => $full,
+                        'thumb_url' => $thumb_url
+                    ];
+                }
 
-            ?>
-            <!-- include dropzone js-->
+                ?>
+                <!-- include dropzone js-->
             <script src="{{ vendor_asset('vendor/cubist/cms-back/dropzone/dropzone.js') }}"></script>
             <script src="{{ vendor_asset('vendor/cubist/cms-back/sortable/sortable.js') }}"></script>
             <script type="text/javascript">
@@ -245,6 +245,15 @@ $blank = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAA
                         });
                     }
 
+                    function onDropzoneChange(el) {
+                        if ($(el).attr('data-rename-on-change') === '1') {
+                            var uid = uniqid();
+                            $(el).prev('input').val(uid);
+                            return uid;
+                        }
+                        return false;
+                    }
+
                     function initOneDropzone(el) {
                         el = $(el);
                         var base_url = el.data('url');
@@ -283,6 +292,11 @@ $blank = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAA
                             },
                             sending: function (file, xhr, formData) {
                                 formData.append('_token', $('meta[name="csrf-token"]').attr('content'));
+                                var ncoll = onDropzoneChange(el);
+                                if (ncoll !== false) {
+                                    collection = ncoll;
+                                }
+
                                 if (collection !== undefined && collection !== null && collection !== '') {
                                     formData.append('collection', collection);
                                 }
@@ -299,6 +313,12 @@ $blank = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAA
                                 }
                             },
                             removedfile: function (file) {
+                                var ncoll = onDropzoneChange(this.element);
+                                if (ncoll !== false) {
+                                    collection = ncoll;
+                                }
+
+
                                 if (typeof file.media != 'undefined') {
                                     $.ajax({
                                         url: base_url + '/' + file.media.id,
@@ -358,6 +378,7 @@ $blank = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAA
                             }).show();
                         });
 
+
                         var dropzone_sortable = new Sortable(document.getElementById(el_id), {
                             handle: ".dz-preview",
                             draggable: ".dz-preview",
@@ -407,6 +428,7 @@ $blank = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAA
                         return dropzone;
                     }
 
+
                     initAllDropzones();
                     $(document).on('cubist.bunchmultiple.added', function () {
                         initAllDropzones();