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