53 $newTableIds = array();
55 $previousTableName = NULL;
57 foreach ($tableRecordData as $tableName => $recordData) {
59 if (!isset($recordData[
'pid'])) {
60 $recordData[
'pid'] = $pageId;
63 $currentUid =
'NEW' . str_replace(
'.',
'', uniqid(mt_rand(), TRUE));
64 $newTableIds[$tableName][] = $currentUid;
65 $dataMap[$tableName][$currentUid] = $recordData;
66 if ($previousTableName !== NULL && $previousUid !== NULL) {
67 $dataMap[$previousTableName][$previousUid] = $this->
resolveNextUid(
68 $dataMap[$previousTableName][$previousUid],
72 $previousTableName = $tableName;
73 $previousUid = $currentUid;
76 $this->dataHandler->start($dataMap, array());
77 $this->dataHandler->process_datamap();
79 foreach ($newTableIds as $tableName => &$ids) {
80 foreach ($ids as &$id) {
81 if (!empty($this->dataHandler->substNEWwithIDs[$id])) {
82 $id = $this->dataHandler->substNEWwithIDs[$id];
96 public function modifyRecord($tableName,
$uid, array $recordData, array $deleteTableRecordIds = NULL) {
102 $commandMap = array();
103 if (!empty($deleteTableRecordIds)) {
104 foreach ($deleteTableRecordIds as $tableName => $recordIds) {
105 foreach ($recordIds as $recordId) {
106 $commandMap[$tableName][$recordId][
'delete'] = TRUE;
111 $this->dataHandler->start($dataMap, $commandMap);
112 $this->dataHandler->process_datamap();
113 if (!empty($commandMap)) {
114 $this->dataHandler->process_cmdmap();
125 $previousTableName = NULL;
127 foreach ($tableRecordData as $tableName => $recordData) {
128 if (empty($recordData[
'uid'])) {
132 $currentUid = $recordData[
'uid'];
133 if ($recordData[
'uid'] ===
'__NEW') {
134 $recordData[
'pid'] = $pageId;
136 $currentUid =
'NEW' . str_replace(
'.',
'', uniqid(mt_rand(), TRUE));
138 unset($recordData[
'uid']);
139 $dataMap[$tableName][$currentUid] = $recordData;
140 if ($previousTableName !== NULL && $previousUid !== NULL) {
141 $dataMap[$previousTableName][$previousUid] = $this->
resolveNextUid(
142 $dataMap[$previousTableName][$previousUid],
146 $previousTableName = $tableName;
147 $previousUid = $currentUid;
150 $this->dataHandler->start($dataMap, array());
151 $this->dataHandler->process_datamap();
162 $tableName => array(
$uid),
172 $commandMap = array();
173 foreach ($tableRecordIds as $tableName => $ids) {
174 foreach ($ids as
$uid) {
175 $commandMap[$tableName][
$uid] = array(
181 $this->dataHandler->start(array(), $commandMap);
182 $this->dataHandler->process_cmdmap();
184 return $this->dataHandler->copyMappingArray;
194 $tableName => array(
$uid),
203 $commandMap = array();
204 foreach ($tableRecordIds as $tableName => $ids) {
205 foreach ($ids as
$uid) {
206 $commandMap[$tableName][
$uid] = array(
208 'action' =>
'clearWSID',
214 $this->dataHandler->start(array(), $commandMap);
215 $this->dataHandler->process_cmdmap();
225 public function copyRecord($tableName,
$uid, $pageId, array $recordData = NULL) {
233 if ($recordData !== NULL) {
234 $commandMap[$tableName][
$uid][
'copy'] = array(
237 'update' => $recordData,
241 $this->dataHandler->start(array(), $commandMap);
242 $this->dataHandler->process_cmdmap();
243 return $this->dataHandler->copyMappingArray;
253 public function moveRecord($tableName,
$uid, $pageId, array $recordData = NULL) {
261 if ($recordData !== NULL) {
262 $commandMap[$tableName][
$uid][
'move'] = array(
265 'update' => $recordData,
269 $this->dataHandler->start(array(), $commandMap);
270 $this->dataHandler->process_cmdmap();
271 return $this->dataHandler->copyMappingArray;
284 'localize' => $languageId,
289 $this->dataHandler->start(array(), $commandMap);
290 $this->dataHandler->process_cmdmap();
291 return $this->dataHandler->copyMappingArray;
304 $fieldName => implode(
',', $referenceIds),
309 $this->dataHandler->start($dataMap, array());
310 $this->dataHandler->process_datamap();
318 public function publishRecord($tableName, $liveUid, $throwException = TRUE) {
319 $this->
publishRecords(array($tableName => array($liveUid)), $throwException);
328 $commandMap = array();
329 foreach ($tableLiveUids as $tableName => $liveUids) {
330 foreach ($liveUids as $liveUid) {
332 if (empty($versionedUid)) {
333 if ($throwException) {
334 throw new \TYPO3\CMS\Core\Tests\Exception(
'Versioned UID could not be determined');
340 $commandMap[$tableName][$liveUid] = array(
343 'swapWith' => $versionedUid,
344 'notificationAlternativeRecipients' => array(),
350 $this->dataHandler->start(array(), $commandMap);
351 $this->dataHandler->process_cmdmap();
360 $this->dataHandler->start(array(), $commandMap);
361 $this->dataHandler->process_cmdmap();
370 $this->dataHandler->start(array(), $commandMap);
371 $this->dataHandler->process_cmdmap();
380 if ($previousUid === NULL) {
383 foreach ($recordData as $fieldName => $fieldValue) {
384 if (strpos($fieldValue,
'__previousUid') === FALSE) {
387 $recordData[$fieldName] = str_replace(
'__previousUid', $previousUid, $fieldValue);
398 if ($nextUid === NULL) {
401 foreach ($recordData as $fieldName => $fieldValue) {
402 if (strpos($fieldValue,
'__nextUid') === FALSE) {
405 $recordData[$fieldName] = str_replace(
'__nextUid', $nextUid, $fieldValue);
416 protected function getVersionedId($tableName, $liveUid, $useDeleteClause = FALSE) {
418 $liveUid = (int)$liveUid;
423 'pid=-1 AND t3ver_oid=' . $liveUid .
' AND t3ver_wsid=' . $workspaceId .
424 ($useDeleteClause ? \
TYPO3\CMS\Backend\Utility\BackendUtility::deleteClause($tableName) :
'')
426 if (!empty($row[
'uid'])) {
427 $versionedId = (int)$row[
'uid'];
437 'TYPO3\\CMS\\Core\\DataHandling\\DataHandler' 440 if (isset($backendUser->uc[
'copyLevels'])) {
441 $this->dataHandler->copyTree = $backendUser->uc[
'copyLevels'];
450 return \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(
451 'TYPO3\\CMS\\Workspaces\\Service\\WorkspaceService'
resolveNextUid(array $recordData, $nextUid)
getVersionedId($tableName, $liveUid, $useDeleteClause=FALSE)
resolvePreviousUid(array $recordData, $previousUid)
localizeRecord($tableName, $uid, $languageId)
deleteRecords(array $tableRecordIds)
publishRecords(array $tableLiveUids, $throwException=TRUE)
static makeInstance($className)
deleteRecord($tableName, $uid)
modifyRecords($pageId, array $tableRecordData)
publishWorkspace($workspaceId)
modifyRecord($tableName, $uid, array $recordData, array $deleteTableRecordIds=NULL)
swapWorkspace($workspaceId)
createNewRecords($pageId, array $tableRecordData)
createNewRecord($tableName, $pageId, array $recordData)
clearWorkspaceRecords(array $tableRecordIds)
if(!defined('TYPO3_MODE')) $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_userauth.php']['logoff_pre_processing'][]
copyRecord($tableName, $uid, $pageId, array $recordData=NULL)
modifyReferences($tableName, $uid, $fieldName, array $referenceIds)
moveRecord($tableName, $uid, $pageId, array $recordData=NULL)
publishRecord($tableName, $liveUid, $throwException=TRUE)
clearWorkspaceRecord($tableName, $uid)