2 namespace TYPO3\CMS\Workspaces\ExtDirect;
77 $cmd[$table][$t3ver_oid][
'version'] = array(
79 'swapWith' => $orig_uid,
82 $this->processTcaCmd($cmd);
100 $cmd[$table][$uid][
'version'] = array(
101 'action' =>
'clearWSID'
103 $this->processTcaCmd($cmd);
117 return \TYPO3\CMS\Workspaces\Service\WorkspaceService::viewSingleRecord($table, $uid);
130 if (empty($parameter->action) || empty($parameter->selection)) {
131 $result[
'error'] =
'No action or record selection given';
136 $swapIntoWorkspace = ($parameter->action ===
'swap');
137 if ($parameter->action ===
'publish' || $swapIntoWorkspace) {
139 }
elseif ($parameter->action ===
'discard') {
143 $result = $this->processTcaCmd($commands);
144 $result[
'total'] = count($commands);
158 foreach ($selection as $record) {
159 $commands[$record->table][$record->liveId][
'version'] = array(
161 'swapWith' => $record->versionId,
162 'swapIntoWS' => (
bool)$swapIntoWorkspace,
177 foreach ($selection as $record) {
178 $commands[$record->table][$record->versionId][
'version'] = array(
179 'action' =>
'clearWSID',
194 foreach ($model as $column) {
195 $data[$column->column] = array(
196 'position' => $column->position,
197 'hidden' => $column->hidden
200 $GLOBALS[
'BE_USER']->uc[
'moduleData'][
'Workspaces'][
$GLOBALS[
'BE_USER']->workspace][
'columns'] = $data;
206 if (is_array(
$GLOBALS[
'BE_USER']->uc[
'moduleData'][
'Workspaces'][
$GLOBALS[
'BE_USER']->workspace][
'columns'])) {
207 return $GLOBALS[
'BE_USER']->uc[
'moduleData'][
'Workspaces'][
$GLOBALS[
'BE_USER']->workspace][
'columns'];
221 if (\TYPO3\CMS\Core\Utility\MathUtility::canBeInterpretedAsInteger($language) ===
false && $language !==
'all') {
224 $GLOBALS[
'BE_USER']->uc[
'moduleData'][
'Workspaces'][
$GLOBALS[
'BE_USER']->workspace][
'language'] = $language;
241 if (is_array($elementRecord)) {
243 $nextStageRecord = $workspaceRecord->getNextStage($elementRecord[
't3ver_stage']);
244 if ($nextStageRecord !== null) {
245 $this->stageService->getRecordService()->add($table, $uid);
247 $result[
'affects'] = array(
249 'nextStage' => $nextStageRecord->getUid(),
250 't3ver_oid' => $t3ver_oid,
257 $result = $this->
getErrorResponse(
'error.sendToNextStage.noRecordFound', 1287264776);
276 if (is_array($elementRecord)) {
278 $stageRecord = $workspaceRecord->getStage($elementRecord[
't3ver_stage']);
280 if ($stageRecord !== null) {
281 if (!$stageRecord->isEditStage()) {
282 $this->stageService->getRecordService()->add($table, $uid);
283 $previousStageRecord = $stageRecord->getPrevious();
285 $result[
'affects'] = array(
288 'nextStage' => $previousStageRecord->getUid()
292 $result = $this->
getErrorResponse(
'error.sendToPrevStage.noPreviousStage', 1287264746);
298 $result = $this->
getErrorResponse(
'error.sendToNextStage.noRecordFound', 1287264765);
314 foreach ($elements as $element) {
315 $this->stageService->getRecordService()->add(
322 $result[
'affects'] = array(
323 'nextStage' => $nextStageId
341 if ($stageRecord === null) {
342 throw new \InvalidArgumentException(
$GLOBALS[
'LANG']->sL(
'LLL:EXT:workspaces/Resources/Private/Language/locallang.xlf:error.stageId.integer'));
345 $recipients = array();
346 $finalRecipients = array();
347 $backendUserIds = $stageRecord->getAllRecipients();
348 foreach ($uidOfRecipients as $userUid) {
350 if (!in_array($userUid, $backendUserIds)) {
354 if (is_array($beUserRecord) && $beUserRecord[
'email'] !==
'') {
355 $uc = $beUserRecord[
'uc'] ? unserialize($beUserRecord[
'uc']) : array();
356 $recipients[$beUserRecord[
'email']] = array(
357 'email' => $beUserRecord[
'email'],
358 'lang' => isset($uc[
'lang']) ? $uc[
'lang'] : $beUserRecord[
'lang']
363 if ($stageRecord->hasPreselection() && !$stageRecord->isPreselectionChangeable()) {
365 implode(
',', $this->stageService->getPreselectedRecipients($stageRecord))
368 foreach ($preselectedBackendUsers as $preselectedBackendUser) {
372 if (!isset($recipients[$preselectedBackendUser[
'email']])) {
373 $uc = (!empty($preselectedBackendUser[
'uc']) ? unserialize($preselectedBackendUser[
'uc']) : array());
374 $recipients[$preselectedBackendUser[
'email']] = array(
375 'email' => $preselectedBackendUser[
'email'],
376 'lang' => (isset($uc[
'lang']) ? $uc[
'lang'] : $preselectedBackendUser[
'lang'])
382 if ($additionalRecipients !==
'') {
384 $additionalRecipients = array();
385 foreach ($emails as $email) {
386 $additionalRecipients[$email] = array(
'email' => $email);
389 $additionalRecipients = array();
395 $allRecipients = array_merge($additionalRecipients, $recipients);
396 foreach ($allRecipients as $email => $recipientInformation) {
398 $finalRecipients[] = $recipientInformation;
401 return $finalRecipients;
410 public function discardStagesFromPage($pageId)
412 $cmdMapArray = array();
417 $workspaceItemsArray = $workspaceService->selectVersionsInWorkspace(
$stageService->getWorkspaceId(), ($filter = 1), ($stage = -99), $pageId, ($recursionLevel = 0), ($selectionType =
'tables_modify'));
418 foreach ($workspaceItemsArray as $tableName => $items) {
419 foreach ($items as $item) {
420 $cmdMapArray[$tableName][$item[
'uid']][
'version'][
'action'] =
'clearWSID';
423 $this->processTcaCmd($cmdMapArray);
445 $cmdMapArray = array();
446 $comment = $parameters->comments;
447 $stageId = $parameters->stageId;
448 if (\TYPO3\CMS\Core\Utility\MathUtility::canBeInterpretedAsInteger($stageId) ===
false) {
449 throw new \InvalidArgumentException(
'Missing "stageId" in $parameters array.', 1319488194);
451 if (!is_object($parameters->affects) || empty($parameters->affects)) {
452 throw new \InvalidArgumentException(
'Missing "affected items" in $parameters array.', 1319488195);
454 $recipients = $this->
getRecipientList($parameters->receipients, $parameters->additional, $stageId);
455 foreach ($parameters->affects as $tableName => $items) {
456 foreach ($items as $item) {
459 $cmdMapArray[$tableName][$item->t3ver_oid][
'version'][
'action'] =
'swap';
460 $cmdMapArray[$tableName][$item->t3ver_oid][
'version'][
'swapWith'] = $item->uid;
461 $cmdMapArray[$tableName][$item->t3ver_oid][
'version'][
'comment'] = $comment;
462 $cmdMapArray[$tableName][$item->t3ver_oid][
'version'][
'notificationAlternativeRecipients'] = $recipients;
465 $cmdMapArray[$tableName][$item->uid][
'version'][
'action'] =
'setStage';
466 $cmdMapArray[$tableName][$item->uid][
'version'][
'stageId'] = $stageId;
467 $cmdMapArray[$tableName][$item->uid][
'version'][
'comment'] = $comment;
468 $cmdMapArray[$tableName][$item->uid][
'version'][
'notificationAlternativeRecipients'] = $recipients;
472 $this->processTcaCmd($cmdMapArray);
476 'refreshLivePanel' => $parameters->stageId == -20
486 protected function processTcaCmd(array $cmdMapArray)
490 if (empty($cmdMapArray)) {
491 $result[
'error'] =
'No commands given to be processed';
497 $dataHandler->start(array(), $cmdMapArray);
498 $dataHandler->process_cmdmap();
500 if ($dataHandler->errorLog) {
501 $result[
'error'] = implode(
'<br/>', $dataHandler->errorLog);
525 $setStageId = $parameters->affects->nextStage;
526 $comments = $parameters->comments;
527 $table = $parameters->affects->table;
528 $uid = $parameters->affects->uid;
529 $t3ver_oid = $parameters->affects->t3ver_oid;
534 $recipients = $this->
getRecipientList($parameters->receipients, $parameters->additional, $setStageId);
536 $cmdArray[$table][$t3ver_oid][
'version'][
'action'] =
'swap';
537 $cmdArray[$table][$t3ver_oid][
'version'][
'swapWith'] = $uid;
538 $cmdArray[$table][$t3ver_oid][
'version'][
'comment'] = $comments;
539 $cmdArray[$table][$t3ver_oid][
'version'][
'notificationAlternativeRecipients'] = $recipients;
541 $cmdArray[$table][$uid][
'version'][
'action'] =
'setStage';
542 $cmdArray[$table][$uid][
'version'][
'stageId'] = $setStageId;
543 $cmdArray[$table][$uid][
'version'][
'comment'] = $comments;
544 $cmdArray[$table][$uid][
'version'][
'notificationAlternativeRecipients'] = $recipients;
546 $this->processTcaCmd($cmdArray);
572 $setStageId = $parameters->affects->nextStage;
573 $comments = $parameters->comments;
574 $table = $parameters->affects->table;
575 $uid = $parameters->affects->uid;
580 $recipients = $this->
getRecipientList($parameters->receipients, $parameters->additional, $setStageId);
581 $cmdArray[$table][$uid][
'version'][
'action'] =
'setStage';
582 $cmdArray[$table][$uid][
'version'][
'stageId'] = $setStageId;
583 $cmdArray[$table][$uid][
'version'][
'comment'] = $comments;
584 $cmdArray[$table][$uid][
'version'][
'notificationAlternativeRecipients'] = $recipients;
585 $this->processTcaCmd($cmdArray);
618 $setStageId = $parameters->affects->nextStage;
619 $comments = $parameters->comments;
620 $elements = $parameters->affects->elements;
621 $recipients = $this->
getRecipientList($parameters->receipients, $parameters->additional, $setStageId);
622 foreach ($elements as $element) {
625 if ((
int)$elementRecord[
't3ver_wsid'] === 0) {
630 $cmdArray[$element->table][$element->t3ver_oid][
'version'][
'action'] =
'swap';
631 $cmdArray[$element->table][$element->t3ver_oid][
'version'][
'swapWith'] = $element->uid;
632 $cmdArray[$element->table][$element->t3ver_oid][
'version'][
'comment'] = $comments;
633 $cmdArray[$element->table][$element->t3ver_oid][
'version'][
'notificationAlternativeRecipients'] = $recipients;
635 $cmdArray[$element->table][$element->uid][
'version'][
'action'] =
'setStage';
636 $cmdArray[$element->table][$element->uid][
'version'][
'stageId'] = $setStageId;
637 $cmdArray[$element->table][$element->uid][
'version'][
'comment'] = $comments;
638 $cmdArray[$element->table][$element->uid][
'version'][
'notificationAlternativeRecipients'] = $recipients;
641 $this->processTcaCmd($cmdArray);
661 'title' =>
$GLOBALS[
'LANG']->sL(
'LLL:EXT:workspaces/Resources/Private/Language/locallang.xlf:actionSendToStage'),
665 'bodyStyle' =>
'margin-bottom: 7px; border: none;',
666 'html' =>
$GLOBALS[
'LANG']->sL(
'LLL:EXT:workspaces/Resources/Private/Language/locallang.xlf:window.sendToNextStageWindow.itemsWillBeSentTo') .
' ' . $nextStage->getTitle()
671 if ($nextStage->isDialogEnabled()) {
672 $result[
'items'][] = array(
673 'fieldLabel' =>
$GLOBALS[
'LANG']->sL(
'LLL:EXT:workspaces/Resources/Private/Language/locallang.xlf:window.sendToNextStageWindow.sendMailTo'),
674 'xtype' =>
'checkboxgroup',
675 'itemCls' =>
'x-check-group-alt',
677 'style' =>
'max-height: 200px',
678 'autoScroll' =>
true,
683 $result[
'items'][] = array(
684 'fieldLabel' =>
$GLOBALS[
'LANG']->sL(
'LLL:EXT:workspaces/Resources/Private/Language/locallang.xlf:window.sendToNextStageWindow.additionalRecipients'),
685 'name' =>
'additional',
686 'xtype' =>
'textarea',
690 $result[
'items'][] = array(
691 'fieldLabel' =>
$GLOBALS[
'LANG']->sL(
'LLL:EXT:workspaces/Resources/Private/Language/locallang.xlf:window.sendToNextStageWindow.comments'),
692 'name' =>
'comments',
693 'xtype' =>
'textarea',
695 'value' => ($nextStage->isInternal() ?
'' : $nextStage->getDefaultComment())
714 $allRecipients = $this->
getStageService()->getResponsibleBeUser($stageRecord);
715 $preselectedRecipients = $this->stageService->getPreselectedRecipients($stageRecord);
716 $isPreselectionChangeable = $stageRecord->isPreselectionChangeable();
718 foreach ($allRecipients as $backendUserId => $backendUser) {
723 $name = (!empty($backendUser[
'realName']) ? $backendUser[
'realName'] : $backendUser[
'username']);
724 $checked = in_array($backendUserId, $preselectedRecipients);
725 $disabled = ($checked && !$isPreselectionChangeable);
728 'boxLabel' => sprintf(
'%s (%s)', $name, $backendUser[
'email']),
729 'name' =>
'receipients-' . $backendUserId,
730 'checked' => $checked,
731 'disabled' => $disabled
746 $result = $this->
getStageService()->getPropertyOfCurrentWorkspaceStage($stage,
'default_mailcomment');
757 if (!isset($this->stageService)) {
772 $workspaceItemsArray = $workspaceService->selectVersionsInWorkspace($this->stageService->getWorkspaceId(), ($filter = 1), ($stage = -99), $id, ($recursionLevel = 0), ($selectionType =
'tables_modify'));
773 list($currentStage, $previousStage) = $this->
getStageService()->getPreviousStageForElementCollection($workspaceItemsArray);
775 $workspaceItemsArray = $workspaceService->selectVersionsInWorkspace($this->stageService->getWorkspaceId(), ($filter = 1), $currentStage[
'uid'], $id, ($recursionLevel = 0), ($selectionType =
'tables_modify'));
777 'title' =>
'Status message: Page send to next stage - ID: ' . $id .
' - Next stage title: ' . $previousStage[
'title'],
779 'affects' => $workspaceItemsArray,
780 'stageId' => $previousStage[
'uid']
791 $workspaceItemsArray = $workspaceService->selectVersionsInWorkspace($this->stageService->getWorkspaceId(), ($filter = 1), ($stage = -99), $id, ($recursionLevel = 0), ($selectionType =
'tables_modify'));
792 list($currentStage, $nextStage) = $this->
getStageService()->getNextStageForElementCollection($workspaceItemsArray);
794 $workspaceItemsArray = $workspaceService->selectVersionsInWorkspace($this->stageService->getWorkspaceId(), ($filter = 1), $currentStage[
'uid'], $id, ($recursionLevel = 0), ($selectionType =
'tables_modify'));
796 'title' =>
'Status message: Page send to next stage - ID: ' . $id .
' - Next stage title: ' . $nextStage[
'title'],
798 'affects' => $workspaceItemsArray,
799 'stageId' => $nextStage[
'uid']
814 $workspaceItemsArray = $workspaceService->selectVersionsInWorkspace(
$stageService->getWorkspaceId(), ($filter = 1), ($stage = -99), $id, ($recursionLevel = 0), ($selectionType =
'tables_modify'));
815 list(, $nextStage) =
$stageService->getNextStageForElementCollection($workspaceItemsArray);
816 list(, $previousStage) =
$stageService->getPreviousStageForElementCollection($workspaceItemsArray);
817 $toolbarButtons = array(
818 'feToolbarButtonNextStage' => array(
819 'visible' => is_array($nextStage) && !empty($nextStage),
820 'text' => $nextStage[
'title']
822 'feToolbarButtonPreviousStage' => array(
823 'visible' => is_array($previousStage) && !empty($previousStage),
824 'text' => $previousStage[
'title']
826 'feToolbarButtonDiscardStage' => array(
827 'visible' => is_array($nextStage) && !empty($nextStage) || is_array($previousStage) && !empty($previousStage),
828 'text' =>
$GLOBALS[
'LANG']->sL(
'LLL:EXT:workspaces/Resources/Private/Language/locallang.xlf:label_doaction_discard',
true)
831 return $toolbarButtons;
841 $workspaceId = (int)$workspaceId;
844 if ($currentWorkspace !== $workspaceId) {
845 if (!$this->
getBackendUser()->setTemporaryWorkspace($workspaceId)) {
846 throw new \TYPO3\CMS\Core\Exception(
847 'Cannot set temporary workspace to "' . $workspaceId .
'"',
853 return $currentWorkspace;