Fixes #6
This commit is contained in:
parent
d62b1d513f
commit
bc4a8f64ae
3 changed files with 44 additions and 25 deletions
|
|
@ -19,6 +19,7 @@ use Illuminate\Contracts\Database\Eloquent\Builder;
|
|||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
|
|
@ -81,16 +82,22 @@ class DossierController extends Controller
|
|||
$foldersCollection = $foldersCollection->merge($depotQuery);
|
||||
}
|
||||
|
||||
$folders['data'] = new NestedDossiersListResource($foldersCollection);
|
||||
$folders['racineCount'] = Media::query()
|
||||
->whereHas('sujet', fn (Builder $q) => $q->where('id', $request->input('sujet_id')))
|
||||
->whereDoesntHave('dossier')
|
||||
->where(
|
||||
Arr::set($folders, 'data', new NestedDossiersListResource($foldersCollection));
|
||||
|
||||
// * Racine Count
|
||||
$racineCountQuery = Media::query()
|
||||
->whereHas('sujet', fn (Builder $q) => $q->where('codeSujet', $request->input('sujet_id')))
|
||||
->whereDoesntHave('dossier');
|
||||
// ? Is not admin ?
|
||||
if (!$user->hasRole(config('roles.const.ADMIN'))) {
|
||||
$racineCountQuery->where(
|
||||
fn (Builder $q) =>
|
||||
$q->where('statut', MediaStatut::public_etendu)
|
||||
->orWhere('statut', MediaStatut::public)
|
||||
->orWhere('created_by', $user->id)
|
||||
)->count();
|
||||
);
|
||||
}
|
||||
Arr::set($folders, 'racineCount', $racineCountQuery->count());
|
||||
|
||||
return response()->json($folders);
|
||||
}
|
||||
|
|
@ -108,7 +115,7 @@ class DossierController extends Controller
|
|||
|
||||
$response = [];
|
||||
$response['variantes'] = Variante::query()
|
||||
->whereHas('sujet', fn (Builder $q) => $q->where('id', $request->input('sujetId')))
|
||||
->whereHas('sujet', fn (Builder $q) => $q->where('codeSujet', $request->input('sujetId')))
|
||||
->get();
|
||||
/** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Format> */
|
||||
$FormatsSujet = Format::query()
|
||||
|
|
|
|||
|
|
@ -166,7 +166,7 @@ class MediaController extends Controller
|
|||
$filters = (object)collect($request->input('filters'))->all();
|
||||
|
||||
/** @var boolean Est un dossier Dépot ? */
|
||||
$isDepot = !empty($dossier) and (\optional($dossier->dossierParent)->id === 1 || $dossier->id === 1);
|
||||
$isDepot = !empty($dossier) && (\optional($dossier->dossierParent)->id === 1 || $dossier->id === 1);
|
||||
|
||||
/**
|
||||
* Elastic Search must conditions
|
||||
|
|
@ -210,7 +210,6 @@ class MediaController extends Controller
|
|||
$esMust,
|
||||
$esMustNot,
|
||||
$esShould,
|
||||
$esFilters,
|
||||
$request,
|
||||
$dossier,
|
||||
$sujet,
|
||||
|
|
@ -837,21 +836,21 @@ class MediaController extends Controller
|
|||
/**
|
||||
* Elastic Search select appropriate Folder
|
||||
*
|
||||
* @param array $esMust
|
||||
* @param array $esMustNot
|
||||
* @param array $esShould
|
||||
* @param array $esFilters
|
||||
* @param \App\Http\Requests\Bo\LoadMediaRequest $request
|
||||
* @param \App\Models\Dossier|null $dossier
|
||||
* @param \App\Models\Sujet $sujet
|
||||
* @param boolean $isDepot
|
||||
* @param array $esMust ES conditions INCLURE TOUT (AND).
|
||||
* @param array $esMustNot ES conditions EXCLURE.
|
||||
* @param array $esShould ES conditions INCLURE AU MOINS (OR), avec un score.
|
||||
* @param \App\Http\Requests\Bo\LoadMediaRequest $request La request Lrvl.
|
||||
* @param \App\Models\Dossier|null $dossier Le dossier concerné, si les Medias
|
||||
* doivent appartenir a celui-ci.
|
||||
* @param \App\Models\Sujet $sujet Le sujet concerné, si les Medias
|
||||
* doivent appartenir a celui-ci.
|
||||
* @param boolean $isDepot Si les medias doivent se trouver dans le dossier dépot.
|
||||
* @return void
|
||||
*/
|
||||
private function esFolderSearch(
|
||||
array &$esMust,
|
||||
array &$esMustNot,
|
||||
array &$esShould,
|
||||
array &$esFilters,
|
||||
LoadMediaRequest $request,
|
||||
Dossier|null $dossier,
|
||||
Sujet $sujet,
|
||||
|
|
@ -860,6 +859,7 @@ class MediaController extends Controller
|
|||
/** @var \App\Models\User */
|
||||
$user = auth()->user();
|
||||
|
||||
// ? Doivent être dans le dossier dépot ?
|
||||
if ($isDepot) {
|
||||
// * Dossier dépôt
|
||||
$esMust = array_merge($esMust, [[
|
||||
|
|
@ -868,21 +868,26 @@ class MediaController extends Controller
|
|||
return;
|
||||
}
|
||||
|
||||
// ? N'est pas dans le dossier dépot ou racine ?
|
||||
if (!$dossier) {
|
||||
if ($request->folder === -1) {
|
||||
// ? Recherche globale ?
|
||||
if ($request->input('folder') === -1) {
|
||||
// * Recherche globale .
|
||||
$esMust = array_merge($esMust, [
|
||||
// * AND
|
||||
\array_undot(['bool.must.match.sujet_id' => $sujet->codeSujet])
|
||||
]);
|
||||
} else {
|
||||
// * Dossier racine .
|
||||
$esMust = array_merge($esMust, [
|
||||
// * AND
|
||||
\array_undot(['bool.should.match.sujet_id' => $sujet->codeSujet])
|
||||
]);
|
||||
$esMustNot = array_merge($esMustNot, [
|
||||
\array_undot(['exists.field' => 'dossier_id'])
|
||||
]);
|
||||
} //end if
|
||||
// * OR
|
||||
$esShould = array_merge($esShould, [
|
||||
\array_undot(['match.statut' => MediaStatut::public_etendu]),
|
||||
\array_undot(['match.statut' => MediaStatut::public]),
|
||||
|
|
@ -893,6 +898,7 @@ class MediaController extends Controller
|
|||
|
||||
// * Dossier classic .
|
||||
$esMust = array_merge($esMust, [[
|
||||
// * AND
|
||||
\array_undot([
|
||||
'bool.must' => [
|
||||
\array_undot(['match.sujet_id' => $sujet->codeSujet]),
|
||||
|
|
@ -901,9 +907,13 @@ class MediaController extends Controller
|
|||
])
|
||||
]]);
|
||||
|
||||
// ? User n'est pas ADMIN ?
|
||||
if (!$user->hasRole(config('roles.const.ADMIN'))) {
|
||||
$esFilters = array_merge($esFilters, [
|
||||
// * Ajout de restrictions
|
||||
// * Tout ce qui nous appartient et tout ce qui n'est pas brouillon
|
||||
$esMust = array_merge($esMust, [
|
||||
\array_undot([
|
||||
// * OR
|
||||
'bool.should' => [
|
||||
\array_undot([
|
||||
'bool.must_not' => [[
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ namespace App\Models;
|
|||
|
||||
use App\Enums\MediaStatut;
|
||||
use App\Models\User;
|
||||
use Illuminate\Contracts\Database\Eloquent\Builder;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
|
|
@ -73,8 +74,8 @@ class Dossier extends Model
|
|||
/** @var \App\Model\User $user */
|
||||
$user = Auth::user();
|
||||
|
||||
// ? Est un dossier dépot ?
|
||||
if ($this->parent_id === 1 && $this->id === 1) {
|
||||
// ? Est un dossier dépot ou racine ?
|
||||
if ($this->parent_id === 1 or $this->id === 1) {
|
||||
// * Dossier dépôt
|
||||
return $this->mediaList()->count();
|
||||
}
|
||||
|
|
@ -88,8 +89,9 @@ class Dossier extends Model
|
|||
|
||||
// * Tous les non brouillons ou crées par le user
|
||||
return $this->mediaList()
|
||||
->where('statut', '<>', MediaStatut::brouillon)
|
||||
->orWhere('created_by', $user->id);
|
||||
->where(fn (Builder $q) => $q->where('statut', '!=', MediaStatut::brouillon)
|
||||
->orWhere('created_by', $user->id))
|
||||
->count();
|
||||
}
|
||||
|
||||
// * RELATIONSHIPS
|
||||
|
|
@ -124,7 +126,7 @@ class Dossier extends Model
|
|||
*/
|
||||
public function mediaList()
|
||||
{
|
||||
return $this->hasMany(Media::class, 'dossier_id', 'id');
|
||||
return $this->hasMany(Media::class);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue