]> _ Git - pmi.git/commitdiff
wip #2628 @2
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Fri, 15 Mar 2019 15:02:36 +0000 (16:02 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Fri, 15 Mar 2019 15:02:36 +0000 (16:02 +0100)
15 files changed:
.env
.env.production
app/PageTemplates.php
app/Templates/Aboutus.php [new file with mode: 0644]
app/Templates/Base.php [new file with mode: 0644]
app/Templates/Home.php [new file with mode: 0644]
app/Templates/Services.php [new file with mode: 0644]
composer.lock
config/backpack/pagemanager.php
database/migrations/2015_09_07_190535_create_languages_table.php [new file with mode: 0644]
database/migrations/2015_09_10_124414_alter_languages_table.php [new file with mode: 0644]
resources/views/pages/about_us.blade.php [deleted file]
resources/views/pages/aboutus.blade.php [new file with mode: 0644]
resources/views/vendor/backpack/crud/fields/select2_from_ajax.blade.php [new file with mode: 0644]
resources/views/vendor/backpack/crud/fields/select2_from_ajax_multiple.blade.php [new file with mode: 0644]

diff --git a/.env b/.env
index b38e991de6593dffd84eefbd2910fcbf6cee541b..daa378783190231a23364144cc71891537b2171d 100644 (file)
--- a/.env
+++ b/.env
@@ -2,7 +2,7 @@ APP_NAME=PMI
 APP_ENV=dev
 APP_KEY=base64:/Jmlg7TepI/inQ4KJ3VF0YVTqghRGvvBrnDI7NkUk94=
 APP_DEBUG=true
-APP_URL=https://dev.pmi.cubedesigners.com
+APP_URL=https://pmi.dev.cubedesigners.com
 
 APP_LOG=daily
 
index 7e233977b15105183ce620c40d56aa3452691faa..bd70f010b7a6ab7540978cdb954ee15480117814 100644 (file)
@@ -2,7 +2,7 @@ APP_NAME=PMI
 APP_ENV=production
 APP_KEY=base64:/Jmlg7TepI/inQ4KJ3VF0YVTqghRGvvBrnDI7NkUk94=
 APP_DEBUG=true
-APP_URL=https://dev.pmi.cubedesigners.com
+APP_URL=https://pmi.dev.cubedesigners.com
 
 LOG_CHANNEL=stack
 
index 0bf392cdd14bfb0a0f10bf4175feeece4161edb4..18e96c0501c58dba8474648552d781dae52c72a1 100644 (file)
@@ -20,96 +20,5 @@ trait PageTemplates
     | - page slug
     */
 
-    protected function _common()
-    {
-        $this->crud->addField([
-            'name' => 'status',
-            'type' => 'select_from_array',
-            'default' => '0',
-            'label' => __('Status'),
-            'options' => ['0' => __('Offline'),'1' => __('Published')],
-            'fake' => true,
-            'store_in' => 'extras',
 
-        ]);
-        $this->_seo();
-    }
-
-    protected function _seo()
-    {
-        $this->crud->addField([   // CustomHTML
-            'name' => 'metas_separator',
-            'type' => 'custom_html',
-            'value' => '<br><h2>' . trans('SEO') . '</h2><hr>',
-            'tab' => 'Meta // SEO'
-        ]);
-        $this->crud->addField([
-            'name' => 'meta_title',
-            'label' => trans('backpack::pagemanager.meta_title'),
-            'type' => 'text',
-            'fake' => true,
-            'hint' => trans('If empty, page title is used.') . ' ' . __('Recommended length: 60 chars'),
-            'store_in' => 'extras',
-            'tab' => 'Meta // SEO',
-        ]);
-        $this->crud->addField([
-            'name' => 'meta_description',
-            'label' => trans('backpack::pagemanager.meta_description'),
-            'type' => 'textarea',
-            'fake' => true,
-            'store_in' => 'extras',
-            'hint' => __('Recommended length: 160 chars'),
-            'tab' => 'Meta // SEO',
-        ]);
-        $this->crud->addField([
-            'name' => 'robots',
-            'label' => __('Allow page index by search engines'),
-            'type' => 'checkbox',
-            'default' => true,
-            'fake' => true,
-            'store_in' => 'extras',
-            'tab' => 'Meta // SEO',
-        ]);
-    }
-
-    private function home()
-    {
-        $this->_common();
-
-        $this->crud->addField([
-            'name' => 'slideshow',
-            'type' => 'list_model',
-            'model' => 'slideshow',
-            'label' => __('Slideshow'),
-            'fake' => true,
-            'store_in' => 'extras',
-        ]);
-    }
-
-    private function services()
-    {
-        $this->_common();
-        $this->crud->addField([   // CustomHTML
-            'name' => 'content_separator',
-            'type' => 'custom_html',
-            'value' => '<br><h2>' . trans('backpack::pagemanager.content') . '</h2><hr>',
-        ]);
-        $this->crud->addField([
-            'name' => 'content',
-            'label' => trans('backpack::pagemanager.content'),
-            'type' => 'simplemde',
-            'placeholder' => trans('backpack::pagemanager.content_placeholder'),
-        ]);
-    }
-
-    private function about_us()
-    {
-        $this->_common();
-        $this->crud->addField([
-            'name' => 'content',
-            'label' => trans('backpack::pagemanager.content'),
-            'type' => 'simplemde',
-            'placeholder' => trans('backpack::pagemanager.content_placeholder'),
-        ]);
-    }
 }
