<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hhwang4</id>
	<title>Expertiza_Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hhwang4"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Hhwang4"/>
	<updated>2026-08-09T02:04:29Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133800</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133800"/>
		<updated>2020-04-24T03:27:03Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: /* Testing Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open-source project that is built using the [http://rubyonrails.org/ Ruby on Rails] framework. At its core, it is a highly versatile tool that academic institutions can use to craft learning objectives centered around team projects, peer reviews, and highly-customizable assignments.&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are two main issues:&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Implementation Details'''==&lt;br /&gt;
&lt;br /&gt;
===Problem 1: Allow the instructor and teaching assistants to review teams that have submitted assignments===&lt;br /&gt;
* Check will be done to verify whether the course staff is a participant. Staff can only review if they are a participant of the assignment.&lt;br /&gt;
* In the '''list_submissions.html.erb''' file, a &amp;quot;Perform Review&amp;quot; link is present if the final review due date of the assignment has not passed yet. If a review was already saved and the final review due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; will be present. If a review was already submitted and the due date has not passed, then a link to &amp;quot;View Review&amp;quot; will be present.&lt;br /&gt;
[[File:StaffPerformReview.jpg|center|The instructor/TA will see a &amp;quot;Perform Review&amp;quot; link if the final review due date has passed.]]&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot;, &amp;quot;Edit Review&amp;quot;, and &amp;quot;View Review&amp;quot; links will take the instructor/TA to the pages governed by '''response_controller#new''', '''response_controller#edit''', and '''response_controller#view''' respectively.&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link will only appear after the final review due date of the assignment has passed, if there are no review due dates, or if the user is not a participant of the assignment.&lt;br /&gt;
[[File:StaffAssignGrade.jpg|center|The instructor/TA will see a &amp;quot;Perform Review&amp;quot;, &amp;quot;Edit Review&amp;quot;, or &amp;quot;View Review&amp;quot; link if the final review due date has not passed.]]&lt;br /&gt;
&lt;br /&gt;
* View changes&lt;br /&gt;
:app/views/assignments/list_submissions.html.erb&lt;br /&gt;
        &amp;lt;% unless participants.empty? %&amp;gt;&lt;br /&gt;
              &amp;lt;nowiki&amp;gt;&amp;lt;!-- If no due dates for assignment, allow assigning grades. --&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;            &amp;lt;% if not @assignment.find_due_dates('review').nil? %&amp;gt;&lt;br /&gt;
              &amp;lt;nowiki&amp;gt;&amp;lt;!-- If due date has passed or user not a participant, Assign Grade. Otherwise, allow reviews. --&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
              &amp;lt;% if Time.now &amp;gt; @assignment.find_due_dates('review').sort_by{|due_date| due_date.due_at}[-1].due_at or not @participant %&amp;gt;&lt;br /&gt;
                &amp;lt;%= link_to 'Assign Grade', { controller: 'grades', action: 'view_team', id: participants.first.id}, target: '_blank' %&amp;gt;&lt;br /&gt;
              &amp;lt;% else %&amp;gt;&lt;br /&gt;
                &amp;lt;% review = @review_maps.select{|m| m.reviewee_id == team.id} %&amp;gt;&lt;br /&gt;
                &amp;lt;nowiki&amp;gt;&amp;lt;!-- If a review has not yet been performed, allow review. Otherwise, allow view/edit actions. --&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
                &amp;lt;% if review.size == 0 %&amp;gt;&lt;br /&gt;
                  &amp;lt;%= link_to 'Perform Review', {:controller =&amp;gt; 'review_mapping', :action =&amp;gt; 'add_staff_as_reviewer', :id =&amp;gt; @assignment.id, :contributor_id =&amp;gt; team.id, :user_id =&amp;gt; current_user.id} %&amp;gt;&lt;br /&gt;
                &amp;lt;% else %&amp;gt;&lt;br /&gt;
                  &amp;lt;% r =  Response.where([&amp;quot;map_id IN (?)&amp;quot;, review.last.id]).first %&amp;gt;&lt;br /&gt;
                  &amp;lt;% if r %&amp;gt;&lt;br /&gt;
                    &amp;lt;nowiki&amp;gt;&amp;lt;!-- Reviews cannot be edited after being submitted. --&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
                    &amp;lt;% if r.is_submitted %&amp;gt;&lt;br /&gt;
                      &amp;lt;%= link_to 'View Review', {:controller =&amp;gt; 'response', :action =&amp;gt; 'view', :id =&amp;gt; r.id, :return =&amp;gt; &amp;quot;instructor_review&amp;quot;} %&amp;gt;&lt;br /&gt;
                    &amp;lt;% else %&amp;gt;&lt;br /&gt;
                      &amp;lt;%= link_to 'Edit Review', {:controller =&amp;gt; 'response', :action =&amp;gt; 'edit', :id =&amp;gt; r.id, :return =&amp;gt; &amp;quot;instructor_review&amp;quot;} %&amp;gt;&lt;br /&gt;
                    &amp;lt;% end %&amp;gt;&lt;br /&gt;
                  &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;% end %&amp;gt;&lt;br /&gt;
              &amp;lt;% end %&amp;gt;&lt;br /&gt;
            &amp;lt;% else %&amp;gt;&lt;br /&gt;
              &amp;lt;%= link_to 'Assign Grade', { controller: 'grades', action: 'view_team', id: participants.first.id}, target: '_blank' %&amp;gt;&lt;br /&gt;
            &amp;lt;% end %&amp;gt;&lt;br /&gt;
          &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* A method was added to review_mapping_controller.rb that creates a new ReviewResponseMap for an instructor, TA, or Admin for the assignment specified by the id in the params. This will be called when the staff user clicks &amp;quot;PerformReview&amp;quot;. It will then redirect to '''response_controller#new'''.&lt;br /&gt;
&lt;br /&gt;
:app/controllers/review_mapping_controller.rb&lt;br /&gt;
  # Enable a staff user (Instructor, Teaching Assistant, Admin) to review all submissions for an assignment when they are a participant.&lt;br /&gt;
  # Will redirect to the list_submissions view.&lt;br /&gt;
  def add_staff_as_reviewer&lt;br /&gt;
    assignment = Assignment.find(params[:id])&lt;br /&gt;
    user = User.from_params(params)&lt;br /&gt;
    # Get registration url for user in case the user is not a participant in the assignment.&lt;br /&gt;
    regurl = url_for id: assignment.id,&lt;br /&gt;
                     user_id: user.id,&lt;br /&gt;
                     contributor_id: params[:contributor_id]&lt;br /&gt;
    reviewer = get_reviewer(user, assignment, regurl)&lt;br /&gt;
    # Create response map for the participant so they can begin review.&lt;br /&gt;
    map = ReviewResponseMap.where(reviewee_id: params[:contributor_id], reviewer_id: reviewer.id, reviewed_object_id: assignment.id).first&lt;br /&gt;
    if map.nil?&lt;br /&gt;
      map = ReviewResponseMap.create(reviewee_id: params[:contributor_id], reviewer_id: reviewer.id, reviewed_object_id: assignment.id)&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to :controller =&amp;gt; 'response', :action =&amp;gt; 'new', :id =&amp;gt; map.id, :contributor_id =&amp;gt; params[:contributor_id], :return =&amp;gt; &amp;quot;instructor_review&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
* A check is now performed to determine if the current user is a participant in the assignment. If so, we'll check if they have any existing reviews.&lt;br /&gt;
:app/controllers/assignments_controller.rb&lt;br /&gt;
  def list_submissions&lt;br /&gt;
    @assignment = Assignment.find(params[:id])&lt;br /&gt;
    @teams = Team.where(parent_id: params[:id])&lt;br /&gt;
    @participant = AssignmentParticipant.where(user_id: current_user.id, parent_id: @assignment.id).first&lt;br /&gt;
    # If the current user is not a participant in the assignment, they cannot review submissions.&lt;br /&gt;
    if not @participant.nil?&lt;br /&gt;
      @review_maps = ReviewResponseMap.where(reviewer_id: @participant.id, reviewed_object_id: @assignment.id)&lt;br /&gt;
    else&lt;br /&gt;
      @review_maps = []&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Problem 2: Allow authors to visually identify reviews done by the course staff===&lt;br /&gt;
* A star icon will be used to distinguish whether a review was done by a course staff and will appear below the 'Review #' heading.&lt;br /&gt;
* Add helper class grades_helper.rb to handle check to determine whether review was done by course staff based on the boolean flag attached to a response.&lt;br /&gt;
* Change will be made in view_team.html.erb such that after verifying that a response was done by a course staff via identity_helper.rb, a star is displayed below the 'Review #' heading.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Previously, a review that was done by a course staff would not be visually recognizable by an author of the particular reviewed assignment. With the following changes, however, authors will be able to recognize reviews done under the &amp;quot;Summary Report for assignment&amp;quot; page, as reviews done by course staff will have a black star located immediately below the &amp;quot;Review #&amp;quot; header. A boolean check is done in the ''review_done_by_course_staff?'' method and used in ''view_team.html.erb'' to display a black star below a particular review if and only if ''review_done_by_course_staff?'' outputs true.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/helpers/grades_helper.rb&lt;br /&gt;
    # used to determine whether a review was done by a course staff&lt;br /&gt;
    # course staff is defined as an Instructor or Teaching Assistant&lt;br /&gt;
    def review_done_by_course_staff?(review)&lt;br /&gt;
      if review.nil?&lt;br /&gt;
        false&lt;br /&gt;
      else&lt;br /&gt;
        role = Role.find(User.find(Participant.find(ResponseMap.find(Response.find(review.id).map_id).reviewer_id).user_id).role_id).name&lt;br /&gt;
        role == (&amp;quot;Instructor&amp;quot; || &amp;quot;Teaching Assistant&amp;quot;) ? true : false&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
:app/views/grades/view_team.html.erb&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: black; border:1px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- instructors (or higher level users) see reviewer name, students see anonymized string --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- instructor reviews labeled with a black star under the Review heading --&amp;gt;&lt;br /&gt;
    &amp;lt;% if (['Student'].include? @current_role_name) &amp;amp;&amp;amp; (@assignment.is_anonymous) %&amp;gt;&lt;br /&gt;
        &amp;lt;% review_name = &amp;quot;Review &amp;quot; + i.to_s  %&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;% review_name = User.find(Participant.find(ResponseMap.find(Response.find(review.id).map_id).reviewer_id).user_id).fullname(session[:ip]).to_s %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;th class=&amp;quot;sorter-false&amp;quot;&amp;gt; &amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;../response/view?id=&amp;lt;%= review.id.to_s %&amp;gt;&amp;quot;  data-toggle=&amp;quot;tooltip&amp;quot; data-placement=&amp;quot;right&amp;quot; title=&amp;quot;Click to see details&amp;quot;&amp;gt;&amp;lt;%= review_name %&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;% if review_done_by_course_staff?(review) %&amp;gt;&lt;br /&gt;
        &amp;lt;br&amp;gt;&amp;lt;span class=&amp;quot;glyphicon glyphicon-star&amp;quot; style=&amp;quot;margin:auto; display:table&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;&lt;br /&gt;
[https://github.com/epeden/expertiza/pull/15?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* A staff user (Instructor, TA, Admin) will see the star for reviews done by another staff member as well as the names of all the reviewers.&lt;br /&gt;
[[File:InstructorReviews.png]]&lt;br /&gt;
* A student will still see the star for reviews done by a staff member but all names are anonymous.&lt;br /&gt;
[[File:StudentReviews.png]]&lt;br /&gt;
&lt;br /&gt;
===All Modified Files===&lt;br /&gt;
*app/controllers/assignments_controller.rb&lt;br /&gt;
*app/controllers/response_controller.rb&lt;br /&gt;
*app/controllers/review_mapping_controller.rb&lt;br /&gt;
*app/helpers/grades_helper.rb&lt;br /&gt;
*app/views/assignments/list_submissions.html.erb&lt;br /&gt;
*app/views/grades/view_team.html.erb&lt;br /&gt;
*app/views/response/response.html.erb&lt;br /&gt;
*config/routes.rb&lt;br /&gt;
&lt;br /&gt;
=='''Flow Chart'''==&lt;br /&gt;
This flow chart demonstrates the desired functionality. While students must submit reviews in the review stage, instructors/TA's can submit reviews any time before the final deadline. In order to submit reviews, the instructor/TA must be added as a participant to the assignment. Then, they will go to &amp;quot;View Submissions&amp;quot; on the Manage Assignments page. If the final deadline for the assignment has passed, they will see an &amp;quot;Assign Grade&amp;quot; link next to each submission. Otherwise, they will see a &amp;quot;Perform Review&amp;quot; link if a review has not been submitted yet or an &amp;quot;Edit Review&amp;quot; link if a review has been submitted already. Students can view only the reviews they have performed and the reviews of their work, while instructors/TA's can see all reviews for the assignment. Reviews done by course staff will be marked with a star to distinguish them from students' reviews.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Flow chart.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;br /&gt;
This diagram represents the relationship between different models involved with our proposed solution. We do not anticipate any changes to the database schema.&lt;br /&gt;
&lt;br /&gt;
A model that's central to our proposed solution is the AssignmentQuestionnaire model defined in assignment_questionnaire.rb. It holds the user ID of the User (user.rb) who reviewed the assignment, from which we will determine the user's role: Instructor, TA, or student. It also contains the ID of the Assignment (assignment.rb) being reviewed. Additionally, the Questionnaire (questionnaire.rb) can be located by its ID defined in AssignmentQuestionnaire and consists of the Questions (question.rb) users use to review the assignment. &lt;br /&gt;
&lt;br /&gt;
[[File:Model2picture.png ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
* Manual UI verification of our added features can be found in the demo video in the Resources section. These cases are included:&lt;br /&gt;
&lt;br /&gt;
* An &amp;quot;Assign Grade&amp;quot; link is visible in the submissions list if the instructor is not a participant. Instructor can be added as participant&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click on the icon to view submissions.&lt;br /&gt;
# An &amp;quot;Assign Grade&amp;quot; link should be visible for the submissions.&lt;br /&gt;
# Navigate back to the test assignment and click the icon to add participants.&lt;br /&gt;
# Add the instructor as a participant on the assignment.&lt;br /&gt;
# Click on the icon to view submissions. A &amp;quot;Perform Review&amp;quot; link should be present for the submissions.&lt;br /&gt;
&lt;br /&gt;
* Instructor should be able to add a review on an assignment if they are a participant and the review deadline has not passed.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click on the Edit icon. Click on Due Dates and confirm the review due date has not passed.&lt;br /&gt;
# Click on the View Submissions icon.&lt;br /&gt;
# Verify a list of submissions appears. The “Perform review” link should be visible.&lt;br /&gt;
# Click on the “Perform review” link.&lt;br /&gt;
# Verify submitted work for team is visible.&lt;br /&gt;
# Complete review and click save.&lt;br /&gt;
&lt;br /&gt;
* When an author view their reviews, reviews done by instructors should present a star.&lt;br /&gt;
# After logging in as the student, go to Assignments.&lt;br /&gt;
# Click on the test assignment&lt;br /&gt;
# Click &amp;quot;Your scores&amp;quot;&lt;br /&gt;
# If a review was done by an instructor, verify the star is present.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
Comprehensive RSpec tests were added for all controller and model classes that we changed as well as automated UI tests for features we added. Test cases include: &lt;br /&gt;
* Verify that instructors can be added as participants for assignments.&lt;br /&gt;
* Verify that assignment reviews can be submitted by users with an Instructor, TA, or Student role assigned.&lt;br /&gt;
* Verify if a instructor is not a participant, an &amp;quot;Assign Grade&amp;quot; is visible.&lt;br /&gt;
* Verify if an assignment's deadline is passed and the instructor is a participant, an &amp;quot;Assign Grade&amp;quot; is visible.&lt;br /&gt;
* Verify if an assignment's deadline is not passed and the instructor is a participant, a &amp;quot;Perform Review&amp;quot; link is visible.&lt;br /&gt;
* Verify if a review has already been submitted by an instructor, a new ReviewResponseMap will not be created for the instructor when they load the list_submissions view.&lt;br /&gt;
* Verify a star icon appears next to only reviews done by instructors/TAs in the responses view. This should be visible to both staff and students.&lt;br /&gt;
&lt;br /&gt;
Modified RSpec test files:&lt;br /&gt;
*spec/controllers/assignments_controller_spec.rb&lt;br /&gt;
*spec/controllers/review_mapping_controller_spec.rb&lt;br /&gt;
*spec/features/assignment_list_submissions_spec.rb&lt;br /&gt;
*spec/helpers/grades_helper_spec.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Problem 1: Allow the instructor and teaching assistants to review teams that have submitted assignments===&lt;br /&gt;
&lt;br /&gt;
===Problem 2: Allow authors to visually identify reviews done by the course staff===&lt;br /&gt;
UI Testing&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Login as an instructor&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;Username: instructor6&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;Password: password&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; As this test is an extension of the one conducted in Part 1, impersonate the student who the instructor performed a review for. Go to Manage -&amp;gt; Impersonate User and enter the student's user name.&lt;br /&gt;
&amp;lt;li&amp;gt; Now impersonated as the chosen student, go to Assignments -&amp;gt; Project_Name -&amp;gt; Your Scores. &lt;br /&gt;
&amp;lt;li&amp;gt; Yous should now be in the &amp;quot;Summary Report for assignment&amp;quot; page. Below whichever review that the instructor submitted, there will be a black star.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Ui_test_part_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RSpec Testing&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Additional tests were created for methods in the same grades_helper helper class that were not written by this team in order to abide by the philosophy that you should always leave code in a better position that they were originally.&lt;br /&gt;
&lt;br /&gt;
:spec/helpers/grades_helper_spec.rb&lt;br /&gt;
&lt;br /&gt;
  describe 'has_team_and_metareview' do&lt;br /&gt;
    before(:each) do&lt;br /&gt;
      @assignment = create(:assignment, max_team_size: 1)&lt;br /&gt;
    end&lt;br /&gt;
    it 'should correctly identify the assignment from an assignment id' do&lt;br /&gt;
      params[:id] = @assignment.id&lt;br /&gt;
      result = Assignment.find(params[:id])&lt;br /&gt;
      expect(result).to eq(@assignment)&lt;br /&gt;
    end&lt;br /&gt;
    it 'should correctly identify the assignment from a participant id' do&lt;br /&gt;
      participant = create(:participant, assignment: @assignment)&lt;br /&gt;
      params[:id] = participant.id&lt;br /&gt;
      result = Participant.find(params[:id]).parent_id&lt;br /&gt;
      expect(result).to eq(@assignment.id)&lt;br /&gt;
    end&lt;br /&gt;
    it 'should return 0 for an assignment without a team or a metareview deadline after a view action' do&lt;br /&gt;
      params[:action] = 'view'&lt;br /&gt;
      params[:id] = @assignment.id&lt;br /&gt;
      result = has_team_and_metareview?&lt;br /&gt;
      expect(result).to be == {has_team: false, has_metareview: false, true_num: 0}&lt;br /&gt;
    end&lt;br /&gt;
    it 'should return 1 for an assignment with a team but no metareview deadline after a view action' do&lt;br /&gt;
      @assignment.max_team_size = 2&lt;br /&gt;
      @assignment.save&lt;br /&gt;
      params[:action] = 'view'&lt;br /&gt;
      params[:id] = @assignment.id&lt;br /&gt;
      result = has_team_and_metareview?&lt;br /&gt;
      expect(result).to be == {has_team: true, has_metareview: false, true_num: 1}&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  describe 'type_and_max' do&lt;br /&gt;
    it 'should fail when passing in nil row value' do&lt;br /&gt;
      expect { type_and_max(nil) }.to raise_exception(NoMethodError)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  describe 'underlined' do&lt;br /&gt;
    it 'should fail when passing in nil score value' do&lt;br /&gt;
      expect { underlined?(nil) }.to raise_exception(NoMethodError)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  describe 'retrieve_questions' do&lt;br /&gt;
    it 'should fail when passing in nil values for questionnaires and assignment_id' do&lt;br /&gt;
      expect { retrieve_questions(nil,nil) }.to raise_exception(NoMethodError)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  describe 'review_done_by_course_staff' do&lt;br /&gt;
    it 'should return false' do&lt;br /&gt;
      expect(review_done_by_course_staff?(nil)).to eq(false)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Code Coverage===&lt;br /&gt;
Coverage increased (+11.01%) to 41.493%&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Resources'''==&lt;br /&gt;
Forked Repo: https://github.com/epeden/expertiza&lt;br /&gt;
&lt;br /&gt;
Expertiza Pull Request: https://github.com/expertiza/expertiza/pull/1729&lt;br /&gt;
&lt;br /&gt;
Demo Video: https://youtu.be/mDsc5n1NZ9E&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133799</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133799"/>
		<updated>2020-04-24T03:23:47Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: /* Problem 2: Allow authors to visually identify reviews done by the course staff */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open-source project that is built using the [http://rubyonrails.org/ Ruby on Rails] framework. At its core, it is a highly versatile tool that academic institutions can use to craft learning objectives centered around team projects, peer reviews, and highly-customizable assignments.&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are two main issues:&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Implementation Details'''==&lt;br /&gt;
&lt;br /&gt;
===Problem 1: Allow the instructor and teaching assistants to review teams that have submitted assignments===&lt;br /&gt;
* Check will be done to verify whether the course staff is a participant. Staff can only review if they are a participant of the assignment.&lt;br /&gt;
* In the '''list_submissions.html.erb''' file, a &amp;quot;Perform Review&amp;quot; link is present if the final review due date of the assignment has not passed yet. If a review was already saved and the final review due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; will be present. If a review was already submitted and the due date has not passed, then a link to &amp;quot;View Review&amp;quot; will be present.&lt;br /&gt;
[[File:StaffPerformReview.jpg|center|The instructor/TA will see a &amp;quot;Perform Review&amp;quot; link if the final review due date has passed.]]&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot;, &amp;quot;Edit Review&amp;quot;, and &amp;quot;View Review&amp;quot; links will take the instructor/TA to the pages governed by '''response_controller#new''', '''response_controller#edit''', and '''response_controller#view''' respectively.&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link will only appear after the final review due date of the assignment has passed, if there are no review due dates, or if the user is not a participant of the assignment.&lt;br /&gt;
[[File:StaffAssignGrade.jpg|center|The instructor/TA will see a &amp;quot;Perform Review&amp;quot;, &amp;quot;Edit Review&amp;quot;, or &amp;quot;View Review&amp;quot; link if the final review due date has not passed.]]&lt;br /&gt;
&lt;br /&gt;
* View changes&lt;br /&gt;
:app/views/assignments/list_submissions.html.erb&lt;br /&gt;
        &amp;lt;% unless participants.empty? %&amp;gt;&lt;br /&gt;
              &amp;lt;nowiki&amp;gt;&amp;lt;!-- If no due dates for assignment, allow assigning grades. --&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;            &amp;lt;% if not @assignment.find_due_dates('review').nil? %&amp;gt;&lt;br /&gt;
              &amp;lt;nowiki&amp;gt;&amp;lt;!-- If due date has passed or user not a participant, Assign Grade. Otherwise, allow reviews. --&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
              &amp;lt;% if Time.now &amp;gt; @assignment.find_due_dates('review').sort_by{|due_date| due_date.due_at}[-1].due_at or not @participant %&amp;gt;&lt;br /&gt;
                &amp;lt;%= link_to 'Assign Grade', { controller: 'grades', action: 'view_team', id: participants.first.id}, target: '_blank' %&amp;gt;&lt;br /&gt;
              &amp;lt;% else %&amp;gt;&lt;br /&gt;
                &amp;lt;% review = @review_maps.select{|m| m.reviewee_id == team.id} %&amp;gt;&lt;br /&gt;
                &amp;lt;nowiki&amp;gt;&amp;lt;!-- If a review has not yet been performed, allow review. Otherwise, allow view/edit actions. --&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
                &amp;lt;% if review.size == 0 %&amp;gt;&lt;br /&gt;
                  &amp;lt;%= link_to 'Perform Review', {:controller =&amp;gt; 'review_mapping', :action =&amp;gt; 'add_staff_as_reviewer', :id =&amp;gt; @assignment.id, :contributor_id =&amp;gt; team.id, :user_id =&amp;gt; current_user.id} %&amp;gt;&lt;br /&gt;
                &amp;lt;% else %&amp;gt;&lt;br /&gt;
                  &amp;lt;% r =  Response.where([&amp;quot;map_id IN (?)&amp;quot;, review.last.id]).first %&amp;gt;&lt;br /&gt;
                  &amp;lt;% if r %&amp;gt;&lt;br /&gt;
                    &amp;lt;nowiki&amp;gt;&amp;lt;!-- Reviews cannot be edited after being submitted. --&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
                    &amp;lt;% if r.is_submitted %&amp;gt;&lt;br /&gt;
                      &amp;lt;%= link_to 'View Review', {:controller =&amp;gt; 'response', :action =&amp;gt; 'view', :id =&amp;gt; r.id, :return =&amp;gt; &amp;quot;instructor_review&amp;quot;} %&amp;gt;&lt;br /&gt;
                    &amp;lt;% else %&amp;gt;&lt;br /&gt;
                      &amp;lt;%= link_to 'Edit Review', {:controller =&amp;gt; 'response', :action =&amp;gt; 'edit', :id =&amp;gt; r.id, :return =&amp;gt; &amp;quot;instructor_review&amp;quot;} %&amp;gt;&lt;br /&gt;
                    &amp;lt;% end %&amp;gt;&lt;br /&gt;
                  &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;% end %&amp;gt;&lt;br /&gt;
              &amp;lt;% end %&amp;gt;&lt;br /&gt;
            &amp;lt;% else %&amp;gt;&lt;br /&gt;
              &amp;lt;%= link_to 'Assign Grade', { controller: 'grades', action: 'view_team', id: participants.first.id}, target: '_blank' %&amp;gt;&lt;br /&gt;
            &amp;lt;% end %&amp;gt;&lt;br /&gt;
          &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* A method was added to review_mapping_controller.rb that creates a new ReviewResponseMap for an instructor, TA, or Admin for the assignment specified by the id in the params. This will be called when the staff user clicks &amp;quot;PerformReview&amp;quot;. It will then redirect to '''response_controller#new'''.&lt;br /&gt;
&lt;br /&gt;
:app/controllers/review_mapping_controller.rb&lt;br /&gt;
  # Enable a staff user (Instructor, Teaching Assistant, Admin) to review all submissions for an assignment when they are a participant.&lt;br /&gt;
  # Will redirect to the list_submissions view.&lt;br /&gt;
  def add_staff_as_reviewer&lt;br /&gt;
    assignment = Assignment.find(params[:id])&lt;br /&gt;
    user = User.from_params(params)&lt;br /&gt;
    # Get registration url for user in case the user is not a participant in the assignment.&lt;br /&gt;
    regurl = url_for id: assignment.id,&lt;br /&gt;
                     user_id: user.id,&lt;br /&gt;
                     contributor_id: params[:contributor_id]&lt;br /&gt;
    reviewer = get_reviewer(user, assignment, regurl)&lt;br /&gt;
    # Create response map for the participant so they can begin review.&lt;br /&gt;
    map = ReviewResponseMap.where(reviewee_id: params[:contributor_id], reviewer_id: reviewer.id, reviewed_object_id: assignment.id).first&lt;br /&gt;
    if map.nil?&lt;br /&gt;
      map = ReviewResponseMap.create(reviewee_id: params[:contributor_id], reviewer_id: reviewer.id, reviewed_object_id: assignment.id)&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to :controller =&amp;gt; 'response', :action =&amp;gt; 'new', :id =&amp;gt; map.id, :contributor_id =&amp;gt; params[:contributor_id], :return =&amp;gt; &amp;quot;instructor_review&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
* A check is now performed to determine if the current user is a participant in the assignment. If so, we'll check if they have any existing reviews.&lt;br /&gt;
:app/controllers/assignments_controller.rb&lt;br /&gt;
  def list_submissions&lt;br /&gt;
    @assignment = Assignment.find(params[:id])&lt;br /&gt;
    @teams = Team.where(parent_id: params[:id])&lt;br /&gt;
    @participant = AssignmentParticipant.where(user_id: current_user.id, parent_id: @assignment.id).first&lt;br /&gt;
    # If the current user is not a participant in the assignment, they cannot review submissions.&lt;br /&gt;
    if not @participant.nil?&lt;br /&gt;
      @review_maps = ReviewResponseMap.where(reviewer_id: @participant.id, reviewed_object_id: @assignment.id)&lt;br /&gt;
    else&lt;br /&gt;
      @review_maps = []&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Problem 2: Allow authors to visually identify reviews done by the course staff===&lt;br /&gt;
* A star icon will be used to distinguish whether a review was done by a course staff and will appear below the 'Review #' heading.&lt;br /&gt;
* Add helper class grades_helper.rb to handle check to determine whether review was done by course staff based on the boolean flag attached to a response.&lt;br /&gt;
* Change will be made in view_team.html.erb such that after verifying that a response was done by a course staff via identity_helper.rb, a star is displayed below the 'Review #' heading.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Previously, a review that was done by a course staff would not be visually recognizable by an author of the particular reviewed assignment. With the following changes, however, authors will be able to recognize reviews done under the &amp;quot;Summary Report for assignment&amp;quot; page, as reviews done by course staff will have a black star located immediately below the &amp;quot;Review #&amp;quot; header. A boolean check is done in the ''review_done_by_course_staff?'' method and used in ''view_team.html.erb'' to display a black star below a particular review if and only if ''review_done_by_course_staff?'' outputs true.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/helpers/grades_helper.rb&lt;br /&gt;
    # used to determine whether a review was done by a course staff&lt;br /&gt;
    # course staff is defined as an Instructor or Teaching Assistant&lt;br /&gt;
    def review_done_by_course_staff?(review)&lt;br /&gt;
      if review.nil?&lt;br /&gt;
        false&lt;br /&gt;
      else&lt;br /&gt;
        role = Role.find(User.find(Participant.find(ResponseMap.find(Response.find(review.id).map_id).reviewer_id).user_id).role_id).name&lt;br /&gt;
        role == (&amp;quot;Instructor&amp;quot; || &amp;quot;Teaching Assistant&amp;quot;) ? true : false&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
:app/views/grades/view_team.html.erb&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: black; border:1px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- instructors (or higher level users) see reviewer name, students see anonymized string --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- instructor reviews labeled with a black star under the Review heading --&amp;gt;&lt;br /&gt;
    &amp;lt;% if (['Student'].include? @current_role_name) &amp;amp;&amp;amp; (@assignment.is_anonymous) %&amp;gt;&lt;br /&gt;
        &amp;lt;% review_name = &amp;quot;Review &amp;quot; + i.to_s  %&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;% review_name = User.find(Participant.find(ResponseMap.find(Response.find(review.id).map_id).reviewer_id).user_id).fullname(session[:ip]).to_s %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;th class=&amp;quot;sorter-false&amp;quot;&amp;gt; &amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;../response/view?id=&amp;lt;%= review.id.to_s %&amp;gt;&amp;quot;  data-toggle=&amp;quot;tooltip&amp;quot; data-placement=&amp;quot;right&amp;quot; title=&amp;quot;Click to see details&amp;quot;&amp;gt;&amp;lt;%= review_name %&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;% if review_done_by_course_staff?(review) %&amp;gt;&lt;br /&gt;
        &amp;lt;br&amp;gt;&amp;lt;span class=&amp;quot;glyphicon glyphicon-star&amp;quot; style=&amp;quot;margin:auto; display:table&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;&lt;br /&gt;
[https://github.com/epeden/expertiza/pull/15?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* A staff user (Instructor, TA, Admin) will see the star for reviews done by another staff member as well as the names of all the reviewers.&lt;br /&gt;
[[File:InstructorReviews.png]]&lt;br /&gt;
* A student will still see the star for reviews done by a staff member but all names are anonymous.&lt;br /&gt;
[[File:StudentReviews.png]]&lt;br /&gt;
&lt;br /&gt;
===All Modified Files===&lt;br /&gt;
*app/controllers/assignments_controller.rb&lt;br /&gt;
*app/controllers/response_controller.rb&lt;br /&gt;
*app/controllers/review_mapping_controller.rb&lt;br /&gt;
*app/helpers/grades_helper.rb&lt;br /&gt;
*app/views/assignments/list_submissions.html.erb&lt;br /&gt;
*app/views/grades/view_team.html.erb&lt;br /&gt;
*app/views/response/response.html.erb&lt;br /&gt;
*config/routes.rb&lt;br /&gt;
&lt;br /&gt;
=='''Flow Chart'''==&lt;br /&gt;
This flow chart demonstrates the desired functionality. While students must submit reviews in the review stage, instructors/TA's can submit reviews any time before the final deadline. In order to submit reviews, the instructor/TA must be added as a participant to the assignment. Then, they will go to &amp;quot;View Submissions&amp;quot; on the Manage Assignments page. If the final deadline for the assignment has passed, they will see an &amp;quot;Assign Grade&amp;quot; link next to each submission. Otherwise, they will see a &amp;quot;Perform Review&amp;quot; link if a review has not been submitted yet or an &amp;quot;Edit Review&amp;quot; link if a review has been submitted already. Students can view only the reviews they have performed and the reviews of their work, while instructors/TA's can see all reviews for the assignment. Reviews done by course staff will be marked with a star to distinguish them from students' reviews.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Flow chart.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;br /&gt;
This diagram represents the relationship between different models involved with our proposed solution. We do not anticipate any changes to the database schema.&lt;br /&gt;
&lt;br /&gt;
A model that's central to our proposed solution is the AssignmentQuestionnaire model defined in assignment_questionnaire.rb. It holds the user ID of the User (user.rb) who reviewed the assignment, from which we will determine the user's role: Instructor, TA, or student. It also contains the ID of the Assignment (assignment.rb) being reviewed. Additionally, the Questionnaire (questionnaire.rb) can be located by its ID defined in AssignmentQuestionnaire and consists of the Questions (question.rb) users use to review the assignment. &lt;br /&gt;
&lt;br /&gt;
[[File:Model2picture.png ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
* Manual UI verification of our added features can be found in the demo video in the Resources section. These cases are included:&lt;br /&gt;
&lt;br /&gt;
* An &amp;quot;Assign Grade&amp;quot; link is visible in the submissions list if the instructor is not a participant. Instructor can be added as participant&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click on the icon to view submissions.&lt;br /&gt;
# An &amp;quot;Assign Grade&amp;quot; link should be visible for the submissions.&lt;br /&gt;
# Navigate back to the test assignment and click the icon to add participants.&lt;br /&gt;
# Add the instructor as a participant on the assignment.&lt;br /&gt;
# Click on the icon to view submissions. A &amp;quot;Perform Review&amp;quot; link should be present for the submissions.&lt;br /&gt;
&lt;br /&gt;
* Instructor should be able to add a review on an assignment if they are a participant and the review deadline has not passed.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click on the Edit icon. Click on Due Dates and confirm the review due date has not passed.&lt;br /&gt;
# Click on the View Submissions icon.&lt;br /&gt;
# Verify a list of submissions appears. The “Perform review” link should be visible.&lt;br /&gt;
# Click on the “Perform review” link.&lt;br /&gt;
# Verify submitted work for team is visible.&lt;br /&gt;
# Complete review and click save.&lt;br /&gt;
&lt;br /&gt;
* When an author view their reviews, reviews done by instructors should present a star.&lt;br /&gt;
# After logging in as the student, go to Assignments.&lt;br /&gt;
# Click on the test assignment&lt;br /&gt;
# Click &amp;quot;Your scores&amp;quot;&lt;br /&gt;
# If a review was done by an instructor, verify the star is present.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
Comprehensive RSpec tests were added for all controller and model classes that we changed as well as automated UI tests for features we added. Test cases include: &lt;br /&gt;
* Verify that instructors can be added as participants for assignments.&lt;br /&gt;
* Verify that assignment reviews can be submitted by users with an Instructor, TA, or Student role assigned.&lt;br /&gt;
* Verify if a instructor is not a participant, an &amp;quot;Assign Grade&amp;quot; is visible.&lt;br /&gt;
* Verify if an assignment's deadline is passed and the instructor is a participant, an &amp;quot;Assign Grade&amp;quot; is visible.&lt;br /&gt;
* Verify if an assignment's deadline is not passed and the instructor is a participant, a &amp;quot;Perform Review&amp;quot; link is visible.&lt;br /&gt;
* Verify if a review has already been submitted by an instructor, a new ReviewResponseMap will not be created for the instructor when they load the list_submissions view.&lt;br /&gt;
* Verify a star icon appears next to only reviews done by instructors/TAs in the responses view. This should be visible to both staff and students.&lt;br /&gt;
&lt;br /&gt;
Modified RSpec test files:&lt;br /&gt;
*spec/controllers/assignments_controller_spec.rb&lt;br /&gt;
*spec/controllers/review_mapping_controller_spec.rb&lt;br /&gt;
*spec/features/assignment_list_submissions_spec.rb&lt;br /&gt;
*spec/helpers/grades_helper_spec.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Problem 1: Allow the instructor and teaching assistants to review teams that have submitted assignments===&lt;br /&gt;
&lt;br /&gt;
===Problem 2: Allow authors to visually identify reviews done by the course staff===&lt;br /&gt;
UI Testing&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Login as an instructor&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;Username: instructor6&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;Password: password&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; As this test is an extension of the one conducted in Part 1, impersonate the student who the instructor performed a review for. Go to Manage -&amp;gt; Impersonate User and enter the student's user name.&lt;br /&gt;
&amp;lt;li&amp;gt; Now impersonated as the chosen student, go to Assignments -&amp;gt; Project_Name -&amp;gt; Your Scores. &lt;br /&gt;
&amp;lt;li&amp;gt; Yous should now be in the &amp;quot;Summary Report for assignment&amp;quot; page. Below whichever review that the instructor submitted, there will be a black star.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Ui_test_part_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RSpec Testing&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Additional tests were created for methods in the same grades_helper helper class that were not written by this team in order to abide by the philosophy that you should always leave code in a better position that they were originally.&lt;br /&gt;
&lt;br /&gt;
:spec/helpers/grades_helper_spec.rb&lt;br /&gt;
&lt;br /&gt;
  describe 'has_team_and_metareview' do&lt;br /&gt;
    before(:each) do&lt;br /&gt;
      @assignment = create(:assignment, max_team_size: 1)&lt;br /&gt;
    end&lt;br /&gt;
    it 'should correctly identify the assignment from an assignment id' do&lt;br /&gt;
      params[:id] = @assignment.id&lt;br /&gt;
      result = Assignment.find(params[:id])&lt;br /&gt;
      expect(result).to eq(@assignment)&lt;br /&gt;
    end&lt;br /&gt;
    it 'should correctly identify the assignment from a participant id' do&lt;br /&gt;
      participant = create(:participant, assignment: @assignment)&lt;br /&gt;
      params[:id] = participant.id&lt;br /&gt;
      result = Participant.find(params[:id]).parent_id&lt;br /&gt;
      expect(result).to eq(@assignment.id)&lt;br /&gt;
    end&lt;br /&gt;
    it 'should return 0 for an assignment without a team or a metareview deadline after a view action' do&lt;br /&gt;
      params[:action] = 'view'&lt;br /&gt;
      params[:id] = @assignment.id&lt;br /&gt;
      result = has_team_and_metareview?&lt;br /&gt;
      expect(result).to be == {has_team: false, has_metareview: false, true_num: 0}&lt;br /&gt;
    end&lt;br /&gt;
    it 'should return 1 for an assignment with a team but no metareview deadline after a view action' do&lt;br /&gt;
      @assignment.max_team_size = 2&lt;br /&gt;
      @assignment.save&lt;br /&gt;
      params[:action] = 'view'&lt;br /&gt;
      params[:id] = @assignment.id&lt;br /&gt;
      result = has_team_and_metareview?&lt;br /&gt;
      expect(result).to be == {has_team: true, has_metareview: false, true_num: 1}&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  describe 'type_and_max' do&lt;br /&gt;
    it 'should fail when passing in nil row value' do&lt;br /&gt;
      expect { type_and_max(nil) }.to raise_exception(NoMethodError)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  describe 'underlined' do&lt;br /&gt;
    it 'should fail when passing in nil score value' do&lt;br /&gt;
      expect { underlined?(nil) }.to raise_exception(NoMethodError)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  describe 'retrieve_questions' do&lt;br /&gt;
    it 'should fail when passing in nil values for questionnaires and assignment_id' do&lt;br /&gt;
      expect { retrieve_questions(nil,nil) }.to raise_exception(NoMethodError)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  describe 'review_done_by_course_staff' do&lt;br /&gt;
    it 'should return false' do&lt;br /&gt;
      expect(review_done_by_course_staff?(nil)).to eq(false)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
===Code Coverage===&lt;br /&gt;
Coverage increased (+11.01%) to 41.493%&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Resources'''==&lt;br /&gt;
Forked Repo: https://github.com/epeden/expertiza&lt;br /&gt;
&lt;br /&gt;
Expertiza Pull Request: https://github.com/expertiza/expertiza/pull/1729&lt;br /&gt;
&lt;br /&gt;
Demo Video: https://youtu.be/mDsc5n1NZ9E&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133797</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133797"/>
		<updated>2020-04-24T03:22:58Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: /* Problem 2: Allow authors to visually identify reviews done by the course staff */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open-source project that is built using the [http://rubyonrails.org/ Ruby on Rails] framework. At its core, it is a highly versatile tool that academic institutions can use to craft learning objectives centered around team projects, peer reviews, and highly-customizable assignments.&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are two main issues:&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Implementation Details'''==&lt;br /&gt;
&lt;br /&gt;
===Problem 1: Allow the instructor and teaching assistants to review teams that have submitted assignments===&lt;br /&gt;
* Check will be done to verify whether the course staff is a participant. Staff can only review if they are a participant of the assignment.&lt;br /&gt;
* In the '''list_submissions.html.erb''' file, a &amp;quot;Perform Review&amp;quot; link is present if the final review due date of the assignment has not passed yet. If a review was already saved and the final review due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; will be present. If a review was already submitted and the due date has not passed, then a link to &amp;quot;View Review&amp;quot; will be present.&lt;br /&gt;
[[File:StaffPerformReview.jpg|center|The instructor/TA will see a &amp;quot;Perform Review&amp;quot; link if the final review due date has passed.]]&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot;, &amp;quot;Edit Review&amp;quot;, and &amp;quot;View Review&amp;quot; links will take the instructor/TA to the pages governed by '''response_controller#new''', '''response_controller#edit''', and '''response_controller#view''' respectively.&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link will only appear after the final review due date of the assignment has passed, if there are no review due dates, or if the user is not a participant of the assignment.&lt;br /&gt;
[[File:StaffAssignGrade.jpg|center|The instructor/TA will see a &amp;quot;Perform Review&amp;quot;, &amp;quot;Edit Review&amp;quot;, or &amp;quot;View Review&amp;quot; link if the final review due date has not passed.]]&lt;br /&gt;
&lt;br /&gt;
* View changes&lt;br /&gt;
:app/views/assignments/list_submissions.html.erb&lt;br /&gt;
        &amp;lt;% unless participants.empty? %&amp;gt;&lt;br /&gt;
              &amp;lt;nowiki&amp;gt;&amp;lt;!-- If no due dates for assignment, allow assigning grades. --&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;            &amp;lt;% if not @assignment.find_due_dates('review').nil? %&amp;gt;&lt;br /&gt;
              &amp;lt;nowiki&amp;gt;&amp;lt;!-- If due date has passed or user not a participant, Assign Grade. Otherwise, allow reviews. --&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
              &amp;lt;% if Time.now &amp;gt; @assignment.find_due_dates('review').sort_by{|due_date| due_date.due_at}[-1].due_at or not @participant %&amp;gt;&lt;br /&gt;
                &amp;lt;%= link_to 'Assign Grade', { controller: 'grades', action: 'view_team', id: participants.first.id}, target: '_blank' %&amp;gt;&lt;br /&gt;
              &amp;lt;% else %&amp;gt;&lt;br /&gt;
                &amp;lt;% review = @review_maps.select{|m| m.reviewee_id == team.id} %&amp;gt;&lt;br /&gt;
                &amp;lt;nowiki&amp;gt;&amp;lt;!-- If a review has not yet been performed, allow review. Otherwise, allow view/edit actions. --&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
                &amp;lt;% if review.size == 0 %&amp;gt;&lt;br /&gt;
                  &amp;lt;%= link_to 'Perform Review', {:controller =&amp;gt; 'review_mapping', :action =&amp;gt; 'add_staff_as_reviewer', :id =&amp;gt; @assignment.id, :contributor_id =&amp;gt; team.id, :user_id =&amp;gt; current_user.id} %&amp;gt;&lt;br /&gt;
                &amp;lt;% else %&amp;gt;&lt;br /&gt;
                  &amp;lt;% r =  Response.where([&amp;quot;map_id IN (?)&amp;quot;, review.last.id]).first %&amp;gt;&lt;br /&gt;
                  &amp;lt;% if r %&amp;gt;&lt;br /&gt;
                    &amp;lt;nowiki&amp;gt;&amp;lt;!-- Reviews cannot be edited after being submitted. --&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
                    &amp;lt;% if r.is_submitted %&amp;gt;&lt;br /&gt;
                      &amp;lt;%= link_to 'View Review', {:controller =&amp;gt; 'response', :action =&amp;gt; 'view', :id =&amp;gt; r.id, :return =&amp;gt; &amp;quot;instructor_review&amp;quot;} %&amp;gt;&lt;br /&gt;
                    &amp;lt;% else %&amp;gt;&lt;br /&gt;
                      &amp;lt;%= link_to 'Edit Review', {:controller =&amp;gt; 'response', :action =&amp;gt; 'edit', :id =&amp;gt; r.id, :return =&amp;gt; &amp;quot;instructor_review&amp;quot;} %&amp;gt;&lt;br /&gt;
                    &amp;lt;% end %&amp;gt;&lt;br /&gt;
                  &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;% end %&amp;gt;&lt;br /&gt;
              &amp;lt;% end %&amp;gt;&lt;br /&gt;
            &amp;lt;% else %&amp;gt;&lt;br /&gt;
              &amp;lt;%= link_to 'Assign Grade', { controller: 'grades', action: 'view_team', id: participants.first.id}, target: '_blank' %&amp;gt;&lt;br /&gt;
            &amp;lt;% end %&amp;gt;&lt;br /&gt;
          &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* A method was added to review_mapping_controller.rb that creates a new ReviewResponseMap for an instructor, TA, or Admin for the assignment specified by the id in the params. This will be called when the staff user clicks &amp;quot;PerformReview&amp;quot;. It will then redirect to '''response_controller#new'''.&lt;br /&gt;
&lt;br /&gt;
:app/controllers/review_mapping_controller.rb&lt;br /&gt;
  # Enable a staff user (Instructor, Teaching Assistant, Admin) to review all submissions for an assignment when they are a participant.&lt;br /&gt;
  # Will redirect to the list_submissions view.&lt;br /&gt;
  def add_staff_as_reviewer&lt;br /&gt;
    assignment = Assignment.find(params[:id])&lt;br /&gt;
    user = User.from_params(params)&lt;br /&gt;
    # Get registration url for user in case the user is not a participant in the assignment.&lt;br /&gt;
    regurl = url_for id: assignment.id,&lt;br /&gt;
                     user_id: user.id,&lt;br /&gt;
                     contributor_id: params[:contributor_id]&lt;br /&gt;
    reviewer = get_reviewer(user, assignment, regurl)&lt;br /&gt;
    # Create response map for the participant so they can begin review.&lt;br /&gt;
    map = ReviewResponseMap.where(reviewee_id: params[:contributor_id], reviewer_id: reviewer.id, reviewed_object_id: assignment.id).first&lt;br /&gt;
    if map.nil?&lt;br /&gt;
      map = ReviewResponseMap.create(reviewee_id: params[:contributor_id], reviewer_id: reviewer.id, reviewed_object_id: assignment.id)&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to :controller =&amp;gt; 'response', :action =&amp;gt; 'new', :id =&amp;gt; map.id, :contributor_id =&amp;gt; params[:contributor_id], :return =&amp;gt; &amp;quot;instructor_review&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
* A check is now performed to determine if the current user is a participant in the assignment. If so, we'll check if they have any existing reviews.&lt;br /&gt;
:app/controllers/assignments_controller.rb&lt;br /&gt;
  def list_submissions&lt;br /&gt;
    @assignment = Assignment.find(params[:id])&lt;br /&gt;
    @teams = Team.where(parent_id: params[:id])&lt;br /&gt;
    @participant = AssignmentParticipant.where(user_id: current_user.id, parent_id: @assignment.id).first&lt;br /&gt;
    # If the current user is not a participant in the assignment, they cannot review submissions.&lt;br /&gt;
    if not @participant.nil?&lt;br /&gt;
      @review_maps = ReviewResponseMap.where(reviewer_id: @participant.id, reviewed_object_id: @assignment.id)&lt;br /&gt;
    else&lt;br /&gt;
      @review_maps = []&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Problem 2: Allow authors to visually identify reviews done by the course staff===&lt;br /&gt;
* A star icon will be used to distinguish whether a review was done by a course staff and will appear below the 'Review #' heading.&lt;br /&gt;
* Add helper class grades_helper.rb to handle check to determine whether review was done by course staff based on the boolean flag attached to a response.&lt;br /&gt;
* Change will be made in view_team.html.erb such that after verifying that a response was done by a course staff via identity_helper.rb, a star is displayed below the 'Review #' heading.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Previously, a review that was done by a course staff would not be visually recognizable by an author of the particular reviewed assignment. With the following changes, however, authors will be able to recognize reviews done under the &amp;quot;Summary Report for assignment&amp;quot; page, as reviews done by course staff will have a black star located immediately below the &amp;quot;Review #&amp;quot; header. A boolean check is done in the ''review_done_by_course_staff?'' method and used in ''view_team.html.erb'' to display a black star below a particular review if and only if ''review_done_by_course_staff?'' outputs true.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/helpers/grades_helper.rb&lt;br /&gt;
    # used to determine whether a review was done by a course staff&lt;br /&gt;
    # course staff is defined as an Instructor or Teaching Assistant&lt;br /&gt;
    def review_done_by_course_staff?(review)&lt;br /&gt;
      if review.nil?&lt;br /&gt;
        false&lt;br /&gt;
      else&lt;br /&gt;
        role = Role.find(User.find(Participant.find(ResponseMap.find(Response.find(review.id).map_id).reviewer_id).user_id).role_id).name&lt;br /&gt;
        role == (&amp;quot;Instructor&amp;quot; || &amp;quot;Teaching Assistant&amp;quot;) ? true : false&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
:app/views/grades/view_team.html.erb&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: black; border:1px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- instructors (or higher level users) see reviewer name, students see anonymized string --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- instructor reviews labeled with a black star under the Review heading --&amp;gt;&lt;br /&gt;
    &amp;lt;% if (['Student'].include? @current_role_name) &amp;amp;&amp;amp; (@assignment.is_anonymous) %&amp;gt;&lt;br /&gt;
        &amp;lt;% review_name = &amp;quot;Review &amp;quot; + i.to_s  %&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;% review_name = User.find(Participant.find(ResponseMap.find(Response.find(review.id).map_id).reviewer_id).user_id).fullname(session[:ip]).to_s %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;th class=&amp;quot;sorter-false&amp;quot;&amp;gt; &amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;../response/view?id=&amp;lt;%= review.id.to_s %&amp;gt;&amp;quot;  data-toggle=&amp;quot;tooltip&amp;quot; data-placement=&amp;quot;right&amp;quot; title=&amp;quot;Click to see details&amp;quot;&amp;gt;&amp;lt;%= review_name %&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;% if review_done_by_course_staff?(review) %&amp;gt;&lt;br /&gt;
        &amp;lt;br&amp;gt;&amp;lt;span class=&amp;quot;glyphicon glyphicon-star&amp;quot; style=&amp;quot;margin:auto; display:table&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;&lt;br /&gt;
[https://github.com/epeden/expertiza/pull/15?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:InstructorReviews.png]]&lt;br /&gt;
[[File:StudentReviews.png]]&lt;br /&gt;
&lt;br /&gt;
===All Modified Files===&lt;br /&gt;
*app/controllers/assignments_controller.rb&lt;br /&gt;
*app/controllers/response_controller.rb&lt;br /&gt;
*app/controllers/review_mapping_controller.rb&lt;br /&gt;
*app/helpers/grades_helper.rb&lt;br /&gt;
*app/views/assignments/list_submissions.html.erb&lt;br /&gt;
*app/views/grades/view_team.html.erb&lt;br /&gt;
*app/views/response/response.html.erb&lt;br /&gt;
*config/routes.rb&lt;br /&gt;
&lt;br /&gt;
=='''Flow Chart'''==&lt;br /&gt;
This flow chart demonstrates the desired functionality. While students must submit reviews in the review stage, instructors/TA's can submit reviews any time before the final deadline. In order to submit reviews, the instructor/TA must be added as a participant to the assignment. Then, they will go to &amp;quot;View Submissions&amp;quot; on the Manage Assignments page. If the final deadline for the assignment has passed, they will see an &amp;quot;Assign Grade&amp;quot; link next to each submission. Otherwise, they will see a &amp;quot;Perform Review&amp;quot; link if a review has not been submitted yet or an &amp;quot;Edit Review&amp;quot; link if a review has been submitted already. Students can view only the reviews they have performed and the reviews of their work, while instructors/TA's can see all reviews for the assignment. Reviews done by course staff will be marked with a star to distinguish them from students' reviews.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Flow chart.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;br /&gt;
This diagram represents the relationship between different models involved with our proposed solution. We do not anticipate any changes to the database schema.&lt;br /&gt;
&lt;br /&gt;
A model that's central to our proposed solution is the AssignmentQuestionnaire model defined in assignment_questionnaire.rb. It holds the user ID of the User (user.rb) who reviewed the assignment, from which we will determine the user's role: Instructor, TA, or student. It also contains the ID of the Assignment (assignment.rb) being reviewed. Additionally, the Questionnaire (questionnaire.rb) can be located by its ID defined in AssignmentQuestionnaire and consists of the Questions (question.rb) users use to review the assignment. &lt;br /&gt;
&lt;br /&gt;
[[File:Model2picture.png ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
* Manual UI verification of our added features can be found in the demo video in the Resources section. These cases are included:&lt;br /&gt;
&lt;br /&gt;
* An &amp;quot;Assign Grade&amp;quot; link is visible in the submissions list if the instructor is not a participant. Instructor can be added as participant&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click on the icon to view submissions.&lt;br /&gt;
# An &amp;quot;Assign Grade&amp;quot; link should be visible for the submissions.&lt;br /&gt;
# Navigate back to the test assignment and click the icon to add participants.&lt;br /&gt;
# Add the instructor as a participant on the assignment.&lt;br /&gt;
# Click on the icon to view submissions. A &amp;quot;Perform Review&amp;quot; link should be present for the submissions.&lt;br /&gt;
&lt;br /&gt;
* Instructor should be able to add a review on an assignment if they are a participant and the review deadline has not passed.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click on the Edit icon. Click on Due Dates and confirm the review due date has not passed.&lt;br /&gt;
# Click on the View Submissions icon.&lt;br /&gt;
# Verify a list of submissions appears. The “Perform review” link should be visible.&lt;br /&gt;
# Click on the “Perform review” link.&lt;br /&gt;
# Verify submitted work for team is visible.&lt;br /&gt;
# Complete review and click save.&lt;br /&gt;
&lt;br /&gt;
* When an author view their reviews, reviews done by instructors should present a star.&lt;br /&gt;
# After logging in as the student, go to Assignments.&lt;br /&gt;
# Click on the test assignment&lt;br /&gt;
# Click &amp;quot;Your scores&amp;quot;&lt;br /&gt;
# If a review was done by an instructor, verify the star is present.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
Comprehensive RSpec tests were added for all controller and model classes that we changed as well as automated UI tests for features we added. Test cases include: &lt;br /&gt;
* Verify that instructors can be added as participants for assignments.&lt;br /&gt;
* Verify that assignment reviews can be submitted by users with an Instructor, TA, or Student role assigned.&lt;br /&gt;
* Verify if a instructor is not a participant, an &amp;quot;Assign Grade&amp;quot; is visible.&lt;br /&gt;
* Verify if an assignment's deadline is passed and the instructor is a participant, an &amp;quot;Assign Grade&amp;quot; is visible.&lt;br /&gt;
* Verify if an assignment's deadline is not passed and the instructor is a participant, a &amp;quot;Perform Review&amp;quot; link is visible.&lt;br /&gt;
* Verify if a review has already been submitted by an instructor, a new ReviewResponseMap will not be created for the instructor when they load the list_submissions view.&lt;br /&gt;
* Verify a star icon appears next to only reviews done by instructors/TAs in the responses view. This should be visible to both staff and students.&lt;br /&gt;
&lt;br /&gt;
Modified RSpec test files:&lt;br /&gt;
*spec/controllers/assignments_controller_spec.rb&lt;br /&gt;
*spec/controllers/review_mapping_controller_spec.rb&lt;br /&gt;
*spec/features/assignment_list_submissions_spec.rb&lt;br /&gt;
*spec/helpers/grades_helper_spec.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Problem 1: Allow the instructor and teaching assistants to review teams that have submitted assignments===&lt;br /&gt;
&lt;br /&gt;
===Problem 2: Allow authors to visually identify reviews done by the course staff===&lt;br /&gt;
UI Testing&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Login as an instructor&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;Username: instructor6&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;Password: password&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; As this test is an extension of the one conducted in Part 1, impersonate the student who the instructor performed a review for. Go to Manage -&amp;gt; Impersonate User and enter the student's user name.&lt;br /&gt;
&amp;lt;li&amp;gt; Now impersonated as the chosen student, go to Assignments -&amp;gt; Project_Name -&amp;gt; Your Scores. &lt;br /&gt;
&amp;lt;li&amp;gt; Yous should now be in the &amp;quot;Summary Report for assignment&amp;quot; page. Below whichever review that the instructor submitted, there will be a black star.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Ui_test_part_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RSpec Testing&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Tests were created for methods in the same grades_helper helper class that were not written by the team in order to abide by the philosophy that you should always leave code in a better position that they were originally.&lt;br /&gt;
&lt;br /&gt;
:spec/helpers/grades_helper_spec.rb&lt;br /&gt;
&lt;br /&gt;
  describe 'has_team_and_metareview' do&lt;br /&gt;
    before(:each) do&lt;br /&gt;
      @assignment = create(:assignment, max_team_size: 1)&lt;br /&gt;
    end&lt;br /&gt;
    it 'should correctly identify the assignment from an assignment id' do&lt;br /&gt;
      params[:id] = @assignment.id&lt;br /&gt;
      result = Assignment.find(params[:id])&lt;br /&gt;
      expect(result).to eq(@assignment)&lt;br /&gt;
    end&lt;br /&gt;
    it 'should correctly identify the assignment from a participant id' do&lt;br /&gt;
      participant = create(:participant, assignment: @assignment)&lt;br /&gt;
      params[:id] = participant.id&lt;br /&gt;
      result = Participant.find(params[:id]).parent_id&lt;br /&gt;
      expect(result).to eq(@assignment.id)&lt;br /&gt;
    end&lt;br /&gt;
    it 'should return 0 for an assignment without a team or a metareview deadline after a view action' do&lt;br /&gt;
      params[:action] = 'view'&lt;br /&gt;
      params[:id] = @assignment.id&lt;br /&gt;
      result = has_team_and_metareview?&lt;br /&gt;
      expect(result).to be == {has_team: false, has_metareview: false, true_num: 0}&lt;br /&gt;
    end&lt;br /&gt;
    it 'should return 1 for an assignment with a team but no metareview deadline after a view action' do&lt;br /&gt;
      @assignment.max_team_size = 2&lt;br /&gt;
      @assignment.save&lt;br /&gt;
      params[:action] = 'view'&lt;br /&gt;
      params[:id] = @assignment.id&lt;br /&gt;
      result = has_team_and_metareview?&lt;br /&gt;
      expect(result).to be == {has_team: true, has_metareview: false, true_num: 1}&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  describe 'type_and_max' do&lt;br /&gt;
    it 'should fail when passing in nil row value' do&lt;br /&gt;
      expect { type_and_max(nil) }.to raise_exception(NoMethodError)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  describe 'underlined' do&lt;br /&gt;
    it 'should fail when passing in nil score value' do&lt;br /&gt;
      expect { underlined?(nil) }.to raise_exception(NoMethodError)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  describe 'retrieve_questions' do&lt;br /&gt;
    it 'should fail when passing in nil values for questionnaires and assignment_id' do&lt;br /&gt;
      expect { retrieve_questions(nil,nil) }.to raise_exception(NoMethodError)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  describe 'review_done_by_course_staff' do&lt;br /&gt;
    it 'should return false' do&lt;br /&gt;
      expect(review_done_by_course_staff?(nil)).to eq(false)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
===Code Coverage===&lt;br /&gt;
Coverage increased (+11.01%) to 41.493%&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Resources'''==&lt;br /&gt;
Forked Repo: https://github.com/epeden/expertiza&lt;br /&gt;
&lt;br /&gt;
Expertiza Pull Request: https://github.com/expertiza/expertiza/pull/1729&lt;br /&gt;
&lt;br /&gt;
Demo Video: https://youtu.be/mDsc5n1NZ9E&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133794</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133794"/>
		<updated>2020-04-24T03:13:32Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open-source project that is built using the [http://rubyonrails.org/ Ruby on Rails] framework. At its core, it is a highly versatile tool that academic institutions can use to craft learning objectives centered around team projects, peer reviews, and highly-customizable assignments.&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are two main issues:&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Implementation Details'''==&lt;br /&gt;
&lt;br /&gt;
===Problem 1: Allow the instructor and teaching assistants to review teams that have submitted assignments===&lt;br /&gt;
* Check will be done to verify whether the course staff is a participant. Staff can only review if they are a participant of the assignment.&lt;br /&gt;
* In the '''list_submissions.html.erb''' file, a &amp;quot;Perform Review&amp;quot; link is present if the final review due date of the assignment has not passed yet. If a review was already saved and the final review due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; will be present. If a review was already submitted and the due date has not passed, then a link to &amp;quot;View Review&amp;quot; will be present.&lt;br /&gt;
[[File:StaffPerformReview.jpg|center|The instructor/TA will see a &amp;quot;Perform Review&amp;quot; link if the final review due date has passed.]]&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot;, &amp;quot;Edit Review&amp;quot;, and &amp;quot;View Review&amp;quot; links will take the instructor/TA to the pages governed by '''response_controller#new''', '''response_controller#edit''', and '''response_controller#view''' respectively.&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link will only appear after the final review due date of the assignment has passed, if there are no review due dates, or if the user is not a participant of the assignment.&lt;br /&gt;
[[File:StaffAssignGrade.jpg|center|The instructor/TA will see a &amp;quot;Perform Review&amp;quot;, &amp;quot;Edit Review&amp;quot;, or &amp;quot;View Review&amp;quot; link if the final review due date has not passed.]]&lt;br /&gt;
&lt;br /&gt;
* View changes&lt;br /&gt;
:app/views/assignments/list_submissions.html.erb&lt;br /&gt;
        &amp;lt;% unless participants.empty? %&amp;gt;&lt;br /&gt;
              &amp;lt;!-- If no due dates for assignment, allow assigning grades. --&amp;gt;&lt;br /&gt;
            &amp;lt;% if not @assignment.find_due_dates('review').nil? %&amp;gt;&lt;br /&gt;
              &amp;lt;!-- If due date has passed or user not a participant, Assign Grade. Otherwise, allow reviews. --&amp;gt;&lt;br /&gt;
              &amp;lt;% if Time.now &amp;gt; @assignment.find_due_dates('review').sort_by{|due_date| due_date.due_at}[-1].due_at or not @participant %&amp;gt;&lt;br /&gt;
                &amp;lt;%= link_to 'Assign Grade', { controller: 'grades', action: 'view_team', id: participants.first.id}, target: '_blank' %&amp;gt;&lt;br /&gt;
              &amp;lt;% else %&amp;gt;&lt;br /&gt;
                &amp;lt;% review = @review_maps.select{|m| m.reviewee_id == team.id} %&amp;gt;&lt;br /&gt;
                &amp;lt;!-- If a review has not yet been performed, allow review. Otherwise, allow view/edit actions. --&amp;gt;&lt;br /&gt;
                &amp;lt;% if review.size == 0 %&amp;gt;&lt;br /&gt;
                  &amp;lt;%= link_to 'Perform Review', {:controller =&amp;gt; 'review_mapping', :action =&amp;gt; 'add_staff_as_reviewer', :id =&amp;gt; @assignment.id, :contributor_id =&amp;gt; team.id, :user_id =&amp;gt; current_user.id} %&amp;gt;&lt;br /&gt;
                &amp;lt;% else %&amp;gt;&lt;br /&gt;
                  &amp;lt;% r =  Response.where([&amp;quot;map_id IN (?)&amp;quot;, review.last.id]).first %&amp;gt;&lt;br /&gt;
                  &amp;lt;% if r %&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Reviews cannot be edited after being submitted. --&amp;gt;&lt;br /&gt;
                    &amp;lt;% if r.is_submitted %&amp;gt;&lt;br /&gt;
                      &amp;lt;%= link_to 'View Review', {:controller =&amp;gt; 'response', :action =&amp;gt; 'view', :id =&amp;gt; r.id, :return =&amp;gt; &amp;quot;instructor_review&amp;quot;} %&amp;gt;&lt;br /&gt;
                    &amp;lt;% else %&amp;gt;&lt;br /&gt;
                      &amp;lt;%= link_to 'Edit Review', {:controller =&amp;gt; 'response', :action =&amp;gt; 'edit', :id =&amp;gt; r.id, :return =&amp;gt; &amp;quot;instructor_review&amp;quot;} %&amp;gt;&lt;br /&gt;
                    &amp;lt;% end %&amp;gt;&lt;br /&gt;
                  &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;% end %&amp;gt;&lt;br /&gt;
              &amp;lt;% end %&amp;gt;&lt;br /&gt;
            &amp;lt;% else %&amp;gt;&lt;br /&gt;
              &amp;lt;%= link_to 'Assign Grade', { controller: 'grades', action: 'view_team', id: participants.first.id}, target: '_blank' %&amp;gt;&lt;br /&gt;
            &amp;lt;% end %&amp;gt;&lt;br /&gt;
          &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* A method was added to review_mapping_controller.rb that creates a new ReviewResponseMap for an instructor, TA, or Admin for the assignment specified by the id in the params. This will be called when the staff user clicks &amp;quot;PerformReview&amp;quot;. It will then redirect to '''response_controller#new'''.&lt;br /&gt;
&lt;br /&gt;
:app/controllers/review_mapping_controller.rb&lt;br /&gt;
  # Enable a staff user (Instructor, Teaching Assistant, Admin) to review all submissions for an assignment when they are a participant.&lt;br /&gt;
  # Will redirect to the list_submissions view.&lt;br /&gt;
  def add_staff_as_reviewer&lt;br /&gt;
    assignment = Assignment.find(params[:id])&lt;br /&gt;
    user = User.from_params(params)&lt;br /&gt;
    # Get registration url for user in case the user is not a participant in the assignment.&lt;br /&gt;
    regurl = url_for id: assignment.id,&lt;br /&gt;
                     user_id: user.id,&lt;br /&gt;
                     contributor_id: params[:contributor_id]&lt;br /&gt;
    reviewer = get_reviewer(user, assignment, regurl)&lt;br /&gt;
    # Create response map for the participant so they can begin review.&lt;br /&gt;
    map = ReviewResponseMap.where(reviewee_id: params[:contributor_id], reviewer_id: reviewer.id, reviewed_object_id: assignment.id).first&lt;br /&gt;
    if map.nil?&lt;br /&gt;
      map = ReviewResponseMap.create(reviewee_id: params[:contributor_id], reviewer_id: reviewer.id, reviewed_object_id: assignment.id)&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to :controller =&amp;gt; 'response', :action =&amp;gt; 'new', :id =&amp;gt; map.id, :contributor_id =&amp;gt; params[:contributor_id], :return =&amp;gt; &amp;quot;instructor_review&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
* A check is now performed to determine if the current user is a participant in the assignment. If so, we'll check if they have any existing reviews.&lt;br /&gt;
:app/controllers/assignments_controller.rb&lt;br /&gt;
  def list_submissions&lt;br /&gt;
    @assignment = Assignment.find(params[:id])&lt;br /&gt;
    @teams = Team.where(parent_id: params[:id])&lt;br /&gt;
    @participant = AssignmentParticipant.where(user_id: current_user.id, parent_id: @assignment.id).first&lt;br /&gt;
    # If the current user is not a participant in the assignment, they cannot review submissions.&lt;br /&gt;
    if not @participant.nil?&lt;br /&gt;
      @review_maps = ReviewResponseMap.where(reviewer_id: @participant.id, reviewed_object_id: @assignment.id)&lt;br /&gt;
    else&lt;br /&gt;
      @review_maps = []&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Problem 2: Allow authors to visually identify reviews done by the course staff===&lt;br /&gt;
* A star icon will be used to distinguish whether a review was done by a course staff and will appear below the 'Review #' heading.&lt;br /&gt;
* Add helper class grades_helper.rb to handle check to determine whether review was done by course staff based on the boolean flag attached to a response.&lt;br /&gt;
* Change will be made in view_team.html.erb such that after verifying that a response was done by a course staff via identity_helper.rb, a star is displayed below the 'Review #' heading.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Previously, a review that was done by a course staff would not be visually recognizable by an author of the particular reviewed assignment. With the following changes, however, authors will be able to recognize reviews done under the &amp;quot;Summary Report for assignment&amp;quot; page, as reviews done by course staff will have a black star located immediately below the &amp;quot;Review #&amp;quot; header. A boolean check is done in the ''review_done_by_course_staff?'' method and used in ''view_team.html.erb'' to display a black star below a particular review if and only if ''review_done_by_course_staff?'' outputs true.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/helpers/grades_helper.rb&lt;br /&gt;
    # used to determine whether a review was done by a course staff&lt;br /&gt;
    # course staff is defined as an Instructor or Teaching Assistant&lt;br /&gt;
    def review_done_by_course_staff?(review)&lt;br /&gt;
      if review.nil?&lt;br /&gt;
        false&lt;br /&gt;
      else&lt;br /&gt;
        role = Role.find(User.find(Participant.find(ResponseMap.find(Response.find(review.id).map_id).reviewer_id).user_id).role_id).name&lt;br /&gt;
        role == (&amp;quot;Instructor&amp;quot; || &amp;quot;Teaching Assistant&amp;quot;) ? true : false&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
:app/views/grades/view_team.html.erb&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: black; border:1px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- instructors (or higher level users) see reviewer name, students see anonymized string --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- instructor reviews labeled with a black star under the Review heading --&amp;gt;&lt;br /&gt;
    &amp;lt;% if (['Student'].include? @current_role_name) &amp;amp;&amp;amp; (@assignment.is_anonymous) %&amp;gt;&lt;br /&gt;
        &amp;lt;% review_name = &amp;quot;Review &amp;quot; + i.to_s  %&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;% review_name = User.find(Participant.find(ResponseMap.find(Response.find(review.id).map_id).reviewer_id).user_id).fullname(session[:ip]).to_s %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;th class=&amp;quot;sorter-false&amp;quot;&amp;gt; &amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;../response/view?id=&amp;lt;%= review.id.to_s %&amp;gt;&amp;quot;  data-toggle=&amp;quot;tooltip&amp;quot; data-placement=&amp;quot;right&amp;quot; title=&amp;quot;Click to see details&amp;quot;&amp;gt;&amp;lt;%= review_name %&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;% if review_done_by_course_staff?(review) %&amp;gt;&lt;br /&gt;
        &amp;lt;br&amp;gt;&amp;lt;span class=&amp;quot;glyphicon glyphicon-star&amp;quot; style=&amp;quot;margin:auto; display:table&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;&lt;br /&gt;
[https://github.com/epeden/expertiza/pull/15?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:InstructorReviews.png]]&lt;br /&gt;
[[File:StudentReviews.png]]&lt;br /&gt;
&lt;br /&gt;
===All Modified Files===&lt;br /&gt;
*app/controllers/assignments_controller.rb&lt;br /&gt;
*app/controllers/response_controller.rb&lt;br /&gt;
*app/controllers/review_mapping_controller.rb&lt;br /&gt;
*app/helpers/grades_helper.rb&lt;br /&gt;
*app/views/assignments/list_submissions.html.erb&lt;br /&gt;
*app/views/grades/view_team.html.erb&lt;br /&gt;
*app/views/response/response.html.erb&lt;br /&gt;
*config/routes.rb&lt;br /&gt;
&lt;br /&gt;
=='''Flow Chart'''==&lt;br /&gt;
This flow chart demonstrates the desired functionality. While students must submit reviews in the review stage, instructors/TA's can submit reviews any time before the final deadline. In order to submit reviews, the instructor/TA must be added as a participant to the assignment. Then, they will go to &amp;quot;View Submissions&amp;quot; on the Manage Assignments page. If the final deadline for the assignment has passed, they will see an &amp;quot;Assign Grade&amp;quot; link next to each submission. Otherwise, they will see a &amp;quot;Perform Review&amp;quot; link if a review has not been submitted yet or an &amp;quot;Edit Review&amp;quot; link if a review has been submitted already. Students can view only the reviews they have performed and the reviews of their work, while instructors/TA's can see all reviews for the assignment. Reviews done by course staff will be marked with a star to distinguish them from students' reviews.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Flow chart.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;br /&gt;
This diagram represents the relationship between different models involved with our proposed solution. We do not anticipate any changes to the database schema.&lt;br /&gt;
&lt;br /&gt;
A model that's central to our proposed solution is the AssignmentQuestionnaire model defined in assignment_questionnaire.rb. It holds the user ID of the User (user.rb) who reviewed the assignment, from which we will determine the user's role: Instructor, TA, or student. It also contains the ID of the Assignment (assignment.rb) being reviewed. Additionally, the Questionnaire (questionnaire.rb) can be located by its ID defined in AssignmentQuestionnaire and consists of the Questions (question.rb) users use to review the assignment. &lt;br /&gt;
&lt;br /&gt;
[[File:Model2picture.png ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
&lt;br /&gt;
* Add an instructor as a participant in the assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click the icon to add participants.&lt;br /&gt;
# Add the instructor as a participant on the assignment.&lt;br /&gt;
&lt;br /&gt;
* Instructor should be able to add a review on an assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click on the View Submissions icon.&lt;br /&gt;
# Verify a list of submissions appears.&lt;br /&gt;
# If the last due date for the assignment has not passed, the “Perform review” link should be visible.&lt;br /&gt;
# Click on the “Perform review” link.&lt;br /&gt;
# Verify submitted work for team is visible.&lt;br /&gt;
# Complete review and click save.&lt;br /&gt;
&lt;br /&gt;
* When an author view their reviews, reviews done by instructors should present a star.&lt;br /&gt;
# After logging in as the student, go to Assignments.&lt;br /&gt;
# Click on the test assignment&lt;br /&gt;
# Click &amp;quot;Your scores&amp;quot;&lt;br /&gt;
# If a review was done by an instructor, verify the star is present.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
Comprehensive RSpec tests were added for all controller and model classes that we changed as well as automated UI tests for features we added. Some of the planned test cases include: &lt;br /&gt;
* Verify that instructors can be added as participants for assignments.&lt;br /&gt;
* Verify that assignment reviews can be submitted by users with an Instructor, TA, or Student role assigned.&lt;br /&gt;
* Verify if an assignment's deadline is passed, instructors can see a &amp;quot;Assign Grade&amp;quot; link to assign a grade.&lt;br /&gt;
* Verify if an assignment's deadline has not passed, instructors can see a &amp;quot;Perform Review&amp;quot; link to review work if they are a participant.&lt;br /&gt;
* Verify a star icon appears next to only reviews done by instructors/TAs in the responses view.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Problem 1: Allow the instructor and teaching assistants to review teams that have submitted assignments===&lt;br /&gt;
&lt;br /&gt;
===Problem 2: Allow authors to visually identify reviews done by the course staff===&lt;br /&gt;
UI Testing&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Login as an instructor&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;Username: instructor6&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;Password: password&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; As this test is an extension of the one conducted in Part 1, impersonate the student who the instructor performed a review for. Go to Manage -&amp;gt; Impersonate User and enter the student's user name.&lt;br /&gt;
&amp;lt;li&amp;gt; Now impersonated as the chosen student, go to Assignments -&amp;gt; Project_Name -&amp;gt; Your Scores. &lt;br /&gt;
&amp;lt;li&amp;gt; Yous should now be in the &amp;quot;Summary Report for assignment&amp;quot; page. Below whichever review that the instructor submitted, there will be a black star.&lt;br /&gt;
[[File:Ui_test_part_2.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Code Coverage===&lt;br /&gt;
Coverage increased (+11.01%) to 41.493%&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Resources'''==&lt;br /&gt;
Forked Repo: https://github.com/epeden/expertiza&lt;br /&gt;
&lt;br /&gt;
Expertiza Pull Request: https://github.com/expertiza/expertiza/pull/1729&lt;br /&gt;
&lt;br /&gt;
Demo Video: https://youtu.be/mDsc5n1NZ9E&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Ui_test_part_2.png&amp;diff=133793</id>
		<title>File:Ui test part 2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Ui_test_part_2.png&amp;diff=133793"/>
		<updated>2020-04-24T03:12:42Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133783</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133783"/>
		<updated>2020-04-24T02:47:16Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open-source project that is built using the [http://rubyonrails.org/ Ruby on Rails] framework. At its core, it is a highly versatile tool that academic institutions can use to craft learning objectives centered around team projects, peer reviews, and highly-customizable assignments.&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are two main issues:&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Implementation Details'''==&lt;br /&gt;
&lt;br /&gt;
===Problem 1: Allow the instructor and teaching assistants to review teams that have submitted assignments===&lt;br /&gt;
* Check will be done to verify whether the course staff is a participant. Staff can only review if they are a participant of the assignment.&lt;br /&gt;
* In the '''list_submissions.html.erb''' file, have a &amp;quot;Perform Review&amp;quot; link present if the final review due date of the assignment has not passed yet. If a review was already saved and the final review due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; will be present. If a review was already submitted and the due date has not passed, then a link to &amp;quot;View Review&amp;quot; will be present.&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot;, &amp;quot;Edit Review&amp;quot;, and &amp;quot;View Review&amp;quot; links will take the instructor/TA to the pages governed by '''response_controller#new''', '''response_controller#edit''', and '''response_controller#view''' respectively.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:StaffPerformReview.jpg|The instructor/TA will see a &amp;quot;Perform Review&amp;quot; link if the final review due date has passed.]]&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link will only appear after the final review due date of the assignment has passed or if there are no review due dates.&lt;br /&gt;
[[File:StaffAssignGrade.jpg|The instructor/TA will see a &amp;quot;Perform Review&amp;quot;, &amp;quot;Edit Review&amp;quot;, or &amp;quot;View Review&amp;quot; link if the final review due date has not passed.]]&lt;br /&gt;
&lt;br /&gt;
===Problem 2: Allow authors to visually identify reviews done by the course staff===&lt;br /&gt;
* A star icon will be used to distinguish whether a review was done by a course staff and will appear below the 'Review #' heading.&lt;br /&gt;
* Add helper class grades_helper.rb to handle check to determine whether review was done by course staff based on the boolean flag attached to a response.&lt;br /&gt;
* Change will be made in view_team.html.erb such that after verifying that a response was done by a course staff via identity_helper.rb, a star is displayed below the 'Review #' heading.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Previously, a review that was done by a course staff would not be visually recognizable by an author of the particular reviewed assignment. With the following changes, however, authors will be able to recognize reviews done under the &amp;quot;Summary Report for assignment&amp;quot; page, as reviews done by course staff will have a black star located immediately below the &amp;quot;Review #&amp;quot; header. A boolean check is done in the ''review_done_by_course_staff?'' method and used in ''view_team.html.erb'' to display a black star below a particular review if and only if ''review_done_by_course_staff?'' outputs true.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/helpers/grades_helper.rb&lt;br /&gt;
    # used to determine whether a review was done by a course staff&lt;br /&gt;
    # course staff is defined as an Instructor or Teaching Assistant&lt;br /&gt;
    def review_done_by_course_staff?(review)&lt;br /&gt;
      if review.nil?&lt;br /&gt;
        false&lt;br /&gt;
      else&lt;br /&gt;
        role = Role.find(User.find(Participant.find(ResponseMap.find(Response.find(review.id).map_id).reviewer_id).user_id).role_id).name&lt;br /&gt;
        role == (&amp;quot;Instructor&amp;quot; || &amp;quot;Teaching Assistant&amp;quot;) ? true : false&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
:app/views/grades/view_team.html.erb&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: black; border:1px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- instructors (or higher level users) see reviewer name, students see anonymized string --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- instructor reviews labeled with a black star under the Review heading --&amp;gt;&lt;br /&gt;
    &amp;lt;% if (['Student'].include? @current_role_name) &amp;amp;&amp;amp; (@assignment.is_anonymous) %&amp;gt;&lt;br /&gt;
        &amp;lt;% review_name = &amp;quot;Review &amp;quot; + i.to_s  %&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;% review_name = User.find(Participant.find(ResponseMap.find(Response.find(review.id).map_id).reviewer_id).user_id).fullname(session[:ip]).to_s %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;th class=&amp;quot;sorter-false&amp;quot;&amp;gt; &amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;../response/view?id=&amp;lt;%= review.id.to_s %&amp;gt;&amp;quot;  data-toggle=&amp;quot;tooltip&amp;quot; data-placement=&amp;quot;right&amp;quot; title=&amp;quot;Click to see details&amp;quot;&amp;gt;&amp;lt;%= review_name %&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;% if review_done_by_course_staff?(review) %&amp;gt;&lt;br /&gt;
        &amp;lt;br&amp;gt;&amp;lt;span class=&amp;quot;glyphicon glyphicon-star&amp;quot; style=&amp;quot;margin:auto; display:table&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;&lt;br /&gt;
[https://github.com/epeden/expertiza/pull/15?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:InstructorReviews.png]]&lt;br /&gt;
[[File:StudentReviews.png]]&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
*views/assignments/list_submissions.html.erb&lt;br /&gt;
*views/reports/calibration_report.html.erb&lt;br /&gt;
*views/response/show_calibration_results_for_student.html.erb&lt;br /&gt;
*views/response/response.html.erb&lt;br /&gt;
*views/grades/view_team.html.erb&lt;br /&gt;
*views/grades/view_my_scores.html.erb&lt;br /&gt;
*controllers/response_controller.rb&lt;br /&gt;
*app/helpers/grades_helper.rb&lt;br /&gt;
*app/controllers/assignments_controller.rb&lt;br /&gt;
*app/controllers/response_controller.rb&lt;br /&gt;
*app/controllers/review_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
=='''Flow Chart'''==&lt;br /&gt;
This flow chart demonstrates the desired functionality. While students must submit reviews in the review stage, instructors/TA's can submit reviews any time before the final deadline. In order to submit reviews, the instructor/TA must be added as a participant to the assignment. Then, they will go to &amp;quot;View Submissions&amp;quot; on the Manage Assignments page. If the final deadline for the assignment has passed, they will see an &amp;quot;Assign Grade&amp;quot; link next to each submission. Otherwise, they will see a &amp;quot;Perform Review&amp;quot; link if a review has not been submitted yet or an &amp;quot;Edit Review&amp;quot; link if a review has been submitted already. Students can view only the reviews they have performed and the reviews of their work, while instructors/TA's can see all reviews for the assignment. Reviews done by course staff will be marked with a star to distinguish them from students' reviews.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Flow chart.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;br /&gt;
This diagram represents the relationship between different models involved with our proposed solution. We do not anticipate any changes to the database schema.&lt;br /&gt;
&lt;br /&gt;
A model that's central to our proposed solution is the AssignmentQuestionnaire model defined in assignment_questionnaire.rb. It holds the user ID of the User (user.rb) who reviewed the assignment, from which we will determine the user's role: Instructor, TA, or student. It also contains the ID of the Assignment (assignment.rb) being reviewed. Additionally, the Questionnaire (questionnaire.rb) can be located by its ID defined in AssignmentQuestionnaire and consists of the Questions (question.rb) users use to review the assignment. &lt;br /&gt;
&lt;br /&gt;
[[File:Model2picture.png ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
&lt;br /&gt;
* Add an instructor as a participant in the assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click the icon to add participants.&lt;br /&gt;
# Add the instructor as a participant on the assignment.&lt;br /&gt;
&lt;br /&gt;
* Instructor should be able to add a review on an assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click on the View Submissions icon.&lt;br /&gt;
# Verify a list of submissions appears.&lt;br /&gt;
# If the last due date for the assignment has not passed, the “Perform review” link should be visible.&lt;br /&gt;
# Click on the “Perform review” link.&lt;br /&gt;
# Verify submitted work for team is visible.&lt;br /&gt;
# Complete review and click save.&lt;br /&gt;
&lt;br /&gt;
* When an author view their reviews, reviews done by instructors should present a star.&lt;br /&gt;
# After logging in as the student, go to Assignments.&lt;br /&gt;
# Click on the test assignment&lt;br /&gt;
# Click &amp;quot;Your scores&amp;quot;&lt;br /&gt;
# If a review was done by an instructor, verify the star is present.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
Comprehensive RSpec tests were added for all controller and model classes that we changed as well as automated UI tests for features we added. Some of the planned test cases include: &lt;br /&gt;
* Verify that instructors can be added as participants for assignments.&lt;br /&gt;
* Verify that assignment reviews can be submitted by users with an Instructor, TA, or Student role assigned.&lt;br /&gt;
* Verify if an assignment's deadline is passed, instructors can see a &amp;quot;Assign Grade&amp;quot; link to assign a grade.&lt;br /&gt;
* Verify if an assignment's deadline has not passed, instructors can see a &amp;quot;Perform Review&amp;quot; link to review work if they are a participant.&lt;br /&gt;
* Verify a star icon appears next to only reviews done by instructors/TAs in the responses view.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Code Coverage===&lt;br /&gt;
Coverage increased (+11.01%) to 41.493%&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Resources'''==&lt;br /&gt;
Forked Repo: https://github.com/epeden/expertiza&lt;br /&gt;
&lt;br /&gt;
Expertiza Pull Request: https://github.com/expertiza/expertiza/pull/1729&lt;br /&gt;
&lt;br /&gt;
Demo Video: https://youtu.be/mDsc5n1NZ9E&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133782</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133782"/>
		<updated>2020-04-24T02:46:38Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open-source project that is built using the [http://rubyonrails.org/ Ruby on Rails] framework. At its core, it is a highly versatile tool that academic institutions can use to craft learning objectives centered around team projects, peer reviews, and highly-customizable assignments.&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are two main issues:&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
==''Implementation Details'''==&lt;br /&gt;
&lt;br /&gt;
===Problem 1: Allow the instructor and teaching assistants to review teams that have submitted assignments===&lt;br /&gt;
* Check will be done to verify whether the course staff is a participant. Staff can only review if they are a participant of the assignment.&lt;br /&gt;
* In the '''list_submissions.html.erb''' file, have a &amp;quot;Perform Review&amp;quot; link present if the final review due date of the assignment has not passed yet. If a review was already saved and the final review due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; will be present. If a review was already submitted and the due date has not passed, then a link to &amp;quot;View Review&amp;quot; will be present.&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot;, &amp;quot;Edit Review&amp;quot;, and &amp;quot;View Review&amp;quot; links will take the instructor/TA to the pages governed by '''response_controller#new''', '''response_controller#edit''', and '''response_controller#view''' respectively.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:StaffPerformReview.jpg|The instructor/TA will see a &amp;quot;Perform Review&amp;quot; link if the final review due date has passed.]]&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link will only appear after the final review due date of the assignment has passed or if there are no review due dates.&lt;br /&gt;
[[File:StaffAssignGrade.jpg|The instructor/TA will see a &amp;quot;Perform Review&amp;quot;, &amp;quot;Edit Review&amp;quot;, or &amp;quot;View Review&amp;quot; link if the final review due date has not passed.]]&lt;br /&gt;
&lt;br /&gt;
===Problem 2: Allow authors to visually identify reviews done by the course staff===&lt;br /&gt;
* A star icon will be used to distinguish whether a review was done by a course staff and will appear below the 'Review #' heading.&lt;br /&gt;
* Add helper class grades_helper.rb to handle check to determine whether review was done by course staff based on the boolean flag attached to a response.&lt;br /&gt;
* Change will be made in view_team.html.erb such that after verifying that a response was done by a course staff via identity_helper.rb, a star is displayed below the 'Review #' heading.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Previously, a review that was done by a course staff would not be visually recognizable by an author of the particular reviewed assignment. With the following changes, however, authors will be able to recognize reviews done under the &amp;quot;Summary Report for assignment&amp;quot; page, as reviews done by course staff will have a black star located immediately below the &amp;quot;Review #&amp;quot; header. A boolean check is done in the ''review_done_by_course_staff?'' method and used in ''view_team.html.erb'' to display a black star below a particular review if and only if ''review_done_by_course_staff?'' outputs true.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/helpers/grades_helper.rb&lt;br /&gt;
    # used to determine whether a review was done by a course staff&lt;br /&gt;
    # course staff is defined as an Instructor or Teaching Assistant&lt;br /&gt;
    def review_done_by_course_staff?(review)&lt;br /&gt;
      if review.nil?&lt;br /&gt;
        false&lt;br /&gt;
      else&lt;br /&gt;
        role = Role.find(User.find(Participant.find(ResponseMap.find(Response.find(review.id).map_id).reviewer_id).user_id).role_id).name&lt;br /&gt;
        role == (&amp;quot;Instructor&amp;quot; || &amp;quot;Teaching Assistant&amp;quot;) ? true : false&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
:app/views/grades/view_team.html.erb&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: black; border:1px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- instructors (or higher level users) see reviewer name, students see anonymized string --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- instructor reviews labeled with a black star under the Review heading --&amp;gt;&lt;br /&gt;
    &amp;lt;% if (['Student'].include? @current_role_name) &amp;amp;&amp;amp; (@assignment.is_anonymous) %&amp;gt;&lt;br /&gt;
        &amp;lt;% review_name = &amp;quot;Review &amp;quot; + i.to_s  %&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;% review_name = User.find(Participant.find(ResponseMap.find(Response.find(review.id).map_id).reviewer_id).user_id).fullname(session[:ip]).to_s %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;th class=&amp;quot;sorter-false&amp;quot;&amp;gt; &amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;../response/view?id=&amp;lt;%= review.id.to_s %&amp;gt;&amp;quot;  data-toggle=&amp;quot;tooltip&amp;quot; data-placement=&amp;quot;right&amp;quot; title=&amp;quot;Click to see details&amp;quot;&amp;gt;&amp;lt;%= review_name %&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;% if review_done_by_course_staff?(review) %&amp;gt;&lt;br /&gt;
        &amp;lt;br&amp;gt;&amp;lt;span class=&amp;quot;glyphicon glyphicon-star&amp;quot; style=&amp;quot;margin:auto; display:table&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;&lt;br /&gt;
[https://github.com/epeden/expertiza/pull/15?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:InstructorReviews.png]]&lt;br /&gt;
[[File:StudentReviews.png]]&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
*views/assignments/list_submissions.html.erb&lt;br /&gt;
*views/reports/calibration_report.html.erb&lt;br /&gt;
*views/response/show_calibration_results_for_student.html.erb&lt;br /&gt;
*views/response/response.html.erb&lt;br /&gt;
*views/grades/view_team.html.erb&lt;br /&gt;
*views/grades/view_my_scores.html.erb&lt;br /&gt;
*controllers/response_controller.rb&lt;br /&gt;
*app/helpers/grades_helper.rb&lt;br /&gt;
*app/controllers/assignments_controller.rb&lt;br /&gt;
*app/controllers/response_controller.rb&lt;br /&gt;
*app/controllers/review_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
=='''Flow Chart'''==&lt;br /&gt;
This flow chart demonstrates the desired functionality. While students must submit reviews in the review stage, instructors/TA's can submit reviews any time before the final deadline. In order to submit reviews, the instructor/TA must be added as a participant to the assignment. Then, they will go to &amp;quot;View Submissions&amp;quot; on the Manage Assignments page. If the final deadline for the assignment has passed, they will see an &amp;quot;Assign Grade&amp;quot; link next to each submission. Otherwise, they will see a &amp;quot;Perform Review&amp;quot; link if a review has not been submitted yet or an &amp;quot;Edit Review&amp;quot; link if a review has been submitted already. Students can view only the reviews they have performed and the reviews of their work, while instructors/TA's can see all reviews for the assignment. Reviews done by course staff will be marked with a star to distinguish them from students' reviews.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Flow chart.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;br /&gt;
This diagram represents the relationship between different models involved with our proposed solution. We do not anticipate any changes to the database schema.&lt;br /&gt;
&lt;br /&gt;
A model that's central to our proposed solution is the AssignmentQuestionnaire model defined in assignment_questionnaire.rb. It holds the user ID of the User (user.rb) who reviewed the assignment, from which we will determine the user's role: Instructor, TA, or student. It also contains the ID of the Assignment (assignment.rb) being reviewed. Additionally, the Questionnaire (questionnaire.rb) can be located by its ID defined in AssignmentQuestionnaire and consists of the Questions (question.rb) users use to review the assignment. &lt;br /&gt;
&lt;br /&gt;
[[File:Model2picture.png ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
&lt;br /&gt;
* Add an instructor as a participant in the assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click the icon to add participants.&lt;br /&gt;
# Add the instructor as a participant on the assignment.&lt;br /&gt;
&lt;br /&gt;
* Instructor should be able to add a review on an assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click on the View Submissions icon.&lt;br /&gt;
# Verify a list of submissions appears.&lt;br /&gt;
# If the last due date for the assignment has not passed, the “Perform review” link should be visible.&lt;br /&gt;
# Click on the “Perform review” link.&lt;br /&gt;
# Verify submitted work for team is visible.&lt;br /&gt;
# Complete review and click save.&lt;br /&gt;
&lt;br /&gt;
* When an author view their reviews, reviews done by instructors should present a star.&lt;br /&gt;
# After logging in as the student, go to Assignments.&lt;br /&gt;
# Click on the test assignment&lt;br /&gt;
# Click &amp;quot;Your scores&amp;quot;&lt;br /&gt;
# If a review was done by an instructor, verify the star is present.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
Comprehensive RSpec tests were added for all controller and model classes that we changed as well as automated UI tests for features we added. Some of the planned test cases include: &lt;br /&gt;
* Verify that instructors can be added as participants for assignments.&lt;br /&gt;
* Verify that assignment reviews can be submitted by users with an Instructor, TA, or Student role assigned.&lt;br /&gt;
* Verify if an assignment's deadline is passed, instructors can see a &amp;quot;Assign Grade&amp;quot; link to assign a grade.&lt;br /&gt;
* Verify if an assignment's deadline has not passed, instructors can see a &amp;quot;Perform Review&amp;quot; link to review work if they are a participant.&lt;br /&gt;
* Verify a star icon appears next to only reviews done by instructors/TAs in the responses view.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Code Coverage===&lt;br /&gt;
Coverage increased (+11.01%) to 41.493%&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Resources'''==&lt;br /&gt;
Forked Repo: https://github.com/epeden/expertiza&lt;br /&gt;
&lt;br /&gt;
Expertiza Pull Request: https://github.com/expertiza/expertiza/pull/1729&lt;br /&gt;
&lt;br /&gt;
Demo Video: https://youtu.be/mDsc5n1NZ9E&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133781</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133781"/>
		<updated>2020-04-24T02:45:26Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open-source project that is built using the [http://rubyonrails.org/ Ruby on Rails] framework. At its core, it is a highly versatile tool that academic institutions can use to craft learning objectives centered around team projects, peer reviews, and highly-customizable assignments.&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are two main issues:&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
===Proposed Solution===&lt;br /&gt;
&lt;br /&gt;
===Problem 1: Allow the instructor and teaching assistants to review teams that have submitted assignments===&lt;br /&gt;
* Check will be done to verify whether the course staff is a participant. Staff can only review if they are a participant of the assignment.&lt;br /&gt;
* In the '''list_submissions.html.erb''' file, have a &amp;quot;Perform Review&amp;quot; link present if the final review due date of the assignment has not passed yet. If a review was already saved and the final review due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; will be present. If a review was already submitted and the due date has not passed, then a link to &amp;quot;View Review&amp;quot; will be present.&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot;, &amp;quot;Edit Review&amp;quot;, and &amp;quot;View Review&amp;quot; links will take the instructor/TA to the pages governed by '''response_controller#new''', '''response_controller#edit''', and '''response_controller#view''' respectively.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:StaffPerformReview.jpg|The instructor/TA will see a &amp;quot;Perform Review&amp;quot; link if the final review due date has passed.]]&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link will only appear after the final review due date of the assignment has passed or if there are no review due dates.&lt;br /&gt;
[[File:StaffAssignGrade.jpg|The instructor/TA will see a &amp;quot;Perform Review&amp;quot;, &amp;quot;Edit Review&amp;quot;, or &amp;quot;View Review&amp;quot; link if the final review due date has not passed.]]&lt;br /&gt;
&lt;br /&gt;
===Problem 2: Allow authors to visually identify reviews done by the course staff===&lt;br /&gt;
* A star icon will be used to distinguish whether a review was done by a course staff and will appear below the 'Review #' heading.&lt;br /&gt;
* Add helper class grades_helper.rb to handle check to determine whether review was done by course staff based on the boolean flag attached to a response.&lt;br /&gt;
* Change will be made in view_team.html.erb such that after verifying that a response was done by a course staff via identity_helper.rb, a star is displayed below the 'Review #' heading.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Previously, a review that was done by a course staff would not be visually recognizable by an author of the particular reviewed assignment. With the following changes, however, authors will be able to recognize reviews done under the &amp;quot;Summary Report for assignment&amp;quot; page, as reviews done by course staff will have a black star located immediately below the &amp;quot;Review #&amp;quot; header. A boolean check is done in the ''review_done_by_course_staff?'' method and used in ''view_team.html.erb'' to display a black star below a particular review if and only if ''review_done_by_course_staff?'' outputs true.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/helpers/grades_helper.rb&lt;br /&gt;
    # used to determine whether a review was done by a course staff&lt;br /&gt;
    # course staff is defined as an Instructor or Teaching Assistant&lt;br /&gt;
    def review_done_by_course_staff?(review)&lt;br /&gt;
      if review.nil?&lt;br /&gt;
        false&lt;br /&gt;
      else&lt;br /&gt;
        role = Role.find(User.find(Participant.find(ResponseMap.find(Response.find(review.id).map_id).reviewer_id).user_id).role_id).name&lt;br /&gt;
        role == (&amp;quot;Instructor&amp;quot; || &amp;quot;Teaching Assistant&amp;quot;) ? true : false&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
:app/views/grades/view_team.html.erb&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: black; border:1px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- instructors (or higher level users) see reviewer name, students see anonymized string --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- instructor reviews labeled with a black star under the Review heading --&amp;gt;&lt;br /&gt;
    &amp;lt;% if (['Student'].include? @current_role_name) &amp;amp;&amp;amp; (@assignment.is_anonymous) %&amp;gt;&lt;br /&gt;
        &amp;lt;% review_name = &amp;quot;Review &amp;quot; + i.to_s  %&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;% review_name = User.find(Participant.find(ResponseMap.find(Response.find(review.id).map_id).reviewer_id).user_id).fullname(session[:ip]).to_s %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;th class=&amp;quot;sorter-false&amp;quot;&amp;gt; &amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;../response/view?id=&amp;lt;%= review.id.to_s %&amp;gt;&amp;quot;  data-toggle=&amp;quot;tooltip&amp;quot; data-placement=&amp;quot;right&amp;quot; title=&amp;quot;Click to see details&amp;quot;&amp;gt;&amp;lt;%= review_name %&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;% if review_done_by_course_staff?(review) %&amp;gt;&lt;br /&gt;
        &amp;lt;br&amp;gt;&amp;lt;span class=&amp;quot;glyphicon glyphicon-star&amp;quot; style=&amp;quot;margin:auto; display:table&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;&lt;br /&gt;
[https://github.com/epeden/expertiza/pull/15?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:InstructorReviews.png]]&lt;br /&gt;
[[File:StudentReviews.png]]&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
*views/assignments/list_submissions.html.erb&lt;br /&gt;
*views/reports/calibration_report.html.erb&lt;br /&gt;
*views/response/show_calibration_results_for_student.html.erb&lt;br /&gt;
*views/response/response.html.erb&lt;br /&gt;
*views/grades/view_team.html.erb&lt;br /&gt;
*views/grades/view_my_scores.html.erb&lt;br /&gt;
*controllers/response_controller.rb&lt;br /&gt;
*app/helpers/grades_helper.rb&lt;br /&gt;
*app/controllers/assignments_controller.rb&lt;br /&gt;
*app/controllers/response_controller.rb&lt;br /&gt;
*app/controllers/review_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
=='''Flow Chart'''==&lt;br /&gt;
This flow chart demonstrates the desired functionality. While students must submit reviews in the review stage, instructors/TA's can submit reviews any time before the final deadline. In order to submit reviews, the instructor/TA must be added as a participant to the assignment. Then, they will go to &amp;quot;View Submissions&amp;quot; on the Manage Assignments page. If the final deadline for the assignment has passed, they will see an &amp;quot;Assign Grade&amp;quot; link next to each submission. Otherwise, they will see a &amp;quot;Perform Review&amp;quot; link if a review has not been submitted yet or an &amp;quot;Edit Review&amp;quot; link if a review has been submitted already. Students can view only the reviews they have performed and the reviews of their work, while instructors/TA's can see all reviews for the assignment. Reviews done by course staff will be marked with a star to distinguish them from students' reviews.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Flow chart.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;br /&gt;
This diagram represents the relationship between different models involved with our proposed solution. We do not anticipate any changes to the database schema.&lt;br /&gt;
&lt;br /&gt;
A model that's central to our proposed solution is the AssignmentQuestionnaire model defined in assignment_questionnaire.rb. It holds the user ID of the User (user.rb) who reviewed the assignment, from which we will determine the user's role: Instructor, TA, or student. It also contains the ID of the Assignment (assignment.rb) being reviewed. Additionally, the Questionnaire (questionnaire.rb) can be located by its ID defined in AssignmentQuestionnaire and consists of the Questions (question.rb) users use to review the assignment. &lt;br /&gt;
&lt;br /&gt;
[[File:Model2picture.png ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
&lt;br /&gt;
* Add an instructor as a participant in the assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click the icon to add participants.&lt;br /&gt;
# Add the instructor as a participant on the assignment.&lt;br /&gt;
&lt;br /&gt;
* Instructor should be able to add a review on an assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click on the View Submissions icon.&lt;br /&gt;
# Verify a list of submissions appears.&lt;br /&gt;
# If the last due date for the assignment has not passed, the “Perform review” link should be visible.&lt;br /&gt;
# Click on the “Perform review” link.&lt;br /&gt;
# Verify submitted work for team is visible.&lt;br /&gt;
# Complete review and click save.&lt;br /&gt;
&lt;br /&gt;
* When an author view their reviews, reviews done by instructors should present a star.&lt;br /&gt;
# After logging in as the student, go to Assignments.&lt;br /&gt;
# Click on the test assignment&lt;br /&gt;
# Click &amp;quot;Your scores&amp;quot;&lt;br /&gt;
# If a review was done by an instructor, verify the star is present.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
Comprehensive RSpec tests were added for all controller and model classes that we changed as well as automated UI tests for features we added. Some of the planned test cases include: &lt;br /&gt;
* Verify that instructors can be added as participants for assignments.&lt;br /&gt;
* Verify that assignment reviews can be submitted by users with an Instructor, TA, or Student role assigned.&lt;br /&gt;
* Verify if an assignment's deadline is passed, instructors can see a &amp;quot;Assign Grade&amp;quot; link to assign a grade.&lt;br /&gt;
* Verify if an assignment's deadline has not passed, instructors can see a &amp;quot;Perform Review&amp;quot; link to review work if they are a participant.&lt;br /&gt;
* Verify a star icon appears next to only reviews done by instructors/TAs in the responses view.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Code Coverage===&lt;br /&gt;
Coverage increased (+11.01%) to 41.493%&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Resources'''==&lt;br /&gt;
Forked Repo: https://github.com/epeden/expertiza&lt;br /&gt;
&lt;br /&gt;
Expertiza Pull Request: https://github.com/expertiza/expertiza/pull/1729&lt;br /&gt;
&lt;br /&gt;
Demo Video: https://youtu.be/mDsc5n1NZ9E&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133773</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133773"/>
		<updated>2020-04-24T02:30:28Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: /* Testing Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open-source project that is built using the [http://rubyonrails.org/ Ruby on Rails] framework. At its core, it is a highly versatile tool that academic institutions can use to craft learning objectives centered around team projects, peer reviews, and highly-customizable assignments.&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are two main issues:&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
===Proposed Solution===&lt;br /&gt;
&lt;br /&gt;
'''Problem 1:'''&lt;br /&gt;
* Check will be done to verify whether the course staff is a participant. Staff can only review if they are a participant of the assignment.&lt;br /&gt;
* In the '''list_submissions.html.erb''' file, have a &amp;quot;Perform Review&amp;quot; link present if the final review due date of the assignment has not passed yet. If a review was already saved and the final review due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; will be present. If a review was already submitted and the due date has not passed, then a link to &amp;quot;View Review&amp;quot; will be present.&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot;, &amp;quot;Edit Review&amp;quot;, and &amp;quot;View Review&amp;quot; links will take the instructor/TA to the pages governed by '''response_controller#new''', '''response_controller#edit''', and '''response_controller#view''' respectively.&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link will only appear after the final review due date of the assignment has passed or if there are no review due dates.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:StaffPerformReview.png|The instructor/TA will see a &amp;quot;Perform Review&amp;quot; link if the final review due date has passed.]]&lt;br /&gt;
[[File:StaffAssignGrade.png|The instructor/TA will see a &amp;quot;Perform Review&amp;quot;, &amp;quot;Edit Review&amp;quot;, or &amp;quot;View Review&amp;quot; link if the final review due date has not passed.]]&lt;br /&gt;
&lt;br /&gt;
'''Problem 2:'''&lt;br /&gt;
* A star icon will be used to distinguish whether a review was done by a course staff and will appear below the 'Review #' heading.&lt;br /&gt;
* Add helper class grades_helper.rb to handle check to determine whether review was done by course staff based on the boolean flag attached to a response.&lt;br /&gt;
* Change will be made in view_team.html.erb such that after verifying that a response was done by a course staff via identity_helper.rb, a star is displayed below the 'Review #' heading.&lt;br /&gt;
&lt;br /&gt;
[[File:InstructorReviews.png]]&lt;br /&gt;
[[File:StudentReviews.png]]&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
*views/assignments/list_submissions.html.erb&lt;br /&gt;
*views/reports/calibration_report.html.erb&lt;br /&gt;
*views/response/show_calibration_results_for_student.html.erb&lt;br /&gt;
*views/response/response.html.erb&lt;br /&gt;
*views/grades/view_team.html.erb&lt;br /&gt;
*views/grades/view_my_scores.html.erb&lt;br /&gt;
*controllers/response_controller.rb&lt;br /&gt;
*app/helpers/grades_helper.rb&lt;br /&gt;
*app/controllers/assignments_controller.rb&lt;br /&gt;
*app/controllers/response_controller.rb&lt;br /&gt;
*app/controllers/review_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
=='''Flow Chart'''==&lt;br /&gt;
This flow chart demonstrates the desired functionality. While students must submit reviews in the review stage, instructors/TA's can submit reviews any time before the final deadline. In order to submit reviews, the instructor/TA must be added as a participant to the assignment. Then, they will go to &amp;quot;View Submissions&amp;quot; on the Manage Assignments page. If the final deadline for the assignment has passed, they will see an &amp;quot;Assign Grade&amp;quot; link next to each submission. Otherwise, they will see a &amp;quot;Perform Review&amp;quot; link if a review has not been submitted yet or an &amp;quot;Edit Review&amp;quot; link if a review has been submitted already. Students can view only the reviews they have performed and the reviews of their work, while instructors/TA's can see all reviews for the assignment. Reviews done by course staff will be marked with a star to distinguish them from students' reviews.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Flow chart.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;br /&gt;
This diagram represents the relationship between different models involved with our proposed solution. We do not anticipate any changes to the database schema.&lt;br /&gt;
&lt;br /&gt;
A model that's central to our proposed solution is the AssignmentQuestionnaire model defined in assignment_questionnaire.rb. It holds the user ID of the User (user.rb) who reviewed the assignment, from which we will determine the user's role: Instructor, TA, or student. It also contains the ID of the Assignment (assignment.rb) being reviewed. Additionally, the Questionnaire (questionnaire.rb) can be located by its ID defined in AssignmentQuestionnaire and consists of the Questions (question.rb) users use to review the assignment. &lt;br /&gt;
&lt;br /&gt;
[[File:Model2picture.png ]]&lt;br /&gt;
&lt;br /&gt;
=='''Implementation Details'''==&lt;br /&gt;
The purpose of this assignment was to add functionality for course staff (defined as the instructor and teaching assistants) in regards to performing reviews for submitted assignments. Our implementation was divided into two crucial parts:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Allowing course staff to be added as participants and to allow them to perform reviews for submitted assignments in the same manner as student reviewers can.&lt;br /&gt;
&amp;lt;li&amp;gt; Allowing the authors of submitted assignments to visually see whether a review was done by a course staff or a fellow student. Reviews done by course staff are marked by a black star.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Problem 1: Allow the instructor and teaching assistants to review teams that have submitted assignments===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Problem 2: Allow authors to visually identify reviews done by the course staff===&lt;br /&gt;
Previously, a review that was done by a course staff would not be visually recognizable by an author of the particular reviewed assignment. With the following changes, however, authors will be able to recognize reviews done under the &amp;quot;Summary Report for assignment&amp;quot; page, as reviews done by course staff will have a black star located immediately below the &amp;quot;Review #&amp;quot; header. A boolean check is done in the ''review_done_by_course_staff?'' method and used in ''view_team.html.erb'' to display a black star below a particular review if and only if ''review_done_by_course_staff?'' outputs true.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/helpers/grades_helper.rb&lt;br /&gt;
    # used to determine whether a review was done by a course staff&lt;br /&gt;
    # course staff is defined as an Instructor or Teaching Assistant&lt;br /&gt;
    def review_done_by_course_staff?(review)&lt;br /&gt;
      if review.nil?&lt;br /&gt;
        false&lt;br /&gt;
      else&lt;br /&gt;
        role = Role.find(User.find(Participant.find(ResponseMap.find(Response.find(review.id).map_id).reviewer_id).user_id).role_id).name&lt;br /&gt;
        role == (&amp;quot;Instructor&amp;quot; || &amp;quot;Teaching Assistant&amp;quot;) ? true : false&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
:app/views/grades/view_team.html.erb&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: black; border:1px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- instructors (or higher level users) see reviewer name, students see anonymized string --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- instructor reviews labeled with a black star under the Review heading --&amp;gt;&lt;br /&gt;
    &amp;lt;% if (['Student'].include? @current_role_name) &amp;amp;&amp;amp; (@assignment.is_anonymous) %&amp;gt;&lt;br /&gt;
        &amp;lt;% review_name = &amp;quot;Review &amp;quot; + i.to_s  %&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;% review_name = User.find(Participant.find(ResponseMap.find(Response.find(review.id).map_id).reviewer_id).user_id).fullname(session[:ip]).to_s %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;th class=&amp;quot;sorter-false&amp;quot;&amp;gt; &amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;../response/view?id=&amp;lt;%= review.id.to_s %&amp;gt;&amp;quot;  data-toggle=&amp;quot;tooltip&amp;quot; data-placement=&amp;quot;right&amp;quot; title=&amp;quot;Click to see details&amp;quot;&amp;gt;&amp;lt;%= review_name %&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;% if review_done_by_course_staff?(review) %&amp;gt;&lt;br /&gt;
        &amp;lt;br&amp;gt;&amp;lt;span class=&amp;quot;glyphicon glyphicon-star&amp;quot; style=&amp;quot;margin:auto; display:table&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;&lt;br /&gt;
[https://github.com/epeden/expertiza/pull/15?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
&lt;br /&gt;
* Add an instructor as a participant in the assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click the icon to add participants.&lt;br /&gt;
# Add the instructor as a participant on the assignment.&lt;br /&gt;
&lt;br /&gt;
* Instructor should be able to add a review on an assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click on the View Submissions icon.&lt;br /&gt;
# Verify a list of submissions appears.&lt;br /&gt;
# If the last due date for the assignment has not passed, the “Perform review” link should be visible.&lt;br /&gt;
# Click on the “Perform review” link.&lt;br /&gt;
# Verify submitted work for team is visible.&lt;br /&gt;
# Complete review and click save.&lt;br /&gt;
&lt;br /&gt;
* When an author view their reviews, reviews done by instructors should present a star.&lt;br /&gt;
# After logging in as the student, go to Assignments.&lt;br /&gt;
# Click on the test assignment&lt;br /&gt;
# Click &amp;quot;Your scores&amp;quot;&lt;br /&gt;
# If a review was done by an instructor, verify the star is present.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
We plan on adding comprehensive RSpec tests for all controller and model classes that we change as well as automated UI tests for features we added. Some of the planned test cases include: &lt;br /&gt;
* Verify that instructors can be added as participants for assignments.&lt;br /&gt;
* Verify that assignment reviews can be submitted by users with an Instructor, TA, or Student role assigned.&lt;br /&gt;
* Verify if an assignment's deadline is passed, instructors can see a &amp;quot;Assign Grade&amp;quot; link to assign a grade.&lt;br /&gt;
* Verify if an assignment's deadline has not passed, instructors can see a &amp;quot;Perform Review&amp;quot; link to review work if they are a participant.&lt;br /&gt;
* Verify a star icon appears next to only reviews done by instructors/TAs in the responses view.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Code Coverage===&lt;br /&gt;
Coverage increased (+11.01%) to 41.493%&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Resources'''==&lt;br /&gt;
Forked Repo: https://github.com/epeden/expertiza&lt;br /&gt;
&lt;br /&gt;
Expertiza Pull Request: https://github.com/expertiza/expertiza/pull/1729&lt;br /&gt;
&lt;br /&gt;
Demo Video: https://youtu.be/mDsc5n1NZ9E&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133771</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133771"/>
		<updated>2020-04-24T02:28:38Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: /* Implementation Details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open-source project that is built using the [http://rubyonrails.org/ Ruby on Rails] framework. At its core, it is a highly versatile tool that academic institutions can use to craft learning objectives centered around team projects, peer reviews, and highly-customizable assignments.&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are two main issues:&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
===Proposed Solution===&lt;br /&gt;
&lt;br /&gt;
'''Problem 1:'''&lt;br /&gt;
* Check will be done to verify whether the course staff is a participant. Staff can only review if they are a participant of the assignment.&lt;br /&gt;
* In the '''list_submissions.html.erb''' file, have a &amp;quot;Perform Review&amp;quot; link present if the final review due date of the assignment has not passed yet. If a review was already saved and the final review due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; will be present. If a review was already submitted and the due date has not passed, then a link to &amp;quot;View Review&amp;quot; will be present.&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot;, &amp;quot;Edit Review&amp;quot;, and &amp;quot;View Review&amp;quot; links will take the instructor/TA to the pages governed by '''response_controller#new''', '''response_controller#edit''', and '''response_controller#view''' respectively.&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link will only appear after the final review due date of the assignment has passed or if there are no review due dates.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:StaffPerformReview.png|The instructor/TA will see a &amp;quot;Perform Review&amp;quot; link if the final review due date has passed.]]&lt;br /&gt;
[[File:StaffAssignGrade.png|The instructor/TA will see a &amp;quot;Perform Review&amp;quot;, &amp;quot;Edit Review&amp;quot;, or &amp;quot;View Review&amp;quot; link if the final review due date has not passed.]]&lt;br /&gt;
&lt;br /&gt;
'''Problem 2:'''&lt;br /&gt;
* A star icon will be used to distinguish whether a review was done by a course staff and will appear below the 'Review #' heading.&lt;br /&gt;
* Add helper class grades_helper.rb to handle check to determine whether review was done by course staff based on the boolean flag attached to a response.&lt;br /&gt;
* Change will be made in view_team.html.erb such that after verifying that a response was done by a course staff via identity_helper.rb, a star is displayed below the 'Review #' heading.&lt;br /&gt;
&lt;br /&gt;
[[File:InstructorReviews.png]]&lt;br /&gt;
[[File:StudentReviews.png]]&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
*views/assignments/list_submissions.html.erb&lt;br /&gt;
*views/reports/calibration_report.html.erb&lt;br /&gt;
*views/response/show_calibration_results_for_student.html.erb&lt;br /&gt;
*views/response/response.html.erb&lt;br /&gt;
*views/grades/view_team.html.erb&lt;br /&gt;
*views/grades/view_my_scores.html.erb&lt;br /&gt;
*controllers/response_controller.rb&lt;br /&gt;
*app/helpers/grades_helper.rb&lt;br /&gt;
*app/controllers/assignments_controller.rb&lt;br /&gt;
*app/controllers/response_controller.rb&lt;br /&gt;
*app/controllers/review_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
=='''Flow Chart'''==&lt;br /&gt;
This flow chart demonstrates the desired functionality. While students must submit reviews in the review stage, instructors/TA's can submit reviews any time before the final deadline. In order to submit reviews, the instructor/TA must be added as a participant to the assignment. Then, they will go to &amp;quot;View Submissions&amp;quot; on the Manage Assignments page. If the final deadline for the assignment has passed, they will see an &amp;quot;Assign Grade&amp;quot; link next to each submission. Otherwise, they will see a &amp;quot;Perform Review&amp;quot; link if a review has not been submitted yet or an &amp;quot;Edit Review&amp;quot; link if a review has been submitted already. Students can view only the reviews they have performed and the reviews of their work, while instructors/TA's can see all reviews for the assignment. Reviews done by course staff will be marked with a star to distinguish them from students' reviews.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Flow chart.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;br /&gt;
This diagram represents the relationship between different models involved with our proposed solution. We do not anticipate any changes to the database schema.&lt;br /&gt;
&lt;br /&gt;
A model that's central to our proposed solution is the AssignmentQuestionnaire model defined in assignment_questionnaire.rb. It holds the user ID of the User (user.rb) who reviewed the assignment, from which we will determine the user's role: Instructor, TA, or student. It also contains the ID of the Assignment (assignment.rb) being reviewed. Additionally, the Questionnaire (questionnaire.rb) can be located by its ID defined in AssignmentQuestionnaire and consists of the Questions (question.rb) users use to review the assignment. &lt;br /&gt;
&lt;br /&gt;
[[File:Model2picture.png ]]&lt;br /&gt;
&lt;br /&gt;
=='''Implementation Details'''==&lt;br /&gt;
The purpose of this assignment was to add functionality for course staff (defined as the instructor and teaching assistants) in regards to performing reviews for submitted assignments. Our implementation was divided into two crucial parts:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Allowing course staff to be added as participants and to allow them to perform reviews for submitted assignments in the same manner as student reviewers can.&lt;br /&gt;
&amp;lt;li&amp;gt; Allowing the authors of submitted assignments to visually see whether a review was done by a course staff or a fellow student. Reviews done by course staff are marked by a black star.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Problem 1: Allow the instructor and teaching assistants to review teams that have submitted assignments===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Problem 2: Allow authors to visually identify reviews done by the course staff===&lt;br /&gt;
Previously, a review that was done by a course staff would not be visually recognizable by an author of the particular reviewed assignment. With the following changes, however, authors will be able to recognize reviews done under the &amp;quot;Summary Report for assignment&amp;quot; page, as reviews done by course staff will have a black star located immediately below the &amp;quot;Review #&amp;quot; header. A boolean check is done in the ''review_done_by_course_staff?'' method and used in ''view_team.html.erb'' to display a black star below a particular review if and only if ''review_done_by_course_staff?'' outputs true.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/helpers/grades_helper.rb&lt;br /&gt;
    # used to determine whether a review was done by a course staff&lt;br /&gt;
    # course staff is defined as an Instructor or Teaching Assistant&lt;br /&gt;
    def review_done_by_course_staff?(review)&lt;br /&gt;
      if review.nil?&lt;br /&gt;
        false&lt;br /&gt;
      else&lt;br /&gt;
        role = Role.find(User.find(Participant.find(ResponseMap.find(Response.find(review.id).map_id).reviewer_id).user_id).role_id).name&lt;br /&gt;
        role == (&amp;quot;Instructor&amp;quot; || &amp;quot;Teaching Assistant&amp;quot;) ? true : false&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
:app/views/grades/view_team.html.erb&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: black; border:1px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- instructors (or higher level users) see reviewer name, students see anonymized string --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- instructor reviews labeled with a black star under the Review heading --&amp;gt;&lt;br /&gt;
    &amp;lt;% if (['Student'].include? @current_role_name) &amp;amp;&amp;amp; (@assignment.is_anonymous) %&amp;gt;&lt;br /&gt;
        &amp;lt;% review_name = &amp;quot;Review &amp;quot; + i.to_s  %&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;% review_name = User.find(Participant.find(ResponseMap.find(Response.find(review.id).map_id).reviewer_id).user_id).fullname(session[:ip]).to_s %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;th class=&amp;quot;sorter-false&amp;quot;&amp;gt; &amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;../response/view?id=&amp;lt;%= review.id.to_s %&amp;gt;&amp;quot;  data-toggle=&amp;quot;tooltip&amp;quot; data-placement=&amp;quot;right&amp;quot; title=&amp;quot;Click to see details&amp;quot;&amp;gt;&amp;lt;%= review_name %&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;% if review_done_by_course_staff?(review) %&amp;gt;&lt;br /&gt;
        &amp;lt;br&amp;gt;&amp;lt;span class=&amp;quot;glyphicon glyphicon-star&amp;quot; style=&amp;quot;margin:auto; display:table&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;&lt;br /&gt;
[https://github.com/epeden/expertiza/pull/15?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
&lt;br /&gt;
* Add an instructor as a participant in the assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click the icon to add participants.&lt;br /&gt;
# Add the instructor as a participant on the assignment.&lt;br /&gt;
&lt;br /&gt;
* Instructor should be able to add a review on an assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click on the View Submissions icon.&lt;br /&gt;
# Verify a list of submissions appears.&lt;br /&gt;
# If the last due date for the assignment has not passed, the “Perform review” link should be visible.&lt;br /&gt;
# Click on the “Perform review” link.&lt;br /&gt;
# Verify submitted work for team is visible.&lt;br /&gt;
# Complete review and click save.&lt;br /&gt;
&lt;br /&gt;
* When an author view their reviews, reviews done by instructors should present a star.&lt;br /&gt;
# After logging in as the student, go to Assignments.&lt;br /&gt;
# Click on the test assignment&lt;br /&gt;
# Click &amp;quot;Your scores&amp;quot;&lt;br /&gt;
# If a review was done by an instructor, verify the star is present.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
We plan on adding comprehensive RSpec tests for all controller and model classes that we change as well as automated UI tests for features we added. Some of the planned test cases include: &lt;br /&gt;
* Verify that instructors can be added as participants for assignments.&lt;br /&gt;
* Verify that assignment reviews can be submitted by users with an Instructor, TA, or Student role assigned.&lt;br /&gt;
* Verify if an assignment's deadline is passed, instructors can see a &amp;quot;Assign Grade&amp;quot; link to assign a grade.&lt;br /&gt;
* Verify if an assignment's deadline has not passed, instructors can see a &amp;quot;Perform Review&amp;quot; link to review work if they are a participant.&lt;br /&gt;
* Verify a star icon appears next to only reviews done by instructors/TAs in the responses view.&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Resources'''==&lt;br /&gt;
Forked Repo: https://github.com/epeden/expertiza&lt;br /&gt;
&lt;br /&gt;
Expertiza Pull Request: https://github.com/expertiza/expertiza/pull/1729&lt;br /&gt;
&lt;br /&gt;
Demo Video: https://youtu.be/mDsc5n1NZ9E&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133756</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133756"/>
		<updated>2020-04-24T02:09:23Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: /* Problem 2: Allow authors to visually identify reviews done by the course staff */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open-source project that is built using the [http://rubyonrails.org/ Ruby on Rails] framework. At its core, it is a highly versatile tool that academic institutions can use to craft learning objectives centered around team projects, peer reviews, and highly-customizable assignments.&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are two main issues (and a third as an '''extra feature'''):&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
3. Allow the reviewers to see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
===Proposed Solution===&lt;br /&gt;
&lt;br /&gt;
'''Problem 1:'''&lt;br /&gt;
* Check will be done to verify whether the course staff is a participant. Staff can only review if they are a participant of the assignment.&lt;br /&gt;
* In the list_submissions.html.erb file, have a &amp;quot;Perform Review&amp;quot; link present if the due date of the assignment has not passed yet. &lt;br /&gt;
* If a review was already saved and the final review due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; will be present. If a review was already submitted and the due date has not passed, then a link to &amp;quot;View Review&amp;quot; will be present.&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link will only appear after the final review due date of the assignment has passed.&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot;, &amp;quot;Edit Review&amp;quot;, and &amp;quot;View Review&amp;quot; links will take the instructor/TA to the pages governed by response_controller#new, response_controller#edit, and response_controller#view respectively.&lt;br /&gt;
&lt;br /&gt;
[[File:StaffPerformReview.png]]&lt;br /&gt;
[[File:StaffAssignGrade.png]]&lt;br /&gt;
&lt;br /&gt;
'''Problem 2:'''&lt;br /&gt;
* A star icon will be used to distinguish whether a review was done by a course staff and will appear below the 'Review #' heading.&lt;br /&gt;
* Add helper class grades_helper.rb to handle check to determine whether review was done by course staff based on the boolean flag attached to a response.&lt;br /&gt;
* Change will be made in view_team.html.erb such that after verifying that a response was done by a course staff via identity_helper.rb, a star is displayed below the 'Review #' heading.&lt;br /&gt;
&lt;br /&gt;
[[File:InstructorReviewStaff.png]]&lt;br /&gt;
[[File:StudentReviewStaff.png]]&lt;br /&gt;
&lt;br /&gt;
'''Problem 3:'''&lt;br /&gt;
* Add the ''Criterion'' review type by expanding the current conditional statements targeting ''Checkbox'' to include ''Criterion'' in show_calibration_results_for_student.html.erb.&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
*views/assignments/list_submissions.html.erb&lt;br /&gt;
*views/reports/calibration_report.html.erb&lt;br /&gt;
*views/response/show_calibration_results_for_student.html.erb&lt;br /&gt;
*views/response/response.html.erb&lt;br /&gt;
*views/grades/view_team.html.erb&lt;br /&gt;
*views/grades/view_my_scores.html.erb&lt;br /&gt;
*controllers/response_controller.rb&lt;br /&gt;
*app/helpers/grades_helper.rb&lt;br /&gt;
&lt;br /&gt;
=='''Flow Chart'''==&lt;br /&gt;
This flow chart demonstrates the desired functionality. While students must submit reviews in the review stage, instructors/TA's can submit reviews any time before the final deadline. In order to submit reviews, the instructor/TA must be added as a participant to the assignment. Then, they will go to &amp;quot;View Submissions&amp;quot; on the Manage Assignments page. If the final deadline for the assignment has passed, they will see an &amp;quot;Assign Grade&amp;quot; link next to each submission. Otherwise, they will see a &amp;quot;Perform Review&amp;quot; link if a review has not been submitted yet or an &amp;quot;Edit Review&amp;quot; link if a review has been submitted already. Students can view only the reviews they have performed and the reviews of their work, while instructors/TA's can see all reviews for the assignment. Reviews done by course staff will be marked with a star to distinguish them from students' reviews.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Flow chart.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;br /&gt;
This diagram represents the relationship between different models involved with our proposed solution. We do not anticipate any changes to the database schema.&lt;br /&gt;
&lt;br /&gt;
A model that's central to our proposed solution is the AssignmentQuestionnaire model defined in assignment_questionnaire.rb. It holds the user ID of the User (user.rb) who reviewed the assignment, from which we will determine the user's role: Instructor, TA, or student. It also contains the ID of the Assignment (assignment.rb) being reviewed. Additionally, the Questionnaire (questionnaire.rb) can be located by its ID defined in AssignmentQuestionnaire and consists of the Questions (question.rb) users use to review the assignment. &lt;br /&gt;
&lt;br /&gt;
[[File:Model2picture.png ]]&lt;br /&gt;
&lt;br /&gt;
=='''Implementation Details'''==&lt;br /&gt;
===Problem 1: Allow the instructor and teaching assistants to review teams that have submitted assignments===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Problem 2: Allow authors to visually identify reviews done by the course staff===&lt;br /&gt;
Previously, a review that was done by a course staff would not be visually recognizable by an author of the particular reviewed assignment. With the following changes, however, authors will be able to recognize reviews done under the &amp;quot;Summary Report for assignment&amp;quot; page, as reviews done by course staff will have a black star located immediately below the &amp;quot;Review #&amp;quot; header. A boolean check is done in the ''review_done_by_course_staff?'' method and used in ''view_team.html.erb'' to display a black star below a particular review if and only if ''review_done_by_course_staff?'' outputs true.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/helpers/grades_helper.rb&lt;br /&gt;
    # used to determine whether a review was done by a course staff&lt;br /&gt;
    # course staff is defined as an Instructor or Teaching Assistant&lt;br /&gt;
    def review_done_by_course_staff?(review)&lt;br /&gt;
      if review.nil?&lt;br /&gt;
        false&lt;br /&gt;
      else&lt;br /&gt;
        role = Role.find(User.find(Participant.find(ResponseMap.find(Response.find(review.id).map_id).reviewer_id).user_id).role_id).name&lt;br /&gt;
        role == (&amp;quot;Instructor&amp;quot; || &amp;quot;Teaching Assistant&amp;quot;) ? true : false&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
:app/views/grades/view_team.html.erb&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: black; border:1px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- instructors (or higher level users) see reviewer name, students see anonymized string --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- instructor reviews labeled with a black star under the Review heading --&amp;gt;&lt;br /&gt;
    &amp;lt;% if (['Student'].include? @current_role_name) &amp;amp;&amp;amp; (@assignment.is_anonymous) %&amp;gt;&lt;br /&gt;
        &amp;lt;% review_name = &amp;quot;Review &amp;quot; + i.to_s  %&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;% review_name = User.find(Participant.find(ResponseMap.find(Response.find(review.id).map_id).reviewer_id).user_id).fullname(session[:ip]).to_s %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;th class=&amp;quot;sorter-false&amp;quot;&amp;gt; &amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;../response/view?id=&amp;lt;%= review.id.to_s %&amp;gt;&amp;quot;  data-toggle=&amp;quot;tooltip&amp;quot; data-placement=&amp;quot;right&amp;quot; title=&amp;quot;Click to see details&amp;quot;&amp;gt;&amp;lt;%= review_name %&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;% if review_done_by_course_staff?(review) %&amp;gt;&lt;br /&gt;
        &amp;lt;br&amp;gt;&amp;lt;span class=&amp;quot;glyphicon glyphicon-star&amp;quot; style=&amp;quot;margin:auto; display:table&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;&lt;br /&gt;
[https://github.com/epeden/expertiza/pull/15?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
&lt;br /&gt;
* Add an instructor as a participant in the assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click the icon to add participants.&lt;br /&gt;
# Add the instructor as a participant on the assignment.&lt;br /&gt;
&lt;br /&gt;
* Instructor should be able to add a review on an assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click on the View Submissions icon.&lt;br /&gt;
# Verify a list of submissions appears.&lt;br /&gt;
# If the last due date for the assignment has not passed, the “Perform review” link should be visible.&lt;br /&gt;
# Click on the “Perform review” link.&lt;br /&gt;
# Verify submitted work for team is visible.&lt;br /&gt;
# Complete review and click save.&lt;br /&gt;
&lt;br /&gt;
* When an author view their reviews, reviews done by instructors should present a star.&lt;br /&gt;
# After logging in as the student, go to Assignments.&lt;br /&gt;
# Click on the test assignment&lt;br /&gt;
# Click &amp;quot;Your scores&amp;quot;&lt;br /&gt;
# If a review was done by an instructor, verify the star is present.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
We plan on adding comprehensive RSpec tests for all controller and model classes that we change as well as automated UI tests for features we added. Some of the planned test cases include: &lt;br /&gt;
* Verify that instructors can be added as participants for assignments.&lt;br /&gt;
* Verify that assignment reviews can be submitted by users with an Instructor, TA, or Student role assigned.&lt;br /&gt;
* Verify if an assignment's deadline is passed, instructors can see a &amp;quot;Assign Grade&amp;quot; link to assign a grade.&lt;br /&gt;
* Verify if an assignment's deadline has not passed, instructors can see a &amp;quot;Perform Review&amp;quot; link to review work if they are a participant.&lt;br /&gt;
* Verify a star icon appears next to only reviews done by instructors/TAs in the responses view.&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Resources'''==&lt;br /&gt;
Forked Repo: https://github.com/epeden/expertiza&lt;br /&gt;
&lt;br /&gt;
Expertiza Pull Request: https://github.com/expertiza/expertiza/pull/1729&lt;br /&gt;
&lt;br /&gt;
Demo Video: https://youtu.be/mDsc5n1NZ9E&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133749</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133749"/>
		<updated>2020-04-24T02:01:54Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: /* Problem 2: Allow authors to visually identify reviews done by the course staff */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open-source project that is built using the [http://rubyonrails.org/ Ruby on Rails] framework. At its core, it is a highly versatile tool that academic institutions can use to craft learning objectives centered around team projects, peer reviews, and highly-customizable assignments.&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are two main issues (and a third as an '''extra feature'''):&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
3. Allow the reviewers to see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
===Proposed Solution===&lt;br /&gt;
&lt;br /&gt;
'''Problem 1:'''&lt;br /&gt;
* Check will be done to verify whether the course staff is a participant. Staff can only review if they are a participant of the assignment.&lt;br /&gt;
* In the list_submissions.html.erb file, have a &amp;quot;Perform Review&amp;quot; link present if the due date of the assignment has not passed yet. &lt;br /&gt;
* If a review was already saved and the final review due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; will be present. If a review was already submitted and the due date has not passed, then a link to &amp;quot;View Review&amp;quot; will be present.&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link will only appear after the final review due date of the assignment has passed.&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot;, &amp;quot;Edit Review&amp;quot;, and &amp;quot;View Review&amp;quot; links will take the instructor/TA to the pages governed by response_controller#new, response_controller#edit, and response_controller#view respectively.&lt;br /&gt;
&lt;br /&gt;
[[File:StaffPerformReview.png]]&lt;br /&gt;
[[File:StaffAssignGrade.png]]&lt;br /&gt;
&lt;br /&gt;
'''Problem 2:'''&lt;br /&gt;
* A star icon will be used to distinguish whether a review was done by a course staff and will appear below the 'Review #' heading.&lt;br /&gt;
* Add helper class grades_helper.rb to handle check to determine whether review was done by course staff based on the boolean flag attached to a response.&lt;br /&gt;
* Change will be made in view_team.html.erb such that after verifying that a response was done by a course staff via identity_helper.rb, a star is displayed below the 'Review #' heading.&lt;br /&gt;
&lt;br /&gt;
[[File:InstructorReviewStaff.png]]&lt;br /&gt;
[[File:StudentReviewStaff.png]]&lt;br /&gt;
&lt;br /&gt;
'''Problem 3:'''&lt;br /&gt;
* Add the ''Criterion'' review type by expanding the current conditional statements targeting ''Checkbox'' to include ''Criterion'' in show_calibration_results_for_student.html.erb.&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
*views/assignments/list_submissions.html.erb&lt;br /&gt;
*views/reports/calibration_report.html.erb&lt;br /&gt;
*views/response/show_calibration_results_for_student.html.erb&lt;br /&gt;
*views/response/response.html.erb&lt;br /&gt;
*views/grades/view_team.html.erb&lt;br /&gt;
*views/grades/view_my_scores.html.erb&lt;br /&gt;
*controllers/response_controller.rb&lt;br /&gt;
*app/helpers/grades_helper.rb&lt;br /&gt;
&lt;br /&gt;
=='''Flow Chart'''==&lt;br /&gt;
This flow chart demonstrates the desired functionality. While students must submit reviews in the review stage, instructors/TA's can submit reviews any time before the final deadline. In order to submit reviews, the instructor/TA must be added as a participant to the assignment. Then, they will go to &amp;quot;View Submissions&amp;quot; on the Manage Assignments page. If the final deadline for the assignment has passed, they will see an &amp;quot;Assign Grade&amp;quot; link next to each submission. Otherwise, they will see a &amp;quot;Perform Review&amp;quot; link if a review has not been submitted yet or an &amp;quot;Edit Review&amp;quot; link if a review has been submitted already. Students can view only the reviews they have performed and the reviews of their work, while instructors/TA's can see all reviews for the assignment. Reviews done by course staff will be marked with a star to distinguish them from students' reviews.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Flow chart.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;br /&gt;
This diagram represents the relationship between different models involved with our proposed solution. We do not anticipate any changes to the database schema.&lt;br /&gt;
&lt;br /&gt;
A model that's central to our proposed solution is the AssignmentQuestionnaire model defined in assignment_questionnaire.rb. It holds the user ID of the User (user.rb) who reviewed the assignment, from which we will determine the user's role: Instructor, TA, or student. It also contains the ID of the Assignment (assignment.rb) being reviewed. Additionally, the Questionnaire (questionnaire.rb) can be located by its ID defined in AssignmentQuestionnaire and consists of the Questions (question.rb) users use to review the assignment. &lt;br /&gt;
&lt;br /&gt;
[[File:Model2picture.png ]]&lt;br /&gt;
&lt;br /&gt;
=='''Implementation Details'''==&lt;br /&gt;
===Problem 1: Allow the instructor and teaching assistants to review teams that have submitted assignments===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Problem 2: Allow authors to visually identify reviews done by the course staff===&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/helpers/grades_helper.rb&lt;br /&gt;
    # used to determine whether a review was done by a course staff&lt;br /&gt;
    # course staff is defined as an Instructor or Teaching Assistant&lt;br /&gt;
    def review_done_by_course_staff?(review)&lt;br /&gt;
      if review.nil?&lt;br /&gt;
        false&lt;br /&gt;
      else&lt;br /&gt;
        role = Role.find(User.find(Participant.find(ResponseMap.find(Response.find(review.id).map_id).reviewer_id).user_id).role_id).name&lt;br /&gt;
        role == (&amp;quot;Instructor&amp;quot; || &amp;quot;Teaching Assistant&amp;quot;) ? true : false&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
:app/views/grades/view_team.html.erb&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: black; border:1px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- instructors (or higher level users) see reviewer name, students see anonymized string --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- instructor reviews labeled with a black star under the Review heading --&amp;gt;&lt;br /&gt;
    &amp;lt;% if (['Student'].include? @current_role_name) &amp;amp;&amp;amp; (@assignment.is_anonymous) %&amp;gt;&lt;br /&gt;
        &amp;lt;% review_name = &amp;quot;Review &amp;quot; + i.to_s  %&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;% review_name = User.find(Participant.find(ResponseMap.find(Response.find(review.id).map_id).reviewer_id).user_id).fullname(session[:ip]).to_s %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;th class=&amp;quot;sorter-false&amp;quot;&amp;gt; &amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;../response/view?id=&amp;lt;%= review.id.to_s %&amp;gt;&amp;quot;  data-toggle=&amp;quot;tooltip&amp;quot; data-placement=&amp;quot;right&amp;quot; title=&amp;quot;Click to see details&amp;quot;&amp;gt;&amp;lt;%= review_name %&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;% if review_done_by_course_staff?(review) %&amp;gt;&lt;br /&gt;
        &amp;lt;br&amp;gt;&amp;lt;span class=&amp;quot;glyphicon glyphicon-star&amp;quot; style=&amp;quot;margin:auto; display:table&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;&lt;br /&gt;
[https://github.com/epeden/expertiza/pull/15?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
&lt;br /&gt;
* Add an instructor as a participant in the assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click the icon to add participants.&lt;br /&gt;
# Add the instructor as a participant on the assignment.&lt;br /&gt;
&lt;br /&gt;
* Instructor should be able to add a review on an assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click on the View Submissions icon.&lt;br /&gt;
# Verify a list of submissions appears.&lt;br /&gt;
# If the last due date for the assignment has not passed, the “Perform review” link should be visible.&lt;br /&gt;
# Click on the “Perform review” link.&lt;br /&gt;
# Verify submitted work for team is visible.&lt;br /&gt;
# Complete review and click save.&lt;br /&gt;
&lt;br /&gt;
* When an author view their reviews, reviews done by instructors should present a star.&lt;br /&gt;
# After logging in as the student, go to Assignments.&lt;br /&gt;
# Click on the test assignment&lt;br /&gt;
# Click &amp;quot;Your scores&amp;quot;&lt;br /&gt;
# If a review was done by an instructor, verify the star is present.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
We plan on adding comprehensive RSpec tests for all controller and model classes that we change as well as automated UI tests for features we added. Some of the planned test cases include: &lt;br /&gt;
* Verify that instructors can be added as participants for assignments.&lt;br /&gt;
* Verify that assignment reviews can be submitted by users with an Instructor, TA, or Student role assigned.&lt;br /&gt;
* Verify if an assignment's deadline is passed, instructors can see a &amp;quot;Assign Grade&amp;quot; link to assign a grade.&lt;br /&gt;
* Verify if an assignment's deadline has not passed, instructors can see a &amp;quot;Perform Review&amp;quot; link to review work if they are a participant.&lt;br /&gt;
* Verify a star icon appears next to only reviews done by instructors/TAs in the responses view.&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Resources'''==&lt;br /&gt;
Forked Repo: https://github.com/epeden/expertiza&lt;br /&gt;
&lt;br /&gt;
Expertiza Pull Request: https://github.com/expertiza/expertiza/pull/1729&lt;br /&gt;
&lt;br /&gt;
Demo Video: https://youtu.be/mDsc5n1NZ9E&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133747</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133747"/>
		<updated>2020-04-24T02:00:53Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: /* Implementation Details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open-source project that is built using the [http://rubyonrails.org/ Ruby on Rails] framework. At its core, it is a highly versatile tool that academic institutions can use to craft learning objectives centered around team projects, peer reviews, and highly-customizable assignments.&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are two main issues (and a third as an '''extra feature'''):&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
3. Allow the reviewers to see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
===Proposed Solution===&lt;br /&gt;
&lt;br /&gt;
'''Problem 1:'''&lt;br /&gt;
* Check will be done to verify whether the course staff is a participant. Staff can only review if they are a participant of the assignment.&lt;br /&gt;
* In the list_submissions.html.erb file, have a &amp;quot;Perform Review&amp;quot; link present if the due date of the assignment has not passed yet. &lt;br /&gt;
* If a review was already saved and the final review due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; will be present. If a review was already submitted and the due date has not passed, then a link to &amp;quot;View Review&amp;quot; will be present.&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link will only appear after the final review due date of the assignment has passed.&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot;, &amp;quot;Edit Review&amp;quot;, and &amp;quot;View Review&amp;quot; links will take the instructor/TA to the pages governed by response_controller#new, response_controller#edit, and response_controller#view respectively.&lt;br /&gt;
&lt;br /&gt;
[[File:InstructorPerformReview.jpg]]&lt;br /&gt;
[[File:StaffAssignGrade.png]]&lt;br /&gt;
&lt;br /&gt;
'''Problem 2:'''&lt;br /&gt;
* A star icon will be used to distinguish whether a review was done by a course staff and will appear below the 'Review #' heading.&lt;br /&gt;
* Add helper class grades_helper.rb to handle check to determine whether review was done by course staff based on the boolean flag attached to a response.&lt;br /&gt;
* Change will be made in view_team.html.erb such that after verifying that a response was done by a course staff via identity_helper.rb, a star is displayed below the 'Review #' heading.&lt;br /&gt;
&lt;br /&gt;
[[File:InstructorReviewStaff.png]]&lt;br /&gt;
[[File:StudentReviewStaff.png]]&lt;br /&gt;
&lt;br /&gt;
'''Problem 3:'''&lt;br /&gt;
* Add the ''Criterion'' review type by expanding the current conditional statements targeting ''Checkbox'' to include ''Criterion'' in show_calibration_results_for_student.html.erb.&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
*views/assignments/list_submissions.html.erb&lt;br /&gt;
*views/reports/calibration_report.html.erb&lt;br /&gt;
*views/response/show_calibration_results_for_student.html.erb&lt;br /&gt;
*views/response/response.html.erb&lt;br /&gt;
*views/grades/view_team.html.erb&lt;br /&gt;
*views/grades/view_my_scores.html.erb&lt;br /&gt;
*controllers/response_controller.rb&lt;br /&gt;
*app/helpers/grades_helper.rb&lt;br /&gt;
&lt;br /&gt;
=='''Flow Chart'''==&lt;br /&gt;
This flow chart demonstrates the desired functionality. While students must submit reviews in the review stage, instructors/TA's can submit reviews any time before the final deadline. In order to submit reviews, the instructor/TA must be added as a participant to the assignment. Then, they will go to &amp;quot;View Submissions&amp;quot; on the Manage Assignments page. If the final deadline for the assignment has passed, they will see an &amp;quot;Assign Grade&amp;quot; link next to each submission. Otherwise, they will see a &amp;quot;Perform Review&amp;quot; link if a review has not been submitted yet or an &amp;quot;Edit Review&amp;quot; link if a review has been submitted already. Students can view only the reviews they have performed and the reviews of their work, while instructors/TA's can see all reviews for the assignment. Reviews done by course staff will be marked with a star to distinguish them from students' reviews.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Flow chart.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;br /&gt;
This diagram represents the relationship between different models involved with our proposed solution. We do not anticipate any changes to the database schema.&lt;br /&gt;
&lt;br /&gt;
A model that's central to our proposed solution is the AssignmentQuestionnaire model defined in assignment_questionnaire.rb. It holds the user ID of the User (user.rb) who reviewed the assignment, from which we will determine the user's role: Instructor, TA, or student. It also contains the ID of the Assignment (assignment.rb) being reviewed. Additionally, the Questionnaire (questionnaire.rb) can be located by its ID defined in AssignmentQuestionnaire and consists of the Questions (question.rb) users use to review the assignment. &lt;br /&gt;
&lt;br /&gt;
[[File:Model2picture.png ]]&lt;br /&gt;
&lt;br /&gt;
=='''Implementation Details'''==&lt;br /&gt;
===Problem 1: Allow the instructor and teaching assistants to review teams that have submitted assignments===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Problem 2: Allow authors to visually identify reviews done by the course staff===&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/helpers/grades_helper.rb&lt;br /&gt;
    # used to determine whether a review was done by a course staff&lt;br /&gt;
    # course staff is defined as an Instructor or Teaching Assistant&lt;br /&gt;
    def review_done_by_course_staff?(review)&lt;br /&gt;
      if review.nil?&lt;br /&gt;
        false&lt;br /&gt;
      else&lt;br /&gt;
        role = Role.find(User.find(Participant.find(ResponseMap.find(Response.find(review.id).map_id).reviewer_id).user_id).role_id).name&lt;br /&gt;
        role == (&amp;quot;Instructor&amp;quot; || &amp;quot;Teaching Assistant&amp;quot;) ? true : false&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
:app/views/grades/view_team.html.erb&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: black; border:1px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- instructors (or higher level users) see reviewer name, students see anonymized string --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- instructor reviews labeled with a black star under the Review heading --&amp;gt;&lt;br /&gt;
    &amp;lt;% if (['Student'].include? @current_role_name) &amp;amp;&amp;amp; (@assignment.is_anonymous) %&amp;gt;&lt;br /&gt;
        &amp;lt;% review_name = &amp;quot;Review &amp;quot; + i.to_s  %&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;% review_name = User.find(Participant.find(ResponseMap.find(Response.find(review.id).map_id).reviewer_id).user_id).fullname(session[:ip]).to_s %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;th class=&amp;quot;sorter-false&amp;quot;&amp;gt; &amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;../response/view?id=&amp;lt;%= review.id.to_s %&amp;gt;&amp;quot;  data-toggle=&amp;quot;tooltip&amp;quot; data-placement=&amp;quot;right&amp;quot; title=&amp;quot;Click to see details&amp;quot;&amp;gt;&amp;lt;%= review_name %&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;% if review_done_by_course_staff?(review) %&amp;gt;&lt;br /&gt;
        &amp;lt;br&amp;gt;&amp;lt;span class=&amp;quot;glyphicon glyphicon-star&amp;quot; style=&amp;quot;margin:auto; display:table&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;&lt;br /&gt;
[https://github.com/epeden/expertiza/pull/15= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
&lt;br /&gt;
* Add an instructor as a participant in the assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click the icon to add participants.&lt;br /&gt;
# Add the instructor as a participant on the assignment.&lt;br /&gt;
&lt;br /&gt;
* Instructor should be able to add a review on an assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click on the View Submissions icon.&lt;br /&gt;
# Verify a list of submissions appears.&lt;br /&gt;
# If the last due date for the assignment has not passed, the “Perform review” link should be visible.&lt;br /&gt;
# Click on the “Perform review” link.&lt;br /&gt;
# Verify submitted work for team is visible.&lt;br /&gt;
# Complete review and click save.&lt;br /&gt;
&lt;br /&gt;
* When an author view their reviews, reviews done by instructors should present a star.&lt;br /&gt;
# After logging in as the student, go to Assignments.&lt;br /&gt;
# Click on the test assignment&lt;br /&gt;
# Click &amp;quot;Your scores&amp;quot;&lt;br /&gt;
# If a review was done by an instructor, verify the star is present.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
We plan on adding comprehensive RSpec tests for all controller and model classes that we change as well as automated UI tests for features we added. Some of the planned test cases include: &lt;br /&gt;
* Verify that instructors can be added as participants for assignments.&lt;br /&gt;
* Verify that assignment reviews can be submitted by users with an Instructor, TA, or Student role assigned.&lt;br /&gt;
* Verify if an assignment's deadline is passed, instructors can see a &amp;quot;Assign Grade&amp;quot; link to assign a grade.&lt;br /&gt;
* Verify if an assignment's deadline has not passed, instructors can see a &amp;quot;Perform Review&amp;quot; link to review work if they are a participant.&lt;br /&gt;
* Verify a star icon appears next to only reviews done by instructors/TAs in the responses view.&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Resources'''==&lt;br /&gt;
Forked Repo: https://github.com/epeden/expertiza&lt;br /&gt;
&lt;br /&gt;
Expertiza Pull Request: https://github.com/expertiza/expertiza/pull/1729&lt;br /&gt;
&lt;br /&gt;
Demo Video: https://youtu.be/mDsc5n1NZ9E&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133723</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133723"/>
		<updated>2020-04-24T00:52:57Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open-source project that is built using the [http://rubyonrails.org/ Ruby on Rails] framework. At its core, it is a highly versatile tool that academic institutions can use to craft learning objectives centered around team projects, peer reviews, and highly-customizable assignments.&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are two main issues (and a third as an '''extra feature'''):&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
3. Allow the reviewers to see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
===Proposed Solution===&lt;br /&gt;
&lt;br /&gt;
'''Problem 1:'''&lt;br /&gt;
* Check will be done to verify whether the course staff is a participant. Staff can only review if they are a participant of the assignment.&lt;br /&gt;
* In the list_submissions.html.erb file, have a &amp;quot;Perform Review&amp;quot; link present if the due date of the assignment has not passed yet. &lt;br /&gt;
* If a review was already saved and the final review due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; will be present. If a review was already submitted and the due date has not passed, then a link to &amp;quot;View Review&amp;quot; will be present.&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link will only appear after the final review due date of the assignment has passed.&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot;, &amp;quot;Edit Review&amp;quot;, and &amp;quot;View Review&amp;quot; links will take the instructor/TA to the pages governed by response_controller#new, response_controller#edit, and response_controller#view respectively.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:InstructorPerformReview.png]]&lt;br /&gt;
[[File:InstructorAssignGrade.png]]&lt;br /&gt;
&lt;br /&gt;
'''Problem 2:'''&lt;br /&gt;
* A star icon will be used to distinguish whether a review was done by a course staff and will appear below the 'Review #' heading.&lt;br /&gt;
* Add helper class grades_helper.rb to handle check to determine whether review was done by course staff based on the boolean flag attached to a response.&lt;br /&gt;
* Change will be made in view_team.html.erb such that after verifying that a response was done by a course staff via identity_helper.rb, a star is displayed below the 'Review #' heading.&lt;br /&gt;
&lt;br /&gt;
'''Problem 3:'''&lt;br /&gt;
* Add the ''Criterion'' review type by expanding the current conditional statements targeting ''Checkbox'' to include ''Criterion'' in show_calibration_results_for_student.html.erb.&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
*views/assignments/list_submissions.html.erb&lt;br /&gt;
*views/reports/calibration_report.html.erb&lt;br /&gt;
*views/response/show_calibration_results_for_student.html.erb&lt;br /&gt;
*views/response/response.html.erb&lt;br /&gt;
*views/grades/view_team.html.erb&lt;br /&gt;
*views/grades/view_my_scores.html.erb&lt;br /&gt;
*controllers/response_controller.rb&lt;br /&gt;
*app/helpers/grades_helper.rb&lt;br /&gt;
&lt;br /&gt;
=='''Flow Chart'''==&lt;br /&gt;
This flow chart demonstrates the desired functionality. While students must submit reviews in the review stage, instructors/TA's can submit reviews any time before the final deadline. In order to submit reviews, the instructor/TA must be added as a participant to the assignment. Then, they will go to &amp;quot;View Submissions&amp;quot; on the Manage Assignments page. If the final deadline for the assignment has passed, they will see an &amp;quot;Assign Grade&amp;quot; link next to each submission. Otherwise, they will see a &amp;quot;Perform Review&amp;quot; link if a review has not been submitted yet or an &amp;quot;Edit Review&amp;quot; link if a review has been submitted already. Students can view only the reviews they have performed and the reviews of their work, while instructors/TA's can see all reviews for the assignment. Reviews done by course staff will be marked with a star to distinguish them from students' reviews.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Flow chart.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;br /&gt;
This diagram represents the relationship between different models involved with our proposed solution. We do not anticipate any changes to the database schema.&lt;br /&gt;
&lt;br /&gt;
A model that's central to our proposed solution is the AssignmentQuestionnaire model defined in assignment_questionnaire.rb. It holds the user ID of the User (user.rb) who reviewed the assignment, from which we will determine the user's role: Instructor, TA, or student. It also contains the ID of the Assignment (assignment.rb) being reviewed. Additionally, the Questionnaire (questionnaire.rb) can be located by its ID defined in AssignmentQuestionnaire and consists of the Questions (question.rb) users use to review the assignment. &lt;br /&gt;
&lt;br /&gt;
[[File:Model2picture.png ]]&lt;br /&gt;
&lt;br /&gt;
=='''Implementation Details'''==&lt;br /&gt;
===Problem 1: Allow the instructor and teaching assistants to review teams that have submitted assignments===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Problem 2: Allow authors to visually identify reviews done by the course staff===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
&lt;br /&gt;
* Add an instructor as a participant in the assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click the icon to add participants.&lt;br /&gt;
# Add the instructor as a participant on the assignment.&lt;br /&gt;
&lt;br /&gt;
* Instructor should be able to add a review on an assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click on the View Submissions icon.&lt;br /&gt;
# Verify a list of submissions appears.&lt;br /&gt;
# If the last due date for the assignment has not passed, the “Perform review” link should be visible.&lt;br /&gt;
# Click on the “Perform review” link.&lt;br /&gt;
# Verify submitted work for team is visible.&lt;br /&gt;
# Complete review and click save.&lt;br /&gt;
&lt;br /&gt;
* When an author view their reviews, reviews done by instructors should present a star.&lt;br /&gt;
# After logging in as the student, go to Assignments.&lt;br /&gt;
# Click on the test assignment&lt;br /&gt;
# Click &amp;quot;Your scores&amp;quot;&lt;br /&gt;
# If a review was done by an instructor, verify the star is present.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
We plan on adding comprehensive RSpec tests for all controller and model classes that we change as well as automated UI tests for features we added. Some of the planned test cases include: &lt;br /&gt;
* Verify that instructors can be added as participants for assignments.&lt;br /&gt;
* Verify that assignment reviews can be submitted by users with an Instructor, TA, or Student role assigned.&lt;br /&gt;
* Verify if an assignment's deadline is passed, instructors can see a &amp;quot;Assign Grade&amp;quot; link to assign a grade.&lt;br /&gt;
* Verify if an assignment's deadline has not passed, instructors can see a &amp;quot;Perform Review&amp;quot; link to review work if they are a participant.&lt;br /&gt;
* Verify a star icon appears next to only reviews done by instructors/TAs in the responses view.&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Resources'''==&lt;br /&gt;
Forked Repo: https://github.com/epeden/expertiza&lt;br /&gt;
&lt;br /&gt;
Expertiza Pull Request: https://github.com/expertiza/expertiza/pull/1729&lt;br /&gt;
&lt;br /&gt;
Demo Video: https://youtu.be/mDsc5n1NZ9E&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133720</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133720"/>
		<updated>2020-04-24T00:43:45Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open-source project that is built using the [http://rubyonrails.org/ Ruby on Rails] framework. At its core, it is a highly versatile tool that academic institutions can use to craft learning objectives centered around team projects, peer reviews, and highly-customizable assignments.&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are two main issues (and a third as an '''extra feature'''):&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
3. Allow the reviewers to see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
===Proposed Solution===&lt;br /&gt;
&lt;br /&gt;
'''Problem 1:'''&lt;br /&gt;
* Check will be done to verify whether the course staff is a participant. Staff can only review if they are a participant of the assignment.&lt;br /&gt;
* In the list_submissions.html.erb file, have a &amp;quot;Perform Review&amp;quot; link present if the due date of the assignment has not passed yet. &lt;br /&gt;
* If a review was already saved and the final review due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; will be present. If a review was already submitted and the due date has not passed, then a link to &amp;quot;View Review&amp;quot; will be present.&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link will only appear after the final review due date of the assignment has passed.&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot;, &amp;quot;Edit Review&amp;quot;, and &amp;quot;View Review&amp;quot; links will take the instructor/TA to the pages governed by response_controller#new, response_controller#edit, and response_controller#view respectively.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:InstructorPerformReview.png]]&lt;br /&gt;
[[File:InstructorAssignGrade.png]]&lt;br /&gt;
&lt;br /&gt;
'''Problem 2:'''&lt;br /&gt;
* A star icon will be used to distinguish whether a review was done by a course staff and will appear below the 'Review #' heading.&lt;br /&gt;
* Add helper class grades_helper.rb to handle check to determine whether review was done by course staff based on the boolean flag attached to a response.&lt;br /&gt;
* Change will be made in view_team.html.erb such that after verifying that a response was done by a course staff via identity_helper.rb, a star is displayed below the 'Review #' heading.&lt;br /&gt;
&lt;br /&gt;
'''Problem 3:'''&lt;br /&gt;
* Add the ''Criterion'' review type by expanding the current conditional statements targeting ''Checkbox'' to include ''Criterion'' in show_calibration_results_for_student.html.erb.&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
*views/assignments/list_submissions.html.erb&lt;br /&gt;
*views/reports/calibration_report.html.erb&lt;br /&gt;
*views/response/show_calibration_results_for_student.html.erb&lt;br /&gt;
*views/response/response.html.erb&lt;br /&gt;
*views/grades/view_team.html.erb&lt;br /&gt;
*views/grades/view_my_scores.html.erb&lt;br /&gt;
*controllers/response_controller.rb&lt;br /&gt;
*app/helpers/grades_helper.rb&lt;br /&gt;
&lt;br /&gt;
=='''Flow Chart'''==&lt;br /&gt;
This flow chart demonstrates the desired functionality. While students must submit reviews in the review stage, instructors/TA's can submit reviews any time before the final deadline. In order to submit reviews, the instructor/TA must be added as a participant to the assignment. Then, they will go to &amp;quot;View Submissions&amp;quot; on the Manage Assignments page. If the final deadline for the assignment has passed, they will see an &amp;quot;Assign Grade&amp;quot; link next to each submission. Otherwise, they will see a &amp;quot;Perform Review&amp;quot; link if a review has not been submitted yet or an &amp;quot;Edit Review&amp;quot; link if a review has been submitted already. Students can view only the reviews they have performed and the reviews of their work, while instructors/TA's can see all reviews for the assignment. Reviews done by course staff will be marked with a star to distinguish them from students' reviews.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Flow chart.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;br /&gt;
This diagram represents the relationship between different models involved with our proposed solution. We do not anticipate any changes to the database schema.&lt;br /&gt;
&lt;br /&gt;
A model that's central to our proposed solution is the AssignmentQuestionnaire model defined in assignment_questionnaire.rb. It holds the user ID of the User (user.rb) who reviewed the assignment, from which we will determine the user's role: Instructor, TA, or student. It also contains the ID of the Assignment (assignment.rb) being reviewed. Additionally, the Questionnaire (questionnaire.rb) can be located by its ID defined in AssignmentQuestionnaire and consists of the Questions (question.rb) users use to review the assignment. &lt;br /&gt;
&lt;br /&gt;
[[File:Model2picture.png ]]&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
&lt;br /&gt;
* Add an instructor as a participant in the assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click the icon to add participants.&lt;br /&gt;
# Add the instructor as a participant on the assignment.&lt;br /&gt;
&lt;br /&gt;
* Instructor should be able to add a review on an assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click on the View Submissions icon.&lt;br /&gt;
# Verify a list of submissions appears.&lt;br /&gt;
# If the last due date for the assignment has not passed, the “Perform review” link should be visible.&lt;br /&gt;
# Click on the “Perform review” link.&lt;br /&gt;
# Verify submitted work for team is visible.&lt;br /&gt;
# Complete review and click save.&lt;br /&gt;
&lt;br /&gt;
* When an author view their reviews, reviews done by instructors should present a star.&lt;br /&gt;
# After logging in as the student, go to Assignments.&lt;br /&gt;
# Click on the test assignment&lt;br /&gt;
# Click &amp;quot;Your scores&amp;quot;&lt;br /&gt;
# If a review was done by an instructor, verify the star is present.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
We plan on adding comprehensive RSpec tests for all controller and model classes that we change as well as automated UI tests for features we added. Some of the planned test cases include: &lt;br /&gt;
* Verify that instructors can be added as participants for assignments.&lt;br /&gt;
* Verify that assignment reviews can be submitted by users with an Instructor, TA, or Student role assigned.&lt;br /&gt;
* Verify if an assignment's deadline is passed, instructors can see a &amp;quot;Assign Grade&amp;quot; link to assign a grade.&lt;br /&gt;
* Verify if an assignment's deadline has not passed, instructors can see a &amp;quot;Perform Review&amp;quot; link to review work if they are a participant.&lt;br /&gt;
* Verify a star icon appears next to only reviews done by instructors/TAs in the responses view.&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Resources'''==&lt;br /&gt;
Forked Repo: https://github.com/epeden/expertiza&lt;br /&gt;
&lt;br /&gt;
Expertiza Pull Request: https://github.com/expertiza/expertiza/pull/1729&lt;br /&gt;
&lt;br /&gt;
Demo Video: https://youtu.be/mDsc5n1NZ9E&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133673</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133673"/>
		<updated>2020-04-22T23:19:31Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are two main issues (and a third as an '''extra feature'''):&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
3. Allow the reviewers to see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
===Proposed Solution===&lt;br /&gt;
&lt;br /&gt;
'''Problem 1:'''&lt;br /&gt;
* Check will be done to verify whether the course staff is a participant.&lt;br /&gt;
* In the list_submissions.html.erb file, have a &amp;quot;Perform Review&amp;quot; link present if the due date of the assignment has not passed yet. &lt;br /&gt;
* If a review was already reviewed and the due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; will be present.&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link will only appear after the due date of the assignment has passed.&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot; or &amp;quot;Edit Review&amp;quot; links will take the instructor/TA to the pages governed by response_controller#new and response_controller#edit, respectively.&lt;br /&gt;
* A flag will be placed on the responses done by the course staff.&lt;br /&gt;
&lt;br /&gt;
'''Problem 2:'''&lt;br /&gt;
* A star icon will be used to distinguish whether a review was done by a course staff and will appear below the 'Review #' heading.&lt;br /&gt;
* Add helper class grades_helper.rb to handle check to determine whether review was done by course staff based on the boolean flag attached to a response.&lt;br /&gt;
* Change will be made in view_team.html.erb such that after verifying that a response was done by a course staff via identity_helper.rb, a star is displayed below the 'Review #' heading.&lt;br /&gt;
&lt;br /&gt;
'''Problem 3:'''&lt;br /&gt;
* Add the ''Criterion'' review type by expanding the current conditional statements targeting ''Checkbox'' to include ''Criterion'' in show_calibration_results_for_student.html.erb.&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
*views/assignments/list_submissions.html.erb&lt;br /&gt;
*views/reports/calibration_report.html.erb&lt;br /&gt;
*views/response/show_calibration_results_for_student.html.erb&lt;br /&gt;
*views/response/response.html.erb&lt;br /&gt;
*views/grades/view_team.html.erb&lt;br /&gt;
*views/grades/view_my_scores.html.erb&lt;br /&gt;
*controllers/response_controller.rb&lt;br /&gt;
*app/helpers/grades_helper.rb&lt;br /&gt;
&lt;br /&gt;
=='''Flow Chart'''==&lt;br /&gt;
This flow chart demonstrates the desired functionality. While students must submit reviews in the review stage, instructors/TA's can submit reviews any time before the final deadline. In order to submit reviews, the instructor/TA must be added as a participant to the assignment. Then, they will go to &amp;quot;View Submissions&amp;quot; on the Manage Assignments page. If the final deadline for the assignment has passed, they will see an &amp;quot;Assign Grade&amp;quot; link next to each submission. Otherwise, they will see a &amp;quot;Perform Review&amp;quot; link if a review has not been submitted yet or an &amp;quot;Edit Review&amp;quot; link if a review has been submitted already. Students can view only the reviews they have performed and the reviews of their work, while instructors/TA's can see all reviews for the assignment. Reviews done by course staff will be marked with a star to distinguish them from students' reviews.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Flow chart.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;br /&gt;
This diagram represents the relationship between different models involved with our proposed solution. We do not anticipate any changes to the database schema.&lt;br /&gt;
&lt;br /&gt;
A model that's central to our proposed solution is the AssignmentQuestionnaire model defined in assignment_questionnaire.rb. It holds the user ID of the User (user.rb) who reviewed the assignment, from which we will determine the user's role: Instructor, TA, or student. It also contains the ID of the Assignment (assignment.rb) being reviewed. Additionally, the Questionnaire (questionnaire.rb) can be located by its ID defined in AssignmentQuestionnaire and consists of the Questions (question.rb) users use to review the assignment. &lt;br /&gt;
&lt;br /&gt;
[[File:Model2picture.png ]]&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
&lt;br /&gt;
* Add an instructor as a participant in the assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click the icon to add participants.&lt;br /&gt;
# Add the instructor as a participant on the assignment.&lt;br /&gt;
&lt;br /&gt;
* Instructor should be able to add a review on an assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click on the View Submissions icon.&lt;br /&gt;
# Verify a list of submissions appears.&lt;br /&gt;
# If the last due date for the assignment has not passed, the “Perform review” link should be visible.&lt;br /&gt;
# Click on the “Perform review” link.&lt;br /&gt;
# Verify submitted work for team is visible.&lt;br /&gt;
# Complete review and click save.&lt;br /&gt;
&lt;br /&gt;
* When an author view their reviews, reviews done by instructors should present a star.&lt;br /&gt;
# After logging in as the student, go to Assignments.&lt;br /&gt;
# Click on the test assignment&lt;br /&gt;
# Click &amp;quot;Your scores&amp;quot;&lt;br /&gt;
# If a review was done by an instructor, verify the star is present.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
We plan on adding comprehensive RSpec tests for all controller and model classes that we change as well as automated UI tests for features we added. Some of the planned test cases include: &lt;br /&gt;
* Verify that instructors can be added as participants for assignments.&lt;br /&gt;
* Verify that assignment reviews can be submitted by users with an Instructor, TA, or Student role assigned.&lt;br /&gt;
* Verify if an assignment's deadline is passed, instructors can see a &amp;quot;Assign Grade&amp;quot; link to assign a grade.&lt;br /&gt;
* Verify if an assignment's deadline has not passed, instructors can see a &amp;quot;Perform Review&amp;quot; link to review work if they are a participant.&lt;br /&gt;
* Verify a star icon appears next to only reviews done by instructors/TAs in the responses view.&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133311</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133311"/>
		<updated>2020-04-13T22:57:57Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are two main issues (and a third as an '''extra feature'''):&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
3. Allow the reviewers to see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
===Proposed Solution===&lt;br /&gt;
&lt;br /&gt;
'''Problem 1:'''&lt;br /&gt;
* Check will be done to verify whether the course staff is a participant.&lt;br /&gt;
* In the list_submissions.html.erb file, have a &amp;quot;Perform Review&amp;quot; link present if the due date of the assignment has not passed yet. &lt;br /&gt;
* If a review was already reviewed and the due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; will be present.&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link will only appear after the due date of the assignment has passed.&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot; or &amp;quot;Edit Review&amp;quot; links will take the instructor/TA to the pages governed by response_controller#new and response_controller#edit, respectively.&lt;br /&gt;
* A flag will be placed on the responses done by the course staff.&lt;br /&gt;
&lt;br /&gt;
'''Problem 2:'''&lt;br /&gt;
* A star icon will be used to distinguish whether a review was done by a course staff and will appear below the 'Review #' heading.&lt;br /&gt;
* Add helper class identity_helper.rb to handle check to determine whether review was done by course staff based on the boolean flag attached to a response.&lt;br /&gt;
* Change will be made in view_team.html.erb such that after verifying that a response was done by a course staff via identity_helper.rb, a star is displayed below the 'Review #' heading.&lt;br /&gt;
&lt;br /&gt;
'''Problem 3:'''&lt;br /&gt;
* Add the ''Criterion'' review type by expanding the current conditional statements targeting ''Checkbox'' to include ''Criterion'' in show_calibration_results_for_student.html.erb.&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
*views/assignments/list_submissions.html.erb&lt;br /&gt;
*views/reports/calibration_report.html.erb&lt;br /&gt;
*views/response/show_calibration_results_for_student.html.erb&lt;br /&gt;
*views/response/response.html.erb&lt;br /&gt;
*views/grades/view_team.html.erb&lt;br /&gt;
*views/grades/view_my_scores.html.erb&lt;br /&gt;
*controllers/response_controller.rb&lt;br /&gt;
*app/helpers/identity_helper.rb&lt;br /&gt;
&lt;br /&gt;
=='''Flow Chart'''==&lt;br /&gt;
This flow chart demonstrates the desired functionality. While students must submit reviews in the review stage, instructors/TA's can submit reviews any time before the final deadline. In order to submit reviews, the instructor/TA must be added as a participant to the assignment. Then, they will go to &amp;quot;View Submissions&amp;quot; on the Manage Assignments page. If the final deadline for the assignment has passed, they will see an &amp;quot;Assign Grade&amp;quot; link next to each submission. Otherwise, they will see a &amp;quot;Perform Review&amp;quot; link if a review has not been submitted yet or an &amp;quot;Edit Review&amp;quot; link if a review has been submitted already. Students can view only the reviews they have performed and the reviews of their work, while instructors/TA's can see all reviews for the assignment. Reviews done by course staff will be marked with a star to distinguish them from students' reviews.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Flow chart.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;br /&gt;
This diagram shows the relevant tables in the existing database. We do not anticipate any changes to the database design.&lt;br /&gt;
&lt;br /&gt;
[[File:Model2picture.png ]]&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
&lt;br /&gt;
* Add an instructor as a participant in the assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click the icon to add participants.&lt;br /&gt;
# Add the instructor as a participant on the assignment.&lt;br /&gt;
&lt;br /&gt;
* Instructor should be able to add a review on an assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click on the View Submissions icon.&lt;br /&gt;
# Verify a list of submissions appears.&lt;br /&gt;
# If the last due date for the assignment has not passed, the “Perform review” link should be visible.&lt;br /&gt;
# Click on the “Perform review” link.&lt;br /&gt;
# Verify submitted work for team is visible.&lt;br /&gt;
# Complete review and click save.&lt;br /&gt;
&lt;br /&gt;
* When an author view their reviews, reviews done by instructors should present a star.&lt;br /&gt;
# After logging in as the student, go to Assignments.&lt;br /&gt;
# Click on the test assignment&lt;br /&gt;
# Click &amp;quot;Your scores&amp;quot;&lt;br /&gt;
# If a review was done by an instructor, verify the star is present.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
We plan on adding comprehensive RSpec tests for all controller and model classes that we changed as well automated UI tests for features we added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133310</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133310"/>
		<updated>2020-04-13T22:55:14Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are two main issues (and a third as an '''extra feature'''):&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
3. Allow the reviewers to see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
===Proposed Solution===&lt;br /&gt;
&lt;br /&gt;
'''Problem 1:'''&lt;br /&gt;
* Check will be done to verify whether the course staff is a participant.&lt;br /&gt;
* In the list_submissions.html.erb file, have a &amp;quot;Perform Review&amp;quot; link present if the due date of the assignment has not passed yet. &lt;br /&gt;
* If a review was already reviewed and the due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; will be present.&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link will only appear after the due date of the assignment has passed.&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot; or &amp;quot;Edit Review&amp;quot; links will take the instructor/TA to the pages governed by response_controller#new and response_controller#edit, respectively.&lt;br /&gt;
* A flag will be placed on the responses done by the course staff.&lt;br /&gt;
&lt;br /&gt;
'''Problem 2:'''&lt;br /&gt;
* A star icon will be used to distinguish whether a review was done by a course staff and will appear below the 'Review #' heading.&lt;br /&gt;
* Addition of helper class identity_helper.rb to handle check to determine whether review was done by course staff based on the boolean flag attached to a response.&lt;br /&gt;
* Change will be made in view_team.html.erb such that after verifying that a response was done by a course staff via identity_helper.rb, a star is displayed below the 'Review #' heading.&lt;br /&gt;
&lt;br /&gt;
'''Problem 3:'''&lt;br /&gt;
* Add the ''Criterion'' review type by expanding the current conditional statements targeting ''Checkbox'' to include ''Criterion'' in show_calibration_results_for_student.html.erb.&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
*views/assignments/list_submissions.html.erb&lt;br /&gt;
*views/reports/calibration_report.html.erb&lt;br /&gt;
*views/response/show_calibration_results_for_student.html.erb&lt;br /&gt;
*views/response/response.html.erb&lt;br /&gt;
*views/grades/view_team.html.erb&lt;br /&gt;
*views/grades/view_my_scores.html.erb&lt;br /&gt;
*controllers/response_controller.rb&lt;br /&gt;
*app/helpers/identity_helper.rb&lt;br /&gt;
&lt;br /&gt;
=='''Flow Chart'''==&lt;br /&gt;
This flow chart demonstrates the desired functionality. While students must submit reviews in the review stage, instructors/TA's can submit reviews any time before the final deadline. In order to submit reviews, the instructor/TA must be added as a participant to the assignment. Then, they will go to &amp;quot;View Submissions&amp;quot; on the Manage Assignments page. If the final deadline for the assignment has passed, they will see an &amp;quot;Assign Grade&amp;quot; link next to each submission. Otherwise, they will see a &amp;quot;Perform Review&amp;quot; link if a review has not been submitted yet or an &amp;quot;Edit Review&amp;quot; link if a review has been submitted already. Students can view only the reviews they have performed and the reviews of their work, while instructors/TA's can see all reviews for the assignment. Reviews done by course staff will be marked with a star to distinguish them from students' reviews.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Flow chart.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;br /&gt;
This diagram shows the relevant tables in the existing database. We do not anticipate any changes to the database design.&lt;br /&gt;
&lt;br /&gt;
[[File:Model2picture.png ]]&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
&lt;br /&gt;
* Add an instructor as a participant in the assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click the icon to add participants.&lt;br /&gt;
# Add the instructor as a participant on the assignment.&lt;br /&gt;
&lt;br /&gt;
* Instructor should be able to add a review on an assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click on the View Submissions icon.&lt;br /&gt;
# Verify a list of submissions appears.&lt;br /&gt;
# If the last due date for the assignment has not passed, the “Perform review” link should be visible.&lt;br /&gt;
# Click on the “Perform review” link.&lt;br /&gt;
# Verify submitted work for team is visible.&lt;br /&gt;
# Complete review and click save.&lt;br /&gt;
&lt;br /&gt;
* When an author view their reviews, reviews done by instructors should present a star.&lt;br /&gt;
# After logging in as the student, go to Assignments.&lt;br /&gt;
# Click on the test assignment&lt;br /&gt;
# Click &amp;quot;Your scores&amp;quot;&lt;br /&gt;
# If a review was done by an instructor, verify the star is present.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
We plan on adding comprehensive RSpec tests for all controller and model classes that we changed as well automated UI tests for features we added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133300</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133300"/>
		<updated>2020-04-13T22:18:27Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are two main issues (and a third as an '''extra feature'''):&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
3. Allow the reviewers to see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
===Proposed Solution===&lt;br /&gt;
&lt;br /&gt;
'''Problem 1:'''&lt;br /&gt;
* Check will be done to verify whether the course staff is a participant.&lt;br /&gt;
* In the list_submissions.html.erb file, have a &amp;quot;Perform Review&amp;quot; link present if the due date of the assignment has not passed yet. &lt;br /&gt;
* If a review was already reviewed and the due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; will be present.&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link will only appear after the due date of the assignment has passed.&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot; or &amp;quot;Edit Review&amp;quot; links will take the instructor/TA to the pages governed by response_controller#new and response_controller#edit, respectively.&lt;br /&gt;
* A flag will be placed on the responses done by the course staff.&lt;br /&gt;
&lt;br /&gt;
'''Problem 2:'''&lt;br /&gt;
* A star icon will be used to distinguish whether a review was done by a course staff and will appear below the 'Review #' heading.&lt;br /&gt;
* Addition of helper class identity_helper.rb to handle check to determine whether review was done by course staff based on the boolean flag attached to a response.&lt;br /&gt;
* Change needs to be made in view_team.html.erb such that after verifying that a response was done by a course staff via identity_helper.rb, a star is displayed below the 'Review #' heading.&lt;br /&gt;
&lt;br /&gt;
'''Problem 3:'''&lt;br /&gt;
* As course staff cannot currently review assignments, verification of the extent of functionality for the already existing show_calibration_results_for_student.html.erb needs to be done once the feature for course staff is implemented fully.&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
*views/assignments/list_submissions.html.erb&lt;br /&gt;
*views/reports/calibration_report.html.erb&lt;br /&gt;
*views/response/show_calibration_results_for_student.html.erb&lt;br /&gt;
*views/response/response.html.erb&lt;br /&gt;
*views/grades/view_team.html.erb&lt;br /&gt;
*views/grades/view_my_scores.html.erb&lt;br /&gt;
*controllers/response_controller.rb&lt;br /&gt;
*app/helpers/identity_helper.rb&lt;br /&gt;
&lt;br /&gt;
=='''Flow Chart'''==&lt;br /&gt;
This flow chart demonstrates the desired functionality. While students must submit reviews in the review stage, instructors/TA's can submit reviews any time before the final deadline. In order to submit reviews, the instructor/TA must be added as a participant to the assignment. Then, they will go to &amp;quot;View Submissions&amp;quot; on the Manage Assignments page. If the final deadline for the assignment has passed, they will see an &amp;quot;Assign Grade&amp;quot; link next to each submission. Otherwise, they will see a &amp;quot;Perform Review&amp;quot; link if a review has not been submitted yet or an &amp;quot;Edit Review&amp;quot; link if a review has been submitted already. Students can view only the reviews they have performed and the reviews of their work, while instructors/TA's can see all reviews for the assignment. Reviews done by course staff will be marked with a star to distinguish them from students' reviews.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Flow chart.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;br /&gt;
This diagram shows the relevant tables in the existing database. We do not anticipate any changes to the database design.&lt;br /&gt;
&lt;br /&gt;
[[File:Model2picture.png ]]&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
&lt;br /&gt;
* Add an instructor as a participant in the assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click the icon to add participants.&lt;br /&gt;
# Add the instructor as a participant on the assignment.&lt;br /&gt;
&lt;br /&gt;
* Instructor should be able to add a review on an assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click on the View Submissions icon.&lt;br /&gt;
# Verify a list of submissions appears.&lt;br /&gt;
# If the last due date for the assignment has not passed, the “Perform review” link should be visible.&lt;br /&gt;
# Click on the “Perform review” link.&lt;br /&gt;
# Verify submitted work for team is visible.&lt;br /&gt;
# Complete review and click save.&lt;br /&gt;
&lt;br /&gt;
* When an author view their reviews, reviews done by instructors should present a star.&lt;br /&gt;
# After logging in as the student, go to Assignments.&lt;br /&gt;
# Click on the test assignment&lt;br /&gt;
# Click &amp;quot;Your scores&amp;quot;&lt;br /&gt;
# If a review was done by an instructor, verify the star is present.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
We plan on adding comprehensive RSpec tests for all controller and model classes that we changed as well automated UI tests for features we added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133292</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133292"/>
		<updated>2020-04-13T22:07:52Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are two main issues (and a third as an '''extra feature'''):&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
3. Allow the reviewers to see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
===Proposed Solution===&lt;br /&gt;
&lt;br /&gt;
'''Problem 1:'''&lt;br /&gt;
* Check should be done to verify whether the course staff is a participant.&lt;br /&gt;
* In the list_submissions.html.erb file, have a &amp;quot;Perform Review&amp;quot; link present if the due date of the assignment has not passed yet. &lt;br /&gt;
* If a review was already reviewed and the due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; should be present.&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link should only appear after the due date of the assignment has passed.&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot; or &amp;quot;Edit Review&amp;quot; links should take the instructor/TA to the pages governed by response_controller#new and response_controller#edit, respectively.&lt;br /&gt;
* A flag should be placed on the responses done by the course staff.&lt;br /&gt;
&lt;br /&gt;
'''Problem 2:'''&lt;br /&gt;
* A star icon will be used to distinguish whether a review was done by a course staff and will appear below the 'Review #' heading.&lt;br /&gt;
* Addition of helper class identity_helper.rb to handle check to determine whether review was done by course staff based on the boolean flag attached to a response.&lt;br /&gt;
* Change needs to be made in view_team.html.erb such that after verifying that a response was done by a course staff via identity_helper.rb, a star is displayed below the 'Review #' heading.&lt;br /&gt;
&lt;br /&gt;
'''Problem 3:'''&lt;br /&gt;
* As course staff cannot currently review assignments, verification of the extent of functionality for the already existing show_calibration_results_for_student.html.erb needs to be done once the feature for course staff is implemented fully.&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
*views/assignments/list_submissions.html.erb&lt;br /&gt;
*views/reports/calibration_report.html.erb&lt;br /&gt;
*views/response/show_calibration_results_for_student.html.erb&lt;br /&gt;
*views/response/response.html.erb&lt;br /&gt;
*views/grades/view_team.html.erb&lt;br /&gt;
*views/grades/view_my_scores.html.erb&lt;br /&gt;
*controllers/response_controller.rb&lt;br /&gt;
*app/helpers/identity_helper.rb&lt;br /&gt;
&lt;br /&gt;
=='''Flow Chart'''==&lt;br /&gt;
This flow chart demonstrates the desired functionality. While students must submit reviews in the review stage, instructors/TA's can submit reviews any time before the final deadline. In order to submit reviews, the instructor/TA must be added as a participant to the assignment. Then, they will go to &amp;quot;View Submissions&amp;quot; on the Manage Assignments page. If the final deadline for the assignment has passed, they will see an &amp;quot;Assign Grade&amp;quot; link next to each submission. Otherwise, they will see a &amp;quot;Perform Review&amp;quot; link if a review has not been submitted yet or an &amp;quot;Edit Review&amp;quot; link if a review has been submitted already. Students can view only the reviews they have performed and the reviews of their work, while instructors/TA's can see all reviews for the assignment. Reviews done by course staff will be marked with a star to distinguish them from students' reviews.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Flow chart.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;br /&gt;
This diagram shows the relevant tables in the existing database. We do not anticipate any changes to the database design.&lt;br /&gt;
&lt;br /&gt;
[[File:Model2picture.png ]]&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
&lt;br /&gt;
* Add an instructor as a participant in the assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click the icon to add participants.&lt;br /&gt;
# Add the instructor as a participant on the assignment.&lt;br /&gt;
&lt;br /&gt;
* Instructor should be able to add a review on an assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click on the View Submissions icon.&lt;br /&gt;
# Verify a list of submissions appears.&lt;br /&gt;
# If the last due date for the assignment has not passed, the “Perform review” link should be visible.&lt;br /&gt;
# Click on the “Perform review” link.&lt;br /&gt;
# Verify submitted work for team is visible.&lt;br /&gt;
# Complete review and click save.&lt;br /&gt;
&lt;br /&gt;
* When an author view their reviews, reviews done by instructors should present a star.&lt;br /&gt;
# After logging in as the student, go to Assignments.&lt;br /&gt;
# Click on the test assignment&lt;br /&gt;
# Click &amp;quot;Your scores&amp;quot;&lt;br /&gt;
# If a review was done by an instructor, verify the star is present.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
We plan on adding comprehensive RSpec tests for all controller and model classes that we changed as well automated UI tests for features we added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133291</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133291"/>
		<updated>2020-04-13T22:05:44Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: /* Proposed Solution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are two main issues (and a third as an '''extra feature'''):&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
3. Allow the reviewers to see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
===Proposed Solution===&lt;br /&gt;
&lt;br /&gt;
'''Problem 1:'''&lt;br /&gt;
* Check should be done to verify whether the course staff is a participant.&lt;br /&gt;
* In the list_submissions.html.erb file, have a &amp;quot;Perform Review&amp;quot; link present if the due date of the assignment has not passed yet. &lt;br /&gt;
* If a review was already reviewed and the due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; should be present.&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link should only appear after the due date of the assignment has passed.&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot; or &amp;quot;Edit Review&amp;quot; links should take the instructor/TA to the pages governed by response_controller#new and response_controller#edit, respectively.&lt;br /&gt;
* A flag should be placed on the responses done by the course staff.&lt;br /&gt;
&lt;br /&gt;
'''Problem 2:'''&lt;br /&gt;
* A star icon will be used to distinguish whether a review was done by a course staff and will appear below the 'Review #' heading.&lt;br /&gt;
* Addition of helper class identity_helper.rb to handle check to determine whether review was done by course staff based on the boolean flag attached to a response.&lt;br /&gt;
* Change needs to be made in view_team.html.erb such that after verifying that a response was done by a course staff via identity_helper.rb, a star is displayed below the 'Review #' heading.&lt;br /&gt;
&lt;br /&gt;
'''Problem 3:'''&lt;br /&gt;
* As course staff cannot currently review assignments, verification of the extent of functionality for the already existing show_calibration_results_for_student.html.erb needs to be done once the feature for course staff is implemented fully.&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
*views/assignments/list_submissions.html.erb&lt;br /&gt;
*views/reports/calibration_report.html.erb&lt;br /&gt;
*views/response/response.html.erb&lt;br /&gt;
*views/grades/view_team.html.erb&lt;br /&gt;
*views/grades/view_my_scores.html.erb&lt;br /&gt;
*controllers/response_controller.rb&lt;br /&gt;
&lt;br /&gt;
=='''Flow Chart'''==&lt;br /&gt;
This flow chart demonstrates the desired functionality. While students must submit reviews in the review stage, instructors/TA's can submit reviews any time before the final deadline. In order to submit reviews, the instructor/TA must be added as a participant to the assignment. Then, they will go to &amp;quot;View Submissions&amp;quot; on the Manage Assignments page. If the final deadline for the assignment has passed, they will see an &amp;quot;Assign Grade&amp;quot; link next to each submission. Otherwise, they will see a &amp;quot;Perform Review&amp;quot; link if a review has not been submitted yet or an &amp;quot;Edit Review&amp;quot; link if a review has been submitted already. Students can view only the reviews they have performed and the reviews of their work, while instructors/TA's can see all reviews for the assignment. Reviews done by course staff will be marked with a star to distinguish them from students' reviews.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Flow chart.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;br /&gt;
This diagram shows the relevant tables in the existing database. We do not anticipate any changes to the database design.&lt;br /&gt;
&lt;br /&gt;
[[File:Model2picture.png ]]&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
&lt;br /&gt;
* Add an instructor as a participant in the assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click the icon to add participants.&lt;br /&gt;
# Add the instructor as a participant on the assignment.&lt;br /&gt;
&lt;br /&gt;
* Instructor should be able to add a review on an assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click on the View Submissions icon.&lt;br /&gt;
# Verify a list of submissions appears.&lt;br /&gt;
# If the last due date for the assignment has not passed, the “Perform review” link should be visible.&lt;br /&gt;
# Click on the “Perform review” link.&lt;br /&gt;
# Verify submitted work for team is visible.&lt;br /&gt;
# Complete review and click save.&lt;br /&gt;
&lt;br /&gt;
* When an author view their reviews, reviews done by instructors should present a star.&lt;br /&gt;
# After logging in as the student, go to Assignments.&lt;br /&gt;
# Click on the test assignment&lt;br /&gt;
# Click &amp;quot;Your scores&amp;quot;&lt;br /&gt;
# If a review was done by an instructor, verify the star is present.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
We plan on adding comprehensive RSpec tests for all controller and model classes that we changed as well automated UI tests for features we added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133033</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133033"/>
		<updated>2020-04-08T20:07:41Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: /* Flow Chart */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are two main issues (and a third as an '''extra feature'''):&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
3. Allow the reviewers to see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
===Proposed Solution===&lt;br /&gt;
&lt;br /&gt;
'''Problem 1:'''&lt;br /&gt;
* Check should be done to verify whether the course staff is a participant.&lt;br /&gt;
* In the list_submissions.html.erb file, have a &amp;quot;Perform Review&amp;quot; link present if the due date of the assignment has not passed yet. &lt;br /&gt;
* If a review was already reviewed and the due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; should be present.&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link should only appear after the due date of the assignment has passed.&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot; or &amp;quot;Edit Review&amp;quot; links should take the instructor/TA to the pages governed by response_controller#new and response_controller#edit, respectively.&lt;br /&gt;
* A flag should be placed on the response done by the course staff.&lt;br /&gt;
&lt;br /&gt;
'''Problem 2:'''&lt;br /&gt;
* A star icon will be used to distinguish whether a review was done by a course staff and will appear below the 'Review #' heading.&lt;br /&gt;
* Change needs to be made in view_team.html.erb such that after verifying that a response is flagged as done by a course staff, a star is displayed below the 'Review #' heading.&lt;br /&gt;
&lt;br /&gt;
'''Problem 3:'''&lt;br /&gt;
* As course staff cannot currently review assignments, verification of the extent of functionality for show_calibration_results_for_student.html.erb needs to be done once the feature for course staff is implemented fully.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
*views/assignments/list_submissions.html.erb&lt;br /&gt;
*views/reports/calibration_report.html.erb&lt;br /&gt;
*views/response/response.html.erb&lt;br /&gt;
*views/grades/view_team.html.erb&lt;br /&gt;
*views/grades/view_my_scores.html.erb&lt;br /&gt;
*controllers/response_controller.rb&lt;br /&gt;
&lt;br /&gt;
=='''Flow Chart'''==&lt;br /&gt;
This flow chart demonstrates the desired functionality. While students must submit reviews in the review stage, instructors/TA's can submit reviews any time before the final deadline. In order to submit reviews, the instructor/TA must be added as a participant to the assignment. Then, they will go to &amp;quot;View Submissions&amp;quot; on the Manage Assignments page. If the final deadline for the assignment has passed, they will see an &amp;quot;Assign Grade&amp;quot; link next to each submission. Otherwise, they will see a &amp;quot;Perform Review&amp;quot; link if a review has not been submitted yet or an &amp;quot;Edit Review&amp;quot; link if a review has been submitted already. Students can view only the reviews they have performed and the reviews of their work, while instructors/TA's can see all reviews for the assignment. Reviews done by course staff will be marked with a star to distinguish them from students' reviews.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Flow chart.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;br /&gt;
This diagram shows the relevant tables in the existing database. We do not anticipate any changes to the database design.&lt;br /&gt;
&lt;br /&gt;
[[File:Model2picture.png ]]&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
&lt;br /&gt;
* Add an instructor as a participant in the assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click the icon to add participants.&lt;br /&gt;
# Add the instructor as a participant on the assignment.&lt;br /&gt;
&lt;br /&gt;
* Instructor should be able to add a review on an assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click on the View Submissions icon.&lt;br /&gt;
# Verify a list of submissions appears.&lt;br /&gt;
# If the last due date for the assignment has not passed, the “Perform review” link should be visible.&lt;br /&gt;
# Click on the “Perform review” link.&lt;br /&gt;
# Verify submitted work for team is visible.&lt;br /&gt;
# Complete review and click save.&lt;br /&gt;
&lt;br /&gt;
* When an author view their reviews, reviews done by instructors should present a star.&lt;br /&gt;
# After logging in as the student, go to Assignments.&lt;br /&gt;
# Click on the test assignment&lt;br /&gt;
# Click &amp;quot;Your scores&amp;quot;&lt;br /&gt;
# If a review was done by an instructor, verify the star is present.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
We plan on adding comprehensive RSpec tests for all controller and model classes that we changed as well automated UI tests for features we added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133032</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133032"/>
		<updated>2020-04-08T20:07:12Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are two main issues (and a third as an '''extra feature'''):&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
3. Allow the reviewers to see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
===Proposed Solution===&lt;br /&gt;
&lt;br /&gt;
'''Problem 1:'''&lt;br /&gt;
* Check should be done to verify whether the course staff is a participant.&lt;br /&gt;
* In the list_submissions.html.erb file, have a &amp;quot;Perform Review&amp;quot; link present if the due date of the assignment has not passed yet. &lt;br /&gt;
* If a review was already reviewed and the due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; should be present.&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link should only appear after the due date of the assignment has passed.&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot; or &amp;quot;Edit Review&amp;quot; links should take the instructor/TA to the pages governed by response_controller#new and response_controller#edit, respectively.&lt;br /&gt;
* A flag should be placed on the response done by the course staff.&lt;br /&gt;
&lt;br /&gt;
'''Problem 2:'''&lt;br /&gt;
* A star icon will be used to distinguish whether a review was done by a course staff and will appear below the 'Review #' heading.&lt;br /&gt;
* Change needs to be made in view_team.html.erb such that after verifying that a response is flagged as done by a course staff, a star is displayed below the 'Review #' heading.&lt;br /&gt;
&lt;br /&gt;
'''Problem 3:'''&lt;br /&gt;
* As course staff cannot currently review assignments, verification of the extent of functionality for show_calibration_results_for_student.html.erb needs to be done once the feature for course staff is implemented fully.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
*views/assignments/list_submissions.html.erb&lt;br /&gt;
*views/reports/calibration_report.html.erb&lt;br /&gt;
*views/response/response.html.erb&lt;br /&gt;
*views/grades/view_team.html.erb&lt;br /&gt;
*views/grades/view_my_scores.html.erb&lt;br /&gt;
*controllers/response_controller.rb&lt;br /&gt;
&lt;br /&gt;
=='''Flow Chart'''==&lt;br /&gt;
This flow chart demonstrates the desired functionality. While students must submit reviews in the review stage, instructors/TA's can submit reviews any time before the final deadline. In order to submit reviews, the instructor/TA must be added as a participant to the assignment. Then, they will go to &amp;quot;View Submissions&amp;quot; on the Manage Assignments page. If the final deadline for the assignment has passed, they will see an &amp;quot;Assign Grade&amp;quot; link next to each submission. Otherwise, they will see a &amp;quot;Perform Review&amp;quot; link if a review has not been submitted yet or an &amp;quot;Edit Review&amp;quot; link if a review. Students can view only the reviews they have performed and the reviews of their work, while instructors/TA's can see all reviews for the assignment. Reviews done by course staff will be marked with a star to distinguish them from students' reviews.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Flow chart.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;br /&gt;
This diagram shows the relevant tables in the existing database. We do not anticipate any changes to the database design.&lt;br /&gt;
&lt;br /&gt;
[[File:Model2picture.png ]]&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
&lt;br /&gt;
* Add an instructor as a participant in the assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click the icon to add participants.&lt;br /&gt;
# Add the instructor as a participant on the assignment.&lt;br /&gt;
&lt;br /&gt;
* Instructor should be able to add a review on an assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click on the View Submissions icon.&lt;br /&gt;
# Verify a list of submissions appears.&lt;br /&gt;
# If the last due date for the assignment has not passed, the “Perform review” link should be visible.&lt;br /&gt;
# Click on the “Perform review” link.&lt;br /&gt;
# Verify submitted work for team is visible.&lt;br /&gt;
# Complete review and click save.&lt;br /&gt;
&lt;br /&gt;
* When an author view their reviews, reviews done by instructors should present a star.&lt;br /&gt;
# After logging in as the student, go to Assignments.&lt;br /&gt;
# Click on the test assignment&lt;br /&gt;
# Click &amp;quot;Your scores&amp;quot;&lt;br /&gt;
# If a review was done by an instructor, verify the star is present.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
We plan on adding comprehensive RSpec tests for all controller and model classes that we changed as well automated UI tests for features we added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133031</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=133031"/>
		<updated>2020-04-08T20:06:39Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: /* Flow Chart */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are two main issues (and a third as an '''extra feature'''):&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
3. Allow the reviewers to see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
===Proposed Solution===&lt;br /&gt;
&lt;br /&gt;
'''Problem 1:'''&lt;br /&gt;
* Check should be done to verify whether the course staff is a participant.&lt;br /&gt;
* In the list_submissions.html.erb file, have a &amp;quot;Perform Review&amp;quot; link present if the due date of the assignment has not passed yet. &lt;br /&gt;
* If a review was already reviewed and the due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; should be present.&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link should only appear after the due date of the assignment has passed.&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot; or &amp;quot;Edit Reviews&amp;quot; links should take the instructor/TA to the pages governed by response_controller#new and response_controller#edit, respectively.&lt;br /&gt;
* A flag should be placed on the response done by the course staff.&lt;br /&gt;
&lt;br /&gt;
'''Problem 2:'''&lt;br /&gt;
* A star icon will be used to distinguish whether a review was done by a course staff and will appear below the 'Review #' heading.&lt;br /&gt;
* Change needs to be made in view_team.html.erb such that after verifying that a response is flagged as done by a course staff, a star is displayed below the 'Review #' heading.&lt;br /&gt;
&lt;br /&gt;
'''Problem 3:'''&lt;br /&gt;
* As course staff cannot currently review assignments, verification of the extent of functionality for show_calibration_results_for_student.html.erb needs to be done once the feature for course staff is implemented fully.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
*views/assignments/list_submissions.html.erb&lt;br /&gt;
*views/reports/calibration_report.html.erb&lt;br /&gt;
*views/response/response.html.erb&lt;br /&gt;
*views/grades/view_team.html.erb&lt;br /&gt;
*views/grades/view_my_scores.html.erb&lt;br /&gt;
*controllers/response_controller.rb&lt;br /&gt;
&lt;br /&gt;
=='''Flow Chart'''==&lt;br /&gt;
This flow chart demonstrates the desired functionality. While students must submit reviews in the review stage, instructors/TA's can submit reviews any time before the final deadline. In order to submit reviews, the instructor/TA must be added as a participant to the assignment. Then, they will go to &amp;quot;View Submissions&amp;quot; on the Manage Assignments page. If the final deadline for the assignment has passed, they will see an &amp;quot;Assign Grade&amp;quot; link next to each submission. Otherwise, they will see a &amp;quot;Perform Review&amp;quot; link if a review has not been submitted yet or an &amp;quot;Edit Review&amp;quot; link if a review. Students can view only the reviews they have performed and the reviews of their work, while instructors/TA's can see all reviews for the assignment. Reviews done by course staff will be marked with a star to distinguish them from students' reviews.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Flow chart.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;br /&gt;
This diagram shows the relevant tables in the existing database. We do not anticipate any changes to the database design.&lt;br /&gt;
&lt;br /&gt;
[[File:Model2picture.png ]]&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
&lt;br /&gt;
* Add an instructor as a participant in the assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click the icon to add participants.&lt;br /&gt;
# Add the instructor as a participant on the assignment.&lt;br /&gt;
&lt;br /&gt;
* Instructor should be able to add a review on an assignment.&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Find the test assignment and click on the View Submissions icon.&lt;br /&gt;
# Verify a list of submissions appears.&lt;br /&gt;
# If the last due date for the assignment has not passed, the “Perform review” link should be visible.&lt;br /&gt;
# Click on the “Perform review” link.&lt;br /&gt;
# Verify submitted work for team is visible.&lt;br /&gt;
# Complete review and click save.&lt;br /&gt;
&lt;br /&gt;
* When an author view their reviews, reviews done by instructors should present a star.&lt;br /&gt;
# After logging in as the student, go to Assignments.&lt;br /&gt;
# Click on the test assignment&lt;br /&gt;
# Click &amp;quot;Your scores&amp;quot;&lt;br /&gt;
# If a review was done by an instructor, verify the star is present.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
We plan on adding comprehensive RSpec tests for all controller and model classes that we changed as well automated UI tests for features we added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=132831</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=132831"/>
		<updated>2020-04-07T22:01:19Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: /* Proposed Solution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The solutions will revolve around solving two main issues (and a third as an '''extra feature'''):&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
3. Allow the reviewers to see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
===Proposed Solution===&lt;br /&gt;
&lt;br /&gt;
'''Problem 1:'''&lt;br /&gt;
* Check should be done to verify whether the course staff is a participant.&lt;br /&gt;
* In the list_submissions.html.erb file, have a &amp;quot;Perform Review&amp;quot; link present if the due date of the assignment has not passed yet. &lt;br /&gt;
* If a review was already reviewed and the due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; should be present.&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link should only appear after the due date of the assignment has passed.&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot; or &amp;quot;Edit Reviews&amp;quot; links should take the instructor/TA to the pages governed by response_controller#new and response_controller#edit, respectively.&lt;br /&gt;
* A flag should be placed on the response done by the course staff.&lt;br /&gt;
&lt;br /&gt;
'''Problem 2:'''&lt;br /&gt;
* A star icon will be used to distinguish whether a review was done by a course staff and will appear below the 'Review #' heading.&lt;br /&gt;
* Change needs to be made in view_team.html.erb such that after verifying that a response is flagged as done by a course staff, a star is displayed below the 'Review #' heading.&lt;br /&gt;
&lt;br /&gt;
'''Problem 3:'''&lt;br /&gt;
* As course staff cannot currently review assignments, verification of the extent of functionality for show_calibration_results_for_student.html.erb needs to be done once the feature for course staff is implemented fully.&lt;br /&gt;
&lt;br /&gt;
=='''Use Case Diagram'''==&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=132829</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=132829"/>
		<updated>2020-04-07T21:58:29Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The solutions will revolve around solving two main issues (and a third as an '''extra feature'''):&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
3. Allow the reviewers to see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
===Proposed Solution===&lt;br /&gt;
&lt;br /&gt;
'''Problem 1:'''&lt;br /&gt;
* Check should be done to verify whether the course staff is a participant.&lt;br /&gt;
* In the list_submissions.html.erb file, have a &amp;quot;Perform Review&amp;quot; link present if the due date of the assignment has not passed yet. &lt;br /&gt;
* If a review was already reviewed and the due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; should be present.&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link should only appear after the due date of the assignment has passed.&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot; or &amp;quot;Edit Reviews&amp;quot; links should take the instructor/TA to the pages governed by response_controller#new and response_controller#edit, respectively.&lt;br /&gt;
* A flag should be placed on the response done by the course staff.&lt;br /&gt;
&lt;br /&gt;
'''Problem 2:'''&lt;br /&gt;
* A star icon will be used to distinguish whether a review was done by a course staff and will appear below the 'Review #' heading.&lt;br /&gt;
* Change needs to be made in view_team.html.erb such that after verifying that a response is flagged as done by a course staff, a star is displayed below the 'Review #' heading.&lt;br /&gt;
&lt;br /&gt;
'''Problem 3:'''&lt;br /&gt;
* As course staff cannot currently review assignments, verification of the extent of functionality for show_calibration_results_for_student.html.erb needs to be done once the feature is implemented fully.&lt;br /&gt;
&lt;br /&gt;
=='''Use Case Diagram'''==&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=132827</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=132827"/>
		<updated>2020-04-07T21:56:25Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The solutions will revolve around solving two main issues (and a third as an '''extra feature'''):&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
3. Allow the reviewers to see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
===Proposed Solution===&lt;br /&gt;
&lt;br /&gt;
'''Problem 1:'''&lt;br /&gt;
* In the list_submissions.html.erb file, have a &amp;quot;Perform Review&amp;quot; link present if the due date of the assignment has not passed yet. &lt;br /&gt;
* If a review was already reviewed and the due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; should be present.&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link should only appear after the due date of the assignment has passed.&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot; or &amp;quot;Edit Reviews&amp;quot; links should take the instructor/TA to the pages governed by response_controller#new and response_controller#edit, respectively. Since course staff will be registered as participants, no additional changes to the existing action_allowed? checks are necessary. However, a flag should be placed on the response done by the course staff.&lt;br /&gt;
'''Problem 2:'''&lt;br /&gt;
* A star icon will be used to distinguish whether a review was done by a course staff and will appear below the 'Review #' heading.&lt;br /&gt;
* Change needs to be made in view_team.html.erb such that after verifying that a response is flagged as done by a course staff, a star is displayed below the 'Review #' heading.&lt;br /&gt;
&lt;br /&gt;
'''Problem 3:'''&lt;br /&gt;
* As course staff cannot currently review assignments, verification of the extent of functionality for show_calibration_results_for_student.html.erb needs to be done once the feature is implemented fully.&lt;br /&gt;
&lt;br /&gt;
=='''Use Case Diagram'''==&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=132826</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=132826"/>
		<updated>2020-04-07T21:55:17Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The solutions will revolve around solving two main issues (and a third as an '''extra feature'''):&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
3. Allow the reviewers to see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
===Proposed Solution===&lt;br /&gt;
&lt;br /&gt;
'''Problem 1:'''&lt;br /&gt;
* In the list_submissions.html.erb file, have a &amp;quot;Perform Review&amp;quot; link present if the due date of the assignment has not passed yet. &lt;br /&gt;
* If a review was already reviewed and the due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; should be present.&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link should only appear after the due date of the assignment has passed.&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot; or &amp;quot;Edit Reviews&amp;quot; links should take the instructor/TA to the pages governed by response_controller#new and response_controller#edit, respectively. Since course staff will be registered as participants, no additional changes to the existing action_allowed? checks are necessary. However, a flag should be placed on the response done by the course staff.&lt;br /&gt;
'''Problem 2:'''&lt;br /&gt;
* A star icon will be used to distinguish whether a review was done by a course staff and will appear below the 'Review #' heading.&lt;br /&gt;
* Change needs to be made in view_team.html.erb such that after verifying that a response is flagged as done by a course staff, a star is displayed below the 'Review #' heading.&lt;br /&gt;
&lt;br /&gt;
'''Problem 3:'''&lt;br /&gt;
* As course staff cannot currently review assignments, verification of the extent of functionality for show_calibration_results_for_student.html.erb needs to be done once the feature is implemented fully.&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=132825</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=132825"/>
		<updated>2020-04-07T21:50:35Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The solutions will revolve around solving two main issues (and a third as an '''extra feature'''):&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
3. Allow the reviewers to see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
===Proposed Solution===&lt;br /&gt;
&lt;br /&gt;
'''Problem 1:'''&lt;br /&gt;
* In the list_submissions.html.erb file, have a &amp;quot;Perform Review&amp;quot; link present if the due date of the assignment has not passed yet. &lt;br /&gt;
* If a review was already reviewed and the due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; should be present.&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link should only appear after the due date of the assignment has passed.&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot; or &amp;quot;Edit Reviews&amp;quot; links should take the instructor/TA to the pages governed by response_controller#new and response_controller#edit, respectively. Since course staff will be registered as participants, no additional changes to the existing action_allowed? checks are necessary. However, a flag should be placed on the response done by the course staff.&lt;br /&gt;
'''Problem 2:'''&lt;br /&gt;
* A star icon will be used to distinguish whether a review was done by a course staff and will appear below the 'Review #' heading.&lt;br /&gt;
* Change needs to be made in view_team.html.erb such that after verifying that a response is flagged as done by a course staff, a star is displayed below the 'Review #' heading.&lt;br /&gt;
&lt;br /&gt;
'''Problem 3:'''&lt;br /&gt;
* As course staff cannot currently review assignments, verification of the extent of functionality for show_calibration_results_for_student.html.erb needs to be done once the feature is implemented fully.&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=132824</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=132824"/>
		<updated>2020-04-07T21:45:17Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: /* Proposed Solution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The solutions will revolve around solving two main issues (and a third as an extra feature):&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
3. Allow the reviewers to see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
===Proposed Solution===&lt;br /&gt;
&lt;br /&gt;
'''Problem 1:'''&lt;br /&gt;
* In the list_submissions.html.erb file, have a &amp;quot;Perform Review&amp;quot; link present if the due date of the assignment has not passed yet. &lt;br /&gt;
* If a review was already reviewed and the due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; should be present.&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link should only appear after the due date of the assignment has passed.&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot; or &amp;quot;Edit Reviews&amp;quot; links should take the instructor/TA to the pages governed by response_controller#new and response_controller#edit, respectively. Since course staff will be registered as participants, no additional changes to the existing action_allowed? checks are necessary. However, a flag should be placed on the response done by the course staff.&lt;br /&gt;
'''Problem 2:'''&lt;br /&gt;
* A star icon will be used to distinguish whether a review was done by a course staff and will appear below the 'Review #' heading.&lt;br /&gt;
* Change needs to be made in view_team.html.erb such that after verifying that a response is flagged as done by a course staff, a star is displayed below the 'Review #' heading.&lt;br /&gt;
&lt;br /&gt;
'''Problem 3:'''&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=132823</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=132823"/>
		<updated>2020-04-07T21:43:42Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: /* Proposed Solution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The solutions will revolve around solving two main issues (and a third as an extra feature):&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
3. Allow the reviewers to see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
===Proposed Solution===&lt;br /&gt;
&lt;br /&gt;
'''Problem 1:'''&lt;br /&gt;
* In the list_submissions.html.erb file, have a &amp;quot;Perform Review&amp;quot; link conditional to the due date of the assignment. &lt;br /&gt;
* If a review was already reviewed and the due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; should be present.&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link should only appear after the due date of the assignment has passed.&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot; or &amp;quot;Edit Reviews&amp;quot; links should take the instructor/TA to the pages governed by response_controller#new and response_controller#edit, respectively. Since course staff will be registered as participants, no additional changes to the existing action_allowed? checks are necessary. However, a flag should be placed on the response done by the course staff.&lt;br /&gt;
'''Problem 2:'''&lt;br /&gt;
* A star icon will be used to distinguish whether a review was done by a course staff and will appear below the 'Review #' heading.&lt;br /&gt;
* Change needs to be made in view_team.html.erb such that after verifying that a response is flagged as done by a course staff, a star is displayed below the 'Review #' heading.&lt;br /&gt;
&lt;br /&gt;
'''Problem 3:'''&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=132821</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=132821"/>
		<updated>2020-04-07T21:29:27Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: /* Proposed Solution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The solutions will revolve around solving two main issues (and a third as an extra feature):&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
3. Allow the reviewers to see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
===Proposed Solution===&lt;br /&gt;
&lt;br /&gt;
'''Problem 1:'''&lt;br /&gt;
* In the list_submissions.html.erb file, have a &amp;quot;Perform Review&amp;quot; link conditional to the due date of the assignment. &lt;br /&gt;
* If a review was already reviewed and the due date of the assignment has not passed, then a link to &amp;quot;Edit Review&amp;quot; should be present.&lt;br /&gt;
* The already present &amp;quot;Assign Grade&amp;quot; link should only appear after the due date of the assignment has passed.&lt;br /&gt;
* Clicking on the &amp;quot;Perform Review&amp;quot; or &amp;quot;Edit Reviews&amp;quot; links should take the instructor/TA to the pages governed by response_controller#new and response_controller#edit, respectively.&lt;br /&gt;
'''Problem 2:'''&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
'''Problem 3:'''&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=132815</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=132815"/>
		<updated>2020-04-07T21:04:54Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner. As an added feature, reviewers should see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The solutions will revolve around solving two main issues (and a third as an extra feature):&lt;br /&gt;
&lt;br /&gt;
1. Allow the instructor and teaching assistants to review teams that have submitted assignments.&lt;br /&gt;
&lt;br /&gt;
2. Allow authors to visually identify reviews done by the course staff.&lt;br /&gt;
&lt;br /&gt;
3. Allow the reviewers to see how their reviews differ from those done by the course staff.&lt;br /&gt;
&lt;br /&gt;
===Proposed Solution===&lt;br /&gt;
&lt;br /&gt;
'''Problem 1:'''&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
'''Problem 2:'''&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
'''Problem 3:'''&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=132683</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=132683"/>
		<updated>2020-04-06T22:16:13Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===Purpose and Problem===&lt;br /&gt;
The purpose of this project is to allow instructors or teaching assistants who are participants of an assignment to be able to review (before the last due date of the specific assignment) any team that has submitted the assignment. Beyond this general endeavor, there is also the condition that team members of the assignment should be able to view reviews done by the course staff that can be identified in an aesthetically pleasing manner.&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
===Proposed Solution===&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=132682</id>
		<title>CSC/ECE 517 Spring 2020/E2020 Let course staff as well as students do reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020/E2020_Let_course_staff_as_well_as_students_do_reviews&amp;diff=132682"/>
		<updated>2020-04-06T21:13:54Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: Created page with &amp;quot;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;b&amp;gt;E2020. Let course staff as well as students do reviews&amp;lt;/b&amp;gt;==&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2005._Bookmark_enhancements&amp;diff=132171</id>
		<title>CSC/ECE 517 Spring 2020 - E2005. Bookmark enhancements</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2005._Bookmark_enhancements&amp;diff=132171"/>
		<updated>2020-03-29T19:32:11Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: /* Code Modifications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==&amp;lt;b&amp;gt;E2005. Bookmark Enhancements&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open-source project that is built using the [http://rubyonrails.org/ Ruby on Rails] framework. At its core, it is a highly versatile tool that academic institutions can use to craft learning objectives centered around team projects, peer reviews, and highly-customizable assignments.&lt;br /&gt;
&lt;br /&gt;
=='''Problem Statement'''==&lt;br /&gt;
The purpose of this project was to add meaningful enhancements and fixes to the bookmark feature in Expertiza, entities that can be attached to a topic to aid the authors who decide to take on a certain assignment. While the major functionality of the bookmark feature was already present by the time the team embarked on this project (most notably the ability to create/edit and rate bookmarks), many desired functions were conveniently broken or left out.&lt;br /&gt;
&lt;br /&gt;
===Completed Stories===&lt;br /&gt;
Below is a breakdown of the stories that were drawn up and completed for this project:&lt;br /&gt;
&lt;br /&gt;
1. Need a way to view all responses to the bookmark questionnaires.&lt;br /&gt;
&lt;br /&gt;
2. Modify permissions for deleting bookmarks.The person who creates the bookmark, the team for whom the bookmark is meant, and the instructor, should be able to delete.&lt;br /&gt;
&lt;br /&gt;
3. &amp;quot;View bookmarks&amp;quot; link on student_task/view breaks if the student has not selected a topic yet.&lt;br /&gt;
&lt;br /&gt;
4. Bookmark rating questionnaire should include question asking the reviewer whether or not the bookmark appears to have been used by the author. Get the bookmark questionnaire functioning and add to the bookmark list page.&lt;br /&gt;
&lt;br /&gt;
5. Fix issue in which users should not be able to review their own bookmark using the questionnaire, but currently can.&lt;br /&gt;
&lt;br /&gt;
6. Add a number next to/inside the icon with the number of current bookmark in order to make it clear whether a bookmark exists for a topic.&lt;br /&gt;
&lt;br /&gt;
7. Add a &amp;quot;View bookmarks&amp;quot; link to the assignment view page for easier access.&lt;br /&gt;
&lt;br /&gt;
8. Add rating to the bookmark questionnaire and use that rating to calculate the average instead of using the current dropdown.&lt;br /&gt;
&lt;br /&gt;
9. A student should not be able to rate his/her own bookmark.&lt;br /&gt;
&lt;br /&gt;
10. Add URL to bookmark list for assignment topic on the assignment page, to make viewing bookmarks easier.&lt;br /&gt;
&lt;br /&gt;
11. Instructors cannot currently see bookmarks (gets an error message saying instructors cannot create bookmarks). &lt;br /&gt;
&lt;br /&gt;
12. &amp;quot;Back&amp;quot; button from Bookmarks list is broken.&lt;br /&gt;
&lt;br /&gt;
13. When creating a bookmark with an empty description field, the notice says the bookmark was successfully created even though it fails.&lt;br /&gt;
&lt;br /&gt;
14. &amp;quot;Bookmark ratings&amp;quot; should be a type of rubric when you go to Manage &amp;gt; Questionnaires. Although 'Bookmark Rating' is already a type of rubric, it isn't listed when hovering over Manage... &amp;gt; Questionnaires &lt;br /&gt;
&lt;br /&gt;
15. Create a way to mark a bookmark that was rated to be helpful by all reviewers, on average. &lt;br /&gt;
&lt;br /&gt;
16. Students can add/view bookmarks when &amp;quot;Allow participants to create bookmarks?&amp;quot; box is unchecked for the assignment.&lt;br /&gt;
&lt;br /&gt;
=='''Code Modifications'''==&lt;br /&gt;
&lt;br /&gt;
'''Fix the &amp;quot;Back&amp;quot; button:'''&lt;br /&gt;
When either backing out of creating or viewing/editing a bookmark, the back functionality does not work, both prompting errors. Issue has been fixed and users can once again go back to the appropriate page.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;%= link_to 'Back', '#', :onclick =&amp;gt; 'pageBack()' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    function pageBack() {&lt;br /&gt;
  	history.back()&lt;br /&gt;
    }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/new.html.erb &lt;br /&gt;
    &amp;lt;%= link_to 'Back', '#', :onclick =&amp;gt; 'pageBack()' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    function pageBack() {&lt;br /&gt;
  	history.back()&lt;br /&gt;
    }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/edit.html.erb&lt;br /&gt;
    &amp;lt;%= link_to 'Back', '#', :onclick =&amp;gt; 'pageBack()' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    function pageBack() {&lt;br /&gt;
  	history.back()&lt;br /&gt;
    }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/2?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Commit for &amp;quot;Back&amp;quot; capability when updating bookmark can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/4?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Check whether text field is present when creating/updating bookmark:'''&lt;br /&gt;
Previously, when a bookmark was created/updated and the corresponding &amp;quot;Title&amp;quot;, &amp;quot;URL&amp;quot;, or &amp;quot;Description&amp;quot; text fields were not filled in, the bookmark was not created or updated sans any error or warning. In fact, the user would be taken to the list of bookmarks available, forcing him/her to go back to the page corresponding to the bookmark create/edit page. This fix prompts users with an error indicating which text field needs to be filled in in order to fulfill the particular bookmark create/edit function.&lt;br /&gt;
&lt;br /&gt;
[[File:CheckFieldsTitle.png]][[File:CheckFieldsUrl.png]][[File:CheckFieldsDescription.png]] &lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/new.html.erb&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: black; border:1px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- :required attribute checks to see if title, url, and description are all present --&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
        &amp;lt;%= label_tag 'Title' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
        &amp;lt;%= text_field_tag :title, params[:title], :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
        &amp;lt;%= label_tag 'Url' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
        &amp;lt;%= text_field_tag :url, params[:url], :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
        &amp;lt;%= label_tag 'Description' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
        &amp;lt;%= text_area_tag :description, params[:description], :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/edit.html.erb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: black; border:1px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- :required attribute checks to see if title, url, and description are all present --&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
        &amp;lt;%= label_tag 'Title' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
        &amp;lt;%= f.text_field :title, :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
        &amp;lt;%= label_tag 'Url' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
        &amp;lt;%= f.text_field :url, :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
        &amp;lt;%= label_tag 'Description' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
        &amp;lt;%= f.text_area :description, :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/4?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Change average bookmark rating to be based on questionnaire:'''&lt;br /&gt;
The rating system for the bookmarks before these changes were elementary in nature - there was a drop-down menu to choose your particular rating for a bookmark while there was an average calculator just to the left of the aforementioned column. The new changes introduced allows the &amp;quot;Your rating&amp;quot; and &amp;quot;Avg. rating&amp;quot; columns for a particular bookmark to be calculated based on the scores given to the various questions present in a given bookmark questionnaire. The &amp;quot;Avg. rating&amp;quot; is calculated based on the mean rating of all the bookmark questionnaires scored by every reviewer while &amp;quot;Your rating&amp;quot; is simply the mean of the scores that you (the user) gave to all the questions on the questionnaire. The integer '5' used in calculating both types of average scores was used because of the fact that there are a total of five stars for each questionnaire question.&lt;br /&gt;
&lt;br /&gt;
[[File:BookmarkAvgRatings.png]]&lt;br /&gt;
&lt;br /&gt;
Qustionnaire for fourth bookmark listed above (do your own calculation to find the mean for 'Your rating'):&lt;br /&gt;
&lt;br /&gt;
[[File:QuestionnaireForLastBookmark.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/controllers/bookmarks_controller.rb&lt;br /&gt;
    helper_method :specific_average_score&lt;br /&gt;
    helper_method :total_average_score&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    # calculate average questionnaire score for 'Your rating' for specific bookmark&lt;br /&gt;
    def specific_average_score(bookmark)&lt;br /&gt;
        if bookmark.nil?&lt;br /&gt;
            return '-'&lt;br /&gt;
        else&lt;br /&gt;
            assessment = SignUpTopic.find(bookmark.topic_id).assignment&lt;br /&gt;
            questions = assessment.questionnaires.where(type: 'BookmarkRatingQuestionnaire').flat_map(&amp;amp;:questions)&lt;br /&gt;
            responses = BookmarkRatingResponseMap.where(&lt;br /&gt;
                reviewed_object_id: assessment.id,&lt;br /&gt;
                reviewee_id: bookmark.id,&lt;br /&gt;
                reviewer_id: AssignmentParticipant.find_by(user_id: current_user.id).id).flat_map {|r| Response.where(map_id: r.id) }&lt;br /&gt;
            score = Answer.get_total_score(response: responses, questions: questions)&lt;br /&gt;
            if score.nil?&lt;br /&gt;
                return '-'&lt;br /&gt;
            else&lt;br /&gt;
                (score * 5.0 / 100.0).round(2)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    # calculate average questionnaire score for 'Avg. rating' for specific bookmark&lt;br /&gt;
    def total_average_score(bookmark)&lt;br /&gt;
        if bookmark.nil?&lt;br /&gt;
          return '-'&lt;br /&gt;
        else&lt;br /&gt;
          assessment = SignUpTopic.find(bookmark.topic_id).assignment&lt;br /&gt;
          questions = assessment.questionnaires.where(type: 'BookmarkRatingQuestionnaire').flat_map(&amp;amp;:questions)&lt;br /&gt;
          responses = BookmarkRatingResponseMap.where(&lt;br /&gt;
              reviewed_object_id: assessment.id,&lt;br /&gt;
              reviewee_id: bookmark.id).flat_map {|r| Response.where(map_id: r.id) }&lt;br /&gt;
          totalScore = Answer.compute_scores(responses, questions)&lt;br /&gt;
          if totalScore[:avg].nil?&lt;br /&gt;
              return '-'&lt;br /&gt;
          else&lt;br /&gt;
             (totalScore[:avg] * 5.0 / 100.0).round(2)&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: black; border:1px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- total average rating used for 'Avg. rating' --&amp;gt;&lt;br /&gt;
    &amp;lt;% totalAvg = total_average_score(bookmark) %&amp;gt;&lt;br /&gt;
    &amp;lt;% if totalAvg != 0 %&amp;gt;&lt;br /&gt;
        &amp;lt;%= totalAvg %&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: black; border:1px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- specific average rating used for 'Your rating' --&amp;gt;&lt;br /&gt;
    &amp;lt;% specAvg = specific_average_score(bookmark) %&amp;gt;&lt;br /&gt;
    &amp;lt;% if specAvg != 0 %&amp;gt;&lt;br /&gt;
        &amp;lt;%= specAvg %&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/12?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Addition of badges for exceptionally helpful bookmarks:'''&lt;br /&gt;
Originally, no badge system was setup for bookmarks that have proven to be helpful guides for other students taking on the same project. The new changes introduced allows bookmarks to be attached to bookmarks with exceptionally good average ratings (i.e, above a rating of 3). A badge is signified by a full star while the absence of a badge is represented by an empty star.&lt;br /&gt;
&lt;br /&gt;
[[File:Bookmark list.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: black; border:1px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;th class=&amp;quot;head&amp;quot;&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
        &amp;lt;!-- badge rewards for bookmarks --&amp;gt;&lt;br /&gt;
        &amp;lt;!-- full star denotes presence of badge --&amp;gt;&lt;br /&gt;
        &amp;lt;!-- empty star denotes absence of badge --&amp;gt;&lt;br /&gt;
        &amp;lt;% if totalAvg.to_f &amp;gt; 3 %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;glyphicon glyphicon-star&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;% else %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;glyphicon glyphicon-star-empty&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/14?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Users cannot rate bookmarks they've uploaded. '''&lt;br /&gt;
We wanted to make sure that users cannot rate bookmarks that they uploaded.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;% unless session[:user].id == bookmark.user_id %&amp;gt;&lt;br /&gt;
      # ... code for rating the bookmarks&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
      &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/1/files?w=1 here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Users cannot review bookmarks they've uploaded using the questionnaire. '''&lt;br /&gt;
We also wanted to make sure that users cannot review bookmarks that they uploaded using the questionnaires.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;% unless session[:user].id == bookmark.user_id %&amp;gt;&lt;br /&gt;
      # ... code for reviewing bookmarks using the questionnaire&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
      &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/5/files?w=1 here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Users should be able to see the number of bookmarks from the topics list. '''&lt;br /&gt;
Previously, users could add bookmarks, but could not tell how many bookmarks were provided for each topic (if any) without clicking the &amp;quot;View bookmarks&amp;quot; icon. This UI change displays the number of bookmarks for the topic inside the view bookmarks icon from the topic list view so that users don't need to click through each topic individually.&lt;br /&gt;
&lt;br /&gt;
[[File:Sign up sheet bookmarks.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
    &amp;lt;nowiki&amp;gt;&amp;lt;p class=&amp;quot;fa fa-stack-2x fa-inverse&amp;quot; style='font-size: 1.0em; padding-top: 2px; font-weight: bold;'&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
      &amp;lt;nowiki&amp;gt;&amp;lt;%= Bookmark.where(topic_id: topic.id).length.to_s %&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    &amp;lt;nowiki&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/6/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''UI changes to make finding your bookmarks easier:'''&lt;br /&gt;
We added a &amp;quot;View Bookmarks&amp;quot; link to the student task view, that takes the student directly to the bookmarks that have been submitted for their topic. This code was then modified such that the link is greyed out if the student does not have a topic, and is hidden if bookmarks are not enabled for the assignment.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/controllers/student_task_controller.rb&lt;br /&gt;
:app/views/student_task/view.html.erb&lt;br /&gt;
     &amp;lt;% if @use_bookmark %&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;li&amp;gt;&amp;gt;&lt;br /&gt;
            &amp;lt;% if @topic_id and @assignment.submission_allowed(@topic_id) %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;View bookmarks&amp;quot;, :controller=&amp;gt;'bookmarks', :action=&amp;gt; 'list', :id =&amp;gt; @topic_id %&amp;gt; (View bookmarks others have submitted for your topic)&lt;br /&gt;
          &amp;lt;% else %&amp;gt;&lt;br /&gt;
            &amp;lt;&amp;lt;nowiki /&amp;gt;font color=&amp;quot;gray&amp;quot;&amp;gt;View bookmarks&amp;lt;/font&amp;gt; (You have to choose a topic first)&lt;br /&gt;
          &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relevant commits can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/commit/04b24b1dedd3414f58f52d394f2a5b9568e83872 here] [https://github.com/hosungh/expertiza/commit/15a775624307651755a70e63625a370478aa63b4 here]&amp;lt;/span&amp;gt; and &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/commit/f144594ae062369754d54288eff8959136510ccc here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Grey out add/view bookmarks link on the topic page if bookmarks are not enabled.''' Previously, students could submit and view bookmarks even if bookmarks were disabled for the assignment. Now these options are hidden.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
  &amp;lt;% if @use_bookmark %&amp;gt;&lt;br /&gt;
    &amp;lt;&amp;lt;nowiki /&amp;gt;%= link_to :controller=&amp;gt;'bookmarks', :action=&amp;gt; 'list', :id =&amp;gt; topic.id do %&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;span class=&amp;quot;fa-stack fa-md&amp;quot; title='View topic bookmarks'&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-bookmark fa-stack-1x fa-2x&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;p class=&amp;quot;fa fa-stack-2x fa-inverse&amp;quot; style='font-size: 1.0em; padding-top: 2px; font-weight: bold;'&amp;gt;&lt;br /&gt;
          &amp;lt;%= Bookmark.where(topic_id: topic.id).length.to_s %&amp;gt;&lt;br /&gt;
          &amp;lt;&amp;lt;nowiki /&amp;gt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;%= link_to :controller=&amp;gt;'bookmarks', :action=&amp;gt; 'new', :id =&amp;gt; topic.id , :assignment_id =&amp;gt; params[:assignment_id] do %&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;span class=&amp;quot;fa-stack fa-md&amp;quot; title='Add bookmark to topic'&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-bookmark fa-stack-1x fa-2x&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-plus fa-stack-1x fa-inverse&amp;quot; style='font-size: .5em'&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;&amp;lt;nowiki /&amp;gt;% else %&amp;gt;&lt;br /&gt;
    &amp;lt;&amp;lt;nowiki /&amp;gt;span class=&amp;quot;fa-stack fa-md&amp;quot; title='View topic bookmarks'&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-bookmark fa-stack-1x fa-2x&amp;quot; style=&amp;quot;opacity: 0.3;&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
   &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/sign_up_sheet/_table_header.html.erb&lt;br /&gt;
  &amp;lt;&amp;lt;nowiki /&amp;gt;th width=&amp;quot;10%&amp;quot;&amp;gt; Bookmarks&lt;br /&gt;
    &amp;lt;% unless @use_bookmark %&amp;gt; (disabled) &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;&amp;lt;nowiki /&amp;gt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Commit can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/commit/f0352ddf441d3773109b2e0208981f3fe122b5df here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Disable-bookmark-links.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Modify Bookmark delete permissions. '''&lt;br /&gt;
Bookmarks should be deletable by the user who created the bookmark, a teammate of the user who provided the bookmark, and the instructor.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
        &amp;lt;!--Edit/Destroy Bookmarks--&amp;gt;&lt;br /&gt;
        &amp;lt;% is_teammate = false %&amp;gt;&lt;br /&gt;
        &amp;lt;% team = SignedUpTeam.find_by(topic_id: @topic.id) rescue nil %&amp;gt;&lt;br /&gt;
        &amp;lt;% if team %&amp;gt;&lt;br /&gt;
          &amp;lt;% teams_users = TeamsUser.where(['team_id = ?', team.team_id]) %&amp;gt;&lt;br /&gt;
          &amp;lt;% is_teammate = teams_users.select {|tu| tu.user_id == session[:user].id}.size &amp;gt; 0  %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% if bookmark.user_id == session[:user].id or is_teammate or ['Instructor'].include? @current_role_name %&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Edit Bookmark', :action =&amp;gt; 'edit', :id =&amp;gt; bookmark.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Destroy Bookmark', bookmark, :confirm =&amp;gt; &amp;quot;Delete bookmark \&amp;quot;#{bookmark.title}\&amp;quot;?&amp;quot;, :method =&amp;gt; :delete %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/13/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Fix the ability to create bookmark questionnaires and use in assignments.'''&lt;br /&gt;
Previously, questionnaires for things like Teammate Reviews could be created and used in assignments. Users could fill these out and the scores would be stored for later reference by TAs and instructors. The questionnaire for bookmark reviews was previously not functional, but now instructors can create new bookmark questionnaires and assign them to assignments. &lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/controllers/questionnaires_controller.rb&lt;br /&gt;
       @questionnaire = Object.const_get(params[:model].split.join).new if Questionnaire::QUESTIONNAIRE_TYPES.include? params[:model].split.join&lt;br /&gt;
        ....&lt;br /&gt;
        if %w[AuthorFeedback CourseSurvey TeammateReview GlobalSurvey AssignmentSurvey BookmarkRating].include?(display_type) &lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
:app/controllers/questionnaires_controller.rb&lt;br /&gt;
    ....&lt;br /&gt;
    when &amp;quot;bookmark&amp;quot;&lt;br /&gt;
      bookmark = Bookmark.find(@map.response_map.reviewee_id)&lt;br /&gt;
      redirect_to controller: 'bookmarks', action: 'list', id: bookmark.topic_id&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;quot;BookmarkRatingResponseMap&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:app/models/bookmark_rating_response_map.rb&lt;br /&gt;
    ....&lt;br /&gt;
    self.assignment.questionnaires.find_by(type: 'BookmarkRatingQuestionnaire')&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    ....&lt;br /&gt;
          &amp;lt;td&amp;gt;&lt;br /&gt;
          &amp;lt;% assignment_participant = AssignmentParticipant.find_by(user_id: session[:user].id) %&amp;gt;&lt;br /&gt;
          &amp;lt;% map = BookmarkRatingResponseMap.where(reviewed_object_id: @topic.assignment.id, reviewer_id: assignment_participant.id, reviewee_id: bookmark.id).first %&amp;gt;&lt;br /&gt;
          &amp;lt;% if map.nil? %&amp;gt;&lt;br /&gt;
            &amp;lt;% map = BookmarkRatingResponseMap.create(reviewed_object_id: @topic.assignment.id, reviewer_id: assignment_participant.id, reviewee_id: bookmark.id) %&amp;gt;&lt;br /&gt;
          &amp;lt;% end %&amp;gt;&lt;br /&gt;
          &amp;lt;% review = map.response.last %&amp;gt;&lt;br /&gt;
          &amp;lt;% if review.nil? %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;Review&amp;quot;, {:controller =&amp;gt; 'response', :action =&amp;gt; 'new', :id =&amp;gt; map.map_id, :return =&amp;gt; &amp;quot;bookmark&amp;quot;} %&amp;gt;&lt;br /&gt;
          &amp;lt;% else %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;View&amp;quot;, {:controller =&amp;gt; 'response', :action =&amp;gt; 'view', :id =&amp;gt; review.id} %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;Edit&amp;quot;, {:controller =&amp;gt; 'response', :action =&amp;gt; 'edit', :id =&amp;gt; review.id, :return =&amp;gt; &amp;quot;bookmark&amp;quot;} %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;nowiki&amp;gt;&amp;lt;% if bookmark.user_id == session[:user].id %&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Edit', :action =&amp;gt; 'edit', :id =&amp;gt; bookmark.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Destroy', bookmark, :confirm =&amp;gt; &amp;quot;Delete bookmark \&amp;quot;#{bookmark.title}\&amp;quot;?&amp;quot;, :method =&amp;gt; :delete %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Edit Bookmark', :action =&amp;gt; 'edit', :id =&amp;gt; bookmark.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Destroy Bookmark', bookmark, :confirm =&amp;gt; &amp;quot;Delete bookmark \&amp;quot;#{bookmark.title}\&amp;quot;?&amp;quot;, :method =&amp;gt; :delete %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/response/view.html.erb&lt;br /&gt;
    &amp;lt;% if !(@map.instance_of? TeammateReviewResponseMap) &amp;amp;&amp;amp; !@map.survey? &amp;amp;&amp;amp; !(@map.instance_of? BookmarkRatingResponseMap) %&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/3/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Instructors should have the ability to view all bookmark responses. '''&lt;br /&gt;
Instructors should have a way to view all the responses to the bookmark questionnaires so that can see which bookmarks provided were deemed useful.&lt;br /&gt;
&lt;br /&gt;
[[File:Bookmark response list.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/helpers/report_formatter_helper.rb&lt;br /&gt;
  def bookmark_rating_response_map(params, _session = nil)&lt;br /&gt;
    assign_basics(params)&lt;br /&gt;
    @reviewers = BookmarkRatingResponseMap.bookmark_response_report(@id)&lt;br /&gt;
    @topics = @assignment.sign_up_topics&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
:app/models/bookmark_rating_response_map.rb&lt;br /&gt;
    class BookmarkRatingResponseMap &amp;lt; ReviewResponseMap&lt;br /&gt;
    &lt;br /&gt;
    def self.bookmark_response_report(id)&lt;br /&gt;
      BookmarkRatingResponseMap.select(&amp;quot;DISTINCT reviewer_id&amp;quot;).where(&amp;quot;reviewed_object_id = ?&amp;quot;, id)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
:app/views/reports/_bookmark_rating_report.html.erb&lt;br /&gt;
    &amp;lt;%= create_report_table_header(&amp;quot;Reviewed By&amp;quot; =&amp;gt; &amp;quot;16%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Topic&amp;quot; =&amp;gt; &amp;quot;14%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Bookmark Review&amp;quot; =&amp;gt; &amp;quot;20%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Submitted By&amp;quot; =&amp;gt; &amp;quot;20%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Last reviewed at&amp;quot; =&amp;gt; &amp;quot;20%&amp;quot;) %&amp;gt;&lt;br /&gt;
    &amp;lt;%@l = -1 %&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;% @reviewers.each do |r| %&amp;gt;&lt;br /&gt;
      &amp;lt;% @user = User.find(Participant.find(r.reviewer_id).user_id) %&amp;gt;&lt;br /&gt;
      &amp;lt;% @bookmark_rating_response_maps = BookmarkRatingResponseMap.where(reviewer_id: r.reviewer_id, reviewed_object_id: @id) %&amp;gt;&lt;br /&gt;
      &amp;lt;!-- Find only valid responses from this user --&amp;gt;&lt;br /&gt;
      &amp;lt;% maps = @bookmark_rating_response_maps.select { |m| !Response.where(map_id: m.id).first.blank? and m.reviewee and m.reviewee.user_id != @user.id }%&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
      &amp;lt;%@l = @l+1 %&amp;gt;&lt;br /&gt;
      &amp;lt;% (@l % 2 == 0) ? @bgcolor = &amp;quot;#ffffff&amp;quot; : @bgcolor = &amp;quot;#f9f9f9&amp;quot; %&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
      &amp;lt;% if maps.count &amp;gt; 0 %&amp;gt;&lt;br /&gt;
          &amp;lt;!--Reviewer--&amp;gt;&lt;br /&gt;
        &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt; rowspan= &amp;lt;%= maps.count %&amp;gt;&amp;gt;&lt;br /&gt;
          &amp;lt;% @reviewer_name = @user.fullname(session[:ip]) %&amp;gt;&lt;br /&gt;
          &amp;lt;%= link_to @reviewer_name, :controller =&amp;gt; 'popup', :action =&amp;gt; 'reviewer_details_popup', :id =&amp;gt; r.reviewer_id, :assignment_id =&amp;gt; @id %&amp;gt;&lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
        &amp;lt;% maps.each do |map| %&amp;gt;&lt;br /&gt;
          &amp;lt;% @reviewee = map.reviewee %&amp;gt;&lt;br /&gt;
            &amp;lt;!-- Topic --&amp;gt;&lt;br /&gt;
            &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt;  align=&amp;quot;left&amp;quot; colspan=1&amp;gt;&lt;br /&gt;
              &amp;lt;% topic = SignUpTopic.find(@reviewee.topic_id) %&amp;gt;&lt;br /&gt;
              &amp;lt;%= topic.topic_name %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
            &amp;lt;!-- Bookmarks reviewed--&amp;gt;&lt;br /&gt;
            &amp;lt;td id = &amp;quot;green&amp;quot; bgcolor=&amp;lt;%= @bgcolor %&amp;gt; align=&amp;quot;left&amp;quot; colspan=1&amp;gt;&lt;br /&gt;
              &amp;lt;%= link_to @reviewee.title, {:controller =&amp;gt; 'response', :action =&amp;gt; 'view', :id =&amp;gt; map.response.last.id}, :title =&amp;gt; &amp;quot;Click here to view this bookmark review&amp;quot; %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
            &amp;lt;!-- Submitted by--&amp;gt;&lt;br /&gt;
            &amp;lt;td id = &amp;quot;green&amp;quot; bgcolor=&amp;lt;%= @bgcolor %&amp;gt; style=&amp;quot;color:#DD3300&amp;quot; align=&amp;quot;left&amp;quot; colspan=1&amp;gt;&lt;br /&gt;
              &amp;lt;% reviewed_by_user = User.find(@reviewee.user_id).name %&amp;gt;&lt;br /&gt;
              &amp;lt;%= link_to reviewed_by_user, impersonate_impersonate_path(:user =&amp;gt; {:name =&amp;gt; reviewed_by_user}), :method =&amp;gt; :post, :title =&amp;gt; &amp;quot;Click here to impersonate this user&amp;quot; %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
            &amp;lt;!--Last reviewed at--&amp;gt;&lt;br /&gt;
            &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt; align=&amp;quot;left&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;% @bookmark_review_response = Response.where(map_id: map.id).first %&amp;gt;&lt;br /&gt;
              &amp;lt;%= @bookmark_review_response.updated_at.to_time.strftime(&amp;quot;%m/%d/%Y - %I:%M%p&amp;quot;) %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/reports/_searchbox.html.erb&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;lt;option value='BookmarkRatingResponseMap' &amp;gt;&lt;br /&gt;
      Bookmark Review Report&lt;br /&gt;
    &amp;lt;/option&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;lt;% elsif @type == &amp;quot;BookmarkReviewResponseMap&amp;quot; %&amp;gt;&lt;br /&gt;
        &amp;lt;nowiki&amp;gt;&amp;lt;h1&amp;gt; Bookmark review report for &amp;lt;%= @assignment.name%&amp;gt; &amp;lt;/h1&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:app/views/reports/response_report.html.haml&lt;br /&gt;
    - elsif @type == &amp;quot;BookmarkRatingResponseMap&amp;quot;&lt;br /&gt;
       = render :partial =&amp;gt; 'bookmark_rating_report'&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/10/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
&lt;br /&gt;
* Create a Bookmark Questionnaire&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Questionnaires.&lt;br /&gt;
# Find 'Bookmark Rating' and click the '+' to create a new questionnaire.&lt;br /&gt;
# Give a name for this questionnaire, leave the min and max score at 0 and 5 respectively, and click 'Create'.&lt;br /&gt;
# Go to Manage &amp;gt; Questionnaires and click on 'Bookmark Rating' to view all of the questionnaires. Click the edit icon for the questionnaire you just created.&lt;br /&gt;
# Select 'Add 1 more Criterion question(s)'. &lt;br /&gt;
# For the question, enter &amp;quot;Does this bookmark appear to have been used by the author?&amp;quot; and leave the other fields blank. This question will be helpful in determining how useful the bookmark was.&lt;br /&gt;
# Click 'Save bookmark rating questionnaire'. Now this questionnaire can be used in assignments.&lt;br /&gt;
&lt;br /&gt;
* Enable Bookmarks&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Choose an assignment that will be used for testing and have bookmarks enabled and select the edit icon under Actions.&lt;br /&gt;
# Under Topics Tab select 'Allow participants to create bookmarks?'.&lt;br /&gt;
# Go to Rubrics tab, under 'Bookmark Rating' select the Bookmark review questionnaire that was previously created to use for reviewing the bookmarks.&lt;br /&gt;
&lt;br /&gt;
* Add a Bookmark to a Topic&lt;br /&gt;
# Log in as a student who is a participant of the assignment with bookmarks enabled and select that assignment.&lt;br /&gt;
# Select a &amp;quot;Signup sheet&amp;quot; to see the list of available topics.&lt;br /&gt;
# Choose a topic and select the 'Add bookmark to topic' icon from the Bookmarks column. The 'Add bookmark to topic' icon has a '+' sign. &lt;br /&gt;
# Fill in all the fields for the bookmark, including Title, Url, and Description and click 'Add new bookmark'.&lt;br /&gt;
# You should now see a page listing all bookmarks for this topic.&lt;br /&gt;
   &lt;br /&gt;
* Viewing all Bookmarks for a Topic&lt;br /&gt;
# Log in as a student who is a participant of the assignment with bookmarks enabled (or an instructor) and select that assignment.&lt;br /&gt;
# Select a &amp;quot;Signup sheet&amp;quot; to see the list of available topics.&lt;br /&gt;
# The number of bookmarks for each topic should be displayed visually inside the 'View topic bookmarks' icon in the bookmarks column.&lt;br /&gt;
# Click the 'View topic bookmarks icon' to see a list of all bookmarks for this topic.&lt;br /&gt;
&lt;br /&gt;
* Editing and Destroying Bookmarks for a Topic&lt;br /&gt;
# Perform this test with each of the following users: an instructor, a user who is assigned to the topic, and a teammate of the user who is assigned to the topic.&lt;br /&gt;
## Log in with the user and select the assignment with bookmarks enabled.&lt;br /&gt;
## Select a &amp;quot;Signup sheet&amp;quot; to see the list of available topics.&lt;br /&gt;
## Click the 'View topic bookmarks icon' to see a list of all bookmarks for this topic.&lt;br /&gt;
## The user should see links to 'Edit Bookmark' and 'Destroy Bookmark' next to a bookmark only if the user is an instructor, the user submitted the bookmark, or the user is a teammate of the user who submitted the bookmark.&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
The current version of Expertiza does not have any tests for the bookmark controller or model. We intend on adding comprehensive RSpec tests for all changes we have added to controller classes and unit tests for model classes.&lt;br /&gt;
&lt;br /&gt;
===Code Coverage===&lt;br /&gt;
&lt;br /&gt;
=='''Application Deployment'''==&lt;br /&gt;
 &lt;br /&gt;
This web application deployed on VCL is located at [http://152.46.17.220:8080 http://152.46.17.220:8080]&lt;br /&gt;
&lt;br /&gt;
Note: To aid in testing, we have created an assignment called &amp;quot;Bookmarks Test Assignment&amp;quot; as instructor6. The students assigned to this assignment include student7339, student7340, and student7341.&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
1. [https://github.com/expertiza/expertiza/ Expertiza on GitHub]&lt;br /&gt;
&lt;br /&gt;
2. [https://github.com/hosungh/expertiza/ Forked GitHub Repo]&lt;br /&gt;
&lt;br /&gt;
3. [http://152.46.17.220:8080 Deployed Application]&lt;br /&gt;
&lt;br /&gt;
4. [https://github.com/expertiza/expertiza/pull/1704/ Beta Branch Pull Request]&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2005._Bookmark_enhancements&amp;diff=132170</id>
		<title>CSC/ECE 517 Spring 2020 - E2005. Bookmark enhancements</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2005._Bookmark_enhancements&amp;diff=132170"/>
		<updated>2020-03-29T18:56:28Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: /* Code Modifications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==&amp;lt;b&amp;gt;E2005. Bookmark Enhancements&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open-source project that is built using the [http://rubyonrails.org/ Ruby on Rails] framework. At its core, it is a highly versatile tool that academic institutions can use to craft learning objectives centered around team projects, peer reviews, and highly-customizable assignments.&lt;br /&gt;
&lt;br /&gt;
=='''Problem Statement'''==&lt;br /&gt;
The purpose of this project was to add meaningful enhancements and fixes to the bookmark feature in Expertiza, entities that can be attached to a topic to aid the authors who decide to take on a certain assignment. While the major functionality of the bookmark feature was already present by the time the team embarked on this project (most notably the ability to create/edit and rate bookmarks), many desired functions were conveniently broken or left out.&lt;br /&gt;
&lt;br /&gt;
===Completed Stories===&lt;br /&gt;
Below is a breakdown of the stories that were drawn up and completed for this project:&lt;br /&gt;
&lt;br /&gt;
1. Need a way to view all responses to the bookmark questionnaires.&lt;br /&gt;
&lt;br /&gt;
2. Modify permissions for deleting bookmarks.The person who creates the bookmark, the team for whom the bookmark is meant, and the instructor, should be able to delete.&lt;br /&gt;
&lt;br /&gt;
3. &amp;quot;View bookmarks&amp;quot; link on student_task/view breaks if the student has not selected a topic yet.&lt;br /&gt;
&lt;br /&gt;
4. Bookmark rating questionnaire should include question asking the reviewer whether or not the bookmark appears to have been used by the author. Get the bookmark questionnaire functioning and add to the bookmark list page.&lt;br /&gt;
&lt;br /&gt;
5. Fix issue in which users should not be able to review their own bookmark using the questionnaire, but currently can.&lt;br /&gt;
&lt;br /&gt;
6. Add a number next to/inside the icon with the number of current bookmark in order to make it clear whether a bookmark exists for a topic.&lt;br /&gt;
&lt;br /&gt;
7. Add a &amp;quot;View bookmarks&amp;quot; link to the assignment view page for easier access.&lt;br /&gt;
&lt;br /&gt;
8. Add rating to the bookmark questionnaire and use that rating to calculate the average instead of using the current dropdown.&lt;br /&gt;
&lt;br /&gt;
9. A student should not be able to rate his/her own bookmark.&lt;br /&gt;
&lt;br /&gt;
10. Add URL to bookmark list for assignment topic on the assignment page, to make viewing bookmarks easier.&lt;br /&gt;
&lt;br /&gt;
11. Instructors cannot currently see bookmarks (gets an error message saying instructors cannot create bookmarks). &lt;br /&gt;
&lt;br /&gt;
12. &amp;quot;Back&amp;quot; button from Bookmarks list is broken.&lt;br /&gt;
&lt;br /&gt;
13. When creating a bookmark with an empty description field, the notice says the bookmark was successfully created even though it fails.&lt;br /&gt;
&lt;br /&gt;
14. &amp;quot;Bookmark ratings&amp;quot; should be a type of rubric when you go to Manage &amp;gt; Questionnaires. Although 'Bookmark Rating' is already a type of rubric, it isn't listed when hovering over Manage... &amp;gt; Questionnaires &lt;br /&gt;
&lt;br /&gt;
15. Create a way to mark a bookmark that was rated to be helpful by all reviewers, on average. &lt;br /&gt;
&lt;br /&gt;
16. Students can add/view bookmarks when &amp;quot;Allow participants to create bookmarks?&amp;quot; box is unchecked for the assignment.&lt;br /&gt;
&lt;br /&gt;
=='''Code Modifications'''==&lt;br /&gt;
&lt;br /&gt;
'''Fix the &amp;quot;Back&amp;quot; button:'''&lt;br /&gt;
When either backing out of creating or viewing/editing a bookmark, the back functionality does not work, both prompting errors. Issue has been fixed and users can once again go back to the appropriate page.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;%= link_to 'Back', '#', :onclick =&amp;gt; 'pageBack()' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    function pageBack() {&lt;br /&gt;
  	history.back()&lt;br /&gt;
    }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/new.html.erb &lt;br /&gt;
    &amp;lt;%= link_to 'Back', '#', :onclick =&amp;gt; 'pageBack()' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    function pageBack() {&lt;br /&gt;
  	history.back()&lt;br /&gt;
    }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/edit.html.erb&lt;br /&gt;
    &amp;lt;%= link_to 'Back', '#', :onclick =&amp;gt; 'pageBack()' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    function pageBack() {&lt;br /&gt;
  	history.back()&lt;br /&gt;
    }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/2?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Commit for &amp;quot;Back&amp;quot; capability when updating bookmark can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/4?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Check whether text field is present when creating/updating bookmark:'''&lt;br /&gt;
Previously, when a bookmark was created/updated and the corresponding &amp;quot;Title&amp;quot;, &amp;quot;URL&amp;quot;, or &amp;quot;Description&amp;quot; text fields were not filled in, the bookmark was not created or updated sans any error or warning. In fact, the user would be taken to the list of bookmarks available, forcing him/her to go back to the page corresponding to the bookmark create/edit page. This fix prompts users with an error indicating which text field needs to be filled in in order to fulfill the particular bookmark create/edit function.&lt;br /&gt;
&lt;br /&gt;
[[File:CheckFieldsTitle.png]][[File:CheckFieldsUrl.png]][[File:CheckFieldsDescription.png]] &lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/new.html.erb&lt;br /&gt;
      &amp;lt;%= label_tag 'Title' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= text_field_tag :title, params[:title], :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag 'Url' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= text_field_tag :url, params[:url], :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag 'Description' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= text_area_tag :description, params[:description], :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/edit.html.erb&lt;br /&gt;
      &amp;lt;%= label_tag 'Title' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.text_field :title, :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag 'Url' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.text_field :url, :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag 'Description' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.text_area :description, :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/4?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Change average bookmark rating to be based on questionnaire:'''&lt;br /&gt;
The rating system for the bookmarks before these changes were elementary in nature - there was a drop-down menu to choose your particular rating for a bookmark while there was an average calculator just to the left of the aforementioned column. The new changes introduced allows the &amp;quot;Your rating&amp;quot; and &amp;quot;Avg. rating&amp;quot; columns for a particular bookmark to be calculated based on the scores given to the various questions present in a given bookmark questionnaire. The &amp;quot;Avg. rating&amp;quot; is calculated based on the mean rating of all the bookmark questionnaires scored by every reviewer while &amp;quot;Your rating&amp;quot; is simply the mean of the scores that you (the user) gave to all the questions on the questionnaire. The integer '5' used in calculating both types of average scores was used because of the fact that there are a total of five stars for each questionnaire question.&lt;br /&gt;
&lt;br /&gt;
[[File:BookmarkAvgRatings.png]]&lt;br /&gt;
&lt;br /&gt;
Qustionnaire for fourth bookmark listed above (do your own calculation to find the mean for 'Your rating'):&lt;br /&gt;
&lt;br /&gt;
[[File:QuestionnaireForLastBookmark.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/controllers/bookmarks_controller.rb&lt;br /&gt;
    helper_method :specific_average_score&lt;br /&gt;
    helper_method :total_average_score&lt;br /&gt;
&lt;br /&gt;
    def specific_average_score(bookmark)&lt;br /&gt;
        if bookmark.nil?&lt;br /&gt;
            return '-'&lt;br /&gt;
        else&lt;br /&gt;
            assessment = SignUpTopic.find(bookmark.topic_id).assignment&lt;br /&gt;
            questions = assessment.questionnaires.where(type: 'BookmarkRatingQuestionnaire').flat_map(&amp;amp;:questions)&lt;br /&gt;
            responses = BookmarkRatingResponseMap.where(&lt;br /&gt;
                reviewed_object_id: assessment.id,&lt;br /&gt;
                reviewee_id: bookmark.id,&lt;br /&gt;
                reviewer_id: AssignmentParticipant.find_by(user_id: current_user.id).id).flat_map {|r| Response.where(map_id: r.id) }&lt;br /&gt;
            score = Answer.get_total_score(response: responses, questions: questions)&lt;br /&gt;
            if score.nil?&lt;br /&gt;
                return '-'&lt;br /&gt;
            else&lt;br /&gt;
                (score * 5.0 / 100.0).round(2)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    def total_average_score(bookmark)&lt;br /&gt;
        if bookmark.nil?&lt;br /&gt;
          return '-'&lt;br /&gt;
        else&lt;br /&gt;
          assessment = SignUpTopic.find(bookmark.topic_id).assignment&lt;br /&gt;
          questions = assessment.questionnaires.where(type: 'BookmarkRatingQuestionnaire').flat_map(&amp;amp;:questions)&lt;br /&gt;
          responses = BookmarkRatingResponseMap.where(&lt;br /&gt;
              reviewed_object_id: assessment.id,&lt;br /&gt;
              reviewee_id: bookmark.id).flat_map {|r| Response.where(map_id: r.id) }&lt;br /&gt;
          totalScore = Answer.compute_scores(responses, questions)&lt;br /&gt;
          if totalScore[:avg].nil?&lt;br /&gt;
              return '-'&lt;br /&gt;
          else&lt;br /&gt;
             (totalScore[:avg] * 5.0 / 100.0).round(2)&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;!-- total average rating --&amp;gt;&lt;br /&gt;
    &amp;lt;% totalAvg = total_average_score(bookmark) %&amp;gt;&lt;br /&gt;
    &amp;lt;% if totalAvg != 0 %&amp;gt;&lt;br /&gt;
        &amp;lt;%= totalAvg %&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- specific average score per user for a rubric --&amp;gt;&lt;br /&gt;
    &amp;lt;% specAvg = specific_average_score(bookmark) %&amp;gt;&lt;br /&gt;
    &amp;lt;% if specAvg != 0 %&amp;gt;&lt;br /&gt;
        &amp;lt;%= specAvg %&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/12?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Addition of badges for exceptionally helpful bookmarks:'''&lt;br /&gt;
Originally, no badge system was setup for bookmarks that have proven to be helpful guides for other students taking on the same project. The new changes introduced allows bookmarks to be attached to bookmarks with exceptionally good average ratings (i.e, above a rating of 3). A badge is signified by a full star while the absence of a badge is represented by an empty star.&lt;br /&gt;
&lt;br /&gt;
[[File:Bookmark list.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;th class=&amp;quot;head&amp;quot;&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
        &amp;lt;!-- badge --&amp;gt;&lt;br /&gt;
        &amp;lt;% if totalAvg.to_f &amp;gt; 3 %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;glyphicon glyphicon-star&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;% else %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;glyphicon glyphicon-star-empty&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/14?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Users cannot rate bookmarks they've uploaded. '''&lt;br /&gt;
We wanted to make sure that users cannot rate bookmarks that they uploaded.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;% unless session[:user].id == bookmark.user_id %&amp;gt;&lt;br /&gt;
      # ... code for rating the bookmarks&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
      &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/1/files?w=1 here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Users cannot review bookmarks they've uploaded using the questionnaire. '''&lt;br /&gt;
We also wanted to make sure that users cannot review bookmarks that they uploaded using the questionnaires.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;% unless session[:user].id == bookmark.user_id %&amp;gt;&lt;br /&gt;
      # ... code for reviewing bookmarks using the questionnaire&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
      &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/5/files?w=1 here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Users should be able to see the number of bookmarks from the topics list. '''&lt;br /&gt;
Previously, users could add bookmarks, but could not tell how many bookmarks were provided for each topic (if any) without clicking the &amp;quot;View bookmarks&amp;quot; icon. This UI change displays the number of bookmarks for the topic inside the view bookmarks icon from the topic list view so that users don't need to click through each topic individually.&lt;br /&gt;
&lt;br /&gt;
[[File:Sign up sheet bookmarks.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
    &amp;lt;nowiki&amp;gt;&amp;lt;p class=&amp;quot;fa fa-stack-2x fa-inverse&amp;quot; style='font-size: 1.0em; padding-top: 2px; font-weight: bold;'&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
      &amp;lt;nowiki&amp;gt;&amp;lt;%= Bookmark.where(topic_id: topic.id).length.to_s %&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    &amp;lt;nowiki&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/6/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''UI changes to make finding your bookmarks easier:'''&lt;br /&gt;
We added a &amp;quot;View Bookmarks&amp;quot; link to the student task view, that takes the student directly to the bookmarks that have been submitted for their topic. This code was then modified such that the link is greyed out if the student does not have a topic, and is hidden if bookmarks are not enabled for the assignment.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/controllers/student_task_controller.rb&lt;br /&gt;
:app/views/student_task/view.html.erb&lt;br /&gt;
     &amp;lt;% if @use_bookmark %&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;li&amp;gt;&amp;gt;&lt;br /&gt;
            &amp;lt;% if @topic_id and @assignment.submission_allowed(@topic_id) %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;View bookmarks&amp;quot;, :controller=&amp;gt;'bookmarks', :action=&amp;gt; 'list', :id =&amp;gt; @topic_id %&amp;gt; (View bookmarks others have submitted for your topic)&lt;br /&gt;
          &amp;lt;% else %&amp;gt;&lt;br /&gt;
            &amp;lt;&amp;lt;nowiki /&amp;gt;font color=&amp;quot;gray&amp;quot;&amp;gt;View bookmarks&amp;lt;/font&amp;gt; (You have to choose a topic first)&lt;br /&gt;
          &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relevant commits can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/commit/04b24b1dedd3414f58f52d394f2a5b9568e83872 here] [https://github.com/hosungh/expertiza/commit/15a775624307651755a70e63625a370478aa63b4 here]&amp;lt;/span&amp;gt; and &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/commit/f144594ae062369754d54288eff8959136510ccc here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Grey out add/view bookmarks link on the topic page if bookmarks are not enabled.''' Previously, students could submit and view bookmarks even if bookmarks were disabled for the assignment. Now these options are hidden.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
  &amp;lt;% if @use_bookmark %&amp;gt;&lt;br /&gt;
    &amp;lt;&amp;lt;nowiki /&amp;gt;%= link_to :controller=&amp;gt;'bookmarks', :action=&amp;gt; 'list', :id =&amp;gt; topic.id do %&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;span class=&amp;quot;fa-stack fa-md&amp;quot; title='View topic bookmarks'&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-bookmark fa-stack-1x fa-2x&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;p class=&amp;quot;fa fa-stack-2x fa-inverse&amp;quot; style='font-size: 1.0em; padding-top: 2px; font-weight: bold;'&amp;gt;&lt;br /&gt;
          &amp;lt;%= Bookmark.where(topic_id: topic.id).length.to_s %&amp;gt;&lt;br /&gt;
          &amp;lt;&amp;lt;nowiki /&amp;gt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;%= link_to :controller=&amp;gt;'bookmarks', :action=&amp;gt; 'new', :id =&amp;gt; topic.id , :assignment_id =&amp;gt; params[:assignment_id] do %&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;span class=&amp;quot;fa-stack fa-md&amp;quot; title='Add bookmark to topic'&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-bookmark fa-stack-1x fa-2x&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-plus fa-stack-1x fa-inverse&amp;quot; style='font-size: .5em'&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;&amp;lt;nowiki /&amp;gt;% else %&amp;gt;&lt;br /&gt;
    &amp;lt;&amp;lt;nowiki /&amp;gt;span class=&amp;quot;fa-stack fa-md&amp;quot; title='View topic bookmarks'&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-bookmark fa-stack-1x fa-2x&amp;quot; style=&amp;quot;opacity: 0.3;&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
   &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/sign_up_sheet/_table_header.html.erb&lt;br /&gt;
  &amp;lt;&amp;lt;nowiki /&amp;gt;th width=&amp;quot;10%&amp;quot;&amp;gt; Bookmarks&lt;br /&gt;
    &amp;lt;% unless @use_bookmark %&amp;gt; (disabled) &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;&amp;lt;nowiki /&amp;gt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Commit can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/commit/f0352ddf441d3773109b2e0208981f3fe122b5df here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Disable-bookmark-links.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Modify Bookmark delete permissions. '''&lt;br /&gt;
Bookmarks should be deletable by the user who created the bookmark, a teammate of the user who provided the bookmark, and the instructor.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
        &amp;lt;!--Edit/Destroy Bookmarks--&amp;gt;&lt;br /&gt;
        &amp;lt;% is_teammate = false %&amp;gt;&lt;br /&gt;
        &amp;lt;% team = SignedUpTeam.find_by(topic_id: @topic.id) rescue nil %&amp;gt;&lt;br /&gt;
        &amp;lt;% if team %&amp;gt;&lt;br /&gt;
          &amp;lt;% teams_users = TeamsUser.where(['team_id = ?', team.team_id]) %&amp;gt;&lt;br /&gt;
          &amp;lt;% is_teammate = teams_users.select {|tu| tu.user_id == session[:user].id}.size &amp;gt; 0  %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% if bookmark.user_id == session[:user].id or is_teammate or ['Instructor'].include? @current_role_name %&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Edit Bookmark', :action =&amp;gt; 'edit', :id =&amp;gt; bookmark.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Destroy Bookmark', bookmark, :confirm =&amp;gt; &amp;quot;Delete bookmark \&amp;quot;#{bookmark.title}\&amp;quot;?&amp;quot;, :method =&amp;gt; :delete %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/13/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Fix the ability to create bookmark questionnaires and use in assignments.'''&lt;br /&gt;
Previously, questionnaires for things like Teammate Reviews could be created and used in assignments. Users could fill these out and the scores would be stored for later reference by TAs and instructors. The questionnaire for bookmark reviews was previously not functional, but now instructors can create new bookmark questionnaires and assign them to assignments. &lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/controllers/questionnaires_controller.rb&lt;br /&gt;
       @questionnaire = Object.const_get(params[:model].split.join).new if Questionnaire::QUESTIONNAIRE_TYPES.include? params[:model].split.join&lt;br /&gt;
        ....&lt;br /&gt;
        if %w[AuthorFeedback CourseSurvey TeammateReview GlobalSurvey AssignmentSurvey BookmarkRating].include?(display_type) &lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
:app/controllers/questionnaires_controller.rb&lt;br /&gt;
    ....&lt;br /&gt;
    when &amp;quot;bookmark&amp;quot;&lt;br /&gt;
      bookmark = Bookmark.find(@map.response_map.reviewee_id)&lt;br /&gt;
      redirect_to controller: 'bookmarks', action: 'list', id: bookmark.topic_id&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;quot;BookmarkRatingResponseMap&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:app/models/bookmark_rating_response_map.rb&lt;br /&gt;
    ....&lt;br /&gt;
    self.assignment.questionnaires.find_by(type: 'BookmarkRatingQuestionnaire')&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    ....&lt;br /&gt;
          &amp;lt;td&amp;gt;&lt;br /&gt;
          &amp;lt;% assignment_participant = AssignmentParticipant.find_by(user_id: session[:user].id) %&amp;gt;&lt;br /&gt;
          &amp;lt;% map = BookmarkRatingResponseMap.where(reviewed_object_id: @topic.assignment.id, reviewer_id: assignment_participant.id, reviewee_id: bookmark.id).first %&amp;gt;&lt;br /&gt;
          &amp;lt;% if map.nil? %&amp;gt;&lt;br /&gt;
            &amp;lt;% map = BookmarkRatingResponseMap.create(reviewed_object_id: @topic.assignment.id, reviewer_id: assignment_participant.id, reviewee_id: bookmark.id) %&amp;gt;&lt;br /&gt;
          &amp;lt;% end %&amp;gt;&lt;br /&gt;
          &amp;lt;% review = map.response.last %&amp;gt;&lt;br /&gt;
          &amp;lt;% if review.nil? %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;Review&amp;quot;, {:controller =&amp;gt; 'response', :action =&amp;gt; 'new', :id =&amp;gt; map.map_id, :return =&amp;gt; &amp;quot;bookmark&amp;quot;} %&amp;gt;&lt;br /&gt;
          &amp;lt;% else %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;View&amp;quot;, {:controller =&amp;gt; 'response', :action =&amp;gt; 'view', :id =&amp;gt; review.id} %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;Edit&amp;quot;, {:controller =&amp;gt; 'response', :action =&amp;gt; 'edit', :id =&amp;gt; review.id, :return =&amp;gt; &amp;quot;bookmark&amp;quot;} %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;nowiki&amp;gt;&amp;lt;% if bookmark.user_id == session[:user].id %&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Edit', :action =&amp;gt; 'edit', :id =&amp;gt; bookmark.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Destroy', bookmark, :confirm =&amp;gt; &amp;quot;Delete bookmark \&amp;quot;#{bookmark.title}\&amp;quot;?&amp;quot;, :method =&amp;gt; :delete %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Edit Bookmark', :action =&amp;gt; 'edit', :id =&amp;gt; bookmark.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Destroy Bookmark', bookmark, :confirm =&amp;gt; &amp;quot;Delete bookmark \&amp;quot;#{bookmark.title}\&amp;quot;?&amp;quot;, :method =&amp;gt; :delete %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/response/view.html.erb&lt;br /&gt;
    &amp;lt;% if !(@map.instance_of? TeammateReviewResponseMap) &amp;amp;&amp;amp; !@map.survey? &amp;amp;&amp;amp; !(@map.instance_of? BookmarkRatingResponseMap) %&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/3/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Instructors should have the ability to view all bookmark responses. '''&lt;br /&gt;
Instructors should have a way to view all the responses to the bookmark questionnaires so that can see which bookmarks provided were deemed useful.&lt;br /&gt;
&lt;br /&gt;
[[File:Bookmark response list.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/helpers/report_formatter_helper.rb&lt;br /&gt;
  def bookmark_rating_response_map(params, _session = nil)&lt;br /&gt;
    assign_basics(params)&lt;br /&gt;
    @reviewers = BookmarkRatingResponseMap.bookmark_response_report(@id)&lt;br /&gt;
    @topics = @assignment.sign_up_topics&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
:app/models/bookmark_rating_response_map.rb&lt;br /&gt;
    class BookmarkRatingResponseMap &amp;lt; ReviewResponseMap&lt;br /&gt;
    &lt;br /&gt;
    def self.bookmark_response_report(id)&lt;br /&gt;
      BookmarkRatingResponseMap.select(&amp;quot;DISTINCT reviewer_id&amp;quot;).where(&amp;quot;reviewed_object_id = ?&amp;quot;, id)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
:app/views/reports/_bookmark_rating_report.html.erb&lt;br /&gt;
    &amp;lt;%= create_report_table_header(&amp;quot;Reviewed By&amp;quot; =&amp;gt; &amp;quot;16%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Topic&amp;quot; =&amp;gt; &amp;quot;14%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Bookmark Review&amp;quot; =&amp;gt; &amp;quot;20%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Submitted By&amp;quot; =&amp;gt; &amp;quot;20%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Last reviewed at&amp;quot; =&amp;gt; &amp;quot;20%&amp;quot;) %&amp;gt;&lt;br /&gt;
    &amp;lt;%@l = -1 %&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;% @reviewers.each do |r| %&amp;gt;&lt;br /&gt;
      &amp;lt;% @user = User.find(Participant.find(r.reviewer_id).user_id) %&amp;gt;&lt;br /&gt;
      &amp;lt;% @bookmark_rating_response_maps = BookmarkRatingResponseMap.where(reviewer_id: r.reviewer_id, reviewed_object_id: @id) %&amp;gt;&lt;br /&gt;
      &amp;lt;!-- Find only valid responses from this user --&amp;gt;&lt;br /&gt;
      &amp;lt;% maps = @bookmark_rating_response_maps.select { |m| !Response.where(map_id: m.id).first.blank? and m.reviewee and m.reviewee.user_id != @user.id }%&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
      &amp;lt;%@l = @l+1 %&amp;gt;&lt;br /&gt;
      &amp;lt;% (@l % 2 == 0) ? @bgcolor = &amp;quot;#ffffff&amp;quot; : @bgcolor = &amp;quot;#f9f9f9&amp;quot; %&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
      &amp;lt;% if maps.count &amp;gt; 0 %&amp;gt;&lt;br /&gt;
          &amp;lt;!--Reviewer--&amp;gt;&lt;br /&gt;
        &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt; rowspan= &amp;lt;%= maps.count %&amp;gt;&amp;gt;&lt;br /&gt;
          &amp;lt;% @reviewer_name = @user.fullname(session[:ip]) %&amp;gt;&lt;br /&gt;
          &amp;lt;%= link_to @reviewer_name, :controller =&amp;gt; 'popup', :action =&amp;gt; 'reviewer_details_popup', :id =&amp;gt; r.reviewer_id, :assignment_id =&amp;gt; @id %&amp;gt;&lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
        &amp;lt;% maps.each do |map| %&amp;gt;&lt;br /&gt;
          &amp;lt;% @reviewee = map.reviewee %&amp;gt;&lt;br /&gt;
            &amp;lt;!-- Topic --&amp;gt;&lt;br /&gt;
            &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt;  align=&amp;quot;left&amp;quot; colspan=1&amp;gt;&lt;br /&gt;
              &amp;lt;% topic = SignUpTopic.find(@reviewee.topic_id) %&amp;gt;&lt;br /&gt;
              &amp;lt;%= topic.topic_name %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
            &amp;lt;!-- Bookmarks reviewed--&amp;gt;&lt;br /&gt;
            &amp;lt;td id = &amp;quot;green&amp;quot; bgcolor=&amp;lt;%= @bgcolor %&amp;gt; align=&amp;quot;left&amp;quot; colspan=1&amp;gt;&lt;br /&gt;
              &amp;lt;%= link_to @reviewee.title, {:controller =&amp;gt; 'response', :action =&amp;gt; 'view', :id =&amp;gt; map.response.last.id}, :title =&amp;gt; &amp;quot;Click here to view this bookmark review&amp;quot; %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
            &amp;lt;!-- Submitted by--&amp;gt;&lt;br /&gt;
            &amp;lt;td id = &amp;quot;green&amp;quot; bgcolor=&amp;lt;%= @bgcolor %&amp;gt; style=&amp;quot;color:#DD3300&amp;quot; align=&amp;quot;left&amp;quot; colspan=1&amp;gt;&lt;br /&gt;
              &amp;lt;% reviewed_by_user = User.find(@reviewee.user_id).name %&amp;gt;&lt;br /&gt;
              &amp;lt;%= link_to reviewed_by_user, impersonate_impersonate_path(:user =&amp;gt; {:name =&amp;gt; reviewed_by_user}), :method =&amp;gt; :post, :title =&amp;gt; &amp;quot;Click here to impersonate this user&amp;quot; %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
            &amp;lt;!--Last reviewed at--&amp;gt;&lt;br /&gt;
            &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt; align=&amp;quot;left&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;% @bookmark_review_response = Response.where(map_id: map.id).first %&amp;gt;&lt;br /&gt;
              &amp;lt;%= @bookmark_review_response.updated_at.to_time.strftime(&amp;quot;%m/%d/%Y - %I:%M%p&amp;quot;) %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/reports/_searchbox.html.erb&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;lt;option value='BookmarkRatingResponseMap' &amp;gt;&lt;br /&gt;
      Bookmark Review Report&lt;br /&gt;
    &amp;lt;/option&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;lt;% elsif @type == &amp;quot;BookmarkReviewResponseMap&amp;quot; %&amp;gt;&lt;br /&gt;
        &amp;lt;nowiki&amp;gt;&amp;lt;h1&amp;gt; Bookmark review report for &amp;lt;%= @assignment.name%&amp;gt; &amp;lt;/h1&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:app/views/reports/response_report.html.haml&lt;br /&gt;
    - elsif @type == &amp;quot;BookmarkRatingResponseMap&amp;quot;&lt;br /&gt;
       = render :partial =&amp;gt; 'bookmark_rating_report'&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/10/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
&lt;br /&gt;
* Create a Bookmark Questionnaire&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Questionnaires.&lt;br /&gt;
# Find 'Bookmark Rating' and click the '+' to create a new questionnaire.&lt;br /&gt;
# Give a name for this questionnaire, leave the min and max score at 0 and 5 respectively, and click 'Create'.&lt;br /&gt;
# Go to Manage &amp;gt; Questionnaires and click on 'Bookmark Rating' to view all of the questionnaires. Click the edit icon for the questionnaire you just created.&lt;br /&gt;
# Select 'Add 1 more Criterion question(s)'. &lt;br /&gt;
# For the question, enter &amp;quot;Does this bookmark appear to have been used by the author?&amp;quot; and leave the other fields blank. This question will be helpful in determining how useful the bookmark was.&lt;br /&gt;
# Click 'Save bookmark rating questionnaire'. Now this questionnaire can be used in assignments.&lt;br /&gt;
&lt;br /&gt;
* Enable Bookmarks&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Choose an assignment that will be used for testing and have bookmarks enabled and select the edit icon under Actions.&lt;br /&gt;
# Under Topics Tab select 'Allow participants to create bookmarks?'.&lt;br /&gt;
# Go to Rubrics tab, under 'Bookmark Rating' select the Bookmark review questionnaire that was previously created to use for reviewing the bookmarks.&lt;br /&gt;
&lt;br /&gt;
* Add a Bookmark to a Topic&lt;br /&gt;
# Log in as a student who is a participant of the assignment with bookmarks enabled and select that assignment.&lt;br /&gt;
# Select a &amp;quot;Signup sheet&amp;quot; to see the list of available topics.&lt;br /&gt;
# Choose a topic and select the 'Add bookmark to topic' icon from the Bookmarks column. The 'Add bookmark to topic' icon has a '+' sign. &lt;br /&gt;
# Fill in all the fields for the bookmark, including Title, Url, and Description and click 'Add new bookmark'.&lt;br /&gt;
# You should now see a page listing all bookmarks for this topic.&lt;br /&gt;
   &lt;br /&gt;
* Viewing all Bookmarks for a Topic&lt;br /&gt;
# Log in as a student who is a participant of the assignment with bookmarks enabled (or an instructor) and select that assignment.&lt;br /&gt;
# Select a &amp;quot;Signup sheet&amp;quot; to see the list of available topics.&lt;br /&gt;
# The number of bookmarks for each topic should be displayed visually inside the 'View topic bookmarks' icon in the bookmarks column.&lt;br /&gt;
# Click the 'View topic bookmarks icon' to see a list of all bookmarks for this topic.&lt;br /&gt;
&lt;br /&gt;
* Editing and Destroying Bookmarks for a Topic&lt;br /&gt;
# Perform this test with each of the following users: an instructor, a user who is assigned to the topic, and a teammate of the user who is assigned to the topic.&lt;br /&gt;
## Log in with the user and select the assignment with bookmarks enabled.&lt;br /&gt;
## Select a &amp;quot;Signup sheet&amp;quot; to see the list of available topics.&lt;br /&gt;
## Click the 'View topic bookmarks icon' to see a list of all bookmarks for this topic.&lt;br /&gt;
## The user should see links to 'Edit Bookmark' and 'Destroy Bookmark' next to a bookmark only if the user is an instructor, the user submitted the bookmark, or the user is a teammate of the user who submitted the bookmark.&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
The current version of Expertiza does not have any tests for the bookmark controller or model. We intend on adding comprehensive RSpec tests for all changes we have added to controller classes and unit tests for model classes.&lt;br /&gt;
&lt;br /&gt;
===Code Coverage===&lt;br /&gt;
&lt;br /&gt;
=='''Application Deployment'''==&lt;br /&gt;
 &lt;br /&gt;
This web application deployed on VCL is located at [http://152.46.17.220:8080 http://152.46.17.220:8080]&lt;br /&gt;
&lt;br /&gt;
Note: To aid in testing, we have created an assignment called &amp;quot;Bookmarks Test Assignment&amp;quot; as instructor6. The students assigned to this assignment include student7339, student7340, and student7341.&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
1. [https://github.com/expertiza/expertiza/ Expertiza on GitHub]&lt;br /&gt;
&lt;br /&gt;
2. [https://github.com/hosungh/expertiza/ Forked GitHub Repo]&lt;br /&gt;
&lt;br /&gt;
3. [http://152.46.17.220:8080 Deployed Application]&lt;br /&gt;
&lt;br /&gt;
4. [https://github.com/expertiza/expertiza/pull/1704/ Beta Branch Pull Request]&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2005._Bookmark_enhancements&amp;diff=131954</id>
		<title>CSC/ECE 517 Spring 2020 - E2005. Bookmark enhancements</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2005._Bookmark_enhancements&amp;diff=131954"/>
		<updated>2020-03-23T23:34:30Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: /* Code Modifications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==&amp;lt;b&amp;gt;E2005. Bookmark Enhancements&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open-source project that is built using the [http://rubyonrails.org/ Ruby on Rails] framework. At its core, it is a highly versatile tool that academic institutions can use to craft learning objectives centered around team projects, peer reviews, and highly-customizable assignments.&lt;br /&gt;
&lt;br /&gt;
=='''Problem Statement'''==&lt;br /&gt;
The purpose of this project was to add meaningful enhancements and fixes to the bookmark feature in Expertiza, entities that can be attached to a topic to aid the authors who decide to take on a certain assignment. While the major functionality of the bookmark feature was already present by the time the team embarked on this project (most notably the ability to create/edit and rate bookmarks), many desired functions were conveniently broken or left out.&lt;br /&gt;
&lt;br /&gt;
===Completed Stories===&lt;br /&gt;
Below is a breakdown of the stories that were drawn up and completed for this project:&lt;br /&gt;
&lt;br /&gt;
1. Need a way to view all responses to the bookmark questionnaires.&lt;br /&gt;
&lt;br /&gt;
2. Modify permissions for deleting bookmarks.The person who creates the bookmark, the team for whom the bookmark is meant, and the instructor, should be able to delete.&lt;br /&gt;
&lt;br /&gt;
3. &amp;quot;View bookmarks&amp;quot; link on student_task/view breaks if the student has not selected a topic yet.&lt;br /&gt;
&lt;br /&gt;
4. Bookmark rating questionnaire should include question asking the reviewer whether or not the bookmark appears to have been used by the author. Get the bookmark questionnaire functioning and add to the bookmark list page.&lt;br /&gt;
&lt;br /&gt;
5. Fix issue in which users should not be able to review their own bookmark using the questionnaire, but currently can.&lt;br /&gt;
&lt;br /&gt;
6. Add a number next to/inside the icon with the number of current bookmark in order to make it clear whether a bookmark exists for a topic.&lt;br /&gt;
&lt;br /&gt;
7. Add a &amp;quot;View bookmarks&amp;quot; link to the assignment view page for easier access.&lt;br /&gt;
&lt;br /&gt;
8. Add rating to the bookmark questionnaire and use that rating to calculate the average instead of using the current dropdown.&lt;br /&gt;
&lt;br /&gt;
9. A student should not be able to rate his/her own bookmark.&lt;br /&gt;
&lt;br /&gt;
10. Add URL to bookmark list for assignment topic on the assignment page, to make viewing bookmarks easier.&lt;br /&gt;
&lt;br /&gt;
11. Instructors cannot currently see bookmarks (gets an error message saying instructors cannot create bookmarks). &lt;br /&gt;
&lt;br /&gt;
12. &amp;quot;Back&amp;quot; button from Bookmarks list is broken.&lt;br /&gt;
&lt;br /&gt;
13. When creating a bookmark with an empty description field, the notice says the bookmark was successfully created even though it fails.&lt;br /&gt;
&lt;br /&gt;
14. &amp;quot;Bookmark ratings&amp;quot; should be a type of rubric when you go to Manage &amp;gt; Questionnaires. Although 'Bookmark Rating' is already a type of rubric, it isn't listed when hovering over Manage... &amp;gt; Questionnaires &lt;br /&gt;
&lt;br /&gt;
15. Create a way to mark a bookmark that was rated to be helpful by all reviewers, on average. &lt;br /&gt;
&lt;br /&gt;
16. Students can add/view bookmarks when &amp;quot;Allow participants to create bookmarks?&amp;quot; box is unchecked for the assignment.&lt;br /&gt;
&lt;br /&gt;
=='''Code Modifications'''==&lt;br /&gt;
&lt;br /&gt;
'''Fix the &amp;quot;Back&amp;quot; button:'''&lt;br /&gt;
When either backing out of creating or viewing/editing a bookmark, the back functionality does not work, both prompting errors. Issue has been fixed and users can once again go back to the appropriate page.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;%= link_to 'Back', '#', :onclick =&amp;gt; 'pageBack()' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    function pageBack() {&lt;br /&gt;
  	history.back()&lt;br /&gt;
    }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/new.html.erb &lt;br /&gt;
    &amp;lt;%= link_to 'Back', '#', :onclick =&amp;gt; 'pageBack()' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    function pageBack() {&lt;br /&gt;
  	history.back()&lt;br /&gt;
    }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/edit.html.erb&lt;br /&gt;
    &amp;lt;%= link_to 'Back', '#', :onclick =&amp;gt; 'pageBack()' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    function pageBack() {&lt;br /&gt;
  	history.back()&lt;br /&gt;
    }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/2?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Commit for &amp;quot;Back&amp;quot; capability when updating bookmark can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/4?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Check whether text field is present when creating/updating bookmark:'''&lt;br /&gt;
Previously, when a bookmark was created/updated and the corresponding &amp;quot;Title&amp;quot;, &amp;quot;URL&amp;quot;, or &amp;quot;Description&amp;quot; text fields were not filled in, the bookmark was not created or updated sans any error or warning. In fact, the user would be taken to the list of bookmarks available, forcing him/her to go back to the page corresponding to the bookmark create/edit page. This fix prompts users with an error indicating which text field needs to be filled in in order to fulfill the particular bookmark create/edit function.&lt;br /&gt;
&lt;br /&gt;
[[File:CheckFieldsTitle.png]][[File:CheckFieldsUrl.png]][[File:CheckFieldsDescription.png]] &lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/new.html.erb&lt;br /&gt;
      &amp;lt;%= label_tag 'Title' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= text_field_tag :title, params[:title], :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag 'Url' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= text_field_tag :url, params[:url], :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag 'Description' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= text_area_tag :description, params[:description], :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/edit.html.erb&lt;br /&gt;
      &amp;lt;%= label_tag 'Title' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.text_field :title, :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag 'Url' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.text_field :url, :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag 'Description' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.text_area :description, :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/4?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Change average bookmark rating to be based on questionnaire:'''&lt;br /&gt;
The rating system for the bookmarks before these changes were elementary in nature - there was a drop-down menu to choose your particular rating for a bookmark while there was an average calculator just to the left of the aforementioned column. The new changes introduced allows the &amp;quot;Your rating&amp;quot; and &amp;quot;Avg. rating&amp;quot; columns for a particular bookmark to be calculated based on the scores given to the various questions present in a given bookmark questionnaire. The &amp;quot;Avg. rating&amp;quot; is calculated based on the mean rating of all the bookmark questionnaires scored by every reviewer while &amp;quot;Your rating&amp;quot; is simply the mean of the scores that you (the user) gave to all the questions on the questionnaire.&lt;br /&gt;
&lt;br /&gt;
[[File:BookmarkAvgRatings.png]]&lt;br /&gt;
&lt;br /&gt;
Qustionnaire for fourth bookmark listed above (do your own calculation to find the mean for 'Your rating'):&lt;br /&gt;
&lt;br /&gt;
[[File:QuestionnaireForLastBookmark.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/controllers/bookmarks_controller.rb&lt;br /&gt;
    helper_method :specific_average_score&lt;br /&gt;
    helper_method :total_average_score&lt;br /&gt;
&lt;br /&gt;
    def specific_average_score(bookmark)&lt;br /&gt;
        if bookmark.nil?&lt;br /&gt;
            return '-'&lt;br /&gt;
        else&lt;br /&gt;
            assessment = SignUpTopic.find(bookmark.topic_id).assignment&lt;br /&gt;
            questions = assessment.questionnaires.where(type: 'BookmarkRatingQuestionnaire').flat_map(&amp;amp;:questions)&lt;br /&gt;
            responses = BookmarkRatingResponseMap.where(&lt;br /&gt;
                reviewed_object_id: assessment.id,&lt;br /&gt;
                reviewee_id: bookmark.id,&lt;br /&gt;
                reviewer_id: AssignmentParticipant.find_by(user_id: current_user.id).id).flat_map {|r| Response.where(map_id: r.id) }&lt;br /&gt;
            score = Answer.get_total_score(response: responses, questions: questions)&lt;br /&gt;
            if score.nil?&lt;br /&gt;
                return '-'&lt;br /&gt;
            else&lt;br /&gt;
                (score * 5.0 / 100.0).round(2)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    def total_average_score(bookmark)&lt;br /&gt;
        if bookmark.nil?&lt;br /&gt;
          return '-'&lt;br /&gt;
        else&lt;br /&gt;
          assessment = SignUpTopic.find(bookmark.topic_id).assignment&lt;br /&gt;
          questions = assessment.questionnaires.where(type: 'BookmarkRatingQuestionnaire').flat_map(&amp;amp;:questions)&lt;br /&gt;
          responses = BookmarkRatingResponseMap.where(&lt;br /&gt;
              reviewed_object_id: assessment.id,&lt;br /&gt;
              reviewee_id: bookmark.id).flat_map {|r| Response.where(map_id: r.id) }&lt;br /&gt;
          totalScore = Answer.compute_scores(responses, questions)&lt;br /&gt;
          if totalScore[:avg].nil?&lt;br /&gt;
              return '-'&lt;br /&gt;
          else&lt;br /&gt;
             (totalScore[:avg] * 5.0 / 100.0).round(2)&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;!-- total average rating --&amp;gt;&lt;br /&gt;
    &amp;lt;% totalAvg = total_average_score(bookmark) %&amp;gt;&lt;br /&gt;
    &amp;lt;% if totalAvg != 0 %&amp;gt;&lt;br /&gt;
        &amp;lt;%= totalAvg %&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- specific average score per user for a rubric --&amp;gt;&lt;br /&gt;
    &amp;lt;% specAvg = specific_average_score(bookmark) %&amp;gt;&lt;br /&gt;
    &amp;lt;% if specAvg != 0 %&amp;gt;&lt;br /&gt;
        &amp;lt;%= specAvg %&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/12?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Addition of badges for exceptionally helpful bookmarks:'''&lt;br /&gt;
Originally, no badge system was setup for bookmarks that have proven to be helpful guides for other students taking on the same project. The new changes introduced allows bookmarks to be attached to bookmarks with exceptionally good average ratings (i.e, above a rating of 3). A badge is signified by a full star while the absence of a badge is represented by an empty star.&lt;br /&gt;
&lt;br /&gt;
[[File:Bookmark list.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;th class=&amp;quot;head&amp;quot;&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
        &amp;lt;!-- badge --&amp;gt;&lt;br /&gt;
        &amp;lt;% if totalAvg.to_f &amp;gt; 3 %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;glyphicon glyphicon-star&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;% else %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;glyphicon glyphicon-star-empty&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/14?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Users cannot rate bookmarks they've uploaded. '''&lt;br /&gt;
We wanted to make sure that users cannot rate bookmarks that they uploaded.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;% unless session[:user].id == bookmark.user_id %&amp;gt;&lt;br /&gt;
      # ... code for rating the bookmarks&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
      &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/1/files?w=1 here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Users cannot review bookmarks they've uploaded using the questionnaire. '''&lt;br /&gt;
We also wanted to make sure that users cannot review bookmarks that they uploaded using the questionnaires.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;% unless session[:user].id == bookmark.user_id %&amp;gt;&lt;br /&gt;
      # ... code for reviewing bookmarks using the questionnaire&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
      &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/5/files?w=1 here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Users should be able to see the number of bookmarks from the topics list. '''&lt;br /&gt;
Previously, users could add bookmarks, but could not tell how many bookmarks were provided for each topic (if any) without clicking the &amp;quot;View bookmarks&amp;quot; icon. This UI change displays the number of bookmarks for the topic inside the view bookmarks icon from the topic list view so that users don't need to click through each topic individually.&lt;br /&gt;
&lt;br /&gt;
[[File:Sign up sheet bookmarks.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
    &amp;lt;nowiki&amp;gt;&amp;lt;p class=&amp;quot;fa fa-stack-2x fa-inverse&amp;quot; style='font-size: 1.0em; padding-top: 2px; font-weight: bold;'&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
      &amp;lt;nowiki&amp;gt;&amp;lt;%= Bookmark.where(topic_id: topic.id).length.to_s %&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    &amp;lt;nowiki&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/6/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''UI changes to make finding your bookmarks easier:'''&lt;br /&gt;
We added a &amp;quot;View Bookmarks&amp;quot; link to the student task view, that takes the student directly to the bookmarks that have been submitted for their topic. This code was then modified such that the link is greyed out if the student does not have a topic, and is hidden if bookmarks are not enabled for the assignment.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/controllers/student_task_controller.rb&lt;br /&gt;
:app/views/student_task/view.html.erb&lt;br /&gt;
     &amp;lt;% if @use_bookmark %&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;li&amp;gt;&amp;gt;&lt;br /&gt;
            &amp;lt;% if @topic_id and @assignment.submission_allowed(@topic_id) %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;View bookmarks&amp;quot;, :controller=&amp;gt;'bookmarks', :action=&amp;gt; 'list', :id =&amp;gt; @topic_id %&amp;gt; (View bookmarks others have submitted for your topic)&lt;br /&gt;
          &amp;lt;% else %&amp;gt;&lt;br /&gt;
            &amp;lt;&amp;lt;nowiki /&amp;gt;font color=&amp;quot;gray&amp;quot;&amp;gt;View bookmarks&amp;lt;/font&amp;gt; (You have to choose a topic first)&lt;br /&gt;
          &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relevant commits can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/commit/04b24b1dedd3414f58f52d394f2a5b9568e83872 here] [https://github.com/hosungh/expertiza/commit/15a775624307651755a70e63625a370478aa63b4 here]&amp;lt;/span&amp;gt; and &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/commit/f144594ae062369754d54288eff8959136510ccc here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Grey out add/view bookmarks link on the topic page if bookmarks are not enabled.''' Previously, students could submit and view bookmarks even if bookmarks were disabled for the assignment. Now these options are hidden.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
  &amp;lt;% if @use_bookmark %&amp;gt;&lt;br /&gt;
    &amp;lt;&amp;lt;nowiki /&amp;gt;%= link_to :controller=&amp;gt;'bookmarks', :action=&amp;gt; 'list', :id =&amp;gt; topic.id do %&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;span class=&amp;quot;fa-stack fa-md&amp;quot; title='View topic bookmarks'&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-bookmark fa-stack-1x fa-2x&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;p class=&amp;quot;fa fa-stack-2x fa-inverse&amp;quot; style='font-size: 1.0em; padding-top: 2px; font-weight: bold;'&amp;gt;&lt;br /&gt;
          &amp;lt;%= Bookmark.where(topic_id: topic.id).length.to_s %&amp;gt;&lt;br /&gt;
          &amp;lt;&amp;lt;nowiki /&amp;gt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;%= link_to :controller=&amp;gt;'bookmarks', :action=&amp;gt; 'new', :id =&amp;gt; topic.id , :assignment_id =&amp;gt; params[:assignment_id] do %&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;span class=&amp;quot;fa-stack fa-md&amp;quot; title='Add bookmark to topic'&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-bookmark fa-stack-1x fa-2x&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-plus fa-stack-1x fa-inverse&amp;quot; style='font-size: .5em'&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;&amp;lt;nowiki /&amp;gt;% else %&amp;gt;&lt;br /&gt;
    &amp;lt;&amp;lt;nowiki /&amp;gt;span class=&amp;quot;fa-stack fa-md&amp;quot; title='View topic bookmarks'&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-bookmark fa-stack-1x fa-2x&amp;quot; style=&amp;quot;opacity: 0.3;&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
   &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/sign_up_sheet/_table_header.html.erb&lt;br /&gt;
  &amp;lt;&amp;lt;nowiki /&amp;gt;th width=&amp;quot;10%&amp;quot;&amp;gt; Bookmarks&lt;br /&gt;
    &amp;lt;% unless @use_bookmark %&amp;gt; (disabled) &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;&amp;lt;nowiki /&amp;gt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Commit can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/commit/f0352ddf441d3773109b2e0208981f3fe122b5df here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Disable-bookmark-links.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Modify Bookmark delete permissions. '''&lt;br /&gt;
Bookmarks should be deletable by the user who created the bookmark, a teammate of the user who provided the bookmark, and the instructor.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
        &amp;lt;!--Edit/Destroy Bookmarks--&amp;gt;&lt;br /&gt;
        &amp;lt;% is_teammate = false %&amp;gt;&lt;br /&gt;
        &amp;lt;% team = SignedUpTeam.find_by(topic_id: @topic.id) rescue nil %&amp;gt;&lt;br /&gt;
        &amp;lt;% if team %&amp;gt;&lt;br /&gt;
          &amp;lt;% teams_users = TeamsUser.where(['team_id = ?', team.team_id]) %&amp;gt;&lt;br /&gt;
          &amp;lt;% is_teammate = teams_users.select {|tu| tu.user_id == session[:user].id}.size &amp;gt; 0  %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% if bookmark.user_id == session[:user].id or is_teammate or ['Instructor'].include? @current_role_name %&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Edit Bookmark', :action =&amp;gt; 'edit', :id =&amp;gt; bookmark.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Destroy Bookmark', bookmark, :confirm =&amp;gt; &amp;quot;Delete bookmark \&amp;quot;#{bookmark.title}\&amp;quot;?&amp;quot;, :method =&amp;gt; :delete %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/13/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Fix the ability to create bookmark questionnaires and use in assignments.'''&lt;br /&gt;
Previously, questionnaires for things like Teammate Reviews could be created and used in assignments. Users could fill these out and the scores would be stored for later reference by TAs and instructors. The questionnaire for bookmark reviews was previously not functional, but now instructors can create new bookmark questionnaires and assign them to assignments. &lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/controllers/questionnaires_controller.rb&lt;br /&gt;
       @questionnaire = Object.const_get(params[:model].split.join).new if Questionnaire::QUESTIONNAIRE_TYPES.include? params[:model].split.join&lt;br /&gt;
        ....&lt;br /&gt;
        if %w[AuthorFeedback CourseSurvey TeammateReview GlobalSurvey AssignmentSurvey BookmarkRating].include?(display_type) &lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
:app/controllers/questionnaires_controller.rb&lt;br /&gt;
    ....&lt;br /&gt;
    when &amp;quot;bookmark&amp;quot;&lt;br /&gt;
      bookmark = Bookmark.find(@map.response_map.reviewee_id)&lt;br /&gt;
      redirect_to controller: 'bookmarks', action: 'list', id: bookmark.topic_id&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;quot;BookmarkRatingResponseMap&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:app/models/bookmark_rating_response_map.rb&lt;br /&gt;
    ....&lt;br /&gt;
    self.assignment.questionnaires.find_by(type: 'BookmarkRatingQuestionnaire')&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    ....&lt;br /&gt;
          &amp;lt;td&amp;gt;&lt;br /&gt;
          &amp;lt;% assignment_participant = AssignmentParticipant.find_by(user_id: session[:user].id) %&amp;gt;&lt;br /&gt;
          &amp;lt;% map = BookmarkRatingResponseMap.where(reviewed_object_id: @topic.assignment.id, reviewer_id: assignment_participant.id, reviewee_id: bookmark.id).first %&amp;gt;&lt;br /&gt;
          &amp;lt;% if map.nil? %&amp;gt;&lt;br /&gt;
            &amp;lt;% map = BookmarkRatingResponseMap.create(reviewed_object_id: @topic.assignment.id, reviewer_id: assignment_participant.id, reviewee_id: bookmark.id) %&amp;gt;&lt;br /&gt;
          &amp;lt;% end %&amp;gt;&lt;br /&gt;
          &amp;lt;% review = map.response.last %&amp;gt;&lt;br /&gt;
          &amp;lt;% if review.nil? %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;Review&amp;quot;, {:controller =&amp;gt; 'response', :action =&amp;gt; 'new', :id =&amp;gt; map.map_id, :return =&amp;gt; &amp;quot;bookmark&amp;quot;} %&amp;gt;&lt;br /&gt;
          &amp;lt;% else %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;View&amp;quot;, {:controller =&amp;gt; 'response', :action =&amp;gt; 'view', :id =&amp;gt; review.id} %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;Edit&amp;quot;, {:controller =&amp;gt; 'response', :action =&amp;gt; 'edit', :id =&amp;gt; review.id, :return =&amp;gt; &amp;quot;bookmark&amp;quot;} %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;nowiki&amp;gt;&amp;lt;% if bookmark.user_id == session[:user].id %&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Edit', :action =&amp;gt; 'edit', :id =&amp;gt; bookmark.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Destroy', bookmark, :confirm =&amp;gt; &amp;quot;Delete bookmark \&amp;quot;#{bookmark.title}\&amp;quot;?&amp;quot;, :method =&amp;gt; :delete %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Edit Bookmark', :action =&amp;gt; 'edit', :id =&amp;gt; bookmark.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Destroy Bookmark', bookmark, :confirm =&amp;gt; &amp;quot;Delete bookmark \&amp;quot;#{bookmark.title}\&amp;quot;?&amp;quot;, :method =&amp;gt; :delete %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/response/view.html.erb&lt;br /&gt;
    &amp;lt;% if !(@map.instance_of? TeammateReviewResponseMap) &amp;amp;&amp;amp; !@map.survey? &amp;amp;&amp;amp; !(@map.instance_of? BookmarkRatingResponseMap) %&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/3/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Instructors should have the ability to view all bookmark responses. '''&lt;br /&gt;
Instructors should have a way to view all the responses to the bookmark questionnaires so that can see which bookmarks provided were deemed useful.&lt;br /&gt;
&lt;br /&gt;
[[File:Bookmark response list.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/helpers/report_formatter_helper.rb&lt;br /&gt;
  def bookmark_rating_response_map(params, _session = nil)&lt;br /&gt;
    assign_basics(params)&lt;br /&gt;
    @reviewers = BookmarkRatingResponseMap.bookmark_response_report(@id)&lt;br /&gt;
    @topics = @assignment.sign_up_topics&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
:app/models/bookmark_rating_response_map.rb&lt;br /&gt;
    class BookmarkRatingResponseMap &amp;lt; ReviewResponseMap&lt;br /&gt;
    &lt;br /&gt;
    def self.bookmark_response_report(id)&lt;br /&gt;
      BookmarkRatingResponseMap.select(&amp;quot;DISTINCT reviewer_id&amp;quot;).where(&amp;quot;reviewed_object_id = ?&amp;quot;, id)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
:app/views/reports/_bookmark_rating_report.html.erb&lt;br /&gt;
    &amp;lt;%= create_report_table_header(&amp;quot;Reviewed By&amp;quot; =&amp;gt; &amp;quot;16%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Topic&amp;quot; =&amp;gt; &amp;quot;14%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Bookmark Review&amp;quot; =&amp;gt; &amp;quot;20%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Submitted By&amp;quot; =&amp;gt; &amp;quot;20%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Last reviewed at&amp;quot; =&amp;gt; &amp;quot;20%&amp;quot;) %&amp;gt;&lt;br /&gt;
    &amp;lt;%@l = -1 %&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;% @reviewers.each do |r| %&amp;gt;&lt;br /&gt;
      &amp;lt;% @user = User.find(Participant.find(r.reviewer_id).user_id) %&amp;gt;&lt;br /&gt;
      &amp;lt;% @bookmark_rating_response_maps = BookmarkRatingResponseMap.where(reviewer_id: r.reviewer_id, reviewed_object_id: @id) %&amp;gt;&lt;br /&gt;
      &amp;lt;!-- Find only valid responses from this user --&amp;gt;&lt;br /&gt;
      &amp;lt;% maps = @bookmark_rating_response_maps.select { |m| !Response.where(map_id: m.id).first.blank? and m.reviewee and m.reviewee.user_id != @user.id }%&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
      &amp;lt;%@l = @l+1 %&amp;gt;&lt;br /&gt;
      &amp;lt;% (@l % 2 == 0) ? @bgcolor = &amp;quot;#ffffff&amp;quot; : @bgcolor = &amp;quot;#f9f9f9&amp;quot; %&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
      &amp;lt;% if maps.count &amp;gt; 0 %&amp;gt;&lt;br /&gt;
          &amp;lt;!--Reviewer--&amp;gt;&lt;br /&gt;
        &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt; rowspan= &amp;lt;%= maps.count %&amp;gt;&amp;gt;&lt;br /&gt;
          &amp;lt;% @reviewer_name = @user.fullname(session[:ip]) %&amp;gt;&lt;br /&gt;
          &amp;lt;%= link_to @reviewer_name, :controller =&amp;gt; 'popup', :action =&amp;gt; 'reviewer_details_popup', :id =&amp;gt; r.reviewer_id, :assignment_id =&amp;gt; @id %&amp;gt;&lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
        &amp;lt;% maps.each do |map| %&amp;gt;&lt;br /&gt;
          &amp;lt;% @reviewee = map.reviewee %&amp;gt;&lt;br /&gt;
            &amp;lt;!-- Topic --&amp;gt;&lt;br /&gt;
            &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt;  align=&amp;quot;left&amp;quot; colspan=1&amp;gt;&lt;br /&gt;
              &amp;lt;% topic = SignUpTopic.find(@reviewee.topic_id) %&amp;gt;&lt;br /&gt;
              &amp;lt;%= topic.topic_name %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
            &amp;lt;!-- Bookmarks reviewed--&amp;gt;&lt;br /&gt;
            &amp;lt;td id = &amp;quot;green&amp;quot; bgcolor=&amp;lt;%= @bgcolor %&amp;gt; align=&amp;quot;left&amp;quot; colspan=1&amp;gt;&lt;br /&gt;
              &amp;lt;%= link_to @reviewee.title, {:controller =&amp;gt; 'response', :action =&amp;gt; 'view', :id =&amp;gt; map.response.last.id}, :title =&amp;gt; &amp;quot;Click here to view this bookmark review&amp;quot; %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
            &amp;lt;!-- Submitted by--&amp;gt;&lt;br /&gt;
            &amp;lt;td id = &amp;quot;green&amp;quot; bgcolor=&amp;lt;%= @bgcolor %&amp;gt; style=&amp;quot;color:#DD3300&amp;quot; align=&amp;quot;left&amp;quot; colspan=1&amp;gt;&lt;br /&gt;
              &amp;lt;% reviewed_by_user = User.find(@reviewee.user_id).name %&amp;gt;&lt;br /&gt;
              &amp;lt;%= link_to reviewed_by_user, impersonate_impersonate_path(:user =&amp;gt; {:name =&amp;gt; reviewed_by_user}), :method =&amp;gt; :post, :title =&amp;gt; &amp;quot;Click here to impersonate this user&amp;quot; %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
            &amp;lt;!--Last reviewed at--&amp;gt;&lt;br /&gt;
            &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt; align=&amp;quot;left&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;% @bookmark_review_response = Response.where(map_id: map.id).first %&amp;gt;&lt;br /&gt;
              &amp;lt;%= @bookmark_review_response.updated_at.to_time.strftime(&amp;quot;%m/%d/%Y - %I:%M%p&amp;quot;) %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/reports/_searchbox.html.erb&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;lt;option value='BookmarkRatingResponseMap' &amp;gt;&lt;br /&gt;
      Bookmark Review Report&lt;br /&gt;
    &amp;lt;/option&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;lt;% elsif @type == &amp;quot;BookmarkReviewResponseMap&amp;quot; %&amp;gt;&lt;br /&gt;
        &amp;lt;nowiki&amp;gt;&amp;lt;h1&amp;gt; Bookmark review report for &amp;lt;%= @assignment.name%&amp;gt; &amp;lt;/h1&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:app/views/reports/response_report.html.haml&lt;br /&gt;
    - elsif @type == &amp;quot;BookmarkRatingResponseMap&amp;quot;&lt;br /&gt;
       = render :partial =&amp;gt; 'bookmark_rating_report'&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/10/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
&lt;br /&gt;
* Create a Bookmark Questionnaire&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Questionnaires.&lt;br /&gt;
# Find 'Bookmark Rating' and click the '+' to create a new questionnaire.&lt;br /&gt;
# Give a name for this questionnaire, leave the min and max score at 0 and 5 respectively, and click 'Create'.&lt;br /&gt;
# Go to Manage &amp;gt; Questionnaires and click on 'Bookmark Rating' to view all of the questionnaires. Click the edit icon for the questionnaire you just created.&lt;br /&gt;
# Select 'Add 1 more Criterion question(s)'. &lt;br /&gt;
# For the question, enter &amp;quot;Does this bookmark appear to have been used by the author?&amp;quot; and leave the other fields blank. This question will be helpful in determining how useful the bookmark was.&lt;br /&gt;
# Click 'Save bookmark rating questionnaire'. Now this questionnaire can be used in assignments.&lt;br /&gt;
&lt;br /&gt;
* Enable Bookmarks&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Choose an assignment that will be used for testing and have bookmarks enabled and select the edit icon under Actions.&lt;br /&gt;
# Under Topics Tab select 'Allow participants to create bookmarks?'.&lt;br /&gt;
# Go to Rubrics tab, under 'Bookmark Rating' select the Bookmark review questionnaire that was previously created to use for reviewing the bookmarks.&lt;br /&gt;
&lt;br /&gt;
* Add a Bookmark to a Topic&lt;br /&gt;
# Log in as a student who is a participant of the assignment with bookmarks enabled and select that assignment.&lt;br /&gt;
# Select a &amp;quot;Signup sheet&amp;quot; to see the list of available topics.&lt;br /&gt;
# Choose a topic and select the 'Add bookmark to topic' icon from the Bookmarks column. The 'Add bookmark to topic' icon has a '+' sign. &lt;br /&gt;
# Fill in all the fields for the bookmark, including Title, Url, and Description and click 'Add new bookmark'.&lt;br /&gt;
# You should now see a page listing all bookmarks for this topic.&lt;br /&gt;
   &lt;br /&gt;
* Viewing all Bookmarks for a Topic&lt;br /&gt;
# Log in as a student who is a participant of the assignment with bookmarks enabled (or an instructor) and select that assignment.&lt;br /&gt;
# Select a &amp;quot;Signup sheet&amp;quot; to see the list of available topics.&lt;br /&gt;
# The number of bookmarks for each topic should be displayed visually inside the 'View topic bookmarks' icon in the bookmarks column.&lt;br /&gt;
# Click the 'View topic bookmarks icon' to see a list of all bookmarks for this topic.&lt;br /&gt;
&lt;br /&gt;
* Editing and Destroying Bookmarks for a Topic&lt;br /&gt;
# Perform this test with each of the following users: an instructor, a user who is assigned to the topic, and a teammate of the user who is assigned to the topic.&lt;br /&gt;
## Log in with the user and select the assignment with bookmarks enabled.&lt;br /&gt;
## Select a &amp;quot;Signup sheet&amp;quot; to see the list of available topics.&lt;br /&gt;
## Click the 'View topic bookmarks icon' to see a list of all bookmarks for this topic.&lt;br /&gt;
## The user should see links to 'Edit Bookmark' and 'Destroy Bookmark' next to a bookmark only if the user is an instructor, the user submitted the bookmark, or the user is a teammate of the user who submitted the bookmark.&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
The current version of Expertiza does not have any tests for the bookmark controller or model. We intend on adding comprehensive RSpec tests for all changes we have added to controller classes and unit tests for model classes.&lt;br /&gt;
&lt;br /&gt;
===Code Coverage===&lt;br /&gt;
&lt;br /&gt;
=='''Application Deployment'''==&lt;br /&gt;
 &lt;br /&gt;
This web application deployed on VCL is located at [http://152.46.17.220:8080 http://152.46.17.220:8080]&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
1. [https://github.com/expertiza/expertiza/ Expertiza on GitHub]&lt;br /&gt;
&lt;br /&gt;
2. [https://github.com/hosungh/expertiza/ Forked GitHub Repo]&lt;br /&gt;
&lt;br /&gt;
3. [http://152.46.17.220:8080 Deployed Application]&lt;br /&gt;
&lt;br /&gt;
4. [https://github.com/expertiza/expertiza/pull/1704/ Beta Branch Pull Request]&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2005._Bookmark_enhancements&amp;diff=131952</id>
		<title>CSC/ECE 517 Spring 2020 - E2005. Bookmark enhancements</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2005._Bookmark_enhancements&amp;diff=131952"/>
		<updated>2020-03-23T23:33:02Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: /* Code Modifications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==&amp;lt;b&amp;gt;E2005. Bookmark Enhancements&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open-source project that is built using the [http://rubyonrails.org/ Ruby on Rails] framework. At its core, it is a highly versatile tool that academic institutions can use to craft learning objectives centered around team projects, peer reviews, and highly-customizable assignments.&lt;br /&gt;
&lt;br /&gt;
=='''Problem Statement'''==&lt;br /&gt;
The purpose of this project was to add meaningful enhancements and fixes to the bookmark feature in Expertiza, entities that can be attached to a topic to aid the authors who decide to take on a certain assignment. While the major functionality of the bookmark feature was already present by the time the team embarked on this project (most notably the ability to create/edit and rate bookmarks), many desired functions were conveniently broken or left out.&lt;br /&gt;
&lt;br /&gt;
===Completed Stories===&lt;br /&gt;
Below is a breakdown of the stories that were drawn up and completed for this project:&lt;br /&gt;
&lt;br /&gt;
1. Need a way to view all responses to the bookmark questionnaires.&lt;br /&gt;
&lt;br /&gt;
2. Modify permissions for deleting bookmarks.The person who creates the bookmark, the team for whom the bookmark is meant, and the instructor, should be able to delete.&lt;br /&gt;
&lt;br /&gt;
3. &amp;quot;View bookmarks&amp;quot; link on student_task/view breaks if the student has not selected a topic yet.&lt;br /&gt;
&lt;br /&gt;
4. Bookmark rating questionnaire should include question asking the reviewer whether or not the bookmark appears to have been used by the author. Get the bookmark questionnaire functioning and add to the bookmark list page.&lt;br /&gt;
&lt;br /&gt;
5. Fix issue in which users should not be able to review their own bookmark using the questionnaire, but currently can.&lt;br /&gt;
&lt;br /&gt;
6. Add a number next to/inside the icon with the number of current bookmark in order to make it clear whether a bookmark exists for a topic.&lt;br /&gt;
&lt;br /&gt;
7. Add a &amp;quot;View bookmarks&amp;quot; link to the assignment view page for easier access.&lt;br /&gt;
&lt;br /&gt;
8. Add rating to the bookmark questionnaire and use that rating to calculate the average instead of using the current dropdown.&lt;br /&gt;
&lt;br /&gt;
9. A student should not be able to rate his/her own bookmark.&lt;br /&gt;
&lt;br /&gt;
10. Add URL to bookmark list for assignment topic on the assignment page, to make viewing bookmarks easier.&lt;br /&gt;
&lt;br /&gt;
11. Instructors cannot currently see bookmarks (gets an error message saying instructors cannot create bookmarks). &lt;br /&gt;
&lt;br /&gt;
12. &amp;quot;Back&amp;quot; button from Bookmarks list is broken.&lt;br /&gt;
&lt;br /&gt;
13. When creating a bookmark with an empty description field, the notice says the bookmark was successfully created even though it fails.&lt;br /&gt;
&lt;br /&gt;
14. &amp;quot;Bookmark ratings&amp;quot; should be a type of rubric when you go to Manage &amp;gt; Questionnaires. Although 'Bookmark Rating' is already a type of rubric, it isn't listed when hovering over Manage... &amp;gt; Questionnaires &lt;br /&gt;
&lt;br /&gt;
15. Create a way to mark a bookmark that was rated to be helpful by all reviewers, on average. &lt;br /&gt;
&lt;br /&gt;
16. Students can add/view bookmarks when &amp;quot;Allow participants to create bookmarks?&amp;quot; box is unchecked for the assignment.&lt;br /&gt;
&lt;br /&gt;
=='''Code Modifications'''==&lt;br /&gt;
&lt;br /&gt;
'''Fix the &amp;quot;Back&amp;quot; button:'''&lt;br /&gt;
When either backing out of creating or viewing/editing a bookmark, the back functionality does not work, both prompting errors. Issue has been fixed and users can once again go back to the appropriate page.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;%= link_to 'Back', '#', :onclick =&amp;gt; 'pageBack()' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    function pageBack() {&lt;br /&gt;
  	history.back()&lt;br /&gt;
    }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/new.html.erb &lt;br /&gt;
    &amp;lt;%= link_to 'Back', '#', :onclick =&amp;gt; 'pageBack()' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    function pageBack() {&lt;br /&gt;
  	history.back()&lt;br /&gt;
    }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/edit.html.erb&lt;br /&gt;
    &amp;lt;%= link_to 'Back', '#', :onclick =&amp;gt; 'pageBack()' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    function pageBack() {&lt;br /&gt;
  	history.back()&lt;br /&gt;
    }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/2?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Commit for &amp;quot;Back&amp;quot; capability when updating bookmark can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/4?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Check whether text field is present when creating/updating bookmark:'''&lt;br /&gt;
Previously, when a bookmark was created/updated and the corresponding &amp;quot;Title&amp;quot;, &amp;quot;URL&amp;quot;, or &amp;quot;Description&amp;quot; text fields were not filled in, the bookmark was not created or updated sans any error or warning. In fact, the user would be taken to the list of bookmarks available, forcing him/her to go back to the page corresponding to the bookmark create/edit page. This fix prompts users with an error indicating which text field needs to be filled in in order to fulfill the particular bookmark create/edit function.&lt;br /&gt;
&lt;br /&gt;
[[File:CheckFieldsTitle.png]][[File:CheckFieldsUrl.png]][[File:CheckFieldsDescription.png]] &lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/new.html.erb&lt;br /&gt;
      &amp;lt;%= label_tag 'Title' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= text_field_tag :title, params[:title], :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag 'Url' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= text_field_tag :url, params[:url], :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag 'Description' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= text_area_tag :description, params[:description], :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/edit.html.erb&lt;br /&gt;
      &amp;lt;%= label_tag 'Title' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.text_field :title, :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag 'Url' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.text_field :url, :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag 'Description' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.text_area :description, :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/4?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Change average bookmark rating to be based on questionnaire:'''&lt;br /&gt;
The rating system for the bookmarks before these changes were elementary in nature - there was a drop-down menu to choose your particular rating for a bookmark while there was an average calculator just to the left of the aforementioned column. The new changes introduced allows the &amp;quot;Your rating&amp;quot; and &amp;quot;Avg. rating&amp;quot; columns for a particular bookmark to be calculated based on the scores given to the various questions present in a given bookmark questionnaire. The &amp;quot;Avg. rating&amp;quot; is calculated based on the mean rating of all the bookmark questionnaires scored by every reviewer while &amp;quot;Your rating&amp;quot; is simply the mean of the scores that you (the user) gave to all the questions on the questionnaire.&lt;br /&gt;
&lt;br /&gt;
[[File:BookmarkAvgRatings.png]]&lt;br /&gt;
&lt;br /&gt;
Qustionnaire for fourth bookmark listed above (do your own calculation to find the mean):&lt;br /&gt;
&lt;br /&gt;
[[File:QuestionnaireForLastBookmark.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/controllers/bookmarks_controller.rb&lt;br /&gt;
    helper_method :specific_average_score&lt;br /&gt;
    helper_method :total_average_score&lt;br /&gt;
&lt;br /&gt;
    def specific_average_score(bookmark)&lt;br /&gt;
        if bookmark.nil?&lt;br /&gt;
            return '-'&lt;br /&gt;
        else&lt;br /&gt;
            assessment = SignUpTopic.find(bookmark.topic_id).assignment&lt;br /&gt;
            questions = assessment.questionnaires.where(type: 'BookmarkRatingQuestionnaire').flat_map(&amp;amp;:questions)&lt;br /&gt;
            responses = BookmarkRatingResponseMap.where(&lt;br /&gt;
                reviewed_object_id: assessment.id,&lt;br /&gt;
                reviewee_id: bookmark.id,&lt;br /&gt;
                reviewer_id: AssignmentParticipant.find_by(user_id: current_user.id).id).flat_map {|r| Response.where(map_id: r.id) }&lt;br /&gt;
            score = Answer.get_total_score(response: responses, questions: questions)&lt;br /&gt;
            if score.nil?&lt;br /&gt;
                return '-'&lt;br /&gt;
            else&lt;br /&gt;
                (score * 5.0 / 100.0).round(2)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    def total_average_score(bookmark)&lt;br /&gt;
        if bookmark.nil?&lt;br /&gt;
          return '-'&lt;br /&gt;
        else&lt;br /&gt;
          assessment = SignUpTopic.find(bookmark.topic_id).assignment&lt;br /&gt;
          questions = assessment.questionnaires.where(type: 'BookmarkRatingQuestionnaire').flat_map(&amp;amp;:questions)&lt;br /&gt;
          responses = BookmarkRatingResponseMap.where(&lt;br /&gt;
              reviewed_object_id: assessment.id,&lt;br /&gt;
              reviewee_id: bookmark.id).flat_map {|r| Response.where(map_id: r.id) }&lt;br /&gt;
          totalScore = Answer.compute_scores(responses, questions)&lt;br /&gt;
          if totalScore[:avg].nil?&lt;br /&gt;
              return '-'&lt;br /&gt;
          else&lt;br /&gt;
             (totalScore[:avg] * 5.0 / 100.0).round(2)&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;!-- total average rating --&amp;gt;&lt;br /&gt;
    &amp;lt;% totalAvg = total_average_score(bookmark) %&amp;gt;&lt;br /&gt;
    &amp;lt;% if totalAvg != 0 %&amp;gt;&lt;br /&gt;
        &amp;lt;%= totalAvg %&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- specific average score per user for a rubric --&amp;gt;&lt;br /&gt;
    &amp;lt;% specAvg = specific_average_score(bookmark) %&amp;gt;&lt;br /&gt;
    &amp;lt;% if specAvg != 0 %&amp;gt;&lt;br /&gt;
        &amp;lt;%= specAvg %&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/12?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Addition of badges for exceptionally helpful bookmarks:'''&lt;br /&gt;
Originally, no badge system was setup for bookmarks that have proven to be helpful guides for other students taking on the same project. The new changes introduced allows bookmarks to be attached to bookmarks with exceptionally good average ratings (i.e, above a rating of 3). A badge is signified by a full star while the absence of a badge is represented by an empty star.&lt;br /&gt;
&lt;br /&gt;
[[File:Bookmark list.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;th class=&amp;quot;head&amp;quot;&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
        &amp;lt;!-- badge --&amp;gt;&lt;br /&gt;
        &amp;lt;% if totalAvg.to_f &amp;gt; 3 %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;glyphicon glyphicon-star&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;% else %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;glyphicon glyphicon-star-empty&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/14?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Users cannot rate bookmarks they've uploaded. '''&lt;br /&gt;
We wanted to make sure that users cannot rate bookmarks that they uploaded.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;% unless session[:user].id == bookmark.user_id %&amp;gt;&lt;br /&gt;
      # ... code for rating the bookmarks&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
      &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/1/files?w=1 here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Users cannot review bookmarks they've uploaded using the questionnaire. '''&lt;br /&gt;
We also wanted to make sure that users cannot review bookmarks that they uploaded using the questionnaires.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;% unless session[:user].id == bookmark.user_id %&amp;gt;&lt;br /&gt;
      # ... code for reviewing bookmarks using the questionnaire&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
      &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/5/files?w=1 here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Users should be able to see the number of bookmarks from the topics list. '''&lt;br /&gt;
Previously, users could add bookmarks, but could not tell how many bookmarks were provided for each topic (if any) without clicking the &amp;quot;View bookmarks&amp;quot; icon. This UI change displays the number of bookmarks for the topic inside the view bookmarks icon from the topic list view so that users don't need to click through each topic individually.&lt;br /&gt;
&lt;br /&gt;
[[File:Sign up sheet bookmarks.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
    &amp;lt;nowiki&amp;gt;&amp;lt;p class=&amp;quot;fa fa-stack-2x fa-inverse&amp;quot; style='font-size: 1.0em; padding-top: 2px; font-weight: bold;'&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
      &amp;lt;nowiki&amp;gt;&amp;lt;%= Bookmark.where(topic_id: topic.id).length.to_s %&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    &amp;lt;nowiki&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/6/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''UI changes to make finding your bookmarks easier:'''&lt;br /&gt;
We added a &amp;quot;View Bookmarks&amp;quot; link to the student task view, that takes the student directly to the bookmarks that have been submitted for their topic. This code was then modified such that the link is greyed out if the student does not have a topic, and is hidden if bookmarks are not enabled for the assignment.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/controllers/student_task_controller.rb&lt;br /&gt;
:app/views/student_task/view.html.erb&lt;br /&gt;
     &amp;lt;% if @use_bookmark %&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;li&amp;gt;&amp;gt;&lt;br /&gt;
            &amp;lt;% if @topic_id and @assignment.submission_allowed(@topic_id) %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;View bookmarks&amp;quot;, :controller=&amp;gt;'bookmarks', :action=&amp;gt; 'list', :id =&amp;gt; @topic_id %&amp;gt; (View bookmarks others have submitted for your topic)&lt;br /&gt;
          &amp;lt;% else %&amp;gt;&lt;br /&gt;
            &amp;lt;&amp;lt;nowiki /&amp;gt;font color=&amp;quot;gray&amp;quot;&amp;gt;View bookmarks&amp;lt;/font&amp;gt; (You have to choose a topic first)&lt;br /&gt;
          &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relevant commits can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/commit/04b24b1dedd3414f58f52d394f2a5b9568e83872 here] [https://github.com/hosungh/expertiza/commit/15a775624307651755a70e63625a370478aa63b4 here]&amp;lt;/span&amp;gt; and &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/commit/f144594ae062369754d54288eff8959136510ccc here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Grey out add/view bookmarks link on the topic page if bookmarks are not enabled.''' Previously, students could submit and view bookmarks even if bookmarks were disabled for the assignment. Now these options are hidden.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
  &amp;lt;% if @use_bookmark %&amp;gt;&lt;br /&gt;
    &amp;lt;&amp;lt;nowiki /&amp;gt;%= link_to :controller=&amp;gt;'bookmarks', :action=&amp;gt; 'list', :id =&amp;gt; topic.id do %&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;span class=&amp;quot;fa-stack fa-md&amp;quot; title='View topic bookmarks'&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-bookmark fa-stack-1x fa-2x&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;p class=&amp;quot;fa fa-stack-2x fa-inverse&amp;quot; style='font-size: 1.0em; padding-top: 2px; font-weight: bold;'&amp;gt;&lt;br /&gt;
          &amp;lt;%= Bookmark.where(topic_id: topic.id).length.to_s %&amp;gt;&lt;br /&gt;
          &amp;lt;&amp;lt;nowiki /&amp;gt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;%= link_to :controller=&amp;gt;'bookmarks', :action=&amp;gt; 'new', :id =&amp;gt; topic.id , :assignment_id =&amp;gt; params[:assignment_id] do %&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;span class=&amp;quot;fa-stack fa-md&amp;quot; title='Add bookmark to topic'&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-bookmark fa-stack-1x fa-2x&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-plus fa-stack-1x fa-inverse&amp;quot; style='font-size: .5em'&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;&amp;lt;nowiki /&amp;gt;% else %&amp;gt;&lt;br /&gt;
    &amp;lt;&amp;lt;nowiki /&amp;gt;span class=&amp;quot;fa-stack fa-md&amp;quot; title='View topic bookmarks'&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-bookmark fa-stack-1x fa-2x&amp;quot; style=&amp;quot;opacity: 0.3;&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
   &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/sign_up_sheet/_table_header.html.erb&lt;br /&gt;
  &amp;lt;&amp;lt;nowiki /&amp;gt;th width=&amp;quot;10%&amp;quot;&amp;gt; Bookmarks&lt;br /&gt;
    &amp;lt;% unless @use_bookmark %&amp;gt; (disabled) &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;&amp;lt;nowiki /&amp;gt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Commit can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/commit/f0352ddf441d3773109b2e0208981f3fe122b5df here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Disable-bookmark-links.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Modify Bookmark delete permissions. '''&lt;br /&gt;
Bookmarks should be deletable by the user who created the bookmark, a teammate of the user who provided the bookmark, and the instructor.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
        &amp;lt;!--Edit/Destroy Bookmarks--&amp;gt;&lt;br /&gt;
        &amp;lt;% is_teammate = false %&amp;gt;&lt;br /&gt;
        &amp;lt;% team = SignedUpTeam.find_by(topic_id: @topic.id) rescue nil %&amp;gt;&lt;br /&gt;
        &amp;lt;% if team %&amp;gt;&lt;br /&gt;
          &amp;lt;% teams_users = TeamsUser.where(['team_id = ?', team.team_id]) %&amp;gt;&lt;br /&gt;
          &amp;lt;% is_teammate = teams_users.select {|tu| tu.user_id == session[:user].id}.size &amp;gt; 0  %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% if bookmark.user_id == session[:user].id or is_teammate or ['Instructor'].include? @current_role_name %&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Edit Bookmark', :action =&amp;gt; 'edit', :id =&amp;gt; bookmark.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Destroy Bookmark', bookmark, :confirm =&amp;gt; &amp;quot;Delete bookmark \&amp;quot;#{bookmark.title}\&amp;quot;?&amp;quot;, :method =&amp;gt; :delete %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/13/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Fix the ability to create bookmark questionnaires and use in assignments.'''&lt;br /&gt;
Previously, questionnaires for things like Teammate Reviews could be created and used in assignments. Users could fill these out and the scores would be stored for later reference by TAs and instructors. The questionnaire for bookmark reviews was previously not functional, but now instructors can create new bookmark questionnaires and assign them to assignments. &lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/controllers/questionnaires_controller.rb&lt;br /&gt;
       @questionnaire = Object.const_get(params[:model].split.join).new if Questionnaire::QUESTIONNAIRE_TYPES.include? params[:model].split.join&lt;br /&gt;
        ....&lt;br /&gt;
        if %w[AuthorFeedback CourseSurvey TeammateReview GlobalSurvey AssignmentSurvey BookmarkRating].include?(display_type) &lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
:app/controllers/questionnaires_controller.rb&lt;br /&gt;
    ....&lt;br /&gt;
    when &amp;quot;bookmark&amp;quot;&lt;br /&gt;
      bookmark = Bookmark.find(@map.response_map.reviewee_id)&lt;br /&gt;
      redirect_to controller: 'bookmarks', action: 'list', id: bookmark.topic_id&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;quot;BookmarkRatingResponseMap&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:app/models/bookmark_rating_response_map.rb&lt;br /&gt;
    ....&lt;br /&gt;
    self.assignment.questionnaires.find_by(type: 'BookmarkRatingQuestionnaire')&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    ....&lt;br /&gt;
          &amp;lt;td&amp;gt;&lt;br /&gt;
          &amp;lt;% assignment_participant = AssignmentParticipant.find_by(user_id: session[:user].id) %&amp;gt;&lt;br /&gt;
          &amp;lt;% map = BookmarkRatingResponseMap.where(reviewed_object_id: @topic.assignment.id, reviewer_id: assignment_participant.id, reviewee_id: bookmark.id).first %&amp;gt;&lt;br /&gt;
          &amp;lt;% if map.nil? %&amp;gt;&lt;br /&gt;
            &amp;lt;% map = BookmarkRatingResponseMap.create(reviewed_object_id: @topic.assignment.id, reviewer_id: assignment_participant.id, reviewee_id: bookmark.id) %&amp;gt;&lt;br /&gt;
          &amp;lt;% end %&amp;gt;&lt;br /&gt;
          &amp;lt;% review = map.response.last %&amp;gt;&lt;br /&gt;
          &amp;lt;% if review.nil? %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;Review&amp;quot;, {:controller =&amp;gt; 'response', :action =&amp;gt; 'new', :id =&amp;gt; map.map_id, :return =&amp;gt; &amp;quot;bookmark&amp;quot;} %&amp;gt;&lt;br /&gt;
          &amp;lt;% else %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;View&amp;quot;, {:controller =&amp;gt; 'response', :action =&amp;gt; 'view', :id =&amp;gt; review.id} %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;Edit&amp;quot;, {:controller =&amp;gt; 'response', :action =&amp;gt; 'edit', :id =&amp;gt; review.id, :return =&amp;gt; &amp;quot;bookmark&amp;quot;} %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;nowiki&amp;gt;&amp;lt;% if bookmark.user_id == session[:user].id %&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Edit', :action =&amp;gt; 'edit', :id =&amp;gt; bookmark.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Destroy', bookmark, :confirm =&amp;gt; &amp;quot;Delete bookmark \&amp;quot;#{bookmark.title}\&amp;quot;?&amp;quot;, :method =&amp;gt; :delete %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Edit Bookmark', :action =&amp;gt; 'edit', :id =&amp;gt; bookmark.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Destroy Bookmark', bookmark, :confirm =&amp;gt; &amp;quot;Delete bookmark \&amp;quot;#{bookmark.title}\&amp;quot;?&amp;quot;, :method =&amp;gt; :delete %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/response/view.html.erb&lt;br /&gt;
    &amp;lt;% if !(@map.instance_of? TeammateReviewResponseMap) &amp;amp;&amp;amp; !@map.survey? &amp;amp;&amp;amp; !(@map.instance_of? BookmarkRatingResponseMap) %&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/3/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Instructors should have the ability to view all bookmark responses. '''&lt;br /&gt;
Instructors should have a way to view all the responses to the bookmark questionnaires so that can see which bookmarks provided were deemed useful.&lt;br /&gt;
&lt;br /&gt;
[[File:Bookmark response list.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/helpers/report_formatter_helper.rb&lt;br /&gt;
  def bookmark_rating_response_map(params, _session = nil)&lt;br /&gt;
    assign_basics(params)&lt;br /&gt;
    @reviewers = BookmarkRatingResponseMap.bookmark_response_report(@id)&lt;br /&gt;
    @topics = @assignment.sign_up_topics&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
:app/models/bookmark_rating_response_map.rb&lt;br /&gt;
    class BookmarkRatingResponseMap &amp;lt; ReviewResponseMap&lt;br /&gt;
    &lt;br /&gt;
    def self.bookmark_response_report(id)&lt;br /&gt;
      BookmarkRatingResponseMap.select(&amp;quot;DISTINCT reviewer_id&amp;quot;).where(&amp;quot;reviewed_object_id = ?&amp;quot;, id)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
:app/views/reports/_bookmark_rating_report.html.erb&lt;br /&gt;
    &amp;lt;%= create_report_table_header(&amp;quot;Reviewed By&amp;quot; =&amp;gt; &amp;quot;16%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Topic&amp;quot; =&amp;gt; &amp;quot;14%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Bookmark Review&amp;quot; =&amp;gt; &amp;quot;20%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Submitted By&amp;quot; =&amp;gt; &amp;quot;20%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Last reviewed at&amp;quot; =&amp;gt; &amp;quot;20%&amp;quot;) %&amp;gt;&lt;br /&gt;
    &amp;lt;%@l = -1 %&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;% @reviewers.each do |r| %&amp;gt;&lt;br /&gt;
      &amp;lt;% @user = User.find(Participant.find(r.reviewer_id).user_id) %&amp;gt;&lt;br /&gt;
      &amp;lt;% @bookmark_rating_response_maps = BookmarkRatingResponseMap.where(reviewer_id: r.reviewer_id, reviewed_object_id: @id) %&amp;gt;&lt;br /&gt;
      &amp;lt;!-- Find only valid responses from this user --&amp;gt;&lt;br /&gt;
      &amp;lt;% maps = @bookmark_rating_response_maps.select { |m| !Response.where(map_id: m.id).first.blank? and m.reviewee and m.reviewee.user_id != @user.id }%&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
      &amp;lt;%@l = @l+1 %&amp;gt;&lt;br /&gt;
      &amp;lt;% (@l % 2 == 0) ? @bgcolor = &amp;quot;#ffffff&amp;quot; : @bgcolor = &amp;quot;#f9f9f9&amp;quot; %&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
      &amp;lt;% if maps.count &amp;gt; 0 %&amp;gt;&lt;br /&gt;
          &amp;lt;!--Reviewer--&amp;gt;&lt;br /&gt;
        &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt; rowspan= &amp;lt;%= maps.count %&amp;gt;&amp;gt;&lt;br /&gt;
          &amp;lt;% @reviewer_name = @user.fullname(session[:ip]) %&amp;gt;&lt;br /&gt;
          &amp;lt;%= link_to @reviewer_name, :controller =&amp;gt; 'popup', :action =&amp;gt; 'reviewer_details_popup', :id =&amp;gt; r.reviewer_id, :assignment_id =&amp;gt; @id %&amp;gt;&lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
        &amp;lt;% maps.each do |map| %&amp;gt;&lt;br /&gt;
          &amp;lt;% @reviewee = map.reviewee %&amp;gt;&lt;br /&gt;
            &amp;lt;!-- Topic --&amp;gt;&lt;br /&gt;
            &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt;  align=&amp;quot;left&amp;quot; colspan=1&amp;gt;&lt;br /&gt;
              &amp;lt;% topic = SignUpTopic.find(@reviewee.topic_id) %&amp;gt;&lt;br /&gt;
              &amp;lt;%= topic.topic_name %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
            &amp;lt;!-- Bookmarks reviewed--&amp;gt;&lt;br /&gt;
            &amp;lt;td id = &amp;quot;green&amp;quot; bgcolor=&amp;lt;%= @bgcolor %&amp;gt; align=&amp;quot;left&amp;quot; colspan=1&amp;gt;&lt;br /&gt;
              &amp;lt;%= link_to @reviewee.title, {:controller =&amp;gt; 'response', :action =&amp;gt; 'view', :id =&amp;gt; map.response.last.id}, :title =&amp;gt; &amp;quot;Click here to view this bookmark review&amp;quot; %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
            &amp;lt;!-- Submitted by--&amp;gt;&lt;br /&gt;
            &amp;lt;td id = &amp;quot;green&amp;quot; bgcolor=&amp;lt;%= @bgcolor %&amp;gt; style=&amp;quot;color:#DD3300&amp;quot; align=&amp;quot;left&amp;quot; colspan=1&amp;gt;&lt;br /&gt;
              &amp;lt;% reviewed_by_user = User.find(@reviewee.user_id).name %&amp;gt;&lt;br /&gt;
              &amp;lt;%= link_to reviewed_by_user, impersonate_impersonate_path(:user =&amp;gt; {:name =&amp;gt; reviewed_by_user}), :method =&amp;gt; :post, :title =&amp;gt; &amp;quot;Click here to impersonate this user&amp;quot; %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
            &amp;lt;!--Last reviewed at--&amp;gt;&lt;br /&gt;
            &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt; align=&amp;quot;left&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;% @bookmark_review_response = Response.where(map_id: map.id).first %&amp;gt;&lt;br /&gt;
              &amp;lt;%= @bookmark_review_response.updated_at.to_time.strftime(&amp;quot;%m/%d/%Y - %I:%M%p&amp;quot;) %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/reports/_searchbox.html.erb&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;lt;option value='BookmarkRatingResponseMap' &amp;gt;&lt;br /&gt;
      Bookmark Review Report&lt;br /&gt;
    &amp;lt;/option&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;lt;% elsif @type == &amp;quot;BookmarkReviewResponseMap&amp;quot; %&amp;gt;&lt;br /&gt;
        &amp;lt;nowiki&amp;gt;&amp;lt;h1&amp;gt; Bookmark review report for &amp;lt;%= @assignment.name%&amp;gt; &amp;lt;/h1&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:app/views/reports/response_report.html.haml&lt;br /&gt;
    - elsif @type == &amp;quot;BookmarkRatingResponseMap&amp;quot;&lt;br /&gt;
       = render :partial =&amp;gt; 'bookmark_rating_report'&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/10/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
&lt;br /&gt;
* Create a Bookmark Questionnaire&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Questionnaires.&lt;br /&gt;
# Find 'Bookmark Rating' and click the '+' to create a new questionnaire.&lt;br /&gt;
# Give a name for this questionnaire, leave the min and max score at 0 and 5 respectively, and click 'Create'.&lt;br /&gt;
# Go to Manage &amp;gt; Questionnaires and click on 'Bookmark Rating' to view all of the questionnaires. Click the edit icon for the questionnaire you just created.&lt;br /&gt;
# Select 'Add 1 more Criterion question(s)'. &lt;br /&gt;
# For the question, enter &amp;quot;Does this bookmark appear to have been used by the author?&amp;quot; and leave the other fields blank. This question will be helpful in determining how useful the bookmark was.&lt;br /&gt;
# Click 'Save bookmark rating questionnaire'. Now this questionnaire can be used in assignments.&lt;br /&gt;
&lt;br /&gt;
* Enable Bookmarks&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Choose an assignment that will be used for testing and have bookmarks enabled and select the edit icon under Actions.&lt;br /&gt;
# Under Topics Tab select 'Allow participants to create bookmarks?'.&lt;br /&gt;
# Go to Rubrics tab, under 'Bookmark Rating' select the Bookmark review questionnaire that was previously created to use for reviewing the bookmarks.&lt;br /&gt;
&lt;br /&gt;
* Add a Bookmark to a Topic&lt;br /&gt;
# Log in as a student who is a participant of the assignment with bookmarks enabled and select that assignment.&lt;br /&gt;
# Select a &amp;quot;Signup sheet&amp;quot; to see the list of available topics.&lt;br /&gt;
# Choose a topic and select the 'Add bookmark to topic' icon from the Bookmarks column. The 'Add bookmark to topic' icon has a '+' sign. &lt;br /&gt;
# Fill in all the fields for the bookmark, including Title, Url, and Description and click 'Add new bookmark'.&lt;br /&gt;
# You should now see a page listing all bookmarks for this topic.&lt;br /&gt;
   &lt;br /&gt;
* Viewing all Bookmarks for a Topic&lt;br /&gt;
# Log in as a student who is a participant of the assignment with bookmarks enabled (or an instructor) and select that assignment.&lt;br /&gt;
# Select a &amp;quot;Signup sheet&amp;quot; to see the list of available topics.&lt;br /&gt;
# The number of bookmarks for each topic should be displayed visually inside the 'View topic bookmarks' icon in the bookmarks column.&lt;br /&gt;
# Click the 'View topic bookmarks icon' to see a list of all bookmarks for this topic.&lt;br /&gt;
&lt;br /&gt;
* Editing and Destroying Bookmarks for a Topic&lt;br /&gt;
# Perform this test with each of the following users: an instructor, a user who is assigned to the topic, and a teammate of the user who is assigned to the topic.&lt;br /&gt;
## Log in with the user and select the assignment with bookmarks enabled.&lt;br /&gt;
## Select a &amp;quot;Signup sheet&amp;quot; to see the list of available topics.&lt;br /&gt;
## Click the 'View topic bookmarks icon' to see a list of all bookmarks for this topic.&lt;br /&gt;
## The user should see links to 'Edit Bookmark' and 'Destroy Bookmark' next to a bookmark only if the user is an instructor, the user submitted the bookmark, or the user is a teammate of the user who submitted the bookmark.&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
The current version of Expertiza does not have any tests for the bookmark controller or model. We intend on adding comprehensive RSpec tests for all changes we have added to controller classes and unit tests for model classes.&lt;br /&gt;
&lt;br /&gt;
===Code Coverage===&lt;br /&gt;
&lt;br /&gt;
=='''Application Deployment'''==&lt;br /&gt;
 &lt;br /&gt;
This web application deployed on VCL is located at [http://152.46.17.220:8080 http://152.46.17.220:8080]&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
1. [https://github.com/expertiza/expertiza/ Expertiza on GitHub]&lt;br /&gt;
&lt;br /&gt;
2. [https://github.com/hosungh/expertiza/ Forked GitHub Repo]&lt;br /&gt;
&lt;br /&gt;
3. [http://152.46.17.220:8080 Deployed Application]&lt;br /&gt;
&lt;br /&gt;
4. [https://github.com/expertiza/expertiza/pull/1704/ Beta Branch Pull Request]&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2005._Bookmark_enhancements&amp;diff=131949</id>
		<title>CSC/ECE 517 Spring 2020 - E2005. Bookmark enhancements</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2005._Bookmark_enhancements&amp;diff=131949"/>
		<updated>2020-03-23T23:32:03Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: /* Code Modifications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==&amp;lt;b&amp;gt;E2005. Bookmark Enhancements&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open-source project that is built using the [http://rubyonrails.org/ Ruby on Rails] framework. At its core, it is a highly versatile tool that academic institutions can use to craft learning objectives centered around team projects, peer reviews, and highly-customizable assignments.&lt;br /&gt;
&lt;br /&gt;
=='''Problem Statement'''==&lt;br /&gt;
The purpose of this project was to add meaningful enhancements and fixes to the bookmark feature in Expertiza, entities that can be attached to a topic to aid the authors who decide to take on a certain assignment. While the major functionality of the bookmark feature was already present by the time the team embarked on this project (most notably the ability to create/edit and rate bookmarks), many desired functions were conveniently broken or left out.&lt;br /&gt;
&lt;br /&gt;
===Completed Stories===&lt;br /&gt;
Below is a breakdown of the stories that were drawn up and completed for this project:&lt;br /&gt;
&lt;br /&gt;
1. Need a way to view all responses to the bookmark questionnaires.&lt;br /&gt;
&lt;br /&gt;
2. Modify permissions for deleting bookmarks.The person who creates the bookmark, the team for whom the bookmark is meant, and the instructor, should be able to delete.&lt;br /&gt;
&lt;br /&gt;
3. &amp;quot;View bookmarks&amp;quot; link on student_task/view breaks if the student has not selected a topic yet.&lt;br /&gt;
&lt;br /&gt;
4. Bookmark rating questionnaire should include question asking the reviewer whether or not the bookmark appears to have been used by the author. Get the bookmark questionnaire functioning and add to the bookmark list page.&lt;br /&gt;
&lt;br /&gt;
5. Fix issue in which users should not be able to review their own bookmark using the questionnaire, but currently can.&lt;br /&gt;
&lt;br /&gt;
6. Add a number next to/inside the icon with the number of current bookmark in order to make it clear whether a bookmark exists for a topic.&lt;br /&gt;
&lt;br /&gt;
7. Add a &amp;quot;View bookmarks&amp;quot; link to the assignment view page for easier access.&lt;br /&gt;
&lt;br /&gt;
8. Add rating to the bookmark questionnaire and use that rating to calculate the average instead of using the current dropdown.&lt;br /&gt;
&lt;br /&gt;
9. A student should not be able to rate his/her own bookmark.&lt;br /&gt;
&lt;br /&gt;
10. Add URL to bookmark list for assignment topic on the assignment page, to make viewing bookmarks easier.&lt;br /&gt;
&lt;br /&gt;
11. Instructors cannot currently see bookmarks (gets an error message saying instructors cannot create bookmarks). &lt;br /&gt;
&lt;br /&gt;
12. &amp;quot;Back&amp;quot; button from Bookmarks list is broken.&lt;br /&gt;
&lt;br /&gt;
13. When creating a bookmark with an empty description field, the notice says the bookmark was successfully created even though it fails.&lt;br /&gt;
&lt;br /&gt;
14. &amp;quot;Bookmark ratings&amp;quot; should be a type of rubric when you go to Manage &amp;gt; Questionnaires. Although 'Bookmark Rating' is already a type of rubric, it isn't listed when hovering over Manage... &amp;gt; Questionnaires &lt;br /&gt;
&lt;br /&gt;
15. Create a way to mark a bookmark that was rated to be helpful by all reviewers, on average. &lt;br /&gt;
&lt;br /&gt;
16. Students can add/view bookmarks when &amp;quot;Allow participants to create bookmarks?&amp;quot; box is unchecked for the assignment.&lt;br /&gt;
&lt;br /&gt;
=='''Code Modifications'''==&lt;br /&gt;
&lt;br /&gt;
'''Fix the &amp;quot;Back&amp;quot; button:'''&lt;br /&gt;
When either backing out of creating or viewing/editing a bookmark, the back functionality does not work, both prompting errors. Issue has been fixed and users can once again go back to the appropriate page.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;%= link_to 'Back', '#', :onclick =&amp;gt; 'pageBack()' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    function pageBack() {&lt;br /&gt;
  	history.back()&lt;br /&gt;
    }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/new.html.erb &lt;br /&gt;
    &amp;lt;%= link_to 'Back', '#', :onclick =&amp;gt; 'pageBack()' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    function pageBack() {&lt;br /&gt;
  	history.back()&lt;br /&gt;
    }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/edit.html.erb&lt;br /&gt;
    &amp;lt;%= link_to 'Back', '#', :onclick =&amp;gt; 'pageBack()' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    function pageBack() {&lt;br /&gt;
  	history.back()&lt;br /&gt;
    }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/2?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Commit for &amp;quot;Back&amp;quot; capability when updating bookmark can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/4?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Check whether text field is present when creating/updating bookmark:'''&lt;br /&gt;
Previously, when a bookmark was created/updated and the corresponding &amp;quot;Title&amp;quot;, &amp;quot;URL&amp;quot;, or &amp;quot;Description&amp;quot; text fields were not filled in, the bookmark was not created or updated sans any error or warning. In fact, the user would be taken to the list of bookmarks available, forcing him/her to go back to the page corresponding to the bookmark create/edit page. This fix prompts users with an error indicating which text field needs to be filled in in order to fulfill the particular bookmark create/edit function.&lt;br /&gt;
&lt;br /&gt;
[[File:CheckFieldsTitle.png]][[File:CheckFieldsUrl.png]][[File:CheckFieldsDescription.png]] &lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/new.html.erb&lt;br /&gt;
      &amp;lt;%= label_tag 'Title' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= text_field_tag :title, params[:title], :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag 'Url' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= text_field_tag :url, params[:url], :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag 'Description' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= text_area_tag :description, params[:description], :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/edit.html.erb&lt;br /&gt;
      &amp;lt;%= label_tag 'Title' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.text_field :title, :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag 'Url' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.text_field :url, :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag 'Description' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.text_area :description, :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/4?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Change average bookmark rating to be based on questionnaire:'''&lt;br /&gt;
The rating system for the bookmarks before these changes were elementary in nature - there was a drop-down menu to choose your particular rating for a bookmark while there was an average calculator just to the left of the aforementioned column. The new changes introduced allows the &amp;quot;Your rating&amp;quot; and &amp;quot;Avg. rating&amp;quot; columns for a particular bookmark to be calculated based on the scores given to the various questions present in a given bookmark questionnaire. The &amp;quot;Avg. rating&amp;quot; is calculated based on the mean rating of all the bookmark questionnaires scored by every reviewer while &amp;quot;Your rating&amp;quot; is simply the mean of the scores that you (the user) gave to all the questions on the questionnaire.&lt;br /&gt;
&lt;br /&gt;
[[File:BookmarkAvgRatings.png]]&lt;br /&gt;
&lt;br /&gt;
Qustionnaire for Last Bookmark listed above (do your own calculation to find the mean):&lt;br /&gt;
&lt;br /&gt;
[[File:QuestionnaireForLastBookmark.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/controllers/bookmarks_controller.rb&lt;br /&gt;
    helper_method :specific_average_score&lt;br /&gt;
    helper_method :total_average_score&lt;br /&gt;
&lt;br /&gt;
    def specific_average_score(bookmark)&lt;br /&gt;
        if bookmark.nil?&lt;br /&gt;
            return '-'&lt;br /&gt;
        else&lt;br /&gt;
            assessment = SignUpTopic.find(bookmark.topic_id).assignment&lt;br /&gt;
            questions = assessment.questionnaires.where(type: 'BookmarkRatingQuestionnaire').flat_map(&amp;amp;:questions)&lt;br /&gt;
            responses = BookmarkRatingResponseMap.where(&lt;br /&gt;
                reviewed_object_id: assessment.id,&lt;br /&gt;
                reviewee_id: bookmark.id,&lt;br /&gt;
                reviewer_id: AssignmentParticipant.find_by(user_id: current_user.id).id).flat_map {|r| Response.where(map_id: r.id) }&lt;br /&gt;
            score = Answer.get_total_score(response: responses, questions: questions)&lt;br /&gt;
            if score.nil?&lt;br /&gt;
                return '-'&lt;br /&gt;
            else&lt;br /&gt;
                (score * 5.0 / 100.0).round(2)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    def total_average_score(bookmark)&lt;br /&gt;
        if bookmark.nil?&lt;br /&gt;
          return '-'&lt;br /&gt;
        else&lt;br /&gt;
          assessment = SignUpTopic.find(bookmark.topic_id).assignment&lt;br /&gt;
          questions = assessment.questionnaires.where(type: 'BookmarkRatingQuestionnaire').flat_map(&amp;amp;:questions)&lt;br /&gt;
          responses = BookmarkRatingResponseMap.where(&lt;br /&gt;
              reviewed_object_id: assessment.id,&lt;br /&gt;
              reviewee_id: bookmark.id).flat_map {|r| Response.where(map_id: r.id) }&lt;br /&gt;
          totalScore = Answer.compute_scores(responses, questions)&lt;br /&gt;
          if totalScore[:avg].nil?&lt;br /&gt;
              return '-'&lt;br /&gt;
          else&lt;br /&gt;
             (totalScore[:avg] * 5.0 / 100.0).round(2)&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;!-- total average rating --&amp;gt;&lt;br /&gt;
    &amp;lt;% totalAvg = total_average_score(bookmark) %&amp;gt;&lt;br /&gt;
    &amp;lt;% if totalAvg != 0 %&amp;gt;&lt;br /&gt;
        &amp;lt;%= totalAvg %&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- specific average score per user for a rubric --&amp;gt;&lt;br /&gt;
    &amp;lt;% specAvg = specific_average_score(bookmark) %&amp;gt;&lt;br /&gt;
    &amp;lt;% if specAvg != 0 %&amp;gt;&lt;br /&gt;
        &amp;lt;%= specAvg %&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/12?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Addition of badges for exceptionally helpful bookmarks:'''&lt;br /&gt;
Originally, no badge system was setup for bookmarks that have proven to be helpful guides for other students taking on the same project. The new changes introduced allows bookmarks to be attached to bookmarks with exceptionally good average ratings (i.e, above a rating of 3). A badge is signified by a full star while the absence of a badge is represented by an empty star.&lt;br /&gt;
&lt;br /&gt;
[[File:Bookmark list.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;th class=&amp;quot;head&amp;quot;&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
        &amp;lt;!-- badge --&amp;gt;&lt;br /&gt;
        &amp;lt;% if totalAvg.to_f &amp;gt; 3 %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;glyphicon glyphicon-star&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;% else %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;glyphicon glyphicon-star-empty&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/14?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Users cannot rate bookmarks they've uploaded. '''&lt;br /&gt;
We wanted to make sure that users cannot rate bookmarks that they uploaded.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;% unless session[:user].id == bookmark.user_id %&amp;gt;&lt;br /&gt;
      # ... code for rating the bookmarks&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
      &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/1/files?w=1 here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Users cannot review bookmarks they've uploaded using the questionnaire. '''&lt;br /&gt;
We also wanted to make sure that users cannot review bookmarks that they uploaded using the questionnaires.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;% unless session[:user].id == bookmark.user_id %&amp;gt;&lt;br /&gt;
      # ... code for reviewing bookmarks using the questionnaire&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
      &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/5/files?w=1 here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Users should be able to see the number of bookmarks from the topics list. '''&lt;br /&gt;
Previously, users could add bookmarks, but could not tell how many bookmarks were provided for each topic (if any) without clicking the &amp;quot;View bookmarks&amp;quot; icon. This UI change displays the number of bookmarks for the topic inside the view bookmarks icon from the topic list view so that users don't need to click through each topic individually.&lt;br /&gt;
&lt;br /&gt;
[[File:Sign up sheet bookmarks.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
    &amp;lt;nowiki&amp;gt;&amp;lt;p class=&amp;quot;fa fa-stack-2x fa-inverse&amp;quot; style='font-size: 1.0em; padding-top: 2px; font-weight: bold;'&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
      &amp;lt;nowiki&amp;gt;&amp;lt;%= Bookmark.where(topic_id: topic.id).length.to_s %&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    &amp;lt;nowiki&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/6/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''UI changes to make finding your bookmarks easier:'''&lt;br /&gt;
We added a &amp;quot;View Bookmarks&amp;quot; link to the student task view, that takes the student directly to the bookmarks that have been submitted for their topic. This code was then modified such that the link is greyed out if the student does not have a topic, and is hidden if bookmarks are not enabled for the assignment.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/controllers/student_task_controller.rb&lt;br /&gt;
:app/views/student_task/view.html.erb&lt;br /&gt;
     &amp;lt;% if @use_bookmark %&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;li&amp;gt;&amp;gt;&lt;br /&gt;
            &amp;lt;% if @topic_id and @assignment.submission_allowed(@topic_id) %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;View bookmarks&amp;quot;, :controller=&amp;gt;'bookmarks', :action=&amp;gt; 'list', :id =&amp;gt; @topic_id %&amp;gt; (View bookmarks others have submitted for your topic)&lt;br /&gt;
          &amp;lt;% else %&amp;gt;&lt;br /&gt;
            &amp;lt;&amp;lt;nowiki /&amp;gt;font color=&amp;quot;gray&amp;quot;&amp;gt;View bookmarks&amp;lt;/font&amp;gt; (You have to choose a topic first)&lt;br /&gt;
          &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relevant commits can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/commit/04b24b1dedd3414f58f52d394f2a5b9568e83872 here] [https://github.com/hosungh/expertiza/commit/15a775624307651755a70e63625a370478aa63b4 here]&amp;lt;/span&amp;gt; and &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/commit/f144594ae062369754d54288eff8959136510ccc here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Grey out add/view bookmarks link on the topic page if bookmarks are not enabled.''' Previously, students could submit and view bookmarks even if bookmarks were disabled for the assignment. Now these options are hidden.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
  &amp;lt;% if @use_bookmark %&amp;gt;&lt;br /&gt;
    &amp;lt;&amp;lt;nowiki /&amp;gt;%= link_to :controller=&amp;gt;'bookmarks', :action=&amp;gt; 'list', :id =&amp;gt; topic.id do %&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;span class=&amp;quot;fa-stack fa-md&amp;quot; title='View topic bookmarks'&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-bookmark fa-stack-1x fa-2x&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;p class=&amp;quot;fa fa-stack-2x fa-inverse&amp;quot; style='font-size: 1.0em; padding-top: 2px; font-weight: bold;'&amp;gt;&lt;br /&gt;
          &amp;lt;%= Bookmark.where(topic_id: topic.id).length.to_s %&amp;gt;&lt;br /&gt;
          &amp;lt;&amp;lt;nowiki /&amp;gt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;%= link_to :controller=&amp;gt;'bookmarks', :action=&amp;gt; 'new', :id =&amp;gt; topic.id , :assignment_id =&amp;gt; params[:assignment_id] do %&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;span class=&amp;quot;fa-stack fa-md&amp;quot; title='Add bookmark to topic'&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-bookmark fa-stack-1x fa-2x&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-plus fa-stack-1x fa-inverse&amp;quot; style='font-size: .5em'&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;&amp;lt;nowiki /&amp;gt;% else %&amp;gt;&lt;br /&gt;
    &amp;lt;&amp;lt;nowiki /&amp;gt;span class=&amp;quot;fa-stack fa-md&amp;quot; title='View topic bookmarks'&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-bookmark fa-stack-1x fa-2x&amp;quot; style=&amp;quot;opacity: 0.3;&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
   &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/sign_up_sheet/_table_header.html.erb&lt;br /&gt;
  &amp;lt;&amp;lt;nowiki /&amp;gt;th width=&amp;quot;10%&amp;quot;&amp;gt; Bookmarks&lt;br /&gt;
    &amp;lt;% unless @use_bookmark %&amp;gt; (disabled) &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;&amp;lt;nowiki /&amp;gt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Commit can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/commit/f0352ddf441d3773109b2e0208981f3fe122b5df here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Disable-bookmark-links.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Modify Bookmark delete permissions. '''&lt;br /&gt;
Bookmarks should be deletable by the user who created the bookmark, a teammate of the user who provided the bookmark, and the instructor.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
        &amp;lt;!--Edit/Destroy Bookmarks--&amp;gt;&lt;br /&gt;
        &amp;lt;% is_teammate = false %&amp;gt;&lt;br /&gt;
        &amp;lt;% team = SignedUpTeam.find_by(topic_id: @topic.id) rescue nil %&amp;gt;&lt;br /&gt;
        &amp;lt;% if team %&amp;gt;&lt;br /&gt;
          &amp;lt;% teams_users = TeamsUser.where(['team_id = ?', team.team_id]) %&amp;gt;&lt;br /&gt;
          &amp;lt;% is_teammate = teams_users.select {|tu| tu.user_id == session[:user].id}.size &amp;gt; 0  %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% if bookmark.user_id == session[:user].id or is_teammate or ['Instructor'].include? @current_role_name %&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Edit Bookmark', :action =&amp;gt; 'edit', :id =&amp;gt; bookmark.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Destroy Bookmark', bookmark, :confirm =&amp;gt; &amp;quot;Delete bookmark \&amp;quot;#{bookmark.title}\&amp;quot;?&amp;quot;, :method =&amp;gt; :delete %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/13/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Fix the ability to create bookmark questionnaires and use in assignments.'''&lt;br /&gt;
Previously, questionnaires for things like Teammate Reviews could be created and used in assignments. Users could fill these out and the scores would be stored for later reference by TAs and instructors. The questionnaire for bookmark reviews was previously not functional, but now instructors can create new bookmark questionnaires and assign them to assignments. &lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/controllers/questionnaires_controller.rb&lt;br /&gt;
       @questionnaire = Object.const_get(params[:model].split.join).new if Questionnaire::QUESTIONNAIRE_TYPES.include? params[:model].split.join&lt;br /&gt;
        ....&lt;br /&gt;
        if %w[AuthorFeedback CourseSurvey TeammateReview GlobalSurvey AssignmentSurvey BookmarkRating].include?(display_type) &lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
:app/controllers/questionnaires_controller.rb&lt;br /&gt;
    ....&lt;br /&gt;
    when &amp;quot;bookmark&amp;quot;&lt;br /&gt;
      bookmark = Bookmark.find(@map.response_map.reviewee_id)&lt;br /&gt;
      redirect_to controller: 'bookmarks', action: 'list', id: bookmark.topic_id&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;quot;BookmarkRatingResponseMap&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:app/models/bookmark_rating_response_map.rb&lt;br /&gt;
    ....&lt;br /&gt;
    self.assignment.questionnaires.find_by(type: 'BookmarkRatingQuestionnaire')&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    ....&lt;br /&gt;
          &amp;lt;td&amp;gt;&lt;br /&gt;
          &amp;lt;% assignment_participant = AssignmentParticipant.find_by(user_id: session[:user].id) %&amp;gt;&lt;br /&gt;
          &amp;lt;% map = BookmarkRatingResponseMap.where(reviewed_object_id: @topic.assignment.id, reviewer_id: assignment_participant.id, reviewee_id: bookmark.id).first %&amp;gt;&lt;br /&gt;
          &amp;lt;% if map.nil? %&amp;gt;&lt;br /&gt;
            &amp;lt;% map = BookmarkRatingResponseMap.create(reviewed_object_id: @topic.assignment.id, reviewer_id: assignment_participant.id, reviewee_id: bookmark.id) %&amp;gt;&lt;br /&gt;
          &amp;lt;% end %&amp;gt;&lt;br /&gt;
          &amp;lt;% review = map.response.last %&amp;gt;&lt;br /&gt;
          &amp;lt;% if review.nil? %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;Review&amp;quot;, {:controller =&amp;gt; 'response', :action =&amp;gt; 'new', :id =&amp;gt; map.map_id, :return =&amp;gt; &amp;quot;bookmark&amp;quot;} %&amp;gt;&lt;br /&gt;
          &amp;lt;% else %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;View&amp;quot;, {:controller =&amp;gt; 'response', :action =&amp;gt; 'view', :id =&amp;gt; review.id} %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;Edit&amp;quot;, {:controller =&amp;gt; 'response', :action =&amp;gt; 'edit', :id =&amp;gt; review.id, :return =&amp;gt; &amp;quot;bookmark&amp;quot;} %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;nowiki&amp;gt;&amp;lt;% if bookmark.user_id == session[:user].id %&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Edit', :action =&amp;gt; 'edit', :id =&amp;gt; bookmark.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Destroy', bookmark, :confirm =&amp;gt; &amp;quot;Delete bookmark \&amp;quot;#{bookmark.title}\&amp;quot;?&amp;quot;, :method =&amp;gt; :delete %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Edit Bookmark', :action =&amp;gt; 'edit', :id =&amp;gt; bookmark.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Destroy Bookmark', bookmark, :confirm =&amp;gt; &amp;quot;Delete bookmark \&amp;quot;#{bookmark.title}\&amp;quot;?&amp;quot;, :method =&amp;gt; :delete %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/response/view.html.erb&lt;br /&gt;
    &amp;lt;% if !(@map.instance_of? TeammateReviewResponseMap) &amp;amp;&amp;amp; !@map.survey? &amp;amp;&amp;amp; !(@map.instance_of? BookmarkRatingResponseMap) %&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/3/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Instructors should have the ability to view all bookmark responses. '''&lt;br /&gt;
Instructors should have a way to view all the responses to the bookmark questionnaires so that can see which bookmarks provided were deemed useful.&lt;br /&gt;
&lt;br /&gt;
[[File:Bookmark response list.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/helpers/report_formatter_helper.rb&lt;br /&gt;
  def bookmark_rating_response_map(params, _session = nil)&lt;br /&gt;
    assign_basics(params)&lt;br /&gt;
    @reviewers = BookmarkRatingResponseMap.bookmark_response_report(@id)&lt;br /&gt;
    @topics = @assignment.sign_up_topics&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
:app/models/bookmark_rating_response_map.rb&lt;br /&gt;
    class BookmarkRatingResponseMap &amp;lt; ReviewResponseMap&lt;br /&gt;
    &lt;br /&gt;
    def self.bookmark_response_report(id)&lt;br /&gt;
      BookmarkRatingResponseMap.select(&amp;quot;DISTINCT reviewer_id&amp;quot;).where(&amp;quot;reviewed_object_id = ?&amp;quot;, id)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
:app/views/reports/_bookmark_rating_report.html.erb&lt;br /&gt;
    &amp;lt;%= create_report_table_header(&amp;quot;Reviewed By&amp;quot; =&amp;gt; &amp;quot;16%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Topic&amp;quot; =&amp;gt; &amp;quot;14%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Bookmark Review&amp;quot; =&amp;gt; &amp;quot;20%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Submitted By&amp;quot; =&amp;gt; &amp;quot;20%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Last reviewed at&amp;quot; =&amp;gt; &amp;quot;20%&amp;quot;) %&amp;gt;&lt;br /&gt;
    &amp;lt;%@l = -1 %&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;% @reviewers.each do |r| %&amp;gt;&lt;br /&gt;
      &amp;lt;% @user = User.find(Participant.find(r.reviewer_id).user_id) %&amp;gt;&lt;br /&gt;
      &amp;lt;% @bookmark_rating_response_maps = BookmarkRatingResponseMap.where(reviewer_id: r.reviewer_id, reviewed_object_id: @id) %&amp;gt;&lt;br /&gt;
      &amp;lt;!-- Find only valid responses from this user --&amp;gt;&lt;br /&gt;
      &amp;lt;% maps = @bookmark_rating_response_maps.select { |m| !Response.where(map_id: m.id).first.blank? and m.reviewee and m.reviewee.user_id != @user.id }%&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
      &amp;lt;%@l = @l+1 %&amp;gt;&lt;br /&gt;
      &amp;lt;% (@l % 2 == 0) ? @bgcolor = &amp;quot;#ffffff&amp;quot; : @bgcolor = &amp;quot;#f9f9f9&amp;quot; %&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
      &amp;lt;% if maps.count &amp;gt; 0 %&amp;gt;&lt;br /&gt;
          &amp;lt;!--Reviewer--&amp;gt;&lt;br /&gt;
        &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt; rowspan= &amp;lt;%= maps.count %&amp;gt;&amp;gt;&lt;br /&gt;
          &amp;lt;% @reviewer_name = @user.fullname(session[:ip]) %&amp;gt;&lt;br /&gt;
          &amp;lt;%= link_to @reviewer_name, :controller =&amp;gt; 'popup', :action =&amp;gt; 'reviewer_details_popup', :id =&amp;gt; r.reviewer_id, :assignment_id =&amp;gt; @id %&amp;gt;&lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
        &amp;lt;% maps.each do |map| %&amp;gt;&lt;br /&gt;
          &amp;lt;% @reviewee = map.reviewee %&amp;gt;&lt;br /&gt;
            &amp;lt;!-- Topic --&amp;gt;&lt;br /&gt;
            &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt;  align=&amp;quot;left&amp;quot; colspan=1&amp;gt;&lt;br /&gt;
              &amp;lt;% topic = SignUpTopic.find(@reviewee.topic_id) %&amp;gt;&lt;br /&gt;
              &amp;lt;%= topic.topic_name %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
            &amp;lt;!-- Bookmarks reviewed--&amp;gt;&lt;br /&gt;
            &amp;lt;td id = &amp;quot;green&amp;quot; bgcolor=&amp;lt;%= @bgcolor %&amp;gt; align=&amp;quot;left&amp;quot; colspan=1&amp;gt;&lt;br /&gt;
              &amp;lt;%= link_to @reviewee.title, {:controller =&amp;gt; 'response', :action =&amp;gt; 'view', :id =&amp;gt; map.response.last.id}, :title =&amp;gt; &amp;quot;Click here to view this bookmark review&amp;quot; %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
            &amp;lt;!-- Submitted by--&amp;gt;&lt;br /&gt;
            &amp;lt;td id = &amp;quot;green&amp;quot; bgcolor=&amp;lt;%= @bgcolor %&amp;gt; style=&amp;quot;color:#DD3300&amp;quot; align=&amp;quot;left&amp;quot; colspan=1&amp;gt;&lt;br /&gt;
              &amp;lt;% reviewed_by_user = User.find(@reviewee.user_id).name %&amp;gt;&lt;br /&gt;
              &amp;lt;%= link_to reviewed_by_user, impersonate_impersonate_path(:user =&amp;gt; {:name =&amp;gt; reviewed_by_user}), :method =&amp;gt; :post, :title =&amp;gt; &amp;quot;Click here to impersonate this user&amp;quot; %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
            &amp;lt;!--Last reviewed at--&amp;gt;&lt;br /&gt;
            &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt; align=&amp;quot;left&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;% @bookmark_review_response = Response.where(map_id: map.id).first %&amp;gt;&lt;br /&gt;
              &amp;lt;%= @bookmark_review_response.updated_at.to_time.strftime(&amp;quot;%m/%d/%Y - %I:%M%p&amp;quot;) %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/reports/_searchbox.html.erb&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;lt;option value='BookmarkRatingResponseMap' &amp;gt;&lt;br /&gt;
      Bookmark Review Report&lt;br /&gt;
    &amp;lt;/option&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;lt;% elsif @type == &amp;quot;BookmarkReviewResponseMap&amp;quot; %&amp;gt;&lt;br /&gt;
        &amp;lt;nowiki&amp;gt;&amp;lt;h1&amp;gt; Bookmark review report for &amp;lt;%= @assignment.name%&amp;gt; &amp;lt;/h1&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:app/views/reports/response_report.html.haml&lt;br /&gt;
    - elsif @type == &amp;quot;BookmarkRatingResponseMap&amp;quot;&lt;br /&gt;
       = render :partial =&amp;gt; 'bookmark_rating_report'&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/10/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
&lt;br /&gt;
* Create a Bookmark Questionnaire&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Questionnaires.&lt;br /&gt;
# Find 'Bookmark Rating' and click the '+' to create a new questionnaire.&lt;br /&gt;
# Give a name for this questionnaire, leave the min and max score at 0 and 5 respectively, and click 'Create'.&lt;br /&gt;
# Go to Manage &amp;gt; Questionnaires and click on 'Bookmark Rating' to view all of the questionnaires. Click the edit icon for the questionnaire you just created.&lt;br /&gt;
# Select 'Add 1 more Criterion question(s)'. &lt;br /&gt;
# For the question, enter &amp;quot;Does this bookmark appear to have been used by the author?&amp;quot; and leave the other fields blank. This question will be helpful in determining how useful the bookmark was.&lt;br /&gt;
# Click 'Save bookmark rating questionnaire'. Now this questionnaire can be used in assignments.&lt;br /&gt;
&lt;br /&gt;
* Enable Bookmarks&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Choose an assignment that will be used for testing and have bookmarks enabled and select the edit icon under Actions.&lt;br /&gt;
# Under Topics Tab select 'Allow participants to create bookmarks?'.&lt;br /&gt;
# Go to Rubrics tab, under 'Bookmark Rating' select the Bookmark review questionnaire that was previously created to use for reviewing the bookmarks.&lt;br /&gt;
&lt;br /&gt;
* Add a Bookmark to a Topic&lt;br /&gt;
# Log in as a student who is a participant of the assignment with bookmarks enabled and select that assignment.&lt;br /&gt;
# Select a &amp;quot;Signup sheet&amp;quot; to see the list of available topics.&lt;br /&gt;
# Choose a topic and select the 'Add bookmark to topic' icon from the Bookmarks column. The 'Add bookmark to topic' icon has a '+' sign. &lt;br /&gt;
# Fill in all the fields for the bookmark, including Title, Url, and Description and click 'Add new bookmark'.&lt;br /&gt;
# You should now see a page listing all bookmarks for this topic.&lt;br /&gt;
   &lt;br /&gt;
* Viewing all Bookmarks for a Topic&lt;br /&gt;
# Log in as a student who is a participant of the assignment with bookmarks enabled (or an instructor) and select that assignment.&lt;br /&gt;
# Select a &amp;quot;Signup sheet&amp;quot; to see the list of available topics.&lt;br /&gt;
# The number of bookmarks for each topic should be displayed visually inside the 'View topic bookmarks' icon in the bookmarks column.&lt;br /&gt;
# Click the 'View topic bookmarks icon' to see a list of all bookmarks for this topic.&lt;br /&gt;
&lt;br /&gt;
* Editing and Destroying Bookmarks for a Topic&lt;br /&gt;
# Perform this test with each of the following users: an instructor, a user who is assigned to the topic, and a teammate of the user who is assigned to the topic.&lt;br /&gt;
## Log in with the user and select the assignment with bookmarks enabled.&lt;br /&gt;
## Select a &amp;quot;Signup sheet&amp;quot; to see the list of available topics.&lt;br /&gt;
## Click the 'View topic bookmarks icon' to see a list of all bookmarks for this topic.&lt;br /&gt;
## The user should see links to 'Edit Bookmark' and 'Destroy Bookmark' next to a bookmark only if the user is an instructor, the user submitted the bookmark, or the user is a teammate of the user who submitted the bookmark.&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
The current version of Expertiza does not have any tests for the bookmark controller or model. We intend on adding comprehensive RSpec tests for all changes we have added to controller classes and unit tests for model classes.&lt;br /&gt;
&lt;br /&gt;
===Code Coverage===&lt;br /&gt;
&lt;br /&gt;
=='''Application Deployment'''==&lt;br /&gt;
 &lt;br /&gt;
This web application deployed on VCL is located at [http://152.46.17.220:8080 http://152.46.17.220:8080]&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
1. [https://github.com/expertiza/expertiza/ Expertiza on GitHub]&lt;br /&gt;
&lt;br /&gt;
2. [https://github.com/hosungh/expertiza/ Forked GitHub Repo]&lt;br /&gt;
&lt;br /&gt;
3. [http://152.46.17.220:8080 Deployed Application]&lt;br /&gt;
&lt;br /&gt;
4. [https://github.com/expertiza/expertiza/pull/1704/ Beta Branch Pull Request]&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:QuestionnaireForLastBookmark.png&amp;diff=131947</id>
		<title>File:QuestionnaireForLastBookmark.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:QuestionnaireForLastBookmark.png&amp;diff=131947"/>
		<updated>2020-03-23T23:30:06Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2005._Bookmark_enhancements&amp;diff=131943</id>
		<title>CSC/ECE 517 Spring 2020 - E2005. Bookmark enhancements</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2005._Bookmark_enhancements&amp;diff=131943"/>
		<updated>2020-03-23T23:27:58Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: /* Code Modifications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==&amp;lt;b&amp;gt;E2005. Bookmark Enhancements&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open-source project that is built using the [http://rubyonrails.org/ Ruby on Rails] framework. At its core, it is a highly versatile tool that academic institutions can use to craft learning objectives centered around team projects, peer reviews, and highly-customizable assignments.&lt;br /&gt;
&lt;br /&gt;
=='''Problem Statement'''==&lt;br /&gt;
The purpose of this project was to add meaningful enhancements and fixes to the bookmark feature in Expertiza, entities that can be attached to a topic to aid the authors who decide to take on a certain assignment. While the major functionality of the bookmark feature was already present by the time the team embarked on this project (most notably the ability to create/edit and rate bookmarks), many desired functions were conveniently broken or left out.&lt;br /&gt;
&lt;br /&gt;
===Completed Stories===&lt;br /&gt;
Below is a breakdown of the stories that were drawn up and completed for this project:&lt;br /&gt;
&lt;br /&gt;
1. Need a way to view all responses to the bookmark questionnaires.&lt;br /&gt;
&lt;br /&gt;
2. Modify permissions for deleting bookmarks.The person who creates the bookmark, the team for whom the bookmark is meant, and the instructor, should be able to delete.&lt;br /&gt;
&lt;br /&gt;
3. &amp;quot;View bookmarks&amp;quot; link on student_task/view breaks if the student has not selected a topic yet.&lt;br /&gt;
&lt;br /&gt;
4. Bookmark rating questionnaire should include question asking the reviewer whether or not the bookmark appears to have been used by the author. Get the bookmark questionnaire functioning and add to the bookmark list page.&lt;br /&gt;
&lt;br /&gt;
5. Fix issue in which users should not be able to review their own bookmark using the questionnaire, but currently can.&lt;br /&gt;
&lt;br /&gt;
6. Add a number next to/inside the icon with the number of current bookmark in order to make it clear whether a bookmark exists for a topic.&lt;br /&gt;
&lt;br /&gt;
7. Add a &amp;quot;View bookmarks&amp;quot; link to the assignment view page for easier access.&lt;br /&gt;
&lt;br /&gt;
8. Add rating to the bookmark questionnaire and use that rating to calculate the average instead of using the current dropdown.&lt;br /&gt;
&lt;br /&gt;
9. A student should not be able to rate his/her own bookmark.&lt;br /&gt;
&lt;br /&gt;
10. Add URL to bookmark list for assignment topic on the assignment page, to make viewing bookmarks easier.&lt;br /&gt;
&lt;br /&gt;
11. Instructors cannot currently see bookmarks (gets an error message saying instructors cannot create bookmarks). &lt;br /&gt;
&lt;br /&gt;
12. &amp;quot;Back&amp;quot; button from Bookmarks list is broken.&lt;br /&gt;
&lt;br /&gt;
13. When creating a bookmark with an empty description field, the notice says the bookmark was successfully created even though it fails.&lt;br /&gt;
&lt;br /&gt;
14. &amp;quot;Bookmark ratings&amp;quot; should be a type of rubric when you go to Manage &amp;gt; Questionnaires. Although 'Bookmark Rating' is already a type of rubric, it isn't listed when hovering over Manage... &amp;gt; Questionnaires &lt;br /&gt;
&lt;br /&gt;
15. Create a way to mark a bookmark that was rated to be helpful by all reviewers, on average. &lt;br /&gt;
&lt;br /&gt;
16. Students can add/view bookmarks when &amp;quot;Allow participants to create bookmarks?&amp;quot; box is unchecked for the assignment.&lt;br /&gt;
&lt;br /&gt;
=='''Code Modifications'''==&lt;br /&gt;
&lt;br /&gt;
'''Fix the &amp;quot;Back&amp;quot; button:'''&lt;br /&gt;
When either backing out of creating or viewing/editing a bookmark, the back functionality does not work, both prompting errors. Issue has been fixed and users can once again go back to the appropriate page.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;%= link_to 'Back', '#', :onclick =&amp;gt; 'pageBack()' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    function pageBack() {&lt;br /&gt;
  	history.back()&lt;br /&gt;
    }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/new.html.erb &lt;br /&gt;
    &amp;lt;%= link_to 'Back', '#', :onclick =&amp;gt; 'pageBack()' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    function pageBack() {&lt;br /&gt;
  	history.back()&lt;br /&gt;
    }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/edit.html.erb&lt;br /&gt;
    &amp;lt;%= link_to 'Back', '#', :onclick =&amp;gt; 'pageBack()' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    function pageBack() {&lt;br /&gt;
  	history.back()&lt;br /&gt;
    }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/2?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Commit for &amp;quot;Back&amp;quot; capability when updating bookmark can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/4?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Check whether text field is present when creating/updating bookmark:'''&lt;br /&gt;
Previously, when a bookmark was created/updated and the corresponding &amp;quot;Title&amp;quot;, &amp;quot;URL&amp;quot;, or &amp;quot;Description&amp;quot; text fields were not filled in, the bookmark was not created or updated sans any error or warning. In fact, the user would be taken to the list of bookmarks available, forcing him/her to go back to the page corresponding to the bookmark create/edit page. This fix prompts users with an error indicating which text field needs to be filled in in order to fulfill the particular bookmark create/edit function.&lt;br /&gt;
&lt;br /&gt;
[[File:CheckFieldsTitle.png]][[File:CheckFieldsUrl.png]][[File:CheckFieldsDescription.png]] &lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/new.html.erb&lt;br /&gt;
      &amp;lt;%= label_tag 'Title' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= text_field_tag :title, params[:title], :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag 'Url' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= text_field_tag :url, params[:url], :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag 'Description' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= text_area_tag :description, params[:description], :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/edit.html.erb&lt;br /&gt;
      &amp;lt;%= label_tag 'Title' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.text_field :title, :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag 'Url' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.text_field :url, :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag 'Description' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.text_area :description, :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/4?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Change average bookmark rating to be based on questionnaire:'''&lt;br /&gt;
The rating system for the bookmarks before these changes were elementary in nature - there was a drop-down menu to choose your particular rating for a bookmark while there was an average calculator just to the left of the aforementioned column. The new changes introduced allows the &amp;quot;Your rating&amp;quot; and &amp;quot;Avg. rating&amp;quot; columns for a particular bookmark to be calculated based on the scores given to the various questions present in a given bookmark questionnaire. The &amp;quot;Avg. rating&amp;quot; is calculated based on the mean rating of all the bookmark questionnaires scored by every reviewer while &amp;quot;Your rating&amp;quot; is simply the mean of the scores that you (the user) gave to all the questions on the questionnaire.&lt;br /&gt;
&lt;br /&gt;
[[File:BookmarkAvgRatings.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/controllers/bookmarks_controller.rb&lt;br /&gt;
    helper_method :specific_average_score&lt;br /&gt;
    helper_method :total_average_score&lt;br /&gt;
&lt;br /&gt;
    def specific_average_score(bookmark)&lt;br /&gt;
        if bookmark.nil?&lt;br /&gt;
            return '-'&lt;br /&gt;
        else&lt;br /&gt;
            assessment = SignUpTopic.find(bookmark.topic_id).assignment&lt;br /&gt;
            questions = assessment.questionnaires.where(type: 'BookmarkRatingQuestionnaire').flat_map(&amp;amp;:questions)&lt;br /&gt;
            responses = BookmarkRatingResponseMap.where(&lt;br /&gt;
                reviewed_object_id: assessment.id,&lt;br /&gt;
                reviewee_id: bookmark.id,&lt;br /&gt;
                reviewer_id: AssignmentParticipant.find_by(user_id: current_user.id).id).flat_map {|r| Response.where(map_id: r.id) }&lt;br /&gt;
            score = Answer.get_total_score(response: responses, questions: questions)&lt;br /&gt;
            if score.nil?&lt;br /&gt;
                return '-'&lt;br /&gt;
            else&lt;br /&gt;
                (score * 5.0 / 100.0).round(2)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    def total_average_score(bookmark)&lt;br /&gt;
        if bookmark.nil?&lt;br /&gt;
          return '-'&lt;br /&gt;
        else&lt;br /&gt;
          assessment = SignUpTopic.find(bookmark.topic_id).assignment&lt;br /&gt;
          questions = assessment.questionnaires.where(type: 'BookmarkRatingQuestionnaire').flat_map(&amp;amp;:questions)&lt;br /&gt;
          responses = BookmarkRatingResponseMap.where(&lt;br /&gt;
              reviewed_object_id: assessment.id,&lt;br /&gt;
              reviewee_id: bookmark.id).flat_map {|r| Response.where(map_id: r.id) }&lt;br /&gt;
          totalScore = Answer.compute_scores(responses, questions)&lt;br /&gt;
          if totalScore[:avg].nil?&lt;br /&gt;
              return '-'&lt;br /&gt;
          else&lt;br /&gt;
             (totalScore[:avg] * 5.0 / 100.0).round(2)&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;!-- total average rating --&amp;gt;&lt;br /&gt;
    &amp;lt;% totalAvg = total_average_score(bookmark) %&amp;gt;&lt;br /&gt;
    &amp;lt;% if totalAvg != 0 %&amp;gt;&lt;br /&gt;
        &amp;lt;%= totalAvg %&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- specific average score per user for a rubric --&amp;gt;&lt;br /&gt;
    &amp;lt;% specAvg = specific_average_score(bookmark) %&amp;gt;&lt;br /&gt;
    &amp;lt;% if specAvg != 0 %&amp;gt;&lt;br /&gt;
        &amp;lt;%= specAvg %&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/12?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Addition of badges for exceptionally helpful bookmarks:'''&lt;br /&gt;
Originally, no badge system was setup for bookmarks that have proven to be helpful guides for other students taking on the same project. The new changes introduced allows bookmarks to be attached to bookmarks with exceptionally good average ratings (i.e, above a rating of 3). A badge is signified by a full star while the absence of a badge is represented by an empty star.&lt;br /&gt;
&lt;br /&gt;
[[File:Bookmark list.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;th class=&amp;quot;head&amp;quot;&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
        &amp;lt;!-- badge --&amp;gt;&lt;br /&gt;
        &amp;lt;% if totalAvg.to_f &amp;gt; 3 %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;glyphicon glyphicon-star&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;% else %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;glyphicon glyphicon-star-empty&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/14?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Users cannot rate bookmarks they've uploaded. '''&lt;br /&gt;
We wanted to make sure that users cannot rate bookmarks that they uploaded.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;% unless session[:user].id == bookmark.user_id %&amp;gt;&lt;br /&gt;
      # ... code for rating the bookmarks&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
      &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/1/files?w=1 here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Users cannot review bookmarks they've uploaded using the questionnaire. '''&lt;br /&gt;
We also wanted to make sure that users cannot review bookmarks that they uploaded using the questionnaires.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;% unless session[:user].id == bookmark.user_id %&amp;gt;&lt;br /&gt;
      # ... code for reviewing bookmarks using the questionnaire&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
      &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/5/files?w=1 here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Users should be able to see the number of bookmarks from the topics list. '''&lt;br /&gt;
Previously, users could add bookmarks, but could not tell how many bookmarks were provided for each topic (if any) without clicking the &amp;quot;View bookmarks&amp;quot; icon. This UI change displays the number of bookmarks for the topic inside the view bookmarks icon from the topic list view so that users don't need to click through each topic individually.&lt;br /&gt;
&lt;br /&gt;
[[File:Sign up sheet bookmarks.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
    &amp;lt;nowiki&amp;gt;&amp;lt;p class=&amp;quot;fa fa-stack-2x fa-inverse&amp;quot; style='font-size: 1.0em; padding-top: 2px; font-weight: bold;'&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
      &amp;lt;nowiki&amp;gt;&amp;lt;%= Bookmark.where(topic_id: topic.id).length.to_s %&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    &amp;lt;nowiki&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/6/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''UI changes to make finding your bookmarks easier:'''&lt;br /&gt;
We added a &amp;quot;View Bookmarks&amp;quot; link to the student task view, that takes the student directly to the bookmarks that have been submitted for their topic. This code was then modified such that the link is greyed out if the student does not have a topic, and is hidden if bookmarks are not enabled for the assignment.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/controllers/student_task_controller.rb&lt;br /&gt;
:app/views/student_task/view.html.erb&lt;br /&gt;
     &amp;lt;% if @use_bookmark %&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;li&amp;gt;&amp;gt;&lt;br /&gt;
            &amp;lt;% if @topic_id and @assignment.submission_allowed(@topic_id) %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;View bookmarks&amp;quot;, :controller=&amp;gt;'bookmarks', :action=&amp;gt; 'list', :id =&amp;gt; @topic_id %&amp;gt; (View bookmarks others have submitted for your topic)&lt;br /&gt;
          &amp;lt;% else %&amp;gt;&lt;br /&gt;
            &amp;lt;&amp;lt;nowiki /&amp;gt;font color=&amp;quot;gray&amp;quot;&amp;gt;View bookmarks&amp;lt;/font&amp;gt; (You have to choose a topic first)&lt;br /&gt;
          &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relevant commits can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/commit/04b24b1dedd3414f58f52d394f2a5b9568e83872 here] [https://github.com/hosungh/expertiza/commit/15a775624307651755a70e63625a370478aa63b4 here]&amp;lt;/span&amp;gt; and &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/commit/f144594ae062369754d54288eff8959136510ccc here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Grey out add/view bookmarks link on the topic page if bookmarks are not enabled.''' Previously, students could submit and view bookmarks even if bookmarks were disabled for the assignment. Now these options are hidden.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
  &amp;lt;% if @use_bookmark %&amp;gt;&lt;br /&gt;
    &amp;lt;&amp;lt;nowiki /&amp;gt;%= link_to :controller=&amp;gt;'bookmarks', :action=&amp;gt; 'list', :id =&amp;gt; topic.id do %&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;span class=&amp;quot;fa-stack fa-md&amp;quot; title='View topic bookmarks'&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-bookmark fa-stack-1x fa-2x&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;p class=&amp;quot;fa fa-stack-2x fa-inverse&amp;quot; style='font-size: 1.0em; padding-top: 2px; font-weight: bold;'&amp;gt;&lt;br /&gt;
          &amp;lt;%= Bookmark.where(topic_id: topic.id).length.to_s %&amp;gt;&lt;br /&gt;
          &amp;lt;&amp;lt;nowiki /&amp;gt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;%= link_to :controller=&amp;gt;'bookmarks', :action=&amp;gt; 'new', :id =&amp;gt; topic.id , :assignment_id =&amp;gt; params[:assignment_id] do %&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;span class=&amp;quot;fa-stack fa-md&amp;quot; title='Add bookmark to topic'&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-bookmark fa-stack-1x fa-2x&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-plus fa-stack-1x fa-inverse&amp;quot; style='font-size: .5em'&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;&amp;lt;nowiki /&amp;gt;% else %&amp;gt;&lt;br /&gt;
    &amp;lt;&amp;lt;nowiki /&amp;gt;span class=&amp;quot;fa-stack fa-md&amp;quot; title='View topic bookmarks'&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-bookmark fa-stack-1x fa-2x&amp;quot; style=&amp;quot;opacity: 0.3;&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
   &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/sign_up_sheet/_table_header.html.erb&lt;br /&gt;
  &amp;lt;&amp;lt;nowiki /&amp;gt;th width=&amp;quot;10%&amp;quot;&amp;gt; Bookmarks&lt;br /&gt;
    &amp;lt;% unless @use_bookmark %&amp;gt; (disabled) &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;&amp;lt;nowiki /&amp;gt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Commit can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/commit/f0352ddf441d3773109b2e0208981f3fe122b5df here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Disable-bookmark-links.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Modify Bookmark delete permissions. '''&lt;br /&gt;
Bookmarks should be deletable by the user who created the bookmark, a teammate of the user who provided the bookmark, and the instructor.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
        &amp;lt;!--Edit/Destroy Bookmarks--&amp;gt;&lt;br /&gt;
        &amp;lt;% is_teammate = false %&amp;gt;&lt;br /&gt;
        &amp;lt;% team = SignedUpTeam.find_by(topic_id: @topic.id) rescue nil %&amp;gt;&lt;br /&gt;
        &amp;lt;% if team %&amp;gt;&lt;br /&gt;
          &amp;lt;% teams_users = TeamsUser.where(['team_id = ?', team.team_id]) %&amp;gt;&lt;br /&gt;
          &amp;lt;% is_teammate = teams_users.select {|tu| tu.user_id == session[:user].id}.size &amp;gt; 0  %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% if bookmark.user_id == session[:user].id or is_teammate or ['Instructor'].include? @current_role_name %&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Edit Bookmark', :action =&amp;gt; 'edit', :id =&amp;gt; bookmark.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Destroy Bookmark', bookmark, :confirm =&amp;gt; &amp;quot;Delete bookmark \&amp;quot;#{bookmark.title}\&amp;quot;?&amp;quot;, :method =&amp;gt; :delete %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/13/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Fix the ability to create bookmark questionnaires and use in assignments.'''&lt;br /&gt;
Previously, questionnaires for things like Teammate Reviews could be created and used in assignments. Users could fill these out and the scores would be stored for later reference by TAs and instructors. The questionnaire for bookmark reviews was previously not functional, but now instructors can create new bookmark questionnaires and assign them to assignments. &lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/controllers/questionnaires_controller.rb&lt;br /&gt;
       @questionnaire = Object.const_get(params[:model].split.join).new if Questionnaire::QUESTIONNAIRE_TYPES.include? params[:model].split.join&lt;br /&gt;
        ....&lt;br /&gt;
        if %w[AuthorFeedback CourseSurvey TeammateReview GlobalSurvey AssignmentSurvey BookmarkRating].include?(display_type) &lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
:app/controllers/questionnaires_controller.rb&lt;br /&gt;
    ....&lt;br /&gt;
    when &amp;quot;bookmark&amp;quot;&lt;br /&gt;
      bookmark = Bookmark.find(@map.response_map.reviewee_id)&lt;br /&gt;
      redirect_to controller: 'bookmarks', action: 'list', id: bookmark.topic_id&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;quot;BookmarkRatingResponseMap&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:app/models/bookmark_rating_response_map.rb&lt;br /&gt;
    ....&lt;br /&gt;
    self.assignment.questionnaires.find_by(type: 'BookmarkRatingQuestionnaire')&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    ....&lt;br /&gt;
          &amp;lt;td&amp;gt;&lt;br /&gt;
          &amp;lt;% assignment_participant = AssignmentParticipant.find_by(user_id: session[:user].id) %&amp;gt;&lt;br /&gt;
          &amp;lt;% map = BookmarkRatingResponseMap.where(reviewed_object_id: @topic.assignment.id, reviewer_id: assignment_participant.id, reviewee_id: bookmark.id).first %&amp;gt;&lt;br /&gt;
          &amp;lt;% if map.nil? %&amp;gt;&lt;br /&gt;
            &amp;lt;% map = BookmarkRatingResponseMap.create(reviewed_object_id: @topic.assignment.id, reviewer_id: assignment_participant.id, reviewee_id: bookmark.id) %&amp;gt;&lt;br /&gt;
          &amp;lt;% end %&amp;gt;&lt;br /&gt;
          &amp;lt;% review = map.response.last %&amp;gt;&lt;br /&gt;
          &amp;lt;% if review.nil? %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;Review&amp;quot;, {:controller =&amp;gt; 'response', :action =&amp;gt; 'new', :id =&amp;gt; map.map_id, :return =&amp;gt; &amp;quot;bookmark&amp;quot;} %&amp;gt;&lt;br /&gt;
          &amp;lt;% else %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;View&amp;quot;, {:controller =&amp;gt; 'response', :action =&amp;gt; 'view', :id =&amp;gt; review.id} %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;Edit&amp;quot;, {:controller =&amp;gt; 'response', :action =&amp;gt; 'edit', :id =&amp;gt; review.id, :return =&amp;gt; &amp;quot;bookmark&amp;quot;} %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;nowiki&amp;gt;&amp;lt;% if bookmark.user_id == session[:user].id %&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Edit', :action =&amp;gt; 'edit', :id =&amp;gt; bookmark.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Destroy', bookmark, :confirm =&amp;gt; &amp;quot;Delete bookmark \&amp;quot;#{bookmark.title}\&amp;quot;?&amp;quot;, :method =&amp;gt; :delete %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Edit Bookmark', :action =&amp;gt; 'edit', :id =&amp;gt; bookmark.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Destroy Bookmark', bookmark, :confirm =&amp;gt; &amp;quot;Delete bookmark \&amp;quot;#{bookmark.title}\&amp;quot;?&amp;quot;, :method =&amp;gt; :delete %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/response/view.html.erb&lt;br /&gt;
    &amp;lt;% if !(@map.instance_of? TeammateReviewResponseMap) &amp;amp;&amp;amp; !@map.survey? &amp;amp;&amp;amp; !(@map.instance_of? BookmarkRatingResponseMap) %&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/3/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Instructors should have the ability to view all bookmark responses. '''&lt;br /&gt;
Instructors should have a way to view all the responses to the bookmark questionnaires so that can see which bookmarks provided were deemed useful.&lt;br /&gt;
&lt;br /&gt;
[[File:Bookmark response list.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/helpers/report_formatter_helper.rb&lt;br /&gt;
  def bookmark_rating_response_map(params, _session = nil)&lt;br /&gt;
    assign_basics(params)&lt;br /&gt;
    @reviewers = BookmarkRatingResponseMap.bookmark_response_report(@id)&lt;br /&gt;
    @topics = @assignment.sign_up_topics&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
:app/models/bookmark_rating_response_map.rb&lt;br /&gt;
    class BookmarkRatingResponseMap &amp;lt; ReviewResponseMap&lt;br /&gt;
    &lt;br /&gt;
    def self.bookmark_response_report(id)&lt;br /&gt;
      BookmarkRatingResponseMap.select(&amp;quot;DISTINCT reviewer_id&amp;quot;).where(&amp;quot;reviewed_object_id = ?&amp;quot;, id)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
:app/views/reports/_bookmark_rating_report.html.erb&lt;br /&gt;
    &amp;lt;%= create_report_table_header(&amp;quot;Reviewed By&amp;quot; =&amp;gt; &amp;quot;16%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Topic&amp;quot; =&amp;gt; &amp;quot;14%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Bookmark Review&amp;quot; =&amp;gt; &amp;quot;20%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Submitted By&amp;quot; =&amp;gt; &amp;quot;20%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Last reviewed at&amp;quot; =&amp;gt; &amp;quot;20%&amp;quot;) %&amp;gt;&lt;br /&gt;
    &amp;lt;%@l = -1 %&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;% @reviewers.each do |r| %&amp;gt;&lt;br /&gt;
      &amp;lt;% @user = User.find(Participant.find(r.reviewer_id).user_id) %&amp;gt;&lt;br /&gt;
      &amp;lt;% @bookmark_rating_response_maps = BookmarkRatingResponseMap.where(reviewer_id: r.reviewer_id, reviewed_object_id: @id) %&amp;gt;&lt;br /&gt;
      &amp;lt;!-- Find only valid responses from this user --&amp;gt;&lt;br /&gt;
      &amp;lt;% maps = @bookmark_rating_response_maps.select { |m| !Response.where(map_id: m.id).first.blank? and m.reviewee and m.reviewee.user_id != @user.id }%&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
      &amp;lt;%@l = @l+1 %&amp;gt;&lt;br /&gt;
      &amp;lt;% (@l % 2 == 0) ? @bgcolor = &amp;quot;#ffffff&amp;quot; : @bgcolor = &amp;quot;#f9f9f9&amp;quot; %&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
      &amp;lt;% if maps.count &amp;gt; 0 %&amp;gt;&lt;br /&gt;
          &amp;lt;!--Reviewer--&amp;gt;&lt;br /&gt;
        &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt; rowspan= &amp;lt;%= maps.count %&amp;gt;&amp;gt;&lt;br /&gt;
          &amp;lt;% @reviewer_name = @user.fullname(session[:ip]) %&amp;gt;&lt;br /&gt;
          &amp;lt;%= link_to @reviewer_name, :controller =&amp;gt; 'popup', :action =&amp;gt; 'reviewer_details_popup', :id =&amp;gt; r.reviewer_id, :assignment_id =&amp;gt; @id %&amp;gt;&lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
        &amp;lt;% maps.each do |map| %&amp;gt;&lt;br /&gt;
          &amp;lt;% @reviewee = map.reviewee %&amp;gt;&lt;br /&gt;
            &amp;lt;!-- Topic --&amp;gt;&lt;br /&gt;
            &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt;  align=&amp;quot;left&amp;quot; colspan=1&amp;gt;&lt;br /&gt;
              &amp;lt;% topic = SignUpTopic.find(@reviewee.topic_id) %&amp;gt;&lt;br /&gt;
              &amp;lt;%= topic.topic_name %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
            &amp;lt;!-- Bookmarks reviewed--&amp;gt;&lt;br /&gt;
            &amp;lt;td id = &amp;quot;green&amp;quot; bgcolor=&amp;lt;%= @bgcolor %&amp;gt; align=&amp;quot;left&amp;quot; colspan=1&amp;gt;&lt;br /&gt;
              &amp;lt;%= link_to @reviewee.title, {:controller =&amp;gt; 'response', :action =&amp;gt; 'view', :id =&amp;gt; map.response.last.id}, :title =&amp;gt; &amp;quot;Click here to view this bookmark review&amp;quot; %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
            &amp;lt;!-- Submitted by--&amp;gt;&lt;br /&gt;
            &amp;lt;td id = &amp;quot;green&amp;quot; bgcolor=&amp;lt;%= @bgcolor %&amp;gt; style=&amp;quot;color:#DD3300&amp;quot; align=&amp;quot;left&amp;quot; colspan=1&amp;gt;&lt;br /&gt;
              &amp;lt;% reviewed_by_user = User.find(@reviewee.user_id).name %&amp;gt;&lt;br /&gt;
              &amp;lt;%= link_to reviewed_by_user, impersonate_impersonate_path(:user =&amp;gt; {:name =&amp;gt; reviewed_by_user}), :method =&amp;gt; :post, :title =&amp;gt; &amp;quot;Click here to impersonate this user&amp;quot; %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
            &amp;lt;!--Last reviewed at--&amp;gt;&lt;br /&gt;
            &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt; align=&amp;quot;left&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;% @bookmark_review_response = Response.where(map_id: map.id).first %&amp;gt;&lt;br /&gt;
              &amp;lt;%= @bookmark_review_response.updated_at.to_time.strftime(&amp;quot;%m/%d/%Y - %I:%M%p&amp;quot;) %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/reports/_searchbox.html.erb&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;lt;option value='BookmarkRatingResponseMap' &amp;gt;&lt;br /&gt;
      Bookmark Review Report&lt;br /&gt;
    &amp;lt;/option&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;lt;% elsif @type == &amp;quot;BookmarkReviewResponseMap&amp;quot; %&amp;gt;&lt;br /&gt;
        &amp;lt;nowiki&amp;gt;&amp;lt;h1&amp;gt; Bookmark review report for &amp;lt;%= @assignment.name%&amp;gt; &amp;lt;/h1&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:app/views/reports/response_report.html.haml&lt;br /&gt;
    - elsif @type == &amp;quot;BookmarkRatingResponseMap&amp;quot;&lt;br /&gt;
       = render :partial =&amp;gt; 'bookmark_rating_report'&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/10/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
&lt;br /&gt;
* Create a Bookmark Questionnaire&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Questionnaires.&lt;br /&gt;
# Find 'Bookmark Rating' and click the '+' to create a new questionnaire.&lt;br /&gt;
# Give a name for this questionnaire, leave the min and max score at 0 and 5 respectively, and click 'Create'.&lt;br /&gt;
# Go to Manage &amp;gt; Questionnaires and click on 'Bookmark Rating' to view all of the questionnaires. Click the edit icon for the questionnaire you just created.&lt;br /&gt;
# Select 'Add 1 more Criterion question(s)'. &lt;br /&gt;
# For the question, enter &amp;quot;Does this bookmark appear to have been used by the author?&amp;quot; and leave the other fields blank. This question will be helpful in determining how useful the bookmark was.&lt;br /&gt;
# Click 'Save bookmark rating questionnaire'. Now this questionnaire can be used in assignments.&lt;br /&gt;
&lt;br /&gt;
* Enable Bookmarks&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Choose an assignment that will be used for testing and have bookmarks enabled and select the edit icon under Actions.&lt;br /&gt;
# Under Topics Tab select 'Allow participants to create bookmarks?'.&lt;br /&gt;
# Go to Rubrics tab, under 'Bookmark Rating' select the Bookmark review questionnaire that was previously created to use for reviewing the bookmarks.&lt;br /&gt;
&lt;br /&gt;
* Add a Bookmark to a Topic&lt;br /&gt;
# Log in as a student who is a participant of the assignment with bookmarks enabled and select that assignment.&lt;br /&gt;
# Select a &amp;quot;Signup sheet&amp;quot; to see the list of available topics.&lt;br /&gt;
# Choose a topic and select the 'Add bookmark to topic' icon from the Bookmarks column. The 'Add bookmark to topic' icon has a '+' sign. &lt;br /&gt;
# Fill in all the fields for the bookmark, including Title, Url, and Description and click 'Add new bookmark'.&lt;br /&gt;
# You should now see a page listing all bookmarks for this topic.&lt;br /&gt;
   &lt;br /&gt;
* Viewing all Bookmarks for a Topic&lt;br /&gt;
# Log in as a student who is a participant of the assignment with bookmarks enabled (or an instructor) and select that assignment.&lt;br /&gt;
# Select a &amp;quot;Signup sheet&amp;quot; to see the list of available topics.&lt;br /&gt;
# The number of bookmarks for each topic should be displayed visually inside the 'View topic bookmarks' icon in the bookmarks column.&lt;br /&gt;
# Click the 'View topic bookmarks icon' to see a list of all bookmarks for this topic.&lt;br /&gt;
&lt;br /&gt;
* Editing and Destroying Bookmarks for a Topic&lt;br /&gt;
# Perform this test with each of the following users: an instructor, a user who is assigned to the topic, and a teammate of the user who is assigned to the topic.&lt;br /&gt;
## Log in with the user and select the assignment with bookmarks enabled.&lt;br /&gt;
## Select a &amp;quot;Signup sheet&amp;quot; to see the list of available topics.&lt;br /&gt;
## Click the 'View topic bookmarks icon' to see a list of all bookmarks for this topic.&lt;br /&gt;
## The user should see links to 'Edit Bookmark' and 'Destroy Bookmark' next to a bookmark only if the user is an instructor, the user submitted the bookmark, or the user is a teammate of the user who submitted the bookmark.&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
The current version of Expertiza does not have any tests for the bookmark controller or model. We intend on adding comprehensive RSpec tests for all changes we have added to controller classes and unit tests for model classes.&lt;br /&gt;
&lt;br /&gt;
===Code Coverage===&lt;br /&gt;
&lt;br /&gt;
=='''Application Deployment'''==&lt;br /&gt;
 &lt;br /&gt;
This web application deployed on VCL is located at [http://152.46.17.220:8080 http://152.46.17.220:8080]&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
1. [https://github.com/expertiza/expertiza/ Expertiza on GitHub]&lt;br /&gt;
&lt;br /&gt;
2. [https://github.com/hosungh/expertiza/ Forked GitHub Repo]&lt;br /&gt;
&lt;br /&gt;
3. [http://152.46.17.220:8080 Deployed Application]&lt;br /&gt;
&lt;br /&gt;
4. [https://github.com/expertiza/expertiza/pull/1704/ Beta Branch Pull Request]&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:BookmarkBadges.png&amp;diff=131941</id>
		<title>File:BookmarkBadges.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:BookmarkBadges.png&amp;diff=131941"/>
		<updated>2020-03-23T23:26:03Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:BookmarkAvgRatings.png&amp;diff=131940</id>
		<title>File:BookmarkAvgRatings.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:BookmarkAvgRatings.png&amp;diff=131940"/>
		<updated>2020-03-23T23:25:46Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2005._Bookmark_enhancements&amp;diff=131937</id>
		<title>CSC/ECE 517 Spring 2020 - E2005. Bookmark enhancements</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2005._Bookmark_enhancements&amp;diff=131937"/>
		<updated>2020-03-23T23:22:37Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: /* Code Modifications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==&amp;lt;b&amp;gt;E2005. Bookmark Enhancements&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open-source project that is built using the [http://rubyonrails.org/ Ruby on Rails] framework. At its core, it is a highly versatile tool that academic institutions can use to craft learning objectives centered around team projects, peer reviews, and highly-customizable assignments.&lt;br /&gt;
&lt;br /&gt;
=='''Problem Statement'''==&lt;br /&gt;
The purpose of this project was to add meaningful enhancements and fixes to the bookmark feature in Expertiza, entities that can be attached to a topic to aid the authors who decide to take on a certain assignment. While the major functionality of the bookmark feature was already present by the time the team embarked on this project (most notably the ability to create/edit and rate bookmarks), many desired functions were conveniently broken or left out.&lt;br /&gt;
&lt;br /&gt;
===Completed Stories===&lt;br /&gt;
Below is a breakdown of the stories that were drawn up and completed for this project:&lt;br /&gt;
&lt;br /&gt;
1. Need a way to view all responses to the bookmark questionnaires.&lt;br /&gt;
&lt;br /&gt;
2. Modify permissions for deleting bookmarks.The person who creates the bookmark, the team for whom the bookmark is meant, and the instructor, should be able to delete.&lt;br /&gt;
&lt;br /&gt;
3. &amp;quot;View bookmarks&amp;quot; link on student_task/view breaks if the student has not selected a topic yet.&lt;br /&gt;
&lt;br /&gt;
4. Bookmark rating questionnaire should include question asking the reviewer whether or not the bookmark appears to have been used by the author. Get the bookmark questionnaire functioning and add to the bookmark list page.&lt;br /&gt;
&lt;br /&gt;
5. Fix issue in which users should not be able to review their own bookmark using the questionnaire, but currently can.&lt;br /&gt;
&lt;br /&gt;
6. Add a number next to/inside the icon with the number of current bookmark in order to make it clear whether a bookmark exists for a topic.&lt;br /&gt;
&lt;br /&gt;
7. Add a &amp;quot;View bookmarks&amp;quot; link to the assignment view page for easier access.&lt;br /&gt;
&lt;br /&gt;
8. Add rating to the bookmark questionnaire and use that rating to calculate the average instead of using the current dropdown.&lt;br /&gt;
&lt;br /&gt;
9. A student should not be able to rate his/her own bookmark.&lt;br /&gt;
&lt;br /&gt;
10. Add URL to bookmark list for assignment topic on the assignment page, to make viewing bookmarks easier.&lt;br /&gt;
&lt;br /&gt;
11. Instructors cannot currently see bookmarks (gets an error message saying instructors cannot create bookmarks). &lt;br /&gt;
&lt;br /&gt;
12. &amp;quot;Back&amp;quot; button from Bookmarks list is broken.&lt;br /&gt;
&lt;br /&gt;
13. When creating a bookmark with an empty description field, the notice says the bookmark was successfully created even though it fails.&lt;br /&gt;
&lt;br /&gt;
14. &amp;quot;Bookmark ratings&amp;quot; should be a type of rubric when you go to Manage &amp;gt; Questionnaires. Although 'Bookmark Rating' is already a type of rubric, it isn't listed when hovering over Manage... &amp;gt; Questionnaires &lt;br /&gt;
&lt;br /&gt;
15. Create a way to mark a bookmark that was rated to be helpful by all reviewers, on average. &lt;br /&gt;
&lt;br /&gt;
16. Students can add/view bookmarks when &amp;quot;Allow participants to create bookmarks?&amp;quot; box is unchecked for the assignment.&lt;br /&gt;
&lt;br /&gt;
=='''Code Modifications'''==&lt;br /&gt;
&lt;br /&gt;
'''Fix the &amp;quot;Back&amp;quot; button:'''&lt;br /&gt;
When either backing out of creating or viewing/editing a bookmark, the back functionality does not work, both prompting errors. Issue has been fixed and users can once again go back to the appropriate page.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;%= link_to 'Back', '#', :onclick =&amp;gt; 'pageBack()' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    function pageBack() {&lt;br /&gt;
  	history.back()&lt;br /&gt;
    }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/new.html.erb &lt;br /&gt;
    &amp;lt;%= link_to 'Back', '#', :onclick =&amp;gt; 'pageBack()' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    function pageBack() {&lt;br /&gt;
  	history.back()&lt;br /&gt;
    }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/edit.html.erb&lt;br /&gt;
    &amp;lt;%= link_to 'Back', '#', :onclick =&amp;gt; 'pageBack()' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    function pageBack() {&lt;br /&gt;
  	history.back()&lt;br /&gt;
    }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/2?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Commit for &amp;quot;Back&amp;quot; capability when updating bookmark can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/4?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Check whether text field is present when creating/updating bookmark:'''&lt;br /&gt;
Previously, when a bookmark was created/updated and the corresponding &amp;quot;Title&amp;quot;, &amp;quot;URL&amp;quot;, or &amp;quot;Description&amp;quot; text fields were not filled in, the bookmark was not created or updated sans any error or warning. In fact, the user would be taken to the list of bookmarks available, forcing him/her to go back to the page corresponding to the bookmark create/edit page. This fix prompts users with an error indicating which text field needs to be filled in in order to fulfill the particular bookmark create/edit function.&lt;br /&gt;
&lt;br /&gt;
[[File:CheckFieldsTitle.png]][[File:CheckFieldsUrl.png]][[File:CheckFieldsDescription.png]] &lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/new.html.erb&lt;br /&gt;
      &amp;lt;%= label_tag 'Title' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= text_field_tag :title, params[:title], :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag 'Url' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= text_field_tag :url, params[:url], :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag 'Description' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= text_area_tag :description, params[:description], :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/edit.html.erb&lt;br /&gt;
      &amp;lt;%= label_tag 'Title' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.text_field :title, :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag 'Url' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.text_field :url, :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag 'Description' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.text_area :description, :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/4?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Change average bookmark rating to be based on questionnaire:'''&lt;br /&gt;
The rating system for the bookmarks before these changes were elementary in nature - there was a drop-down menu to choose your particular rating for a bookmark while there was an average calculator just to the left of the aforementioned column. The new changes introduced allows the &amp;quot;Your rating&amp;quot; and &amp;quot;Avg. rating&amp;quot; columns for a particular bookmark to be calculated based on the scores given to the various questions present in a given bookmark questionnaire. The &amp;quot;Avg. rating&amp;quot; is calculated based on the mean rating of all the bookmark questionnaires scored by every reviewer while &amp;quot;Your rating&amp;quot; is simply the mean of the scores that you (the user) gave to all the questions on the questionnaire.&lt;br /&gt;
&lt;br /&gt;
[[File:Avg_Ratings_and_Badges.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/controllers/bookmarks_controller.rb&lt;br /&gt;
    helper_method :specific_average_score&lt;br /&gt;
    helper_method :total_average_score&lt;br /&gt;
&lt;br /&gt;
    def specific_average_score(bookmark)&lt;br /&gt;
        if bookmark.nil?&lt;br /&gt;
            return '-'&lt;br /&gt;
        else&lt;br /&gt;
            assessment = SignUpTopic.find(bookmark.topic_id).assignment&lt;br /&gt;
            questions = assessment.questionnaires.where(type: 'BookmarkRatingQuestionnaire').flat_map(&amp;amp;:questions)&lt;br /&gt;
            responses = BookmarkRatingResponseMap.where(&lt;br /&gt;
                reviewed_object_id: assessment.id,&lt;br /&gt;
                reviewee_id: bookmark.id,&lt;br /&gt;
                reviewer_id: AssignmentParticipant.find_by(user_id: current_user.id).id).flat_map {|r| Response.where(map_id: r.id) }&lt;br /&gt;
            score = Answer.get_total_score(response: responses, questions: questions)&lt;br /&gt;
            if score.nil?&lt;br /&gt;
                return '-'&lt;br /&gt;
            else&lt;br /&gt;
                (score * 5.0 / 100.0).round(2)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    def total_average_score(bookmark)&lt;br /&gt;
        if bookmark.nil?&lt;br /&gt;
          return '-'&lt;br /&gt;
        else&lt;br /&gt;
          assessment = SignUpTopic.find(bookmark.topic_id).assignment&lt;br /&gt;
          questions = assessment.questionnaires.where(type: 'BookmarkRatingQuestionnaire').flat_map(&amp;amp;:questions)&lt;br /&gt;
          responses = BookmarkRatingResponseMap.where(&lt;br /&gt;
              reviewed_object_id: assessment.id,&lt;br /&gt;
              reviewee_id: bookmark.id).flat_map {|r| Response.where(map_id: r.id) }&lt;br /&gt;
          totalScore = Answer.compute_scores(responses, questions)&lt;br /&gt;
          if totalScore[:avg].nil?&lt;br /&gt;
              return '-'&lt;br /&gt;
          else&lt;br /&gt;
             (totalScore[:avg] * 5.0 / 100.0).round(2)&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;!-- total average rating --&amp;gt;&lt;br /&gt;
    &amp;lt;% totalAvg = total_average_score(bookmark) %&amp;gt;&lt;br /&gt;
    &amp;lt;% if totalAvg != 0 %&amp;gt;&lt;br /&gt;
        &amp;lt;%= totalAvg %&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- specific average score per user for a rubric --&amp;gt;&lt;br /&gt;
    &amp;lt;% specAvg = specific_average_score(bookmark) %&amp;gt;&lt;br /&gt;
    &amp;lt;% if specAvg != 0 %&amp;gt;&lt;br /&gt;
        &amp;lt;%= specAvg %&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/12?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Addition of badges for exceptionally helpful bookmarks:'''&lt;br /&gt;
Originally, no badge system was setup for bookmarks that have proven to be helpful guides for other students taking on the same project. The new changes introduced allows bookmarks to be attached to bookmarks with exceptionally good average ratings (i.e, above a rating of 3). A badge is signified by a full star while the absence of a badge is represented by an empty star.&lt;br /&gt;
&lt;br /&gt;
[[File:Bookmark list.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;th class=&amp;quot;head&amp;quot;&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
        &amp;lt;!-- badge --&amp;gt;&lt;br /&gt;
        &amp;lt;% if totalAvg.to_f &amp;gt; 3 %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;glyphicon glyphicon-star&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;% else %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;glyphicon glyphicon-star-empty&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/14?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Users cannot rate bookmarks they've uploaded. '''&lt;br /&gt;
We wanted to make sure that users cannot rate bookmarks that they uploaded.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;% unless session[:user].id == bookmark.user_id %&amp;gt;&lt;br /&gt;
      # ... code for rating the bookmarks&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
      &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/1/files?w=1 here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Users cannot review bookmarks they've uploaded using the questionnaire. '''&lt;br /&gt;
We also wanted to make sure that users cannot review bookmarks that they uploaded using the questionnaires.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;% unless session[:user].id == bookmark.user_id %&amp;gt;&lt;br /&gt;
      # ... code for reviewing bookmarks using the questionnaire&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
      &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/5/files?w=1 here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Users should be able to see the number of bookmarks from the topics list. '''&lt;br /&gt;
Previously, users could add bookmarks, but could not tell how many bookmarks were provided for each topic (if any) without clicking the &amp;quot;View bookmarks&amp;quot; icon. This UI change displays the number of bookmarks for the topic inside the view bookmarks icon from the topic list view so that users don't need to click through each topic individually.&lt;br /&gt;
&lt;br /&gt;
[[File:Sign up sheet bookmarks.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
    &amp;lt;nowiki&amp;gt;&amp;lt;p class=&amp;quot;fa fa-stack-2x fa-inverse&amp;quot; style='font-size: 1.0em; padding-top: 2px; font-weight: bold;'&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
      &amp;lt;nowiki&amp;gt;&amp;lt;%= Bookmark.where(topic_id: topic.id).length.to_s %&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    &amp;lt;nowiki&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/6/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''UI changes to make finding your bookmarks easier:'''&lt;br /&gt;
We added a &amp;quot;View Bookmarks&amp;quot; link to the student task view, that takes the student directly to the bookmarks that have been submitted for their topic. This code was then modified such that the link is greyed out if the student does not have a topic, and is hidden if bookmarks are not enabled for the assignment.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/controllers/student_task_controller.rb&lt;br /&gt;
:app/views/student_task/view.html.erb&lt;br /&gt;
     &amp;lt;% if @use_bookmark %&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;li&amp;gt;&amp;gt;&lt;br /&gt;
            &amp;lt;% if @topic_id and @assignment.submission_allowed(@topic_id) %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;View bookmarks&amp;quot;, :controller=&amp;gt;'bookmarks', :action=&amp;gt; 'list', :id =&amp;gt; @topic_id %&amp;gt; (View bookmarks others have submitted for your topic)&lt;br /&gt;
          &amp;lt;% else %&amp;gt;&lt;br /&gt;
            &amp;lt;&amp;lt;nowiki /&amp;gt;font color=&amp;quot;gray&amp;quot;&amp;gt;View bookmarks&amp;lt;/font&amp;gt; (You have to choose a topic first)&lt;br /&gt;
          &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relevant commits can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/commit/04b24b1dedd3414f58f52d394f2a5b9568e83872 here] [https://github.com/hosungh/expertiza/commit/15a775624307651755a70e63625a370478aa63b4 here]&amp;lt;/span&amp;gt; and &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/commit/f144594ae062369754d54288eff8959136510ccc here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Grey out add/view bookmarks link on the topic page if bookmarks are not enabled.''' Previously, students could submit and view bookmarks even if bookmarks were disabled for the assignment. Now these options are hidden.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
  &amp;lt;% if @use_bookmark %&amp;gt;&lt;br /&gt;
    &amp;lt;&amp;lt;nowiki /&amp;gt;%= link_to :controller=&amp;gt;'bookmarks', :action=&amp;gt; 'list', :id =&amp;gt; topic.id do %&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;span class=&amp;quot;fa-stack fa-md&amp;quot; title='View topic bookmarks'&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-bookmark fa-stack-1x fa-2x&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;p class=&amp;quot;fa fa-stack-2x fa-inverse&amp;quot; style='font-size: 1.0em; padding-top: 2px; font-weight: bold;'&amp;gt;&lt;br /&gt;
          &amp;lt;%= Bookmark.where(topic_id: topic.id).length.to_s %&amp;gt;&lt;br /&gt;
          &amp;lt;&amp;lt;nowiki /&amp;gt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;%= link_to :controller=&amp;gt;'bookmarks', :action=&amp;gt; 'new', :id =&amp;gt; topic.id , :assignment_id =&amp;gt; params[:assignment_id] do %&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;span class=&amp;quot;fa-stack fa-md&amp;quot; title='Add bookmark to topic'&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-bookmark fa-stack-1x fa-2x&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-plus fa-stack-1x fa-inverse&amp;quot; style='font-size: .5em'&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;&amp;lt;nowiki /&amp;gt;% else %&amp;gt;&lt;br /&gt;
    &amp;lt;&amp;lt;nowiki /&amp;gt;span class=&amp;quot;fa-stack fa-md&amp;quot; title='View topic bookmarks'&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-bookmark fa-stack-1x fa-2x&amp;quot; style=&amp;quot;opacity: 0.3;&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
   &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/sign_up_sheet/_table_header.html.erb&lt;br /&gt;
  &amp;lt;&amp;lt;nowiki /&amp;gt;th width=&amp;quot;10%&amp;quot;&amp;gt; Bookmarks&lt;br /&gt;
    &amp;lt;% unless @use_bookmark %&amp;gt; (disabled) &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;&amp;lt;nowiki /&amp;gt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Commit can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/commit/f0352ddf441d3773109b2e0208981f3fe122b5df here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Modify Bookmark delete permissions. '''&lt;br /&gt;
Bookmarks should be deletable by the user who created the bookmark, a teammate of the user who provided the bookmark, and the instructor.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
        &amp;lt;!--Edit/Destroy Bookmarks--&amp;gt;&lt;br /&gt;
        &amp;lt;% is_teammate = false %&amp;gt;&lt;br /&gt;
        &amp;lt;% team = SignedUpTeam.find_by(topic_id: @topic.id) rescue nil %&amp;gt;&lt;br /&gt;
        &amp;lt;% if team %&amp;gt;&lt;br /&gt;
          &amp;lt;% teams_users = TeamsUser.where(['team_id = ?', team.team_id]) %&amp;gt;&lt;br /&gt;
          &amp;lt;% is_teammate = teams_users.select {|tu| tu.user_id == session[:user].id}.size &amp;gt; 0  %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% if bookmark.user_id == session[:user].id or is_teammate or ['Instructor'].include? @current_role_name %&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Edit Bookmark', :action =&amp;gt; 'edit', :id =&amp;gt; bookmark.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Destroy Bookmark', bookmark, :confirm =&amp;gt; &amp;quot;Delete bookmark \&amp;quot;#{bookmark.title}\&amp;quot;?&amp;quot;, :method =&amp;gt; :delete %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/13/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Fix the ability to create bookmark questionnaires and use in assignments.'''&lt;br /&gt;
Previously, questionnaires for things like Teammate Reviews could be created and used in assignments. Users could fill these out and the scores would be stored for later reference by TAs and instructors. The questionnaire for bookmark reviews was previously not functional, but now instructors can create new bookmark questionnaires and assign them to assignments. &lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/controllers/questionnaires_controller.rb&lt;br /&gt;
       @questionnaire = Object.const_get(params[:model].split.join).new if Questionnaire::QUESTIONNAIRE_TYPES.include? params[:model].split.join&lt;br /&gt;
        ....&lt;br /&gt;
        if %w[AuthorFeedback CourseSurvey TeammateReview GlobalSurvey AssignmentSurvey BookmarkRating].include?(display_type) &lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
:app/controllers/questionnaires_controller.rb&lt;br /&gt;
    ....&lt;br /&gt;
    when &amp;quot;bookmark&amp;quot;&lt;br /&gt;
      bookmark = Bookmark.find(@map.response_map.reviewee_id)&lt;br /&gt;
      redirect_to controller: 'bookmarks', action: 'list', id: bookmark.topic_id&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;quot;BookmarkRatingResponseMap&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:app/models/bookmark_rating_response_map.rb&lt;br /&gt;
    ....&lt;br /&gt;
    self.assignment.questionnaires.find_by(type: 'BookmarkRatingQuestionnaire')&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    ....&lt;br /&gt;
          &amp;lt;td&amp;gt;&lt;br /&gt;
          &amp;lt;% assignment_participant = AssignmentParticipant.find_by(user_id: session[:user].id) %&amp;gt;&lt;br /&gt;
          &amp;lt;% map = BookmarkRatingResponseMap.where(reviewed_object_id: @topic.assignment.id, reviewer_id: assignment_participant.id, reviewee_id: bookmark.id).first %&amp;gt;&lt;br /&gt;
          &amp;lt;% if map.nil? %&amp;gt;&lt;br /&gt;
            &amp;lt;% map = BookmarkRatingResponseMap.create(reviewed_object_id: @topic.assignment.id, reviewer_id: assignment_participant.id, reviewee_id: bookmark.id) %&amp;gt;&lt;br /&gt;
          &amp;lt;% end %&amp;gt;&lt;br /&gt;
          &amp;lt;% review = map.response.last %&amp;gt;&lt;br /&gt;
          &amp;lt;% if review.nil? %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;Review&amp;quot;, {:controller =&amp;gt; 'response', :action =&amp;gt; 'new', :id =&amp;gt; map.map_id, :return =&amp;gt; &amp;quot;bookmark&amp;quot;} %&amp;gt;&lt;br /&gt;
          &amp;lt;% else %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;View&amp;quot;, {:controller =&amp;gt; 'response', :action =&amp;gt; 'view', :id =&amp;gt; review.id} %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;Edit&amp;quot;, {:controller =&amp;gt; 'response', :action =&amp;gt; 'edit', :id =&amp;gt; review.id, :return =&amp;gt; &amp;quot;bookmark&amp;quot;} %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;nowiki&amp;gt;&amp;lt;% if bookmark.user_id == session[:user].id %&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Edit', :action =&amp;gt; 'edit', :id =&amp;gt; bookmark.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Destroy', bookmark, :confirm =&amp;gt; &amp;quot;Delete bookmark \&amp;quot;#{bookmark.title}\&amp;quot;?&amp;quot;, :method =&amp;gt; :delete %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Edit Bookmark', :action =&amp;gt; 'edit', :id =&amp;gt; bookmark.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Destroy Bookmark', bookmark, :confirm =&amp;gt; &amp;quot;Delete bookmark \&amp;quot;#{bookmark.title}\&amp;quot;?&amp;quot;, :method =&amp;gt; :delete %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/response/view.html.erb&lt;br /&gt;
    &amp;lt;% if !(@map.instance_of? TeammateReviewResponseMap) &amp;amp;&amp;amp; !@map.survey? &amp;amp;&amp;amp; !(@map.instance_of? BookmarkRatingResponseMap) %&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/3/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Instructors should have the ability to view all bookmark responses. '''&lt;br /&gt;
Instructors should have a way to view all the responses to the bookmark questionnaires so that can see which bookmarks provided were deemed useful.&lt;br /&gt;
&lt;br /&gt;
[[File:Bookmark response list.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/helpers/report_formatter_helper.rb&lt;br /&gt;
  def bookmark_rating_response_map(params, _session = nil)&lt;br /&gt;
    assign_basics(params)&lt;br /&gt;
    @reviewers = BookmarkRatingResponseMap.bookmark_response_report(@id)&lt;br /&gt;
    @topics = @assignment.sign_up_topics&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
:app/models/bookmark_rating_response_map.rb&lt;br /&gt;
    class BookmarkRatingResponseMap &amp;lt; ReviewResponseMap&lt;br /&gt;
    &lt;br /&gt;
    def self.bookmark_response_report(id)&lt;br /&gt;
      BookmarkRatingResponseMap.select(&amp;quot;DISTINCT reviewer_id&amp;quot;).where(&amp;quot;reviewed_object_id = ?&amp;quot;, id)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
:app/views/reports/_bookmark_rating_report.html.erb&lt;br /&gt;
    &amp;lt;%= create_report_table_header(&amp;quot;Reviewed By&amp;quot; =&amp;gt; &amp;quot;16%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Topic&amp;quot; =&amp;gt; &amp;quot;14%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Bookmark Review&amp;quot; =&amp;gt; &amp;quot;20%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Submitted By&amp;quot; =&amp;gt; &amp;quot;20%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Last reviewed at&amp;quot; =&amp;gt; &amp;quot;20%&amp;quot;) %&amp;gt;&lt;br /&gt;
    &amp;lt;%@l = -1 %&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;% @reviewers.each do |r| %&amp;gt;&lt;br /&gt;
      &amp;lt;% @user = User.find(Participant.find(r.reviewer_id).user_id) %&amp;gt;&lt;br /&gt;
      &amp;lt;% @bookmark_rating_response_maps = BookmarkRatingResponseMap.where(reviewer_id: r.reviewer_id, reviewed_object_id: @id) %&amp;gt;&lt;br /&gt;
      &amp;lt;!-- Find only valid responses from this user --&amp;gt;&lt;br /&gt;
      &amp;lt;% maps = @bookmark_rating_response_maps.select { |m| !Response.where(map_id: m.id).first.blank? and m.reviewee and m.reviewee.user_id != @user.id }%&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
      &amp;lt;%@l = @l+1 %&amp;gt;&lt;br /&gt;
      &amp;lt;% (@l % 2 == 0) ? @bgcolor = &amp;quot;#ffffff&amp;quot; : @bgcolor = &amp;quot;#f9f9f9&amp;quot; %&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
      &amp;lt;% if maps.count &amp;gt; 0 %&amp;gt;&lt;br /&gt;
          &amp;lt;!--Reviewer--&amp;gt;&lt;br /&gt;
        &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt; rowspan= &amp;lt;%= maps.count %&amp;gt;&amp;gt;&lt;br /&gt;
          &amp;lt;% @reviewer_name = @user.fullname(session[:ip]) %&amp;gt;&lt;br /&gt;
          &amp;lt;%= link_to @reviewer_name, :controller =&amp;gt; 'popup', :action =&amp;gt; 'reviewer_details_popup', :id =&amp;gt; r.reviewer_id, :assignment_id =&amp;gt; @id %&amp;gt;&lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
        &amp;lt;% maps.each do |map| %&amp;gt;&lt;br /&gt;
          &amp;lt;% @reviewee = map.reviewee %&amp;gt;&lt;br /&gt;
            &amp;lt;!-- Topic --&amp;gt;&lt;br /&gt;
            &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt;  align=&amp;quot;left&amp;quot; colspan=1&amp;gt;&lt;br /&gt;
              &amp;lt;% topic = SignUpTopic.find(@reviewee.topic_id) %&amp;gt;&lt;br /&gt;
              &amp;lt;%= topic.topic_name %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
            &amp;lt;!-- Bookmarks reviewed--&amp;gt;&lt;br /&gt;
            &amp;lt;td id = &amp;quot;green&amp;quot; bgcolor=&amp;lt;%= @bgcolor %&amp;gt; align=&amp;quot;left&amp;quot; colspan=1&amp;gt;&lt;br /&gt;
              &amp;lt;%= link_to @reviewee.title, {:controller =&amp;gt; 'response', :action =&amp;gt; 'view', :id =&amp;gt; map.response.last.id}, :title =&amp;gt; &amp;quot;Click here to view this bookmark review&amp;quot; %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
            &amp;lt;!-- Submitted by--&amp;gt;&lt;br /&gt;
            &amp;lt;td id = &amp;quot;green&amp;quot; bgcolor=&amp;lt;%= @bgcolor %&amp;gt; style=&amp;quot;color:#DD3300&amp;quot; align=&amp;quot;left&amp;quot; colspan=1&amp;gt;&lt;br /&gt;
              &amp;lt;% reviewed_by_user = User.find(@reviewee.user_id).name %&amp;gt;&lt;br /&gt;
              &amp;lt;%= link_to reviewed_by_user, impersonate_impersonate_path(:user =&amp;gt; {:name =&amp;gt; reviewed_by_user}), :method =&amp;gt; :post, :title =&amp;gt; &amp;quot;Click here to impersonate this user&amp;quot; %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
            &amp;lt;!--Last reviewed at--&amp;gt;&lt;br /&gt;
            &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt; align=&amp;quot;left&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;% @bookmark_review_response = Response.where(map_id: map.id).first %&amp;gt;&lt;br /&gt;
              &amp;lt;%= @bookmark_review_response.updated_at.to_time.strftime(&amp;quot;%m/%d/%Y - %I:%M%p&amp;quot;) %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/reports/_searchbox.html.erb&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;lt;option value='BookmarkRatingResponseMap' &amp;gt;&lt;br /&gt;
      Bookmark Review Report&lt;br /&gt;
    &amp;lt;/option&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;lt;% elsif @type == &amp;quot;BookmarkReviewResponseMap&amp;quot; %&amp;gt;&lt;br /&gt;
        &amp;lt;nowiki&amp;gt;&amp;lt;h1&amp;gt; Bookmark review report for &amp;lt;%= @assignment.name%&amp;gt; &amp;lt;/h1&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:app/views/reports/response_report.html.haml&lt;br /&gt;
    - elsif @type == &amp;quot;BookmarkRatingResponseMap&amp;quot;&lt;br /&gt;
       = render :partial =&amp;gt; 'bookmark_rating_report'&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/10/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
&lt;br /&gt;
* Create a Bookmark Questionnaire&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Questionnaires.&lt;br /&gt;
# Find 'Bookmark Rating' and click the '+' to create a new questionnaire.&lt;br /&gt;
# Give a name for this questionnaire, leave the min and max score at 0 and 5 respectively, and click 'Create'.&lt;br /&gt;
# Go to Manage &amp;gt; Questionnaires and click on 'Bookmark Rating' to view all of the questionnaires. Click the edit icon for the questionnaire you just created.&lt;br /&gt;
# Select 'Add 1 more Criterion question(s)'. &lt;br /&gt;
# For the question, enter &amp;quot;Does this bookmark appear to have been used by the author?&amp;quot; and leave the other fields blank. This question will be helpful in determining how useful the bookmark was.&lt;br /&gt;
# Click 'Save bookmark rating questionnaire'. Now this questionnaire can be used in assignments.&lt;br /&gt;
&lt;br /&gt;
* Enable Bookmarks&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Choose an assignment that will be used for testing and have bookmarks enabled and select the edit icon under Actions.&lt;br /&gt;
# Under Topics Tab select 'Allow participants to create bookmarks?'.&lt;br /&gt;
# Go to Rubrics tab, under 'Bookmark Rating' select the Bookmark review questionnaire that was previously created to use for reviewing the bookmarks.&lt;br /&gt;
&lt;br /&gt;
* Add a Bookmark to a Topic&lt;br /&gt;
# Log in as a student who is a participant of the assignment with bookmarks enabled and select that assignment.&lt;br /&gt;
# Select a &amp;quot;Signup sheet&amp;quot; to see the list of available topics.&lt;br /&gt;
# Choose a topic and select the 'Add bookmark to topic' icon from the Bookmarks column. The 'Add bookmark to topic' icon has a '+' sign. &lt;br /&gt;
# Fill in all the fields for the bookmark, including Title, Url, and Description and click 'Add new bookmark'.&lt;br /&gt;
# You should now see a page listing all bookmarks for this topic.&lt;br /&gt;
   &lt;br /&gt;
* Viewing all Bookmarks for a Topic&lt;br /&gt;
# Log in as a student who is a participant of the assignment with bookmarks enabled (or an instructor) and select that assignment.&lt;br /&gt;
# Select a &amp;quot;Signup sheet&amp;quot; to see the list of available topics.&lt;br /&gt;
# The number of bookmarks for each topic should be displayed visually inside the 'View topic bookmarks' icon in the bookmarks column.&lt;br /&gt;
# Click the 'View topic bookmarks icon' to see a list of all bookmarks for this topic.&lt;br /&gt;
&lt;br /&gt;
* Editing and Destroying Bookmarks for a Topic&lt;br /&gt;
# Perform this test with each of the following users: an instructor, a user who is assigned to the topic, and a teammate of the user who is assigned to the topic.&lt;br /&gt;
## Log in with the user and select the assignment with bookmarks enabled.&lt;br /&gt;
## Select a &amp;quot;Signup sheet&amp;quot; to see the list of available topics.&lt;br /&gt;
## Click the 'View topic bookmarks icon' to see a list of all bookmarks for this topic.&lt;br /&gt;
## The user should see links to 'Edit Bookmark' and 'Destroy Bookmark' next to a bookmark only if the user is an instructor, the user submitted the bookmark, or the user is a teammate of the user who submitted the bookmark.&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
The current version of Expertiza does not have any tests for the bookmark controller or model. We intend on adding comprehensive RSpec tests for all changes we have added to controller classes and unit tests for model classes.&lt;br /&gt;
&lt;br /&gt;
===Code Coverage===&lt;br /&gt;
&lt;br /&gt;
=='''Application Deployment'''==&lt;br /&gt;
 &lt;br /&gt;
This web application deployed on VCL is located at [http://152.46.17.220:8080 http://152.46.17.220:8080]&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
1. [https://github.com/expertiza/expertiza/ Expertiza on GitHub]&lt;br /&gt;
&lt;br /&gt;
2. [https://github.com/hosungh/expertiza/ Forked GitHub Repo]&lt;br /&gt;
&lt;br /&gt;
3. [http://152.46.17.220:8080 Deployed Application]&lt;br /&gt;
&lt;br /&gt;
4. [https://github.com/expertiza/expertiza/pull/1704/ Beta Branch Pull Request]&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:CheckFieldsUrl.png&amp;diff=131935</id>
		<title>File:CheckFieldsUrl.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:CheckFieldsUrl.png&amp;diff=131935"/>
		<updated>2020-03-23T23:21:33Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:CheckFieldsTitle.png&amp;diff=131934</id>
		<title>File:CheckFieldsTitle.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:CheckFieldsTitle.png&amp;diff=131934"/>
		<updated>2020-03-23T23:21:16Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:CheckFieldsDescription.png&amp;diff=131933</id>
		<title>File:CheckFieldsDescription.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:CheckFieldsDescription.png&amp;diff=131933"/>
		<updated>2020-03-23T23:18:16Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2005._Bookmark_enhancements&amp;diff=131923</id>
		<title>CSC/ECE 517 Spring 2020 - E2005. Bookmark enhancements</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2005._Bookmark_enhancements&amp;diff=131923"/>
		<updated>2020-03-23T23:13:31Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: /* Code Modifications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==&amp;lt;b&amp;gt;E2005. Bookmark Enhancements&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open-source project that is built using the [http://rubyonrails.org/ Ruby on Rails] framework. At its core, it is a highly versatile tool that academic institutions can use to craft learning objectives centered around team projects, peer reviews, and highly-customizable assignments.&lt;br /&gt;
&lt;br /&gt;
=='''Problem Statement'''==&lt;br /&gt;
The purpose of this project was to add meaningful enhancements and fixes to the bookmark feature in Expertiza, entities that can be attached to a topic to aid the authors who decide to take on a certain assignment. While the major functionality of the bookmark feature was already present by the time the team embarked on this project (most notably the ability to create/edit and rate bookmarks), many desired functions were conveniently broken or left out.&lt;br /&gt;
&lt;br /&gt;
===Completed Stories===&lt;br /&gt;
Below is a breakdown of the stories that were drawn up and completed for this project:&lt;br /&gt;
&lt;br /&gt;
1. Need a way to view all responses to the bookmark questionnaires.&lt;br /&gt;
&lt;br /&gt;
2. Modify permissions for deleting bookmarks.The person who creates the bookmark, the team for whom the bookmark is meant, and the instructor, should be able to delete.&lt;br /&gt;
&lt;br /&gt;
3. &amp;quot;View bookmarks&amp;quot; link on student_task/view breaks if the student has not selected a topic yet.&lt;br /&gt;
&lt;br /&gt;
4. Bookmark rating questionnaire should include question asking the reviewer whether or not the bookmark appears to have been used by the author. Get the bookmark questionnaire functioning and add to the bookmark list page.&lt;br /&gt;
&lt;br /&gt;
5. Fix issue in which users should not be able to review their own bookmark using the questionnaire, but currently can.&lt;br /&gt;
&lt;br /&gt;
6. Add a number next to/inside the icon with the number of current bookmark in order to make it clear whether a bookmark exists for a topic.&lt;br /&gt;
&lt;br /&gt;
7. Add a &amp;quot;View bookmarks&amp;quot; link to the assignment view page for easier access.&lt;br /&gt;
&lt;br /&gt;
8. Add rating to the bookmark questionnaire and use that rating to calculate the average instead of using the current dropdown.&lt;br /&gt;
&lt;br /&gt;
9. A student should not be able to rate his/her own bookmark.&lt;br /&gt;
&lt;br /&gt;
10. Add URL to bookmark list for assignment topic on the assignment page, to make viewing bookmarks easier.&lt;br /&gt;
&lt;br /&gt;
11. Instructors cannot currently see bookmarks (gets an error message saying instructors cannot create bookmarks). &lt;br /&gt;
&lt;br /&gt;
12. &amp;quot;Back&amp;quot; button from Bookmarks list is broken.&lt;br /&gt;
&lt;br /&gt;
13. When creating a bookmark with an empty description field, the notice says the bookmark was successfully created even though it fails.&lt;br /&gt;
&lt;br /&gt;
14. &amp;quot;Bookmark ratings&amp;quot; should be a type of rubric when you go to Manage &amp;gt; Questionnaires. Although 'Bookmark Rating' is already a type of rubric, it isn't listed when hovering over Manage... &amp;gt; Questionnaires &lt;br /&gt;
&lt;br /&gt;
15. Create a way to mark a bookmark that was rated to be helpful by all reviewers, on average. &lt;br /&gt;
&lt;br /&gt;
16. Students can add/view bookmarks when &amp;quot;Allow participants to create bookmarks?&amp;quot; box is unchecked for the assignment.&lt;br /&gt;
&lt;br /&gt;
=='''Code Modifications'''==&lt;br /&gt;
&lt;br /&gt;
'''Fix the &amp;quot;Back&amp;quot; button:'''&lt;br /&gt;
When either backing out of creating or viewing/editing a bookmark, the back functionality does not work, both prompting errors. Issue has been fixed and users can once again go back to the appropriate page.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;%= link_to 'Back', '#', :onclick =&amp;gt; 'pageBack()' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    function pageBack() {&lt;br /&gt;
  	history.back()&lt;br /&gt;
    }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/new.html.erb &lt;br /&gt;
    &amp;lt;%= link_to 'Back', '#', :onclick =&amp;gt; 'pageBack()' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    function pageBack() {&lt;br /&gt;
  	history.back()&lt;br /&gt;
    }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/edit.html.erb&lt;br /&gt;
    &amp;lt;%= link_to 'Back', '#', :onclick =&amp;gt; 'pageBack()' %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    function pageBack() {&lt;br /&gt;
  	history.back()&lt;br /&gt;
    }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/2?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Commit for &amp;quot;Back&amp;quot; capability when updating bookmark can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/4?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Check whether text field is present when creating/updating bookmark:'''&lt;br /&gt;
Previously, when a bookmark was created/updated and the corresponding &amp;quot;Title&amp;quot;, &amp;quot;URL&amp;quot;, or &amp;quot;Description&amp;quot; text fields were not filled in, the bookmark was not created or updated sans any error or warning. In fact, the user would be taken to the list of bookmarks available, forcing him/her to go back to the page corresponding to the bookmark create/edit page. This fix prompts users with an error indicating which text field needs to be filled in in order to fulfill the particular bookmark create/edit function.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/new.html.erb&lt;br /&gt;
      &amp;lt;%= label_tag 'Title' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= text_field_tag :title, params[:title], :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag 'Url' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= text_field_tag :url, params[:url], :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag 'Description' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= text_area_tag :description, params[:description], :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/edit.html.erb&lt;br /&gt;
      &amp;lt;%= label_tag 'Title' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.text_field :title, :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag 'Url' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.text_field :url, :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag 'Description' %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.text_area :description, :required =&amp;gt; true %&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/4?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Change average bookmark rating to be based on questionnaire:'''&lt;br /&gt;
The rating system for the bookmarks before these changes were elementary in nature - there was a drop-down menu to choose your particular rating for a bookmark while there was an average calculator just to the left of the aforementioned column. The new changes introduced allows the &amp;quot;Your rating&amp;quot; and &amp;quot;Avg. rating&amp;quot; columns for a particular bookmark to be calculated based on the scores given to the various questions present in a given bookmark questionnaire. The &amp;quot;Avg. rating&amp;quot; is calculated based on the mean rating of all the bookmark questionnaires scored by every reviewer while &amp;quot;Your rating&amp;quot; is simply the mean of the scores that you (the user) gave to all the questions on the questionnaire.&lt;br /&gt;
&lt;br /&gt;
[[File:Avg_Ratings_and_Badges.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/controllers/bookmarks_controller.rb&lt;br /&gt;
    helper_method :specific_average_score&lt;br /&gt;
    helper_method :total_average_score&lt;br /&gt;
&lt;br /&gt;
    def specific_average_score(bookmark)&lt;br /&gt;
        if bookmark.nil?&lt;br /&gt;
            return '-'&lt;br /&gt;
        else&lt;br /&gt;
            assessment = SignUpTopic.find(bookmark.topic_id).assignment&lt;br /&gt;
            questions = assessment.questionnaires.where(type: 'BookmarkRatingQuestionnaire').flat_map(&amp;amp;:questions)&lt;br /&gt;
            responses = BookmarkRatingResponseMap.where(&lt;br /&gt;
                reviewed_object_id: assessment.id,&lt;br /&gt;
                reviewee_id: bookmark.id,&lt;br /&gt;
                reviewer_id: AssignmentParticipant.find_by(user_id: current_user.id).id).flat_map {|r| Response.where(map_id: r.id) }&lt;br /&gt;
            score = Answer.get_total_score(response: responses, questions: questions)&lt;br /&gt;
            if score.nil?&lt;br /&gt;
                return '-'&lt;br /&gt;
            else&lt;br /&gt;
                (score * 5.0 / 100.0).round(2)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    def total_average_score(bookmark)&lt;br /&gt;
        if bookmark.nil?&lt;br /&gt;
          return '-'&lt;br /&gt;
        else&lt;br /&gt;
          assessment = SignUpTopic.find(bookmark.topic_id).assignment&lt;br /&gt;
          questions = assessment.questionnaires.where(type: 'BookmarkRatingQuestionnaire').flat_map(&amp;amp;:questions)&lt;br /&gt;
          responses = BookmarkRatingResponseMap.where(&lt;br /&gt;
              reviewed_object_id: assessment.id,&lt;br /&gt;
              reviewee_id: bookmark.id).flat_map {|r| Response.where(map_id: r.id) }&lt;br /&gt;
          totalScore = Answer.compute_scores(responses, questions)&lt;br /&gt;
          if totalScore[:avg].nil?&lt;br /&gt;
              return '-'&lt;br /&gt;
          else&lt;br /&gt;
             (totalScore[:avg] * 5.0 / 100.0).round(2)&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;!-- total average rating --&amp;gt;&lt;br /&gt;
    &amp;lt;% totalAvg = total_average_score(bookmark) %&amp;gt;&lt;br /&gt;
    &amp;lt;% if totalAvg != 0 %&amp;gt;&lt;br /&gt;
        &amp;lt;%= totalAvg %&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- specific average score per user for a rubric --&amp;gt;&lt;br /&gt;
    &amp;lt;% specAvg = specific_average_score(bookmark) %&amp;gt;&lt;br /&gt;
    &amp;lt;% if specAvg != 0 %&amp;gt;&lt;br /&gt;
        &amp;lt;%= specAvg %&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/12?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Addition of badges for exceptionally helpful bookmarks:'''&lt;br /&gt;
Originally, no badge system was setup for bookmarks that have proven to be helpful guides for other students taking on the same project. The new changes introduced allows bookmarks to be attached to bookmarks with exceptionally good average ratings (i.e, above a rating of 3). A badge is signified by a full star while the absence of a badge is represented by an empty star.&lt;br /&gt;
&lt;br /&gt;
[[File:Bookmark list.png|50px]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;th class=&amp;quot;head&amp;quot;&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
        &amp;lt;!-- badge --&amp;gt;&lt;br /&gt;
        &amp;lt;% if totalAvg.to_f &amp;gt; 3 %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;glyphicon glyphicon-star&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;% else %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;glyphicon glyphicon-star-empty&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/14?file-filters%5B%5D= here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Users cannot rate bookmarks they've uploaded. '''&lt;br /&gt;
We wanted to make sure that users cannot rate bookmarks that they uploaded.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;% unless session[:user].id == bookmark.user_id %&amp;gt;&lt;br /&gt;
      # ... code for rating the bookmarks&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
      &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/1/files?w=1 here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Users cannot review bookmarks they've uploaded using the questionnaire. '''&lt;br /&gt;
We also wanted to make sure that users cannot review bookmarks that they uploaded using the questionnaires.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    &amp;lt;% unless session[:user].id == bookmark.user_id %&amp;gt;&lt;br /&gt;
      # ... code for reviewing bookmarks using the questionnaire&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
      &amp;lt;%= '-' %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/5/files?w=1 here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Users should be able to see the number of bookmarks from the topics list. '''&lt;br /&gt;
Previously, users could add bookmarks, but could not tell how many bookmarks were provided for each topic (if any) without clicking the &amp;quot;View bookmarks&amp;quot; icon. This UI change displays the number of bookmarks for the topic inside the view bookmarks icon from the topic list view so that users don't need to click through each topic individually.&lt;br /&gt;
&lt;br /&gt;
[[File:Sign up sheet bookmarks.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
    &amp;lt;nowiki&amp;gt;&amp;lt;p class=&amp;quot;fa fa-stack-2x fa-inverse&amp;quot; style='font-size: 1.0em; padding-top: 2px; font-weight: bold;'&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
      &amp;lt;nowiki&amp;gt;&amp;lt;%= Bookmark.where(topic_id: topic.id).length.to_s %&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    &amp;lt;nowiki&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/6/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''UI changes to make finding your bookmarks easier:'''&lt;br /&gt;
We added a &amp;quot;View Bookmarks&amp;quot; link to the student task view, that takes the student directly to the bookmarks that have been submitted for their topic. This code was then modified such that the link is greyed out if the student does not have a topic, and is hidden if bookmarks are not enabled for the assignment.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/controllers/student_task_controller.rb&lt;br /&gt;
:app/views/student_task/view.html.erb&lt;br /&gt;
     &amp;lt;% if @use_bookmark %&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;li&amp;gt;&amp;gt;&lt;br /&gt;
            &amp;lt;% if @topic_id and @assignment.submission_allowed(@topic_id) %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;View bookmarks&amp;quot;, :controller=&amp;gt;'bookmarks', :action=&amp;gt; 'list', :id =&amp;gt; @topic_id %&amp;gt; (View bookmarks others have submitted for your topic)&lt;br /&gt;
          &amp;lt;% else %&amp;gt;&lt;br /&gt;
            &amp;lt;&amp;lt;nowiki /&amp;gt;font color=&amp;quot;gray&amp;quot;&amp;gt;View bookmarks&amp;lt;/font&amp;gt; (You have to choose a topic first)&lt;br /&gt;
          &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relevant commits can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/commit/04b24b1dedd3414f58f52d394f2a5b9568e83872 here] [https://github.com/hosungh/expertiza/commit/15a775624307651755a70e63625a370478aa63b4 here]&amp;lt;/span&amp;gt; and &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/commit/f144594ae062369754d54288eff8959136510ccc here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Grey out add/view bookmarks link on the topic page if bookmarks are not enabled.''' Previously, students could submit and view bookmarks even if bookmarks were disabled for the assignment. Now these options are hidden.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
  &amp;lt;% if @use_bookmark %&amp;gt;&lt;br /&gt;
    &amp;lt;&amp;lt;nowiki /&amp;gt;%= link_to :controller=&amp;gt;'bookmarks', :action=&amp;gt; 'list', :id =&amp;gt; topic.id do %&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;span class=&amp;quot;fa-stack fa-md&amp;quot; title='View topic bookmarks'&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-bookmark fa-stack-1x fa-2x&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;p class=&amp;quot;fa fa-stack-2x fa-inverse&amp;quot; style='font-size: 1.0em; padding-top: 2px; font-weight: bold;'&amp;gt;&lt;br /&gt;
          &amp;lt;%= Bookmark.where(topic_id: topic.id).length.to_s %&amp;gt;&lt;br /&gt;
          &amp;lt;&amp;lt;nowiki /&amp;gt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;%= link_to :controller=&amp;gt;'bookmarks', :action=&amp;gt; 'new', :id =&amp;gt; topic.id , :assignment_id =&amp;gt; params[:assignment_id] do %&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;span class=&amp;quot;fa-stack fa-md&amp;quot; title='Add bookmark to topic'&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-bookmark fa-stack-1x fa-2x&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
        &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-plus fa-stack-1x fa-inverse&amp;quot; style='font-size: .5em'&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;&amp;lt;nowiki /&amp;gt;% else %&amp;gt;&lt;br /&gt;
    &amp;lt;&amp;lt;nowiki /&amp;gt;span class=&amp;quot;fa-stack fa-md&amp;quot; title='View topic bookmarks'&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki /&amp;gt;i class=&amp;quot;fa fa-bookmark fa-stack-1x fa-2x&amp;quot; style=&amp;quot;opacity: 0.3;&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
   &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/sign_up_sheet/_table_header.html.erb&lt;br /&gt;
  &amp;lt;&amp;lt;nowiki /&amp;gt;th width=&amp;quot;10%&amp;quot;&amp;gt; Bookmarks&lt;br /&gt;
    &amp;lt;% unless @use_bookmark %&amp;gt; (disabled) &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;&amp;lt;nowiki /&amp;gt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Commit can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/commit/f0352ddf441d3773109b2e0208981f3fe122b5df here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Modify Bookmark delete permissions. '''&lt;br /&gt;
Bookmarks should be deletable by the user who created the bookmark, a teammate of the user who provided the bookmark, and the instructor.&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
        &amp;lt;!--Edit/Destroy Bookmarks--&amp;gt;&lt;br /&gt;
        &amp;lt;% is_teammate = false %&amp;gt;&lt;br /&gt;
        &amp;lt;% team = SignedUpTeam.find_by(topic_id: @topic.id) rescue nil %&amp;gt;&lt;br /&gt;
        &amp;lt;% if team %&amp;gt;&lt;br /&gt;
          &amp;lt;% teams_users = TeamsUser.where(['team_id = ?', team.team_id]) %&amp;gt;&lt;br /&gt;
          &amp;lt;% is_teammate = teams_users.select {|tu| tu.user_id == session[:user].id}.size &amp;gt; 0  %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% if bookmark.user_id == session[:user].id or is_teammate or ['Instructor'].include? @current_role_name %&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Edit Bookmark', :action =&amp;gt; 'edit', :id =&amp;gt; bookmark.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Destroy Bookmark', bookmark, :confirm =&amp;gt; &amp;quot;Delete bookmark \&amp;quot;#{bookmark.title}\&amp;quot;?&amp;quot;, :method =&amp;gt; :delete %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/13/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Fix the ability to create bookmark questionnaires and use in assignments.'''&lt;br /&gt;
Previously, questionnaires for things like Teammate Reviews could be created and used in assignments. Users could fill these out and the scores would be stored for later reference by TAs and instructors. The questionnaire for bookmark reviews was previously not functional, but now instructors can create new bookmark questionnaires and assign them to assignments. &lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/controllers/questionnaires_controller.rb&lt;br /&gt;
       @questionnaire = Object.const_get(params[:model].split.join).new if Questionnaire::QUESTIONNAIRE_TYPES.include? params[:model].split.join&lt;br /&gt;
        ....&lt;br /&gt;
        if %w[AuthorFeedback CourseSurvey TeammateReview GlobalSurvey AssignmentSurvey BookmarkRating].include?(display_type) &lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
:app/controllers/questionnaires_controller.rb&lt;br /&gt;
    ....&lt;br /&gt;
    when &amp;quot;bookmark&amp;quot;&lt;br /&gt;
      bookmark = Bookmark.find(@map.response_map.reviewee_id)&lt;br /&gt;
      redirect_to controller: 'bookmarks', action: 'list', id: bookmark.topic_id&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;quot;BookmarkRatingResponseMap&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:app/models/bookmark_rating_response_map.rb&lt;br /&gt;
    ....&lt;br /&gt;
    self.assignment.questionnaires.find_by(type: 'BookmarkRatingQuestionnaire')&lt;br /&gt;
&lt;br /&gt;
:app/views/bookmarks/list.html.erb&lt;br /&gt;
    ....&lt;br /&gt;
          &amp;lt;td&amp;gt;&lt;br /&gt;
          &amp;lt;% assignment_participant = AssignmentParticipant.find_by(user_id: session[:user].id) %&amp;gt;&lt;br /&gt;
          &amp;lt;% map = BookmarkRatingResponseMap.where(reviewed_object_id: @topic.assignment.id, reviewer_id: assignment_participant.id, reviewee_id: bookmark.id).first %&amp;gt;&lt;br /&gt;
          &amp;lt;% if map.nil? %&amp;gt;&lt;br /&gt;
            &amp;lt;% map = BookmarkRatingResponseMap.create(reviewed_object_id: @topic.assignment.id, reviewer_id: assignment_participant.id, reviewee_id: bookmark.id) %&amp;gt;&lt;br /&gt;
          &amp;lt;% end %&amp;gt;&lt;br /&gt;
          &amp;lt;% review = map.response.last %&amp;gt;&lt;br /&gt;
          &amp;lt;% if review.nil? %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;Review&amp;quot;, {:controller =&amp;gt; 'response', :action =&amp;gt; 'new', :id =&amp;gt; map.map_id, :return =&amp;gt; &amp;quot;bookmark&amp;quot;} %&amp;gt;&lt;br /&gt;
          &amp;lt;% else %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;View&amp;quot;, {:controller =&amp;gt; 'response', :action =&amp;gt; 'view', :id =&amp;gt; review.id} %&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to &amp;quot;Edit&amp;quot;, {:controller =&amp;gt; 'response', :action =&amp;gt; 'edit', :id =&amp;gt; review.id, :return =&amp;gt; &amp;quot;bookmark&amp;quot;} %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;nowiki&amp;gt;&amp;lt;% if bookmark.user_id == session[:user].id %&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Edit', :action =&amp;gt; 'edit', :id =&amp;gt; bookmark.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Destroy', bookmark, :confirm =&amp;gt; &amp;quot;Delete bookmark \&amp;quot;#{bookmark.title}\&amp;quot;?&amp;quot;, :method =&amp;gt; :delete %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Edit Bookmark', :action =&amp;gt; 'edit', :id =&amp;gt; bookmark.id %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%= link_to 'Destroy Bookmark', bookmark, :confirm =&amp;gt; &amp;quot;Delete bookmark \&amp;quot;#{bookmark.title}\&amp;quot;?&amp;quot;, :method =&amp;gt; :delete %&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/response/view.html.erb&lt;br /&gt;
    &amp;lt;% if !(@map.instance_of? TeammateReviewResponseMap) &amp;amp;&amp;amp; !@map.survey? &amp;amp;&amp;amp; !(@map.instance_of? BookmarkRatingResponseMap) %&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/3/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Instructors should have the ability to view all bookmark responses. '''&lt;br /&gt;
Instructors should have a way to view all the responses to the bookmark questionnaires so that can see which bookmarks provided were deemed useful.&lt;br /&gt;
&lt;br /&gt;
[[File:Bookmark response list.png]]&lt;br /&gt;
&lt;br /&gt;
Changed files:&lt;br /&gt;
:app/helpers/report_formatter_helper.rb&lt;br /&gt;
  def bookmark_rating_response_map(params, _session = nil)&lt;br /&gt;
    assign_basics(params)&lt;br /&gt;
    @reviewers = BookmarkRatingResponseMap.bookmark_response_report(@id)&lt;br /&gt;
    @topics = @assignment.sign_up_topics&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
:app/models/bookmark_rating_response_map.rb&lt;br /&gt;
    class BookmarkRatingResponseMap &amp;lt; ReviewResponseMap&lt;br /&gt;
    &lt;br /&gt;
    def self.bookmark_response_report(id)&lt;br /&gt;
      BookmarkRatingResponseMap.select(&amp;quot;DISTINCT reviewer_id&amp;quot;).where(&amp;quot;reviewed_object_id = ?&amp;quot;, id)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
:app/views/reports/_bookmark_rating_report.html.erb&lt;br /&gt;
    &amp;lt;%= create_report_table_header(&amp;quot;Reviewed By&amp;quot; =&amp;gt; &amp;quot;16%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Topic&amp;quot; =&amp;gt; &amp;quot;14%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Bookmark Review&amp;quot; =&amp;gt; &amp;quot;20%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Submitted By&amp;quot; =&amp;gt; &amp;quot;20%&amp;quot;,&lt;br /&gt;
                               &amp;quot;Last reviewed at&amp;quot; =&amp;gt; &amp;quot;20%&amp;quot;) %&amp;gt;&lt;br /&gt;
    &amp;lt;%@l = -1 %&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;% @reviewers.each do |r| %&amp;gt;&lt;br /&gt;
      &amp;lt;% @user = User.find(Participant.find(r.reviewer_id).user_id) %&amp;gt;&lt;br /&gt;
      &amp;lt;% @bookmark_rating_response_maps = BookmarkRatingResponseMap.where(reviewer_id: r.reviewer_id, reviewed_object_id: @id) %&amp;gt;&lt;br /&gt;
      &amp;lt;!-- Find only valid responses from this user --&amp;gt;&lt;br /&gt;
      &amp;lt;% maps = @bookmark_rating_response_maps.select { |m| !Response.where(map_id: m.id).first.blank? and m.reviewee and m.reviewee.user_id != @user.id }%&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
      &amp;lt;%@l = @l+1 %&amp;gt;&lt;br /&gt;
      &amp;lt;% (@l % 2 == 0) ? @bgcolor = &amp;quot;#ffffff&amp;quot; : @bgcolor = &amp;quot;#f9f9f9&amp;quot; %&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
      &amp;lt;% if maps.count &amp;gt; 0 %&amp;gt;&lt;br /&gt;
          &amp;lt;!--Reviewer--&amp;gt;&lt;br /&gt;
        &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt; rowspan= &amp;lt;%= maps.count %&amp;gt;&amp;gt;&lt;br /&gt;
          &amp;lt;% @reviewer_name = @user.fullname(session[:ip]) %&amp;gt;&lt;br /&gt;
          &amp;lt;%= link_to @reviewer_name, :controller =&amp;gt; 'popup', :action =&amp;gt; 'reviewer_details_popup', :id =&amp;gt; r.reviewer_id, :assignment_id =&amp;gt; @id %&amp;gt;&lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
        &amp;lt;% maps.each do |map| %&amp;gt;&lt;br /&gt;
          &amp;lt;% @reviewee = map.reviewee %&amp;gt;&lt;br /&gt;
            &amp;lt;!-- Topic --&amp;gt;&lt;br /&gt;
            &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt;  align=&amp;quot;left&amp;quot; colspan=1&amp;gt;&lt;br /&gt;
              &amp;lt;% topic = SignUpTopic.find(@reviewee.topic_id) %&amp;gt;&lt;br /&gt;
              &amp;lt;%= topic.topic_name %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
            &amp;lt;!-- Bookmarks reviewed--&amp;gt;&lt;br /&gt;
            &amp;lt;td id = &amp;quot;green&amp;quot; bgcolor=&amp;lt;%= @bgcolor %&amp;gt; align=&amp;quot;left&amp;quot; colspan=1&amp;gt;&lt;br /&gt;
              &amp;lt;%= link_to @reviewee.title, {:controller =&amp;gt; 'response', :action =&amp;gt; 'view', :id =&amp;gt; map.response.last.id}, :title =&amp;gt; &amp;quot;Click here to view this bookmark review&amp;quot; %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
            &amp;lt;!-- Submitted by--&amp;gt;&lt;br /&gt;
            &amp;lt;td id = &amp;quot;green&amp;quot; bgcolor=&amp;lt;%= @bgcolor %&amp;gt; style=&amp;quot;color:#DD3300&amp;quot; align=&amp;quot;left&amp;quot; colspan=1&amp;gt;&lt;br /&gt;
              &amp;lt;% reviewed_by_user = User.find(@reviewee.user_id).name %&amp;gt;&lt;br /&gt;
              &amp;lt;%= link_to reviewed_by_user, impersonate_impersonate_path(:user =&amp;gt; {:name =&amp;gt; reviewed_by_user}), :method =&amp;gt; :post, :title =&amp;gt; &amp;quot;Click here to impersonate this user&amp;quot; %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
            &amp;lt;!--Last reviewed at--&amp;gt;&lt;br /&gt;
            &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt; align=&amp;quot;left&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;% @bookmark_review_response = Response.where(map_id: map.id).first %&amp;gt;&lt;br /&gt;
              &amp;lt;%= @bookmark_review_response.updated_at.to_time.strftime(&amp;quot;%m/%d/%Y - %I:%M%p&amp;quot;) %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:app/views/reports/_searchbox.html.erb&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;lt;option value='BookmarkRatingResponseMap' &amp;gt;&lt;br /&gt;
      Bookmark Review Report&lt;br /&gt;
    &amp;lt;/option&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;lt;% elsif @type == &amp;quot;BookmarkReviewResponseMap&amp;quot; %&amp;gt;&lt;br /&gt;
        &amp;lt;nowiki&amp;gt;&amp;lt;h1&amp;gt; Bookmark review report for &amp;lt;%= @assignment.name%&amp;gt; &amp;lt;/h1&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:app/views/reports/response_report.html.haml&lt;br /&gt;
    - elsif @type == &amp;quot;BookmarkRatingResponseMap&amp;quot;&lt;br /&gt;
       = render :partial =&amp;gt; 'bookmark_rating_report'&lt;br /&gt;
&lt;br /&gt;
Pull request can be found &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/pull/10/files here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Testing Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing from the UI''' &lt;br /&gt;
&lt;br /&gt;
* Create a Bookmark Questionnaire&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Questionnaires.&lt;br /&gt;
# Find 'Bookmark Rating' and click the '+' to create a new questionnaire.&lt;br /&gt;
# Give a name for this questionnaire, leave the min and max score at 0 and 5 respectively, and click 'Create'.&lt;br /&gt;
# Go to Manage &amp;gt; Questionnaires and click on 'Bookmark Rating' to view all of the questionnaires. Click the edit icon for the questionnaire you just created.&lt;br /&gt;
# Select 'Add 1 more Criterion question(s)'. &lt;br /&gt;
# For the question, enter &amp;quot;Does this bookmark appear to have been used by the author?&amp;quot; and leave the other fields blank. This question will be helpful in determining how useful the bookmark was.&lt;br /&gt;
# Click 'Save bookmark rating questionnaire'. Now this questionnaire can be used in assignments.&lt;br /&gt;
&lt;br /&gt;
* Enable Bookmarks&lt;br /&gt;
# After logging in as the instructor, go to Manage &amp;gt; Assignments.&lt;br /&gt;
# Choose an assignment that will be used for testing and have bookmarks enabled and select the edit icon under Actions.&lt;br /&gt;
# Under Topics Tab select 'Allow participants to create bookmarks?'.&lt;br /&gt;
# Go to Rubrics tab, under 'Bookmark Rating' select the Bookmark review questionnaire that was previously created to use for reviewing the bookmarks.&lt;br /&gt;
&lt;br /&gt;
* Add a Bookmark to a Topic&lt;br /&gt;
# Log in as a student who is a participant of the assignment with bookmarks enabled and select that assignment.&lt;br /&gt;
# Select a &amp;quot;Signup sheet&amp;quot; to see the list of available topics.&lt;br /&gt;
# Choose a topic and select the 'Add bookmark to topic' icon from the Bookmarks column. The 'Add bookmark to topic' icon has a '+' sign. &lt;br /&gt;
# Fill in all the fields for the bookmark, including Title, Url, and Description and click 'Add new bookmark'.&lt;br /&gt;
# You should now see a page listing all bookmarks for this topic.&lt;br /&gt;
   &lt;br /&gt;
* Viewing all Bookmarks for a Topic&lt;br /&gt;
# Log in as a student who is a participant of the assignment with bookmarks enabled (or an instructor) and select that assignment.&lt;br /&gt;
# Select a &amp;quot;Signup sheet&amp;quot; to see the list of available topics.&lt;br /&gt;
# The number of bookmarks for each topic should be displayed visually inside the 'View topic bookmarks' icon in the bookmarks column.&lt;br /&gt;
# Click the 'View topic bookmarks icon' to see a list of all bookmarks for this topic.&lt;br /&gt;
&lt;br /&gt;
* Editing and Destroying Bookmarks for a Topic&lt;br /&gt;
# Perform this test with each of the following users: an instructor, a user who is assigned to the topic, and a teammate of the user who is assigned to the topic.&lt;br /&gt;
## Log in with the user and select the assignment with bookmarks enabled.&lt;br /&gt;
## Select a &amp;quot;Signup sheet&amp;quot; to see the list of available topics.&lt;br /&gt;
## Click the 'View topic bookmarks icon' to see a list of all bookmarks for this topic.&lt;br /&gt;
## The user should see links to 'Edit Bookmark' and 'Destroy Bookmark' next to a bookmark only if the user is an instructor, the user submitted the bookmark, or the user is a teammate of the user who submitted the bookmark.&lt;br /&gt;
&lt;br /&gt;
'''Automated Testing with RSpec'''&lt;br /&gt;
&lt;br /&gt;
The current version of Expertiza does not have any tests for the bookmark controller or model. We intend on adding comprehensive RSpec tests for all changes we have added to controller classes and unit tests for model classes.&lt;br /&gt;
&lt;br /&gt;
===Code Coverage===&lt;br /&gt;
&lt;br /&gt;
=='''Application Deployment'''==&lt;br /&gt;
 &lt;br /&gt;
This web application deployed on VCL is located at [http://152.46.17.220:8080 http://152.46.17.220:8080]&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
Danielle Hancock&lt;br /&gt;
&lt;br /&gt;
Eric Peden&lt;br /&gt;
&lt;br /&gt;
Hosung Hwang&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor: Abhirav Kariya&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
1. [https://github.com/expertiza/expertiza/ Expertiza on GitHub]&lt;br /&gt;
&lt;br /&gt;
2. [https://github.com/hosungh/expertiza/ Forked GitHub Repo]&lt;br /&gt;
&lt;br /&gt;
3. [http://152.46.17.220:8080 Deployed Application]&lt;br /&gt;
&lt;br /&gt;
4. [https://github.com/expertiza/expertiza/pull/1704/ Beta Branch Pull Request]&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Avg_Ratings_and_Badges.png&amp;diff=131918</id>
		<title>File:Avg Ratings and Badges.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Avg_Ratings_and_Badges.png&amp;diff=131918"/>
		<updated>2020-03-23T23:10:29Z</updated>

		<summary type="html">&lt;p&gt;Hhwang4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Hhwang4</name></author>
	</entry>
</feed>