CSC/ECE 517 Fall 2019 - E1961. Email notification to reviewers and instructors: Difference between revisions
Jump to navigation
Jump to search
Line 152: | Line 152: | ||
* Fix the problem that the users cannot choose to uncheck the email options. | * Fix the problem that the users cannot choose to uncheck the email options. | ||
'''app/views/users/_prefs.html.erb:''' | '''app/views/users/_prefs.html.erb:''' | ||
[[File:Checkbox.png]] | [[File:Checkbox.png]] | ||
* previous version: | * previous version: |
Revision as of 20:07, 27 October 2019
E1961 Email notification to reviewers and instructors
Brief Introduction
- E1961 Project aims to fix the problems of making the email notification function more reliable.
- The forked git repository for this project can be found wangdavid84/expertiza.git
Problem Statement
The following tasks were accomplished in this project:
- Issue1: Fix the problem that the author(reviewee) cannot receive the email notification about the review from someone else. The Expertiza is supposed to email authors each time a review of their work is submitted.
- Issue2: Fix the bugs to make Expertiza emails reviewers each time an author that they have reviewed submits new work.
- Issue3: The instructor could get a Blind carbon copy every time.
- Issue4: The users can turn off those email notifications by unchecking boxes on their profile page.
Issue1: email to reviewee
- Add a method in both "update" and "create" functions to call the email function to make the Experiza send the email to reviewee when reviewers submit the reviews
app/controllers/response_controller.rb: def send_email_to_reviewee(map) defn = {body: {type: "Peer Review", partial_name: "new_submission"} } map.email(defn, Assignment.find(Participant.find(map.reviewer_id).parent_id)) end
Issue2: email to reviewer(new submission)
- Add new function to email all reviewers a new submission is ready to review:
- In the first round, there is no reviewer before they take a request
- Except the first round, reviewers get an email every time when there is a new submission
app/controllers/submitted_content_controller.rb:
email_all_reviewers(@participant) end redirect_to action: 'edit', id: @participant.id end
def email_all_reviewers(participant) if participant.reviewers != [] participant.reviewers.each do |reviewer| map = ReviewResponseMap.where(['reviewer_id = ? and reviewee_id = ?', reviewer.id, participant.team.id]).first responses = Response.where(:map_id => map.id) responses = responses.sort_by { |obj| obj.updated_at } # the latest response will be the last latest_response = responses.last # we need to pass the id of lastest_response in the URL mentioned in the mail. # this will open the correct /response/edit?id=#{latest_response.id} page for the reviewer when (s)he clicks on it. user = User.find(reviewer.user_id) instructor = User.find(user.parent_id) bcc_mail_address = "" if instructor.copy_of_emails? bcc_mail_address = instructor.email else # do noting end if user.email_on_submission? MailerHelper.send_mail_to_reviewer(user, bcc_mail_address, "You have a new submission to review", "update", "Please visit https://expertiza.ncsu.edu/response/edit?id=#{latest_response.id} and proceed to peer reviews.").deliver end end end end
app/helpers/mailer_helper.rb:
def self.send_mail_to_reviewer(user, bcc_mail_address, subject, partial_name, note) Mailer.new_review_request_message ({ to: user.email, bcc: bcc_mail_address, subject: subject, body: { user: user, first_name: ApplicationHelper.get_user_first_name(user), message: note, partial_name: partial_name } }) end
app/views/mailer/new_review_message.html.erb:
<!DOCTYPE html> <html> <head> <meta content='text/html; charset=UTF-8' http-equiv='Content-Type' /> </head> <body> <%= render :partial => 'mailer/partials/'+@partial_name+'_html' %> <hr> This message has been generated by <A HREF="http://expertiza.ncsu.edu">Expertiza</A><BR/> http://expertiza.ncsu.edu </body> </html>
app/views/mailer/partials/update.html.html.erb:
Hi <%= @first_name %>,</br> <p> One of the assignments you are reviewing has just been entered or revised. "<%= @message %>" </p> <br/>
Issue3: bcc to Instructor
- ..........................................................................................
app/controllers/submitted_content_controller.rb:
instructor = User.find(user.parent_id) bcc_mail_address = "" if instructor.copy_of_emails? bcc_mail_address = instructor.email else # do noting end
bcc: bcc_mail_address,
Issue4: the user could choose checkbox options
- Fix the problem that the users cannot choose to uncheck the email options.
app/views/users/_prefs.html.erb:
- previous version:
<td><label for="user_email_on_review">When someone else <strong>reviews</strong> my work</label></td> <td><%= check_box 'user', 'email_on_review', {}, true, false %></td> </tr> <tr> <td><label for="user_email_on_submission">When someone else <strong>submits</strong> work I am assigned to review</label></td> <td><%= check_box 'user', 'email_on_submission', {}, true, false %></td> </tr> <tr> <td><label for="user_email_on_review_of_review">When someone else reviews one of my reviews (<strong>metareviews</strong> my work)</label></td> <td><%= check_box 'user', 'email_on_review_of_review', {}, true, false %></td> </tr>
- correct version:
<tr> <td><label for="user_email_on_review">When someone else <strong>reviews</strong> my work</label></td> <td><%= check_box 'user', 'email_on_review' %></td> </tr> <tr> <td><label for="user_email_on_submission">When someone else <strong>submits</strong> work I am assigned to review</label></td> <td><%= check_box 'user', 'email_on_submission' %></td> </tr> <tr> <td><label for="user_email_on_review_of_review">When someone else reviews one of my reviews (<strong>metareviews</strong> my work)</label></td> <td><%= check_box 'user', 'email_on_review_of_review' %></td> </tr>
Process Video
Test
- test function: if the user unchecked the box of email_on_review(When someone else reviews my work) option, he should not receive the email.
- We create a new student2 with email_on_review options is false (default is true)
app/spec/models/review_response_map_spec.rb:
let(:student2) { build(:student, id: 3, name: "name2", fullname: 'no one', email: 'expertiza@mailinator.com', email_on_review: false) }
it '#email should not send email when email on review attribute is disabled' do reviewer_id = 1 allow(Participant).to receive(:find).with(1).and_return(participant) allow(Assignment).to receive(:find).with(1).and_return(assignment) allow(AssignmentTeam).to receive(:find).with(3).and_return(team2) allow(AssignmentTeam).to receive(:users).and_return(student2) allow(User).to receive(:find).with(3).and_return(student2) review_response_map2.reviewee_id = 3 defn = {body: {type: "Peer Review", obj_name: "Test Assgt", first_name: "no one", partial_name: "new_submission"}, to: "expertiza@mailinator.com"} expect { review_response_map2.email(defn, participant, Assignment.find(Participant.find(reviewer_id).parent_id)) } .to change { ActionMailer::Base.deliveries.count }.by 0 end
Team Information
- Siwei Wen (swen4@ncsu.edu)
- Shuzheng Wang (swang41@ncsu.edu)
- Zhifeng Zhu (zzhu25@ncsu.edu)
- Mentor: Ed Gehringer (efg@ncsu.edu)