コード例 #1
0
ファイル: veranstalter.py プロジェクト: kaymaky/pyfeedback
def index(request):
    if request.user.username != settings.USERNAME_VERANSTALTER:
        return render(request, 'veranstalter/not_authenticated.html')

    data = {}
    veranst = Veranstaltung.objects.get(id=request.session['vid'])

    # TODO: statt Betrachtung der Sichtbarkeit automatisch aktuelles Semester (-> Kalender) annehmen
    if veranst.semester.sichtbarkeit == 'ADM' and Einstellung.get(
            'bestellung_erlaubt') == '1':
        if request.method == 'POST':
            order_form = BestellungModelForm(request.POST, instance=veranst)
            if order_form.is_valid():
                order_form.save()
                return redirect('VerantwortlicherUpdate')
        else:
            order_form = BestellungModelForm(instance=veranst)
        data['order_form'] = order_form
        data['paper_dict'] = past_semester_orders(veranst)

    if veranst.semester.sichtbarkeit != 'ADM':
        try:
            kommentar = Kommentar.objects.get(veranstaltung=veranst)
        except Kommentar.DoesNotExist:
            kommentar = None

        if request.method == 'POST':
            comment_form = KommentarModelForm(request.POST,
                                              instance=kommentar,
                                              veranstaltung=veranst)
            if comment_form.is_valid():
                # TODO: löschen ermöglichen
                kommentar = comment_form.save(commit=False)
                kommentar.veranstaltung = veranst
                kommentar.save()
                messages.success(request,
                                 'Ihre Änderungen wurden gespeichert.')
        else:
            comment_form = KommentarModelForm(instance=kommentar,
                                              veranstaltung=veranst)
        data['comment_form'] = comment_form

    data['veranstaltung'] = veranst
    return render(request, 'veranstalter/index.html', data)
コード例 #2
0
ファイル: veranstalter.py プロジェクト: d120/pyfeedback
def index(request):
    if request.user.username != settings.USERNAME_VERANSTALTER:
        return render(request, 'veranstalter/not_authenticated.html')

    data = {}
    veranst = Veranstaltung.objects.get(id=request.session['vid'])

    #TODO: statt Betrachtung der Sichtbarkeit automatisch aktuelles Semester (-> Kalender) annehmen
    if veranst.semester.sichtbarkeit == 'ADM' and Einstellung.get('bestellung_erlaubt') == '1':
        if request.method == 'POST':
            order_form = BestellungModelForm(request.POST, instance=veranst)
            if order_form.is_valid():
                order_form.save()
                return redirect('VerantwortlicherUpdate')
        else:
            order_form = BestellungModelForm(instance=veranst)
        data['order_form'] = order_form
        data['paper_dict'] = past_semester_orders(veranst)

    if veranst.semester.sichtbarkeit != 'ADM':
        try:
            kommentar = Kommentar.objects.get(veranstaltung=veranst)
        except Kommentar.DoesNotExist:
            kommentar = None

        if request.method == 'POST':
            comment_form = KommentarModelForm(request.POST, instance=kommentar, veranstaltung=veranst)
            if comment_form.is_valid():
                #TODO: löschen ermöglichen
                kommentar = comment_form.save(commit=False)
                kommentar.veranstaltung = veranst
                kommentar.save()
                messages.success(request, 'Ihre Änderungen wurden gespeichert.')
        else:
            comment_form = KommentarModelForm(instance=kommentar, veranstaltung=veranst)
        data['comment_form'] = comment_form

    data['veranstaltung'] = veranst
    return render(request, 'veranstalter/index.html', data)
