Esempio n. 1
0
def list_suggested_tags(request):
    """moderators and administrators can list tags that are
    in the moderation queue, apply suggested tag to questions
    or cancel the moderation reuest."""
    if openode_settings.ENABLE_TAG_MODERATION == False:
        raise Http404
    tags = Tag.objects.filter(status=Tag.STATUS_SUGGESTED)
    tags = tags.order_by('-used_count', 'name')
    #paginate moderated tags
    paginator = Paginator(tags, 20)

    page_no = request.GET.get('page', '1')

    try:
        page = paginator.page(page_no)
    except (EmptyPage, InvalidPage):
        page = paginator.page(paginator.num_pages)

    paginator_context = functions.setup_paginator({
        'is_paginated':
        True,
        'pages':
        paginator.num_pages,
        'page':
        page_no,
        'has_previous':
        page.has_previous(),
        'has_next':
        page.has_next(),
        'previous':
        page.previous_page_number(),
        'next':
        page.next_page_number(),
        'base_url':
        request.path
    })

    data = {
        'tags': page.object_list,
        'active_tab': 'tags',
        'tab_id': 'suggested',
        'page_class': 'moderate-tags-page',
        'page_title': _('Suggested tags'),
        'paginator_context': paginator_context,
    }
    return render_into_skin('list_suggested_tags.html', data, request)
Esempio n. 2
0
def list_suggested_tags(request):
    """moderators and administrators can list tags that are
    in the moderation queue, apply suggested tag to questions
    or cancel the moderation reuest."""
    if openode_settings.ENABLE_TAG_MODERATION == False:
        raise Http404
    tags = Tag.objects.filter(status = Tag.STATUS_SUGGESTED)
    tags = tags.order_by('-used_count', 'name')
    #paginate moderated tags
    paginator = Paginator(tags, 20)

    page_no = request.GET.get('page', '1')

    try:
        page = paginator.page(page_no)
    except (EmptyPage, InvalidPage):
        page = paginator.page(paginator.num_pages)

    paginator_context = functions.setup_paginator({
        'is_paginated' : True,
        'pages': paginator.num_pages,
        'page': page_no,
        'has_previous': page.has_previous(),
        'has_next': page.has_next(),
        'previous': page.previous_page_number(),
        'next': page.next_page_number(),
        'base_url' : request.path
    })

    data = {
        'tags': page.object_list,
        'active_tab': 'tags',
        'tab_id': 'suggested',
        'page_class': 'moderate-tags-page',
        'page_title': _('Suggested tags'),
        'paginator_context' : paginator_context,
    }
    return render_into_skin('list_suggested_tags.html', data, request)
