/** * @test * @dataProvider enrichExtensionsWithEmConfInformationDataProvider * @param $extensions * @param $emConf * @param $expectedResult * @return void */ public function enrichExtensionsWithEmConfInformation($extensions, $emConf, $expectedResult) { $this->inject($this->subject, 'extensionRepository', $this->getAccessibleMock(\TYPO3\CMS\Extensionmanager\Domain\Repository\ExtensionRepository::class, array('findOneByExtensionKeyAndVersion', 'findHighestAvailableVersion'), array(), '', FALSE)); $emConfUtilityMock = $this->getMock(\TYPO3\CMS\Extensionmanager\Utility\EmConfUtility::class); $emConfUtilityMock->expects($this->any())->method('includeEmConf')->will($this->returnValue($emConf)); $this->inject($this->subject, 'emConfUtility', $emConfUtilityMock); $this->assertEquals($expectedResult, $this->subject->enrichExtensionsWithEmConfAndTerInformation($extensions)); }
/** * Returns all objects of this repository. * * @return array */ public function findAll() { if (!count($this->extensions)) { $availableAndInstalledExtensions = $this->listUtility->getAvailableAndInstalledExtensionsWithAdditionalInformation(); foreach ($availableAndInstalledExtensions as $entry) { /** @var $extension \TYPO3\CMS\Lang\Domain\Model\Extension */ $extension = $this->objectManager->get('TYPO3\\CMS\\Lang\\Domain\\Model\\Extension', $entry['key'], $entry['title'], $this->getExtensionIconWithPath($entry)); $extension->setVersionFromString($entry['version']); $this->extensions[$entry['key']] = $extension; } // Sort the list by extension key ksort($this->extensions); } return $this->extensions; }
/** * @test * @dataProvider enrichExtensionsWithEmConfInformationDataProvider * @param $extensions * @param $emConf * @param $expectedResult * @return void */ public function enrichExtensionsWithEmConfInformation($extensions, $emConf, $expectedResult) { $this->fixture->extensionRepository = $this->getAccessibleMock('TYPO3\\CMS\\Extensionmanager\\Domain\\Repository\\ExtensionRepository', array('findOneByExtensionKeyAndVersion')); $this->fixture->emConfUtility = $this->getMock('TYPO3\\CMS\\Extensionmanager\\Utility\\EmConfUtility'); $this->fixture->emConfUtility->expects($this->any())->method('includeEmConf')->will($this->returnValue($emConf)); $this->assertEquals($expectedResult, $this->fixture->enrichExtensionsWithEmConfAndTerInformation($extensions)); }
/** * @param string $extensionKey * @return array * @throws ExtensionManagerException */ protected function getExtensionArray($extensionKey) { $availableExtensions = $this->listUtility->getAvailableExtensions(); if (isset($availableExtensions[$extensionKey])) { return $availableExtensions[$extensionKey]; } else { throw new ExtensionManagerException('Extension ' . $extensionKey . ' is not available', 1342864081); } }
/** * Shows extensions from TER * Either all extensions or depending on a search param * * @param string $search * @return void */ public function terAction($search = '') { if (!empty($search)) { $extensions = $this->extensionRepository->findByTitleOrAuthorNameOrExtensionKey($search); } else { $extensions = $this->extensionRepository->findAll(); } $availableAndInstalledExtensions = $this->listUtility->getAvailableAndInstalledExtensionsWithAdditionalInformation(); $this->view->assign('extensions', $extensions)->assign('search', $search)->assign('availableAndInstalled', $availableAndInstalledExtensions); }
/** * Fetch additional information for an extension key * * @param string $extensionKey * @internal * @return mixed * @throws \TYPO3\CMS\Extensionmanager\Exception\ExtensionManagerException */ public function enrichExtensionWithDetails($extensionKey) { $availableExtensions = $this->listUtility->getAvailableExtensions(); if (isset($availableExtensions[$extensionKey])) { $extension = $availableExtensions[$extensionKey]; } else { throw new \TYPO3\CMS\Extensionmanager\Exception\ExtensionManagerException('Extension ' . $extensionKey . ' is not available', 1342864081); } $availableAndInstalledExtensions = $this->listUtility->enrichExtensionsWithEmConfAndTerInformation(array($extensionKey => $extension)); return $availableAndInstalledExtensions[$extensionKey]; }
/** * Returns all objects of this repository * * @return array The extensions */ public function findAll() { if (empty($this->extensions)) { $extensions = $this->listUtility->getAvailableAndInstalledExtensionsWithAdditionalInformation(); foreach ($extensions as $entry) { /** @var $extension \TYPO3\CMS\Lang\Domain\Model\Extension */ $extension = $this->objectManager->get(Extension::class, $entry['key'], $entry['title'], $this->getExtensionIconWithPath($entry)); $extension->setVersionFromString($entry['version']); if ($entry['ext_icon_width'] > 0) { $extension->setIconWidth($entry['ext_icon_width']); } if ($entry['ext_icon_height'] > 0) { $extension->setIconHeight($entry['ext_icon_height']); } $this->extensions[$entry['key']] = $extension; } ksort($this->extensions); } return $this->extensions; }
/** * Shows extensions from TER * Either all extensions or depending on a search param * * @param string $search * @return void */ public function terAction($search = '') { $this->addComposerModeNotification(); $search = trim($search); if (!empty($search)) { $extensions = $this->extensionRepository->findByTitleOrAuthorNameOrExtensionKey($search); } else { $extensions = $this->extensionRepository->findAll(); } $availableAndInstalledExtensions = $this->listUtility->getAvailableAndInstalledExtensions($this->listUtility->getAvailableExtensions()); $this->view->assign('extensions', $extensions)->assign('search', $search)->assign('availableAndInstalled', $availableAndInstalledExtensions); }
/** * Shows extensions from TER * Either all extensions or depending on a search param * * @return void */ public function terAction() { $this->pageRenderer->addJsFile('../t3lib/js/extjs/notifications.js'); $search = $this->getSearchParam(); $availableAndInstalledExtensions = $this->listUtility->getAvailableAndInstalledExtensionsWithAdditionalInformation(); if (is_string($search) && !empty($search)) { $extensions = $this->extensionRepository->findByTitleOrAuthorNameOrExtensionKey($search); } else { $extensions = $this->extensionRepository->findAll(); } $this->view->assign('extensions', $extensions)->assign('search', $search)->assign('availableAndInstalled', $availableAndInstalledExtensions); }
/** * @param string $extensionKey * @return array */ public function findInstalledExtensionsThatDependOnMe($extensionKey) { $availableAndInstalledExtensions = $this->listUtility->getAvailableAndInstalledExtensionsWithAdditionalInformation(); $dependentExtensions = []; foreach ($availableAndInstalledExtensions as $availableAndInstalledExtensionKey => $availableAndInstalledExtension) { if (isset($availableAndInstalledExtension['installed']) && $availableAndInstalledExtension['installed'] === true) { if (is_array($availableAndInstalledExtension['constraints']) && is_array($availableAndInstalledExtension['constraints']['depends']) && array_key_exists($extensionKey, $availableAndInstalledExtension['constraints']['depends'])) { $dependentExtensions[] = $availableAndInstalledExtensionKey; } } } return $dependentExtensions; }
/** * Fetch additional information for an extension key * * @param string $extensionKey * @access private * @return array * @throws \TYPO3\CMS\Extensionmanager\Exception\ExtensionManagerException */ public function enrichExtensionWithDetails($extensionKey) { $availableExtensions = $this->listUtility->getAvailableExtensions(); if (isset($availableExtensions[$extensionKey])) { $extension = $availableExtensions[$extensionKey]; } else { throw new \TYPO3\CMS\Extensionmanager\Exception\ExtensionManagerException('Extension ' . $extensionKey . ' is not available', 1342864081); } $availableAndInstalledExtensions = $this->listUtility->enrichExtensionsWithEmConfAndTerInformation(array($extensionKey => $extension)); if (!isset($availableAndInstalledExtensions[$extensionKey])) { throw new \TYPO3\CMS\Extensionmanager\Exception\ExtensionManagerException('Please check your uploaded extension "' . $extensionKey . '". The configuration file "ext_emconf.php" seems to be invalid.', 1391432222); } return $availableAndInstalledExtensions[$extensionKey]; }
/** * Get security status of loaded and installed extensions * * @return \stdClass with properties 'loaded' and 'existing' containing a TYPO3\CMS\Reports\Report\Status\Status object */ protected function getSecurityStatusOfExtensions() { $extensionInformation = $this->listUtility->getAvailableAndInstalledExtensionsWithAdditionalInformation(); $loadedInsecure = array(); $existingInsecure = array(); foreach ($extensionInformation as $extensionKey => $information) { if (array_key_exists('terObject', $information) && $information['terObject'] instanceof \TYPO3\CMS\Extensionmanager\Domain\Model\Extension) { /** @var $terObject \TYPO3\CMS\Extensionmanager\Domain\Model\Extension */ $terObject = $information['terObject']; $insecureStatus = $terObject->getReviewState(); if ($insecureStatus === -1) { if (array_key_exists('installed', $information) && $information['installed'] === TRUE) { $loadedInsecure[] = array('extensionKey' => $extensionKey, 'version' => $terObject->getVersion()); } else { $existingInsecure[] = array('extensionKey' => $extensionKey, 'version' => $terObject->getVersion()); } } } } $result = new \stdClass(); if (count($loadedInsecure) === 0) { $value = $GLOBALS['LANG']->sL('LLL:EXT:extensionmanager/Resources/Private/Language/locallang.xlf:report.status.loadedExtensions.noInsecureExtensionLoaded.value'); $message = ''; $severity = \TYPO3\CMS\Reports\Status::OK; } else { $value = sprintf($GLOBALS['LANG']->sL('LLL:EXT:extensionmanager/Resources/Private/Language/locallang.xlf:report.status.loadedExtensions.insecureExtensionLoaded.value'), count($loadedInsecure)); $extensionList = array(); foreach ($loadedInsecure as $insecureExtension) { $extensionList[] = sprintf($GLOBALS['LANG']->sL('LLL:EXT:extensionmanager/Resources/Private/Language/locallang.xlf:report.status.loadedExtensions.insecureExtensionLoaded.message.extension'), $insecureExtension['extensionKey'], $insecureExtension['version']); } $message = sprintf($GLOBALS['LANG']->sL('LLL:EXT:extensionmanager/Resources/Private/Language/locallang.xlf:report.status.loadedExtensions.insecureExtensionLoaded.message'), implode('', $extensionList)); $severity = \TYPO3\CMS\Reports\Status::ERROR; } $result->loaded = $this->objectManager->get('TYPO3\\CMS\\Reports\\Status', $GLOBALS['LANG']->sL('LLL:EXT:extensionmanager/Resources/Private/Language/locallang.xlf:report.status.loadedExtensions.title'), $value, $message, $severity); if (count($existingInsecure) === 0) { $value = $GLOBALS['LANG']->sL('LLL:EXT:extensionmanager/Resources/Private/Language/locallang.xlf:report.status.existingExtensions.noInsecureExtensionExists.value'); $message = ''; $severity = \TYPO3\CMS\Reports\Status::OK; } else { $value = sprintf($GLOBALS['LANG']->sL('LLL:EXT:extensionmanager/Resources/Private/Language/locallang.xlf:report.status.existingExtensions.insecureExtensionExists.value'), count($existingInsecure)); $extensionList = array(); foreach ($existingInsecure as $insecureExtension) { $extensionList[] = sprintf($GLOBALS['LANG']->sL('LLL:EXT:extensionmanager/Resources/Private/Language/locallang.xlf:report.status.existingExtensions.insecureExtensionExists.message.extension'), $insecureExtension['extensionKey'], $insecureExtension['version']); } $message = sprintf($GLOBALS['LANG']->sL('LLL:EXT:extensionmanager/Resources/Private/Language/locallang.xlf:report.status.existingExtensions.insecureExtensionExists.message'), implode('', $extensionList)); $severity = \TYPO3\CMS\Reports\Status::WARNING; } $result->existing = $this->objectManager->get('TYPO3\\CMS\\Reports\\Status', $GLOBALS['LANG']->sL('LLL:EXT:extensionmanager/Resources/Private/Language/locallang.xlf:report.status.existingExtensions.title'), $value, $message, $severity); return $result; }
public function findInstalledExtensionsThatDependOnMe($extensionKey) { $availableExtensions = $this->listUtility->getAvailableExtensions(); $availableAndInstalledExtensions = $this->listUtility->getAvailableAndInstalledExtensions($availableExtensions); $availableAndInstalledExtensions = $this->listUtility->enrichExtensionsWithEmConfAndTerInformation($availableAndInstalledExtensions); $dependentExtensions = array(); foreach ($availableAndInstalledExtensions as $availableAndInstalledExtensionKey => $availableAndInstalledExtension) { if (isset($availableAndInstalledExtension['installed']) && $availableAndInstalledExtension['installed'] === TRUE) { if (is_array($availableAndInstalledExtension['constraints']) && is_array($availableAndInstalledExtension['constraints']['depends']) && array_key_exists($extensionKey, $availableAndInstalledExtension['constraints']['depends'])) { $dependentExtensions[] = $availableAndInstalledExtensionKey; } } } return $dependentExtensions; }
/** * Get array of installed extensions. * * @param string $type Local, System, Global or empty (for all) * * @throws InvalidArgumentException * @return array */ public function listExtensions($type = '') { $type = ucfirst(strtolower($type)); if (!empty($type) && $type !== 'Local' && $type !== 'Global' && $type !== 'System') { throw new InvalidArgumentException('Only "Local", "System", "Global" and "" (all) are supported as type'); } $this->initializeExtensionManagerObjects(); // TODO: Make listUtlity local var $extensions = $this->listUtility->getAvailableExtensions(); $list = array(); foreach ($extensions as $key => $extension) { if (!empty($type) && $type !== $extension['type'] || !$this->installUtility->isLoaded($extension['key'])) { continue; } // TODO: Make emConfUtility local var $configuration = $this->emConfUtility->includeEmConf($extension); if (!empty($configuration)) { $list[$key] = $configuration; } } ksort($list); return $list; }
/** * Get security status of loaded and installed extensions * * @return \stdClass with properties 'loaded' and 'existing' containing a TYPO3\CMS\Reports\Report\Status\Status object */ protected function getSecurityStatusOfExtensions() { $extensionInformation = $this->listUtility->getAvailableAndInstalledExtensionsWithAdditionalInformation(); $loadedInsecure = array(); $existingInsecure = array(); $loadedOutdated = array(); $existingOutdated = array(); foreach ($extensionInformation as $extensionKey => $information) { if (array_key_exists('terObject', $information) && $information['terObject'] instanceof \TYPO3\CMS\Extensionmanager\Domain\Model\Extension) { /** @var $terObject \TYPO3\CMS\Extensionmanager\Domain\Model\Extension */ $terObject = $information['terObject']; $insecureStatus = $terObject->getReviewState(); if ($insecureStatus === -1) { if (array_key_exists('installed', $information) && $information['installed'] === TRUE) { $loadedInsecure[] = array('extensionKey' => $extensionKey, 'version' => $terObject->getVersion()); } else { $existingInsecure[] = array('extensionKey' => $extensionKey, 'version' => $terObject->getVersion()); } } elseif ($insecureStatus === -2) { if (array_key_exists('installed', $information) && $information['installed'] === TRUE) { $loadedOutdated[] = array('extensionKey' => $extensionKey, 'version' => $terObject->getVersion()); } else { $existingOutdated[] = array('extensionKey' => $extensionKey, 'version' => $terObject->getVersion()); } } } } $result = new \stdClass(); if (empty($loadedInsecure)) { $value = $this->languageService->getLL('report.status.loadedExtensions.noInsecureExtensionLoaded.value'); $message = ''; $severity = \TYPO3\CMS\Reports\Status::OK; } else { $value = sprintf($this->languageService->getLL('report.status.loadedExtensions.insecureExtensionLoaded.value'), count($loadedInsecure)); $extensionList = array(); foreach ($loadedInsecure as $insecureExtension) { $extensionList[] = sprintf($this->languageService->getLL('report.status.loadedExtensions.insecureExtensionLoaded.message.extension'), $insecureExtension['extensionKey'], $insecureExtension['version']); } $message = sprintf($this->languageService->getLL('report.status.loadedExtensions.insecureExtensionLoaded.message'), implode('', $extensionList)); $severity = \TYPO3\CMS\Reports\Status::ERROR; } $result->loaded = $this->objectManager->get(\TYPO3\CMS\Reports\Status::class, $this->languageService->getLL('report.status.loadedExtensions.title'), $value, $message, $severity); if (empty($existingInsecure)) { $value = $this->languageService->getLL('report.status.existingExtensions.noInsecureExtensionExists.value'); $message = ''; $severity = \TYPO3\CMS\Reports\Status::OK; } else { $value = sprintf($this->languageService->getLL('report.status.existingExtensions.insecureExtensionExists.value'), count($existingInsecure)); $extensionList = array(); foreach ($existingInsecure as $insecureExtension) { $extensionList[] = sprintf($this->languageService->getLL('report.status.existingExtensions.insecureExtensionExists.message.extension'), $insecureExtension['extensionKey'], $insecureExtension['version']); } $message = sprintf($this->languageService->getLL('report.status.existingExtensions.insecureExtensionExists.message'), implode('', $extensionList)); $severity = \TYPO3\CMS\Reports\Status::WARNING; } $result->existing = $this->objectManager->get(\TYPO3\CMS\Reports\Status::class, $this->languageService->getLL('report.status.existingExtensions.title'), $value, $message, $severity); if (empty($loadedOutdated)) { $value = $this->languageService->getLL('report.status.loadedOutdatedExtensions.noOutdatedExtensionLoaded.value'); $message = ''; $severity = \TYPO3\CMS\Reports\Status::OK; } else { $value = sprintf($this->languageService->getLL('report.status.loadedOutdatedExtensions.outdatedExtensionLoaded.value'), count($loadedOutdated)); $extensionList = array(); foreach ($loadedOutdated as $outdatedExtension) { $extensionList[] = sprintf($this->languageService->getLL('report.status.loadedOutdatedExtensions.outdatedExtensionLoaded.message.extension'), $outdatedExtension['extensionKey'], $outdatedExtension['version']); } $message = sprintf($this->languageService->getLL('report.status.loadedOutdatedExtensions.outdatedExtensionLoaded.message'), implode('', $extensionList)); $severity = \TYPO3\CMS\Reports\Status::WARNING; } $result->loadedoutdated = $this->objectManager->get(\TYPO3\CMS\Reports\Status::class, $this->languageService->getLL('report.status.loadedOutdatedExtensions.title'), $value, $message, $severity); if (empty($existingOutdated)) { $value = $this->languageService->getLL('report.status.existingOutdatedExtensions.noOutdatedExtensionExists.value'); $message = ''; $severity = \TYPO3\CMS\Reports\Status::OK; } else { $value = sprintf($this->languageService->getLL('report.status.existingOutdatedExtensions.outdatedExtensionExists.value'), count($existingOutdated)); $extensionList = array(); foreach ($existingOutdated as $outdatedExtension) { $extensionList[] = sprintf($this->languageService->getLL('report.status.existingOutdatedExtensions.outdatedExtensionExists.message.extension'), $outdatedExtension['extensionKey'], $outdatedExtension['version']); } $message = sprintf($this->languageService->getLL('report.status.existingOutdatedExtensions.outdatedExtensionExists.message'), implode('', $extensionList)); $severity = \TYPO3\CMS\Reports\Status::WARNING; } $result->existingoutdated = $this->objectManager->get(\TYPO3\CMS\Reports\Status::class, $this->languageService->getLL('report.status.existingOutdatedExtensions.title'), $value, $message, $severity); return $result; }