Compare commits

..

21 commits

Author SHA1 Message Date
Jérémy Munsch
fe2460d87e
Reset Media route resolv using uid (besoin métier) vu avec Vincent 2023-12-15 12:38:17 +01:00
Jérémy Munsch
ab28dc9257
Fixes #12 Fixed MediaController::esFilters arcadia_id fetch from filters issue 2023-12-15 12:20:34 +01:00
Jérémy Munsch
744a10a74a
Fix Media duplicate
- put in transaction
- set arcadia_id to null
2023-12-15 12:03:35 +01:00
Jérémy Munsch
0bb6189090
Fixes #10
- Remove explicition resolve for media in RouteServicePRovider
- Set usage of media id on media routes everywhere
2023-12-15 11:54:50 +01:00
Jérémy Munsch
94470da862
Fixes #9
- add FK on arcadia_links to media.id and remove orphans
- Refactored ArcadiaLinkController
- Added comments on ArcadiaLink model
- refactored arcadialinks.index
2023-12-15 11:45:54 +01:00
Jérémy Munsch
3f32460d60
Add View service provider (prepare to bump slowly) 2023-12-15 11:45:50 +01:00
Jérémy Munsch
57fdd70d92
Fixes #8+
Enums arent using BaseEnum trait and cannot since tool low php level, need to manually implement behaviors
2023-12-14 17:13:46 +01:00
Jérémy Munsch
442de63409
MediaController refactor getMediaOtherInfos 2023-12-14 17:12:19 +01:00
Jérémy Munsch
e531def9f3
Fixes #7,#13 REfactor BasektController + Flush cache before querying basket media list 2023-12-14 16:51:05 +01:00
Jérémy Munsch
7d53509e8e
Fixes #6 2023-12-14 15:47:50 +01:00
Jérémy Munsch
080b400e84
UploadController fix Media query 2023-12-14 15:19:07 +01:00
Jérémy Munsch
665d003a5b
Add TODO in config/roles 2023-12-14 14:23:09 +01:00
Jérémy Munsch
2fcfddf46f
Add Model User comments 2023-12-14 14:22:57 +01:00
Jérémy Munsch
e0ca3acf23
MediaController::loadMedia refactor 2023-12-14 13:21:05 +01:00
Jérémy Munsch
27d0f7ff70
Dossier model refactor getMediacountAttribute 2023-12-14 13:05:35 +01:00
Jérémy Munsch
3ef0b3c144
DossierController refactor with typehint 2023-12-14 13:04:24 +01:00
Jérémy Munsch
22f5e907d0
.gitignore update 2023-12-14 12:02:40 +01:00
Jérémy Munsch
faa9f2ce33
npm update 2023-12-14 11:49:40 +01:00
Jérémy Munsch
cf8057d351
composer update 2023-12-14 11:48:21 +01:00
Jérémy Munsch
67d7e54c1c
add name to package json 2023-12-14 11:47:08 +01:00
Jérémy Munsch
c51bf890b6
update client api + add .gitmodules 2023-12-14 11:45:25 +01:00
33 changed files with 1423 additions and 1432 deletions

View file

@ -60,4 +60,4 @@ MAIL_LIST_SERVICEWEB=
PROJECT_UUID=
## MAIL ADDRESSES
MAIL_LIST_SERVICEWEB=digital@ldc.fr
MAIL_LIST_SERVICEWEB=equipe.web@ldc.fr

View file

@ -39,7 +39,7 @@ MAIL_PASSWORD=
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=no-reply@dam.lesidc.com
MAIL_FROM_NAME="${APP_NAME}"
MAIL_ADMIN=digital@ldc.fr
MAIL_ADMIN=equipe.web@ldc.fr
LDAP_ACCOUNT_PREFIX="cn="
@ -54,7 +54,7 @@ LDAP_USE_SSL=false
PROJECT_UUID=
## MAIL ADDRESSES
MAIL_LIST_SERVICEWEB=digital@ldc.fr
MAIL_LIST_SERVICEWEB=equipe.web@ldc.fr
LDC_STATUS_CHECKER_API_KEY=CE8S52Qq7stf5k8frF4T
LDC_STATUS_CHECKER_UUID=4d8b2c20-107a-4682-b591-dc6c685126df

