diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-06-08 17:17:07 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-06-12 10:46:13 +0200 |
commit | ef4a039625f5f68f8e16ec5f1737f31da85fdaa5 (patch) | |
tree | afefa2719e43e47bea82889ed08219065c198be5 | |
parent | efe1f3b818898c33e0e2d6fb42e6267c509f691a (diff) | |
download | Ishtar-ef4a039625f5f68f8e16ec5f1737f31da85fdaa5.tar.bz2 Ishtar-ef4a039625f5f68f8e16ec5f1737f31da85fdaa5.zip |
Documents: edit form
-rw-r--r-- | ishtar_common/forms_common.py | 4 | ||||
-rw-r--r-- | ishtar_common/ishtar_menu.py | 9 | ||||
-rw-r--r-- | ishtar_common/templates/ishtar/blocks/window_image.html | 3 | ||||
-rw-r--r-- | ishtar_common/templates/ishtar/sheet_document.html | 3 | ||||
-rw-r--r-- | ishtar_common/urls.py | 20 | ||||
-rw-r--r-- | ishtar_common/views.py | 55 | ||||
-rw-r--r-- | ishtar_common/views_item.py | 2 |
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" %} <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 |