diff --git a/app/Templates/Aboutus.php b/app/Templates/Aboutus.php
new file mode 100644 (file)
index 0000000..5406dd5
--- /dev/null
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Created by IntelliJ IDEA.
+ * User: Vincent
+ * Date: 14/03/2019
+ * Time: 18:25
+ */
+
+namespace App\Templates;
+
+class Aboutus extends Base
+{
+    public function showInDropDown()
+    {
+        return true;
+    }
+
+    public function getName()
+    {
+        return 'Qui sommes nous ?';
+    }
+
+
+    public function init()
+    {
+        parent::init();
+        $this->addField([
+            'name' => 'content',
+            'label' => trans('backpack::pagemanager.content'),
+            'type' => 'simplemde',
+            'placeholder' => trans('backpack::pagemanager.content_placeholder'),
+        ]);
+    }
+
+
+}
diff --git a/app/Templates/Base.php b/app/Templates/Base.php
new file mode 100644 (file)
index 0000000..b8332af
--- /dev/null
@@ -0,0 +1,20 @@
+<?php
+
+namespace App\Templates;
+
+use Cubist\Backpack\app\Template\TemplateAbstract;
+
+class Base extends TemplateAbstract
+{
+    public function init()
+    {
+        parent::init();
+
+    }
+
+    public function showInDropDown()
+    {
+        return false;
+    }
+
+}
diff --git a/app/Templates/Home.php b/app/Templates/Home.php
new file mode 100644 (file)
index 0000000..3f1d858
--- /dev/null
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Created by IntelliJ IDEA.
+ * User: Vincent
+ * Date: 14/03/2019
+ * Time: 18:24
+ */
+
+namespace App\Templates;
+
+
+class Home extends Base
+{
+
+    public function showInDropDown()
+    {
+        return true;
+    }
+
+    public function getName()
+    {
+        return 'Accueil';
+    }
+
+
+    public function init()
+    {
+        parent::init();
+        $this->addField([
+            'name' => 'slideshow',
+            'type' => 'list_model',
+            'model' => 'slideshow',
+            'label' => __('Slideshow'),
+        ]);
+    }
+}
diff --git a/app/Templates/Services.php b/app/Templates/Services.php
new file mode 100644 (file)
index 0000000..bbaa2b8
--- /dev/null
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Created by IntelliJ IDEA.
+ * User: Vincent
+ * Date: 14/03/2019
+ * Time: 18:23
+ */
+
+namespace App\Templates;
+
+
+class Services extends Base
+{
+    public function showInDropDown()
+    {
+        return true;
+    }
+
+    public function getName()
+    {
+        return 'Services';
+    }
+
+    public function init()
+    {
+        parent::init();
+    }
+}
index 84ffec0805ebcbe8fe6357132a8849de4fba12ce..a0f080bf81d3403f37ca9f34ec632699ddb38735 100644 (file)
         },
         {
             "name": "backpack/crud",
-            "version": "3.6.5",
+            "version": "3.6.6",
             "source": {
                 "type": "git",
                 "url": "https://github.com/Laravel-Backpack/CRUD.git",
-                "reference": "39501b8181512795e6d17cb56b88599b19ed4cd2"
+                "reference": "bb57131e6b8bc0c94c13173edc66f3ebae093820"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Laravel-Backpack/CRUD/zipball/39501b8181512795e6d17cb56b88599b19ed4cd2",
-                "reference": "39501b8181512795e6d17cb56b88599b19ed4cd2",
+                "url": "https://api.github.com/repos/Laravel-Backpack/CRUD/zipball/bb57131e6b8bc0c94c13173edc66f3ebae093820",
+                "reference": "bb57131e6b8bc0c94c13173edc66f3ebae093820",
                 "shasum": ""
             },
             "require": {
                 "read",
                 "update"
             ],
-            "time": "2019-03-12T08:39:57+00:00"
+            "time": "2019-03-13T09:20:59+00:00"
         },
         {
             "name": "backpack/langfilemanager",
             "source": {
                 "type": "git",
                 "url": "git://git.cubedesigners.com/cubist_cms-back.git",
-                "reference": "7f6948908b15ef4f07c126165ac6e42961b1fb07"
+                "reference": "8273ed9563659d6cc816178bb6ed101358108ef1"
             },
             "dist": {
                 "type": "tar",
-                "url": "https://composer.cubedesigners.com/dist/cubist/cms-back/cubist-cms-back-dev-master-b3d9ce.tar",
-                "reference": "7f6948908b15ef4f07c126165ac6e42961b1fb07",
-                "shasum": "9f58d38bada58aa1a2dcb25c8aee0d089c082c68"
+                "url": "https://composer.cubedesigners.com/dist/cubist/cms-back/cubist-cms-back-dev-master-9dc4ae.tar",
+                "reference": "8273ed9563659d6cc816178bb6ed101358108ef1",
+                "shasum": "dfc388a6d788aa0d2809c424337605092253ce1d"
             },
             "require": {
                 "backpack/backupmanager": "^1.4",
                 "fideloper/proxy": "^4.0",
                 "laravel/tinker": "^1.0",
                 "php": ">=7.1.3",
-                "predis/predis": "^1.1"
+                "predis/predis": "^1.1",
+                "webfactor/laravel-backpack-instant-fields": "^2.1.2"
             },
             "require-dev": {
                 "backpack/generators": "^1.2"
                 }
             ],
             "description": "Cubist Backpack extension",
