예제 #1
0
파일: forms.py 프로젝트: Bartzi/EvaP
class CourseEmailForm(forms.Form, BootstrapMixin):
    sendToDueParticipants = forms.BooleanField(label=_("Send to participants who didn't vote yet"), required=False, initial=True)
    sendToAllParticipants = forms.BooleanField(label=_("Send to all participants"), required=False)
    sendToEditors = forms.BooleanField(label=_("Send to editors"), required=False)
    sendToContributors = forms.BooleanField(label=_("Send to all contributors (includes editors)"), required=False)
    subject = forms.CharField(label=_("Subject"))
    body = forms.CharField(widget=forms.Textarea(), label=_("Body"))

    def __init__(self, *args, **kwargs):
        self.instance = kwargs.pop('instance')
        self.template = EmailTemplate()
        super(CourseEmailForm, self).__init__(*args, **kwargs)

    def clean(self):
        cleaned_data = self.cleaned_data

        if not (cleaned_data.get('sendToDueParticipants') or cleaned_data.get('sendToAllParticipants') or cleaned_data.get('sendToEditors') or cleaned_data.get('sendToContributors')):
            raise forms.ValidationError(_(u"No recipient selected. Choose at least one group of recipients."))

        return cleaned_data

    # returns whether all recepients have an email address
    def all_recepients_reachable(self):
        return self.missing_email_addresses() == 0

    # returns the number of recepients without an email address
    def missing_email_addresses(self):
        return len([user for user in self.template.recipient_list_for_course(self.instance, self.cleaned_data.get('sendToEditors'), self.cleaned_data.get('sendToContributors'), self.cleaned_data.get('sendToDueParticipants'), self.cleaned_data.get('sendToAllParticipants')) if not user.email])

    def send(self):
        self.template.subject = self.cleaned_data.get('subject')
        self.template.body = self.cleaned_data.get('body')
        self.template.send_courses([self.instance], send_to_editors=self.cleaned_data.get('sendToEditors'), send_to_contributors=self.cleaned_data.get('sendToContributors'), send_to_due_participants=self.cleaned_data.get('sendToDueParticipants'), send_to_all_participants=self.cleaned_data.get('sendToAllParticipants'))
예제 #2
0
def semester_contributor_ready(request, semester_id):
    semester = get_object_or_404(Semester, id=semester_id)
    courses = semester.course_set.filter(
        state__in=['new', 'lecturerApproved']).all()

    forms = helper_create_grouped_course_selection_forms(
        courses, lambda course: not course.warnings(), request)

    valid = helper_are_course_selection_forms_valid(forms)

    if valid:
        selected_courses = []
        for form in forms:
            for course in form.selected_courses:
                course.ready_for_contributors(False)
                course.save()
                selected_courses.append(course)

        EmailTemplate.get_review_template().send_courses(selected_courses,
                                                         send_to_editors=True)

        messages.add_message(
            request, messages.INFO,
            _("Successfully marked %d courses as ready for lecturer review.") %
            (len(selected_courses)))
        return redirect('evap.fsr.views.semester_view', semester_id)
    else:
        return render_to_response("fsr_semester_contributor_ready.html",
                                  dict(semester=semester, forms=forms),
                                  context_instance=RequestContext(request))
예제 #3
0
파일: views.py 프로젝트: mswart/EvaP
def index(request):
    new_key_form = NewKeyForm(request.POST or None)
    
    if request.method == 'POST':
        if new_key_form.is_valid():
            # user wants a new login key
            try:
                user = User.objects.get(email__iexact=new_key_form.cleaned_data['email'])
                profile = user.get_profile()
                profile.generate_logon_key()
                profile.save()
                
                EmailTemplate.get_logon_key_template().send_user(user)
                
            except User.DoesNotExist:
                messages.warning(request, _(u"No user with this e-mail address was found."))
    
    if not request.user.is_active:
        return render_to_response(
            "index.html",
            dict(
                 new_key_form=new_key_form
            ),
            context_instance=RequestContext(request))
    else:
        # redirect user to appropriate start page
        if request.user.is_staff:
            return redirect('evap.fsr.views.index')
        elif request.user.get_profile().is_lecturer:
            return redirect('evap.lecturer.views.index')
        else:
            return redirect('evap.student.views.index')
