X-Git-Url: http://www.aleph1.co.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=web%2Fmodules%2Fcontrib%2Fsimple_sitemap%2Fsrc%2FPlugin%2Fsimple_sitemap%2FUrlGenerator%2FEntityUrlGenerator.php;fp=web%2Fmodules%2Fcontrib%2Fsimple_sitemap%2Fsrc%2FPlugin%2Fsimple_sitemap%2FUrlGenerator%2FEntityUrlGenerator.php;h=a978e8078362fd1bae8bb0368530852df7ee8b93;hb=af6d1fb995500ae68849458ee10d66abbdcfb252;hp=0000000000000000000000000000000000000000;hpb=680c79a86e3ed402f263faeac92e89fb6d9edcc0;p=yaffs-website diff --git a/web/modules/contrib/simple_sitemap/src/Plugin/simple_sitemap/UrlGenerator/EntityUrlGenerator.php b/web/modules/contrib/simple_sitemap/src/Plugin/simple_sitemap/UrlGenerator/EntityUrlGenerator.php new file mode 100644 index 000000000..a978e8078 --- /dev/null +++ b/web/modules/contrib/simple_sitemap/src/Plugin/simple_sitemap/UrlGenerator/EntityUrlGenerator.php @@ -0,0 +1,205 @@ +urlGeneratorManager = $url_generator_manager; + } + + public static function create( + ContainerInterface $container, + array $configuration, + $plugin_id, + $plugin_definition) { + return new static( + $configuration, + $plugin_id, + $plugin_definition, + $container->get('simple_sitemap.generator'), + $container->get('simple_sitemap.sitemap_generator'), + $container->get('language_manager'), + $container->get('entity_type.manager'), + $container->get('simple_sitemap.logger'), + $container->get('simple_sitemap.entity_helper'), + $container->get('plugin.manager.simple_sitemap.url_generator') + ); + } + + /** + * @inheritdoc + */ + public function getDataSets() { + $data_sets = []; + $sitemap_entity_types = $this->entityHelper->getSupportedEntityTypes(); + + foreach ($this->generator->getBundleSettings() as $entity_type_name => $bundles) { + if (isset($sitemap_entity_types[$entity_type_name])) { + + // Skip this entity type if another plugin is written to override its generation. + foreach ($this->urlGeneratorManager->getDefinitions() as $plugin) { + if ($plugin['enabled'] && !empty($plugin['settings']['overrides_entity_type']) + && $plugin['settings']['overrides_entity_type'] === $entity_type_name) { + continue 2; + } + } + + foreach ($bundles as $bundle_name => $bundle_settings) { + if ($bundle_settings['index']) { + $data_sets[] = [ + 'bundle_settings' => $bundle_settings, + 'bundle_name' => $bundle_name, + 'entity_type_name' => $entity_type_name, + 'keys' => $sitemap_entity_types[$entity_type_name]->getKeys(), + ]; + } + } + } + } + + return $data_sets; + } + + /** + * @inheritdoc + */ + protected function processDataSet($entity) { + + $entity_id = $entity->id(); + $entity_type_name = $entity->getEntityTypeId(); + + $entity_settings = $this->generator->getEntityInstanceSettings($entity_type_name, $entity_id); + + if (empty($entity_settings['index'])) { + return FALSE; + } + + $url_object = $entity->toUrl(); + + // Do not include external paths. + if (!$url_object->isRouted()) { + return FALSE; + } + + $path = $url_object->getInternalPath(); + + // Do not include paths that have been already indexed. + if ($this->batchSettings['remove_duplicates'] && $this->pathProcessed($path)) { + return FALSE; + } + + $url_object->setOption('absolute', TRUE); + + return [ + 'url' => $url_object, + 'lastmod' => method_exists($entity, 'getChangedTime') ? date_iso8601($entity->getChangedTime()) : NULL, + 'priority' => isset($entity_settings['priority']) ? $entity_settings['priority'] : NULL, + 'changefreq' => !empty($entity_settings['changefreq']) ? $entity_settings['changefreq'] : NULL, + 'images' => !empty($entity_settings['include_images']) + ? $this->getImages($entity_type_name, $entity_id) + : [], + + // Additional info useful in hooks. + 'meta' => [ + 'path' => $path, + 'entity_info' => [ + 'entity_type' => $entity_type_name, + 'id' => $entity_id, + ], + ] + ]; + } + + /** + * @inheritdoc + */ + protected function getBatchIterationElements($entity_info) { + $query = $this->entityTypeManager->getStorage($entity_info['entity_type_name'])->getQuery(); + + if (!empty($entity_info['keys']['id'])) { + $query->sort($entity_info['keys']['id'], 'ASC'); + } + if (!empty($entity_info['keys']['bundle'])) { + $query->condition($entity_info['keys']['bundle'], $entity_info['bundle_name']); + } + if (!empty($entity_info['keys']['status'])) { + $query->condition($entity_info['keys']['status'], 1); + } + + if ($this->needsInitialization()) { + $count_query = clone $query; + $this->initializeBatch($count_query->count()->execute()); + } + + if ($this->isBatch()) { + $query->range($this->context['sandbox']['progress'], $this->batchSettings['batch_process_limit']); + } + + return $this->entityTypeManager + ->getStorage($entity_info['entity_type_name']) + ->loadMultiple($query->execute()); + } +}