Esempio n. 3
0
def organization_detail(request, organization_id, organization_slug):
    if not request.user.is_authenticated():
        return render_forbidden(request)

    user_acceptance_level = 'closed'
    user_membership_level = 'none'
    try:
        organization = models.Organization.objects.get(id=organization_id)
        user_acceptance_level = organization.get_openness_level_for_user(
                                                                    request.user
                                                                )
    except models.Organization.DoesNotExist:
        raise Http404

    ################################################################
    # upload organization logo

    logo_form = OrganizationLogoForm(instance=organization)
    if request.method == "POST":
        logo_form = OrganizationLogoForm(request.POST, request.FILES, instance=organization)
        if logo_form.is_valid():
            logo_form.save()
            return HttpResponseRedirect(request.path)

    ################################################################

    if organization_slug == slugify(organization.title):
        users = models.User.objects.exclude(status='b')
        #filter users by full organization memberships
        #todo: refactor as Organization.get_full_members()
        full_level = models.OrganizationMembership.FULL
        memberships = models.OrganizationMembership.objects.filter(
                                        organization=organization, level=full_level
                                    )
        user_ids = memberships.values_list('user__id', flat=True)
        users = users.filter(id__in=user_ids)
        if request.user.is_authenticated():
            membership = request.user.get_organization_membership(organization)
            if membership:
                user_membership_level = membership.get_level_display()

    else:
        organization_page_url = reverse(
                            'organization_detail',
                            kwargs={
                                'organization_id': organization.id,
                                'organization_slug': slugify(organization.title)
                            }
                        )
        return HttpResponseRedirect(organization_page_url)

    sortby = request.GET.get('sort', 'last_name')

    try:
        page = int(request.GET.get('page', '1'))
    except ValueError:
        page = 1

    search_query = request.REQUEST.get('query',  "")
    if search_query == "":
        if sortby == "newest":
            order_by_parameter = ('-date_joined',)
        elif sortby == "last":
            order_by_parameter = ('date_joined',)
        elif sortby == "user":
            order_by_parameter = ('last_name', 'first_name')
        else:
            # default
            order_by_parameter = ('last_name', 'first_name')

        objects_list = Paginator(
                            users.order_by(*order_by_parameter),
                            const.USERS_PAGE_SIZE
                        )
        base_url = request.path + '?sort=%s&' % sortby
    else:
        sortby = "last_name"
        matching_users = models.get_users_by_text_query(search_query, users)
        objects_list = Paginator(
                            matching_users.order_by(*('last_name', 'first_name')),
                            const.USERS_PAGE_SIZE
                        )
        base_url = request.path + '?name=%s&sort=%s&' % (search_query, sortby)

    try:
        users_page = objects_list.page(page)
    except (EmptyPage, InvalidPage):
        users_page = objects_list.page(objects_list.num_pages)

    paginator_data = {
        'is_paginated': bool(objects_list.count > const.USERS_PAGE_SIZE),
        'pages': objects_list.num_pages,
        'page': page,
        'has_previous': users_page.has_previous(),
        'has_next': users_page.has_next(),
        'previous': users_page.previous_page_number(),
        'next': users_page.next_page_number(),
        'base_url': base_url
    }
    paginator_context = functions.setup_paginator(paginator_data)

    #todo: cleanup this branched code after organizations are migrated to auth_organization
    user_organizations = get_organizations().all()
    if len(user_organizations) <= 1:
        user_organizations = None
    organization_openness_choices = models.Organization().get_openness_choices()

    data = {
        'active_tab': 'users',
        'page_class': 'users-page',
        'users': users_page,
        'organization': organization,
        'search_query': search_query,
        'tab_id': sortby,
        'paginator_context': paginator_context,
        'user_acceptance_level': user_acceptance_level,
        'user_membership_level': user_membership_level,
        'user_organizations': user_organizations,
        'organization_openness_choices': organization_openness_choices,
        "logo_form": logo_form,
    }

    return render_into_skin('organization_detail.html', data, request)
Esempio n. 4
0
def show_users(request):
    """Users view, including listing of users by organization"""
    if not request.user.is_authenticated():
        return render_forbidden(request)

    users = models.User.objects.filter(is_active=True, is_hidden=False).exclude(status='b')
    organization = None
    logo_form = None
    sortby = request.GET.get('sort', 'last_name')

    try:
        page = int(request.GET.get('page', '1'))
    except ValueError:
        page = 1

    search_query = request.REQUEST.get('query',  "")
    if search_query == "":
        if sortby == "newest":
            order_by_parameter = ('-date_joined',)
        elif sortby == "last":
            order_by_parameter = ('date_joined',)
        elif sortby == "last_name":
            order_by_parameter = ('last_name', 'first_name')
        else:
            # default
            order_by_parameter = ('last_name', 'first_name')

        objects_list = Paginator(
                            users.order_by(*order_by_parameter),
                            const.USERS_PAGE_SIZE
                        )
        base_url = request.path + '?sort=%s&amp;' % sortby
    else:
        sortby = "last_name"
        matching_users = models.get_users_by_text_query(search_query, users)
        objects_list = Paginator(
                            matching_users.order_by(*('last_name', 'first_name')),
                            const.USERS_PAGE_SIZE
                        )
        base_url = request.path + '?name=%s&amp;sort=%s&amp;' % (search_query, sortby)

    try:
        users_page = objects_list.page(page)
    except (EmptyPage, InvalidPage):
        users_page = objects_list.page(objects_list.num_pages)

    paginator_data = {
        'is_paginated': bool(objects_list.count > const.USERS_PAGE_SIZE),
        'pages': objects_list.num_pages,
        'page': page,
        'has_previous': users_page.has_previous(),
        'has_next': users_page.has_next(),
        'previous': users_page.previous_page_number(),
        'next': users_page.next_page_number(),
        'base_url': base_url
    }
    paginator_context = functions.setup_paginator(paginator_data)

    data = {
        'active_tab': 'users',
        'page_class': 'users-page',
        'users': users_page,
        'organization': organization,
        'search_query': search_query,
        'tab_id': sortby,
        'paginator_context': paginator_context,
        "logo_form": logo_form,
    }

    return render_into_skin('user_list.html', data, request)
