]> _ Git - fluidbook-toolbox.git/commitdiff
#7822
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Fri, 21 Nov 2025 17:34:51 +0000 (18:34 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Fri, 21 Nov 2025 17:34:51 +0000 (18:34 +0100)
app/Models/FluidbookCollection.php
resources/views/vendor/backpack/crud/buttons/delete.blade.php
resources/views/vendor/backpack/crud/buttons/fluidbook_collection/download.blade.php

index 23272922cbdbb59b3abdf7076ccc2251c99db8b6..5c916e8447a02eea2ade293d540168fdec94ed4b 100644 (file)
@@ -94,35 +94,37 @@ class FluidbookCollection extends ToolboxStatusModel
                 'allows_null' => false,
                 'default' => 0,
                 'searchLogic' => false,
+                'can' => 'fluidbook-collection:admin',
             ]
         );
         $this->addOwnerField();
 
         $this->addField('hash', Hidden::class);
-        $this->addField('visits_counter', Integer::class, __('Compteur de visites'), ['can' => 'fluidbook-collection:write', 'read_only' => true, 'default' => 0, 'column' => true, 'column_label' => '<i class="las la-chart-area" title="' . __('Compteur de visites du lien de préview') . '"></i>', 'searchLogic' => false]);
-        $this->addField('section_export', FormBigSection::class, __('Paramètres d\'export'));
-        $this->addField('type', SelectFromArray::class, __('Type'), ['allows_null' => false, 'default' => 'none', 'can' => 'fluidbook-collection:write', 'column' => true, 'options' => ['none' => __('Désactivé'), 'export' => __('Export'), 'export_multilang' => __('Export multilingue'), 'scorm_multilang' => __('SCORM multilingue')]]);
-        $this->addField('locale_switch', Checkbox::class, __('Permettre le changement de langue'), ['when' => ['type' => ['scorm_multilang', 'export_multilang']], 'default' => true]);
-        $this->addField('locale_switch_currentpage', Checkbox::class, __('Rediriger vers la page en cours lors du changement de langue'), ['default' => false, 'when' => ['type' => ['scorm_multilang', 'export_multilang'], 'locale_switch' => 1]]);
+        $this->addField('visits_counter', Integer::class, __('Compteur de visites'), ['can' => 'fluidbook-collection:admin', 'read_only' => true, 'default' => 0, 'column' => true, 'column_label' => '<i class="las la-chart-area" title="' . __('Compteur de visites du lien de préview') . '"></i>', 'searchLogic' => false]);
+        $this->addField('section_export', FormBigSection::class, __('Paramètres d\'export'), ['can' => 'fluidbook-collection:admin']);
+        $this->addField('type', SelectFromArray::class, __('Type'), ['can' => 'fluidbook-collection:admin', 'allows_null' => false, 'default' => 'none', 'column' => true, 'options' => ['none' => __('Désactivé'), 'export' => __('Export'), 'export_multilang' => __('Export multilingue'), 'scorm_multilang' => __('SCORM multilingue')]]);
+        $this->addField('locale_switch', Checkbox::class, __('Permettre le changement de langue'), ['can' => 'fluidbook-collection:admin', 'when' => ['type' => ['scorm_multilang', 'export_multilang']], 'default' => true]);
+        $this->addField('locale_switch_currentpage', Checkbox::class, __('Rediriger vers la page en cours lors du changement de langue'), ['can' => 'fluidbook-collection:admin', 'default' => false, 'when' => ['type' => ['scorm_multilang', 'export_multilang'], 'locale_switch' => 1]]);
         $this->addField('redirection_algorithm', SelectFromArray::class, __('Algorithme de choix de la version'),
             [
+                'can' => 'fluidbook-collection:admin',
                 'when' => ['type' => ['scorm_multilang', 'export_multilang']],
                 'default' => 'language', 'databaseDefault' => 'language',
                 'options' => ['language' => __('La langue de l\'utilisateur est prioritaire sur l\'appareil'), 'device' => __('L\'appareil est prioritaire sur la langue')],
             ]
         );
 
-        $this->addField('version', FluidbookExportVersion::class, __('Version'), ['when' => ['type' => 'export']]);
+        $this->addField('version', FluidbookExportVersion::class, __('Version'), ['can' => 'fluidbook-collection:admin', 'when' => ['type' => 'export']]);
         $excluded = array_diff(array_keys(FluidbookExportVersion::getVersions()), ['online', 'sharepoint']);
