new version with ajax

This commit is contained in:
rnsrk 2025-01-09 18:27:23 +01:00
parent 27c044f040
commit a0b1c7785e
8 changed files with 415 additions and 128 deletions

View file

@ -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.
*

View file

@ -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('<select aria-label="Enter a search term" data-drupal-selector="edit-terms-' + i + '-helper" id="edit-terms-' + i + '-helper" name="terms[' + i + '][helper]" value="" class="advanced-search--helper-dropdown form-text form-element form-element--type-text form-element--api-textfield"></select>');
let $newHelperField = $('#edit-terms-' + i + '-helper');
if (['agg__arch__transaktion', 'agg__all__transaktion'].includes(field)) { // Transaktion
$newHelperField.empty();
$newHelperField.append('<option value="">Bitte auswählen...</option>');
$newHelperField.append('<option value="Abschreibung">Abschreibung</option>');
$newHelperField.append('<option value="andere">Andere</option>');
$newHelperField.append('<option value="Anteil übertragen/übernommen">Anteil übertragen</option>');
$newHelperField.append('<option value="Auktion">Auktion</option>');
$newHelperField.append('<option value="Geschenk">Geschenk</option>');
$newHelperField.append('<option value="Inventar">Inventar</option>');
$newHelperField.append('<option value="Kauf">Abschreibung</option>');
$newHelperField.append('<option value="keine Angabe">keine Angabe</option>');
$newHelperField.append('<option value="Kommission">Kommission</option>');
$newHelperField.append('<option value="Lager">Lager</option>');
$newHelperField.append('<option value="Nutzen/Gewinnbeteiligung">Nutzen/Gewinnbeteiligung</option>');
$newHelperField.append('<option value="Rückgabe">Rückgabe</option>');
$newHelperField.append('<option value="Share">Geschäftsbeteiligung</option>');
$newHelperField.append('<option value="Tausch">Tausch</option>');
$newHelperField.append('<option value="Übernahme">Übernahme</option>');
$newHelperField.append('<option value="Verlust">Verlust</option>');
$newHelperField.append('<option value="Verkauf">Verkauf</option>');
$newHelperField.append('<option value="Verweis">Verweis auf weitere Karteikarte</option>');
$newHelperField.append('<option value="Weiterverwendung">Weiterverwendung</option>');
} else if (['agg__all__objektkategorie', 'agg__arch__objektkategorie', 'agg__obj__objektkategorie'].includes(field)) { // Objektkategorie
$newHelperField.empty();
$newHelperField.append('<option value="">Bitte auswählen...</option>');
$newHelperField.append('<option value="Malerei">Malerei</option>');
$newHelperField.append('<option value="Skulptur, Plastik, Relief">Skulptur, Plastik</option>');
$newHelperField.append('<option value="Arbeiten auf Papier">Graphik (Zeichnung / Aquarell / Arbeit auf</option>');
$newHelperField.append('<option value="Handschriften (Autographen / Bücher)">Manuskripte/ Bücher</option>');
$newHelperField.append('<option value="Waffen, Rüstungen, Militaria">Militaria / Rüstungen / Waffen</option>');
$newHelperField.append('<option value="Wappen / Wappenscheibe">Wappen / Wappenscheiben</option>');
$newHelperField.append('<option value="Musikinstrumente">Musikinstrumente</option>');
$newHelperField.append('<option value="Möbel und Einrichtung">Möbel / Einrichtung</option>');
$newHelperField.append('<option value="Textilien (auch Tapisserien)">Textilien</option>');
$newHelperField.append('<option value="Schmuck">Schmuck</option>');
$newHelperField.append('<option value="Leuchter">Leuchter</option>');
$newHelperField.append('<option value="Uhren">Uhren</option>');
$newHelperField.append('<option value="Silber- und Goldschmiedekunst">Silber- und Goldschmiedekunst</option>');
$newHelperField.append('<option value="Rahmen">Rahmen</option>');
$newHelperField.append('<option value="Kunsthandwerk / Keramik">Kunsthandwerk Keramik</option>');
$newHelperField.append('<option value="Kunsthandwerk / Glas">Kunsthandwerk Glas</option>');
$newHelperField.append('<option value="Kunsthandwerk / Holz">Kunsthandwerk Holz</option>');
$newHelperField.append('<option value="Kunsthandwerk / Metall">Kunsthandwerk / Metall</option>');
$newHelperField.append('<option value="Kunsthandwerk / Sonstiges"> Kunsthandwerk Sonstiges</option>');
$newHelperField.append('<option value="Münzen und Medaillen">Münzen / Medaillen</option>');
$newHelperField.append('<option value="Asiatika">Asiatika</option>');
$newHelperField.append('<option value="Varia">Varia</option>');
}
$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('<option value="all" selected="selected">Keyword</option>');
$searchSelectElement.append('<option value="agg__all__akt">Akteur</option>');
$searchSelectElement.append('<option value="agg__all__anmerkung">Anmerkung</option>');
$searchSelectElement.append('<option value="f20673c10d8d786816de3c4338d1c3ac">Art der Institution</option>');
$searchSelectElement.append('<option value="agg__all__auktionshaus">Auktionshaus</option>');
$searchSelectElement.append('<option value="f4394d15487b58f49c719cf850f57e3a">Auktionskatalog</option>');
$searchSelectElement.append('<option value="agg__all_auktionstitel">Auktionstitel</option>');
$searchSelectElement.append('<option value="fb7ca3fb25fe824b40d6923e212ee7c4">Beruf/ Tätigkeit</option>');
$searchSelectElement.append('<option value="fd4b844b736f2215421ead5b2fc0f5ef">Fotonummer</option>');
$searchSelectElement.append('<option value="f807d62b374606e52e8833118375ecb0">Karteikarten-ID</option>');
$searchSelectElement.append('<option value="agg__all__kue_herst">Künstler:in/ Hersteller:in</option>');
$searchSelectElement.append('<option value="agg__obj__lotnummer">Lotnummer</option>');
$searchSelectElement.append('<option value="fe03f1bcb9bf84f6fa8bf265090313c5">Objekt-ID</option>');
$searchSelectElement.append('<option value="agg__all__objektkategorie">Objektkategorie</option>');
$searchSelectElement.append('<option value="agg__all__objekttitel">Objekttitel</option>');
$searchSelectElement.append('<option value="agg__all__ort_regi">Ort/Region</option>');
$searchSelectElement.append('<option value="agg__all__transaktion">Transaktion</option>');
$(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('<option value="agg__akt__anmerkung">Anmerkung</option>');
$searchSelect.append('<option value="f20673c10d8d786816de3c4338d1c3ac">Art der Institution</option>');
$searchSelect.append('<option value="fb7ca3fb25fe824b40d6923e212ee7c4">Beruf/ Tätigkeit</option>');
$searchSelect.append('<option value="agg__akt__name">Name</option>');
}
else if ($select.val() === 'b48556e79962e0a3c8d0041317c853b9') { // Archivalie
$searchSelect.empty();
$searchSelect.append('<option value="agg__arch__akteur">Akteur</option>');
$searchSelect.append('<option value="agg_arch__anmerkung">Anmerkung</option>');
$searchSelect.append('<option value="agg__arch__auktionstitel">Auktionstitel</option>');
$searchSelect.append('<option value="f807d62b374606e52e8833118375ecb0">Karteikarten-ID</option>');
$searchSelect.append('<option value="agg__arch__kue_herst">Künster:in/ Hersteller:in</option>');
$searchSelect.append('<option value="agg__arch__objektkategorie">Objektkategorie</option>');
$searchSelect.append('<option value="agg__arch__ort_reg">Ort/ Region</option>');
}
else if ($select.val() === 'ba419826c9014f40126565bf413f7a59') { // Auktion
$searchSelect.empty();
$searchSelect.append('<option value="agg__arch__akteur">Akteur</option>');
$searchSelect.append('<option value="f11ead3fa212224b6e82ce5622c1d99c">Anmerkung</option>');
$searchSelect.append('<option value="ff8fb361d19f1fb4030605f87cb995ff">Auktionshaus</option>');
$searchSelect.append('<option value="f4394d15487b58f49c719cf850f57e3a">Auktionskatalog</option>');
$searchSelect.append('<option value="f6230cbdc56e0f04a90424b248680c76">Titel der Auktion</option>');
} else if ($select.val() === 'b65c3a85d16724d84a5eb0d2268629a6') { // Objekt
$searchSelect.empty();
$searchSelect.append('<option value="fe12ded9c22ca130eae59a41ea380f3d">Anmerkung</option>');
$searchSelect.append('<option value="agg__obj__akt">Akteur</option>');
$searchSelect.append('<option value="agg__obj__auktionshaus">Auktionshaus</option>');
$searchSelect.append('<option value="agg__obj__auktionstitel">Auktionstitel</option>');
$searchSelect.append('<option value="agg__obj__kue_herst">Künstler:in/ Hersteller:in</option>');
$searchSelect.append('<option value="agg__obj__lotnummer">Lotnummer</option>');
$searchSelect.append('<option value="fe03f1bcb9bf84f6fa8bf265090313c5">Objekt-ID</option>');
$searchSelect.append('<option value="agg__obj__titel">Objekttitel</option>');
$searchSelect.append('<option value="agg__obj__objektkategorie">Objektkategorie</option>');
$searchSelect.append('<option value="agg__obj__ort_regi">Ort/Region</option>');
} else if ($select.val() === 'ueberall') {
$searchSelect.empty();
$searchSelect.append('<option value="all" selected="selected">Keyword</option>');
$searchSelect.append('<option value="agg__all__akt">Akteur</option>');
$searchSelect.append('<option value="agg__all__anmerkung">Anmerkung</option>');
$searchSelect.append('<option value="f20673c10d8d786816de3c4338d1c3ac">Art der Institution</option>');
$searchSelect.append('<option value="agg__all__auktionshaus">Auktionshaus</option>');
$searchSelect.append('<option value="f4394d15487b58f49c719cf850f57e3a">Auktionskatalog</option>');
$searchSelect.append('<option value="agg__all_auktionstitel">Auktionstitel</option>');
$searchSelect.append('<option value="fb7ca3fb25fe824b40d6923e212ee7c4">Beruf/ Tätigkeit</option>');
$searchSelect.append('<option value="fd4b844b736f2215421ead5b2fc0f5ef">Fotonummer</option>');
$searchSelect.append('<option value="f807d62b374606e52e8833118375ecb0">Karteikarten-ID</option>');
$searchSelect.append('<option value="agg__all__kue_herst">Künstler:in/ Hersteller:in</option>');
$searchSelect.append('<option value="agg__obj__lotnummer">Lotnummer</option>');
$searchSelect.append('<option value="fe03f1bcb9bf84f6fa8bf265090313c5">Objekt-ID</option>');
$searchSelect.append('<option value="agg__all__objektkategorie">Objektkategorie</option>');
$searchSelect.append('<option value="agg__all__objekttitel">Objekttitel</option>');
$searchSelect.append('<option value="agg__all__ort_regi">Ort/Region</option>');
$searchSelect.append('<option value="agg__all__transaktion">Transaktion</option>');
}
});
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);

