def handle(self, *args, **options):
        path = options.get('file', None)
        dry_run = options.get('dry-run')

        if not path:
            raise CommandError('Option --file must be specified')

        try:
            f = open(path)
        except IOError:
            raise CommandError('Invalid file path.')

        now = timezone.now()
        former_employee_descr = 'An automatic vouch for being a former Mozilla employee.'
        employee_descr = 'An automatic vouch for being a Mozilla employee.'

        count = 0
        for email in f:
            u = get_object_or_none(UserProfile, user__email=email.strip())
            if u:
                vouches = u.vouches_received.all()
                already_vouched = vouches.filter(
                    Q(description=employee_descr)
                    | Q(description=former_employee_descr),
                    autovouch=True)
                if not already_vouched.exists():
                    if not dry_run:
                        Vouch.objects.create(voucher=None,
                                             vouchee=u,
                                             autovouch=True,
                                             date=now,
                                             description=former_employee_descr)
                    count = count + 1

        print "%d former staff members vouched." % count
    def handle(self, *args, **options):
        path = options.get('file', None)
        dry_run = options.get('dry-run')

        if not path:
            raise CommandError('Option --file must be specified')

        try:
            f = open(path)
        except IOError:
            raise CommandError('Invalid file path.')

        now = timezone.now()
        former_employee_descr = 'An automatic vouch for being a former Mozilla employee.'
        employee_descr = 'An automatic vouch for being a Mozilla employee.'

        count = 0
        for email in f:
            u = get_object_or_none(UserProfile, user__email=email.strip())
            if u:
                vouches = u.vouches_received.all()
                already_vouched = vouches.filter(
                    Q(description=employee_descr) |
                    Q(description=former_employee_descr),
                    autovouch=True
                )
                if not already_vouched.exists():
                    if not dry_run:
                        Vouch.objects.create(
                            voucher=None,
                            vouchee=u,
                            autovouch=True,
                            date=now,
                            description=former_employee_descr
                        )
                    count = count + 1

        print "%d former staff members vouched." % count
示例#3
0
def show(request, url, alias_model, template):
    """List all members in this group."""
    group_alias = get_object_or_404(alias_model, url=url)
    if group_alias.alias.url != url:
        return redirect('groups:show_group', url=group_alias.alias.url)

    is_curator = False
    is_manager = request.user.userprofile.is_manager
    is_pending = False
    show_delete_group_button = False
    membership_filter_form = MembershipFilterForm(request.GET)

    group = group_alias.alias
    profile = request.user.userprofile
    in_group = group.has_member(profile)
    memberships = group.members.all()
    data = {}

    if isinstance(group, Group):
        # Has the user accepted the group terms
        if group.terms:
            membership = get_object_or_none(
                GroupMembership,
                group=group,
                userprofile=profile,
                status=GroupMembership.PENDING_TERMS)
            if membership:
                return redirect(
                    reverse('groups:review_terms', args=[group.url]))

        # Is this user's membership pending?
        is_pending = group.has_pending_member(profile)

        is_curator = is_manager or (request.user.userprofile
                                    in group.curators.all())

        # initialize the form only when the group is moderated and user is curator of the group
        if is_curator and group.accepting_new_members == 'by_request':
            membership_filter_form = MembershipFilterForm(request.GET)
        else:
            membership_filter_form = None

        if is_curator:
            statuses = [GroupMembership.MEMBER, GroupMembership.PENDING]
            if membership_filter_form and membership_filter_form.is_valid():
                filtr = membership_filter_form.cleaned_data['filtr']
                if filtr == 'members':
                    statuses = [GroupMembership.MEMBER]
                elif filtr == 'pending_members':
                    statuses = [GroupMembership.PENDING]

            memberships = group.groupmembership_set.filter(status__in=statuses)

            # Curators can delete their group if there are no other members.
            show_delete_group_button = is_curator and group.members.all(
            ).count() == 1

        else:
            # only show full members, or this user
            memberships = group.groupmembership_set.filter(
                Q(status=GroupMembership.MEMBER) | Q(userprofile=profile))

        # Order by UserProfile.Meta.ordering
        memberships = memberships.order_by('userprofile')

        # Find the most common skills of the group members.
        # Order by popularity in the group.
        shared_skill_ids = (group.members.filter(
            groupmembership__status=GroupMembership.MEMBER).values_list(
                'skills', flat=True))

        count_skills = defaultdict(int)
        for skill_id in shared_skill_ids:
            count_skills[skill_id] += 1
        common_skills_ids = [
            k for k, v in sorted(
                count_skills.items(), key=lambda x: x[1], reverse=True)
            if count_skills[k] > 1
        ]

        # Translate ids to Skills preserving order.
        skills = [
            Skill.objects.get(id=skill_id) for skill_id in common_skills_ids
            if skill_id
        ]

        data.update(skills=skills,
                    membership_filter_form=membership_filter_form)

    page = request.GET.get('page', 1)
    paginator = Paginator(memberships, settings.ITEMS_PER_PAGE)

    try:
        people = paginator.page(page)
    except PageNotAnInteger:
        people = paginator.page(1)
    except EmptyPage:
        people = paginator.page(paginator.num_pages)

    show_pagination = paginator.count > settings.ITEMS_PER_PAGE

    extra_data = dict(
        people=people,
        group=group,
        in_group=in_group,
        is_curator=is_curator,
        is_pending=is_pending,
        show_pagination=show_pagination,
        show_delete_group_button=show_delete_group_button,
        show_join_button=group.user_can_join(request.user.userprofile),
        show_leave_button=group.user_can_leave(request.user.userprofile),
        members=group.member_count,
    )

    data.update(extra_data)

    return render(request, template, data)
