diff --git a/Classes/FrontendEditPanel.php b/Classes/FrontendEditPanel.php index 1130e61..40cf7df 100644 --- a/Classes/FrontendEditPanel.php +++ b/Classes/FrontendEditPanel.php @@ -1,7 +1,7 @@ cObj = GeneralUtility::makeInstance(\TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer::class); + protected $frontendController; + + /** + * Property for accessing DatabaseConnection centrally + * + * @var DatabaseConnection + */ + protected $databaseConnection; + + /** + * @var FrontendBackendUserAuthentication + */ + protected $backendUser; + + /** + * Constructor for the edit panel + * + * @param DatabaseConnection $databaseConnection + * @param TypoScriptFrontendController $frontendController + * @param FrontendBackendUserAuthentication $backendUser + */ + public function __construct(DatabaseConnection $databaseConnection = NULL, TypoScriptFrontendController $frontendController = NULL, FrontendBackendUserAuthentication $backendUser = NULL) { + $this->databaseConnection = $databaseConnection ?: $GLOBALS['TYPO3_DB']; + $this->frontendController = $frontendController ?: $GLOBALS['TSFE']; + $this->backendUser = $backendUser ?: $GLOBALS['BE_USER']; + $this->cObj = GeneralUtility::makeInstance('TYPO3\\CMS\\Frontend\\ContentObject\\ContentObjectRenderer'); $this->cObj->start(array()); } @@ -46,68 +78,63 @@ class FrontendEditPanel { * @param string $currentRecord The "table:uid" of the record being shown. If empty string then $this->currentRecord is used. For new records (set by $conf['newRecordFromTable']) it's auto-generated to "[tablename]:NEW * @param array $dataArr Alternative data array to use. Default is $this->data * @param string $table - * @param string $allow + * @param array $allow * @param int $newUID * @param array $hiddenFields * @return string The input content string with the editPanel appended. This function returns only an edit panel appended to the content string if a backend user is logged in (and has the correct permissions). Otherwise the content string is directly returned. */ - public function editPanel($content, array $conf, $currentRecord = '', array $dataArr = array(), $table = '', $allow = '', $newUID = 0, array $hiddenFields = array()) { + public function editPanel($content, array $conf, $currentRecord = '', array $dataArr = array(), $table = '', array $allow = array(), $newUID = 0, array $hiddenFields = array()) { $hiddenFieldString = $command = ''; // Special content is about to be shown, so the cache must be disabled. - $GLOBALS['TSFE']->set_no_cache('Frontend edit panel is shown', TRUE); + $this->frontendController->set_no_cache('Frontend edit panel is shown', TRUE); - $formName = 'TSFE_EDIT_FORM_' . substr($GLOBALS['TSFE']->uniqueHash(), 0, 4); + $formName = 'TSFE_EDIT_FORM_' . substr($this->frontendController->uniqueHash(), 0, 4); $formTag = '
'; $sortField = $GLOBALS['TCA'][$table]['ctrl']['sortby']; $labelField = $GLOBALS['TCA'][$table]['ctrl']['label']; $hideField = $GLOBALS['TCA'][$table]['ctrl']['enablecolumns']['disabled']; - $TSFE_EDIT = $GLOBALS['BE_USER']->frontendEdit->TSFE_EDIT; - if (is_array($TSFE_EDIT) && $TSFE_EDIT['record'] == $currentRecord && !$TSFE_EDIT['update_close']) { - $command = $TSFE_EDIT['cmd']; - } - $panel = ''; - if (isset($allow['toolbar']) && $GLOBALS['BE_USER']->adminPanel instanceof \TYPO3\CMS\Frontend\View\AdminPanelView) { - $panel .= $GLOBALS['BE_USER']->adminPanel->ext_makeToolBar(); + if (isset($allow['toolbar']) && $this->backendUser->adminPanel instanceof AdminPanelView) { + $panel .= $this->backendUser->adminPanel->ext_makeToolBar(); } if (isset($allow['edit'])) { - $icon = IconUtility::getSpriteIcon('actions-document-open', array('title' => $GLOBALS['BE_USER']->extGetLL('p_editRecord'))); + $icon = IconUtility::getSpriteIcon('actions-document-open', array('title' => $this->backendUser->extGetLL('p_editRecord'))); $panel .= $this->editPanelLinkWrap($icon, $formName, 'edit', $dataArr['_LOCALIZED_UID'] ? $table . ':' . $dataArr['_LOCALIZED_UID'] : $currentRecord); } // Hiding in workspaces because implementation is incomplete - if (isset($allow['move']) && $sortField && $GLOBALS['BE_USER']->workspace === 0) { - $icon = IconUtility::getSpriteIcon('actions-move-up', array('title' => $GLOBALS['BE_USER']->extGetLL('p_moveUp'))); + if (isset($allow['move']) && $sortField && $this->backendUser->workspace === 0) { + $icon = IconUtility::getSpriteIcon('actions-move-up', array('title' => $this->backendUser->extGetLL('p_moveUp'))); $panel .= $this->editPanelLinkWrap($icon, $formName, 'up'); - $icon = IconUtility::getSpriteIcon('actions-move-down', array('title' => $GLOBALS['BE_USER']->extGetLL('p_moveDown'))); + $icon = IconUtility::getSpriteIcon('actions-move-down', array('title' => $this->backendUser->extGetLL('p_moveDown'))); $panel .= $this->editPanelLinkWrap($icon, $formName, 'down'); } // Hiding in workspaces because implementation is incomplete // Hiding for localizations because it is unknown what should be the function in that case - if (isset($allow['hide']) && $hideField && $GLOBALS['BE_USER']->workspace === 0 && !$dataArr['_LOCALIZED_UID']) { + if (isset($allow['hide']) && $hideField && $this->backendUser->workspace === 0 && !$dataArr['_LOCALIZED_UID']) { if ($dataArr[$hideField]) { - $icon = IconUtility::getSpriteIcon('actions-edit-unhide', array('title' => $GLOBALS['BE_USER']->extGetLL('p_unhide'))); + $icon = IconUtility::getSpriteIcon('actions-edit-unhide', array('title' => $this->backendUser->extGetLL('p_unhide'))); $panel .= $this->editPanelLinkWrap($icon, $formName, 'unhide'); } else { - $icon = IconUtility::getSpriteIcon('actions-edit-hide', array('title' => $GLOBALS['BE_USER']->extGetLL('p_hide'))); - $panel .= $this->editPanelLinkWrap($icon, $formName, 'hide', '', $GLOBALS['BE_USER']->extGetLL('p_hideConfirm')); + $icon = IconUtility::getSpriteIcon('actions-edit-hide', array('title' => $this->backendUser->extGetLL('p_hide'))); + $panel .= $this->editPanelLinkWrap($icon, $formName, 'hide', '', $this->backendUser->extGetLL('p_hideConfirm')); } } if (isset($allow['new'])) { if ($table === 'pages') { - $icon = IconUtility::getSpriteIcon('actions-page-new', array('title' => $GLOBALS['BE_USER']->extGetLL('p_newSubpage'))); + $icon = IconUtility::getSpriteIcon('actions-page-new', array('title' => $this->backendUser->extGetLL('p_newSubpage'))); $panel .= $this->editPanelLinkWrap($icon, $formName, 'new', $currentRecord, ''); } else { - $icon = IconUtility::getSpriteIcon('actions-document-new', array('title' => $GLOBALS['BE_USER']->extGetLL('p_newRecordAfter'))); + $icon = IconUtility::getSpriteIcon('actions-document-new', array('title' => $this->backendUser->extGetLL('p_newRecordAfter'))); $panel .= $this->editPanelLinkWrap($icon, $formName, 'new', $currentRecord, '', $newUID); } } // Hiding in workspaces because implementation is incomplete // Hiding for localizations because it is unknown what should be the function in that case - if (isset($allow['delete']) && $GLOBALS['BE_USER']->workspace === 0 && !$dataArr['_LOCALIZED_UID']) { - $icon = IconUtility::getSpriteIcon('actions-edit-delete', array('title' => $GLOBALS['BE_USER']->extGetLL('p_delete'))); - $panel .= $this->editPanelLinkWrap($icon, $formName, 'delete', '', $GLOBALS['BE_USER']->extGetLL('p_deleteConfirm')); + if (isset($allow['delete']) && $this->backendUser->workspace === 0 && !$dataArr['_LOCALIZED_UID']) { + $icon = IconUtility::getSpriteIcon('actions-edit-delete', array('title' => $this->backendUser->extGetLL('p_delete'))); + $panel .= $this->editPanelLinkWrap($icon, $formName, 'delete', '', $this->backendUser->extGetLL('p_deleteConfirm')); } // Final $labelTxt = $this->cObj->stdWrap($conf['label'], $conf['label.']); @@ -172,10 +199,10 @@ class FrontendEditPanel { */ public function editIcons($content, $params, array $conf = array(), $currentRecord = '', array $dataArr = array(), $addUrlParamStr = '', $table, $editUid, $fieldList) { // Special content is about to be shown, so the cache must be disabled. - $GLOBALS['TSFE']->set_no_cache('Display frontend edit icons', TRUE); + $this->frontendController->set_no_cache('Display frontend edit icons', TRUE); $style = $conf['styleAttribute'] ? ' style="' . htmlspecialchars($conf['styleAttribute']) . '"' : ''; $iconTitle = $this->cObj->stdWrap($conf['iconTitle'], $conf['iconTitle.']); - $iconImg = $conf['iconImg'] ? $conf['iconImg'] : ''; + $iconImg = $conf['iconImg'] ? $conf['iconImg'] : ''; $nV = GeneralUtility::_GP('ADMCMD_view') ? 1 : 0; $adminURL = GeneralUtility::getIndpEnv('TYPO3_SITE_URL') . TYPO3_mainDir; $icon = $this->editPanelLinkWrap_doWrap($iconImg, $adminURL . 'alt_doc.php?edit[' . $table . '][' . $editUid . ']=edit&columnsOnly=' . rawurlencode($fieldList) . '&noView=' . $nV . $addUrlParamStr); @@ -188,9 +215,7 @@ class FrontendEditPanel { $cBuf = rtrim(preg_replace('/<[^<]*>$/', '', $cBuf)); $secureCount--; } - $content = $cBuf !== '' && $secureCount - ? substr($content, 0, strlen($cBuf)) . $icon . substr($content, strlen($cBuf)) - : $icon . $content; + $content = strlen($cBuf) && $secureCount ? substr($content, 0, strlen($cBuf)) . $icon . substr($content, strlen($cBuf)) : ($content = $icon . $content); } else { $content .= $icon; } @@ -221,12 +246,12 @@ class FrontendEditPanel { $out = $this->editPanelLinkWrap_doWrap($string, $adminURL . 'db_new.php?id=' . $rParts[1] . '&pagesOnly=1', $currentRecord); } else { if (!(int)$nPid) { - $nPid = \TYPO3\CMS\Core\Utility\MathUtility::canBeInterpretedAsInteger($rParts[1]) ? -$rParts[1] : $GLOBALS['TSFE']->id; + $nPid = MathUtility::canBeInterpretedAsInteger($rParts[1]) ? -$rParts[1] : $this->frontendController->id; } $out = $this->editPanelLinkWrap_doWrap($string, $adminURL . 'alt_doc.php?edit[' . $rParts[0] . '][' . $nPid . ']=new&noView=' . $nV, $currentRecord); } } else { - if ($confirm && $GLOBALS['BE_USER']->jsConfirmation(8)) { + if ($confirm && $this->backendUser->jsConfirmation(8)) { // Gets htmlspecialchared later $cf1 = 'if (confirm(' . GeneralUtility::quoteJSvalue($confirm, TRUE) . ')) {'; $cf2 = '}'; @@ -239,8 +264,7 @@ class FrontendEditPanel { } /** - * Creates a link to a script (eg. typo3/alt_doc.php or typo3/db_new.php) - * which either opens in the current frame OR in a pop-up window. + * Creates a link to a script (eg. typo3/alt_doc.php or typo3/db_new.php) which either opens in the current frame OR in a pop-up window. * * @param string $string The string to wrap in a link, typ. and image used as button in the edit panel. * @param string $url The URL of the link. Should be absolute if supposed to work with path set. @@ -248,15 +272,8 @@ class FrontendEditPanel { * @see editPanelLinkWrap() */ protected function editPanelLinkWrap_doWrap($string, $url) { - // Open in the current frame? - if ($GLOBALS['BE_USER']->adminPanel->extGetFeAdminValue('edit', 'editNoPopup')) { - $href = htmlspecialchars($url . '&returnUrl=' . rawurlencode(GeneralUtility::getIndpEnv('REQUEST_URI'))); - return '' . $string . ''; - } else { - $onclick = 'vHWin=window.open(' . GeneralUtility::quoteJSvalue($url . '&returnUrl=close.html') . - ',\'FEquickEditWindow\',\'width=690,height=500,status=0,menubar=0,scrollbars=1,resizable=1\');vHWin.focus();return false;'; - return '' . $string . ''; - } + $onclick = 'vHWin=window.open(' . GeneralUtility::quoteJSvalue($url . '&returnUrl=close.html') . ',\'FEquickEditWindow\',\'width=690,height=500,status=0,menubar=0,scrollbars=1,resizable=1\');vHWin.focus();return false;'; + return '' . $string . ''; } /** @@ -272,8 +289,8 @@ class FrontendEditPanel { $GLOBALS['TCA'][$table]['ctrl']['enablecolumns']['disabled'] && $row[$GLOBALS['TCA'][$table]['ctrl']['enablecolumns']['disabled']] || $GLOBALS['TCA'][$table]['ctrl']['enablecolumns']['fe_group'] && - $GLOBALS['TSFE']->simUserGroup && - $row[$GLOBALS['TCA'][$table]['ctrl']['enablecolumns']['fe_group']] == $GLOBALS['TSFE']->simUserGroup || + $this->frontendController->simUserGroup && + $row[$GLOBALS['TCA'][$table]['ctrl']['enablecolumns']['fe_group']] == $this->frontendController->simUserGroup || $GLOBALS['TCA'][$table]['ctrl']['enablecolumns']['starttime'] && $row[$GLOBALS['TCA'][$table]['ctrl']['enablecolumns']['starttime']] > $GLOBALS['EXEC_TIME'] || $GLOBALS['TCA'][$table]['ctrl']['enablecolumns']['endtime'] &&