FEATURE: add permissions into widgets and fix few bugs
This commit is contained in:
@@ -71,13 +71,14 @@ abstract class BaseHandler implements BaseModuleHandler
|
||||
}
|
||||
}, 10, ['icon' => 'fa fa-fw fa-plus']);
|
||||
}
|
||||
|
||||
$sub->route('widgets.overview', trans('admin/mainMenu.widgetsOverview'), [], 20, ['icon' => 'fa fa-fw fa-list']);
|
||||
if ($user->can('manage', Widget::class)) {
|
||||
$sub->route('widgets.overview', trans('admin/mainMenu.widgetsOverview'), [], 20, ['icon' => 'fa fa-fw fa-list']);
|
||||
}
|
||||
|
||||
// menu for widget areas
|
||||
if ($user->can('manage', WidgetArea::class)) {
|
||||
$sub->dropdown(trans('admin/mainMenu.widgetAreas'), function ($sub) use ($user) {
|
||||
if ($user->can('create-widgetareas', WidgetArea::class)) {
|
||||
if ($user->can('create', WidgetArea::class)) {
|
||||
$sub->route('widgetareas.new', trans('admin/mainMenu.newWidgetArea'), [], 1, ['icon' => 'fa fa-fw fa-plus']);
|
||||
}
|
||||
$sub->route('widgetareas.overview', trans('admin/mainMenu.widgetAreaOverview'), [], 2, ['icon' => 'fa fa-fw fa-list']);
|
||||
@@ -126,7 +127,7 @@ abstract class BaseHandler implements BaseModuleHandler
|
||||
|
||||
if ($user->can('manage', Settings::class)) {
|
||||
$sub->route('settings.overview', trans('admin/mainMenu.settings'), [], 80, ['icon' => 'fa fa-fw fa-gear']);
|
||||
$sub->route('permissions.index', trans('admin/mainMenu.permissions'), [], 90, ['icon' => 'fa fa-fw fa-gear']);
|
||||
$sub->route('permissions.index', trans('admin/mainMenu.permissions'), [], 90, ['icon' => 'fa fa-fw fa-key']);
|
||||
}
|
||||
}, 10000, ['icon' => 'fa fa-fw fa-gears']);
|
||||
});
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace App\CMS\Handlers\Search;
|
||||
|
||||
use App\Models\Content\Content as ContentModel;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class Content extends Search
|
||||
{
|
||||
@@ -10,10 +13,15 @@ class Content extends Search
|
||||
*
|
||||
* @param string $term searched word
|
||||
*
|
||||
* @return array list of found objects
|
||||
* @return array|\Illuminate\Database\Eloquent\Collection|Collection|static[]
|
||||
*/
|
||||
public function search($term)
|
||||
{
|
||||
if (Auth::user()
|
||||
->cannot('manage', ContentModel::class)) {
|
||||
return new Collection();
|
||||
}
|
||||
|
||||
$token = $this->tokenize($term);
|
||||
|
||||
return ContentModel::where('pageContent', 'LIKE', $token)
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
<?php
|
||||
|
||||
namespace App\CMS\Handlers\Search;
|
||||
|
||||
use App\Models\FileManager\File;
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
class Files extends Search
|
||||
{
|
||||
@@ -24,6 +26,11 @@ class Files extends Search
|
||||
*/
|
||||
public function search($term)
|
||||
{
|
||||
if (\Auth::user()
|
||||
->cannot('manage', File::class)) {
|
||||
return new Collection();
|
||||
}
|
||||
|
||||
$token = $this->tokenize($term);
|
||||
|
||||
return File::where('original_filename', 'LIKE', $token)
|
||||
|
||||
@@ -3,11 +3,17 @@ namespace App\CMS\Handlers\Search\Presenters;
|
||||
|
||||
use App\CMS\Enumerations\ContentStatuses;
|
||||
use App\CMS\Handlers\Contracts\SearchPresenterHandler;
|
||||
use App\Models\Content\Content;
|
||||
|
||||
class AdminContent implements SearchPresenterHandler
|
||||
{
|
||||
public function render($foundItems)
|
||||
{
|
||||
if (\Auth::user()
|
||||
->cannot('manage', Content::class)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return view('admin.search.results.content', [
|
||||
'pages' => $foundItems,
|
||||
'statuses' => ContentStatuses::getWithTranslations(),
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
namespace App\CMS\Handlers\Search\Presenters;
|
||||
|
||||
use App\CMS\Handlers\Contracts\SearchPresenterHandler;
|
||||
use App\Models\FileManager\File;
|
||||
|
||||
class AdminFiles implements SearchPresenterHandler
|
||||
{
|
||||
@@ -14,6 +15,11 @@ class AdminFiles implements SearchPresenterHandler
|
||||
*/
|
||||
public function render($foundItems)
|
||||
{
|
||||
if (\Auth::user()
|
||||
->cannot('manage', File::class)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return view('admin.fileManager.filesTiles', ['files' => $foundItems, 'hideDelete' => true]);
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,6 @@ class Search extends Controller
|
||||
{
|
||||
/**
|
||||
* Create form for searching
|
||||
*
|
||||
* @return $this|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
||||
*/
|
||||
public function getSearch()
|
||||
@@ -37,7 +36,6 @@ class Search extends Controller
|
||||
|
||||
/**
|
||||
* Method used for performing search.
|
||||
*
|
||||
* This method iterates over all registered search engines and returns results for each engine apart.
|
||||
*
|
||||
* @param string $term search text
|
||||
@@ -60,10 +58,16 @@ class Search extends Controller
|
||||
// try to find given term
|
||||
$results = $search->search($term);
|
||||
|
||||
$content = $presenter->render($results);
|
||||
|
||||
if (is_null($content)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// create result object
|
||||
$resultsParts[$search->getId()] = [
|
||||
'name' => $search->getName(),
|
||||
'content' => $presenter->render($results),
|
||||
'content' => $content,
|
||||
'count' => count($results)
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,17 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin\Widgets;
|
||||
|
||||
use App\Http\Controllers\Admin\Controller;
|
||||
use App\Models\Widgets\Widget;
|
||||
use App\Models\Widgets\WidgetType;
|
||||
use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
|
||||
|
||||
class WidgetsOverview extends Controller
|
||||
{
|
||||
/**
|
||||
* Display list of all widgets
|
||||
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$widgets = Widget::where('language', LaravelLocalization::getCurrentLocale())
|
||||
->paginate(25);
|
||||
|
||||
return view('admin.widgets.overview', ['widgets' => $widgets]);
|
||||
$widgetTypes = WidgetType::all();
|
||||
|
||||
return view('admin.widgets.overview', compact('widgetTypes', 'widgets'));
|
||||
}
|
||||
}
|
||||
@@ -31,6 +31,6 @@ class WidgetAreaPolicy extends BasicPolicy
|
||||
*/
|
||||
public function update(User $user, WidgetArea $widgetArea)
|
||||
{
|
||||
return $user->hasAbility('edit-widgetareas');
|
||||
return $user->id == $widgetArea->user_id || $user->hasAbility('edit-widgetareas');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,12 +36,12 @@ class WidgetsPolicy extends BasicPolicy
|
||||
return $user->id == $widget->user_id || $user->hasAbility('edit-widgets');
|
||||
}
|
||||
|
||||
public function assign(User $user, Widget $widget)
|
||||
public function assign(User $user)
|
||||
{
|
||||
return $user->hasAbility('assign-widgets');
|
||||
}
|
||||
|
||||
public function unassign(User $user, Widget $widget)
|
||||
public function unassign(User $user)
|
||||
{
|
||||
return $user->hasAbility('unassign-widgets');
|
||||
}
|
||||
|
||||
+4
@@ -22,6 +22,10 @@ a:focus {
|
||||
padding-bottom: 20px !important;
|
||||
}
|
||||
|
||||
.blur {
|
||||
-webkit-filter: blur(3px);
|
||||
filter: blur(3px);
|
||||
}
|
||||
|
||||
.text-center {
|
||||
text-align: center;
|
||||
|
||||
@@ -392,12 +392,15 @@ $ (document).ready (function () {
|
||||
|
||||
$ ('#confirm-modal').modal ('show');
|
||||
|
||||
$('.main-wrapper').addClass('blur');
|
||||
|
||||
e.preventDefault ();
|
||||
});
|
||||
|
||||
$ ('#confirm-modal').on ('hidden.bs.modal', function () {
|
||||
$ ('#confirmation-title').text (previousTitle);
|
||||
$ ('#confirmation-message').text (previousMessage);
|
||||
$('.main-wrapper').removeClass('blur');
|
||||
});
|
||||
|
||||
$ ('#lockUrl').change (function () {
|
||||
@@ -444,4 +447,10 @@ $('.checkbox').change(function() {
|
||||
var id = e.data('id');
|
||||
|
||||
$('.child-'+id).prop('checked', checked);
|
||||
|
||||
// check also parent
|
||||
if (e.hasClass('child-checkbox') && checked){
|
||||
var parent = e.data('parent');
|
||||
$('#checkbox-parent-'+parent).prop('checked', true);
|
||||
}
|
||||
});
|
||||
@@ -7,4 +7,5 @@ return [
|
||||
"logoutSuccessfull" => "Odhlášení proběhlo úspěšně",
|
||||
"no" => "Ne",
|
||||
"yes" => "Ano",
|
||||
"noSearchEngine" => 'Není dostupný žádný vyhledávač.'
|
||||
];
|
||||
|
||||
@@ -20,4 +20,5 @@ return [
|
||||
"successfullyCreated" => "Plocha pro widgety úspěšně vytvořena",
|
||||
"successfullyDeleted" => "Úspěšně smazáno",
|
||||
"uniqueCode" => "Unikátní kód",
|
||||
'pageDescription' => 'Plochy pro widgety jsou oblasti, do kterých je možné přiřadit widgety a následně je zobrazovat na webu.'
|
||||
];
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
<div>
|
||||
<label>
|
||||
<input class="checkbox" data-id="{{$permission->id}}" value="1"
|
||||
<input class="checkbox" id="checkbox-parent-{{$permission->id}}" data-id="{{$permission->id}}" value="1"
|
||||
@if($permission->default)
|
||||
checked
|
||||
@endif name="permissions[{{$permission->string_id}}]" type="checkbox">
|
||||
@@ -25,7 +25,7 @@
|
||||
<div>
|
||||
<label>
|
||||
<i class="fa fa-fw"></i>
|
||||
<input class="checkbox child-{{$subpermission->parent_id}}" value="1"
|
||||
<input class="checkbox child-checkbox child-{{$subpermission->parent_id}}" data-parent="{{$permission->id}}" value="1"
|
||||
@if($permission->default && $subpermission->default)
|
||||
checked
|
||||
@endif name="permissions[{{$subpermission->string_id}}]" type="checkbox">
|
||||
|
||||
@@ -6,8 +6,16 @@
|
||||
@if ($search)
|
||||
<div class="row">
|
||||
<div class="col-lg-8">
|
||||
<h3>@lang('search.results')</h3>
|
||||
@include('admin.search.results')
|
||||
@if(!empty($results))
|
||||
<h3>@lang('search.results')</h3>
|
||||
@include('admin.search.results')
|
||||
@else
|
||||
|
||||
<div class="alert alert-info">
|
||||
<em>@lang('admin/common.noSearchEngine')</em>
|
||||
</div>
|
||||
|
||||
@endif
|
||||
</div>
|
||||
<div class="col-lg-4">
|
||||
<h3>@lang('search.term')</h3>
|
||||
|
||||
@@ -4,12 +4,14 @@
|
||||
|
||||
@section('headerButtons')
|
||||
|
||||
<a class="btn rounded btn-primary" href="{{route('users.new')}}">
|
||||
<i class="fa fa-plus"></i>
|
||||
</a>
|
||||
@can('create', \App\Models\User::class)
|
||||
<a class="btn rounded btn-sm btn-secondary" href="{{route('users.new')}}">
|
||||
<i class="fa fa-plus"></i>
|
||||
</a>
|
||||
@endcan
|
||||
|
||||
@foreach($statuses as $status => $translation)
|
||||
<a class="btn rounded @if($status != $currentStatus) btn-secondary @else btn-primary @endif"
|
||||
<a class="btn btn-sm rounded @if($status != $currentStatus) btn-secondary @else btn-primary @endif"
|
||||
href="{{route('users.overview', ['status' => $status])}}">{{$translation}}</a>
|
||||
@endforeach
|
||||
@endsection
|
||||
@@ -21,14 +23,18 @@
|
||||
<div class="card card-default">
|
||||
<div class="card-block container truncate sameheight-item">
|
||||
<div class="col-xs-12 text-center">
|
||||
<a href="{{route('users.edit', ['id' => $user->id])}}">
|
||||
@can('view', $user)
|
||||
<a href="{{route('users.detail', ['id' => $user->id])}}">
|
||||
<img src="{{\App\CMS\Helpers\Gravatar::img($user->email, 100)}}" alt="" />
|
||||
</a>
|
||||
@else
|
||||
<img src="{{\App\CMS\Helpers\Gravatar::img($user->email, 100)}}" alt="" />
|
||||
</a>
|
||||
@endcan
|
||||
</div>
|
||||
<div class="col-xs-12">
|
||||
<ul>
|
||||
@if(!empty($user->name))
|
||||
<li><a href="{{route('users.edit', ['id' => $user->id])}}">{{$user->name}}</a></li>
|
||||
<li><a href="{{route('users.edit', ['id' => $user->id])}}">{{$user->name}}</a></li>
|
||||
@endif
|
||||
<li><a href="{{route('users.edit', ['id' => $user->id])}}">{{$user->email}}</a></li>
|
||||
<li><em>{{$roles[$user->role]}}</em></li>
|
||||
@@ -36,9 +42,14 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer text-right">
|
||||
<a href="{{route('users.detail', ['id' => $user->id])}}" class="btn btn-secondary"><i class="fa fa-info"></i></a>
|
||||
<a href="{{route('users.edit', ['id' => $user->id])}}" class="btn btn-primary"><i
|
||||
class="fa fa-pencil edit"></i></a>
|
||||
@can('view', $user)
|
||||
<a href="{{route('users.detail', ['id' => $user->id])}}" class="btn btn-secondary"><i
|
||||
class="fa fa-info"></i></a>
|
||||
@endcan
|
||||
@can('update', $user)
|
||||
<a href="{{route('users.edit', ['id' => $user->id])}}" class="btn btn-primary"><i
|
||||
class="fa fa-pencil edit"></i></a>
|
||||
@endcan
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
a<form action="{{route('users.setPermissions', ['user' => $user])}}" method="post">
|
||||
<form action="{{route('users.setPermissions', ['user' => $user])}}" method="post">
|
||||
{!! csrf_field() !!}
|
||||
|
||||
@foreach($permissions as $permission)
|
||||
|
||||
<div>
|
||||
<label>
|
||||
<input class="checkbox" data-id="{{$permission->id}}" value="1"
|
||||
<input class="checkbox" id="checkbox-parent-{{$permission->id}}" data-id="{{$permission->id}}" value="1"
|
||||
@if($user->hasAbility($permission->string_id))
|
||||
checked
|
||||
@endif name="permissions[{{$permission->string_id}}]" type="checkbox">
|
||||
@@ -18,7 +18,7 @@ a<form action="{{route('users.setPermissions', ['user' => $user])}}" method="pos
|
||||
<div>
|
||||
<label>
|
||||
<i class="fa fa-fw"></i>
|
||||
<input class="checkbox child-{{$subpermission->parent_id}}" value="1"
|
||||
<input class="checkbox child-checkbox child-{{$subpermission->parent_id}}" data-parent="{{$permission->id}}" value="1"
|
||||
@if($user->hasAbility($permission->string_id) && $user->hasAbility($subpermission->string_id))
|
||||
checked
|
||||
@endif name="permissions[{{$subpermission->string_id}}]" type="checkbox">
|
||||
|
||||
@@ -4,20 +4,13 @@
|
||||
|
||||
@section('content')
|
||||
<div class="row">
|
||||
<div class="col-lg-8">
|
||||
<div class="col-lg-12">
|
||||
@include('admin.widgets.area.form', ['action' => route('widgetareas.postEdit', ['id' => $area->id])])
|
||||
|
||||
<h2 class="m-t-15">@lang('admin/widgets.overview')</h2>
|
||||
@include('admin.widgets.widgetsToAssociate', ['tileClass' => 'col-md-4 col-sm-6 col-xs-12', 'widgetArea' => $area])
|
||||
|
||||
</div>
|
||||
<div class="col-lg-4">
|
||||
<h3>@lang('admin/widgets.preview')</h3>
|
||||
|
||||
{{-- {{dd($area)}}--}}
|
||||
|
||||
@widgetArea($area->code)
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
|
||||
@@ -1,14 +1,23 @@
|
||||
@extends('admin.layoutWithNavigation')
|
||||
|
||||
@section('pageHeading', @trans('admin/widgetAreas.overview'))
|
||||
@section('pageDescription', @trans('admin/widgetAreas.pageDescription'))
|
||||
|
||||
@section('headerButtons')
|
||||
@can('create', \App\Models\Widgets\WidgetArea::class)
|
||||
<a class="btn rounded btn-sm btn-primary" href="{{route('widgetareas.new')}}">
|
||||
<i class="fa fa-plus"></i>
|
||||
</a>
|
||||
@endcan
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<div class="row">
|
||||
<div class="col-lg-8">
|
||||
<div class="@cannot('create', \App\Models\Widgets\WidgetArea::class)col-lg-12 @else col-lg-8 @endcan">
|
||||
@if (count($areas) > 0)
|
||||
<div class="card items">
|
||||
<div class="card-block">
|
||||
<table class="table item-list table-striped">
|
||||
<table class="table item-list table-striped full-width">
|
||||
<tr>
|
||||
<th>@lang('admin/widgetAreas.name')</th>
|
||||
<th>@lang('admin/widgetAreas.uniqueCode')</th>
|
||||
@@ -17,44 +26,62 @@
|
||||
</tr>
|
||||
@foreach($areas as $area)
|
||||
<tr>
|
||||
<td><a href="{{route('widgetareas.edit', ['id' => $area->id])}}">{{$area->name}}</a>
|
||||
</td>
|
||||
<td><a href="{{route('widgetareas.edit', ['id' => $area->id])}}">{{$area->code}}</a>
|
||||
</td>
|
||||
@can('update', $area)
|
||||
<td>
|
||||
<a href="{{route('widgetareas.edit', ['id' => $area->id])}}">{{$area->name}}</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="{{route('widgetareas.edit', ['id' => $area->id])}}">{{$area->code}}</a>
|
||||
</td>
|
||||
@else
|
||||
<td>{{$area->name}}</td>
|
||||
<td>{{$area->code}}</td>
|
||||
@endcan
|
||||
<td>{{str_limit($area->description, 100)}}</td>
|
||||
<td class="text-center">
|
||||
<div class="item-actions-dropdown">
|
||||
<a class="item-actions-toggle-btn">
|
||||
<span class="inactive"><i class="fa fa-cog"></i></span>
|
||||
<span class="active"><i class="fa fa-chevron-circle-right"></i></span>
|
||||
</a>
|
||||
<div class="item-actions-block">
|
||||
<ul class="item-actions-list">
|
||||
<li>
|
||||
<a class="edit" data-toggle="tooltip"
|
||||
title="@lang('admin/widgetAreas.editTooltip')"
|
||||
href="{{route('widgetareas.edit', ['id' => $area->id])}}"><i
|
||||
class="fa fa-pencil"></i></a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="{{route('widgets.associate', ['widgetArea' => $area->id])}}"
|
||||
data-toggle="tooltip"
|
||||
title="@lang('admin/widgetAreas.associateWidgets')">
|
||||
<i class="fa fa-plus"></i></a>
|
||||
</li>
|
||||
@if($area->deletable)
|
||||
<li>
|
||||
<a class="confirm remove" data-toggle="tooltip"
|
||||
title="@lang('admin/widgetAreas.delete')"
|
||||
href="{{route('widgetareas.delete', ['id' => $area->id])}}"><i
|
||||
class="fa fa-trash"></i></a>
|
||||
</li>
|
||||
@endif
|
||||
@if (Auth::user()->can('update', $area) || Auth::user()->can('assign', \App\Models\Widgets\Widget::class) || ($area->deletable && Auth::user()->can('delete', $area)))
|
||||
|
||||
</ul>
|
||||
<div class="item-actions-dropdown">
|
||||
<a class="item-actions-toggle-btn">
|
||||
<span class="inactive"><i class="fa fa-cog"></i></span>
|
||||
<span class="active"><i
|
||||
class="fa fa-chevron-circle-right"></i></span>
|
||||
</a>
|
||||
<div class="item-actions-block">
|
||||
<ul class="item-actions-list">
|
||||
@can('update', $area)
|
||||
<li>
|
||||
<a class="edit" data-toggle="tooltip"
|
||||
title="@lang('admin/widgetAreas.editTooltip')"
|
||||
href="{{route('widgetareas.edit', ['id' => $area->id])}}"><i
|
||||
class="fa fa-pencil"></i></a>
|
||||
</li>
|
||||
@endcan
|
||||
|
||||
@can('assign', \App\Models\Widgets\Widget::class)
|
||||
<li>
|
||||
<a href="{{route('widgets.associate', ['widgetArea' => $area->id])}}"
|
||||
data-toggle="tooltip"
|
||||
title="@lang('admin/widgetAreas.associateWidgets')">
|
||||
<i class="fa fa-plus"></i></a>
|
||||
</li>
|
||||
@endcan
|
||||
@can('delete', $area)
|
||||
@if($area->deletable)
|
||||
<li>
|
||||
<a class="confirm remove" data-toggle="tooltip"
|
||||
title="@lang('admin/widgetAreas.delete')"
|
||||
href="{{route('widgetareas.delete', ['id' => $area->id])}}"><i
|
||||
class="fa fa-trash"></i></a>
|
||||
</li>
|
||||
@endif
|
||||
@endcan
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
|
||||
@@ -21,13 +21,10 @@
|
||||
<li>@lang('admin/widgets.updatedAt'): @date($widgetArea->updated_at)</li>
|
||||
</ul>
|
||||
|
||||
<a href="{{route('widgetareas.edit', ['id' => $widgetArea->id])}}" class="btn btn-secondary col-sm-12">@lang('admin/widgetAreas.editButton')</a>
|
||||
|
||||
@if (!empty($associatedWidgetIds))
|
||||
<h3>@lang('admin/widgets.preview')</h3>
|
||||
|
||||
@widgetArea($widgetArea->code)
|
||||
@endif
|
||||
@can('update', $widgetArea)
|
||||
<a href="{{route('widgetareas.edit', ['id' => $widgetArea->id])}}"
|
||||
class="btn btn-secondary col-sm-12">@lang('admin/widgetAreas.editButton')</a>
|
||||
@endcan
|
||||
</div>
|
||||
</div>
|
||||
@stop
|
||||
@@ -4,10 +4,33 @@
|
||||
@section('pageDescription', @trans('admin/widgets.descriptionOfWidgets'))
|
||||
|
||||
@section('headerButtons')
|
||||
<a href="{{route('widgetareas.overview')}}" class="btn btn-secondary btn-sm rounded"
|
||||
title="@lang('admin/widgetAreas.overview')">
|
||||
<i class="fa fa-object-group"></i>
|
||||
</a>
|
||||
|
||||
@can('create', \App\Models\Widgets\Widget::class)
|
||||
@if (!empty($widgetTypes))
|
||||
<div class="dropdown show d-inline">
|
||||
<a class="btn btn-secondary rounded btn-sm dropdown-toggle" href="#" id="widgetTypesDropdown"
|
||||
data-toggle="dropdown" aria-expanded="false"><i class="fa fa-plus"></i></a>
|
||||
|
||||
<div class="dropdown-menu" aria-labelledby="dropdownMenuLink">
|
||||
@foreach ($widgetTypes as $widgetType)
|
||||
|
||||
<a class="dropdown-item"
|
||||
href="{{route('widgets.new', ['widgetType' => $widgetType->id])}}">{{trans($widgetType->name)}}</a>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@endif
|
||||
@endcan
|
||||
|
||||
@can('manage', \App\Models\Widgets\WidgetArea::class)
|
||||
<a href="{{route('widgetareas.overview')}}" class="btn btn-secondary btn-sm rounded"
|
||||
title="@lang('admin/widgetAreas.overview')">
|
||||
<i class="fa fa-object-group"></i>
|
||||
</a>
|
||||
@endcan
|
||||
|
||||
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
@@ -33,9 +56,7 @@
|
||||
<td>{{trans(call_user_func([$widget->widget_type_handler, 'getName']))}}</td>
|
||||
<td>{{$widget->description}}</td>
|
||||
<td class="text-center">
|
||||
|
||||
|
||||
@if(\Auth::user()->can('update', $widget) || $widget->deletable)
|
||||
@if(\Auth::user()->can('update', $widget) || ($widget->deletable && Auth::user()->can('delete', $widget)))
|
||||
<div class="item-actions-dropdown">
|
||||
<a class="item-actions-toggle-btn">
|
||||
<span class="inactive"><i class="fa fa-cog"></i></span>
|
||||
@@ -53,20 +74,22 @@
|
||||
@endcan
|
||||
|
||||
@if($widget->deletable)
|
||||
<li>
|
||||
<a class="confirm remove" data-toggle="tooltip"
|
||||
title="@lang('admin/widgets.delete')"
|
||||
href="{{route('widgets.delete', ['id' => $widget->id])}}"><i
|
||||
class="fa fa-trash"></i></a>
|
||||
</li>
|
||||
@can('delete', $widget)
|
||||
<li>
|
||||
<a class="confirm remove" data-toggle="tooltip"
|
||||
title="@lang('admin/widgets.delete')"
|
||||
href="{{route('widgets.delete', ['id' => $widget->id])}}"><i
|
||||
class="fa fa-trash"></i></a>
|
||||
</li>
|
||||
@endcan
|
||||
@endif
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
@endforeach
|
||||
</table>
|
||||
|
||||
@@ -13,17 +13,23 @@
|
||||
{{trans(call_user_func([$widget->widget_type_handler, 'getName']))}}
|
||||
</div>
|
||||
<div class="card-footer text-right">
|
||||
<a href="{{route('widgets.edit', ['id' => $widget->id])}}" class="btn btn-sm btn-secondary"><i
|
||||
class="fa fa-pencil"></i></a>
|
||||
@can('update', $widget)
|
||||
<a href="{{route('widgets.edit', ['id' => $widget->id])}}" class="btn btn-sm btn-secondary"><i
|
||||
class="fa fa-pencil"></i></a>
|
||||
@endcan
|
||||
|
||||
@if (in_array($widget->id, $associatedWidgetIds))
|
||||
<a href="{{route('widgets.deleteAssociation', ['widgetId' => $widget->id, 'widgetArea' => $widgetArea->id])}}"
|
||||
class="btn confirm btn-sm btn-danger">
|
||||
<i class="fa fa-trash"></i>
|
||||
</a>
|
||||
@can('unassign', \App\Models\Widgets\Widget::class)
|
||||
<a href="{{route('widgets.deleteAssociation', ['widgetId' => $widget->id, 'widgetArea' => $widgetArea->id])}}"
|
||||
class="btn confirm btn-sm btn-danger">
|
||||
<i class="fa fa-trash"></i>
|
||||
</a>
|
||||
@endcan
|
||||
@else
|
||||
<a href="{{route('widgets.makeAssociation', ['widgetId' => $widget->id, 'widgetArea' => $widgetArea->id])}}"
|
||||
class="btn btn-sm btn-primary"><i class="fa fa-plus"></i></a>
|
||||
@can('assign', \App\Models\Widgets\Widget::class)
|
||||
<a href="{{route('widgets.makeAssociation', ['widgetId' => $widget->id, 'widgetArea' => $widgetArea->id])}}"
|
||||
class="btn btn-sm btn-primary"><i class="fa fa-plus"></i></a>
|
||||
@endcan
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -32,35 +32,44 @@ Route::group(['namespace' => 'Widgets'], function () {
|
||||
|
||||
// display form for association of widget and widget area
|
||||
Route::get('widgets/associate/{widgetArea}', 'AssociateWidget@getList')
|
||||
->name('widgets.associate');
|
||||
->name('widgets.associate')
|
||||
->middleware('can:assign,' . \App\Models\Widgets\Widget::class);
|
||||
|
||||
Route::get('widgets/deassociate/{widget}/{widgetArea}', 'AssociateWidget@deleteAssociation')
|
||||
->name('widgets.deleteAssociation');
|
||||
->name('widgets.deleteAssociation')
|
||||
->middleware('can:unassign,' . \App\Models\Widgets\Widget::class);
|
||||
|
||||
Route::get('widgets/associate/{widget}/{widgetArea}', 'AssociateWidget@makeAssociation')
|
||||
->name('widgets.makeAssociation');
|
||||
->name('widgets.makeAssociation')
|
||||
->middleware('can:assign,' . \App\Models\Widgets\Widget::class);
|
||||
|
||||
Route::group(['namespace' => 'Areas'], function () {
|
||||
Route::get('widgets/areas/overview', 'WidgetAreaOverview@getOverview')
|
||||
->name('widgetareas.overview');
|
||||
->name('widgetareas.overview')
|
||||
->middleware('can:manage,' . \App\Models\Widgets\WidgetArea::class);
|
||||
|
||||
// form for new widget area
|
||||
Route::get('widgets/areas/new', 'CreateNewWidgetArea@create')
|
||||
->name('widgetareas.new');
|
||||
->name('widgetareas.new')
|
||||
->middleware('can:create,' . \App\Models\Widgets\WidgetArea::class);
|
||||
|
||||
// form for new widget area
|
||||
Route::post('widgets/areas/new', 'CreateNewWidgetArea@store')
|
||||
->name('widgetareas.postNew');
|
||||
->name('widgetareas.postNew')
|
||||
->middleware('can:create,' . \App\Models\Widgets\WidgetArea::class);
|
||||
|
||||
// edit form for widget area
|
||||
Route::get('widgets/areas/edit/{widgetArea}', 'EditWidgetArea@edit')
|
||||
->name('widgetareas.edit');
|
||||
->name('widgetareas.edit')
|
||||
->middleware('can:update,widgetArea');
|
||||
|
||||
Route::post('widgets/areas/edit/{widgetArea}', 'EditWidgetArea@update')
|
||||
->name('widgetareas.postEdit');
|
||||
->name('widgetareas.postEdit')
|
||||
->middleware('can:update,widgetArea');
|
||||
|
||||
// edit form for widget area
|
||||
Route::get('widgets/areas/delete/{widgetArea}', 'EditWidgetArea@delete')
|
||||
->name('widgetareas.delete');
|
||||
->name('widgetareas.delete')
|
||||
->middleware('can:delete,widgetArea');
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user