/** * Generates the action menu * * @return void */ protected function generateMenu() { $menuItems = ['installedExtensions' => ['controller' => 'List', 'action' => 'index', 'label' => $this->translate('installedExtensions')]]; if (!$this->settings['offlineMode'] && !Bootstrap::usesComposerClassLoading()) { $menuItems['getExtensions'] = ['controller' => 'List', 'action' => 'ter', 'label' => $this->translate('getExtensions')]; $menuItems['distributions'] = ['controller' => 'List', 'action' => 'distributions', 'label' => $this->translate('distributions')]; if ($this->actionMethodName === 'showAllVersionsAction') { $menuItems['showAllVersions'] = ['controller' => 'List', 'action' => 'showAllVersions', 'label' => $this->translate('showAllVersions') . ' ' . $this->request->getArgument('extensionKey')]; } } $uriBuilder = $this->objectManager->get(UriBuilder::class); $uriBuilder->setRequest($this->request); $menu = $this->view->getModuleTemplate()->getDocHeaderComponent()->getMenuRegistry()->makeMenu(); $menu->setIdentifier('ExtensionManagerModuleMenu'); foreach ($menuItems as $menuItemConfig) { if ($this->request->getControllerName() === $menuItemConfig['controller']) { $isActive = $this->request->getControllerActionName() === $menuItemConfig['action'] ? true : false; } else { $isActive = false; } $menuItem = $menu->makeMenuItem()->setTitle($menuItemConfig['label'])->setHref($this->getHref($menuItemConfig['controller'], $menuItemConfig['action']))->setActive($isActive); $menu->addMenuItem($menuItem); } $this->view->getModuleTemplate()->getDocHeaderComponent()->getMenuRegistry()->addMenu($menu); $this->view->getModuleTemplate()->setFlashMessageQueue($this->controllerContext->getFlashMessageQueue()); }
/** * Edit action * * @return void */ public function editAction() { $this->view->assign('id', $this->id); $this->view->assign('depth', $this->depth); if (!$this->id) { $this->pageInfo = array('title' => '[root-level]', 'uid' => 0, 'pid' => 0); } if ($this->getBackendUser()->workspace != 0) { // Adding FlashMessage with the permission setting matrix: $this->addFlashMessage(LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:WorkspaceWarningText', 'beuser'), LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:WorkspaceWarning', 'beuser'), FlashMessage::WARNING); } // Get usernames and groupnames $beGroupArray = BackendUtility::getListGroupNames('title,uid'); $beUserArray = BackendUtility::getUserNames(); // Owner selector $beUserDataArray = array(0 => LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:selectNone', 'beuser')); foreach ($beUserArray as $uid => &$row) { $beUserDataArray[$uid] = $row['username']; } $beUserDataArray[-1] = LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:selectUnchanged', 'beuser'); $this->view->assign('currentBeUser', $this->pageInfo['perms_userid']); $this->view->assign('beUserData', $beUserDataArray); // Group selector $beGroupDataArray = array(0 => LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:selectNone', 'beuser')); foreach ($beGroupArray as $uid => $row) { $beGroupDataArray[$uid] = $row['title']; } $beGroupDataArray[-1] = LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:selectUnchanged', 'beuser'); $this->view->assign('currentBeGroup', $this->pageInfo['perms_groupid']); $this->view->assign('beGroupData', $beGroupDataArray); $this->view->assign('pageInfo', $this->pageInfo); $this->view->assign('returnId', $this->returnId); $this->view->assign('recursiveSelectOptions', $this->getRecursiveSelectOptions()); }
/** * DocHeaderButtons */ protected function prepareDocHeaderButtons() { // @todo: the html structure needed to operate the buttons correctly is broken now. // @todo: LanguageModule.js and backend.css -> div.typo3-module-lang div.menuItems $downloadAllButton = $this->view->getModuleTemplate()->getDocHeaderComponent()->getButtonBar()->makeLinkButton()->setIcon($this->view->getModuleTemplate()->getIconFactory()->getIcon('actions-system-extension-download', Icon::SIZE_SMALL))->setTitle($this->getLanguageService()->sL('LLL:EXT:lang/Resources/Private/Language/locallang.xlf:button.downloadAll'))->setClasses('menuItem updateItem t3js-button-update')->setDataAttributes(['action' => 'updateActiveLanguages'])->setHref('#'); $this->view->getModuleTemplate()->getDocHeaderComponent()->getButtonBar()->addButton($downloadAllButton, ButtonBar::BUTTON_POSITION_LEFT); $cancelButton = $this->view->getModuleTemplate()->getDocHeaderComponent()->getButtonBar()->makeLinkButton()->setIcon($this->view->getModuleTemplate()->getIconFactory()->getIcon('actions-document-close', Icon::SIZE_SMALL))->setTitle($this->getLanguageService()->sL('LLL:EXT:lang/Resources/Private/Language/locallang.xlf:button.cancel'))->setClasses('menuItem cancelItem disabled t3js-button-cancel')->setDataAttributes(['action' => 'cancelLanguageUpdate'])->setHref('#'); $this->view->getModuleTemplate()->getDocHeaderComponent()->getButtonBar()->addButton($cancelButton, ButtonBar::BUTTON_POSITION_LEFT); }
/** * @param string $type = 'proposed' * @throws \InvalidArgumentException */ public function manageAction($type = 'proposed') { if (!in_array($type, array_keys(ApiModuleController::$slugClassMap))) { throw new \InvalidArgumentException('type parameter must be one of the following: ' . implode(array_keys(ApiModuleController::$slugClassMap))); } $this->view->assign('manageConfig', json_encode(['updateUrl' => $this->getHref('ApiModule', 'toggle', ['id' => '{id}', 'type' => '{type}'])])); $this->view->assign('type', $type); $this->view->assign('sessions', $this->getFlatSessionObjects($type)); }
/** * If the user is in a workspace different than LIVE, * we force to show only log entries from the selected workspace, * and the workspace selector is not shown. * * @param \TYPO3\CMS\Belog\Domain\Model\Constraint $constraint * @return void */ protected function forceWorkspaceSelectionIfInWorkspace(\TYPO3\CMS\Belog\Domain\Model\Constraint $constraint) { if ($GLOBALS['BE_USER']->workspace !== 0) { $constraint->setWorkspaceUid($GLOBALS['BE_USER']->workspace); $this->view->assign('showWorkspaceSelector', false); } else { $this->view->assign('showWorkspaceSelector', true); } }
/** * Shows a page tree including count of news + category records * * @param integer $treeLevel * @return void */ public function newsPidListingAction($treeLevel = 2) { $tree = Page::pageTree($this->pageUid, $treeLevel); $rawTree = array(); foreach ($tree->tree as $row) { $this->countRecordsOnPage($row); $rawTree[] = $row; } $assignedValues = array('tree' => $rawTree, 'treeLevel' => $treeLevel); $assignedValues = $this->emitActionSignal('AdministrationController', self::SIGNAL_ADMINISTRATION_NEWSPIDLISTING_ACTION, $assignedValues); $this->view->assignMultiple($assignedValues); }
/** * Gets all buttons for the docheader */ protected function generateButtons() { $buttonBar = $this->view->getModuleTemplate()->getDocHeaderComponent()->getButtonBar(); $moduleName = $this->request->getPluginName(); $getVars = $this->request->hasArgument('getVars') ? $this->request->getArgument('getVars') : []; $setVars = $this->request->hasArgument('setVars') ? $this->request->getArgument('setVars') : []; if (count($getVars) === 0) { $modulePrefix = strtolower('tx_' . $this->request->getControllerExtensionName() . '_' . $moduleName); $getVars = array('id', 'M', $modulePrefix); } $shortcutButton = $buttonBar->makeShortcutButton()->setModuleName($moduleName)->setGetVariables($getVars)->setDisplayName($this->shortcutName)->setSetVariables($setVars); $buttonBar->addButton($shortcutButton); }
/** * Shows documents to be downloaded/fetched from a remote location. * * @return void */ public function downloadAction() { // This action is reserved for admin users. Redirect to default view if not. if (!$this->getBackendUser()->isAdmin()) { $this->redirect('list'); } // Retrieve the list of official documents $documents = $this->documentationService->getOfficialDocuments(); // Merge with the list of local extensions $extensions = $this->documentationService->getLocalExtensions(); $allDocuments = array_merge($documents, $extensions); $this->view->assign('documents', $allDocuments); }
/** * General statistics * * @param int $depth * @param string $mode * @return void */ public function statisticAction($depth = 1, $mode = 'overview') { if (is_array($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['indexed_search']['external_parsers'])) { foreach ($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['indexed_search']['external_parsers'] as $extension => $_objRef) { /** @var \TYPO3\CMS\IndexedSearch\FileContentParser $fileContentParser */ $fileContentParser = GeneralUtility::getUserObj($_objRef); if ($fileContentParser->softInit($extension)) { $this->external_parsers[$extension] = $fileContentParser; } } } $this->administrationRepository->external_parsers = $this->external_parsers; $allLines = $this->administrationRepository->getTree($this->pageUid, $depth, $mode); $this->view->assignMultiple(['levelTranslations' => explode('|', $this->getLanguageService()->sL('LLL:EXT:lang/Resources/Private/Language/locallang_core.xlf:labels.enterSearchLevels')), 'tree' => $allLines, 'pageUid' => $this->pageUid, 'mode' => $mode, 'depth' => $depth]); }
/** * Gets all buttons for the docheader */ protected function generateButtons() { $buttonBar = $this->view->getModuleTemplate()->getDocHeaderComponent()->getButtonBar(); $moduleName = $this->request->getPluginName(); $getVars = $this->request->hasArgument('getVars') ? $this->request->getArgument('getVars') : []; $setVars = $this->request->hasArgument('setVars') ? $this->request->getArgument('setVars') : []; if ($this->getBackendUser()->mayMakeShortcut()) { if (count($getVars) === 0) { $modulePrefix = strtolower('tx_' . $this->request->getControllerExtensionName() . '_' . $moduleName); $getVars = array('id', 'M', $modulePrefix); } $shortcutButton = $buttonBar->makeFullyRenderedButton()->setHtmlSource($this->view->getModuleTemplate()->makeShortcutIcon(implode(',', $getVars), implode(',', $setVars), $moduleName)); $buttonBar->addButton($shortcutButton, ButtonBar::BUTTON_POSITION_RIGHT, 99); } }
/** * Registers the Icons into the docheader * * @return void * @throws \InvalidArgumentException */ protected function registerDocheaderButtons() { /** @var ButtonBar $buttonBar */ $buttonBar = $this->view->getModuleTemplate()->getDocHeaderComponent()->getButtonBar(); $currentRequest = $this->request; $moduleName = $currentRequest->getPluginName(); $getVars = $this->request->getArguments(); $extensionName = $currentRequest->getControllerExtensionName(); if (count($getVars) === 0) { $modulePrefix = strtolower('tx_' . $extensionName . '_' . $moduleName); $getVars = array('id', 'M', $modulePrefix); } $shortcutName = $this->getLanguageService()->sL('LLL:EXT:beuser/Resources/Private/Language/locallang.xml:backendUsers'); if ($this->request->getControllerName() === 'BackendUser') { if ($this->request->getControllerActionName() === 'index') { $returnUrl = rawurlencode(BackendUtility::getModuleUrl('system_BeuserTxBeuser')); $parameters = GeneralUtility::explodeUrl2Array('edit[be_users][0]=new&returnUrl=' . $returnUrl); $addUserLink = BackendUtility::getModuleUrl('record_edit', $parameters); $title = $this->getLanguageService()->sL('LLL:EXT:backend/Resources/Private/Language/locallang_layout.xlf:newRecordGeneral', true); $icon = $this->view->getModuleTemplate()->getIconFactory()->getIcon('actions-document-new', Icon::SIZE_SMALL); $addUserButton = $buttonBar->makeLinkButton()->setHref($addUserLink)->setTitle($title)->setIcon($icon); $buttonBar->addButton($addUserButton, ButtonBar::BUTTON_POSITION_LEFT); } if ($this->request->getControllerActionName() === 'compare') { $addUserLink = BackendUtility::getModuleUrl('system_BeuserTxBeuser'); $title = $this->getLanguageService()->sL('LLL:EXT:lang/locallang_core.xlf:labels.goBack', true); $icon = $this->view->getModuleTemplate()->getIconFactory()->getIcon('actions-view-go-back', Icon::SIZE_SMALL); $addUserButton = $buttonBar->makeLinkButton()->setHref($addUserLink)->setTitle($title)->setIcon($icon); $buttonBar->addButton($addUserButton, ButtonBar::BUTTON_POSITION_LEFT); } if ($this->request->getControllerActionName() === 'online') { $shortcutName = $this->getLanguageService()->sL('LLL:EXT:beuser/Resources/Private/Language/locallang.xml:onlineUsers'); } } if ($this->request->getControllerName() === 'BackendUserGroup') { $shortcutName = $this->getLanguageService()->sL('LLL:EXT:beuser/Resources/Private/Language/locallang.xml:backendUserGroupsMenu'); $returnUrl = rawurlencode(BackendUtility::getModuleUrl('system_BeuserTxBeuser', array('tx_beuser_system_beusertxbeuser' => array('action' => 'index', 'controller' => 'BackendUserGroup')))); $parameters = GeneralUtility::explodeUrl2Array('edit[be_groups][0]=new&returnUrl=' . $returnUrl); $addUserLink = BackendUtility::getModuleUrl('record_edit', $parameters); $title = $this->getLanguageService()->sL('LLL:EXT:backend/Resources/Private/Language/locallang_layout.xlf:newRecordGeneral', true); $icon = $this->view->getModuleTemplate()->getIconFactory()->getIcon('actions-document-new', Icon::SIZE_SMALL); $addUserGroupButton = $buttonBar->makeLinkButton()->setHref($addUserLink)->setTitle($title)->setIcon($icon); $buttonBar->addButton($addUserGroupButton, ButtonBar::BUTTON_POSITION_LEFT); } $shortcutButton = $buttonBar->makeShortcutButton()->setModuleName($moduleName)->setDisplayName($shortcutName)->setGetVariables($getVars); $buttonBar->addButton($shortcutButton); }
/** * Registers the Icons into the docheader * * @return void * @throws \InvalidArgumentException */ protected function registerDocheaderButtons() { /** @var ButtonBar $buttonBar */ $buttonBar = $this->view->getModuleTemplate()->getDocHeaderComponent()->getButtonBar(); $currentRequest = $this->request; $moduleName = $currentRequest->getPluginName(); $getVars = $this->request->getArguments(); $extensionName = $currentRequest->getControllerExtensionName(); if (count($getVars) === 0) { $modulePrefix = strtolower('tx_' . $extensionName . '_' . $moduleName); $getVars = ['id', 'M', $modulePrefix]; } $shortcutButton = $buttonBar->makeShortcutButton()->setModuleName($moduleName)->setGetVariables($getVars); $buttonBar->addButton($shortcutButton); $reloadButton = $buttonBar->makeLinkButton()->setHref('#')->setDataAttributes(['action' => 'reload'])->setTitle($this->getLanguageService()->sL('LLL:EXT:recycler/Resources/Private/Language/locallang.xlf:button.reload'))->setIcon($this->view->getModuleTemplate()->getIconFactory()->getIcon('actions-refresh', Icon::SIZE_SMALL)); $buttonBar->addButton($reloadButton, ButtonBar::BUTTON_POSITION_RIGHT); }
/** * Determine the url to view * * @return string */ protected function getTargetUrl() { $pageIdToShow = (int) GeneralUtility::_GP('id'); $permissionClause = $this->getBackendUser()->getPagePermsClause(1); $pageRecord = BackendUtility::readPageAccess($pageIdToShow, $permissionClause); if ($pageRecord) { $this->view->getModuleTemplate()->getDocHeaderComponent()->setMetaInformation($pageRecord); $adminCommand = $this->getAdminCommand($pageIdToShow); $domainName = $this->getDomainName($pageIdToShow); $languageParameter = $this->getLanguageParameter(); // Mount point overlay: Set new target page id and mp parameter /** @var \TYPO3\CMS\Frontend\Page\PageRepository $sysPage */ $sysPage = GeneralUtility::makeInstance(\TYPO3\CMS\Frontend\Page\PageRepository::class); $sysPage->init(false); $mountPointMpParameter = ''; $finalPageIdToShow = $pageIdToShow; $mountPointInformation = $sysPage->getMountPointInfo($pageIdToShow); if ($mountPointInformation && $mountPointInformation['overlay']) { // New page id $finalPageIdToShow = $mountPointInformation['mount_pid']; $mountPointMpParameter = '&MP=' . $mountPointInformation['MPvar']; } // Modify relative path to protocol with host if domain record is given $protocolAndHost = '..'; if ($domainName) { // TCEMAIN.previewDomain can contain the protocol, check prevents double protocol URLs if (strpos($domainName, '://') !== false) { $protocolAndHost = $domainName; } else { $protocol = 'http'; $page = (array) $sysPage->getPage($finalPageIdToShow); if ($page['url_scheme'] == 2 || $page['url_scheme'] == 0 && GeneralUtility::getIndpEnv('TYPO3_SSL')) { $protocol = 'https'; } $protocolAndHost = $protocol . '://' . $domainName; } } return $protocolAndHost . '/index.php?id=' . $finalPageIdToShow . $this->getTypeParameterIfSet($finalPageIdToShow) . $mountPointMpParameter . $adminCommand . $languageParameter; } else { return '#'; } }
/** * Create the panel of buttons for submitting the form or otherwise perform operations. * * @return array All available buttons as an assoc. array */ protected function registerButtons() { /** @var ButtonBar $buttonBar */ $buttonBar = $this->view->getModuleTemplate()->getDocHeaderComponent()->getButtonBar(); /** @var IconFactory $iconFactory */ $iconFactory = $this->view->getModuleTemplate()->getIconFactory(); /** @var $resourceFactory ResourceFactory */ $resourceFactory = GeneralUtility::makeInstance(ResourceFactory::class); $lang = $this->getLanguageService(); // Refresh page $refreshLink = GeneralUtility::linkThisScript(['target' => rawurlencode($this->folderObject->getCombinedIdentifier()), 'imagemode' => $this->filelist->thumbs]); $refreshButton = $buttonBar->makeLinkButton()->setHref($refreshLink)->setTitle($lang->sL('LLL:EXT:lang/Resources/Private/Language/locallang_core.xlf:labels.reload'))->setIcon($iconFactory->getIcon('actions-refresh', Icon::SIZE_SMALL)); $buttonBar->addButton($refreshButton, ButtonBar::BUTTON_POSITION_RIGHT); // Level up try { $currentStorage = $this->folderObject->getStorage(); $parentFolder = $this->folderObject->getParentFolder(); if ($parentFolder->getIdentifier() !== $this->folderObject->getIdentifier() && $currentStorage->isWithinFileMountBoundaries($parentFolder)) { $levelUpClick = 'top.document.getElementsByName("navigation")[0].contentWindow.Tree.highlightActiveItem("file","folder' . GeneralUtility::md5int($parentFolder->getCombinedIdentifier()) . '_"+top.fsMod.currentBank)'; $levelUpButton = $buttonBar->makeLinkButton()->setHref(BackendUtility::getModuleUrl('file_FilelistList', ['id' => $parentFolder->getCombinedIdentifier()]))->setOnClick($levelUpClick)->setTitle($lang->sL('LLL:EXT:lang/Resources/Private/Language/locallang_core.xlf:labels.upOneLevel'))->setIcon($iconFactory->getIcon('actions-view-go-up', Icon::SIZE_SMALL)); $buttonBar->addButton($levelUpButton, ButtonBar::BUTTON_POSITION_LEFT, 1); } } catch (\Exception $e) { } // Shortcut if ($this->getBackendUser()->mayMakeShortcut()) { $shortCutButton = $buttonBar->makeShortcutButton()->setModuleName('file_FilelistList'); $buttonBar->addButton($shortCutButton, ButtonBar::BUTTON_POSITION_RIGHT); } // Upload button (only if upload to this directory is allowed) if ($this->folderObject && $this->folderObject->getStorage()->checkUserActionPermission('add', 'File') && $this->folderObject->checkActionPermission('write')) { $uploadButton = $buttonBar->makeLinkButton()->setHref(BackendUtility::getModuleUrl('file_upload', ['target' => $this->folderObject->getCombinedIdentifier(), 'returnUrl' => $this->filelist->listURL()]))->setClasses('t3js-drag-uploader-trigger')->setTitle($lang->sL('LLL:EXT:lang/Resources/Private/Language/locallang_core.xlf:cm.upload'))->setIcon($iconFactory->getIcon('actions-edit-upload', Icon::SIZE_SMALL)); $buttonBar->addButton($uploadButton, ButtonBar::BUTTON_POSITION_LEFT, 1); } // New folder button if ($this->folderObject && $this->folderObject->checkActionPermission('write') && ($this->folderObject->getStorage()->checkUserActionPermission('add', 'File') || $this->folderObject->checkActionPermission('add'))) { $newButton = $buttonBar->makeLinkButton()->setHref(BackendUtility::getModuleUrl('file_newfolder', ['target' => $this->folderObject->getCombinedIdentifier(), 'returnUrl' => $this->filelist->listURL()]))->setTitle($lang->sL('LLL:EXT:lang/Resources/Private/Language/locallang_core.xlf:cm.new'))->setIcon($iconFactory->getIcon('actions-document-new', Icon::SIZE_SMALL)); $buttonBar->addButton($newButton, ButtonBar::BUTTON_POSITION_LEFT, 1); } // Add paste button if clipboard is initialized if ($this->filelist->clipObj instanceof Clipboard && $this->folderObject->checkActionPermission('write')) { $elFromTable = $this->filelist->clipObj->elFromTable('_FILE'); if (!empty($elFromTable)) { $addPasteButton = true; $elToConfirm = []; foreach ($elFromTable as $key => $element) { $clipBoardElement = $resourceFactory->retrieveFileOrFolderObject($element); if ($clipBoardElement instanceof Folder && $clipBoardElement->getStorage()->isWithinFolder($clipBoardElement, $this->folderObject)) { $addPasteButton = false; } $elToConfirm[$key] = $clipBoardElement->getName(); } if ($addPasteButton) { $confirmText = $this->filelist->clipObj->confirmMsgText('_FILE', $this->folderObject->getReadablePath(), 'into', $elToConfirm); $pasteButton = $buttonBar->makeLinkButton()->setHref($this->filelist->clipObj->pasteUrl('_FILE', $this->folderObject->getCombinedIdentifier()))->setClasses('t3js-modal-trigger')->setDataAttributes(['severity' => 'warning', 'content' => $confirmText, 'title' => $lang->getLL('clip_paste')])->setTitle($lang->getLL('clip_paste'))->setIcon($iconFactory->getIcon('actions-document-paste-into', Icon::SIZE_SMALL)); $buttonBar->addButton($pasteButton, ButtonBar::BUTTON_POSITION_LEFT, 2); } } } }