‪TYPO3CMS  11.5
ValidatorTaskAdditionalFieldProvider.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 TYPO3\CMS\Backend\Utility\BackendUtility;
28 
34 {
40  protected ‪$languageFile = 'LLL:EXT:linkvalidator/Resources/Private/Language/locallang.xlf';
41 
51  public function ‪getAdditionalFields(array &$taskInfo, $task, ‪SchedulerModuleController $schedulerModule): array
52  {
53  $additionalFields = [];
54  $currentSchedulerModuleAction = $schedulerModule->‪getCurrentAction();
55  $lang = $this->‪getLanguageService();
56 
57  if (empty($taskInfo['configuration'])) {
58  if ($currentSchedulerModuleAction->equals(‪Action::ADD)) {
59  $taskInfo['configuration'] = $taskInfo['linkvalidator']['configuration'] ?? '';
60  } elseif ($currentSchedulerModuleAction->equals(‪Action::EDIT)) {
61  $taskInfo['configuration'] = $task->getConfiguration();
62  } else {
63  $taskInfo['configuration'] = $task->getConfiguration();
64  }
65  }
66  if (empty($taskInfo['depth'])) {
67  if ($currentSchedulerModuleAction->equals(‪Action::ADD)) {
68  $taskInfo['depth'] = $taskInfo['linkvalidator']['depth'] ?? 0;
69  } elseif ($currentSchedulerModuleAction->equals(‪Action::EDIT)) {
70  $taskInfo['depth'] = $task->getDepth();
71  } else {
72  $taskInfo['depth'] = $task->getDepth();
73  }
74  }
75  if (empty($taskInfo['page'])) {
76  if ($currentSchedulerModuleAction->equals(‪Action::ADD)) {
77  $taskInfo['page'] = $taskInfo['linkvalidator']['page'] ?? 0;
78  } elseif ($currentSchedulerModuleAction->equals(‪Action::EDIT)) {
79  $taskInfo['page'] = $task->getPage();
80  } else {
81  $taskInfo['page'] = $task->getPage();
82  }
83  }
84  if (empty($taskInfo['languages'])) {
85  if ($currentSchedulerModuleAction->equals(‪Action::ADD)) {
86  $taskInfo['languages'] = $taskInfo['linkvalidator']['languages'] ?? '';
87  } elseif ($currentSchedulerModuleAction->equals(‪Action::EDIT)) {
88  $taskInfo['languages'] = $task->getLanguages();
89  } else {
90  $taskInfo['languages'] = $task->getLanguages();
91  }
92  }
93  if (empty($taskInfo['email'])) {
94  if ($currentSchedulerModuleAction->equals(‪Action::ADD)) {
95  $taskInfo['email'] = $taskInfo['linkvalidator']['email'] ?? '';
96  } elseif ($currentSchedulerModuleAction->equals(‪Action::EDIT)) {
97  $taskInfo['email'] = $task->getEmail();
98  } else {
99  $taskInfo['email'] = $task->getEmail();
100  }
101  }
102  if (empty($taskInfo['emailOnBrokenLinkOnly'])) {
103  if ($currentSchedulerModuleAction->equals(‪Action::ADD)) {
104  $taskInfo['emailOnBrokenLinkOnly'] = ($taskInfo['linkvalidator']['emailOnBrokenLinkOnly'] ?? false) ? (bool)$taskInfo['linkvalidator']['emailOnBrokenLinkOnly'] : true;
105  } elseif ($currentSchedulerModuleAction->equals(‪Action::EDIT)) {
106  $taskInfo['emailOnBrokenLinkOnly'] = $task->getEmailOnBrokenLinkOnly();
107  } else {
108  $taskInfo['emailOnBrokenLinkOnly'] = $task->getEmailOnBrokenLinkOnly();
109  }
110  }
111  if (empty($taskInfo['emailTemplateName'])) {
112  if ($currentSchedulerModuleAction->equals(‪Action::ADD)) {
113  $taskInfo['emailTemplateName'] = ($taskInfo['linkvalidator']['emailTemplateName'] ?? false) ? $taskInfo['linkvalidator']['emailTemplateName'] : '';
114  } elseif ($currentSchedulerModuleAction->equals(‪Action::EDIT)) {
115  $taskInfo['emailTemplateName'] = $task->getEmailTemplateName();
116  } else {
117  $taskInfo['emailTemplateName'] = $task->getEmailTemplateName();
118  }
119  }
120  $fieldId = 'task_page';
121  $fieldCode = '<input type="number" min="0" class="form-control" name="tx_scheduler[linkvalidator][page]" id="'
122  . $fieldId
123  . '" value="'
124  . htmlspecialchars((string)$taskInfo['page'])
125  . '">';
126  $label = $lang->sL($this->languageFile . ':tasks.validate.page');
127  $pageTitle = '';
128  if (!empty($taskInfo['page'])) {
129  $pageTitle = $this->‪getPageTitle((int)$taskInfo['page']);
130  }
131  $additionalFields[$fieldId] = [
132  'browser' => 'page',
133  'pageTitle' => $pageTitle,
134  'code' => $fieldCode,
135  'cshTable' => 'linkvalidator',
136  'cshLabel' => $fieldId,
137  'label' => $label,
138  ];
139  // input for depth
140  $fieldId = 'task_depth';
141  $fieldValueArray = [
142  '0' => $lang->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.depth_0'),
143  '1' => $lang->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.depth_1'),
144  '2' => $lang->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.depth_2'),
145  '3' => $lang->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.depth_3'),
146  '4' => $lang->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.depth_4'),
147  '999' => $lang->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.depth_infi'),
148  ];
150  $fieldCode = '<select class="form-select" name="tx_scheduler[linkvalidator][depth]" id="' . $fieldId . '">';
151  foreach ($fieldValueArray as $depth => $label) {
152  $fieldCode .= "\t" . '<option value="' . htmlspecialchars((string)$depth) . '"'
153  . (($depth === $taskInfo['depth']) ? ' selected="selected"' : '') . '>'
154  . $label
155  . '</option>';
156  }
157  $fieldCode .= '</select>';
158  $label = $lang->sL($this->languageFile . ':tasks.validate.depth');
159  $additionalFields[$fieldId] = [
160  'code' => $fieldCode,
161  'cshKey' => 'linkvalidator',
162  'cshLabel' => $fieldId,
163  'label' => $label,
164  ];
165  $fieldId = 'task_languages';
166  $fieldCode = '<input class="form-control" type="text" name="tx_scheduler[linkvalidator][languages]" '
167  . 'id="'
168  . $fieldId
169  . '" value="'
170  . htmlspecialchars((string)$taskInfo['languages'])
171  . '">';
172  $label = $lang->sL($this->languageFile . ':tasks.validate.languages');
173  $additionalFields[$fieldId] = [
174  'code' => $fieldCode,
175  'cshKey' => 'linkvalidator',
176  'cshLabel' => $fieldId,
177  'label' => $label,
178  ];
179  $fieldId = 'task_configuration';
180  $fieldCode = '<textarea class="form-control" name="tx_scheduler[linkvalidator][configuration]" id="'
181  . $fieldId
182  . '" >'
183  . htmlspecialchars((string)$taskInfo['configuration'])
184  . '</textarea>';
185  $label = $lang->sL($this->languageFile . ':tasks.validate.conf');
186  $additionalFields[$fieldId] = [
187  'code' => $fieldCode,
188  'cshKey' => 'linkvalidator',
189  'cshLabel' => $fieldId,
190  'label' => $label,
191  ];
192  $fieldId = 'task_email';
193  $fieldCode = '<textarea class="form-control" rows="5" cols="50" name="tx_scheduler[linkvalidator][email]" id="'
194  . $fieldId
195  . '">'
196  . htmlspecialchars((string)$taskInfo['email'])
197  . '</textarea>';
198  $label = $lang->sL($this->languageFile . ':tasks.validate.email');
199  $additionalFields[$fieldId] = [
200  'code' => $fieldCode,
201  'cshKey' => 'linkvalidator',
202  'cshLabel' => $fieldId,
203  'label' => $label,
204  ];
205  $fieldId = 'task_emailOnBrokenLinkOnly';
206  $fieldCode = '<div class="form-check">'
207  . '<input type="checkbox" class="form-check-input" name="tx_scheduler[linkvalidator][emailOnBrokenLinkOnly]" id="'
208  . $fieldId . '" ' . ((bool)$taskInfo['emailOnBrokenLinkOnly'] ? 'checked="checked"' : '')
209  . '></div>';
210  $label = $lang->sL($this->languageFile . ':tasks.validate.emailOnBrokenLinkOnly');
211  $additionalFields[$fieldId] = [
212  'code' => $fieldCode,
213  'cshKey' => 'linkvalidator',
214  'cshLabel' => $fieldId,
215  'label' => $label,
216  ];
217  $fieldId = 'task_emailTemplateName';
218  $fieldCode = '<input class="form-control" type="text" name="tx_scheduler[linkvalidator][emailTemplateName]" '
219  . 'id="'
220  . $fieldId
221  . '" value="'
222  . htmlspecialchars((string)$taskInfo['emailTemplateName'])
223  . '">';
224  $label = $lang->sL($this->languageFile . ':tasks.validate.emailTemplateName');
225  $additionalFields[$fieldId] = [
226  'code' => $fieldCode,
227  'cshKey' => 'linkvalidator',
228  'cshLabel' => $fieldId,
229  'label' => $label,
230  ];
231  return $additionalFields;
232  }
233 
242  public function ‪validateAdditionalFields(array &$submittedData, ‪SchedulerModuleController $schedulerModule): bool
243  {
244  $isValid = true;
245  $lang = $this->‪getLanguageService();
246  $email = (string)($submittedData['linkvalidator']['email'] ?? '');
247  if ($email !== '') {
248  $emailList = ‪GeneralUtility::trimExplode((str_contains($email, ',')) ? ',' : LF, $email);
249  foreach ($emailList as $emailAdd) {
250  if (!GeneralUtility::validEmail($emailAdd)) {
251  $isValid = false;
252  $this->‪addMessage(
253  $lang->sL($this->languageFile . ':tasks.validate.invalidEmail'),
255  );
256  }
257  }
258  }
259 
260  $row = BackendUtility::getRecord('pages', (int)$submittedData['linkvalidator']['page'], '*', '', false);
261  if ($row === null) {
262  $isValid = false;
263  $this->‪addMessage(
264  $lang->sL($this->languageFile . ':tasks.validate.invalidPage'),
266  );
267  }
268  if ((int)$submittedData['linkvalidator']['depth'] < 0) {
269  $isValid = false;
270  $this->‪addMessage(
271  $lang->sL($this->languageFile . ':tasks.validate.invalidDepth'),
273  );
274  }
275  return $isValid;
276  }
277 
285  public function ‪saveAdditionalFields(array $submittedData, ‪AbstractTask $task): void
286  {
287  $task
288  ->setDepth((int)$submittedData['linkvalidator']['depth'])
289  ->setPage((int)$submittedData['linkvalidator']['page'])
290  ->setLanguages($submittedData['linkvalidator']['languages'])
291  ->setEmail($submittedData['linkvalidator']['email'])
292  ->setEmailOnBrokenLinkOnly((bool)($submittedData['linkvalidator']['emailOnBrokenLinkOnly'] ?? false))
293  ->setConfiguration($submittedData['linkvalidator']['configuration'])
294  ->setEmailTemplateName($submittedData['linkvalidator']['emailTemplateName']);
295  }
296 
303  private function ‪getPageTitle(int $pageId): string
304  {
305  return (string)(BackendUtility::getRecord('pages', $pageId, 'title', '', false)['title'] ?? '');
306  }
307 
311  protected function ‪getLanguageService(): ‪LanguageService
312  {
313  return ‪$GLOBALS['LANG'];
314  }
315 }
‪TYPO3\CMS\Core\Utility\GeneralUtility\trimExplode
‪static list< string > trimExplode($delim, $string, $removeEmptyValues=false, $limit=0)
Definition: GeneralUtility.php:999
‪TYPO3\CMS\Scheduler\Task\Enumeration\Action\ADD
‪const ADD
Definition: Action.php:28
‪TYPO3\CMS\Linkvalidator\Task\ValidatorTaskAdditionalFieldProvider\getPageTitle
‪string getPageTitle(int $pageId)
Definition: ValidatorTaskAdditionalFieldProvider.php:302
‪TYPO3\CMS\Scheduler\AbstractAdditionalFieldProvider
Definition: AbstractAdditionalFieldProvider.php:28
‪TYPO3\CMS\Scheduler\AbstractAdditionalFieldProvider\addMessage
‪addMessage(string $message, int $severity=FlashMessage::OK)
Definition: AbstractAdditionalFieldProvider.php:35
‪TYPO3\CMS\Linkvalidator\Task\ValidatorTaskAdditionalFieldProvider
Definition: ValidatorTaskAdditionalFieldProvider.php:34
‪TYPO3\CMS\Linkvalidator\Task\ValidatorTaskAdditionalFieldProvider\getAdditionalFields
‪array getAdditionalFields(array &$taskInfo, $task, SchedulerModuleController $schedulerModule)
Definition: ValidatorTaskAdditionalFieldProvider.php:50
‪TYPO3\CMS\Scheduler\Task\AbstractTask
Definition: AbstractTask.php:35
‪TYPO3\CMS\Scheduler\Controller\SchedulerModuleController
Definition: SchedulerModuleController.php:58
‪TYPO3\CMS\Scheduler\Task\Enumeration\Action\EDIT
‪const EDIT
Definition: Action.php:30
‪TYPO3\CMS\Scheduler\Controller\SchedulerModuleController\getCurrentAction
‪Action getCurrentAction()
Definition: SchedulerModuleController.php:192
‪TYPO3\CMS\Linkvalidator\Task
Definition: ValidatorTask.php:18
‪TYPO3\CMS\Linkvalidator\Task\ValidatorTaskAdditionalFieldProvider\getLanguageService
‪LanguageService getLanguageService()
Definition: ValidatorTaskAdditionalFieldProvider.php:310
‪TYPO3\CMS\Core\Messaging\FlashMessage
Definition: FlashMessage.php:26
‪TYPO3\CMS\Scheduler\Task\Enumeration\Action
Definition: Action.php:26
‪TYPO3\CMS\Linkvalidator\Task\ValidatorTaskAdditionalFieldProvider\validateAdditionalFields
‪bool validateAdditionalFields(array &$submittedData, SchedulerModuleController $schedulerModule)
Definition: ValidatorTaskAdditionalFieldProvider.php:241
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Core\Localization\LanguageService
Definition: LanguageService.php:42
‪TYPO3\CMS\Linkvalidator\Task\ValidatorTaskAdditionalFieldProvider\saveAdditionalFields
‪saveAdditionalFields(array $submittedData, AbstractTask $task)
Definition: ValidatorTaskAdditionalFieldProvider.php:284
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:50
‪TYPO3\CMS\Linkvalidator\Task\ValidatorTaskAdditionalFieldProvider\$languageFile
‪string $languageFile
Definition: ValidatorTaskAdditionalFieldProvider.php:39
‪TYPO3\CMS\Core\Messaging\AbstractMessage\ERROR
‪const ERROR
Definition: AbstractMessage.php:31