/** * Funkce pro připravení entity nového datového zdroje podle DbConnection * * @param DbConnection $dbConnection * @return Datasource */ public static function newFromDbConnection(DbConnection $dbConnection) { $datasource = new Datasource(); $datasource->type = $dbConnection->type; $datasource->dbName = $dbConnection->dbName; $datasource->dbServer = $dbConnection->dbServer; $datasource->dbApi = $dbConnection->dbApi; if (!empty($dbConnection->dbPort)) { $datasource->dbPort = $dbConnection->dbPort; } $datasource->dbUsername = $dbConnection->dbUsername; $datasource->setDbPassword($dbConnection->dbPassword); return $datasource; }
/** * 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; }