예제 #1
0
 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);
 }
예제 #2
0
 /**
  * {@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>&nbsp;&nbsp;%s</code>', $eventName));
         foreach ($listeners as $priority => $listener) {
             $logger->debug(sprintf('<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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;
 }