コード例 #3
0
ファイル: __init__.py プロジェクト: d120/pyfeedback
def sendmail(request):
    data = {}
    data["semester"] = Semester.objects.order_by("-semester")
    data["vorlagen"] = Mailvorlage.objects.all()

    if request.method == "POST":
        try:
            semester = Semester.objects.get(semester=request.POST["semester"])
            data["recipient"] = request.POST["recipient"]
            data["subject"] = request.POST["subject"]
            data["body"] = request.POST["body"]
        except (Semester.DoesNotExist, KeyError):
            return HttpResponseRedirect(reverse("sendmail"))

        data["semester_selected"] = semester
        data["subject_rendered"] = "Evaluation: %s" % data["subject"]

        veranstaltungen = Veranstaltung.objects.filter(semester=semester)
        if data["recipient"] == "cur_sem_missing_order":
            veranstaltungen = veranstaltungen.filter(anzahl=None, evaluieren=True)
        elif data["recipient"] == "cur_sem_ordert":
            veranstaltungen = veranstaltungen.filter(evaluieren=True, anzahl__gt=0)
        elif data["recipient"] == "cur_sem_results":
            # Veranstaltungen ohne Ergebnisse ausfiltern
            flt = {str("ergebnis" + data["semester_selected"].fragebogen): None}
            veranstaltungen = veranstaltungen.exclude(**flt)

        link_veranstalter = "https://www.fachschaft.informatik.tu-darmstadt.de%s" % reverse("veranstalter-login")
        link_suffix_format = "?vid=%d&token=%s"
        demo_context = RequestContext(
            request,
            {
                "veranstaltung": "Grundlagen der Agrarphilosophie I",
                "link_veranstalter": link_veranstalter + (link_suffix_format % (1337, "0123456789abcdef")),
            },
        )

        if "uebernehmen" in request.POST:
            try:
                vorlage = Mailvorlage.objects.get(id=int(request.POST["vorlage"]))
                data["subject"] = vorlage.subject
                data["body"] = vorlage.body
            except (Mailvorlage.DoesNotExist, KeyError, ValueError):
                return HttpResponseRedirect(reverse("sendmail"))

        elif "vorschau" in request.POST:
            data["vorschau"] = True
            data["from"] = settings.DEFAULT_FROM_EMAIL
            data["to"] = "Veranstalter von %d Veranstaltungen" % veranstaltungen.count()
            data["body_rendered"] = tools.render_email(data["body"], demo_context)

            if data["recipient"] == "cur_sem_missing_order":
                if Einstellung.get("bestellung_erlaubt") == "0":
                    messages.warning(
                        request,
                        u"Bestellungen sind aktuell nicht erlaubt! Bist du "
                        + u"sicher, dass du trotzdem die Dozenten anschreiben willst, "
                        + u"die noch nicht bestellt haben?",
                    )
            elif data["recipient"] == "cur_sem_results":
                if semester.sichtbarkeit != "VER":
                    messages.warning(
                        request,
                        u"Die Sichtbarkeit der Ergebnisse des ausgewählten "
                        + u'Semesters ist aktuell nicht auf "Veranstalter" '
                        + u"eingestellt! Bist du sicher, dass du trotzdem die "
                        + u"Dozenten anschreiben willst, für deren Veranstaltungen "
                        u"Ergebnisse vorliegen?",
                    )

            return render(request, "intern/sendmail_preview.html", data)

        elif "senden" in request.POST:
            mails = []

            # Mails für die Veranstaltungen
            for v in veranstaltungen:
                subject = data["subject"]
                context = RequestContext(
                    request,
                    {
                        "veranstaltung": v.name,
                        "link_veranstalter": link_veranstalter + (link_suffix_format % (v.id, v.access_token)),
                    },
                )
                body = tools.render_email(data["body"], context)
                recipients = [p.email for p in v.veranstalter.all() if p.email]

                if not recipients:
                    messages.warning(
                        request,
                        (
                            u'An die Veranstalter von "%s" wurde keine Mail '
                            + u"verschickt, da keine Adressen hinterlegt waren."
                        )
                        % v.name,
                    )
                    continue
                mails.append((subject, body, settings.DEFAULT_FROM_EMAIL, recipients))

            # Kopie für das Feedback-Team
            subject = data["subject_rendered"]
            body = tools.render_email(data["body"], demo_context)
            mails.append((subject, body, settings.DEFAULT_FROM_EMAIL, [settings.DEFAULT_FROM_EMAIL]))

            # Mails senden
            send_mass_mail(mails)
            messages.success(request, "%d E-Mails wurden erfolgreich versandt!" % (len(mails) - 1))
            return HttpResponseRedirect(reverse("intern-index"))

    return render(request, "intern/sendmail.html", data)
コード例 #4
0
ファイル: test_models.py プロジェクト: 0xpr03/pyfeedback
 def test_get(self):
     self.assertEqual(Einstellung.get('spam'), self.a.wert)
     self.assertEqual(Einstellung.get('sausage'), self.b.wert)
