Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
added Creator CRUD and nested Creator Snippets CRUD
  • Loading branch information
tabacitu committed Dec 3, 2019
commit 16fc2fd7af4d3fe75a52e79448c9236a83bb5117
38 changes: 38 additions & 0 deletions app/Http/Controllers/Admin/CreatorCrudController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php

namespace App\Http\Controllers\Admin;

use App\Http\Requests\CreatorRequest;
use Backpack\CRUD\app\Http\Controllers\CrudController;
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;

/**
* Class CreatorCrudController
* @package App\Http\Controllers\Admin
* @property-read CrudPanel $crud
*/
class CreatorCrudController extends CrudController
{
use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;

public function setup()
{
$this->crud->setModel('App\Models\Creator');
$this->crud->setRoute(config('backpack.base.route_prefix') . '/creator');
$this->crud->setEntityNameStrings('creator', 'creators');
}

protected function setupListOperation()
{
$this->crud->addColumn('name');
$this->crud->addColumn([
'type' => 'relationship_count',
'name' => 'snippets',
'label' => 'Snippets',
'suffix' => ' snippets',
'link' => function($entry) {
return backpack_url('creator/'.$entry->id.'/snippet');
}
]);
}
}
33 changes: 33 additions & 0 deletions app/Http/Controllers/Admin/CreatorSnippetCrudController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?php

namespace App\Http\Controllers\Admin;

use App\Http\Requests\SnippetRequest;
use Backpack\CRUD\app\Http\Controllers\CrudController;
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;

/**
* Class SnippetCrudController
* @package App\Http\Controllers\Admin
* @property-read CrudPanel $crud
*/
class CreatorSnippetCrudController extends SnippetCrudController
{
use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation;
use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation;

public function setup()
{
$user_id = \Route::current()->parameter('user_id');

$this->crud->setModel('App\Models\Snippet');
$this->crud->setRoute(config('backpack.base.route_prefix') . '/creator/'.$user_id.'/snippet');
$this->crud->setEntityNameStrings('snippet', 'snippets');

// filter List operation (with search) to only show this users' entries
$this->crud->addClause('where', 'created_by', $user_id);
}
}
38 changes: 38 additions & 0 deletions app/Http/Controllers/Admin/MySnippetCrudController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php

namespace App\Http\Controllers\Admin;

use App\Http\Requests\SnippetRequest;
use Backpack\CRUD\app\Http\Controllers\CrudController;
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;

/**
* Class SnippetCrudController
* @package App\Http\Controllers\Admin
* @property-read CrudPanel $crud
*/
class MySnippetCrudController extends SnippetCrudController
{
use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation;
use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation;

public function setup()
{
$this->crud->setModel('App\Models\Snippet');
$this->crud->setRoute(config('backpack.base.route_prefix') . '/my-snippet');
$this->crud->setEntityNameStrings('snippet', 'snippets');

// filter List operation (with search) to only show this users' entries
$this->crud->addClause('where', 'created_by', backpack_auth()->user()->id);

// if the user tries to access somone else's entries, block him
$entry = $this->crud->getCurrentEntry();

if ($entry && $entry->created_by != backpack_auth()->user()->id) {
abort(403, "You don't have access to this entry.");
}
}
}
56 changes: 56 additions & 0 deletions app/Http/Requests/CreatorRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
<?php

namespace App\Http\Requests;

use App\Http\Requests\Request;
use Illuminate\Foundation\Http\FormRequest;

class CreatorRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
// only allow updates if the user is logged in
return backpack_auth()->check();
}

/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
// 'name' => 'required|min:5|max:255'
];
}

/**
* Get the validation attributes that apply to the request.
*
* @return array
*/
public function attributes()
{
return [
//
];
}

/**
* Get the validation messages that apply to the request.
*
* @return array
*/
public function messages()
{
return [
//
];
}
}
25 changes: 25 additions & 0 deletions app/Models/Creator.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?php

namespace App\Models;

use Backpack\CRUD\app\Models\Traits\CrudTrait;
use Backpack\CRUD\app\Models\Traits\InheritsRelationsFromParentModel;

class Creator extends BackpackUser
{
use InheritsRelationsFromParentModel;
use CrudTrait;

protected $table = 'users';

/*
|--------------------------------------------------------------------------
| RELATIONS
|--------------------------------------------------------------------------
*/

public function snippets()
{
return $this->hasMany('App\Models\Snippet', 'created_by');
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,8 @@
<li class="nav-item"><a class="nav-link" href="{{ backpack_url('icon') }}"><i class="nav-icon fa fa-info-circle"></i> <span>Icons</span></a></li>
<li class="nav-item"><a class="nav-link" href="{{ backpack_url('product') }}"><i class="nav-icon fa fa-shopping-cart"></i> <span>Products</span></a></li>

<li class='nav-item'><a class='nav-link' href='{{ backpack_url('snippet') }}'><i class='nav-icon fa fa-question'></i> Snippets</a></li>

<li class="nav-title">Filtered or Nested</li>
<li class='nav-item'><a class='nav-link' href='{{ backpack_url('snippet') }}'><i class='nav-icon fa fa-question'></i> All Snippets</a></li>
<li class='nav-item'><a class='nav-link' href='{{ backpack_url('my-snippet') }}'><i class='nav-icon fa fa-question'></i> My Snippets</a></li>
<li class='nav-item'><a class='nav-link' href='{{ backpack_url('creator') }}'><i class='nav-icon fa fa-question'></i> Creator Snippets</a></li>
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{{-- snippets column - used to show Nested CRUDs inside Backpack Demo --}}
@php
$value = $entry->{$column['name']}->count();
$link = isset($column['link']) ? $column['link']($entry) : false;
$target = isset($column['target']) ? $column['target'] : false;
@endphp

<a {{ $link ? " href=$link": "" }} {{ $target ? " target=$target" : '' }}>{{ (array_key_exists('prefix', $column) ? $column['prefix'] : '').str_limit(strip_tags($value), array_key_exists('limit', $column) ? $column['limit'] : 40, "[...]").(array_key_exists('suffix', $column) ? $column['suffix'] : '') }}</a>
16 changes: 14 additions & 2 deletions routes/backpack/custom.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,24 @@
Route::crud('icon', 'IconCrudController');
Route::crud('product', 'ProductCrudController');

// ---------------------
// Backpack Nested CRUDs
// ---------------------
Route::crud('snippet', 'SnippetCrudController');
Route::crud('my-snippet', 'MySnippetCrudController');

Route::crud('creator', 'CreatorCrudController');
Route::group(['prefix' => 'creator/{user_id}'], function() {
Route::crud('snippet', 'CreatorSnippetCrudController');
});

// ---------------------------
// Backpack DEMO Custom Routes
// Prevent people from doing nasty stuff in the online demo
// ---------------------------
if (app('env') == 'production') {
// disable delete and bulk delete for all CRUDs
$cruds = ['article', 'category', 'tag', 'monster', 'icon', 'product', 'page', 'menu-item', 'user', 'role', 'permission'];
$cruds = ['article', 'category', 'tag', 'monster', 'icon', 'product', 'page', 'menu-item', 'user', 'role', 'permission', 'snippet', 'my-snippet', 'creator', 'creator/{user_id}/snippet'];
foreach ($cruds as $name) {
Route::delete($name.'/{id}', function () {
return false;
Expand All @@ -36,5 +47,6 @@
});
}
}
Route::crud('snippet', 'SnippetCrudController');


}); // this should be the absolute last line of this file