Revision 58e80501 snf-astakos-app/astakos/im/templatetags/filters.py
b/snf-astakos-app/astakos/im/templatetags/filters.py | ||
---|---|---|
41 | 41 |
from django.core.paginator import Paginator, EmptyPage |
42 | 42 |
from django.db.models.query import QuerySet |
43 | 43 |
from django.utils.safestring import mark_safe |
44 |
from django.template import defaultfilters |
|
44 | 45 |
|
45 | 46 |
from synnefo.lib.ordereddict import OrderedDict |
46 | 47 |
|
47 | 48 |
from astakos.im import settings |
48 |
from astakos.im.models import ProjectResourceGrant |
|
49 |
from astakos.im.models import ProjectResourceGrant, Project
|
|
49 | 50 |
from astakos.im.views import util as views_util |
50 | 51 |
from astakos.im import util |
52 |
from astakos.im import presentation |
|
51 | 53 |
|
52 | 54 |
register = template.Library() |
53 | 55 |
|
... | ... | |
259 | 261 |
if not app: |
260 | 262 |
return False |
261 | 263 |
return app.state in [app.DENIED] |
264 |
|
|
265 |
|
|
266 |
def _member_policy_formatter(form_or_app, value, changed, mapping): |
|
267 |
if changed: |
|
268 |
changed = defaultfilters.title(mapping.get(changed)) |
|
269 |
value = defaultfilters.title(mapping.get(value)) |
|
270 |
return value, changed, None, None |
|
271 |
|
|
272 |
|
|
273 |
def _owner_formatter(form_or_app, value, changed): |
|
274 |
if not changed: |
|
275 |
changed_name = None |
|
276 |
else: |
|
277 |
changed_name = changed.realname |
|
278 |
return value.realname, changed_name, None, None |
|
279 |
|
|
280 |
|
|
281 |
def _owner_admin_formatter(form_or_app, value, changed): |
|
282 |
if not changed: |
|
283 |
changed_name = None |
|
284 |
else: |
|
285 |
changed_name = changed.realname + " (%s)" % changed.email |
|
286 |
return value.realname + " (%s)" % value.email, changed_name, None, None |
|
287 |
|
|
288 |
|
|
289 |
def _owner_owner_formatter(form_or_app, value, changed): |
|
290 |
if not changed: |
|
291 |
changed_name = None |
|
292 |
else: |
|
293 |
changed_name = changed.realname |
|
294 |
return "Me", changed_name, None, None |
|
295 |
|
|
296 |
|
|
297 |
MODIFICATION_FORMATTERS = { |
|
298 |
'member_policy': _member_policy_formatter, |
|
299 |
'owner': _owner_formatter, |
|
300 |
'owner_admin': _owner_admin_formatter, |
|
301 |
'owner_owner': _owner_owner_formatter |
|
302 |
} |
|
303 |
|
|
304 |
|
|
305 |
@register.filter |
|
306 |
def display_modification_param(form_or_app, param, formatter=None): |
|
307 |
formatter_name = None |
|
308 |
if "," in param: |
|
309 |
param, formatter_name = param.split(",", 1) |
|
310 |
|
|
311 |
project_attr = param |
|
312 |
|
|
313 |
if hasattr(form_or_app, 'instance'): |
|
314 |
# form |
|
315 |
project = Project.objects.get(pk=form_or_app.instance.pk) |
|
316 |
app_value = form_or_app.cleaned_data[param] |
|
317 |
project_value = getattr(project, project_attr) |
|
318 |
else: |
|
319 |
# app |
|
320 |
project = form_or_app.chain |
|
321 |
app_value = getattr(form_or_app, project_attr) |
|
322 |
project_value = getattr(project, project_attr) |
|
323 |
if app_value == None: |
|
324 |
app_value = project_value |
|
325 |
|
|
326 |
formatter_params = {} |
|
327 |
|
|
328 |
if param == "member_join_policy": |
|
329 |
formatter_name = 'member_policy' |
|
330 |
formatter_params = {'mapping': |
|
331 |
presentation.PROJECT_MEMBER_JOIN_POLICIES} |
|
332 |
|
|
333 |
if param == "member_leave_policy": |
|
334 |
formatter_name = 'member_policy' |
|
335 |
formatter_params = {'mapping': |
|
336 |
presentation.PROJECT_MEMBER_LEAVE_POLICIES} |
|
337 |
|
|
338 |
changed = False |
|
339 |
changed_cls = "gray details" |
|
340 |
if project_value != app_value: |
|
341 |
changed = project_value |
|
342 |
|
|
343 |
if not formatter and formatter_name: |
|
344 |
formatter = MODIFICATION_FORMATTERS.get(formatter_name) |
|
345 |
|
|
346 |
changed_prefix = "<span>current: </span>" |
|
347 |
if formatter: |
|
348 |
app_value, changed, cls, prefix = formatter(form_or_app, |
|
349 |
app_value, changed, |
|
350 |
**formatter_params) |
|
351 |
if cls: |
|
352 |
changed_cls = cls |
|
353 |
|
|
354 |
if prefix: |
|
355 |
changed_prefix = prefix |
|
356 |
|
|
357 |
tpl = """%(value)s""" |
|
358 |
if changed: |
|
359 |
tpl += """<span class="policy-diff %(changed_cls)s">""" + \ |
|
360 |
"""%(changed_prefix)s%(changed)s</span>""" |
|
361 |
|
|
362 |
return mark_safe(tpl % { |
|
363 |
'value': app_value, |
|
364 |
'changed': changed, |
|
365 |
'changed_cls': changed_cls, |
|
366 |
'changed_prefix': changed_prefix |
|
367 |
}) |
|
368 |
|
|
369 |
|
|
370 |
@register.filter |
|
371 |
def display_modification_param_diff(form_or_app, param): |
|
372 |
def formatter(form_or_app, value, changed): |
|
373 |
if changed in [None, False]: |
|
374 |
return value, changed, None, " " |
|
375 |
|
|
376 |
diff = value - changed |
|
377 |
sign = "+" |
|
378 |
cls = "green" |
|
379 |
if diff < 0: |
|
380 |
sign = "-" |
|
381 |
diff = abs(diff) |
|
382 |
cls = "red" |
|
383 |
|
|
384 |
if diff != 0: |
|
385 |
changed = "(%s)" % (sign + str(diff)) |
|
386 |
else: |
|
387 |
changed = None |
|
388 |
|
|
389 |
return value, changed, cls, " " |
|
390 |
|
|
391 |
return display_modification_param(form_or_app, param, formatter) |
|
392 |
|
|
393 |
|
|
394 |
@register.filter |
|
395 |
def display_date_modification_param(form_or_app, params): |
|
396 |
param, date_format = params.split(",", 1) |
|
397 |
|
|
398 |
def formatter(form_or_app, value, changed): |
|
399 |
if changed not in [None, False]: |
|
400 |
changed = defaultfilters.date(changed, date_format) |
|
401 |
formatted_value = defaultfilters.date(value, date_format) |
|
402 |
return formatted_value, changed, None, None |
|
403 |
|
|
404 |
return display_modification_param(form_or_app, param, formatter) |
|
405 |
|
Also available in: Unified diff