(string) $request->getData('dbtype'), 'host' => (string) $request->getData('dbhost'), 'port' => (int) $request->getData('dbport'), 'database' => (string) $request->getData('dbname'), 'login' => (string) $request->getData('schemauser'), 'password' => (string) $request->getData('schemapassword'), ]); } /** * Install/setup configuration * * @param RequestAbstract $request Request * * @return void * * @since 1.0.0 */ protected static function installConfigFile(RequestAbstract $request) : void { self::editConfigFile($request); self::editHtaccessFile($request); } /** * Modify config file * * @param RequestAbstract $request Request * * @return void * * @since 1.0.0 */ protected static function editConfigFile(RequestAbstract $request) : void { $db = $request->getData('dbtype'); $host = $request->getData('dbhost'); $port = (int) $request->getData('dbport'); $dbname = $request->getData('dbname'); $admin = ['login' => $request->getData('schemauser'), 'password' => $request->getData('schemapassword')]; $insert = ['login' => $request->getData('createuser'), 'password' => $request->getData('createpassword')]; $select = ['login' => $request->getData('selectuser'), 'password' => $request->getData('selectpassword')]; $update = ['login' => $request->getData('updateuser'), 'password' => $request->getData('updatepassword')]; $delete = ['login' => $request->getData('deleteuser'), 'password' => $request->getData('deletepassword')]; $schema = ['login' => $request->getData('schemauser'), 'password' => $request->getData('schemapassword')]; $subdir = $request->getData('websubdir'); $tld = $request->getData('domain'); $tldOrg = 1; $defaultOrg = 1; $config = include __DIR__ . '/Templates/config.tpl.php'; \file_put_contents(__DIR__ . '/../config.php', $config); } /** * Modify htaccess file * * @param RequestAbstract $request Request * * @return void * * @since 1.0.0 */ protected static function editHtaccessFile(RequestAbstract $request) : void { $fullTLD = $request->getData('domain'); $tld = \str_replace(['.', 'http://', 'https://'], ['\.', '', ''], $request->getData('domain') ?? ''); $subPath = $request->getData('websubdir') ?? '/'; $config = include __DIR__ . '/Templates/htaccess.tpl.php'; \file_put_contents(__DIR__ . '/../.htaccess', $config); } /** * Install core functionality * * @param ConnectionAbstract $db Database connection * * @return void * * @since 1.0.0 */ protected static function installCore(ConnectionAbstract $db) : void { self::createBaseTables($db); } /** * Create module table * * @param ConnectionAbstract $db Database connection * * @return void * * @since 1.0.0 */ protected static function createBaseTables(ConnectionAbstract $db) : void { $path = __DIR__ . '/db.json'; if (!\is_file($path)) { return; // @codeCoverageIgnore } $content = \file_get_contents($path); if ($content === false) { return; // @codeCoverageIgnore } $definitions = \json_decode($content, true); foreach ($definitions as $definition) { SchemaBuilder::createFromSchema($definition, $db)->execute(); } } /** * Install basic groups * * @param ConnectionAbstract $db Database connection * * @return void * * @since 1.0.0 */ protected static function installGroups(ConnectionAbstract $db) : void { self::installMainGroups($db); self::installGroupPermissions($db); } /** * Create basic groups in db * * @param ConnectionAbstract $db Database connection * * @return void * * @since 1.0.0 */ protected static function installMainGroups(ConnectionAbstract $db) : void { $guest = new Group('guest'); $guest->setStatus(GroupStatus::ACTIVE); GroupMapper::create()->execute($guest); $user = new Group('user'); $user->setStatus(GroupStatus::ACTIVE); GroupMapper::create()->execute($user); $admin = new Group('admin'); $admin->setStatus(GroupStatus::ACTIVE); GroupMapper::create()->execute($admin); } /** * Set permissions of basic groups * * @param ConnectionAbstract $db Database connection * * @return void * * @since 1.0.0 */ protected static function installGroupPermissions(ConnectionAbstract $db) : void { $searchPermission = new GroupPermission( group: 2, category: PermissionCategory::SEARCH, permission: PermissionType::READ ); $adminPermission = new GroupPermission( group: 3, permission: PermissionType::READ | PermissionType::CREATE | PermissionType::MODIFY | PermissionType::DELETE | PermissionType::PERMISSION ); GroupPermissionMapper::create()->execute($searchPermission); GroupPermissionMapper::create()->execute($adminPermission); } /** * Install users * * @param RequestAbstract $request Request * @param ConnectionAbstract $db Database connection * * @return void * * @since 1.0.0 */ protected static function installUsers(RequestAbstract $request, ConnectionAbstract $db) : void { self::installMainUser($request, $db); } /** * Install applications * * @param RequestAbstract $request Request * @param ConnectionAbstract $db Database connection * * @return void * * @since 1.0.0 */ protected static function installApplications(RequestAbstract $request, ConnectionAbstract $db) : void { if (self::$mManager === null) { return; } $apps = $request->getDataList('apps'); $theme = 'Default'; /** @var \Modules\CMS\Controller\ApiController $module */ $module = self::$mManager->get('CMS'); foreach ($apps as $app) { $temp = new HttpRequest(new HttpUri('')); $temp->header->account = 1; $temp->setData('name', \basename($app)); $temp->setData('theme', $theme); Zip::pack(__DIR__ . '/../' . $app, __DIR__ . '/' . \basename($app) . '.zip'); TestUtils::setMember($temp, 'files', [ [ 'name' => \basename($app) . '.zip', 'type' => MimeType::M_ZIP, 'tmp_name' => __DIR__ . '/' . \basename($app) . '.zip', 'error' => \UPLOAD_ERR_OK, 'size' => \filesize(__DIR__ . '/' . \basename($app) . '.zip'), ], ]); $module->apiApplicationInstall($temp, new HttpResponse()); } } /** * Setup root user in database * * @param RequestAbstract $request Request * @param ConnectionAbstract $db Database connection * * @return void * * @since 1.0.0 */ protected static function installMainUser(RequestAbstract $request, ConnectionAbstract $db) : void { $account = new Account(); $account->setStatus(AccountStatus::ACTIVE); $account->tries = 0; $account->setType(AccountType::USER); $account->login = (string) $request->getData('adminname'); $account->name1 = (string) $request->getData('adminname'); $account->generatePassword((string) $request->getData('adminpassword')); $account->setEmail((string) $request->getData('adminemail')); $l11n = $account->l11n; $l11n->loadFromLanguage($request->getData('defaultlang') ?? 'en', $request->getData('defaultcountry') ?? 'us'); AccountCredentialMapper::create()->execute($account); $sth = $db->con->prepare( 'INSERT INTO `account_group` (`account_group_group`, `account_group_account`) VALUES (3, ' . $account->getId() . ');' ); if ($sth === false) { return; // @codeCoverageIgnore } $sth->execute(); } }