private function _process(tubepress_api_ioc_ContainerBuilderInterface $containerBuilder, $id) { $logger = $containerBuilder->get('tubepress_internal_logger_BootLogger'); $finderFactory = $containerBuilder->get('finder_factory'); $bootSettings = $containerBuilder->get(tubepress_api_boot_BootSettingsInterface::_); $context = $containerBuilder->get(tubepress_api_options_ContextInterface::_); $urlFactory = $containerBuilder->get(tubepress_api_url_UrlFactoryInterface::_); $langUtils = $containerBuilder->get(tubepress_api_util_LangUtilsInterface::_); $stringUtils = $containerBuilder->get(tubepress_api_util_StringUtilsInterface::_); $serializer = new tubepress_internal_boot_helper_uncached_Serializer($bootSettings); $factory = new tubepress_internal_boot_helper_uncached_contrib_ThemeFactory($context, $urlFactory, $langUtils, $logger, $stringUtils, $finderFactory); $manifestFinder = new tubepress_internal_boot_helper_uncached_contrib_ManifestFinder(TUBEPRESS_ROOT . DIRECTORY_SEPARATOR . 'web' . DIRECTORY_SEPARATOR . $id, DIRECTORY_SEPARATOR . $id, 'theme.json', $logger, $bootSettings, $finderFactory); $manifests = $manifestFinder->find(); $themes = array(); foreach ($manifests as $path => $manifestData) { $theme = $factory->fromManifestData($path, $manifestData); if (is_array($theme)) { continue; } if ($theme->getName() === 'changeme/themename') { //ignore the starter theme continue; } $themes[] = $theme; } $bootArtifacts = $containerBuilder->getParameter(tubepress_internal_boot_PrimaryBootstrapper::CONTAINER_PARAM_BOOT_ARTIFACTS); $bootArtifacts = array_merge($bootArtifacts, array($id => $serializer->serialize($themes))); $containerBuilder->setParameter(tubepress_internal_boot_PrimaryBootstrapper::CONTAINER_PARAM_BOOT_ARTIFACTS, $bootArtifacts); $containerBuilder->set('tubepress_internal_boot_helper_uncached_contrib_ThemeFactory', $factory); }
/** * {@inheritdoc} */ public function process(tubepress_api_ioc_ContainerBuilderInterface $containerBuilder) { if (!$containerBuilder->hasDefinition(tubepress_api_event_EventDispatcherInterface::_) || !$containerBuilder->has('tubepress_internal_logger_BootLogger')) { return; } $eventDispatcherDefinition = $containerBuilder->getDefinition(tubepress_api_event_EventDispatcherInterface::_); $logger = $containerBuilder->get('tubepress_internal_logger_BootLogger'); $clazz = $eventDispatcherDefinition->getClass(); $logger->debug(sprintf('Event dispatcher is of type <code>%s</code>', $clazz)); $methodCalls = $eventDispatcherDefinition->getMethodCalls(); $events = array(); foreach ($methodCalls as $methodCall) { $methodName = $methodCall[0]; $details = $methodCall[1]; if ($methodName !== 'addListenerService') { continue; } $eventName = $details[0]; $callbackServiceId = $details[1][0]; $callbackMethod = $details[1][1]; $priority = count($details) > 2 ? $details[2] : 0; if (!$containerBuilder->hasDefinition($callbackServiceId)) { $logger->error(sprintf('Event listener service ID <code>%s</code> does not exist.', $callbackServiceId)); continue; } $callbackDefinition = $containerBuilder->getDefinition($callbackServiceId); $callbackClass = $callbackDefinition->getClass(); if (!isset($events[$eventName])) { $events[$eventName] = array(); } $events[$eventName][$priority] = sprintf('%s::%s', $callbackClass, $callbackMethod); } $logger->debug(sprintf('There are %d events that can be triggered. Details follow...', count($events))); ksort($events); foreach ($events as $eventName => $listeners) { krsort($listeners); $logger->debug(sprintf('<code> %s</code>', $eventName)); foreach ($listeners as $priority => $listener) { $logger->debug(sprintf('<code> priority %d - %s</code>', $priority, $listener)); } } }
private function _doProcess(tubepress_api_ioc_ContainerBuilderInterface $containerBuilder, $serviceSuffix) { if (!$containerBuilder->hasDefinition('Twig_Loader_Filesystem' . $serviceSuffix)) { return; } $twigFsLoaderDefinition = $containerBuilder->getDefinition('Twig_Loader_Filesystem' . $serviceSuffix); $providerIds = $containerBuilder->findTaggedServiceIds('tubepress_spi_template_PathProviderInterface' . $serviceSuffix); foreach ($providerIds as $providerId => $tags) { /* * @var tubepress_spi_template_PathProviderInterface */ $provider = $containerBuilder->get($providerId); $directories = $provider->getTemplateDirectories(); foreach ($directories as $directory) { if (is_dir($directory)) { $twigFsLoaderDefinition->addMethodCall('addPath', array($directory)); } } } }
private function _findUserLegacyThemes(tubepress_api_boot_BootSettingsInterface $bootSettings, tubepress_api_ioc_ContainerBuilderInterface $containerBuilder) { $userThemeDir = $bootSettings->getUserContentDirectory() . '/themes'; if (!is_dir($userThemeDir)) { return array(); } /** * @var tubepress_internal_finder_FinderFactory */ $finderFactory = $containerBuilder->get('finder_factory'); $finder = $finderFactory->createFinder()->directories()->in($userThemeDir)->depth('< 1'); $toReturn = array(); /** * @var SplFileInfo */ foreach ($finder as $candidateLegacyThemeDir) { $themeRoot = "{$candidateLegacyThemeDir}"; $baseName = basename($themeRoot); if ($baseName === 'starter') { /* * Ignore the starter theme. */ continue; } if (is_file("{$themeRoot}/theme.json")) { continue; } /** * @var tubepress_internal_boot_helper_uncached_contrib_ThemeFactory */ $themeFactory = $containerBuilder->get('tubepress_internal_boot_helper_uncached_contrib_ThemeFactory'); $templateMap = $this->_getTemplateMapForLegacyDirectory($containerBuilder, $themeRoot); $manifestPath = $bootSettings->getPathToSystemCacheDirectory() . DIRECTORY_SEPARATOR . 'foobar'; $manifestData = array('name' => "unknown/legacy-{$baseName}", 'version' => '1.0.0', 'title' => "{$baseName} (legacy)", 'authors' => array(array('name' => 'Unknown')), 'license' => array('type' => 'MPL-2.0', 'urls' => array('http://www.mozilla.org/MPL/2.0/')), 'description' => "TubePress 3.x.x theme auto-generated from {$themeRoot}"); $theme = $themeFactory->fromManifestData($manifestPath, $manifestData); if (!$theme instanceof tubepress_internal_theme_FilesystemTheme) { continue; } $theme->setParentThemeName('tubepress/legacy-default'); $theme->setTemplateNamesToAbsPathsMap($templateMap); $theme->setManifestPath($manifestPath); $toReturn[] = $theme; } return $toReturn; }