protected function getMultiViewConfig($configTypeName, DataDimensions $dataDimensions) { $tableName = $this->getConfigTypeTableName(); $database = $this->getDatabase(); $timestamp = TimeShifter::getTimeshiftTimestamp($dataDimensions->getTimeShift()); $sql = 'SELECT * FROM ' . $tableName . ' WHERE id = ? AND workspace = ? AND language = ? AND validfrom_timestamp <= ? AND validuntil_timestamp > ?'; $rows = $database->fetchAllSQL($sql, [$configTypeName, $dataDimensions->getWorkspace(), $dataDimensions->getLanguage(), $timestamp, $timestamp]); if (count($rows) == 1) { $row = reset($rows); $config = $this->createConfigFromRow($row, $configTypeName, $dataDimensions); } else { $definition = $this->getConfigTypeDefinition($configTypeName); $config = $this->getRecordFactory()->createConfig($definition); KVMLogger::instance('anycontent-connection')->info('Config ' . $configTypeName . ' not found'); } return $config; }
public function saveConfigTypeCMDL($configTypeName, $cmdl) { if ($this->getConfiguration()->hasCMDLFolder()) { $path = $this->getConfiguration()->getPathCMDLFolderForConfigTypes() . '/' . $configTypeName . '.cmdl'; file_put_contents($path, $cmdl); } else { $data = ['repository' => $this->getRepository()->getName(), 'data_type' => 'config', 'name' => $configTypeName, 'cmdl' => $cmdl, 'lastchange_timestamp' => TimeShifter::getTimeshiftTimestamp()]; $this->getDatabase()->insert('_cmdl_', $data, $data); } $this->getConfiguration()->addConfigTypes([$configTypeName]); $this->getCMDLCache()->flushAll(); return true; }
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; }