View file

@ -39,7 +39,7 @@ MAIL_PASSWORD=
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=no-reply@dam.lesidc.com
MAIL_FROM_NAME="${APP_NAME}"
MAIL_ADMIN=digital@ldc.fr
MAIL_ADMIN=equipe.web@ldc.fr
LDAP_ACCOUNT_PREFIX=
@ -54,7 +54,7 @@ LDAP_USE_SSL=
PROJECT_UUID=
## MAIL ADDRESSES
MAIL_LIST_SERVICEWEB=digital@ldc.fr
MAIL_LIST_SERVICEWEB=equipe.web@ldc.fr
LDC_STATUS_CHECKER_API_KEY=
LDC_STATUS_CHECKER_UUID=

View file

@ -25,7 +25,7 @@ php artisan key:generate
.env => remplacer MAIL_DRIVER par MAIL_MAILER
.env => remplacer FILESYSTEM_DRIVER par FILESYSTEM_DISK
.env rajouter PROJECT_UUID=
.env rajouter MAIL_LIST_SERVICEWEB=digital@ldc.fr
.env rajouter MAIL_LIST_SERVICEWEB=equipe.web@ldc.fr
# SUPERVISOR
jobs Api stats sur queue `database`

View file

@ -127,20 +127,20 @@ class ImportArcadiaModelFiles extends Command
/** @var \SimpleXMLElement $row */
foreach ($fileContent->dam as $row) {
/** @var \App\Models\Article|null $record */
$record = Article::where('noArt', (int)$row->noArt)->first();
$record = Article::where('noArt', $row->noArt)->first();
if (!$record) {
$record = new Article();
$record->noArt = (int)$row->noArt;
$record->noArt = $row->noArt;
}
$record->libCcial = (string)$row->libCcial;
$record->codMarq = (int)$row->codMarq;
$record->libMarq = (string)$row->libMarq;
$record->codFamVte = (int)$row->codFamVte;
$record->libFamVte = (string)$row->libFamVte;
$record->codGencodAdm = (string)$row->codGencodAdm;
$record->codGencodSymb = (string)$row->codGencodSymb;
$record->codGencodPds = (string)$row->codGencodPds;
$record->utilisableGroupe = (int)$row->utilisableGroupe;
$record->libCcial = $row->libCcial;
$record->codMarq = $row->codMarq;
$record->libMarq = $row->libMarq;
$record->codFamVte = $row->codFamVte;
$record->libFamVte = $row->libFamVte;
$record->codGencodAdm = $row->codGencodAdm;
$record->codGencodSymb = $row->codGencodSymb;
$record->codGencodPds = $row->codGencodPds;
$record->utilisableGroupe = $row->utilisableGroupe;
$record->saveOrFail();
} //end foreach
}
@ -157,12 +157,12 @@ class ImportArcadiaModelFiles extends Command
/** @var \SimpleXMLElement $row */
foreach ($fileContent->dam as $row) {
/** @var \App\Models\Marque|null $record */
$record = Marque::where('codMarq', (int)$row->codMarq)->first();
$record = Marque::where('codMarq', $row->codMarq)->first();
if (!$record) {
$record = new Marque();
$record->codMarq = (int)$row->codMarq;
$record->codMarq = $row->codMarq;
}
$record->libMarq = (string)$row->libMarq;
$record->libMarq = $row->libMarq;
$record->saveOrFail();
}
}
@ -179,12 +179,12 @@ class ImportArcadiaModelFiles extends Command
/** @var \SimpleXMLElement $row */
foreach ($fileContent->mediaSujet as $row) {
/** @var \App\Models\Sujet|null $record */
$record = Sujet::where('codeSujet', (int)$row->code)->first();
$record = Sujet::where('codeSujet', $row->code)->first();
if (!$record) {
$record = new Sujet();
$record->codeSujet = (int)$row->code;
$record->codeSujet = $row->code;
}
$record->libelle = (string)$row->libelle;
$record->libelle = $row->libelle;
$record->saveOrFail();
}
}
@ -201,12 +201,12 @@ class ImportArcadiaModelFiles extends Command
/** @var \SimpleXMLElement $row */
foreach ($fileContent->mediatypemedia as $row) {
/** @var \App\Models\TypeMedia|null $record */
$record = TypeMedia::where('codeTypemedia', (int)$row->code)->first();
$record = TypeMedia::where('codeTypemedia', $row->code)->first();
if (!$record) {
$record = new TypeMedia();
$record->codeTypemedia = (int)$row->code;
$record->codeTypemedia = $row->code;
}
$record->libelle = (string)$row->libelle;
$record->libelle = $row->libelle;
$record->saveOrFail();
}
}
@ -223,13 +223,13 @@ class ImportArcadiaModelFiles extends Command
/** @var \SimpleXMLElement $row */
foreach ($fileContent->mediatypesvue as $row) {
/** @var \App\Models\TypeVue|null $record */
$record = TypeVue::where('codeTypevue', (int)$row->code)->first();
$record = TypeVue::where('codeTypevue', $row->code)->first();
if (!$record) {
$record = new TypeVue();
$record->codeTypevue = (int)$row->code;
$record->codeTypevue = $row->code;
}
$record->libelle = (string)$row->libelle;
$record->sujet_id = (int)$row->sujet_id->mediasujet->code;
$record->libelle = $row->libelle;
$record->sujet_id = $row->sujet_id->mediasujet->code;
$record->saveOrFail();
}
}
@ -246,14 +246,14 @@ class ImportArcadiaModelFiles extends Command
/** @var \SimpleXMLElement $row */
foreach ($fileContent->mediavariante as $row) {
/** @var \App\Models\TypeVue|null $record */
$record = Variante::where('codeVariante', (int)$row->code)->first();
$record = Variante::where('codeVariante', $row->code)->first();
if (!$record) {
$record = new Variante();
$record->codeVariante = (int)$row->code;
$record->codeVariante = $row->code;
}
$record->libelle = (string)$row->libelle;
$record->sujet_id = (int)$row->sujet_id->children()[0]->code;
$record->type_vue_id = (int)$row->CodeTypeVue->mediatypesvue->code;
$record->libelle = $row->libelle;
$record->sujet_id = $row->sujet_id->children()[0]->code;
$record->type_vue_id = $row->CodeTypeVue->mediatypesvue->code;
$record->saveOrFail();
}
}
@ -270,12 +270,12 @@ class ImportArcadiaModelFiles extends Command
/** @var \SimpleXMLElement $row */
foreach ($fileContent->SITE_PROD_GRP as $row) {
/** @var \App\Models\TypeVue|null $record */
$record = Site::where('id', (int)$row->code)->first();
$record = Site::where('id', $row->code)->first();
if (!$record) {
$record = new Site();
$record->id = (int)$row->code;
$record->id = $row->code;
}
$record->libelle = (string)$row->libelle;
$record->libelle = $row->libelle;
$record->saveOrFail();
}
}
@ -292,12 +292,12 @@ class ImportArcadiaModelFiles extends Command
/** @var \SimpleXMLElement $row */
foreach ($fileContent->dam as $row) {
/** @var \App\Models\TypeVue|null $record */
$record = Societe::where('id', (int)$row->codSociete)->first();
$record = Societe::where('id', $row->codSociete)->first();
if (!$record) {
$record = new Societe();
$record->id = (int)$row->codSociete;
$record->id = $row->codSociete;
}
$record->libelle = (string)$row->nomSociete;
$record->libelle = $row->nomSociete;
$record->saveOrFail();
}
}

