示例#1
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)
示例#2
0
文件: users.py 项目: JvGinkel/openode
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)
示例#3
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)
示例#4
0
文件: users.py 项目: JvGinkel/openode
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)