‪TYPO3CMS  9.5
RemoteServer.php
Go to the documentation of this file.
1 <?php
3 
4 /*
5  * This file is part of the TYPO3 CMS project.
6  *
7  * It is free software; you can redistribute it and/or modify it under
8  * the terms of the GNU General Public License, either version 2
9  * of the License, or any later version.
10  *
11  * For the full copyright and license information, please read the
12  * LICENSE.txt file that was distributed with this source code.
13  *
14  * The TYPO3 project - inspiring people to share!
15  */
16 
37 
43 {
47  protected ‪$gridDataService;
48 
52  protected ‪$stagesService;
53 
57  protected ‪$workspaceService;
58 
62  protected ‪$differenceHandler;
63 
64  public function ‪__construct()
65  {
66  $this->workspaceService = GeneralUtility::makeInstance(WorkspaceService::class);
67  $this->gridDataService = GeneralUtility::makeInstance(GridDataService::class);
68  $this->stagesService = GeneralUtility::makeInstance(StagesService::class);
69  }
70 
77  public function ‪checkIntegrity(\stdClass $parameters)
78  {
79  $integrity = $this->‪createIntegrityService($this->‪getAffectedElements($parameters));
80  $integrity->check();
81  $response = [
82  'result' => $integrity->getStatusRepresentation()
83  ];
84  return $response;
85  }
86 
93  public function ‪getWorkspaceInfos($parameter)
94  {
95  // To avoid too much work we use -1 to indicate that every page is relevant
96  $pageId = $parameter->id > 0 ? $parameter->id : -1;
97  if (!isset($parameter->language) || !‪MathUtility::canBeInterpretedAsInteger($parameter->language)) {
98  $parameter->language = null;
99  }
100  $versions = $this->workspaceService->selectVersionsInWorkspace($this->‪getCurrentWorkspace(), 0, -99, $pageId, $parameter->depth, 'tables_select', $parameter->language);
101  $data = $this->gridDataService->generateGridListFromVersions($versions, $parameter, $this->‪getCurrentWorkspace());
102  return $data;
103  }
104 
110  public function ‪getStageActions()
111  {
112  $currentWorkspace = $this->‪getCurrentWorkspace();
113  $stages = [];
114  if ($currentWorkspace != ‪WorkspaceService::SELECT_ALL_WORKSPACES) {
115  $stages = $this->stagesService->getStagesForWSUser();
116  }
117  $data = [
118  'total' => count($stages),
119  'data' => $stages
120  ];
121  return $data;
122  }
123 
130  public function ‪getRowDetails($parameter)
131  {
132  $diffReturnArray = [];
133  $liveReturnArray = [];
134  $diffUtility = $this->‪getDifferenceHandler();
135  $parseObj = GeneralUtility::makeInstance(RteHtmlParser::class);
136  $liveRecord = ‪BackendUtility::getRecord($parameter->table, $parameter->t3ver_oid);
137  $versionRecord = ‪BackendUtility::getRecord($parameter->table, $parameter->uid);
138  $iconFactory = GeneralUtility::makeInstance(IconFactory::class);
139  $icon_Live = $iconFactory->getIconForRecord($parameter->table, $liveRecord, ‪Icon::SIZE_SMALL)->render();
140  $icon_Workspace = $iconFactory->getIconForRecord($parameter->table, $versionRecord, ‪Icon::SIZE_SMALL)->render();
141  $stagePosition = $this->stagesService->getPositionOfCurrentStage($parameter->stage);
142  $fieldsOfRecords = array_keys($liveRecord);
143  if (‪$GLOBALS['TCA'][$parameter->table]) {
144  if (‪$GLOBALS['TCA'][$parameter->table]['interface']['showRecordFieldList']) {
145  $fieldsOfRecords = ‪$GLOBALS['TCA'][$parameter->table]['interface']['showRecordFieldList'];
146  $fieldsOfRecords = GeneralUtility::trimExplode(',', $fieldsOfRecords, true);
147  }
148  }
149  foreach ($fieldsOfRecords as $fieldName) {
150  if (empty(‪$GLOBALS['TCA'][$parameter->table]['columns'][$fieldName]['config'])) {
151  continue;
152  }
153  // Get the field's label. If not available, use the field name
154  $fieldTitle = $this->‪getLanguageService()->‪sL(‪BackendUtility::getItemLabel($parameter->table, $fieldName));
155  if (empty($fieldTitle)) {
156  $fieldTitle = $fieldName;
157  }
158  // Gets the TCA configuration for the current field
159  $configuration = ‪$GLOBALS['TCA'][$parameter->table]['columns'][$fieldName]['config'];
160  // check for exclude fields
161  if ($this->‪getBackendUser()->isAdmin() || ‪$GLOBALS['TCA'][$parameter->table]['columns'][$fieldName]['exclude'] == 0 || GeneralUtility::inList($this->getBackendUser()->groupData['non_exclude_fields'], $parameter->table . ':' . $fieldName)) {
162  // call diff class only if there is a difference
163  if ($configuration['type'] === 'inline' && $configuration['foreign_table'] === 'sys_file_reference') {
164  $useThumbnails = false;
165  if (!empty($configuration['overrideChildTca']['columns']['uid_local']['config']['appearance']['elementBrowserAllowed']) && !empty(‪$GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'])) {
166  $fileExtensions = GeneralUtility::trimExplode(',', ‪$GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'], true);
167  $allowedExtensions = GeneralUtility::trimExplode(',', $configuration['overrideChildTca']['columns']['uid_local']['config']['appearance']['elementBrowserAllowed'], true);
168  $differentExtensions = array_diff($allowedExtensions, $fileExtensions);
169  $useThumbnails = empty($differentExtensions);
170  }
171 
172  $liveFileReferences = ‪BackendUtility::resolveFileReferences(
173  $parameter->table,
174  $fieldName,
175  $liveRecord,
176  0
177  );
178  $versionFileReferences = ‪BackendUtility::resolveFileReferences(
179  $parameter->table,
180  $fieldName,
181  $versionRecord,
182  $this->getCurrentWorkspace()
183  );
184  $fileReferenceDifferences = $this->prepareFileReferenceDifferences(
185  $liveFileReferences,
186  $versionFileReferences,
187  $useThumbnails
188  );
189 
190  if ($fileReferenceDifferences === null) {
191  continue;
192  }
193 
194  $diffReturnArray[] = [
195  'field' => $fieldName,
196  'label' => $fieldTitle,
197  'content' => $fileReferenceDifferences['differences']
198  ];
199  $liveReturnArray[] = [
200  'field' => $fieldName,
201  'label' => $fieldTitle,
202  'content' => $fileReferenceDifferences['live']
203  ];
204  } elseif ((string)$liveRecord[$fieldName] !== (string)$versionRecord[$fieldName]) {
205  // Select the human readable values before diff
206  $liveRecord[$fieldName] = ‪BackendUtility::getProcessedValue(
207  $parameter->table,
208  $fieldName,
209  $liveRecord[$fieldName],
210  0,
211  1,
212  false,
213  $liveRecord['uid']
214  );
215  $versionRecord[$fieldName] = ‪BackendUtility::getProcessedValue(
216  $parameter->table,
217  $fieldName,
218  $versionRecord[$fieldName],
219  0,
220  1,
221  false,
222  $versionRecord['uid']
223  );
224 
225  if ($configuration['type'] === 'group' && $configuration['internal_type'] === 'file') {
226  // @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. Deprecation logged by TcaMigration class.
227  $versionThumb = ‪BackendUtility::thumbCode($versionRecord, $parameter->table, $fieldName, '');
228  $liveThumb = ‪BackendUtility::thumbCode($liveRecord, $parameter->table, $fieldName, '');
229  $diffReturnArray[] = [
230  'field' => $fieldName,
231  'label' => $fieldTitle,
232  'content' => $versionThumb
233  ];
234  $liveReturnArray[] = [
235  'field' => $fieldName,
236  'label' => $fieldTitle,
237  'content' => $liveThumb
238  ];
239  } else {
240  $diffReturnArray[] = [
241  'field' => $fieldName,
242  'label' => $fieldTitle,
243  'content' => $diffUtility->makeDiffDisplay($liveRecord[$fieldName], $versionRecord[$fieldName])
244  ];
245  $liveReturnArray[] = [
246  'field' => $fieldName,
247  'label' => $fieldTitle,
248  'content' => $parseObj->TS_images_rte($liveRecord[$fieldName])
249  ];
250  }
251  }
252  }
253  }
254  // Hook for modifying the difference and live arrays
255  // (this may be used by custom or dynamically-defined fields)
256  foreach (‪$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['workspaces']['modifyDifferenceArray'] ?? [] as $className) {
257  $hookObject = GeneralUtility::makeInstance($className);
258  if (method_exists($hookObject, 'modifyDifferenceArray')) {
259  $hookObject->modifyDifferenceArray($parameter, $diffReturnArray, $liveReturnArray, $diffUtility);
260  }
261  }
262  $commentsForRecord = $this->‪getCommentsForRecord($parameter->uid, $parameter->table);
263 
264  $historyService = GeneralUtility::makeInstance(HistoryService::class);
265  $history = $historyService->getHistory($parameter->table, $parameter->t3ver_oid);
266 
267  $prevStage = $this->stagesService->getPrevStage($parameter->stage);
268  $nextStage = $this->stagesService->getNextStage($parameter->stage);
269 
270  if (isset($prevStage[0])) {
271  $prevStage = current($prevStage);
272  }
273 
274  if (isset($nextStage[0])) {
275  $nextStage = current($nextStage);
276  }
277 
278  return [
279  'total' => 1,
280  'data' => [
281  [
282  // these parts contain HTML (don't escape)
283  'diff' => $diffReturnArray,
284  'live_record' => $liveReturnArray,
285  'icon_Live' => $icon_Live,
286  'icon_Workspace' => $icon_Workspace,
287  // this part is already escaped in getCommentsForRecord()
288  'comments' => $commentsForRecord,
289  // escape/sanitize the others
290  'path_Live' => htmlspecialchars(‪BackendUtility::getRecordPath($liveRecord['pid'], '', 999)),
291  'label_Stage' => htmlspecialchars($this->stagesService->getStageTitle($parameter->stage)),
292  'label_PrevStage' => $prevStage,
293  'label_NextStage' => $nextStage,
294  'stage_position' => (int)$stagePosition['position'],
295  'stage_count' => (int)$stagePosition['count'],
296  'parent' => [
297  'table' => htmlspecialchars($parameter->table),
298  'uid' => (int)$parameter->uid
299  ],
300  'history' => [
301  'data' => $history,
302  'total' => count($history)
303  ]
304  ]
305  ]
306  ];
307  }
308 
317  protected function prepareFileReferenceDifferences(array $liveFileReferences, array $versionFileReferences, $useThumbnails = false)
318  {
319  $randomValue = uniqid('file');
320 
321  $liveValues = [];
322  $versionValues = [];
323  $candidates = [];
324  $substitutes = [];
325 
326  // Process live references
327  foreach ($liveFileReferences as $identifier => $liveFileReference) {
328  $identifierWithRandomValue = $randomValue . '__' . $liveFileReference->getUid() . '__' . $randomValue;
329  $candidates[$identifierWithRandomValue] = $liveFileReference;
330  $liveValues[] = $identifierWithRandomValue;
331  }
332 
333  // Process version references
334  foreach ($versionFileReferences as $identifier => $versionFileReference) {
335  $identifierWithRandomValue = $randomValue . '__' . $versionFileReference->getUid() . '__' . $randomValue;
336  $candidates[$identifierWithRandomValue] = $versionFileReference;
337  $versionValues[] = $identifierWithRandomValue;
338  }
339 
340  // Combine values and surround by spaces
341  // (to reduce the chunks Diff will find)
342  $liveInformation = ' ' . implode(' ', $liveValues) . ' ';
343  $versionInformation = ' ' . implode(' ', $versionValues) . ' ';
344 
345  // Return if information has not changed
346  if ($liveInformation === $versionInformation) {
347  return null;
348  }
349 
354  foreach ($candidates as $identifierWithRandomValue => $fileReference) {
355  if ($useThumbnails) {
356  $thumbnailFile = $fileReference->getOriginalFile()->process(
358  ['width' => 40, 'height' => 40]
359  );
360  $thumbnailMarkup = '<img src="' . $thumbnailFile->getPublicUrl(true) . '" />';
361  $substitutes[$identifierWithRandomValue] = $thumbnailMarkup;
362  } else {
363  $substitutes[$identifierWithRandomValue] = $fileReference->getPublicUrl();
364  }
365  }
366 
367  $differences = $this->‪getDifferenceHandler()->‪makeDiffDisplay($liveInformation, $versionInformation);
368  $liveInformation = str_replace(array_keys($substitutes), array_values($substitutes), trim($liveInformation));
369  $differences = str_replace(array_keys($substitutes), array_values($substitutes), trim($differences));
370 
371  return [
372  'live' => $liveInformation,
373  'differences' => $differences
374  ];
375  }
376 
384  public function ‪getCommentsForRecord($uid, $table)
385  {
386  $sysLogReturnArray = [];
387  $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_log');
388 
389  $result = $queryBuilder
390  ->select('log_data', 'tstamp', 'userid')
391  ->from('sys_log')
392  ->where(
393  $queryBuilder->expr()->eq(
394  'action',
395  $queryBuilder->createNamedParameter(6, \PDO::PARAM_INT)
396  ),
397  $queryBuilder->expr()->eq(
398  'details_nr',
399  $queryBuilder->createNamedParameter(30, \PDO::PARAM_INT)
400  ),
401  $queryBuilder->expr()->eq(
402  'tablename',
403  $queryBuilder->createNamedParameter($table, \PDO::PARAM_STR)
404  ),
405  $queryBuilder->expr()->eq(
406  'recuid',
407  $queryBuilder->createNamedParameter($uid, \PDO::PARAM_INT)
408  )
409  )
410  ->orderBy('tstamp', 'DESC')
411  ->execute();
412 
414  $avatar = GeneralUtility::makeInstance(Avatar::class);
415 
416  while ($sysLogRow = $result->fetch()) {
417  $sysLogEntry = [];
418  $data = unserialize($sysLogRow['log_data']);
419  $beUserRecord = ‪BackendUtility::getRecord('be_users', $sysLogRow['userid']);
420  $sysLogEntry['stage_title'] = htmlspecialchars($this->stagesService->getStageTitle($data['stage']));
421  $sysLogEntry['user_uid'] = (int)$sysLogRow['userid'];
422  $sysLogEntry['user_username'] = is_array($beUserRecord) ? htmlspecialchars($beUserRecord['username']) : '';
423  $sysLogEntry['tstamp'] = htmlspecialchars(‪BackendUtility::datetime($sysLogRow['tstamp']));
424  $sysLogEntry['user_comment'] = nl2br(htmlspecialchars($data['comment']));
425  $sysLogEntry['user_avatar'] = $avatar->render($beUserRecord);
426  $sysLogReturnArray[] = $sysLogEntry;
427  }
428  return $sysLogReturnArray;
429  }
430 
437  public function ‪getSystemLanguages(\stdClass $parameters)
438  {
439  $iconFactory = GeneralUtility::makeInstance(IconFactory::class);
440  $systemLanguages = [
441  [
442  'uid' => 'all',
443  'title' => ‪LocalizationUtility::translate('language.allLanguages', 'workspaces'),
444  'icon' => $iconFactory->getIcon('empty-empty', ‪Icon::SIZE_SMALL)->render()
445  ]
446  ];
447  foreach ($this->gridDataService->getSystemLanguages($parameters->pageUid ?? 0) as $id => $systemLanguage) {
448  if ($id < 0) {
449  continue;
450  }
451  $systemLanguages[] = [
452  'uid' => $id,
453  'title' => htmlspecialchars($systemLanguage['title']),
454  'icon' => $iconFactory->getIcon($systemLanguage['flagIcon'], ‪Icon::SIZE_SMALL)->render()
455  ];
456  }
457  $result = [
458  'total' => count($systemLanguages),
459  'data' => $systemLanguages
460  ];
461  return $result;
462  }
463 
467  protected function ‪getBackendUser()
468  {
469  return ‪$GLOBALS['BE_USER'];
470  }
471 
475  protected function ‪getLanguageService()
476  {
477  return ‪$GLOBALS['LANG'];
478  }
479 
485  protected function ‪getDifferenceHandler()
486  {
487  if (!isset($this->differenceHandler)) {
488  $this->differenceHandler = GeneralUtility::makeInstance(DiffUtility::class);
489  $this->differenceHandler->stripTags = false;
490  }
492  }
493 
502  protected function ‪createIntegrityService(array $affectedElements)
503  {
504  $integrityService = GeneralUtility::makeInstance(IntegrityService::class);
505  $integrityService->setAffectedElements($affectedElements);
506  return $integrityService;
507  }
508 
518  protected function ‪getAffectedElements(\stdClass $parameters)
519  {
520  $affectedElements = [];
521  if ($parameters->type === 'selection') {
522  foreach ((array)$parameters->selection as $element) {
523  $affectedElements[] = ‪CombinedRecord::create($element->table, $element->liveId, $element->versionId);
524  }
525  } elseif ($parameters->type === 'all') {
526  $versions = $this->workspaceService->selectVersionsInWorkspace($this->‪getCurrentWorkspace(), 0, -99, -1, 0, 'tables_select', $this->‪validateLanguageParameter($parameters));
527  foreach ($versions as $table => $tableElements) {
528  foreach ($tableElements as $element) {
529  $affectedElement = ‪CombinedRecord::create($table, $element['t3ver_oid'], $element['uid']);
530  $affectedElement->getVersionRecord()->setRow($element);
531  $affectedElements[] = $affectedElement;
532  }
533  }
534  }
535  return $affectedElements;
536  }
537 
545  protected function ‪validateLanguageParameter(\stdClass $parameters)
546  {
547  $language = null;
548  if (isset($parameters->language) && ‪MathUtility::canBeInterpretedAsInteger($parameters->language)) {
549  $language = $parameters->language;
550  }
551  return $language;
552  }
553 
559  protected function ‪getCurrentWorkspace()
560  {
561  return $this->workspaceService->getCurrentWorkspace();
562  }
563 }
‪TYPO3\CMS\Core\Utility\DiffUtility
Definition: DiffUtility.php:23
‪TYPO3\CMS\Core\Imaging\Icon\SIZE_SMALL
‪const SIZE_SMALL
Definition: Icon.php:29
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\getCurrentWorkspace
‪int getCurrentWorkspace()
Definition: RemoteServer.php:555
‪TYPO3\CMS\Core\Resource\ProcessedFile\CONTEXT_IMAGEPREVIEW
‪const CONTEXT_IMAGEPREVIEW
Definition: ProcessedFile.php:50
‪TYPO3\CMS\Core\Utility\MathUtility\canBeInterpretedAsInteger
‪static bool canBeInterpretedAsInteger($var)
Definition: MathUtility.php:73
‪TYPO3\CMS\Workspaces\Domain\Model\CombinedRecord
Definition: CombinedRecord.php:23
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\$workspaceService
‪WorkspaceService $workspaceService
Definition: RemoteServer.php:54
‪TYPO3\CMS\Backend\Utility\BackendUtility\resolveFileReferences
‪static TYPO3 CMS Core Resource FileReference[] null resolveFileReferences($tableName, $fieldName, $element, $workspaceId=null)
Definition: BackendUtility.php:1267
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\validateLanguageParameter
‪int null validateLanguageParameter(\stdClass $parameters)
Definition: RemoteServer.php:541
‪TYPO3\CMS\Extbase\Utility\LocalizationUtility
Definition: LocalizationUtility.php:29
‪TYPO3\CMS\Backend\Utility\BackendUtility\datetime
‪static string datetime($value)
Definition: BackendUtility.php:1190
‪TYPO3\CMS\Core\Imaging\Icon
Definition: Icon.php:25
‪TYPO3\CMS\Backend\Backend\Avatar\Avatar
Definition: Avatar.php:33
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\$gridDataService
‪GridDataService $gridDataService
Definition: RemoteServer.php:46
‪TYPO3\CMS\Core\Resource\FileReference
Definition: FileReference.php:31
‪TYPO3\CMS\Backend\Utility\BackendUtility\getItemLabel
‪static string getItemLabel($table, $col)
Definition: BackendUtility.php:1791
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\createIntegrityService
‪IntegrityService createIntegrityService(array $affectedElements)
Definition: RemoteServer.php:498
‪TYPO3\CMS\Workspaces\Domain\Model\CombinedRecord\create
‪static CombinedRecord create($table, $liveId, $versionId)
Definition: CombinedRecord.php:44
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\__construct
‪__construct()
Definition: RemoteServer.php:60
‪TYPO3\CMS\Backend\Utility\BackendUtility\thumbCode
‪static string thumbCode( $row, $table, $field, $backPath='', $thumbScript='', $uploaddir=null, $abs=0, $tparams='', $size='', $linkInfoPopup=true)
Definition: BackendUtility.php:1338
‪TYPO3\CMS\Core\Imaging\IconFactory
Definition: IconFactory.php:31
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\getSystemLanguages
‪array getSystemLanguages(\stdClass $parameters)
Definition: RemoteServer.php:433
‪TYPO3\CMS\Core\Localization\LanguageService\sL
‪string sL($input)
Definition: LanguageService.php:158
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\getBackendUser
‪BackendUserAuthentication getBackendUser()
Definition: RemoteServer.php:463
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\getWorkspaceInfos
‪array getWorkspaceInfos($parameter)
Definition: RemoteServer.php:89
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\getCommentsForRecord
‪array getCommentsForRecord($uid, $table)
Definition: RemoteServer.php:380
‪TYPO3\CMS\Workspaces\Service\WorkspaceService\SELECT_ALL_WORKSPACES
‪const SELECT_ALL_WORKSPACES
Definition: WorkspaceService.php:44
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer
Definition: RemoteServer.php:43
‪TYPO3\CMS\Extbase\Utility\LocalizationUtility\translate
‪static string null translate($key, $extensionName=null, $arguments=null, string $languageKey=null, array $alternativeLanguageKeys=null)
Definition: LocalizationUtility.php:63
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\getRowDetails
‪array getRowDetails($parameter)
Definition: RemoteServer.php:126
‪TYPO3\CMS\Core\Html\RteHtmlParser
Definition: RteHtmlParser.php:40
‪TYPO3\CMS\Workspaces\Service\IntegrityService
Definition: IntegrityService.php:26
‪TYPO3\CMS\Workspaces\Controller\Remote
Definition: ActionHandler.php:2
‪TYPO3\CMS\Core\Authentication\BackendUserAuthentication
Definition: BackendUserAuthentication.php:45
‪TYPO3\CMS\Workspaces\Service\HistoryService
Definition: HistoryService.php:29
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\getAffectedElements
‪array getAffectedElements(\stdClass $parameters)
Definition: RemoteServer.php:514
‪TYPO3\CMS\Backend\Utility\BackendUtility
Definition: BackendUtility.php:72
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\getLanguageService
‪LanguageService getLanguageService()
Definition: RemoteServer.php:471
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\checkIntegrity
‪array checkIntegrity(\stdClass $parameters)
Definition: RemoteServer.php:73
‪TYPO3\CMS\Workspaces\Service\WorkspaceService
Definition: WorkspaceService.php:34
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\getStageActions
‪array getStageActions()
Definition: RemoteServer.php:106
‪TYPO3\CMS\Backend\Utility\BackendUtility\getRecord
‪static array null getRecord($table, $uid, $fields=' *', $where='', $useDeleteClause=true)
Definition: BackendUtility.php:130
‪TYPO3\CMS\Core\Utility\DiffUtility\makeDiffDisplay
‪string makeDiffDisplay($str1, $str2)
Definition: DiffUtility.php:37
‪TYPO3\CMS\Workspaces\Service\StagesService
Definition: StagesService.php:31
‪TYPO3\CMS\Core\Resource\ProcessedFile
Definition: ProcessedFile.php:42
‪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:1933
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:5
‪TYPO3\CMS\Core\Utility\MathUtility
Definition: MathUtility.php:21
‪TYPO3\CMS\Core\Localization\LanguageService
Definition: LanguageService.php:29
‪TYPO3\CMS\Core\Database\ConnectionPool
Definition: ConnectionPool.php:44
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\$differenceHandler
‪DiffUtility $differenceHandler
Definition: RemoteServer.php:58
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:45
‪TYPO3\CMS\Backend\Utility\BackendUtility\getRecordPath
‪static mixed getRecordPath($uid, $clause, $titleLimit, $fullTitleLimit=0)
Definition: BackendUtility.php:572
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\getDifferenceHandler
‪DiffUtility getDifferenceHandler()
Definition: RemoteServer.php:481
‪TYPO3\CMS\Workspaces\Controller\Remote\RemoteServer\$stagesService
‪StagesService $stagesService
Definition: RemoteServer.php:50
‪TYPO3\CMS\Workspaces\Service\GridDataService
Definition: GridDataService.php:35