diff options
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 |
commit | 29d066ec320727a28d887f32588fa1f2dcf36e08 (patch) | |
tree | aead69cdc27743add5535450c812c8ce9d440584 | |
parent | a6d77a3a3358463c591900872a8ae62286f9509d (diff) | |
download | Ishtar-29d066ec320727a28d887f32588fa1f2dcf36e08.tar.bz2 Ishtar-29d066ec320727a28d887f32588fa1f2dcf36e08.zip |
Manage search on json fields - HistorySelect for all concerned forms
-rw-r--r-- | archaeological_context_records/forms.py | 6 | ||||
-rw-r--r-- | archaeological_context_records/views.py | 4 | ||||
-rw-r--r-- | archaeological_files/forms.py | 6 | ||||
-rw-r--r-- | archaeological_files/views.py | 4 | ||||
-rw-r--r-- | archaeological_finds/forms.py | 4 | ||||
-rw-r--r-- | archaeological_finds/forms_treatments.py | 12 | ||||
-rw-r--r-- | archaeological_finds/views.py | 14 | ||||
-rw-r--r-- | archaeological_operations/forms.py | 10 | ||||
-rw-r--r-- | archaeological_operations/views.py | 8 | ||||
-rw-r--r-- | archaeological_warehouse/forms.py | 10 | ||||
-rw-r--r-- | archaeological_warehouse/views.py | 8 | ||||
-rw-r--r-- | ishtar_common/forms.py | 10 | ||||
-rw-r--r-- | ishtar_common/forms_common.py | 6 | ||||
-rw-r--r-- | ishtar_common/views.py | 3 | ||||
-rw-r--r-- | ishtar_common/views_item.py | 15 |
15 files changed, 88 insertions, 32 deletions
diff --git a/archaeological_context_records/forms.py b/archaeological_context_records/forms.py index 54ae74202..ae25e0abe 100644 --- a/archaeological_context_records/forms.py +++ b/archaeological_context_records/forms.py @@ -33,7 +33,7 @@ from archaeological_context_records import models from ishtar_common.forms import FinalForm, FormSet, \ reverse_lazy, get_form_selection, TableSelect, ManageOldType, CustomForm, \ - FieldType, CustomFormSearch, IshtarForm + FieldType, CustomFormSearch, IshtarForm, HistorySelect from ishtar_common.forms_common import get_town_field from archaeological_operations.forms import OperationSelect, ParcelField, \ RecordRelationsForm as OpeRecordRelationsForm, RecordRelationsFormSetBase @@ -58,11 +58,11 @@ class OperationFormSelection(CustomForm, forms.Form): validators=[valid_id(Operation)]) -class RecordSelect(CustomForm, TableSelect): +class RecordSelect(HistorySelect): _model = models.ContextRecord - form_admin_name = _(u"Context record - 001 - Search") form_slug = "contextrecord-001-search" + search_vector = forms.CharField( label=_(u"Full text search"), widget=widgets.SearchWidget( 'archaeological-context-records', 'contextrecord' diff --git a/archaeological_context_records/views.py b/archaeological_context_records/views.py index 6a01a48f0..ae07c4037 100644 --- a/archaeological_context_records/views.py +++ b/archaeological_context_records/views.py @@ -78,7 +78,9 @@ def autocomplete_contextrecord(request): get_contextrecord = get_item( models.ContextRecord, - 'get_contextrecord', 'contextrecord') + 'get_contextrecord', 'contextrecord', + search_form=forms.RecordSelect +) get_contextrecord_for_ope = get_item( models.ContextRecord, 'get_contextrecord', 'contextrecord', diff --git a/archaeological_files/forms.py b/archaeological_files/forms.py index b8f41b4c4..40404e6f8 100644 --- a/archaeological_files/forms.py +++ b/archaeological_files/forms.py @@ -37,7 +37,7 @@ from archaeological_operations.models import ActType, AdministrativeAct, \ import models from ishtar_common.forms import FinalForm, get_now, reverse_lazy, TableSelect, \ - ManageOldType, CustomForm, FieldType, IshtarForm + ManageOldType, CustomForm, FieldType, IshtarForm, HistorySelect from ishtar_common.forms_common import get_town_field from archaeological_operations.forms import AdministrativeActForm, \ AdministrativeActOpeFormSelection, SLICING, AdministrativeActModifForm, \ @@ -46,8 +46,10 @@ from ishtar_common import widgets from bootstrap_datepicker.widgets import DatePicker -class FileSelect(TableSelect): +class FileSelect(HistorySelect): _model = models.File + form_admin_name = _(u"File - 001 - Search") + form_slug = "file-001-search" search_vector = forms.CharField( label=_(u"Full text search"), widget=widgets.SearchWidget( diff --git a/archaeological_files/views.py b/archaeological_files/views.py index 9db2514af..c7a8830c8 100644 --- a/archaeological_files/views.py +++ b/archaeological_files/views.py @@ -75,7 +75,9 @@ def autocomplete_file(request): for file in files]) return HttpResponse(data, content_type='text/plain') -get_file = get_item(models.File, 'get_file', 'file') + +get_file = get_item(models.File, 'get_file', 'file', + search_form=FileSelect) revert_file = revert_item(models.File) diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py index 44d1f742d..221eb4f82 100644 --- a/archaeological_finds/forms.py +++ b/archaeological_finds/forms.py @@ -834,6 +834,8 @@ DatingFormSet.form_slug = "find-040-dating" class FindSelect(HistorySelect): _model = models.Find + form_admin_name = _(u"Find - 001 - Search") + form_slug = "find-001-search" FORM_FILTERS = [ (_(u"Find origin"), [ "base_finds__cache_short_id", @@ -876,8 +878,6 @@ class FindSelect(HistorySelect): ) ] - form_admin_name = _(u"Find - 001 - Search") - form_slug = "find-001-search" search_vector = forms.CharField( label=_(u"Full text search"), widget=widgets.SearchWidget( 'archaeological-finds', 'find' diff --git a/archaeological_finds/forms_treatments.py b/archaeological_finds/forms_treatments.py index 5471cea23..203eb0209 100644 --- a/archaeological_finds/forms_treatments.py +++ b/archaeological_finds/forms_treatments.py @@ -33,7 +33,7 @@ from archaeological_warehouse.models import Warehouse, Container from bootstrap_datepicker.widgets import DatePicker from ishtar_common import widgets from ishtar_common.forms import reverse_lazy, TableSelect, FinalForm, \ - ManageOldType, CustomForm, FieldType, IshtarForm + ManageOldType, CustomForm, FieldType, IshtarForm, HistorySelect from ishtar_common.models import Person, valid_id, Organization, \ get_current_profile @@ -42,8 +42,10 @@ logger = logging.getLogger(__name__) # Treatment -class TreatmentSelect(TableSelect): +class TreatmentSelect(HistorySelect): _model = models.Treatment + form_admin_name = _(u"Treatment - 001 - Search") + form_slug = "treatment-001-search" search_vector = forms.CharField( label=_(u"Full text search"), widget=widgets.SearchWidget( @@ -614,7 +616,11 @@ class AdministrativeActTreatmentModifForm( # treatment requests -class TreatmentFileSelect(TableSelect): +class TreatmentFileSelect(HistorySelect): + _model = models.TreatmentFile + form_admin_name = _(u"Treatment file - 001 - Search") + form_slug = "treatmentfile-001-search" + search_vector = forms.CharField( label=_(u"Full text search"), widget=widgets.SearchWidget( 'archaeological-finds', 'treatmentfile' diff --git a/archaeological_finds/views.py b/archaeological_finds/views.py index fb5cdc11e..d4faff71a 100644 --- a/archaeological_finds/views.py +++ b/archaeological_finds/views.py @@ -47,7 +47,8 @@ from ishtar_common.views_item import display_item, get_item, show_item, \ from archaeological_operations.wizards import AdministrativeActDeletionWizard from archaeological_finds import wizards -get_find = get_item(models.Find, 'get_find', 'find') +get_find = get_item(models.Find, 'get_find', 'find', + search_form=forms.FindSelect) get_find_for_ope = get_item(models.Find, 'get_find', 'find', own_table_cols=models.Find.TABLE_COLS_FOR_OPE) @@ -61,7 +62,10 @@ autocomplete_find = get_autocomplete_item(model=models.Find) show_treatment = show_item(models.Treatment, 'treatment') revert_treatment = revert_item(models.Treatment) -get_treatment = get_item(models.Treatment, 'get_treatment', 'treatment') +get_treatment = get_item( + models.Treatment, 'get_treatment', 'treatment', + search_form=forms.TreatmentSelect +) display_treatment = display_item(models.Treatment) autocomplete_treatment = get_autocomplete_item(model=models.Treatment) @@ -73,8 +77,10 @@ get_administrativeacttreatment = get_item( show_treatmentfile = show_item(models.TreatmentFile, 'treatmentfile') revert_treatmentfile = revert_item(models.TreatmentFile) -get_treatmentfile = get_item(models.TreatmentFile, 'get_treatmentfile', - 'treatmentfile') +get_treatmentfile = get_item( + models.TreatmentFile, 'get_treatmentfile', 'treatmentfile', + search_form=forms.TreatmentFileSelect +) get_administrativeacttreatmentfile = get_item( AdministrativeAct, 'get_administrativeacttreatmentfile', diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py index abb5de8a9..b093b383c 100644 --- a/archaeological_operations/forms.py +++ b/archaeological_operations/forms.py @@ -40,7 +40,7 @@ from bootstrap_datepicker.widgets import DateField from ishtar_common import widgets from ishtar_common.forms import FinalForm, FormSet, get_now, \ reverse_lazy, TableSelect, get_data_from_formset, \ - ManageOldType, IshtarForm, CustomForm, FieldType + ManageOldType, IshtarForm, CustomForm, FieldType, HistorySelect from ishtar_common.forms_common import TownFormSet, get_town_field, TownForm from ishtar_common.models import valid_id, Person, Town, \ DocumentTemplate, Organization, get_current_profile, \ @@ -471,8 +471,10 @@ RecordRelationsFormSet.form_admin_name = _(u"Operation - 080 - Relations") RecordRelationsFormSet.form_slug = "operation-080-relations" -class OperationSelect(TableSelect): +class OperationSelect(HistorySelect): _model = models.Operation + form_admin_name = _(u"Operation - 001 - Search") + form_slug = "operation-001-search" search_vector = forms.CharField( label=_(u"Full text search"), widget=widgets.SearchWidget( @@ -1238,8 +1240,10 @@ class OperationDeletionForm(FinalForm): ######### -class SiteSelect(TableSelect): +class SiteSelect(HistorySelect): _model = models.ArchaeologicalSite + form_admin_name = _(u"Archaeological site - 001 - Search") + form_slug = "archaeological_site-001-search" search_vector = forms.CharField( label=_(u"Full text search"), widget=widgets.SearchWidget( diff --git a/archaeological_operations/views.py b/archaeological_operations/views.py index 06b8b6ce9..5cf53fcbe 100644 --- a/archaeological_operations/views.py +++ b/archaeological_operations/views.py @@ -40,7 +40,7 @@ from archaeological_operations.forms import ArchaeologicalSiteForm, \ AdministrativeActOpeModifForm, FinalAdministrativeActDeleteForm, \ AdministrativeActRegisterFormSelection, DocumentGenerationAdminActForm, \ SiteForm, SiteTownFormset, SiteUnderwaterForm, check_underwater_module, \ - CourtOrderedSeizureForm + CourtOrderedSeizureForm, SiteSelect, OperationSelect from archaeological_operations.wizards import has_associated_file, \ is_preventive, is_judiciary, OperationWizard, OperationModificationWizard, \ OperationClosingWizard, OperationDeletionWizard, SiteSearch, \ @@ -155,7 +155,8 @@ def get_available_operation_code(request, year=None): return HttpResponse(data, content_type='text/plain') -get_operation = get_item(models.Operation, 'get_operation', 'operation') +get_operation = get_item(models.Operation, 'get_operation', 'operation', + search_form=OperationSelect) show_operation = show_item(models.Operation, 'operation') revert_operation = revert_item(models.Operation) @@ -348,7 +349,8 @@ def site_extra_context(request, item): return {'SITE_LABEL': IshtarSiteProfile.get_default_site_label()} -get_site = get_item(models.ArchaeologicalSite, 'get_site', 'site') +get_site = get_item(models.ArchaeologicalSite, 'get_site', 'site', + search_form=SiteSelect) show_site = show_item( models.ArchaeologicalSite, 'site', extra_dct=site_extra_context diff --git a/archaeological_warehouse/forms.py b/archaeological_warehouse/forms.py index 9175a78d6..0ac3ddeae 100644 --- a/archaeological_warehouse/forms.py +++ b/archaeological_warehouse/forms.py @@ -33,7 +33,7 @@ from ishtar_common import widgets from bootstrap_datepicker.widgets import DatePicker from ishtar_common.forms import name_validator, reverse_lazy, \ get_form_selection, TableSelect, ManageOldType, FinalForm, FormSet, \ - CustomForm, FieldType + CustomForm, FieldType, HistorySelect from ishtar_common.forms_common import get_image_help from archaeological_finds.forms import FindMultipleFormSelection, \ SelectFindBasketForm @@ -80,8 +80,10 @@ SelectedDivisionFormset.form_admin_name = _(u"Warehouse - 020 - Divisions") SelectedDivisionFormset.form_slug = "warehouse-020-divisions" -class WarehouseSelect(TableSelect): +class WarehouseSelect(HistorySelect): _model = models.Warehouse + form_admin_name = _(u"Warehouse - 001 - Search") + form_slug = "warehouse-001-search" search_vector = forms.CharField( label=_(u"Full text search"), widget=widgets.SearchWidget( @@ -246,8 +248,10 @@ class ContainerModifyForm(ContainerForm): return cleaned_data -class ContainerSelect(TableSelect): +class ContainerSelect(HistorySelect): _model = models.Container + form_admin_name = _(u"Container - 001 - Search") + form_slug = "container-001-search" search_vector = forms.CharField( label=_(u"Full text search"), widget=widgets.SearchWidget( diff --git a/archaeological_warehouse/views.py b/archaeological_warehouse/views.py index 83fd7f4e1..42faafca0 100644 --- a/archaeological_warehouse/views.py +++ b/archaeological_warehouse/views.py @@ -31,7 +31,7 @@ from archaeological_warehouse.forms import WarehouseForm, ContainerForm, \ ContainerFormSelection, BasePackagingForm, WarehouseFormSelection, \ SelectedDivisionFormset, WarehouseDeletionForm, \ MainContainerFormSelection, ContainerModifyForm, LocalisationForm, \ - ContainerDeletionForm + ContainerDeletionForm, ContainerSelect, WarehouseSelect from ishtar_common.forms import FinalForm from ishtar_common.views_item import get_item, show_item, new_item @@ -42,10 +42,12 @@ from archaeological_warehouse.wizards import PackagingWizard, WarehouseSearch, \ ContainerSearch, ContainerWizard, ContainerModificationWizard, \ ContainerDeletionWizard -get_container = get_item(models.Container, 'get_container', 'container') +get_container = get_item(models.Container, 'get_container', 'container', + search_form=ContainerSelect) show_container = show_item(models.Container, 'container') -get_warehouse = get_item(models.Warehouse, 'get_warehouse', 'warehouse') +get_warehouse = get_item(models.Warehouse, 'get_warehouse', 'warehouse', + search_form=WarehouseSelect) show_warehouse = show_item(models.Warehouse, 'warehouse') new_warehouse = new_item(models.Warehouse, WarehouseForm) 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 |