diff --git a/.gitignore b/.gitignore
index 67ffd12..0c5acab 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,4 +5,28 @@ obj/
bin/Debug
x64/Debug
app/server/Libraries
-.vscode
\ No newline at end of file
+.vscode
+Logs
+Vagrantfile
+cache
+.sass-cache
+.idea
+vendor
+bower_components
+node_modules
+Libraries
+puphpet
+.vagrant
+private.php
+private.sh
+.vscode
+cookie.txt
+config.php
+coverage.xml
+.htaccess
+.directory
+*.log
+*.jar
+*.cache
+*.phar
+*.xml
diff --git a/app/local/App.xaml b/app/local/App.xaml
old mode 100644
new mode 100755
diff --git a/app/local/App.xaml.cs b/app/local/App.xaml.cs
old mode 100644
new mode 100755
diff --git a/app/local/AssemblyInfo.cs b/app/local/AssemblyInfo.cs
old mode 100644
new mode 100755
diff --git a/app/local/MainWindow.xaml b/app/local/MainWindow.xaml
old mode 100644
new mode 100755
diff --git a/app/local/MainWindow.xaml.cs b/app/local/MainWindow.xaml.cs
old mode 100644
new mode 100755
diff --git a/app/local/OnlineResourceWatcherLocalApp.csproj b/app/local/OnlineResourceWatcherLocalApp.csproj
old mode 100644
new mode 100755
diff --git a/app/local/OnlineResourceWatcherLocalApp.csproj.user b/app/local/OnlineResourceWatcherLocalApp.csproj.user
old mode 100644
new mode 100755
diff --git a/app/local/OnlineResourceWatcherLocalApp.sln b/app/local/OnlineResourceWatcherLocalApp.sln
old mode 100644
new mode 100755
diff --git a/app/server/CMakeLists.txt b/app/server/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/app/server/Controller/ApiController.h b/app/server/Controller/ApiController.h
old mode 100644
new mode 100755
diff --git a/app/server/Controller/InstallController.h b/app/server/Controller/InstallController.h
old mode 100644
new mode 100755
diff --git a/app/server/Install/config.json b/app/server/Install/config.json
old mode 100644
new mode 100755
diff --git a/app/server/Install/db.sqlite b/app/server/Install/db.sqlite
old mode 100644
new mode 100755
diff --git a/app/server/Models/Account.h b/app/server/Models/Account.h
old mode 100644
new mode 100755
diff --git a/app/server/Models/AccountStatus.h b/app/server/Models/AccountStatus.h
old mode 100644
new mode 100755
diff --git a/app/server/Models/Db.h b/app/server/Models/Db.h
old mode 100644
new mode 100755
diff --git a/app/server/Models/File.h b/app/server/Models/File.h
old mode 100644
new mode 100755
diff --git a/app/server/Models/InstallType.h b/app/server/Models/InstallType.h
old mode 100644
new mode 100755
diff --git a/app/server/Models/Organization.h b/app/server/Models/Organization.h
old mode 100644
new mode 100755
diff --git a/app/server/Models/ReosurceStatus.h b/app/server/Models/ReosurceStatus.h
old mode 100644
new mode 100755
diff --git a/app/server/Models/Resource.h b/app/server/Models/Resource.h
old mode 100644
new mode 100755
diff --git a/app/server/Models/ResourceInfo.h b/app/server/Models/ResourceInfo.h
old mode 100644
new mode 100755
diff --git a/app/server/OnlineResourceWatcherServerApp.aps b/app/server/OnlineResourceWatcherServerApp.aps
old mode 100644
new mode 100755
diff --git a/app/server/OnlineResourceWatcherServerApp.rc b/app/server/OnlineResourceWatcherServerApp.rc
old mode 100644
new mode 100755
diff --git a/app/server/OnlineResourceWatcherServerApp.sln b/app/server/OnlineResourceWatcherServerApp.sln
old mode 100644
new mode 100755
diff --git a/app/server/OnlineResourceWatcherServerApp.vcxproj b/app/server/OnlineResourceWatcherServerApp.vcxproj
old mode 100644
new mode 100755
diff --git a/app/server/OnlineResourceWatcherServerApp.vcxproj.filters b/app/server/OnlineResourceWatcherServerApp.vcxproj.filters
old mode 100644
new mode 100755
diff --git a/app/server/OnlineResourceWatcherServerApp.vcxproj.user b/app/server/OnlineResourceWatcherServerApp.vcxproj.user
old mode 100644
new mode 100755
diff --git a/app/server/Routes.h b/app/server/Routes.h
old mode 100644
new mode 100755
diff --git a/app/server/build/install.sh b/app/server/build/install.sh
old mode 100644
new mode 100755
diff --git a/app/server/cOMS b/app/server/cOMS
index 324801f..9a2c89e 160000
--- a/app/server/cOMS
+++ b/app/server/cOMS
@@ -1 +1 @@
-Subproject commit 324801f79a04c39558c4ca0d5dcb88236a851d26
+Subproject commit 9a2c89e12b4a3fce3382937f60990ded5ac36c37
diff --git a/app/server/config.json b/app/server/config.json
old mode 100644
new mode 100755
diff --git a/app/web/content/about.de.md b/app/server/data/README.md
similarity index 100%
rename from app/web/content/about.de.md
rename to app/server/data/README.md
diff --git a/app/server/favicon.ico b/app/server/favicon.ico
old mode 100644
new mode 100755
diff --git a/app/server/main.cpp b/app/server/main.cpp
old mode 100644
new mode 100755
diff --git a/app/server/resource.h b/app/server/resource.h
old mode 100644
new mode 100755
diff --git a/app/web/.htaccess b/app/web/.htaccess
old mode 100644
new mode 100755
diff --git a/app/web/Applications/Api/Application.php b/app/web/Applications/Api/Application.php
old mode 100644
new mode 100755
index 633eb51..7d49148
--- a/app/web/Applications/Api/Application.php
+++ b/app/web/Applications/Api/Application.php
@@ -1,23 +1,28 @@
app->appName));
}
- public function run(HttpRequest $request, HttpResponse $response): void
+ public function run(HttpRequest $request, HttpResponse $response) : void
{
- $response->header->set('Content-Type', 'text/plain; charset=utf-8');
- $pageView = new View($this->app->l11nManager, $request, $response);
- $this->app->l11nManager = new L11nManager($this->app->appName);
- $this->app->dbPool = new DatabasePool();
- $this->app->router = new WebRouter();
- $this->app->router->importFromFile(__DIR__ . '/Routes.php');
-
- $this->app->sessionManager = new HttpSession(0);
- $this->app->cookieJar = new CookieJar();
- $this->app->moduleManager = new ModuleManager($this->app, __DIR__ . '/../../Modules/');
- $this->app->dispatcher = new Dispatcher($this->app);
-
- $this->app->dbPool->create('core', $this->config['db']['core']['masters']['admin']);
- $this->app->dbPool->create('insert', $this->config['db']['core']['masters']['insert']);
- $this->app->dbPool->create('select', $this->config['db']['core']['masters']['select']);
- $this->app->dbPool->create('update', $this->config['db']['core']['masters']['update']);
- $this->app->dbPool->create('delete', $this->config['db']['core']['masters']['delete']);
- $this->app->dbPool->create('schema', $this->config['db']['core']['masters']['schema']);
-
- /* Checking csrf token, if a csrf token is required at all has to be decided in the route or controller */
- if ($request->getData('CSRF') !== null
- && !\hash_equals($this->app->sessionManager->get('CSRF'), $request->getData('CSRF'))
- ) {
- $response->header->status = RequestStatusCode::R_403;
-
- return;
- }
-
- /** @var \phpOMS\DataStorage\Database\Connection\ConnectionAbstract $con */
- $con = $this->app->dbPool->get();
- DataMapperFactory::db($con);
-
- $this->app->cachePool = new CachePool();
- $this->app->appSettings = new CoreSettings();
- $this->app->eventManager = new EventManager($this->app->dispatcher);
- $this->app->eventManager->importFromFile(__DIR__ . '/Hooks.php');
-
- $this->app->accountManager = new AccountManager($this->app->sessionManager);
- $this->app->l11nServer = LocalizationMapper::get()->where('id', 1)->execute();
-
- $this->app->orgId = $this->getApplicationOrganization($request, $this->config['app']);
- $pageView->setData('orgId', $this->app->orgId);
-
- $aid = Auth::authenticate($this->app->sessionManager);
- $request->header->account = $aid;
- $response->header->account = $aid;
-
- $account = $this->loadAccount($request);
-
- if (!($account instanceof NullAccount)) {
- $response->header->l11n = $account->l11n;
- } elseif ($this->app->sessionManager->get('language') !== null) {
- $response->header->l11n
- ->loadFromLanguage(
- $this->app->sessionManager->get('language'),
- $this->app->sessionManager->get('country') ?? '*'
- );
- } elseif ($this->app->cookieJar->get('language') !== null) {
- $response->header->l11n
- ->loadFromLanguage(
- $this->app->cookieJar->get('language'),
- $this->app->cookieJar->get('country') ?? '*'
- );
- }
-
- UriFactory::setQuery('/lang', $response->getLanguage());
- $response->header->set('content-language', $response->getLanguage(), true);
-
- // Cache general settings
- $this->app->appSettings->get(null, [
- SettingsEnum::LOGGING_STATUS, SettingsEnum::CLI_ACTIVE,
- ]);
-
- $appStatus = (int) ($this->app->appSettings->get(null, SettingsEnum::LOGIN_STATUS)->content ?? 0);
- if ($appStatus === ApplicationStatus::READ_ONLY || $appStatus === ApplicationStatus::DISABLED) {
- if (!$account->hasPermission(PermissionType::CREATE | PermissionType::MODIFY, module: 'Admin', type: PermissionCategory::APP)) {
- if ($request->getRouteVerb() !== RouteVerb::GET) {
- // Application is in read only mode or completely disabled
- // If read only mode is active only GET requests are allowed
- // A user who is part of the admin group is excluded from this rule
- $response->header->status = RequestStatusCode::R_405;
-
- return;
- }
-
- $this->app->dbPool->remove('admin');
- $this->app->dbPool->remove('insert');
- $this->app->dbPool->remove('update');
- $this->app->dbPool->remove('delete');
- $this->app->dbPool->remove('schema');
- }
- }
-
- if (!empty($uris = $request->uri->getQuery('r'))) {
- $this->handleBatchRequest($uris, $request, $response);
-
- return;
- }
-
- $this->app->moduleManager->initRequestModules($request);
-
- // add tpl loading
- $this->app->router->add(
- '/api/tpl/.*',
- function () use ($account, $request, $response): void {
- $appName = \ucfirst($request->getData('app') ?? 'Backend');
- $app = new class() extends ApplicationAbstract
- {
- };
-
- $app->appName = $appName;
- $app->dbPool = $this->app->dbPool;
- $app->orgId = $this->app->orgId;
- $app->accountManager = $this->app->accountManager;
- $app->appSettings = $this->app->appSettings;
- $app->l11nManager = new L11nManager($app->appName);
- $app->moduleManager = new ModuleManager($app, __DIR__ . '/../../Modules/');
- $app->dispatcher = new Dispatcher($app);
- $app->eventManager = new EventManager($app->dispatcher);
- $app->router = new WebRouter();
-
- $app->eventManager->importFromFile(__DIR__ . '/../' . $appName . '/Hooks.php');
- $app->router->importFromFile(__DIR__ . '/../' . $appName . '/Routes.php');
-
- $route = \str_replace('/api/tpl', '/' . $appName, $request->uri->getRoute());
-
- $view = new View();
- $view->setTemplate('/Web/Api/index');
-
- $response->set('Content', $view);
- $response->get('Content')->setData('head', new Head());
-
- $app->l11nManager->loadLanguage(
- $response->getLanguage(),
- '0',
- include __DIR__ . '/../' . $appName . '/lang/' . $response->getLanguage() . '.lang.php'
- );
-
- $routed = $app->router->route(
- $route,
- $request->getData('CSRF'),
- $request->getRouteVerb(),
- $appName,
- $this->app->orgId,
- $account,
- $request->getData()
- );
-
- $response->get('Content')->setData('dispatch', $app->dispatcher->dispatch($routed, $request, $response));
- },
- RouteVerb::GET
- );
-
- $routed = $this->app->router->route(
- $request->uri->getRoute(),
- $request->getData('CSRF'),
- $request->getRouteVerb(),
- $this->app->appName,
- $this->app->orgId,
- $account,
- $request->getData()
- );
-
- $dispatched = $this->app->dispatcher->dispatch($routed, $request, $response);
-
- if (empty($dispatched)) {
- $response->header->set('Content-Type', MimeType::M_JSON . '; charset=utf-8', true);
- $response->header->status = RequestStatusCode::R_404;
- $response->set($request->uri->__toString(), [
- 'status' => \phpOMS\Message\NotificationLevel::ERROR,
- 'title' => '',
- 'message' => '',
- 'response' => [],
- ]);
- }
-
- $pageView->addData('dispatch', $dispatched);
- }
-
- private function loadAccount(HttpRequest $request): Account
- {
- $account = AccountMapper::getWithPermissions($request->header->account);
- $this->app->accountManager->add($account);
-
- return $account;
- }
-
- private function handleBatchRequest(string $uris, HttpRequest $request, HttpResponse $response): void
- {
- $request_r = clone $request;
- $uris = \json_decode($uris, true);
-
- foreach ($uris as $uri) {
- $modules = $this->app->moduleManager->getRoutedModules($request_r);
- $this->app->moduleManager->initModule($modules);
-
- $this->app->dispatcher->dispatch(
- $this->app->router->route(
- $request->uri->getRoute(),
- $request->getData('CSRF') ?? null
- ),
- $request,
- $response
- );
- }
- }
-
- private function getApplicationOrganization(HttpRequest $request, array $config): int
- {
- return (int) ($request->getData('u') ?? ($config['domains'][$request->uri->host]['org'] ?? $config['default']['org']));
- }
-
- private function loadLanguageFromPath(string $language, string $path): void
- {
- /* Load theme language */
- if (($absPath = \realpath($path)) === false) {
- throw new PathException($path);
- }
-
- /** @noinspection PhpIncludeInspection */
- $themeLanguage = include $absPath;
- $this->app->l11nManager->loadLanguage($language, '0', $themeLanguage);
}
}
diff --git a/app/web/Applications/Backend/Application.php b/app/web/Applications/Backend/Application.php
old mode 100644
new mode 100755
index e69de29..0bd546b
--- a/app/web/Applications/Backend/Application.php
+++ b/app/web/Applications/Backend/Application.php
@@ -0,0 +1,60 @@
+app = $app;
+ $this->app->appName = 'Backend';
+ $this->config = $config;
+ UriFactory::setQuery('/app', \strtolower($this->app->appName));
+ }
+
+ public function run(HttpRequest $request, HttpResponse $response) : void
+ {
+
+ }
+}
diff --git a/app/web/Applications/E500/Application.php b/app/web/Applications/E500/Application.php
old mode 100644
new mode 100755
index 6ec0fdb..e54797c
--- a/app/web/Applications/E500/Application.php
+++ b/app/web/Applications/E500/Application.php
@@ -1,4 +1,15 @@
'Error 500 - Unexpected error',
+ 'Description' => 'Something unexpected happened but don\'t fear we already got informed about this error.',
+]];
diff --git a/app/web/Applications/Frontend/Application.php b/app/web/Applications/Frontend/Application.php
old mode 100644
new mode 100755
index e69de29..383041e
--- a/app/web/Applications/Frontend/Application.php
+++ b/app/web/Applications/Frontend/Application.php
@@ -0,0 +1,241 @@
+app = $app;
+ $this->app->appName = 'Frontend';
+ $this->config = $config;
+ UriFactory::setQuery('/app', \strtolower($this->app->appName));
+ }
+
+ public function run(HttpRequest $request, HttpResponse $response) : void
+ {
+ $this->app->l11nManager = new L11nManager($this->app->appName);
+ $this->app->dbPool = new DatabasePool();
+ $this->app->sessionManager = new HttpSession(0);
+ $this->app->cookieJar = new CookieJar();
+ $this->app->dispatcher = new Dispatcher($this->app);
+
+ $this->app->router = new WebRouter();
+ $this->app->router->importFromFile(__DIR__ . '/Routes.php');
+ $this->app->router->add(
+ '/backend/e403',
+ function() use ($request, $response) {
+ $view = new View($this->app->l11nManager, $request, $response);
+ $view->setTemplate('/Web/Backend/Error/403_inline');
+ $response->header->status = RequestStatusCode::R_403;
+
+ return $view;
+ },
+ RouteVerb::GET
+ );
+
+ /* CSRF token OK? */
+ if ($request->getData('CSRF') !== null
+ && !\hash_equals($this->app->sessionManager->get('CSRF'), $request->getData('CSRF'))
+ ) {
+ $response->header->status = RequestStatusCode::R_403;
+
+ return;
+ }
+
+ $this->app->cachePool = new CachePool();
+ $this->app->appSettings = new CoreSettings();
+ $this->app->eventManager = new EventManager($this->app->dispatcher);
+ $this->app->accountManager = new AccountManager($this->app->sessionManager);
+ $this->app->l11nServer = new Localization();
+
+ $aid = Auth::authenticate($this->app->sessionManager);
+ $request->header->account = $aid;
+ $response->header->account = $aid;
+
+ $account = $this->loadAccount($request);
+
+ if ($this->app->sessionManager->get('language') !== null) {
+ $response->header->l11n
+ ->loadFromLanguage(
+ $this->app->sessionManager->get('language'),
+ $this->app->sessionManager->get('country') ?? '*'
+ );
+ } elseif ($this->app->cookieJar->get('language') !== null) {
+ $response->header->l11n
+ ->loadFromLanguage(
+ $this->app->cookieJar->get('language'),
+ $this->app->cookieJar->get('country') ?? '*'
+ );
+ }
+
+ if (!\in_array($response->getLanguage(), $this->config['language'])) {
+ $response->header->l11n->setLanguage($this->app->l11nServer->getLanguage());
+ }
+
+ $pageView = new FrontendView($this->app->l11nManager, $request, $response);
+ $head = new Head();
+
+ $pageView->setData('orgId', $this->app->orgId);
+ $pageView->setData('head', $head);
+ $response->set('Content', $pageView);
+
+ /* Backend only allows GET */
+ if ($request->getMethod() !== RequestMethod::GET) {
+ $this->create406Response($response, $pageView);
+
+ return;
+ }
+
+ UriFactory::setQuery('/lang', $response->getLanguage());
+
+ $this->app->loadLanguageFromPath(
+ $response->getLanguage(),
+ __DIR__ . '/lang/' . $response->getLanguage() . '.lang.php'
+ );
+
+ $response->header->set('content-language', $response->getLanguage(), true);
+
+ /* Create html head */
+ $this->initResponseHead($head, $request, $response);
+
+ $this->createDefaultPageView($request, $response, $pageView);
+
+ $dispatched = $this->app->dispatcher->dispatch(
+ $this->app->router->route(
+ $request->uri->getRoute(),
+ $request->getData('CSRF'),
+ $request->getRouteVerb(),
+ $this->app->appName,
+ $this->app->orgId,
+ $account,
+ $request->getData()
+ ),
+ $request,
+ $response
+ );
+ $pageView->addData('dispatch', $dispatched);
+ }
+
+ private function createDefaultPageView(HttpRequest $request, HttpResponse $response, FrontendView $pageView) : void
+ {
+ $pageView->setTemplate('/Applications/Frontend/index');
+ }
+
+ private function create403Response(HttpResponse $response, View $pageView) : void
+ {
+ $response->header->status = RequestStatusCode::R_403;
+ $pageView->setTemplate('/Applications/Frontend/Error/403');
+ $this->app->loadLanguageFromPath(
+ $response->getLanguage(),
+ __DIR__ . '/Error/lang/' . $response->getLanguage() . '.lang.php'
+ );
+ }
+
+ private function create406Response(HttpResponse $response, View $pageView) : void
+ {
+ $response->header->status = RequestStatusCode::R_406;
+ $pageView->setTemplate('/Applications/Frontend/Error/406');
+ $this->app->loadLanguageFromPath(
+ $response->getLanguage(),
+ __DIR__ . '/Error/lang/' . $response->getLanguage() . '.lang.php'
+ );
+ }
+
+ private function create503Response(HttpResponse $response, View $pageView) : void
+ {
+ $response->header->status = RequestStatusCode::R_503;
+ $pageView->setTemplate('/Applications/Frontend/Error/503');
+ $this->app->loadLanguageFromPath(
+ $response->getLanguage(),
+ __DIR__ . '/Error/lang/' . $response->getLanguage() . '.lang.php'
+ );
+ }
+
+ private function loadAccount(HttpRequest $request) : Account
+ {
+ $account = new NullAccount();
+ $this->app->accountManager->add($account);
+
+ return $account;
+ }
+
+ private function initResponseHead(Head $head, HttpRequest $request, HttpResponse $response) : void
+ {
+ /* Load assets */
+ $head->addAsset(AssetType::CSS, 'Resources/fonts/fontawesome/css/font-awesome.min.css?v=1.0.0');
+ $head->addAsset(AssetType::CSS, 'Resources/fonts/linearicons/css/style.css?v=1.0.0');
+ $head->addAsset(AssetType::CSS, 'Resources/fonts/lineicons/css/lineicons.css?v=1.0.0');
+ $head->addAsset(AssetType::CSS, 'cssOMS/styles.css?v=1.0.0');
+ $head->addAsset(AssetType::CSS, 'Resources/fonts/Roboto/roboto.css?v=1.0.0');
+
+ // Framework
+ $head->addAsset(AssetType::JS, 'jsOMS/Utils/oLib.js?v=1.0.0');
+ $head->addAsset(AssetType::JS, 'jsOMS/UnhandledException.js?v=1.0.0');
+ $head->addAsset(AssetType::JS, 'Applications/Frontend/js/frontend.js?v=1.0.0', ['type' => 'module']);
+
+ $script = '';
+ $response->header->set(
+ 'content-security-policy',
+ 'base-uri \'self\'; script-src \'self\' blob: \'sha256-'
+ . \base64_encode(\hash('sha256', $script, true))
+ . '\'; worker-src \'self\'',
+ true
+ );
+
+ if ($request->hasData('debug')) {
+ $head->addAsset(AssetType::CSS, 'cssOMS/debug.css?v=1.0.0');
+ \phpOMS\DataStorage\Database\Query\Builder::$log = true;
+ }
+
+ $css = \file_get_contents(__DIR__ . '/css/small.css');
+ if ($css === false) {
+ $css = '';
+ }
+
+ $css = \preg_replace('!\s+!', ' ', $css);
+ $head->setStyle('core', $css ?? '');
+ $head->title = 'Karaka Frontend';
+ }
+}
diff --git a/app/web/Applications/Frontend/Error/lang/en.lang.php b/app/web/Applications/Frontend/Error/lang/en.lang.php
new file mode 100644
index 0000000..f2e8952
--- /dev/null
+++ b/app/web/Applications/Frontend/Error/lang/en.lang.php
@@ -0,0 +1,7 @@
+ 'Error 500 - Unexpected error',
+ 'Description' => 'Something unexpected happened but don\'t fear we already got informed about this error.',
+]];
diff --git a/app/web/Applications/Frontend/FrontendView.php b/app/web/Applications/Frontend/FrontendView.php
new file mode 100644
index 0000000..d9194dd
--- /dev/null
+++ b/app/web/Applications/Frontend/FrontendView.php
@@ -0,0 +1,28 @@
+getData('nav');
-
-$nav->setTemplate('/Modules/Navigation/Theme/Backend/top');
-$top = $nav->render();
-
-$nav->setTemplate('/Modules/Navigation/Theme/Backend/side');
-$side = $nav->render();
-
/** @var phpOMS\Model\Html\Head $head */
$head = $this->getData('head');
@@ -39,13 +30,11 @@ $dispatch = $this->getData('dispatch') ?? [];
-
Karaka is a WebApp written in PHP and JavaScript supporting various database - and caching technologies. Many modules/extensions provide functionality for businesses, - education facilities, healthcare facilities and organizations in general.
+
The Online Resource Watcher allows you to watch online resources such as websites, PDFs etc. for changes and receive an email if the resource changes. It's also possible to watch local resources which can be helpful for monitoring file changes on shared files and drives in a company network.
In the following pages you'll be guided through the installation process for the WebApp. Most of the customization can be done after installation such as configuring localization, installing additional modules, creating organization etc.
-In case you don't want to use this web installation tool you can also use the console - installation tool. Just navigate in your shell to the install directory and then into - Console the subdirectory. There you simply run the install script and are good to go.
-In case you encounter any problems during the installation process please feel free to ask for help on our website or contact our support email at test.email@karaka.de
@@ -88,7 +82,7 @@ declare(strict_types=1); features. All critical elements must be fixed before you can continue with the installation.For help please check our Installation Guide.
- +| Your Environment | |||||
|---|---|---|---|---|---|
| = \version_compare('8.0.0', \PHP_VERSION) < 1 ? 'OK' : 'FAILED'; ?> + | = \version_compare('8.1.0', \PHP_VERSION) < 1 ? 'OK' : 'FAILED'; ?> | Critcal - | PHP version >= 8.0.0 + | PHP version >= 8.1.0 | = \PHP_VERSION; ?> |
| + && \is_writable(__DIR__ . '/../../server') + && \is_writable(__DIR__ . '/../../server/data') + && \is_writable(__DIR__ . '/../')) ? 'OK' : 'FAILED'; ?>"> = $filePerm ? 'OK' : 'FAILED'; ?> | Critcal | File permissions (write permissions required!) @@ -115,28 +108,18 @@ declare(strict_types=1); | |||
| Critcal - | /Install + | ./ + | = \decoct(\fileperms(__DIR__ . '/../') & 0777); ?> + | ||
| + | Critcal + | ./Install | = \decoct(\fileperms(__DIR__ . '/../Install') & 0777); ?> | ||
| Critcal - | /Modules - | = \decoct(\fileperms(__DIR__ . '/../Modules') & 0777); ?> - | |||
| - | Critcal - | /Modules - | = \decoct(\fileperms(__DIR__ . '/../Modules/Media/Files') & 0777); ?> - | ||
| - | Critcal - | /Web - | = \decoct(\fileperms(__DIR__ . '/../Web') & 0777); ?> - | ||
| - | Critcal - | /Console - | = \decoct(\fileperms(__DIR__ . '/../Console') & 0777); ?> + | ./../../server + | = \decoct(\fileperms(__DIR__ . '/../../server') & 0777); ?> |
| = \extension_loaded('pdo') ? 'OK' : 'FAILED'; ?> | Critcal
@@ -215,14 +198,12 @@ declare(strict_types=1);
The following configuration options are general WebApp settings.
|