View file

@ -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;
}
}

View file

@ -39,8 +39,7 @@ class CommonController extends Controller
})->with('sujet')->get();
return view('home')->with([
'sujets' => $sujets,
'recherches' => $recherches,
'sujets' => $sujets, 'recherches' => $recherches,
'dossiers' => $dossiers
]);
}
@ -55,10 +54,8 @@ class CommonController extends Controller
{
/** @var \App\Models\User $user */
$user = auth()->user();
foreach (config('mail.contactsList.admin') as $mail) {
Mail::to($mail)
->send(new ContactMail(ContactType::from($request->type), $request->url, $request->message, $user));
}
Mail::to(env('MAIL_ADMIN_ADDRESS', "informatique.internet@ldc.fr"))
->send(new ContactMail(ContactType::from($request->type), $request->url, $request->message, $user));
return response()->json(['status' => 'OK']);
}

View file

@ -43,7 +43,7 @@ class DossierController extends Controller
$publicFolders = Dossier::query()
->whereHas('sujet', fn (Builder $q) => $q->where('codeSujet', $request->input('sujet_id')))
->where('is_private', false)
->whereNull('parent_id')
->whereDoesntHave('dossierParent')
->select($select)->get();
@ -75,7 +75,7 @@ class DossierController extends Controller
// * Ajout du dépôt de fichier pour les admin.
/** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Dossier> Dossiers depots */
$depotQuery = Dossier::query()
->whereNull('parent_id')
->whereDoesntHave('dossierParent')
->where('system', true)
->orderBy('libelle', 'ASC')
->get();
@ -150,7 +150,7 @@ class DossierController extends Controller
/** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Dossier> */
$dossiers = Dossier::query()
->whereNull('parent_id')
->whereDoesntHave('dossierParent')
->where('system', false)
->orderBy('libelle', 'asc')
->get();
@ -174,7 +174,7 @@ class DossierController extends Controller
if ($request->sub) {
/** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Dossier> */
$dossiers = Dossier::query()
->whereNull('parent_id')
->whereDoesntHave('dossierParent')
->where('system', false)
->orderBy('libelle', 'asc')->get();
return view('dossiers.create-sub', [

View file

@ -127,7 +127,7 @@ class MediaController extends Controller
'etiquettes' => $etiquettes,
'societes' => $societes,
'marques' => $marques,
'currentFolder' => Dossier::query()->where('id', $dossier_id)->first() ?? $dossier_id,
'currentFolder' => $dossier_id,
'currentSujet' => optional($sujet)->codeSujet ?? \optional($sujets->first())->codeSujet,
'currentFilters' => json_encode($filters),
'paniers' => $paniers,
@ -407,7 +407,6 @@ class MediaController extends Controller
// ---- Les articles
$media->articles()->sync(collect($request->articles)->pluck('id')->all());
Article::flushQueryCache();
$media->saveOrFail();
@ -500,8 +499,6 @@ class MediaController extends Controller
// ---- 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
@ -660,12 +657,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);
return response()->json(true);
@ -774,7 +765,7 @@ class MediaController extends Controller
}
$history = Historique::query()
->whereHas('media', fn(Builder $q) => $q->where('id', $media->id))
->whereHas('media', fn (Builder $q) => $q->where('id', $media->id))
->with('user')
->orderBy('created_date', 'DESC')
->get();

View file

@ -73,8 +73,6 @@ class PanierController extends Controller
$request->input('mediaList')
));
Media::flushQueryCache();
return response()->json();
}

