public function create()
{
if (!$GLOBALS['TL_DCA'][$this->strTable]['config']['enableVersioning']) {
return;
}
// Delete old versions from the database
$tstamp = time() - intval(\Config::get('versionPeriod'));
$this->Database->query("DELETE FROM tl_version WHERE tstamp<{$tstamp}");
// Get the new record
$objRecord = $this->Database->prepare("SELECT * FROM " . $this->strTable . " WHERE id=?")->limit(1)->execute($this->intPid);
if ($objRecord->numRows < 1 || $objRecord->tstamp < 1) {
return;
}
if ($this->strPath !== null) {
$objFile = new \File($this->strPath);
if ($objFile->extension == 'svgz') {
$objRecord->content = gzdecode($objFile->getContent());
} else {
$objRecord->content = $objFile->getContent();
}
}
$intVersion = 1;
$objVersion = $this->Database->prepare("SELECT MAX(version) AS version FROM tl_version WHERE pid=? AND fromTable=?")->execute($this->intPid, $this->strTable);
if ($objVersion->version !== null) {
$intVersion = $objVersion->version + 1;
}
$strDescription = '';
if (!empty($objRecord->title)) {
$strDescription = $objRecord->title;
} elseif (!empty($objRecord->name)) {
$strDescription = $objRecord->name;
} elseif (!empty($objRecord->firstname)) {
$strDescription = $objRecord->firstname . ' ' . $objRecord->lastname;
} elseif (!empty($objRecord->headline)) {
$chunks = deserialize($objRecord->headline);
if (is_array($chunks) && isset($chunks['value'])) {
$strDescription = $chunks['value'];
} else {
$strDescription = $objRecord->headline;
}
} elseif (!empty($objRecord->selector)) {
$strDescription = $objRecord->selector;
} elseif (!empty($objRecord->subject)) {
$strDescription = $objRecord->subject;
}
$this->Database->prepare("UPDATE tl_version SET active='' WHERE pid=? AND fromTable=?")->execute($this->intPid, $this->strTable);
$this->Database->prepare("INSERT INTO tl_version (pid, tstamp, version, fromTable, username, userid, description, editUrl, active, data) VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1, ?)")->execute($this->intPid, time(), $intVersion, $this->strTable, $this->getUsername(), $this->getUserId(), $strDescription, $this->getEditUrl(), serialize($objRecord->row()));
// Trigger the oncreate_version_callback
if (is_array($GLOBALS['TL_DCA'][$this->strTable]['config']['oncreate_version_callback'])) {
foreach ($GLOBALS['TL_DCA'][$this->strTable]['config']['oncreate_version_callback'] as $callback) {
if (is_array($callback)) {
$this->import($callback[0]);
$this->{$callback[0]}->{$callback[1]}($this->strTable, $this->intPid, $intVersion, $objRecord->row());
} elseif (is_callable($callback)) {
$callback($this->strTable, $this->intPid, $intVersion, $objRecord->row());
}
}
}
$this->log('Version ' . $intVersion . ' of record "' . $this->strTable . '.id=' . $this->intPid . '" has been created' . $this->getParentEntries($this->strTable, $this->intPid), __METHOD__, TL_GENERAL);
}