-        $this->addField('version_multilang', FluidbookExportVersion::class, __('Version'), ['when' => ['type' => 'export_multilang'], 'excluded_options' => $excluded, 'default' => 'online']);
-
-        $this->addField('install', ExternalPath::class, 'Installer sur un serveur externe', ['default' => '', 'fake' => true, 'translatable' => false, 'store_in' => 'settings', 'servers_model' => FluidbookExternalInstallServer::class, ['when' => ['type' => ['export', 'export_multilang']]]]);
-        $this->addField('override_settings', BunchOfFieldsMultiple::class, __('Redéfinir les paramètres lors de l\'export'), ['bunch' => Fluidbook_Setting::class]);
-        $this->addField('linksAssets', FilesOrURL::class, __('Charger ou remplacer des assets sur tous les fluidbooks de la collection'), ['hint' => __('Cela écrasera les fichiers sur tous les fluidbooks de la collection si ils portent le même nom d\'un asset chargé ici')]);
-        $this->addField('section_search', FormBigSection::class, __('Moteur de recherche'));
-        $this->addField('search', SelectFromArray::class, __('Indexer les contenus dans un moteur de recherche'), ['options' => ['none' => __('Non'), 'typesense' => __('Serveur typesense')]]);
-        $this->addField('search_host', Text::class, __('Hôte'), ['when' => ['search' => 'typesense']]);
-        $this->addField('search_key', Text::class, __('Clé API'), ['when' => ['search' => 'typesense']]);
+        $this->addField('version_multilang', FluidbookExportVersion::class, __('Version'), ['can' => 'fluidbook-collection:admin', 'when' => ['type' => 'export_multilang'], 'excluded_options' => $excluded, 'default' => 'online']);
+
+        $this->addField('install', ExternalPath::class, 'Installer sur un serveur externe', ['can' => 'fluidbook-collection:admin', 'default' => '', 'fake' => true, 'translatable' => false, 'store_in' => 'settings', 'servers_model' => FluidbookExternalInstallServer::class, ['when' => ['type' => ['export', 'export_multilang']]]]);
+        $this->addField('override_settings', BunchOfFieldsMultiple::class, __('Redéfinir les paramètres lors de l\'export'), ['can' => 'fluidbook-collection:admin', 'bunch' => Fluidbook_Setting::class]);
+        $this->addField('linksAssets', FilesOrURL::class, __('Charger ou remplacer des assets sur tous les fluidbooks de la collection'), ['can' => 'fluidbook-collection:admin', 'hint' => __('Cela écrasera les fichiers sur tous les fluidbooks de la collection si ils portent le même nom d\'un asset chargé ici')]);
+        $this->addField('section_search', FormBigSection::class, __('Moteur de recherche'), ['can' => 'fluidbook-collection:admin',]);
+        $this->addField('search', SelectFromArray::class, __('Indexer les contenus dans un moteur de recherche'), ['can' => 'fluidbook-collection:admin', 'options' => ['none' => __('Non'), 'typesense' => __('Serveur typesense')]]);
+        $this->addField('search_host', Text::class, __('Hôte'), ['can' => 'fluidbook-collection:admin', 'when' => ['search' => 'typesense']]);
+        $this->addField('search_key', Text::class, __('Clé API'), ['can' => 'fluidbook-collection:admin', 'when' => ['search' => 'typesense']]);
         $this->addField('section_links_audit', FormBigSection::class, __('Audit des liens'));
         $this->addField('links_audit', Checkbox::class, __('Activer l\'audit des liens'), ['default' => false]);
         $this->addField('links_audit_download', LinkButton::class, __('Télécharger l\'audit des liens'), [
@@ -147,8 +149,8 @@ class FluidbookCollection extends ToolboxStatusModel
             'wrapper' => ['class' => 'd-none']
         ]);
 
-        $this->addField('section_tools', FormBigSection::class, __('Outils'));
-        $this->addField('export_settings', LinkButton::class, __('Exporter les paramètres'), ['value' => './download_settings']);
+        $this->addField('section_tools', FormBigSection::class, __('Outils'), ['can' => 'fluidbook-collection:admin',]);
+        $this->addField('export_settings', LinkButton::class, __('Exporter les paramètres'), ['can' => 'fluidbook-collection:admin', 'value' => './download_settings']);
         /*
          *
             <a class='btn btn-primary mr-3'
@@ -327,4 +329,14 @@ class FluidbookCollection extends ToolboxStatusModel
         }
         return $res;
     }
+
+    public function allowsDelete()
+    {
+        return $this->_can('admin', backpack_user());
+    }
+
+    public function allowsDownload(): bool
+    {
+        return $this->type && $this->type !== 'none';
+    }
 }
index 38f08d472b687d20c926cd33b25a63d340e7c1e3..9164781c36adb579db224b3b9e219d2c8218b9d8 100644 (file)
@@ -1,4 +1,4 @@
-@if ($crud->hasAccess('delete'))
+@if ($entry->allowsDelete())
     <a href="javascript:void(0)" onclick="deleteEntry(this)" data-route="{{ url($crud->route.'/'.$entry->getKey()) }}"
        class="btn btn-sm btn-link" data-button-type="delete"><i
             class="la la-trash"></i> {{ trans('backpack::crud.delete') }}</a>
index 031cdcbfc518794ea73359048b8b68e3c2d69b57..76d48eec702afb7bc9ad3041980cb7a930603392 100644 (file)
@@ -31,6 +31,7 @@
         'cancel'=>__('Annuler')
     ];
 @endphp
+@if($entry->allowsDownload())
 <a class="btn btn-sm btn-link exportcollection" href="#"
    data-toggle="tooltip"
    title="{{__('Exporter la collection')}}"
@@ -43,3 +44,4 @@
 >
     <i class="la la-arrow-circle-down"></i> {{__('Export')}}
 </a>
+@endif