View file

@ -31,7 +31,7 @@
$newHelperField.append('<option value="Verkauf">Verkauf</option>');
$newHelperField.append('<option value="Verweis">Verweis auf weitere Karteikarte</option>');
$newHelperField.append('<option value="Weiterverwendung">Weiterverwendung</option>');
} 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('<option value="">Bitte auswählen...</option>');
$newHelperField.append('<option value="Malerei">Malerei</option>');
@ -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('<option value="all" selected="selected">Keyword</option>');
$searchSelectElement.append('<option value="agg__all__akt">Akteur</option>');
$searchSelectElement.append('<option value="agg__all__anmerkung">Anmerkung</option>');
$searchSelectElement.append('<option value="f20673c10d8d786816de3c4338d1c3ac">Art der Institution</option>');
$searchSelectElement.append('<option value="agg__all__auktionshaus">Auktionshaus</option>');
$searchSelectElement.append('<option value="f4394d15487b58f49c719cf850f57e3a">Auktionskatalog</option>');
$searchSelectElement.append('<option value="agg__all_auktionstitel">Auktionstitel</option>');
$searchSelectElement.append('<option value="fb7ca3fb25fe824b40d6923e212ee7c4">Beruf/ Tätigkeit</option>');
$searchSelectElement.append('<option value="fd4b844b736f2215421ead5b2fc0f5ef">Fotonummer</option>');
$searchSelectElement.append('<option value="f807d62b374606e52e8833118375ecb0">Karteikarten-ID</option>');
$searchSelectElement.append('<option value="agg__all__kue_herst">Künstler:in/ Hersteller:in</option>');
$searchSelectElement.append('<option value="agg__obj__lotnummer">Lotnummer</option>');
$searchSelectElement.append('<option value="fe03f1bcb9bf84f6fa8bf265090313c5">Objekt-ID</option>');
$searchSelectElement.append('<option value="agg__all__objektkategorie">Objektkategorie</option>');
$searchSelectElement.append('<option value="agg__all__objekttitel">Objekttitel</option>');
$searchSelectElement.append('<option value="agg__all__ort_regi">Ort/Region</option>');
$searchSelectElement.append('<option value="agg__all__transaktion">Transaktion</option>');
$(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('<option value="agg__akt__anmerkung">Anmerkung</option>');
$searchSelect.append('<option value="f20673c10d8d786816de3c4338d1c3ac">Art der Institution</option>');
$searchSelect.append('<option value="fb7ca3fb25fe824b40d6923e212ee7c4">Beruf/ Tätigkeit</option>');
$searchSelect.append('<option value="agg__akt__name">Name</option>');
}
else if ($select.val() === 'b48556e79962e0a3c8d0041317c853b9') { // Archivalie
$searchSelect.empty();
$searchSelect.append('<option value="agg__arch__akteur">Akteur</option>');
$searchSelect.append('<option value="agg_arch__anmerkung">Anmerkung</option>');
$searchSelect.append('<option value="agg__arch__auktionstitel">Auktionstitel</option>');
$searchSelect.append('<option value="agg__arch__kue_herst">Künster:in/ Hersteller:in</option>');
$searchSelect.append('<option value="agg__arch__objektkategorie">Objektkategorie</option>');
$searchSelect.append('<option value="agg__arch__ort_reg">Ort/ Region</option>');
}
else if ($select.val() === 'ba419826c9014f40126565bf413f7a59') { // Auktion
$searchSelect.empty();
$searchSelect.append('<option value="agg__arch__akteur">Akteur</option>');
$searchSelect.append('<option value="f11ead3fa212224b6e82ce5622c1d99c">Anmerkung</option>');
$searchSelect.append('<option value="ff8fb361d19f1fb4030605f87cb995ff">Auktionshaus</option>');
$searchSelect.append('<option value="f4394d15487b58f49c719cf850f57e3a">Auktionskatalog</option>');
$searchSelect.append('<option value="f6230cbdc56e0f04a90424b248680c76">Titel der Auktion</option>');
} else if ($select.val() === 'b65c3a85d16724d84a5eb0d2268629a6') { // Objekt
$searchSelect.empty();
$searchSelect.append('<option value="fe12ded9c22ca130eae59a41ea380f3d">Anmerkung</option>');
$searchSelect.append('<option value="agg__obj__akt">Akteur</option>');
$searchSelect.append('<option value="agg__obj__auktionshaus">Auktionshaus</option>');
$searchSelect.append('<option value="agg__obj__auktionstitel">Auktionstitel</option>');
$searchSelect.append('<option value="agg__obj__kue_herst">Künstler:in/ Hersteller:in</option>');
$searchSelect.append('<option value="agg__obj__lotnummer">Lotnummer</option>');
$searchSelect.append('<option value="fe03f1bcb9bf84f6fa8bf265090313c5">Objekt-ID</option>');
$searchSelect.append('<option value="agg__obj__titel">Objekttitel</option>');
$searchSelect.append('<option value="agg__obj__objektkategorie">Objektkategorie</option>');
$searchSelect.append('<option value="agg__obj__ort_regi">Ort/Region</option>');
} else if ($select.val() === 'ueberall') {
$searchSelect.empty();
$searchSelect.append('<option value="all" selected="selected">Keyword</option>');
$searchSelect.append('<option value="agg__all__akt">Akteur</option>');
$searchSelect.append('<option value="agg__all__anmerkung">Anmerkung</option>');
$searchSelect.append('<option value="f20673c10d8d786816de3c4338d1c3ac">Art der Institution</option>');
$searchSelect.append('<option value="agg__all__auktionshaus">Auktionshaus</option>');
$searchSelect.append('<option value="f4394d15487b58f49c719cf850f57e3a">Auktionskatalog</option>');
$searchSelect.append('<option value="agg__all_auktionstitel">Auktionstitel</option>');
$searchSelect.append('<option value="fb7ca3fb25fe824b40d6923e212ee7c4">Beruf/ Tätigkeit</option>');
$searchSelect.append('<option value="fd4b844b736f2215421ead5b2fc0f5ef">Fotonummer</option>');
$searchSelect.append('<option value="f807d62b374606e52e8833118375ecb0">Karteikarten-ID</option>');
$searchSelect.append('<option value="agg__all__kue_herst">Künstler:in/ Hersteller:in</option>');
$searchSelect.append('<option value="agg__obj__lotnummer">Lotnummer</option>');
$searchSelect.append('<option value="fe03f1bcb9bf84f6fa8bf265090313c5">Objekt-ID</option>');
$searchSelect.append('<option value="agg__all__objektkategorie">Objektkategorie</option>');
$searchSelect.append('<option value="agg__all__objekttitel">Objekttitel</option>');
$searchSelect.append('<option value="agg__all__ort_regi">Ort/Region</option>');
$searchSelect.append('<option value="agg__all__transaktion">Transaktion</option>');
}
});
$(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();
}
});
}
};

View file

@ -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');
});
}
}

View file

@ -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 () {

View file

@ -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.
*

View file

@ -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 . '")';

View file

@ -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;
}
}
/**