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(); ?> + +
+
+
+
getHtml('Navigation'); ?>
+
+ + + + + $nav) : ++$count; + $url = UriFactory::build('{/prefix}admin/module/settings?id=Navigation&nav=' . $nav->id); ?> + + +
+ +
+
+
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();