<?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=Dnhancoc</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=Dnhancoc"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Dnhancoc"/>
	<updated>2026-06-06T04:23:55Z</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=133348</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=133348"/>
		<updated>2020-04-13T23:31:10Z</updated>

		<summary type="html">&lt;p&gt;Dnhancoc: /* Testing Plan */  small typo fix&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 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;
[[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.&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>Dnhancoc</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=133027</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=133027"/>
		<updated>2020-04-08T19:50:53Z</updated>

		<summary type="html">&lt;p&gt;Dnhancoc: /* 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 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. 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>Dnhancoc</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=133026</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=133026"/>
		<updated>2020-04-08T19:50:16Z</updated>

		<summary type="html">&lt;p&gt;Dnhancoc: /* Relevant Files */&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;
&lt;br /&gt;
views/reports/calibration_report.html.erb&lt;br /&gt;
&lt;br /&gt;
views/response/response.html.erb&lt;br /&gt;
&lt;br /&gt;
views/grades/view_team.html.erb&lt;br /&gt;
&lt;br /&gt;
views/grades/view_my_scores.html.erb&lt;br /&gt;
&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. 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>Dnhancoc</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=133025</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=133025"/>
		<updated>2020-04-08T19:50:00Z</updated>

		<summary type="html">&lt;p&gt;Dnhancoc: /* 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 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. 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>Dnhancoc</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=133024</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=133024"/>
		<updated>2020-04-08T19:49:09Z</updated>

		<summary type="html">&lt;p&gt;Dnhancoc: /* 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 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;
===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. 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>Dnhancoc</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=133022</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=133022"/>
		<updated>2020-04-08T19:33:18Z</updated>

		<summary type="html">&lt;p&gt;Dnhancoc: /* 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;
===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;
=='''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. 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>Dnhancoc</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=133021</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=133021"/>
		<updated>2020-04-08T19:32:55Z</updated>

		<summary type="html">&lt;p&gt;Dnhancoc: /* 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;
=='''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;
=='''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. 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>Dnhancoc</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=133019</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=133019"/>
		<updated>2020-04-08T19:31:31Z</updated>

		<summary type="html">&lt;p&gt;Dnhancoc: /* Database 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;
=='''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;
=='''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. 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>Dnhancoc</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=133018</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=133018"/>
		<updated>2020-04-08T19:27:13Z</updated>

		<summary type="html">&lt;p&gt;Dnhancoc: /* 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;
=='''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;
=='''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. 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;
&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;
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>Dnhancoc</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=133016</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=133016"/>
		<updated>2020-04-08T19:24:47Z</updated>

		<summary type="html">&lt;p&gt;Dnhancoc: /* Flowchart */&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;
=='''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.&lt;br /&gt;
[[File:Flow chart.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&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;
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>Dnhancoc</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=132927</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=132927"/>
		<updated>2020-04-08T08:44:31Z</updated>

		<summary type="html">&lt;p&gt;Dnhancoc: /* Flowchart */&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;
=='''Flowchart'''==&lt;br /&gt;
[[File:Flow chart.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&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;
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>Dnhancoc</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=132926</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=132926"/>
		<updated>2020-04-08T08:43:31Z</updated>

		<summary type="html">&lt;p&gt;Dnhancoc: /* Flowchart */&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;
=='''Flowchart'''==&lt;br /&gt;
[[File:&amp;quot;Flow chart.png&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&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;
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>Dnhancoc</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=132925</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=132925"/>
		<updated>2020-04-08T08:39:46Z</updated>

		<summary type="html">&lt;p&gt;Dnhancoc: /* Flowchart */&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;
=='''Flowchart'''==&lt;br /&gt;
[[File:flow-chart.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&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;
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>Dnhancoc</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=132924</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=132924"/>
		<updated>2020-04-08T08:39:36Z</updated>

		<summary type="html">&lt;p&gt;Dnhancoc: /* Use Case Diagram */&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;
=='''Flowchart'''==&lt;br /&gt;
[[File:flow-chart.jpg]]&lt;br /&gt;
&lt;br /&gt;
=='''Database Design'''==&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;
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>Dnhancoc</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Flow_chart.png&amp;diff=132923</id>
		<title>File:Flow chart.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Flow_chart.png&amp;diff=132923"/>
		<updated>2020-04-08T08:39:04Z</updated>

		<summary type="html">&lt;p&gt;Dnhancoc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dnhancoc</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2005._Bookmark_enhancements&amp;diff=132602</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=132602"/>
		<updated>2020-04-01T02:17:35Z</updated>

		<summary type="html">&lt;p&gt;Dnhancoc: /* 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;nowiki&amp;gt;&amp;lt;!-- :required attribute checks to see if title, url, and description are all present --&amp;gt;&amp;lt;/nowiki&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;nowiki&amp;gt;&amp;lt;!-- total average rating used for 'Avg. rating' --&amp;gt;&amp;lt;/nowiki&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;nowiki&amp;gt;&amp;lt;!--Users can't rate their own bookmarks.--&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    &amp;lt;% if 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;nowiki&amp;gt;&amp;lt;!--Users can only add/edit/view review other users' bookmarks.--&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    &amp;lt;% if 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;
  def view&lt;br /&gt;
    ...&lt;br /&gt;
    @use_bookmark = @assignment.use_bookmark&lt;br /&gt;
    ...&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:app/views/student_task/view.html.erb&lt;br /&gt;
     &amp;lt;&amp;lt;nowiki /&amp;gt;!--Show bookmarks if they are allowed for this assignment--&amp;gt;&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/controllers/assignments_controller.rb&lt;br /&gt;
  def edit&lt;br /&gt;
    ...&lt;br /&gt;
    @use_bookmark = @assignment.use_bookmark&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
  &amp;lt;&amp;lt;nowiki /&amp;gt;!--Shows bookmarks if they are allowed for this assignment.--&amp;gt;&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;!--Bookmarks may be disabled for this assignment--&amp;gt;&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;
Commits 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; and &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/commit/d71642353f9c2db20778c2665fb5efcd96ea31db 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;nowiki&amp;gt;&amp;lt;!--Editing/destroying bookmarks is available to the reviewing user, the reviewing user's team, and the instructor.--&amp;gt;&lt;br /&gt;
        &amp;lt;% is_teammate = false %&amp;gt;&amp;lt;/nowiki&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;nowiki&amp;gt;&amp;lt;!--Users can only add/edit/view review other users' bookmarks.--&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;% if bookmark.user_id != session[:user].id %&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;% else %&amp;gt;&lt;br /&gt;
            &amp;lt;%= '-' %&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;nowiki&amp;gt;&amp;lt;!-- Find only valid responses from this user --&amp;gt;&amp;lt;/nowiki&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;nowiki&amp;gt;&amp;lt;!--Reviewer--&amp;gt;&amp;lt;/nowiki&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;nowiki&amp;gt;&amp;lt;!-- Topic --&amp;gt;&amp;lt;/nowiki&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;nowiki&amp;gt;&amp;lt;!-- Bookmarks reviewed--&amp;gt;&amp;lt;/nowiki&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;nowiki&amp;gt;&amp;lt;!-- Submitted by--&amp;gt;&amp;lt;/nowiki&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;nowiki&amp;gt;&amp;lt;!--Last reviewed at--&amp;gt;&amp;lt;/nowiki&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;
=='''DB Diagram'''==&lt;br /&gt;
[[File:Model.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;
* 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;
A demo that shows that these features are implemented can be found [https://youtu.be/_DwqJ95FbMM here].&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.16.56:8080 http://152.46.16.56:8080]&lt;br /&gt;
&lt;br /&gt;
Note: To aid in testing, we have created an assignment called &amp;quot;Bookmark Demo&amp;quot; as instructor6. The students assigned to this assignment include student6340, student6341, and student5648.&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.16.56:8080 Deployed Application]&lt;br /&gt;
&lt;br /&gt;
4. [https://github.com/expertiza/expertiza/pull/1704/ Beta Branch Pull Request]&lt;br /&gt;
&lt;br /&gt;
5. [https://youtu.be/_DwqJ95FbMM Demo]&lt;/div&gt;</summary>
		<author><name>Dnhancoc</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2005._Bookmark_enhancements&amp;diff=132601</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=132601"/>
		<updated>2020-04-01T02:15:52Z</updated>

		<summary type="html">&lt;p&gt;Dnhancoc: /* 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;nowiki&amp;gt;&amp;lt;!-- :required attribute checks to see if title, url, and description are all present --&amp;gt;&amp;lt;/nowiki&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;nowiki&amp;gt;&amp;lt;!-- total average rating used for 'Avg. rating' --&amp;gt;&amp;lt;/nowiki&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;nowiki&amp;gt;&amp;lt;!--Users can't rate their own bookmarks.--&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    &amp;lt;% if 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;nowiki&amp;gt;&amp;lt;!--Users can only add/edit/view review other users' bookmarks.--&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    &amp;lt;% if 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;&amp;lt;nowiki /&amp;gt;!--Show bookmarks if they are allowed for this assignment--&amp;gt;&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/controllers/assignments_controller.rb&lt;br /&gt;
  def edit&lt;br /&gt;
    ...&lt;br /&gt;
    @use_bookmark = @assignment.use_bookmark&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
  &amp;lt;&amp;lt;nowiki /&amp;gt;!--Shows bookmarks if they are allowed for this assignment.--&amp;gt;&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;!--Bookmarks may be disabled for this assignment--&amp;gt;&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;
Commits 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; and &amp;lt;span class = &amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/hosungh/expertiza/commit/d71642353f9c2db20778c2665fb5efcd96ea31db 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;nowiki&amp;gt;&amp;lt;!--Editing/destroying bookmarks is available to the reviewing user, the reviewing user's team, and the instructor.--&amp;gt;&lt;br /&gt;
        &amp;lt;% is_teammate = false %&amp;gt;&amp;lt;/nowiki&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;nowiki&amp;gt;&amp;lt;!--Users can only add/edit/view review other users' bookmarks.--&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;% if bookmark.user_id != session[:user].id %&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;% else %&amp;gt;&lt;br /&gt;
            &amp;lt;%= '-' %&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;nowiki&amp;gt;&amp;lt;!-- Find only valid responses from this user --&amp;gt;&amp;lt;/nowiki&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;nowiki&amp;gt;&amp;lt;!--Reviewer--&amp;gt;&amp;lt;/nowiki&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;nowiki&amp;gt;&amp;lt;!-- Topic --&amp;gt;&amp;lt;/nowiki&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;nowiki&amp;gt;&amp;lt;!-- Bookmarks reviewed--&amp;gt;&amp;lt;/nowiki&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;nowiki&amp;gt;&amp;lt;!-- Submitted by--&amp;gt;&amp;lt;/nowiki&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;nowiki&amp;gt;&amp;lt;!--Last reviewed at--&amp;gt;&amp;lt;/nowiki&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;
=='''DB Diagram'''==&lt;br /&gt;
[[File:Model.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;
* 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;
A demo that shows that these features are implemented can be found [https://youtu.be/_DwqJ95FbMM here].&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.16.56:8080 http://152.46.16.56:8080]&lt;br /&gt;
&lt;br /&gt;
Note: To aid in testing, we have created an assignment called &amp;quot;Bookmark Demo&amp;quot; as instructor6. The students assigned to this assignment include student6340, student6341, and student5648.&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.16.56:8080 Deployed Application]&lt;br /&gt;
&lt;br /&gt;
4. [https://github.com/expertiza/expertiza/pull/1704/ Beta Branch Pull Request]&lt;br /&gt;
&lt;br /&gt;
5. [https://youtu.be/_DwqJ95FbMM Demo]&lt;/div&gt;</summary>
		<author><name>Dnhancoc</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2005._Bookmark_enhancements&amp;diff=132050</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=132050"/>
		<updated>2020-03-24T01:46:15Z</updated>

		<summary type="html">&lt;p&gt;Dnhancoc: /* Application Deployment */&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;
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>Dnhancoc</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Disable-bookmark-links.png&amp;diff=131956</id>
		<title>File:Disable-bookmark-links.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Disable-bookmark-links.png&amp;diff=131956"/>
		<updated>2020-03-23T23:38:50Z</updated>

		<summary type="html">&lt;p&gt;Dnhancoc: Dnhancoc uploaded a new version of File:Disable-bookmark-links.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dnhancoc</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Screenshot_(49).png&amp;diff=131950</id>
		<title>File:Screenshot (49).png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Screenshot_(49).png&amp;diff=131950"/>
		<updated>2020-03-23T23:32:06Z</updated>

		<summary type="html">&lt;p&gt;Dnhancoc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dnhancoc</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2005._Bookmark_enhancements&amp;diff=131939</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=131939"/>
		<updated>2020-03-23T23:24:37Z</updated>

		<summary type="html">&lt;p&gt;Dnhancoc: /* 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;
[[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>Dnhancoc</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Disable-bookmark-links.png&amp;diff=131936</id>
		<title>File:Disable-bookmark-links.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Disable-bookmark-links.png&amp;diff=131936"/>
		<updated>2020-03-23T23:22:09Z</updated>

		<summary type="html">&lt;p&gt;Dnhancoc: Dnhancoc uploaded a new version of File:Disable-bookmark-links.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dnhancoc</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Disable-bookmark-links.png&amp;diff=131914</id>
		<title>File:Disable-bookmark-links.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Disable-bookmark-links.png&amp;diff=131914"/>
		<updated>2020-03-23T23:05:12Z</updated>

		<summary type="html">&lt;p&gt;Dnhancoc: Dnhancoc uploaded a new version of File:Disable-bookmark-links.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dnhancoc</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Disable-bookmark-links.png&amp;diff=131895</id>
		<title>File:Disable-bookmark-links.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Disable-bookmark-links.png&amp;diff=131895"/>
		<updated>2020-03-23T22:57:48Z</updated>

		<summary type="html">&lt;p&gt;Dnhancoc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dnhancoc</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2005._Bookmark_enhancements&amp;diff=131893</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=131893"/>
		<updated>2020-03-23T22:54:31Z</updated>

		<summary type="html">&lt;p&gt;Dnhancoc: /* 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;
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;
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;
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:Example.jpg]]&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 [insert link]&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. [link to app deployment]&lt;br /&gt;
&lt;br /&gt;
4. [https://github.com/expertiza/expertiza/pull/1704/ Beta Branch Pull Request]&lt;/div&gt;</summary>
		<author><name>Dnhancoc</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2005._Bookmark_enhancements&amp;diff=131892</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=131892"/>
		<updated>2020-03-23T22:53:42Z</updated>

		<summary type="html">&lt;p&gt;Dnhancoc: /* 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;
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;
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;
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;
&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:Example.jpg]]&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 [insert link]&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. [link to app deployment]&lt;br /&gt;
&lt;br /&gt;
4. [https://github.com/expertiza/expertiza/pull/1704/ Beta Branch Pull Request]&lt;/div&gt;</summary>
		<author><name>Dnhancoc</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2005._Bookmark_enhancements&amp;diff=131839</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=131839"/>
		<updated>2020-03-23T21:19:43Z</updated>

		<summary type="html">&lt;p&gt;Dnhancoc: Fixed formatting under Fix the ability to create bookmark questionnaires and use in assigments&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;nowiki&amp;gt;Insert non-formatted text here&amp;lt;/nowiki&amp;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;
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;
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;
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.'''&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;
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 [insert link]&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. [link to app deployment]&lt;br /&gt;
&lt;br /&gt;
4. [link to pull request]&lt;/div&gt;</summary>
		<author><name>Dnhancoc</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2005._Bookmark_enhancements&amp;diff=131833</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=131833"/>
		<updated>2020-03-23T21:04:35Z</updated>

		<summary type="html">&lt;p&gt;Dnhancoc: /* Code Modifications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;nowiki&amp;gt;Insert non-formatted text here&amp;lt;/nowiki&amp;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;
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;
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;
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.'''&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 assigments.'''&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;
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 [insert link]&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. [link to app deployment]&lt;br /&gt;
&lt;br /&gt;
4. [link to pull request]&lt;/div&gt;</summary>
		<author><name>Dnhancoc</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2005._Bookmark_enhancements&amp;diff=131832</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=131832"/>
		<updated>2020-03-23T20:50:54Z</updated>

		<summary type="html">&lt;p&gt;Dnhancoc: /* Code Modifications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;nowiki&amp;gt;Insert non-formatted text here&amp;lt;/nowiki&amp;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;
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;
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;
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;
&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 assigments.'''&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;
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 [insert link]&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. [link to app deployment]&lt;br /&gt;
&lt;br /&gt;
4. [link to pull request]&lt;/div&gt;</summary>
		<author><name>Dnhancoc</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2005._Bookmark_enhancements&amp;diff=131831</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=131831"/>
		<updated>2020-03-23T20:49:45Z</updated>

		<summary type="html">&lt;p&gt;Dnhancoc: /* Code Modifications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;nowiki&amp;gt;Insert non-formatted text here&amp;lt;/nowiki&amp;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;
'''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;
'''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;
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;
'''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;
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;
'''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;
'''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;
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;
'''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;
&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 assigments.'''&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;
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 [insert link]&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. [link to app deployment]&lt;br /&gt;
&lt;br /&gt;
4. [link to pull request]&lt;/div&gt;</summary>
		<author><name>Dnhancoc</name></author>
	</entry>
</feed>