Skip to content

Commit 66dae9e

Browse files
Feature/24 (#62)
* #55 - change routes for admin * #43 - permission policy #94 - add permissions * #50 - maintain response style * #51 - search elements by title and/or library_id * #24 - add QueryExtendable Co-authored-by: KD <do> Co-authored-by: krz <krzysztof.dziedziech@escola.pl>
1 parent c95e57d commit 66dae9e

File tree

9 files changed

+72
-10
lines changed

9 files changed

+72
-10
lines changed

src/Dtos/ContentFilterCriteriaDto.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ public static function instantiateFromRequest(Request $request): self
1616
$criteria = new Collection();
1717

1818
if ($request->has('title')) {
19-
$criteria->push(new LikeCriterion('title', $request->input('title')));
19+
$criteria->push(new LikeCriterion('hh5p_contents.title', $request->input('title')));
2020
}
2121
if ($request->has('library_id')) {
22-
$criteria->push(new EqualCriterion('library_id', $request->input('library_id')));
22+
$criteria->push(new EqualCriterion('hh5p_contents.library_id', $request->input('library_id')));
2323
}
2424

2525
return new self($criteria);

src/Http/Controllers/Swagger/ContentApiSwagger.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,6 @@
9595

9696
interface ContentApiSwagger
9797
{
98-
9998
/**
10099
* @OA\Post(
101100
* path="/api/hh5p/content",

src/Http/Controllers/Swagger/EditorApiSwagger.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77

88
interface EditorApiSwagger
99
{
10-
11-
1210
/**
1311
*
1412
* @OA\Schema(

src/Http/Controllers/Swagger/FilesApiSwagger.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99

1010
interface FilesApiSwagger
1111
{
12-
1312
/**
1413
* @OA\Schema(
1514
* schema="H5PContentFile",

src/Models/H5PContent.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,12 +131,12 @@ public function getMetadataAttribute($value)
131131
return $parameters->metadata;
132132
}
133133

134-
public function user():BelongsTo
134+
public function user(): BelongsTo
135135
{
136136
return $this->belongsTo(User::class);
137137
}
138138

139-
public function library():BelongsTo
139+
public function library(): BelongsTo
140140
{
141141
return $this->belongsTo(H5PLibrary::class, 'library_id');
142142
}

src/Repositories/H5PContentRepository.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,15 @@
1111
use EscolaLms\HeadlessH5P\Models\H5PTempFile;
1212
use EscolaLms\HeadlessH5P\Repositories\Contracts\H5PContentRepositoryContract;
1313
use EscolaLms\HeadlessH5P\Services\Contracts\HeadlessH5PServiceContract;
14+
use EscolaLms\HeadlessH5P\Traits\QueryExtendable;
1415
use Illuminate\Database\Eloquent\Builder;
1516
use Illuminate\Pagination\LengthAwarePaginator;
1617
use Illuminate\Support\Collection;
1718

1819
class H5PContentRepository implements H5PContentRepositoryContract
1920
{
21+
use QueryExtendable;
22+
2023
private HeadlessH5PServiceContract $hh5pService;
2124

2225
public function __construct(HeadlessH5PServiceContract $hh5pService)
@@ -124,7 +127,7 @@ private function moveTmpFilesToContentFolders($nonce, $contentId): bool
124127
public function list(
125128
ContentFilterCriteriaDto $contentFilterDto,
126129
$per_page = 15,
127-
array $columns = ['*']
130+
array $columns = ['hh5p_contents.*']
128131
): LengthAwarePaginator {
129132
$query = $this->getQueryContent($contentFilterDto, $columns);
130133
$paginator = $query->paginate(intval($per_page));
@@ -239,6 +242,10 @@ private function getQueryContent(ContentFilterCriteriaDto $contentFilterDto, arr
239242
['library']
240243
)->select($columns);
241244

245+
$query = self::applyQueryJoin($query);
246+
$query = self::applyQuerySelect($query);
247+
$query = self::applyQueryGroupBy($query);
248+
242249
return $this->applyCriteria($query, $contentFilterDto->toArray());
243250
}
244251
}

src/Traits/QueryExtendable.php

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<?php
2+
3+
namespace EscolaLms\HeadlessH5P\Traits;
4+
5+
use Illuminate\Database\Eloquent\Builder;
6+
7+
trait QueryExtendable
8+
{
9+
private static array $extensionsJoin = [];
10+
private static array $extensionsSelect = [];
11+
private static array $extendQueryGroupBy = [];
12+
13+
public static function extendQueryJoin(callable $extension, string $tableName): void
14+
{
15+
self::$extensionsJoin[$tableName] = $extension;
16+
}
17+
18+
public static function applyQueryJoin(Builder $query): Builder
19+
{
20+
foreach (self::$extensionsJoin as $tableName => $extension) {
21+
$query->leftJoin($tableName, $extension());
22+
}
23+
24+
return $query;
25+
}
26+
27+
public static function extendQuerySelect(callable $extension): void
28+
{
29+
self::$extensionsSelect[] = $extension;
30+
}
31+
32+
public static function applyQuerySelect(Builder $query): Builder
33+
{
34+
foreach (self::$extensionsSelect as $extension) {
35+
$query->addSelect($extension());
36+
}
37+
38+
return $query;
39+
}
40+
41+
public static function extendQueryGroupBy(callable $extension): void
42+
{
43+
self::$extendQueryGroupBy[] = $extension;
44+
}
45+
46+
public static function applyQueryGroupBy(Builder $query): Builder
47+
{
48+
$groupBy = '';
49+
foreach (self::$extendQueryGroupBy as $extension) {
50+
$groupBy .= ($groupBy ? ', ' : '' ) . $extension();
51+
}
52+
if ($groupBy) {
53+
$query->groupBy($groupBy);
54+
}
55+
56+
return $query;
57+
}
58+
}

tests/Api/ContentApiTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use EscolaLms\HeadlessH5P\Models\H5PContent;
66
use EscolaLms\HeadlessH5P\Models\H5PLibrary;
7+
use EscolaLms\HeadlessH5P\Repositories\H5PContentRepository;
78
use EscolaLms\HeadlessH5P\Tests\TestCase;
89
use Illuminate\Http\UploadedFile;
910

tests/Api/LibraryApiTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public function testGuestCannotIndexLibrary(): void
7575
$response->assertForbidden();
7676
}
7777

78-
public function testGuestCannotUploadLibrary()
78+
public function testGuestCannotUploadLibrary(): void
7979
{
8080
$filename = 'arithmetic-quiz.h5p';
8181
$filepath = realpath(__DIR__.'/../mocks/'.$filename);

0 commit comments

Comments
 (0)