Example #1
0
def photo_review(request, instance):
    page_number = int(request.REQUEST.get('page', '1'))
    sort_order = request.REQUEST.get('sort', '-created_at')
    is_archived = request.REQUEST.get('archived', 'False') == 'True'

    photos = get_photos(instance, sort_order, is_archived)
    paginator = Paginator(photos, _PHOTO_PAGE_SIZE)

    try:
        paged_photos = paginator.page(page_number)
    except EmptyPage:
        # If the page number is out of bounds, return the last page
        paged_photos = paginator.page(paginator.num_pages)

    urlizer = UrlParams('photo_review', instance.url_name, page=page_number,
                        sort=sort_order, archived=is_archived)

    filter_value = dict(archived=is_archived)

    filter_context = make_filter_context(urlizer, filter_value, [
        (_('Active'), _('active'), dict(archived=False)),
        (_('Archived'), _('archived'), dict(archived=True)),
    ])
    filter_context['container_attr'] = 'data-photo-filter'

    return {
        'photos': paged_photos,
        'sort_order': sort_order,
        'is_archived': is_archived,
        'archived_filter': filter_context,
        'url_for_pagination': urlizer.url('sort', 'archived'),
        'url_for_sort': urlizer.url('archived'),
        'full_params': urlizer.params('page', 'sort', 'archived')
    }
Example #2
0
def comment_moderation(request, instance):
    (is_archived, is_removed, sort) = _comments_params(request.GET)
    page_number = int(request.GET.get('page', '1'))
    page_size = int(request.GET.get('size', '5'))

    comments = get_comments(request.GET, instance)
    paginator = Paginator(comments, page_size)

    try:
        paged_comments = paginator.page(page_number)
    except EmptyPage:
        # If the page number is out of bounds, return the last page
        paged_comments = paginator.page(paginator.num_pages)

    urlizer = UrlParams('comment_moderation',
                        instance.url_name,
                        archived=is_archived,
                        sort=sort,
                        removed=is_removed,
                        page=paged_comments.number)

    comments_url_for_pagination = urlizer.url('archived', 'removed', 'sort')
    comments_url_for_sort = urlizer.url('archived', 'removed')

    full_params = urlizer.params('archived', 'removed', 'sort', 'page')

    checked_comments = get_ids_from_request(request)
    if len(checked_comments) == 1:
        # Don't check the box for non-batch requests
        checked_comments = []

    filter_value = dict(archived=is_archived, removed=is_removed)

    filter_context = make_filter_context(urlizer, filter_value, [
        (_('Active'), _('active'), dict(archived=False, removed=None)),
        (_('Hidden'), _('hidden'), dict(archived=None, removed=True)),
        (_('Archived'), _('archived'), dict(archived=True, removed=None)),
    ])
    filter_context['container_attr'] = 'data-comments-filter'

    return {
        'comments': paged_comments,
        'comments_filter': filter_context,
        'comments_url_for_pagination': comments_url_for_pagination,
        'comments_url_for_sort': comments_url_for_sort,
        'comments_params': full_params,
        'comments_sort': sort,
        'comment_ids': checked_comments
    }
Example #3
0
def comment_moderation(request, instance):
    (is_archived, is_removed, sort) = _comments_params(request.GET)
    page_number = int(request.GET.get('page', '1'))
    page_size = int(request.GET.get('size', '5'))

    comments = get_comments(request.GET, instance)
    paginator = Paginator(comments, page_size)

    try:
        paged_comments = paginator.page(page_number)
    except EmptyPage:
        # If the page number is out of bounds, return the last page
        paged_comments = paginator.page(paginator.num_pages)

    urlizer = UrlParams('comment_moderation', instance.url_name,
                        archived=is_archived, sort=sort, removed=is_removed,
                        page=paged_comments.number)

    comments_url_for_pagination = urlizer.url('archived', 'removed', 'sort')
    comments_url_for_sort = urlizer.url('archived', 'removed')

    full_params = urlizer.params('archived', 'removed', 'sort', 'page')

    checked_comments = get_ids_from_request(request)
    if len(checked_comments) == 1:
        # Don't check the box for non-batch requests
        checked_comments = []

    filter_value = dict(archived=is_archived, removed=is_removed)

    filter_context = make_filter_context(urlizer, filter_value, [
        (_('Active'), _('active'), dict(archived=False, removed=None)),
        (_('Hidden'), _('hidden'), dict(archived=None, removed=True)),
        (_('Archived'), _('archived'), dict(archived=True, removed=None)),
    ])
    filter_context['container_attr'] = 'data-comments-filter'

    return {
        'comments': paged_comments,
        'comments_filter': filter_context,
        'comments_url_for_pagination': comments_url_for_pagination,
        'comments_url_for_sort': comments_url_for_sort,
        'comments_params': full_params,
        'comments_sort': sort,
        'comment_ids': checked_comments
    }
