summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archaeological_context_records/models.py1
-rw-r--r--archaeological_context_records/urls.py2
-rw-r--r--archaeological_context_records/views.py30
-rw-r--r--archaeological_files/models.py1
-rw-r--r--archaeological_files/urls.py4
-rw-r--r--archaeological_files/views.py45
-rw-r--r--archaeological_finds/models_finds.py1
-rw-r--r--archaeological_finds/models_treatments.py2
-rw-r--r--archaeological_finds/urls.py17
-rw-r--r--archaeological_finds/views.py136
-rw-r--r--archaeological_operations/models.py9
-rw-r--r--ishtar_common/templatetags/window_header.py9
-rw-r--r--ishtar_common/views.py25
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<step>.+)?$',
check_rights(['change_contextrecord', 'change_own_contextrecord'])(
views.record_deletion_wizard), name='record_deletion'),
+ url(r'record_delete/(?P<pk>.+)/$',
+ views.record_delete, name='delete-contextrecord'),
url(r'autocomplete-contextrecord/$', views.autocomplete_contextrecord,
name='autocomplete-contextrecord'),
url(r'show-contextrecord(?:/(?P<pk>.+))?/(?P<type>.+)?$',
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<pk>.+)/$',
+ views.file_administrativeact_delete,
+ name='delete-administrativeact-file'),
url(r'file_search/(?P<step>.+)?$',
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<pk>.+)/$', views.file_delete, name='delete-file'),
url(r'autocomplete-file/$', views.autocomplete_file,
name='autocomplete-file'),
url(r'get-file/(?P<type>.+)?$', 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<step>.+)?$',
check_rights(['change_find', 'change_own_find'])(
views.find_modification_wizard), name='find_modification'),
+ url(r'find_modify/(?P<pk>.+)/$',
+ views.find_modify, name='find_modify'),
url(r'find_deletion/(?P<step>.+)?$',
check_rights(['change_find', 'change_own_find'])(
views.find_deletion_wizard), name='find_deletion'),
- url(r'find_modify/(?P<pk>.+)/$',
- views.find_modify, name='find_modify'),
+ url(r'find_delete/(?P<pk>.+)/$',
+ views.find_delete, name='delete-find'),
url(r'^find-qa-duplicate/(?P<pks>[0-9-]+)?/$',
check_rights(['change_find', 'change_own_find'])(
views.QAFindDuplicateFormView.as_view()),
@@ -168,6 +170,8 @@ urlpatterns = [
url(r'^treatment_deletion/(?P<step>.+)?$',
check_rights(['change_find', 'change_own_find'])(
views.treatment_deletion_wizard), name='treatment_deletion'),
+ url(r'treatment_delete/(?P<pk>.+)/$',
+ views.treatment_delete, name='delete-treatment'),
url(r'^treatment_admacttreatment_search/(?P<step>.+)?$',
check_rights(['change_administrativeact'])(
@@ -191,6 +195,9 @@ urlpatterns = [
url(r'^get-administrativeacttreatment/(?P<type>.+)?$',
views.get_administrativeacttreatment,
name='get-administrativeacttreatment'),
+ url(r'^/treatment_administrativeacttreatment_delete(?P<pk>.+)/$',
+ views.treatment_administrativeacttreatment_delete,
+ name='delete-administrativeact-treatment'),
url(r'^treatmentfle_admacttreatmentfle_search/(?P<step>.+)?$',
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<pk>.+)/$',
+ views.treatmentfile_administrativeacttreatmentfile_delete,
+ name='delete-administrativeact-treatmentfile'),
url(r'^treatmentfle_search/(?P<step>.+)?$',
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<pk>.+)/$',
+ views.treatmentfile_delete, name='delete-treatmentfile'),
+
url(r'get-administrativeacttreatmentfile/(?P<type>.+)?$',
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)