Пример #1
0
 private function _registerListeners(tubepress_api_ioc_ContainerBuilderInterface $containerBuilder)
 {
     $listenerData = array('tubepress_media_impl_listeners_PageListener' => array(tubepress_api_log_LoggerInterface::_, tubepress_api_options_ContextInterface::_, tubepress_api_http_RequestParametersInterface::_, tubepress_api_media_CollectorInterface::_, tubepress_api_url_UrlFactoryInterface::_), 'tubepress_media_impl_listeners_CollectionListener' => array(), 'tubepress_media_impl_listeners_DispatchingListener' => array(tubepress_api_event_EventDispatcherInterface::_));
     $servicesConsumers = array('tubepress_media_impl_listeners_CollectionListener' => array(tubepress_spi_media_MediaProviderInterface::__ => 'setMediaProviders'));
     $listeners = array(tubepress_api_event_Events::MEDIA_PAGE_NEW => array(100000 => array('tubepress_media_impl_listeners_PageListener' => 'perPageSort'), 98000 => array('tubepress_media_impl_listeners_PageListener' => 'blacklist'), 96000 => array('tubepress_media_impl_listeners_PageListener' => 'capResults'), 94000 => array('tubepress_media_impl_listeners_PageListener' => 'prependItems'), 93000 => array('tubepress_media_impl_listeners_PageListener' => 'filterDuplicates')), tubepress_api_event_Events::MEDIA_PAGE_REQUEST => array(100000 => array('tubepress_media_impl_listeners_CollectionListener' => 'onMediaPageRequest'), 98000 => array('tubepress_media_impl_listeners_DispatchingListener' => 'onMediaPageRequest')), tubepress_api_event_Events::MEDIA_ITEM_REQUEST => array(100000 => array('tubepress_media_impl_listeners_CollectionListener' => 'onMediaItemRequest'), 98000 => array('tubepress_media_impl_listeners_DispatchingListener' => 'onMediaItemRequest')));
     foreach ($listenerData as $serviceId => $args) {
         $def = $containerBuilder->register($serviceId, $serviceId);
         foreach ($args as $argumentId) {
             $def->addArgument(new tubepress_api_ioc_Reference($argumentId));
         }
     }
     foreach ($listeners as $eventName => $eventListeners) {
         foreach ($eventListeners as $priority => $listenerList) {
             foreach ($listenerList as $serviceId => $method) {
                 $def = $containerBuilder->getDefinition($serviceId);
                 if ($def === null) {
                     throw new LogicException("Cannot find definition for {$serviceId}");
                 }
                 $def->addTag(tubepress_api_ioc_ServiceTags::EVENT_LISTENER, array('event' => $eventName, 'method' => $method, 'priority' => $priority));
             }
         }
     }
     foreach ($servicesConsumers as $serviceId => $consumptionData) {
         foreach ($consumptionData as $tag => $method) {
             $def = $containerBuilder->getDefinition($serviceId);
             $def->addTag(tubepress_api_ioc_ServiceTags::TAGGED_SERVICES_CONSUMER, array('tag' => $tag, 'method' => $method));
         }
     }
 }
 /**
  * {@inheritdoc}
  */
 public function process(tubepress_api_ioc_ContainerBuilderInterface $containerBuilder)
 {
     foreach (self::$_REQUIRED_SERVICE_IDS as $requiredId) {
         if (!$containerBuilder->hasDefinition($requiredId)) {
             return;
         }
     }
     $environment = $containerBuilder->getDefinition(tubepress_api_environment_EnvironmentInterface::_);
     $environment->addMethodCall('setWpFunctionsInterface', array(new tubepress_api_ioc_Reference(tubepress_wordpress_impl_wp_WpFunctions::_)));
 }
Пример #3
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));
         }
     }
 }
 /**
  * {@inheritdoc}
  */
 public function process(tubepress_api_ioc_ContainerBuilderInterface $containerBuilder)
 {
     $consumerIds = $containerBuilder->findTaggedServiceIds(tubepress_api_ioc_ServiceTags::TAGGED_SERVICES_CONSUMER);
     foreach ($consumerIds as $consumerId => $tags) {
         $consumerDefinition = $containerBuilder->getDefinition($consumerId);
         foreach ($tags as $tagData) {
             $requiredAttribites = array('tag', 'method');
             foreach ($requiredAttribites as $attributeName) {
                 if (!isset($tagData[$attributeName])) {
                     throw new LogicException(sprintf('Service %s must specify %s in its tag data', $consumerId, $attributeName));
                 }
             }
             $matchingServiceIdsToTagData = $containerBuilder->findTaggedServiceIds($tagData['tag']);
             $references = $this->_buildMethodCallArgument($matchingServiceIdsToTagData);
             $consumerDefinition->addMethodCall($tagData['method'], array($references));
         }
     }
 }
 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));
             }
         }
     }
 }
Пример #6
0
 /**
  * {@inheritdoc}
  */
 public function process(tubepress_api_ioc_ContainerBuilderInterface $containerBuilder)
 {
     if (!$containerBuilder->hasDefinition(tubepress_api_event_EventDispatcherInterface::_)) {
         return;
     }
     $eventDispatcherDefinition = $containerBuilder->getDefinition(tubepress_api_event_EventDispatcherInterface::_);
     $listenerServiceIds = $containerBuilder->findTaggedServiceIds(tubepress_api_ioc_ServiceTags::EVENT_LISTENER);
     foreach ($listenerServiceIds as $serviceId => $events) {
         foreach ($events as $event) {
             $priority = isset($event['priority']) ? $event['priority'] : 0;
             if (!isset($event['event'])) {
                 throw new InvalidArgumentException(sprintf('Service "%s" must define the "event" attribute on "%s" tags.', $serviceId, tubepress_api_ioc_ServiceTags::EVENT_LISTENER));
             }
             if (!isset($event['method'])) {
                 $onSuffix = preg_replace_callback(array('/(?<=\\b)[a-z]/i', '/[^a-z0-9]/i'), array($this, '_callbackStrToUpper'), $event['event']);
                 $event['method'] = 'on' . $onSuffix;
                 $event['method'] = preg_replace('/[^a-z0-9]/i', '', $event['method']);
             }
             $eventDispatcherDefinition->addMethodCall('addListenerService', array($event['event'], array($serviceId, $event['method']), $priority));
         }
     }
 }