From 9c0ee6ee690f176dd6c944d263ec45678ebec49e Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Fri, 13 Sep 2019 14:13:46 +0200 Subject: Delete action: context records, files, finds, treatments, treatments files, admin acts --- archaeological_context_records/models.py | 1 + archaeological_context_records/urls.py | 2 + archaeological_context_records/views.py | 30 +++--- archaeological_files/models.py | 1 + archaeological_files/urls.py | 4 + archaeological_files/views.py | 45 +++++---- archaeological_finds/models_finds.py | 1 + archaeological_finds/models_treatments.py | 2 + archaeological_finds/urls.py | 17 +++- archaeological_finds/views.py | 136 ++++++++++++++++++++++------ archaeological_operations/models.py | 9 ++ ishtar_common/templatetags/window_header.py | 9 +- ishtar_common/views.py | 25 ++++- 13 files changed, 214 insertions(+), 68 deletions(-) diff --git a/archaeological_context_records/models.py b/archaeological_context_records/models.py index dc8409b39..dd76c355a 100644 --- a/archaeological_context_records/models.py +++ b/archaeological_context_records/models.py @@ -297,6 +297,7 @@ class ContextRecord(BulkUpdatedItem, DocumentItem, BaseHistorizedItem, APP = "archaeological-context-records" MODEL = "context-record" SHOW_URL = 'show-contextrecord' + DELETE_URL = 'delete-contextrecord' EXTERNAL_ID_KEY = 'context_record_external_id' EXTERNAL_ID_DEPENDENCIES = ['base_finds'] TABLE_COLS = ['label', 'operation__common_name', 'town__name', diff --git a/archaeological_context_records/urls.py b/archaeological_context_records/urls.py index ccab8cacb..ec37b4a25 100644 --- a/archaeological_context_records/urls.py +++ b/archaeological_context_records/urls.py @@ -42,6 +42,8 @@ urlpatterns = [ url(r'record_deletion/(?P.+)?$', check_rights(['change_contextrecord', 'change_own_contextrecord'])( views.record_deletion_wizard), name='record_deletion'), + url(r'record_delete/(?P.+)/$', + views.record_delete, name='delete-contextrecord'), url(r'autocomplete-contextrecord/$', views.autocomplete_contextrecord, name='autocomplete-contextrecord'), url(r'show-contextrecord(?:/(?P.+))?/(?P.+)?$', diff --git a/archaeological_context_records/views.py b/archaeological_context_records/views.py index 1aa691cff..20718b33f 100644 --- a/archaeological_context_records/views.py +++ b/archaeological_context_records/views.py @@ -35,7 +35,7 @@ from archaeological_context_records import forms from ishtar_common.utils import put_session_message from ishtar_common.views import IshtarMixin, LoginRequiredMixin, QAItemForm, \ - QABaseLockView + QABaseLockView, wizard_is_available from ishtar_common.views_item import display_item, get_item, show_item, \ revert_item from archaeological_context_records import wizards @@ -135,23 +135,10 @@ record_modification_wizard = wizards.RecordModifWizard.as_view( def record_modify(request, pk): - try: - record_modification_wizard(request) - except IndexError: # no step available - put_session_message( - request.session.session_key, - _(u"You don't have sufficient permissions to do this action."), - 'warning' - ) + if not wizard_is_available(record_modification_wizard, request, + models.ContextRecord, pk): return HttpResponseRedirect("/") - q = models.ContextRecord.objects.filter(pk=pk) - if not q.count(): - raise Http404() - cr = q.all()[0] - if cr.locked: - raise Http404() - wizards.RecordModifWizard.session_set_value( request, 'selec-record_modification', 'pk', pk, reset=True) return redirect(reverse('record_modification', @@ -164,6 +151,17 @@ record_deletion_wizard = wizards.RecordDeletionWizard.as_view([ url_name='record_deletion',) +def record_delete(request, pk): + if not wizard_is_available(record_deletion_wizard, request, + models.ContextRecord, pk): + return HttpResponseRedirect("/") + + wizards.RecordDeletionWizard.session_set_value( + request, 'selec-record_deletion', 'pk', pk, reset=True) + return redirect(reverse('record_deletion', + kwargs={'step': 'final-record_deletion'})) + + def reset_wizards(request): for wizard_class, url_name in ( (wizards.RecordWizard, 'record_creation'), diff --git a/archaeological_files/models.py b/archaeological_files/models.py index e089df24e..6d7fbe048 100644 --- a/archaeological_files/models.py +++ b/archaeological_files/models.py @@ -87,6 +87,7 @@ class File(ClosedItem, DocumentItem, BaseHistorizedItem, OwnPerms, ValueGetter, ShortMenuItem, DashboardFormItem): SLUG = 'file' SHOW_URL = 'show-file' + DELETE_URL = 'delete-file' TABLE_COLS = ['numeric_reference', 'year', 'internal_reference', 'file_type', 'saisine_type', 'towns_label', ] # statistics diff --git a/archaeological_files/urls.py b/archaeological_files/urls.py index 9823cf924..2b1e70b8c 100644 --- a/archaeological_files/urls.py +++ b/archaeological_files/urls.py @@ -46,6 +46,9 @@ urlpatterns = [ check_rights(['change_administrativeact'])( views.file_administrativeactfile_modification_wizard), name='file_administrativeactfile_modification'), + url(r'file_administrativeactfile_delete/(?P.+)/$', + views.file_administrativeact_delete, + name='delete-administrativeact-file'), url(r'file_search/(?P.+)?$', check_rights(['view_file', 'view_own_file'])( views.file_search_wizard), @@ -65,6 +68,7 @@ urlpatterns = [ check_rights(['delete_file', 'delete_own_file'])( views.file_deletion_wizard), name='file_deletion'), + url(r'^file_delete/(?P.+)/$', views.file_delete, name='delete-file'), url(r'autocomplete-file/$', views.autocomplete_file, name='autocomplete-file'), url(r'get-file/(?P.+)?$', views.get_file, diff --git a/archaeological_files/views.py b/archaeological_files/views.py index e7307e882..08f875d54 100644 --- a/archaeological_files/views.py +++ b/archaeological_files/views.py @@ -26,6 +26,7 @@ from django.http import HttpResponse, Http404, HttpResponseRedirect from django.shortcuts import redirect from django.utils.translation import ugettext_lazy as _ +from ishtar_common.views import wizard_is_available from ishtar_common.views_item import get_item, show_item, revert_item from archaeological_operations.wizards import AdministrativeActDeletionWizard, \ @@ -143,23 +144,10 @@ file_modification_wizard = FileModificationWizard.as_view( def file_modify(request, pk): - try: - file_modification_wizard(request) - except IndexError: # no step available - put_session_message( - request.session.session_key, - _(u"You don't have sufficient permissions to do this action."), - 'warning' - ) + if not wizard_is_available(file_modification_wizard, request, + models.File, pk): return HttpResponseRedirect("/") - q = models.File.objects.filter(pk=pk) - if not q.count(): - raise Http404() - item = q.all()[0] - if item.locked: - raise Http404() - FileModificationWizard.session_set_value( request, 'selec-file_modification', 'pk', pk, reset=True) return redirect(reverse('file_modification', @@ -177,6 +165,16 @@ file_deletion_wizard = FileDeletionWizard.as_view( label=_(u"File deletion"), url_name='file_deletion',) + +def file_delete(request, pk): + if not wizard_is_available(file_deletion_wizard, request, models.File, pk): + return HttpResponseRedirect("/") + + FileDeletionWizard.session_set_value( + request, 'selec-file_deletion', 'pk', pk, reset=True) + return redirect(reverse('file_deletion', + kwargs={'step': 'final-file_deletion'})) + file_administrativeactfile_search_wizard = \ SearchWizard.as_view([ ('selec-file_administrativeactfile_search', @@ -205,7 +203,9 @@ file_administrativeactfile_modification_wizard = \ def file_administrativeactfile_modify(request, pk): - file_administrativeactfile_modification_wizard(request) + if not wizard_is_available(file_administrativeactfile_modification_wizard, + request, AdministrativeAct, pk): + return HttpResponseRedirect("/") FileEditAdministrativeActWizard.session_set_value( request, 'selec-file_administrativeactfile_modification', 'pk', pk, reset=True) @@ -228,6 +228,19 @@ file_administrativeactfile_deletion_wizard = \ url_name='file_administrativeactfile_deletion',) +def file_administrativeact_delete(request, pk): + if not wizard_is_available(file_administrativeactfile_deletion_wizard, + request, AdministrativeAct, pk): + return HttpResponseRedirect("/") + + AdministrativeActDeletionWizard.session_set_value( + request, 'selec-file_administrativeactfile_deletion', 'pk', pk, + reset=True) + return redirect( + reverse('file_administrativeactfile_deletion', + kwargs={'step': 'final-file_administrativeactfile_deletion'})) + + def reset_wizards(request): for wizard_class, url_name in ( (FileWizard, 'file_creation'), diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py index 73d6e8f32..8d4c65f1a 100644 --- a/archaeological_finds/models_finds.py +++ b/archaeological_finds/models_finds.py @@ -767,6 +767,7 @@ class Find(BulkUpdatedItem, ValueGetter, DocumentItem, BaseHistorizedItem, APP = "archaeological-finds" MODEL = "find" SHOW_URL = 'show-find' + DELETE_URL = 'delete-find' EXTERNAL_ID_KEY = 'find_external_id' TABLE_COLS = ['external_id', 'label', 'base_finds__context_record__town__name', diff --git a/archaeological_finds/models_treatments.py b/archaeological_finds/models_treatments.py index 120dfe6f2..07eeef260 100644 --- a/archaeological_finds/models_treatments.py +++ b/archaeological_finds/models_treatments.py @@ -68,6 +68,7 @@ class Treatment(DashboardFormItem, ValueGetter, DocumentItem, BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem): SLUG = 'treatment' SHOW_URL = 'show-treatment' + DELETE_URL = 'delete-treatment' TABLE_COLS = ('year', 'index', 'treatment_types__label', 'treatment_state__label', 'label', 'person__cached_label', @@ -873,6 +874,7 @@ class TreatmentFile(DashboardFormItem, ClosedItem, DocumentItem, BaseHistorizedItem, OwnPerms, ValueGetter, ShortMenuItem): SLUG = 'treatmentfile' SHOW_URL = 'show-treatmentfile' + DELETE_URL = 'delete-treatmentfile' TABLE_COLS = ['type', 'year', 'index', 'internal_reference', 'name'] BASE_SEARCH_VECTORS = [ SearchVectorConfig("type__label"), diff --git a/archaeological_finds/urls.py b/archaeological_finds/urls.py index b36c25888..b3fb16d25 100644 --- a/archaeological_finds/urls.py +++ b/archaeological_finds/urls.py @@ -38,11 +38,13 @@ urlpatterns = [ url(r'find_modification/(?P.+)?$', check_rights(['change_find', 'change_own_find'])( views.find_modification_wizard), name='find_modification'), + url(r'find_modify/(?P.+)/$', + views.find_modify, name='find_modify'), url(r'find_deletion/(?P.+)?$', check_rights(['change_find', 'change_own_find'])( views.find_deletion_wizard), name='find_deletion'), - url(r'find_modify/(?P.+)/$', - views.find_modify, name='find_modify'), + url(r'find_delete/(?P.+)/$', + views.find_delete, name='delete-find'), url(r'^find-qa-duplicate/(?P[0-9-]+)?/$', check_rights(['change_find', 'change_own_find'])( views.QAFindDuplicateFormView.as_view()), @@ -168,6 +170,8 @@ urlpatterns = [ url(r'^treatment_deletion/(?P.+)?$', check_rights(['change_find', 'change_own_find'])( views.treatment_deletion_wizard), name='treatment_deletion'), + url(r'treatment_delete/(?P.+)/$', + views.treatment_delete, name='delete-treatment'), url(r'^treatment_admacttreatment_search/(?P.+)?$', check_rights(['change_administrativeact'])( @@ -191,6 +195,9 @@ urlpatterns = [ url(r'^get-administrativeacttreatment/(?P.+)?$', views.get_administrativeacttreatment, name='get-administrativeacttreatment'), + url(r'^/treatment_administrativeacttreatment_delete(?P.+)/$', + views.treatment_administrativeacttreatment_delete, + name='delete-administrativeact-treatment'), url(r'^treatmentfle_admacttreatmentfle_search/(?P.+)?$', check_rights(['change_administrativeact'])( @@ -211,6 +218,9 @@ urlpatterns = [ check_rights(['change_administrativeact'])( views.treatmentfile_admacttreatmentfile_deletion_wizard), name='treatmentfle_admacttreatmentfle_deletion'), + url(r'^treatmentfile_administrativeacttreatmentfile_delete/(?P.+)/$', + views.treatmentfile_administrativeacttreatmentfile_delete, + name='delete-administrativeact-treatmentfile'), url(r'^treatmentfle_search/(?P.+)?$', check_rights(['change_find', 'change_own_find'])( @@ -230,6 +240,9 @@ urlpatterns = [ check_rights(['change_find', 'change_own_find'])( views.treatmentfile_deletion_wizard), name='treatmentfile_deletion'), + url(r'^/treatmentfle_delete(?P.+)/$', + views.treatmentfile_delete, name='delete-treatmentfile'), + url(r'get-administrativeacttreatmentfile/(?P.+)?$', views.get_administrativeacttreatmentfile, name='get-administrativeacttreatmentfile'), diff --git a/archaeological_finds/views.py b/archaeological_finds/views.py index 1b49c8f13..537532511 100644 --- a/archaeological_finds/views.py +++ b/archaeological_finds/views.py @@ -47,7 +47,8 @@ from archaeological_operations.forms import FinalAdministrativeActDeleteForm from archaeological_finds import forms from ishtar_common.views import get_autocomplete_generic, IshtarMixin, \ - LoginRequiredMixin, QAItemEditForm, QAItemForm, QABaseLockView + LoginRequiredMixin, QAItemEditForm, QAItemForm, QABaseLockView, \ + wizard_is_available from ishtar_common.views_item import display_item, get_item, show_item, \ revert_item, get_autocomplete_item, get_autocomplete_queries @@ -216,7 +217,9 @@ basket_modify_wizard = wizards.FindBasketEditWizard.as_view( def find_basket_modify(request, pk): - basket_modify_wizard(request) + if not wizard_is_available(basket_modify_wizard, request, models.FindBasket, + pk): + return HttpResponseRedirect("/") key = 'selec-find_basket_modification' wizards.FindBasketEditWizard.session_set_value( request, key, 'pk', pk, reset=True) @@ -322,19 +325,18 @@ find_modification_wizard = wizards.FindModificationWizard.as_view( def find_modify(request, pk): + find = wizard_is_available(find_modification_wizard, request, + models.Find, pk) + if not find: + return HttpResponseRedirect("/") find_modification_wizard(request) key = 'selec-find_modification' if get_current_profile().warehouse: key = 'selecw-find_modification' wizards.FindModificationWizard.session_set_value( request, key, 'pk', pk, reset=True) - q = models.Find.objects.filter(pk=pk) - if not q.count(): - raise Http404() + step = 'find-find_modification' - find = q.all()[0] - if find.locked: - raise Http404() if find.base_finds.count() > 1: step = 'simplefind-find_modification' @@ -357,6 +359,23 @@ find_deletion_wizard = wizards.FindDeletionWizard.as_view( label=_(u"Find deletion"), url_name='find_deletion',) + +def find_delete(request, pk): + find = wizard_is_available(find_deletion_wizard, request, + models.Find, pk) + if not find: + return HttpResponseRedirect("/") + key = 'selec-find_deletion' + if get_current_profile().warehouse: + key = 'selecw-find_deletion' + wizards.FindDeletionWizard.session_set_value( + request, key, 'pk', pk, reset=True) + + step = 'final-find_deletion' + return redirect( + reverse('find_deletion', kwargs={'step': step})) + + autocomplete_objecttype = get_autocomplete_generic(models.ObjectType) autocomplete_materialtype = get_autocomplete_generic(models.MaterialType) autocomplete_treatmenttype = get_autocomplete_generic(models.TreatmentType) @@ -562,7 +581,9 @@ treatment_modification_wizard = wizards.TreatmentModificationWizard.as_view( def treatment_modify(request, pk): - treatment_modification_wizard(request) + if not wizard_is_available(treatment_modification_wizard, request, + models.Treatment, pk): + return HttpResponseRedirect("/") wizards.TreatmentModificationWizard.session_set_value( request, 'selec-treatment_modification', 'pk', pk, reset=True) return redirect(reverse( @@ -703,6 +724,18 @@ treatment_deletion_wizard = wizards.TreatmentDeletionWizard.as_view([ label=_(u"Treatment deletion"), url_name='treatment_deletion',) + +def treatment_delete(request, pk): + if not wizard_is_available(treatment_deletion_wizard, request, + models.Treatment, pk): + return HttpResponseRedirect("/") + wizards.TreatmentDeletionWizard.session_set_value( + request, 'selec-treatment_deletion', 'pk', pk, reset=True) + return redirect(reverse( + 'treatment_deletion', + kwargs={'step': 'final-treatment_deletion'})) + + treatment_administrativeact_search_wizard = \ wizards.SearchWizard.as_view([ ('selec-treatment_admacttreatment_search', @@ -729,18 +762,11 @@ treatment_administrativeact_modification_wizard = \ label=_(u"Treatment: administrative act modification"), url_name='treatment_admacttreatment_modification',) -treatment_admacttreatment_deletion_wizard = \ - AdministrativeActDeletionWizard.as_view([ - ('selec-treatment_admacttreatment_deletion', - forms.AdministrativeActTreatmentFormSelection), - ('final-treatment_admacttreatment_deletion', - FinalAdministrativeActDeleteForm)], - label=_(u"Treatment: administrative act deletion"), - url_name='treatment_admacttreatment_deletion',) - def treatment_administrativeacttreatment_modify(request, pk): - treatment_administrativeact_modification_wizard(request) + if not wizard_is_available(treatment_administrativeact_modification_wizard, + request, AdministrativeAct, pk): + return HttpResponseRedirect("/") wizards.TreatmentEditAdministrativeActWizard.session_set_value( request, 'selec-treatment_admacttreatment_modification', @@ -753,6 +779,26 @@ def treatment_administrativeacttreatment_modify(request, pk): 'administrativeact-treatment_admacttreatment_modification' })) +treatment_admacttreatment_deletion_wizard = \ + AdministrativeActDeletionWizard.as_view([ + ('selec-treatment_admacttreatment_deletion', + forms.AdministrativeActTreatmentFormSelection), + ('final-treatment_admacttreatment_deletion', + FinalAdministrativeActDeleteForm)], + label=_(u"Treatment: administrative act deletion"), + url_name='treatment_admacttreatment_deletion',) + + +def treatment_administrativeacttreatment_delete(request, pk): + if not wizard_is_available(treatment_admacttreatment_deletion_wizard, + request, AdministrativeAct, pk): + return HttpResponseRedirect("/") + wizard_url = "treatment_admacttreatment_deletion" + AdministrativeActDeletionWizard.session_set_value( + request, 'selec-' + wizard_url, 'pk', pk, reset=True) + return redirect( + reverse(wizard_url, kwargs={'step': 'final-' + wizard_url})) + def treatment_adminact_add(request, pk, current_right=None): try: @@ -797,7 +843,9 @@ treatmentfile_modification_wizard = \ def treatmentfile_modify(request, pk): - treatmentfile_modification_wizard(request) + if not wizard_is_available(treatmentfile_modification_wizard, request, + models.TreatmentFile, pk): + return HttpResponseRedirect("/") wizards.TreatmentFileModificationWizard.session_set_value( request, 'selec-treatmentfile_modification', 'pk', pk, reset=True) return redirect(reverse( @@ -822,6 +870,18 @@ treatmentfile_deletion_wizard = wizards.TreatmentFileDeletionWizard.as_view([ label=_(u"Treatment request deletion"), url_name='treatmentfile_deletion',) + +def treatmentfile_delete(request, pk): + if not wizard_is_available(treatmentfile_deletion_wizard, + request, models.TreatmentFile, pk): + return HttpResponseRedirect("/") + wizard_url = "treatmentfile_deletion" + wizards.TreatmentFileDeletionWizard.session_set_value( + request, 'selec-' + wizard_url, 'pk', pk, reset=True) + return redirect( + reverse(wizard_url, kwargs={'step': 'final-' + wizard_url})) + + treatmentfile_admacttreatmentfile_search_wizard = \ wizards.SearchWizard.as_view([ ('selec-treatmentfle_admacttreatmentfle_search', @@ -850,18 +910,12 @@ treatmentfile_admacttreatmentfile_modification_wizard = \ label=_(u"Treatment request: administrative act modification"), url_name='treatmentfle_admacttreatmentfle_modification',) -treatmentfile_admacttreatmentfile_deletion_wizard = \ - AdministrativeActDeletionWizard.as_view([ - ('selec-treatmentfle_admacttreatmentfle_deletion', - forms.AdministrativeActTreatmentFileFormSelection), - ('final-treatmentfle_admacttreatmentfle_deletion', - FinalAdministrativeActDeleteForm)], - label=_(u"Treatment request: administrative act deletion"), - url_name='treatmentfle_admacttreatmentfle_deletion',) - def treatmentfile_administrativeacttreatmentfile_modify(request, pk): - treatmentfile_admacttreatmentfile_modification_wizard(request) + if not wizard_is_available( + treatmentfile_admacttreatmentfile_modification_wizard, + request, AdministrativeAct, pk): + return HttpResponseRedirect("/") wizards.TreatmentFileEditAdministrativeActWizard.session_set_value( request, 'selec-treatmentfle_admacttreatmentfle_modification', @@ -889,6 +943,28 @@ def treatmentfile_adminact_add(request, pk, current_right=None): kwargs={'step': 'admact-treatmentfle_admacttreatmentfle'})) +treatmentfile_admacttreatmentfile_deletion_wizard = \ + AdministrativeActDeletionWizard.as_view([ + ('selec-treatmentfle_admacttreatmentfle_deletion', + forms.AdministrativeActTreatmentFileFormSelection), + ('final-treatmentfle_admacttreatmentfle_deletion', + FinalAdministrativeActDeleteForm)], + label=_(u"Treatment request: administrative act deletion"), + url_name='treatmentfle_admacttreatmentfle_deletion',) + + +def treatmentfile_administrativeacttreatmentfile_delete(request, pk): + if not wizard_is_available( + treatmentfile_admacttreatmentfile_deletion_wizard, request, + AdministrativeAct, pk): + return HttpResponseRedirect("/") + wizard_url = "treatmentfle_admacttreatmentfle_deletion" + AdministrativeActDeletionWizard.session_set_value( + request, 'selec-' + wizard_url, 'pk', pk, reset=True) + return redirect( + reverse(wizard_url, kwargs={'step': 'final-' + wizard_url})) + + def reset_wizards(request): for wizard_class, url_name in ( (wizards.FindWizard, 'find_creation'), diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py index a120e7db5..91162f05c 100644 --- a/archaeological_operations/models.py +++ b/archaeological_operations/models.py @@ -2050,6 +2050,15 @@ class AdministrativeAct(BaseHistorizedItem, OwnPerms, ValueGetter): "Can delete own Administrative act"), ) + @property + def DELETE_URL(self): + if self.associated_file: + return 'delete-administrativeact-file' + if self.treatment: + return 'delete-administrativeact-treatment' + if self.treatment_file: + return 'delete-administrativeact-treatmentfile' + def __str__(self): return settings.JOINT.join( [str(item) for item in [ diff --git a/ishtar_common/templatetags/window_header.py b/ishtar_common/templatetags/window_header.py index e215426e1..3c77ccf43 100644 --- a/ishtar_common/templatetags/window_header.py +++ b/ishtar_common/templatetags/window_header.py @@ -65,9 +65,16 @@ def window_file_nav(context, item, window_id, previous=None, nxt=None): histo_url = 'show-historized-file' revert_url = 'revert-file' add_operation = "" + modify_url_value, delete_url = None, None + can_edit = hasattr(item, 'can_do') and \ + item.can_do(context['request'], 'change_file') + if can_edit: + modify_url_value = modify_url + delete_url = getattr(item, "DELETE_URL", False) return { 'show_url': show_url, - 'modify_url': modify_url, + 'modify_url': modify_url_value, + 'delete_url': delete_url, 'histo_url': histo_url, 'revert_url': revert_url, 'item': item, diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 5a4abdc38..abd2b79d8 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -65,7 +65,7 @@ from ishtar_common.models import get_current_profile from ishtar_common.templatetags.link_to_window import simple_link_to_window from ishtar_common.utils import clean_session_cache, CSV_OPTIONS, \ get_field_labels_from_path, get_random_item_image_link, shortify, \ - dict_to_tuple + dict_to_tuple, put_session_message from ishtar_common.widgets import JQueryAutoComplete from .views_item import CURRENT_ITEM_KEYS, CURRENT_ITEM_KEYS_DICT, \ @@ -78,6 +78,25 @@ def status(request): return HttpResponse('OK') +def wizard_is_available(wizard, request, model, pk): + try: + wizard(request) + except IndexError: # no step available + put_session_message( + request.session.session_key, + _(u"You don't have sufficient permissions to do this action."), + 'warning' + ) + return + q = model.objects.filter(pk=pk) + if not q.count(): + raise Http404() + obj = q.all()[0] + if hasattr(obj, "locked") and obj.locked: + raise Http404() + return obj + + def tiny_redirect(request, url_id): db_id = models.TinyUrl.decode_id(url_id) link_db = get_object_or_404(models.TinyUrl, id=db_id) @@ -96,8 +115,8 @@ def index(request): profile = get_current_profile() if profile.slug == 'default': dct['warnings'].append(_( - u"The slug of your current profile is set to \"default\". Change it " - u"on the administration page (or ask your admin to do it).")) + "The slug of your current profile is set to \"default\". Change it " + "on the administration page (or ask your admin to do it).")) image = get_random_item_image_link(request) if hasattr(profile, 'homepage') and profile.homepage: dct['homepage'] = markdown(profile.homepage) -- cgit v1.2.3