summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2019-02-13 13:23:29 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2019-02-13 13:23:29 +0100
commitbf6fa71e7f161896cd114a2033d7688f98d49f8e (patch)
treeaead69cdc27743add5535450c812c8ce9d440584 /ishtar_common
parent5330e9b9622107a17a170cc2d3761dafbf15b8ae (diff)
downloadIshtar-bf6fa71e7f161896cd114a2033d7688f98d49f8e.tar.bz2
Ishtar-bf6fa71e7f161896cd114a2033d7688f98d49f8e.zip
Manage search on json fields - HistorySelect for all concerned forms
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/forms.py10
-rw-r--r--ishtar_common/forms_common.py6
-rw-r--r--ishtar_common/views.py3
-rw-r--r--ishtar_common/views_item.py15
4 files changed, 30 insertions, 4 deletions
diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py
index 754f63f74..d697ee89b 100644
--- a/ishtar_common/forms.py
+++ b/ishtar_common/forms.py
@@ -273,6 +273,11 @@ class CustomForm(BSForm):
@classmethod
def _get_json_fields(cls, custom_form):
+ """
+ Return json field list from database configuration
+ :param custom_form: form concerned
+ :return: ((order1, key1, field1), ...)
+ """
fields = []
for field in custom_form.json_fields.order_by('order').all():
key = "data__" + field.json_field.key
@@ -299,6 +304,11 @@ class CustomForm(BSForm):
@classmethod
def check_custom_form(cls, current_user):
+ """
+ Check form customization
+ :param current_user:
+ :return: available, excluded_fields, json_fields
+ """
if not current_user:
return True, [], []
base_q = {"form": cls.form_slug, 'available': True}
diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py
index fadda7593..eb15445a4 100644
--- a/ishtar_common/forms_common.py
+++ b/ishtar_common/forms_common.py
@@ -44,7 +44,7 @@ from ishtar_common.templatetags.link_to_window import simple_link_to_window
from forms import FinalForm, FormSet, reverse_lazy, name_validator, \
TableSelect, ManageOldType, CustomForm, FieldType, FormHeader, \
FormSetWithDeleteSwitches, IshtarForm, get_data_from_formset, \
- file_size_validator
+ file_size_validator, HistorySelect
from ishtar_common.utils import is_downloadable, clean_session_cache, \
max_size_help
@@ -1228,8 +1228,10 @@ class DocumentForm(forms.ModelForm, CustomForm, ManageOldType):
return item
-class DocumentSelect(TableSelect):
+class DocumentSelect(HistorySelect):
_model = models.Document
+ form_admin_name = _(u"Document - 001 - Search")
+ form_slug = "document-001-search"
search_vector = forms.CharField(
label=_(u"Full text search"), widget=widgets.SearchWidget(
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index 5050f2d0d..61bae69e2 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -1679,7 +1679,8 @@ class OrganizationPersonEdit(LoginRequiredMixin, UpdateView):
# documents
show_document = show_item(models.Document, 'document')
-get_document = get_item(models.Document, 'get_document', 'document')
+get_document = get_item(models.Document, 'get_document', 'document',
+ search_form=forms.DocumentSelect)
display_document = display_item(models.Document)
diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py
index 1a0824c3b..65f06d2f1 100644
--- a/ishtar_common/views_item.py
+++ b/ishtar_common/views_item.py
@@ -1000,7 +1000,7 @@ def get_item(model, func_name, default_name, extra_request_keys=None,
relative_session_names=None, specific_perms=None,
own_table_cols=None, relation_types_prefix=None,
do_not_deduplicate=False, model_for_perms=None,
- alt_query_own=None):
+ alt_query_own=None, search_form=None):
"""
Generic treatment of tables
@@ -1022,6 +1022,7 @@ def get_item(model, func_name, default_name, extra_request_keys=None,
instance for record_relations view).
:param model_for_perms: use another model to check permission
:param alt_query_own: name of alternate method to get query_own
+ :param search_form: associated search form to manage JSON query keys
:return:
"""
def func(request, data_type='json', full=False, force_own=False,
@@ -1140,6 +1141,18 @@ def get_item(model, func_name, default_name, extra_request_keys=None,
for field in associated_fields]))
request_keys.update(my_extra_request_keys)
+ # manage search on json fields and excluded fields
+ if search_form and request.user and getattr(
+ request.user, 'ishtaruser', None):
+ available, excluded_fields, json_fields = \
+ search_form.check_custom_form(request.user.ishtaruser)
+ # for now no manage on excluded_fields: should we prevent search on
+ # some fields regarding the user concerned?
+ if available:
+ for __, jkey, jfield in json_fields:
+ if jfield.alt_name not in request_keys:
+ request_keys[jfield.alt_name] = jkey + "__iexact"
+
if "query" in dct:
request_items = dct["query"]
request_items["submited"] = True