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()); } }