예제 #4
0
def semester_publish(request, semester_id):
    semester = get_object_or_404(Semester, id=semester_id)
    courses = semester.course_set.filter(state="reviewed").all()

    forms = helper_create_grouped_course_selection_forms(
        courses, None, request)

    valid = helper_are_course_selection_forms_valid(forms)

    if valid:
        selected_courses = []
        for form in forms:
            for course in form.selected_courses:
                course.publish()
                course.save()
                selected_courses.append(course)

        try:
            EmailTemplate.get_publish_template().send_courses(
                selected_courses,
                send_to_contributors=True,
                send_to_all_participants=True)
        except:
            messages.add_message(
                request, messages.WARNING,
                _("Could not send emails to participants and contributors"))
        messages.add_message(
            request, messages.INFO,
            _("Successfully published %d courses.") % (len(selected_courses)))
        return redirect('evap.fsr.views.semester_view', semester_id)
    else:
        return render_to_response("fsr_semester_publish.html",
                                  dict(semester=semester, forms=forms),
                                  context_instance=RequestContext(request))
예제 #5
0
파일: run_tasks.py 프로젝트: svenihde/EvaP
 def check_reminders(self):
     check_date = datetime.date.today() + datetime.timedelta(
         days=settings.REMIND_X_DAYS_AHEAD_OF_END_DATE)
     found_courses = [
         course for course in Course.objects.all()
         if course.state == "inEvaluation"
         and course.vote_end_date == check_date
     ]
     EmailTemplate.get_reminder_template().send_courses(
         found_courses, send_to_due_participants=True)
예제 #6
0
파일: views.py 프로젝트: mswart/EvaP
def semester_lecturer_ready(request, semester_id):
    semester = get_object_or_404(Semester, id=semester_id)
    form = SelectCourseForm(semester.course_set.filter(state__in=['new', 'lecturerApproved']).all(), lambda course: not course.warnings(), request.POST or None)
    
    if form.is_valid():
        for course in form.selected_courses:
            course.ready_for_lecturer(False)
            course.save()
        
        print form.selected_courses
        EmailTemplate.get_review_template().send_courses(form.selected_courses, True, False)
        
        return redirect('evap.fsr.views.semester_view', semester.id)
    else:
        return render_to_response("fsr_semester_lecturer_ready.html", dict(semester=semester, form=form), context_instance=RequestContext(request))
예제 #7
0
파일: views.py 프로젝트: mswart/EvaP
def semester_publish(request, semester_id):
    semester = get_object_or_404(Semester, id=semester_id)
    form = SelectCourseForm(semester.course_set.filter(state="reviewed").all(), None, request.POST or None)
    
    if form.is_valid():
        for course in form.selected_courses:
            course.publish()
            course.save()
        
        try:
            EmailTemplate.get_publish_template().send_courses(form.selected_courses, True, True)
        except:
            messages.add_message(request, messages.WARNING, _("Could not send emails to participants and lecturers"))
        messages.add_message(request, messages.INFO, _("Successfully published %d courses.") % (len(form.selected_courses)))
        return redirect('evap.fsr.views.semester_view', semester.id)
    else:
        return render_to_response("fsr_semester_publish.html", dict(semester=semester, form=form), context_instance=RequestContext(request))
예제 #8
0
파일: views.py 프로젝트: sebastianoe/EvaP
def semester_contributor_ready(request, semester_id):
    semester = get_object_or_404(Semester, id=semester_id)
    courses = semester.course_set.filter(state__in=['new', 'lecturerApproved']).all()
    
    forms = helper_create_grouped_course_selection_forms(courses, lambda course: not course.warnings(), request)
    
    valid = helper_are_course_selection_forms_valid(forms)
    
    if valid:
        selected_courses = []
        for form in forms:
            for course in form.selected_courses:
                course.ready_for_contributors(False)
                course.save()
                selected_courses.append(course)
        
        EmailTemplate.get_review_template().send_courses(selected_courses, True, False, False)
        
        messages.add_message(request, messages.INFO, _("Successfully marked %d courses as ready for lecturer review.") % (len(selected_courses)))
        return redirect('evap.fsr.views.semester_view', semester_id)
    else:
        return render_to_response("fsr_semester_contributor_ready.html", dict(semester=semester, forms=forms), context_instance=RequestContext(request))
