namespace App\Fields;
+use App\Models\FluidbookPublication;
use Cubist\Backpack\Magic\Fields\Textarea;
class ShortLinkFluidbooks extends Textarea
protected $_columnViewNamespace = 'columns';
protected $_adminType = 'shortlinks_fluidbooks';
protected $_viewNamespace = 'fields';
+
+ public static function filterLinks($links)
+ {
+ if (is_string($links)) {
+ $links = json_decode($links, true);
+ }
+ $res = [];
+ foreach ($links as $link) {
+ if (!isset($res[$link['fluidbook_id'] . '_' . $link['link_id']]) && FluidbookPublication::hasPermission($link['fluidbook_id'], 'read')) {
+ $res[$link['fluidbook_id'] . '_' . $link['link_id']] = $link;
+ }
+ }
+ return $res;
+ }
}
public $incrementing = false;
protected $keyType = 'string';
- protected static $_permissionBase = 'linkshortener';
+ protected static $_permissionBase = 'shortlink';
public function setFields()
{
return false;
}
- if ($user->hasPermissionTo(static::$_permissionBase . ':admin')) {
- return true;
- }
- if (!$user->hasPermissionTo(static::$_permissionBase . ':' . $permission)) {
- return false;
- }
- if ($id instanceof FluidbookPublication) {
+ $pubId = $id instanceof FluidbookPublication ? $id->id : $id;
+
+ return cache()->remember('fluidbook_permission_' . $user->id . '_' . $permission . '_' . $pubId, 360, function () use ($user, $permission, $id) {
+ if ($user->hasPermissionTo(static::$_permissionBase . ':admin')) {
+ return true;
+ }
+ if (!$user->hasPermissionTo(static::$_permissionBase . ':' . $permission)) {
+ return false;
+ }
+ if ($id instanceof FluidbookPublication) {
+ return true;
+ }
+ $entry = static::find($id);
+ if (null === $entry) {
+ return false;
+ }
return true;
- }
- $entry = static::find($id);
- if (null === $entry) {
- return false;
- }
- return true;
+ });
+
+
}
}
$messages=\App\Http\Controllers\Admin\Operations\FluidbookCollection\AuditLinksOperation::getCodesMessages();
@endphp
-{{count(json_decode($value))}}
+{{count(\App\Fields\ShortLinkFluidbooks::filterLinks($value))}}
@include('crud::fields.inc.translatable_icon')
<ul>
- @foreach(json_decode($value,true) as $v)
+ @foreach(\App\Fields\ShortLinkFluidbooks::filterLinks($value) as $v)
@php
/** @var \App\Models\FluidbookPublication $fluidbook */
$fluidbook=\App\Models\FluidbookPublication::find($v['fluidbook_id']);
<li class="nav-item"><a class="nav-link" href="{{ backpack_url('fluidbook-collection') }}"><i
class="la la-university nav-icon"></i> {{__('Collections')}}</a></li>
@endcan
+ @can('shortlink:read')
+ <li class="nav-item"><a class="nav-link" href="{{ backpack_url('shortlink') }}"><i
+ class="las la-link nav-icon"></i> {{__('Liens courts')}}</a></li>
+ @endcan
@can('fluidbook-translate:write')
<li class="nav-item"><a class="nav-link"
href='{{ backpack_url('fluidbook-translate/1/edit/?_locale=en') }}'><i