0001-fold-summary-and-log-if-form-has-already-been-seen-9.patch
wcs/forms/common.py | ||
---|---|---|
183 | 183 | |
184 | 184 |
return r.getvalue() |
185 | 185 | |
186 |
def deja_vu(self): |
|
187 |
user = get_request().user |
|
188 |
if not self.filled.evolution or not user: |
|
189 |
return False |
|
190 |
for evo in self.filled.evolution: |
|
191 |
if evo.who == user.id or (evo.who == '_submitter' and self.filled.is_submitter(user)): |
|
192 |
return True |
|
193 |
return False |
|
194 | ||
186 | 195 |
def _q_index(self): |
187 | 196 |
mine = self.check_auth() |
188 | 197 |
get_logger().info('form %s - id: %s - view' % (self.formdef.name, self.filled.id)) |
... | ... | |
191 | 200 | |
192 | 201 |
r = TemplateIO(html=True) |
193 | 202 | |
203 |
deja_vu = self.deja_vu() |
|
194 | 204 |
r += self.receipt_message(mine=mine) |
195 |
r += self.receipt() |
|
196 |
r += self.history() |
|
205 |
r += self.receipt(deja_vu=deja_vu)
|
|
206 |
r += self.history(deja_vu=deja_vu)
|
|
197 | 207 | |
198 | 208 |
form = None |
199 | 209 | |
... | ... | |
233 | 243 |
r += htmltext('</div>') |
234 | 244 |
return r.getvalue() |
235 | 245 | |
236 |
def history(self): |
|
246 |
def history(self, deja_vu=False):
|
|
237 | 247 |
if not self.filled.evolution: |
238 | 248 |
return |
239 | 249 |
if not self.formdef.is_user_allowed_read_status_and_history(get_request().user, self.filled): |
240 | 250 |
return |
241 | 251 |
r = TemplateIO(html=True) |
242 | 252 |
r += htmltext('<div class="bo-block" id="evolution-log">') |
243 |
r += htmltext('<h2 class="foldable">%s</h2>') % _('Log') |
|
253 |
if len(self.filled.evolution) > 1: |
|
254 |
r += htmltext('<h2 class="foldable%s">%%s</h2>' % (deja_vu and ' folded' or '')) % _('Log') |
|
255 |
else: |
|
256 |
r += htmltext('<h2>%s</h2>') % _('Log') |
|
244 | 257 |
r += htmltext('<ul id="evolutions">') |
245 | 258 |
hidden = False |
246 | 259 |
previous_status = None |
247 |
for evo in self.filled.evolution:
|
|
260 |
for evo_number, evo in enumerate(self.filled.evolution, 1):
|
|
248 | 261 |
if evo.status: |
249 | 262 |
wf_status = self.filled.get_status(evo.status) |
250 | 263 |
if wf_status and not wf_status.is_visible(self.filled, get_request().user): |
... | ... | |
276 | 289 |
except KeyError: |
277 | 290 |
pass |
278 | 291 | |
292 |
if evo_number == len(self.filled.evolution): |
|
293 |
r += htmltext('</ul><ul id="evolution-last">') |
|
294 | ||
279 | 295 |
r += htmltext('<li class="%s">' % klass) |
280 | 296 |
r += htmltext('<div>') |
281 | 297 | |
... | ... | |
322 | 338 | |
323 | 339 |
r += htmltext('</div>') |
324 | 340 |
r += htmltext('</li>') |
341 | ||
325 | 342 |
r += htmltext('</ul>') |
326 | 343 |
r += htmltext('</div>') # .bo-block #evolution-log |
327 | 344 |
return r.getvalue() |
... | ... | |
338 | 355 |
raise errors.AccessForbiddenError() |
339 | 356 |
return user |
340 | 357 | |
341 |
def receipt(self, |
|
342 |
always_include_user = False, |
|
343 |
show_status = True, |
|
344 |
form_url = ''): |
|
358 |
def receipt(self, always_include_user=False, show_status=True, form_url='', deja_vu=False): |
|
345 | 359 |
user = get_request().user |
346 | 360 |
if not always_include_user and get_request().user and \ |
347 | 361 |
get_request().user.id == self.filled.user_id: |
... | ... | |
363 | 377 | |
364 | 378 |
r = TemplateIO(html=True) |
365 | 379 |
r += htmltext('<div class="bo-block" id="summary">') |
366 |
r += htmltext('<h2 class="foldable">%s</h2>') % _('Summary') |
|
380 |
r += htmltext('<h2 class="foldable%s">%%s</h2>' % |
|
381 |
(deja_vu and ' folded' or '')) % _('Summary') |
|
367 | 382 |
r += htmltext('<div class="dataview">') |
368 | 383 | |
369 | 384 |
if user: |
... | ... | |
483 | 498 |
'date': self.filled.anonymised.strftime(misc.date_format())} |
484 | 499 |
r += htmltext('</div>') |
485 | 500 | |
486 |
r += self.receipt(always_include_user = True) |
|
501 |
deja_vu = self.deja_vu() |
|
502 |
r += self.receipt(always_include_user=True, deja_vu=deja_vu) |
|
487 | 503 | |
488 | 504 |
if self.formdef.workflow: |
489 | 505 |
r += htmltext(self.filled.display_workflow_message()) |
490 | 506 | |
491 |
r += self.history() |
|
507 |
r += self.history(deja_vu=deja_vu)
|
|
492 | 508 | |
493 | 509 |
if form: |
494 | 510 |
r += form.render() |
wcs/qommon/static/css/dc2/admin.css | ||
---|---|---|
814 | 814 |
} |
815 | 815 | |
816 | 816 |
.foldable:after { |
817 |
content: "▼";
|
|
818 |
font-size: 80%;
|
|
817 |
font-family: FontAwesome;
|
|
818 |
content: "\f147"; /* minus-square-o */
|
|
819 | 819 |
text-align: right; |
820 | 820 |
float: right; |
821 | 821 |
} |
822 | 822 | |
823 | 823 |
.foldable.folded:after { |
824 |
content: "▶"; |
|
824 |
font-family: FontAwesome; |
|
825 |
content: "\f196"; /* plus-square-o */ |
|
825 | 826 |
} |
826 | 827 | |
827 | 828 |
ul.biglist li p.commands span, |
wcs/qommon/static/css/qommon.css | ||
---|---|---|
428 | 428 | |
429 | 429 |
ul#evolutions { |
430 | 430 |
list-style: none; |
431 |
padding: 0; |
|
432 |
margin: 0; |
|
431 |
padding: 0 0 1em 0;
|
|
432 |
margin: 0 0 -2em 0;
|
|
433 | 433 |
background: linear-gradient(to right, transparent 0%, transparent 30px, #666 30px, white 32px, #666 34px, transparent 24px, transparent 100%) no-repeat; |
434 | 434 |
} |
435 | 435 | |
... | ... | |
492 | 492 |
background: #ddf; |
493 | 493 |
} |
494 | 494 | |
495 |
ul#evolution-last { |
|
496 |
list-style: none; |
|
497 |
padding: 0; |
|
498 |
margin: 0; |
|
499 |
} |
|
500 | ||
501 |
ul#evolution-last li { |
|
502 |
margin: 1em 0 2em 0; |
|
503 |
} |
|
504 | ||
505 |
ul#evolution-last div.evolution-metadata { |
|
506 |
width: auto; |
|
507 |
display: inline-block; |
|
508 |
background: white; |
|
509 |
padding: 1ex; |
|
510 |
border: 1px solid #666; |
|
511 |
margin-bottom: 0; |
|
512 |
} |
|
513 | ||
514 |
ul#evolution-last span.time { |
|
515 |
display: inline-block; |
|
516 |
padding-left: 1em; |
|
517 |
} |
|
518 | ||
519 |
ul#evolution-last span.status { |
|
520 |
font-weight: bold; |
|
521 |
display: inline-block; |
|
522 |
} |
|
523 | ||
524 |
ul#evolution-last span.user { |
|
525 |
display: block; |
|
526 |
opacity: 0.5; |
|
527 |
} |
|
528 | ||
529 |
ul#evolution-last span.user span { |
|
530 |
font-size: 80%; |
|
531 |
} |
|
532 | ||
533 |
ul#evolution-last li div.msg { |
|
534 |
padding: 1ex; |
|
535 |
border: 1px solid #000; |
|
536 |
margin-top: -1px; |
|
537 |
box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.3); |
|
538 |
position: relative; |
|
539 |
background: white; |
|
540 |
} |
|
541 | ||
542 |
ul#evolution-last li div.msg span.time { |
|
543 |
position: absolute; |
|
544 |
top: 1ex; |
|
545 |
right: 1em; |
|
546 |
opacity: 0.5; |
|
547 |
} |
|
548 | ||
549 |
ul#evolution-last li.msg-in div.msg { |
|
550 |
margin-left: 60px; |
|
551 |
margin-right: 10%; |
|
552 |
background: #dfd; |
|
553 |
} |
|
554 | ||
555 |
ul#evolution-last li.msg-out div.msg { |
|
556 |
margin-left: 20%; |
|
557 |
background: #ddf; |
|
558 |
} |
|
559 | ||
495 | 560 |
div.halfwidth { |
496 | 561 |
width: 45%; |
497 | 562 |
float: left; |
498 |
- |