GlossaryAZWidget.php in Search API AZ Glossary 8.4
File
src/Plugin/facets/widget/GlossaryAZWidget.php
View source
<?php
namespace Drupal\search_api_glossary\Plugin\facets\widget;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Link;
use Drupal\facets\FacetInterface;
use Drupal\facets\Result\ResultInterface;
use Drupal\facets\Widget\WidgetPluginInterface;
use Drupal\facets\Widget\WidgetPluginBase;
class GlossaryAZWidget extends WidgetPluginBase implements WidgetPluginInterface {
public function build(FacetInterface $facet) {
$results = $facet
->getResults();
$items = [];
foreach ($results as $result) {
$items[] = $this
->buildListItems($facet, $result);
}
$build = [
'#theme' => 'item_list',
'#items' => $items,
'#cache' => [
'contexts' => [
'url.path',
'url.query_args',
],
],
];
$configuration = $facet
->getWidget()['config'];
$enable_default_theme = empty($configuration['enable_default_theme']) ? FALSE : (bool) $configuration['enable_default_theme'];
if ($enable_default_theme) {
$build['#attached'] = [
'library' => [
'search_api_glossary/drupal.search_api_glossary.facet_css',
],
];
}
return $build;
}
protected function buildListItems(FacetInterface $facet, ResultInterface $result) {
$classes = [
'facet-item',
'glossaryaz',
];
$items = $this
->prepareLink($result);
if ($result
->isActive()) {
$items['#attributes'] = [
'class' => 'is-active',
];
$classes[] = 'is-active';
}
else {
$items['#attributes'] = [
'class' => 'is-inactive',
];
}
if ($result
->getCount() == 0) {
$classes[] = 'no-results';
}
else {
$classes[] = 'yes-results';
}
$items['#wrapper_attributes'] = [
'class' => $classes,
];
return $items;
}
protected function prepareLink(ResultInterface $result) {
$configuration = $this
->getConfiguration();
$show_count = empty($configuration['show_count']) ? FALSE : (bool) $configuration['show_count'];
$text = $result
->getDisplayValue();
if ($show_count && $result
->getRawValue() != 'All') {
$text .= ' (' . $result
->getCount() . ')';
}
if (is_null($result
->getUrl()) || $result
->getCount() == 0) {
$link = [
'#markup' => $text,
];
}
else {
$link = new Link($text, $result
->getUrl());
$link = $link
->toRenderable();
}
return $link;
}
public function buildConfigurationForm(array $form, FormStateInterface $form_state, FacetInterface $facet) {
$form['show_count'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Show count per Glossary item'),
];
$form['enable_default_theme'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Use default Glossary AZ Theme'),
];
$config = $facet
->getWidget()['config'];
if (!is_null($config)) {
if (isset($config['show_count'])) {
$form['show_count']['#default_value'] = $config['show_count'];
}
if (isset($config['enable_default_theme'])) {
$form['enable_default_theme']['#default_value'] = $config['enable_default_theme'];
}
}
return $form;
}
public function getQueryType() {
return 'string';
}
public function supportsFacet(FacetInterface $facet) {
$glossary_processor = $facet
->getFacetSource()
->getIndex()
->getProcessor('glossary');
$glossary_field_id = $facet
->getFieldIdentifier();
$is_glossary_field = $glossary_processor
->checkFieldName($glossary_field_id);
return $is_glossary_field;
}
}