2 declare(strict_types = 1);
66 list($table, $uid) = explode(
':', $this->configuration[
'record']);
68 $cmd = $this->configuration[
'cmd'];
70 if (($this->configuration[
'doSave'] || $this->configuration[
'update'] || $this->configuration[
'update_close']) && is_array($this->configuration[
'data'])) {
73 if ($cmd ===
'save' || $cmd && $table && $uid && isset(
$GLOBALS[
'TCA'][$table])) {
75 $cmdAction =
'do' . ucwords($cmd);
76 if (method_exists($this, $cmdAction)) {
77 call_user_func_array([$this, $cmdAction], [$table, $uid]);
79 throw new \UnexpectedValueException(
'The specified frontend edit command (' . $cmd .
') is not valid.', 1225818110);
90 protected function doHide(
string $table,
int $uid)
92 $hideField =
$GLOBALS[
'TCA'][$table][
'ctrl'][
'enablecolumns'][
'disabled'];
95 $recData[$table][$uid][$hideField] = 1;
96 $dataHandler = GeneralUtility::makeInstance(DataHandler::class);
97 $dataHandler->start($recData, []);
98 $dataHandler->process_datamap();
108 protected function doUnhide(
string $table,
int $uid)
110 $hideField =
$GLOBALS[
'TCA'][$table][
'ctrl'][
'enablecolumns'][
'disabled'];
113 $recData[$table][$uid][$hideField] = 0;
114 $dataHandler = GeneralUtility::makeInstance(DataHandler::class);
115 $dataHandler->start($recData, []);
116 $dataHandler->process_datamap();
126 protected function doUp(
string $table,
int $uid)
128 $this->
move($table, $uid,
'up');
137 protected function doDown(
string $table,
int $uid)
139 $this->
move($table, $uid,
'down');
148 protected function doMoveAfter(
string $table,
int $uid)
150 $afterUID = (int)$this->configuration[
'moveAfter'];
151 $this->
move($table, $uid,
'', $afterUID);
162 protected function move(
string $table,
int $uid,
string $direction =
'',
int $afterUID = 0)
164 $dataHandlerCommands = [];
165 $sortField =
$GLOBALS[
'TCA'][$table][
'ctrl'][
'sortby'];
169 if (isset(
$GLOBALS[
'TCA'][$table][
'ctrl'][
'copyAfterDuplFields'])) {
170 $copyAfterDuplicateFields = GeneralUtility::trimExplode(
',',
$GLOBALS[
'TCA'][$table][
'ctrl'][
'copyAfterDuplFields'],
true);
172 $copyAfterDuplicateFields = [];
175 $fields = $copyAfterDuplicateFields;
181 $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
182 ->getQueryBuilderForTable($table);
183 $queryBuilder->getRestrictions()->removeAll();
185 $currentRecord = $queryBuilder
188 ->where($queryBuilder->expr()->eq(
190 $queryBuilder->createNamedParameter($uid, \PDO::PARAM_INT)
195 if (is_array($currentRecord)) {
198 $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
199 ->getQueryBuilderForTable($table);
202 ->select(
'uid',
'pid')
204 ->where($queryBuilder->expr()->eq(
206 $queryBuilder->createNamedParameter($currentRecord[
'pid'], \PDO::PARAM_INT)
212 $queryBuilder->getRestrictions()
213 ->removeByType(StartTimeRestriction::class)
214 ->removeByType(EndTimeRestriction::class)
215 ->removeByType(HiddenRestriction::class)
216 ->removeByType(FrontendGroupRestriction::class);
219 if (!empty($copyAfterDuplicateFields)) {
220 foreach ($copyAfterDuplicateFields as $fieldName) {
221 $queryBuilder->andWhere($queryBuilder->expr()->eq(
223 $queryBuilder->createNamedParameter($currentRecord[$fieldName], \PDO::PARAM_STR)
227 if (!empty($direction)) {
228 if ($direction ===
'up') {
229 $queryBuilder->andWhere(
230 $queryBuilder->expr()->lt(
232 $queryBuilder->createNamedParameter($currentRecord[$sortField], \PDO::PARAM_INT)
235 $queryBuilder->orderBy($sortField,
'DESC');
237 $queryBuilder->andWhere(
238 $queryBuilder->expr()->gt(
240 $queryBuilder->createNamedParameter($currentRecord[$sortField], \PDO::PARAM_INT)
243 $queryBuilder->orderBy($sortField,
'ASC');
247 $result = $queryBuilder->execute();
248 if ($recordBefore = $result->fetch()) {
250 $dataHandlerCommands[$table][$uid][
'move'] = -$afterUID;
251 } elseif ($direction ===
'down') {
252 $dataHandlerCommands[$table][$uid][
'move'] = -$recordBefore[
'uid'];
253 } elseif ($recordAfter = $result->fetch()) {
255 $dataHandlerCommands[$table][$uid][
'move'] = -$recordAfter[
'uid'];
258 $dataHandlerCommands[$table][$uid][
'move'] = $currentRecord[
'pid'];
260 } elseif ($direction ===
'up') {
261 $dataHandlerCommands[$table][$uid][
'move'] = $currentRecord[
'pid'];
266 if (!empty($dataHandlerCommands)) {
267 $dataHandler = GeneralUtility::makeInstance(DataHandler::class);
268 $dataHandler->start([], $dataHandlerCommands);
269 $dataHandler->process_cmdmap();
280 protected function doDelete(
string $table,
int $uid)
282 $cmdData[$table][$uid][
'delete'] = 1;
283 if (!empty($cmdData)) {
284 $dataHandler = GeneralUtility::makeInstance(DataHandler::class);
285 $dataHandler->start([], $cmdData);
286 $dataHandler->process_cmdmap();
296 protected function doSave(
string $table,
int $uid)
298 $data = $this->configuration[
'data'];
300 $dataHandler = GeneralUtility::makeInstance(DataHandler::class);
301 $dataHandler->start($data, []);
302 $dataHandler->process_uploads($_FILES);
303 $dataHandler->process_datamap();
305 $newUID = $dataHandler->substNEWwithIDs[
'NEW'];
307 $this->configuration[
'newUID'] = $newUID;
331 protected function doClose(
string $table,
int $uid)