Merge pull request #32 from digitalutsc/1.x

Run the code though phpstan, phpcs
This commit is contained in:
Kyle Huynh 2023-06-07 11:24:34 -04:00 committed by GitHub
commit 094342c05a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 202 additions and 180 deletions

View file

@ -40,7 +40,8 @@ function advanced_search_theme() {
function advanced_search_library_info_alter(&$libraries, $extension) {
if ($extension == 'facets') {
// Override facets module javascript with customizations.
$path = '/' . drupal_get_path('module', 'advanced_search') . '/js/facets';
// https://www.drupal.org/node/2940438
$path = '/' . \Drupal::service('extension.list.module')->getPath('advanced_search') . '/js/facets';
$libraries['soft-limit']['js'] = [
"$path/soft-limit.js" => [],
];
@ -80,8 +81,8 @@ function advanced_search_form_block_form_alter(&$form, FormStateInterface $form_
$condition_id = 'node_has_term';
/** @var \Drupal\Core\Condition\ConditionInterface $condition */
if (array_key_exists($condition_id,$visibility)) {
$condition = $manager->createInstance($condition_id, isset($visibility[$condition_id]) ? $visibility[$condition_id] : []);
if (array_key_exists($condition_id, $visibility)) {
$condition = $manager->createInstance($condition_id, $visibility[$condition_id] ?? []);
$form_state->set(['conditions', $condition_id], $condition);
$condition_form = $condition->buildConfigurationForm([], $form_state);
$condition_form['#type'] = 'details';
@ -119,7 +120,7 @@ function advanced_search_preprocess_views_view(&$variables) {
if (in_array([$view->id(), $view->current_display], $views)) {
// Toggle between 'list' and 'grid' display depending on url parameter.
$config = \Drupal::config(SettingsForm::CONFIG_NAME);
$format = \Drupal::request()->query->get('display') ?? $config->get(SettingsForm::DISPLAY_DEFAULT);
$variables['attributes']['class'][] = "view-{$format}";
$view->element['#attached']['library'][] = 'advanced_search/advanced.search.pager';

View file

@ -41,5 +41,5 @@ input.islandora-advanced-search-form__search {
}
[id^="edit-terms"] {
display:initial !important;
display: initial !important;
}

View file

@ -116,13 +116,13 @@
}
/* generalizing */
.advanced_search_result_pager .pager__group .pager {
.advanced_search_result_pager .pager__group .pager {
display: none;
}
.advanced_search_result_pager .pager__group > * {
margin: 0.47214rem 2rem 0.47214rem 0;
display:flex;
display: flex;
}
.advanced_search_result_pager .pager__group > *:last-child {
@ -139,21 +139,19 @@
padding-right: 0 !important;
}
.advanced_search_result_pager .pager__group nav {
.advanced_search_result_pager .pager__group nav {
display: none;
}
.view-grid > .view-content{
.view-grid > .view-content {
display: grid;
grid-template-columns: repeat(3, 1fr);
/*margin: 0.47214rem 0 0.47214rem 2.61803rem;*/
}
@media only screen and (max-width: 600px) {
.view-grid > .view-content{
.view-grid > .view-content {
display: grid;
grid-template-columns: repeat(1, 1fr);
}
}

View file

@ -150,78 +150,81 @@ class AdvancedSearchQuery {
$language_ids = $search_api_query->getLanguages();
$field_mapping = $backend->getSolrFieldNamesKeyedByLanguage($language_ids, $index);
// disable for Lucene and wildcard
//$q[] = "{!boost b=boost_document}";
// create a flag for active/inactive dismax
// Disable for Lucene and wildcard
// $q[] = "{!boost b=boost_document}";
// Create a flag for active/inactive dismax.
$config = \Drupal::config(SettingsForm::CONFIG_NAME);
$isDismax = $config->get(SettingsForm::EDISMAX_SEARCH_FLAG);
if (!isset($isDismax))
$isDismax = true;
$isSearchAllFields = false;
if (!isset($isDismax)) {
$isDismax = TRUE;
}
$isSearchAllFields = FALSE;
$fields_list = [];
if (!$isDismax) {
// To support negative queries we must first bring in all documents.
$q[] = $this->negativeQuery($terms) ? "*:*" : "";
}
$term = array_shift($terms);
$q[] = $term->toSolrQuery($field_mapping);
// new
// New.
$fields_list[] = $term->toSolrFields($field_mapping);
// set edismax is enabled if the field set to "all"
// Set edismax is enabled if the field set to "all".
if ($term->getField() === "all") {
$isSearchAllFields = true;
$isSearchAllFields = TRUE;
}
// for multiple conditions
// For multiple conditions.
foreach ($terms as $term) {
$q[] = $term->getConjunction();
$q[] = $term->toSolrQuery($field_mapping);
// new
// New.
$fields_list[] = $term->toSolrFields($field_mapping);
// set dismax is enabled if the field set to "all"
// Set dismax is enabled if the field set to "all".
if ($term->getField() === "all") {
$isSearchAllFields = true;
$isSearchAllFields = TRUE;
}
}
$q = implode(' ', $q);
// Limit extra processing if Luncene Search is enable
// Limit extra processing if Luncene Search is enable.
if ($isDismax) {
if ((strpos($q, "*") !== false || strpos($q, "?") !== false)) {
// if the query string contain '*', '?', OR is a single world, enable wildcard
if ((strpos($q, "*") !== FALSE || strpos($q, "?") !== FALSE)) {
// If the query string contain '*','?',a single world,enable wildcard.
$tmp = str_replace('"', "", trim($q));
$query_fields = [];
if ($isSearchAllFields) {
foreach ($field_mapping as $key => $field) {
foreach ($field as $f => $item) {
// bs_ are boolean fields, do not work well with text search
if (substr($item, 0, 3) !== "bs_" && !in_array($item, ['score', 'random', 'boost_document'])
&& ((strpos( $item, "sm_" ) === 0) || (strpos( $item, "tm_" ) === 0) || (strpos($item, "sort_ss_") === 0) || (strpos($item, "ts_") === 0)
|| (strpos($item, "ss_") === 0)
)){
array_push($query_fields, '('.$item. ':'. $tmp .')');
// bs_ are boolean fields, do not work well with text search.
if (substr($item, 0, 3) !== "bs_"
&& !in_array($item, ['score', 'random', 'boost_document'])
&& ((strpos($item, "sm_") === 0)
|| (strpos($item, "tm_") === 0)
|| (strpos($item, "sort_ss_") === 0)
|| (strpos($item, "ts_") === 0)
|| (strpos($item, "ss_") === 0)
)) {
array_push($query_fields, '(' . $item . ':' . $tmp . ')');
}
}
}
}
else {
foreach ($fields_list as $f) {
foreach ($fields_list as $f) {
$parts = explode(" ", $f);
foreach ($parts as $p) {
array_push($query_fields, '(' . $p . ':' . $tmp .')');
foreach ($parts as $p) {
array_push($query_fields, '(' . $p . ':' . $tmp . ')');
}
}
}
@ -229,7 +232,7 @@ class AdvancedSearchQuery {
}
else {
// enable dismax search query option
// Enable dismax search query option.
/** @var Solarium\QueryType\Select\Query\Component\DisMax $dismax */
$dismax = $solarium_query->getEDisMax();
$dismax->setQueryParser('edismax');
@ -238,7 +241,7 @@ class AdvancedSearchQuery {
if ($isSearchAllFields) {
foreach ($field_mapping as $key => $field) {
foreach ($field as $f => $item) {
// bs_ are boolean fields, do not work well with text search
// bs_ are boolean fields, do not work well with text search.
if (substr($item, 0, 3) !== "bs_") {
array_push($query_fields, $item);
}
@ -247,7 +250,7 @@ class AdvancedSearchQuery {
}
else {
$query_fields = $fields_list;
}
$query_fields = implode(" ", array_unique($query_fields));
$dismax->setQueryFields($query_fields);
@ -263,9 +266,9 @@ class AdvancedSearchQuery {
if (empty($highlighted_fields)) {
$highlighted_fields = ['*'];
}
$this->setHighlighting($solarium_query, $search_api_query, $highlighted_fields);
// The Search API Highlight processor checks if the 'keys' field of
// the Search API Query is non-empty before creating an excerpt.
// Since we are getting the highlighting result from Solr instead
@ -273,7 +276,7 @@ class AdvancedSearchQuery {
// make this field non-empty.
$search_api_query->keys("advanced search");
}
$solarium_query->setQuery($q);
}
}
@ -371,14 +374,14 @@ class AdvancedSearchQuery {
/**
* Sets the highlighting parameters.
*
* @param \Solarium\QueryType\Select\Query\Query $solarium_query
* @param \Solarium\Core\Query\QueryInterface $solarium_query
* The Solarium select query object.
* @param \Drupal\search_api\Query\QueryInterface $query
* @param \Drupal\search_api\Query\QueryInterface $search_api_query
* The query object.
* @param array $highlighted_fields
* (optional) The solr fields to be highlighted.
*/
protected function setHighlighting(SolariumQueryInterface $solarium_query, DrupalQueryInterface $search_api_query, array $highlighted_fields = []) {
protected function setHighlighting(SolariumQueryInterface $solarium_query, DrupalQueryInterface $search_api_query, array $highlighted_fields = []) {
$index = $search_api_query->getIndex();
$settings = SearchAPISolrUtility::getIndexSolrSettings($index);
$highlighter = $settings['highlighter'];
@ -424,4 +427,5 @@ class AdvancedSearchQuery {
$hl->addField($highlighted_field);
}
}
}

View file

@ -4,6 +4,7 @@ namespace Drupal\advanced_search;
use Drupal\advanced_search\Form\AdvancedSearchForm;
use Drupal\advanced_search\Form\SettingsForm;
/**
* Defines a single search term.
*
@ -271,7 +272,7 @@ class AdvancedSearchQueryTerm {
return $this->conjunction;
}
/**
/**
* Using the provided field mapping create a Solr Query string.
*
* @param array $solr_field_mapping
@ -287,22 +288,22 @@ class AdvancedSearchQueryTerm {
$config = \Drupal::config(SettingsForm::CONFIG_NAME);
$isDismax = $config->get(SettingsForm::EDISMAX_SEARCH_FLAG);
if (!isset($isDismax)){
$isDismax = true;
if (!isset($isDismax)) {
$isDismax = TRUE;
}
if ($isDismax || $this->field === "all") {
// Case 1: if keyword contains one word or a phrase
if(strpos(trim($value), ' ') !== false) {
// add Or for the search case "scarborough bulletin" show no results
// Case 1: if keyword contains one word or a phrase.
if (strpos(trim($value), ' ') !== FALSE) {
// Add Or for the search case "scarborough bulletin" show no results.
$isNot = $this->getInclude() ? "" : "-";
if (substr_count($value, '\"') == 2) {
$value = str_replace('\"', "", trim($value));
return $isNot . $value;
}
else {
return $isNot . "(" .$value . " OR " . str_replace('"', "", trim($value)) . ")";
return $isNot . "(" . $value . " OR " . str_replace('"', "", trim($value)) . ")";
}
}
if (!$this->getInclude()) {
@ -310,45 +311,44 @@ class AdvancedSearchQueryTerm {
}
else {
// Case 2: keywords is one word
// if there is quotation (with backslash) surrounded,
if (strpos(trim($value), '\"' ) !== false) {
$value = str_replace('\"', "", trim($value));
// if there is quotation (with backslash) surrounded,.
if (strpos(trim($value), '\"') !== FALSE) {
$value = str_replace('\"', "", trim($value));
}
else {
// if there is quotation (without backslash) surrounded
$value = str_replace('"', "", trim($value));
else {
// If there is quotation (without backslash) surrounded.
$value = str_replace('"', "", trim($value));
}
}
return $value;
}
else {
$isTitleSearch = false;
$isTitleSearch = FALSE;
foreach ($solr_field_mapping[$this->field] as $field) {
// if field fulltext title is selected
if (strpos($field, "fulltext_title") !== false) {
$isTitleSearch = true;
if (strpos(trim($value), " AND " ) !== false) {
//When you type 'Orientation AND games' into the title search, you get one result.
// When you do the same search but add a search box, you get a lot more results.
// (Recreation: Add a search box, set both search criteria to 'Title' and keep the operator to 'and'.
// Type 'orientation' in one box and 'games' in the second box and click seach.)
$keyword = str_replace('"', '', $value);
// If field fulltext title is selected.
if (strpos($field, "fulltext_title") !== FALSE) {
$isTitleSearch = TRUE;
if (strpos(trim($value), " AND ") !== FALSE) {
// Handle keyword with 'Orientation AND games'.
$keyword = str_replace('"', '', $value);
$keys = explode(" AND ", $keyword);
$str = "(";
$i = 0;
foreach ($keys as $key) {
if ($i != count($keys)-1)
$str .= $field . ':"' .$key . '" AND ';
else
$str .= $field . ':"' .$key . '")';
$i++;
if ($i != count($keys) - 1) {
$str .= $field . ':"' . $key . '" AND ';
}
else {
$str .= $field . ':"' . $key . '")';
}
$i++;
}
$terms[] = $str;
}
else {
if ($isTitleSearch) {
$terms[] = 'tm_lowercase_title:'. $value;
$terms[] = 'tm_lowercase_title:' . $value;
}
else {
$terms[] = "$field:$value";
@ -366,8 +366,7 @@ class AdvancedSearchQueryTerm {
return $this->include ? "($terms)" : "-($terms)";
}
/**
/**
* Using the provided field mapping create a Solr Fields string.
*
* @param array $solr_field_mapping
@ -381,7 +380,7 @@ class AdvancedSearchQueryTerm {
$query_helper = \Drupal::service('solarium.query_helper');
if ($this->field !== "all") {
foreach ($solr_field_mapping[$this->field] as $field) {
foreach ($solr_field_mapping[$this->field] as $field) {
$terms[] = "$field";
}
}
@ -390,11 +389,10 @@ class AdvancedSearchQueryTerm {
}
/**
* Get Field search
* Get Field search.
*/
public function getField() {
return $this->field;
}
}

View file

@ -84,7 +84,7 @@ class AjaxBlocksController extends ControllerBase {
* @param \Symfony\Component\DependencyInjection\ContainerInterface $container
* The drupal container.
*/
public function __construct(RendererInterface $renderer, CurrentPathStack $currentPath, RouterInterface $router, PathProcessorManager $pathProcessor, CurrentRouteMatch $currentRouteMatch, ContainerInterface $container) {
final public function __construct(RendererInterface $renderer, CurrentPathStack $currentPath, RouterInterface $router, PathProcessorManager $pathProcessor, CurrentRouteMatch $currentRouteMatch, ContainerInterface $container) {
$this->storage = $this->entityTypeManager()->getStorage('block');
$this->renderer = $renderer;
$this->currentPath = $currentPath;

View file

@ -61,7 +61,7 @@ class AdvancedSearchForm extends FormBase {
/**
* Class constructor.
*/
public function __construct(Request $request, RouteMatchInterface $current_route_match) {
final public function __construct(Request $request, RouteMatchInterface $current_route_match) {
$this->request = $request;
$this->currentRouteMatch = $current_route_match;
}
@ -103,21 +103,21 @@ class AdvancedSearchForm extends FormBase {
return self::getConfig(SettingsForm::SEARCH_REMOVE_OPERATOR, self::DEFAULT_REMOVE_OP);
}
/**
* Get if Edismax Search checkbox is enabled or disable
*
* @return boolean
/**
* Get if Search All Fields checkbox is enabled or disable.
*
* @return bool
* the enable or disable for Search All Fields checkbox
*/
public static function getSearchAllFields() {
return self::getConfig(SettingsForm::SEARCH_ALL_FIELDS_FLAG, 0);
}
/**
* Get if Edismax Search checkbox is enabled or disable
*
* @return boolean
* Get if Edismax Search checkbox is enabled or disable.
*
* @return bool
* the enable or disable for Edismax Search checkbox
*/
public static function getEdismaxSearch() {
return self::getConfig(SettingsForm::EDISMAX_SEARCH_FLAG, 0);
@ -185,7 +185,7 @@ class AdvancedSearchForm extends FormBase {
*/
protected function processInput(FormStateInterface $form_state, array $term_default_values) {
$input = $form_state->getUserInput();
$recursive = isset($input['recursive']) ? $input['recursive'] : NULL;
$recursive = $input['recursive'] ?? NULL;
$term_values = isset($input['terms']) && is_array($input['terms']) ? $input['terms'] : [];
// Form was not submitted see if we can rebuild from query parameters.
$advanced_search_query = new AdvancedSearchQuery();
@ -273,9 +273,9 @@ class AdvancedSearchForm extends FormBase {
],
];
$options = (self::getEdismaxSearch() && self::getSearchAllFields()) ? ["all" => $this->t(self::getEdismaxSearchLabel())] + $this->fieldOptions($fields) : $this->fieldOptions($fields);
$options = (self::getEdismaxSearch() && self::getSearchAllFields()) ? ["all" => $this->t("@label", ["@label" => self::getEdismaxSearchLabel()])] + $this->fieldOptions($fields) : $this->fieldOptions($fields);
$term_default_values = $this->defaultTermValues($options);
list($recursive, $term_values) = $this->processInput($form_state, $term_default_values);
[$recursive, $term_values] = $this->processInput($form_state, $term_default_values);
$i = 0;
$term_elements = [];
$total_terms = count($term_values);
@ -284,20 +284,20 @@ class AdvancedSearchForm extends FormBase {
// Either specified by the user in the request or use the default.
$first = $i == 0;
$term_value = !empty($term_values) ? array_shift($term_values) : $term_default_values;
$conjunction = isset($term_value[self::CONJUNCTION_FORM_FIELD]) ? $term_value[self::CONJUNCTION_FORM_FIELD] : $term_default_values[self::CONJUNCTION_FORM_FIELD];
$conjunction = $term_value[self::CONJUNCTION_FORM_FIELD] ?? $term_default_values[self::CONJUNCTION_FORM_FIELD];
$term_elements[] = [
// Only show on terms after the first.
self::CONJUNCTION_FORM_FIELD => $first ? NULL : [
'#type' => 'select',
'#attributes' => [
'aria-label' => $this->t("Select search condition")
'aria-label' => $this->t("Select search condition"),
],
'#options' => [
self::AND_OP => $this->t('and'),
self::OR_OP => $this->t('or'),
],
'#default_value' => $conjunction,
'#theme_wrappers' => []
'#theme_wrappers' => [],
],
self::SEARCH_FORM_FIELD => [
'#type' => 'select',
@ -306,7 +306,7 @@ class AdvancedSearchForm extends FormBase {
],
'#options' => $options,
'#default_value' => $term_value[self::SEARCH_FORM_FIELD],
'#theme_wrappers' => []
'#theme_wrappers' => [],
],
self::INCLUDE_FORM_FIELD => [
'#type' => 'select',
@ -325,7 +325,7 @@ class AdvancedSearchForm extends FormBase {
':input[name="terms[' . $i . '][' . self::CONJUNCTION_FORM_FIELD . ']"]' => ['value' => self::AND_OP],
],
],
'#theme_wrappers' => []
'#theme_wrappers' => [],
],
// Just markup to show when 'include' is not alterable due to the
// selected 'conjunction'. Hide for the first term.
@ -340,15 +340,15 @@ class AdvancedSearchForm extends FormBase {
/*'content' => [
'#markup' => $this->t('is'),
],*/
'#theme_wrappers' => []
'#theme_wrappers' => [],
],
self::VALUE_FORM_FIELD => [
'#type' => 'textfield',
'#attributes' => [
'aria-label' => $this->t("Enter a search term")
'aria-label' => $this->t("Enter a search term"),
],
'#default_value' => $term_value[self::VALUE_FORM_FIELD],
'#theme_wrappers' => []
'#theme_wrappers' => [],
],
'actions' => [
'#type' => 'container',
@ -374,7 +374,7 @@ class AdvancedSearchForm extends FormBase {
'#name' => 'remove-term-' . $i,
'#term_index' => $i,
'#attributes' => [
'class' => [$block_class_prefix . '__remove', 'fa' ],
'class' => [$block_class_prefix . '__remove', 'fa'],
'aria-label' => $this->t("Remove"),
],
'#ajax' => [
@ -440,7 +440,7 @@ class AdvancedSearchForm extends FormBase {
$terms[] = AdvancedSearchQueryTerm::fromUserInput($term);
}
$terms = array_filter($terms);
$recurse = filter_var(isset($values['recursive']) ? $values['recursive'] : FALSE, FILTER_VALIDATE_BOOLEAN);
$recurse = filter_var($values['recursive'] ?? FALSE, FILTER_VALIDATE_BOOLEAN);
$route = $this->getRouteName($form_state);
$advanced_search_query = new AdvancedSearchQuery();
return $advanced_search_query->toUrl($this->request, $terms, $recurse, $route);

View file

@ -2,95 +2,108 @@
namespace Drupal\advanced_search\Form;
use Drupal\block\Entity\Block;
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use \Drupal\Core\Url;
use Drupal\Core\Url;
class SearchForm extends FormBase
{
protected $block_id;
/**
* Form for building and Simple Search.
*/
class SearchForm extends FormBase {
/**
* @param $block_id
* The Block ID.
*
* @var string
*/
protected $blockId;
/**
* The constructor.
*
* @param string $block_id
* Passing the block_id.
*/
public function __construct($block_id) {
$this->block_id = $block_id;
$this->blockId = $block_id;
}
/**
* Get Block Id.
*
* @return mixed
* Return the Block ID
*/
public function getBlockId() {
return $this->block_id;
return $this->blockId;
}
/**
* @param mixed $block_id
* Set Block ID.
*
* @param mixed $blockId
* Set the block ID.
*/
public function setBlockId($block_id): void {
$this->block_id = $block_id;
public function setBlockId($blockId): void {
$this->blockId = $blockId;
}
/**
* {@inheritdoc}
*/
public function getFormId()
{
public function getFormId() {
return 'search_form';
}
/**
* {@inheritdoc}
*/
public function buildForm(array $form, FormStateInterface $form_state)
{
public function buildForm(array $form, FormStateInterface $form_state) {
$config = \Drupal::config(SettingsForm::CONFIG_NAME);
if (!$config->get(SettingsForm::SEARCH_ALL_FIELDS_FLAG)) {
if (!$config->get(SettingsForm::SEARCH_ALL_FIELDS_FLAG)) {
$form['search-attributes'][SettingsForm::SEARCH_ALL_FIELDS_FLAG] = [
'#markup' => $this
->t('<strong>This block is required to enable searching all fields for the Advanced Search.
To proceed, please enable the Search All fields in
To proceed, please enable the Search All fields in
<a href="/admin/config/search/advanced" target="_blank">Advanced Seach Configuration</a></strong>.'),
];
}
else {
$block = \Drupal\block\Entity\Block::load($this->block_id);
$block = Block::load($this->blockId);
if ($block) {
$settings = $block->get('settings');
$view_machine_name = $settings['search_view_machine_name'];
}
$form['search-textfield'] = array(
$form['search-textfield'] = [
'#type' => 'textfield',
'#title' => (!empty($settings['search_textfield_label']) ? $settings['search_textfield_label'] : ''),
'#attributes' => [
'placeholder' => isset($settings['search_placeholder']) ? $this->t($settings['search_placeholder']) : $this->t("Search collections"),
'aria-label' => (isset($settings['search_textfield_label']) ? $this->t($settings['search_textfield_label']) : $this->t('Enter Keyword'))
'placeholder' => isset($settings['search_placeholder']) ? $this->t("@placeholder", ["@placeholder" => $settings['search_placeholder']]) : $this->t("Search collections"),
'aria-label' => (isset($settings['search_textfield_label']) ? $this->t("@label", ["@label" => $settings['search_textfield_label']]) : $this->t('Enter Keyword')),
],
'#theme_wrappers' => []
);
'#theme_wrappers' => [],
];
$form['actions']['#type'] = 'actions';
$form['actions']['submit'] = array(
$form['actions']['submit'] = [
'#type' => 'submit',
'#value' => (!empty($settings['search_submit_label']) ? $settings['search_submit_label'] : 'Search'),
'#button_type' => 'primary',
);
];
}
return $form;
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state)
{
$block = \Drupal\block\Entity\Block::load($this->block_id);
public function submitForm(array &$form, FormStateInterface $form_state) {
$block = Block::load($this->blockId);
if ($block) {
$settings = $block->get('settings');
$view_machine_name = $settings['search_view_machine_name'];
@ -103,4 +116,5 @@ class SearchForm extends FormBase
]);
$form_state->setRedirectUrl($url);
}
}

View file

@ -28,14 +28,14 @@ class SettingsForm extends ConfigFormBase {
const DISPLAY_LIST_FLAG = 'list_on_off';
const DISPLAY_GRID_FLAG = 'grid_on_off';
const DISPLAY_DEFAULT = 'default-display-mode';
/**
* Constructs a \Drupal\system\ConfigFormBase object.
*
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
* The factory for configuration objects.
*/
public function __construct(ConfigFactoryInterface $config_factory) {
final public function __construct(ConfigFactoryInterface $config_factory) {
$this->setConfigFactory($config_factory);
}
@ -91,7 +91,7 @@ class SettingsForm extends ConfigFormBase {
</ul>
</li>
</ul>'),
'#default_value' => isset($isEDismax) ? $isEDismax : 1,
'#default_value' => $isEDismax ?? 1,
];
$form['eDisMax']['textfields_container'] = [
@ -116,15 +116,14 @@ class SettingsForm extends ConfigFormBase {
'#default_value' => self::getConfig(self::EDISMAX_SEARCH_LABEL, "Keyword"),
];
$form['display-mode'] = [
$form['display-mode'] = [
'#type' => 'fieldset',
'#title' => $this->t("Pager Block"),
];
$form['display-mode']['pager-block-description'] = [
'#markup' => $this->t("Pager blocks are available in the Blocks interface for each Search API view. The following settings apply for all Pager blocks."),
];
$form['display-mode'][self::DISPLAY_LIST_FLAG] = [
'#type' => 'checkbox',
'#title' => $this
@ -145,7 +144,7 @@ class SettingsForm extends ConfigFormBase {
->t('Default view mode:'),
'#options' => [
'list' => 'List',
'grid' => 'Grid'
'grid' => 'Grid',
],
'#default_value' => self::getConfig(self::DISPLAY_DEFAULT, 'grid'),
];
@ -191,7 +190,6 @@ class SettingsForm extends ConfigFormBase {
],
],
];
return parent::buildForm($form, $form_state);
}

View file

@ -88,10 +88,10 @@ class AdvancedSearchBlock extends BlockBase implements ContainerFactoryPluginInt
* @param \Symfony\Component\HttpFoundation\Request $request
* A request object for the current request.
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, DisplayPluginManager $display_plugin_manager, FormBuilderInterface $form_builder, Request $request) {
final public function __construct(array $configuration, $plugin_id, $plugin_definition, DisplayPluginManager $display_plugin_manager, FormBuilderInterface $form_builder, Request $request) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->displayPluginManager = $display_plugin_manager;
list($view_id, $display_id) = preg_split('/__/', $this->getDerivativeId(), 2);
[$view_id, $display_id] = preg_split('/__/', $this->getDerivativeId(), 2);
$this->view = View::Load($view_id);
$this->display = $this->view->getDisplay($display_id);
$this->formBuilder = $form_builder;

View file

@ -40,6 +40,11 @@ abstract class SearchApiDisplayBlockDeriver implements ContainerDeriverInterface
*/
abstract protected function label();
/**
* The constructor.
*/
final public function __construct(ContainerInterface $container, $base_plugin_id) {}
/**
* {@inheritdoc}
*/
@ -55,7 +60,7 @@ abstract class SearchApiDisplayBlockDeriver implements ContainerDeriverInterface
*/
public function getDerivativeDefinition($derivative_id, $base_plugin_definition) {
$derivatives = $this->getDerivativeDefinitions($base_plugin_definition);
return isset($derivatives[$derivative_id]) ? $derivatives[$derivative_id] : NULL;
return $derivatives[$derivative_id] ?? NULL;
}
/**

View file

@ -2,6 +2,7 @@
namespace Drupal\advanced_search\Plugin\Block;
use Drupal\advanced_search\Form\SearchForm;
use Drupal\Core\Block\BlockBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\advanced_search\Form\SettingsForm;
@ -20,8 +21,7 @@ class SearchBlock extends BlockBase {
* {@inheritdoc}
*/
public function defaultConfiguration() {
return [
] + parent::defaultConfiguration();
return [] + parent::defaultConfiguration();
}
/**
@ -34,11 +34,11 @@ class SearchBlock extends BlockBase {
'#title' => $this->t('Configure Search Block'),
];
if (!$config->get(SettingsForm::SEARCH_ALL_FIELDS_FLAG)) {
if (!$config->get(SettingsForm::SEARCH_ALL_FIELDS_FLAG)) {
$form['search-attributes'][SettingsForm::SEARCH_ALL_FIELDS_FLAG] = [
'#markup' => $this
->t('<strong>This block is required to enable searching all fields for the Advanced Search.
To proceed, please enable "Enable searching all fields" in
To proceed, please enable "Enable searching all fields" in
<a href="/admin/config/search/advanced" target="_blank">Advanced Seach Configuration</a></strong>.'),
];
}
@ -46,28 +46,28 @@ class SearchBlock extends BlockBase {
$views = \Drupal::EntityTypeManager()->getStorage('view')->loadMultiple();
$options = [];
foreach ($views as $view_name => $view) {
$displays = $view->get("display");
foreach ($displays as $display) {
if ($display['display_plugin'] === "page") {
$options["view.$view_name". "." . $display['id']] = "view.$view_name". "." . $display['id'];
}
$displays = $view->get("display");
foreach ($displays as $display) {
if ($display['display_plugin'] === "page") {
$options["view.$view_name" . "." . $display['id']] = "view.$view_name" . "." . $display['id'];
}
}
}
$form['search-attributes']['view_machine_name'] = [
'#type' => 'select',
'#title' => $this->t('Select Search Results Page\'s Machine Name:'),
'#title' => $this->t('Select the machine name of Search Results Page:'),
'#default_value' => $this->configuration['search_view_machine_name'],
'#options' => $options
'#options' => $options,
];
$form['search-attributes']['search_textfield'] = [
'#type' => 'textfield',
'#title' => $this->t('Search Keyword Textfield Label:'),
'#title' => $this->t('Search Keyword Text field label:'),
'#default_value' => $this->configuration['search_textfield_label'],
'#maxlength' => 255,
];
$form['search-attributes']['search_placeholder_textfield'] = [
'#type' => 'textfield',
'#title' => $this->t('Search Keyword Textfield Placeholder:'),
'#title' => $this->t('Search Keyword text field placeholder:'),
'#default_value' => $this->configuration['search_placeholder'],
'#maxlength' => 255,
];
@ -79,7 +79,7 @@ class SearchBlock extends BlockBase {
'#maxlength' => 255,
];
}
return $form;
}
@ -100,7 +100,7 @@ class SearchBlock extends BlockBase {
public function build() {
$config = $this->getConfiguration();
$blockId = $config['block_id'];
$searchForm = new \Drupal\advanced_search\Form\SearchForm($blockId);
$searchForm = new SearchForm($blockId);
return \Drupal::formBuilder()->getForm($searchForm);
}

View file

@ -46,7 +46,7 @@ class SearchResultsPagerBlock extends BlockBase implements ContainerFactoryPlugi
* @param \Symfony\Component\HttpFoundation\Request $request
* A request object for the current request.
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, Request $request) {
final public function __construct(array $configuration, $plugin_id, $plugin_definition, Request $request) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->request = clone $request;
}
@ -68,7 +68,7 @@ class SearchResultsPagerBlock extends BlockBase implements ContainerFactoryPlugi
*/
public function build() {
$id = $this->getDerivativeId();
list($view_id, $display_id) = $this->getViewAndDisplayIdentifiers();
[$view_id, $display_id] = $this->getViewAndDisplayIdentifiers();
$view = View::Load($view_id);
$view_executable = $view->getExecutable();
$view_executable->setDisplay($display_id);
@ -121,7 +121,7 @@ class SearchResultsPagerBlock extends BlockBase implements ContainerFactoryPlugi
protected function buildResultsSummary(ViewExecutable $view_executable) {
$current_page = (int) $view_executable->getCurrentPage() + 1;
$per_page = (int) $view_executable->getItemsPerPage();
$total = isset($view_executable->total_rows) ? $view_executable->total_rows : count($view_executable->result);
$total = $view_executable->total_rows ?? count($view_executable->result);
// If there is no result the "start" and "current_record_count" should be
// equal to 0. To have the same calculation logic, we use a "start offset"
// to handle all the cases.
@ -186,8 +186,10 @@ class SearchResultsPagerBlock extends BlockBase implements ContainerFactoryPlugi
'#url' => $url,
'#title' => $items_per_page,
'#attributes' => [
'aria-label' => $this->t($items_per_page . " items per page"),
'class' => $active ? ['pager__link', 'pager__link--is-active', 'pager__itemsperpage'] : ['pager__link', 'pager__itemsperpage'],
'aria-label' => $this->t("@item items per page", ["@item" => $items_per_page]),
'class' => $active ?
['pager__link', 'pager__link--is-active', 'pager__itemsperpage'] :
['pager__link', 'pager__itemsperpage'],
],
'#wrapper_attributes' => [
'class' => $active ? ['pager__item', 'is-active'] : ['pager__item'],
@ -216,18 +218,18 @@ class SearchResultsPagerBlock extends BlockBase implements ContainerFactoryPlugi
protected function buildDisplayLinks(array $query_parameters) {
$config = \Drupal::config(SettingsForm::CONFIG_NAME);
$display_options = [];
if ($config->get(SettingsForm::DISPLAY_LIST_FLAG) == 1) {
if ($config->get(SettingsForm::DISPLAY_LIST_FLAG) == 1) {
$display_options['list'] = [
'icon' => 'fa-list',
'title' => $this->t('List'),
];
}
if ($config->get(SettingsForm::DISPLAY_GRID_FLAG) ==1) {
if ($config->get(SettingsForm::DISPLAY_GRID_FLAG) == 1) {
$display_options['grid'] = [
'icon' => 'fa-th',
'title' => $this->t('Grid')
'title' => $this->t('Grid'),
];
}
@ -245,8 +247,10 @@ class SearchResultsPagerBlock extends BlockBase implements ContainerFactoryPlugi
'#url' => $url,
'#title' => Markup::create($text),
'#attributes' => [
'class' => $active ? ['pager__link', 'pager__link--is-active', 'pager__display'] : ['pager__link', 'pager__display'],
'aria-label' => $this->t("Display as " . Markup::create($text))
'class' => $active ?
['pager__link', 'pager__link--is-active', 'pager__display'] :
['pager__link', 'pager__display'],
'aria-label' => $this->t("Display as @link", ["@link" => Markup::create($text)]),
],
'#wrapper_attributes' => [
'class' => $active ? ['pager__item', 'is-active'] : ['pager__item'],
@ -305,7 +309,7 @@ class SearchResultsPagerBlock extends BlockBase implements ContainerFactoryPlugi
'#title_display' => 'invisible',
'#options' => $options,
'#options_attributes' => $options_attributes,
'#attributes' => ['autocomplete' => 'off', "aria-label"=>"Sort By"],
'#attributes' => ['autocomplete' => 'off', "aria-label" => "Sort By"],
'#wrapper_attributes' => ['class' => ['pager__sort', 'container']],
'#name' => 'order',
'#value' => $default_value,

View file

@ -27,7 +27,7 @@ class Utilities {
foreach ($block_storage->loadByProperties(['theme' => $active_theme->getName()]) as $block) {
$plugin = $block->getPlugin();
if ($plugin instanceof SearchResultsPagerBlock) {
list($view_id, $display_id) = $plugin->getViewAndDisplayIdentifiers();
[$view_id, $display_id] = $plugin->getViewAndDisplayIdentifiers();
$views[$block->id()] = [$view_id, $display_id];
}
}
@ -52,7 +52,7 @@ class Utilities {
foreach ($block_storage->loadByProperties(['theme' => $active_theme->getName()]) as $block) {
$plugin = $block->getPlugin();
if ($plugin instanceof AdvancedSearchBlock) {
list($view_id, $display_id) = $plugin->getViewAndDisplayIdentifiers();
[$view_id, $display_id] = $plugin->getViewAndDisplayIdentifiers();
$views[$block->id()] = [$view_id, $display_id];
}
}