Ejemplo n.º 1
0
    if menuitem.url:

        myurl = resolve(menuitem.url)

        url_splitted = myurl.url_name.split("_")

        model_name = 'xxx'
        if len(url_splitted) == 3:
            model_name = url_splitted[1]
        elif len(url_splitted) == 4:
            model_name = url_splitted[1] + "_" + url_splitted[2]

        permission_name = url_splitted[0] + ".change_" + model_name
        retorno = context['user'].has_perm(permission_name)

    if not retorno and menuitem.has_children():
        for child in menuitem.children():
            retorno = retorno or menu_has_permission(context, child)

    return retorno


register.assignment_tag(takes_context=True)(menu_has_permission)


@register.filter
def replace(string, args):
    args = args.split(args[0])

    return re.sub(args[1], args[2], string)
from notifications.templatetags.notifications_tags import notifications_unread

Notification = swapper.load_model('notifications', 'Notification')

register = Library()


def get_notifications_count(context):
    user_pk = context['user'].is_authenticated and context['user'].pk
    cache_key = Notification.COUNT_CACHE_KEY.format(user_pk)
    count = cache.get(cache_key)
    if count is None:
        count = notifications_unread(context)
        cache.set(cache_key, count)
    return count


def unread_notifications(context):
    count = get_notifications_count(context)
    output = ''
    if count:
        output = '<span>{0}</span>'
        output = format_html(output.format(count))
    return output


if StrictVersion(get_version()) >= StrictVersion('2.0'):
    register.simple_tag(takes_context=True)(unread_notifications)
else:
    register.assignment_tag(takes_context=True)(notifications_unread)
Ejemplo n.º 3
0
    from django.core.urlresolvers import reverse  # pylint: disable=no-name-in-module,import-error

register = Library()


def notifications_unread_fn(context, recipient=None):
    recip = recipient or user_context(context)
    return Notification.objects.filter(
        recipient_content_type_id=ContentType.objects.get_for_model(recip).id,
        recipient_object_id=recip.id).unread().count()


if StrictVersion(get_version()) >= StrictVersion('2.0'):
    register.simple_tag(name='notifications_unread', takes_context=True)(notifications_unread_fn)  # pylint: disable=invalid-name
else:
    register.assignment_tag(name='notifications_unread', takes_context=True)(notifications_unread_fn)  # pylint: disable=invalid-name


@register.filter
def has_notification(user):
    recip = user
    if recip:
        return Notification.objects.filter(
            recipient_content_type_id=ContentType.objects.get_for_model(recip).id,
            recipient_object_id=recip.id).unread().exists()
    return False