示例#4
0
def show(request, url, alias_model, template):
    """List all members in this group."""
    group_alias = get_object_or_404(alias_model, url=url)
    if group_alias.alias.url != url:
        return redirect('groups:show_group', url=group_alias.alias.url)

    is_curator = False
    is_manager = request.user.userprofile.is_manager
    is_pending = False
    show_delete_group_button = False
    membership_filter_form = MembershipFilterForm(request.GET)

    group = group_alias.alias
    profile = request.user.userprofile
    in_group = group.has_member(profile)
    memberships = group.members.all()
    data = {}

    if isinstance(group, Group):
        # Has the user accepted the group terms
        if group.terms:
            membership = get_object_or_none(GroupMembership, group=group, userprofile=profile,
                                            status=GroupMembership.PENDING_TERMS)
            if membership:
                return redirect(reverse('groups:review_terms', args=[group.url]))

        # Is this user's membership pending?
        is_pending = group.has_pending_member(profile)

        is_curator = is_manager or (request.user.userprofile in group.curators.all())

        # initialize the form only when the group is moderated and user is curator of the group
        if is_curator and group.accepting_new_members == 'by_request':
            membership_filter_form = MembershipFilterForm(request.GET)
        else:
            membership_filter_form = None

        if is_curator:
            statuses = [GroupMembership.MEMBER, GroupMembership.PENDING]
            if membership_filter_form and membership_filter_form.is_valid():
                filtr = membership_filter_form.cleaned_data['filtr']
                if filtr == 'members':
                    statuses = [GroupMembership.MEMBER]
                elif filtr == 'pending_members':
                    statuses = [GroupMembership.PENDING]

            memberships = group.groupmembership_set.filter(status__in=statuses)

            # Curators can delete their group if there are no other members.
            show_delete_group_button = is_curator and group.members.all().count() == 1

        else:
            # only show full members, or this user
            memberships = group.groupmembership_set.filter(
                Q(status=GroupMembership.MEMBER) | Q(userprofile=profile))

        # Order by UserProfile.Meta.ordering
        memberships = memberships.order_by('userprofile')

        # Find the most common skills of the group members.
        # Order by popularity in the group.
        shared_skill_ids = (group.members.filter(groupmembership__status=GroupMembership.MEMBER)
                            .values_list('skills', flat=True))

        count_skills = defaultdict(int)
        for skill_id in shared_skill_ids:
            count_skills[skill_id] += 1
        common_skills_ids = [k for k, v in sorted(count_skills.items(),
                                                  key=lambda x: x[1],
                                                  reverse=True)
                             if count_skills[k] > 1]

        # Translate ids to Skills preserving order.
        skills = [Skill.objects.get(id=skill_id) for skill_id in common_skills_ids if skill_id]

        data.update(skills=skills, membership_filter_form=membership_filter_form)

    page = request.GET.get('page', 1)
    paginator = Paginator(memberships, settings.ITEMS_PER_PAGE)

    try:
        people = paginator.page(page)
    except PageNotAnInteger:
        people = paginator.page(1)
    except EmptyPage:
        people = paginator.page(paginator.num_pages)

    show_pagination = paginator.count > settings.ITEMS_PER_PAGE

    extra_data = dict(people=people,
                      group=group,
                      in_group=in_group,
                      is_curator=is_curator,
                      is_pending=is_pending,
                      show_pagination=show_pagination,
                      show_delete_group_button=show_delete_group_button,
                      show_join_button=group.user_can_join(request.user.userprofile),
                      show_leave_button=group.user_can_leave(request.user.userprofile),
                      members=group.member_count,
                      )

    data.update(extra_data)

    return render(request, template, data)