Example #4
0
def user_roles_list(request, instance):
    page = int(request.GET.get('page', '1'))
    user_sort = request.GET.get('user_sort', 'user__username')
    invite_sort = request.GET.get('invite_sort', 'email')
    query = request.GET.get('query', '')

    def invite_context(invites):
        for invite in invites:
            yield {
                'id': str(invite.pk),
                'username': invite.email,
                'role_id': invite.role.pk,
                'role_name': invite.role.name,
                'admin': invite.admin,
            }

    def instance_user_context(instance_users):
        for instance_user in paged_instance_users:
            user = instance_user.user
            yield {
                'id': str(instance_user.pk),
                'username': user.username,
                'role_id': instance_user.role.pk,
                'role_name': instance_user.role.name,
                'admin': instance_user.admin,
                'is_owner': does_user_own_instance(instance, user)
            }

    # The secondary sort on username/email is needed to ensure consistent
    # ordering within groupings. Testing shows that things work correctly when
    # the supplied sort order is also username/email
    invited = instance.instanceinvitation_set \
        .select_related('role') \
        .filter(accepted=False) \
        .order_by(invite_sort, 'email')
    instance_users = instance.instanceuser_set \
        .select_related('role', 'user') \
        .exclude(user=User.system_user()) \
        .order_by(user_sort, 'user__username')

    if query:
        instance_users = instance_users.filter(user__username__icontains=query)

    paginator = Paginator(instance_users, 15)

    urlizer = UrlParams('user_roles_partial', instance.url_name, page=page,
                        invite_sort=invite_sort, user_sort=user_sort,
                        query=query)

    try:
        paged_instance_users = paginator.page(page)
    except EmptyPage:
        # If the page number is out of bounds, return the last page
        paged_instance_users = paginator.page(paginator.num_pages)

    return {
        'instance': instance,
        'instance_users': instance_user_context(paged_instance_users),
        'paged_instance_users': paged_instance_users,
        'invited_users': invite_context(invited),
        'instance_roles': Role.objects.filter(instance_id=instance.pk),
        'page_url': urlizer.url('invite_sort', 'user_sort', 'query'),
        'invite_sort_url': urlizer.url('page', 'user_sort', 'query'),
        'user_sort_url': urlizer.url('invite_sort', 'query'),
        'search_url': urlizer.url('invite_sort', 'user_sort'),
        'invite_sort': invite_sort,
        'user_sort': user_sort,
    }
Example #5
0
def user_roles_list(request, instance):
    page = int(request.GET.get('page', '1'))
    user_sort = request.GET.get('user_sort', 'user__username')
    invite_sort = request.GET.get('invite_sort', 'email')
    query = request.GET.get('query', '')

    def invite_context(invites):
        for invite in invites:
            yield {
                'id': str(invite.pk),
                'username': invite.email,
                'role_id': invite.role.pk,
                'role_name': invite.role.name,
                'admin': invite.admin,
            }

    def instance_user_context(instance_users):
        for instance_user in paged_instance_users:
            user = instance_user.user
            yield {
                'id': str(instance_user.pk),
                'username': user.username,
                'role_id': instance_user.role.pk,
                'role_name': instance_user.role.name,
                'admin': instance_user.admin,
                'is_owner': does_user_own_instance(instance, user)
            }

    # The secondary sort on username/email is needed to ensure consistent
    # ordering within groupings. Testing shows that things work correctly when
    # the supplied sort order is also username/email
    invited = instance.instanceinvitation_set \
        .select_related('role') \
        .filter(accepted=False) \
        .order_by(invite_sort, 'email')
    instance_users = instance.instanceuser_set \
        .select_related('role', 'user') \
        .exclude(user=User.system_user()) \
        .order_by(user_sort, 'user__username')

    if query:
        instance_users = instance_users.filter(user__username__icontains=query)

    paginator = Paginator(instance_users, 15)

    urlizer = UrlParams('user_roles_partial', instance.url_name, page=page,
                        invite_sort=invite_sort, user_sort=user_sort,
                        query=query)

    try:
        paged_instance_users = paginator.page(page)
    except EmptyPage:
        # If the page number is out of bounds, return the last page
        paged_instance_users = paginator.page(paginator.num_pages)

    return {
        'instance': instance,
        'instance_users': instance_user_context(paged_instance_users),
        'paged_instance_users': paged_instance_users,
        'invited_users': invite_context(invited),
        'instance_roles': Role.objects.filter(instance_id=instance.pk),
        'page_url': urlizer.url('invite_sort', 'user_sort', 'query'),
        'invite_sort_url': urlizer.url('page', 'user_sort', 'query'),
        'user_sort_url': urlizer.url('invite_sort', 'query'),
        'search_url': urlizer.url('invite_sort', 'user_sort'),
        'invite_sort': invite_sort,
        'user_sort': user_sort,
    }