Index: typo3/sysext/sv/ext_tables.php =================================================================== --- typo3/sysext/sv/ext_tables.php (revision 6132) +++ typo3/sysext/sv/ext_tables.php (working copy) @@ -3,4 +3,12 @@ // normal services should be added here +if (TYPO3_MODE == 'BE') { + $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['reports']['sv']['services'] = array( + 'title' => 'LLL:EXT:sv/reports/locallang.xml:report_title', + 'description' => 'LLL:EXT:sv/reports/locallang.xml:report_description', + 'icon' => 'EXT:sv/reports/all_services.png', + 'report' => 'tx_sv_reports_ServicesList' + ); +} ?> \ No newline at end of file Index: typo3/sysext/sv/reports/tx_sv_report.css =================================================================== --- typo3/sysext/sv/reports/tx_sv_report.css (revision 0) +++ typo3/sysext/sv/reports/tx_sv_report.css (revision 0) @@ -0,0 +1,27 @@ +/* Services report styles */ +/* $Id: $ */ + +.tx_sv_reportlist td { + vertical-align: top; +} +.tx_sv_reportlist td.cell { + padding: 2px 4px; +} +.tx_sv_reportlist td.typo3-message { + padding: 6px 6px 6px 26px; +} +.tx_sv_reportlist .bgColor2 td { + text-align: left; + font-weight: bold; + color: #fff; +} +.service-header { + margin-bottom: 4px; +} +.service-title { + font-weight: bold; +} +.service-description { + margin-bottom: 6px; + font-style: italic; +} Index: typo3/sysext/sv/reports/class.tx_sv_reports_serviceslist.php =================================================================== --- typo3/sysext/sv/reports/class.tx_sv_reports_serviceslist.php (revision 0) +++ typo3/sysext/sv/reports/class.tx_sv_reports_serviceslist.php (revision 0) @@ -0,0 +1,222 @@ + +* All rights reserved +* +* This script is part of the TYPO3 project. The TYPO3 project is +* free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* The GNU General Public License can be found at +* http://www.gnu.org/copyleft/gpl.html. +* +* This script is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* This copyright notice MUST APPEAR in all copies of the script! +***************************************************************/ + + +/** + * This class provides a report displaying a list of all installed services + * Code inspired by EXT:dam/lib/class.tx_dam_svlist.php by Rene Fritz + * + * @author Francois Suter + * @package TYPO3 + * @subpackage sv + * + * $Id: $ + */ +class tx_sv_reports_ServicesList implements tx_reports_Report { + /** + * Back-reference to the calling reports module + * + * @var tx_reports_Module $reportObject + */ + protected $reportObject; + + /** + * Constructor for class tx_sv_reports_ServicesList + */ + public function __construct(tx_reports_Module $reportObject) { + $this->reportObject = $reportObject; + $GLOBALS['LANG']->includeLLFile('EXT:sv/reports/locallang.xml'); + } + + /** + * This method renders the report + * + * @return string The status report as HTML + */ + public function getReport() { + $content = ''; + + // Add custom stylesheet + $this->reportObject->doc->getPageRenderer()->addCssFile(t3lib_extMgm::extRelPath('sv') . 'reports/tx_sv_report.css'); + // Start assembling content + $content .= '

' + . $GLOBALS['LANG']->getLL('report_explanation') + . '

'; + $content .= '

' + . $GLOBALS['LANG']->getLL('externals_explanation') + . '

'; + + // Get list of installed services + $content .= $this->displayServiceList(); + // Get list of binaries search paths + $content .= $this->displaySearchPaths(); + + return $content; + } + + /** + * This method assembles a list of all installed services + * + * @return string HTML to display + */ + protected function displayServiceList() { + $content = ''; + $services = $this->getInstalledServices(); + $content .= ''; + foreach ($services as $serviceType => $installedServices) { + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + foreach ($installedServices as $serviceKey => $serviceInfo) { + $content .= ''; + $cellContent = '

' . $serviceInfo['title'] . ' (' . $serviceKey . ')

'; + if (!empty($serviceInfo['description'])) { + $cellContent .= '

' . $serviceInfo['description']. '

'; + } + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $class = 'typo3-message message-error'; + $message = $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_common.xml:no'); + if (t3lib_extmgm::findService($serviceKey, '*')) { + $class = 'typo3-message message-ok'; + $message = $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_common.xml:yes'); + } + $content .= ''; + $content .= ''; + } + } + $content .= '
'; + $content .= '

' . sprintf($GLOBALS['LANG']->getLL('service_type'), $serviceType) . '

'; + $content .= '
' . $GLOBALS['LANG']->getLL('service') . '' . $GLOBALS['LANG']->getLL('priority') . '' . $GLOBALS['LANG']->getLL('quality') . '' . $GLOBALS['LANG']->getLL('subtypes') . '' . $GLOBALS['LANG']->getLL('os') . '' . $GLOBALS['LANG']->getLL('externals') . '' . $GLOBALS['LANG']->getLL('available') . '
' . $cellContent . '' . $serviceInfo['priority'] . '' . $serviceInfo['quality'] . '' . ((empty($serviceInfo['serviceSubTypes'])) ? '-' : implode(', ', $serviceInfo['serviceSubTypes'])) . '' . ((empty($serviceInfo['os'])) ? $GLOBALS['LANG']->getLL('any') : $serviceInfo['os']) . '' . ((empty($serviceInfo['exec'])) ? '-' : $serviceInfo['exec']) . '' . $message . '
'; + return $content; + } + + /** + * This method assembles a list of all defined search paths + * + * @return string HTML to display + */ + protected function displaySearchPaths() { + $content = '

' . $GLOBALS['LANG']->getLL('search_paths') . '

'; + $searchPaths = t3lib_exec::getPaths(true); + if (count($searchPaths) == 0) { + $content .= '

' . $GLOBALS['LANG']->getLL('no_search_paths') . '

'; + } else { + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + foreach ($searchPaths as $path => $isValid) { + $content .= ''; + $content .= ''; + $class = 'typo3-message message-error'; + $message = $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_common.xml:no'); + if ($isValid) { + $class = 'typo3-message message-ok'; + $message = $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_common.xml:yes'); + } + $content .= ''; + $content .= ''; + } + $content .= ''; + $content .= '
' . $GLOBALS['LANG']->getLL('path') . '' . $GLOBALS['LANG']->getLL('valid') . '
' . $path . '' . $message . '
'; + } + return $content; + } + + /** + * This method filters the $T3_SERVICES global array to return a relevant, + * ordered list of installed services + * + * Every installed service appears twice in $T3_SERVICES: once as a service key + * for a given service type, and once a service type all by itself + * The list of services to display must avoid these duplicates + * + * Furthermore, inside each service type, installed services must be + * ordered by priority and quality + * + * @return array List of filtered and ordered services + */ + protected function getInstalledServices() { + $filteredServices = array(); + + // Loop on all installed services + foreach ($GLOBALS['T3_SERVICES'] as $serviceType => $serviceList) { + // If the (first) key of the service list is not the same as the service type, + // it's a "true" service type. Keep it and sort it. + if (key($serviceList) !== $serviceType) { + uasort($serviceList, array('tx_sv_reports_ServicesList', 'sortServices')); + $filteredServices[$serviceType] = $serviceList; + } + } + return $filteredServices; + } + + /** + * Utility method used to sort services according to their priority and quality + * + * @param array First service to compare + * @param array Second service to compare + * + * @return integer 1, 0 or -1 if a is smaller, equal or greater than b, respectively + */ + public function sortServices(array $a, array $b) { + $result = 0; + // If priorities are the same, test quality + if ($a['priority'] == $b['priority']) { + if ($a['quality'] != $b['quality']) { + // Service with highest quality should come first, + // thus it must be marked as smaller + $result = ($a['quality'] > $b['quality']) ? -1 : 1; + } + } else { + // Service with highest priority should come first, + // thus it must be marked as smaller + $result = ($a['priority'] > $b['priority']) ? -1 : 1; + } + return $result; + } +} + + +if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/reports/reports/class.tx_reports_reports_status.php']) { + include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/reports/reports/class.tx_reports_reports_status.php']); +} + +?> \ No newline at end of file Index: typo3/sysext/sv/reports/locallang.xml =================================================================== --- typo3/sysext/sv/reports/locallang.xml (revision 0) +++ typo3/sysext/sv/reports/locallang.xml (revision 0) @@ -0,0 +1,28 @@ + + + + module + Language labels for module 'tools_txreportsM1' + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file Index: typo3/sysext/sv/reports/all_services.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: typo3/sysext/sv/reports/all_services.png ___________________________________________________________________ Name: svn:executable + * Name: svn:mime-type + application/octet-stream Index: typo3/sysext/sv/ext_autoload.php =================================================================== --- typo3/sysext/sv/ext_autoload.php (revision 0) +++ typo3/sysext/sv/ext_autoload.php (revision 0) @@ -0,0 +1,11 @@ + $extensionPath . 'reports/class.tx_sv_reports_serviceslist.php', +); +?>