mirror of
https://gitlab.com/TheGamecraft/c-cms.git
synced 2026-04-21 02:39:10 -04:00
Finalisation de Google Drive
This commit is contained in:
@@ -31,6 +31,7 @@ class GoogleDriveFile extends Model
|
||||
case 'png':
|
||||
case 'PNG':
|
||||
case 'jpg':
|
||||
case 'jpeg':
|
||||
$icon = 'fas fa-file-image text-image';
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -141,7 +141,7 @@ class ConfigController extends Controller
|
||||
public function editfilesConfig()
|
||||
{
|
||||
$configList = [
|
||||
'cadet_list'
|
||||
'cadet_list',
|
||||
];
|
||||
|
||||
$configListEncrypt = [
|
||||
@@ -151,6 +151,19 @@ class ConfigController extends Controller
|
||||
'GOOGLE_DRIVE_FOLDER_ID'
|
||||
];
|
||||
|
||||
if (\request('is_active') == 'on')
|
||||
{
|
||||
$config = \App\Config::find('is_Google_Drive_enabled');
|
||||
$config->data = ['true'];
|
||||
$config->save();
|
||||
}
|
||||
else
|
||||
{
|
||||
$config = \App\Config::find('is_Google_Drive_enabled');
|
||||
$config->data = ['false'];
|
||||
$config->save();
|
||||
}
|
||||
|
||||
|
||||
foreach ($configList as $configName)
|
||||
{
|
||||
|
||||
@@ -254,11 +254,22 @@ class GoogleDriveController extends Controller
|
||||
public function checkFileSystem()
|
||||
{
|
||||
$error = [];
|
||||
if(\App\Config::getData('is_Google_Drive_enabled'))
|
||||
if(\App\Config::getData('is_Google_Drive_enabled') == "true")
|
||||
{
|
||||
if ($this->checkConfig())
|
||||
{
|
||||
$structure = $this->getFileStructure();
|
||||
$this->checkStructure($structure,'/','/',$error);
|
||||
}
|
||||
else
|
||||
{
|
||||
$error = ['Il y a un probleme avec vos configurations'];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$error = ['Google Drive n\'est pas actif'];
|
||||
}
|
||||
return $error;
|
||||
}
|
||||
|
||||
@@ -329,4 +340,24 @@ class GoogleDriveController extends Controller
|
||||
return $dir;
|
||||
}
|
||||
|
||||
public function checkConfig()
|
||||
{
|
||||
$configNull = (\Crypt::decryptString(\App\Config::getData('GOOGLE_DRIVE_CLIENT_ID')) != "" && \Crypt::decryptString(\App\Config::getData('GOOGLE_DRIVE_CLIENT_SECRET')) != "" && \Crypt::decryptString(\App\Config::getData('GOOGLE_DRIVE_REFRESH_TOKEN')) != "" && \Crypt::decryptString(\App\Config::getData('GOOGLE_DRIVE_FOLDER_ID')) != "");
|
||||
$configOk = true;
|
||||
|
||||
if ($configNull)
|
||||
{
|
||||
try {
|
||||
$contents = collect(Storage::cloud()->listContents("/", false));
|
||||
}
|
||||
catch (\Exception $e)
|
||||
{
|
||||
$configOk = false;
|
||||
}
|
||||
}
|
||||
|
||||
return $configNull && $configOk;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -274,31 +274,143 @@ class Permission extends Model
|
||||
],
|
||||
],
|
||||
'file' => [
|
||||
'file_see' => [
|
||||
'ckey' => 'file_see',
|
||||
'communName' => 'Voir les fichiers',
|
||||
'desc' => 'L\'utilisateur peut-il consulter les fichiers',
|
||||
'file_see_public' => [
|
||||
'ckey' => 'file_see_public',
|
||||
'communName' => 'Voir les fichiers publiques',
|
||||
'desc' => 'L\'utilisateur peut-il consulter les fichiers publiques',
|
||||
'icon' => 'fa-eye',
|
||||
'valeur' => 0
|
||||
],
|
||||
'file_add' => [
|
||||
'ckey' => 'file_add',
|
||||
'communName' => 'Ajouter un fichier',
|
||||
'desc' => 'L\'utilisateur peut-il ajouter un fichier',
|
||||
'file_add_public' => [
|
||||
'ckey' => 'file_add_public',
|
||||
'communName' => 'Ajouter un fichier publiques',
|
||||
'desc' => 'L\'utilisateur peut-il ajouter un fichier disponible publiques',
|
||||
'icon' => 'fa-eye',
|
||||
'valeur' => 0
|
||||
],
|
||||
'file_edit' => [
|
||||
'ckey' => 'file_edit',
|
||||
'communName' => 'Modifier un fichier',
|
||||
'desc' => 'L\'utilisateur peut-il modifier un fichier',
|
||||
'file_edit_public' => [
|
||||
'ckey' => 'file_edit_public',
|
||||
'communName' => 'Modifier un fichier publiques',
|
||||
'desc' => 'L\'utilisateur peut-il modifier un fichier publiques',
|
||||
'icon' => 'fa-eye',
|
||||
'valeur' => 0
|
||||
],
|
||||
'file_delete' => [
|
||||
'file_delete_public' => [
|
||||
'ckey' => 'file_delete_public',
|
||||
'communName' => 'Supprimer un fichier publiques',
|
||||
'desc' => 'L\'utilisateur peut-il supprimer un fichier publiques',
|
||||
'icon' => 'fa-eye',
|
||||
'valeur' => 0
|
||||
],
|
||||
'file_see_cadet' => [
|
||||
'ckey' => 'file_see_cadet',
|
||||
'communName' => 'Voir les fichiers des cadets',
|
||||
'desc' => 'L\'utilisateur peut-il consulter les fichiers des cadets',
|
||||
'icon' => 'fa-eye',
|
||||
'valeur' => 0
|
||||
],
|
||||
'file_add_cadet' => [
|
||||
'ckey' => 'file_add_cadet',
|
||||
'communName' => 'Ajouter un fichier disponible aux cadets',
|
||||
'desc' => 'L\'utilisateur peut-il ajouter un fichier disponible aux cadets',
|
||||
'icon' => 'fa-eye',
|
||||
'valeur' => 0
|
||||
],
|
||||
'file_edit_cadet' => [
|
||||
'ckey' => 'file_edit_cadet',
|
||||
'communName' => 'Modifier un fichier des cadets',
|
||||
'desc' => 'L\'utilisateur peut-il modifier un fichier des cadets',
|
||||
'icon' => 'fa-eye',
|
||||
'valeur' => 0
|
||||
],
|
||||
'file_delete_cadet' => [
|
||||
'ckey' => 'file_delete',
|
||||
'communName' => 'Supprimer un fichier',
|
||||
'desc' => 'L\'utilisateur peut-il supprimer un fichier',
|
||||
'communName' => 'Supprimer un fichier des cadets',
|
||||
'desc' => 'L\'utilisateur peut-il supprimer un fichier des cadets',
|
||||
'icon' => 'fa-eye',
|
||||
'valeur' => 0
|
||||
],
|
||||
'file_see_staff' => [
|
||||
'ckey' => 'file_see_staff',
|
||||
'communName' => 'Voir les fichiers des staffs',
|
||||
'desc' => 'L\'utilisateur peut-il consulter les fichiers des staffs',
|
||||
'icon' => 'fa-eye',
|
||||
'valeur' => 0
|
||||
],
|
||||
'file_add_staff' => [
|
||||
'ckey' => 'file_add_staff',
|
||||
'communName' => 'Ajouter un fichier disponible aux staffs',
|
||||
'desc' => 'L\'utilisateur peut-il ajouter un fichier disponible aux staffs\'',
|
||||
'icon' => 'fa-eye',
|
||||
'valeur' => 0
|
||||
],
|
||||
'file_edit_staff' => [
|
||||
'ckey' => 'file_edit_staff',
|
||||
'communName' => 'Modifier un fichier des staffs',
|
||||
'desc' => 'L\'utilisateur peut-il modifier un fichier des staffs',
|
||||
'icon' => 'fa-eye',
|
||||
'valeur' => 0
|
||||
],
|
||||
'file_delete_staff' => [
|
||||
'ckey' => 'file_delete_staff',
|
||||
'communName' => 'Supprimer un fichier des staffs',
|
||||
'desc' => 'L\'utilisateur peut-il supprimer un fichier des staffs',
|
||||
'icon' => 'fa-eye',
|
||||
'valeur' => 0
|
||||
],
|
||||
'file_see_etamas' => [
|
||||
'ckey' => 'file_see_etamas',
|
||||
'communName' => 'Voir les fichiers de l\'ETAMAS',
|
||||
'desc' => 'L\'utilisateur peut-il consulter les fichiers de l\'ETAMAS',
|
||||
'icon' => 'fa-eye',
|
||||
'valeur' => 0
|
||||
],
|
||||
'file_add_etamas' => [
|
||||
'ckey' => 'file_add_etamas',
|
||||
'communName' => 'Ajouter un fichier disponible a l\'ETAMAS',
|
||||
'desc' => 'L\'utilisateur peut-il ajouter un fichier disponible a l\'ETAMAS',
|
||||
'icon' => 'fa-eye',
|
||||
'valeur' => 0
|
||||
],
|
||||
'file_edit_etamas' => [
|
||||
'ckey' => 'file_edit_etamas',
|
||||
'communName' => 'Modifier un fichier de l\'ETAMAS',
|
||||
'desc' => 'L\'utilisateur peut-il modifier un fichier de l\'ETAMAS',
|
||||
'icon' => 'fa-eye',
|
||||
'valeur' => 0
|
||||
],
|
||||
'file_delete_etmas' => [
|
||||
'ckey' => 'file_delete_staff',
|
||||
'communName' => 'Supprimer un fichier de l\'ETAMAS',
|
||||
'desc' => 'L\'utilisateur peut-il supprimer un fichier de l\'ETAMAS',
|
||||
'icon' => 'fa-eye',
|
||||
'valeur' => 0
|
||||
],
|
||||
'file_see_officier' => [
|
||||
'ckey' => 'file_see_officier',
|
||||
'communName' => 'Voir les fichiers des officiers',
|
||||
'desc' => 'L\'utilisateur peut-il consulter les fichiers des officiers',
|
||||
'icon' => 'fa-eye',
|
||||
'valeur' => 0
|
||||
],
|
||||
'file_add_officier' => [
|
||||
'ckey' => 'file_add_officier',
|
||||
'communName' => 'Ajouter un fichier disponible aux officiers',
|
||||
'desc' => 'L\'utilisateur peut-il ajouter un fichier disponible aux officiers',
|
||||
'icon' => 'fa-eye',
|
||||
'valeur' => 0
|
||||
],
|
||||
'file_edit_officier' => [
|
||||
'ckey' => 'file_edit_officier',
|
||||
'communName' => 'Modifier un fichier des officiers',
|
||||
'desc' => 'L\'utilisateur peut-il modifier un fichier des officiers',
|
||||
'icon' => 'fa-eye',
|
||||
'valeur' => 0
|
||||
],
|
||||
'file_delete_officier' => [
|
||||
'ckey' => 'file_delete_staff',
|
||||
'communName' => 'Supprimer un fichier des officiers',
|
||||
'desc' => 'L\'utilisateur peut-il supprimer un fichier des officiers',
|
||||
'icon' => 'fa-eye',
|
||||
'valeur' => 0
|
||||
]
|
||||
|
||||
@@ -310,6 +310,10 @@ class User extends Authenticatable
|
||||
{
|
||||
if ($this->job->permission($perm) == 0)
|
||||
{
|
||||
if ($this->rank->id == 1)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return $this->rank->permission($perm);
|
||||
}
|
||||
else
|
||||
|
||||
745
composer.lock
generated
745
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -26,7 +26,7 @@ return [
|
||||
|
|
||||
*/
|
||||
|
||||
'cloud' => env('FILESYSTEM_CLOUD', 's3'),
|
||||
'cloud' => env('FILESYSTEM_CLOUD', 'google'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
@@ -55,15 +55,6 @@ return [
|
||||
'visibility' => 'public',
|
||||
],
|
||||
|
||||
's3' => [
|
||||
'driver' => 's3',
|
||||
'key' => env('AWS_ACCESS_KEY_ID'),
|
||||
'secret' => env('AWS_SECRET_ACCESS_KEY'),
|
||||
'region' => env('AWS_DEFAULT_REGION'),
|
||||
'bucket' => env('AWS_BUCKET'),
|
||||
'url' => env('AWS_URL'),
|
||||
],
|
||||
|
||||
'google' => [
|
||||
'driver' => 'google',
|
||||
'clientId' => '',
|
||||
|
||||
@@ -11,16 +11,19 @@
|
||||
@csrf
|
||||
<div class="row ml-2">
|
||||
<h3 class="col-12">Google Drive</h3>
|
||||
<div class="col-6">
|
||||
<div class="col-md-6">
|
||||
<div class="alert alert-info" role="alert">
|
||||
Vous pouvez suivre un <a class="alert-link" target="_blank" href="https://github.com/ivanvermeyen/laravel-google-drive-demo/blob/master/README/1-getting-your-dlient-id-and-secret.md">tutoriel (Anglais) <i class="fas fa-external-link-square-alt text-white"></i></a> pour trouver c'est information.
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
@if($error == [])
|
||||
<div class="alert alert-primary" role="alert">
|
||||
<div id="google-drive-status" class="alert alert-primary" role="alert">
|
||||
<div class="row pb-1">
|
||||
<div class="col-10" id="google-drive-status-text">
|
||||
Google Drive est initialisé correctement
|
||||
<div id="loaderDot" class="float-right d-none" style="margin-top: -30px;">
|
||||
</div>
|
||||
<div class="col-2">
|
||||
<div id="loaderDot" class="float-right d-none" style="margin-top: -30px;height: 41px">
|
||||
@loaderDot
|
||||
</div>
|
||||
<div class="float-right" id="btn-sync">
|
||||
@@ -29,21 +32,13 @@
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@else
|
||||
<div class="alert alert-danger" role="alert">
|
||||
Problème détecté avec votre installation ...
|
||||
<ul>
|
||||
@foreach($error as $e)
|
||||
<li>{{$e}}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8 p-2">
|
||||
<div class="togglebutton">
|
||||
<label>
|
||||
<input type="checkbox" checked="">
|
||||
<input id="is_active" type="checkbox" data-toggle="switch" name="is_active">
|
||||
<span class="toggle"></span>
|
||||
Activer Google Drive
|
||||
</label>
|
||||
@@ -103,11 +98,45 @@ Configuration du système de fichier
|
||||
|
||||
@section('custom_scripts')
|
||||
<script>
|
||||
if({{\App\Config::getData('is_Google_Drive_enabled')}})
|
||||
{
|
||||
$('#is_active').prop( "checked", true );
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#is_active').prop( "checked", false );
|
||||
}
|
||||
checkFileSystem();
|
||||
|
||||
function checkFileSystem() {
|
||||
$('#loaderDot').removeClass('d-none');
|
||||
$('#btn-sync').addClass('d-none');
|
||||
let text = $('#google-drive-status-text');
|
||||
let div = $('#google-drive-status');
|
||||
div.removeClass('alert-primary');
|
||||
div.addClass('alert-info');
|
||||
text.html("Vérification du système de fichier ...");
|
||||
$.get('/api/drive/checkfilestructure',{api_token: api_token}, function (data) {
|
||||
console.log('data');
|
||||
if(data.length != 0)
|
||||
{
|
||||
div.removeClass('alert-primary');
|
||||
div.removeClass('alert-info');
|
||||
div.removeClass('alert-danger');
|
||||
div.addClass('alert-danger');
|
||||
text.html("");
|
||||
data.forEach(d => {
|
||||
text.append(d);
|
||||
console.log(d);
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
div.removeClass('alert-primary');
|
||||
div.removeClass('alert-info');
|
||||
div.removeClass('alert-danger');
|
||||
div.addClass('alert-primary');
|
||||
text.html("Google Drive est initialisé correctement");
|
||||
}
|
||||
$('#loaderDot').addClass('d-none');
|
||||
$('#btn-sync').removeClass('d-none');
|
||||
})
|
||||
|
||||
@@ -47,11 +47,11 @@
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
@foreach($cat as $r)
|
||||
<div class="col text-center">
|
||||
<div class="col-3 text-center">
|
||||
<input class="d-none" type="text" id="{{$r['ckey']}}" name="{{$r['ckey']}}">
|
||||
<h5>{{$r['communName']}}</h5>
|
||||
<div class="btn-group">
|
||||
<button type="button" id="{{$r['ckey']}}-close" class="btn btn-just-icon btn-outline-danger" onclick="switchPermissionSwitch('{{$r['ckey']}}','close')"><i class="fa fa-close"></i></button>
|
||||
<button type="button" id="{{$r['ckey']}}-close" class="btn btn-just-icon btn-outline-danger" onclick="switchPermissionSwitch('{{$r['ckey']}}','close')"><i class="fas fa-times"></i></button>
|
||||
<!--<button type="button" id="{{$r['ckey']}}-slash" class="btn btn-just-icon btn-warning" onclick="switchPermissionSwitch('{{$r['ckey']}}','slash')"><i class="fa fa-slash"></i></button>-->
|
||||
<button type="button" id="{{$r['ckey']}}-plus" class="btn btn-just-icon btn-outline-success" onclick="switchPermissionSwitch('{{$r['ckey']}}','plus')"><i class="fa fa-plus"></i></button>
|
||||
</div>
|
||||
|
||||
@@ -67,24 +67,7 @@
|
||||
@endsection
|
||||
|
||||
@section('breadcrumb')
|
||||
<div class="breadcrumbs">
|
||||
<div class="col-sm-4">
|
||||
<div class="page-header float-left">
|
||||
<div class="page-title">
|
||||
<h1>Fichiers</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-8">
|
||||
<div class="page-header float-right">
|
||||
<div class="page-title">
|
||||
<ol class="breadcrumb text-right">
|
||||
<li class="active">Fichiers/Guide Pédagogique</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
Fichier / Guide Pédagogique
|
||||
@endsection
|
||||
|
||||
@section('custom_scripts')
|
||||
|
||||
@@ -133,24 +133,7 @@
|
||||
@endsection
|
||||
|
||||
@section('breadcrumb')
|
||||
<div class="breadcrumbs">
|
||||
<div class="col-sm-4">
|
||||
<div class="page-header float-left">
|
||||
<div class="page-title">
|
||||
<h1>Fichiers</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-8">
|
||||
<div class="page-header float-right">
|
||||
<div class="page-title">
|
||||
<ol class="breadcrumb text-right">
|
||||
<li class="active">Fichiers</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
Fichier / Autres
|
||||
@endsection
|
||||
|
||||
@section('custom_scripts')
|
||||
|
||||
@@ -47,11 +47,11 @@
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
@foreach($cat as $r)
|
||||
<div class="col text-center">
|
||||
<div class="col-3 text-center">
|
||||
<input class="d-none" type="text" id="{{$r['ckey']}}" name="{{$r['ckey']}}">
|
||||
<h5>{{$r['communName']}}</h5>
|
||||
<div class="btn-group">
|
||||
<button type="button" id="{{$r['ckey']}}-close" class="btn btn-just-icon btn-outline-danger" onclick="switchPermissionSwitch('{{$r['ckey']}}','close')"><i class="fa fa-close"></i></button>
|
||||
<button type="button" id="{{$r['ckey']}}-close" class="btn btn-just-icon btn-outline-danger" onclick="switchPermissionSwitch('{{$r['ckey']}}','close')"><i class="fas fa-times"></i></button>
|
||||
<button type="button" id="{{$r['ckey']}}-slash" class="btn btn-just-icon btn-warning" onclick="switchPermissionSwitch('{{$r['ckey']}}','slash')"><i class="fa fa-slash"></i></button>
|
||||
<button type="button" id="{{$r['ckey']}}-plus" class="btn btn-just-icon btn-outline-success" onclick="switchPermissionSwitch('{{$r['ckey']}}','plus')"><i class="fa fa-plus"></i></button>
|
||||
</div>
|
||||
|
||||
@@ -132,24 +132,7 @@
|
||||
@endsection
|
||||
|
||||
@section('breadcrumb')
|
||||
<div class="breadcrumbs">
|
||||
<div class="col-sm-4">
|
||||
<div class="page-header float-left">
|
||||
<div class="page-title">
|
||||
<h1>Ajouter un utilisateur</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-8">
|
||||
<div class="page-header float-right">
|
||||
<div class="page-title">
|
||||
<ol class="breadcrumb text-right">
|
||||
<li class="active">utilisateur/Ajouter</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
Utilisateur / Ajouter
|
||||
@endsection
|
||||
|
||||
@section('custom_scripts')
|
||||
|
||||
@@ -144,24 +144,7 @@
|
||||
@endsection
|
||||
|
||||
@section('breadcrumb')
|
||||
<div class="breadcrumbs">
|
||||
<div class="col-sm-4">
|
||||
<div class="page-header float-left">
|
||||
<div class="page-title">
|
||||
<h1>Ajouter un utilisateur</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-8">
|
||||
<div class="page-header float-right">
|
||||
<div class="page-title">
|
||||
<ol class="breadcrumb text-right">
|
||||
<li class="active">utilisateur/Ajouter</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
Utilisateur / Modifier
|
||||
@endsection
|
||||
|
||||
@section('custom_scripts')
|
||||
|
||||
@@ -40,24 +40,7 @@
|
||||
@endsection
|
||||
|
||||
@section('breadcrumb')
|
||||
<div class="breadcrumbs">
|
||||
<div class="col-sm-4">
|
||||
<div class="page-header float-left">
|
||||
<div class="page-title">
|
||||
<h1>{{ trans('admin/dashboard.page_title')}}</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-8">
|
||||
<div class="page-header float-right">
|
||||
<div class="page-title">
|
||||
<ol class="breadcrumb text-right">
|
||||
<li class="active">{{ trans('admin/dashboard.breadcrumb')}}</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
Utilisateur / Liste
|
||||
@endsection
|
||||
|
||||
@section('custom_scripts')
|
||||
|
||||
@@ -221,12 +221,20 @@
|
||||
</a>
|
||||
<div class="collapse" id="file">
|
||||
<ul class="nav">
|
||||
<li class="nav-item pl-2">
|
||||
<a class="nav-link" href="/admin/drive">
|
||||
<span class="sidebar-mini"> <i class="fab fa-google-drive"></i> </span>
|
||||
<span class="sidebar-normal"> Explorateur de fichier </span>
|
||||
</a>
|
||||
</li>
|
||||
@if(\Auth::user()->p('file_see_staff') == 1)
|
||||
<li class="nav-item pl-2">
|
||||
<a class="nav-link" href="/admin/guide">
|
||||
<span class="sidebar-mini"> <i class="fas fa-book"></i></span>
|
||||
<span class="sidebar-normal"> Guide pédagogique </span>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
<li class="nav-item pl-2">
|
||||
<a class="nav-link" href="/admin/files">
|
||||
<span class="sidebar-mini"> <i class="fas fa-cog"></i> </span>
|
||||
|
||||
Reference in New Issue
Block a user