예제 #9
0
파일: run_tasks.py 프로젝트: Bartzi/EvaP
    def update_courses(self):
        """ Updates courses state, when evaluation time begins/ends."""
        today = datetime.date.today()

        courses_where_evaluation_begins = []

        for course in Course.objects.all():
            try:
                if course.state == "approved" and course.vote_start_date <= today:
                    course.evaluation_begin()
                    course.save()
                    courses_where_evaluation_begins.append(course)
                elif course.state == "inEvaluation" and course.vote_end_date < today:
                    course.evaluation_end()
                    if course.is_fully_checked():
                        course.review_finished()
                    course.save()
            except:
                pass

        # if the evaluation period of some courses started today we nnotify all students that they are now able to vote
        if (len(courses_where_evaluation_begins) > 0):
            EmailTemplate.get_evaluation_started_template().send_courses(courses_where_evaluation_begins, send_to_due_participants=True)
예제 #10
0
파일: views.py 프로젝트: sebastianoe/EvaP
def semester_publish(request, semester_id):
    semester = get_object_or_404(Semester, id=semester_id)
    courses = semester.course_set.filter(state="reviewed").all()
    
    forms = helper_create_grouped_course_selection_forms(courses, None, request)
    
    valid = helper_are_course_selection_forms_valid(forms)
    
    if valid:
        selected_courses = []
        for form in forms:
            for course in form.selected_courses:
                course.publish()
                course.save()
                selected_courses.append(course)
        
        try:
            EmailTemplate.get_publish_template().send_courses(selected_courses, True, True, True)
        except:
            messages.add_message(request, messages.WARNING, _("Could not send emails to participants and contributors"))
        messages.add_message(request, messages.INFO, _("Successfully published %d courses.") % (len(selected_courses)))
        return redirect('evap.fsr.views.semester_view', semester_id)
    else:
        return render_to_response("fsr_semester_publish.html", dict(semester=semester, forms=forms), context_instance=RequestContext(request))
예제 #11
0
파일: forms.py 프로젝트: Bartzi/EvaP
 def __init__(self, *args, **kwargs):
     self.instance = kwargs.pop('instance')
     self.template = EmailTemplate()
     super(CourseEmailForm, self).__init__(*args, **kwargs)
예제 #12
0
파일: models.py 프로젝트: Bartzi/EvaP
 def ready_for_contributors(self, send_mail=True):
     if send_mail:
         EmailTemplate.get_review_template().send_courses([self], send_to_editors=True)
예제 #13
0
파일: views.py 프로젝트: 02strich/EvaP
def index(request):
    """Main entry page into EvaP providing all the login options available. THe username/password 
       login is thought to be used for internal users, e.g. by connecting to a LDAP directory.
       The login key mechanism is meant to be used to include external participants, e.g. visiting 
       students or visiting contributors.
    """

    # parse the form data into the respective form
    submit_type = request.POST.get("submit_type", "no_submit")
    new_key_form = NewKeyForm(request.POST if submit_type == "new_key" else None)
    login_key_form = LoginKeyForm(request.POST if submit_type == "login_key" else None)
    login_username_form = LoginUsernameForm(request, request.POST if submit_type == "login_username" else None)

    # process form data
    if request.method == 'POST':
        if new_key_form.is_valid():
            # user wants a new login key
            profile = new_key_form.get_profile()
            profile.generate_login_key()
            profile.save()
            
            EmailTemplate.get_login_key_template().send_user(new_key_form.get_user())
            
            messages.success(request, _(u"Successfully sent email with new login key."))
        elif login_key_form.is_valid():
            # user would like to login with a login key and passed key test
            auth_login(request, login_key_form.get_user())
        elif login_username_form.is_valid():
            # user would like to login with username and password and passed password test
            auth_login(request, login_username_form.get_user())

            # clean up our test cookie
            if request.session.test_cookie_worked():
                request.session.delete_test_cookie()
    
    # if not logged in by now, render form
    if not request.user.is_active:
        # set test cookie to verify whether they work in the next step
        request.session.set_test_cookie()

        return render_to_response("index.html", dict(new_key_form=new_key_form, login_key_form=login_key_form, login_username_form=login_username_form), context_instance=RequestContext(request))
    else:
        # check for redirect variable
        next = request.GET.get("next", None)
        if not next is None:
            if next.startswith("/fsr/"):
                if request.user.is_staff:
                    return redirect(next)
            elif next.startswith("/contributor/"):
                if UserProfile.get_for_user(request.user).is_contributor:
                    return redirect(next)
            else:
                return redirect(next)

        # redirect user to appropriate start page
        if request.user.is_staff:
            return redirect('evap.fsr.views.index')
        elif UserProfile.get_for_user(request.user).is_editor_or_delegate:
            return redirect('evap.contributor.views.index')
        else:
            return redirect('evap.student.views.index')
