Beispiel #1
0
def emailStudents(request):
    db = request.db
    lecture = request.context.lecture
    form = LectureEmailStudents(request)
    if request.method == 'POST' and form.processPostData(request.POST):
        students = lecture.students
        bcc = [s.email for s in students]
        if form['copytotutors']==0:
            bcc.extend([t.email for t in lecture.tutors])
        message = Message(subject=form['subject'],
                sender=request.user.email,
                to= [assistant.email for assistant in lecture.assistants],
                bcc=bcc,
                body=form['body'])
        if request.POST['attachments'] not in ['', None]:
            message.attach(request.POST['attachments'].filename, data=request.POST['attachments'].file)
        try:
            sendMail(message,request)
        except:
            pass
        else:
            request.session.flash('A mail has been sent to all students of this lecture', queue='messages')
            return HTTPFound(location=request.route_url('lecture_edit', lecture_id=lecture.id))
    return {'lecture': lecture,
            'form': form}
Beispiel #2
0
def emailAllUsers(request):
    ttype = request.params.get('type', 'inform_message')
    form = EmailWrongSubject(ttype, request)
    semesterlimit = utils.getSemesterLimit()
    students = request.db.query(models.User).filter(
        models.User.lecture_students.any(
            models.LectureStudent.lecture.has(
                models.Lecture.term >= semesterlimit))).all()
    headers = ['MUESLI-Information']
    table = []
    for s in students:
        table.append(s)
    if request.method == 'POST' and form.processPostData(request.POST):
        message = Message(
            subject=form['subject'],
            sender=(u'%s <%s>' %
                    (request.config['contact']['name'],
                     request.config['contact']['email'])).encode('utf-8'),
            to=[],
            bcc=[s.email for s in students],
            body=form['body'])
        if request.POST['attachments'] not in ['', None]:
            message.attach(request.POST['attachments'].filename,
                           data=request.POST['attachments'].file)
        sendMail(message)
        request.session.flash('A Mail has been send to all students',
                              queue='messages')
    return {
        'form': form,
        'type': ttype,
        'table': table,
        'headers': headers,
        'students': students
    }
Beispiel #3
0
def emailStudents(request):
    db = request.db
    lecture = request.context.lecture
    form = LectureEmailStudents(request)
    if request.method == 'POST' and form.processPostData(request.POST):
        students = lecture.students
        bcc = [s.email for s in students]
        if form['copytotutors'] == 0:
            bcc.extend([t.email for t in lecture.tutors])
        message = Message(
            subject=form['subject'],
            sender=request.user.email,
            to=[assistant.email for assistant in lecture.assistants],
            bcc=bcc,
            body=form['body'])
        if request.POST['attachments'] not in ['', None]:
            message.attach(request.POST['attachments'].filename,
                           data=request.POST['attachments'].file)
        sendMail(message)
        request.session.flash(
            'A mail has been sent to all students of this lecture',
            queue='messages')
        return HTTPFound(
            location=request.route_url('lecture_edit', lecture_id=lecture.id))
    return {'lecture': lecture, 'form': form}
Beispiel #4
0
def emailTutors(request):
    db = request.db
    lecture = request.context.lecture
    form = LectureEmailTutors(request)
    if request.method == 'POST' and form.processPostData(request.POST):
        tutors = lecture.tutors
        message = Message(subject=form['subject'],
                sender=request.user.email,
                to= [assistant.email for assistant in lecture.assistants],
                bcc=[t.email for t in tutors],
                body=form['body'])
        if request.POST['attachments'] not in ['', None]:
            message.attach(request.POST['attachments'].filename, data=request.POST['attachments'].file)
        try:
            sendMail(message,request)
        except:
            pass
        else:
            if request.permissionInfo.has_permission('edit'):
                routeback_url = 'lecture_edit'
            else:
                routeback_url = 'lecture_view'
            request.session.flash('A mail has been sent to all tutors of this lecture', queue='messages')
            return HTTPFound(location=request.route_url(routeback_url, lecture_id=lecture.id))
    return {'lecture': lecture,
            'form': form}
