dbPool->get()->con->query('select 1 from `nav`'); } catch (\Exception $_) { return []; // @codeCoverageIgnore } $navFile = \file_get_contents($data['path'] ?? ''); if ($navFile === false) { throw new PathException($data['path'] ?? ''); // @codeCoverageIgnore } $navData = \json_decode($navFile, true); if (!\is_array($navData)) { throw new \Exception(); // @codeCoverageIgnore } if (($data['lang'] ?? null) !== null) { self::installNavigationLanguage($data['lang'], $app->appName); } foreach ($navData as $link) { self::installLink($app, $link, $data['app'] ?? null); } return []; } /** * Install language file for navigation * * @param string $path Path of the navigation language files * @param string $appName Application name of the navigation elements * * @return void * * @since 1.0.0 */ private static function installNavigationLanguage(string $path, string $appName) : void { $files = \scandir($path); if ($files === false) { return; } foreach ($files as $file) { if (\stripos($file, 'Navigation') !== 0) { continue; } $localization = include \rtrim($path, '/') . '/' . $file; if (!\is_file($langPath = __DIR__ . '/../../../Web/' . $appName . '/lang/' . $file)) { \copy(__DIR__ . '/Install/NavigationSkeleton.php', $langPath); } $base = include $langPath; $new = \array_merge($base, $localization); \file_put_contents($langPath, 'moduleManager->get('Navigation'); $response = new HttpResponse(); $request = new HttpRequest(); $request->header->account = 1; $request->setData('id', (int) ($data['id'] ?? 0)); $request->setData('pid', $data['pid'] ?? ''); $request->setData('name', (string) ($data['name'] ?? '')); $request->setData('type', (int) ($data['type'] ?? NavigationType::SIDE)); $request->setData('subtype', (int) ($data['subtype'] ?? LinkType::LINK)); $request->setData('icon', $data['icon'] ?? null); $request->setData('uri', $data['uri'] ?? null); $request->setData('target', (string) ($data['target'] ?? 'self')); $request->setData('action', $data['action'] ?? null); $request->setData('app', (int) ($data['app'] ?? ($appId ?? 2))); $request->setData('from', empty($from = (string) ($data['from'] ?? '')) ? '0' : $from); $request->setData('order', (int) ($data['order'] ?? 1)); $request->setData('parent', (int) ($data['parent'] ?? 0)); $request->setData('permission', $data['permission']['permission'] ?? null); $request->setData('category', $data['permission']['category'] ?? null); $request->setData('element', $data['permission']['element'] ?? null); $request->setData('status', $data['status'] ?? LinkStatus::ACTIVE); $module->apiNavElementCreate($request, $response); foreach ($data['children'] as $link) { self::installLink($app, $link, $appId); } } }