From 48333f62f025aa1c225701b2f6d47254a13ad855 Mon Sep 17 00:00:00 2001 From: cgfhtw Date: Thu, 14 Apr 2022 15:07:44 +0200 Subject: [PATCH] autocomplete redesign & template field placement --- .../education/Lehrveranstaltung_model.php | 7 +- include/lehrveranstaltung.class.php | 7 +- vilesci/lehre/lehrveranstaltung_details.php | 158 ++++++++---------- 3 files changed, 77 insertions(+), 95 deletions(-) diff --git a/application/models/education/Lehrveranstaltung_model.php b/application/models/education/Lehrveranstaltung_model.php index 5819af0e5..0390613f7 100644 --- a/application/models/education/Lehrveranstaltung_model.php +++ b/application/models/education/Lehrveranstaltung_model.php @@ -319,15 +319,16 @@ class Lehrveranstaltung_model extends DB_Model */ public function loadTemplates($filter) { + $filter = strtolower($filter); $qry = "SELECT - tbl_lehrveranstaltung.lehrveranstaltung_id as id, CONCAT(tbl_lehrveranstaltung.bezeichnung, ' [', tbl_lehrveranstaltung.kurzbz, ']') as label + tbl_lehrveranstaltung.lehrveranstaltung_id, tbl_lehrveranstaltung.bezeichnung, tbl_lehrveranstaltung.kurzbz FROM lehre.tbl_lehrveranstaltung WHERE tbl_lehrveranstaltung.lehrtyp_kurzbz = 'tpl' AND ( CAST(tbl_lehrveranstaltung.lehrveranstaltung_id AS TEXT) LIKE '%".$this->db_escape($filter)."%' OR - tbl_lehrveranstaltung.bezeichnung LIKE '%".$this->db_escape($filter). "%' OR - tbl_lehrveranstaltung.kurzbz LIKE '%".$this->db_escape($filter). "%' + LOWER(tbl_lehrveranstaltung.bezeichnung) LIKE '%".$this->db_escape($filter). "%' OR + LOWER(tbl_lehrveranstaltung.kurzbz) LIKE '%".$this->db_escape($filter). "%' ) "; return $this->execQuery($qry); diff --git a/include/lehrveranstaltung.class.php b/include/lehrveranstaltung.class.php index c9b83ae7b..342e08487 100644 --- a/include/lehrveranstaltung.class.php +++ b/include/lehrveranstaltung.class.php @@ -2716,15 +2716,16 @@ class lehrveranstaltung extends basis_db */ public function loadTemplates($filter) { + $filter = strtolower($filter); $qry = "SELECT - tbl_lehrveranstaltung.lehrveranstaltung_id as id, CONCAT(tbl_lehrveranstaltung.bezeichnung, ' [', tbl_lehrveranstaltung.kurzbz, ']') as label + tbl_lehrveranstaltung.lehrveranstaltung_id, tbl_lehrveranstaltung.bezeichnung, tbl_lehrveranstaltung.kurzbz FROM lehre.tbl_lehrveranstaltung WHERE tbl_lehrveranstaltung.lehrtyp_kurzbz = 'tpl' AND ( CAST(tbl_lehrveranstaltung.lehrveranstaltung_id AS TEXT) LIKE '%".$this->db_escape($filter)."%' OR - tbl_lehrveranstaltung.bezeichnung LIKE '%".$this->db_escape($filter). "%' OR - tbl_lehrveranstaltung.kurzbz LIKE '%".$this->db_escape($filter). "%' + LOWER(tbl_lehrveranstaltung.bezeichnung) LIKE '%".$this->db_escape($filter). "%' OR + LOWER(tbl_lehrveranstaltung.kurzbz) LIKE '%".$this->db_escape($filter). "%' ) "; $lehrveranstaltungen = []; diff --git a/vilesci/lehre/lehrveranstaltung_details.php b/vilesci/lehre/lehrveranstaltung_details.php index b45ae20da..2b3b6a04c 100644 --- a/vilesci/lehre/lehrveranstaltung_details.php +++ b/vilesci/lehre/lehrveranstaltung_details.php @@ -438,12 +438,11 @@ lehrauftrag?'checked':'').'> - - - - Template - + + + + @@ -676,101 +675,82 @@ $(this).ColorPickerSetColor(this.value); }); - $('input[name="lehrveranstaltung_template_id"]').each(function() { - var input = $(this), - selItem = null, - lastContent = [], - dname = ""; - function searchIdInLastContent(value) { - for (var i=0; i').attr({ - type: "text", - value: dname - }).blur(function(e) { - var self = $(this), - val = self.val(); - if (!val) { - dname = ""; - input.val(""); - return; - } - if (val == dname) return; - searchIdInLastContent(val); - $.ajax({ - dataType: "json", - url: "../../soap/fhcomplete.php", - data: { - typ: "json", - class: "lehrveranstaltung", - method: "loadTemplateByName", - parameter_0: val - } - }).then(data => { - if (!self.is(':focus') && val === self.val()) { - if (data.return && data.return.label && data.return.id) { - dname = data.return.label; - input.val(data.return.id); - } - self.val(dname); - } - }); - - }).blur().insertAfter(input.attr('type', 'hidden')).autocomplete({ - source: function(request, response) { - $.ajax({ - dataType: "json", - url: "../../soap/fhcomplete.php", - data: { - typ: "json", - class: "lehrveranstaltung", - method: "loadTemplates", - parameter_0: request.term - } - }).then(data => { - response(data.return); - }); - }, - response: function(e, ui) { - lastContent = ui.content; - }, - select: function(e, ui) { - lastContent = [ui.item]; - }, - close: function(e, ui) { - searchIdInLastContent($(this).val()); - } - }); - } - if (input.val()) { + $('input[name="lehrveranstaltung_template_id"]').autocomplete({ + minLength: 2, + source: function(request, response) { $.ajax({ dataType: "json", url: "../../soap/fhcomplete.php", data: { typ: "json", class: "lehrveranstaltung", - method: "load", - parameter_0: input.val() + method: "loadTemplates", + parameter_0: request.term } }).then(data => { - if (data.error == "false") { - var tpl = data.result[0]; - dname = tpl.bezeichnung + " [" + tpl.kurzbz + "]"; - initAutocomplete(); + for (var k in data.return) { + data.return[k].value = data.return[k].lehrveranstaltung_id; + data.return[k].name = data.return[k].bezeichnung + " [" + data.return[k].kurzbz + "]"; + data.return[k].label = data.return[k].name + " (" + data.return[k].lehrveranstaltung_id + ")"; + } + response(data.return); + }); + }, + close: function(e, ui) { + $(this).trigger('check.ac-template'); + }, + focus: function(e, ui) { + $(this).removeClass('input_ok input_error').val(ui.item.value).parent().parent().find('.text-template_name').text(ui.item.name); + return false; + }, + select: function(e, ui) { + $(this).addClass('input_ok').val(ui.item.value).parent().parent().find('.text-template_name').text(ui.item.name); + return false; + } + }).focus(function(e) { + $(this).removeClass('input_ok input_error'); + }).blur(function(e) { + $(this).trigger('check.ac-template'); + }).on('check.ac-template', function(e) { + var self = $(this), + val = self.val(); + if (!val) { + self.removeClass('input_ok input_error').parent().parent().find('.text-template_name').text(''); + } else { + $.ajax({ + dataType: "json", + url: "../../soap/fhcomplete.php", + data: { + typ: "json", + class: "lehrveranstaltung", + method: "loadTemplates", + parameter_0: val + }, + success: function(data) { + if (self.val() == val) { + var label = '', + state = '', + item = null; + + for (var k in data.return) { + if (data.return[k].lehrveranstaltung_id == val) { + item = data.return[k]; + break; + } + } + + if (item) { + state = 'input_ok'; + label = item.bezeichnung + " [" + item.kurzbz + "]"; + } else if (val) { + state = 'input_error'; + } + self.removeClass('input_ok input_error').addClass(state).parent().parent().find('.text-template_name').text(label); + } } }); - } else { - initAutocomplete(); } - }); + }).trigger('check.ac-template'); $('select[name="lehrtyp_kurzbz"]').change(function(e) { if ($(this).val() == 'tpl') {