/** * Funkce pro připravení parametrů nového datového zdroje pro daného uživatele... * @param User $user * @param string $dbType * @throws BadRequestException * @throws \Exception * @throws \Nette\Application\ApplicationException * @return Datasource */ public function prepareNewDatasourceForUser(User $user, $dbType, $ignoreCheck = false) { $datasource = new Datasource(); if (!in_array($dbType, $this->databasesFacade->getDatabaseTypes()) || !isset($this->databasesConfig[$dbType])) { throw new BadRequestException('Unsupported type of database!', 500); } $databaseConfig = $this->databasesConfig[$dbType]; $datasource->type = $dbType; $datasource->user = $user; $datasource->dbName = str_replace('*', $user->userId, $databaseConfig['_database']); $datasource->dbUsername = str_replace('*', $user->userId, $databaseConfig['_username']); if (isset($databaseConfig['_password']) && !$databaseConfig['_password']) { $datasource->setDbPassword(''); } else { $datasource->setDbPassword($this->getUserDbPassword($user)); } $datasource->dbServer = $databaseConfig['server']; if (!empty($databaseConfig['port'])) { $datasource->dbPort = $databaseConfig['port']; } $dbConnection = $datasource->getDbConnection(); if ($dbType == DatabasesFacade::DB_TYPE_DBS_UNLIMITED) { return $datasource; } if ($ignoreCheck) { //FIXME return $datasource; } //TODO tato kontrola by neměla být prováděna při každém requestu... try { $this->databasesFacade->openDatabase($dbConnection); } catch (\Exception $e) { //pokud došlo k chybě, pokusíme se vygenerovat uživatelský účet a databázi $this->databasesFacade->openDatabase($this->getAdminDbConnection($dbType)); if (!$this->databasesFacade->createUserDatabase($dbConnection)) { throw new \Exception('Database creation failed!'); } } return $datasource; }