Esempio n. 5
0
        base_url = "%sauthors=%s&amp;" % (
            base_url,
            ",".join([str(pk) for pk in authors.values_list("pk", flat=True)])
        )

    paginator_data = {
        'is_paginated': (objects_list.count > per_page),
        'pages': objects_list.num_pages,
        'page': show_page,
        'has_previous': page_objects.has_previous(),
        'has_next': page_objects.has_next(),
        'previous': page_objects.previous_page_number(),
        'next': page_objects.next_page_number(),
        'base_url': base_url,
    }
    paginator_context = functions.setup_paginator(paginator_data)

    ###################################

    initial = {
        'email_notify': thread.is_subscribed_by(request.user)
    }

    #maybe load draft
    if request.user.is_authenticated():
        #todo: refactor into methor on thread
        drafts = models.DraftAnswer.objects.filter(
            author=request.user,
            thread=thread
        )
        if drafts.count() > 0:
Esempio n. 6
0
def tag_list(request):  # view showing a listing of available tags - plain list

    tag_list_type = openode_settings.TAG_LIST_FORMAT

    if tag_list_type == 'list':

        stag = ""
        sortby = request.GET.get('sort', 'used')
        try:
            page = int(request.GET.get('page', '1'))
        except ValueError:
            page = 1

        stag = request.GET.get("query", "").strip()
        if stag != '':
            objects_list = Paginator(
                Tag.objects.valid_tags().filter(deleted=False, name__icontains=stag).exclude(used_count=0),
                DEFAULT_PAGE_SIZE
            )
        else:
            if sortby == "name":
                objects_list = Paginator(Tag.objects.valid_tags().filter(deleted=False).exclude(used_count=0).order_by("name"), DEFAULT_PAGE_SIZE)
            else:
                objects_list = Paginator(Tag.objects.valid_tags().filter(deleted=False).exclude(used_count=0).order_by("-used_count"), DEFAULT_PAGE_SIZE)

        try:
            tags = objects_list.page(page)
        except (EmptyPage, InvalidPage):
            tags = objects_list.page(objects_list.num_pages)

        paginator_data = {
            'is_paginated': bool(objects_list.count > DEFAULT_PAGE_SIZE),
            'pages': objects_list.num_pages,
            'page': page,
            'has_previous': tags.has_previous(),
            'has_next': tags.has_next(),
            'previous': tags.previous_page_number(),
            'next': tags.next_page_number(),
            'base_url': reverse('tags') + '?sort=%s&amp;' % sortby
        }
        paginator_context = setup_paginator(paginator_data)
        data = {
            'active_tab': 'tags',
            'page_class': 'tags-page',
            'tags': tags,
            'tag_list_type': tag_list_type,
            'stag': stag,
            'tab_id': sortby,
            'keywords': stag,
            'paginator_context': paginator_context,
        }

    else:

        stag = ""
        sortby = request.GET.get('sort', 'name')

        if request.method == "GET":
            stag = request.GET.get("query", "").strip()
            if stag != '':
                tags = Tag.objects.filter(deleted=False, name__icontains=stag).exclude(used_count=0)
            else:
                if sortby == "name":
                    tags = Tag.objects.all().filter(deleted=False).exclude(used_count=0).order_by("name")
                else:
                    tags = Tag.objects.all().filter(deleted=False).exclude(used_count=0).order_by("-used_count")

        font_size = extra_tags.get_tag_font_size(tags)

        data = {
            'active_tab': 'tags',
            'page_class': 'tags-page',
            'tags': tags,
            'tag_list_type': tag_list_type,
            'font_size': font_size,
            'stag': stag,
            'tab_id': sortby,
            'keywords': stag,
            'search_state': SearchState(*[None for x in range(7)])
        }

    return render_into_skin('tag_list.html', data, request)
