Compare commits
6 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3ef0b3c144 | ||
|
|
22f5e907d0 | ||
|
|
faa9f2ce33 | ||
|
|
cf8057d351 | ||
|
|
67d7e54c1c | ||
|
|
c51bf890b6 |
45 changed files with 1638 additions and 1866 deletions
|
|
@ -60,4 +60,4 @@ MAIL_LIST_SERVICEWEB=
|
||||||
PROJECT_UUID=
|
PROJECT_UUID=
|
||||||
|
|
||||||
## MAIL ADDRESSES
|
## MAIL ADDRESSES
|
||||||
MAIL_LIST_SERVICEWEB=digital@ldc.fr
|
MAIL_LIST_SERVICEWEB=equipe.web@ldc.fr
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ MAIL_PASSWORD=
|
||||||
MAIL_ENCRYPTION=null
|
MAIL_ENCRYPTION=null
|
||||||
MAIL_FROM_ADDRESS=no-reply@dam.lesidc.com
|
MAIL_FROM_ADDRESS=no-reply@dam.lesidc.com
|
||||||
MAIL_FROM_NAME="${APP_NAME}"
|
MAIL_FROM_NAME="${APP_NAME}"
|
||||||
MAIL_ADMIN=digital@ldc.fr
|
MAIL_ADMIN=equipe.web@ldc.fr
|
||||||
|
|
||||||
|
|
||||||
LDAP_ACCOUNT_PREFIX="cn="
|
LDAP_ACCOUNT_PREFIX="cn="
|
||||||
|
|
@ -54,7 +54,7 @@ LDAP_USE_SSL=false
|
||||||
PROJECT_UUID=
|
PROJECT_UUID=
|
||||||
|
|
||||||
## MAIL ADDRESSES
|
## MAIL ADDRESSES
|
||||||
MAIL_LIST_SERVICEWEB=digital@ldc.fr
|
MAIL_LIST_SERVICEWEB=equipe.web@ldc.fr
|
||||||
|
|
||||||
LDC_STATUS_CHECKER_API_KEY=CE8S52Qq7stf5k8frF4T
|
LDC_STATUS_CHECKER_API_KEY=CE8S52Qq7stf5k8frF4T
|
||||||
LDC_STATUS_CHECKER_UUID=4d8b2c20-107a-4682-b591-dc6c685126df
|
LDC_STATUS_CHECKER_UUID=4d8b2c20-107a-4682-b591-dc6c685126df
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ MAIL_PASSWORD=
|
||||||
MAIL_ENCRYPTION=null
|
MAIL_ENCRYPTION=null
|
||||||
MAIL_FROM_ADDRESS=no-reply@dam.lesidc.com
|
MAIL_FROM_ADDRESS=no-reply@dam.lesidc.com
|
||||||
MAIL_FROM_NAME="${APP_NAME}"
|
MAIL_FROM_NAME="${APP_NAME}"
|
||||||
MAIL_ADMIN=digital@ldc.fr
|
MAIL_ADMIN=equipe.web@ldc.fr
|
||||||
|
|
||||||
|
|
||||||
LDAP_ACCOUNT_PREFIX=
|
LDAP_ACCOUNT_PREFIX=
|
||||||
|
|
@ -54,7 +54,7 @@ LDAP_USE_SSL=
|
||||||
PROJECT_UUID=
|
PROJECT_UUID=
|
||||||
|
|
||||||
## MAIL ADDRESSES
|
## MAIL ADDRESSES
|
||||||
MAIL_LIST_SERVICEWEB=digital@ldc.fr
|
MAIL_LIST_SERVICEWEB=equipe.web@ldc.fr
|
||||||
|
|
||||||
LDC_STATUS_CHECKER_API_KEY=
|
LDC_STATUS_CHECKER_API_KEY=
|
||||||
LDC_STATUS_CHECKER_UUID=
|
LDC_STATUS_CHECKER_UUID=
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ php artisan key:generate
|
||||||
.env => remplacer MAIL_DRIVER par MAIL_MAILER
|
.env => remplacer MAIL_DRIVER par MAIL_MAILER
|
||||||
.env => remplacer FILESYSTEM_DRIVER par FILESYSTEM_DISK
|
.env => remplacer FILESYSTEM_DRIVER par FILESYSTEM_DISK
|
||||||
.env rajouter PROJECT_UUID=
|
.env rajouter PROJECT_UUID=
|
||||||
.env rajouter MAIL_LIST_SERVICEWEB=digital@ldc.fr
|
.env rajouter MAIL_LIST_SERVICEWEB=equipe.web@ldc.fr
|
||||||
|
|
||||||
# SUPERVISOR
|
# SUPERVISOR
|
||||||
jobs Api stats sur queue `database`
|
jobs Api stats sur queue `database`
|
||||||
|
|
|
||||||
|
|
@ -127,20 +127,20 @@ class ImportArcadiaModelFiles extends Command
|
||||||
/** @var \SimpleXMLElement $row */
|
/** @var \SimpleXMLElement $row */
|
||||||
foreach ($fileContent->dam as $row) {
|
foreach ($fileContent->dam as $row) {
|
||||||
/** @var \App\Models\Article|null $record */
|
/** @var \App\Models\Article|null $record */
|
||||||
$record = Article::where('noArt', (int)$row->noArt)->first();
|
$record = Article::where('noArt', $row->noArt)->first();
|
||||||
if (!$record) {
|
if (!$record) {
|
||||||
$record = new Article();
|
$record = new Article();
|
||||||
$record->noArt = (int)$row->noArt;
|
$record->noArt = $row->noArt;
|
||||||
}
|
}
|
||||||
$record->libCcial = (string)$row->libCcial;
|
$record->libCcial = $row->libCcial;
|
||||||
$record->codMarq = (int)$row->codMarq;
|
$record->codMarq = $row->codMarq;
|
||||||
$record->libMarq = (string)$row->libMarq;
|
$record->libMarq = $row->libMarq;
|
||||||
$record->codFamVte = (int)$row->codFamVte;
|
$record->codFamVte = $row->codFamVte;
|
||||||
$record->libFamVte = (string)$row->libFamVte;
|
$record->libFamVte = $row->libFamVte;
|
||||||
$record->codGencodAdm = (string)$row->codGencodAdm;
|
$record->codGencodAdm = $row->codGencodAdm;
|
||||||
$record->codGencodSymb = (string)$row->codGencodSymb;
|
$record->codGencodSymb = $row->codGencodSymb;
|
||||||
$record->codGencodPds = (string)$row->codGencodPds;
|
$record->codGencodPds = $row->codGencodPds;
|
||||||
$record->utilisableGroupe = (int)$row->utilisableGroupe;
|
$record->utilisableGroupe = $row->utilisableGroupe;
|
||||||
$record->saveOrFail();
|
$record->saveOrFail();
|
||||||
} //end foreach
|
} //end foreach
|
||||||
}
|
}
|
||||||
|
|
@ -157,12 +157,12 @@ class ImportArcadiaModelFiles extends Command
|
||||||
/** @var \SimpleXMLElement $row */
|
/** @var \SimpleXMLElement $row */
|
||||||
foreach ($fileContent->dam as $row) {
|
foreach ($fileContent->dam as $row) {
|
||||||
/** @var \App\Models\Marque|null $record */
|
/** @var \App\Models\Marque|null $record */
|
||||||
$record = Marque::where('codMarq', (int)$row->codMarq)->first();
|
$record = Marque::where('codMarq', $row->codMarq)->first();
|
||||||
if (!$record) {
|
if (!$record) {
|
||||||
$record = new Marque();
|
$record = new Marque();
|
||||||
$record->codMarq = (int)$row->codMarq;
|
$record->codMarq = $row->codMarq;
|
||||||
}
|
}
|
||||||
$record->libMarq = (string)$row->libMarq;
|
$record->libMarq = $row->libMarq;
|
||||||
$record->saveOrFail();
|
$record->saveOrFail();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -179,12 +179,12 @@ class ImportArcadiaModelFiles extends Command
|
||||||
/** @var \SimpleXMLElement $row */
|
/** @var \SimpleXMLElement $row */
|
||||||
foreach ($fileContent->mediaSujet as $row) {
|
foreach ($fileContent->mediaSujet as $row) {
|
||||||
/** @var \App\Models\Sujet|null $record */
|
/** @var \App\Models\Sujet|null $record */
|
||||||
$record = Sujet::where('codeSujet', (int)$row->code)->first();
|
$record = Sujet::where('codeSujet', $row->code)->first();
|
||||||
if (!$record) {
|
if (!$record) {
|
||||||
$record = new Sujet();
|
$record = new Sujet();
|
||||||
$record->codeSujet = (int)$row->code;
|
$record->codeSujet = $row->code;
|
||||||
}
|
}
|
||||||
$record->libelle = (string)$row->libelle;
|
$record->libelle = $row->libelle;
|
||||||
$record->saveOrFail();
|
$record->saveOrFail();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -201,12 +201,12 @@ class ImportArcadiaModelFiles extends Command
|
||||||
/** @var \SimpleXMLElement $row */
|
/** @var \SimpleXMLElement $row */
|
||||||
foreach ($fileContent->mediatypemedia as $row) {
|
foreach ($fileContent->mediatypemedia as $row) {
|
||||||
/** @var \App\Models\TypeMedia|null $record */
|
/** @var \App\Models\TypeMedia|null $record */
|
||||||
$record = TypeMedia::where('codeTypemedia', (int)$row->code)->first();
|
$record = TypeMedia::where('codeTypemedia', $row->code)->first();
|
||||||
if (!$record) {
|
if (!$record) {
|
||||||
$record = new TypeMedia();
|
$record = new TypeMedia();
|
||||||
$record->codeTypemedia = (int)$row->code;
|
$record->codeTypemedia = $row->code;
|
||||||
}
|
}
|
||||||
$record->libelle = (string)$row->libelle;
|
$record->libelle = $row->libelle;
|
||||||
$record->saveOrFail();
|
$record->saveOrFail();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -223,13 +223,13 @@ class ImportArcadiaModelFiles extends Command
|
||||||
/** @var \SimpleXMLElement $row */
|
/** @var \SimpleXMLElement $row */
|
||||||
foreach ($fileContent->mediatypesvue as $row) {
|
foreach ($fileContent->mediatypesvue as $row) {
|
||||||
/** @var \App\Models\TypeVue|null $record */
|
/** @var \App\Models\TypeVue|null $record */
|
||||||
$record = TypeVue::where('codeTypevue', (int)$row->code)->first();
|
$record = TypeVue::where('codeTypevue', $row->code)->first();
|
||||||
if (!$record) {
|
if (!$record) {
|
||||||
$record = new TypeVue();
|
$record = new TypeVue();
|
||||||
$record->codeTypevue = (int)$row->code;
|
$record->codeTypevue = $row->code;
|
||||||
}
|
}
|
||||||
$record->libelle = (string)$row->libelle;
|
$record->libelle = $row->libelle;
|
||||||
$record->sujet_id = (int)$row->sujet_id->mediasujet->code;
|
$record->sujet_id = $row->sujet_id->mediasujet->code;
|
||||||
$record->saveOrFail();
|
$record->saveOrFail();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -246,14 +246,14 @@ class ImportArcadiaModelFiles extends Command
|
||||||
/** @var \SimpleXMLElement $row */
|
/** @var \SimpleXMLElement $row */
|
||||||
foreach ($fileContent->mediavariante as $row) {
|
foreach ($fileContent->mediavariante as $row) {
|
||||||
/** @var \App\Models\TypeVue|null $record */
|
/** @var \App\Models\TypeVue|null $record */
|
||||||
$record = Variante::where('codeVariante', (int)$row->code)->first();
|
$record = Variante::where('codeVariante', $row->code)->first();
|
||||||
if (!$record) {
|
if (!$record) {
|
||||||
$record = new Variante();
|
$record = new Variante();
|
||||||
$record->codeVariante = (int)$row->code;
|
$record->codeVariante = $row->code;
|
||||||
}
|
}
|
||||||
$record->libelle = (string)$row->libelle;
|
$record->libelle = $row->libelle;
|
||||||
$record->sujet_id = (int)$row->sujet_id->children()[0]->code;
|
$record->sujet_id = $row->sujet_id->children()[0]->code;
|
||||||
$record->type_vue_id = (int)$row->CodeTypeVue->mediatypesvue->code;
|
$record->type_vue_id = $row->CodeTypeVue->mediatypesvue->code;
|
||||||
$record->saveOrFail();
|
$record->saveOrFail();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -270,12 +270,12 @@ class ImportArcadiaModelFiles extends Command
|
||||||
/** @var \SimpleXMLElement $row */
|
/** @var \SimpleXMLElement $row */
|
||||||
foreach ($fileContent->SITE_PROD_GRP as $row) {
|
foreach ($fileContent->SITE_PROD_GRP as $row) {
|
||||||
/** @var \App\Models\TypeVue|null $record */
|
/** @var \App\Models\TypeVue|null $record */
|
||||||
$record = Site::where('id', (int)$row->code)->first();
|
$record = Site::where('id', $row->code)->first();
|
||||||
if (!$record) {
|
if (!$record) {
|
||||||
$record = new Site();
|
$record = new Site();
|
||||||
$record->id = (int)$row->code;
|
$record->id = $row->code;
|
||||||
}
|
}
|
||||||
$record->libelle = (string)$row->libelle;
|
$record->libelle = $row->libelle;
|
||||||
$record->saveOrFail();
|
$record->saveOrFail();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -292,12 +292,12 @@ class ImportArcadiaModelFiles extends Command
|
||||||
/** @var \SimpleXMLElement $row */
|
/** @var \SimpleXMLElement $row */
|
||||||
foreach ($fileContent->dam as $row) {
|
foreach ($fileContent->dam as $row) {
|
||||||
/** @var \App\Models\TypeVue|null $record */
|
/** @var \App\Models\TypeVue|null $record */
|
||||||
$record = Societe::where('id', (int)$row->codSociete)->first();
|
$record = Societe::where('id', $row->codSociete)->first();
|
||||||
if (!$record) {
|
if (!$record) {
|
||||||
$record = new Societe();
|
$record = new Societe();
|
||||||
$record->id = (int)$row->codSociete;
|
$record->id = $row->codSociete;
|
||||||
}
|
}
|
||||||
$record->libelle = (string)$row->nomSociete;
|
$record->libelle = $row->nomSociete;
|
||||||
$record->saveOrFail();
|
$record->saveOrFail();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,54 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Console\Commands;
|
|
||||||
|
|
||||||
use App\Lib\ArcadiaLinkUtilities;
|
|
||||||
use App\Models\ArcadiaLink;
|
|
||||||
use App\Models\Media;
|
|
||||||
use Illuminate\Console\Command;
|
|
||||||
|
|
||||||
class ResendArcadiaLinkMedias extends Command
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* The name and signature of the console command.
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
protected $signature = 'medias:resend-aracadia-links';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The console command description.
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
protected $description = 'Resend files to Arcadia after Arcadia Link fix';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Execute the console command.
|
|
||||||
*
|
|
||||||
* @return int
|
|
||||||
*/
|
|
||||||
public function handle()
|
|
||||||
{
|
|
||||||
// FIXME : Variabiliser la date
|
|
||||||
//$al = ArcadiaLink::where('created_at', '>=', '2025-10-23')->get();
|
|
||||||
|
|
||||||
foreach ($al as $error)
|
|
||||||
{
|
|
||||||
$media = Media::withTrashed()->find($error->media_id);
|
|
||||||
|
|
||||||
if ($error->arcadia_id === 0) {
|
|
||||||
|
|
||||||
ArcadiaLinkUtilities::create($media);
|
|
||||||
} else {
|
|
||||||
if (is_null($media->deleted_at)) {
|
|
||||||
ArcadiaLinkUtilities::update($media);
|
|
||||||
} else {
|
|
||||||
ArcadiaLinkUtilities::delete($media);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return Command::SUCCESS;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
use App\Models\ArcadiaLink;
|
use App\Models\ArcadiaLink;
|
||||||
use Illuminate\Contracts\Database\Eloquent\Builder;
|
use Illuminate\Support\Carbon;
|
||||||
|
|
||||||
class ArcadiaLinkController extends Controller
|
class ArcadiaLinkController extends Controller
|
||||||
{
|
{
|
||||||
|
|
@ -17,14 +17,9 @@ class ArcadiaLinkController extends Controller
|
||||||
/** @var \App\Models\User */
|
/** @var \App\Models\User */
|
||||||
$user = auth()->user();
|
$user = auth()->user();
|
||||||
$user->authorizeRoles(config('roles.const.ADMIN'));
|
$user->authorizeRoles(config('roles.const.ADMIN'));
|
||||||
|
$dt = Carbon::now('Europe/Paris')->subMinutes(15)->toDateTimeString();
|
||||||
// * ArcadiaLink->Media is nullable
|
$ano = ArcadiaLink::where('created_at', '<', $dt)->orderBy('id', 'DESC')->get();
|
||||||
$arcadiaLinkList = ArcadiaLink::query()
|
return view('arcadialinks.index', ['ano' => $ano]);
|
||||||
->with('media', fn (Builder $q) => $q->withTrashed())
|
|
||||||
->where('created_at', '<', now()->subMinutes(15))
|
|
||||||
->orderBy('id', 'DESC')->get();
|
|
||||||
|
|
||||||
return view('arcadialinks.index', compact('arcadiaLinkList'));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -39,8 +39,7 @@ class CommonController extends Controller
|
||||||
})->with('sujet')->get();
|
})->with('sujet')->get();
|
||||||
|
|
||||||
return view('home')->with([
|
return view('home')->with([
|
||||||
'sujets' => $sujets,
|
'sujets' => $sujets, 'recherches' => $recherches,
|
||||||
'recherches' => $recherches,
|
|
||||||
'dossiers' => $dossiers
|
'dossiers' => $dossiers
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
@ -55,10 +54,8 @@ class CommonController extends Controller
|
||||||
{
|
{
|
||||||
/** @var \App\Models\User $user */
|
/** @var \App\Models\User $user */
|
||||||
$user = auth()->user();
|
$user = auth()->user();
|
||||||
foreach (config('mail.contactsList.admin') as $mail) {
|
Mail::to(env('MAIL_ADMIN_ADDRESS', "informatique.internet@ldc.fr"))
|
||||||
Mail::to($mail)
|
->send(new ContactMail(ContactType::from($request->type), $request->url, $request->message, $user));
|
||||||
->send(new ContactMail(ContactType::from($request->type), $request->url, $request->message, $user));
|
|
||||||
}
|
|
||||||
|
|
||||||
return response()->json(['status' => 'OK']);
|
return response()->json(['status' => 'OK']);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,6 @@ use Illuminate\Contracts\Database\Eloquent\Builder;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\RedirectResponse;
|
use Illuminate\Http\RedirectResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Arr;
|
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
|
|
@ -43,7 +42,7 @@ class DossierController extends Controller
|
||||||
$publicFolders = Dossier::query()
|
$publicFolders = Dossier::query()
|
||||||
->whereHas('sujet', fn (Builder $q) => $q->where('codeSujet', $request->input('sujet_id')))
|
->whereHas('sujet', fn (Builder $q) => $q->where('codeSujet', $request->input('sujet_id')))
|
||||||
->where('is_private', false)
|
->where('is_private', false)
|
||||||
->whereNull('parent_id')
|
->whereDoesntHave('dossierParent')
|
||||||
->select($select)->get();
|
->select($select)->get();
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -75,29 +74,23 @@ class DossierController extends Controller
|
||||||
// * Ajout du dépôt de fichier pour les admin.
|
// * Ajout du dépôt de fichier pour les admin.
|
||||||
/** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Dossier> Dossiers depots */
|
/** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Dossier> Dossiers depots */
|
||||||
$depotQuery = Dossier::query()
|
$depotQuery = Dossier::query()
|
||||||
->whereNull('parent_id')
|
->whereDoesntHave('dossierParent')
|
||||||
->where('system', true)
|
->where('system', true)
|
||||||
->orderBy('libelle', 'ASC')
|
->orderBy('libelle', 'ASC')
|
||||||
->get();
|
->get();
|
||||||
$foldersCollection = $foldersCollection->merge($depotQuery);
|
$foldersCollection = $foldersCollection->merge($depotQuery);
|
||||||
}
|
}
|
||||||
|
|
||||||
Arr::set($folders, 'data', new NestedDossiersListResource($foldersCollection));
|
$folders['data'] = new NestedDossiersListResource($foldersCollection);
|
||||||
|
$folders['racineCount'] = Media::query()
|
||||||
// * Racine Count
|
->whereHas('sujet', fn (Builder $q) => $q->where('id', $request->input('sujet_id')))
|
||||||
$racineCountQuery = Media::query()
|
->whereDoesntHave('dossier')
|
||||||
->whereHas('sujet', fn (Builder $q) => $q->where('codeSujet', $request->input('sujet_id')))
|
->where(
|
||||||
->whereDoesntHave('dossier');
|
|
||||||
// ? Is not admin ?
|
|
||||||
if (!$user->hasRole(config('roles.const.ADMIN'))) {
|
|
||||||
$racineCountQuery->where(
|
|
||||||
fn (Builder $q) =>
|
fn (Builder $q) =>
|
||||||
$q->where('statut', MediaStatut::public_etendu)
|
$q->where('statut', MediaStatut::public_etendu)
|
||||||
->orWhere('statut', MediaStatut::public)
|
->orWhere('statut', MediaStatut::public)
|
||||||
->orWhere('created_by', $user->id)
|
->orWhere('created_by', $user->id)
|
||||||
);
|
)->count();
|
||||||
}
|
|
||||||
Arr::set($folders, 'racineCount', $racineCountQuery->count());
|
|
||||||
|
|
||||||
return response()->json($folders);
|
return response()->json($folders);
|
||||||
}
|
}
|
||||||
|
|
@ -115,7 +108,7 @@ class DossierController extends Controller
|
||||||
|
|
||||||
$response = [];
|
$response = [];
|
||||||
$response['variantes'] = Variante::query()
|
$response['variantes'] = Variante::query()
|
||||||
->whereHas('sujet', fn (Builder $q) => $q->where('codeSujet', $request->input('sujetId')))
|
->whereHas('sujet', fn (Builder $q) => $q->where('id', $request->input('sujetId')))
|
||||||
->get();
|
->get();
|
||||||
/** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Format> */
|
/** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Format> */
|
||||||
$FormatsSujet = Format::query()
|
$FormatsSujet = Format::query()
|
||||||
|
|
@ -150,7 +143,7 @@ class DossierController extends Controller
|
||||||
|
|
||||||
/** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Dossier> */
|
/** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Dossier> */
|
||||||
$dossiers = Dossier::query()
|
$dossiers = Dossier::query()
|
||||||
->whereNull('parent_id')
|
->whereDoesntHave('dossierParent')
|
||||||
->where('system', false)
|
->where('system', false)
|
||||||
->orderBy('libelle', 'asc')
|
->orderBy('libelle', 'asc')
|
||||||
->get();
|
->get();
|
||||||
|
|
@ -174,7 +167,7 @@ class DossierController extends Controller
|
||||||
if ($request->sub) {
|
if ($request->sub) {
|
||||||
/** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Dossier> */
|
/** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Dossier> */
|
||||||
$dossiers = Dossier::query()
|
$dossiers = Dossier::query()
|
||||||
->whereNull('parent_id')
|
->whereDoesntHave('dossierParent')
|
||||||
->where('system', false)
|
->where('system', false)
|
||||||
->orderBy('libelle', 'asc')->get();
|
->orderBy('libelle', 'asc')->get();
|
||||||
return view('dossiers.create-sub', [
|
return view('dossiers.create-sub', [
|
||||||
|
|
|
||||||
|
|
@ -34,12 +34,11 @@ use App\Models\Sujet;
|
||||||
use App\Models\Tag;
|
use App\Models\Tag;
|
||||||
use App\Models\TypeMedia;
|
use App\Models\TypeMedia;
|
||||||
use App\Traits\Http\HandlesMedia;
|
use App\Traits\Http\HandlesMedia;
|
||||||
use Illuminate\Contracts\Database\Eloquent\Builder;
|
|
||||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\RedirectResponse;
|
use Illuminate\Http\RedirectResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Arr;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\Facades\File;
|
use Illuminate\Support\Facades\File;
|
||||||
use Illuminate\Support\Facades\Storage;
|
use Illuminate\Support\Facades\Storage;
|
||||||
|
|
@ -66,8 +65,6 @@ class MediaController extends Controller
|
||||||
|
|
||||||
/** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Sujet> */
|
/** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Sujet> */
|
||||||
$sujets = $user->sujets;
|
$sujets = $user->sujets;
|
||||||
// ! Has to flush Media cache before querying basket with media list
|
|
||||||
Media::flushQueryCache();
|
|
||||||
/** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Panier> */
|
/** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Panier> */
|
||||||
$paniers = $user->paniersOwner;
|
$paniers = $user->paniersOwner;
|
||||||
/** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Societe> */
|
/** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Societe> */
|
||||||
|
|
@ -105,7 +102,7 @@ class MediaController extends Controller
|
||||||
$textSearch,
|
$textSearch,
|
||||||
$filters,
|
$filters,
|
||||||
intval(Dossier::where('id', $dossier_id)->exists() ?
|
intval(Dossier::where('id', $dossier_id)->exists() ?
|
||||||
$dossier_id : (in_array($dossier_id, [-1, 0]) ? $dossier_id : -1))
|
$dossier_id : (in_array($dossier_id, [-1, 0]) ? $dossier_id : -1))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -127,7 +124,7 @@ class MediaController extends Controller
|
||||||
'etiquettes' => $etiquettes,
|
'etiquettes' => $etiquettes,
|
||||||
'societes' => $societes,
|
'societes' => $societes,
|
||||||
'marques' => $marques,
|
'marques' => $marques,
|
||||||
'currentFolder' => Dossier::query()->where('id', $dossier_id)->first() ?? $dossier_id,
|
'currentFolder' => $dossier_id,
|
||||||
'currentSujet' => optional($sujet)->codeSujet ?? \optional($sujets->first())->codeSujet,
|
'currentSujet' => optional($sujet)->codeSujet ?? \optional($sujets->first())->codeSujet,
|
||||||
'currentFilters' => json_encode($filters),
|
'currentFilters' => json_encode($filters),
|
||||||
'paniers' => $paniers,
|
'paniers' => $paniers,
|
||||||
|
|
@ -159,16 +156,12 @@ class MediaController extends Controller
|
||||||
$user = auth()->user();
|
$user = auth()->user();
|
||||||
|
|
||||||
/** @var \App\Models\Dossier|null */
|
/** @var \App\Models\Dossier|null */
|
||||||
$dossier = Dossier::query()
|
$dossier = Dossier::where('id', $request->folder)->first();
|
||||||
->with('dossierParent')
|
|
||||||
->where('id', $request->input('folder'))
|
|
||||||
->first();
|
|
||||||
|
|
||||||
$response = [];
|
$response = [];
|
||||||
$filters = (object)collect($request->input('filters'))->all();
|
$filters = (object)collect($request->filters)->all();
|
||||||
|
|
||||||
/** @var boolean Est un dossier Dépot ? */
|
$isDepot = ($dossier->parent_id ?? null) === 1 || ($dossier->id ?? null) === 1;
|
||||||
$isDepot = !empty($dossier) && (\optional($dossier->dossierParent)->id === 1 || $dossier->id === 1);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Elastic Search must conditions
|
* Elastic Search must conditions
|
||||||
|
|
@ -212,6 +205,7 @@ class MediaController extends Controller
|
||||||
$esMust,
|
$esMust,
|
||||||
$esMustNot,
|
$esMustNot,
|
||||||
$esShould,
|
$esShould,
|
||||||
|
$esFilters,
|
||||||
$request,
|
$request,
|
||||||
$dossier,
|
$dossier,
|
||||||
$sujet,
|
$sujet,
|
||||||
|
|
@ -226,30 +220,26 @@ class MediaController extends Controller
|
||||||
'bool.should' => $esShould,
|
'bool.should' => $esShould,
|
||||||
'bool.filter' => $esFilters,
|
'bool.filter' => $esFilters,
|
||||||
]);
|
]);
|
||||||
$sort = [[$orderField => ['order' => $order]]];
|
|
||||||
|
|
||||||
Arr::set($response, 'data', Media::searchByQuery(
|
$sort = [[$orderField => ['order' => $order]]];
|
||||||
|
|
||||||
|
$response['data'] = Media::searchByQuery(
|
||||||
$query,
|
$query,
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
intval($request->post('limit', 50)),
|
intval($request->post('limit', 50)),
|
||||||
intval($request->post('offset', 0)),
|
intval($request->post('offset', 0)),
|
||||||
$sort
|
$sort
|
||||||
));
|
|
||||||
|
|
||||||
Arr::set($response, 'draggable', $user->hasRole([
|
|
||||||
config('roles.const.ADMIN'),
|
|
||||||
config('roles.const.REDACTEUR')
|
|
||||||
]));
|
|
||||||
Arr::set($response, 'isDepot', $isDepot);
|
|
||||||
Arr::set(
|
|
||||||
$response,
|
|
||||||
'isCAQuery',
|
|
||||||
$searchText &&
|
|
||||||
strpos($searchText, '=') !== false &&
|
|
||||||
\strval(collect(explode('=', $searchText))->get(0)) === 'ca'
|
|
||||||
);
|
);
|
||||||
Arr::set($response, 'role', $user->role);
|
|
||||||
|
$response['draggable'] = $user->hasRole([config('roles.const.ADMIN'), config('roles.const.REDACTEUR')]);
|
||||||
|
$response['isDepot'] = $isDepot;
|
||||||
|
|
||||||
|
$response['isCAQuery'] = $searchText &&
|
||||||
|
strpos($searchText, '=') !== false &&
|
||||||
|
\strval(collect(explode('=', $searchText))->get(0)) === 'ca';
|
||||||
|
|
||||||
|
$response['role'] = $user->role;
|
||||||
|
|
||||||
return \response()->json($response);
|
return \response()->json($response);
|
||||||
}
|
}
|
||||||
|
|
@ -272,7 +262,7 @@ class MediaController extends Controller
|
||||||
|
|
||||||
/** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Media> */
|
/** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Media> */
|
||||||
$mediaList = Media::whereIn('id', collect($request->mediaList)->pluck('id'))
|
$mediaList = Media::whereIn('id', collect($request->mediaList)->pluck('id'))
|
||||||
->where('isLocked', false)->get();
|
->where('isLocked', false)->get();
|
||||||
|
|
||||||
$destinationDossierId = \intval($request->dossier_id);
|
$destinationDossierId = \intval($request->dossier_id);
|
||||||
|
|
||||||
|
|
@ -356,7 +346,7 @@ class MediaController extends Controller
|
||||||
});
|
});
|
||||||
} catch (ModelNotFoundException | \RuntimeException $e) {
|
} catch (ModelNotFoundException | \RuntimeException $e) {
|
||||||
return response()->json($e->getMessage(), 500);
|
return response()->json($e->getMessage(), 500);
|
||||||
} //end try
|
}//end try
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -407,7 +397,6 @@ class MediaController extends Controller
|
||||||
|
|
||||||
// ---- Les articles
|
// ---- Les articles
|
||||||
$media->articles()->sync(collect($request->articles)->pluck('id')->all());
|
$media->articles()->sync(collect($request->articles)->pluck('id')->all());
|
||||||
Article::flushQueryCache();
|
|
||||||
|
|
||||||
$media->saveOrFail();
|
$media->saveOrFail();
|
||||||
|
|
||||||
|
|
@ -427,7 +416,7 @@ class MediaController extends Controller
|
||||||
'status' => false,
|
'status' => false,
|
||||||
'error' => trans('Une erreur est survenue veuillez réessayer')
|
'error' => trans('Une erreur est survenue veuillez réessayer')
|
||||||
]);
|
]);
|
||||||
} //end try
|
}//end try
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -439,98 +428,90 @@ class MediaController extends Controller
|
||||||
*/
|
*/
|
||||||
public function duplicateMedia(Media $media): JsonResponse
|
public function duplicateMedia(Media $media): JsonResponse
|
||||||
{
|
{
|
||||||
return DB::transaction(function () use ($media) {
|
/** @var \App\Models\User */
|
||||||
/** @var \App\Models\User */
|
$user = auth()->user();
|
||||||
$user = auth()->user();
|
|
||||||
|
|
||||||
$user->authorizeRoles([
|
$user->authorizeRoles([
|
||||||
config('roles.const.ADMIN'),
|
config('roles.const.ADMIN'),
|
||||||
config('roles.const.REDACTEUR'),
|
config('roles.const.REDACTEUR'),
|
||||||
config('roles.const.CONTRIBUTEUR')
|
config('roles.const.CONTRIBUTEUR')
|
||||||
]);
|
]);
|
||||||
|
|
||||||
if ($media->isLocked) {
|
|
||||||
return \response()->json([
|
|
||||||
'status' => false,
|
|
||||||
'error' => trans('Le média est en attente d\'un retour d\'Arcadia.')
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
$clonedMedia = $media->replicate();
|
|
||||||
|
|
||||||
// * Remove Arcadia ID (cloned is not linked to arcadia)
|
|
||||||
$clonedMedia->arcadia_id = null;
|
|
||||||
|
|
||||||
/** @var \Illuminate\Filesystem\FilesystemAdapter */
|
|
||||||
$storage = Storage::disk('media');
|
|
||||||
|
|
||||||
$clonedMedia->uid = Str::uuid();
|
|
||||||
$clonedMedia->extension = MediaExtension::jpg;
|
|
||||||
|
|
||||||
if (!Storage::exists('assets/images/default.jpg')) {
|
|
||||||
throw new \RuntimeException('Missing default picture');
|
|
||||||
}
|
|
||||||
|
|
||||||
$fileContent = Storage::get('assets/images/default.jpg');
|
|
||||||
|
|
||||||
if (!$storage->put($clonedMedia->relative_path, $fileContent)) {
|
|
||||||
throw new \RuntimeException('Failed to copy default picture');
|
|
||||||
}
|
|
||||||
|
|
||||||
$clonedMedia->libelle = Str::limit("{$clonedMedia->libelle}_copy", 45);
|
|
||||||
$clonedMedia->taille = \strlen($fileContent);
|
|
||||||
|
|
||||||
$dimensions = ToolboxHelper::getImageDimensions(Storage::path('assets/images/default.jpg'));
|
|
||||||
|
|
||||||
if ($dimensions) {
|
|
||||||
$clonedMedia->resolution = $dimensions['resolutionX'];
|
|
||||||
$clonedMedia->largeur = $dimensions['width'];
|
|
||||||
$clonedMedia->hauteur = $dimensions['height'];
|
|
||||||
$clonedMedia->largeur_mm = !empty($media->resolution) ? ceil($media->largeur * 10) : 0;
|
|
||||||
$clonedMedia->hauteur_mm = !empty($media->resolution) ? ceil($media->hauteur * 10) : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
$clonedMedia->isDefault = true;
|
|
||||||
$clonedMedia->owner()->associate($user);
|
|
||||||
|
|
||||||
$clonedMedia->typeMedia()->associate(TypeMedia::getMediaType($clonedMedia->extension));
|
|
||||||
|
|
||||||
// ---- Creation des vignettes de base
|
|
||||||
$clonedMedia->createThumbnail();
|
|
||||||
// ---- Creation des vignettes en lien avec le sujet du média
|
|
||||||
$clonedMedia->createSubjectThumbnails();
|
|
||||||
|
|
||||||
$clonedMedia->isDuplicate = true;
|
|
||||||
|
|
||||||
$clonedMedia->save();
|
|
||||||
|
|
||||||
// * Add relations after having a media id
|
|
||||||
$media->articles->map(function (Article $article) use ($clonedMedia) {
|
|
||||||
$clonedMedia->articles()->attach($article);
|
|
||||||
});
|
|
||||||
$media->marques->map(function (Marque $marque) use ($clonedMedia) {
|
|
||||||
$clonedMedia->marques()->attach($marque);
|
|
||||||
});
|
|
||||||
$media->societes->map(function (Societe $societe) use ($clonedMedia) {
|
|
||||||
$clonedMedia->societes()->attach($societe);
|
|
||||||
});
|
|
||||||
$media->tags->map(function (Tag $tag) use ($clonedMedia) {
|
|
||||||
$clonedMedia->tags()->attach($tag);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
/** @throws \RuntimeException */
|
|
||||||
$clonedMedia->addToElasticSearch();
|
|
||||||
|
|
||||||
// * Get props inserted by DB.
|
|
||||||
$clonedMedia->refresh();
|
|
||||||
|
|
||||||
|
if ($media->isLocked) {
|
||||||
return \response()->json([
|
return \response()->json([
|
||||||
'status' => true,
|
'status' => false,
|
||||||
'sujet_id' => $clonedMedia->sujet_id,
|
'error' => trans('Le média est en attente d\'un retour d\'Arcadia.')
|
||||||
'datas' => $clonedMedia
|
|
||||||
]);
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$clonedMedia = $media->replicate();
|
||||||
|
|
||||||
|
$media->articles->map(function (Article $article) use ($clonedMedia) {
|
||||||
|
$clonedMedia->articles()->attach($article);
|
||||||
});
|
});
|
||||||
|
$media->marques->map(function (Marque $marque) use ($clonedMedia) {
|
||||||
|
$clonedMedia->marques()->attach($marque);
|
||||||
|
});
|
||||||
|
$media->societes->map(function (Societe $societe) use ($clonedMedia) {
|
||||||
|
$clonedMedia->societes()->attach($societe);
|
||||||
|
});
|
||||||
|
$media->tags->map(function (Tag $tag) use ($clonedMedia) {
|
||||||
|
$clonedMedia->tags()->attach($tag);
|
||||||
|
});
|
||||||
|
|
||||||
|
/** @var \Illuminate\Filesystem\FilesystemAdapter */
|
||||||
|
$storage = Storage::disk('media');
|
||||||
|
|
||||||
|
$clonedMedia->uid = Str::uuid();
|
||||||
|
$clonedMedia->extension = MediaExtension::jpg;
|
||||||
|
|
||||||
|
if (!Storage::exists('assets/images/default.jpg')) {
|
||||||
|
throw new \RuntimeException('Missing default picture');
|
||||||
|
}
|
||||||
|
|
||||||
|
$fileContent = Storage::get('assets/images/default.jpg');
|
||||||
|
|
||||||
|
if (!$storage->put($clonedMedia->relative_path, $fileContent)) {
|
||||||
|
throw new \RuntimeException('Failed to copy default picture');
|
||||||
|
}
|
||||||
|
|
||||||
|
$clonedMedia->libelle = Str::limit("{$clonedMedia->libelle}_copy", 45);
|
||||||
|
$clonedMedia->taille = \strlen($fileContent);
|
||||||
|
|
||||||
|
$dimensions = ToolboxHelper::getImageDimensions(Storage::path('assets/images/default.jpg'));
|
||||||
|
|
||||||
|
if ($dimensions) {
|
||||||
|
$clonedMedia->resolution = $dimensions['resolutionX'];
|
||||||
|
$clonedMedia->largeur = $dimensions['width'];
|
||||||
|
$clonedMedia->hauteur = $dimensions['height'];
|
||||||
|
$clonedMedia->largeur_mm = !empty($media->resolution) ? ceil($media->largeur * 10) : 0;
|
||||||
|
$clonedMedia->hauteur_mm = !empty($media->resolution) ? ceil($media->hauteur * 10) : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$clonedMedia->isDefault = true;
|
||||||
|
$clonedMedia->owner()->associate($user);
|
||||||
|
|
||||||
|
$clonedMedia->typeMedia()->associate(TypeMedia::getMediaType($clonedMedia->extension));
|
||||||
|
|
||||||
|
// ---- Creation des vignettes de base
|
||||||
|
$clonedMedia->createThumbnail();
|
||||||
|
// ---- Creation des vignettes en lien avec le sujet du média
|
||||||
|
$clonedMedia->createSubjectThumbnails();
|
||||||
|
|
||||||
|
$clonedMedia->saveOrFail();
|
||||||
|
|
||||||
|
|
||||||
|
/** @throws \RuntimeException */
|
||||||
|
$clonedMedia->addToElasticSearch();
|
||||||
|
|
||||||
|
// * Get props inserted by DB.
|
||||||
|
$clonedMedia->refresh();
|
||||||
|
|
||||||
|
return \response()->json([
|
||||||
|
'status' => true,
|
||||||
|
'sujet_id' => $clonedMedia->sujet_id,
|
||||||
|
'datas' => $clonedMedia
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -660,12 +641,6 @@ class MediaController extends Controller
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($media->statut === MediaStatut::brouillon) {
|
|
||||||
throw ValidationException::withMessages([
|
|
||||||
'media' => trans('Ce média n\'est pas publié. Veuillez sauvegarder pour enregistrer le statut.')
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
MediaLinkWithArcadia::dispatch($user, $media);
|
MediaLinkWithArcadia::dispatch($user, $media);
|
||||||
|
|
||||||
return response()->json(true);
|
return response()->json(true);
|
||||||
|
|
@ -769,16 +744,15 @@ class MediaController extends Controller
|
||||||
*/
|
*/
|
||||||
public function getMediaOtherInfos(Media $media): JsonResponse
|
public function getMediaOtherInfos(Media $media): JsonResponse
|
||||||
{
|
{
|
||||||
if (!auth()->check()) {
|
if (!($user = Auth::user())) {
|
||||||
abort(401, 'Cette action n\'est pas autorisée.');
|
abort(401, 'Cette action n\'est pas autorisée.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$history = Historique::query()
|
$history = Historique::whereHas('media', function ($q) use ($media) {
|
||||||
->whereHas('media', fn(Builder $q) => $q->where('id', $media->id))
|
$q->whereId($media->id);
|
||||||
->with('user')
|
})->with('user')
|
||||||
->orderBy('created_date', 'DESC')
|
->orderBy('created_date', 'DESC')
|
||||||
->get();
|
->get();
|
||||||
|
|
||||||
return \response()->json([
|
return \response()->json([
|
||||||
'history' => $history,
|
'history' => $history,
|
||||||
'vignettes' => $this->getVignettesByMedia($media)
|
'vignettes' => $this->getVignettesByMedia($media)
|
||||||
|
|
@ -817,7 +791,7 @@ class MediaController extends Controller
|
||||||
/** @var boolean */
|
/** @var boolean */
|
||||||
$arcadia_id = collect($filters)->reduce(function (string|null $carry, array $item) {
|
$arcadia_id = collect($filters)->reduce(function (string|null $carry, array $item) {
|
||||||
$item = collect($item);
|
$item = collect($item);
|
||||||
return ($carry ?? false) or ($item->get('type') === 'arcadia_id' ? true : false);
|
return $carry ?? ($carry or $item->get('type') === 'arcadia_id' ? true : false);
|
||||||
});
|
});
|
||||||
|
|
||||||
$esConditions = [];
|
$esConditions = [];
|
||||||
|
|
@ -851,21 +825,21 @@ class MediaController extends Controller
|
||||||
/**
|
/**
|
||||||
* Elastic Search select appropriate Folder
|
* Elastic Search select appropriate Folder
|
||||||
*
|
*
|
||||||
* @param array $esMust ES conditions INCLURE TOUT (AND).
|
* @param array $esMust
|
||||||
* @param array $esMustNot ES conditions EXCLURE.
|
* @param array $esMustNot
|
||||||
* @param array $esShould ES conditions INCLURE AU MOINS (OR), avec un score.
|
* @param array $esShould
|
||||||
* @param \App\Http\Requests\Bo\LoadMediaRequest $request La request Lrvl.
|
* @param array $esFilters
|
||||||
* @param \App\Models\Dossier|null $dossier Le dossier concerné, si les Medias
|
* @param \App\Http\Requests\Bo\LoadMediaRequest $request
|
||||||
* doivent appartenir a celui-ci.
|
* @param \App\Models\Dossier|null $dossier
|
||||||
* @param \App\Models\Sujet $sujet Le sujet concerné, si les Medias
|
* @param \App\Models\Sujet $sujet
|
||||||
* doivent appartenir a celui-ci.
|
* @param boolean $isDepot
|
||||||
* @param boolean $isDepot Si les medias doivent se trouver dans le dossier dépot.
|
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
private function esFolderSearch(
|
private function esFolderSearch(
|
||||||
array &$esMust,
|
array &$esMust,
|
||||||
array &$esMustNot,
|
array &$esMustNot,
|
||||||
array &$esShould,
|
array &$esShould,
|
||||||
|
array &$esFilters,
|
||||||
LoadMediaRequest $request,
|
LoadMediaRequest $request,
|
||||||
Dossier|null $dossier,
|
Dossier|null $dossier,
|
||||||
Sujet $sujet,
|
Sujet $sujet,
|
||||||
|
|
@ -874,7 +848,6 @@ class MediaController extends Controller
|
||||||
/** @var \App\Models\User */
|
/** @var \App\Models\User */
|
||||||
$user = auth()->user();
|
$user = auth()->user();
|
||||||
|
|
||||||
// ? Doivent être dans le dossier dépot ?
|
|
||||||
if ($isDepot) {
|
if ($isDepot) {
|
||||||
// * Dossier dépôt
|
// * Dossier dépôt
|
||||||
$esMust = array_merge($esMust, [[
|
$esMust = array_merge($esMust, [[
|
||||||
|
|
@ -883,26 +856,21 @@ class MediaController extends Controller
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ? N'est pas dans le dossier dépot ou racine ?
|
|
||||||
if (!$dossier) {
|
if (!$dossier) {
|
||||||
// ? Recherche globale ?
|
if ($request->folder === -1) {
|
||||||
if ($request->input('folder') === -1) {
|
|
||||||
// * Recherche globale .
|
// * Recherche globale .
|
||||||
$esMust = array_merge($esMust, [
|
$esMust = array_merge($esMust, [
|
||||||
// * AND
|
|
||||||
\array_undot(['bool.must.match.sujet_id' => $sujet->codeSujet])
|
\array_undot(['bool.must.match.sujet_id' => $sujet->codeSujet])
|
||||||
]);
|
]);
|
||||||
} else {
|
} else {
|
||||||
// * Dossier racine .
|
// * Dossier racine .
|
||||||
$esMust = array_merge($esMust, [
|
$esMust = array_merge($esMust, [
|
||||||
// * AND
|
|
||||||
\array_undot(['bool.should.match.sujet_id' => $sujet->codeSujet])
|
\array_undot(['bool.should.match.sujet_id' => $sujet->codeSujet])
|
||||||
]);
|
]);
|
||||||
$esMustNot = array_merge($esMustNot, [
|
$esMustNot = array_merge($esMustNot, [
|
||||||
\array_undot(['exists.field' => 'dossier_id'])
|
\array_undot(['exists.field' => 'dossier_id'])
|
||||||
]);
|
]);
|
||||||
} //end if
|
} //end if
|
||||||
// * OR
|
|
||||||
$esShould = array_merge($esShould, [
|
$esShould = array_merge($esShould, [
|
||||||
\array_undot(['match.statut' => MediaStatut::public_etendu]),
|
\array_undot(['match.statut' => MediaStatut::public_etendu]),
|
||||||
\array_undot(['match.statut' => MediaStatut::public]),
|
\array_undot(['match.statut' => MediaStatut::public]),
|
||||||
|
|
@ -913,7 +881,6 @@ class MediaController extends Controller
|
||||||
|
|
||||||
// * Dossier classic .
|
// * Dossier classic .
|
||||||
$esMust = array_merge($esMust, [[
|
$esMust = array_merge($esMust, [[
|
||||||
// * AND
|
|
||||||
\array_undot([
|
\array_undot([
|
||||||
'bool.must' => [
|
'bool.must' => [
|
||||||
\array_undot(['match.sujet_id' => $sujet->codeSujet]),
|
\array_undot(['match.sujet_id' => $sujet->codeSujet]),
|
||||||
|
|
@ -922,13 +889,9 @@ class MediaController extends Controller
|
||||||
])
|
])
|
||||||
]]);
|
]]);
|
||||||
|
|
||||||
// ? User n'est pas ADMIN ?
|
|
||||||
if (!$user->hasRole(config('roles.const.ADMIN'))) {
|
if (!$user->hasRole(config('roles.const.ADMIN'))) {
|
||||||
// * Ajout de restrictions
|
$esFilters = array_merge($esFilters, [
|
||||||
// * Tout ce qui nous appartient et tout ce qui n'est pas brouillon
|
|
||||||
$esMust = array_merge($esMust, [
|
|
||||||
\array_undot([
|
\array_undot([
|
||||||
// * OR
|
|
||||||
'bool.should' => [
|
'bool.should' => [
|
||||||
\array_undot([
|
\array_undot([
|
||||||
'bool.must_not' => [[
|
'bool.must_not' => [[
|
||||||
|
|
@ -1099,9 +1062,9 @@ class MediaController extends Controller
|
||||||
];
|
];
|
||||||
|
|
||||||
$sys_extension = in_array($media->extension, [
|
$sys_extension = in_array($media->extension, [
|
||||||
MediaExtension::pdf,
|
MediaExtension::pdf,
|
||||||
MediaExtension::ai,
|
MediaExtension::ai,
|
||||||
MediaExtension::psd
|
MediaExtension::psd
|
||||||
]) ? MediaExtension::png : $media->extension->value;
|
]) ? MediaExtension::png : $media->extension->value;
|
||||||
|
|
||||||
$vignettes['preview'] = [
|
$vignettes['preview'] = [
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,6 @@ use Illuminate\Support\Str;
|
||||||
use App\Models\Panier;
|
use App\Models\Panier;
|
||||||
use App\Models\Format;
|
use App\Models\Format;
|
||||||
use App\Models\Media;
|
use App\Models\Media;
|
||||||
use Illuminate\Contracts\View\View;
|
|
||||||
use Illuminate\Http\JsonResponse;
|
|
||||||
|
|
||||||
class PanierController extends Controller
|
class PanierController extends Controller
|
||||||
{
|
{
|
||||||
|
|
@ -21,16 +19,15 @@ class PanierController extends Controller
|
||||||
/**
|
/**
|
||||||
* Page principale des paniers
|
* Page principale des paniers
|
||||||
*
|
*
|
||||||
* @return \Illuminate\Contracts\View\View
|
* @return \Illuminate\View\View|\Illuminate\Contracts\View\Factory
|
||||||
*/
|
*/
|
||||||
public function index(): View
|
public function index()
|
||||||
{
|
{
|
||||||
/** @var \App\Models\User $user */
|
/** @var \App\Models\User $user */
|
||||||
$user = \auth()->user();
|
$user = \auth()->user();
|
||||||
// ! Has to flush Media cache before querying basket with media list
|
|
||||||
Media::flushQueryCache();
|
|
||||||
$paniers = $user->paniersOwner;
|
|
||||||
|
|
||||||
|
/** @var \Illuminate\Database\Eloquent\Collection $paniers */
|
||||||
|
$paniers = $user->paniersOwner;
|
||||||
return view('panier.index')->with([
|
return view('panier.index')->with([
|
||||||
'paniers' => $paniers,
|
'paniers' => $paniers,
|
||||||
]);
|
]);
|
||||||
|
|
@ -42,12 +39,12 @@ class PanierController extends Controller
|
||||||
*
|
*
|
||||||
* @return \Illuminate\Http\JsonResponse
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
public function getBaskets(): JsonResponse
|
public function getBaskets()
|
||||||
{
|
{
|
||||||
/** @var \App\Models\User $user */
|
/** @var \App\Models\User $user */
|
||||||
$user = \auth()->user();
|
$user = \auth()->user();
|
||||||
// ! Has to flush Media cache before querying basket with media list
|
|
||||||
Media::flushQueryCache();
|
/** @var \Illuminate\Database\Eloquent\Collection $paniers */
|
||||||
$paniers = $user->paniersOwner;
|
$paniers = $user->paniersOwner;
|
||||||
|
|
||||||
return response()->json($paniers);
|
return response()->json($paniers);
|
||||||
|
|
@ -59,22 +56,18 @@ class PanierController extends Controller
|
||||||
* @param \App\Http\Requests\Bo\Ajax\AddMediasBasketRequest $request
|
* @param \App\Http\Requests\Bo\Ajax\AddMediasBasketRequest $request
|
||||||
* @return \Illuminate\Http\JsonResponse
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
public function addMediasBasket(AddMediasBasketRequest $request): JsonResponse
|
public function addMediasBasket(AddMediasBasketRequest $request)
|
||||||
{
|
{
|
||||||
/** @var \App\Models\Panier $panier */
|
/** @var \App\Models\Panier $panier */
|
||||||
$panier = Panier::query()
|
$panier = Panier::whereId($request->panier_id)
|
||||||
->where('id', $request->input('panier_id'))
|
->with('mediaList')->firstOrFail();
|
||||||
->with('mediaList')
|
|
||||||
->firstOrFail();
|
|
||||||
|
|
||||||
// * Sync every media to basket
|
// * Sync every media to basket
|
||||||
$panier->mediaList()->sync(array_merge(
|
$panier->mediaList()->sync(array_merge(
|
||||||
$panier->mediaList()->pluck('id')->all(),
|
$panier->mediaList()->pluck('id')->all(),
|
||||||
$request->input('mediaList')
|
$request->mediaList
|
||||||
));
|
));
|
||||||
|
|
||||||
Media::flushQueryCache();
|
|
||||||
|
|
||||||
return response()->json();
|
return response()->json();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -84,18 +77,15 @@ class PanierController extends Controller
|
||||||
* @param \App\Http\Requests\Bo\Ajax\RemoveMediasBasketRequest $request
|
* @param \App\Http\Requests\Bo\Ajax\RemoveMediasBasketRequest $request
|
||||||
* @return \Illuminate\Http\JsonResponse
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
public function removeMediasBasket(RemoveMediasBasketRequest $request): JsonResponse
|
public function removeMediasBasket(RemoveMediasBasketRequest $request)
|
||||||
{
|
{
|
||||||
|
|
||||||
/** @var \App\Models\Panier $panier */
|
/** @var \App\Models\Panier $panier */
|
||||||
$panier = Panier::query()
|
$panier = Panier::whereId($request->panier_id)
|
||||||
->where('id', $request->input('panier_id'))
|
->with('mediaList')->firstOrFail();
|
||||||
->with('mediaList')
|
|
||||||
->firstOrFail();
|
|
||||||
|
|
||||||
/** @var \App\Models\Media $media */
|
/** @var \App\Models\Media $media */
|
||||||
$media = Media::query()
|
$media = Media::whereId($request->media_id)->firstOrFail();
|
||||||
->where('id', $request->input('media_id'))
|
|
||||||
->firstOrFail();
|
|
||||||
|
|
||||||
$panier->mediaList()->detach($media);
|
$panier->mediaList()->detach($media);
|
||||||
|
|
||||||
|
|
@ -108,13 +98,13 @@ class PanierController extends Controller
|
||||||
* @param \App\Http\Requests\Bo\Ajax\CreateBasketRequest $request
|
* @param \App\Http\Requests\Bo\Ajax\CreateBasketRequest $request
|
||||||
* @return \Illuminate\Http\JsonResponse
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
public function createBasket(CreateBasketRequest $request): JsonResponse
|
public function createBasket(CreateBasketRequest $request)
|
||||||
{
|
{
|
||||||
/** @var \App\Models\User $user */
|
/** @var \App\Models\User $user */
|
||||||
$user = auth()->user();
|
$user = auth()->user();
|
||||||
|
|
||||||
$panier = new Panier();
|
$panier = new Panier();
|
||||||
$panier->libelle = $request->input('title');
|
$panier->libelle = $request->title;
|
||||||
$panier->uid = Str::uuid();
|
$panier->uid = Str::uuid();
|
||||||
$panier->owner()->associate($user);
|
$panier->owner()->associate($user);
|
||||||
$panier->saveOrFail();
|
$panier->saveOrFail();
|
||||||
|
|
@ -128,12 +118,10 @@ class PanierController extends Controller
|
||||||
* @param \App\Http\Requests\Bo\Ajax\DestroyBasketRequest $request
|
* @param \App\Http\Requests\Bo\Ajax\DestroyBasketRequest $request
|
||||||
* @return \Illuminate\Http\JsonResponse
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
public function destroyBasket(DestroyBasketRequest $request): JsonResponse
|
public function destroyBasket(DestroyBasketRequest $request)
|
||||||
{
|
{
|
||||||
/** @var \App\Models\Panier $basket */
|
/** @var \App\Models\Panier $basket */
|
||||||
$basket = Panier::query()
|
$basket = Panier::whereId($request->basket_id)->firstOrFail();
|
||||||
->where('id', $request->input('basket_id'))
|
|
||||||
->firstOrFail();
|
|
||||||
|
|
||||||
$basket->deleteOrFail();
|
$basket->deleteOrFail();
|
||||||
|
|
||||||
|
|
@ -146,9 +134,9 @@ class PanierController extends Controller
|
||||||
* Page publique d'un panier
|
* Page publique d'un panier
|
||||||
*
|
*
|
||||||
* @param \App\Models\Panier $panier
|
* @param \App\Models\Panier $panier
|
||||||
* @return \Illuminate\Contracts\View\View
|
* @return \Illuminate\View\View|\Illuminate\Contracts\View\Factory
|
||||||
*/
|
*/
|
||||||
public function showBasket(Panier $panier): View
|
public function showBasket(Panier $panier)
|
||||||
{
|
{
|
||||||
/** @var \App\Models\User|null $user */
|
/** @var \App\Models\User|null $user */
|
||||||
$user = auth()->user();
|
$user = auth()->user();
|
||||||
|
|
@ -162,12 +150,9 @@ class PanierController extends Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Format> $formats */
|
/** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Format> $formats */
|
||||||
$formats = Format::query()
|
$formats = Format::withoutGlobalScope('App\Scopes\SystemScope')
|
||||||
->withoutGlobalScope('App\Scopes\SystemScope')
|
->where('system', true)->get();
|
||||||
->where('system', true)
|
return view('panier.show')->with([
|
||||||
->get();
|
|
||||||
|
|
||||||
return view('panier.show', [
|
|
||||||
'panier' => $panier,
|
'panier' => $panier,
|
||||||
'formats' => $formats,
|
'formats' => $formats,
|
||||||
]);
|
]);
|
||||||
|
|
@ -179,12 +164,10 @@ class PanierController extends Controller
|
||||||
* @param \App\Http\Requests\Bo\Ajax\SaveBasketPropsRequest $request
|
* @param \App\Http\Requests\Bo\Ajax\SaveBasketPropsRequest $request
|
||||||
* @return \Illuminate\Http\JsonResponse
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
public function saveBasketProperty(SaveBasketPropsRequest $request): JsonResponse
|
public function saveBasketProperty(SaveBasketPropsRequest $request)
|
||||||
{
|
{
|
||||||
/** @var \App\Models\Panier $panier */
|
/** @var \App\Models\Panier $panier */
|
||||||
$panier = Panier::query()
|
$panier = Panier::whereId($request->basket_id)->firstOrFail();
|
||||||
->where('id', $request->input('basket_id'))
|
|
||||||
->firstOrFail();
|
|
||||||
|
|
||||||
$panier->fill($request->validated());
|
$panier->fill($request->validated());
|
||||||
$panier->saveOrFail();
|
$panier->saveOrFail();
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,6 @@ use App\Models\Sujet;
|
||||||
use App\Models\TypeMedia;
|
use App\Models\TypeMedia;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use App\Traits\Http\HandlesMedia;
|
use App\Traits\Http\HandlesMedia;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Http\UploadedFile;
|
use Illuminate\Http\UploadedFile;
|
||||||
|
|
@ -98,7 +97,7 @@ class UploadController extends Controller
|
||||||
// 400 instead of 422 is for resumablejs to handle properly.
|
// 400 instead of 422 is for resumablejs to handle properly.
|
||||||
return \response()->json($e->errors(), 400);
|
return \response()->json($e->errors(), 400);
|
||||||
}
|
}
|
||||||
} //end if
|
}//end if
|
||||||
|
|
||||||
// We are in chunk mode, lets send the current progress.
|
// We are in chunk mode, lets send the current progress.
|
||||||
/** @var AbstractHandler $handler */
|
/** @var AbstractHandler $handler */
|
||||||
|
|
@ -144,11 +143,12 @@ class UploadController extends Controller
|
||||||
$this->validateUploadedFile($uplodedFile);
|
$this->validateUploadedFile($uplodedFile);
|
||||||
|
|
||||||
/** @var \App\Models\Media */
|
/** @var \App\Models\Media */
|
||||||
$media = Media::query()
|
$media = Media::whereId($request->media_id)
|
||||||
->where('id', $request->input('media_id'))
|
->whereHas('sujet', function ($q) use ($sujet) {
|
||||||
->whereHas('sujet', fn(Builder $q) => $q->where('codeSujet', $sujet->codeSujet))
|
$q->whereId($sujet->id);
|
||||||
->whereHas('dossier', fn(Builder $q) => $q->where('id', $dossier->id))
|
})->whereHas('dossier', function ($q) use ($dossier) {
|
||||||
->firstOrNew();
|
$q->whereId($dossier->id);
|
||||||
|
})->firstOrNew();
|
||||||
|
|
||||||
// Save the file and return any response you need.
|
// Save the file and return any response you need.
|
||||||
return $this->createOrUpdateMedia($user, $uplodedFile, $media, $dossier, $sujet);
|
return $this->createOrUpdateMedia($user, $uplodedFile, $media, $dossier, $sujet);
|
||||||
|
|
@ -156,7 +156,7 @@ class UploadController extends Controller
|
||||||
// 400 instead of 422 is for resumablejs to handle properly.
|
// 400 instead of 422 is for resumablejs to handle properly.
|
||||||
return \response()->json($e->errors(), 400);
|
return \response()->json($e->errors(), 400);
|
||||||
}
|
}
|
||||||
} //end if
|
}//end if
|
||||||
|
|
||||||
// We are in chunk mode, lets send the current progress.
|
// We are in chunk mode, lets send the current progress.
|
||||||
/** @var AbstractHandler $handler */
|
/** @var AbstractHandler $handler */
|
||||||
|
|
@ -214,7 +214,7 @@ class UploadController extends Controller
|
||||||
'File guessed extensions :guessedExts does not match file name extension :extension',
|
'File guessed extensions :guessedExts does not match file name extension :extension',
|
||||||
[
|
[
|
||||||
'guessedExt' => $guessedExts,
|
'guessedExt' => $guessedExts,
|
||||||
'extension' => $mediaExtension->value,
|
'extension' => $mediaExtension,
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
]);
|
]);
|
||||||
|
|
@ -341,8 +341,6 @@ class UploadController extends Controller
|
||||||
|
|
||||||
$media->saveOrFail();
|
$media->saveOrFail();
|
||||||
|
|
||||||
Media::flushQueryCache();
|
|
||||||
|
|
||||||
// * Get props inserted by DB.
|
// * Get props inserted by DB.
|
||||||
return response()->json($media->refresh());
|
return response()->json($media->refresh());
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -190,14 +190,10 @@ class UserController extends Controller
|
||||||
$marques = Marque::orderBy('libMarq', 'asc')->get();
|
$marques = Marque::orderBy('libMarq', 'asc')->get();
|
||||||
$userSujets = $user->sujets;
|
$userSujets = $user->sujets;
|
||||||
$sujets = Sujet::where('sujet_dam', true)->orderBy('libelle', 'asc')->get();
|
$sujets = Sujet::where('sujet_dam', true)->orderBy('libelle', 'asc')->get();
|
||||||
$users = User::select(['id', 'email'])
|
$users = User::select(['id', 'email'])->whereIn('role', [
|
||||||
->whereIn('role', [
|
config('roles.const.ADMIN'), config('roles.const.CONTRIBUTEUR'),
|
||||||
config('roles.const.ADMIN'), config('roles.const.CONTRIBUTEUR'),
|
config('roles.const.REDACTEUR')
|
||||||
config('roles.const.REDACTEUR')
|
])->where('id', '!=', $user->id)->get();
|
||||||
])
|
|
||||||
->where('id', '!=', $user->id)
|
|
||||||
->orderBy('email')
|
|
||||||
->get();
|
|
||||||
return view('users.edit')->with([
|
return view('users.edit')->with([
|
||||||
'user' => $user, 'roles' => $roles, 'users' => $users,
|
'user' => $user, 'roles' => $roles, 'users' => $users,
|
||||||
'userMarques' => $userMarques, 'marques' => $marques,
|
'userMarques' => $userMarques, 'marques' => $marques,
|
||||||
|
|
|
||||||
|
|
@ -39,9 +39,7 @@ class XmlArcadiaMediasIn extends XmlJobs
|
||||||
*
|
*
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $nullableFields = [
|
protected $nullableFields = [];
|
||||||
'version'
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fields that are unique
|
* Fields that are unique
|
||||||
|
|
@ -71,7 +69,7 @@ class XmlArcadiaMediasIn extends XmlJobs
|
||||||
$media = Media::withTrashed()->where($uniqueColumnsKey)->firstOrFail();
|
$media = Media::withTrashed()->where($uniqueColumnsKey)->firstOrFail();
|
||||||
|
|
||||||
$media->arcadia_id = $line['arcadia_id'];
|
$media->arcadia_id = $line['arcadia_id'];
|
||||||
$media->version = $line['version'] ?? 1;
|
$media->version = $line['version'];
|
||||||
$media->isLocked = false;
|
$media->isLocked = false;
|
||||||
|
|
||||||
$media->saveOrFail();
|
$media->saveOrFail();
|
||||||
|
|
|
||||||
|
|
@ -132,7 +132,7 @@ class ArcadiaLinkUtilities
|
||||||
$storage->path($filename),
|
$storage->path($filename),
|
||||||
\ZipArchive::CREATE | \ZipArchive::OVERWRITE
|
\ZipArchive::CREATE | \ZipArchive::OVERWRITE
|
||||||
);
|
);
|
||||||
$success = $zip->addFromString('media.xml', $xml) && $success;
|
$success = $zip->addFromString($xml, 'media.xml') && $success;
|
||||||
$success = $zip->addFile($media->full_path, $media->basename) && $success;
|
$success = $zip->addFile($media->full_path, $media->basename) && $success;
|
||||||
$success = $zip->close() && $success;
|
$success = $zip->close() && $success;
|
||||||
unset($zip);
|
unset($zip);
|
||||||
|
|
@ -245,7 +245,7 @@ class ArcadiaLinkUtilities
|
||||||
->appendChild($dom->createCDATASection($formatModel['hauteur']));
|
->appendChild($dom->createCDATASection($formatModel['hauteur']));
|
||||||
$format->appendChild($dom->createElement('lien'))
|
$format->appendChild($dom->createElement('lien'))
|
||||||
->appendChild($dom->createCDATASection(\sprintf(
|
->appendChild($dom->createCDATASection(\sprintf(
|
||||||
"%s/{$media->folder}/{$media->uid}_%s.{$media->extension->value}",
|
"%s/{$media->folder}{$media->uid}_%s.{$media->extension->value}",
|
||||||
config('app.url'),
|
config('app.url'),
|
||||||
$formatModel['libelle']
|
$formatModel['libelle']
|
||||||
)));
|
)));
|
||||||
|
|
|
||||||
|
|
@ -5,13 +5,6 @@ namespace App\Models;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
|
|
||||||
/**
|
|
||||||
* @property integer $arcadia_id The ID on Arcadia side, Defaults to 0 (not linked).
|
|
||||||
* @property string $filename
|
|
||||||
*
|
|
||||||
* @property-read \App\Models\Media $media Media BelongsTo relationship.
|
|
||||||
* @package App\Models
|
|
||||||
*/
|
|
||||||
class ArcadiaLink extends Model
|
class ArcadiaLink extends Model
|
||||||
{
|
{
|
||||||
// * GETTERS
|
// * GETTERS
|
||||||
|
|
|
||||||
|
|
@ -75,6 +75,6 @@ class Article extends Model
|
||||||
*/
|
*/
|
||||||
public function mediaList()
|
public function mediaList()
|
||||||
{
|
{
|
||||||
return $this->belongsToMany(Media::class, 'media_article', 'article_id', 'media_id');
|
return $this->belongsToMany(Media::class, 'media_article', 'media_id', 'article_id');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ namespace App\Models;
|
||||||
|
|
||||||
use App\Enums\MediaStatut;
|
use App\Enums\MediaStatut;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use Illuminate\Contracts\Database\Eloquent\Builder;
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
|
|
||||||
|
|
@ -74,24 +73,19 @@ class Dossier extends Model
|
||||||
/** @var \App\Model\User $user */
|
/** @var \App\Model\User $user */
|
||||||
$user = Auth::user();
|
$user = Auth::user();
|
||||||
|
|
||||||
// ? Est un dossier dépot ou racine ?
|
// * dossier classic
|
||||||
if ($this->parent_id === 1 or $this->id === 1) {
|
if ($this->parent_id != 1 && $this->id != 1) {
|
||||||
// * Dossier dépôt
|
if ($user->hasRole(config('roles.const.ADMIN'))) {
|
||||||
|
return $this->mediaList()->count();
|
||||||
|
} else {
|
||||||
|
return $this->mediaList()
|
||||||
|
->where('statut', '<>', MediaStatut::brouillon)
|
||||||
|
->orWhere('created_by', $user->id)->count();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// * dossier dépôt
|
||||||
return $this->mediaList()->count();
|
return $this->mediaList()->count();
|
||||||
}
|
}
|
||||||
|
|
||||||
// * Dossier classic
|
|
||||||
// ? User is admin ?
|
|
||||||
if ($user->hasRole(config('roles.const.ADMIN'))) {
|
|
||||||
// * Tout de tout le monde
|
|
||||||
return $this->mediaList()->count();
|
|
||||||
}
|
|
||||||
|
|
||||||
// * Tous les non brouillons ou crées par le user
|
|
||||||
return $this->mediaList()
|
|
||||||
->where(fn (Builder $q) => $q->where('statut', '!=', MediaStatut::brouillon)
|
|
||||||
->orWhere('created_by', $user->id))
|
|
||||||
->count();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// * RELATIONSHIPS
|
// * RELATIONSHIPS
|
||||||
|
|
@ -126,7 +120,7 @@ class Dossier extends Model
|
||||||
*/
|
*/
|
||||||
public function mediaList()
|
public function mediaList()
|
||||||
{
|
{
|
||||||
return $this->hasMany(Media::class);
|
return $this->hasMany(Media::class, 'dossier_id', 'id');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -48,24 +48,4 @@ class Historique extends Model
|
||||||
{
|
{
|
||||||
return $this->belongsTo(Media::class);
|
return $this->belongsTo(Media::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
// * METHODS
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the instance as an array.
|
|
||||||
*
|
|
||||||
* @return array<TKey,TValue>
|
|
||||||
*/
|
|
||||||
public function toArray(): array
|
|
||||||
{
|
|
||||||
return \array_merge(
|
|
||||||
parent::toArray(),
|
|
||||||
[
|
|
||||||
'type' => [
|
|
||||||
'value' => $this->type,
|
|
||||||
'label' => $this->type->label()
|
|
||||||
]
|
|
||||||
]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -39,27 +39,14 @@ class Media extends Model
|
||||||
*/
|
*/
|
||||||
public $cacheDriver = 'redis';
|
public $cacheDriver = 'redis';
|
||||||
|
|
||||||
/**
|
|
||||||
* Is the model a duplicate of another (only true before we save it in database)
|
|
||||||
*
|
|
||||||
* @var boolean
|
|
||||||
*/
|
|
||||||
public $isDuplicate = false;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The relations to eager load on every query.
|
* The relations to eager load on every query.
|
||||||
*
|
*
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $with = [
|
protected $with = [
|
||||||
'owner',
|
'owner', 'tags', 'etiquette', 'articles', 'sujet',
|
||||||
'tags',
|
'typeMedia', 'societes', 'marques'
|
||||||
'etiquette',
|
|
||||||
'articles',
|
|
||||||
'sujet',
|
|
||||||
'typeMedia',
|
|
||||||
'societes',
|
|
||||||
'marques'
|
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -222,10 +209,8 @@ class Media extends Model
|
||||||
$user = auth()->user();
|
$user = auth()->user();
|
||||||
MediaCreated::dispatch($user, $model);
|
MediaCreated::dispatch($user, $model);
|
||||||
|
|
||||||
if (empty($model->isDuplicate)) {
|
/** @throws \RuntimeException */
|
||||||
/** @throws \RuntimeException */
|
$model->addToElasticSearch();
|
||||||
$model->addToElasticSearch();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
static::updating(function (self $model) {
|
static::updating(function (self $model) {
|
||||||
if ($model->statut === MediaStatut::brouillon and $model->arcadia_id) {
|
if ($model->statut === MediaStatut::brouillon and $model->arcadia_id) {
|
||||||
|
|
@ -241,8 +226,8 @@ class Media extends Model
|
||||||
/** @var \App\Models\User */
|
/** @var \App\Models\User */
|
||||||
$user = auth()->user();
|
$user = auth()->user();
|
||||||
|
|
||||||
// * If update is not running from console, we prevent soft delete before trigerring update event
|
// * Prevent soft delete trigerring update event
|
||||||
if ($user and !\array_key_exists('deleted_at', $model->getChanges())) {
|
if (!\array_key_exists('deleted_at', $model->getChanges())) {
|
||||||
MediaUpdated::dispatch($user, $model);
|
MediaUpdated::dispatch($user, $model);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -267,21 +252,13 @@ class Media extends Model
|
||||||
|
|
||||||
/** @throws \RuntimeException */
|
/** @throws \RuntimeException */
|
||||||
$model->removeFromElasticSearch();
|
$model->removeFromElasticSearch();
|
||||||
|
|
||||||
|
$model->deleteFilesOnAllPath();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// * Laravel Behaviors
|
// * Laravel Behaviors
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the route key for the model.
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getRouteKeyName()
|
|
||||||
{
|
|
||||||
return 'uid';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the base cache tags that will be present
|
* Set the base cache tags that will be present
|
||||||
* on all queries.
|
* on all queries.
|
||||||
|
|
@ -480,7 +457,7 @@ class Media extends Model
|
||||||
*/
|
*/
|
||||||
public function paniers()
|
public function paniers()
|
||||||
{
|
{
|
||||||
return $this->belongsToMany(Panier::class, 'panier_media');
|
return $this->belongsToMany(Panier::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
// * METHODS
|
// * METHODS
|
||||||
|
|
@ -746,7 +723,7 @@ class Media extends Model
|
||||||
// * create preview
|
// * create preview
|
||||||
/** @var \App\Models\Format $format */
|
/** @var \App\Models\Format $format */
|
||||||
$format = Format::withoutGlobalScope('App\Scopes\SystemScope')
|
$format = Format::withoutGlobalScope('App\Scopes\SystemScope')
|
||||||
->where('libelle', '=', 'preview')->firstOrFail();
|
->where('libelle', '=', 'preview')->firstOrFail();
|
||||||
|
|
||||||
if ($this->extension == MediaExtension::gif) {
|
if ($this->extension == MediaExtension::gif) {
|
||||||
if ($this->largeur >= $format->largeur || $this->hauteur >= $format->hauteur || $this->largeur == "") {
|
if ($this->largeur >= $format->largeur || $this->hauteur >= $format->hauteur || $this->largeur == "") {
|
||||||
|
|
@ -776,7 +753,7 @@ class Media extends Model
|
||||||
// * create thumb
|
// * create thumb
|
||||||
/** @var \App\Models\Format $format */
|
/** @var \App\Models\Format $format */
|
||||||
$format = Format::withoutGlobalScope('App\Scopes\SystemScope')
|
$format = Format::withoutGlobalScope('App\Scopes\SystemScope')
|
||||||
->where('libelle', '=', 'thumb')->firstOrFail();
|
->where('libelle', '=', 'thumb')->firstOrFail();
|
||||||
if ($this->extension != MediaExtension::png) {
|
if ($this->extension != MediaExtension::png) {
|
||||||
$im->setImageBackgroundColor('#ffffff');
|
$im->setImageBackgroundColor('#ffffff');
|
||||||
$im->setImageAlphaChannel(\Imagick::ALPHACHANNEL_REMOVE);
|
$im->setImageAlphaChannel(\Imagick::ALPHACHANNEL_REMOVE);
|
||||||
|
|
@ -805,7 +782,7 @@ class Media extends Model
|
||||||
$storage = Storage::disk('media');
|
$storage = Storage::disk('media');
|
||||||
|
|
||||||
// * format spécifique
|
// * format spécifique
|
||||||
if (!$format->system) {
|
if ($format->system) {
|
||||||
if (in_array($this->extension, ['gif', 'jpeg', 'jpg', 'png', 'pdf', 'ai', 'psd'])) {
|
if (in_array($this->extension, ['gif', 'jpeg', 'jpg', 'png', 'pdf', 'ai', 'psd'])) {
|
||||||
return $storage->path("/{$this->folder}/{$this->uid}_{$format->libelle}.{$format->extension->value}");
|
return $storage->path("/{$this->folder}/{$this->uid}_{$format->libelle}.{$format->extension->value}");
|
||||||
}
|
}
|
||||||
|
|
@ -820,7 +797,7 @@ class Media extends Model
|
||||||
} elseif (in_array($this->extension, ['pdf', 'ai', 'psd'])) {
|
} elseif (in_array($this->extension, ['pdf', 'ai', 'psd'])) {
|
||||||
return $storage->path("/{$this->folder}/{$this->uid}_{$format->libelle}.png");
|
return $storage->path("/{$this->folder}/{$this->uid}_{$format->libelle}.png");
|
||||||
}
|
}
|
||||||
return $storage->path("/{$this->folder}/{$this->uid}.{$this->extension->value}");
|
return $storage->path("/{$this->folder}/{$this->uid}.{$this->extension}");
|
||||||
}
|
}
|
||||||
throw new \RuntimeException("Unhandled Format $format->id $format->libelle");
|
throw new \RuntimeException("Unhandled Format $format->id $format->libelle");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,36 +6,6 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||||
use Illuminate\Notifications\Notifiable;
|
use Illuminate\Notifications\Notifiable;
|
||||||
|
|
||||||
/**
|
|
||||||
* @property string $firstname Prénom.
|
|
||||||
* @property string $lastname Nom.
|
|
||||||
* @property string $email Email.
|
|
||||||
* @property string $objectguid
|
|
||||||
* @property string $matricule Unique LDAP.
|
|
||||||
* @property-read \Illuminate\Support\Carbon $email_verified_at Mail verified at date.
|
|
||||||
* @property string $password Mot de passe.
|
|
||||||
* @property string $remember_token
|
|
||||||
* @property integer $role Rôle in config/role; 1 => Admin.
|
|
||||||
* @property-read \Illuminate\Support\Carbon $created_at Created date.
|
|
||||||
* @property-read \Illuminate\Support\Carbon $updated_at Updated date.
|
|
||||||
*
|
|
||||||
* @property-read \Illuminate\Database\Eloquent\Collection<\App\Models\Marque> $marques
|
|
||||||
* Marques BelongsToMany relationship.
|
|
||||||
* @property-read \Illuminate\Database\Eloquent\Collection<\App\Models\Dossier> $dossiers
|
|
||||||
* Dossiers BelongsToMany relationship.
|
|
||||||
* @property-read \Illuminate\Database\Eloquent\Collection<\App\Models\Sujet> $sujets
|
|
||||||
* Sujets BelongsToMany relationship.
|
|
||||||
* @property-read \Illuminate\Database\Eloquent\Collection<\App\Models\Media> $mediaList
|
|
||||||
* Medias HasMany relationship.
|
|
||||||
* @property-read \Illuminate\Database\Eloquent\Collection<\App\Models\Historique> $historiques
|
|
||||||
* Historiques HasMany relationship.
|
|
||||||
* @property-read \Illuminate\Database\Eloquent\Collection<\App\Models\Recherche> $recherches
|
|
||||||
* Recherches HasMany relationship.
|
|
||||||
* @property-read \Illuminate\Database\Eloquent\Collection<\App\Models\Panier> $paniersOwner
|
|
||||||
* Paniers HasMany relationship that belongs to the user.
|
|
||||||
* @property-read \Illuminate\Database\Eloquent\Collection<\App\Models\Panier> $paniersFavoris
|
|
||||||
* Paniers HasMany relationship.
|
|
||||||
*/
|
|
||||||
class User extends Authenticatable
|
class User extends Authenticatable
|
||||||
{
|
{
|
||||||
use HasFactory;
|
use HasFactory;
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,9 @@
|
||||||
|
|
||||||
namespace App\Providers;
|
namespace App\Providers;
|
||||||
|
|
||||||
|
use Illuminate\Pagination\Paginator;
|
||||||
use Illuminate\Support\Carbon;
|
use Illuminate\Support\Carbon;
|
||||||
use Illuminate\Support\Facades\App;
|
use Illuminate\Support\Facades\App;
|
||||||
use Illuminate\Support\Facades\Auth;
|
|
||||||
use Illuminate\Support\Facades\URL;
|
use Illuminate\Support\Facades\URL;
|
||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
|
|
@ -17,12 +17,6 @@ class AppServiceProvider extends ServiceProvider
|
||||||
*/
|
*/
|
||||||
public function boot()
|
public function boot()
|
||||||
{
|
{
|
||||||
if (
|
|
||||||
in_array(config('app.env'), ['local', 'testing']) && config('app.bypassldap') && !app()->runningInConsole()
|
|
||||||
) {
|
|
||||||
Auth::loginUsingId(24);
|
|
||||||
}
|
|
||||||
|
|
||||||
// !!! Fuc**** Lab LDC exception OMG !!!
|
// !!! Fuc**** Lab LDC exception OMG !!!
|
||||||
if (!in_array(config('app.env'), ['local', 'testing'])) {
|
if (!in_array(config('app.env'), ['local', 'testing'])) {
|
||||||
URL::forceRootUrl(config('app.url'));
|
URL::forceRootUrl(config('app.url'));
|
||||||
|
|
@ -32,10 +26,11 @@ class AppServiceProvider extends ServiceProvider
|
||||||
return $url->current();
|
return $url->current();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
// * Force HTTPS
|
// * LOCAL HTTPS FIX
|
||||||
URL::forceScheme('https');
|
if (!in_array(config('app.env'), ['local', 'testing'])) {
|
||||||
|
URL::forceScheme('https');
|
||||||
// * REVERSE PROXY FIX
|
}
|
||||||
|
// * HA PROXY FIX
|
||||||
App::singleton('clientIp', function () {
|
App::singleton('clientIp', function () {
|
||||||
if (config('app.env') == 'local') {
|
if (config('app.env') == 'local') {
|
||||||
return request()->getClientIp();
|
return request()->getClientIp();
|
||||||
|
|
@ -43,7 +38,6 @@ class AppServiceProvider extends ServiceProvider
|
||||||
return request()->server('HTTP_X_FORWARDED_FOR') ?? request()->getClientIp();
|
return request()->server('HTTP_X_FORWARDED_FOR') ?? request()->getClientIp();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// * LOCAL FORCE eg: for Carbon
|
// * LOCAL FORCE eg: for Carbon
|
||||||
foreach ([\LC_TIME, \LC_MESSAGES, \LC_COLLATE, \LC_CTYPE, \LC_MONETARY] as $category) {
|
foreach ([\LC_TIME, \LC_MESSAGES, \LC_COLLATE, \LC_CTYPE, \LC_MONETARY] as $category) {
|
||||||
setlocale(
|
setlocale(
|
||||||
|
|
@ -53,5 +47,9 @@ class AppServiceProvider extends ServiceProvider
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
Carbon::setLocale(config('app.locale'));
|
Carbon::setLocale(config('app.locale'));
|
||||||
|
if (!app()->runningInConsole()) {
|
||||||
|
// * FORCE BOOTSTRAP PAGINATOR (or custom if in front)
|
||||||
|
Paginator::useBootstrap();
|
||||||
|
}//end if
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -41,9 +41,12 @@ class RouteServiceProvider extends ServiceProvider
|
||||||
->group(base_path('routes/api.php'));
|
->group(base_path('routes/api.php'));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Route::bind('media', function ($value) {
|
||||||
|
return Media::whereUid($value)->firstOrFail();
|
||||||
|
});
|
||||||
Route::bind('basket_uuid', function ($value) {
|
Route::bind('basket_uuid', function ($value) {
|
||||||
return Panier::where('uid', $value)
|
return Panier::where('uid', $value)
|
||||||
->with('owner')->firstOrFail();
|
->with('owner')->firstOrFail();
|
||||||
});
|
});
|
||||||
|
|
||||||
// * API
|
// * API
|
||||||
|
|
|
||||||
|
|
@ -1,34 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Providers;
|
|
||||||
|
|
||||||
use Illuminate\Pagination\Paginator;
|
|
||||||
use Illuminate\Support\Facades\Cache;
|
|
||||||
use Illuminate\Support\Facades\File;
|
|
||||||
use Illuminate\Support\Facades\View;
|
|
||||||
use Illuminate\Support\ServiceProvider;
|
|
||||||
|
|
||||||
class ViewServiceProvider extends ServiceProvider
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Bootstrap any application services.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function boot(): void
|
|
||||||
{
|
|
||||||
$appInfos = Cache::remember('composer', 360, function () {
|
|
||||||
return json_decode(File::get(\app_path('../composer.json')));
|
|
||||||
});
|
|
||||||
// Share composer.json infos.
|
|
||||||
if (isset($appInfos->name) and isset($appInfos->version)) {
|
|
||||||
View::share('cpsr_name', $appInfos->name);
|
|
||||||
View::share('cpsr_version', $appInfos->version);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!app()->runningInConsole()) {
|
|
||||||
// * FORCE BOOTSTRAP PAGINATOR (or custom if in front)
|
|
||||||
Paginator::useBootstrap();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -23,6 +23,7 @@
|
||||||
"laravel/tinker": "^2.7",
|
"laravel/tinker": "^2.7",
|
||||||
"laravel/ui": "^3.0",
|
"laravel/ui": "^3.0",
|
||||||
"laravelcollective/html": "^6.3",
|
"laravelcollective/html": "^6.3",
|
||||||
|
"ldc/web-status-checker-laravel": "^1.0",
|
||||||
"mews/purifier": "^3.3",
|
"mews/purifier": "^3.3",
|
||||||
"pion/laravel-chunk-upload": "^1.5",
|
"pion/laravel-chunk-upload": "^1.5",
|
||||||
"rennokki/laravel-eloquent-query-cache": "^3.3"
|
"rennokki/laravel-eloquent-query-cache": "^3.3"
|
||||||
|
|
@ -96,5 +97,11 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"minimum-stability": "dev",
|
"minimum-stability": "dev",
|
||||||
"prefer-stable": true
|
"prefer-stable": true,
|
||||||
|
"repositories": [
|
||||||
|
{
|
||||||
|
"type": "composer",
|
||||||
|
"url": "https://lab.s-web.fr/api/v4/group/23/-/packages/composer/packages.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
2289
composer.lock
generated
2289
composer.lock
generated
File diff suppressed because it is too large
Load diff
|
|
@ -4,8 +4,6 @@ use Illuminate\Support\Facades\Facade;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
|
||||||
'bypassldap' => env('BYPASS_LDAP', false),
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Application Name
|
| Application Name
|
||||||
|
|
@ -171,7 +169,7 @@ return [
|
||||||
* Package Service Providers...
|
* Package Service Providers...
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Elasticquent\ElasticquentServiceProvider::class,
|
Elasticquent\ElasticquentServiceProvider::class,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Application Service Providers...
|
* Application Service Providers...
|
||||||
|
|
@ -180,8 +178,7 @@ return [
|
||||||
App\Providers\AppServiceProvider::class,
|
App\Providers\AppServiceProvider::class,
|
||||||
App\Providers\AuthServiceProvider::class,
|
App\Providers\AuthServiceProvider::class,
|
||||||
App\Providers\EventServiceProvider::class,
|
App\Providers\EventServiceProvider::class,
|
||||||
App\Providers\RouteServiceProvider::class,
|
App\Providers\RouteServiceProvider::class
|
||||||
App\Providers\ViewServiceProvider::class
|
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,6 @@ return [
|
||||||
* so you can receive email if things go mad
|
* so you can receive email if things go mad
|
||||||
*/
|
*/
|
||||||
'contactsList' => [
|
'contactsList' => [
|
||||||
env('MAIL_LIST_SERVICEWEB', 'digital@ldc.fr')
|
env('MAIL_LIST_SERVICEWEB', 'equipe.web@ldc.fr')
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -117,9 +117,8 @@ return [
|
||||||
|
|
||||||
// * Contacts List
|
// * Contacts List
|
||||||
'contactsList' => [
|
'contactsList' => [
|
||||||
'invalidXml' => preg_split('/(\s*,*\s*)*,+(\s*,*\s*)*/', env('MAIL_LIST_INVALID_XML', 'digital@ldc.fr')),
|
'invalidXml' => preg_split('/(\s*,*\s*)*,+(\s*,*\s*)*/', env('MAIL_LIST_INVALID_XML', 'equipe.web@ldc.fr')),
|
||||||
'serviceweb' => preg_split('/(\s*,*\s*)*,+(\s*,*\s*)*/', env('MAIL_LIST_SERVICEWEB', 'digital@ldc.fr')),
|
'serviceweb' => preg_split('/(\s*,*\s*)*,+(\s*,*\s*)*/', env('MAIL_LIST_SERVICEWEB', 'equipe.web@ldc.fr'))
|
||||||
'admin' => explode(',', env('MAIL_ADMIN')),
|
|
||||||
],
|
],
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
// TODO: Pass this as an enum.
|
|
||||||
return [
|
return [
|
||||||
'const' => [
|
'const' => [
|
||||||
'ADMIN' => '1',
|
'ADMIN' => '1',
|
||||||
|
|
|
||||||
|
|
@ -1,48 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
use Illuminate\Database\Migrations\Migration;
|
|
||||||
use Illuminate\Database\Schema\Blueprint;
|
|
||||||
use Illuminate\Support\Facades\DB;
|
|
||||||
use Illuminate\Support\Facades\Schema;
|
|
||||||
|
|
||||||
return new class extends Migration
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Run the migrations.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function up()
|
|
||||||
{
|
|
||||||
$linkedMediaIdList = DB::table('arcadia_links')->pluck('media_id');
|
|
||||||
$existingMediaIdList = DB::table('media')->whereIn('id', $linkedMediaIdList)->pluck('id');
|
|
||||||
$linkIdListToRemove = $linkedMediaIdList->filter(fn (int $media_id) =>
|
|
||||||
!$existingMediaIdList->contains($media_id));
|
|
||||||
|
|
||||||
// * Remove Orphan links
|
|
||||||
DB::transaction(fn () => DB::table('arcadia_links')->whereIn('media_id', $linkIdListToRemove)->delete());
|
|
||||||
|
|
||||||
// * Add foreign Key
|
|
||||||
Schema::table('arcadia_links', function (Blueprint $table) {
|
|
||||||
$table->unsignedBigInteger('media_id')->nullable(false)->default(null)->change();
|
|
||||||
});
|
|
||||||
Schema::table('arcadia_links', function (Blueprint $table) {
|
|
||||||
$table->foreign('media_id')->references('id')->on('media');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reverse the migrations.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function down()
|
|
||||||
{
|
|
||||||
Schema::table('arcadia_links', function (Blueprint $table) {
|
|
||||||
$table->dropForeign(['media_id']);
|
|
||||||
});
|
|
||||||
Schema::table('arcadia_links', function (Blueprint $table) {
|
|
||||||
$table->bigInteger('media_id')->default(0)->change();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
@ -1,14 +1,12 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- < XSD deviné, basé sur la BDD et cette seule affirmation "les 3 champs sont obligatoires" @author Jérémy Munsch jeremy.munsch@ldc.fr > -->
|
||||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
|
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
|
||||||
<xs:element name="MEDIA_VISUEL">
|
<xs:element name="MEDIA_VISUEL">
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="codeArcadia" type="_positive_unsigned_integer_without_leading_zeros" />
|
<xs:element name="codeArcadia" type="_positive_unsigned_integer_without_leading_zeros" />
|
||||||
<xs:element name="code_DAM" type="_positive_unsigned_integer_without_leading_zeros"/>
|
<xs:element name="code_DAM" type="_positive_unsigned_integer_without_leading_zeros"/>
|
||||||
<xs:element name="version" minOccurs="1" nillable="true" >
|
<xs:element name="version" type="_positive_unsigned_integer_without_leading_zeros"/>
|
||||||
<xs:simpleType>
|
|
||||||
<xs:union memberTypes="_positive_unsigned_integer_without_leading_zeros xs:string"/>
|
|
||||||
</xs:simpleType>
|
|
||||||
</xs:element>
|
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
|
@ -18,4 +16,5 @@
|
||||||
<xs:pattern value="[123456789]\d*"/>
|
<xs:pattern value="[123456789]\d*"/>
|
||||||
</xs:restriction>
|
</xs:restriction>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
|
|
||||||
</xs:schema>
|
</xs:schema>
|
||||||
|
|
@ -1,20 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!-- < XSD deviné, basé sur la BDD et cette seule affirmation "les 3 champs sont obligatoires" @author Jérémy Munsch jeremy.munsch@ldc.fr > -->
|
|
||||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
|
|
||||||
<xs:element name="MEDIA_VISUEL">
|
|
||||||
<xs:complexType>
|
|
||||||
<xs:sequence>
|
|
||||||
<xs:element name="codeArcadia" type="_positive_unsigned_integer_without_leading_zeros" />
|
|
||||||
<xs:element name="code_DAM" type="_positive_unsigned_integer_without_leading_zeros"/>
|
|
||||||
<xs:element name="version" type="_positive_unsigned_integer_without_leading_zeros"/>
|
|
||||||
</xs:sequence>
|
|
||||||
</xs:complexType>
|
|
||||||
</xs:element>
|
|
||||||
|
|
||||||
<xs:simpleType name="_positive_unsigned_integer_without_leading_zeros">
|
|
||||||
<xs:restriction base="xs:positiveInteger">
|
|
||||||
<xs:pattern value="[123456789]\d*"/>
|
|
||||||
</xs:restriction>
|
|
||||||
</xs:simpleType>
|
|
||||||
|
|
||||||
</xs:schema>
|
|
||||||
|
|
@ -163,8 +163,8 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
|
|
||||||
import Resumable from "resumablejs";
|
import Resumable from "resumablejs";
|
||||||
|
import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "MmActionsComponent",
|
name: "MmActionsComponent",
|
||||||
|
|
@ -224,7 +224,7 @@ export default {
|
||||||
} else {
|
} else {
|
||||||
this.$loading.show({ delay: 0 });
|
this.$loading.show({ delay: 0 });
|
||||||
axios
|
axios
|
||||||
.post(`/ajax/media/${this.storeGrabbed[0].uid}/duplicate`)
|
.post(`/ajax/media/${this.storeGrabbed[0].id}/duplicate`)
|
||||||
.then((response) => {
|
.then((response) => {
|
||||||
this.$loading.hide();
|
this.$loading.hide();
|
||||||
if (response.data.status === true) {
|
if (response.data.status === true) {
|
||||||
|
|
|
||||||
|
|
@ -167,7 +167,6 @@ export default {
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.resetInfiniteScroll();
|
this.resetInfiniteScroll();
|
||||||
this.init();
|
|
||||||
},
|
},
|
||||||
data: function () {
|
data: function () {
|
||||||
return {
|
return {
|
||||||
|
|
@ -222,10 +221,6 @@ export default {
|
||||||
type: "updateGrabbed",
|
type: "updateGrabbed",
|
||||||
grabbed: [],
|
grabbed: [],
|
||||||
});
|
});
|
||||||
this.$store.commit({
|
|
||||||
type: "updateFolder",
|
|
||||||
folder: this.storeFolder,
|
|
||||||
});
|
|
||||||
this.loadMediaList();
|
this.loadMediaList();
|
||||||
//set dateSorted
|
//set dateSorted
|
||||||
this.dateSorted = false;
|
this.dateSorted = false;
|
||||||
|
|
|
||||||
|
|
@ -126,7 +126,6 @@ export default {
|
||||||
components: { FontAwesomeIcon },
|
components: { FontAwesomeIcon },
|
||||||
mounted() {
|
mounted() {
|
||||||
const data = JSON.parse(this.$parent.$options.json);
|
const data = JSON.parse(this.$parent.$options.json);
|
||||||
this.selectedFolder = data.selectedFolder;
|
|
||||||
this.textsearch = data.textsearch ? String(data.textsearch) : "";
|
this.textsearch = data.textsearch ? String(data.textsearch) : "";
|
||||||
this.oTypesmedia = data.typesmedia;
|
this.oTypesmedia = data.typesmedia;
|
||||||
this.oEtiquettes = data.etiquettes;
|
this.oEtiquettes = data.etiquettes;
|
||||||
|
|
@ -153,7 +152,6 @@ export default {
|
||||||
sReferentiel: [],
|
sReferentiel: [],
|
||||||
sTexte: "",
|
sTexte: "",
|
||||||
initText: 0,
|
initText: 0,
|
||||||
selectedFolder: {},
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
|
|
@ -306,22 +304,15 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
reset() {
|
reset() {
|
||||||
|
this.resetFolder();
|
||||||
this.sTypevue = [];
|
this.sTypevue = [];
|
||||||
this.sTypemedias = [];
|
this.sTypemedias = [];
|
||||||
this.sEtiquettes = [];
|
this.sEtiquettes = [];
|
||||||
this.sReferentiel = [];
|
this.sReferentiel = [];
|
||||||
this.sTexte = "";
|
this.sTexte = "";
|
||||||
const filters = this.selectedFolder ? [{
|
|
||||||
type: "dossier_id",
|
|
||||||
legend: "Dossier : ",
|
|
||||||
value: this.selectedFolder.id,
|
|
||||||
libelle: this.selectedFolder.libelle,
|
|
||||||
}] : [];
|
|
||||||
this.resetFolder();
|
|
||||||
this.selectedFolder = null;
|
|
||||||
this.$store.commit({
|
this.$store.commit({
|
||||||
type: "updateFilters",
|
type: "updateFilters",
|
||||||
filters: filters,
|
filters: [],
|
||||||
});
|
});
|
||||||
if (this.textsearch.length && this.initText === 0) {
|
if (this.textsearch.length && this.initText === 0) {
|
||||||
this.addText(this.textsearch);
|
this.addText(this.textsearch);
|
||||||
|
|
|
||||||
|
|
@ -182,25 +182,9 @@ export default {
|
||||||
return this.$store.state.reload;
|
return this.$store.state.reload;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
mounted() {
|
|
||||||
const data = JSON.parse(this.$parent.$options.json);
|
|
||||||
if (data.selectedFolder && data.selectedFolder != -1) {
|
|
||||||
this.selectedFolder = data.selectedFolder;
|
|
||||||
this.selectedSubject = data.selectedSubject;
|
|
||||||
this.$store.commit({
|
|
||||||
type: "updateFolder",
|
|
||||||
folder: data.selectedFolder.id ?? -1,
|
|
||||||
});
|
|
||||||
this.storeFolder = data.selectedFolder.id;
|
|
||||||
this.$nextTick(() => {
|
|
||||||
this.initFolders(this.selectedFolder, this.selectedSubject);
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
selectedFolder: false,
|
selectedFolder: false,
|
||||||
selectedSubject: false,
|
|
||||||
isLoading: true,
|
isLoading: true,
|
||||||
oFolders: [],
|
oFolders: [],
|
||||||
racineCount: 0,
|
racineCount: 0,
|
||||||
|
|
@ -210,7 +194,6 @@ export default {
|
||||||
watch: {
|
watch: {
|
||||||
storeSujet() {
|
storeSujet() {
|
||||||
this.initFolders();
|
this.initFolders();
|
||||||
this.selectedFolder = null;
|
|
||||||
},
|
},
|
||||||
storeReload() {
|
storeReload() {
|
||||||
this.reload();
|
this.reload();
|
||||||
|
|
@ -241,7 +224,7 @@ export default {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
initFolders(toSelectFolder = false, selectedSubject = false) {
|
initFolders(toSelectFolder = false) {
|
||||||
const self = this;
|
const self = this;
|
||||||
self.isLoading = true;
|
self.isLoading = true;
|
||||||
self.folders = [];
|
self.folders = [];
|
||||||
|
|
@ -249,7 +232,7 @@ export default {
|
||||||
axios
|
axios
|
||||||
.get("/ajax/load-folders", {
|
.get("/ajax/load-folders", {
|
||||||
params: {
|
params: {
|
||||||
sujet_id: selectedSubject ? selectedSubject : self.storeSujet,
|
sujet_id: self.storeSujet,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
.then((response) => {
|
.then((response) => {
|
||||||
|
|
|
||||||
|
|
@ -100,12 +100,12 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
// ResumableJs
|
// ResumableJs
|
||||||
import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
|
|
||||||
import Resumable from "resumablejs";
|
import Resumable from "resumablejs";
|
||||||
import MeEditComponent from "./tabs/MeEditComponent.vue";
|
|
||||||
import MeHistoryComponent from "./tabs/MeHistoryComponent.vue";
|
|
||||||
import MeLinksComponent from "./tabs/MeLinksComponent.vue";
|
|
||||||
import MePreviewComponent from "./tabs/MePreviewComponent.vue";
|
import MePreviewComponent from "./tabs/MePreviewComponent.vue";
|
||||||
|
import MeEditComponent from "./tabs/MeEditComponent.vue";
|
||||||
|
import MeLinksComponent from "./tabs/MeLinksComponent.vue";
|
||||||
|
import MeHistoryComponent from "./tabs/MeHistoryComponent.vue";
|
||||||
|
import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "MmEditComponent",
|
name: "MmEditComponent",
|
||||||
|
|
@ -180,7 +180,7 @@ export default {
|
||||||
var query = {
|
var query = {
|
||||||
sujet_id: this.storeMedia.sujet_id,
|
sujet_id: this.storeMedia.sujet_id,
|
||||||
dossier_id: this.storeMedia.dossier_id,
|
dossier_id: this.storeMedia.dossier_id,
|
||||||
media_id: this.storeMedia.id,
|
replaceMediaId: this.storeMedia.id,
|
||||||
};
|
};
|
||||||
this.r.updateQuery(query);
|
this.r.updateQuery(query);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -292,7 +292,7 @@ export default {
|
||||||
},
|
},
|
||||||
SaveMedia() {
|
SaveMedia() {
|
||||||
axios
|
axios
|
||||||
.put(`/ajax/media/${this.storeMedia.uid}`, {
|
.put(`/ajax/media/${this.storeMedia.id}`, {
|
||||||
media: this.storeMedia,
|
media: this.storeMedia,
|
||||||
})
|
})
|
||||||
.then((response) => {
|
.then((response) => {
|
||||||
|
|
|
||||||
|
|
@ -93,7 +93,7 @@
|
||||||
<option :value="null" selected disabled>
|
<option :value="null" selected disabled>
|
||||||
Sélectionnez un type de variante
|
Sélectionnez un type de variante
|
||||||
</option>
|
</option>
|
||||||
<option v-for="item in availableVariantes" :value="item.codeVariante">
|
<option v-for="item in storeTypesvariante" :value="item.codeVariante">
|
||||||
{{ item.libelle }}
|
{{ item.libelle }}
|
||||||
</option>
|
</option>
|
||||||
</select>
|
</select>
|
||||||
|
|
@ -394,9 +394,6 @@ export default {
|
||||||
storeRole() {
|
storeRole() {
|
||||||
return this.$store.state.role;
|
return this.$store.state.role;
|
||||||
},
|
},
|
||||||
availableVariantes() {
|
|
||||||
return this.storeTypesvariante.filter(e => e.typevue_id === this.oMedia.type_vue_id);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
marques() {
|
marques() {
|
||||||
|
|
@ -426,6 +423,7 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
searchMarques() {
|
searchMarques() {
|
||||||
|
console.log("search");
|
||||||
this.refreshMarques();
|
this.refreshMarques();
|
||||||
},
|
},
|
||||||
searchSocietes() {
|
searchSocietes() {
|
||||||
|
|
@ -547,10 +545,9 @@ export default {
|
||||||
__DAM.methods.sessionTimedOut();
|
__DAM.methods.sessionTimedOut();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const errorMessage = error.response.data.message ?? "Erreur lors de l'opération, merci d'actualiser la page.";
|
|
||||||
$.fancyMessage({
|
$.fancyMessage({
|
||||||
title: "Lier un média à Arcadia",
|
title: "Lier un média à Arcadia",
|
||||||
message: errorMessage,
|
message: "Erreur lors de l'opération, merci d'actualiser la page.",
|
||||||
type: "error",
|
type: "error",
|
||||||
});
|
});
|
||||||
console.error(error);
|
console.error(error);
|
||||||
|
|
@ -713,13 +710,10 @@ export default {
|
||||||
.then((response) => {
|
.then((response) => {
|
||||||
const result = response.data;
|
const result = response.data;
|
||||||
if (result.article.utilisableGroupe === 1) {
|
if (result.article.utilisableGroupe === 1) {
|
||||||
const index = this.oMedia.articles?.find(
|
const index = this.oMedia.articles.find(
|
||||||
(e) => e.noArt === result.article.noArt
|
(e) => e.noArt === result.article.noArt
|
||||||
);
|
);
|
||||||
if (!index) {
|
if (!index) {
|
||||||
if (!this.oMedia.articles) {
|
|
||||||
this.$set(this.oMedia, 'articles', []);
|
|
||||||
}
|
|
||||||
this.oMedia.articles.push(result.article);
|
this.oMedia.articles.push(result.article);
|
||||||
} else {
|
} else {
|
||||||
$.fancyMessage({
|
$.fancyMessage({
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
item.user.matricule
|
item.user.matricule
|
||||||
}})
|
}})
|
||||||
</td>
|
</td>
|
||||||
<td>{{ item.type.label }}</td>
|
<td>{{ item.type }}</td>
|
||||||
<td>{{ item.description }}</td>
|
<td>{{ item.description }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|
|
||||||
|
|
@ -8,37 +8,16 @@
|
||||||
line-height: inherit;
|
line-height: inherit;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.starButton,
|
.starButton,
|
||||||
.nestableFolderButton {
|
.nestableFolderButton {
|
||||||
@include resetButton;
|
@include resetButton;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.nestableFolderButton {
|
.nestableFolderButton {
|
||||||
min-width: 1rem;
|
min-width: 1rem;
|
||||||
min-height: 1rem;
|
min-height: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.d-none {
|
.d-none {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.media-link {
|
|
||||||
padding-top: 2rem;
|
|
||||||
|
|
||||||
&-btn {
|
|
||||||
background-color: #fff;
|
|
||||||
border-radius: 3px;
|
|
||||||
color: #374957;
|
|
||||||
font-size: 1rem;
|
|
||||||
padding: 8px;
|
|
||||||
|
|
||||||
&:hover,
|
|
||||||
&:focus {
|
|
||||||
background-color: #0a6fb7;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -1,48 +1,36 @@
|
||||||
@extends('layouts.app')
|
@extends('layouts.app')
|
||||||
|
|
||||||
@include('layouts.header')
|
@include('layouts.header')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<main class="user_index template_2col">
|
<main class="user_index template_2col">
|
||||||
@include('modules.param-sideMenu')
|
@include('modules.param-sideMenu')
|
||||||
<div class="main_content">
|
<div class="main_content">
|
||||||
<div class="heading">
|
<div class="heading">
|
||||||
<h1>{{ __('Anomalies du lien Arcadia') }}</h1>
|
<h1>Anomalies du lien Arcadia</h1>
|
||||||
</div>
|
</div>
|
||||||
<table class="datatable">
|
<table class="datatable">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>{{ __('ID') }}</th>
|
<th>ID</th>
|
||||||
<th>{{ __('Media ID (DAM ID)') }}</th>
|
<th>Media ID (DAM ID)</th>
|
||||||
<th>{{ __('Arcadia ID') }}</th>
|
<th>Arcadia ID</th>
|
||||||
<th>{{ __('Filename') }}</th>
|
<th>Filename</th>
|
||||||
<th>{{ __('Date création ZIP') }}</th>
|
<th>Date création ZIP</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
@foreach ($arcadiaLinkList as $arcadiaLink)
|
@foreach ($ano as $line)
|
||||||
<tr class="data_row">
|
<tr class="data_row">
|
||||||
<td>{{ $arcadiaLink->id }}</td>
|
<td>{{$line->id}}</td>
|
||||||
<td>{{ $arcadiaLink->media->id }}</td>
|
<td>{{$line->media_id}}</td>
|
||||||
<td>{{ $arcadiaLink->arcadia_id }}</td>
|
<td>{{$line->arcadia_id}}</td>
|
||||||
<td>{{ $arcadiaLink->filename }}</td>
|
<td>{{$line->filename}}</td>
|
||||||
<td>{{ $arcadiaLink->date_f }}</td>
|
<td>{{$line->date_f}}</td>
|
||||||
<td>
|
<td><a href="/media/{{$line->media_uuid}}" target="_blank">Ouvrir la fiche média</a></td>
|
||||||
<a href="{{ route('media.show', $arcadiaLink->media) }}"
|
<td><a href="{{route('arcadialinks.destroy', ['id' => $line->id])}}" onclick="return confirm('Êtes-vous sûr de vouloir supprimer cette anomalie ?');"><i class="fas fa-times" style="color: red"></i></a></td>
|
||||||
title="{{ __('Ouvrir la fiche média dans un nouvel onglet') }}" target="_blank">
|
</tr>
|
||||||
{{ __('Ouvrir la fiche média') }}
|
@endforeach
|
||||||
</a>
|
</table>
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<a href="{{ route('arcadialinks.destroy', $arcadiaLink) }}" title="{{ __('Supprimer le lien arcadia') }}"
|
|
||||||
onclick="return confirm('{{ __('Êtes-vous sûr de vouloir supprimer cette anomalie ?') }}');">
|
|
||||||
<i class="fas fa-times" style="color: red"></i>
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
@endforeach
|
|
||||||
</table>
|
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
@endsection
|
@endsection
|
||||||
|
|
|
||||||
|
|
@ -1,59 +1,53 @@
|
||||||
@extends('layouts.app')
|
@extends('layouts.app')
|
||||||
@include('layouts.header')
|
@include('layouts.header')
|
||||||
@section('content')
|
@section('content')
|
||||||
<main class="home">
|
<main class="home">
|
||||||
<div class="search">
|
<div class="search">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<h1><i class="fas fa-images"></i>{{ __('Bienvenue') }}</h1>
|
<h1><i class="fas fa-images"></i>{{ __('Bienvenue') }}</h1>
|
||||||
<form class="input_search" action="{{ route('media_manager') }}" method="get">
|
<form class="input_search" action="{{ route('media_manager') }}" method="get">
|
||||||
<div class="select_container">
|
<div class="select_container">
|
||||||
@if ($sujets->count())
|
@if($sujets->count())
|
||||||
<select name="s">
|
<select name="s">
|
||||||
@foreach ($sujets as $sujet)
|
@foreach ($sujets as $sujet)
|
||||||
<option value="{{ $sujet->codeSujet }}">{{ $sujet->libelle }}</option>
|
<option value="{{ $sujet->codeSujet }}" >{{ $sujet->libelle }}</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
</select>
|
</select>
|
||||||
@endif
|
|
||||||
</div>
|
|
||||||
<input name="t" type="text" value="" autofocus placeholder="Rechercher un média...">
|
|
||||||
<input name="d" type="hidden" value="-1">
|
|
||||||
<button type="submit"><i class="fa fa-search"></i></button>
|
|
||||||
</form>
|
|
||||||
<div class="media-link">
|
|
||||||
<a class="media-link-btn" href="{{ route('media_manager') }}">
|
|
||||||
<i class="fas fa-images"></i>
|
|
||||||
{{ __('Accéder aux médias') }}
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="widget">
|
|
||||||
<div class="item">
|
|
||||||
<header>{{ __('Mes dernières recherches') }}</header>
|
|
||||||
<div class="content">
|
|
||||||
@if ($recherches->count())
|
|
||||||
@foreach ($recherches as $recherche)
|
|
||||||
<a href="{{ route('media_manager', ['r' => $recherche->id]) }}"><i
|
|
||||||
class="fa fa-search"></i>{{ $recherche->sujet->libelle . ' - ' . $recherche->libelle }}</a>
|
|
||||||
@endforeach
|
|
||||||
@else
|
|
||||||
<i class="fa-brands fa-searchengin"></i> <span>{{ __('Aucune recherche effectuée') }}</span>
|
|
||||||
@endif
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="item">
|
|
||||||
<header>{{ __('Mes dossiers favoris') }}</header>
|
|
||||||
<div class="content">
|
|
||||||
@if ($dossiers->count())
|
|
||||||
@foreach ($dossiers as $dossier)
|
|
||||||
<a href="{{ route('media_manager', ['d' => $dossier->id, 's' => $dossier->sujet->codeSujet]) }}"><i
|
|
||||||
class="fas fa-folder"></i> {{ $dossier->sujet->libelle . ' - ' . $dossier->libelle }}</a>
|
|
||||||
@endforeach
|
|
||||||
@else
|
|
||||||
<i class="fa-solid fa-folder"></i> <span>{{ __('Pas de dossier en favoris') }}</span>
|
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
|
<input type="text" name="t" value="" autofocus placeholder="Rechercher un média...">
|
||||||
|
<input type="hidden" name="d" value="-1">
|
||||||
|
<button type="submit"><i class="fa fa-search"></i></button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="widget">
|
||||||
|
<div class="item">
|
||||||
|
<header>{{ __('Mes dernières recherches') }}</header>
|
||||||
|
<div class="content">
|
||||||
|
@if($recherches->count())
|
||||||
|
@foreach ($recherches as $recherche)
|
||||||
|
<a href="{{ route('media_manager', ['r' => $recherche->id]) }}" ><i class="fa fa-search"></i>{{
|
||||||
|
$recherche->sujet->libelle." - ".$recherche->libelle
|
||||||
|
}}</a>
|
||||||
|
@endforeach
|
||||||
|
@else
|
||||||
|
<i class="fa-brands fa-searchengin"></i> <span>{{ __('Aucune recherche effectuée') }}</span>
|
||||||
|
@endif
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
<div class="item">
|
||||||
|
<header>{{ __('Mes dossiers favoris') }}</header>
|
||||||
|
<div class="content">
|
||||||
|
@if($dossiers->count())
|
||||||
|
@foreach ($dossiers as $dossier)
|
||||||
|
<a href="{{ route('media_manager', ['d' => $dossier->id, 's' => $dossier->sujet->codeSujet]) }}" ><i class="fas fa-folder"></i> {{$dossier->sujet->libelle." - ".$dossier->libelle}}</a>
|
||||||
|
@endforeach
|
||||||
|
@else
|
||||||
|
<i class="fa-solid fa-folder"></i> <span>{{ __('Pas de dossier en favoris') }}</span>
|
||||||
|
@endif
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
@endsection
|
@endsection
|
||||||
|
|
|
||||||
|
|
@ -2,65 +2,55 @@
|
||||||
@include('layouts.header')
|
@include('layouts.header')
|
||||||
@include('layouts.media_edit')
|
@include('layouts.media_edit')
|
||||||
@section('content')
|
@section('content')
|
||||||
<main class="media_manager template_2col">
|
<main class="media_manager template_2col">
|
||||||
<div class="side_menu">
|
<div class="side_menu">
|
||||||
@php
|
@php
|
||||||
$dataVue = [
|
$dataVue = [
|
||||||
'sujets' => $sujets,
|
'sujets' => $sujets,
|
||||||
'current' => $currentSujet,
|
'current' => $currentSujet,
|
||||||
];
|
];
|
||||||
@endphp
|
@endphp
|
||||||
<div id="mm-side-header" data-json='@json($dataVue)'></div>
|
<div id="mm-side-header" data-json='@json($dataVue)'></div>
|
||||||
@php
|
<div id="mm-folder" data-json='{}'></div>
|
||||||
$dataVue = [
|
</div>
|
||||||
'selectedFolder' => $currentFolder,
|
<div class="main_content">
|
||||||
'selectedSubject' => $currentSujet,
|
<header>
|
||||||
];
|
|
||||||
@endphp
|
|
||||||
<div id="mm-folder" data-json='@json($dataVue)'></div>
|
|
||||||
</div>
|
|
||||||
<div class="main_content">
|
|
||||||
<header>
|
|
||||||
@php
|
@php
|
||||||
$dataVue = [
|
$dataVue = [
|
||||||
'textsearch' => $textSearch,
|
'textsearch' => $textSearch,
|
||||||
'typesmedia' => $typesmedia,
|
'typesmedia' => $typesmedia,
|
||||||
'etiquettes' => $etiquettes,
|
'etiquettes' => $etiquettes,
|
||||||
];
|
];
|
||||||
@endphp
|
@endphp
|
||||||
<div id="mm-filters" data-json='@json($dataVue)'></div>
|
<div id="mm-filters" data-json='@json($dataVue)'></div>
|
||||||
<div class="action_wrapper group">
|
<div class="action_wrapper group">
|
||||||
<div id="actionsBar">
|
<div id="actionsBar">
|
||||||
@php
|
@php
|
||||||
$dataVue = [
|
$dataVue = [
|
||||||
'csrf' => csrf_token(),
|
'csrf' => csrf_token(),
|
||||||
'etiquettes' => $etiquettes,
|
'etiquettes' => $etiquettes,
|
||||||
];
|
];
|
||||||
@endphp
|
@endphp
|
||||||
<div id="mm-actions" data-json='@json($dataVue)'></div>
|
<div id="mm-actions" data-json='@json($dataVue)'></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="display">
|
<div class="display">
|
||||||
<button><i class="fa fa-calendar-check selected"></i></button>
|
<button><i class="fa fa-calendar-check selected"></i></button>
|
||||||
<button><i class="fa fa-table-cells selected"></i></button>
|
<button><i class="fa fa-table-cells selected"></i></button>
|
||||||
<button><i class="fa fa-table-list"></i></button>
|
<button><i class="fa fa-table-list"></i></button>
|
||||||
</div>
|
</div>
|
||||||
<div id="mm-sorter" data-json='{}'></div>
|
<div id="mm-sorter" data-json='{}'></div>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
@php
|
<div id="mm-display" data-json='{}'></div>
|
||||||
$dataVue = [
|
</div>
|
||||||
'selectedFolder' => $currentFolder,
|
|
||||||
];
|
|
||||||
@endphp
|
|
||||||
<div id="mm-display" data-json='@json($dataVue)'></div>
|
|
||||||
</div>
|
|
||||||
<div id="mm-basket" data-json='{}'></div>
|
<div id="mm-basket" data-json='{}'></div>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
@endsection
|
@endsection
|
||||||
@section('scripts')
|
@section('scripts')
|
||||||
<!-- TODO : Faire le tri des js ci-dessous -->
|
<!-- TODO : Faire le tri des js ci-dessous -->
|
||||||
<script src="{{ mix('js/jquery.nestable.min.js') }}" defer></script>
|
<script src="{{ mix('js/jquery.nestable.min.js') }}" defer></script>
|
||||||
<script src="{{ mix('js/fabric.js') }}"></script>
|
<script src="{{ mix('js/fabric.js') }}"></script>
|
||||||
<script src="{{ mix('js/darkroom.js') }}"></script>
|
<script src="{{ mix('js/darkroom.js') }}"></script>
|
||||||
<script src="{{ mix('js/jquery.caret.min.js') }}"></script>
|
<script src="{{ mix('js/jquery.caret.min.js') }}"></script>
|
||||||
@endsection
|
@endsection
|
||||||
|
|
|
||||||
|
|
@ -73,11 +73,11 @@ Route::post('/ajax/add-depot-folder', [DossierController::class, 'addDepotFolder
|
||||||
|
|
||||||
// * Ajax pour la gestion de l'upload de média .
|
// * Ajax pour la gestion de l'upload de média .
|
||||||
Route::post('/ajax/upload-media/depot', [UploadController::class, 'uploadMediaFileIntoDepot'])
|
Route::post('/ajax/upload-media/depot', [UploadController::class, 'uploadMediaFileIntoDepot'])
|
||||||
->name('media.uploadDepot');
|
->name('media.uploadDepot');
|
||||||
Route::post('/ajax/upload-media/{sujet}/{dossier}', [UploadController::class, 'uploadMediaFile'])
|
Route::post('/ajax/upload-media/{sujet}/{dossier}', [UploadController::class, 'uploadMediaFile'])
|
||||||
->name('media.upload');
|
->name('media.upload');
|
||||||
|
|
||||||
// * Les pages Front panier public.
|
// * Les pages Front panier public.
|
||||||
Route::get('/basket/{basket_uuid}', [PanierController::class, 'showBasket']);
|
Route::get('/basket/{basket_uuid}', [PanierController::class, 'showBasket']);
|
||||||
Route::post('/ajax/download-media-public/{format?}', [MediaController::class, 'downloadMediaPublic'])
|
Route::post('/ajax/download-media-public/{format?}', [MediaController::class, 'downloadMediaPublic'])
|
||||||
->name('downloadMediaPublic');
|
->name('downloadMediaPublic');
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue