Example #1
0
    def send_staff_email(form, faculty_user):
        data = form.cleaned_data
        subject = u'Mediathread Course Activated: {}'.format(
            data.get('course_name'))
        body = u"""
Course Title: {}

Date Range: {} - {}

Consult/Demo request: {}

How will Mediathread be used to improve your class?
{}

How did you hear about Mediathread? {}

Have you used Mediathread before? {}

Faculty: {} <{}>
""".format(data.get('course_name'), data.get('date_range_start'),
           data.get('date_range_end'), data.get('request_consult_or_demo'),
           data.get('how_will_mediathread_improve_your_class'),
           data.get('hear_about_mediathread'), data.get('used_mediathread'),
           user_display_name(faculty_user), faculty_user.email)

        send_mail(subject, body, settings.SERVER_EMAIL,
                  [settings.SERVER_EMAIL])
Example #2
0
    def send_staff_email(form, faculty_user):
        data = form.cleaned_data
        subject = u'Mediathread Course Activated: {}'.format(
            data.get('course_name'))
        body = u"""
Course Title: {}

Date Range: {} - {}

Consult/Demo request: {}

How will Mediathread be used to improve your class?
{}

How did you hear about Mediathread? {}

Have you used Mediathread before? {}

Faculty: {} <{}>
""".format(data.get('course_name'),
           data.get('date_range_start'),
           data.get('date_range_end'),
           data.get('request_consult_or_demo'),
           data.get('how_will_mediathread_improve_your_class'),
           data.get('hear_about_mediathread'),
           data.get('used_mediathread'),
           user_display_name(faculty_user),
           faculty_user.email)

        send_mail(
            subject,
            body,
            settings.SERVER_EMAIL,
            [settings.SERVER_EMAIL])
Example #3
0
    def send_faculty_email(form, faculty_user):
        data = form.cleaned_data
        subject = u'Your Mediathread Course Activation: {}'.format(
            data.get('course_name'))
        body = u"""
Dear {},

Thank you for creating your Mediathread course: {}. You can always access this
course by going to https://mediathread.ccnmtl.columbia.edu.

You are now ready to get started. Documentation is online here:
http://support.ccnmtl.columbia.edu/knowledgebase/topics/6593-mediathread

If you are new to Mediathread, a CTL learning designer or your
department specialist will check in with you in the coming days to
make sure all is going well. If you have any pressing questions in the
meantime, please feel free to contact us at
[email protected].

Thanks,
The Mediathread Team
""".format(user_display_name(faculty_user),
           data.get('course_name'))
        send_mail(
            subject,
            body,
            settings.SERVER_EMAIL,
            [faculty_user.email])
Example #4
0
 def add_session_status(self, course, session, item, author, created):
     msg = '{} ({}) saved as <a href="/asset/{}/">{}</a> for {}'.format(
         session['Name'], session['Id'], item.id, item.title,
         user_display_name(author))
     if created:
         msg = '{}. <b>{} is a new user</b>'.format(msg, author.username)
     self.log_message(course, session, INFO, msg)
Example #5
0
    def post(self, request):
        faculty_id = request.POST.get('faculty_id', None)
        faculty = get_object_or_404(User, id=faculty_id)
        request.course.faculty_group.user_set.remove(faculty)

        msg = u'{} is now a student'.format(user_display_name(faculty))
        messages.add_message(request, messages.INFO, msg)

        return HttpResponseRedirect(reverse('course-roster'))
Example #6
0
    def post(self, request):
        student_id = request.POST.get('student_id', None)
        student = get_object_or_404(User, id=student_id)
        request.course.faculty_group.user_set.add(student)

        msg = u'{} is now faculty'.format(user_display_name(student))
        messages.add_message(request, messages.INFO, msg)

        return HttpResponseRedirect(reverse('course-roster'))
Example #7
0
    def post(self, request):
        faculty_id = request.POST.get('faculty_id', None)
        faculty = get_object_or_404(User, id=faculty_id)
        request.course.faculty_group.user_set.remove(faculty)

        msg = u'{} is now a student'.format(user_display_name(faculty))
        messages.add_message(request, messages.INFO, msg)

        return HttpResponseRedirect(
            reverse('course-roster', args=[request.course.pk]))
Example #8
0
    def initialize_discussions(self, course, collaboration_context):
        discussions = {}
        # comments
        collaboration_context = collaboration_context
        proj_type = ContentType.objects.get_for_model(Project)

        for didx in DiscussionIndex.objects.filter(
                collaboration__context=collaboration_context,
                participant__isnull=False).order_by('-modified'):
            self.nodes.append({
                'nodeName':
                'Comment: %s' % user_display_name(didx.participant),
                'users': {
                    didx.participant.username: 1
                },
                'group':
                4,
                'href':
                didx.get_absolute_url(),
                'faculty':
                course.is_faculty(didx.participant),
            })

            d_ind = len(self.nodes) - 1

            # linking discussions in ann_asset chain
            if didx.collaboration_id in discussions:
                self.links.append({
                    'source':
                    d_ind,
                    'target':
                    discussions[didx.collaboration_id][-1]
                })
                discussions[didx.collaboration_id].append(d_ind)
            else:
                discussions[didx.collaboration_id] = [d_ind]
                if (didx.collaboration._parent_id and
                        didx.collaboration._parent.content_type == proj_type
                        and int(didx.collaboration._parent.object_pk)
                        in self.projects):
                    self.links.append({
                        'source':
                        d_ind,
                        'target':
                        self.projects[int(
                            didx.collaboration._parent.object_pk)]['index']
                    })

            # comment --> asset
            if didx.asset_id and didx.asset_id in self.assets:
                self.links.append({
                    'source': d_ind,
                    'target': self.assets[didx.asset_id]
                })
Example #9
0
    def post(self, request):
        user_id = request.POST.get('user_id', None)
        user = get_object_or_404(User, id=user_id)

        # @todo - leave student / faculty work?
        # Removing it could have unintended side-effects

        request.course.group.user_set.remove(user)
        request.course.faculty_group.user_set.remove(user)

        msg = '{} is no longer a course member'.format(user_display_name(user))
        messages.add_message(request, messages.INFO, msg)

        return HttpResponseRedirect(reverse('course-roster'))
Example #10
0
    def post(self, request):
        user_id = request.POST.get('user_id', None)
        user = get_object_or_404(User, id=user_id)

        # @todo - leave student / faculty work?
        # Removing it could have unintended side-effects

        request.course.group.user_set.remove(user)
        request.course.faculty_group.user_set.remove(user)

        msg = u'{} is no longer a course member'.format(
            user_display_name(user))
        messages.add_message(request, messages.INFO, msg)

        return HttpResponseRedirect(
            reverse('course-roster', args=[request.course.pk]))
Example #11
0
    def initialize_discussions(self, course, collaboration_context):
        discussions = {}
        # comments
        collaboration_context = collaboration_context
        proj_type = ContentType.objects.get_for_model(Project)

        for didx in DiscussionIndex.objects.filter(
            collaboration__context=collaboration_context,
                participant__isnull=False).order_by('-modified'):
            self.nodes.append({
                'nodeName':
                    'Comment: %s' % user_display_name(didx.participant),
                'users': {didx.participant.username: 1},
                'group': 4,
                'href': didx.get_absolute_url(),
                'faculty': course.is_faculty(didx.participant),
            })

            d_ind = len(self.nodes) - 1

            # linking discussions in ann_asset chain
            if didx.collaboration_id in discussions:
                self.links.append({
                    'source': d_ind,
                    'target': discussions[didx.collaboration_id][-1]})
                discussions[didx.collaboration_id].append(d_ind)
            else:
                discussions[didx.collaboration_id] = [d_ind]
                if (didx.collaboration._parent_id and
                    didx.collaboration._parent.content_type == proj_type and
                        int(didx.collaboration._parent.object_pk)
                        in self.projects):
                    self.links.append({
                        'source': d_ind,
                        'target': self.projects[int(
                            didx.collaboration._parent.object_pk)]['index']})

            # comment --> asset
            if didx.asset_id and didx.asset_id in self.assets:
                self.links.append({
                    'source': d_ind,
                    'target': self.assets[didx.asset_id]
                })
