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])
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])
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])
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)
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'))
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'))
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]))
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] })
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'))
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]))
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] })
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]))
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'))
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)
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
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])
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
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')
def attribution(self, participants=None): participants = self.attribution_list() return ', '.join([user_display_name(p) for p in participants])