diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2020-03-20 19:40:24 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2020-03-20 19:40:24 +0100 |
commit | e60666c795e1531fda90013a001ac6dbc58b5667 (patch) | |
tree | d5fc7bd1cb9d8dab4c967fcad6dccba5e6b3517a /ishtar_common/views_item.py | |
parent | 3674706764068d37ad0aca120a49e37c1ed291ec (diff) | |
download | Ishtar-e60666c795e1531fda90013a001ac6dbc58b5667.tar.bz2 Ishtar-e60666c795e1531fda90013a001ac6dbc58b5667.zip |
Refactoring and many fixes on file module
Diffstat (limited to 'ishtar_common/views_item.py')
-rw-r--r-- | ishtar_common/views_item.py | 65 |
1 files changed, 64 insertions, 1 deletions
diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py index 8cd903a00..aa9a39965 100644 --- a/ishtar_common/views_item.py +++ b/ishtar_common/views_item.py @@ -22,6 +22,7 @@ from django.core.urlresolvers import reverse, NoReverseMatch from django.db.models import Q, Count, Sum, ImageField, Func, \ ExpressionWrapper, FloatField, FileField from django.db.models.fields import FieldDoesNotExist +from django.forms.models import model_to_dict from django.http import HttpResponse from django.shortcuts import render from django.template import loader @@ -146,7 +147,7 @@ def new_qa_item(model, frm, many=False): template = "ishtar/forms/qa_new_item.html" model_name = model._meta.object_name if not check_permission(request, 'add_' + model_name.lower()): - not_permitted_msg = ugettext(u"Operation not permitted.") + not_permitted_msg = ugettext("Operation not permitted.") return HttpResponse(not_permitted_msg) slug = model.SLUG if model.SLUG == "site": @@ -177,6 +178,68 @@ def new_qa_item(model, frm, many=False): return func +def get_short_html_detail(model): + def func(request, pk): + model_name = model._meta.object_name + not_permitted_msg = ugettext("Operation not permitted.") + if not check_permission(request, 'view_' + model_name.lower(), + pk): + return HttpResponse(not_permitted_msg) + try: + item = model.objects.get(pk=pk) + except model.DoesNotExist: + return HttpResponse(not_permitted_msg) + html = item.get_short_html_detail() + return HttpResponse(html) + return func + + +def modify_qa_item(model, frm): + def func(request, parent_name="", pk=None): + template = "ishtar/forms/qa_new_item.html" + model_name = model._meta.object_name + not_permitted_msg = ugettext("Operation not permitted.") + if not check_permission(request, 'change_' + model_name.lower(), + pk): + return HttpResponse(not_permitted_msg) + slug = model.SLUG + if model.SLUG == "site": + slug = "archaeologicalsite" + try: + item = model.objects.get(pk=pk) + except model.DoesNotExist: + return HttpResponse(not_permitted_msg) + url_slug = "modify-" + slug + dct = {'page_name': str(_('Modify a %s' % model_name.lower())), + 'url': reverse(url_slug, args=[parent_name, pk]), + 'slug': slug, + "modify": True, + 'parent_name': parent_name} + if request.method == 'POST': + dct['form'] = frm(request.POST) + if dct['form'].is_valid(): + new_item = dct['form'].save(request.user, item) + lbl = str(new_item) + if not lbl and hasattr(new_item, "_generate_cached_label"): + lbl = new_item._generate_cached_label() + dct['new_item_label'] = lbl + dct['new_item_pk'] = new_item.pk + dct['parent_pk'] = parent_name + if dct['parent_pk'] and '_select_' in dct['parent_pk']: + parents = dct['parent_pk'].split('_') + dct['parent_pk'] = "_".join([parents[0]] + parents[2:]) + return render(request, template, dct) + else: + data = model_to_dict(item) + for k in list(data.keys()): + if data[k] and isinstance(data[k], list) and hasattr( + data[k][0], "pk"): + data[k] = [i.pk for i in data[k]] + dct['form'] = frm(initial=data) + return render(request, template, dct) + return func + + def display_item(model, extra_dct=None, show_url=None): def func(request, pk, **dct): if show_url: |