Ejemplo n.º 1
0
def access_profile_aliases_view(request):
    person = request.user.person

    if request.method == 'POST':
        domain = get_object_or_404(
            EmailAliasDomain.objects.all().distinct(),
            domain_name=request.POST.get('create_new_password_for_domain'),
            emailaliastype__email_aliases__person=request.user.person,
        )

        newly_created_password, unused = SMTPPassword.create_for_domain_and_person(
            domain, request.user.person)
    else:
        newly_created_password = None

    aliases_by_domain = [(
        domain,
        SMTPServer.objects.filter(domains=domain).exists(),
        SMTPPassword.objects.filter(person=request.user.person,
                                    smtp_server__domains=domain),
        aliases,
    ) for (domain, aliases) in groupby_strict(
        person.email_aliases.all().order_by('domain__domain_name'),
        lambda alias: alias.domain)]

    vars = dict(
        aliases_by_domain=aliases_by_domain,
        newly_created_password=newly_created_password,
        person=person,
    )

    return render(request, 'access_profile_aliases_view.jade', vars)
Ejemplo n.º 2
0
def core_frontpage_view(request,
                        template='core_frontpage_view.jade',
                        include_past_events=False):
    t = now()

    if include_past_events:
        past_events = events(public=True, end_time__lte=t)
    else:
        past_events = Event.objects.none()

    current_events = events(public=True, start_time__lte=t, end_time__gt=t)
    future_events = events((Q(start_time__gt=t) | Q(start_time__isnull=True))
                           & Q(public=True)).order_by('start_time')

    past_events_rows_by_year = [
        (year, list(groups_of_n(year_events, 4)))
        for (year, year_events) in groupby_strict(past_events, get_year)
    ]

    vars = dict(
        carousel_slides=CarouselSlide.get_active_slides(),
        current_events_rows=list(groups_of_n(current_events, 4)),
        future_events_rows=list(groups_of_n(future_events, 4)),
        past_events_rows_by_year=past_events_rows_by_year,
    )

    return render(request, template, vars)
Ejemplo n.º 3
0
def listings_listing_view(request,
                          listing_hostname,
                          include_past_events=False):
    listing = get_object_or_404(Listing, hostname=listing_hostname)
    t = now()

    if include_past_events:
        past_events = listing.get_events(public=True, end_time__lte=t)
    else:
        past_events = []

    current_events = listing.get_events(public=True,
                                        start_time__lte=t,
                                        end_time__gt=t)
    future_events = listing.get_events(public=True, start_time__gt=t)

    past_events_by_year = groupby_strict(past_events,
                                         lambda event: event.start_time.year)

    vars = dict(
        listing=listing,
        current_events=current_events,
        future_events=future_events,
        past_events_by_year=past_events_by_year,
        show_future_events_heading=future_events
        and (current_events or past_events),
        login_page=True,
    )

    return render(request, 'listings_listing_view.pug', vars)
Ejemplo n.º 4
0
def access_profile_aliases_view(request):
    person = request.user.person

    if request.method == 'POST':
        domain = get_object_or_404(EmailAliasDomain.objects.all().distinct(),
            domain_name=request.POST.get('create_new_password_for_domain'),
            emailaliastype__email_aliases__person=request.user.person,
        )

        newly_created_password, unused = SMTPPassword.create_for_domain_and_person(domain, request.user.person)
    else:
        newly_created_password = None

    aliases_by_domain = [
        (
            domain,
            SMTPServer.objects.filter(domains=domain).exists(),
            SMTPPassword.objects.filter(person=request.user.person, smtp_server__domains=domain),
            aliases,
        )
        for (domain, aliases) in groupby_strict(person.email_aliases.all().order_by('domain__domain_name'), lambda alias: alias.domain)
    ]

    vars = dict(
        aliases_by_domain=aliases_by_domain,
        newly_created_password=newly_created_password,
        person=person,
    )

    return render(request, 'access_profile_aliases_view.jade', vars)
