‪TYPO3CMS  10.4
RemoteServer.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 
29 use ‪TYPO3\CMS\Core\SysLog\Action\Database as DatabaseAction;
42 
48 {
52  protected ‪$gridDataService;
53 
57  protected ‪$stagesService;
58 
62  protected ‪$workspaceService;
63 
67  protected ‪$differenceHandler;
68 
69  public function ‪__construct()
70  {
71  $this->workspaceService = GeneralUtility::makeInstance(WorkspaceService::class);
72  $this->gridDataService = GeneralUtility::makeInstance(GridDataService::class);
73  $this->stagesService = GeneralUtility::makeInstance(StagesService::class);
74  }
75 
82  public function ‪checkIntegrity(\stdClass $parameters)
83  {
84  $integrity = $this->‪createIntegrityService($this->‪getAffectedElements($parameters));
85  $integrity->check();
86  $response = [
87  'result' => $integrity->getStatusRepresentation()
88  ];
89  return $response;
90  }
91 
98  public function ‪getWorkspaceInfos($parameter)
99  {
100  // To avoid too much work we use -1 to indicate that every page is relevant
101  $pageId = $parameter->id > 0 ? $parameter->id : -1;
102  if (!isset($parameter->language) || !‪MathUtility::canBeInterpretedAsInteger($parameter->language)) {
103  $parameter->language = null;
104  }
105  $versions = $this->workspaceService->selectVersionsInWorkspace($this->‪getCurrentWorkspace(), 0, -99, $pageId, $parameter->depth, 'tables_select', $parameter->language);
106  $data = $this->gridDataService->generateGridListFromVersions($versions, $parameter, $this->‪getCurrentWorkspace());
107  return $data;
108  }
109 
115  public function ‪getStageActions()
116  {
117  $stages = $this->stagesService->getStagesForWSUser();
118  $data = [
119  'total' => count($stages),
120  'data' => $stages
121  ];
122  return $data;
123  }
124 
131  public function ‪getRowDetails($parameter)
132  {
133  $diffReturnArray = [];
134  $liveReturnArray = [];
135  $diffUtility = $this->‪getDifferenceHandler();
136  $liveRecord = (array)‪BackendUtility::getRecord($parameter->table, $parameter->t3ver_oid);
137  $versionRecord = (array)‪BackendUtility::getRecord($parameter->table, $parameter->uid);
138  $versionState = ‪VersionState::cast((int)($versionRecord['t3ver_state'] ?? 0));
139  $iconFactory = GeneralUtility::makeInstance(IconFactory::class);
140  $icon_Live = $iconFactory->getIconForRecord($parameter->table, $liveRecord, ‪Icon::SIZE_SMALL)->render();
141  $icon_Workspace = $iconFactory->getIconForRecord($parameter->table, $versionRecord, ‪Icon::SIZE_SMALL)->render();
142  $stagePosition = $this->stagesService->getPositionOfCurrentStage($parameter->stage);
143  $fieldsOfRecords = array_keys($liveRecord);
144  $isNewOrDeletePlaceholder = $versionState->equals(‪VersionState::NEW_PLACEHOLDER_VERSION) || $versionState->equals(‪VersionState::DELETE_PLACEHOLDER);
145  $suitableFields = ($isNewOrDeletePlaceholder && ($parameter->filterFields ?? false)) ? array_flip($this->‪getSuitableFields($parameter->table, $parameter->t3ver_oid)) : [];
146  foreach ($fieldsOfRecords as $fieldName) {
147  if (
148  empty(‪$GLOBALS['TCA'][$parameter->table]['columns'][$fieldName]['config'])
149  ) {
150  continue;
151  }
152  // Disable internal fields
153  if ((‪$GLOBALS['TCA'][$parameter->table]['ctrl']['transOrigDiffSourceField'] ?? '') === $fieldName) {
154  continue;
155  }
156  if ((‪$GLOBALS['TCA'][$parameter->table]['ctrl']['origUid'] ?? '') === $fieldName) {
157  continue;
158  }
159  // Get the field's label. If not available, use the field name
160  $fieldTitle = $this->‪getLanguageService()->‪sL(‪BackendUtility::getItemLabel($parameter->table, $fieldName));
161  if (empty($fieldTitle)) {
162  $fieldTitle = $fieldName;
163  }
164  // Gets the TCA configuration for the current field
165  $configuration = ‪$GLOBALS['TCA'][$parameter->table]['columns'][$fieldName]['config'];
166  // check for exclude fields
167  if ($this->‪getBackendUser()->isAdmin() || ‪$GLOBALS['TCA'][$parameter->table]['columns'][$fieldName]['exclude'] == 0 || GeneralUtility::inList($this->getBackendUser()->groupData['non_exclude_fields'], $parameter->table . ':' . $fieldName)) {
168  // call diff class only if there is a difference
169  if ($configuration['type'] === 'inline' && $configuration['foreign_table'] === 'sys_file_reference') {
170  $useThumbnails = false;
171  if (!empty($configuration['overrideChildTca']['columns']['uid_local']['config']['appearance']['elementBrowserAllowed']) && !empty(‪$GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'])) {
172  $fileExtensions = ‪GeneralUtility::trimExplode(',', ‪$GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'], true);
173  $allowedExtensions = ‪GeneralUtility::trimExplode(',', $configuration['overrideChildTca']['columns']['uid_local']['config']['appearance']['elementBrowserAllowed'], true);
174  $differentExtensions = array_diff($allowedExtensions, $fileExtensions);
175  $useThumbnails = empty($differentExtensions);
176  }
177 
178  $liveFileReferences = (array)‪BackendUtility::resolveFileReferences(
179  $parameter->table,
180  $fieldName,
181  $liveRecord,
182  0
183  );
184  $versionFileReferences = (array)‪BackendUtility::resolveFileReferences(
185  $parameter->table,
186  $fieldName,
187  $versionRecord,
188  $this->getCurrentWorkspace()
189  );
190  $fileReferenceDifferences = $this->prepareFileReferenceDifferences(
191  $liveFileReferences,
192  $versionFileReferences,
193  $useThumbnails
194  );
195 
196  if ($fileReferenceDifferences === null) {
197  continue;
198  }
199 
200  $diffReturnArray[] = [
201  'field' => $fieldName,
202  'label' => $fieldTitle,
203  'content' => $fileReferenceDifferences['differences']
204  ];
205  $liveReturnArray[] = [
206  'field' => $fieldName,
207  'label' => $fieldTitle,
208  'content' => $fileReferenceDifferences['live']
209  ];
210  } elseif ($isNewOrDeletePlaceholder && isset($suitableFields[$fieldName])) {
211  // If this is a new or delete placeholder, add diff view for all appropriate fields
212  $newOrDeleteRecord[$fieldName] = ‪BackendUtility::getProcessedValue(
213  $parameter->table,
214  $fieldName,
215  $liveRecord[$fieldName], // Both (live and version) values are the same
216  0,
217  true,
218  false,
219  $liveRecord['uid'] // Relations of new/delete placeholder do always contain the live uid
220  ) ?? '';
221 
222  // Don't add empty fields
223  if ($newOrDeleteRecord[$fieldName] === '') {
224  continue;
225  }
226 
227  $diffReturnArray[] = [
228  'field' => $fieldName,
229  'label' => $fieldTitle,
230  'content' => $versionState->equals(‪VersionState::NEW_PLACEHOLDER_VERSION)
231  ? $diffUtility->makeDiffDisplay('', $newOrDeleteRecord[$fieldName])
232  : $diffUtility->makeDiffDisplay($newOrDeleteRecord[$fieldName], '')
233  ];
234 
235  // Generally not needed by Core, but let's make it available for further processing in hooks
236  $liveReturnArray[] = [
237  'field' => $fieldName,
238  'label' => $fieldTitle,
239  'content' => $newOrDeleteRecord[$fieldName]
240  ];
241  } elseif ((string)$liveRecord[$fieldName] !== (string)$versionRecord[$fieldName]) {
242  // Select the human readable values before diff
243  $liveRecord[$fieldName] = ‪BackendUtility::getProcessedValue(
244  $parameter->table,
245  $fieldName,
246  $liveRecord[$fieldName],
247  0,
248  true,
249  false,
250  $liveRecord['uid']
251  );
252  $versionRecord[$fieldName] = ‪BackendUtility::getProcessedValue(
253  $parameter->table,
254  $fieldName,
255  $versionRecord[$fieldName],
256  0,
257  true,
258  false,
259  $versionRecord['uid']
260  );
261 
262  $diffReturnArray[] = [
263  'field' => $fieldName,
264  'label' => $fieldTitle,
265  'content' => $diffUtility->makeDiffDisplay($liveRecord[$fieldName], $versionRecord[$fieldName])
266  ];
267  $liveReturnArray[] = [
268  'field' => $fieldName,
269  'label' => $fieldTitle,
270  'content' => $liveRecord[$fieldName]
271  ];
272  }
273  }
274  }
275  // Hook for modifying the difference and live arrays
276  // (this may be used by custom or dynamically-defined fields)
277  foreach (‪$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['workspaces']['modifyDifferenceArray'] ?? [] as $className) {
278  $hookObject = GeneralUtility::makeInstance($className);
279  if (method_exists($hookObject, 'modifyDifferenceArray')) {
280  $hookObject->modifyDifferenceArray($parameter, $diffReturnArray, $liveReturnArray, $diffUtility);
281  }
282  }
283  $commentsForRecord = $this->‪getCommentsForRecord($parameter->uid, $parameter->table);
284 
285  $historyService = GeneralUtility::makeInstance(HistoryService::class);
286  $history = $historyService->getHistory($parameter->table, $parameter->t3ver_oid);
287 
288  if ($this->stagesService->isPrevStageAllowedForUser($parameter->stage)) {
289  $prevStage = $this->stagesService->getPrevStage($parameter->stage);
290  if (isset($prevStage[0])) {
291  $prevStage = current($prevStage);
292  }
293  }
294  if ($this->stagesService->isNextStageAllowedForUser($parameter->stage)) {
295  $nextStage = $this->stagesService->getNextStage($parameter->stage);
296  if (isset($nextStage[0])) {
297  $nextStage = current($nextStage);
298  }
299  }
300 
301  return [
302  'total' => 1,
303  'data' => [
304  [
305  // these parts contain HTML (don't escape)
306  'diff' => $diffReturnArray,
307  'live_record' => $liveReturnArray,
308  'icon_Live' => $icon_Live,
309  'icon_Workspace' => $icon_Workspace,
310  // this part is already escaped in getCommentsForRecord()
311  'comments' => $commentsForRecord,
312  // escape/sanitize the others
313  'path_Live' => htmlspecialchars(‪BackendUtility::getRecordPath($liveRecord['pid'], '', 999)),
314  'label_Stage' => htmlspecialchars($this->stagesService->getStageTitle($parameter->stage)),
315  'label_PrevStage' => $prevStage ?? false,
316  'label_NextStage' => $nextStage ?? false,
317  'stage_position' => (int)$stagePosition['position'],
318  'stage_count' => (int)$stagePosition['count'],
319  'parent' => [
320  'table' => htmlspecialchars($parameter->table),
321  'uid' => (int)$parameter->uid
322  ],
323  'history' => [
324  'data' => $history,
325  'total' => count($history)
326  ]
327  ]
328  ]
329  ];
330  }
331 
340  protected function prepareFileReferenceDifferences(array $liveFileReferences, array $versionFileReferences, $useThumbnails = false)
341  {
342  $randomValue = ‪StringUtility::getUniqueId('file');
343 
344  $liveValues = [];
345  $versionValues = [];
346  $candidates = [];
347  $substitutes = [];
348 
349  // Process live references
350  foreach ($liveFileReferences as $identifier => $liveFileReference) {
351  $identifierWithRandomValue = $randomValue . '__' . $liveFileReference->getUid() . '__' . $randomValue;
352  $candidates[$identifierWithRandomValue] = $liveFileReference;
353  $liveValues[] = $identifierWithRandomValue;
354  }
355 
356  // Process version references
357  foreach ($versionFileReferences as $identifier => $versionFileReference) {
358  $identifierWithRandomValue = $randomValue . '__' . $versionFileReference->getUid() . '__' . $randomValue;
359  $candidates[$identifierWithRandomValue] = $versionFileReference;
360  $versionValues[] = $identifierWithRandomValue;
361  }
362 
363  // Combine values and surround by spaces
364  // (to reduce the chunks Diff will find)
365  $liveInformation = ' ' . implode(' ', $liveValues) . ' ';
366  $versionInformation = ' ' . implode(' ', $versionValues) . ' ';
367 
368  // Return if information has not changed
369  if ($liveInformation === $versionInformation) {
370  return null;
371  }
372 
377  foreach ($candidates as $identifierWithRandomValue => $fileReference) {
378  if ($useThumbnails) {
379  $thumbnailFile = $fileReference->getOriginalFile()->process(
381  ['width' => 40, 'height' => 40]
382  );
383  $thumbnailMarkup = '<img src="' . $thumbnailFile->getPublicUrl(true) . '" />';
384  $substitutes[$identifierWithRandomValue] = $thumbnailMarkup;
385  } else {
386  $substitutes[$identifierWithRandomValue] = $fileReference->getPublicUrl();
387  }
388  }
389 
390  $differences = $this->‪getDifferenceHandler()->‪makeDiffDisplay($liveInformation, $versionInformation);
391  $liveInformation = str_replace(array_keys($substitutes), array_values($substitutes), trim($liveInformation));
392  $differences = str_replace(array_keys($substitutes), array_values($substitutes), trim($differences));
393 
394  return [
395  'live' => $liveInformation,
396  'differences' => $differences
397  ];
398  }
399 
407  public function ‪getCommentsForRecord($uid, $table)
408  {
409  $sysLogReturnArray = [];
410  $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_log');
411 
412  $result = $queryBuilder
413  ->select('log_data', 'tstamp', 'userid')
414  ->from('sys_log')
415  ->where(
416  $queryBuilder->expr()->eq(
417  'action',
418  $queryBuilder->createNamedParameter(DatabaseAction::UPDATE, \PDO::PARAM_INT)
419  ),
420  $queryBuilder->expr()->eq(
421  'details_nr',
422  $queryBuilder->createNamedParameter(30, \PDO::PARAM_INT)
423  ),
424  $queryBuilder->expr()->eq(
425  'tablename',
426  $queryBuilder->createNamedParameter($table, \PDO::PARAM_STR)
427  ),
428  $queryBuilder->expr()->eq(
429  'recuid',
430  $queryBuilder->createNamedParameter($uid, \PDO::PARAM_INT)
431  )
432  )
433  ->orderBy('tstamp', 'DESC')
434  ->execute();
435 
437  $avatar = GeneralUtility::makeInstance(Avatar::class);
438 
439  while ($sysLogRow = $result->fetch()) {
440  $sysLogEntry = [];
441  $data = unserialize($sysLogRow['log_data']);
442  $beUserRecord = ‪BackendUtility::getRecord('be_users', $sysLogRow['userid']);
443  $sysLogEntry['stage_title'] = htmlspecialchars($this->stagesService->getStageTitle($data['stage']));
444  $sysLogEntry['user_uid'] = (int)$sysLogRow['userid'];
445  $sysLogEntry['user_username'] = is_array($beUserRecord) ? htmlspecialchars($beUserRecord['username']) : '';
446  $sysLogEntry['tstamp'] = htmlspecialchars(‪BackendUtility::datetime($sysLogRow['tstamp']));
447  $sysLogEntry['user_comment'] = nl2br(htmlspecialchars($data['comment']));
448  $sysLogEntry['user_avatar'] = $avatar->render($beUserRecord);
449  $sysLogReturnArray[] = $sysLogEntry;
450  }
451  return $sysLogReturnArray;
452  }
453 
460  public function ‪getSystemLanguages(\stdClass $parameters)
461  {
462  $iconFactory = GeneralUtility::makeInstance(IconFactory::class);
463  $systemLanguages = [
464  [
465  'uid' => 'all',
466  'title' => ‪LocalizationUtility::translate('language.allLanguages', 'workspaces'),
467  'icon' => $iconFactory->getIcon('empty-empty', ‪Icon::SIZE_SMALL)->render()
468  ]
469  ];
470  foreach ($this->gridDataService->getSystemLanguages($parameters->pageUid ?? 0) as $id => $systemLanguage) {
471  if ($id < 0) {
472  continue;
473  }
474  $systemLanguages[] = [
475  'uid' => $id,
476  'title' => htmlspecialchars($systemLanguage['title']),
477  'icon' => $iconFactory->getIcon($systemLanguage['flagIcon'], ‪Icon::SIZE_SMALL)->render()
478  ];
479  }
480  $result = [
481  'total' => count($systemLanguages),
482  'data' => $systemLanguages
483  ];
484  return $result;
485  }
486 
490  protected function ‪getBackendUser()
491  {
492  return ‪$GLOBALS['BE_USER'];
493  }
494 
498  protected function ‪getLanguageService()
499  {
500  return ‪$GLOBALS['LANG'];
501  }
502 
508  protected function ‪getDifferenceHandler()
509  {
510  if (!isset($this->differenceHandler)) {
511  $this->differenceHandler = GeneralUtility::makeInstance(DiffUtility::class);
512  $this->differenceHandler->stripTags = false;
513  }
515  }
516 
525  protected function ‪createIntegrityService(array $affectedElements)
526  {
527  $integrityService = GeneralUtility::makeInstance(IntegrityService::class);
528  $integrityService->setAffectedElements($affectedElements);
529  return $integrityService;
530  }
531 
541  protected function ‪getAffectedElements(\stdClass $parameters)
542  {
543  $affectedElements = [];
544  if ($parameters->type === 'selection') {
545  foreach ((array)$parameters->selection as $element) {
546  $affectedElements[] = ‪CombinedRecord::create($element->table, $element->liveId, $element->versionId);
547  }
548  } elseif ($parameters->type === 'all') {
549  $versions = $this->workspaceService->selectVersionsInWorkspace($this->‪getCurrentWorkspace(), 0, -99, -1, 0, 'tables_select', $this->‪validateLanguageParameter($parameters));
550  foreach ($versions as $table => $tableElements) {
551  foreach ($tableElements as $element) {
552  $affectedElement = ‪CombinedRecord::create($table, $element['t3ver_oid'], $element['uid']);
553  $affectedElement->getVersionRecord()->setRow($element);
554  $affectedElements[] = $affectedElement;
555  }
556  }
557  }
558  return $affectedElements;
559  }
560 
568  protected function ‪validateLanguageParameter(\stdClass $parameters)
569  {
570  $language = null;
571  if (isset($parameters->language) && ‪MathUtility::canBeInterpretedAsInteger($parameters->language)) {
572  $language = $parameters->language;
573  }
574  return $language;
575  }
576 
582  protected function ‪getCurrentWorkspace()
583  {
584  return $this->workspaceService->getCurrentWorkspace();
585  }
586 
594  protected function ‪getSuitableFields(string $table, int $uid): array
595  {
596  $formDataCompiler = GeneralUtility::makeInstance(
597  FormDataCompiler::class,
598  GeneralUtility::makeInstance(TcaDatabaseRecord::class)
599  );
600 
601  try {
602  $result = $formDataCompiler->compile(['command' => 'edit', 'tableName' => $table, 'vanillaUid' => $uid]);
603  $fieldList = array_unique(array_values($result['columnsToProcess']));
604  } catch (\Exception $exception) {
605  $fieldList = [];
606  }
607 
608  // Skip sys_file_reference since it contains fields like "tablenames" in searchFields
609  $searchFields = $table !== 'sys_file_reference'
610  ? ‪GeneralUtility::trimExplode(',', (string)(‪$GLOBALS['TCA'][$table]['ctrl']['searchFields'] ?? ''))
611  : [];
612 
613  return array_unique(array_merge($fieldList, $searchFields));
614  }
615 }
‪TYPO3\CMS\Core\Utility\DiffUtility
Definition: DiffUtility.php:25
‪TYPO3\CMS\Core\Imaging\Icon\SIZE_SMALL
‪const SIZE_SMALL
Definition: Icon.php:30
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\getCurrentWorkspace
‪int getCurrentWorkspace()
Definition: RemoteServer.php:578
‪TYPO3\CMS\Core\Resource\ProcessedFile\CONTEXT_IMAGEPREVIEW
‪const CONTEXT_IMAGEPREVIEW
Definition: ProcessedFile.php:52
‪TYPO3\CMS\Core\Utility\MathUtility\canBeInterpretedAsInteger
‪static bool canBeInterpretedAsInteger($var)
Definition: MathUtility.php:74
‪TYPO3\CMS\Workspaces\Domain\Model\CombinedRecord
Definition: CombinedRecord.php:24
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\$workspaceService
‪WorkspaceService $workspaceService
Definition: RemoteServer.php:59
‪TYPO3\CMS\Backend\Utility\BackendUtility\resolveFileReferences
‪static TYPO3 CMS Core Resource FileReference[] null resolveFileReferences($tableName, $fieldName, $element, $workspaceId=null)
Definition: BackendUtility.php:1066
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\validateLanguageParameter
‪int null validateLanguageParameter(\stdClass $parameters)
Definition: RemoteServer.php:564
‪TYPO3\CMS\Extbase\Utility\LocalizationUtility
Definition: LocalizationUtility.php:33
‪TYPO3\CMS\Backend\Utility\BackendUtility\datetime
‪static string datetime($value)
Definition: BackendUtility.php:989
‪TYPO3\CMS\Core\Imaging\Icon
Definition: Icon.php:26
‪TYPO3\CMS\Backend\Backend\Avatar\Avatar
Definition: Avatar.php:33
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\$gridDataService
‪GridDataService $gridDataService
Definition: RemoteServer.php:51
‪TYPO3\CMS\Core\Resource\FileReference
Definition: FileReference.php:33
‪TYPO3\CMS\Backend\Utility\BackendUtility\getItemLabel
‪static string getItemLabel($table, $col)
Definition: BackendUtility.php:1521
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\createIntegrityService
‪IntegrityService createIntegrityService(array $affectedElements)
Definition: RemoteServer.php:521
‪TYPO3\CMS\Workspaces\Domain\Model\CombinedRecord\create
‪static CombinedRecord create($table, $liveId, $versionId)
Definition: CombinedRecord.php:45
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\__construct
‪__construct()
Definition: RemoteServer.php:65
‪TYPO3\CMS\Core\SysLog\Action\Database
Definition: Database.php:24
‪TYPO3\CMS\Core\Imaging\IconFactory
Definition: IconFactory.php:33
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\getSystemLanguages
‪array getSystemLanguages(\stdClass $parameters)
Definition: RemoteServer.php:456
‪TYPO3\CMS\Core\Versioning\VersionState\DELETE_PLACEHOLDER
‪const DELETE_PLACEHOLDER
Definition: VersionState.php:55
‪TYPO3\CMS\Core\Localization\LanguageService\sL
‪string sL($input)
Definition: LanguageService.php:194
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\getBackendUser
‪BackendUserAuthentication getBackendUser()
Definition: RemoteServer.php:486
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\getWorkspaceInfos
‪array getWorkspaceInfos($parameter)
Definition: RemoteServer.php:94
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\getSuitableFields
‪array getSuitableFields(string $table, int $uid)
Definition: RemoteServer.php:590
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\getCommentsForRecord
‪array getCommentsForRecord($uid, $table)
Definition: RemoteServer.php:403
‪TYPO3\CMS\Core\Type\Enumeration\cast
‪static static cast($value)
Definition: Enumeration.php:186
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer
Definition: RemoteServer.php:48
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\getRowDetails
‪array getRowDetails($parameter)
Definition: RemoteServer.php:127
‪TYPO3\CMS\Workspaces\Service\IntegrityService
Definition: IntegrityService.php:27
‪TYPO3\CMS\Extbase\Utility\LocalizationUtility\translate
‪static string null translate(string $key, ?string $extensionName=null, array $arguments=null, string $languageKey=null, array $alternativeLanguageKeys=null)
Definition: LocalizationUtility.php:67
‪TYPO3\CMS\Workspaces\Controller\Remote
Definition: ActionHandler.php:16
‪TYPO3\CMS\Core\Authentication\BackendUserAuthentication
Definition: BackendUserAuthentication.php:62
‪TYPO3\CMS\Workspaces\Service\HistoryService
Definition: HistoryService.php:30
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\getAffectedElements
‪array getAffectedElements(\stdClass $parameters)
Definition: RemoteServer.php:537
‪TYPO3\CMS\Backend\Utility\BackendUtility
Definition: BackendUtility.php:75
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\getLanguageService
‪LanguageService getLanguageService()
Definition: RemoteServer.php:494
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\checkIntegrity
‪array checkIntegrity(\stdClass $parameters)
Definition: RemoteServer.php:78
‪TYPO3\CMS\Workspaces\Service\WorkspaceService
Definition: WorkspaceService.php:36
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\getStageActions
‪array getStageActions()
Definition: RemoteServer.php:111
‪TYPO3\CMS\Backend\Utility\BackendUtility\getRecord
‪static array null getRecord($table, $uid, $fields=' *', $where='', $useDeleteClause=true)
Definition: BackendUtility.php:95
‪TYPO3\CMS\Core\Utility\DiffUtility\makeDiffDisplay
‪string makeDiffDisplay($str1, $str2)
Definition: DiffUtility.php:39
‪TYPO3\CMS\Workspaces\Service\StagesService
Definition: StagesService.php:33
‪TYPO3\CMS\Core\Versioning\VersionState
Definition: VersionState.php:24
‪TYPO3\CMS\Core\Utility\GeneralUtility\trimExplode
‪static string[] trimExplode($delim, $string, $removeEmptyValues=false, $limit=0)
Definition: GeneralUtility.php:1059
‪TYPO3\CMS\Core\Resource\ProcessedFile
Definition: ProcessedFile.php:44
‪TYPO3\CMS\Core\Versioning\VersionState\NEW_PLACEHOLDER_VERSION
‪const NEW_PLACEHOLDER_VERSION
Definition: VersionState.php:33
‪TYPO3\CMS\Backend\Utility\BackendUtility\getProcessedValue
‪static string null getProcessedValue( $table, $col, $value, $fixed_lgd_chars=0, $defaultPassthrough=false, $noRecordLookup=false, $uid=0, $forceResult=true, $pid=0)
Definition: BackendUtility.php:1664
‪TYPO3\CMS\Core\Utility\StringUtility\getUniqueId
‪static string getUniqueId($prefix='')
Definition: StringUtility.php:92
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:5
‪TYPO3\CMS\Core\Utility\MathUtility
Definition: MathUtility.php:22
‪TYPO3\CMS\Core\Localization\LanguageService
Definition: LanguageService.php:42
‪TYPO3\CMS\Core\Database\ConnectionPool
Definition: ConnectionPool.php:46
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\$differenceHandler
‪DiffUtility $differenceHandler
Definition: RemoteServer.php:63
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:46
‪TYPO3\CMS\Backend\Utility\BackendUtility\getRecordPath
‪static mixed getRecordPath($uid, $clause, $titleLimit, $fullTitleLimit=0)
Definition: BackendUtility.php:546
‪TYPO3\CMS\Backend\Form\FormDataCompiler
Definition: FormDataCompiler.php:25
‪TYPO3\CMS\Backend\Form\FormDataGroup\TcaDatabaseRecord
Definition: TcaDatabaseRecord.php:25
‪TYPO3\CMS\Core\Utility\StringUtility
Definition: StringUtility.php:22
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\getDifferenceHandler
‪DiffUtility getDifferenceHandler()
Definition: RemoteServer.php:504
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\$stagesService
‪StagesService $stagesService
Definition: RemoteServer.php:55
‪TYPO3\CMS\Workspaces\Service\GridDataService
Definition: GridDataService.php:42