$route = $model->getOption('route', $model->getOption('name'));
$controller = $model->getControllerClass();
- $this->_routes[] = 'CRUD::resource(\'' . $route . '\', \'' . $controller . '\')->with(function () {
- Route::match([\'post\'], \'' . $route . '/{id}/media\', \'' . $controller . '@uploadMedia\');
- Route::match([\'delete\'], \'' . $route . '/{id}/media/{mediaId}\', \'' . $controller . '@deleteMedia\');
- Route::match([\'post\'], \'' . $route . '/{id}/media/reorder\', \'' . $controller . '@reorderMedia\');
- });';
+ $this->_routes[] = 'new \Cubist\Backpack\CubistCrudRouter(\'' . $route . '\', \'' . $controller . '\', []);';
}
-
}
namespace Cubist\Backpack;
use Backpack\CRUD\CrudPanel;
-use Cubist\Backpack\app\Magic\Models\CubistMagicModel;
+use Cubist\Backpack\app\Magic\Models\CubistMagicAbstractModel;
/**
- * @property CubistMagicModel $model
+ * @property CubistMagicAbstractModel $model
*/
/**
- * @property CubistMagicModel $entry
+ * @property CubistMagicAbstractModel $entry
*/
class CubistCrudPanel extends CrudPanel
{
--- /dev/null
+<?php
+
+
+namespace Cubist\Backpack;
+
+use Backpack\CRUD\CrudRouter;
+
+use Illuminate\Support\Facades\Route;
+
+class CubistCrudRouter extends CrudRouter
+{
+ public function __construct($name, $controller, $options)
+ {
+ parent::__construct($name, $controller, $options);
+
+ Route::post($this->name . '/bulk-publish', [
+ 'as' => 'crud.' . $this->name . '.bulkPublish',
+ 'uses' => $this->controller . '@bulkPublish',
+ ]);
+
+ Route::post($this->name . '/bulk-offline', [
+ 'as' => 'crud.' . $this->name . '.bulkOffline',
+ 'uses' => $this->controller . '@bulkOffline',
+ ]);
+
+ Route::match(['post'], $this->name . '/{id}/media', $this->controller . 'CrudController@uploadMedia');
+ Route::match(['delete'], $this->name . '/{id}/media/{mediaId}', $this->controller . 'CrudController@deleteMedia');
+ Route::match(['post'], $this->name . '/{id}/media/reorder', $this->controller . 'CrudController@reorderMedia');
+ }
+}
use Cubist\Backpack\app\Magic\Requests\CubistMagicRequest;
use Cubist\Backpack\app\Magic\Requests\CubistMagicStoreRequest;
use Cubist\Backpack\app\Magic\Requests\CubistMagicUpdateRequest;
+use Cubist\Backpack\CubistBackpackServiceProvider;
use Gaspertrix\Backpack\DropzoneField\Traits\HandleAjaxMedia;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Cache;
$this->_postSetModel();
if ($this->_bulk) {
$this->crud->enableBulkActions();
+ $this->crud->addButton('bottom', 'bulk_publish', 'view', CubistBackpackServiceProvider::NAMESPACE . '::buttons.bulk_publish', 'begining');
+ $this->crud->addButton('bottom', 'bulk_offline', 'view', CubistBackpackServiceProvider::NAMESPACE . '::buttons.bulk_offline', 'begining');
if ($this->_clonable) {
$this->crud->addButton('bottom', 'bulk_clone', 'view', 'crud::buttons.bulk_clone', 'beginning');
}
$this->crud->addBulkDeleteButton();
+
}
$this->crud->setRoute(config('backpack.base.route_prefix') . '/' . $this->_routeURL);
$this->crud->setEntityNameStrings($this->_singular, $this->_plural);
return parent::create();
}
+ protected function _bulkChangeOnlineStatus($status)
+ {
+ $this->crud->hasAccessOrFail('update');
+
+ $entries = $this->request->input('entries');
+ foreach ($entries as $key => $id) {
+ if ($entry = $this->crud->model->find($id)) {
+ /** @var $entry CubistMagicAbstractModel */
+ $entry->setAttribute('status', $status);
+ }
+ }
+
+ return $entries;
+ }
+
+ public function bulkPublish()
+ {
+ return $this->_bulkChangeOnlineStatus(true);
+ }
+
+ public function bulkOffline()
+ {
+ return $this->_bulkChangeOnlineStatus(false);
+ }
+
public function saveReorder()
{
$this->_forgetCache();
return Str::slug(implode('-', $slug));
}
}
+ return Str::slug($this->getAttribute('id'));
}
public function getOption($key, $default = null)
'namespace' => 'App\Http\Controllers\Admin',
], function () { // custom admin routes
_CUSTOM_
-}); // this should be the absolute last line of this file
+});
--- /dev/null
+@if ($crud->hasAccess('update') && $crud->bulk_actions)
+ <a href="javascript:void(0)" onclick="bulkOfflineEntries(this)" class="btn btn-sm btn-default bulk-button"><i class="fa fa-times-circle"></i> Put offline</a>
+@endif
+
+@push('after_scripts')
+<script>
+ if (typeof bulkOfflineEntries != 'function') {
+ function bulkOfflineEntries(button) {
+
+ if (typeof crud.checkedItems === 'undefined' || crud.checkedItems.length == 0)
+ {
+ new PNotify({
+ title: "{{ trans('backpack::crud.bulk_no_entries_selected_title') }}",
+ text: "{{ trans('backpack::crud.bulk_no_entries_selected_message') }}",
+ type: "warning"
+ });
+
+ return;
+ }
+
+ var message = "Are you sure you want to put offline these :number entries?";
+ message = message.replace(":number", crud.checkedItems.length);
+
+ // show confirm message
+ if (confirm(message) == true) {
+ var ajax_calls = [];
+ var clone_route = "{{ url($crud->route) }}/bulk-offline";
+
+ // submit an AJAX delete call
+ $.ajax({
+ url: clone_route,
+ type: 'POST',
+ data: { entries: crud.checkedItems },
+ success: function(result) {
+ // Show an alert with the result
+ new PNotify({
+ title: "Entries offline",
+ text: crud.checkedItems.length+" entries have been put offline.",
+ type: "success"
+ });
+
+ crud.checkedItems = [];
+ crud.table.ajax.reload();
+ },
+ error: function(result) {
+ // Show an alert with the result
+ new PNotify({
+ title: "Publishing failed",
+ text: "One or more entries could not be put offline. Please try again.",
+ type: "warning"
+ });
+ }
+ });
+ }
+ }
+ }
+</script>
+@endpush
--- /dev/null
+@if ($crud->hasAccess('update') && $crud->bulk_actions)
+ <a href="javascript:void(0)" onclick="bulkPublishEntries(this)" class="btn btn-sm btn-default bulk-button"><i class="fa fa-check-circle"></i> Publish</a>
+@endif
+
+@push('after_scripts')
+<script>
+ if (typeof bulkPublishEntries != 'function') {
+ function bulkPublishEntries(button) {
+
+ if (typeof crud.checkedItems === 'undefined' || crud.checkedItems.length == 0)
+ {
+ new PNotify({
+ title: "{{ trans('backpack::crud.bulk_no_entries_selected_title') }}",
+ text: "{{ trans('backpack::crud.bulk_no_entries_selected_message') }}",
+ type: "warning"
+ });
+
+ return;
+ }
+
+ var message = "Are you sure you want to publish these :number entries?";
+ message = message.replace(":number", crud.checkedItems.length);
+
+ // show confirm message
+ if (confirm(message) == true) {
+ var ajax_calls = [];
+ var publish_route = "{{ url($crud->route) }}/bulk-publish";
+
+ // submit an AJAX delete call
+ $.ajax({
+ url: publish_route,
+ type: 'POST',
+ data: { entries: crud.checkedItems },
+ success: function(result) {
+ // Show an alert with the result
+ new PNotify({
+ title: "Entries published",
+ text: crud.checkedItems.length+" entries have been published.",
+ type: "success"
+ });
+
+ crud.checkedItems = [];
+ crud.table.ajax.reload();
+ },
+ error: function(result) {
+ // Show an alert with the result
+ new PNotify({
+ title: "Publishing failed",
+ text: "One or more entries could not be published. Please try again.",
+ type: "warning"
+ });
+ }
+ });
+ }
+ }
+ }
+</script>
+@endpush