/** * Funkce pro import CSV souboru * @param string $filename * @param string $dbType * @param User $user * @param string $tableName * @param string $encoding='utf-8' * @param string $delimiter=',' * @param string $enclosure='"' * @param string $escapeCharacter='\\' * @param string $nullValue='' * @return DbDatasource * @throws \Exception */ public function importCsvFile($filename, $dbType, User $user, $tableName, $encoding = 'utf-8', $delimiter = ',', $enclosure = '"', $escapeCharacter = '\\', $nullValue = '') { $columns = $this->getColsInCSV($filename, $delimiter, $enclosure, $escapeCharacter); if (empty($columns)) { throw new \Exception('No columns detected!'); } $dataTypes = []; foreach ($columns as $column) { $dataTypes[] = $column->type == DbField::TYPE_NOMINAL ? 'nominal' : 'numeric'; } $database = $this->databaseFactory->getDatabaseInstanceWithDefaultDbConnection($dbType, $user); return $database->importCsvFile($this->getFilePath($filename), $tableName, $encoding, $delimiter, $enclosure, $escapeCharacter, $nullValue, $dataTypes); }
/** * Funkce pro aktualizaci informací o vzdálených datových zdrojích * * @param User $user */ public function updateRemoteDatasourcesByUser(User $user) { $supportedDbTypes = $this->databaseFactory->getDbTypes(); #region připravení seznamu externích /** @var DbDatasource[] $dbDatasources */ $dbDatasources = []; $updatableDbTypes = []; foreach (self::$dbTypesWithRemoteDatasources as $dbType) { if (in_array($dbType, $supportedDbTypes)) { //načteme datové zdroje ze vzdálené databáze $database = $this->databaseFactory->getDatabaseInstanceWithDefaultDbConnection($dbType, $user); $remoteDbDatasources = $database->getDbDatasources(); if (!empty($remoteDbDatasources)) { foreach ($remoteDbDatasources as $remoteDbDatasource) { $dbDatasources[$remoteDbDatasource->type . '-' . $remoteDbDatasource->id] = $remoteDbDatasource; } } $updatableDbTypes[] = $dbType; } } #endregion připravení seznamu externích zdrojů #region zpracovani seznamu datovych zdroju //načteme seznam lokálních datových zdrojů $datasources = $this->findDatasourcesByUser($user); //porovnáme oba seznamy $updatedDatasourcesIds = []; $updatedDbDatasourcesIds = []; if (!empty($datasources) && !empty($dbDatasources)) { //zkusíme najít příslušné překrývající se datové zdroje foreach ($datasources as $key => $datasource) { if (!in_array($datasource->type, $updatableDbTypes)) { unset($datasources[$key]); continue; //ignorujeme datové zdroje, které nelze tímto způsobem aktualizovat } foreach ($dbDatasources as $dbDatasource) { if ($datasource->dbDatasourceId == $dbDatasource->id) { if ($datasource->name != $dbDatasource->name) { //aktualizace názvu datového zdroje (došlo k jeho přejmenování) a uložení $datasource->name = $dbDatasource->name; } if (!$datasource->available) { $datasource->available = true; } if ($datasource->isModified()) { $this->saveDatasource($datasource); } $updatedDatasourcesIds[] = $datasource->dbDatasourceId; $updatedDbDatasourcesIds[] = $dbDatasource->id; unset($datasources[$key]); break; } } } } if (!empty($datasources)) { foreach ($datasources as $datasource) { if ($datasource->available && !in_array($datasource->dbDatasourceId, $updatedDatasourcesIds)) { //označení datového zdroje, který již není dostupný $datasource->available = false; $this->saveDatasource($datasource); } } } if (!empty($dbDatasources)) { $defaultDbConnections = []; foreach ($dbDatasources as $dbDatasource) { if (!in_array($dbDatasource->id, $updatedDbDatasourcesIds)) { //vyřešení výchozího připojení k DB if (!isset($defaultDbConnections[$dbDatasource->type])) { $defaultDbConnections[$dbDatasource->type] = $this->databaseFactory->getDefaultDbConnection($dbDatasource->type, $user); } //přidání nového datového zdroje... $datasource = Datasource::newFromDbConnection($defaultDbConnections[$dbDatasource->type]); $datasource->user = $user; $datasource->name = $dbDatasource->name; $datasource->dbDatasourceId = $dbDatasource->id; $datasource->type = $dbDatasource->type; $datasource->available = true; $this->datasourcesRepository->persist($datasource); } } } #endregion zpracovani seznamu datovych zdroju }