16 |
16 |
|
17 |
17 |
import time
|
18 |
18 |
import urllib
|
|
19 |
import random
|
|
20 |
import binascii
|
19 |
21 |
|
20 |
22 |
from quixote import get_request, get_publisher
|
21 |
23 |
|
... | ... | |
47 |
49 |
return new_data
|
48 |
50 |
|
49 |
51 |
|
|
52 |
TRACKING_CODE_SIZE = 7
|
|
53 |
|
|
54 |
class TrackingCode(StorableObject):
|
|
55 |
_names = 'tracking_code'
|
|
56 |
|
|
57 |
def __init__(self, formdef_id, formdata_id):
|
|
58 |
StorableObject.__init__(self, self.get_new_id())
|
|
59 |
self.formdef_id = formdef_id
|
|
60 |
self.formdata_id = formdata_id
|
|
61 |
|
|
62 |
def get_new_id(cls):
|
|
63 |
r = random.SystemRandom()
|
|
64 |
while True:
|
|
65 |
id = '%%0.%dd' % TRACKING_CODE_SIZE % r.randint(0, 10**TRACKING_CODE_SIZE-1)
|
|
66 |
# add a "security code"
|
|
67 |
id = id + '%d' % (binascii.crc32(id) % 10)
|
|
68 |
if not cls.has_key(id):
|
|
69 |
return id
|
|
70 |
|
|
71 |
def check_crc(cls, id):
|
|
72 |
return id[-1] == '%d' % (binascii.crc32(id[:-1]) % 10)
|
|
73 |
check_crc = classmethod(check_crc)
|
|
74 |
|
|
75 |
|
50 |
76 |
class Evolution:
|
51 |
77 |
who = None
|
52 |
78 |
status = None
|
... | ... | |
89 |
115 |
data = None
|
90 |
116 |
editable_by = None
|
91 |
117 |
_signature = None
|
|
118 |
tracking_code = None
|
92 |
119 |
|
93 |
120 |
_formdef = None
|
94 |
121 |
def get_formdef(self):
|
... | ... | |
145 |
172 |
evo.status = self.status
|
146 |
173 |
self.evolution = [evo]
|
147 |
174 |
|
|
175 |
def store(self, async=False):
|
|
176 |
StorableObject.store(self, async=async)
|
|
177 |
# add a tracking code
|
|
178 |
if not self.tracking_code:
|
|
179 |
tc = TrackingCode(self.formdef.id, self.id)
|
|
180 |
self.tracking_code = tc.id
|
|
181 |
tc.store(async=async)
|
|
182 |
StorableObject.store(self, async=async)
|
|
183 |
|
148 |
184 |
def perform_workflow(self):
|
149 |
185 |
url = None
|
150 |
186 |
get_publisher().substitutions.feed(self)
|
... | ... | |
230 |
266 |
'form_uri': '%s/%s/' % (self.formdef.url_name, self.id),
|
231 |
267 |
'form_status_url': '%sstatus' % self.get_url(),
|
232 |
268 |
'form_details': self.formdef.get_detailed_email_form(self, self.get_url()),
|
|
269 |
'form_tracking_code': self.tracking_code or '',
|
233 |
270 |
}
|
234 |
271 |
|
235 |
272 |
user = self.get_user()
|
... | ... | |
309 |
346 |
Substitutions.register('form_url', category=N_('Form'), comment=N_('Form URL'))
|
310 |
347 |
Substitutions.register('form_url_backoffice', category=N_('Form'), comment=N_('Form URL (backoffice)'))
|
311 |
348 |
Substitutions.register('form_status_url', category=N_('Form'), comment=N_('Form Status URL'))
|
|
349 |
Substitutions.register('form_tracking_code', category=N_('Form'), comment=N_('Form Tracking Code'))
|
312 |
350 |
Substitutions.register('form_user', category=N_('Form'), comment=N_('Form Submitter'))
|
313 |
351 |
Substitutions.register('form_user_display_name', category=N_('Form'), comment=N_('Form Submitter Name'))
|
314 |
352 |
Substitutions.register('form_user_email', category=N_('Form'), comment=N_('Form Submitter Email'))
|