View file

@ -15,7 +15,7 @@ use App\Models\Sujet;
use App\Models\TypeMedia;
use App\Models\User;
use App\Traits\Http\HandlesMedia;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Contracts\Database\Eloquent\Builder;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Http\UploadedFile;
@ -146,8 +146,8 @@ class UploadController extends Controller
/** @var \App\Models\Media */
$media = Media::query()
->where('id', $request->input('media_id'))
->whereHas('sujet', fn(Builder $q) => $q->where('codeSujet', $sujet->codeSujet))
->whereHas('dossier', fn(Builder $q) => $q->where('id', $dossier->id))
->whereHas('sujet', fn (Builder $q) => $q->where('codeSujet', $sujet->codeSujet))
->whereHas('dossier', fn (Builder $q) => $q->where('id', $dossier->id))
->firstOrNew();
// Save the file and return any response you need.
@ -214,7 +214,7 @@ class UploadController extends Controller
'File guessed extensions :guessedExts does not match file name extension :extension',
[
'guessedExt' => $guessedExts,
'extension' => $mediaExtension->value,
'extension' => $mediaExtension,
]
)
]);
@ -341,8 +341,6 @@ class UploadController extends Controller
$media->saveOrFail();
Media::flushQueryCache();
// * Get props inserted by DB.
return response()->json($media->refresh());
});

