summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ishtar_common/forms_common.py4
-rw-r--r--ishtar_common/ishtar_menu.py9
-rw-r--r--ishtar_common/templates/ishtar/blocks/window_image.html3
-rw-r--r--ishtar_common/templates/ishtar/sheet_document.html3
-rw-r--r--ishtar_common/urls.py20
-rw-r--r--ishtar_common/views.py55
-rw-r--r--ishtar_common/views_item.py2
7 files changed, 66 insertions, 30 deletions
diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py
index 0cfc2a609..47e976452 100644
--- a/ishtar_common/forms_common.py
+++ b/ishtar_common/forms_common.py
@@ -1064,6 +1064,7 @@ class DocumentForm(forms.ModelForm, CustomForm, ManageOldType):
file_upload = True
associated_models = {'source_type': models.SourceType}
+ pk = forms.IntegerField(label="", required=False, widget=forms.HiddenInput)
title = forms.CharField(label=_(u"Title"), required=False,
validators=[validators.MaxLengthValidator(200)])
source_type = widgets.ModelChoiceField(
@@ -1155,8 +1156,7 @@ class DocumentForm(forms.ModelForm, CustomForm, ManageOldType):
item = super(DocumentForm, self).save(commit=commit)
for related_key in models.Document.RELATED_MODELS:
related = getattr(item, related_key)
- initial = dict([(item.pk, item)
- for item in related.all()])
+ initial = dict([(rel.pk, rel) for rel in related.all()])
new = [int(pk)
for pk in sorted(self.cleaned_data.get(related_key, []))]
for pk in initial.keys():
diff --git a/ishtar_common/ishtar_menu.py b/ishtar_common/ishtar_menu.py
index fbd65c103..bd068c449 100644
--- a/ishtar_common/ishtar_menu.py
+++ b/ishtar_common/ishtar_menu.py
@@ -125,16 +125,21 @@ MENU_SECTIONS = [
(250, SectionItem(
'document', _(u"Documentation / Images"),
childs=[
- MenuItem('document_search',
+ MenuItem('document/search',
_(u"Search"),
model=models.Document,
access_controls=['view_document',
'view_own_document']),
- MenuItem('document_creation',
+ MenuItem('document/create',
_(u"Creation"),
model=models.Document,
access_controls=['add_document',
'add_own_document']),
+ MenuItem('document/edit',
+ _(u"Modification"),
+ model=models.Document,
+ access_controls=['change_document',
+ 'change_own_document']),
])
)
]
diff --git a/ishtar_common/templates/ishtar/blocks/window_image.html b/ishtar_common/templates/ishtar/blocks/window_image.html
index 092d224fe..aa43e1ca5 100644
--- a/ishtar_common/templates/ishtar/blocks/window_image.html
+++ b/ishtar_common/templates/ishtar/blocks/window_image.html
@@ -76,6 +76,9 @@
</div>
</div>
{% endif %}
+ <a href="{% url 'edit-document' image.pk %}">
+ {% trans "Modify" %} &nbsp;<i class="fa fa-pencil"></i>
+ </a>
</div>
{% endfor %}
</div>
diff --git a/ishtar_common/templates/ishtar/sheet_document.html b/ishtar_common/templates/ishtar/sheet_document.html
index 4f067fe56..7405224e2 100644
--- a/ishtar_common/templates/ishtar/sheet_document.html
+++ b/ishtar_common/templates/ishtar/sheet_document.html
@@ -5,8 +5,7 @@
{% block content %}
{% block window_nav %}
-{# {% window_nav item window_id 'show-document' 'document_modify' %} #}
-{% window_nav item window_id 'show-document' %}
+{% window_nav item window_id 'show-document' 'edit-document' %}
{% endblock %}
diff --git a/ishtar_common/urls.py b/ishtar_common/urls.py
index 5ef316723..d030c4529 100644
--- a/ishtar_common/urls.py
+++ b/ishtar_common/urls.py
@@ -224,18 +224,22 @@ urlpatterns += [
url(r'show-shortcut-menu/$', views.show_shortcut_menu,
name='show-shortcut-menu'),
- url(r'document_search/(?P<step>.+)?$',
+ url(r'document/search/(?P<step>.+)?$',
check_rights(['view_document', 'view_own_document'])(
views.document_search_wizard),
- name='document_search'),
- url(r'document_creation/$',
+ name='search-document'),
+ url(r'document/create/$',
check_rights(['add_document', 'add_own_document'])(
- views.DocumentFormView.as_view()),
- name='document_creation'),
- url(r'document_modification/(?P<pk>.+)/$',
+ views.DocumentCreateView.as_view()),
+ name='create-document'),
+ url(r'document/edit/$',
check_rights(['change_document', 'change_own_document'])(
- views.DocumentFormView.as_view()),
- name='document_modification'),
+ views.DocumentSelectView.as_view()),
+ name='edit-document'),
+ url(r'document/edit/(?P<pk>.+)/$',
+ check_rights(['change_document', 'change_own_document'])(
+ views.DocumentEditView.as_view()),
+ name='edit-document'),
]
urlpatterns += get_urls_for_model(models.Document, views)
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index cfe98cff1..74aa589c1 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -37,7 +37,8 @@ from django.shortcuts import redirect, render
from django.utils.decorators import method_decorator
from django.utils.translation import ugettext, ugettext_lazy as _
from django.views.generic import ListView, UpdateView, TemplateView
-from django.views.generic.edit import CreateView, DeleteView, FormView
+from django.views.generic.edit import CreateView, DeleteView, FormView, \
+ UpdateView
from extra_views import ModelFormSetView
from markdown import markdown
@@ -59,8 +60,8 @@ from ishtar_common.utils import clean_session_cache, CSV_OPTIONS, \
get_field_labels_from_path, get_random_item_image_link, shortify
from ishtar_common.widgets import JQueryAutoComplete
-from views_item import CURRENT_ITEM_KEYS, display_item, get_item, new_item, \
- show_item
+from views_item import CURRENT_ITEM_KEYS, check_permission, display_item, \
+ get_item, new_item, show_item
logger = logging.getLogger(__name__)
@@ -1579,13 +1580,11 @@ display_document = display_item(models.Document)
document_search_wizard = wizards.SearchWizard.as_view(
[('selec-document_search', forms.DocumentFormSelection)],
label=_(u"Document: search"),
- url_name='document_search',
+ url_name='search-document',
)
-class DocumentFormView(IshtarMixin, LoginRequiredMixin,
- CreateView):
- page_name = _(u"New Document")
+class DocumentFormMixin(IshtarMixin, LoginRequiredMixin):
form_class = forms.DocumentForm
template_name = 'ishtar/forms/document.html'
model = models.Document
@@ -1594,21 +1593,47 @@ class DocumentFormView(IshtarMixin, LoginRequiredMixin,
return reverse('display-document', args=[self.object.pk])
-"""
-class DocumentSelectMixin(IshtarMixin, LoginRequiredMixin,
- FormView):
- form_class = forms.PersonMergeFormSelection
+class DocumentCreateView(DocumentFormMixin, CreateView):
+ page_name = _(u"Document creation")
+
+
+class DocumentSelectView(IshtarMixin, LoginRequiredMixin,
+ FormView):
+ form_class = forms.DocumentFormSelection
template_name = 'ishtar/form.html'
- redir_url = 'person_manual_merge_items'
+ redir_url = 'edit-document'
def form_valid(self, form):
- self.item = form.get_item()
- return super(ManualMergeMixin, self).form_valid(form)
+ self.pk = form.cleaned_data['pk']
+ return super(DocumentSelectView, self).form_valid(form)
def get_success_url(self):
- return reverse(self.redir_url, args=[self.item.pk])
+ return reverse(self.redir_url, args=[self.pk])
+class DocumentEditView(DocumentFormMixin, UpdateView):
+ page_name = _(u"Document modification")
+
+ def get_form_kwargs(self):
+ kwargs = super(DocumentEditView, self).get_form_kwargs()
+ try:
+ document = models.Document.objects.get(pk=self.kwargs.get('pk'))
+ assert check_permission(self.request, 'document/edit', document.pk)
+ except (AssertionError, models.Document.DoesNotExist):
+ raise Http404()
+ initial = {}
+ for k in self.form_class.base_fields.keys() + \
+ models.Document.RELATED_MODELS:
+ value = getattr(document, k)
+ if hasattr(value, 'all'):
+ value = ",".join([str(v.pk) for v in value.all()])
+ initial[k] = value
+
+ kwargs['initial'] = initial
+ return kwargs
+
+
+"""
class DocumentSelectView(DocumentSelectMixin, IshtarMixin, LoginRequiredMixin,
FormView):
page_name = _(u"Merge persons")
diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py
index 4be1ec144..2018f6f90 100644
--- a/ishtar_common/views_item.py
+++ b/ishtar_common/views_item.py
@@ -73,7 +73,7 @@ def get_autocomplete_item(model, extra=None):
def check_permission(request, action_slug, obj_id=None):
- MAIN_MENU = Menu(None)
+ MAIN_MENU = Menu(request.user)
MAIN_MENU.init()
if action_slug not in MAIN_MENU.items:
# TODO