예제 #14
0
파일: models.py 프로젝트: mswart/EvaP
 def ready_for_lecturer(self, send_mail=True):
     if send_mail:
         EmailTemplate.get_review_template().send_courses([self], True, False)
예제 #15
0
파일: views.py 프로젝트: svenihde/EvaP
def index(request):
    """Main entry page into EvaP providing all the login options available. THe username/password
       login is thought to be used for internal users, e.g. by connecting to a LDAP directory.
       The login key mechanism is meant to be used to include external participants, e.g. visiting
       students or visiting contributors.
    """

    # parse the form data into the respective form
    submit_type = request.POST.get("submit_type", "no_submit")
    new_key_form = NewKeyForm(request.POST if submit_type ==
                              "new_key" else None)
    login_key_form = LoginKeyForm(request.POST if submit_type ==
                                  "login_key" else None)
    login_username_form = LoginUsernameForm(
        request, request.POST if submit_type == "login_username" else None)

    # process form data
    if request.method == 'POST':
        if new_key_form.is_valid():
            # user wants a new login key
            profile = new_key_form.get_profile()
            profile.generate_login_key()
            profile.save()

            EmailTemplate.get_login_key_template().send_user(
                new_key_form.get_user())

            messages.success(request,
                             _(u"Successfully sent email with new login key."))
        elif login_key_form.is_valid():
            # user would like to login with a login key and passed key test
            auth_login(request, login_key_form.get_user())
        elif login_username_form.is_valid():
            # user would like to login with username and password and passed password test
            auth_login(request, login_username_form.get_user())

            # clean up our test cookie
            if request.session.test_cookie_worked():
                request.session.delete_test_cookie()

    # if not logged in by now, render form
    if not request.user.is_active:
        # set test cookie to verify whether they work in the next step
        request.session.set_test_cookie()

        return render_to_response("index.html",
                                  dict(
                                      new_key_form=new_key_form,
                                      login_key_form=login_key_form,
                                      login_username_form=login_username_form),
                                  context_instance=RequestContext(request))
    else:
        # check for redirect variable
        next = request.GET.get("next", None)
        if not next is None:
            if next.startswith("/fsr/"):
                if request.user.is_staff:
                    return redirect(next)
            elif next.startswith("/contributor/"):
                if UserProfile.get_for_user(request.user).is_contributor:
                    return redirect(next)
            else:
                return redirect(next)

        # redirect user to appropriate start page
        if request.user.is_staff:
            return redirect('evap.fsr.views.index')
        elif UserProfile.get_for_user(request.user).is_editor_or_delegate:
            return redirect('evap.contributor.views.index')
        else:
            return redirect('evap.student.views.index')
예제 #16
0
파일: run_tasks.py 프로젝트: Bartzi/EvaP
 def check_reminders(self):
     check_date = datetime.date.today() + datetime.timedelta(days=settings.REMIND_X_DAYS_AHEAD_OF_END_DATE)
     found_courses = [course for course in Course.objects.all() if course.state == "inEvaluation" and course.vote_end_date == check_date]
     EmailTemplate.get_reminder_template().send_courses(found_courses, send_to_due_participants=True)
예제 #17
0
 def ready_for_contributors(self, send_mail=True):
     if send_mail:
         EmailTemplate.get_review_template().send_courses(
             [self], send_to_editors=True)