Ejemplo n.º 5
0
def programme_admin_organizers_view(request, vars, event, format='screen'):
    programme_roles = (
        ProgrammeRole.objects.filter(programme__category__event=event)
            .select_related('person')
            .select_related('programme')
            .select_related('role')
            .order_by('person__surname', 'person__first_name', 'programme__title')
    )

    personnel_classes = PersonnelClass.objects.filter(
        event=event,
        role__personnel_class__event=event,
    )
    personnel_class_filters = Filter(request, 'personnel_class').add_objects('role__personnel_class__slug', personnel_classes)
    programme_roles = personnel_class_filters.filter_queryset(programme_roles)

    active_filters = Filter(request, 'active').add_booleans('is_active')
    programme_roles = active_filters.filter_queryset(programme_roles)

    organizers = []
    prs_by_organizer = groupby_strict(programme_roles, lambda pr: pr.person)
    for organizer, prs in prs_by_organizer:
        organizer.current_event_programme_roles = prs
        organizers.append(organizer)

    vars.update(
        active_filters=active_filters,
        export_formats=EXPORT_FORMATS,
        num_organizers=len(organizers),
        num_total_organizers=Person.objects.filter(programme__category__event=event).distinct().count(),
        organizers=organizers,
        personnel_class_filters=personnel_class_filters,
    )

    if format == 'screen':
        return render(request, 'programme_admin_organizers_view.jade', vars)
    elif format == 'txt':
        emails = '\n'.join(programme_roles.order_by('person__email').values_list('person__email', flat=True).distinct())
        return HttpResponse(emails, content_type='text/plain')
    elif format in CSV_EXPORT_FORMATS:
        filename = "{event.slug}_programme_organizers_{timestamp}.{format}".format(
            event=event,
            timestamp=now().strftime('%Y%m%d%H%M%S'),
            format=format,
        )

        return csv_response(event, ProgrammeRole, programme_roles,
            dialect=CSV_EXPORT_FORMATS[format],
            filename=filename,
            m2m_mode='separate_columns',
        )
    else:
        raise NotImplementedError(format)
Ejemplo n.º 6
0
def core_frontpage_view(request):
    t = now()

    past_events = events(public=True, end_time__lte=t)
    current_events = events(public=True, start_time__lte=t, end_time__gt=t)
    future_events = events((Q(start_time__gt=t) | Q(start_time__isnull=True))
                           & Q(public=True)).order_by('start_time')

    organizations = Organization.objects.filter(public=True)

    past_events_rows_by_year = [
        (year, list(groups_of_n(year_events, 4)))
        for (year, year_events) in groupby_strict(past_events, get_year)
    ]

    vars = dict(
        future_events_rows=list(groups_of_n(future_events, 4)),
        current_events_rows=list(groups_of_n(current_events, 4)),
        past_events_rows_by_year=past_events_rows_by_year,
        organizations_rows=list(groups_of_n(organizations, 4)),
    )

    return render(request, 'core_frontpage_view.jade', vars)
Ejemplo n.º 7
0
def listings_listing_view(request, listing_hostname, include_past_events=False):
    listing = get_object_or_404(Listing, hostname=listing_hostname)
    t = now()

    if include_past_events:
        past_events = listing.get_events(public=True, end_time__lte=t)
    else:
        past_events = []

    current_events = listing.get_events(public=True, start_time__lte=t, end_time__gt=t)
    future_events = listing.get_events(public=True, start_time__gt=t)

    past_events_by_year = groupby_strict(past_events, lambda event: event.start_time.year)

    vars = dict(
        listing=listing,
        current_events=current_events,
        future_events=future_events,
        past_events_by_year=past_events_by_year,
        show_future_events_heading=future_events and (current_events or past_events),
        login_page=True,
    )

    return render(request, 'listings_listing_view.pug', vars)
Ejemplo n.º 8
0
 def _get_sizes(self, event, **kwargs):
     return groupby_strict(
         ShirtSize.objects.filter(type__event=event).order_by("id"),
         lambda ss: ss.type)
Ejemplo n.º 9
0
def core_frontpage_view(request, template='core_frontpage_view.pug', include_past_events=False):
    t = now()

    if include_past_events:
        past_events = events(public=True, end_time__lte=t)
    else:
        past_events = Event.objects.none()

    current_events = events(public=True, start_time__lte=t, end_time__gt=t)
    future_events = events((Q(start_time__gt=t) | Q(start_time__isnull=True)) & Q(public=True)).order_by('start_time')

    past_events_rows_by_year = [(year, list(groups_of_n(year_events, 4))) for (year, year_events) in groupby_strict(past_events, get_year)]

    vars = dict(
        carousel_slides=CarouselSlide.get_active_slides(),
        current_events_rows=list(groups_of_n(current_events, 4)),
        future_events_rows=list(groups_of_n(future_events, 4)),
        past_events_rows_by_year=past_events_rows_by_year,
    )

    return render(request, template, vars)