View file

@ -190,14 +190,10 @@ class UserController extends Controller
$marques = Marque::orderBy('libMarq', 'asc')->get();
$userSujets = $user->sujets;
$sujets = Sujet::where('sujet_dam', true)->orderBy('libelle', 'asc')->get();
$users = User::select(['id', 'email'])
->whereIn('role', [
config('roles.const.ADMIN'), config('roles.const.CONTRIBUTEUR'),
config('roles.const.REDACTEUR')
])
->where('id', '!=', $user->id)
->orderBy('email')
->get();
$users = User::select(['id', 'email'])->whereIn('role', [
config('roles.const.ADMIN'), config('roles.const.CONTRIBUTEUR'),
config('roles.const.REDACTEUR')
])->where('id', '!=', $user->id)->get();
return view('users.edit')->with([
'user' => $user, 'roles' => $roles, 'users' => $users,
'userMarques' => $userMarques, 'marques' => $marques,

View file

@ -39,9 +39,7 @@ class XmlArcadiaMediasIn extends XmlJobs
*
* @var array
*/
protected $nullableFields = [
'version'
];
protected $nullableFields = [];
/**
* Fields that are unique
@ -71,7 +69,7 @@ class XmlArcadiaMediasIn extends XmlJobs
$media = Media::withTrashed()->where($uniqueColumnsKey)->firstOrFail();
$media->arcadia_id = $line['arcadia_id'];
$media->version = $line['version'] ?? 1;
$media->version = $line['version'];
$media->isLocked = false;
$media->saveOrFail();

View file

@ -132,7 +132,7 @@ class ArcadiaLinkUtilities
$storage->path($filename),
\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->close() && $success;
unset($zip);
@ -245,7 +245,7 @@ class ArcadiaLinkUtilities
->appendChild($dom->createCDATASection($formatModel['hauteur']));
$format->appendChild($dom->createElement('lien'))
->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'),
$formatModel['libelle']
)));

View file

@ -75,6 +75,6 @@ class Article extends Model
*/
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');
}
}

View file

@ -39,27 +39,14 @@ class Media extends Model
*/
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.
*
* @var array
*/
protected $with = [
'owner',
'tags',
'etiquette',
'articles',
'sujet',
'typeMedia',
'societes',
'marques'
'owner', 'tags', 'etiquette', 'articles', 'sujet',
'typeMedia', 'societes', 'marques'
];
/**
@ -222,10 +209,8 @@ class Media extends Model
$user = auth()->user();
MediaCreated::dispatch($user, $model);
if (empty($model->isDuplicate)) {
/** @throws \RuntimeException */
$model->addToElasticSearch();
}
/** @throws \RuntimeException */
$model->addToElasticSearch();
});
static::updating(function (self $model) {
if ($model->statut === MediaStatut::brouillon and $model->arcadia_id) {
@ -241,8 +226,8 @@ class Media extends Model
/** @var \App\Models\User */
$user = auth()->user();
// * If update is not running from console, we prevent soft delete before trigerring update event
if ($user and !\array_key_exists('deleted_at', $model->getChanges())) {
// * Prevent soft delete trigerring update event
if (!\array_key_exists('deleted_at', $model->getChanges())) {
MediaUpdated::dispatch($user, $model);
}
@ -267,6 +252,8 @@ class Media extends Model
/** @throws \RuntimeException */
$model->removeFromElasticSearch();
$model->deleteFilesOnAllPath();
});
}
@ -805,7 +792,7 @@ class Media extends Model
$storage = Storage::disk('media');
// * format spécifique
if (!$format->system) {
if ($format->system) {
if (in_array($this->extension, ['gif', 'jpeg', 'jpg', 'png', 'pdf', 'ai', 'psd'])) {
return $storage->path("/{$this->folder}/{$this->uid}_{$format->libelle}.{$format->extension->value}");
}
@ -820,7 +807,7 @@ class Media extends Model
} 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}.{$this->extension->value}");
return $storage->path("/{$this->folder}/{$this->uid}.{$this->extension}");
}
throw new \RuntimeException("Unhandled Format $format->id $format->libelle");
}

