mirror of
https://github.com/Karaka-Management/oms-Knowledgebase.git
synced 2026-01-11 17:38:40 +00:00
update
This commit is contained in:
parent
086cb00f0b
commit
9ba0c33804
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\Knowledgebase\Admin\Install
|
||||||
|
* @copyright Dennis Eichhorn
|
||||||
|
* @license OMS License 2.0
|
||||||
|
* @version 1.0.0
|
||||||
|
* @link https://jingga.app
|
||||||
|
*/
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Modules\Knowledgebase\Admin\Install;
|
||||||
|
|
||||||
|
use phpOMS\Application\ApplicationAbstract;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Search class.
|
||||||
|
*
|
||||||
|
* @package Modules\Knowledgebase\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\Knowledgebase
|
||||||
|
* @copyright Dennis Eichhorn
|
||||||
|
* @license OMS License 2.0
|
||||||
|
* @version 1.0.0
|
||||||
|
* @link https://jingga.app
|
||||||
|
*/
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
use Modules\Knowledgebase\Controller\SearchController;
|
||||||
|
use Modules\Knowledgebase\Models\PermissionCategory;
|
||||||
|
use phpOMS\Account\PermissionType;
|
||||||
|
use phpOMS\Router\RouteVerb;
|
||||||
|
|
||||||
|
return [
|
||||||
|
'^(?!:).+.*?' => [
|
||||||
|
[
|
||||||
|
'dest' => '\Modules\Knowledgebase\Controller\SearchController:searchGeneral',
|
||||||
|
'verb' => RouteVerb::ANY,
|
||||||
|
'permission' => [
|
||||||
|
'module' => SearchController::NAME,
|
||||||
|
'type' => PermissionType::READ,
|
||||||
|
'state' => PermissionCategory::WIKI,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
@ -106,8 +106,10 @@ final class ApiController extends Controller
|
||||||
/** @var \Modules\Admin\Models\Account $account */
|
/** @var \Modules\Admin\Models\Account $account */
|
||||||
$account = AccountMapper::get()->where('id', $request->header->account)->execute();
|
$account = AccountMapper::get()->where('id', $request->header->account)->execute();
|
||||||
|
|
||||||
|
$collection = null;
|
||||||
|
|
||||||
if (!empty($uploadedFiles = $request->files)) {
|
if (!empty($uploadedFiles = $request->files)) {
|
||||||
$uploaded = $this->app->moduleManager->get('Media')->uploadFiles(
|
$uploaded = $this->app->moduleManager->get('Media', 'Api')->uploadFiles(
|
||||||
names: [],
|
names: [],
|
||||||
fileNames: [],
|
fileNames: [],
|
||||||
files: $uploadedFiles,
|
files: $uploadedFiles,
|
||||||
|
|
@ -116,7 +118,6 @@ final class ApiController extends Controller
|
||||||
virtualPath: $path,
|
virtualPath: $path,
|
||||||
);
|
);
|
||||||
|
|
||||||
$collection = null;
|
|
||||||
foreach ($uploaded as $media) {
|
foreach ($uploaded as $media) {
|
||||||
$this->createModelRelation(
|
$this->createModelRelation(
|
||||||
$request->header->account,
|
$request->header->account,
|
||||||
|
|
@ -140,13 +141,11 @@ final class ApiController extends Controller
|
||||||
|
|
||||||
$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) {
|
$collection ??= $this->app->moduleManager->get('Media')->createRecursiveMediaCollection(
|
||||||
$collection = $this->app->moduleManager->get('Media')->createRecursiveMediaCollection(
|
|
||||||
$accountPath,
|
$accountPath,
|
||||||
$request->header->account,
|
$request->header->account,
|
||||||
__DIR__ . '/../../../Modules/Media/Files/Accounts/' . $account->id . '/Knowledgebase/' . ($doc->category?->id ?? '0') . '/' . $doc->id
|
__DIR__ . '/../../../Modules/Media/Files/Accounts/' . $account->id . '/Knowledgebase/' . ($doc->category?->id ?? '0') . '/' . $doc->id
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
$this->createModelRelation(
|
$this->createModelRelation(
|
||||||
$request->header->account,
|
$request->header->account,
|
||||||
|
|
@ -160,9 +159,7 @@ final class ApiController extends Controller
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($mediaFiles = $request->getDataJson('media'))) {
|
$mediaFiles = $request->getDataJson('media');
|
||||||
$collection = null;
|
|
||||||
|
|
||||||
foreach ($mediaFiles as $file) {
|
foreach ($mediaFiles as $file) {
|
||||||
/** @var \Modules\Media\Models\Media $media */
|
/** @var \Modules\Media\Models\Media $media */
|
||||||
$media = MediaMapper::get()->where('id', (int) $file)->limit(1)->execute();
|
$media = MediaMapper::get()->where('id', (int) $file)->limit(1)->execute();
|
||||||
|
|
@ -184,13 +181,11 @@ final class ApiController extends Controller
|
||||||
|
|
||||||
$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) {
|
$collection ??= $this->app->moduleManager->get('Media')->createRecursiveMediaCollection(
|
||||||
$collection = $this->app->moduleManager->get('Media')->createRecursiveMediaCollection(
|
|
||||||
$path,
|
$path,
|
||||||
$request->header->account,
|
$request->header->account,
|
||||||
__DIR__ . '/../../../Modules/Media/Files' . $path
|
__DIR__ . '/../../../Modules/Media/Files' . $path
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
$this->createModelRelation(
|
$this->createModelRelation(
|
||||||
$request->header->account,
|
$request->header->account,
|
||||||
|
|
@ -203,7 +198,6 @@ final class ApiController extends Controller
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create media directory path
|
* Create media directory path
|
||||||
|
|
@ -864,8 +858,6 @@ final class ApiController extends Controller
|
||||||
*
|
*
|
||||||
* @return array<string, bool>
|
* @return array<string, bool>
|
||||||
*
|
*
|
||||||
* @todo Implement API validation function
|
|
||||||
*
|
|
||||||
* @since 1.0.0
|
* @since 1.0.0
|
||||||
*/
|
*/
|
||||||
private function validateCategoryL11nDelete(RequestAbstract $request) : array
|
private function validateCategoryL11nDelete(RequestAbstract $request) : array
|
||||||
|
|
|
||||||
78
Controller/SearchController.php
Normal file
78
Controller/SearchController.php
Normal file
|
|
@ -0,0 +1,78 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Jingga
|
||||||
|
*
|
||||||
|
* PHP Version 8.1
|
||||||
|
*
|
||||||
|
* @package Modules\Knowledgebase
|
||||||
|
* @copyright Dennis Eichhorn
|
||||||
|
* @license OMS License 2.0
|
||||||
|
* @version 1.0.0
|
||||||
|
* @link https://jingga.app
|
||||||
|
*/
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Modules\Knowledgebase\Controller;
|
||||||
|
|
||||||
|
use Modules\Knowledgebase\Models\WikiDocMapper;
|
||||||
|
use phpOMS\DataStorage\Database\Query\OrderType;
|
||||||
|
use phpOMS\Message\RequestAbstract;
|
||||||
|
use phpOMS\Message\ResponseAbstract;
|
||||||
|
use phpOMS\System\MimeType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Search class.
|
||||||
|
*
|
||||||
|
* @package Modules\Knowledgebase
|
||||||
|
* @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\Knowledgebase\Models\WikiDoc[] $docs */
|
||||||
|
$docs = WikiDocMapper::getAll()
|
||||||
|
->with('tags')
|
||||||
|
->with('tags/title')
|
||||||
|
->where('name', '%' . ($request->getDataString('search') ?? '') . '%', 'LIKE')
|
||||||
|
->where('docRaw', '%' . ($request->getDataString('search') ?? '') . '%', 'LIKE', 'OR')
|
||||||
|
->where('language', $request->header->l11n->language)
|
||||||
|
->where('tags/title/language', $response->header->l11n->language)
|
||||||
|
->sort('createdAt', OrderType::DESC)
|
||||||
|
->limit(8)
|
||||||
|
->execute();
|
||||||
|
|
||||||
|
$results = [];
|
||||||
|
foreach ($docs as $doc) {
|
||||||
|
$results[] = [
|
||||||
|
'title' => $doc->name,
|
||||||
|
'summary' => '',
|
||||||
|
'link' => '{/base}/wiki/doc/view?id=' . $doc->id,
|
||||||
|
'account' => '',
|
||||||
|
'createdAt' => $doc->createdAt,
|
||||||
|
'image' => '',
|
||||||
|
'tags' => $doc->tags,
|
||||||
|
'type' => 'list_links',
|
||||||
|
'module' => 'Knowledgebase',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
$response->header->set('Content-Type', MimeType::M_JSON . '; charset=utf-8', true);
|
||||||
|
$response->add($request->uri->__toString(), $results);
|
||||||
|
}
|
||||||
|
}
|
||||||
7
Models/Elastic/WikiDoc.json
Normal file
7
Models/Elastic/WikiDoc.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