Projet

Général

Profil

0001-always-redirect-to-status-page-3031.patch

Frédéric Péters, 03 janvier 2014 16:03

Télécharger (5,27 ko)

Voir les différences:

Subject: [PATCH] always redirect to status page (#3031)

 wcs/formdef.py      |  6 ++++++
 wcs/forms/common.py |  6 +++++-
 wcs/forms/root.py   |  6 +++++-
 wcs/sessions.py     | 14 +++++++++++++-
 wcs/workflows.py    |  5 ++---
 5 files changed, 31 insertions(+), 6 deletions(-)
wcs/formdef.py
622 622
        if self.acl_read == 'all':
623 623
            return True
624 624
        if not user:
625
            if self.acl_read == 'owner' and formdata and get_session() and \
626
                    get_session().is_anonymous_submitter(formdata):
627
                return True
625 628
            return False
626 629
        if user.is_admin:
627 630
            return True
......
676 679
            user_roles = set(user.roles)
677 680
        else:
678 681
            user_roles = set([])
682

  
683
        if not self.workflow_roles:
684
            self.workflow_roles = {}
679 685
        form_roles = [x for x in self.workflow_roles.keys() if x]
680 686
        if user and self.private_status_and_history and not user_roles.intersection(form_roles):
681 687
            return False
wcs/forms/common.py
110 110
                    mine = True
111 111
            elif self.filled.is_submitter(user):
112 112
                mine = True
113
        else:
114
            if get_session() and get_session().is_anonymous_submitter(self.filled):
115
                mine = True
113 116

  
114 117
        self.check_receiver()
115 118
        return mine
......
262 265
    def check_receiver(self):
263 266
        session = get_session()
264 267
        if not session or not session.user:
265
            raise errors.AccessUnauthorizedError()
268
            if not self.filled.formdef.is_user_allowed_read(None, self.filled):
269
                raise errors.AccessUnauthorizedError()
266 270
        user = get_request().user
267 271
        if self.filled.formdef is None:
268 272
            raise errors.AccessForbiddenError()
wcs/forms/root.py
605 605
            if [x for x in user_forms if not x.is_draft()]:
606 606
                return redirect('%s/' % user_forms[0].id)
607 607
        filled.store()
608

  
609
        if not filled.user_id:
610
            get_session().mark_anonymous_formdata(filled)
611

  
608 612
        if not filled.user_id and existing_formdata is None:
609 613
            a = AnonymityLink()
610 614
            a.formdata_type = 'form'
......
619 623
            url = filled.perform_workflow()
620 624
            if url:
621 625
                return redirect(url)
622
        return self.receipt_page(filled)
626
        return redirect(filled.get_url())
623 627

  
624 628
    def submitted_existing(self, form, editing):
625 629
        old_data = editing.data
wcs/sessions.py
23 23

  
24 24
    anonymous_key = None
25 25
    magictokens = None
26
    anonymous_formdata_keys = None
26 27

  
27 28
    def has_info(self):
28
        return self.anonymous_key or self.magictokens or Session.has_info(self)
29
        return self.anonymous_formdata_keys or self.anonymous_key or self.magictokens or Session.has_info(self)
29 30
    is_dirty = has_info
30 31

  
31 32
    def get_anonymous_key(self, generate = False):
......
45 46
            return default
46 47
        return self.magictokens.get(token, default)
47 48

  
49
    def mark_anonymous_formdata(self, formdata):
50
        if not self.anonymous_formdata_keys:
51
            self.anonymous_formdata_keys = {}
52
        self.anonymous_formdata_keys['%s-%s' % (formdata.formdef.id, formdata.id)] = True
53

  
54
    def is_anonymous_submitter(self, formdata):
55
        if not self.anonymous_formdata_keys:
56
            return False
57
        formdata_key = '%s-%s' % (formdata.formdef.id, formdata.id)
58
        return formdata_key in self.anonymous_formdata_keys
59

  
48 60
qommon.sessions.BasicSession = BasicSession
49 61
StorageSessionManager = qommon.sessions.StorageSessionManager
wcs/workflows.py
1268 1268
    backoffice = False
1269 1269

  
1270 1270
    def perform(self, formdata):
1271
        if not get_request().user:
1272
            return None
1273 1271
        return formdata.get_url(self.backoffice)
1274 1272

  
1275 1273
    def add_parameters_widgets(self, form, parameters, prefix='', formdef=None):
......
1281 1279
    def get_parameters(self):
1282 1280
        return ('backoffice',)
1283 1281

  
1284
register_item_class(RedirectToStatusWorkflowStatusItem)
1282
# RedirectToStatusWorkflowStatusItem is not registered as the class kept for
1283
# backward compatibility only and should not be exposed to the user. (#3031)
1285 1284

  
1286 1285

  
1287 1286
class EditableWorkflowStatusItem(WorkflowStatusItem):
1288
-