Beispiel #5
0
def emailAllUsers(request):
    ttype = request.params.get('type', 'inform_message')
    form = EmailWrongSubject(ttype, request)
    semesterlimit = utils.getSemesterLimit()
    students = request.db.query(models.User).filter(models.User.lecture_students.any(models.LectureStudent.lecture.has(models.Lecture.term >= semesterlimit))).all()
    headers = ['MUESLI-Information']
    table = []
    for s in students:
        table.append(s)
    if request.method == 'POST' and form.processPostData(request.POST):
        message = Message(subject=form['subject'],
                sender=('%s <%s>' % (request.config['contact']['name'], request.config['contact']['email'])),
                to= [],
                bcc=[s.email for s in students],
                body=form['body'])
        if request.POST['attachments'] not in ['', None]:
            message.attach(request.POST['attachments'].filename, data=request.POST['attachments'].file)
        try:
            sendMail(message,request)
        except:
            pass
        else:
            request.session.flash('A Mail has been send to all students', queue='messages')
    return {'form': form,
            'type': ttype,
            'table': table,
            'headers': headers,
            'students': students}
Beispiel #6
0
def emailTutors(request):
    db = request.db
    lecture = request.context.lecture
    form = LectureEmailTutors(request)
    
    if request.method == 'POST' and form.processPostData(request.POST):
        tutors = lecture.tutors
        message = Message(subject=form['subject'],
                sender=request.user.email,
                to=[t.email for t in tutors],
                cc=[assistant.email for assistant in lecture.assistants if form['copytoassistants'] == 0],
                body=form['body'])
        if request.POST['attachments'] not in ['', None]:
            message.attach(request.POST['attachments'].filename, data=request.POST['attachments'].file)
        try:
            sendMail(message,request)
        except:
            pass
        else:
            if request.permissionInfo.has_permission('edit'):
                routeback_url = 'lecture_edit'
            else:
                routeback_url = 'lecture_view'
            request.session.flash('A mail has been sent to all tutors of this lecture', queue='messages')
            return HTTPFound(location=request.route_url(routeback_url, lecture_id=lecture.id))
    return {'lecture': lecture,
            'form': form}
Beispiel #7
0
def emailUsers(request):
    ttype = request.params.get('type', 'wrong_subject')
    form = EmailWrongSubject(ttype, request)
    semesterlimit = utils.getSemesterLimit()
    students = request.db.query(models.User).filter(
        models.User.lecture_students.any(
            models.LectureStudent.lecture.has(
                models.Lecture.term >= semesterlimit))).all()
    bad_students = []
    headers = []
    table = []
    if ttype == 'wrong_subject':
        headers = ['Fach', 'Beifach']
        for student in students:
            if not student.subject:
                continue
            lsub = student.subject.lower()
            if 'mathematik (la)' in lsub:
                if not ('hauptfach' in lsub or 'beifach' in lsub):
                    bad_students.append(student)
                elif not student.second_subject:
                    bad_students.append(student)
        for s in bad_students:
            table.append((s, s.subject, s.second_subject))
    elif ttype == 'unconfirmed':
        headers = ['Anmeldedatum']
        bad_students = request.db.query(
            models.User).filter(models.User.password == None).all()
        for student in bad_students:
            table.append((student, student.confirmations[0].created_on))
    if request.method == 'POST' and form.processPostData(request.POST):
        message = Message(subject=form['subject'],
                          sender=('%s <%s>' %
                                  (request.config['contact']['name'],
                                   request.config['contact']['email'])),
                          to=[],
                          bcc=[s.email for s in bad_students],
                          body=form['body'])
        if request.POST['attachments'] not in ['', None]:
            message.attach(request.POST['attachments'].filename,
                           data=request.POST['attachments'].file)
        try:
            sendMail(message, request)
        except:
            pass
        else:
            request.session.flash(
                'A Mail has been send to all students with wrong subject',
                queue='messages')
    return {
        'form': form,
        'type': ttype,
        'table': table,
        'headers': headers,
        'students': bad_students
    }
