mirror of
https://github.com/Karaka-Management/oms-News.git
synced 2026-01-11 08:08:42 +00:00
update
This commit is contained in:
parent
5788b4a91f
commit
f82a18233b
43
Admin/Install/Search.php
Normal file
43
Admin/Install/Search.php
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
<?php
|
||||
/**
|
||||
* Jingga
|
||||
*
|
||||
* PHP Version 8.1
|
||||
*
|
||||
* @package Modules\News\Admin\Install
|
||||
* @copyright Dennis Eichhorn
|
||||
* @license OMS License 2.0
|
||||
* @version 1.0.0
|
||||
* @link https://jingga.app
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Modules\News\Admin\Install;
|
||||
|
||||
use phpOMS\Application\ApplicationAbstract;
|
||||
|
||||
/**
|
||||
* Search class.
|
||||
*
|
||||
* @package Modules\News\Admin\Install
|
||||
* @license OMS License 2.0
|
||||
* @link https://jingga.app
|
||||
* @since 1.0.0
|
||||
*/
|
||||
final class Search
|
||||
{
|
||||
/**
|
||||
* Install navigation providing
|
||||
*
|
||||
* @param ApplicationAbstract $app Application
|
||||
* @param string $path Module path
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public static function install(ApplicationAbstract $app, string $path) : void
|
||||
{
|
||||
\Modules\Search\Admin\Installer::installExternal($app, ['path' => __DIR__ . '/SearchCommands.php']);
|
||||
}
|
||||
}
|
||||
32
Admin/Install/SearchCommands.php
Normal file
32
Admin/Install/SearchCommands.php
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
<?php
|
||||
/**
|
||||
* Jingga
|
||||
*
|
||||
* PHP Version 8.1
|
||||
*
|
||||
* @package Modules\News
|
||||
* @copyright Dennis Eichhorn
|
||||
* @license OMS License 2.0
|
||||
* @version 1.0.0
|
||||
* @link https://jingga.app
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
use Modules\News\Controller\SearchController;
|
||||
use Modules\News\Models\PermissionCategory;
|
||||
use phpOMS\Account\PermissionType;
|
||||
use phpOMS\Router\RouteVerb;
|
||||
|
||||
return [
|
||||
'^(?!:).+.*?' => [
|
||||
[
|
||||
'dest' => '\Modules\News\Controller\SearchController:searchGeneral',
|
||||
'verb' => RouteVerb::ANY,
|
||||
'permission' => [
|
||||
'module' => SearchController::NAME,
|
||||
'type' => PermissionType::READ,
|
||||
'state' => PermissionCategory::NEWS,
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
|
|
@ -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()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
78
Controller/SearchController.php
Normal file
78
Controller/SearchController.php
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
<?php
|
||||
/**
|
||||
* Jingga
|
||||
*
|
||||
* PHP Version 8.1
|
||||
*
|
||||
* @package Modules\News
|
||||
* @copyright Dennis Eichhorn
|
||||
* @license OMS License 2.0
|
||||
* @version 1.0.0
|
||||
* @link https://jingga.app
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Modules\News\Controller;
|
||||
|
||||
use Modules\News\Models\NewsArticleMapper;
|
||||
use phpOMS\DataStorage\Database\Query\OrderType;
|
||||
use phpOMS\Message\RequestAbstract;
|
||||
use phpOMS\Message\ResponseAbstract;
|
||||
use phpOMS\System\MimeType;
|
||||
|
||||
/**
|
||||
* Search class.
|
||||
*
|
||||
* @package Modules\News
|
||||
* @license OMS License 2.0
|
||||
* @link https://jingga.app
|
||||
* @since 1.0.0
|
||||
*/
|
||||
final class SearchController extends Controller
|
||||
{
|
||||
/**
|
||||
* Api method to search for tags
|
||||
*
|
||||
* @param RequestAbstract $request Request
|
||||
* @param ResponseAbstract $response Response
|
||||
* @param array $data Generic data
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @api
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public function searchGeneral(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void
|
||||
{
|
||||
/** @var \Modules\News\Models\NewsArticle[] $news */
|
||||
$news = NewsArticleMapper::getAll()
|
||||
->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);
|
||||
}
|
||||
}
|
||||
7
Models/Elastic/NewsArticle.json
Normal file
7
Models/Elastic/NewsArticle.json
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"id": "{id}",
|
||||
"title": "{title}",
|
||||
"content": "{content}",
|
||||
"language": "{language}",
|
||||
"tags": ["{tags}"]
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user