public function saveConfig(Config $config, DataDimensions $dataDimensions = null) { if (!$dataDimensions) { $dataDimensions = $this->getCurrentDataDimensions(); } $definition = $config->getConfigTypeDefinition(); $configTypeName = $config->getConfigTypeName(); $tableName = $this->getConfigTypeTableName(); $values = []; $values['id'] = $configTypeName; $values['revision'] = 1; $values['workspace'] = $dataDimensions->getWorkspace(); $values['language'] = $dataDimensions->getLanguage(); // get row of current revision $sql = 'SELECT * FROM ' . $tableName . ' WHERE id = ? AND workspace = ? AND language = ? AND validfrom_timestamp <= ? AND validuntil_timestamp > ?'; $timeshiftTimestamp = TimeShifter::getTimeshiftTimestamp(); $rows = $this->getDatabase()->fetchAllSQL($sql, [$configTypeName, $dataDimensions->getWorkspace(), $dataDimensions->getLanguage(), $timeshiftTimestamp, $timeshiftTimestamp]); if (count($rows) == 1) { $values = reset($rows); $values['revision'] = $values['revision'] + 1; $properties = array_merge(json_decode($values['properties'], true), $config->getProperties()); } else { $properties = $config->getProperties(); } // invalidate current revision $sql = 'UPDATE ' . $tableName . ' SET validuntil_timestamp = ? WHERE id = ? AND workspace = ? AND language = ? AND validfrom_timestamp <=? AND validuntil_timestamp >?'; $this->getDatabase()->execute($sql, [$timeshiftTimestamp, $configTypeName, $dataDimensions->getWorkspace(), $dataDimensions->getLanguage(), $timeshiftTimestamp, $timeshiftTimestamp]); $values['properties'] = json_encode($properties); $values['lastchange_timestamp'] = $timeshiftTimestamp; $values['lastchange_username'] = $this->userInfo->getUsername(); $values['lastchange_firstname'] = $this->userInfo->getFirstname(); $values['lastchange_lastname'] = $this->userInfo->getLastname(); $values['validfrom_timestamp'] = $timeshiftTimestamp; $values['validuntil_timestamp'] = TimeShifter::getMaxTimestamp(); $this->getDatabase()->insert($tableName, $values); return true; }
protected function mergeExistingConfig(Config $config, DataDimensions $dataDimensions) { $configTypeName = $config->getConfigTypeName(); $existingConfig = $this->getMultiViewConfig($configTypeName, $dataDimensions); if ($existingConfig) { $config->setRevision($existingConfig->getRevision()); $existingProperties = $existingConfig->getProperties(); $mergedProperties = array_merge($existingProperties, $config->getProperties()); $mergedRecord = clone $config; $mergedRecord->setProperties($mergedProperties); return $mergedRecord; } return $config; }
protected function stashConfig(Config $config, DataDimensions $dataDimensions) { if (!$dataDimensions->hasRelativeTimeShift()) { $hash = md5($config->getConfigTypeName() . $dataDimensions . get_class($config)); $this->configStash[$hash] = $config; } }
public function saveConfig(Config $config, DataDimensions $dataDimensions = null) { if (!$dataDimensions) { $dataDimensions = $this->getCurrentDataDimensions(); } $configTypeName = $config->getConfigTypeName(); $mergedConfig = $this->mergeExistingConfig($config, $dataDimensions); $mergedConfig->setRevision($mergedConfig->getRevision() + 1); $config->setRevision($mergedConfig->getRevision()); $mergedConfig->setLastChangeUserInfo($this->userInfo); $config->setLastChangeUserInfo($this->userInfo); $data = json_encode($mergedConfig, JSON_PRETTY_PRINT); if ($this->writeData($this->getConfiguration()->getUriConfig($configTypeName, $dataDimensions), $data)) { return true; } throw new AnyContentClientException('Error when saving record of config type ' . $configTypeName); }
public function saveConfig(Config $config, DataDimensions $dataDimensions = null) { if (!$dataDimensions) { $dataDimensions = $this->getCurrentDataDimensions(); } unset($this->repositoryInfo[(string) $dataDimensions]); $url = 'config/' . $config->getConfigTypeName() . '/record/' . $dataDimensions->getWorkspace(); $config->setLastChangeUserInfo($this->userInfo); $this->getClient()->setDefaultOption('query', ['userinfo' => ['username' => $this->userInfo->getUsername(), 'firstname' => $this->userInfo->getFirstname(), 'lastname' => $this->userInfo->getLastname()]]); $this->getClient()->post($url, ['body' => ['record' => json_encode($config), 'language' => $dataDimensions->getLanguage()]]); $this->stashConfig($config, $dataDimensions); return true; }
public function saveConfig(Config $config, DataDimensions $dataDimensions = null) { if (!$dataDimensions) { $dataDimensions = $this->getCurrentDataDimensions(); } unset($this->repositoryInfo[(string) $dataDimensions]); $url = 'config/' . $config->getConfigTypeName() . '/record/' . $dataDimensions->getWorkspace() . '?language=' . $dataDimensions->getLanguage() . '×hift=' . $dataDimensions->getTimeShift(); $this->getClient()->post($url, ['body' => ['record' => json_encode($config)]]); $this->stashConfig($config, $dataDimensions); return true; }