From f82a18233ba9a21947f93a555595965c39d5d1c6 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sun, 4 Feb 2024 20:34:12 +0000 Subject: [PATCH] update --- Admin/Install/Search.php | 43 +++++++++++++++ Admin/Install/SearchCommands.php | 32 ++++++++++++ Controller/ApiController.php | 89 +++++++++++++++----------------- Controller/SearchController.php | 78 ++++++++++++++++++++++++++++ Models/Elastic/NewsArticle.json | 7 +++ info.json | 3 +- 6 files changed, 205 insertions(+), 47 deletions(-) create mode 100644 Admin/Install/Search.php create mode 100644 Admin/Install/SearchCommands.php create mode 100644 Controller/SearchController.php create mode 100644 Models/Elastic/NewsArticle.json diff --git a/Admin/Install/Search.php b/Admin/Install/Search.php new file mode 100644 index 0000000..1757ffd --- /dev/null +++ b/Admin/Install/Search.php @@ -0,0 +1,43 @@ + __DIR__ . '/SearchCommands.php']); + } +} diff --git a/Admin/Install/SearchCommands.php b/Admin/Install/SearchCommands.php new file mode 100644 index 0000000..4210fd0 --- /dev/null +++ b/Admin/Install/SearchCommands.php @@ -0,0 +1,32 @@ + [ + [ + 'dest' => '\Modules\News\Controller\SearchController:searchGeneral', + 'verb' => RouteVerb::ANY, + 'permission' => [ + 'module' => SearchController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::NEWS, + ], + ], + ], +]; diff --git a/Controller/ApiController.php b/Controller/ApiController.php index 91836a5..807a0eb 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -174,8 +174,10 @@ final class ApiController extends Controller /** @var \Modules\Admin\Models\Account $account */ $account = AccountMapper::get()->where('id', $request->header->account)->execute(); + $collection = null; + if (!empty($uploadedFiles = $request->files)) { - $uploaded = $this->app->moduleManager->get('Media')->uploadFiles( + $uploaded = $this->app->moduleManager->get('Media', 'Api')->uploadFiles( names: [], fileNames: [], files: $uploadedFiles, @@ -185,8 +187,6 @@ final class ApiController extends Controller pathSettings: PathSettings::FILE_PATH ); - $collection = null; - foreach ($uploaded as $media) { $this->createModelRelation( $request->header->account, @@ -236,56 +236,53 @@ final class ApiController extends Controller } } - if (!empty($mediaFiles = $request->getDataJson('media'))) { - $collection = null; + $mediaFiles = $request->getDataJson('media'); + foreach ($mediaFiles as $media) { + $this->createModelRelation( + $request->header->account, + $news->id, + (int) $media, + NewsArticleMapper::class, + 'files', + '', + $request->getOrigin() + ); - foreach ($mediaFiles as $media) { - $this->createModelRelation( - $request->header->account, - $news->id, - (int) $media, - NewsArticleMapper::class, - 'files', - '', - $request->getOrigin() - ); + /** @var \Modules\Media\Models\Media $mediaObject */ + $mediaObject = MediaMapper::get() + ->where('id', (int) $media) + ->execute(); - /** @var \Modules\Media\Models\Media $mediaObject */ - $mediaObject = MediaMapper::get() - ->where('id', (int) $media) - ->execute(); + $ref = new Reference(); + $ref->source = new NullMedia((int) $media); + $ref->name = $mediaObject->name; + $ref->createdBy = new NullAccount($request->header->account); + $ref->setVirtualPath($path); - $ref = new Reference(); - $ref->source = new NullMedia((int) $media); - $ref->name = $mediaObject->name; - $ref->createdBy = new NullAccount($request->header->account); - $ref->setVirtualPath($path); + $this->createModel($request->header->account, $ref, ReferenceMapper::class, 'media_reference', $request->getOrigin()); - $this->createModel($request->header->account, $ref, ReferenceMapper::class, 'media_reference', $request->getOrigin()); + if ($collection === null) { + /** @var \Modules\Media\Models\Collection $collection */ + $collection = MediaMapper::getParentCollection($path)->limit(1)->execute(); - if ($collection === null) { - /** @var \Modules\Media\Models\Collection $collection */ - $collection = MediaMapper::getParentCollection($path)->limit(1)->execute(); - - if ($collection->id === 0) { - $collection = $this->app->moduleManager->get('Media')->createRecursiveMediaCollection( - $path, - $request->header->account, - __DIR__ . '/../../../Modules/Media/Files' . $path - ); - } + if ($collection->id === 0) { + $collection = $this->app->moduleManager->get('Media')->createRecursiveMediaCollection( + $path, + $request->header->account, + __DIR__ . '/../../../Modules/Media/Files' . $path + ); } - - $this->createModelRelation( - $request->header->account, - $collection->id, - $ref->id, - CollectionMapper::class, - 'sources', - '', - $request->getOrigin() - ); } + + $this->createModelRelation( + $request->header->account, + $collection->id, + $ref->id, + CollectionMapper::class, + 'sources', + '', + $request->getOrigin() + ); } } diff --git a/Controller/SearchController.php b/Controller/SearchController.php new file mode 100644 index 0000000..bd63cf9 --- /dev/null +++ b/Controller/SearchController.php @@ -0,0 +1,78 @@ +with('tags') + ->with('tags/title') + ->where('title', '%' . ($request->getDataString('search') ?? '') . '%', 'LIKE') + ->where('plain', '%' . ($request->getDataString('search') ?? '') . '%', 'LIKE', 'OR') + ->where('language', $response->header->l11n->language) + ->where('tags/title/language', $response->header->l11n->language) + ->sort('createdAt', OrderType::DESC) + ->limit(8) + ->execute(); + + $results = []; + foreach ($news as $article) { + $results[] = [ + 'title' => $article->title, + 'summary' => '', + 'link' => '{/base}/news/article?id=' . $article->id, + 'account' => '', + 'createdAt' => $article->createdAt, + 'image' => '', + 'tags' => $article->tags, + 'type' => 'list_links', + 'module' => 'News', + ]; + } + + $response->header->set('Content-Type', MimeType::M_JSON . '; charset=utf-8', true); + $response->add($request->uri->__toString(), $results); + } +} diff --git a/Models/Elastic/NewsArticle.json b/Models/Elastic/NewsArticle.json new file mode 100644 index 0000000..3aa7e63 --- /dev/null +++ b/Models/Elastic/NewsArticle.json @@ -0,0 +1,7 @@ +{ + "id": "{id}", + "title": "{title}", + "content": "{content}", + "language": "{language}", + "tags": ["{tags}"] +} \ No newline at end of file diff --git a/info.json b/info.json index 70a0836..f8b6b9d 100755 --- a/info.json +++ b/info.json @@ -27,7 +27,8 @@ "Navigation": "*", "Comments": "*", "Dashboard": "*", - "Media": "*" + "Media": "*", + "Search": "*" }, "load": [ {