‪TYPO3CMS  ‪main
FormManagerController.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use Psr\Http\Message\ResponseInterface;
21 use Psr\Http\Message\ServerRequestInterface;
22 use Symfony\Component\Yaml\Yaml;
27 use TYPO3\CMS\Backend\Utility\BackendUtility;
31 use TYPO3\CMS\Core\Imaging\IconSize;
41 use ‪TYPO3\CMS\Form\Exception as FormException;
45 
53 {
54  protected const ‪JS_MODULE_NAMES = ['app', 'viewModel'];
55 
56  protected int ‪$limit = 20;
57 
58  public function ‪__construct(
59  protected readonly ‪ModuleTemplateFactory $moduleTemplateFactory,
60  protected readonly ‪PageRenderer $pageRenderer,
61  protected readonly ‪IconFactory $iconFactory,
62  // @todo: unit tests set next one, so no readonly. refactor them to functionals?!
63  protected ‪DatabaseService $databaseService,
64  ) {}
65 
69  protected function ‪indexAction(int $page = 1, string $searchTerm = ''): ResponseInterface
70  {
71  $hasForms = $this->formPersistenceManager->hasForms();
72  $forms = $hasForms ? $this->‪getAvailableFormDefinitions(trim($searchTerm)) : [];
73  $arrayPaginator = new ‪ArrayPaginator($forms, $page, $this->limit);
74  $pagination = new ‪SimplePagination($arrayPaginator);
75 
76  $moduleTemplate = $this->‪initializeModuleTemplate($this->request, $page, $searchTerm);
77  $moduleTemplate->assignMultiple([
78  'paginator' => $arrayPaginator,
79  'pagination' => $pagination,
80  'searchTerm' => $searchTerm,
81  'hasForms' => $hasForms,
82  'stylesheets' => $this->formSettings['formManager']['stylesheets'],
83  'formManagerAppInitialData' => json_encode($this->‪getFormManagerAppInitialData()),
84  ]);
85  if (!empty($this->formSettings['formManager']['javaScriptTranslationFile'])) {
86  $this->pageRenderer->addInlineLanguageLabelFile($this->formSettings['formManager']['javaScriptTranslationFile']);
87  }
88 
89  $javaScriptModules = array_map(
90  static fn(string $name) => ‪JavaScriptModuleInstruction::create($name),
91  array_filter(
92  $this->formSettings['formManager']['dynamicJavaScriptModules'] ?? [],
93  fn(string $name) => in_array($name, self::JS_MODULE_NAMES, true),
94  ARRAY_FILTER_USE_KEY
95  )
96  );
97  $this->pageRenderer->getJavaScriptRenderer()->addJavaScriptModuleInstruction(
98  ‪JavaScriptModuleInstruction::create('@typo3/form/backend/helper.js', 'Helper')
99  ->invoke('dispatchFormManager', $javaScriptModules, $this->‪getFormManagerAppInitialData())
100  );
101  array_map($this->pageRenderer->getJavaScriptRenderer()->addJavaScriptModuleInstruction(...), $javaScriptModules);
102  $moduleTemplate->setModuleClass($this->request->getPluginName() . '_' . $this->request->getControllerName());
103  $moduleTemplate->setFlashMessageQueue($this->‪getFlashMessageQueue());
104  $moduleTemplate->setTitle(
105  $this->‪getLanguageService()->sL('LLL:EXT:form/Resources/Private/Language/locallang_module.xlf:mlang_tabs_tab')
106  );
107  return $moduleTemplate->renderResponse('Backend/FormManager/Index');
108  }
109 
114  protected function ‪initializeCreateAction(): void
115  {
116  $this->defaultViewObjectName = JsonView::class;
117  }
118 
125  protected function ‪createAction(string $formName, string $templatePath, string $prototypeName, string $savePath): ResponseInterface
126  {
127  if (!$this->formPersistenceManager->isAllowedPersistencePath($savePath)) {
128  throw new ‪PersistenceManagerException(sprintf('Save to path "%s" is not allowed', $savePath), 1614500657);
129  }
130 
131  if (!$this->‪isValidTemplatePath($prototypeName, $templatePath)) {
132  throw new FormException(sprintf('The template path "%s" is not allowed', $templatePath), 1329233410);
133  }
134  if (empty($formName)) {
135  throw new FormException('No form name', 1472312204);
136  }
137 
138  $templatePath = GeneralUtility::getFileAbsFileName($templatePath);
139  $form = Yaml::parse((string)file_get_contents($templatePath));
140  $form['label'] = $formName;
141  $form['identifier'] = $this->formPersistenceManager->getUniqueIdentifier($this->‪convertFormNameToIdentifier($formName));
142  $form['prototypeName'] = $prototypeName;
143 
144  $formPersistenceIdentifier = $this->formPersistenceManager->getUniquePersistenceIdentifier($form['identifier'], $savePath);
145 
146  foreach (‪$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/form']['beforeFormCreate'] ?? [] as $className) {
147  $hookObj = GeneralUtility::makeInstance($className);
148  if (method_exists($hookObj, 'beforeFormCreate')) {
149  $form = $hookObj->beforeFormCreate(
150  $formPersistenceIdentifier,
151  $form
152  );
153  }
154  }
155 
156  $response = [
157  'status' => 'success',
158  'url' => $this->uriBuilder->uriFor('index', ['formPersistenceIdentifier' => $formPersistenceIdentifier], 'FormEditor'),
159  ];
160 
161  try {
162  $this->formPersistenceManager->save($formPersistenceIdentifier, $form);
163  } catch (‪PersistenceManagerException $e) {
164  $response = [
165  'status' => 'error',
166  'message' => $e->getMessage(),
167  'code' => $e->getCode(),
168  ];
169  }
170 
171  $this->view->assign('response', $response);
172  // createAction uses the Extbase JsonView::class.
173  // That's why we have to set the view variables in this way.
174  $this->view->setVariablesToRender([
175  'response',
176  ]);
177 
178  return $this->‪jsonResponse();
179  }
180 
185  protected function ‪initializeDuplicateAction(): void
186  {
187  $this->defaultViewObjectName = JsonView::class;
188  }
189 
195  protected function ‪duplicateAction(string $formName, string $formPersistenceIdentifier, string $savePath): ResponseInterface
196  {
197  if (!$this->formPersistenceManager->isAllowedPersistencePath($savePath)) {
198  throw new ‪PersistenceManagerException(sprintf('Save to path "%s" is not allowed', $savePath), 1614500658);
199  }
200  if (!$this->formPersistenceManager->isAllowedPersistencePath($formPersistenceIdentifier)) {
201  throw new ‪PersistenceManagerException(sprintf('Read of "%s" is not allowed', $formPersistenceIdentifier), 1614500659);
202  }
203 
204  $formToDuplicate = $this->formPersistenceManager->load($formPersistenceIdentifier);
205  $formToDuplicate['label'] = $formName;
206  $formToDuplicate['identifier'] = $this->formPersistenceManager->getUniqueIdentifier($this->‪convertFormNameToIdentifier($formName));
207 
208  $formPersistenceIdentifier = $this->formPersistenceManager->getUniquePersistenceIdentifier($formToDuplicate['identifier'], $savePath);
209 
210  foreach (‪$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/form']['beforeFormDuplicate'] ?? [] as $className) {
211  $hookObj = GeneralUtility::makeInstance($className);
212  if (method_exists($hookObj, 'beforeFormDuplicate')) {
213  $formToDuplicate = $hookObj->beforeFormDuplicate(
214  $formPersistenceIdentifier,
215  $formToDuplicate
216  );
217  }
218  }
219 
220  $response = [
221  'status' => 'success',
222  'url' => $this->uriBuilder->uriFor('index', ['formPersistenceIdentifier' => $formPersistenceIdentifier], 'FormEditor'),
223  ];
224 
225  try {
226  $this->formPersistenceManager->save($formPersistenceIdentifier, $formToDuplicate);
227  } catch (‪PersistenceManagerException $e) {
228  $response = [
229  'status' => 'error',
230  'message' => $e->getMessage(),
231  'code' => $e->getCode(),
232  ];
233  }
234 
235  $this->view->assign('response', $response);
236  // createAction uses the Extbase JsonView::class.
237  // That's why we have to set the view variables in this way.
238  $this->view->setVariablesToRender([
239  'response',
240  ]);
241 
242  return $this->‪jsonResponse();
243  }
244 
249  protected function ‪initializeReferencesAction(): void
250  {
251  $this->defaultViewObjectName = JsonView::class;
252  }
253 
259  protected function ‪referencesAction(string $formPersistenceIdentifier): ResponseInterface
260  {
261  if (!$this->formPersistenceManager->isAllowedPersistencePath($formPersistenceIdentifier)) {
262  throw new ‪PersistenceManagerException(sprintf('Read from "%s" is not allowed', $formPersistenceIdentifier), 1614500660);
263  }
264 
265  $this->view->assign('references', $this->‪getProcessedReferencesRows($formPersistenceIdentifier));
266  $this->view->assign('formPersistenceIdentifier', $formPersistenceIdentifier);
267  // referencesAction uses the extbase JsonView::class.
268  // That's why we have to set the view variables in this way.
269  $this->view->setVariablesToRender([
270  'references',
271  'formPersistenceIdentifier',
272  ]);
273 
274  return $this->‪jsonResponse();
275  }
276 
282  protected function ‪deleteAction(string $formPersistenceIdentifier): ResponseInterface
283  {
284  if (!$this->formPersistenceManager->isAllowedPersistencePath($formPersistenceIdentifier)) {
285  throw new ‪PersistenceManagerException(sprintf('Delete "%s" is not allowed', $formPersistenceIdentifier), 1614500661);
286  }
287 
288  if (empty($this->databaseService->getReferencesByPersistenceIdentifier($formPersistenceIdentifier))) {
289  foreach (‪$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/form']['beforeFormDelete'] ?? [] as $className) {
290  $hookObj = GeneralUtility::makeInstance($className);
291  if (method_exists($hookObj, 'beforeFormDelete')) {
292  $hookObj->beforeFormDelete(
293  $formPersistenceIdentifier
294  );
295  }
296  }
297 
298  $this->formPersistenceManager->delete($formPersistenceIdentifier);
299  } else {
300  $controllerConfiguration = GeneralUtility::makeInstance(TranslationService::class)->translateValuesRecursive(
301  $this->formSettings['formManager']['controller'],
302  $this->formSettings['formManager']['translationFiles'] ?? []
303  );
304 
305  $this->‪addFlashMessage(
306  sprintf($controllerConfiguration['deleteAction']['errorMessage'], $formPersistenceIdentifier),
307  $controllerConfiguration['deleteAction']['errorTitle'],
308  ContextualFeedbackSeverity::ERROR,
309  true
310  );
311  }
312  return $this->‪redirect('index');
313  }
314 
323  protected function ‪getAccessibleFormStorageFolders(): array
324  {
325  $preparedAccessibleFormStorageFolders = [];
326  foreach ($this->formPersistenceManager->getAccessibleFormStorageFolders() as ‪$identifier => $folder) {
327  $preparedAccessibleFormStorageFolders[] = [
328  'label' => $folder->getStorage()->isPublic() ? $folder->getPublicUrl() : ‪$identifier,
329  'value' => ‪$identifier,
330  ];
331  }
332 
333  if ($this->formSettings['persistenceManager']['allowSaveToExtensionPaths']) {
334  foreach ($this->formPersistenceManager->getAccessibleExtensionFolders() as $relativePath => $fullPath) {
335  $preparedAccessibleFormStorageFolders[] = [
336  'label' => $relativePath,
337  'value' => $relativePath,
338  ];
339  }
340  }
341 
342  return $preparedAccessibleFormStorageFolders;
343  }
344 
349  protected function ‪getFormManagerAppInitialData(): array
350  {
351  $formManagerAppInitialData = [
352  'selectablePrototypesConfiguration' => $this->formSettings['formManager']['selectablePrototypesConfiguration'],
353  'accessibleFormStorageFolders' => $this->‪getAccessibleFormStorageFolders(),
354  'endpoints' => [
355  'create' => $this->uriBuilder->uriFor('create'),
356  'duplicate' => $this->uriBuilder->uriFor('duplicate'),
357  'delete' => $this->uriBuilder->uriFor('delete'),
358  'references' => $this->uriBuilder->uriFor('references'),
359  ],
360  ];
361 
362  $formManagerAppInitialData = ‪ArrayUtility::reIndexNumericArrayKeysRecursive($formManagerAppInitialData);
363  $formManagerAppInitialData = GeneralUtility::makeInstance(TranslationService::class)->translateValuesRecursive(
364  $formManagerAppInitialData,
365  $this->formSettings['formManager']['translationFiles'] ?? []
366  );
367  return $formManagerAppInitialData;
368  }
369 
374  protected function ‪getAvailableFormDefinitions(string $searchTerm = ''): array
375  {
376  $allReferencesForFileUid = $this->databaseService->getAllReferencesForFileUid();
377  $allReferencesForPersistenceIdentifier = $this->databaseService->getAllReferencesForPersistenceIdentifier();
378 
379  $availableFormDefinitions = [];
380  foreach ($this->formPersistenceManager->listForms() as $formDefinition) {
381  $referenceCount = 0;
382  if (
383  isset($formDefinition['fileUid'])
384  && array_key_exists($formDefinition['fileUid'], $allReferencesForFileUid)
385  ) {
386  $referenceCount = $allReferencesForFileUid[$formDefinition['fileUid']];
387  } elseif (array_key_exists($formDefinition['persistenceIdentifier'], $allReferencesForPersistenceIdentifier)) {
388  $referenceCount = $allReferencesForPersistenceIdentifier[$formDefinition['persistenceIdentifier']];
389  }
390 
391  $formDefinition['referenceCount'] = $referenceCount;
392  if ($searchTerm === ''
393  || $this->‪valueContainsSearchTerm($formDefinition['name'], $searchTerm)
394  || $this->‪valueContainsSearchTerm($formDefinition['persistenceIdentifier'], $searchTerm)
395  ) {
396  $availableFormDefinitions[] = $formDefinition;
397  }
398  }
399 
400  return $availableFormDefinitions;
401  }
402 
403  protected function ‪valueContainsSearchTerm(string $value, string $searchTerm): bool
404  {
405  return str_contains(strtolower($value), strtolower($searchTerm));
406  }
407 
414  protected function ‪getProcessedReferencesRows(string $persistenceIdentifier): array
415  {
416  if (empty($persistenceIdentifier)) {
417  throw new \InvalidArgumentException('$persistenceIdentifier must not be empty.', 1477071939);
418  }
419 
420  $references = [];
421  $iconFactory = GeneralUtility::makeInstance(IconFactory::class);
422 
423  $referenceRows = $this->databaseService->getReferencesByPersistenceIdentifier($persistenceIdentifier);
424  foreach ($referenceRows as &$referenceRow) {
425  ‪$record = $this->‪getRecord($referenceRow['tablename'], $referenceRow['recuid']);
426  if (!‪$record) {
427  continue;
428  }
429  $pageRecord = $this->‪getRecord('pages', ‪$record['pid']);
430  $urlParameters = [
431  'edit' => [
432  $referenceRow['tablename'] => [
433  $referenceRow['recuid'] => 'edit',
434  ],
435  ],
436  'returnUrl' => $this->‪getModuleUrl('web_FormFormbuilder'),
437  ];
438 
439  $references[] = [
440  'recordPageTitle' => is_array($pageRecord) ? $this->‪getRecordTitle('pages', $pageRecord) : '',
441  'recordTitle' => $this->‪getRecordTitle($referenceRow['tablename'], ‪$record, true),
442  'recordIcon' => $iconFactory->getIconForRecord($referenceRow['tablename'], ‪$record, IconSize::SMALL)->render(),
443  'recordUid' => $referenceRow['recuid'],
444  'recordEditUrl' => $this->‪getModuleUrl('record_edit', $urlParameters),
445  ];
446  }
447  return $references;
448  }
449 
457  protected function ‪isValidTemplatePath(string $prototypeName, string $templatePath): bool
458  {
459  $isValid = false;
460  foreach ($this->formSettings['formManager']['selectablePrototypesConfiguration'] as $prototypesConfiguration) {
461  if ($prototypesConfiguration['identifier'] !== $prototypeName) {
462  continue;
463  }
464  foreach ($prototypesConfiguration['newFormTemplates'] as $templatesConfiguration) {
465  if ($templatesConfiguration['templatePath'] !== $templatePath) {
466  continue;
467  }
468  $isValid = true;
469  break;
470  }
471  }
472 
473  $templatePath = GeneralUtility::getFileAbsFileName($templatePath);
474  if (!is_file($templatePath)) {
475  $isValid = false;
476  }
477 
478  return $isValid;
479  }
480 
484  protected function ‪initializeModuleTemplate(ServerRequestInterface ‪$request, int $page, string $searchTerm): ‪ModuleTemplate
485  {
486  $moduleTemplate = $this->moduleTemplateFactory->create(‪$request);
487 
488  $buttonBar = $moduleTemplate->‪getDocHeaderComponent()->getButtonBar();
489 
490  // Create new
491  $addFormButton = $buttonBar->makeLinkButton()
492  ->setDataAttributes(['identifier' => 'newForm'])
493  ->setHref('#')
494  ->setTitle($this->‪getLanguageService()->sL('LLL:EXT:form/Resources/Private/Language/Database.xlf:formManager.create_new_form'))
495  ->setShowLabelText(true)
496  ->setIcon($this->iconFactory->getIcon('actions-plus', IconSize::SMALL));
497  $buttonBar->addButton($addFormButton, ‪ButtonBar::BUTTON_POSITION_LEFT);
498 
499  // Reload
500  $reloadButton = $buttonBar->makeLinkButton()
501  ->setHref($this->request->getAttribute('normalizedParams')->getRequestUri())
502  ->setTitle($this->‪getLanguageService()->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.reload'))
503  ->setIcon($this->iconFactory->getIcon('actions-refresh', IconSize::SMALL));
504  $buttonBar->addButton($reloadButton, ‪ButtonBar::BUTTON_POSITION_RIGHT);
505 
506  // Shortcut
507  ‪$arguments = [];
508  if ($searchTerm) {
509  ‪$arguments['tx_form_web_formformbuilder']['searchTerm'] = $searchTerm;
510  ‪$arguments['tx_form_web_formformbuilder']['controller'] = 'FormManager';
511  }
512  if ($page > 1) {
513  ‪$arguments['tx_form_web_formformbuilder']['page'] = $page;
514  ‪$arguments['tx_form_web_formformbuilder']['controller'] = 'FormManager';
515  }
516  $shortcutButton = $buttonBar->makeShortcutButton()
517  ->setRouteIdentifier('web_FormFormbuilder')
518  ->setArguments(‪$arguments)
519  ->setDisplayName($this->‪getLanguageService()->sL('LLL:EXT:form/Resources/Private/Language/Database.xlf:module.shortcut_name'));
520  $buttonBar->addButton($shortcutButton, ‪ButtonBar::BUTTON_POSITION_RIGHT);
521 
522  return $moduleTemplate;
523  }
524 
528  protected function ‪convertFormNameToIdentifier(string $formName): string
529  {
530  $csConverter = GeneralUtility::makeInstance(CharsetConverter::class);
531 
532  $formName = \Normalizer::normalize($formName) ?: $formName;
533  $formIdentifier = $csConverter->specCharsToASCII('utf-8', $formName);
534  $formIdentifier = (string)preg_replace('/[^a-zA-Z0-9-_]/', '', $formIdentifier);
535  $formIdentifier = lcfirst($formIdentifier);
536  return $formIdentifier;
537  }
538 
542  protected function ‪getRecord(string $table, int ‪$uid): ?array
543  {
544  return BackendUtility::getRecord($table, ‪$uid);
545  }
546 
550  protected function ‪getRecordTitle(string $table, array $row, bool $prep = false): string
551  {
552  return BackendUtility::getRecordTitle($table, $row, $prep);
553  }
554 
558  protected function ‪getModuleUrl(string $moduleName, array $urlParameters = []): string
559  {
560  ‪$uriBuilder = GeneralUtility::makeInstance(UriBuilder::class);
561  return (string)‪$uriBuilder->buildUriFromRoute($moduleName, $urlParameters);
562  }
563 
565  {
566  return ‪$GLOBALS['BE_USER'];
567  }
568 
570  {
571  return ‪$GLOBALS['LANG'];
572  }
573 }
‪TYPO3\CMS\Form\Service\DatabaseService
Definition: DatabaseService.php:33
‪TYPO3\CMS\Form\Controller\FormManagerController\JS_MODULE_NAMES
‪const JS_MODULE_NAMES
Definition: FormManagerController.php:54
‪TYPO3\CMS\Extbase\Mvc\Controller\ActionController\addFlashMessage
‪addFlashMessage(string $messageBody, string $messageTitle='', ContextualFeedbackSeverity $severity=ContextualFeedbackSeverity::OK, bool $storeInSession=true)
Definition: ActionController.php:633
‪TYPO3\CMS\Form\Controller\FormManagerController\createAction
‪createAction(string $formName, string $templatePath, string $prototypeName, string $savePath)
Definition: FormManagerController.php:125
‪TYPO3\CMS\Form\Controller\FormManagerController\initializeModuleTemplate
‪initializeModuleTemplate(ServerRequestInterface $request, int $page, string $searchTerm)
Definition: FormManagerController.php:484
‪TYPO3\CMS\Backend\Template\Components\ButtonBar\BUTTON_POSITION_LEFT
‪const BUTTON_POSITION_LEFT
Definition: ButtonBar.php:37
‪TYPO3\CMS\Form\Controller\FormManagerController\isValidTemplatePath
‪isValidTemplatePath(string $prototypeName, string $templatePath)
Definition: FormManagerController.php:457
‪TYPO3\CMS\Backend\Template\Components\ButtonBar
Definition: ButtonBar.php:33
‪TYPO3\CMS\Form\Controller\FormManagerController\deleteAction
‪deleteAction(string $formPersistenceIdentifier)
Definition: FormManagerController.php:282
‪TYPO3\CMS\Extbase\Mvc\Controller\ActionController\$request
‪RequestInterface $request
Definition: ActionController.php:106
‪TYPO3\CMS\Form\Controller\FormManagerController\getRecord
‪getRecord(string $table, int $uid)
Definition: FormManagerController.php:542
‪TYPO3\CMS\Form\Service\TranslationService
Definition: TranslationService.php:45
‪TYPO3\CMS\Form\Controller\FormManagerController\convertFormNameToIdentifier
‪convertFormNameToIdentifier(string $formName)
Definition: FormManagerController.php:528
‪TYPO3\CMS\Backend\Template\ModuleTemplateFactory
Definition: ModuleTemplateFactory.php:33
‪TYPO3\CMS\Form\Mvc\Persistence\Exception\PersistenceManagerException
Definition: PersistenceManagerException.php:27
‪TYPO3\CMS\Form\Controller\FormManagerController\getFormManagerAppInitialData
‪getFormManagerAppInitialData()
Definition: FormManagerController.php:349
‪TYPO3\CMS\Form\Controller\FormManagerController\getModuleUrl
‪getModuleUrl(string $moduleName, array $urlParameters=[])
Definition: FormManagerController.php:558
‪TYPO3\CMS\Form\Controller\FormManagerController\duplicateAction
‪duplicateAction(string $formName, string $formPersistenceIdentifier, string $savePath)
Definition: FormManagerController.php:195
‪TYPO3\CMS\Core\Page\JavaScriptModuleInstruction\create
‪static create(string $name, string $exportName=null)
Definition: JavaScriptModuleInstruction.php:47
‪TYPO3\CMS\Form\Controller\FormManagerController\getAccessibleFormStorageFolders
‪getAccessibleFormStorageFolders()
Definition: FormManagerController.php:323
‪TYPO3\CMS\Form\Controller\FormManagerController\__construct
‪__construct(protected readonly ModuleTemplateFactory $moduleTemplateFactory, protected readonly PageRenderer $pageRenderer, protected readonly IconFactory $iconFactory, protected DatabaseService $databaseService,)
Definition: FormManagerController.php:58
‪TYPO3\CMS\Form\Controller
Definition: AbstractBackendController.php:18
‪TYPO3\CMS\Form\Controller\FormManagerController\getProcessedReferencesRows
‪getProcessedReferencesRows(string $persistenceIdentifier)
Definition: FormManagerController.php:414
‪TYPO3\CMS\Core\Charset\CharsetConverter
Definition: CharsetConverter.php:54
‪TYPO3\CMS\Core\Imaging\IconFactory
Definition: IconFactory.php:34
‪TYPO3\CMS\Core\Page\JavaScriptModuleInstruction
Definition: JavaScriptModuleInstruction.php:23
‪TYPO3\CMS\Form\Controller\FormManagerController\getBackendUser
‪getBackendUser()
Definition: FormManagerController.php:564
‪TYPO3\CMS\Backend\Template\ModuleTemplate
Definition: ModuleTemplate.php:46
‪TYPO3\CMS\Core\Pagination\SimplePagination
Definition: SimplePagination.php:21
‪TYPO3\CMS\Form\Controller\FormManagerController\getAvailableFormDefinitions
‪getAvailableFormDefinitions(string $searchTerm='')
Definition: FormManagerController.php:374
‪TYPO3\CMS\Core\Type\ContextualFeedbackSeverity
‪ContextualFeedbackSeverity
Definition: ContextualFeedbackSeverity.php:25
‪TYPO3\CMS\Form\Controller\FormManagerController
Definition: FormManagerController.php:53
‪TYPO3\CMS\Form\Controller\FormManagerController\getRecordTitle
‪getRecordTitle(string $table, array $row, bool $prep=false)
Definition: FormManagerController.php:550
‪TYPO3\CMS\Core\Page\PageRenderer
Definition: PageRenderer.php:44
‪TYPO3\CMS\Form\Exception
Definition: Exception.php:25
‪TYPO3\CMS\Extbase\Mvc\Controller\ActionController\jsonResponse
‪jsonResponse(string $json=null)
Definition: ActionController.php:813
‪TYPO3\CMS\Backend\Routing\UriBuilder
Definition: UriBuilder.php:44
‪TYPO3\CMS\Form\Controller\FormManagerController\initializeCreateAction
‪initializeCreateAction()
Definition: FormManagerController.php:114
‪TYPO3\CMS\Webhooks\Message\$record
‪identifier readonly int readonly array $record
Definition: PageModificationMessage.php:36
‪TYPO3\CMS\Form\Controller\FormManagerController\valueContainsSearchTerm
‪valueContainsSearchTerm(string $value, string $searchTerm)
Definition: FormManagerController.php:403
‪TYPO3\CMS\Core\Authentication\BackendUserAuthentication
Definition: BackendUserAuthentication.php:62
‪TYPO3\CMS\Extbase\Mvc\Controller\ActionController\$arguments
‪Arguments $arguments
Definition: ActionController.php:119
‪TYPO3\CMS\Form\Controller\FormManagerController\referencesAction
‪referencesAction(string $formPersistenceIdentifier)
Definition: FormManagerController.php:259
‪TYPO3\CMS\Form\Controller\FormManagerController\initializeReferencesAction
‪initializeReferencesAction()
Definition: FormManagerController.php:249
‪TYPO3\CMS\Extbase\Mvc\Controller\ActionController\redirect
‪redirect(?string $actionName, ?string $controllerName=null, ?string $extensionName=null, ?array $arguments=null, ?int $pageUid=null, $_=null, int $statusCode=303)
Definition: ActionController.php:684
‪TYPO3\CMS\Form\Controller\FormManagerController\getLanguageService
‪getLanguageService()
Definition: FormManagerController.php:569
‪TYPO3\CMS\Core\Pagination\ArrayPaginator
Definition: ArrayPaginator.php:21
‪TYPO3\CMS\Backend\Template\ModuleTemplate\getDocHeaderComponent
‪getDocHeaderComponent()
Definition: ModuleTemplate.php:181
‪TYPO3\CMS\Webhooks\Message\$uid
‪identifier readonly int $uid
Definition: PageModificationMessage.php:35
‪TYPO3\CMS\Core\Utility\ArrayUtility
Definition: ArrayUtility.php:26
‪TYPO3\CMS\Form\Controller\FormManagerController\$limit
‪int $limit
Definition: FormManagerController.php:56
‪TYPO3\CMS\Form\Controller\FormManagerController\initializeDuplicateAction
‪initializeDuplicateAction()
Definition: FormManagerController.php:185
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Core\Utility\ArrayUtility\reIndexNumericArrayKeysRecursive
‪static reIndexNumericArrayKeysRecursive(array $array)
Definition: ArrayUtility.php:204
‪TYPO3\CMS\Extbase\Mvc\Controller\ActionController\getFlashMessageQueue
‪getFlashMessageQueue(string $identifier=null)
Definition: ActionController.php:658
‪TYPO3\CMS\Core\Localization\LanguageService
Definition: LanguageService.php:46
‪TYPO3\CMS\Form\Controller\FormManagerController\indexAction
‪indexAction(int $page=1, string $searchTerm='')
Definition: FormManagerController.php:69
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Extbase\Mvc\Controller\ActionController\$uriBuilder
‪UriBuilder $uriBuilder
Definition: ActionController.php:107
‪TYPO3\CMS\Backend\Template\Components\ButtonBar\BUTTON_POSITION_RIGHT
‪const BUTTON_POSITION_RIGHT
Definition: ButtonBar.php:42
‪TYPO3\CMS\Form\Controller\AbstractBackendController
Definition: AbstractBackendController.php:32
‪TYPO3\CMS\Extbase\Mvc\View\JsonView
Definition: JsonView.php:29
‪TYPO3\CMS\Webhooks\Message\$identifier
‪identifier readonly string $identifier
Definition: FileAddedMessage.php:37