new version with ajax
This commit is contained in:
parent
27c044f040
commit
a0b1c7785e
8 changed files with 415 additions and 128 deletions
68
conjuction_parantheses_correction.patch
Normal file
68
conjuction_parantheses_correction.patch
Normal 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.
|
||||
*
|
||||
189
js/advanced_search.entityFields copy.js
Normal file
189
js/advanced_search.entityFields copy.js
Normal 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);
|
||||
|
|
@ -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();
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,7 +28,6 @@
|
|||
temp = queries[i].split('=');
|
||||
params[temp[0]] = temp[1];
|
||||
}
|
||||
|
||||
return params;
|
||||
};
|
||||
|
||||
|
|
@ -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 () {
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -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,9 +570,34 @@ class AdvancedSearchForm extends FormBase {
|
|||
* Callback for adding / removing terms from the search.
|
||||
*/
|
||||
public function ajaxCallback(array &$form, FormStateInterface $form_state) {
|
||||
// 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;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue