/** * Find the best service and check if it works. * Returns object of the service class. * * @param string $serviceType Type of service (service key). * @param string $serviceSubType Sub type like file extensions or similar. Defined by the service. * @param mixed $excludeServiceKeys List of service keys which should be excluded in the search for a service. Array or comma list. * @return object The service object or an array with error info's. */ public static function makeInstanceService($serviceType, $serviceSubType = '', $excludeServiceKeys = array()) { $error = FALSE; if (!is_array($excludeServiceKeys)) { $excludeServiceKeys = self::trimExplode(',', $excludeServiceKeys, TRUE); } $requestInfo = array('requestedServiceType' => $serviceType, 'requestedServiceSubType' => $serviceSubType, 'requestedExcludeServiceKeys' => $excludeServiceKeys); while ($info = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::findService($serviceType, $serviceSubType, $excludeServiceKeys)) { // provide information about requested service to service object $info = array_merge($info, $requestInfo); // Check persistent object and if found, call directly and exit. if (is_object($GLOBALS['T3_VAR']['makeInstanceService'][$info['className']])) { // update request info in persistent object $GLOBALS['T3_VAR']['makeInstanceService'][$info['className']]->info = $info; // reset service and return object $GLOBALS['T3_VAR']['makeInstanceService'][$info['className']]->reset(); return $GLOBALS['T3_VAR']['makeInstanceService'][$info['className']]; } else { if (isset($info['classFile'])) { // @deprecated since 6.1, will be removed in TYPO3 CMS 6.3 // Option is deprecated, since we now have the autoloader function self::deprecationLog('The option "classFile" of "' . $info['className'] . '" in T3_SERVICES has been deprecated, as this should now be done by the respective ' . 'ext_autoload.php of each extension. This option will be removed in TYPO3 CMS v6.3.'); $requireFile = self::getFileAbsFileName($info['classFile']); if (@is_file($requireFile)) { self::requireOnce($requireFile); } } $obj = self::makeInstance($info['className']); if (is_object($obj)) { if (!@is_callable(array($obj, 'init'))) { // use silent logging??? I don't think so. die('Broken service:' . \TYPO3\CMS\Core\Utility\DebugUtility::viewArray($info)); } $obj->info = $info; // service available? if ($obj->init()) { // create persistent object $GLOBALS['T3_VAR']['makeInstanceService'][$info['className']] = $obj; return $obj; } $error = $obj->getLastErrorArray(); unset($obj); } } // deactivate the service \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::deactivateService($info['serviceType'], $info['serviceKey']); } return $error; }
/** * Find the best service and check if it works. * Returns object of the service class. * * @param string $serviceType Type of service (service key). * @param string $serviceSubType Sub type like file extensions or similar. Defined by the service. * @param mixed $excludeServiceKeys List of service keys which should be excluded in the search for a service. Array or comma list. * @return object|string[] The service object or an array with error infos. */ public static function makeInstanceService($serviceType, $serviceSubType = '', $excludeServiceKeys = []) { $error = false; if (!is_array($excludeServiceKeys)) { $excludeServiceKeys = self::trimExplode(',', $excludeServiceKeys, true); } $requestInfo = ['requestedServiceType' => $serviceType, 'requestedServiceSubType' => $serviceSubType, 'requestedExcludeServiceKeys' => $excludeServiceKeys]; while ($info = ExtensionManagementUtility::findService($serviceType, $serviceSubType, $excludeServiceKeys)) { // provide information about requested service to service object $info = array_merge($info, $requestInfo); // Check persistent object and if found, call directly and exit. if (is_object($GLOBALS['T3_VAR']['makeInstanceService'][$info['className']])) { // update request info in persistent object $GLOBALS['T3_VAR']['makeInstanceService'][$info['className']]->info = $info; // reset service and return object $GLOBALS['T3_VAR']['makeInstanceService'][$info['className']]->reset(); return $GLOBALS['T3_VAR']['makeInstanceService'][$info['className']]; } else { $obj = self::makeInstance($info['className']); if (is_object($obj)) { if (!@is_callable([$obj, 'init'])) { // use silent logging??? I don't think so. die('Broken service:' . DebugUtility::viewArray($info)); } $obj->info = $info; // service available? if ($obj->init()) { // create persistent object $GLOBALS['T3_VAR']['makeInstanceService'][$info['className']] = $obj; return $obj; } $error = $obj->getLastErrorArray(); unset($obj); } } // deactivate the service ExtensionManagementUtility::deactivateService($info['serviceType'], $info['serviceKey']); } return $error; }
/** * Find the best service and check if it works. * Returns object of the service class. * * @param string $serviceType Type of service (service key). * @param string $serviceSubType Sub type like file extensions or similar. Defined by the service. * @param mixed $excludeServiceKeys List of service keys which should be excluded in the search for a service. Array or comma list. * @return object The service object or an array with error info's. */ public static function makeInstanceService($serviceType, $serviceSubType = '', $excludeServiceKeys = array()) { $error = FALSE; if (!is_array($excludeServiceKeys)) { $excludeServiceKeys = self::trimExplode(',', $excludeServiceKeys, 1); } $requestInfo = array('requestedServiceType' => $serviceType, 'requestedServiceSubType' => $serviceSubType, 'requestedExcludeServiceKeys' => $excludeServiceKeys); while ($info = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::findService($serviceType, $serviceSubType, $excludeServiceKeys)) { // provide information about requested service to service object $info = array_merge($info, $requestInfo); // Check persistent object and if found, call directly and exit. if (is_object($GLOBALS['T3_VAR']['makeInstanceService'][$info['className']])) { // update request info in persistent object $GLOBALS['T3_VAR']['makeInstanceService'][$info['className']]->info = $info; // reset service and return object $GLOBALS['T3_VAR']['makeInstanceService'][$info['className']]->reset(); return $GLOBALS['T3_VAR']['makeInstanceService'][$info['className']]; } else { $requireFile = self::getFileAbsFileName($info['classFile']); if (@is_file($requireFile)) { self::requireOnce($requireFile); $obj = self::makeInstance($info['className']); if (is_object($obj)) { if (!@is_callable(array($obj, 'init'))) { // use silent logging??? I don't think so. die('Broken service:' . \TYPO3\CMS\Core\Utility\DebugUtility::viewArray($info)); } $obj->info = $info; // service available? if ($obj->init()) { // create persistent object $GLOBALS['T3_VAR']['makeInstanceService'][$info['className']] = $obj; // needed to delete temp files register_shutdown_function(array(&$obj, '__destruct')); return $obj; } $error = $obj->getLastErrorArray(); unset($obj); } } } // deactivate the service \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::deactivateService($info['serviceType'], $info['serviceKey']); } return $error; }
/** * @param string $identifier * @return bool|tx_caretaker_NotificationExitPointInterface */ protected function getExitpointByIdentifier($identifier) { if ($this->exitpoints[$identifier] !== NULL) { return $this->exitpoints[$identifier]; } $exitpoint = FALSE; list($exitpointRecord) = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('*', tx_caretaker_Constants::table_Exitponts, 'id = ' . $GLOBALS['TYPO3_DB']->fullQuoteStr($identifier, '') . ' AND deleted=0 AND hidden=0', '', '', 1); if ($exitpointRecord === NULL) { return false; } $info = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::findService('caretaker_exitpoint', $exitpointRecord['service']); if (is_array($info) && !empty($info['className'])) { $exitpoint = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance($info['className']); $config = \TYPO3\CMS\Core\Utility\GeneralUtility::xml2array($exitpointRecord['config']); if (!is_array($config)) { $config = array(); } $exitpoint->init($config); } $this->exitpoints[$identifier] = $exitpoint; return $exitpoint; }
/** * @return tx_caretaker_TestServiceInterface * @throws Exception */ public function getTestService() { if ($this->testService === NULL) { if ($this->testServiceType) { $info = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::findService('caretaker_test_service', $this->testServiceType); if ($info && $info['className']) { if (class_exists($info['className'])) { $this->testService = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance($info['className']); if ($this->testService) { $this->testService->setInstance($this->getInstance()); $this->testService->setConfiguration($this->testServiceConfiguration); } else { throw new Exception('testservice class ' . $info['className'] . ' could not be instantiated'); } } else { throw new Exception('testservice ' . $this->testServiceType . ' class ' . $info['className'] . ' not found'); } } else { throw new Exception('caretaker testservice ' . $this->testServiceType . ' not found'); } } } return $this->testService; }