]> _ Git - cubist_cms-back.git/commitdiff
wip #4213 @1.5
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Fri, 17 Jun 2022 15:44:02 +0000 (17:44 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Fri, 17 Jun 2022 15:44:02 +0000 (17:44 +0200)
src/app/Console/Kernel.php
src/app/CubistCrudPanel.php
src/app/Http/Controllers/Operations/ReviseOperation.php
src/app/Magic/Fields/BunchOfFieldsMultiple.php
src/public/bunchmultiple/bunchmultiple.css
src/public/bunchmultiple/bunchmultiple.css.map
src/public/bunchmultiple/bunchmultiple.less
src/resources/views/fields/bunch_oneline_multiple.blade.php [new file with mode: 0644]
src/resources/views/form/shortcuts.blade.php

index 0d68f07e3f31cc7506013bfc5e9d09a680bf3b56..210c9be07418d7dc46b8e75f6932501a60a2d4e3 100644 (file)
@@ -15,9 +15,8 @@ class Kernel extends ConsoleKernel
      */
     protected function schedule(Schedule $schedule)
     {
+        $schedule->command('queue:prune-failed --hours=24')->daily()->at('03:50');
         $schedule->command('backup:clean')->daily()->at('04:00');
         $schedule->command('backup:run')->daily()->at('05:00');
-
-        //$schedule->command('media-library:regenerate --only-missing')->daily();
     }
 }
index b565e894fe05d7c1dfdbe7741985cf2a65c965ae..86439dca92cfad914b0ad60185c4e692e299790b 100644 (file)
@@ -5,9 +5,6 @@ namespace Cubist\Backpack;
 use Backpack\CRUD\app\Exceptions\AccessDeniedException;
 use Backpack\CRUD\app\Library\CrudPanel\CrudPanel;
 use Cubist\Backpack\Magic\Models\CubistMagicAbstractModel;
-use Cubist\Backpack\Magic\Requests\CubistMagicRequest;
-use Illuminate\Http\Request;
-use Illuminate\Support\Arr;
 
 /**
  * @property CubistMagicAbstractModel $model
@@ -111,7 +108,6 @@ class CubistCrudPanel extends CrudPanel
         if (!$this->hasAccess($operation)) {
             throw new AccessDeniedException(trans('backpack::crud.unauthorized_access', ['access' => $operation]));
         }
-
         return true;
     }
 
@@ -122,7 +118,6 @@ class CubistCrudPanel extends CrudPanel
                 return false;
             }
         }
-
         return true;
     }
 
@@ -133,11 +128,9 @@ class CubistCrudPanel extends CrudPanel
                 return true;
             }
         }
-
         return false;
     }
 
-
     /**
      * @param $model CubistMagicAbstractModel
      */
@@ -151,7 +144,6 @@ class CubistCrudPanel extends CrudPanel
             }
             $this->addColumn($field->getColumnData(true));
         }
-
         return $res;
     }
 
index 3eeac30f36cc02e0667b8ffb5feaed87d4f212d8..574afb68096c74b8ee8967e26ccf99f1a0c0e493 100644 (file)
@@ -3,7 +3,6 @@
 
 namespace Cubist\Backpack\Http\Controllers\Operations;
 
-use Cubist\Backpack\CubistCrudPanel;
 
 trait ReviseOperation
 {
@@ -21,14 +20,37 @@ trait ReviseOperation
         });
 
         $this->crud->operation(['list', 'show'], function () {
-
-            if($this->crud->model->isButtonVisible('revise')) {
+            if ($this->crud->model->isButtonVisible('revise')) {
                 // add a button in the line stack
                 $this->crud->addButton('line', 'revise', 'view', 'revise-operation::revise_button', 'end');
             }
         });
 
-        $crud = $this->crud;
+        // add a new method on the CrudPanel object to allow this operation
+        // to call getRevisionsForEntry from multiple operation methods
+        $this->crud->macro('getRevisionsForEntry', function ($id) {
+            $revisions = [];
+
+            // Group revisions by change date
+            foreach ($this->getEntry($id)->revisionHistory as $history) {
+                // Get just the date from the revision created timestamp
+                $revisionDate = date('Y-m-d', strtotime((string) $history->created_at));
+
+                // Be sure to instantiate the initial grouping array
+                if (! array_key_exists($revisionDate, $revisions)) {
+                    $revisions[$revisionDate] = [];
+                }
+
+                // Push onto the top of the current group - so we get orderBy decending timestamp
+                array_unshift($revisions[$revisionDate], $history);
+            }
+
+            // Sort the array by timestamp descending (so that the most recent are at the top)
+            krsort($revisions);
+
+            return $revisions;
+        });
+
     }
 
 }