コード例 #5
0
ファイル: __init__.py プロジェクト: kaymaky/pyfeedback
def sendmail(request):
    data = {}
    data['semester'] = Semester.objects.order_by('-semester')
    data['vorlagen'] = Mailvorlage.objects.all()

    if request.method == 'POST':
        try:
            semester = Semester.objects.get(semester=request.POST['semester'])
            data['recipient'] = request.POST['recipient']
            data['subject'] = request.POST['subject']
            data['body'] = request.POST['body']
        except (Semester.DoesNotExist, KeyError):
            return HttpResponseRedirect(reverse('sendmail'))

        data['semester_selected'] = semester
        data['subject_rendered'] = "Evaluation: %s" % data['subject']

        veranstaltungen = Veranstaltung.objects.filter(semester=semester)
        if data['recipient'] == 'cur_sem_missing_order':
            veranstaltungen = veranstaltungen.filter(anzahl=None, evaluieren=True)
        elif data['recipient'] == 'cur_sem_ordert':
            veranstaltungen = veranstaltungen.filter(evaluieren=True, anzahl__gt=0)
        elif data['recipient'] == 'cur_sem_results':
            # Veranstaltungen ohne Ergebnisse ausfiltern
            flt = {str('ergebnis'+data['semester_selected'].fragebogen): None}
            veranstaltungen = veranstaltungen.exclude(**flt)

        link_veranstalter = 'https://www.fachschaft.informatik.tu-darmstadt.de%s' % reverse('veranstalter-login')
        link_suffix_format = '?vid=%d&token=%s'
        demo_context = RequestContext(request, {
            'veranstaltung': 'Grundlagen der Agrarphilosophie I',
            'link_veranstalter': link_veranstalter + (link_suffix_format % (1337, '0123456789abcdef')),
        })

        if 'uebernehmen' in request.POST:
            try:
                vorlage = Mailvorlage.objects.get(id=int(request.POST['vorlage']))
                data['subject'] = vorlage.subject
                data['body'] = vorlage.body
            except (Mailvorlage.DoesNotExist, KeyError, ValueError):
                return HttpResponseRedirect(reverse('sendmail'))

        elif 'vorschau' in request.POST:
            data['vorschau'] = True
            data['from'] = settings.DEFAULT_FROM_EMAIL
            data['to'] = "Veranstalter von %d Veranstaltungen" % veranstaltungen.count()
            data['body_rendered'] = tools.render_email(data['body'], demo_context)

            if data['recipient'] == 'cur_sem_missing_order':
                if Einstellung.get('bestellung_erlaubt') == '0':
                    messages.warning(request, u'Bestellungen sind aktuell nicht erlaubt! Bist du ' +
                                     u'sicher, dass du trotzdem die Dozenten anschreiben willst, ' +
                                     u'die noch nicht bestellt haben?')
            elif data['recipient'] == 'cur_sem_results':
                if semester.sichtbarkeit != 'VER':
                    messages.warning(request, u'Die Sichtbarkeit der Ergebnisse des ausgewählten ' +
                                     u'Semesters ist aktuell nicht auf "Veranstalter" ' +
                                     u'eingestellt! Bist du sicher, dass du trotzdem die ' +
                                     u'Dozenten anschreiben willst, für deren Veranstaltungen '
                                     u'Ergebnisse vorliegen?')

            return render(request, 'intern/sendmail_preview.html', data)

        elif 'senden' in request.POST:
            mails = []

            # Mails für die Veranstaltungen
            for v in veranstaltungen:
                subject = data['subject']
                context = RequestContext(request, {
                    'veranstaltung': v.name,
                    'link_veranstalter': link_veranstalter + (link_suffix_format %
                                                              (v.id, v.access_token)),
                })
                body = tools.render_email(data['body'], context)
                recipients = [p.email for p in v.veranstalter.all() if p.email]

                if not recipients:
                    messages.warning(request, (u'An die Veranstalter von "%s" wurde keine Mail ' +
                                     u'verschickt, da keine Adressen hinterlegt waren.') % v.name)
                    continue
                mails.append((subject, body, settings.DEFAULT_FROM_EMAIL, recipients))

            # Kopie für das Feedback-Team
            subject = data['subject_rendered']
            body = tools.render_email(data['body'], demo_context)
            mails.append((subject, body, settings.DEFAULT_FROM_EMAIL, [settings.DEFAULT_FROM_EMAIL]))

            # Mails senden
            send_mass_mail(mails)
            messages.success(request, '%d E-Mails wurden erfolgreich versandt!' % (len(mails)-1))
            return HttpResponseRedirect(reverse('intern-index'))

    return render(request, 'intern/sendmail.html', data)
