Projet

Général

Profil

wcs-trackingcode-session.diff

Thomas Noël, 07 avril 2012 23:53

Télécharger (3,3 ko)

Voir les différences:


  

wcs/qommon/sessions.py
79 79
    saml_idp_cookie = None
80 80
    ident_idp_token = None
81 81
    tempfiles = None
82
    tracking_codes = None
82 83

  
83 84
    username = None # only set on password authentication
84 85

  
......
162 163
        }
163 164
        return token
164 165

  
166
    def add_tracking_code(self, code):
167
        if not self.tracking_codes:
168
            self.tracking_codes = [code]
169
        elif not code in self.tracking_codes:
170
            self.tracking_codes.append(code)
171

  
172
    def has_tracking_code(self, code):
173
        return code in (self.tracking_codes or [])
174

  
165 175
class QommonSessionManager(QuixoteSessionManager):
166 176
    def start_request(self):
167 177
        QuixoteSessionManager.start_request(self)
wcs/root.ptl
38 38
from categories import Category
39 39
from users import User
40 40
from formdef import FormDef
41
from formdata import FormData
41
from formdata import FormData, TrackingCode
42 42
from anonylink import AnonymityLink
43 43

  
44 44

  
......
168 168

  
169 169
class RootDirectory(Directory):
170 170
    _q_exports = ['admin', 'backoffice', 'forms', 'login', 'logout', 'liberty', 'token', 'saml',
171
            'ident', 'register', 'afterjobs', 'themes', 'myspace',
171
            'ident', 'register', 'afterjobs', 'themes', 'myspace', 'trackingcode',
172 172
            'pages']
173 173

  
174 174
    themes = template.ThemesDirectory()
175 175
    myspace = qommon.myspace.MyspaceDirectory()
176 176
    pages = qommon.pages.PagesDirectory()
177 177

  
178
    def trackingcode [html] (self):
179
        form = Form(enctype='multipart/form-data')
180
        form.add(StringWidget, 'trackingcode', title = _('Tracking Code'),
181
                required = True, size = 15)
182
        form.add_submit('submit', _('Submit'))
183
        form.add_submit('cancel', _('Cancel'))
184

  
185
        if form.get_widget('cancel').parse():
186
            return redirect('.')
187

  
188
        if not form.is_submitted() or form.has_errors():
189
            template.html_top(_('Tracking Code'))
190
            form.render()
191
        else:
192
            session = get_session()
193
            if not session: # should not happen
194
                return redirect(get_publisher().get_root_url())
195
            tc = form.get_widget('trackingcode').parse()
196
            try:
197
                if not TrackingCode.check_crc(tc):
198
                    raise KeyError
199
                tc = TrackingCode.get(tc)
200
                fdef = FormDef.get(tc.formdef_id)
201
                fdata = fdef.data_class().get(tc.formdata_id)
202
                if fdata.tracking_code != tc.id: # check if the formdata is the good one
203
                    raise KeyError
204
                session.add_tracking_code(tc.id)
205
                return redirect(fdata.get_url())
206
            except KeyError:
207
                form.set_error('trackingcode', _('This Tracking Code does not exist.'))
208
                template.html_top(_('Tracking Code'))
209
                form.render()
210

  
178 211
    def logout(self):
179 212
        get_logger().info('logout')
180 213
        session = get_session()