Beispiel #8
0
def emailUsers(request):
    ttype = request.params.get('type', 'wrong_subject')
    form = EmailWrongSubject(ttype, request)
    semesterlimit = utils.getSemesterLimit()
    students = request.db.query(models.User).filter(models.User.lecture_students.any(models.LectureStudent.lecture.has(models.Lecture.term >= semesterlimit))).all()
    bad_students = []
    headers = []
    table = []
    if ttype=='wrong_subject':
        headers = ['Fach', 'Beifach']
        for student in students:
            if not student.subject:
                continue
            lsub = student.subject.lower()
            if 'mathematik (la)' in lsub:
                if not ('hauptfach' in lsub or 'beifach' in lsub):
                    bad_students.append(student)
                elif not student.second_subject:
                    bad_students.append(student)
        for s in bad_students:
            table.append((s,s.subject, s.second_subject))
    elif ttype=='wrong_birthday':
        headers = ["Geburtstag"]
        validator = DateString()
        for student in students:
            try:
                date = validator.to_python(student.birth_date)
            except formencode.Invalid:
                bad_students.append(student)
        for s in bad_students:
            table.append((s,s.birth_date))
    elif ttype == 'unconfirmed':
        headers = ['Anmeldedatum']
        bad_students = request.db.query(models.User).filter(models.User.password == None).all()
        for student in bad_students:
            table.append((student, student.confirmations[0].created_on))
    if request.method == 'POST' and form.processPostData(request.POST):
        message = Message(subject=form['subject'],
                sender=('%s <%s>' % (request.config['contact']['name'], request.config['contact']['email'])),
                to= [],
                bcc=[s.email for s in bad_students],
                body=form['body'])
        if request.POST['attachments'] not in ['', None]:
            message.attach(request.POST['attachments'].filename, data=request.POST['attachments'].file)
        try:
            sendMail(message,request)
        except:
            pass
        else:
            request.session.flash('A Mail has been send to all students with wrong subject', queue='messages')
    return {'form': form,
            'type': ttype,
            'table': table,
            'headers': headers,
            'students': bad_students}
Beispiel #9
0
def resendConfirmationMail(request):
    user_id = request.matchdict['user_id']
    confirmation = request.db.query(models.Confirmation).filter(
        models.Confirmation.user_id == user_id).first()
    user = confirmation.user
    body = """
Hallo!

Sie haben sich am %s bei MÜSLI mit den folgenden Daten angemeldet:

Name:   %s
E-Mail: %s

Um die Anmeldung abzuschließen, gehen Sie bitte auf die Seite

%s

Haben Sie sich nicht selbst angemeldet, ignorieren Sie diese Mail bitte
einfach.

Mit freudlichen Grüßen,
Das MÜSLI-Team
    """ % (confirmation.created_on, user.name(), user.email,
           request.route_url('user_confirm', confirmation=confirmation.hash))
    message = Message(subject='MÜSLI: Ihre Registrierung bei MÜSLI',
                      sender=('%s <%s>' %
                              (request.config['contact']['name'],
                               request.config['contact']['email'])),
                      to=[user.email],
                      body=body)
    sendMail(message)
    return {}
Beispiel #10
0
def send_confirmation_mail(request, user, confirmation):
    body = """
Hallo!

Sie haben sich bei MÜSLI mit den folgenden Daten angemeldet:

Name:   %s
E-Mail: %s

Um die Anmeldung abzuschließen, gehen Sie bitte auf die Seite

%s

Haben Sie sich nicht selbst angemeldet, ignorieren Sie diese Mail bitte
einfach.

Mit freudlichen Grüßen,
Das MÜSLI-Team
    """ % (user.name(), user.email,
           request.route_url('user_confirm', confirmation=confirmation.hash))
    message = Message(subject='MÜSLI: Ihre Registrierung bei MÜSLI',
                      sender=('%s <%s>' %
                              (request.config['contact']['name'],
                               request.config['contact']['email'])),
                      to=[user.email],
                      body=body)
    sendMail(message)
Beispiel #11
0
def sendMailAfterSwitch(request, student1, student2, lecture):
    message = Message(subject='MÜSLI: Sie haben ihre Übungsgruppe getauscht',
            sender=('%s <%s>' % (request.config['contact']['name'], request.config['contact']['email'])),
            to=[student1.email],
            body='Hallo %s!\n\nSie haben erfolgreich das Tutorium mit Ihrem Kommilitonen %s in der Vorlesung %s getauscht.'
                 '\nWenn dies nicht nach Ihrem Wunsch geschehen ist, bitte wenden Sie sich an Ihren Tutor oder Dozenten.'
                 '\n\nMit freundlichen Grüßen,\n  Das MÜSLI-Team\n' % (student1.name, student2.name, lecture.name))
    muesli.mail.sendMail(message)
