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 | 