View file

@ -4,7 +4,6 @@ namespace App\Providers;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\URL;
use Illuminate\Support\ServiceProvider;
@ -17,12 +16,6 @@ class AppServiceProvider extends ServiceProvider
*/
public function boot()
{
if (
in_array(config('app.env'), ['local', 'testing']) && config('app.bypassldap') && !app()->runningInConsole()
) {
Auth::loginUsingId(24);
}
// !!! Fuc**** Lab LDC exception OMG !!!
if (!in_array(config('app.env'), ['local', 'testing'])) {
URL::forceRootUrl(config('app.url'));
@ -32,10 +25,13 @@ class AppServiceProvider extends ServiceProvider
return $url->current();
});
}
// * Force HTTPS
URL::forceScheme('https');
// * REVERSE PROXY FIX
// * LOCAL HTTPS FIX
if (!in_array(config('app.env'), ['local', 'testing'])) {
URL::forceScheme('https');
}
// * HA PROXY FIX
App::singleton('clientIp', function () {
if (config('app.env') == 'local') {
return request()->getClientIp();

View file

@ -23,6 +23,7 @@
"laravel/tinker": "^2.7",
"laravel/ui": "^3.0",
"laravelcollective/html": "^6.3",
"ldc/web-status-checker-laravel": "^1.0",
"mews/purifier": "^3.3",
"pion/laravel-chunk-upload": "^1.5",
"rennokki/laravel-eloquent-query-cache": "^3.3"
@ -96,5 +97,11 @@
}
},
"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

File diff suppressed because it is too large Load diff

View file

@ -4,8 +4,6 @@ use Illuminate\Support\Facades\Facade;
return [
'bypassldap' => env('BYPASS_LDAP', false),
/*
|--------------------------------------------------------------------------
| Application Name

View file

@ -12,6 +12,6 @@ return [
* so you can receive email if things go mad
*/
'contactsList' => [
env('MAIL_LIST_SERVICEWEB', 'digital@ldc.fr')
env('MAIL_LIST_SERVICEWEB', 'equipe.web@ldc.fr')
]
];

View file

@ -117,9 +117,8 @@ return [
// * Contacts List
'contactsList' => [
'invalidXml' => preg_split('/(\s*,*\s*)*,+(\s*,*\s*)*/', env('MAIL_LIST_INVALID_XML', 'digital@ldc.fr')),
'serviceweb' => preg_split('/(\s*,*\s*)*,+(\s*,*\s*)*/', env('MAIL_LIST_SERVICEWEB', 'digital@ldc.fr')),
'admin' => explode(',', env('MAIL_ADMIN')),
'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', 'equipe.web@ldc.fr'))
],
];

View file

@ -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: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" minOccurs="1" nillable="true" >
<xs:simpleType>
<xs:union memberTypes="_positive_unsigned_integer_without_leading_zeros xs:string"/>
</xs:simpleType>
</xs:element>
<xs:element name="version" type="_positive_unsigned_integer_without_leading_zeros"/>
</xs:sequence>
</xs:complexType>
</xs:element>
@ -18,4 +16,5 @@
<xs:pattern value="[123456789]\d*"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
</xs:schema>

View file

@ -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>

View file

