SearchPageRepository.php

Same filename in other branches
  1. 9 core/modules/search/src/SearchPageRepository.php
  2. 10 core/modules/search/src/SearchPageRepository.php
  3. 11.x core/modules/search/src/SearchPageRepository.php

Namespace

Drupal\search

File

core/modules/search/src/SearchPageRepository.php

View source
<?php

namespace Drupal\search;

use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;

/**
 * Provides a repository for Search Page config entities.
 */
class SearchPageRepository implements SearchPageRepositoryInterface {
    
    /**
     * The config factory.
     *
     * @var \Drupal\Core\Config\ConfigFactoryInterface
     */
    protected $configFactory;
    
    /**
     * The search page storage.
     *
     * @var \Drupal\Core\Entity\EntityStorageInterface
     */
    protected $storage;
    
    /**
     * Constructs a new SearchPageRepository.
     *
     * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
     *   The config factory.
     * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
     *   The entity type manager.
     */
    public function __construct(ConfigFactoryInterface $config_factory, EntityTypeManagerInterface $entity_type_manager) {
        $this->configFactory = $config_factory;
        $this->storage = $entity_type_manager->getStorage('search_page');
    }
    
    /**
     * {@inheritdoc}
     */
    public function getActiveSearchPages() {
        $ids = $this->getQuery()
            ->condition('status', TRUE)
            ->execute();
        return $this->storage
            ->loadMultiple($ids);
    }
    
    /**
     * {@inheritdoc}
     */
    public function isSearchActive() {
        return (bool) $this->getQuery()
            ->condition('status', TRUE)
            ->range(0, 1)
            ->execute();
    }
    
    /**
     * {@inheritdoc}
     */
    public function getIndexableSearchPages() {
        return array_filter($this->getActiveSearchPages(), function (SearchPageInterface $search) {
            return $search->isIndexable();
        });
    }
    
    /**
     * {@inheritdoc}
     */
    public function getDefaultSearchPage() {
        // Find all active search pages (without loading them).
        $search_pages = $this->getQuery()
            ->condition('status', TRUE)
            ->execute();
        // If the default page is active, return it.
        $default = $this->configFactory
            ->get('search.settings')
            ->get('default_page');
        if (isset($search_pages[$default])) {
            return $default;
        }
        // Otherwise, use the first active search page.
        return is_array($search_pages) ? reset($search_pages) : FALSE;
    }
    
    /**
     * {@inheritdoc}
     */
    public function clearDefaultSearchPage() {
        $this->configFactory
            ->getEditable('search.settings')
            ->clear('default_page')
            ->save();
    }
    
    /**
     * {@inheritdoc}
     */
    public function setDefaultSearchPage(SearchPageInterface $search_page) {
        $this->configFactory
            ->getEditable('search.settings')
            ->set('default_page', $search_page->id())
            ->save();
        $search_page->enable()
            ->save();
    }
    
    /**
     * {@inheritdoc}
     */
    public function sortSearchPages($search_pages) {
        $entity_type = $this->storage
            ->getEntityType();
        uasort($search_pages, [
            $entity_type->getClass(),
            'sort',
        ]);
        return $search_pages;
    }
    
    /**
     * Returns an entity query instance.
     *
     * @return \Drupal\Core\Entity\Query\QueryInterface
     *   The query instance.
     */
    protected function getQuery() {
        return $this->storage
            ->getQuery();
    }

}

Classes

Title Deprecated Summary
SearchPageRepository Provides a repository for Search Page config entities.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.