diff --git a/Admin/Install/db.json b/Admin/Install/db.json
index 62b31fa..8166b4f 100755
--- a/Admin/Install/db.json
+++ b/Admin/Install/db.json
@@ -8,11 +8,23 @@
"null": false,
"primary": true
},
+ "nav_app": {
+ "name": "nav_app",
+ "type": "INT",
+ "null": false,
+ "foreignTable": "app",
+ "foreignKey": "app_id"
+ },
"nav_pid": {
"name": "nav_pid",
"type": "VARCHAR(40)",
"null": false
},
+ "nav_pid_raw": {
+ "name": "nav_pid_raw",
+ "type": "VARCHAR(255)",
+ "null": false
+ },
"nav_name": {
"name": "nav_name",
"type": "VARCHAR(40)",
@@ -23,6 +35,11 @@
"type": "TINYINT",
"null": false
},
+ "nav_status": {
+ "name": "nav_status",
+ "type": "TINYINT",
+ "null": false
+ },
"nav_subtype": {
"name": "nav_subtype",
"type": "TINYINT",
diff --git a/Admin/Installer.php b/Admin/Installer.php
index fe5b4c7..490f26b 100755
--- a/Admin/Installer.php
+++ b/Admin/Installer.php
@@ -63,7 +63,7 @@ final class Installer extends InstallerAbstract
}
foreach ($navData as $link) {
- self::installLink($app->dbPool, $link);
+ self::installLink($app->dbPool, $link, $data['app'] ?? null);
}
return [];
@@ -74,17 +74,19 @@ final class Installer extends InstallerAbstract
*
* @param DatabasePool $dbPool Database instance
* @param array $data Link info
+ * @param int $app App
*
* @return void
*
* @since 1.0.0
*/
- private static function installLink($dbPool, $data) : void
+ private static function installLink(DatabasePool $dbPool, array $data, int $app = null) : void
{
$navElement = new NavElement();
$navElement->id = (int) ($data['id'] ?? 0);
$navElement->pid = \sha1(\str_replace('/', '', $data['pid'] ?? ''));
+ $navElement->pidRaw = $data['pid'] ?? '';
$navElement->name = (string) ($data['name'] ?? '');
$navElement->type = (int) ($data['type'] ?? 1);
$navElement->subtype = (int) ($data['subtype'] ?? 2);
@@ -92,6 +94,7 @@ final class Installer extends InstallerAbstract
$navElement->uri = $data['uri'] ?? null;
$navElement->target = (string) ($data['target'] ?? 'self');
$navElement->action = $data['action'] ?? null;
+ $navElement->app = (int) ($data['app'] ?? ($app ?? 2));
$navElement->from = (string) ($data['from'] ?? '0');
$navElement->order = (int) ($data['order'] ?? 1);
$navElement->parent = (int) ($data['parent'] ?? 0);
diff --git a/Admin/Routes/Web/Backend.php b/Admin/Routes/Web/Backend.php
index f0b60b4..201096e 100755
--- a/Admin/Routes/Web/Backend.php
+++ b/Admin/Routes/Web/Backend.php
@@ -1,3 +1,32 @@
- [
+ [
+ 'dest' => '\Modules\Navigation\Controller\BackendController:viewModuleSettings',
+ 'verb' => RouteVerb::GET,
+ 'permission' => [
+ 'module' => BackendController::MODULE_NAME,
+ 'type' => PermissionType::READ,
+ 'state' => \Modules\Admin\Models\PermissionState::MODULE,
+ ],
+ ],
+ ],
+];
diff --git a/Admin/Settings/Theme/Backend/settings.tpl.php b/Admin/Settings/Theme/Backend/settings.tpl.php
new file mode 100644
index 0000000..f01e5c5
--- /dev/null
+++ b/Admin/Settings/Theme/Backend/settings.tpl.php
@@ -0,0 +1,157 @@
+getData('navigation') ?? [];
+
+$previous = empty($navs) ? '{/prefix}admin/nav/list' : '{/prefix}admin/nav/list?{?}&id=' . \reset($navs)->id . '&ptype=p';
+$next = empty($navs) ? '{/prefix}admin/nav/list' : '{/prefix}admin/nav/list?{?}&id=' . \end($navs)->id . '&ptype=n';
+
+echo $this->getData('nav')->render(); ?>
+
+
+
+
+
= $this->getHtml('Navigation'); ?>
+
+
+
+
+
diff --git a/Controller/BackendController.php b/Controller/BackendController.php
index 137a8f8..241e4ef 100755
--- a/Controller/BackendController.php
+++ b/Controller/BackendController.php
@@ -18,6 +18,11 @@ use Modules\Navigation\Models\Navigation;
use Modules\Navigation\Views\NavigationView;
use phpOMS\Message\RequestAbstract;
use phpOMS\Message\ResponseAbstract;
+use Model\SettingMapper;
+use Model\NullSetting;
+use Modules\Navigation\Models\NavElementMapper;
+use phpOMS\Views\View;
+use phpOMS\Contract\RenderableInterface;
/**
* Navigation class.
@@ -149,4 +154,39 @@ final class BackendController extends Controller
return $navView;
}
+
+ /**
+ * Method which generates the module profile view.
+ *
+ * @param RequestAbstract $request Request
+ * @param ResponseAbstract $response Response
+ * @param mixed $data Generic data
+ *
+ * @return RenderableInterface Response can be rendered
+ *
+ * @since 1.0.0
+ */
+ public function viewModuleSettings(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface
+ {
+ $view = new View($this->app->l11nManager, $request, $response);
+ $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1000105001, $request, $response));
+
+ $id = $request->getData('id') ?? '';
+
+ $settings = SettingMapper::getFor($id, 'module');
+ if (!($settings instanceof NullSetting)) {
+ $view->setData('settings', !\is_array($settings) ? [$settings] : $settings);
+ }
+
+ $navigation = NavElementMapper::getAll();
+ $view->setData('navigation', $navigation);
+
+ if (\is_file(__DIR__ . '/../Admin/Settings/Theme/Backend/settings.tpl.php')) {
+ $view->setTemplate('/Modules/' . static::MODULE_NAME . '/Admin/Settings/Theme/Backend/settings');
+ } else {
+ $view->setTemplate('/Modules/Admin/Theme/Backend/modules-settings');
+ }
+
+ return $view;
+ }
}
diff --git a/Models/LinkStatus.php b/Models/LinkStatus.php
new file mode 100644
index 0000000..c6e6340
--- /dev/null
+++ b/Models/LinkStatus.php
@@ -0,0 +1,36 @@
+ ['name' => 'nav_id', 'type' => 'int', 'internal' => 'id'],
+ 'nav_app' => ['name' => 'nav_app', 'type' => 'int', 'internal' => 'app'],
'nav_pid' => ['name' => 'nav_pid', 'type' => 'string', 'internal' => 'pid'],
+ 'nav_pid_raw' => ['name' => 'nav_pid_raw', 'type' => 'string', 'internal' => 'pidRaw'],
'nav_name' => ['name' => 'nav_name', 'type' => 'string', 'internal' => 'name'],
'nav_type' => ['name' => 'nav_type', 'type' => 'int', 'internal' => 'type'],
'nav_subtype' => ['name' => 'nav_subtype', 'type' => 'int', 'internal' => 'subtype'],
@@ -48,6 +50,7 @@ final class NavElementMapper extends DataMapperAbstract
'nav_permission_permission' => ['name' => 'nav_permission_permission', 'type' => 'int', 'internal' => 'permissionPerm'],
'nav_permission_type' => ['name' => 'nav_permission_type', 'type' => 'int', 'internal' => 'permissionType'],
'nav_permission_element' => ['name' => 'nav_permission_element', 'type' => 'int', 'internal' => 'permissionElement'],
+ 'nav_status' => ['name' => 'nav_status', 'type' => 'int', 'internal' => 'status'],
];
/**
diff --git a/Models/Navigation.php b/Models/Navigation.php
index 11d2d10..a35ba17 100755
--- a/Models/Navigation.php
+++ b/Models/Navigation.php
@@ -93,6 +93,7 @@ class Navigation
$sth = $query->select('*')
->from('nav')
->whereIn('nav.nav_pid', $hashes)
+ ->andWhere('nav.nav_status', '=', LinkStatus::ACTIVE)
->orderBy('nav.nav_order', 'ASC')
->execute();