@ -163,8 +163,8 @@
</template>
<script>
import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
import Resumable from "resumablejs";
import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
export default {
name: "MmActionsComponent",

View file

@ -167,7 +167,6 @@ export default {
},
mounted() {
this.resetInfiniteScroll();
this.init();
},
data: function () {
return {
@ -222,10 +221,6 @@ export default {
type: "updateGrabbed",
grabbed: [],
});
this.$store.commit({
type: "updateFolder",
folder: this.storeFolder,
});
this.loadMediaList();
//set dateSorted
this.dateSorted = false;

View file

@ -126,7 +126,6 @@ export default {
components: { FontAwesomeIcon },
mounted() {
const data = JSON.parse(this.$parent.$options.json);
this.selectedFolder = data.selectedFolder;
this.textsearch = data.textsearch ? String(data.textsearch) : "";
this.oTypesmedia = data.typesmedia;
this.oEtiquettes = data.etiquettes;
@ -153,7 +152,6 @@ export default {
sReferentiel: [],
sTexte: "",
initText: 0,
selectedFolder: {},
};
},
watch: {
@ -306,22 +304,15 @@ export default {
}
},
reset() {
this.resetFolder();
this.sTypevue = [];
this.sTypemedias = [];
this.sEtiquettes = [];
this.sReferentiel = [];
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({
type: "updateFilters",
filters: filters,
filters: [],
});
if (this.textsearch.length && this.initText === 0) {
this.addText(this.textsearch);

View file

@ -182,25 +182,9 @@ export default {
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() {
return {
selectedFolder: false,
selectedSubject: false,
isLoading: true,
oFolders: [],
racineCount: 0,
@ -210,7 +194,6 @@ export default {
watch: {
storeSujet() {
this.initFolders();
this.selectedFolder = null;
},
storeReload() {
this.reload();
@ -241,7 +224,7 @@ export default {
});
}
},
initFolders(toSelectFolder = false, selectedSubject = false) {
initFolders(toSelectFolder = false) {
const self = this;
self.isLoading = true;
self.folders = [];
@ -249,7 +232,7 @@ export default {
axios
.get("/ajax/load-folders", {
params: {
sujet_id: selectedSubject ? selectedSubject : self.storeSujet,
sujet_id: self.storeSujet,
},
})
.then((response) => {

View file

@ -100,12 +100,12 @@
<script>
// ResumableJs
import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
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 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 {
name: "MmEditComponent",
@ -180,7 +180,7 @@ export default {
var query = {
sujet_id: this.storeMedia.sujet_id,
dossier_id: this.storeMedia.dossier_id,
media_id: this.storeMedia.id,
replaceMediaId: this.storeMedia.id,
};
this.r.updateQuery(query);
} else {

View file

@ -93,7 +93,7 @@
<option :value="null" selected disabled>
Sélectionnez un type de variante
</option>
<option v-for="item in availableVariantes" :value="item.codeVariante">
<option v-for="item in storeTypesvariante" :value="item.codeVariante">
{{ item.libelle }}
</option>
</select>
@ -394,9 +394,6 @@ export default {
storeRole() {
return this.$store.state.role;
},
availableVariantes() {
return this.storeTypesvariante.filter(e => e.typevue_id === this.oMedia.type_vue_id);
}
},
watch: {
marques() {
@ -426,6 +423,7 @@ export default {
}
},
searchMarques() {
console.log("search");
this.refreshMarques();
},
searchSocietes() {
@ -547,10 +545,9 @@ export default {
__DAM.methods.sessionTimedOut();
return;
}
const errorMessage = error.response.data.message ?? "Erreur lors de l'opération, merci d'actualiser la page.";
$.fancyMessage({
title: "Lier un média à Arcadia",
message: errorMessage,
message: "Erreur lors de l'opération, merci d'actualiser la page.",
type: "error",
});
console.error(error);
@ -713,13 +710,10 @@ export default {
.then((response) => {
const result = response.data;
if (result.article.utilisableGroupe === 1) {
const index = this.oMedia.articles?.find(
const index = this.oMedia.articles.find(
(e) => e.noArt === result.article.noArt
);
if (!index) {
if (!this.oMedia.articles) {
this.$set(this.oMedia, 'articles', []);
}
this.oMedia.articles.push(result.article);
} else {
$.fancyMessage({

View file

@ -8,37 +8,16 @@
line-height: inherit;
padding: 0;
}
.starButton,
.nestableFolderButton {
@include resetButton;
cursor: pointer;
color: #fff;
}
.nestableFolderButton {
min-width: 1rem;
min-height: 1rem;
}
.d-none {
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;
}
}
}

View file

@ -1,59 +1,53 @@
@extends('layouts.app')
@include('layouts.header')
@section('content')
<main class="home">
<div class="search">
<div class="container">
<h1><i class="fas fa-images"></i>{{ __('Bienvenue') }}</h1>
<form class="input_search" action="{{ route('media_manager') }}" method="get">
<div class="select_container">
@if ($sujets->count())
<select name="s">
@foreach ($sujets as $sujet)
<option value="{{ $sujet->codeSujet }}">{{ $sujet->libelle }}</option>
@endforeach
</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>&nbsp;<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>&nbsp;<span>{{ __('Pas de dossier en favoris') }}</span>
<main class="home">
<div class="search">
<div class="container">
<h1><i class="fas fa-images"></i>{{ __('Bienvenue') }}</h1>
<form class="input_search" action="{{ route('media_manager') }}" method="get">
<div class="select_container">
@if($sujets->count())
<select name="s">
@foreach ($sujets as $sujet)
<option value="{{ $sujet->codeSujet }}" >{{ $sujet->libelle }}</option>
@endforeach
</select>
@endif
</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>&nbsp;<span>{{ __('Aucune recherche effectuée') }}</span>
@endif
</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>&nbsp;<span>{{ __('Pas de dossier en favoris') }}</span>
@endif
</div>
</div>
</div>
</main>
@endsection

View file

@ -2,65 +2,55 @@
@include('layouts.header')
@include('layouts.media_edit')
@section('content')
<main class="media_manager template_2col">
<div class="side_menu">
@php
$dataVue = [
'sujets' => $sujets,
'current' => $currentSujet,
];
@endphp
<div id="mm-side-header" data-json='@json($dataVue)'></div>
@php
$dataVue = [
'selectedFolder' => $currentFolder,
'selectedSubject' => $currentSujet,
];
@endphp
<div id="mm-folder" data-json='@json($dataVue)'></div>
</div>
<div class="main_content">
<header>
<main class="media_manager template_2col">
<div class="side_menu">
@php
$dataVue = [
'sujets' => $sujets,
'current' => $currentSujet,
];
@endphp
<div id="mm-side-header" data-json='@json($dataVue)'></div>
<div id="mm-folder" data-json='{}'></div>
</div>
<div class="main_content">
<header>
@php
$dataVue = [
'textsearch' => $textSearch,
'typesmedia' => $typesmedia,
'etiquettes' => $etiquettes,
];
$dataVue = [
'textsearch' => $textSearch,
'typesmedia' => $typesmedia,
'etiquettes' => $etiquettes,
];
@endphp
<div id="mm-filters" data-json='@json($dataVue)'></div>
<div class="action_wrapper group">
<div class="action_wrapper group">
<div id="actionsBar">
@php
$dataVue = [
'csrf' => csrf_token(),
'etiquettes' => $etiquettes,
];
$dataVue = [
'csrf' => csrf_token(),
'etiquettes' => $etiquettes,
];
@endphp
<div id="mm-actions" data-json='@json($dataVue)'></div>
</div>
<div class="display">
<div class="display">
<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-list"></i></button>
</div>
<button><i class="fa fa-table-cells selected"></i></button>
<button><i class="fa fa-table-list"></i></button>
</div>
<div id="mm-sorter" data-json='{}'></div>
</div>
</header>
@php
$dataVue = [
'selectedFolder' => $currentFolder,
];
@endphp
<div id="mm-display" data-json='@json($dataVue)'></div>
</div>
</div>
</header>
<div id="mm-display" data-json='{}'></div>
</div>
<div id="mm-basket" data-json='{}'></div>
</main>
</main>
@endsection
@section('scripts')
<!-- TODO : Faire le tri des js ci-dessous -->
<script src="{{ mix('js/jquery.nestable.min.js') }}" defer></script>
<script src="{{ mix('js/fabric.js') }}"></script>
<script src="{{ mix('js/darkroom.js') }}"></script>
<script src="{{ mix('js/jquery.caret.min.js') }}"></script>
<script src="{{ mix('js/jquery.nestable.min.js') }}" defer></script>
<script src="{{ mix('js/fabric.js') }}"></script>
<script src="{{ mix('js/darkroom.js') }}"></script>
<script src="{{ mix('js/jquery.caret.min.js') }}"></script>
@endsection