Esempio n. 7
0
def organization_detail(request, organization_id, organization_slug):
    if not request.user.is_authenticated():
        return render_forbidden(request)

    user_acceptance_level = 'closed'
    user_membership_level = 'none'
    try:
        organization = models.Organization.objects.get(id=organization_id)
        user_acceptance_level = organization.get_openness_level_for_user(
                                                                    request.user
                                                                )
    except models.Organization.DoesNotExist:
        raise Http404

    ################################################################
    # upload organization logo

    logo_form = OrganizationLogoForm(instance=organization)
    if request.method == "POST":
        logo_form = OrganizationLogoForm(request.POST, request.FILES, instance=organization)
        if logo_form.is_valid():
            logo_form.save()
            return HttpResponseRedirect(request.path)

    ################################################################

    if organization_slug == slugify(organization.title):
        users = models.User.objects.exclude(status='b')
        #filter users by full organization memberships
        #todo: refactor as Organization.get_full_members()
        full_level = models.OrganizationMembership.FULL
        memberships = models.OrganizationMembership.objects.filter(
                                        organization=organization, level=full_level
                                    )
        user_ids = memberships.values_list('user__id', flat=True)
        users = users.filter(id__in=user_ids)
        if request.user.is_authenticated():
            membership = request.user.get_organization_membership(organization)
            if membership:
                user_membership_level = membership.get_level_display()

    else:
        organization_page_url = reverse(
                            'organization_detail',
                            kwargs={
                                'organization_id': organization.id,
                                'organization_slug': slugify(organization.title)
                            }
                        )
        return HttpResponseRedirect(organization_page_url)

    sortby = request.GET.get('sort', 'last_name')

    try:
        page = int(request.GET.get('page', '1'))
    except ValueError:
        page = 1

    search_query = request.REQUEST.get('query',  "")
    if search_query == "":
        if sortby == "newest":
            order_by_parameter = ('-date_joined',)
        elif sortby == "last":
            order_by_parameter = ('date_joined',)
        elif sortby == "user":
            order_by_parameter = ('last_name', 'first_name')
        else:
            # default
            order_by_parameter = ('last_name', 'first_name')

        objects_list = Paginator(
                            users.order_by(*order_by_parameter),
                            const.USERS_PAGE_SIZE
                        )
        base_url = request.path + '?sort=%s&amp;' % sortby
    else:
        sortby = "last_name"
        matching_users = models.get_users_by_text_query(search_query, users)
        objects_list = Paginator(
                            matching_users.order_by(*('last_name', 'first_name')),
                            const.USERS_PAGE_SIZE
                        )
        base_url = request.path + '?name=%s&amp;sort=%s&amp;' % (search_query, sortby)

    try:
        users_page = objects_list.page(page)
    except (EmptyPage, InvalidPage):
        users_page = objects_list.page(objects_list.num_pages)

    paginator_data = {
        'is_paginated': bool(objects_list.count > const.USERS_PAGE_SIZE),
        'pages': objects_list.num_pages,
        'page': page,
        'has_previous': users_page.has_previous(),
        'has_next': users_page.has_next(),
        'previous': users_page.previous_page_number(),
        'next': users_page.next_page_number(),
        'base_url': base_url
    }
    paginator_context = functions.setup_paginator(paginator_data)

    #todo: cleanup this branched code after organizations are migrated to auth_organization
    user_organizations = get_organizations().all()
    if len(user_organizations) <= 1:
        user_organizations = None
    organization_openness_choices = models.Organization().get_openness_choices()

    data = {
        'active_tab': 'users',
        'page_class': 'users-page',
        'users': users_page,
        'organization': organization,
        'search_query': search_query,
        'tab_id': sortby,
        'paginator_context': paginator_context,
        'user_acceptance_level': user_acceptance_level,
        'user_membership_level': user_membership_level,
        'user_organizations': user_organizations,
        'organization_openness_choices': organization_openness_choices,
        "logo_form": logo_form,
    }

    return render_into_skin('organization_detail.html', data, request)
Esempio n. 8
0
def show_users(request):
    """Users view, including listing of users by organization"""
    if not request.user.is_authenticated():
        return render_forbidden(request)

    users = models.User.objects.filter(is_active=True, is_hidden=False).exclude(status='b')
    organization = None
    logo_form = None
    sortby = request.GET.get('sort', 'last_name')

    try:
        page = int(request.GET.get('page', '1'))
    except ValueError:
        page = 1

    search_query = request.REQUEST.get('query',  "")
    if search_query == "":
        if sortby == "newest":
            order_by_parameter = ('-date_joined',)
        elif sortby == "last":
            order_by_parameter = ('date_joined',)
        elif sortby == "last_name":
            order_by_parameter = ('last_name', 'first_name')
        else:
            # default
            order_by_parameter = ('last_name', 'first_name')

        objects_list = Paginator(
                            users.order_by(*order_by_parameter),
                            const.USERS_PAGE_SIZE
                        )
        base_url = request.path + '?sort=%s&amp;' % sortby
    else:
        sortby = "last_name"
        matching_users = models.get_users_by_text_query(search_query, users)
        objects_list = Paginator(
                            matching_users.order_by(*('last_name', 'first_name')),
                            const.USERS_PAGE_SIZE
                        )
        base_url = request.path + '?name=%s&amp;sort=%s&amp;' % (search_query, sortby)

    try:
        users_page = objects_list.page(page)
    except (EmptyPage, InvalidPage):
        users_page = objects_list.page(objects_list.num_pages)

    paginator_data = {
        'is_paginated': bool(objects_list.count > const.USERS_PAGE_SIZE),
        'pages': objects_list.num_pages,
        'page': page,
        'has_previous': users_page.has_previous(),
        'has_next': users_page.has_next(),
        'previous': users_page.previous_page_number(),
        'next': users_page.next_page_number(),
        'base_url': base_url
    }
    paginator_context = functions.setup_paginator(paginator_data)

    data = {
        'active_tab': 'users',
        'page_class': 'users-page',
        'users': users_page,
        'organization': organization,
        'search_query': search_query,
        'tab_id': sortby,
        'paginator_context': paginator_context,
        "logo_form": logo_form,
    }

    return render_into_skin('user_list.html', data, request)
