/** * action approveAction * * @return void */ public function approveAction($uid) { if (!($entry = $this->entryRepository->findByUid($uid))) { return $this->anyHelper->addFlashMessage('Kein Eintrag gefunden', 'Wurde der Link evt. schon mal geklickt?', 'ERROR'); } $gpVars = $this->_GP; $type = $entry->getExt(); $settings = $this->settings[$type]; $extName = $settings['extension']; $tmplPath = $settings['templatePath']; $data = json_decode($entry->getData(), true); if (!\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded($extName)) { return $this->anyHelper->addFlashMessage('Extension ' . $extName . ' nicht geladen', 'Der Datensatz konnte keiner Extension zugeordnet werden', 'ERROR'); } // Variablen mit eigenem Mapper mappen, falls vorhanden. Sonst Default-Mapper nehmen $mapperName = '\\Nng\\Nnfesubmit\\Mapper\\' . \TYPO3\CMS\Core\Utility\GeneralUtility::underscoredToUpperCamelCase($extName) . 'Mapper'; if (class_exists($mapperName)) { $mapper = $this->objectManager->create($mapperName); $obj = $mapper->map($data, $settings); } else { $mapper = $this->objectManager->create('\\Nng\\Nnfesubmit\\Mapper\\AbstractMapper'); $obj = $mapper->map($data, $settings); } // War es ein bestehender Eintrag? Dann enthält $srcUid jetzt die ursprüngliche UID der fremden Tabelle $srcUid = $entry->getSrcuid(); $insertData = array(); //* // ... und ab in die Datenbank damit if ($obj) { if ($insertData = $mapper->write($obj, $settings, $srcUid)) { $this->entryRepository->remove($entry); $mapper->map_mm($obj, $settings); $this->persistenceManager->persistAll(); } else { return $this->anyHelper->addFlashMessage('Fehler beim Schreiben', 'Der Datensatz konnte nicht in die Datenbank geschrieben werden.', 'ERROR'); } } //*/ // Seiten-Cache löschen für angegebene Seiten if ($pidList = $this->anyHelper->trimExplode(',', $settings['clearCachePid'])) { $TCE = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('\\TYPO3\\CMS\\Core\\DataHandling\\DataHandler'); $TCE->admin = 1; // Brutal, aber nicht anders lösbar $TCE->clear_cacheCmd('all'); // Das ging leider nicht: foreach ($pidList as $pid) { $TCE->clear_cacheCmd($pid); } } $mapperVars = $this->insertViewVariablesFromMapper($extName, $data); // Nachricht an Admin über erfolgreichen Eintrag? // E-Mail an Admin zur Freigabe senden $notificationType = $srcUid ? 'feedit' : 'upload'; if ($settings['notification'] && $settings['notification'][$notificationType]['enabled'] !== '0') { // Daten des Ersteller (fe_user) laden, damit in der Mail der Name eingefügt werden kann $feUser = $this->feUserRepository->findOneByUid($data['_feUserUid']); // Link zum Löschen des Eintrags $adminKey = $this->anyHelper->createKeyForUid($insertData['uid'], 'admin'); $deleteLinkParams = $this->getFeDeleteLinkParams(array_merge($data, $insertData, array('type' => $type, 'adminKey' => $adminKey))); $editLinkParams = $this->getEditLinkParams(array_merge($data, $insertData, array('type' => $type, 'adminKey' => $adminKey))); $data = array_merge_recursive($data, $mapperVars, array('feUser' => $feUser, 'baseUrl' => $GLOBALS['TSFE']->baseUrl, 'settings' => $settings, 'deleteLinkParams' => $deleteLinkParams, 'editLinkParams' => $editLinkParams)); $html = $this->anyHelper->renderTemplate($tmplPath . 'EmailNotification' . ucfirst($notificationType) . '.html', $data, true, null, false); $this->anyHelper->send_email(array_merge($settings['notification'][$notificationType], array('html' => $html))); } if ($srcUid) { $this->anyHelper->addFlashMessage('Eintrag geändert', 'Ihre Änderungen wurden gespeichert.'); } else { $this->anyHelper->addFlashMessage('Eintrag übernommen', 'Die Daten wurden erfolgreich in die Datenbank eingetragen.'); } if ($settings['approvedPid']) { $this->anyHelper->httpRedirect($settings['approvedPid']); } else { if ($settings['showApprovedPage'] !== '0') { // Weiterleitung auf "Beitrag freigeschaltet"-Seite $this->anyHelper->redirect('approved', null, null, $this->GP_baseVars(array('type' => $type))); } else { if ($gpVars['returnUrl']) { // Weiterleiten auf ursprüngliche Seite, in die Beitrag eingefügt wird oder Formular ausgefüllt wurde $this->anyHelper->httpRedirect($gpVars['returnUrl']); } else { if ($data['returnUrl']) { $this->anyHelper->httpRedirect($data['returnUrl']); } else { // Weiß nicht, wohin. Also hier bleiben. $this->anyHelper->httpRedirect(); } } } } }