コード例 #6
0
def sendmail(request):
    """Die View-Funktion für den Mailversand."""
    data = {
        'semester': Semester.objects.order_by('-semester'),
        'vorlagen': Mailvorlage.objects.all(),
    }

    status_choices, tutoren_choices = set_up_choices()
    data['veranstaltung_status_choices'] = status_choices
    data['tutoren_choices'] = tutoren_choices

    if request.method == 'POST':
        
        try:
            semester = Semester.objects.get(semester=request.POST['semester'])
            data['subject'] = request.POST['subject']
            data['body'] = request.POST['body']
            data['tutoren'] = request.POST['tutoren']

            if 'recipient' in request.POST.keys():
                data['recipient'] = process_status_post_data_from(request.POST.getlist('recipient'))
                data['recipient_selected'] = data['recipient']
            elif 'status_values' in request.POST.keys():
                data['recipient'] = ast.literal_eval(request.POST.get('status_values'))
            elif 'uebernehmen' not in request.POST:
                return HttpResponseRedirect(reverse('sendmail'))

        except (Semester.DoesNotExist, KeyError):
            return HttpResponseRedirect(reverse('sendmail'))

        data['semester_selected'] = semester
        data['subject_rendered'] = "Evaluation: %s" % data['subject']
        
        if 'uebernehmen' in request.POST:
            try:
                vorlage = Mailvorlage.objects.get(id=int(request.POST['vorlage']))
                data['subject'] = vorlage.subject
                data['body'] = vorlage.body
       
            except (Mailvorlage.DoesNotExist, KeyError, ValueError):
                return HttpResponseRedirect(reverse('sendmail'))
            return render(request, 'intern/sendmail.html', data)

        veranstaltungen = get_relevant_veranstaltungen(data['recipient'], semester)
        demo_context, link_suffix_format, link_veranstalter = get_demo_context(request)

        
        if 'vorschau' in request.POST:
            data['vorschau'] = True
            data['from'] = settings.DEFAULT_FROM_EMAIL
            data['to'] = "Veranstalter von %d Veranstaltungen" % len(veranstaltungen)
            data['is_tutoren'] = "und den Tutoren dieser Veranstaltungen"
            data['body_rendered'] = tools.render_email(data['body'], demo_context)

            for status in data['recipient']:
                if status <= Veranstaltung.STATUS_BESTELLUNG_LIEGT_VOR:
                    if Einstellung.get('bestellung_erlaubt') == '0':
                        messages.warning(request,
                                         'Bestellungen sind aktuell nicht erlaubt! Bist du ' +
                                         'sicher, dass du trotzdem die Dozenten anschreiben willst, ' +
                                         'die noch nicht bestellt haben?')
                elif status == Veranstaltung.STATUS_ERGEBNISSE_VERSANDT:
                    if semester.sichtbarkeit != 'VER':
                        messages.warning(request,
                                         'Die Sichtbarkeit der Ergebnisse des ausgewählten ' +
                                         'Semesters ist aktuell nicht auf "Veranstalter" ' +
                                         'eingestellt! Bist du sicher, dass du trotzdem die ' +
                                         'Dozenten anschreiben willst, für deren Veranstaltungen '
                                         'Ergebnisse vorliegen?')

            return render(request, 'intern/sendmail_preview.html', data)

        elif 'senden' in request.POST:
            mails = []

            # Mails für die Veranstaltungen
            for v in veranstaltungen:
                subject = data['subject']
                context = RequestContext(request, {
                    'veranstaltung': v.name,
                    'link_veranstalter': link_veranstalter + (link_suffix_format % (v.id, v.access_token)),
                })
                body = tools.render_email(data['body'], context)
                recipients = [person.email for person in v.veranstalter.all() if person.email]

                if data['tutoren'] == 'True':
                    emails = Tutor.objects.filter(veranstaltung=v).values('email')
                    for dic in emails:
                        recipients.append(dic['email'])
                else:
                    add_sekretaerin_mail(recipients, v)

                if not recipients:
                    messages.warning(request,
                                     ('An die Veranstalter von "%s" wurde keine Mail ' +
                                      'verschickt, da keine Adressen hinterlegt waren.') % v.name)
                    continue

                mails.append((subject, body, settings.DEFAULT_FROM_EMAIL, recipients))

            # Kopie für das Feedback-Team
            subject = data['subject_rendered']
            body = tools.render_email(data['body'], demo_context)
            mails.append((subject, body, settings.DEFAULT_FROM_EMAIL, [settings.DEFAULT_FROM_EMAIL]))

            # Mails senden
            send_mass_mail(mails)

            if data['tutoren'] == 'True':
                messages.success(request,
                                 '%d Veranstaltungen wurden erfolgreich, samt Tutoren, benachrichtigt.' % (len(mails)-1))
            else:
                messages.success(request, '%d Veranstaltungen wurden erfolgreich benachrichtigt.' % (len(mails) - 1))
            return HttpResponseRedirect(reverse('intern-index'))

    return render(request, 'intern/sendmail.html', data)
コード例 #7
0
ファイル: test_models.py プロジェクト: d120/pyfeedback
 def test_get(self):
     self.assertEqual(Einstellung.get('spam'), self.a.wert)
     self.assertEqual(Einstellung.get('sausage'), self.b.wert)