-            "time": "2019-03-12T17:54:05+00:00"
+            "time": "2019-03-15T15:00:31+00:00"
         },
         {
             "name": "cubist/cms-front",
             ],
             "time": "2019-03-06T09:39:45+00:00"
         },
+        {
+            "name": "webfactor/laravel-backpack-instant-fields",
+            "version": "2.1.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/webfactor/laravel-backpack-instant-fields.git",
+                "reference": "58c12ed666917e21d8a2e7e226eccd70daa3dc1d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/webfactor/laravel-backpack-instant-fields/zipball/58c12ed666917e21d8a2e7e226eccd70daa3dc1d",
+                "reference": "58c12ed666917e21d8a2e7e226eccd70daa3dc1d",
+                "shasum": ""
+            },
+            "require": {
+                "illuminate/database": "~5.5.0|~5.6.0|~5.7.0|~5.8.0",
+                "illuminate/support": "~5.5.0|~5.6.0|~5.7.0|~5.8.0",
+                "php": "~7.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~6.0",
+                "squizlabs/php_codesniffer": "^2.3"
+            },
+            "type": "library",
+            "extra": {
+                "laravel": {
+                    "providers": [
+                        "Webfactor\\Laravel\\Backpack\\InstantFields\\InstantFieldsServiceProvider"
+                    ]
+                },
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Webfactor\\Laravel\\Backpack\\InstantFields\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Thomas Swonke",
+                    "email": "thomas.swonke@webfactor.de",
+                    "homepage": "http://webfactor.de",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Instant fields to create/edit/delete related entities on the fly in Laravel Backpack",
+            "homepage": "https://github.com/webfactor/laravel-backpack-instant-fields",
+            "keywords": [
+                "Webfactor",
+                "backpack",
+                "instant fields",
+                "laravel",
+                "modal",
+                "on-the-fly"
+            ],
+            "time": "2019-03-06T13:42:05+00:00"
+        },
         {
             "name": "zendframework/zend-filter",
             "version": "2.9.1",
index 39c7189ad1c30f56bec0fb31d22fd22eb683821c..96639e2f86e5508224810b84b79d136e39b28089 100644 (file)
@@ -2,8 +2,8 @@
 
 return [
     // Change this class if you wish to extend PageCrudController
-    'admin_controller_class' => 'Backpack\PageManager\app\Http\Controllers\Admin\PageCrudController',
+    'admin_controller_class' => 'Cubist\Backpack\app\Http\Controllers\CubistPageCrudController',
 
     // Change this class if you wish to extend the Page model
-    'page_model_class'       => 'Backpack\PageManager\app\Models\Page',
+    'page_model_class' => 'Backpack\PageManager\app\Models\Page',
 ];
diff --git a/database/migrations/2015_09_07_190535_create_languages_table.php b/database/migrations/2015_09_07_190535_create_languages_table.php
new file mode 100644 (file)
index 0000000..afd376c
--- /dev/null
@@ -0,0 +1,36 @@
+<?php
+
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class CreateLanguagesTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('languages', function (Blueprint $table) {
+            $table->increments('id');
+            $table->string('name', 100);
+            $table->string('flag', 100)->nullable();
+            $table->string('abbr', 3);
+            $table->tinyInteger('active')->unsigned()->default('1');
+            $table->tinyInteger('default')->unsigned()->default('0');
+            $table->timestamps();
+            $table->softDeletes();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::drop('languages');
+    }
+}
diff --git a/database/migrations/2015_09_10_124414_alter_languages_table.php b/database/migrations/2015_09_10_124414_alter_languages_table.php
new file mode 100644 (file)
index 0000000..f2980fd
--- /dev/null
@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+
+class AlterLanguagesTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('languages', function ($table) {
+            $table->string('script', 20)->nullable()->after('abbr');
+            $table->string('native', 20)->nullable()->after('script');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('languages', function ($table) {
+            $table->dropColumn('script');
+            $table->dropColumn('native');
+        });
+    }
+}
diff --git a/resources/views/pages/about_us.blade.php b/resources/views/pages/about_us.blade.php
deleted file mode 100644 (file)
index 9da80c4..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-@extends('layouts.app')
-
diff --git a/resources/views/pages/aboutus.blade.php b/resources/views/pages/aboutus.blade.php
new file mode 100644 (file)
index 0000000..9da80c4
--- /dev/null
@@ -0,0 +1,2 @@
+@extends('layouts.app')
+
diff --git a/resources/views/vendor/backpack/crud/fields/select2_from_ajax.blade.php b/resources/views/vendor/backpack/crud/fields/select2_from_ajax.blade.php
new file mode 100644 (file)
index 0000000..5429079
--- /dev/null
@@ -0,0 +1,209 @@
+<!-- select2 from ajax -->
+@php
+    $connected_entity = new $field['model'];
+    $connected_entity_key_name = $connected_entity->getKeyName();
+    $old_value = old(square_brackets_to_dots($field['name'])) ?? $field['value'] ?? $field['default'] ?? false;
+@endphp
+
+<div @include('crud::inc.field_wrapper_attributes') >
+    <label>{!! $field['label'] !!}</label>
+    <?php $entity_model = $crud->model; ?>
+
+    <div class="input-group">
+        <select
+            class="form-control"
+            name="{{ $field['name'] }}"
+            style="width: 100%"
+            id="select2_ajax_{{ $field['name'] }}"
+            @include('crud::inc.field_attributes', ['default_class' =>  'form-control'])
+        >
+
+            @if ($old_value)
+                @php
+                    $item = $connected_entity->find($old_value);
+                @endphp
+                @if ($item)
+
+                    {{-- allow clear --}}
+                    @if ($entity_model::isColumnNullable($field['name']))
+                        <option value="" selected>
+                            {{ $field['placeholder'] }}
+                        </option>
+                    @endif
+
+                    <option value="{{ $item->getKey() }}" selected>
+                        {{ $item->{isset($field['option_label']) ? $field['option_label'] : $field['attribute']} }}
+                    </option>
+                @endif
+            @endif
+        </select>
+
+        @if ($field['on_the_fly']['create'] ?? true)
+            @include('webfactor::fields.inc.button-add')
+        @endif
+
+        @if ($field['on_the_fly']['edit'] ?? true)
+            @include('webfactor::fields.inc.button-edit')
+        @endif
+
+        @if ($field['on_the_fly']['delete'] ?? true)
+            @include('webfactor::fields.inc.button-delete')
+        @endif
+    </div>
+
+    {{-- HINT --}}
+    @if (isset($field['hint']))
+        <p class="help-block">{!! $field['hint'] !!}</p>
+    @endif
+</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')
+        <!-- include select2 css-->
+        <link href="{{ asset('vendor/adminlte/bower_components/select2/dist/css/select2.min.css') }}" rel="stylesheet"
+              type="text/css"/>
+        <link
+            href="https://cdnjs.cloudflare.com/ajax/libs/select2-bootstrap-theme/0.1.0-beta.10/select2-bootstrap.min.css"
+            rel="stylesheet" type="text/css"/>
+        {{-- allow clear --}}
+        @if ($entity_model::isColumnNullable($field['name']))
+            <style type="text/css">
+                .select2-selection__clear::after {
+                    content: ' {{ trans('backpack::crud.clear') }}';
+                }
+            </style>
+        @endif
+    @endpush
+
+    {{-- FIELD JS - will be loaded in the after_scripts section --}}
+    @push('crud_fields_scripts')
+        <!-- include select2 js-->
+        <script src="{{ asset('vendor/adminlte/bower_components/select2/dist/js/select2.min.js') }}"></script>
+    @endpush
+
+@endif
+
+<!-- include field specific select2 js-->
+@push('crud_fields_scripts')
+    <script>
+        jQuery(document).ready(function ($) {
+
+            // load create modal content
+            $("#{{ $field['on_the_fly']['entity'] ?? 'ajax_entity' }}_create_modal").on('show.bs.modal', function (e) {
+                var loadurl = $(e.relatedTarget).data('load-url');
+
+                $(this).find('.modal-content').load(loadurl);
+            });
+
+            // load edit/delete modal content
+            $(
+                "#{{ $field['on_the_fly']['entity'] ?? 'ajax_entity' }}_edit_modal," +
+                "#{{ $field['on_the_fly']['entity'] ?? 'ajax_entity' }}_delete_modal"
+            ).on('show.bs.modal', function (e) {
+                var button = e.relatedTarget;
+
+                if ($(button).hasClass('disabled')) {
+                    e.preventDefault();
+                    e.stopImmediatePropagation();
+                } else {
+                    var loadurl = $(button).data('load-url');
+                    var id = $(button).data('id');
+
+                    $(this).find('.modal-content').load(loadurl + '&id=' + id);
+                }
+            });
+
+            // update id for edit/delete modal url
+            $("#select2_ajax_{{ $field['name'] }}").change(function (e) {
+                var entry = $("#select2_ajax_{{ $field['name'] }}").select2('data')[0];
+                var editButton = $("[data-target='#{{ $field['on_the_fly']['entity'] ?? 'ajax_entity' }}_edit_modal']");
+                var deleteButton = $("[data-target='#{{ $field['on_the_fly']['entity'] ?? 'ajax_entity' }}_delete_modal']");
+
+                if (entry) {
+                    editButton.data("id", entry.id).removeClass('disabled');
+                    deleteButton.data("id", entry.id).removeClass('disabled');
+                } else {
+                    editButton.data("id", "").addClass('disabled');
+                    deleteButton.data("id", "").addClass('disabled');
+                }
+
+            })
+
+            // trigger select2 for each untriggered select2 box
+            $("#select2_ajax_{{ $field['name'] }}").each(function (i, obj) {
+                var form = $(obj).closest('form');
+
+                if (!$(obj).hasClass("select2-hidden-accessible")) {
+
+                    $(obj).select2({
+                        theme: 'bootstrap',
+                        multiple: false,
+                        placeholder: "{{ $field['placeholder'] }}",
+                        minimumInputLength: "{{ $field['minimum_input_length'] }}",
+
+                        {{-- allow clear --}}
+                            @if ($entity_model::isColumnNullable($field['name']))
+                        allowClear: true,
+                        @endif
+                        ajax: {
+                            url: "/{{ ltrim($field['data_source'] ?? $crud->getRoute().'/ajax', '/') }}",
+                            type: '{{ $field['method'] ?? 'POST' }}',
+                            dataType: 'json',
+                            quietMillis: 250,
+                            data: function (params) {
+                                return {
+                                    q: params.term, // search term
+                                    field: "{{ $field['name'] }}",
+                                    page: params.page,
+                                    form: form.serializeArray()  // all other form inputs
+                                };
+                            },
+                            processResults: function (data, params) {
+                                params.page = params.page || 1;
+
+                                var result = {
+                                    results: $.map(data.data, function (item) {
+                                        return {
+                                            text: item["{{ isset($field['option_label']) ? $field['option_label'] : $field['attribute'] }}"],
+                                            id: item["{{ $connected_entity_key_name }}"]
+                                        }
+                                    }),
+                                    more: data.current_page < data.last_page
+                                };
+
+                                return result;
+                            },
+                            cache: true
+                        },
+                    })
+                    {{-- allow clear --}}
+                    @if ($entity_model::isColumnNullable($field['name']))
+                        .on('select2:unselecting', function (e) {
+                            $(this).val('').trigger('change');
+                            // console.log('cleared! '+$(this).val());
+                            e.preventDefault();
+                        })
+                    @endif
+                    ;
+
+                }
+            });
+
+            @if (isset($field['dependencies']))
+            @foreach (array_wrap($field['dependencies']) as $dependency)
+            $('input[name={{ $dependency }}], select[name={{ $dependency }}], checkbox[name={{ $dependency }}], radio[name={{ $dependency }}], textarea[name={{ $dependency }}]').change(function () {
+                $("#select2_ajax_{{ $field['name'] }}").val(null).trigger("change");
+            });
+            @endforeach
+            @endif
+        });
+    </script>
+@endpush
+{{-- End of Extra CSS and JS --}}
+{{-- ########################################## --}}
diff --git a/resources/views/vendor/backpack/crud/fields/select2_from_ajax_multiple.blade.php b/resources/views/vendor/backpack/crud/fields/select2_from_ajax_multiple.blade.php
new file mode 100644 (file)
index 0000000..f08984d
--- /dev/null
@@ -0,0 +1,131 @@
+<!-- select2 from ajax multiple -->
+@php
+    $connected_entity = new $field['model'];
+    $connected_entity_key_name = $connected_entity->getKeyName();
+    $old_value = old(square_brackets_to_dots($field['name'])) ?? $field['value'] ?? $field['default'] ?? false;
+@endphp
+
+<div @include('crud::inc.field_wrapper_attributes') >
+    <label>{!! $field['label'] !!}</label>
+
+    <div class="input-group">
+        <select
+            name="{{ $field['name'] }}[]"
+            style="width: 100%"
+            id="select2_ajax_multiple_{{ $field['name'] }}"
+            @include('crud::inc.field_attributes', ['default_class' =>  'form-control'])
+            multiple>
+
+            @if ($old_value)
+                @foreach ($old_value as $item)
+                    @if (!is_object($item))
+                        @php
+                            $item = $connected_entity->find($item);
+                        @endphp
+                    @endif
+                    <option value="{{ $item->getKey() }}" selected>
+                        {{ $item->{isset($field['option_label']) ? $field['option_label'] : $field['attribute']} }}
+                    </option>
+                @endforeach
+            @endif
+        </select>
+
+        @if (isset($field['on_the_fly']))
+            @include('webfactor::fields.inc.button-add')
+        @endif
+    </div>
+
+    {{-- HINT --}}
+    @if (isset($field['hint']))
+        <p class="help-block">{!! $field['hint'] !!}</p>
+    @endif
+</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')
+        <!-- include select2 css-->
+        <link href="{{ asset('vendor/adminlte/bower_components/select2/dist/css/select2.min.css') }}" rel="stylesheet"
+              type="text/css"/>
+        <link
+            href="https://cdnjs.cloudflare.com/ajax/libs/select2-bootstrap-theme/0.1.0-beta.10/select2-bootstrap.min.css"
+            rel="stylesheet" type="text/css"/>
+    @endpush
+
+    {{-- FIELD JS - will be loaded in the after_scripts section --}}
+    @push('crud_fields_scripts')
+        <!-- include select2 js-->
+        <script src="{{ asset('vendor/adminlte/bower_components/select2/dist/js/select2.min.js') }}"></script>
+    @endpush
+
+@endif
+
+<!-- include field specific select2 js-->
+@push('crud_fields_scripts')
+    <script>
+        jQuery(document).ready(function ($) {
+            // load create modal content
+            $("#{{ $field['on_the_fly']['entity'] ?? 'ajax_entity' }}_create_modal").on('show.bs.modal', function (e) {
+                var loadurl = $(e.relatedTarget).data('load-url');
+                $(this).find('.modal-content').load(loadurl);
+            });
+
+            // trigger select2 for each untriggered select2 box
+            $("#select2_ajax_multiple_{{ $field['name'] }}").each(function (i, obj) {
+                var form = $(obj).closest('form');
+
+                if (!$(obj).hasClass("select2-hidden-accessible")) {
+                    $(obj).select2({
+                        theme: 'bootstrap',
+                        multiple: true,
+                        placeholder: "{{ $field['placeholder'] }}",
+                        minimumInputLength: "{{ $field['minimum_input_length'] }}",
+                        ajax: {
+                            url: "/{{ ltrim($field['data_source'] ?? $crud->getRoute().'/ajax', '/') }}",
+                            type: '{{ $field['method'] ?? 'POST' }}',
+                            dataType: 'json',
+                            quietMillis: 250,
+                            data: function (params) {
+                                return {
+                                    q: params.term, // search term
+                                    field: "{{ $field['name'] }}",
+                                    page: params.page,
+                                    form: form.serializeArray() // all other form inputs
+                                };
+                            },
+                            processResults: function (data, params) {
+                                params.page = params.page || 1;
+
+                                return {
+                                    results: $.map(data.data, function (item) {
+                                        return {
+                                            text: item["{{ isset($field['option_label']) ? $field['option_label'] : $field['attribute'] }}"],
+                                            id: item["{{ $connected_entity_key_name }}"]
+                                        }
+                                    }),
+                                    more: data.current_page < data.last_page
+                                };
+                            },
+                            cache: true
+                        },
+                    });
+                }
+            });
+
+            @if (isset($field['dependencies']))
+            @foreach (array_wrap($field['dependencies']) as $dependency)
+            $('input[name={{ $dependency }}], select[name={{ $dependency }}], checkbox[name={{ $dependency }}], radio[name={{ $dependency }}], textarea[name={{ $dependency }}]').change(function () {
+                $("#select2_ajax_multiple_{{ $field['name'] }}").val(null).trigger("change");
+            });
+            @endforeach
+            @endif
+        });
+    </script>
+@endpush
+{{-- End of Extra CSS and JS --}}
+{{-- ########################################## --}}