Ejemplo n.º 10
0
def badges_admin_badges_view(request, vars, event, personnel_class_slug=None):
    if request.method == 'POST':
        form = initialize_form(HiddenBadgeCrouchingForm, request)

        if form.is_valid():
            badge = get_object_or_404(BadgeManagementProxy,
                                      pk=form.cleaned_data['badge_id'])

            if 'revoke-badge' in request.POST:
                if not badge.can_revoke:
                    messages.error(
                        request,
                        _('This badge cannot be revoked here because it is managed '
                          'by either the labour or the programme management system.'
                          ))
                elif badge.is_revoked:
                    messages.warning(request,
                                     _('The badge had already been revoked.'))
                else:
                    badge.revoke(user=request.user)
                    messages.success(request,
                                     _('The badge has now been revoked.'))

            elif 'clear-revoked' in request.POST:
                if not badge.can_unrevoke:
                    messages.error(
                        request,
                        _('This revoked badge cannot be un-revoked here because it is managed '
                          'by either the labour or the programme management system.'
                          ))
                if not badge.is_revoked:
                    message.warning(request, _('The badge was already valid.'))
                else:
                    badge.unrevoke()
                    messages.success(request,
                                     _('The badge has been restored.'))

            elif 'mark-printed' in request.POST:
                badge.is_printed_separately = True
                badge.save()
                messages.success(request,
                                 'Badge on merkitty erikseen tulostetuksi.')

            elif 'clear-printed' in request.POST:
                badge.is_printed_separately = False
                badge.save()
                messages.success(
                    request,
                    'Badgesta on pyyhitty erikseen tulostettu -merkintä.')

            else:
                messages.error(request, 'Kelvoton pyyntö.')

            return redirect(request.path)

    else:
        format = request.GET.get('format', 'screen')
        badge_criteria = dict(personnel_class__event=event)
        active_filter = None
        viewing_yoink_list = False
        template_subtype = 'normal'

        if personnel_class_slug is not None:
            if personnel_class_slug == 'yoink':
                viewing_yoink_list = True
                active_filter = badges_to_yoink_fake_personnel_class
                badge_criteria.update(revoked_at__isnull=False)
                template_subtype = 'yoink'
            else:
                active_filter = get_object_or_404(PersonnelClass,
                                                  event=event,
                                                  slug=personnel_class_slug)
                badge_criteria.update(personnel_class=active_filter)

        # Non-yoink paper lists only show non-revoked badges.
        # Yoink list only shows revoked badges.
        if format != 'screen' and personnel_class_slug != 'yoink':
            badge_criteria.update(revoked_at__isnull=True)

        badges = BadgeManagementProxy.objects.filter(
            **badge_criteria).order_by(*BADGE_ORDER)

        if format in CSV_EXPORT_FORMATS:
            filename = "{event.slug}-badges-{badge_filter}{timestamp}.{format}".format(
                event=event,
                badge_filter="{personnel_class_slug}-".format(
                    personnel_class_slug=personnel_class_slug)
                if personnel_class_slug is not None else '',
                timestamp=timezone.now().strftime('%Y%m%d%H%M%S'),
                format=format,
            )

            return csv_response(event,
                                Badge,
                                badges,
                                filename=filename,
                                dialect=CSV_EXPORT_FORMATS[format])
        elif format in BADGE_LIST_TEMPLATES:
            page_template = BADGE_LIST_TEMPLATES[format][template_subtype]

            title = "{event.name} – {qualifier}".format(
                event=event,
                qualifier=active_filter.name if active_filter else 'Nimilista',
            )

            filters = [(personnel_class_slug == personnel_class.slug,
                        personnel_class)
                       for personnel_class in PersonnelClass.objects.filter(
                           event=event)]

            filters.append(
                (viewing_yoink_list, badges_to_yoink_fake_personnel_class))

            vars.update(
                active_filter=active_filter,
                filters=filters,
                now=timezone.now(),
                title=title,
                should_display_personnel_class=not active_filter
                or personnel_class_slug == 'yoink',
                can_manually_add_badge=personnel_class_slug != 'yoink',
            )

            if personnel_class_slug == 'yoink' and format == 'print':
                badges_by_personnel_class = groupby_strict(
                    badges, lambda badge: badge.personnel_class)

                vars.update(
                    badges_by_personnel_class=badges_by_personnel_class)
            else:
                vars.update(badges=badges)

            return render(request, page_template, vars)
        else:
            raise NotImplementedError(format)
Ejemplo n.º 11
0
def group_programmes_by_start_time(programmes):
    programmes_by_start_time = groupby_strict(programmes, lambda p: p.start_time)
    return [
        (start_time, None, programmes)
        for (start_time, programmes) in programmes_by_start_time
    ]
Ejemplo n.º 12
0
def group_programmes_by_start_time(programmes):
    programmes_by_start_time = groupby_strict(programmes,
                                              lambda p: p.start_time)
    return [(start_time, None, [(programme, None) for programme in programmes])
            for (start_time, programmes) in programmes_by_start_time]
Ejemplo n.º 13
0
 def _get_sizes(self, event, **kwargs):
     return groupby_strict(
         ShirtSize.objects.filter(type__event=event).order_by("id"),
         lambda ss: ss.type
     )
