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;
 }
コード例 #3
0
 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;
 }
コード例 #6
0
 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() . '&timeshift=' . $dataDimensions->getTimeShift();
     $this->getClient()->post($url, ['body' => ['record' => json_encode($config)]]);
     $this->stashConfig($config, $dataDimensions);
     return true;
 }