# Requires vanilla-js framework - http://vanilla-js.com/
@register.simple_tag
def register_notify_callbacks(badge_class='live_notify_badge',  # pylint: disable=too-many-arguments,missing-docstring
Ejemplo n.º 4
0
@register.inclusion_tag('privacy/partials/field.html')
def render_privacy_level_field(obj, field_name=None):
    return get_privacy_dict(obj, field_name)


def is_access_allowed(owner, requester, obj, field_name=None):
    get_clearance_level = load_member_from_setting(
        'PRIVACY_CLEARANCE_LEVEL_FUNCTION')
    clearance_level = get_clearance_level(owner, requester)
    kwargs = {
        'content_type': ContentType.objects.get_for_model(obj),
        'object_id': obj.pk,
    }
    if field_name:
        kwargs.update({'field_name': field_name})
    else:
        kwargs.update({'field_name': ''})
    try:
        privacy_setting = PrivacySetting.objects.get(**kwargs)
    except ObjectDoesNotExist:
        return True  # No settings given? Allow for everyone
    if privacy_setting.level.clearance_level <= clearance_level:
        # Level has to be at least as high as the setting's label of the
        # object/field
        return True
    return False


register.assignment_tag(is_access_allowed)
from collections import OrderedDict

from django import VERSION as django_version
from django.template import Library

from wagtailtrans.sites import get_languages_for_site

register = Library()

if django_version >= (1, 9):
    register.assignment_tag = register.simple_tag


def _get_translations(page, homepage_fallback=True, include_self=True):
    """
    Return URLs for translations of provided pages, if
    a language isn't available as direct translation

    Note: after https://github.com/wagtail/wagtail/pull/3354 gets merged
          we should update the URL functions for better perfomance.

    """
    site = page.get_site()
    available_translations = {}
    available_languages = get_languages_for_site(site)
    if hasattr(page, 'language'):
        if not include_self:
            available_languages.remove(page.language)

        page_translations = page.get_translations(only_live=True,
                                                  include_self=include_self)
Ejemplo n.º 6
0
register.filter('get_item', get_item)


def worduse_stats(qs_list):
    ct = Counter([it.use for it in qs_list])
    total = len(qs_list)
    return {
        'ok': ct[0] / total * 100,
        'prefer_other': ct[1] / total * 100,
        'unrecognized': ct[2] / total * 100,
        'count': len(qs_list)
    }


register.assignment_tag(worduse_stats,
                        takes_context=False,
                        name='worduse_stats')


class SplitListNode(Node):
    def __init__(self, list_string, chunk_size, new_list_name):
        self.list = list_string
        self.chunk_size = chunk_size
        self.new_list_name = new_list_name

    def split_seq(self, seq, size):
        """ Split up seq in pieces of size, from
        http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/425044"""
        return [seq[i:i + size] for i in range(0, len(seq), size)]

    def render(self, context):
Ejemplo n.º 7
0
def get_user_favorite_count(user, app, model):
    from ..models import Favorite
    ctype = ContentType.objects.get(app_label=app, model=model)
    # Return the current total number for UI updates
    favorites_count = Favorite.objects.filter(content_type=ctype,
                                              user=user).count()
    return str(favorites_count)


def assign_wooey_setting(name):
    return getattr(wooey_settings, name, "")


# Django 1.9 > Support for assign wooey setting
if DJANGO_VERSION <= DJ18:
    register.assignment_tag(assign_wooey_setting)
else:
    register.simple_tag(assign_wooey_setting)


@register.simple_tag
def get_wooey_setting(name):
    return getattr(wooey_settings, name, "")


@register.filter
def divide(value, arg):
    try:
        return float(value) / float(arg)
    except ZeroDivisionError:
        return None
Ejemplo n.º 8
0
# -*- coding: utf-8 -*-
"""
Author: FeiYe <*****@*****.**>
Since: 2017/4/11
"""
from django.template import Library
from jiango.cms.shortcuts import cms_contents, cms_collections

register = Library()

register.assignment_tag(cms_contents)
register.assignment_tag(cms_collections)
Ejemplo n.º 9
0
from django.template import Library

from ..api import get_last_invalidation

register = Library()

register.assignment_tag(get_last_invalidation)
Ejemplo n.º 10
0
log = logging.getLogger(__name__)

register = Library()


def get_item(dictionary, key):
    return dictionary.get(key)
register.filter('get_item', get_item)


def worduse_stats(qs_list):
    ct = Counter([it.use for it in qs_list])
    total = len(qs_list)
    return {'ok': ct[0]/total*100, 'prefer_other': ct[1]/total*100, 'unrecognized': ct[2]/total*100, 'count': len(qs_list)}
register.assignment_tag(worduse_stats, takes_context=False, name='worduse_stats')


class SplitListNode(Node):
    def __init__(self, list_string, chunk_size, new_list_name):
        self.list = list_string
        self.chunk_size = chunk_size
        self.new_list_name = new_list_name

    def split_seq(self, seq, size):
        """ Split up seq in pieces of size, from
        http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/425044"""
        return [seq[i:i+size] for i in range(0, len(seq), size)]

    def render(self, context):
        context[self.new_list_name] = self.split_seq(context[self.list], int(self.chunk_size))
Ejemplo n.º 11
0
@register.simple_tag
def get_user_favorite_count(user, app, model):
    from ..models import Favorite
    ctype = ContentType.objects.get(app_label=app, model=model)
    # Return the current total number for UI updates
    favorites_count = Favorite.objects.filter(content_type=ctype, user=user).count()
    return str(favorites_count)


def assign_wooey_setting(name):
    return getattr(wooey_settings, name, "")


# Django 1.9 > Support for assign wooey setting
if DJANGO_VERSION <= DJ18:
    register.assignment_tag(assign_wooey_setting)
else:
    register.simple_tag(assign_wooey_setting)


@register.simple_tag
def get_wooey_setting(name):
    return getattr(wooey_settings, name, "")


@register.filter
def divide(value, arg):
    try:
        return float(value)/float(arg)
    except ZeroDivisionError:
        return None
Ejemplo n.º 12
0

@register.inclusion_tag('privacy/partials/field.html')
def render_privacy_level_field(obj, field_name=None):
    return get_privacy_dict(obj, field_name)


def is_access_allowed(owner, requester, obj, field_name=None):
    get_clearance_level = load_member_from_setting(
        'PRIVACY_CLEARANCE_LEVEL_FUNCTION')
    clearance_level = get_clearance_level(owner, requester)
    kwargs = {
        'content_type': ContentType.objects.get_for_model(obj),
        'object_id': obj.pk,
    }
    if field_name:
        kwargs.update({'field_name': field_name})
    else:
        kwargs.update({'field_name': ''})
    try:
        privacy_setting = PrivacySetting.objects.get(**kwargs)
    except ObjectDoesNotExist:
        return True  # No settings given? Allow for everyone
    if privacy_setting.level.clearance_level <= clearance_level:
        # Level has to be at least as high as the setting's label of the
        # object/field
        return True
    return False

register.assignment_tag(is_access_allowed)
Ejemplo n.º 13
0
    retorno = False

    if menuitem.url:

        myurl = resolve(menuitem.url)

        url_splitted = myurl.url_name.split("_")

        model_name = 'xxx'
        if len(url_splitted) == 3:
            model_name = url_splitted[1]
        elif len(url_splitted) == 4:
            model_name = url_splitted[1] + "_" + url_splitted[2]

        permission_name = url_splitted[0] + ".change_" + model_name
        retorno = context['user'].has_perm(permission_name)

    if not retorno and menuitem.has_children():
        for child in menuitem.children():
            retorno = retorno or menu_has_permission(context, child)

    return retorno
register.assignment_tag(takes_context=True)(menu_has_permission)


@register.filter
def replace(string, args):
    args = args.split(args[0])

    return re.sub(args[1], args[2], string)
    from django.core.urlresolvers import reverse  # pylint: disable=no-name-in-module,import-error

register = Library()


def notifications_unread(context):
    user = user_context(context)
    if not user:
        return ''
    return user.notifications.unread().count()


if StrictVersion(get_version()) >= StrictVersion('2.0'):
    notifications_unread = register.simple_tag(takes_context=True)(notifications_unread)  # pylint: disable=invalid-name
else:
    notifications_unread = register.assignment_tag(takes_context=True)(notifications_unread)  # noqa


@register.filter
def has_notification(user):
    if user:
        return user.notifications.unread().exists()
    return False


# Requires vanilla-js framework - http://vanilla-js.com/
@register.simple_tag
def register_notify_callbacks(badge_class='live_notify_badge',  # pylint: disable=too-many-arguments,missing-docstring
                              menu_class='live_notify_list',
                              refresh_period=15,
                              callbacks='',