diff --git a/entries/templates/entries_base.html b/entries/templates/entries_base.html index 19bdd4f0809f134fa23fccb62be4a838c47770b4..3bcc6b76ba32b30906818afc92a4164c430082f2 100644 --- a/entries/templates/entries_base.html +++ b/entries/templates/entries_base.html @@ -39,13 +39,20 @@ <a href="#" class="dropdown-item font-weight-bold text-dark text-uppercase" id="filter-button" data-toggle="modal" data-target="#entry-filters"> {% trans "Hasła" %} </a> - <a href="#" class="dropdown-item font-weight-bold text-dark text-uppercase" id="filter-frames-button" data-toggle="modal" data-target="#frame-filters"> - {% trans "Ramy" %} - </a> <a href="#" class="dropdown-item font-weight-bold text-dark text-uppercase" id="filter-unified-frames-button" data-toggle="modal" data-target="#unified-frame-filters"> {% trans "Ramy zunifikowane" %} </a> - <a href="#" class="dropdown-item font-weight-bold text-dark text-uppercase" id="filter-schemata-button" data-toggle="modal" data-target="#schema-filters"> + </div> +</li> +<li class="nav-item dropdown"> + <a class="nav-link dropdown-toggle" href="#" id="nav-filters-local" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> + {% trans "Filtrowanie lokalne" %} + </a> + <div class="dropdown-menu" id="filters-local-visited-dropdown" aria-labelledby="nav-filters-local"> + <a href="#" class="dropdown-item font-weight-bold text-dark text-uppercase" id="filter-local-frames-button" data-toggle="modal" data-target="#frame-filters-local"> + {% trans "Ramy" %} + </a> + <a href="#" class="dropdown-item font-weight-bold text-dark text-uppercase" id="filter-local-schemata-button" data-toggle="modal" data-target="#schema-filters-local"> {% trans "Schematy" %} </a> </div> diff --git a/entries/views.py b/entries/views.py index 659cfe4a517c880e102dbd3216339855484041cc..a0c9f1cfc92d33896e3138f2914fd5aaec6f5e14 100644 --- a/entries/views.py +++ b/entries/views.py @@ -854,21 +854,11 @@ def get_entry(request): argument_forms = argument_forms[0] frame_forms += argument_forms2frame_forms(argument_forms) filter_frames = len(frame_forms) > 0 - - - local_schema_form = None - if apply_filters and 'schema_form' in request.session: - errors_dict = dict() - local_schema_form = collect_forms(request.session['schema_form'], errors_dict) - print(local_schema_form) - assert(not errors_dict) - - local_frame_form = None - if apply_filters and 'frame_form' in request.session: - errors_dict = dict() - local_frame_form = collect_forms(request.session['frame_form'], errors_dict) - assert(not errors_dict) - + + local_schema_filter_form = get_local_schema_filter_form(apply_filters, request) + + local_frame_filter_form = get_local_frame_filter_form(apply_filters, request) + subentries = [] all_schema_objects = [] for subentry in entry.subentries.all(): @@ -877,8 +867,8 @@ def get_entry(request): # filter out schemata by schema properties if filter_schemata: schema_objects = get_filtered_objects2(schema_forms, schema_objects) - if local_schema_form: - schema_objects = get_filtered_objects(local_schema_form, schema_objects) + if local_schema_filter_form: + schema_objects = get_filtered_objects(local_schema_filter_form, schema_objects) for schema in schema_objects: schemata.append(schema2dict(schema, subentry.negativity, request.LANGUAGE_CODE)) if schemata: @@ -890,8 +880,8 @@ def get_entry(request): frame_objects = get_filtered_objects2(frame_forms, frame_objects) if lexical_unit: frame_objects = frame_objects.filter(lexical_units=lexical_unit) - if local_frame_form: - frame_objects = get_filtered_objects(local_frame_form, frame_objects) + if local_frame_filter_form: + frame_objects = get_filtered_objects(local_frame_filter_form, frame_objects) frames = [frame2dict(frame, entry.lexical_units.all()) for frame in frame_objects] alternations, realisation_phrases, realisation_descriptions = get_alternations(all_schema_objects, frame_objects) examples = get_examples(entry) @@ -911,6 +901,25 @@ def get_entry(request): return JsonResponse({ 'subentries' : subentries, 'frames' : frames, 'alternations' : alternations, 'realisation_phrases' : realisation_phrases, 'realisation_descriptions' : realisation_descriptions, 'examples' : examples, 'unified_frame': unified_frame, 'last_visited' : request.session['last_visited'] }) return JsonResponse({}) + +def get_local_frame_filter_form(apply_filters, request): + local_frame_form = None + if apply_filters and 'frame_form' in request.session: + errors_dict = dict() + local_frame_form = collect_forms(request.session['frame_form'], errors_dict) + assert (not errors_dict) + return local_frame_form + + +def get_local_schema_filter_form(apply_filters, request): + local_schema_form = None + if apply_filters and 'schema_form' in request.session: + errors_dict = dict() + local_schema_form = collect_forms(request.session['schema_form'], errors_dict) + assert (not errors_dict) + return local_schema_form + + ''' @ajax_required def filter_schemata(request): diff --git a/frontend/src/components/unification/Unification/LexicalUnitEdit.vue b/frontend/src/components/unification/Unification/LexicalUnitEdit.vue index c8f7d2196b68aeabe7015b658c126b9008422e2f..9cee053faf99a0f6551ff337f47655fe57904dad 100644 --- a/frontend/src/components/unification/Unification/LexicalUnitEdit.vue +++ b/frontend/src/components/unification/Unification/LexicalUnitEdit.vue @@ -73,7 +73,7 @@ Object.assign(LexicalUnitEdit, { }, async loadFrame() { try { - const data = {'unified_frame_id': this.unifiedFrameId}; + const data = {'unified_frame_id': this.unifiedFrameId, 'no_filters' : false}; $.ajax({ type: 'post', url: '/' + lang + '/unifier/get_unified_frame/', @@ -423,11 +423,13 @@ Object.assign(LexicalUnitEdit, { for (let i in this.unified_frame.slowal_frame_mapping) { const slowal_frame_mapping = this.unified_frame.slowal_frame_mapping[i]; const slowalFrame = this.frames.find(frame => frame.id === slowal_frame_mapping.slowal_frame_id); - for (let j in slowal_frame_mapping.slowal_frame_argument_mapping) { - const slowal_frame_argument_mapping = slowal_frame_mapping.slowal_frame_argument_mapping[j]; - if (slowal_frame_argument_mapping.unified_frame_agrument_id == unified_frame_argument.id) { - const slowalFrameArgument = slowalFrame.arguments.find(arg => arg.argument_id === slowal_frame_argument_mapping.slowal_frame_agrument_id); - slowalFrameArgumentIds.push(slowalFrameArgument); + if(slowalFrame != null) { + for (let j in slowal_frame_mapping.slowal_frame_argument_mapping) { + const slowal_frame_argument_mapping = slowal_frame_mapping.slowal_frame_argument_mapping[j]; + if (slowal_frame_argument_mapping.unified_frame_agrument_id == unified_frame_argument.id) { + const slowalFrameArgument = slowalFrame.arguments.find(arg => arg.argument_id === slowal_frame_argument_mapping.slowal_frame_agrument_id); + slowalFrameArgumentIds.push(slowalFrameArgument); + } } } } @@ -854,26 +856,28 @@ Object.assign(LexicalUnitEdit, { for (let i in unified_frame.slowal_frame_mapping) { const slowal_frame_mapping = unified_frame.slowal_frame_mapping[i]; let slowal_frame = slowal_frames.find(o => o.id === slowal_frame_mapping.slowal_frame_id); - let new_slowal_frame_arguments = []; - for (let j in unified_frame.arguments) { - const unified_frame_argument = unified_frame.arguments[j]; - let unified_frame_argument_mapping = slowal_frame_mapping.slowal_frame_argument_mapping.find(o => o.unified_frame_agrument_id === unified_frame_argument.id); - let slowal_frame_argument = null; - if (unified_frame_argument_mapping == null) { - slowal_frame_argument = { - 'str': 'Empty', - 'id': slowal_frame.id + '-_' + (unified_frame_argument.id), - 'role': 'Empty', - 'role_type': 'Empty', - 'preferences': [], - 'proposed_roles': [], + if(slowal_frame != null) { + let new_slowal_frame_arguments = []; + for (let j in unified_frame.arguments) { + const unified_frame_argument = unified_frame.arguments[j]; + let unified_frame_argument_mapping = slowal_frame_mapping.slowal_frame_argument_mapping.find(o => o.unified_frame_agrument_id === unified_frame_argument.id); + let slowal_frame_argument = null; + if (unified_frame_argument_mapping == null) { + slowal_frame_argument = { + 'str': 'Empty', + 'id': slowal_frame.id + '-_' + (unified_frame_argument.id), + 'role': 'Empty', + 'role_type': 'Empty', + 'preferences': [], + 'proposed_roles': [], + } + } else { + slowal_frame_argument = slowal_frame.arguments.find(o => o.argument_id === unified_frame_argument_mapping.slowal_frame_agrument_id); } - } else { - slowal_frame_argument = slowal_frame.arguments.find(o => o.argument_id === unified_frame_argument_mapping.slowal_frame_agrument_id); + new_slowal_frame_arguments.push(slowal_frame_argument) } - new_slowal_frame_arguments.push(slowal_frame_argument) + slowal_frame.arguments = new_slowal_frame_arguments; } - slowal_frame.arguments = new_slowal_frame_arguments; } } }, diff --git a/frontend/src/components/unification/shared/utils.js b/frontend/src/components/unification/shared/utils.js index cee844c3ec334ff89259f0e05494cc5638353cf0..c6ca4bcb082686f9e9a635ea81dd1b4eb2886d22 100644 --- a/frontend/src/components/unification/shared/utils.js +++ b/frontend/src/components/unification/shared/utils.js @@ -3,20 +3,22 @@ function slowal_frames2selecional_preferencies(unified_frame, slowal_frames) { for (let i in unified_frame.slowal_frame_mapping) { const slowal_frame_mapping = unified_frame.slowal_frame_mapping[i]; let slowal_frame = slowal_frames.find(o => o.id === slowal_frame_mapping.slowal_frame_id); - for (let j in slowal_frame_mapping.slowal_frame_argument_mapping) { - const slowal_frame_argument_mapping = slowal_frame_mapping.slowal_frame_argument_mapping[j]; + if(slowal_frame != null) { + for (let j in slowal_frame_mapping.slowal_frame_argument_mapping) { + const slowal_frame_argument_mapping = slowal_frame_mapping.slowal_frame_argument_mapping[j]; - let slowal_frame_argument = slowal_frame.arguments.find(o => o.argument_id === slowal_frame_argument_mapping.slowal_frame_agrument_id); - let unified_frame_argument = unified_frame.arguments.find(o => o.id === slowal_frame_argument_mapping.unified_frame_agrument_id); + let slowal_frame_argument = slowal_frame.arguments.find(o => o.argument_id === slowal_frame_argument_mapping.slowal_frame_agrument_id); + let unified_frame_argument = unified_frame.arguments.find(o => o.id === slowal_frame_argument_mapping.unified_frame_agrument_id); - const unified_frame_argument_preferences = new Set(unified_frame_argument.preferences.map(preference => preference.str)); + const unified_frame_argument_preferences = new Set(unified_frame_argument.preferences.map(preference => preference.str)); - let preferenceEntry = unified_argument_2_selecional_preferencies[slowal_frame_argument_mapping.unified_frame_agrument_id]; - if (preferenceEntry == null) { - preferenceEntry = []; - unified_argument_2_selecional_preferencies[slowal_frame_argument_mapping.unified_frame_agrument_id] = preferenceEntry + let preferenceEntry = unified_argument_2_selecional_preferencies[slowal_frame_argument_mapping.unified_frame_agrument_id]; + if (preferenceEntry == null) { + preferenceEntry = []; + unified_argument_2_selecional_preferencies[slowal_frame_argument_mapping.unified_frame_agrument_id] = preferenceEntry + } + preferenceEntry.push.apply(preferenceEntry, slowal_frame_argument.preferences.filter(preference => !unified_frame_argument_preferences.has(preference.str))) } - preferenceEntry.push.apply(preferenceEntry, slowal_frame_argument.preferences.filter(preference => !unified_frame_argument_preferences.has(preference.str))) } } return unified_argument_2_selecional_preferencies; diff --git a/unifier/views.py b/unifier/views.py index 51a14be7faa2b8e776e65ccc525a432092a54fd8..1c842b1cc47fc1973b11df53be4366376708870d 100644 --- a/unifier/views.py +++ b/unifier/views.py @@ -1,5 +1,6 @@ import json import requests +import simplejson from django.contrib.auth.decorators import login_required from django.db import transaction from django.http import JsonResponse, HttpResponse @@ -9,7 +10,7 @@ from django.views.decorators.csrf import csrf_exempt from common.decorators import ajax_required, ajax from entries.polish_strings import EXAMPLE_SOURCE, EXAMPLE_OPINION from entries.views import get_scroller_params, get_alternations, get_prefs_list, schema2dict, frame2dict, collect_forms, \ - get_filtered_objects + get_filtered_objects, get_local_schema_filter_form, get_local_frame_filter_form from importer.unification.UnificationPreprocessXML import UnificationPreprocessHandler from meanings.models import LexicalUnit from semantics.choices import FrameStatus @@ -90,6 +91,17 @@ def get_unified_frames(request): else: unifiedFrames = UnifiedFrame.objects.all(); + # TODO: zapytać, czy mamy zaciągać powiązane ramy zunifikowane poprzez Enrty (slowal_frame -> lexical_units -> entries -> related_entries) + # linked_ids = set() + # if request.session['show_linked_entries']: + # entries_linked = Entry.objects.filter(pk__in=( + # Entry.objects + # .filter(subentries__schema_hooks__argument_connections__schema_connections__subentry__entry__in=entries) + # .exclude(id__in=entries) + # )).distinct() + # entries = entries | entries_linked + # linked_ids = set(entries_linked.values_list('id', flat=True)) + res = {} for unifiedFrame in unifiedFrames: @@ -193,10 +205,22 @@ def get_examples(frames): def get_unified_frame_json(unifiedFrame, request): - slowal_frames = [connection.slowal_frame for connection in unifiedFrame.unified_frame_2_slowal_frame.all()] + apply_filters = not simplejson.loads(request.POST['no_filters']) + local_schema_filter_form = get_local_schema_filter_form(apply_filters, request) + local_frame_filter_form = get_local_frame_filter_form(apply_filters, request) + + slowal_frames_db = Frame.objects.filter(id__in=unifiedFrame.unified_frame_2_slowal_frame.values("slowal_frame_id")).distinct() + + if local_frame_filter_form: + slowal_frames_db = get_filtered_objects(local_frame_filter_form, slowal_frames_db) + + slowal_frames = slowal_frames_db.all() all_schema_objects = Schema.objects.filter(schema_hooks__argument_connections__argument__frame__in=slowal_frames).distinct() + if local_schema_filter_form: + all_schema_objects = get_filtered_objects(local_schema_filter_form, all_schema_objects) + slowal_frames_dict = [] for slowal_frame in slowal_frames: dict = frame2dict(slowal_frame, slowal_frame.lexical_units.all())