index 9a9505a75d54496ae19a4dc38780bba8bdb9bbd2..910ecac05f4b44ab8bbbbca55f168458674cb34e 100644 (file)
@@ -13,10 +13,11 @@ class BunchOfFieldsMultiple extends BunchOfFields
     protected $_cast = 'array';
     protected $_viewNamespace = CubistBackpackServiceProvider::NAMESPACE . '::fields';
     protected $_show_empty = true;
+    protected $_bunch = [];
 
     public function getDefaultAttributes()
     {
-        return array_merge(parent::getDefaultAttributes(), ['bunch' => [], "add_label" => __('Add an item'), 'show_empty' => $this->_show_empty]);
+        return array_merge(parent::getDefaultAttributes(), ['bunch' => $this->_bunch, "add_label" => __('Add an item'), 'show_empty' => $this->_show_empty]);
     }
 
     public function _postSetAttributes()
index 8984ddbaf105d4b3293d3c5b30c3ab7377dfdca4..b78cf8f927ed307d94cd380a601f309b55376a91 100644 (file)
@@ -1,6 +1,32 @@
 .bunchmultiple {
   margin: 0 15px;
 }
+.bunchmultiple.bunchmultiple_oneline .bunchmultiple__wrapper .item .legend a.action {
+  position: relative;
+  top: 13px;
+}
+.bunchmultiple.bunchmultiple_oneline .bunchmultiple__wrapper .item .legend a.action.sort-handle {
+  top: 6px;
+  padding-right: 10px;
+}
+.bunchmultiple.bunchmultiple_oneline .bunchmultiple__wrapper .legendsize {
+  display: inline-block;
+  white-space: nowrap;
+}
+.bunchmultiple.bunchmultiple_oneline .bunchmultiple__wrapper .legendsize label {
+  display: none;
+}
+.bunchmultiple.bunchmultiple_oneline .bunchmultiple__wrapper .legendsize .form-group {
+  display: inline-block;
+  vertical-align: top;
+  margin-bottom: 0;
+  padding: 0 10px;
+  position: relative;
+  top: -1px;
+}
+.bunchmultiple.bunchmultiple_oneline .bunchmultiple__wrapper .legendsize input.form-control {
+  height: 34px;
+}
 .bunchmultiple.bunchmultiple_keyvalue .bunchmultiple__wrapper .item .legend a.action {
   position: relative;
   top: 13px;
index d649d5b4cc4f5de9b1c4e2807f93831ec68758fa..36cc95571ed0ec625d0913a6b7b8e6746a4a259a 100644 (file)
@@ -1 +1 @@
-{"version":3,"sources":["bunchmultiple.less"],"names":[],"mappings":"AAAA;EACI,cAAA;;AAEA,cAAC,uBACG,wBACI,MACI,QACI,EAAC;EACG,kBAAA;EACA,SAAA;;AAEA,cARnB,uBACG,wBACI,MACI,QACI,EAAC,OAII;EACG,QAAA;EACA,mBAAA;;AAVxB,cAAC,uBACG,wBAeI;EAKI,qBAAA;EACA,mBAAA;;AAtBZ,cAAC,uBACG,wBAeI,YACI;EACI,aAAA;;AAlBhB,cAAC,uBACG,wBAeI,YAQI;EACI,UAAA;EACA,qBAAA;EACA,mBAAA;EACA,gBAAA;EACA,eAAA;EACA,kBAAA;EACA,SAAA;;AA/BhB,cAAC,uBACG,wBAeI,YAkBI,MAAK;EACD,YAAA;;AAQhB,cAAC;EACG,WAAA;;AA/CR,cAkDI;EACI,aAAA;EACA,sBAAA;EACA,mBAAA;EACA,mBAAA;;AAEA,cANJ,wBAMK;EACG,aAAA;;AAGJ,cAVJ,wBAUK;EACG,UAAA;EACA,SAAA;EACA,gBAAA;EACA,gBAAA;;AAhEZ,cAkDI,wBAkBI;EACI,UAAA;;AArEZ,cAkDI,wBAkBI,cAGI;EACI,gBAAA;EACA,mBAAA;;AAzEhB,cAkDI,wBA2BI;EACI,mBAAA;;AAEA,cA9BR,wBA2BI,MAGK;EACG,uBAAA;EACA,sBAAA;;AAFJ,cA9BR,wBA2BI,MAGK,MAIG;EACI,UAAA;;AALR,cA9BR,wBA2BI,MAGK,MAQG;EACI,UAAA;;AAzFpB,cAkDI,wBA2BI,MAgBI;EACI,yBAAA;EACA,iBAAA;EACA,gBAAA;EACA,kBAAA;EACA,eAAA;;AAlGhB,cAkDI,wBA2BI,MAgBI,QAOI;EACI,qBAAA;EACA,gBAAA;EACA,yBAAA;EACA,mBAAA;EACA,uBAAA;EACA,kBAAA;EACA,UAAA;EACA,SAAA;;AA5GpB,cAkDI,wBA2BI,MAgBI,QAkBI,EAAC;EACG,WAAA;EACA,gBAAA;EACA,qBAAA;;AAEA,cAlEhB,wBA2BI,MAgBI,QAkBI,EAAC,OAKI;EACG,mBAAA;EACA,YAAA;;AAGJ,cAvEhB,wBA2BI,MAgBI,QAkBI,EAAC,OAUI;EACG,kBAAA;EACA,WAAA;EACA,eAAA;;AAGJ,cA7EhB,wBA2BI,MAgBI,QAkBI,EAAC,OAgBI;EACG,kBAAA;EACA,WAAA;EACA,eAAA;;AAlIxB,cAkDI,wBA2BI,MA0DI;EACI,gBAAA;EACA,iEAAA;EACA,yBAAA;EACA,eAAA;;AAGJ,cA5FR,wBA2BI,MAiEK;EACG,aAAA;;AAGJ,cAhGR,wBA2BI,MAqEK,UACG;EACI,oBAAA;EACA,UAAA","file":"bunchmultiple.css"}
\ No newline at end of file
+{"version":3,"sources":["bunchmultiple.less"],"names":[],"mappings":"AAAA;EACI,cAAA;;AAEA,cAAC,sBACG,wBACI,MACI,QACI,EAAC;EACG,kBAAA;EACA,SAAA;;AAEA,cARnB,sBACG,wBACI,MACI,QACI,EAAC,OAII;EACG,QAAA;EACA,mBAAA;;AAVxB,cAAC,sBACG,wBAeI;EAKI,qBAAA;EACA,mBAAA;;AAtBZ,cAAC,sBACG,wBAeI,YACI;EACI,aAAA;;AAlBhB,cAAC,sBACG,wBAeI,YAQI;EAEI,qBAAA;EACA,mBAAA;EACA,gBAAA;EACA,eAAA;EACA,kBAAA;EACA,SAAA;;AA/BhB,cAAC,sBACG,wBAeI,YAkBI,MAAK;EACD,YAAA;;AAShB,cAAC,uBACG,wBACI,MACI,QACI,EAAC;EACG,kBAAA;EACA,SAAA;;AAEA,cARnB,uBACG,wBACI,MACI,QACI,EAAC,OAII;EACG,QAAA;EACA,mBAAA;;AAVxB,cAAC,uBACG,wBAeI;EAKI,qBAAA;EACA,mBAAA;;AAtBZ,cAAC,uBACG,wBAeI,YACI;EACI,aAAA;;AAlBhB,cAAC,uBACG,wBAeI,YAQI;EACI,UAAA;EACA,qBAAA;EACA,mBAAA;EACA,gBAAA;EACA,eAAA;EACA,kBAAA;EACA,SAAA;;AA/BhB,cAAC,uBACG,wBAeI,YAkBI,MAAK;EACD,YAAA;;AAQhB,cAAC;EACG,WAAA;;AA3FR,cA8FI;EACI,aAAA;EACA,sBAAA;EACA,mBAAA;EACA,mBAAA;;AAEA,cANJ,wBAMK;EACG,aAAA;;AAGJ,cAVJ,wBAUK;EACG,UAAA;EACA,SAAA;EACA,gBAAA;EACA,gBAAA;;AA5GZ,cA8FI,wBAkBI;EACI,UAAA;;AAjHZ,cA8FI,wBAkBI,cAGI;EACI,gBAAA;EACA,mBAAA;;AArHhB,cA8FI,wBA2BI;EACI,mBAAA;;AAEA,cA9BR,wBA2BI,MAGK;EACG,uBAAA;EACA,sBAAA;;AAFJ,cA9BR,wBA2BI,MAGK,MAIG;EACI,UAAA;;AALR,cA9BR,wBA2BI,MAGK,MAQG;EACI,UAAA;;AArIpB,cA8FI,wBA2BI,MAgBI;EACI,yBAAA;EACA,iBAAA;EACA,gBAAA;EACA,kBAAA;EACA,eAAA;;AA9IhB,cA8FI,wBA2BI,MAgBI,QAOI;EACI,qBAAA;EACA,gBAAA;EACA,yBAAA;EACA,mBAAA;EACA,uBAAA;EACA,kBAAA;EACA,UAAA;EACA,SAAA;;AAxJpB,cA8FI,wBA2BI,MAgBI,QAkBI,EAAC;EACG,WAAA;EACA,gBAAA;EACA,qBAAA;;AAEA,cAlEhB,wBA2BI,MAgBI,QAkBI,EAAC,OAKI;EACG,mBAAA;EACA,YAAA;;AAGJ,cAvEhB,wBA2BI,MAgBI,QAkBI,EAAC,OAUI;EACG,kBAAA;EACA,WAAA;EACA,eAAA;;AAGJ,cA7EhB,wBA2BI,MAgBI,QAkBI,EAAC,OAgBI;EACG,kBAAA;EACA,WAAA;EACA,eAAA;;AA9KxB,cA8FI,wBA2BI,MA0DI;EACI,gBAAA;EACA,iEAAA;EACA,yBAAA;EACA,eAAA;;AAGJ,cA5FR,wBA2BI,MAiEK;EACG,aAAA;;AAGJ,cAhGR,wBA2BI,MAqEK,UACG;EACI,oBAAA;EACA,UAAA","file":"bunchmultiple.css"}
\ No newline at end of file
index 46519cf87782bc32ecd9f6b03845baf35cad39b2..96d1545990fd3cfb7ee03b14fee254f95b54ce27 100644 (file)
@@ -1,6 +1,50 @@
 .bunchmultiple {
     margin: 0 15px;
 
+    &.bunchmultiple_oneline {
+        .bunchmultiple__wrapper {
+            .item {
+                .legend {
+                    a.action {
+                        position: relative;
+                        top: 13px;
+
+                        &.sort-handle {
+                            top: 6px;
+                            padding-right: 10px;
+                        }
+                    }
+                }
+            }
+
+            .legendsize {
+                label {
+                    display: none;
+                }
+
+                display: inline-block;
+                white-space: nowrap;
+
+                .form-group {
+
+                    display: inline-block;
+                    vertical-align: top;
+                    margin-bottom: 0;
+                    padding:0 10px;
+                    position: relative;
+                    top:-1px;
+                }
+
+                input.form-control {
+                    height: 34px;
+                }
+
+
+            }
+        }
+    }
+
+
     &.bunchmultiple_keyvalue {
         .bunchmultiple__wrapper {
             .item {
diff --git a/src/resources/views/fields/bunch_oneline_multiple.blade.php b/src/resources/views/fields/bunch_oneline_multiple.blade.php
new file mode 100644 (file)
index 0000000..42b4e5d
--- /dev/null
@@ -0,0 +1,90 @@
+<!-- Bunch -->
+
+<?php
+$empty = [];
+$value = old(square_brackets_to_dots($field['name'])) ?? $field['value'] ?? $field['default'] ?? $empty;
+if ($value == '') {
+    $value = $empty;
+}
+
+if (is_array($value)) {
+    $normalizedValue = [];
+    foreach ($value as $k => $v) {
+        if (!is_array($v) && !is_object($v)) {
+            $normalizedValue[] = ['key' => $k, 'value' => $v];
+        } else {
+            $normalizedValue[$k] = $v;
+        }
+    }
+    $value = $normalizedValue;
+}
+
+if (!is_string($value)) {
+    $value = json_encode($value);
+}
+
+?>
+<div class="bunchmultiple bunchmultiple_oneline{{ ($field['show_empty']?' showEmpty':'') }}"
+     id="{!! $field['rand'] !!}" data-bunch-name="{{$field['name']}}" data-values="{{ $value }}">
+    <input type="hidden" class="hiddenfield" name="{{$field['name']}}" value="{{ $value }}"
+           data-bmid="{!! $field['rand'] !!}"/>
+    <div class="bunchmultiple__wrapper" data-bmid="{!! $field['rand'] !!}">
+        @include('crud::fields.inc.wrapper_start')
+        <label>{!! $field['label'] !!}</label>
+        @include('crud::fields.inc.translatable_icon')
+        <div class="clearfix"></div>
+
+        <div class="bunchmultiple__items" data-bmid="{!! $field['rand'] !!}">
+            <div class="item sample" data-bmid="{!! $field['rand'] !!}">
+                <div class="legend" data-bmid="{!! $field['rand'] !!}">
+                    <a href="#" class="action sort-handle" data-bmid="{!! $field['rand'] !!}"><i class="la la-sort"
+                                                                                                 role="presentation"
+                                                                                                 aria-hidden="true"></i></a>
+                    <div class="legendsize">
+                        @include('cubist_back::inc.show_bunch_fields', array('bunchfields'=>$field['bunchfields'],'bmid'=>$field['rand'],'oneline'=>true))
+                    </div>
+                    <a href="#" class="action remove" data-bmid="{!! $field['rand'] !!}"><i class="la la-trash"
+                                                                                            role="presentation"
+                                                                                            aria-hidden="true"></i></a>
+
+                </div>
+
+            </div>
+        </div>
+
+        <div class="btn-group m-t-10">
+            <button class="btn btn-sm btn-default additem" data-bmid="{!! $field['rand'] !!}" type="button"><i
+                    class="la la-plus"></i> {{$field['add_label']}}</button>
+        </div>
+
+        <div class="clearfix"></div>
+
+        {{-- HINT --}}
+        @if (isset($field['hint']))
+            <p class="help-block">{!! $field['hint'] !!}</p>
+        @endif
+        @include('crud::fields.inc.wrapper_end')
+    </div>
+</div>
+
+
+{{-- ########################################## --}}
+{{-- Extra CSS and JS for this particular field --}}
+{{-- If a field type is shown multiple times on a form, the CSS and JS will only be loaded once --}}
+@if ($crud->checkIfFieldIsFirstOfItsType($field))
+
+    {{-- FIELD CSS - will be loaded in the after_styles section --}}
+    @push('crud_fields_styles')
+        <link rel="stylesheet" type="text/css"
+              href="{{ vendor_asset('vendor/cubist/cms-back/bunchmultiple/bunchmultiple.css') }}">
+    @endpush
+
+    {{-- FIELD JS - will be loaded in the after_scripts section --}}
+    @push('crud_fields_scripts')
+        <script src="{{ vendor_asset('vendor/cubist/cms-back/sortable/sortable.js') }}"></script>
+        <script src="{{ vendor_asset('vendor/cubist/cms-back/bunchmultiple/bunchmultiple.js') }}"></script>
+    @endpush
+
+@endif
+{{-- End of Extra CSS and JS --}}
+{{-- ########################################## --}}
index dd08795f9086384079d07d62f23089b3758a6d5a..28b4133a96127b92de38b838fb74842e1e4eb5c9 100644 (file)
@@ -1,7 +1,7 @@
 @section('form_shortcut_m')
     @stack('form_shortcuts')
 @endsection
-<div class="col-md-4">
+<div style="flex: 0 0 300px">
     <div id="form_sidebar">
         @hasSection('form_shortcut_m')
             <style type="text/css">
@@ -48,6 +48,7 @@
                                     var r = this.getBoundingClientRect();
                                     $(this).css('max-height', hh - r.top - 30);
                                 });
+                                $("#form_sidebar").closest('.container-fluid').find('form .col-md-8.bold-labels').css('flex', '0 0 calc(100% - 300px)').css('max-width', null);
                             }
 
                             $(window).on('resize', formSidebarResize);