Example #12
0
    def post(self, request):
        unis = request.POST.get('unis', None)
        url = reverse('course-roster', args=[request.course.pk])

        if unis is None:
            msg = 'Please enter a comma-separated list of UNIs'
            messages.add_message(request, messages.ERROR, msg)
            return HttpResponseRedirect(url)

        subj = u"Mediathread: {}".format(self.request.course.title)
        ctx = {
            'course': self.request.course,
            'domain': get_current_site(self.request).domain
        }

        for uni in unis_list(unis):
            uni = uni.lower().strip()
            if not self.validate_uni(uni):
                msg = (u'{} is not a valid UNI. To add a student without '
                       u'a UNI, click the "Invite Non-Columbia Affiliate" '
                       u'button below')
                msg = msg.format(uni)
                messages.add_message(request, messages.ERROR, msg)
                continue

            user = self.get_or_create_user(uni)
            display_name = user_display_name(user)
            if self.request.course.is_true_member(user):
                msg = u'{} ({}) is already a course member'.format(
                    display_name, uni)
                messages.add_message(request, messages.WARNING, msg)
            else:
                email = u'{}@columbia.edu'.format(uni)
                self.request.course.group.user_set.add(user)
                send_template_email(subj, self.email_template, ctx, email)
                msg = (u'{} is now a course member. An email was sent to '
                       u'{} notifying the user.').format(display_name, email)

                messages.add_message(request, messages.INFO, msg)

        return HttpResponseRedirect(
            reverse('course-roster', args=[request.course.pk]))
Example #13
0
    def post(self, request):
        unis = request.POST.get('unis', None)
        url = reverse('course-roster')

        if unis is None:
            msg = 'Please enter a comma-separated list of UNIs'
            messages.add_message(request, messages.ERROR, msg)
            return HttpResponseRedirect(url)

        subj = u"Mediathread: {}".format(self.request.course.title)
        ctx = {
            'course': self.request.course,
            'domain': get_current_site(self.request).domain
        }

        for uni in unis_list(unis):
            uni = uni.lower().strip()
            if not self.validate_uni(uni):
                msg = (u'{} is not a valid UNI. To add a student without '
                       u'a UNI, click the "Invite Non-Columbia Affiliate" '
                       u'button below')
                msg = msg.format(uni)
                messages.add_message(request, messages.ERROR, msg)
                continue

            user = self.get_or_create_user(uni)
            display_name = user_display_name(user)
            if self.request.course.is_true_member(user):
                msg = u'{} ({}) is already a course member'.format(
                    display_name, uni)
                messages.add_message(request, messages.WARNING, msg)
            else:
                email = u'{}@columbia.edu'.format(uni)
                self.request.course.group.user_set.add(user)
                send_template_email(subj, self.email_template, ctx, email)
                msg = (
                    u'{} is now a course member. An email was sent to '
                    u'{} notifying the user.').format(display_name, email)

                messages.add_message(request, messages.INFO, msg)

        return HttpResponseRedirect(reverse('course-roster'))
Example #14
0
    def add_existing_user(self, user):
        add_template = 'dashboard/email_add_user.txt'
        display_name = user_display_name(user)
        if self.request.course.is_true_member(user):
            msg = u'{} ({}) is already a course member'.format(
                display_name, user.email)
            messages.add_message(self.request, messages.INFO, msg)
            return

        # add existing user to course and notify them via email
        self.request.course.group.user_set.add(user)
        subject = u"Mediathread: {}".format(self.request.course.title)
        ctx = {
            'course': self.request.course,
            'domain': get_current_site(self.request).domain,
            'user': user
        }
        send_template_email(subject, add_template, ctx, user.email)

        msg = (u'{} is now a course member. An email was sent to {} '
               u'notifying the user.').format(display_name, user.email)
        messages.add_message(self.request, messages.INFO, msg)
Example #15
0
    def add_existing_user(self, user):
        add_template = 'dashboard/email_add_user.txt'
        display_name = user_display_name(user)
        if self.request.course.is_true_member(user):
            msg = u'{} ({}) is already a course member'.format(
                display_name, user.email)
            messages.add_message(self.request, messages.INFO, msg)
            return

        # add existing user to course and notify them via email
        self.request.course.group.user_set.add(user)
        subject = u"Mediathread: {}".format(self.request.course.title)
        ctx = {
            'course': self.request.course,
            'domain': get_current_site(self.request).domain,
            'user': user
        }
        send_template_email(subject, add_template, ctx, user.email)

        msg = (u'{} is now a course member. An email was sent to {} '
               u'notifying the user.').format(display_name, user.email)
        messages.add_message(self.request, messages.INFO, msg)
