‪TYPO3CMS  11.5
ActionHandler.php
Go to the documentation of this file.
1 <?php
2 
3 /*
4  * This file is part of the TYPO3 CMS project.
5  *
6  * It is free software; you can redistribute it and/or modify it under
7  * the terms of the GNU General Public License, either version 2
8  * of the License, or any later version.
9  *
10  * For the full copyright and license information, please read the
11  * LICENSE.txt file that was distributed with this source code.
12  *
13  * The TYPO3 project - inspiring people to share!
14  */
15 
17 
18 use TYPO3\CMS\Backend\Utility\BackendUtility;
31 
36 {
40  protected ‪$stageService;
41 
45  protected ‪$workspaceService;
46 
50  public function ‪__construct()
51  {
52  $this->stageService = GeneralUtility::makeInstance(StagesService::class);
53  $this->workspaceService = GeneralUtility::makeInstance(WorkspaceService::class);
54  }
55 
62  public function ‪generateWorkspacePreviewLink($uid)
63  {
64  return GeneralUtility::makeInstance(PreviewUriBuilder::class)->buildUriForPage((int)$uid, 0);
65  }
66 
74  {
75  return GeneralUtility::makeInstance(PreviewUriBuilder::class)->buildUrisForAllLanguagesOfPage((int)$uid);
76  }
77 
86  public function ‪publishSingleRecord($table, $t3ver_oid, $orig_uid)
87  {
88  $cmd = [];
89  $cmd[$table][$t3ver_oid]['version'] = [
90  'action' => 'publish',
91  'swapWith' => $orig_uid,
92  ];
93  $this->‪processTcaCmd($cmd);
94  }
95 
103  public function ‪deleteSingleRecord($table, $uid)
104  {
105  $cmd = [];
106  $cmd[$table][$uid]['version'] = [
107  'action' => 'clearWSID',
108  ];
109  $this->‪processTcaCmd($cmd);
110  }
111 
119  public function ‪viewSingleRecord($table, $uid)
120  {
121  return GeneralUtility::makeInstance(PreviewUriBuilder::class)->buildUriForElement($table, (int)$uid);
122  }
123 
130  public function ‪executeSelectionAction($parameter)
131  {
132  $result = [];
133 
134  if (empty($parameter->action) || empty($parameter->selection)) {
135  $result['error'] = 'No action or record selection given';
136  return $result;
137  }
138 
139  $commands = [];
140  if ($parameter->action === 'publish') {
141  $commands = $this->‪getPublishCommands($parameter->selection);
142  } elseif ($parameter->action === 'discard') {
143  $commands = $this->‪getFlushCommands($parameter->selection);
144  }
145 
146  $result = $this->‪processTcaCmd($commands);
147  $result['total'] = count($commands);
148  return $result;
149  }
150 
157  protected function ‪getPublishCommands(array $selection)
158  {
159  $commands = [];
160  foreach ($selection as $record) {
161  $commands[$record->table][$record->liveId]['version'] = [
162  'action' => 'publish',
163  'swapWith' => $record->versionId,
164  ];
165  }
166  return $commands;
167  }
168 
175  protected function ‪getFlushCommands(array $selection)
176  {
177  $commands = [];
178  foreach ($selection as $record) {
179  $commands[$record->table][$record->versionId]['version'] = [
180  'action' => 'clearWSID',
181  ];
182  }
183  return $commands;
184  }
185 
191  public function ‪saveColumnModel($model)
192  {
193  $data = [];
194  foreach ($model as $column) {
195  $data[$column->column] = [
196  'position' => $column->position,
197  'hidden' => $column->hidden,
198  ];
199  }
200  $this->‪getBackendUser()->uc['moduleData']['Workspaces'][$this->‪getBackendUser()->workspace]['columns'] = $data;
201  $this->‪getBackendUser()->‪writeUC();
202  }
203 
204  public function ‪loadColumnModel()
205  {
206  if (is_array($this->‪getBackendUser()->uc['moduleData']['Workspaces'][$this->‪getBackendUser()->workspace]['columns'])) {
207  return $this->‪getBackendUser()->uc['moduleData']['Workspaces'][$this->‪getBackendUser()->workspace]['columns'];
208  }
209  return [];
210  }
211 
220  public function ‪sendToNextStageWindow($uid, $table, $t3ver_oid)
221  {
222  $elementRecord = BackendUtility::getRecord($table, $uid);
223  if (is_array($elementRecord)) {
224  $workspaceRecord = ‪WorkspaceRecord::get($elementRecord['t3ver_wsid']);
225  $nextStageRecord = $workspaceRecord->getNextStage($elementRecord['t3ver_stage']);
226  if ($nextStageRecord !== null) {
227  $this->stageService->getRecordService()->add($table, $uid);
228  $result = $this->‪getSentToStageWindow($nextStageRecord);
229  $result['affects'] = [
230  'table' => $table,
231  'nextStage' => $nextStageRecord->getUid(),
232  't3ver_oid' => $t3ver_oid,
233  'uid' => $uid,
234  ];
235  } else {
236  $result = $this->‪getErrorResponse('error.stageId.invalid', 1291111644);
237  }
238  } else {
239  $result = $this->‪getErrorResponse('error.sendToNextStage.noRecordFound', 1287264776);
240  }
241  return $result;
242  }
243 
251  public function ‪sendToPrevStageWindow($uid, $table)
252  {
253  $elementRecord = BackendUtility::getRecord($table, $uid);
254  if (is_array($elementRecord)) {
255  $workspaceRecord = ‪WorkspaceRecord::get($elementRecord['t3ver_wsid']);
256  $stageRecord = $workspaceRecord->getStage($elementRecord['t3ver_stage']);
257 
258  if ($stageRecord !== null) {
259  if (!$stageRecord->isEditStage()) {
260  $this->stageService->getRecordService()->add($table, $uid);
261  $previousStageRecord = $stageRecord->getPrevious();
262  if ($previousStageRecord === null) {
263  return $this->‪getErrorResponse('error.sendToPrevStage.noPreviousStage', 1287264747);
264  }
265  $result = $this->‪getSentToStageWindow($previousStageRecord);
266  $result['affects'] = [
267  'table' => $table,
268  'uid' => $uid,
269  'nextStage' => $previousStageRecord->getUid(),
270  ];
271  } else {
272  // element is already in edit stage, there is no prev stage - return an error message
273  $result = $this->‪getErrorResponse('error.sendToPrevStage.noPreviousStage', 1287264746);
274  }
275  } else {
276  $result = $this->‪getErrorResponse('error.stageId.invalid', 1291111644);
277  }
278  } else {
279  $result = $this->‪getErrorResponse('error.sendToNextStage.noRecordFound', 1287264765);
280  }
281  return $result;
282  }
283 
291  public function ‪sendToSpecificStageWindow($nextStageId, array $elements)
292  {
293  foreach ($elements as $element) {
294  $this->stageService->getRecordService()->add(
295  $element->table,
296  $element->uid
297  );
298  }
299 
300  $result = $this->‪getSentToStageWindow($nextStageId);
301  $result['affects'] = [
302  'nextStage' => $nextStageId,
303  ];
304  return $result;
305  }
306 
316  public function ‪getRecipientList(array $uidOfRecipients, $additionalRecipients, $stageId)
317  {
318  $stageRecord = ‪WorkspaceRecord::get($this->‪getCurrentWorkspace())->‪getStage($stageId);
319 
320  if ($stageRecord === null) {
321  throw new \InvalidArgumentException(
322  $this->‪getLanguageService()->sL('LLL:EXT:workspaces/Resources/Private/Language/locallang.xlf:error.stageId.integer'),
323  1476044776
324  );
325  }
326 
327  $recipients = [];
328  $finalRecipients = [];
329  $backendUserIds = $stageRecord->getAllRecipients();
330  foreach ($uidOfRecipients as $userUid) {
331  // Ensure that only configured backend users are considered
332  if (!in_array($userUid, $backendUserIds)) {
333  continue;
334  }
335  $beUserRecord = BackendUtility::getRecord('be_users', (int)$userUid);
336  if (is_array($beUserRecord) && $beUserRecord['email'] !== '') {
337  $recipients[$beUserRecord['email']] = [
338  'email' => $beUserRecord['email'],
339  'lang' => $beUserRecord['lang'],
340  ];
341  }
342  }
343 
344  if ($stageRecord->hasPreselection() && !$stageRecord->isPreselectionChangeable()) {
345  $preselectedBackendUsers = $this->stageService->getBackendUsers(
346  implode(',', $this->stageService->getPreselectedRecipients($stageRecord))
347  );
348 
349  foreach ($preselectedBackendUsers as $preselectedBackendUser) {
350  if (empty($preselectedBackendUser['email']) || !GeneralUtility::validEmail($preselectedBackendUser['email'])) {
351  continue;
352  }
353  if (!isset($recipients[$preselectedBackendUser['email']])) {
354  $uc = (!empty($preselectedBackendUser['uc']) ? unserialize($preselectedBackendUser['uc'], ['allowed_classes' => false]) : []);
355  $recipients[$preselectedBackendUser['email']] = [
356  'email' => $preselectedBackendUser['email'],
357  'lang' => $uc['lang'] ?? $preselectedBackendUser['lang'],
358  ];
359  }
360  }
361  }
362 
363  if ($additionalRecipients !== '') {
364  $emails = ‪GeneralUtility::trimExplode(LF, $additionalRecipients, true);
365  $additionalRecipients = [];
366  foreach ($emails as $email) {
367  $additionalRecipients[$email] = ['email' => $email];
368  }
369  } else {
370  $additionalRecipients = [];
371  }
372  // We merge $recipients on top of $additionalRecipients because $recipients
373  // possibly is more complete with a user language. Furthermore, the list of
374  // recipients is automatically unique since we indexed $additionalRecipients
375  // and $recipients with the email address
376  $allRecipients = array_merge($additionalRecipients, $recipients);
377  foreach ($allRecipients as $email => $recipientInformation) {
378  if (GeneralUtility::validEmail((string)$email)) {
379  $finalRecipients[] = $recipientInformation;
380  }
381  }
382  return $finalRecipients;
383  }
384 
391  public function ‪discardStagesFromPage($pageId)
392  {
393  $cmdMapArray = [];
394  $workspaceItemsArray = $this->workspaceService->selectVersionsInWorkspace(
395  $this->stageService->getWorkspaceId(),
396  -99,
397  $pageId,
398  0,
399  'tables_modify'
400  );
401  foreach ($workspaceItemsArray as $tableName => $items) {
402  foreach ($items as $item) {
403  $cmdMapArray[$tableName][$item['uid']]['version']['action'] = 'clearWSID';
404  }
405  }
406  $this->‪processTcaCmd($cmdMapArray);
407  return [
408  'success' => true,
409  ];
410  }
411 
426  public function ‪sentCollectionToStage(\stdClass $parameters)
427  {
428  $cmdMapArray = [];
429  $comment = $parameters->comments;
430  $stageId = $parameters->stageId;
431  if (‪MathUtility::canBeInterpretedAsInteger($stageId) === false) {
432  throw new \InvalidArgumentException('Missing "stageId" in $parameters array.', 1319488194);
433  }
434  if (!is_object($parameters->affects) || empty($parameters->affects)) {
435  throw new \InvalidArgumentException('Missing "affected items" in $parameters array.', 1319488195);
436  }
437  $recipients = $this->‪getRecipientList((array)($parameters->recipients ?? []), (string)($parameters->additional ?? ''), $stageId);
438  foreach ($parameters->affects as $tableName => $items) {
439  foreach ($items as $item) {
440  // Publishing uses live id in command map
442  $cmdMapArray[$tableName][$item->t3ver_oid]['version']['action'] = 'publish';
443  $cmdMapArray[$tableName][$item->t3ver_oid]['version']['swapWith'] = $item->uid;
444  $cmdMapArray[$tableName][$item->t3ver_oid]['version']['comment'] = $comment;
445  $cmdMapArray[$tableName][$item->t3ver_oid]['version']['notificationAlternativeRecipients'] = $recipients;
446  } else {
447  // Setting stage uses version id in command map
448  $cmdMapArray[$tableName][$item->uid]['version']['action'] = 'setStage';
449  $cmdMapArray[$tableName][$item->uid]['version']['stageId'] = $stageId;
450  $cmdMapArray[$tableName][$item->uid]['version']['comment'] = $comment;
451  $cmdMapArray[$tableName][$item->uid]['version']['notificationAlternativeRecipients'] = $recipients;
452  }
453  }
454  }
455  $this->‪processTcaCmd($cmdMapArray);
456  return [
457  'success' => true,
458  // force refresh after publishing changes
459  'refreshLivePanel' => $parameters->stageId == -20,
460  ];
461  }
462 
469  protected function ‪processTcaCmd(array $cmdMapArray)
470  {
471  $result = [];
472 
473  if (empty($cmdMapArray)) {
474  $result['error'] = 'No commands given to be processed';
475  return $result;
476  }
477 
478  $dataHandler = GeneralUtility::makeInstance(DataHandler::class);
479  $dataHandler->start([], $cmdMapArray);
480  $dataHandler->process_cmdmap();
481 
482  if ($dataHandler->errorLog) {
483  $result['error'] = implode('<br/>', $dataHandler->errorLog);
484  }
485 
486  return $result;
487  }
488 
504  public function ‪sendToNextStageExecute(\stdClass $parameters)
505  {
506  $cmdArray = [];
507  $setStageId = (int)$parameters->affects->nextStage;
508  $comments = $parameters->comments;
509  $table = $parameters->affects->table;
510  $uid = $parameters->affects->uid;
511  $t3ver_oid = $parameters->affects->t3ver_oid;
512 
513  $recipients = $this->getRecipientList((array)($parameters->recipients ?? []), (string)($parameters->additional ?? ''), $setStageId);
514  if ($setStageId === ‪StagesService::STAGE_PUBLISH_EXECUTE_ID) {
515  $cmdArray[$table][$t3ver_oid]['version']['action'] = 'publish';
516  $cmdArray[$table][$t3ver_oid]['version']['swapWith'] = $uid;
517  $cmdArray[$table][$t3ver_oid]['version']['comment'] = $comments;
518  $cmdArray[$table][$t3ver_oid]['version']['notificationAlternativeRecipients'] = $recipients;
519  } else {
520  $cmdArray[$table][$uid]['version']['action'] = 'setStage';
521  $cmdArray[$table][$uid]['version']['stageId'] = $setStageId;
522  $cmdArray[$table][$uid]['version']['comment'] = $comments;
523  $cmdArray[$table][$uid]['version']['notificationAlternativeRecipients'] = $recipients;
524  }
525  $this->‪processTcaCmd($cmdArray);
526  $result = [
527  'success' => true,
528  ];
529 
530  return $result;
531  }
532 
547  public function ‪sendToPrevStageExecute(\stdClass $parameters)
548  {
549  $cmdArray = [];
550  $setStageId = $parameters->affects->nextStage;
551  $comments = $parameters->comments;
552  $table = $parameters->affects->table;
553  $uid = $parameters->affects->uid;
554 
555  $recipients = $this->‪getRecipientList((array)($parameters->recipients ?? []), (string)($parameters->additional ?? ''), $setStageId);
556  $cmdArray[$table][$uid]['version']['action'] = 'setStage';
557  $cmdArray[$table][$uid]['version']['stageId'] = $setStageId;
558  $cmdArray[$table][$uid]['version']['comment'] = $comments;
559  $cmdArray[$table][$uid]['version']['notificationAlternativeRecipients'] = $recipients;
560  $this->‪processTcaCmd($cmdArray);
561  $result = [
562  'success' => true,
563  ];
564 
565  return $result;
566  }
567 
589  public function ‪sendToSpecificStageExecute(\stdClass $parameters)
590  {
591  $cmdArray = [];
592  $setStageId = (int)$parameters->affects->nextStage;
593  $comments = $parameters->comments;
594  $elements = $parameters->affects->elements;
595  $recipients = $this->getRecipientList((array)($parameters->recipients ?? []), (string)($parameters->additional ?? ''), $setStageId);
596  foreach ($elements as $element) {
597  // Avoid any action on records that have already been published to live
598  $elementRecord = BackendUtility::getRecord($element->table, $element->uid);
599  if ((int)$elementRecord['t3ver_wsid'] === 0) {
600  continue;
601  }
602 
603  if ($setStageId === ‪StagesService::STAGE_PUBLISH_EXECUTE_ID) {
604  $cmdArray[$element->table][$element->t3ver_oid]['version']['action'] = 'publish';
605  $cmdArray[$element->table][$element->t3ver_oid]['version']['swapWith'] = $element->uid;
606  $cmdArray[$element->table][$element->t3ver_oid]['version']['comment'] = $comments;
607  $cmdArray[$element->table][$element->t3ver_oid]['version']['notificationAlternativeRecipients'] = $recipients;
608  } else {
609  $cmdArray[$element->table][$element->uid]['version']['action'] = 'setStage';
610  $cmdArray[$element->table][$element->uid]['version']['stageId'] = $setStageId;
611  $cmdArray[$element->table][$element->uid]['version']['comment'] = $comments;
612  $cmdArray[$element->table][$element->uid]['version']['notificationAlternativeRecipients'] = $recipients;
613  }
614  }
615  $this->‪processTcaCmd($cmdArray);
616  $result = [
617  'success' => true,
618  ];
619  return $result;
620  }
621 
628  protected function ‪getSentToStageWindow($nextStage)
629  {
630  if (!$nextStage instanceof StageRecord) {
631  $nextStage = ‪WorkspaceRecord::get($this->‪getCurrentWorkspace())->‪getStage($nextStage);
632  }
633 
634  $result = [];
635  // TODO: $nextStage might be null, error ignored in phpstan.neon
636  if ($nextStage->isDialogEnabled()) {
637  $result['sendMailTo'] = $this->‪getRecipientsOfStage($nextStage);
638  $result['additional'] = [
639  'type' => 'textarea',
640  'value' => '',
641  ];
642  }
643  $result['comments'] = [
644  'type' => 'textarea',
645  'value' => $nextStage->isInternal() ? '' : $nextStage->getDefaultComment(),
646  ];
647 
648  return $result;
649  }
650 
657  protected function ‪getRecipientsOfStage($stageRecord)
658  {
659  if (!$stageRecord instanceof StageRecord) {
660  $stageRecord = ‪WorkspaceRecord::get($this->‪getCurrentWorkspace())->‪getStage($stageRecord);
661  }
662 
663  $result = [];
664  $allRecipients = $this->stageService->getResponsibleBeUser($stageRecord);
665  $preselectedRecipients = $this->stageService->‪getPreselectedRecipients($stageRecord);
666  $isPreselectionChangeable = $stageRecord->isPreselectionChangeable();
667 
668  foreach ($allRecipients as $backendUserId => $backendUser) {
669  if (empty($backendUser['email']) || !GeneralUtility::validEmail($backendUser['email'])) {
670  continue;
671  }
672 
673  $name = (!empty($backendUser['realName']) ? $backendUser['realName'] : $backendUser['username']);
674  $checked = in_array($backendUserId, $preselectedRecipients);
675  $disabled = ($checked && !$isPreselectionChangeable);
676 
677  $result[] = [
678  'label' => sprintf('%s (%s)', $name, $backendUser['email']),
679  'value' => $backendUserId,
680  'name' => 'recipients-' . $backendUserId,
681  'checked' => $checked,
682  'disabled' => $disabled,
683  ];
684  }
685 
686  return $result;
687  }
688 
695  protected function ‪getDefaultCommentOfStage($stage)
696  {
697  $result = $this->stageService->getPropertyOfCurrentWorkspaceStage($stage, 'default_mailcomment');
698  return $result;
699  }
700 
707  public function ‪sendPageToPreviousStage($id)
708  {
709  $workspaceItemsArray = $this->workspaceService->selectVersionsInWorkspace(
710  $this->stageService->getWorkspaceId(),
711  -99,
712  $id,
713  0,
714  'tables_modify'
715  );
716  [$currentStage, $previousStage] = $this->stageService->getPreviousStageForElementCollection($workspaceItemsArray);
717  // get only the relevant items for processing
718  $workspaceItemsArray = $this->workspaceService->selectVersionsInWorkspace(
719  $this->stageService->getWorkspaceId(),
720  $currentStage['uid'],
721  $id,
722  0,
723  'tables_modify'
724  );
725  $stageFormFields = $this->‪getSentToStageWindow($previousStage['uid']);
726  $result = array_merge($stageFormFields, [
727  'title' => 'Status message: Page send to next stage - ID: ' . $id . ' - Next stage title: ' . $previousStage['title'],
728  'items' => $this->‪getSentToStageWindow($previousStage['uid']),
729  'affects' => $workspaceItemsArray,
730  'stageId' => $previousStage['uid'],
731  ]);
732  return $result;
733  }
734 
739  public function ‪sendPageToNextStage($id)
740  {
741  $workspaceItemsArray = $this->workspaceService->selectVersionsInWorkspace(
742  $this->stageService->getWorkspaceId(),
743  -99,
744  $id,
745  0,
746  'tables_modify'
747  );
748  [$currentStage, $nextStage] = $this->stageService->getNextStageForElementCollection($workspaceItemsArray);
749  // get only the relevant items for processing
750  $workspaceItemsArray = $this->workspaceService->selectVersionsInWorkspace(
751  $this->stageService->getWorkspaceId(),
752  $currentStage['uid'],
753  $id,
754  0,
755  'tables_modify'
756  );
757  $stageFormFields = $this->‪getSentToStageWindow($nextStage['uid']);
758  $result = array_merge($stageFormFields, [
759  'title' => 'Status message: Page send to next stage - ID: ' . $id . ' - Next stage title: ' . $nextStage['title'],
760  'affects' => $workspaceItemsArray,
761  'stageId' => $nextStage['uid'],
762  ]);
763  return $result;
764  }
765 
772  public function ‪updateStageChangeButtons($id)
773  {
774  // fetch the next and previous stage
775  $workspaceItemsArray = $this->workspaceService->selectVersionsInWorkspace(
776  $this->stageService->getWorkspaceId(),
777  -99,
778  $id,
779  0,
780  'tables_modify'
781  );
782  [, $nextStage] = $this->stageService->getNextStageForElementCollection($workspaceItemsArray);
783  [, $previousStage] = $this->stageService->getPreviousStageForElementCollection($workspaceItemsArray);
784 
785  $view = GeneralUtility::makeInstance(StandaloneView::class);
786  $extensionPath = ‪ExtensionManagementUtility::extPath('workspaces');
787  $view->setPartialRootPaths(['default' => $extensionPath . 'Resources/Private/Partials']);
788  $view->setTemplatePathAndFilename($extensionPath . 'Resources/Private/Templates/Preview/Ajax/StageButtons.html');
789  $request = $view->getRequest();
790  $request->setControllerExtensionName('workspaces');
791  $view->assignMultiple([
792  'enablePreviousStageButton' => is_array($previousStage) && !empty($previousStage),
793  'enableNextStageButton' => is_array($nextStage) && !empty($nextStage),
794  'enableDiscardStageButton' => (is_array($nextStage) && !empty($nextStage)) || (is_array($previousStage) && !empty($previousStage)),
795  'nextStage' => $nextStage['title'] ?? '',
796  'nextStageId' => $nextStage['uid'] ?? 0,
797  'prevStage' => $previousStage['title'] ?? '',
798  'prevStageId' => $previousStage['uid'] ?? 0,
799  ]);
800  $renderedView = $view->render();
801  return $renderedView;
802  }
803 
807  protected function ‪getBackendUser()
808  {
809  return ‪$GLOBALS['BE_USER'];
810  }
811 
815  protected function ‪getLanguageService()
816  {
817  return ‪$GLOBALS['LANG'];
818  }
819 
828  protected function ‪getErrorResponse($errorLabel, $errorCode = 0, $successFlagValue = false)
829  {
830  $localLangFile = 'LLL:EXT:workspaces/Resources/Private/Language/locallang.xlf';
831  $response = [
832  'error' => [
833  'code' => $errorCode,
834  'message' => $this->‪getLanguageService()->‪sL($localLangFile . ':' . $errorLabel),
835  ],
836  'success' => $successFlagValue,
837  ];
838  return $response;
839  }
840 
846  protected function ‪getCurrentWorkspace()
847  {
848  return $this->workspaceService->getCurrentWorkspace();
849  }
850 }
‪TYPO3\CMS\Core\DataHandling\DataHandler
Definition: DataHandler.php:86
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\getRecipientsOfStage
‪array getRecipientsOfStage($stageRecord)
Definition: ActionHandler.php:655
‪TYPO3\CMS\Core\Utility\GeneralUtility\trimExplode
‪static list< string > trimExplode($delim, $string, $removeEmptyValues=false, $limit=0)
Definition: GeneralUtility.php:999
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\sendToSpecificStageWindow
‪array sendToSpecificStageWindow($nextStageId, array $elements)
Definition: ActionHandler.php:289
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\viewSingleRecord
‪string viewSingleRecord($table, $uid)
Definition: ActionHandler.php:117
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\sendToPrevStageWindow
‪array sendToPrevStageWindow($uid, $table)
Definition: ActionHandler.php:249
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\getPublishCommands
‪array getPublishCommands(array $selection)
Definition: ActionHandler.php:155
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\sentCollectionToStage
‪array sentCollectionToStage(\stdClass $parameters)
Definition: ActionHandler.php:424
‪TYPO3\CMS\Core\Utility\MathUtility\canBeInterpretedAsInteger
‪static bool canBeInterpretedAsInteger($var)
Definition: MathUtility.php:74
‪TYPO3\CMS\Core\Authentication\AbstractUserAuthentication\writeUC
‪writeUC($variable='')
Definition: AbstractUserAuthentication.php:984
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\getBackendUser
‪BackendUserAuthentication getBackendUser()
Definition: ActionHandler.php:805
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\getSentToStageWindow
‪array getSentToStageWindow($nextStage)
Definition: ActionHandler.php:626
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\publishSingleRecord
‪publishSingleRecord($table, $t3ver_oid, $orig_uid)
Definition: ActionHandler.php:84
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\sendPageToNextStage
‪array sendPageToNextStage($id)
Definition: ActionHandler.php:737
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\saveColumnModel
‪saveColumnModel($model)
Definition: ActionHandler.php:189
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\getFlushCommands
‪array getFlushCommands(array $selection)
Definition: ActionHandler.php:173
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\getErrorResponse
‪array getErrorResponse($errorLabel, $errorCode=0, $successFlagValue=false)
Definition: ActionHandler.php:826
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\sendPageToPreviousStage
‪array sendPageToPreviousStage($id)
Definition: ActionHandler.php:705
‪TYPO3\CMS\Workspaces\Domain\Record\WorkspaceRecord
Definition: WorkspaceRecord.php:27
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\getLanguageService
‪LanguageService getLanguageService()
Definition: ActionHandler.php:813
‪TYPO3\CMS\Core\Localization\LanguageService\sL
‪string sL($input)
Definition: LanguageService.php:161
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\sendToNextStageExecute
‪array sendToNextStageExecute(\stdClass $parameters)
Definition: ActionHandler.php:502
‪TYPO3\CMS\Workspaces\Service\StagesService\STAGE_PUBLISH_EXECUTE_ID
‪const STAGE_PUBLISH_EXECUTE_ID
Definition: StagesService.php:35
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\discardStagesFromPage
‪array discardStagesFromPage($pageId)
Definition: ActionHandler.php:389
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\sendToNextStageWindow
‪array sendToNextStageWindow($uid, $table, $t3ver_oid)
Definition: ActionHandler.php:218
‪TYPO3\CMS\Workspaces\Domain\Record\StageRecord\getPreselectedRecipients
‪int[] getPreselectedRecipients()
Definition: StageRecord.php:340
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\generateWorkspacePreviewLink
‪string generateWorkspacePreviewLink($uid)
Definition: ActionHandler.php:60
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility
Definition: ExtensionManagementUtility.php:43
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\getDefaultCommentOfStage
‪string getDefaultCommentOfStage($stage)
Definition: ActionHandler.php:693
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\getCurrentWorkspace
‪int getCurrentWorkspace()
Definition: ActionHandler.php:844
‪TYPO3\CMS\Workspaces\Domain\Record\StageRecord
Definition: StageRecord.php:24
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\processTcaCmd
‪array processTcaCmd(array $cmdMapArray)
Definition: ActionHandler.php:467
‪TYPO3\CMS\Workspaces\Preview\PreviewUriBuilder
Definition: PreviewUriBuilder.php:46
‪TYPO3\CMS\Workspaces\Controller\Remote
Definition: ActionHandler.php:16
‪TYPO3\CMS\Core\Authentication\BackendUserAuthentication
Definition: BackendUserAuthentication.php:62
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\sendToSpecificStageExecute
‪array sendToSpecificStageExecute(\stdClass $parameters)
Definition: ActionHandler.php:587
‪TYPO3\CMS\Workspaces\Service\WorkspaceService
Definition: WorkspaceService.php:36
‪TYPO3\CMS\Workspaces\Service\StagesService
Definition: StagesService.php:32
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\$stageService
‪StagesService $stageService
Definition: ActionHandler.php:39
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\sendToPrevStageExecute
‪array sendToPrevStageExecute(\stdClass $parameters)
Definition: ActionHandler.php:545
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\updateStageChangeButtons
‪string updateStageChangeButtons($id)
Definition: ActionHandler.php:770
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\loadColumnModel
‪loadColumnModel()
Definition: ActionHandler.php:202
‪TYPO3\CMS\Fluid\View\StandaloneView
Definition: StandaloneView.php:31
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler
Definition: ActionHandler.php:36
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\getRecipientList
‪array getRecipientList(array $uidOfRecipients, $additionalRecipients, $stageId)
Definition: ActionHandler.php:314
‪TYPO3\CMS\Core\Utility\MathUtility
Definition: MathUtility.php:22
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility\extPath
‪static string extPath($key, $script='')
Definition: ExtensionManagementUtility.php:142
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\generateWorkspacePreviewLinksForAllLanguages
‪array generateWorkspacePreviewLinksForAllLanguages($uid)
Definition: ActionHandler.php:71
‪TYPO3\CMS\Core\Localization\LanguageService
Definition: LanguageService.php:42
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\__construct
‪__construct()
Definition: ActionHandler.php:48
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:50
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\executeSelectionAction
‪array executeSelectionAction($parameter)
Definition: ActionHandler.php:128
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\$workspaceService
‪WorkspaceService $workspaceService
Definition: ActionHandler.php:43
‪TYPO3\CMS\Workspaces\Domain\Record\WorkspaceRecord\get
‪static WorkspaceRecord get($uid, array $record=null)
Definition: WorkspaceRecord.php:70
‪TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler\deleteSingleRecord
‪deleteSingleRecord($table, $uid)
Definition: ActionHandler.php:101
‪TYPO3\CMS\Workspaces\Domain\Record\WorkspaceRecord\getStage
‪StageRecord null getStage($stageId)
Definition: WorkspaceRecord.php:146