Esempio n. 9
0
def tag_list(request):  # view showing a listing of available tags - plain list

    tag_list_type = openode_settings.TAG_LIST_FORMAT

    if tag_list_type == 'list':

        stag = ""
        sortby = request.GET.get('sort', 'used')
        try:
            page = int(request.GET.get('page', '1'))
        except ValueError:
            page = 1

        stag = request.GET.get("query", "").strip()
        if stag != '':
            objects_list = Paginator(
                Tag.objects.valid_tags().filter(
                    deleted=False, name__icontains=stag).exclude(used_count=0),
                DEFAULT_PAGE_SIZE)
        else:
            if sortby == "name":
                objects_list = Paginator(
                    Tag.objects.valid_tags().filter(deleted=False).exclude(
                        used_count=0).order_by("name"), DEFAULT_PAGE_SIZE)
            else:
                objects_list = Paginator(
                    Tag.objects.valid_tags().filter(deleted=False).exclude(
                        used_count=0).order_by("-used_count"),
                    DEFAULT_PAGE_SIZE)

        try:
            tags = objects_list.page(page)
        except (EmptyPage, InvalidPage):
            tags = objects_list.page(objects_list.num_pages)

        paginator_data = {
            'is_paginated': bool(objects_list.count > DEFAULT_PAGE_SIZE),
            'pages': objects_list.num_pages,
            'page': page,
            'has_previous': tags.has_previous(),
            'has_next': tags.has_next(),
            'previous': tags.previous_page_number(),
            'next': tags.next_page_number(),
            'base_url': reverse('tags') + '?sort=%s&amp;' % sortby
        }
        paginator_context = setup_paginator(paginator_data)
        data = {
            'active_tab': 'tags',
            'page_class': 'tags-page',
            'tags': tags,
            'tag_list_type': tag_list_type,
            'stag': stag,
            'tab_id': sortby,
            'keywords': stag,
            'paginator_context': paginator_context,
        }

    else:

        stag = ""
        sortby = request.GET.get('sort', 'name')

        if request.method == "GET":
            stag = request.GET.get("query", "").strip()
            if stag != '':
                tags = Tag.objects.filter(
                    deleted=False, name__icontains=stag).exclude(used_count=0)
            else:
                if sortby == "name":
                    tags = Tag.objects.all().filter(deleted=False).exclude(
                        used_count=0).order_by("name")
                else:
                    tags = Tag.objects.all().filter(deleted=False).exclude(
                        used_count=0).order_by("-used_count")

        font_size = extra_tags.get_tag_font_size(tags)

        data = {
            'active_tab': 'tags',
            'page_class': 'tags-page',
            'tags': tags,
            'tag_list_type': tag_list_type,
            'font_size': font_size,
            'stag': stag,
            'tab_id': sortby,
            'keywords': stag,
            'search_state': SearchState(*[None for x in range(7)])
        }

    return render_into_skin('tag_list.html', data, request)
Esempio n. 10
0
    base_url = request.path + '?sort=%s&amp;' % answer_sort_method
    if authors:
        base_url = "%sauthors=%s&amp;" % (base_url, ",".join(
            [str(pk) for pk in authors.values_list("pk", flat=True)]))

    paginator_data = {
        'is_paginated': (objects_list.count > per_page),
        'pages': objects_list.num_pages,
        'page': show_page,
        'has_previous': page_objects.has_previous(),
        'has_next': page_objects.has_next(),
        'previous': page_objects.previous_page_number(),
        'next': page_objects.next_page_number(),
        'base_url': base_url,
    }
    paginator_context = functions.setup_paginator(paginator_data)

    ###################################

    initial = {'email_notify': thread.is_subscribed_by(request.user)}

    # maybe load draft
    if request.user.is_authenticated():
        # todo: refactor into methor on thread
        drafts = models.DraftAnswer.objects.filter(author=request.user,
                                                   thread=thread)
        if drafts.count() > 0:
            initial['text'] = drafts[0].text

    # answer form
    if request.method == "POST":