Example #16
0
    def make_pmt_activation_item(form, faculty_user):
        """Make a PMT item for course activation.

        Returns the requests object, or None.
        """
        milestone_id = getattr(
            settings, 'MEDIATHREAD_PMT_MILESTONE_ID', None)
        owner_username = getattr(
            settings, 'MEDIATHREAD_PMT_OWNER_USERNAME', None)
        if milestone_id and owner_username:
            # Prepare data entry into PMT. See
            # dmt.views.api.ExternalAddItemView.
            data = form.cleaned_data

            description = ''
            for k in data:
                description += u'{}: {}\n'.format(k, data[k])

            description += u'Faculty: {} <{}>\n'.format(
                user_display_name(faculty_user),
                faculty_user.email)

            pmt_data = {
                'mid': milestone_id,
                'owner': owner_username,
                'assigned_to': owner_username,
                'type': 'action item',
                'title': 'Course Activated: {}'.format(
                    data.get('course_name')),
                'description': description,
            }
            try:
                return make_pmt_item(pmt_data)
            except ImproperlyConfigured:
                # If the PMT item creation fails, we'll have the staff email.
                pass

        return None
Example #17
0
    def send_faculty_email(form, faculty_user):
        data = form.cleaned_data
        subject = u'Your Mediathread Course Activation: {}'.format(
            data.get('course_name'))
        body = u"""
Dear {},

Thank you for creating your Mediathread course: {}. You can always access this
course by going to https://mediathread.ctl.columbia.edu.

You are now ready to get started. Documentation is online here:
http://support.ctl.columbia.edu/knowledgebase/topics/6593-mediathread

If you are new to Mediathread, a CTL learning designer or your
department specialist will check in with you in the coming days to
make sure all is going well. If you have any pressing questions in the
meantime, please feel free to contact us at
[email protected].

Thanks,
The Mediathread Team
""".format(user_display_name(faculty_user), data.get('course_name'))
        send_mail(subject, body, settings.SERVER_EMAIL, [faculty_user.email])
Example #18
0
    def make_pmt_activation_item(form, faculty_user):
        """Make a PMT item for course activation.

        Returns the requests object, or None.
        """
        milestone_id = getattr(settings, 'MEDIATHREAD_PMT_MILESTONE_ID', None)
        owner_username = getattr(settings, 'MEDIATHREAD_PMT_OWNER_USERNAME',
                                 None)
        if milestone_id and owner_username:
            # Prepare data entry into PMT. See
            # dmt.views.api.ExternalAddItemView.
            data = form.cleaned_data

            description = ''
            for k in data:
                description += u'{}: {}\n'.format(k, data[k])

            description += u'Faculty: {} <{}>\n'.format(
                user_display_name(faculty_user), faculty_user.email)

            pmt_data = {
                'mid': milestone_id,
                'owner': owner_username,
                'assigned_to': owner_username,
                'type': 'action item',
                'title':
                'Course Activated: {}'.format(data.get('course_name')),
                'description': description,
            }
            try:
                return make_pmt_item(pmt_data)
            except ImproperlyConfigured:
                # If the PMT item creation fails, we'll have the staff email.
                pass

        return None
Example #19
0
    def test_user_display_name(self):
        user = UserFactory()
        self.assertEquals(user_display_name(user), user.username)

        user = UserFactory(first_name='John', last_name='Smith')
        self.assertEquals(user_display_name(user), 'John Smith')
Example #20
0
 def attribution(self, participants=None):
     participants = self.attribution_list()
     return ', '.join([user_display_name(p) for p in participants])
Example #21
0
    def test_user_display_name(self):
        user = UserFactory()
        self.assertEquals(user_display_name(user), user.username)

        user = UserFactory(first_name='John', last_name='Smith')
        self.assertEquals(user_display_name(user), 'John Smith')
Example #22
0
 def attribution(self, participants=None):
     participants = self.attribution_list()
     return ', '.join([user_display_name(p) for p in participants])