diff --git a/conjuction_parantheses_correction.patch b/conjuction_parantheses_correction.patch
new file mode 100644
index 0000000..aa0957c
--- /dev/null
+++ b/conjuction_parantheses_correction.patch
@@ -0,0 +1,68 @@
+diff --git a/src/AdvancedSearchQuery.php b/src/AdvancedSearchQuery.php
+index af40fb7..b8c6eb7 100644
+--- a/src/AdvancedSearchQuery.php
++++ b/src/AdvancedSearchQuery.php
+@@ -143,6 +143,7 @@ class AdvancedSearchQuery {
+ public function alterQuery(Request $request, SolariumQueryInterface &$solarium_query, DrupalQueryInterface $search_api_query) {
+ // Only apply if a Advanced Search Query was made.
+ $terms = $this->getTerms($request);
++
+ if (!empty($terms)) {
+ $index = $search_api_query->getIndex();
+ /** @var \Drupal\search_api_solr\Plugin\search_api\backend\SearchApiSolrBackend $backend */
+@@ -163,11 +164,10 @@ class AdvancedSearchQuery {
+
+ if (!$isDismax) {
+ // To support negative queries we must first bring in all documents.
+- $q[] = $this->negativeQuery($terms) ? "*:*" : "";
++ $q = $this->negativeQuery($terms) ? "*:*" : "";
+ }
+-
+ $term = array_shift($terms);
+- $q[] = $term->toSolrQuery($field_mapping);
++ $q = '(' . trim($term->toSolrQuery($field_mapping));
+
+ // New.
+ $fields_list[] = $term->toSolrFields($field_mapping);
+@@ -180,8 +180,8 @@ class AdvancedSearchQuery {
+
+ // For multiple conditions.
+ foreach ($terms as $term) {
+- $q[] = $term->getConjunction();
+- $q[] = $term->toSolrQuery($field_mapping);
++ $q .= ')' . $term->getConjunction() . '(';
++ $q .= trim($term->toSolrQuery($field_mapping));
+
+ // New.
+ $fields_list[] = $term->toSolrFields($field_mapping);
+@@ -193,8 +193,8 @@ class AdvancedSearchQuery {
+ }
+
+ }
+- $q = implode(' ', $q);
+
++ $q .= ')';
+ // Limit extra processing if Luncene Search is enable.
+ if ($isDismax) {
+
+@@ -257,7 +257,7 @@ class AdvancedSearchQuery {
+ foreach ($index->getFields() as $field_id => $field) {
+ $boostedFields[$field_id] = $field->getBoost();
+ }
+-
++
+ $str_fields_with_boost = "";
+ // Adding a boost number for each field)
+ foreach($query_fields as $solr_field) {
+@@ -291,11 +291,9 @@ class AdvancedSearchQuery {
+ // make this field non-empty.
+ //$search_api_query->keys("advanced search");
+ }
+-
+ $solarium_query->setQuery($q);
+ }
+ }
+-
+ /**
+ * Alters the given view to be recursive if applicable.
+ *
diff --git a/js/advanced_search.entityFields copy.js b/js/advanced_search.entityFields copy.js
new file mode 100644
index 0000000..d881dcb
--- /dev/null
+++ b/js/advanced_search.entityFields copy.js
@@ -0,0 +1,189 @@
+(function ($, Drupal, drupalSettings) {
+
+ function toDropdown(field, i) {
+ let searchValueSelectId = 'edit-terms-' + i + '-value';
+ let SearchValueFieldselector = "[id^='" + searchValueSelectId + "']";
+ let $searchValueInputField = $(SearchValueFieldselector);
+ $searchValueInputField.hide();
+ let $oldHelperField = $('#edit-terms-' + i + '-helper');
+ $oldHelperField.remove();
+ $searchValueInputField.after('');
+ let $newHelperField = $('#edit-terms-' + i + '-helper');
+ if (['agg__arch__transaktion', 'agg__all__transaktion'].includes(field)) { // Transaktion
+ $newHelperField.empty();
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ } else if (['agg__all__objektkategorie', 'agg__arch__objektkategorie', 'agg__obj__objektkategorie'].includes(field)) { // Objektkategorie
+ $newHelperField.empty();
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ $newHelperField.append('');
+ }
+ $newHelperField.change(function () {
+ let selectedOption = $newHelperField.find('option:selected');
+ $searchValueInputField.val(selectedOption.val()).text(selectedOption.text());
+ });
+ }
+
+ Drupal.behaviors.advanceSearchEntityFields = {
+ attach: function attach(context, settings) {
+ let $searchSelectElement = $('[id^="edit-terms-0-search"]');
+ let originalSearchSelectOptions = $searchSelectElement.find('option').clone();
+ $searchSelectElement.empty();
+ $searchSelectElement.append('');
+ $searchSelectElement.append('');
+ $searchSelectElement.append('');
+ $searchSelectElement.append('');
+ $searchSelectElement.append('');
+ $searchSelectElement.append('');
+ $searchSelectElement.append('');
+ $searchSelectElement.append('');
+ $searchSelectElement.append('');
+ $searchSelectElement.append('');
+ $searchSelectElement.append('');
+ $searchSelectElement.append('');
+ $searchSelectElement.append('');
+ $searchSelectElement.append('');
+ $searchSelectElement.append('');
+ $searchSelectElement.append('');
+ $searchSelectElement.append('');
+ $(document).on('change', '.advanced-search-form--entity', function () {
+ let id = $(this).attr('id');
+ let i = id.substring(11, 12);
+ let $select = $('#' + id);
+ let searchSelectId = 'edit-terms-' + i + '-search';
+ let selector = "[id^='" + searchSelectId + "']";
+ let $searchSelect = $(selector);
+ if ($select.val() === 'akteur') { // Akteur
+ $searchSelect.empty();
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ }
+ else if ($select.val() === 'b48556e79962e0a3c8d0041317c853b9') { // Archivalie
+ $searchSelect.empty();
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ }
+ else if ($select.val() === 'ba419826c9014f40126565bf413f7a59') { // Auktion
+ $searchSelect.empty();
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ } else if ($select.val() === 'b65c3a85d16724d84a5eb0d2268629a6') { // Objekt
+ $searchSelect.empty();
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ } else if ($select.val() === 'ueberall') {
+ $searchSelect.empty();
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+ $searchSelect.append('');
+
+ }
+ });
+ let urlParams = new URLSearchParams(window.location.search);
+ let params = {};
+ let p = {};
+ for (const param of urlParams) {
+ let key = param[0].split('[');
+ let value = param[1];
+ let obj = p;
+ for (let i = 0; i < key.length - 1; i++) {
+ let k = key[i].replace(']', '');
+ if (!obj.hasOwnProperty(k)) {
+ obj[k] = {};
+ }
+ obj = obj[k];
+ }
+ let lastKey = key[key.length - 1].replace(']', '');
+ obj[lastKey] = value;
+ }
+ params = p;
+ $(document).on('change', '.advanced-search-form--select-field', function () {
+ let id = $(this).attr('id');
+ let i = id.substring(11, 12);
+ let field = $(this).val();
+ if (['agg__arch__transaktion', 'agg__all__transaktion', 'agg__all__objektkategorie', 'agg__arch__objektkategorie', 'agg__obj__objektkategorie'].includes(field)) {
+ let dropdown = toDropdown(field, i);
+ } else {
+ let searchValueSelectId = 'edit-terms-' + i + '-value';
+ let SearchValueFieldselector = "[id^='" + searchValueSelectId + "']";
+ let $searchValueInputField = $(SearchValueFieldselector);
+ $searchValueInputField.show();
+ let $oldHelperField = $('#edit-terms-' + i + '-helper');
+ $oldHelperField.remove();
+ }
+ });
+ }
+ };
+
+})(jQuery, Drupal, drupalSettings);
diff --git a/js/advanced_search.entityFields.js b/js/advanced_search.entityFields.js
index 4500555..695a146 100644
--- a/js/advanced_search.entityFields.js
+++ b/js/advanced_search.entityFields.js
@@ -31,7 +31,7 @@
$newHelperField.append('');
$newHelperField.append('');
$newHelperField.append('');
- } else if ([ 'agg__all__objektkategorie', 'agg__arch__objektkategorie', 'agg__obj__objektkategorie'].includes(field)) { // Objektkategorie
+ } else if (['agg__all__objektkategorie', 'agg__arch__objektkategorie', 'agg__obj__objektkategorie'].includes(field)) { // Objektkategorie
$newHelperField.empty();
$newHelperField.append('');
$newHelperField.append('');
@@ -65,97 +65,11 @@
Drupal.behaviors.advanceSearchEntityFields = {
attach: function attach(context, settings) {
- let $searchSelectElement = $('[id^="edit-terms-0-search"]');
- let originalSearchSelectOptions = $searchSelectElement.find('option').clone();
- $searchSelectElement.empty();
- $searchSelectElement.append('');
- $searchSelectElement.append('');
- $searchSelectElement.append('');
- $searchSelectElement.append('');
- $searchSelectElement.append('');
- $searchSelectElement.append('');
- $searchSelectElement.append('');
- $searchSelectElement.append('');
- $searchSelectElement.append('');
- $searchSelectElement.append('');
- $searchSelectElement.append('');
- $searchSelectElement.append('');
- $searchSelectElement.append('');
- $searchSelectElement.append('');
- $searchSelectElement.append('');
- $searchSelectElement.append('');
- $searchSelectElement.append('');
- $(document).on('change', '.advanced-search-form--entity', function () {
- let id = $(this).attr('id');
- let i = id.substring(11, 12);
- let $select = $('#' + id);
- let searchSelectId = 'edit-terms-' + i + '-search';
- let selector = "[id^='" + searchSelectId + "']";
- let $searchSelect = $(selector);
- if ($select.val() === 'akteur') { // Akteur
- $searchSelect.empty();
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- }
- else if ($select.val() === 'b48556e79962e0a3c8d0041317c853b9') { // Archivalie
- $searchSelect.empty();
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- }
- else if ($select.val() === 'ba419826c9014f40126565bf413f7a59') { // Auktion
- $searchSelect.empty();
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- } else if ($select.val() === 'b65c3a85d16724d84a5eb0d2268629a6') { // Objekt
- $searchSelect.empty();
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- } else if ($select.val() === 'ueberall') {
- $searchSelect.empty();
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
- $searchSelect.append('');
-
- }
- });
-
$(document).on('change', '.advanced-search-form--select-field', function () {
let id = $(this).attr('id');
let i = id.substring(11, 12);
let field = $(this).val();
if (['agg__arch__transaktion', 'agg__all__transaktion', 'agg__all__objektkategorie', 'agg__arch__objektkategorie', 'agg__obj__objektkategorie'].includes(field)) {
- console.log(field);
let dropdown = toDropdown(field, i);
} else {
let searchValueSelectId = 'edit-terms-' + i + '-value';
@@ -166,7 +80,6 @@
$oldHelperField.remove();
}
});
-
}
};
diff --git a/js/advanced_search.form.js b/js/advanced_search.form.js
index 389f836..c0fc4f3 100644
--- a/js/advanced_search.form.js
+++ b/js/advanced_search.form.js
@@ -138,14 +138,6 @@
e.preventDefault();
e.stopPropagation();
let inputs = $form.serializeArray();
- //console.log(inputs);
- //inputs = inputs.filter(function(el) {
- // return !el.name.match(/terms\[\d+\]\[entity\]/);
- //});
-
- //inputs = originalInputs;
- //console.log(inputs);
-
const href = url(inputs, settings.advanced_search_form);
/* digitalutsc added*/
@@ -177,7 +169,9 @@
}
});
window.history.pushState(null, document.title, href);
+
});
+
}
// Reset should trigger refresh of AJAX Blocks / Views.
$form.find('input[data-drupal-selector = "edit-reset"]').mousedown(function (e) {
@@ -192,13 +186,15 @@
// Handle the page summary
$("#ajax-page-summary").hide();
$( document ).ajaxComplete(function( event, request, settings ) {
- $("#ajax-page-summary").hide();
+ //$("#ajax-page-summary").hide();
if (jQuery("#ajax-page-summary").length >0) {
$(".pager__summary").html($("#ajax-page-summary").html());
}
else {
$(".pager__summary").html("");
}
+ $('.boehler-js-disabled').removeClass('boehler-js-disabled');
+
});
}
}
diff --git a/js/facets/facets-views-ajax.js b/js/facets/facets-views-ajax.js
index 04fb0c0..033219b 100644
--- a/js/facets/facets-views-ajax.js
+++ b/js/facets/facets-views-ajax.js
@@ -28,7 +28,6 @@
temp = queries[i].split('=');
params[temp[0]] = temp[1];
}
-
return params;
};
@@ -54,15 +53,15 @@
});
}
- // Update items_per_page links in pager
- if (url.indexOf("items_per_page=") == -1) {
+ // Update items_per_page links in pager
+ if (url.indexOf("items_per_page=") == -1) {
// append items_per_page
$("a.pager__itemsperpage").each(function( index ) {
var newUrl = url + "&items_per_page=" + $(this).html();
$(this).attr("href", newUrl);
});
- }
- else {
+ }
+ else {
// replace existed items_per_page
var params = parseQueryString(url.split("?")[1]);
var newParams = [];
@@ -76,7 +75,7 @@
}
// check for items_per_page query
- if (!key.startsWith("items_per_page")) {
+ if (!key.startsWith("items_per_page")) {
newParams.push(key + "=" + params[key]);
}
}
@@ -88,15 +87,15 @@
- // Update display mode links in pager
- if (url.indexOf("display=") == -1) {
+ // Update display mode links in pager
+ if (url.indexOf("display=") == -1) {
// append items_per_page
$("a.pager__display").each(function( index ) {
var newUrl = url + "&display=" + $(this).find(".display-mode").html().toLowerCase();
$(this).attr("href", newUrl);
});
- }
- else {
+ }
+ else {
// replace existed display
var params = parseQueryString(url.split("?")[1]);
var newParams = [];
@@ -110,7 +109,7 @@
}
// check for display query
- if (!key.startsWith("display")) {
+ if (!key.startsWith("display")) {
newParams.push(key + "=" + params[key]);
}
}
@@ -123,7 +122,7 @@
}
-
+
// Replace filter, pager, summary, and facet blocks.
var blocks = {};
$(
@@ -191,6 +190,7 @@
var params = Drupal.Views.parseQueryString(href);
// Remove the page if set as submitting the form should always take
// the user to the first page (facets do the same).
+ console.log("params", params);
delete params.page;
// Include values from the form in the URL.
$.each(exposed_form.serializeArray(), function () {
diff --git a/src/AdvancedSearchQuery.php b/src/AdvancedSearchQuery.php
index d49a925..b8c6eb7 100644
--- a/src/AdvancedSearchQuery.php
+++ b/src/AdvancedSearchQuery.php
@@ -143,6 +143,7 @@ class AdvancedSearchQuery {
public function alterQuery(Request $request, SolariumQueryInterface &$solarium_query, DrupalQueryInterface $search_api_query) {
// Only apply if a Advanced Search Query was made.
$terms = $this->getTerms($request);
+
if (!empty($terms)) {
$index = $search_api_query->getIndex();
/** @var \Drupal\search_api_solr\Plugin\search_api\backend\SearchApiSolrBackend $backend */
@@ -163,11 +164,10 @@ class AdvancedSearchQuery {
if (!$isDismax) {
// To support negative queries we must first bring in all documents.
- $q[] = $this->negativeQuery($terms) ? "*:*" : "";
+ $q = $this->negativeQuery($terms) ? "*:*" : "";
}
- $q[] = '(';
$term = array_shift($terms);
- $q[] = $term->toSolrQuery($field_mapping);
+ $q = '(' . trim($term->toSolrQuery($field_mapping));
// New.
$fields_list[] = $term->toSolrFields($field_mapping);
@@ -180,8 +180,8 @@ class AdvancedSearchQuery {
// For multiple conditions.
foreach ($terms as $term) {
- $q[] = ')' . $term->getConjunction() . '(';
- $q[] = $term->toSolrQuery($field_mapping);
+ $q .= ')' . $term->getConjunction() . '(';
+ $q .= trim($term->toSolrQuery($field_mapping));
// New.
$fields_list[] = $term->toSolrFields($field_mapping);
@@ -194,9 +194,7 @@ class AdvancedSearchQuery {
}
- $q[] = ')';
- $q = implode(' ', $q);
-
+ $q .= ')';
// Limit extra processing if Luncene Search is enable.
if ($isDismax) {
@@ -293,11 +291,9 @@ class AdvancedSearchQuery {
// make this field non-empty.
//$search_api_query->keys("advanced search");
}
- dpm($q, "q");
$solarium_query->setQuery($q);
}
}
-
/**
* Alters the given view to be recursive if applicable.
*
diff --git a/src/AdvancedSearchQueryTerm.php b/src/AdvancedSearchQueryTerm.php
index e83c0d7..103f4f4 100644
--- a/src/AdvancedSearchQueryTerm.php
+++ b/src/AdvancedSearchQueryTerm.php
@@ -337,16 +337,16 @@ class AdvancedSearchQueryTerm {
// If field fulltext title is selected.
if (strpos($field, "fulltext_title") !== FALSE) {
$isTitleSearch = TRUE;
- if (strpos(trim($value), " AND ") !== FALSE) {
+ if (strpos(trim($value), "AND") !== FALSE) {
// Handle keyword with 'Orientation AND games'.
$keyword = str_replace('"', '', $value);
- $keys = explode(" AND ", $keyword);
+ $keys = explode("AND", $keyword);
$str = "(";
$i = 0;
foreach ($keys as $key) {
if ($i != count($keys) - 1) {
- $str .= $field . ':"' . $key . '" AND ';
+ $str .= $field . ':"' . $key . '"AND';
}
else {
$str .= $field . ':"' . $key . '")';
diff --git a/src/Form/AdvancedSearchForm.php b/src/Form/AdvancedSearchForm.php
index cf9e068..81d6ff8 100644
--- a/src/Form/AdvancedSearchForm.php
+++ b/src/Form/AdvancedSearchForm.php
@@ -45,6 +45,71 @@ class AdvancedSearchForm extends FormBase {
const AJAX_WRAPPER = 'advanced-search-ajax';
+ const ACTOR_OPTIONS = [
+ "agg__akt__anmerkung" => "Anmerkung",
+ "f20673c10d8d786816de3c4338d1c3ac" =>" Art der Institution",
+ "fb7ca3fb25fe824b40d6923e212ee7c4" => "Beruf/ Tätigkeit",
+ "agg__akt__name" => "Name"
+ ];
+
+ const PROPERTY_CARD_OPTIONS = [
+ 'agg__arch__akteur' => 'Akteur',
+ 'agg_arch__anmerkung' => 'Anmerkung',
+ 'agg__arch__auktionstitel' => 'Auktionstitel',
+ 'f807d62b374606e52e8833118375ecb0' => 'Karteikarten-ID',
+ 'agg__arch__kue_herst' => 'Künster:in/ Hersteller:in',
+ 'agg__arch__objektkategorie' => 'Objektkategorie',
+ 'agg__arch__ort_reg' => 'Ort/ Region',
+ ];
+ const AUCTION_OPTIONS = [
+ 'agg__aukt__akt' => 'Akteur',
+ 'f11ead3fa212224b6e82ce5622c1d99c' => 'Anmerkung',
+ 'ff8fb361d19f1fb4030605f87cb995ff' => 'Auktionshaus',
+ 'f4394d15487b58f49c719cf850f57e3a' => 'Auktionskatalog',
+ 'f6230cbdc56e0f04a90424b248680c76' => 'Titel der Auktion',
+ ];
+
+ const OBJECT_OPTIONS = [
+ 'agg__obj__anmerkung' => 'Anmerkung',
+ 'agg__obj__akt' => 'Akteur',
+ 'agg__obj__auktionshaus' => 'Auktionshaus',
+ 'agg__obj__auktionstitel' => 'Auktionstitel',
+ 'agg__obj__kue_herst' => 'Künstler:in/ Hersteller:in',
+ 'agg__obj__lotnummer' => 'Lotnummer',
+ 'fe03f1bcb9bf84f6fa8bf265090313c5' => 'Objekt-ID',
+ 'agg__obj__titel' => 'Objekttitel',
+ 'agg__obj__objektkategorie' => 'Objektkategorie',
+ 'agg__obj__ort_regi' => 'Ort/Region',
+ ];
+ const ALL_OPTIONS = [
+ 'all' => 'Keyword',
+ 'agg__all__akt' => 'Akteur',
+ 'agg__all__anmerkung' => 'Anmerkung',
+ 'f20673c10d8d786816de3c4338d1c3ac' => 'Art der Institution',
+ 'agg__all__auktionshaus' => 'Auktionshaus',
+ 'f4394d15487b58f49c719cf850f57e3a' => 'Auktionskatalog',
+ 'agg__all_auktionstitel' => 'Auktionstitel',
+ 'fb7ca3fb25fe824b40d6923e212ee7c4' => 'Beruf/ Tätigkeit',
+ 'fd4b844b736f2215421ead5b2fc0f5ef' => 'Fotonummer',
+ 'f807d62b374606e52e8833118375ecb0' => 'Karteikarten-ID',
+ 'agg__all__kue_herst' => 'Künstler:in/ Hersteller:in',
+ 'agg__obj__lotnummer' => 'Lotnummer',
+ 'fe03f1bcb9bf84f6fa8bf265090313c5' => 'Objekt-ID',
+ 'agg__all__objektkategorie' => 'Objektkategorie',
+ 'agg__all__objekttitel' => 'Objekttitel',
+ 'agg__all__ort_regi' => 'Ort/Region',
+ 'agg__all__transaktion' => 'Transaktion',
+ ];
+
+ // Define your options.
+ const ENTITY_OPTIONS = [
+ 'ueberall' => self::ALL_OPTIONS,
+ 'akteur' => self::ACTOR_OPTIONS,
+ 'b48556e79962e0a3c8d0041317c853b9' => self::PROPERTY_CARD_OPTIONS,
+ 'ba419826c9014f40126565bf413f7a59' => self::AUCTION_OPTIONS,
+ 'b65c3a85d16724d84a5eb0d2268629a6' => self::OBJECT_OPTIONS,
+ ];
+
/**
* The current request.
*
@@ -250,6 +315,30 @@ class AdvancedSearchForm extends FormBase {
return NULL;
}
+ protected function setSearchValue(&$term_value) {
+ switch ($term_value['entity']) {
+ case 'ueberall':
+ $term_value['search'] = 'all';
+ break;
+ case 'akteur':
+ $term_value['search'] = 'agg__akt__name';
+ break;
+ case 'b48556e79962e0a3c8d0041317c853b9':
+ $term_value['search'] = 'agg__arch__akteur';
+ break;
+ case 'ba419826c9014f40126565bf413f7a59':
+ $term_value['search'] = 'f6230cbdc56e0f04a90424b248680c76';
+ break;
+ case 'b65c3a85d16724d84a5eb0d2268629a6':
+ $term_value['search'] = 'agg__obj__titel';
+ break;
+ default:
+ $term_value['search'] = 'all';
+ }
+
+
+ }
+
/**
* {@inheritdoc}
*/
@@ -287,18 +376,21 @@ 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;
+ $this->setSearchValue($term_value);
$conjunction = $term_value[self::CONJUNCTION_FORM_FIELD] ?? $term_default_values[self::CONJUNCTION_FORM_FIELD];
$entity = $term_value[self::ENTITY_FORM_FIELD] ?? $term_default_values[self::ENTITY_FORM_FIELD];
+ $search_field_options = isset(self::ENTITY_OPTIONS[$entity]) ? self::ENTITY_OPTIONS[$entity] : self::ENTITY_OPTIONS['ueberall'];
$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"),
+ 'class' => [$block_class_prefix . '--conjunction'],
],
'#options' => [
self::AND_OP => $this->t('and'),
- self::OR_OP => $this->t('or'),
+ #self::OR_OP => $this->t('or'),
],
'#default_value' => $conjunction,
'#theme_wrappers' => [],
@@ -317,15 +409,23 @@ class AdvancedSearchForm extends FormBase {
'b65c3a85d16724d84a5eb0d2268629a6' => $this->t('Objekt'),
],
'#default_value' => $entity,
+ '#ajax' => [
+ 'callback' => [$this, 'ajaxCallback'],
+ 'wrapper' => self::AJAX_WRAPPER,
+ 'progress' => [
+ 'type' => 'throbber',
+ ],
+ ],
],
+
self::SEARCH_FORM_FIELD => [
'#type' => 'select',
'#attributes' => [
'aria-label' => $this->t("Select search field"),
'class' => [$block_class_prefix . '--select-field'],
],
- '#options' => $options,
- '#default_value' => $term_value[self::SEARCH_FORM_FIELD],
+ '#options' => $search_field_options,
+ '#default_value' => $term_value['search'],
'#theme_wrappers' => [],
],
self::INCLUDE_FORM_FIELD => [
@@ -334,8 +434,8 @@ class AdvancedSearchForm extends FormBase {
'aria-label' => $this->t("Select search operator"),
],
'#options' => [
- self::IS_OP => $this->t('is'),
- self::NOT_OP => $this->t('is not'),
+ self::IS_OP => $this->t('contains'),
+ #self::NOT_OP => $this->t('contains not'),
],
'#default_value' => $term_value[self::INCLUDE_FORM_FIELD],
// Show only when conjunction is 'AND' as 'OR NOT' is not supported
@@ -470,7 +570,32 @@ class AdvancedSearchForm extends FormBase {
* Callback for adding / removing terms from the search.
*/
public function ajaxCallback(array &$form, FormStateInterface $form_state) {
- return $form['ajax'];
+ // Get the triggering element.
+ $trigger = $form_state->getTriggeringElement();
+ // Determine the term index from the triggering element's name.
+ if (preg_match('/terms\[(\d+)\]\[entity\]/', $trigger['#name'], $matches)) {
+ $term_index = $matches[1];
+ // Reset the SEARCH_FORM_FIELD based on the new ENTITY_FORM_FIELD.
+ $options = $form['ajax']['terms'][$term_index][self::SEARCH_FORM_FIELD]['#options'];
+ $default_search_value = key($options);
+ $form_state->setValue(['ajax','terms', $term_index, self::SEARCH_FORM_FIELD], $default_search_value);
+ }
+
+ $form_state->clearErrors();
+
+ return $form['ajax'];
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function validateForm(array &$form, FormStateInterface $form_state) {
+ // Only validate if the search button is pressed.
+ $trigger = $form_state->getTriggeringElement();
+ if ($trigger['#value'] !== $this->t('Search')) {
+ $form_state->clearErrors();
+ return;
+ }
}
/**