Beispiel #12
0
def sendChangesMail(request, tutor, text):
    message = Message(
        subject='MÜSLI: Änderungen in Ihrer Übungsgruppe',
        sender=('%s <%s>' % (request.config['contact']['name'],
                             request.config['contact']['email'])),
        to=[tutor.email],
        body='Hallo!\n\n%s\n\nMit freundlichen Grüßen,\n  Das MÜSLI-Team\n' %
        text)
    muesli.mail.sendMail(message)
Beispiel #13
0
def emailTutors(request):
    db = request.db
    lecture = request.context.lecture
    form = LectureEmailTutors(request)
    if request.method == "POST" and form.processPostData(request.POST):
        tutors = lecture.tutors
        message = Message(
            subject=form["subject"],
            sender=request.user.email,
            to=[assistant.email for assistant in lecture.assistants],
            bcc=[t.email for t in tutors],
            body=form["body"],
        )
        if request.POST["attachments"] not in ["", None]:
            message.attach(request.POST["attachments"].filename, data=request.POST["attachments"].file)
        sendMail(message)
        request.session.flash("A mail has been sent to all tutors of this lecture", queue="messages")
        return HTTPFound(location=request.route_url("lecture_edit", lecture_id=lecture.id))
    return {"lecture": lecture, "form": form}
Beispiel #14
0
def changeEmail(request):
    form = UserChangeEmail(request, request.user)
    if request.method == 'POST' and form.processPostData(request.POST):
        email = form['email']
        if request.db.query(
                models.User).filter(models.User.email == email).count() > 0:
            request.session.flash(
                u'Die Adresse "%s" kann nicht verwendet werden' % email,
                queue='messages')
        else:
            confirmation = models.Confirmation()
            confirmation.source = u'user/change_email'
            confirmation.user = request.user
            confirmation.what = email
            body = u"""
Hallo!

Sie haben bei MÜSLI Ihre E-Mail-Adresse geändert.

Neue Adresse: %s

Um die Änderung zu bestätigen, gehen Sie bitte auf die Seite

%s

Möchten Sie die Adresse doch nicht ändern, so ignorieren Sie diese Mail bitte
einfach.

Mit freundlichen Grüßen,
  Das MÜSLI-Team
			""" % (email,
            request.route_url('user_confirm_email',
                            confirmation=confirmation.hash))
            message = Message(
                subject=u'MÜSLI: E-Mail-Adresse ändern',
                sender=(u'%s <%s>' %
                        (request.config['contact']['name'],
                         request.config['contact']['email'])).encode('utf-8'),
                to=[email],
                body=body)
            # As we are not using transactions,
            # we send the mail immediately.
            request.db.add(confirmation)
            request.db.commit()
            sendMail(message)
            #registerCommon(request, form)
            return HTTPFound(location=request.route_url(
                'user_change_email_wait_for_confirmation'))
    return {'form': form}
Beispiel #15
0
def resetPassword(request):
    form = UserResetPassword(request)
    if request.method == 'POST' and form.processPostData(request.POST):
        user = request.db.query(
            models.User).filter(models.User.email == form['email']).first()
        if not user:
            request.session.flash(u'User not found', queue='errors')
        else:
            confirmation = models.Confirmation()
            confirmation.user = user
            confirmation.source = u'user/reset_password'
            body = u"""
Hallo!

Um Ihr Passwort bei MÜSLI zurückzusetzen besuchen Sie bitte die Seite

%s

Haben Sie nicht selbst versucht Ihr Passwort zurückzusetzen, ignorieren Sie
diese Mail bitte einfach.

Mit freundlichen Grüßen,
  Das MÜSLI-Team

			""" % (request.route_url('user_reset_password3',
                            confirmation=confirmation.hash))
            message = Message(
                subject=u'MÜSLI: Passwort zurücksetzen',
                sender=(u'%s <%s>' %
                        (request.config['contact']['name'],
                         request.config['contact']['email'])).encode('utf-8'),
                to=[user.email],
                body=body)
            # As we are not using transactions,
            # we send the mail immediately.
            request.db.add(confirmation)
            request.db.commit()
            sendMail(message)
            return HTTPFound(
                location=request.route_url('user_reset_password2'))
    return {'form': form}