Projet

Général

Profil

0001-forms-let-user-recall-draft-on-first-page-32263.patch

Frédéric Péters, 16 avril 2019 08:13

Télécharger (4,65 ko)

Voir les différences:

Subject: [PATCH] forms: let user recall draft on first page (#32263)

 tests/test_form_pages.py                | 34 +++++++++++++++++++++++++
 wcs/forms/root.py                       |  4 +++
 wcs/templates/wcs/formdata_filling.html | 31 ++++++++++++++++++++++
 3 files changed, 69 insertions(+)
tests/test_form_pages.py
6115 6115
    params = resp.form.submit_fields()
6116 6116
    params = [(key, value if key != 'page_id' else 'eiuiu') for key, value in params]
6117 6117
    app.post('/foo/live', params=params)
6118

  
6119

  
6120
def test_form_recall_draft(pub):
6121
    user = create_user(pub)
6122

  
6123
    formdef = create_formdef()
6124
    formdef.data_class().wipe()
6125

  
6126
    app = login(get_app(pub), username='foo', password='foo')
6127
    resp = app.get('/test/')
6128
    assert not 'You already started to fill this form.' in resp.body
6129

  
6130
    draft = formdef.data_class()()
6131
    draft.user_id = user.id
6132
    draft.status = 'draft'
6133
    draft.data = {}
6134
    draft.store()
6135

  
6136
    app = login(get_app(pub), username='foo', password='foo')
6137
    resp = app.get('/test/')
6138
    assert 'You already started to fill this form.' in resp.body
6139
    assert 'href="%s"' % draft.id in resp.body
6140

  
6141
    draft2 = formdef.data_class()()
6142
    draft2.user_id = user.id
6143
    draft2.status = 'draft'
6144
    draft2.data = {}
6145
    draft2.store()
6146

  
6147
    app = login(get_app(pub), username='foo', password='foo')
6148
    resp = app.get('/test/')
6149
    assert 'You already started to fill this form.' in resp.body
6150
    assert 'href="%s"' % draft.id in resp.body
6151
    assert 'href="%s"' % draft2.id in resp.body
wcs/forms/root.py
50 50
from wcs.formdef import FormDef
51 51
from wcs.formdata import FormData
52 52
from wcs.forms.common import FormTemplateMixin
53
from wcs.variables import LazyFormDef
53 54
from wcs.roles import logged_users_role
54 55
from wcs.workflows import Workflow, WorkflowBackofficeFieldsFormDef
55 56

  
......
426 427
        context = {
427 428
            'view': self,
428 429
            'form': form,
430
            'formdef': LazyFormDef(self.formdef),
429 431
            'form_side': lambda: self.form_side(0, page, data=data, magictoken=magictoken),
430 432
            'steps': lambda: self.step(0, page),
431 433
        }
......
623 625
            self.feed_current_data(get_request().form.get('magictoken'))
624 626
        else:
625 627
            self.feed_current_data(None)
628
            if not self.edit_mode and get_request().get_method() == 'GET' and not get_request().form.has_key('mt'):
629
                self.initial_hit = True
626 630
            # first hit on first page, if tracking code are enabled and we
627 631
            # are not editing an existing formdata, generate a new tracking
628 632
            # code.
wcs/templates/wcs/formdata_filling.html
1 1
{% extends template_base %}
2
{% load i18n %}
2 3

  
3 4
{% block body %}
4 5
{{ form_side|default:"" }}
5 6
{{ publisher.get_request.session.display_message|safe }}
7

  
8
{% block drafts-recall %}
9
{% if view.initial_hit and user.is_authenticated and not request.quixote_request.is_in_backoffice %}
10
{% with formdef.objects.current_user.drafts as drafts %}
11
  {% with drafts|length as drafts_length %}
12
   {% if drafts_length > 0 %}
13
    <div class="drafts-recall">
14
     <p>
15
       {% blocktrans %}
16
       You already started to fill this form. You can continue it or submit a new
17
       one.
18
       {% endblocktrans %}
19
     </p>
20
     {% if drafts_length == 1 %}
21
       <p><a class="pk-button" href="{{drafts.0.internal_id}}">{% trans "Continue" %}</a></p>
22
     {% elif drafts_length > 1 %}
23
     <ul>
24
     {% for draft in drafts %}
25
     <li><a href="{{draft.internal_id}}">{% trans "continue with draft from " %} {{draft.receipt_date}}
26
                     {{draft.receipt_time}}</a>, {% blocktrans with page_no=draft.page_no|add:1 %}on page {{page_no}}{% endblocktrans %}</li>
27
     {% endfor %}
28
     </ul>
29
     {% endif %}
30
    </div>
31
   {% endif %}
32
  {% endwith %}
33
{% endwith %}
34
{% endif %}
35
{% endblock %}
36

  
6 37
{{ form.render|safe }}
7 38
{% endblock %}
8
-