Went through todos

This commit is contained in:
Dennis Eichhorn 2024-05-02 22:54:38 +00:00
parent d8f98ea8c4
commit bd5c9ded95
4 changed files with 72 additions and 8 deletions

View File

@ -15,6 +15,9 @@ declare(strict_types=1);
namespace Modules\Navigation\Admin\Install; namespace Modules\Navigation\Admin\Install;
use phpOMS\Application\ApplicationAbstract; use phpOMS\Application\ApplicationAbstract;
use phpOMS\System\File\PathException;
use phpOMS\System\File\PermissionException;
use phpOMS\Utils\Parser\Php\ArrayParser;
/** /**
* Navigation class. * Navigation class.
@ -23,9 +26,20 @@ use phpOMS\Application\ApplicationAbstract;
* @license OMS License 2.0 * @license OMS License 2.0
* @link https://jingga.app * @link https://jingga.app
* @since 1.0.0 * @since 1.0.0
*
* @performance Create a navigation language file (same as routing files) during the installation process per language
* https://github.com/Karaka-Management/oms-Navigation/issues/8
*/ */
class Navigation class Navigation
{ {
/**
* Nav languages.
*
* @var array<string, array>
* @since 1.0.0
*/
private static array $nav = [];
/** /**
* Install navigation providing * Install navigation providing
* *
@ -40,4 +54,48 @@ class Navigation
{ {
\Modules\Navigation\Admin\Installer::installExternal($app, ['path' => __DIR__ . '/Navigation.install.json']); \Modules\Navigation\Admin\Installer::installExternal($app, ['path' => __DIR__ . '/Navigation.install.json']);
} }
/**
* Install language files.
*
* @param string $destPath Destination language path
* @param string $srcPath Source language path
*
* @return void
*
* @throws PathException
* @throws PermissionException
*
* @since 1.0.0
*/
protected static function installLanguageFiles(string $destPath, string $srcPath) : void
{
if (!\is_file($srcPath)) {
return;
}
if (!\is_file($destPath)) {
\file_put_contents($destPath, '<?php return [];');
}
if (!\is_file($destPath)) {
throw new PathException($destPath); // @codeCoverageIgnore
}
if (!\is_writable($destPath)) {
throw new PermissionException($destPath); // @codeCoverageIgnore
}
if (!isset(self::$nav[$destPath])) {
/** @noinspection PhpIncludeInspection */
self::$nav[$destPath] = include $destPath;
}
/** @noinspection PhpIncludeInspection */
$language = include $srcPath;
self::$nav[$destPath] = \array_merge_recursive(self::$nav[$destPath], $language);
\file_put_contents($destPath, '<?php return ' . ArrayParser::serializeArray(self::$nav[$destPath]) . ';', \LOCK_EX);
}
} }

View File

@ -17,7 +17,7 @@ use phpOMS\Account\PermissionType;
use phpOMS\Router\RouteVerb; use phpOMS\Router\RouteVerb;
return [ return [
'^:goto (\?.*$|$)' => [ '^:goto (.+)$' => [
[ [
'dest' => '\Modules\Navigation\Controller\SearchController:searchGoto', 'dest' => '\Modules\Navigation\Controller\SearchController:searchGoto',
'verb' => RouteVerb::ANY, 'verb' => RouteVerb::ANY,

View File

@ -40,13 +40,17 @@ final class SearchController extends Controller
* @param ResponseAbstract $response Response * @param ResponseAbstract $response Response
* @param array $data Generic data * @param array $data Generic data
* *
* @return void * @return array
* *
* @api * @api
* *
* @performance Improve goto command to match
* Use some alternative match parameter (maybe data-name)
* https://github.com/Karaka-Management/oms-Navigation/issues/9
*
* @since 1.0.0 * @since 1.0.0
*/ */
public function searchGoto(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void public function searchGoto(RequestAbstract $request, ResponseAbstract $response, array $data = []) : array
{ {
$this->loadLanguage($request, $response, $request->getDataString('app') ?? $this->app->appName); $this->loadLanguage($request, $response, $request->getDataString('app') ?? $this->app->appName);
@ -83,16 +87,17 @@ final class SearchController extends Controller
} }
} }
$response->header->set('Content-Type', MimeType::M_JSON . '; charset=utf-8', true);
if ($found === null || $found->uri === null) { if ($found === null || $found->uri === null) {
$this->fillJsonResponse($request, $response, NotificationLevel::WARNING, 'Command', 'Unknown command "' . $search . '"', $search); $this->fillJsonResponse($request, $response, NotificationLevel::WARNING, 'Command', 'Unknown command "' . $search . '"', $search);
$response->header->status = RequestStatusCode::R_400; $response->header->status = RequestStatusCode::R_400;
return; return [];
} }
$response->set($request->uri->__toString(), new Redirect(UriFactory::build($found->uri))); $response->header->status = RequestStatusCode::R_303;
$response->header->set('Location', UriFactory::build('/' . $found->uri));
return [];
} }
/** /**

View File

@ -20,7 +20,8 @@
"Admin": "1.0.0" "Admin": "1.0.0"
}, },
"providing": { "providing": {
"Navigation": "*" "Navigation": "*",
"Search": "*"
}, },
"load": [ "load": [
{ {