Ejemplo n.º 14
0
def badges_admin_badges_view(request, vars, event, personnel_class_slug=None):
    if request.method == 'POST':
        form = initialize_form(HiddenBadgeCrouchingForm, request)

        if form.is_valid():
            badge = get_object_or_404(BadgeManagementProxy, pk=form.cleaned_data['badge_id'])

            if 'revoke-badge' in request.POST:
                if not badge.can_revoke:
                    messages.error(request, _('This badge cannot be revoked here because it is managed '
                        'by either the labour or the programme management system.'))
                elif badge.is_revoked:
                    messages.warning(request, _('The badge had already been revoked.'))
                else:
                    badge.revoke(user=request.user)
                    messages.success(request, _('The badge has now been revoked.'))

            elif 'clear-revoked' in request.POST:
                if not badge.can_unrevoke:
                    messages.error(request, _('This revoked badge cannot be un-revoked here because it is managed '
                        'by either the labour or the programme management system.'))
                if not badge.is_revoked:
                    message.warning(request, _('The badge was already valid.'))
                else:
                    badge.unrevoke()
                    messages.success(request, _('The badge has been restored.'))

            elif 'mark-printed' in request.POST:
                badge.is_printed_separately = True
                badge.save()
                messages.success(request, 'Badge on merkitty erikseen tulostetuksi.')

            elif 'clear-printed' in request.POST:
                badge.is_printed_separately = False
                badge.save()
                messages.success(request, 'Badgesta on pyyhitty erikseen tulostettu -merkintä.')

            else:
                messages.error(request, 'Kelvoton pyyntö.')

            return redirect(request.path)

    else:
        format = request.GET.get('format', 'screen')
        badge_criteria = dict(personnel_class__event=event)
        active_filter = None
        viewing_yoink_list = False
        template_subtype = 'normal'

        if personnel_class_slug is not None:
            if personnel_class_slug == 'yoink':
                viewing_yoink_list = True
                active_filter = badges_to_yoink_fake_personnel_class
                badge_criteria.update(revoked_at__isnull=False)
                template_subtype = 'yoink'
            else:
                active_filter = get_object_or_404(PersonnelClass, event=event, slug=personnel_class_slug)
                badge_criteria.update(personnel_class=active_filter)

        # Non-yoink paper lists only show non-revoked badges.
        # Yoink list only shows revoked badges.
        if format != 'screen' and personnel_class_slug != 'yoink':
            badge_criteria.update(revoked_at__isnull=True)

        badges = BadgeManagementProxy.objects.filter(**badge_criteria).order_by(*BADGE_ORDER)

        if format in CSV_EXPORT_FORMATS:
            filename = "{event.slug}-badges-{badge_filter}{timestamp}.{format}".format(
                event=event,
                badge_filter="{personnel_class_slug}-".format(personnel_class_slug=personnel_class_slug) if personnel_class_slug is not None else '',
                timestamp=timezone.now().strftime('%Y%m%d%H%M%S'),
                format=format,
            )

            return csv_response(event, Badge, badges, filename=filename, dialect=CSV_EXPORT_FORMATS[format])
        elif format in BADGE_LIST_TEMPLATES:
            page_template = BADGE_LIST_TEMPLATES[format][template_subtype]

            title = "{event.name} – {qualifier}".format(
                event=event,
                qualifier=active_filter.name if active_filter else 'Nimilista',
            )

            filters = [
                (personnel_class_slug == personnel_class.slug, personnel_class)
                for personnel_class in PersonnelClass.objects.filter(event=event)
            ]

            filters.append(
                (viewing_yoink_list, badges_to_yoink_fake_personnel_class)
            )

            vars.update(
                active_filter=active_filter,
                filters=filters,
                now=timezone.now(),
                title=title,
                should_display_personnel_class=not active_filter or personnel_class_slug == 'yoink',
                can_manually_add_badge=personnel_class_slug != 'yoink',
            )

            if personnel_class_slug == 'yoink' and format == 'print':
                badges_by_personnel_class = groupby_strict(badges, lambda badge: badge.personnel_class)

                vars.update(badges_by_personnel_class=badges_by_personnel_class)
            else:
                vars.update(badges=badges)

            return render(request, page_template, vars)
        else:
            raise NotImplementedError(format)
Ejemplo n.º 15
0
def core_frontpage_view(request):
    t = now()

    past_events = events(public=True, end_time__lte=t)
    current_events = events(public=True, start_time__lte=t, end_time__gt=t)
    future_events = events((Q(start_time__gt=t) | Q(start_time__isnull=True)) & Q(public=True)).order_by('start_time')

    organizations = Organization.objects.filter(public=True)

    past_events_rows_by_year = [(year, list(groups_of_n(year_events, 4))) for (year, year_events) in groupby_strict(past_events, get_year)]

    vars = dict(
        future_events_rows=list(groups_of_n(future_events, 4)),
        current_events_rows=list(groups_of_n(current_events, 4)),
        past_events_rows_by_year=past_events_rows_by_year,
        organizations_rows = list(groups_of_n(organizations, 4)),
    )

    return render(request, 'core_frontpage_view.jade', vars)