<?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=Hwang85</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=Hwang85"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Hwang85"/>
	<updated>2026-05-18T00:55:30Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Usecases.png&amp;diff=128213</id>
		<title>File:Usecases.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Usecases.png&amp;diff=128213"/>
		<updated>2019-11-10T21:22:55Z</updated>

		<summary type="html">&lt;p&gt;Hwang85: uploaded a new version of &amp;amp;quot;File:Usecases.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Hwang85</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1994._Mentor_management_for_assignments_without_topics&amp;diff=128208</id>
		<title>CSC/ECE 517 Fall 2019 - E1994. Mentor management for assignments without topics</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1994._Mentor_management_for_assignments_without_topics&amp;diff=128208"/>
		<updated>2019-11-10T21:13:07Z</updated>

		<summary type="html">&lt;p&gt;Hwang85: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''User Story''' ==&lt;br /&gt;
For assignments with topics, like the OSS project, mentors are associated with topics, and then whichever team is assigned to the topic inherits the mentor for that topic  However, for assignments without topics (like Program 2), there is no good way to “automatically” assign mentors to projects.  The instructor needs to watch teams being formed, and every time a new team is formed, a new mentor needs to be assigned, outside of Expertiza. This leads to a lot of work for the instructor, as well as sometimes long delays before a team is assigned a mentor.&lt;br /&gt;
&lt;br /&gt;
== '''The goal behind this project:''' ==&lt;br /&gt;
&lt;br /&gt;
Develop a trigger that:&amp;lt;br&amp;gt;&lt;br /&gt;
1) Is activated when any team has been formed that has k members, where k is greater than 50% of the maximum team capacity&amp;lt;br&amp;gt;&lt;br /&gt;
*ex) max members = 4, trigger activated when the team size reaches 3&lt;br /&gt;
2) Assign a mentor to the team&amp;lt;br&amp;gt;&lt;br /&gt;
*Mentors should be evenly assigned to teams, so a good strategy is to assign the mentor who has the fewest teams to mentor so far.&lt;br /&gt;
3) Notify the mentor via email that they are now assigned to a specific team, and provide the email addresses of the team members.&lt;br /&gt;
4) Possibly notify the team members that they have been assigned the mentor with contact information (further discussion here)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Design Pattern''' ==&lt;br /&gt;
Since the trigger we implemented would need multiple handlers and each of them reponses in different actions, we decide to use Chain of Responsibility as the design pattern. Chain of Responsibility is a behavioral design pattern that lets you pass requests along a chain of handlers. Upon receiving a request, each handler decides either to process the request or to pass it to the next handler in the chain.&lt;br /&gt;
[[File:Chain of Responsibility.png]]&lt;br /&gt;
&lt;br /&gt;
== '''Project Description''' ==&lt;br /&gt;
&lt;br /&gt;
=== Old version: ===&lt;br /&gt;
For assignments without a topic, there is no way to assign a mentor to the team on Expertiza system but to manually assigned one via Email out of the system. &lt;br /&gt;
[[File:Assign Mentor.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;In the above case, only OSS project and final project which have topic could be assigned mentors automatically by Expertiza system.&lt;br /&gt;
=== New version: ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Design Diagrams''' ==&lt;br /&gt;
&lt;br /&gt;
=== Use case Diagram ===&lt;br /&gt;
[[File:usecases.png]]&lt;br /&gt;
=== Data Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Proposed Solution''' ==&lt;br /&gt;
&lt;br /&gt;
'''The solution has five parts:'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Code Modified &amp;amp; Added''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Test Plan''' ==&lt;br /&gt;
To make sure the refactor code can work correctly, we need to run the original rspec test code and add some new test. Besides, we are plaining to test from UI to make sure all the features work. The test results are shown below.&lt;br /&gt;
&lt;br /&gt;
*Run and pass existing RSpec Tests after refactoring&lt;br /&gt;
*Develop New RSpec Tests for the new features&lt;br /&gt;
*UI testing on the deployed project&lt;br /&gt;
==RSpec Test==&lt;br /&gt;
==UI Test==&lt;br /&gt;
&lt;br /&gt;
== '''Team Member''' ==&lt;br /&gt;
Our team members: (Sorted in Alphabetical order)&amp;lt;br/&amp;gt;&lt;br /&gt;
*Hongli Wang, hwang85@ncsu.edu&lt;br /&gt;
*Minghao Liu, mliu25@ncsu.edu&lt;br /&gt;
*Ruiwen Wu, rwu5@ncsu.edu&lt;br /&gt;
*Siwei Wen, swen4@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
Mentor: Mrs. Carmen Aiken Bentley&lt;/div&gt;</summary>
		<author><name>Hwang85</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Usecases.png&amp;diff=128206</id>
		<title>File:Usecases.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Usecases.png&amp;diff=128206"/>
		<updated>2019-11-10T21:12:24Z</updated>

		<summary type="html">&lt;p&gt;Hwang85: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Hwang85</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Use-cases.png&amp;diff=128201</id>
		<title>File:Use-cases.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Use-cases.png&amp;diff=128201"/>
		<updated>2019-11-10T21:09:09Z</updated>

		<summary type="html">&lt;p&gt;Hwang85: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Hwang85</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Use-case.png&amp;diff=128196</id>
		<title>File:Use-case.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Use-case.png&amp;diff=128196"/>
		<updated>2019-11-10T21:08:20Z</updated>

		<summary type="html">&lt;p&gt;Hwang85: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Hwang85</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1994._Mentor_management_for_assignments_without_topics&amp;diff=128158</id>
		<title>CSC/ECE 517 Fall 2019 - E1994. Mentor management for assignments without topics</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1994._Mentor_management_for_assignments_without_topics&amp;diff=128158"/>
		<updated>2019-11-10T20:17:45Z</updated>

		<summary type="html">&lt;p&gt;Hwang85: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''The goal behind this project:''' ==&lt;br /&gt;
&lt;br /&gt;
Develop a trigger that:&amp;lt;br&amp;gt;&lt;br /&gt;
Is activated when any team has been formed that has k members, where k is greater than 50% of the maximum team capacity&lt;br /&gt;
ex) max members = 4, trigger activated when the team size reaches 3&lt;br /&gt;
Assign a mentor to the team&lt;br /&gt;
Mentors should be evenly assigned to teams, so a good strategy is to assign the mentor who has the fewest teams to mentor so far.&lt;br /&gt;
Notify the mentor via email that they are now assigned to a specific team, and provide the email addresses of the team members.&lt;br /&gt;
Possibly notify the team members that they have been assigned the mentor with contact information (further discussion here)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Project Description''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Predict version: ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Design Diagrams''' ==&lt;br /&gt;
&lt;br /&gt;
=== Use case Diagram ===&lt;br /&gt;
&lt;br /&gt;
=== Data Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Proposed Solution''' ==&lt;br /&gt;
&lt;br /&gt;
'''The solution has five parts:'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Check if the change to the rubric is made during the task duration ===&lt;br /&gt;
&lt;br /&gt;
== '''Code Change''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Test Plan''' ==&lt;/div&gt;</summary>
		<author><name>Hwang85</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1994._Mentor_management_for_assignments_without_topics&amp;diff=128153</id>
		<title>CSC/ECE 517 Fall 2019 - E1994. Mentor management for assignments without topics</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1994._Mentor_management_for_assignments_without_topics&amp;diff=128153"/>
		<updated>2019-11-10T20:11:26Z</updated>

		<summary type="html">&lt;p&gt;Hwang85: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''The goal to this project:''' ==&lt;br /&gt;
&lt;br /&gt;
#When a rubric is replaced or the items/questions attached to it are changed, all the active students’ responses object to that rubric will be deleted are created again, that means students need to redo the reviews if they have already done.&lt;br /&gt;
#The system will email the students who have done reviews to notify a redo request after deleting the response object and all associated answer objects.&lt;br /&gt;
#The “active” in the first goal means the replacement action happened during the task duration and the student responses have done in the task duration before the replacing rubric action. For example, a rubric starts from Sep.9th and ends at Sep.13th. An instructor replaces the rubric on Sep.12th, when 60 of 100 students have already finished their reviews. Then the response objects will be deleted and re-created to be new objects in the system, and students need to redo their reviews based on the new rubric.&lt;br /&gt;
#Write comprehensive tests for the above implementation to confidently prove they are correct.&lt;br /&gt;
&lt;br /&gt;
== '''Project Description''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Current version: ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The function classification change as two kinds: Minor change &amp;amp; Major change.&lt;br /&gt;
&lt;br /&gt;
Minor Change defined as the change makes no difference to reviewings so that we could also use reviewing before change made.(e.g. Delete questions or clarify the statement). &lt;br /&gt;
And Major change would modify or add some new questions which can’t be found in previous rubric. In such situations, system would delete all related reviewing records and email those reviewers to redone reviewing.&lt;br /&gt;
&lt;br /&gt;
=== Predict version: ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For Minor changes, we still make no movement to database since it makes no effect on scoring process. But Major changes have to be made further development as concerning about Time.&lt;br /&gt;
&lt;br /&gt;
Time_1: Changes should be determined if it is changed in duration, when some students have started and the others not. If change isn’t made in this period it would have no effect.&lt;br /&gt;
&lt;br /&gt;
Time_2: When changes are made at reviewing period, we should make a further consideration about record in DB. The records which were made in this period should be deleted but records in previous semesters are supposed to maintain.&lt;br /&gt;
&lt;br /&gt;
== '''Design Diagrams''' ==&lt;br /&gt;
=== Use case Diagram ===&lt;br /&gt;
[[File:Ucdiagrame.png]]&lt;br /&gt;
&lt;br /&gt;
=== Data Flow Diagram ===&lt;br /&gt;
[[File:DesignFlow.png]]&lt;br /&gt;
&lt;br /&gt;
The main goal of the code is to edit the rubric. There are 3 types of action: edit, add, and delete questions. We classify these actions into two types: major change and minor change.&lt;br /&gt;
&lt;br /&gt;
Note: Editing questions refers to editing only the text of the questions. Changing the type (multiple-choice, simple-text...) of a question is not allowed in Expertiza. You have to delete the old question and add a new one.&lt;br /&gt;
&lt;br /&gt;
Minor change: Edit questions. In this case, we simply update the text of the questions. There’s no other actions needed.&lt;br /&gt;
&lt;br /&gt;
Major change: Add/Delete questions. In this case, we have to check if there are any reviews done by students in the active period, i.e. the period of time when students can submit reviews. If there are any, we have to notify the affected students by email asking them to re-submit a review using the updated rubric, and delete their old reviews.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Proposed Solution''' ==&lt;br /&gt;
&lt;br /&gt;
'''The solution has five parts:'''&lt;br /&gt;
&lt;br /&gt;
* Check the changes made by instructor. Major or minor?&lt;br /&gt;
* Check if the change to the rubric is made during the task duration (or if there is any active response?).&lt;br /&gt;
* Process updates when a major change is made.&lt;br /&gt;
* E- mail notification is sent to request students to redo their reviews.&lt;br /&gt;
* Test the implementation thoroughly.&lt;br /&gt;
&lt;br /&gt;
=== Check if the change to the rubric is made during the task duration ===&lt;br /&gt;
&lt;br /&gt;
After a change is made, the system will check if the date is during the task duration to determine whether it needs to update existing response objects. The function method will get params as the start time and expire time of the target rubric to proceed a checking. If the change is not during an active task duration, then nothing further needs to be done. If the change is during an active task duration, then the system will do the following work.&lt;br /&gt;
=== Check the changes made by instructor. Major or minor? ===&lt;br /&gt;
Changes are categorized to be major or minor. Minor changes affects only the wording of a particular rubric item. In this case, no action is necessary. Major changes involves rubric replacing and changing items/questions. In this case, all the reviews that have been done need to be redone. To tell a major change, the params passed to the controller includes a tag/identifier that indicates if a new question was added, hence a major change.&lt;br /&gt;
=== Process updates when a major change is made. ===&lt;br /&gt;
If the previous process returns that a major change has been made, the system deletes existing response objects and re-creates new updated object in database when a student press on “review”. As for minor changes, updates affects only the objects that created after the change.&lt;br /&gt;
=== E- mail notification is sent to request students to redo their reviews. ===&lt;br /&gt;
Once controller notice instructor makes a major change of the rubric, and some students have begun the peer review, email notification module is initiated. In this circumstance, the system will generate ActiveRecord and send it to those students. (Their email address could be found in user’s table.) After email successfully sent, record of this student in this assignment and period will be deleted from the database.&lt;br /&gt;
When students receive the email and update their review, the questions now correspond to the new rubric. And students can see all the details of the old questionnaire in the email, so they won’t have to rewrite the same questions’ answer.&lt;br /&gt;
=== Test the implementation thoroughly. ===&lt;br /&gt;
Our test is designed to three parts: common cases, invalid cases and extreme cases. Details of test plan are included in the Test Plan section below.&lt;br /&gt;
&lt;br /&gt;
== '''Code Change''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Test Plan''' ==&lt;br /&gt;
Each component of the system is tested in a dedicated test file in the spec directory, and the test file name is according to the function tested. Our unit test is accomplished in questionnaires_controller_spec.rb. We should test each (reasonable) method of the controller with at least the following scenarios:&lt;br /&gt;
* Common Cases&lt;br /&gt;
** If the instructor only edit a particular rubric item (e.g. to clarify the statement), no action is necessary.&lt;br /&gt;
** If the instructor only delete a particular rubric item (e.g. to delete one of the peer review's criteria), no action is necessary.&lt;br /&gt;
** If the instructor add a particular rubric item (e.g. to add a peer review's criteria) in the student peer review period, the controller should then email the previously done reviews to the reviewer and delete the response object and all associated answer objects.  (However, the response_map should not be changed.)&lt;br /&gt;
&lt;br /&gt;
* Invalid Cases&lt;br /&gt;
** If the instructor add a particular rubric item (e.g. to add a peer review's criteria) out of the student peer review period, no action is necessary.&lt;br /&gt;
&lt;br /&gt;
* Extreme Cases&lt;br /&gt;
** If the instructor change the whole rubric (e.g. to delete the old rubic, create a new rubic and assign it to this assignment) in the student peer review period, the controller should then email the previously done reviews to the reviewer and delete the response object and all associated answer objects.  (The response_map should be changed since the id of rubric change.)&lt;/div&gt;</summary>
		<author><name>Hwang85</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1966._Tabbed_reviews_partial_file_refactor_for_displaying_the_alternate_view_of_reviews&amp;diff=126671</id>
		<title>CSC/ECE 517 Fall 2019 - E1966. Tabbed reviews partial file refactor for displaying the alternate view of reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1966._Tabbed_reviews_partial_file_refactor_for_displaying_the_alternate_view_of_reviews&amp;diff=126671"/>
		<updated>2019-10-29T23:31:42Z</updated>

		<summary type="html">&lt;p&gt;Hwang85: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''About Expertiza''' ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a open source project currently for CSC517 instructor and students forming groups, submit work, review, and view grades. The project is based on Ruby on Rails framework and the code is on Github: https://github.com/expertiza/expertiza. Expertiza serves wiki page, collecting information of all internal information and updates of all versions.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
===Issue details===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) On student end, Expertiza uses grades/_reviews.html.erb partial file to display reviewers, scores and review details; on instructor end, it uses Response model methods to construct html file for review pages. We need to use the same kinds of partials in instructor-end and student-end.&lt;br /&gt;
&lt;br /&gt;
How to get the view of reviewers, scores and review details on student end? Click &amp;quot;Alternate View&amp;quot; button, and click &amp;quot;show reviews&amp;quot; link. The reviewers and scores pop up on the top and review details are below them.&lt;br /&gt;
How to get the view of reviewers, scores and review details on instructor end? Click &amp;quot;Scores&amp;quot; for a certain assignment and choose a team. Click &amp;quot;Statistics&amp;quot; tab and then reviewers and scores table show up. Click &amp;quot;Reviews&amp;quot; tab and then click one of students' name link in the table head. And a new page pops up with review details.&lt;br /&gt;
&lt;br /&gt;
2) Give Feedback link at view_my_score at student-end should not appear at folded view.&lt;br /&gt;
Where to find Give Feedback link? On student end, click &amp;quot;Alternate View&amp;quot; button and click &amp;quot;show reviews&amp;quot; link. At the bottom of a certain review, a give feedback link shows up.&lt;br /&gt;
&lt;br /&gt;
===What to do===&lt;br /&gt;
1) We need to use the same kinds of partials in instructor-end and student-end. So we decide to use  grades/_team_statistics.html.erb to display reviewers and scores and to use grades/_tabbed_reviews.html.erb to display review details for both student-end and instructor-end.&lt;br /&gt;
&lt;br /&gt;
2) Give Feedback link at view_my_score should appear at the bottom of expanded view.&lt;br /&gt;
&lt;br /&gt;
== '''Solution''' ==&lt;br /&gt;
For student end, split reviews.html.erb into two partial files. One is grades/team_review_statistics.html.erb for reviewers and scores. The other one is grades/tabbed_reviews.html.erb for review details.&lt;br /&gt;
For instructor end, it used to use response model methods to construct html files for review details, now we use grades/tabbed_reviews.html.erb to display review details.&lt;br /&gt;
So student end and instructor end both use grades/team_review_statistics and grades/tabbed_reviews to display reviewers, scores and review details.&lt;br /&gt;
===Deploy Link===&lt;br /&gt;
[http://152.46.17.70:8080  Our project is deployed at VCL ]&lt;br /&gt;
===Student End===&lt;br /&gt;
&lt;br /&gt;
* In student end, render grades/team_review_statistics and grades/tabbed_reviews two partial files instead of grades/reviews partial file.&lt;br /&gt;
'''app/views/grades/_participant.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;TR id=&amp;quot;&amp;lt;%= prefix %&amp;gt;_reviews&amp;quot; style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/team_review_statistics', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :pscore =&amp;gt; pscore} %&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&lt;br /&gt;
    &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Add statistics view to student end by using the team_review_statistics.html.erb file.&lt;br /&gt;
'''app/views/grades/_participant.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;TR id=&amp;quot;&amp;lt;%= prefix %&amp;gt;_reviews&amp;quot; style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/team_review_statistics', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :pscore =&amp;gt; pscore} %&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&lt;br /&gt;
    &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_team_review_statistics.html.erb''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td colspan=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;    &lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:student-table.png ]]&lt;br /&gt;
&lt;br /&gt;
[[File:Student-detail.png]]&lt;br /&gt;
&lt;br /&gt;
* Add feed back link in student end view.&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;% if controller.action_name == &amp;quot;view_my_scores&amp;quot;%&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Generate the feedback html --&amp;gt;&lt;br /&gt;
                    &amp;lt;% map = FeedbackResponseMap.where(reviewed_object_id: review.id, reviewer_id: participant.id).first&lt;br /&gt;
                        review_feedbacks = map.try :response %&amp;gt;&lt;br /&gt;
                    &amp;lt;% if review_feedbacks &amp;amp;&amp;amp; !review_feedbacks.empty? %&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_feedbacks.first.id %&amp;gt; or&lt;br /&gt;
                        &amp;lt;%= link_to &amp;quot;Edit&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'edit', :id =&amp;gt; review_feedbacks.first.id, :return =&amp;gt; &amp;quot;feedback&amp;quot; %&amp;gt; feedback for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                    &amp;lt;% else %&amp;gt;&lt;br /&gt;
                        &amp;lt;%= link_to &amp;quot;Give feedback&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'new_feedback', :id =&amp;gt; review.id %&amp;gt; for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                    &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Student-feedback.png]]&lt;br /&gt;
&lt;br /&gt;
* Add javascript to tabbed review so it can be hidden or shown by clicking the show/hide reviews.&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  toggle_tag_prompt = function() {&lt;br /&gt;
    $('.tag_prompt_container').toggle();&lt;br /&gt;
  };&lt;br /&gt;
  $( document ).ready(function() {&lt;br /&gt;
    $('#tag_prompt_toggler').click(function () {&lt;br /&gt;
      if ($('#tag_prompt_toggler').text() == &amp;quot;hide tags&amp;quot;)&lt;br /&gt;
        $('#tag_prompt_toggler').text(&amp;quot;show tags&amp;quot;)&lt;br /&gt;
      else&lt;br /&gt;
        $('#tag_prompt_toggler').text(&amp;quot;hide tags&amp;quot;)&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Instructor End===&lt;br /&gt;
&lt;br /&gt;
* Create new method view2 for response_controller&lt;br /&gt;
&lt;br /&gt;
''' app/controllers/response_controller.rb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def view2&lt;br /&gt;
    @response = Response.find(params[:id])&lt;br /&gt;
    @map = @response.map&lt;br /&gt;
    set_content2&lt;br /&gt;
    render &amp;quot;response/view&amp;quot;&lt;br /&gt;
  end &lt;br /&gt;
......&lt;br /&gt;
def set_content2(new_response = false)&lt;br /&gt;
    @contributor = @map.contributor&lt;br /&gt;
    members = TeamsUser.where(team_id: params[:team])&lt;br /&gt;
    @user = members.first&lt;br /&gt;
    @participant = AssignmentParticipant.where(user_id: @user.user_id, parent_id: params[:assignment]).first&lt;br /&gt;
    @assignment = @participant.assignment&lt;br /&gt;
    questionnaires = @assignment.questionnaires&lt;br /&gt;
    @questions = retrieve_questions questionnaires, @assignment.id&lt;br /&gt;
    # @pscore has the newest versions of response for each response map, and only one for each response map (unless it is vary rubric by round)&lt;br /&gt;
    @pscore = @participant.scores(@questions)&lt;br /&gt;
    @reviewer = @map.reviewer&lt;br /&gt;
    @round = params[:round]&lt;br /&gt;
  end  &lt;br /&gt;
  def retrieve_questions(questionnaires, assignment_id)&lt;br /&gt;
    questions = {}&lt;br /&gt;
    questionnaires.each do |questionnaire|&lt;br /&gt;
      round = AssignmentQuestionnaire.where(assignment_id: assignment_id, questionnaire_id: questionnaire.id).first.used_in_round&lt;br /&gt;
      questionnaire_symbol = if !round.nil?&lt;br /&gt;
                               (questionnaire.symbol.to_s + round.to_s).to_sym&lt;br /&gt;
                             else&lt;br /&gt;
                               questionnaire.symbol&lt;br /&gt;
                             end&lt;br /&gt;
      questions[questionnaire_symbol] = questionnaire.questions&lt;br /&gt;
    end&lt;br /&gt;
    questions&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* change the url jumping to after clicking to a certain reviewer.&lt;br /&gt;
''' app/views/grades/_view_heatgrid.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;th class=&amp;quot;sorter-false&amp;quot;&amp;gt; &amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;../response/view2?id=&amp;lt;%= review.id.to_s %&amp;gt;&amp;amp;&amp;amp;team=&amp;lt;%= @team.id %&amp;gt;&amp;amp;&amp;amp;round=&amp;lt;%= vm.round.to_s %&amp;gt;&amp;amp;&amp;amp;assignment=&amp;lt;%= @assignment.id %&amp;gt;&amp;quot;  data-toggle=&amp;quot;tooltip&amp;quot; data-placement=&amp;quot;right&amp;quot; title=&amp;quot;Click to see details&amp;quot;&amp;gt;&amp;lt;%= user_name.to_s %&amp;gt;&amp;lt;/a&amp;gt;  &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* render grades/tabbed_reviews for review details at instructor end&lt;br /&gt;
''' app/views/response/view.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view2&amp;quot; %&amp;gt;&lt;br /&gt;
    &amp;lt;% file_url = nil %&amp;gt;&lt;br /&gt;
    &amp;lt;%= @response.display_as_html(nil, nil, file_url) %&amp;gt;&lt;br /&gt;
    &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;% else %&amp;gt;&lt;br /&gt;
    &amp;lt;TR style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; @participant, :rscore =&amp;gt; @pscore[:review], :reviewer =&amp;gt; @reviewer, :round =&amp;gt; @round} %&amp;gt;&lt;br /&gt;
        &amp;lt;/TD&amp;gt;&lt;br /&gt;
    &amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* show right round according to which round user click at instructor-end&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% rounds.each do |round| %&amp;gt;&lt;br /&gt;
        &amp;lt;% if controller.action_name == &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
        &amp;lt;% next if round.to_s != @round.to_s %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
......&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Create construct_instructor2_html in respond model in order to not show review number&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     &amp;lt;% prefix = &amp;quot;instructor&amp;quot; if controller.action_name == &amp;quot;view2&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' app/models/response.rb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if prefix == &amp;quot;instructor&amp;quot;&lt;br /&gt;
      self_id = self.id.to_s&lt;br /&gt;
      code = construct_instructor2_html identifier, self_id, count&lt;br /&gt;
......&lt;br /&gt;
def construct_instructor2_html identifier, self_id, count&lt;br /&gt;
    identifier += '&amp;lt;table width=&amp;quot;100%&amp;quot;&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;tr&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;td align=&amp;quot;left&amp;quot; width=&amp;quot;70%&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Review ' + '&amp;lt;/b&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'\&lt;br /&gt;
						 '&amp;lt;a href=&amp;quot;#&amp;quot; name= &amp;quot;review_' + self_id + 'Link&amp;quot; onClick=&amp;quot;toggleElement(' + &amp;quot;'review_&amp;quot; + self_id + &amp;quot;','review'&amp;quot; + ');return false;&amp;quot;&amp;gt;hide review&amp;lt;/a&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;/td&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Last Reviewed:&amp;lt;/b&amp;gt;'\&lt;br /&gt;
						 &amp;quot;&amp;lt;span&amp;gt;#{(self.updated_at.nil? ? 'Not available' : self.updated_at.strftime('%A %B %d %Y, %I:%M%p'))}&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;\&lt;br /&gt;
						 '&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;'&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Show just one review in instructor-end&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% rscore[:assessments].select{|response| response.round == round}.reverse.uniq{|response| response.map_id}.sort_by{|response| response.map_id}.each_with_index do |review, index| %&amp;gt;&lt;br /&gt;
     &amp;lt;% if controller.action_name == &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
          &amp;lt;% next if review.reviewer != @reviewer || count &amp;gt; 0 %&amp;gt;&lt;br /&gt;
     &amp;lt;% end %&amp;gt;&lt;br /&gt;
......&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:instructorend.png ]] &lt;br /&gt;
&lt;br /&gt;
=='''Test Plans'''==&lt;br /&gt;
*The rspec test plan is written such that each requirement(for student-end and instructor-end) will have at least 1 different test. &lt;br /&gt;
*The test plan is also used as a check of bug fix implementation. It ensures that each required function is implemented and each bug is well fixed. &lt;br /&gt;
*The test file can be manually executed the by running &amp;quot;rspec ./spec/features/tabbed_reviews_spec.rb&amp;quot; on rails terminal.&lt;br /&gt;
&lt;br /&gt;
=='''Test files'''==&lt;br /&gt;
&lt;br /&gt;
*tabbed_review_spec.rb created and added 3 test cases for alternate view of reviews&lt;br /&gt;
'''spec/features/tabbed_review_spec.rb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require &amp;quot;spec_helper&amp;quot;&lt;br /&gt;
require 'rspec'&lt;br /&gt;
describe &amp;quot;alternate view of reviews&amp;quot; do&lt;br /&gt;
    before(:each) do&lt;br /&gt;
      assignment1 = create(:assignment, name: &amp;quot;111&amp;quot;, directory_path: 'test_assignment')&lt;br /&gt;
      create_list(:participant, 3)&lt;br /&gt;
      create(:assignment_node)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;submission&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;review&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;metareview&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;drop_topic&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;signup&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;team_formation&amp;quot;)&lt;br /&gt;
      create(:deadline_right)&lt;br /&gt;
      create(:deadline_right, name: 'Late')&lt;br /&gt;
      create(:deadline_right, name: 'OK')&lt;br /&gt;
      create(:assignment_due_date, deadline_type: DeadlineType.where(name: 'review').first, due_at: Time.now.in_time_zone + 1.day)&lt;br /&gt;
      create(:topic)&lt;br /&gt;
      create(:topic, topic_name: &amp;quot;TestReview&amp;quot;)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).first)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).second)&lt;br /&gt;
      create(:assignment_team)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).third, team: AssignmentTeam.second)&lt;br /&gt;
      create(:signed_up_team)&lt;br /&gt;
      create(:signed_up_team, team_id: 2, topic: SignUpTopic.second)&lt;br /&gt;
      create(:assignment_questionnaire)&lt;br /&gt;
      create(:question)&lt;br /&gt;
      # create(:review_response_map, reviewer_id: User.where(role_id: 2).third.id)&lt;br /&gt;
      # create(:review_response_map, reviewer_id: User.where(role_id: 2).second.id, reviewee: AssignmentTeam.second)&lt;br /&gt;
      # sleep(10000)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
  def load_alternate&lt;br /&gt;
    login_as('student2064')&lt;br /&gt;
    expect(page).to have_content &amp;quot;User: student2064&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;111&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    click_link &amp;quot;111&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Submit or Review work for 111&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Alternate View&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    click_link &amp;quot;Alternate View&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Contributor&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  it &amp;quot;shows the correct alternate view&amp;quot; do&lt;br /&gt;
    # Load questionnaire with generic setup&lt;br /&gt;
    load_alternate&lt;br /&gt;
    expect(page).to have_content &amp;quot;Contributor&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Stats&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Submitted work&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Author Feedback&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Teammate Review&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Final Score&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Range&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Average&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;student2064&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'hide stats' &lt;br /&gt;
    expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'show submission' &lt;br /&gt;
    #expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'show reviews' &lt;br /&gt;
    #page.should have_selector('table tr', text: 'show reviews')&lt;br /&gt;
    #find(:xpath, &amp;quot;//tr[contains(.,'show reviews')]/td/a&amp;quot;, :text =&amp;gt; 'show reviews').click&lt;br /&gt;
    #expect(page).to have_content &amp;quot;Writeup&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
      #describe &amp;quot;grades/participant&amp;quot;, :type =&amp;gt; :view do&lt;br /&gt;
        #it 'exists' do&lt;br /&gt;
          #find(:xpath, &amp;quot;//tr[contains(.,'show reviews')]/td/a&amp;quot;, :text =&amp;gt; 'show reviews').click&lt;br /&gt;
        #end&lt;br /&gt;
      #end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
describe &amp;quot;test for instructor&amp;quot; do&lt;br /&gt;
  before(:each) do&lt;br /&gt;
    # assignment and topic&lt;br /&gt;
    create(:assignment,&lt;br /&gt;
           name: &amp;quot;Test Assignment&amp;quot;,&lt;br /&gt;
           directory_path: &amp;quot;Test Assignment&amp;quot;,&lt;br /&gt;
           rounds_of_reviews: 2,&lt;br /&gt;
           staggered_deadline: true,&lt;br /&gt;
           max_team_size: 1,&lt;br /&gt;
           allow_selecting_additional_reviews_after_1st_round: true)&lt;br /&gt;
    create_list(:participant, 3)&lt;br /&gt;
    create(:topic, topic_name: &amp;quot;Topic_1&amp;quot;)&lt;br /&gt;
    create(:topic, topic_name: &amp;quot;Topic_2&amp;quot;)&lt;br /&gt;
    create(:topic, topic_name: &amp;quot;Topic_3&amp;quot;)&lt;br /&gt;
    assignment_id = Assignment.where(name: 'Test Assignment')[0].id&lt;br /&gt;
&lt;br /&gt;
    #visit &amp;quot;/response/view2?id=#{review_id}&amp;amp;&amp;amp;team=#{team_id}&amp;amp;&amp;amp;round=1&amp;amp;&amp;amp;assignment=#{assignment_id}&amp;quot;&lt;br /&gt;
    # rubric&lt;br /&gt;
    create(:questionnaire, name: &amp;quot;TestQuestionnaire1&amp;quot;)&lt;br /&gt;
    create(:questionnaire, name: &amp;quot;TestQuestionnaire2&amp;quot;)&lt;br /&gt;
    create(:question, txt: &amp;quot;Question1&amp;quot;, questionnaire: ReviewQuestionnaire.where(name: 'TestQuestionnaire1').first, type: &amp;quot;Criterion&amp;quot;)&lt;br /&gt;
    create(:question, txt: &amp;quot;Question2&amp;quot;, questionnaire: ReviewQuestionnaire.where(name: 'TestQuestionnaire2').first, type: &amp;quot;Criterion&amp;quot;)&lt;br /&gt;
    create(:assignment_questionnaire, questionnaire: ReviewQuestionnaire.where(name: 'TestQuestionnaire1').first, used_in_round: 1)&lt;br /&gt;
    create(:assignment_questionnaire, questionnaire: ReviewQuestionnaire.where(name: 'TestQuestionnaire2').first, used_in_round: 2)&lt;br /&gt;
    questionnaire_id = ReviewQuestionnaire.first.id.to_s&lt;br /&gt;
&lt;br /&gt;
    # deadline type&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;submission&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;review&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;metareview&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;drop_topic&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;signup&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;team_formation&amp;quot;)&lt;br /&gt;
    create(:deadline_right)&lt;br /&gt;
    create(:deadline_right, name: 'Late')&lt;br /&gt;
    create(:deadline_right, name: 'OK')&lt;br /&gt;
&lt;br /&gt;
    create(:team_user, user: User.where(role_id: 2).first)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).second)&lt;br /&gt;
      create(:assignment_team)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).third, team: AssignmentTeam.second)&lt;br /&gt;
      create(:signed_up_team)&lt;br /&gt;
      create(:signed_up_team, team_id: 2, topic: SignUpTopic.second)&lt;br /&gt;
    visit &amp;quot;response/view2?id=#{questionnaire_id}&amp;amp;&amp;amp;team=1&amp;amp;&amp;amp;round=1&amp;amp;&amp;amp;assignment=#{assignment_id}&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  it &amp;quot;can go to review details&amp;quot; do&lt;br /&gt;
    expect(page).to have_content &amp;quot;Toggle navigation&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Papers on Expertiza&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;response&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
#[https://github.com/aranne/expertiza Forked Issue on Github]&lt;br /&gt;
#Weiran Fu (wfu4@ncsu.edu)&lt;br /&gt;
#Qingyan Wang (qwang20@ncsu.edu)&lt;br /&gt;
#Hongli Wang (hwang85@ncsu.edu)&lt;br /&gt;
#'''Mentor:''' Mohit Jain (mjain6@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza on GitHub]&lt;br /&gt;
#[http://expertiza.ncsu.edu/ The live Expertiza website] &lt;br /&gt;
#[http://wikis.lib.ncsu.edu/index.php/Expertiza Expertiza project documentation wiki]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Hwang85</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1966._Tabbed_reviews_partial_file_refactor_for_displaying_the_alternate_view_of_reviews&amp;diff=126668</id>
		<title>CSC/ECE 517 Fall 2019 - E1966. Tabbed reviews partial file refactor for displaying the alternate view of reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1966._Tabbed_reviews_partial_file_refactor_for_displaying_the_alternate_view_of_reviews&amp;diff=126668"/>
		<updated>2019-10-29T23:14:07Z</updated>

		<summary type="html">&lt;p&gt;Hwang85: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''About Expertiza''' ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a open source project currently for CSC517 instructor and students forming groups, submit work, review, and view grades. The project is based on Ruby on Rails framework and the code is on Github: https://github.com/expertiza/expertiza. Expertiza serves wiki page, collecting information of all internal information and updates of all versions.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
===Issue details===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) On student end, Expertiza uses grades/_reviews.html.erb partial file to display reviewers, scores and review details; on instructor end, it uses Response model methods to construct html file for review pages. We need to use the same kinds of partials in instructor-end and student-end.&lt;br /&gt;
&lt;br /&gt;
How to get the view of reviewers, scores and review details on student end? Click &amp;quot;Alternate View&amp;quot; button, and click &amp;quot;show reviews&amp;quot; link. The reviewers and scores pop up on the top and review details are below them.&lt;br /&gt;
How to get the view of reviewers, scores and review details on instructor end? Click &amp;quot;Scores&amp;quot; for a certain assignment and choose a team. Click &amp;quot;Statistics&amp;quot; tab and then reviewers and scores table show up. Click &amp;quot;Reviews&amp;quot; tab and then click one of students' name link in the table head. And a new page pops up with review details.&lt;br /&gt;
&lt;br /&gt;
2) Give Feedback link at view_my_score at student-end should not appear at folded view.&lt;br /&gt;
Where to find Give Feedback link? On student end, click &amp;quot;Alternate View&amp;quot; button and click &amp;quot;show reviews&amp;quot; link. At the bottom of a certain review, a give feedback link shows up.&lt;br /&gt;
&lt;br /&gt;
===What to do===&lt;br /&gt;
1) We need to use the same kinds of partials in instructor-end and student-end. So we decide to use  grades/_team_statistics.html.erb to display reviewers and scores and to use grades/_tabbed_reviews.html.erb to display review details for both student-end and instructor-end.&lt;br /&gt;
&lt;br /&gt;
2) Give Feedback link at view_my_score should appear at the bottom of expanded view.&lt;br /&gt;
&lt;br /&gt;
== '''Solution''' ==&lt;br /&gt;
For student end, split reviews.html.erb into two partial files. One is grades/team_review_statistics.html.erb for reviewers and scores. The other one is grades/tabbed_reviews.html.erb for review details.&lt;br /&gt;
For instructor end, it used to use response model methods to construct html files for review details, now we use grades/tabbed_reviews.html.erb to display review details.&lt;br /&gt;
So student end and instructor end both use grades/team_review_statistics and grades/tabbed_reviews to display reviewers, scores and review details.&lt;br /&gt;
===Deploy Link===&lt;br /&gt;
[http://152.46.17.70:8080  Our project is deployed at VCL ]&lt;br /&gt;
===Student End===&lt;br /&gt;
&lt;br /&gt;
* In student end, render grades/team_review_statistics and grades/tabbed_reviews two partial files instead of grades/reviews partial file.&lt;br /&gt;
'''app/views/grades/_participant.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;TR id=&amp;quot;&amp;lt;%= prefix %&amp;gt;_reviews&amp;quot; style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/team_review_statistics', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :pscore =&amp;gt; pscore} %&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&lt;br /&gt;
    &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Add statistics view to student end by using the team_review_statistics.html.erb file.&lt;br /&gt;
'''app/views/grades/_participant.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;TR id=&amp;quot;&amp;lt;%= prefix %&amp;gt;_reviews&amp;quot; style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/team_review_statistics', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :pscore =&amp;gt; pscore} %&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&lt;br /&gt;
    &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_team_review_statistics.html.erb''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td colspan=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;    &lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:student-table.png ]]&lt;br /&gt;
&lt;br /&gt;
[[File:Student-detail.png]]&lt;br /&gt;
&lt;br /&gt;
* Add feed back link in student end view.&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;% if controller.action_name == &amp;quot;view_my_scores&amp;quot;%&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Generate the feedback html --&amp;gt;&lt;br /&gt;
                    &amp;lt;% map = FeedbackResponseMap.where(reviewed_object_id: review.id, reviewer_id: participant.id).first&lt;br /&gt;
                        review_feedbacks = map.try :response %&amp;gt;&lt;br /&gt;
                    &amp;lt;% if review_feedbacks &amp;amp;&amp;amp; !review_feedbacks.empty? %&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_feedbacks.first.id %&amp;gt; or&lt;br /&gt;
                        &amp;lt;%= link_to &amp;quot;Edit&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'edit', :id =&amp;gt; review_feedbacks.first.id, :return =&amp;gt; &amp;quot;feedback&amp;quot; %&amp;gt; feedback for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                    &amp;lt;% else %&amp;gt;&lt;br /&gt;
                        &amp;lt;%= link_to &amp;quot;Give feedback&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'new_feedback', :id =&amp;gt; review.id %&amp;gt; for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                    &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Student-feedback.png]]&lt;br /&gt;
&lt;br /&gt;
* Add javascript to tabbed review so it can be hidden or shown by clicking the show/hide reviews.&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  toggle_tag_prompt = function() {&lt;br /&gt;
    $('.tag_prompt_container').toggle();&lt;br /&gt;
  };&lt;br /&gt;
  $( document ).ready(function() {&lt;br /&gt;
    $('#tag_prompt_toggler').click(function () {&lt;br /&gt;
      if ($('#tag_prompt_toggler').text() == &amp;quot;hide tags&amp;quot;)&lt;br /&gt;
        $('#tag_prompt_toggler').text(&amp;quot;show tags&amp;quot;)&lt;br /&gt;
      else&lt;br /&gt;
        $('#tag_prompt_toggler').text(&amp;quot;hide tags&amp;quot;)&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Instructor End===&lt;br /&gt;
&lt;br /&gt;
* Create new method view2 for response_controller&lt;br /&gt;
&lt;br /&gt;
''' app/controllers/response_controller.rb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def view2&lt;br /&gt;
    @response = Response.find(params[:id])&lt;br /&gt;
    @map = @response.map&lt;br /&gt;
    set_content2&lt;br /&gt;
    render &amp;quot;response/view&amp;quot;&lt;br /&gt;
  end &lt;br /&gt;
......&lt;br /&gt;
def set_content2(new_response = false)&lt;br /&gt;
    @contributor = @map.contributor&lt;br /&gt;
    members = TeamsUser.where(team_id: params[:team])&lt;br /&gt;
    @user = members.first&lt;br /&gt;
    @participant = AssignmentParticipant.where(user_id: @user.user_id, parent_id: params[:assignment]).first&lt;br /&gt;
    @assignment = @participant.assignment&lt;br /&gt;
    questionnaires = @assignment.questionnaires&lt;br /&gt;
    @questions = retrieve_questions questionnaires, @assignment.id&lt;br /&gt;
    # @pscore has the newest versions of response for each response map, and only one for each response map (unless it is vary rubric by round)&lt;br /&gt;
    @pscore = @participant.scores(@questions)&lt;br /&gt;
    @reviewer = @map.reviewer&lt;br /&gt;
    @round = params[:round]&lt;br /&gt;
  end  &lt;br /&gt;
  def retrieve_questions(questionnaires, assignment_id)&lt;br /&gt;
    questions = {}&lt;br /&gt;
    questionnaires.each do |questionnaire|&lt;br /&gt;
      round = AssignmentQuestionnaire.where(assignment_id: assignment_id, questionnaire_id: questionnaire.id).first.used_in_round&lt;br /&gt;
      questionnaire_symbol = if !round.nil?&lt;br /&gt;
                               (questionnaire.symbol.to_s + round.to_s).to_sym&lt;br /&gt;
                             else&lt;br /&gt;
                               questionnaire.symbol&lt;br /&gt;
                             end&lt;br /&gt;
      questions[questionnaire_symbol] = questionnaire.questions&lt;br /&gt;
    end&lt;br /&gt;
    questions&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* change the url jumping to after clicking to a certain reviewer.&lt;br /&gt;
''' app/views/grades/_view_heatgrid.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;th class=&amp;quot;sorter-false&amp;quot;&amp;gt; &amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;../response/view2?id=&amp;lt;%= review.id.to_s %&amp;gt;&amp;amp;&amp;amp;team=&amp;lt;%= @team.id %&amp;gt;&amp;amp;&amp;amp;round=&amp;lt;%= vm.round.to_s %&amp;gt;&amp;amp;&amp;amp;assignment=&amp;lt;%= @assignment.id %&amp;gt;&amp;quot;  data-toggle=&amp;quot;tooltip&amp;quot; data-placement=&amp;quot;right&amp;quot; title=&amp;quot;Click to see details&amp;quot;&amp;gt;&amp;lt;%= user_name.to_s %&amp;gt;&amp;lt;/a&amp;gt;  &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* render grades/tabbed_reviews for review details at instructor end&lt;br /&gt;
''' app/views/response/view.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view2&amp;quot; %&amp;gt;&lt;br /&gt;
    &amp;lt;% file_url = nil %&amp;gt;&lt;br /&gt;
    &amp;lt;%= @response.display_as_html(nil, nil, file_url) %&amp;gt;&lt;br /&gt;
    &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;% else %&amp;gt;&lt;br /&gt;
    &amp;lt;TR style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; @participant, :rscore =&amp;gt; @pscore[:review], :reviewer =&amp;gt; @reviewer, :round =&amp;gt; @round} %&amp;gt;&lt;br /&gt;
        &amp;lt;/TD&amp;gt;&lt;br /&gt;
    &amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* show right round according to which round user click at instructor-end&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% rounds.each do |round| %&amp;gt;&lt;br /&gt;
        &amp;lt;% if controller.action_name == &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
        &amp;lt;% next if round.to_s != @round.to_s %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
......&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Create construct_instructor2_html in respond model in order to not show review number&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     &amp;lt;% prefix = &amp;quot;instructor&amp;quot; if controller.action_name == &amp;quot;view2&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' app/models/response.rb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if prefix == &amp;quot;instructor&amp;quot;&lt;br /&gt;
      self_id = self.id.to_s&lt;br /&gt;
      code = construct_instructor2_html identifier, self_id, count&lt;br /&gt;
......&lt;br /&gt;
def construct_instructor2_html identifier, self_id, count&lt;br /&gt;
    identifier += '&amp;lt;table width=&amp;quot;100%&amp;quot;&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;tr&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;td align=&amp;quot;left&amp;quot; width=&amp;quot;70%&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Review ' + '&amp;lt;/b&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'\&lt;br /&gt;
						 '&amp;lt;a href=&amp;quot;#&amp;quot; name= &amp;quot;review_' + self_id + 'Link&amp;quot; onClick=&amp;quot;toggleElement(' + &amp;quot;'review_&amp;quot; + self_id + &amp;quot;','review'&amp;quot; + ');return false;&amp;quot;&amp;gt;hide review&amp;lt;/a&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;/td&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Last Reviewed:&amp;lt;/b&amp;gt;'\&lt;br /&gt;
						 &amp;quot;&amp;lt;span&amp;gt;#{(self.updated_at.nil? ? 'Not available' : self.updated_at.strftime('%A %B %d %Y, %I:%M%p'))}&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;\&lt;br /&gt;
						 '&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;'&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Show just one review in instructor-end&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% rscore[:assessments].select{|response| response.round == round}.reverse.uniq{|response| response.map_id}.sort_by{|response| response.map_id}.each_with_index do |review, index| %&amp;gt;&lt;br /&gt;
     &amp;lt;% if controller.action_name == &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
          &amp;lt;% next if review.reviewer != @reviewer || count &amp;gt; 0 %&amp;gt;&lt;br /&gt;
     &amp;lt;% end %&amp;gt;&lt;br /&gt;
......&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:instructorend.png ]] &lt;br /&gt;
&lt;br /&gt;
=='''Test Plans'''==&lt;br /&gt;
&lt;br /&gt;
*tabbed_review_spec.rb created and added 3 test cases for alternate view of reviews&lt;br /&gt;
'''spec/features/tabbed_review_spec.rb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require &amp;quot;spec_helper&amp;quot;&lt;br /&gt;
require 'rspec'&lt;br /&gt;
describe &amp;quot;alternate view of reviews&amp;quot; do&lt;br /&gt;
    before(:each) do&lt;br /&gt;
      assignment1 = create(:assignment, name: &amp;quot;111&amp;quot;, directory_path: 'test_assignment')&lt;br /&gt;
      create_list(:participant, 3)&lt;br /&gt;
      create(:assignment_node)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;submission&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;review&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;metareview&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;drop_topic&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;signup&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;team_formation&amp;quot;)&lt;br /&gt;
      create(:deadline_right)&lt;br /&gt;
      create(:deadline_right, name: 'Late')&lt;br /&gt;
      create(:deadline_right, name: 'OK')&lt;br /&gt;
      create(:assignment_due_date, deadline_type: DeadlineType.where(name: 'review').first, due_at: Time.now.in_time_zone + 1.day)&lt;br /&gt;
      create(:topic)&lt;br /&gt;
      create(:topic, topic_name: &amp;quot;TestReview&amp;quot;)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).first)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).second)&lt;br /&gt;
      create(:assignment_team)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).third, team: AssignmentTeam.second)&lt;br /&gt;
      create(:signed_up_team)&lt;br /&gt;
      create(:signed_up_team, team_id: 2, topic: SignUpTopic.second)&lt;br /&gt;
      create(:assignment_questionnaire)&lt;br /&gt;
      create(:question)&lt;br /&gt;
      # create(:review_response_map, reviewer_id: User.where(role_id: 2).third.id)&lt;br /&gt;
      # create(:review_response_map, reviewer_id: User.where(role_id: 2).second.id, reviewee: AssignmentTeam.second)&lt;br /&gt;
      # sleep(10000)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
  def load_alternate&lt;br /&gt;
    login_as('student2064')&lt;br /&gt;
    expect(page).to have_content &amp;quot;User: student2064&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;111&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    click_link &amp;quot;111&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Submit or Review work for 111&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Alternate View&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    click_link &amp;quot;Alternate View&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Contributor&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  it &amp;quot;shows the correct alternate view&amp;quot; do&lt;br /&gt;
    # Load questionnaire with generic setup&lt;br /&gt;
    load_alternate&lt;br /&gt;
    expect(page).to have_content &amp;quot;Contributor&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Stats&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Submitted work&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Author Feedback&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Teammate Review&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Final Score&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Range&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Average&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;student2064&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'hide stats' &lt;br /&gt;
    expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'show submission' &lt;br /&gt;
    #expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'show reviews' &lt;br /&gt;
    #page.should have_selector('table tr', text: 'show reviews')&lt;br /&gt;
    #find(:xpath, &amp;quot;//tr[contains(.,'show reviews')]/td/a&amp;quot;, :text =&amp;gt; 'show reviews').click&lt;br /&gt;
    #expect(page).to have_content &amp;quot;Writeup&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
      #describe &amp;quot;grades/participant&amp;quot;, :type =&amp;gt; :view do&lt;br /&gt;
        #it 'exists' do&lt;br /&gt;
          #find(:xpath, &amp;quot;//tr[contains(.,'show reviews')]/td/a&amp;quot;, :text =&amp;gt; 'show reviews').click&lt;br /&gt;
        #end&lt;br /&gt;
      #end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
describe &amp;quot;test for instructor&amp;quot; do&lt;br /&gt;
  before(:each) do&lt;br /&gt;
    # assignment and topic&lt;br /&gt;
    create(:assignment,&lt;br /&gt;
           name: &amp;quot;Test Assignment&amp;quot;,&lt;br /&gt;
           directory_path: &amp;quot;Test Assignment&amp;quot;,&lt;br /&gt;
           rounds_of_reviews: 2,&lt;br /&gt;
           staggered_deadline: true,&lt;br /&gt;
           max_team_size: 1,&lt;br /&gt;
           allow_selecting_additional_reviews_after_1st_round: true)&lt;br /&gt;
    create_list(:participant, 3)&lt;br /&gt;
    create(:topic, topic_name: &amp;quot;Topic_1&amp;quot;)&lt;br /&gt;
    create(:topic, topic_name: &amp;quot;Topic_2&amp;quot;)&lt;br /&gt;
    create(:topic, topic_name: &amp;quot;Topic_3&amp;quot;)&lt;br /&gt;
    assignment_id = Assignment.where(name: 'Test Assignment')[0].id&lt;br /&gt;
&lt;br /&gt;
    #visit &amp;quot;/response/view2?id=#{review_id}&amp;amp;&amp;amp;team=#{team_id}&amp;amp;&amp;amp;round=1&amp;amp;&amp;amp;assignment=#{assignment_id}&amp;quot;&lt;br /&gt;
    # rubric&lt;br /&gt;
    create(:questionnaire, name: &amp;quot;TestQuestionnaire1&amp;quot;)&lt;br /&gt;
    create(:questionnaire, name: &amp;quot;TestQuestionnaire2&amp;quot;)&lt;br /&gt;
    create(:question, txt: &amp;quot;Question1&amp;quot;, questionnaire: ReviewQuestionnaire.where(name: 'TestQuestionnaire1').first, type: &amp;quot;Criterion&amp;quot;)&lt;br /&gt;
    create(:question, txt: &amp;quot;Question2&amp;quot;, questionnaire: ReviewQuestionnaire.where(name: 'TestQuestionnaire2').first, type: &amp;quot;Criterion&amp;quot;)&lt;br /&gt;
    create(:assignment_questionnaire, questionnaire: ReviewQuestionnaire.where(name: 'TestQuestionnaire1').first, used_in_round: 1)&lt;br /&gt;
    create(:assignment_questionnaire, questionnaire: ReviewQuestionnaire.where(name: 'TestQuestionnaire2').first, used_in_round: 2)&lt;br /&gt;
    questionnaire_id = ReviewQuestionnaire.first.id.to_s&lt;br /&gt;
&lt;br /&gt;
    # deadline type&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;submission&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;review&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;metareview&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;drop_topic&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;signup&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;team_formation&amp;quot;)&lt;br /&gt;
    create(:deadline_right)&lt;br /&gt;
    create(:deadline_right, name: 'Late')&lt;br /&gt;
    create(:deadline_right, name: 'OK')&lt;br /&gt;
&lt;br /&gt;
    create(:team_user, user: User.where(role_id: 2).first)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).second)&lt;br /&gt;
      create(:assignment_team)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).third, team: AssignmentTeam.second)&lt;br /&gt;
      create(:signed_up_team)&lt;br /&gt;
      create(:signed_up_team, team_id: 2, topic: SignUpTopic.second)&lt;br /&gt;
    visit &amp;quot;response/view2?id=#{questionnaire_id}&amp;amp;&amp;amp;team=1&amp;amp;&amp;amp;round=1&amp;amp;&amp;amp;assignment=#{assignment_id}&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  it &amp;quot;can go to review details&amp;quot; do&lt;br /&gt;
    expect(page).to have_content &amp;quot;Toggle navigation&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Papers on Expertiza&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;response&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
#[https://github.com/aranne/expertiza Forked Issue on Github]&lt;br /&gt;
#Weiran Fu (wfu4@ncsu.edu)&lt;br /&gt;
#Qingyan Wang (qwang20@ncsu.edu)&lt;br /&gt;
#Hongli Wang (hwang85@ncsu.edu)&lt;br /&gt;
#'''Mentor:''' Mohit Jain (mjain6@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza on GitHub]&lt;br /&gt;
#[http://expertiza.ncsu.edu/ The live Expertiza website] &lt;br /&gt;
#[http://wikis.lib.ncsu.edu/index.php/Expertiza Expertiza project documentation wiki]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Hwang85</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1966._Tabbed_reviews_partial_file_refactor_for_displaying_the_alternate_view_of_reviews&amp;diff=126667</id>
		<title>CSC/ECE 517 Fall 2019 - E1966. Tabbed reviews partial file refactor for displaying the alternate view of reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1966._Tabbed_reviews_partial_file_refactor_for_displaying_the_alternate_view_of_reviews&amp;diff=126667"/>
		<updated>2019-10-29T22:53:42Z</updated>

		<summary type="html">&lt;p&gt;Hwang85: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''About Expertiza''' ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a open source project currently for CSC517 instructor and students forming groups, submit work, review, and view grades. The project is based on Ruby on Rails framework and the code is on Github: https://github.com/expertiza/expertiza. Expertiza serves wiki page, collecting information of all internal information and updates of all versions.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
===Issue details===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) On student end, Expertiza uses grades/_reviews.html.erb partial file to display reviewers, scores and review details; on instructor end, it uses Response model methods to construct html file for review pages. We need to use the same kinds of partials in instructor-end and student-end.&lt;br /&gt;
&lt;br /&gt;
How to get the view of reviewers, scores and review details on student end? Click &amp;quot;Alternate View&amp;quot; button, and click &amp;quot;show reviews&amp;quot; link. The reviewers and scores pop up on the top and review details are below them.&lt;br /&gt;
How to get the view of reviewers, scores and review details on instructor end? Click &amp;quot;Scores&amp;quot; for a certain assignment and choose a team. Click &amp;quot;Statistics&amp;quot; tab and then reviewers and scores table show up. Click &amp;quot;Reviews&amp;quot; tab and then click one of students' name link in the table head. And a new page pops up with review details.&lt;br /&gt;
&lt;br /&gt;
2) Give Feedback link at view_my_score at student-end should not appear at folded view.&lt;br /&gt;
Where to find Give Feedback link? On student end, click &amp;quot;Alternate View&amp;quot; button and click &amp;quot;show reviews&amp;quot; link. At the bottom of a certain review, a give feedback link shows up.&lt;br /&gt;
&lt;br /&gt;
===What to do===&lt;br /&gt;
1) We need to use the same kinds of partials in instructor-end and student-end. So we decide to use  grades/_team_statistics.html.erb to display reviewers and scores and to use grades/_tabbed_reviews.html.erb to display review details for both student-end and instructor-end.&lt;br /&gt;
&lt;br /&gt;
2) Give Feedback link at view_my_score should appear at the bottom of expanded view.&lt;br /&gt;
&lt;br /&gt;
== '''Solution''' ==&lt;br /&gt;
For student end, split reviews.html.erb into two partial files. One is grades/team_review_statistics.html.erb for reviewers and scores. The other one is grades/tabbed_reviews.html.erb for review details.&lt;br /&gt;
For instructor end, it used to use response model methods to construct html files for review details, now we use grades/tabbed_reviews.html.erb to display review details.&lt;br /&gt;
So student end and instructor end both use grades/team_review_statistics and grades/tabbed_reviews to display reviewers, scores and review details.&lt;br /&gt;
===Deploy Link===&lt;br /&gt;
[http://152.46.17.70:8080  Our project is deployed at VCL ]&lt;br /&gt;
===Student End===&lt;br /&gt;
&lt;br /&gt;
* In student end, render grades/team_review_statistics and grades/tabbed_reviews two partial files instead of grades/reviews partial file.&lt;br /&gt;
'''app/views/grades/_participant.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;TR id=&amp;quot;&amp;lt;%= prefix %&amp;gt;_reviews&amp;quot; style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/team_review_statistics', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :pscore =&amp;gt; pscore} %&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&lt;br /&gt;
    &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Add statistics view to student end by using the team_review_statistics.html.erb file.&lt;br /&gt;
'''app/views/grades/_participant.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;TR id=&amp;quot;&amp;lt;%= prefix %&amp;gt;_reviews&amp;quot; style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/team_review_statistics', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :pscore =&amp;gt; pscore} %&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&lt;br /&gt;
    &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_team_review_statistics.html.erb''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td colspan=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;    &lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:student-table.png ]]&lt;br /&gt;
&lt;br /&gt;
[[File:Student-detail.png]]&lt;br /&gt;
&lt;br /&gt;
* Add feed back link in student end view.&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;% if controller.action_name == &amp;quot;view_my_scores&amp;quot;%&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Generate the feedback html --&amp;gt;&lt;br /&gt;
                    &amp;lt;% map = FeedbackResponseMap.where(reviewed_object_id: review.id, reviewer_id: participant.id).first&lt;br /&gt;
                        review_feedbacks = map.try :response %&amp;gt;&lt;br /&gt;
                    &amp;lt;% if review_feedbacks &amp;amp;&amp;amp; !review_feedbacks.empty? %&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_feedbacks.first.id %&amp;gt; or&lt;br /&gt;
                        &amp;lt;%= link_to &amp;quot;Edit&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'edit', :id =&amp;gt; review_feedbacks.first.id, :return =&amp;gt; &amp;quot;feedback&amp;quot; %&amp;gt; feedback for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                    &amp;lt;% else %&amp;gt;&lt;br /&gt;
                        &amp;lt;%= link_to &amp;quot;Give feedback&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'new_feedback', :id =&amp;gt; review.id %&amp;gt; for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                    &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Student-feedback.png]]&lt;br /&gt;
&lt;br /&gt;
* Add javascript to tabbed review so it can be hidden or shown by clicking the show/hide reviews.&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  toggle_tag_prompt = function() {&lt;br /&gt;
    $('.tag_prompt_container').toggle();&lt;br /&gt;
  };&lt;br /&gt;
  $( document ).ready(function() {&lt;br /&gt;
    $('#tag_prompt_toggler').click(function () {&lt;br /&gt;
      if ($('#tag_prompt_toggler').text() == &amp;quot;hide tags&amp;quot;)&lt;br /&gt;
        $('#tag_prompt_toggler').text(&amp;quot;show tags&amp;quot;)&lt;br /&gt;
      else&lt;br /&gt;
        $('#tag_prompt_toggler').text(&amp;quot;hide tags&amp;quot;)&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Instructor End===&lt;br /&gt;
&lt;br /&gt;
* Create new method view2 for response_controller&lt;br /&gt;
&lt;br /&gt;
''' app/controllers/response_controller.rb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def view2&lt;br /&gt;
    @response = Response.find(params[:id])&lt;br /&gt;
    @map = @response.map&lt;br /&gt;
    set_content2&lt;br /&gt;
    render &amp;quot;response/view&amp;quot;&lt;br /&gt;
  end &lt;br /&gt;
......&lt;br /&gt;
def set_content2(new_response = false)&lt;br /&gt;
    @contributor = @map.contributor&lt;br /&gt;
    members = TeamsUser.where(team_id: params[:team])&lt;br /&gt;
    @user = members.first&lt;br /&gt;
    @participant = AssignmentParticipant.where(user_id: @user.user_id, parent_id: params[:assignment]).first&lt;br /&gt;
    @assignment = @participant.assignment&lt;br /&gt;
    questionnaires = @assignment.questionnaires&lt;br /&gt;
    @questions = retrieve_questions questionnaires, @assignment.id&lt;br /&gt;
    # @pscore has the newest versions of response for each response map, and only one for each response map (unless it is vary rubric by round)&lt;br /&gt;
    @pscore = @participant.scores(@questions)&lt;br /&gt;
    @reviewer = @map.reviewer&lt;br /&gt;
    @round = params[:round]&lt;br /&gt;
  end  &lt;br /&gt;
  def retrieve_questions(questionnaires, assignment_id)&lt;br /&gt;
    questions = {}&lt;br /&gt;
    questionnaires.each do |questionnaire|&lt;br /&gt;
      round = AssignmentQuestionnaire.where(assignment_id: assignment_id, questionnaire_id: questionnaire.id).first.used_in_round&lt;br /&gt;
      questionnaire_symbol = if !round.nil?&lt;br /&gt;
                               (questionnaire.symbol.to_s + round.to_s).to_sym&lt;br /&gt;
                             else&lt;br /&gt;
                               questionnaire.symbol&lt;br /&gt;
                             end&lt;br /&gt;
      questions[questionnaire_symbol] = questionnaire.questions&lt;br /&gt;
    end&lt;br /&gt;
    questions&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* change the url jumping to after clicking to a certain reviewer.&lt;br /&gt;
''' app/views/grades/_view_heatgrid.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;th class=&amp;quot;sorter-false&amp;quot;&amp;gt; &amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;../response/view2?id=&amp;lt;%= review.id.to_s %&amp;gt;&amp;amp;&amp;amp;team=&amp;lt;%= @team.id %&amp;gt;&amp;amp;&amp;amp;round=&amp;lt;%= vm.round.to_s %&amp;gt;&amp;amp;&amp;amp;assignment=&amp;lt;%= @assignment.id %&amp;gt;&amp;quot;  data-toggle=&amp;quot;tooltip&amp;quot; data-placement=&amp;quot;right&amp;quot; title=&amp;quot;Click to see details&amp;quot;&amp;gt;&amp;lt;%= user_name.to_s %&amp;gt;&amp;lt;/a&amp;gt;  &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* render grades/tabbed_reviews for review details at instructor end&lt;br /&gt;
''' app/views/response/view.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view2&amp;quot; %&amp;gt;&lt;br /&gt;
    &amp;lt;% file_url = nil %&amp;gt;&lt;br /&gt;
    &amp;lt;%= @response.display_as_html(nil, nil, file_url) %&amp;gt;&lt;br /&gt;
    &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;% else %&amp;gt;&lt;br /&gt;
    &amp;lt;TR style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; @participant, :rscore =&amp;gt; @pscore[:review], :reviewer =&amp;gt; @reviewer, :round =&amp;gt; @round} %&amp;gt;&lt;br /&gt;
        &amp;lt;/TD&amp;gt;&lt;br /&gt;
    &amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* show right round according to which round user click at instructor-end&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% rounds.each do |round| %&amp;gt;&lt;br /&gt;
        &amp;lt;% if controller.action_name == &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
        &amp;lt;% next if round.to_s != @round.to_s %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
......&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Create construct_instructor2_html in respond model in order to not show review number&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     &amp;lt;% prefix = &amp;quot;instructor&amp;quot; if controller.action_name == &amp;quot;view2&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' app/models/response.rb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if prefix == &amp;quot;instructor&amp;quot;&lt;br /&gt;
      self_id = self.id.to_s&lt;br /&gt;
      code = construct_instructor2_html identifier, self_id, count&lt;br /&gt;
......&lt;br /&gt;
def construct_instructor2_html identifier, self_id, count&lt;br /&gt;
    identifier += '&amp;lt;table width=&amp;quot;100%&amp;quot;&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;tr&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;td align=&amp;quot;left&amp;quot; width=&amp;quot;70%&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Review ' + '&amp;lt;/b&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'\&lt;br /&gt;
						 '&amp;lt;a href=&amp;quot;#&amp;quot; name= &amp;quot;review_' + self_id + 'Link&amp;quot; onClick=&amp;quot;toggleElement(' + &amp;quot;'review_&amp;quot; + self_id + &amp;quot;','review'&amp;quot; + ');return false;&amp;quot;&amp;gt;hide review&amp;lt;/a&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;/td&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Last Reviewed:&amp;lt;/b&amp;gt;'\&lt;br /&gt;
						 &amp;quot;&amp;lt;span&amp;gt;#{(self.updated_at.nil? ? 'Not available' : self.updated_at.strftime('%A %B %d %Y, %I:%M%p'))}&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;\&lt;br /&gt;
						 '&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;'&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Show just one review in instructor-end&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% rscore[:assessments].select{|response| response.round == round}.reverse.uniq{|response| response.map_id}.sort_by{|response| response.map_id}.each_with_index do |review, index| %&amp;gt;&lt;br /&gt;
     &amp;lt;% if controller.action_name == &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
          &amp;lt;% next if review.reviewer != @reviewer || count &amp;gt; 0 %&amp;gt;&lt;br /&gt;
     &amp;lt;% end %&amp;gt;&lt;br /&gt;
......&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:instructorend.png ]] &lt;br /&gt;
&lt;br /&gt;
=='''Test files'''==&lt;br /&gt;
&lt;br /&gt;
*tabbed_review_spec.rb created and added 3 test cases for alternate view of reviews&lt;br /&gt;
'''spec/features/tabbed_review_spec.rb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require &amp;quot;spec_helper&amp;quot;&lt;br /&gt;
require 'rspec'&lt;br /&gt;
describe &amp;quot;alternate view of reviews&amp;quot; do&lt;br /&gt;
    before(:each) do&lt;br /&gt;
      assignment1 = create(:assignment, name: &amp;quot;111&amp;quot;, directory_path: 'test_assignment')&lt;br /&gt;
      create_list(:participant, 3)&lt;br /&gt;
      create(:assignment_node)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;submission&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;review&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;metareview&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;drop_topic&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;signup&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;team_formation&amp;quot;)&lt;br /&gt;
      create(:deadline_right)&lt;br /&gt;
      create(:deadline_right, name: 'Late')&lt;br /&gt;
      create(:deadline_right, name: 'OK')&lt;br /&gt;
      create(:assignment_due_date, deadline_type: DeadlineType.where(name: 'review').first, due_at: Time.now.in_time_zone + 1.day)&lt;br /&gt;
      create(:topic)&lt;br /&gt;
      create(:topic, topic_name: &amp;quot;TestReview&amp;quot;)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).first)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).second)&lt;br /&gt;
      create(:assignment_team)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).third, team: AssignmentTeam.second)&lt;br /&gt;
      create(:signed_up_team)&lt;br /&gt;
      create(:signed_up_team, team_id: 2, topic: SignUpTopic.second)&lt;br /&gt;
      create(:assignment_questionnaire)&lt;br /&gt;
      create(:question)&lt;br /&gt;
      # create(:review_response_map, reviewer_id: User.where(role_id: 2).third.id)&lt;br /&gt;
      # create(:review_response_map, reviewer_id: User.where(role_id: 2).second.id, reviewee: AssignmentTeam.second)&lt;br /&gt;
      # sleep(10000)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
  def load_alternate&lt;br /&gt;
    login_as('student2064')&lt;br /&gt;
    expect(page).to have_content &amp;quot;User: student2064&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;111&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    click_link &amp;quot;111&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Submit or Review work for 111&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Alternate View&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    click_link &amp;quot;Alternate View&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Contributor&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  it &amp;quot;shows the correct alternate view&amp;quot; do&lt;br /&gt;
    # Load questionnaire with generic setup&lt;br /&gt;
    load_alternate&lt;br /&gt;
    expect(page).to have_content &amp;quot;Contributor&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Stats&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Submitted work&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Author Feedback&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Teammate Review&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Final Score&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Range&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Average&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;student2064&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'hide stats' &lt;br /&gt;
    expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'show submission' &lt;br /&gt;
    #expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'show reviews' &lt;br /&gt;
    #page.should have_selector('table tr', text: 'show reviews')&lt;br /&gt;
    #find(:xpath, &amp;quot;//tr[contains(.,'show reviews')]/td/a&amp;quot;, :text =&amp;gt; 'show reviews').click&lt;br /&gt;
    #expect(page).to have_content &amp;quot;Writeup&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
      #describe &amp;quot;grades/participant&amp;quot;, :type =&amp;gt; :view do&lt;br /&gt;
        #it 'exists' do&lt;br /&gt;
          #find(:xpath, &amp;quot;//tr[contains(.,'show reviews')]/td/a&amp;quot;, :text =&amp;gt; 'show reviews').click&lt;br /&gt;
        #end&lt;br /&gt;
      #end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
describe &amp;quot;test for instructor&amp;quot; do&lt;br /&gt;
  before(:each) do&lt;br /&gt;
    # assignment and topic&lt;br /&gt;
    create(:assignment,&lt;br /&gt;
           name: &amp;quot;Test Assignment&amp;quot;,&lt;br /&gt;
           directory_path: &amp;quot;Test Assignment&amp;quot;,&lt;br /&gt;
           rounds_of_reviews: 2,&lt;br /&gt;
           staggered_deadline: true,&lt;br /&gt;
           max_team_size: 1,&lt;br /&gt;
           allow_selecting_additional_reviews_after_1st_round: true)&lt;br /&gt;
    create_list(:participant, 3)&lt;br /&gt;
    create(:topic, topic_name: &amp;quot;Topic_1&amp;quot;)&lt;br /&gt;
    create(:topic, topic_name: &amp;quot;Topic_2&amp;quot;)&lt;br /&gt;
    create(:topic, topic_name: &amp;quot;Topic_3&amp;quot;)&lt;br /&gt;
    assignment_id = Assignment.where(name: 'Test Assignment')[0].id&lt;br /&gt;
&lt;br /&gt;
    #visit &amp;quot;/response/view2?id=#{review_id}&amp;amp;&amp;amp;team=#{team_id}&amp;amp;&amp;amp;round=1&amp;amp;&amp;amp;assignment=#{assignment_id}&amp;quot;&lt;br /&gt;
    # rubric&lt;br /&gt;
    create(:questionnaire, name: &amp;quot;TestQuestionnaire1&amp;quot;)&lt;br /&gt;
    create(:questionnaire, name: &amp;quot;TestQuestionnaire2&amp;quot;)&lt;br /&gt;
    create(:question, txt: &amp;quot;Question1&amp;quot;, questionnaire: ReviewQuestionnaire.where(name: 'TestQuestionnaire1').first, type: &amp;quot;Criterion&amp;quot;)&lt;br /&gt;
    create(:question, txt: &amp;quot;Question2&amp;quot;, questionnaire: ReviewQuestionnaire.where(name: 'TestQuestionnaire2').first, type: &amp;quot;Criterion&amp;quot;)&lt;br /&gt;
    create(:assignment_questionnaire, questionnaire: ReviewQuestionnaire.where(name: 'TestQuestionnaire1').first, used_in_round: 1)&lt;br /&gt;
    create(:assignment_questionnaire, questionnaire: ReviewQuestionnaire.where(name: 'TestQuestionnaire2').first, used_in_round: 2)&lt;br /&gt;
    questionnaire_id = ReviewQuestionnaire.first.id.to_s&lt;br /&gt;
&lt;br /&gt;
    # deadline type&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;submission&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;review&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;metareview&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;drop_topic&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;signup&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;team_formation&amp;quot;)&lt;br /&gt;
    create(:deadline_right)&lt;br /&gt;
    create(:deadline_right, name: 'Late')&lt;br /&gt;
    create(:deadline_right, name: 'OK')&lt;br /&gt;
&lt;br /&gt;
    create(:team_user, user: User.where(role_id: 2).first)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).second)&lt;br /&gt;
      create(:assignment_team)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).third, team: AssignmentTeam.second)&lt;br /&gt;
      create(:signed_up_team)&lt;br /&gt;
      create(:signed_up_team, team_id: 2, topic: SignUpTopic.second)&lt;br /&gt;
    visit &amp;quot;response/view2?id=#{questionnaire_id}&amp;amp;&amp;amp;team=1&amp;amp;&amp;amp;round=1&amp;amp;&amp;amp;assignment=#{assignment_id}&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  it &amp;quot;can go to review details&amp;quot; do&lt;br /&gt;
    expect(page).to have_content &amp;quot;Toggle navigation&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Papers on Expertiza&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;response&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
#[https://github.com/aranne/expertiza Forked Issue on Github]&lt;br /&gt;
#Weiran Fu (wfu4@ncsu.edu)&lt;br /&gt;
#Qingyan Wang (qwang20@ncsu.edu)&lt;br /&gt;
#Hongli Wang (hwang85@ncsu.edu)&lt;br /&gt;
#'''Mentor:''' Mohit Jain (mjain6@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza on GitHub]&lt;br /&gt;
#[http://expertiza.ncsu.edu/ The live Expertiza website] &lt;br /&gt;
#[http://wikis.lib.ncsu.edu/index.php/Expertiza Expertiza project documentation wiki]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Hwang85</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1966._Tabbed_reviews_partial_file_refactor_for_displaying_the_alternate_view_of_reviews&amp;diff=126666</id>
		<title>CSC/ECE 517 Fall 2019 - E1966. Tabbed reviews partial file refactor for displaying the alternate view of reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1966._Tabbed_reviews_partial_file_refactor_for_displaying_the_alternate_view_of_reviews&amp;diff=126666"/>
		<updated>2019-10-29T22:53:20Z</updated>

		<summary type="html">&lt;p&gt;Hwang85: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''About Expertiza''' ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a open source project currently for CSC517 instructor and students forming groups, submit work, review, and view grades. The project is based on Ruby on Rails framework and the code is on Github: https://github.com/expertiza/expertiza. Expertiza serves wiki page, collecting information of all internal information and updates of all versions.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
===Issue details===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) On student end, Expertiza uses grades/_reviews.html.erb partial file to display reviewers, scores and review details; on instructor end, it uses Response model methods to construct html file for review pages. We need to use the same kinds of partials in instructor-end and student-end.&lt;br /&gt;
&lt;br /&gt;
How to get the view of reviewers, scores and review details on student end? Click &amp;quot;Alternate View&amp;quot; button, and click &amp;quot;show reviews&amp;quot; link. The reviewers and scores pop up on the top and review details are below them.&lt;br /&gt;
How to get the view of reviewers, scores and review details on instructor end? Click &amp;quot;Scores&amp;quot; for a certain assignment and choose a team. Click &amp;quot;Statistics&amp;quot; tab and then reviewers and scores table show up. Click &amp;quot;Reviews&amp;quot; tab and then click one of students' name link in the table head. And a new page pops up with review details.&lt;br /&gt;
&lt;br /&gt;
2) Give Feedback link at view_my_score at student-end should not appear at folded view.&lt;br /&gt;
Where to find Give Feedback link? On student end, click &amp;quot;Alternate View&amp;quot; button and click &amp;quot;show reviews&amp;quot; link. At the bottom of a certain review, a give feedback link shows up.&lt;br /&gt;
&lt;br /&gt;
===What to do===&lt;br /&gt;
1) We need to use the same kinds of partials in instructor-end and student-end. So we decide to use  grades/_team_statistics.html.erb to display reviewers and scores and to use grades/_tabbed_reviews.html.erb to display review details for both student-end and instructor-end.&lt;br /&gt;
&lt;br /&gt;
2) Give Feedback link at view_my_score should appear at the bottom of expanded view.&lt;br /&gt;
&lt;br /&gt;
== '''Solution''' ==&lt;br /&gt;
For student end, split reviews.html.erb into two partial files. One is grades/team_review_statistics.html.erb for reviewers and scores. The other one is grades/tabbed_reviews.html.erb for review details.&lt;br /&gt;
For instructor end, it used to use response model methods to construct html files for review details, now we use grades/tabbed_reviews.html.erb to display review details.&lt;br /&gt;
So student end and instructor end both use grades/team_review_statistics and grades/tabbed_reviews to display reviewers, scores and review details.&lt;br /&gt;
===Deploy Link===&lt;br /&gt;
[http://152.46.17.70  Our project is deployed at VCL ]&lt;br /&gt;
===Student End===&lt;br /&gt;
&lt;br /&gt;
* In student end, render grades/team_review_statistics and grades/tabbed_reviews two partial files instead of grades/reviews partial file.&lt;br /&gt;
'''app/views/grades/_participant.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;TR id=&amp;quot;&amp;lt;%= prefix %&amp;gt;_reviews&amp;quot; style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/team_review_statistics', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :pscore =&amp;gt; pscore} %&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&lt;br /&gt;
    &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Add statistics view to student end by using the team_review_statistics.html.erb file.&lt;br /&gt;
'''app/views/grades/_participant.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;TR id=&amp;quot;&amp;lt;%= prefix %&amp;gt;_reviews&amp;quot; style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/team_review_statistics', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :pscore =&amp;gt; pscore} %&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&lt;br /&gt;
    &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_team_review_statistics.html.erb''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td colspan=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;    &lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:student-table.png ]]&lt;br /&gt;
&lt;br /&gt;
[[File:Student-detail.png]]&lt;br /&gt;
&lt;br /&gt;
* Add feed back link in student end view.&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;% if controller.action_name == &amp;quot;view_my_scores&amp;quot;%&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Generate the feedback html --&amp;gt;&lt;br /&gt;
                    &amp;lt;% map = FeedbackResponseMap.where(reviewed_object_id: review.id, reviewer_id: participant.id).first&lt;br /&gt;
                        review_feedbacks = map.try :response %&amp;gt;&lt;br /&gt;
                    &amp;lt;% if review_feedbacks &amp;amp;&amp;amp; !review_feedbacks.empty? %&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_feedbacks.first.id %&amp;gt; or&lt;br /&gt;
                        &amp;lt;%= link_to &amp;quot;Edit&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'edit', :id =&amp;gt; review_feedbacks.first.id, :return =&amp;gt; &amp;quot;feedback&amp;quot; %&amp;gt; feedback for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                    &amp;lt;% else %&amp;gt;&lt;br /&gt;
                        &amp;lt;%= link_to &amp;quot;Give feedback&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'new_feedback', :id =&amp;gt; review.id %&amp;gt; for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                    &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Student-feedback.png]]&lt;br /&gt;
&lt;br /&gt;
* Add javascript to tabbed review so it can be hidden or shown by clicking the show/hide reviews.&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  toggle_tag_prompt = function() {&lt;br /&gt;
    $('.tag_prompt_container').toggle();&lt;br /&gt;
  };&lt;br /&gt;
  $( document ).ready(function() {&lt;br /&gt;
    $('#tag_prompt_toggler').click(function () {&lt;br /&gt;
      if ($('#tag_prompt_toggler').text() == &amp;quot;hide tags&amp;quot;)&lt;br /&gt;
        $('#tag_prompt_toggler').text(&amp;quot;show tags&amp;quot;)&lt;br /&gt;
      else&lt;br /&gt;
        $('#tag_prompt_toggler').text(&amp;quot;hide tags&amp;quot;)&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Instructor End===&lt;br /&gt;
&lt;br /&gt;
* Create new method view2 for response_controller&lt;br /&gt;
&lt;br /&gt;
''' app/controllers/response_controller.rb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def view2&lt;br /&gt;
    @response = Response.find(params[:id])&lt;br /&gt;
    @map = @response.map&lt;br /&gt;
    set_content2&lt;br /&gt;
    render &amp;quot;response/view&amp;quot;&lt;br /&gt;
  end &lt;br /&gt;
......&lt;br /&gt;
def set_content2(new_response = false)&lt;br /&gt;
    @contributor = @map.contributor&lt;br /&gt;
    members = TeamsUser.where(team_id: params[:team])&lt;br /&gt;
    @user = members.first&lt;br /&gt;
    @participant = AssignmentParticipant.where(user_id: @user.user_id, parent_id: params[:assignment]).first&lt;br /&gt;
    @assignment = @participant.assignment&lt;br /&gt;
    questionnaires = @assignment.questionnaires&lt;br /&gt;
    @questions = retrieve_questions questionnaires, @assignment.id&lt;br /&gt;
    # @pscore has the newest versions of response for each response map, and only one for each response map (unless it is vary rubric by round)&lt;br /&gt;
    @pscore = @participant.scores(@questions)&lt;br /&gt;
    @reviewer = @map.reviewer&lt;br /&gt;
    @round = params[:round]&lt;br /&gt;
  end  &lt;br /&gt;
  def retrieve_questions(questionnaires, assignment_id)&lt;br /&gt;
    questions = {}&lt;br /&gt;
    questionnaires.each do |questionnaire|&lt;br /&gt;
      round = AssignmentQuestionnaire.where(assignment_id: assignment_id, questionnaire_id: questionnaire.id).first.used_in_round&lt;br /&gt;
      questionnaire_symbol = if !round.nil?&lt;br /&gt;
                               (questionnaire.symbol.to_s + round.to_s).to_sym&lt;br /&gt;
                             else&lt;br /&gt;
                               questionnaire.symbol&lt;br /&gt;
                             end&lt;br /&gt;
      questions[questionnaire_symbol] = questionnaire.questions&lt;br /&gt;
    end&lt;br /&gt;
    questions&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* change the url jumping to after clicking to a certain reviewer.&lt;br /&gt;
''' app/views/grades/_view_heatgrid.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;th class=&amp;quot;sorter-false&amp;quot;&amp;gt; &amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;../response/view2?id=&amp;lt;%= review.id.to_s %&amp;gt;&amp;amp;&amp;amp;team=&amp;lt;%= @team.id %&amp;gt;&amp;amp;&amp;amp;round=&amp;lt;%= vm.round.to_s %&amp;gt;&amp;amp;&amp;amp;assignment=&amp;lt;%= @assignment.id %&amp;gt;&amp;quot;  data-toggle=&amp;quot;tooltip&amp;quot; data-placement=&amp;quot;right&amp;quot; title=&amp;quot;Click to see details&amp;quot;&amp;gt;&amp;lt;%= user_name.to_s %&amp;gt;&amp;lt;/a&amp;gt;  &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* render grades/tabbed_reviews for review details at instructor end&lt;br /&gt;
''' app/views/response/view.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view2&amp;quot; %&amp;gt;&lt;br /&gt;
    &amp;lt;% file_url = nil %&amp;gt;&lt;br /&gt;
    &amp;lt;%= @response.display_as_html(nil, nil, file_url) %&amp;gt;&lt;br /&gt;
    &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;% else %&amp;gt;&lt;br /&gt;
    &amp;lt;TR style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; @participant, :rscore =&amp;gt; @pscore[:review], :reviewer =&amp;gt; @reviewer, :round =&amp;gt; @round} %&amp;gt;&lt;br /&gt;
        &amp;lt;/TD&amp;gt;&lt;br /&gt;
    &amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* show right round according to which round user click at instructor-end&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% rounds.each do |round| %&amp;gt;&lt;br /&gt;
        &amp;lt;% if controller.action_name == &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
        &amp;lt;% next if round.to_s != @round.to_s %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
......&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Create construct_instructor2_html in respond model in order to not show review number&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     &amp;lt;% prefix = &amp;quot;instructor&amp;quot; if controller.action_name == &amp;quot;view2&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' app/models/response.rb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if prefix == &amp;quot;instructor&amp;quot;&lt;br /&gt;
      self_id = self.id.to_s&lt;br /&gt;
      code = construct_instructor2_html identifier, self_id, count&lt;br /&gt;
......&lt;br /&gt;
def construct_instructor2_html identifier, self_id, count&lt;br /&gt;
    identifier += '&amp;lt;table width=&amp;quot;100%&amp;quot;&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;tr&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;td align=&amp;quot;left&amp;quot; width=&amp;quot;70%&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Review ' + '&amp;lt;/b&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'\&lt;br /&gt;
						 '&amp;lt;a href=&amp;quot;#&amp;quot; name= &amp;quot;review_' + self_id + 'Link&amp;quot; onClick=&amp;quot;toggleElement(' + &amp;quot;'review_&amp;quot; + self_id + &amp;quot;','review'&amp;quot; + ');return false;&amp;quot;&amp;gt;hide review&amp;lt;/a&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;/td&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Last Reviewed:&amp;lt;/b&amp;gt;'\&lt;br /&gt;
						 &amp;quot;&amp;lt;span&amp;gt;#{(self.updated_at.nil? ? 'Not available' : self.updated_at.strftime('%A %B %d %Y, %I:%M%p'))}&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;\&lt;br /&gt;
						 '&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;'&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Show just one review in instructor-end&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% rscore[:assessments].select{|response| response.round == round}.reverse.uniq{|response| response.map_id}.sort_by{|response| response.map_id}.each_with_index do |review, index| %&amp;gt;&lt;br /&gt;
     &amp;lt;% if controller.action_name == &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
          &amp;lt;% next if review.reviewer != @reviewer || count &amp;gt; 0 %&amp;gt;&lt;br /&gt;
     &amp;lt;% end %&amp;gt;&lt;br /&gt;
......&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:instructorend.png ]] &lt;br /&gt;
&lt;br /&gt;
=='''Test files'''==&lt;br /&gt;
&lt;br /&gt;
*tabbed_review_spec.rb created and added 3 test cases for alternate view of reviews&lt;br /&gt;
'''spec/features/tabbed_review_spec.rb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require &amp;quot;spec_helper&amp;quot;&lt;br /&gt;
require 'rspec'&lt;br /&gt;
describe &amp;quot;alternate view of reviews&amp;quot; do&lt;br /&gt;
    before(:each) do&lt;br /&gt;
      assignment1 = create(:assignment, name: &amp;quot;111&amp;quot;, directory_path: 'test_assignment')&lt;br /&gt;
      create_list(:participant, 3)&lt;br /&gt;
      create(:assignment_node)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;submission&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;review&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;metareview&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;drop_topic&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;signup&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;team_formation&amp;quot;)&lt;br /&gt;
      create(:deadline_right)&lt;br /&gt;
      create(:deadline_right, name: 'Late')&lt;br /&gt;
      create(:deadline_right, name: 'OK')&lt;br /&gt;
      create(:assignment_due_date, deadline_type: DeadlineType.where(name: 'review').first, due_at: Time.now.in_time_zone + 1.day)&lt;br /&gt;
      create(:topic)&lt;br /&gt;
      create(:topic, topic_name: &amp;quot;TestReview&amp;quot;)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).first)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).second)&lt;br /&gt;
      create(:assignment_team)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).third, team: AssignmentTeam.second)&lt;br /&gt;
      create(:signed_up_team)&lt;br /&gt;
      create(:signed_up_team, team_id: 2, topic: SignUpTopic.second)&lt;br /&gt;
      create(:assignment_questionnaire)&lt;br /&gt;
      create(:question)&lt;br /&gt;
      # create(:review_response_map, reviewer_id: User.where(role_id: 2).third.id)&lt;br /&gt;
      # create(:review_response_map, reviewer_id: User.where(role_id: 2).second.id, reviewee: AssignmentTeam.second)&lt;br /&gt;
      # sleep(10000)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
  def load_alternate&lt;br /&gt;
    login_as('student2064')&lt;br /&gt;
    expect(page).to have_content &amp;quot;User: student2064&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;111&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    click_link &amp;quot;111&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Submit or Review work for 111&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Alternate View&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    click_link &amp;quot;Alternate View&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Contributor&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  it &amp;quot;shows the correct alternate view&amp;quot; do&lt;br /&gt;
    # Load questionnaire with generic setup&lt;br /&gt;
    load_alternate&lt;br /&gt;
    expect(page).to have_content &amp;quot;Contributor&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Stats&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Submitted work&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Author Feedback&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Teammate Review&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Final Score&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Range&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Average&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;student2064&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'hide stats' &lt;br /&gt;
    expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'show submission' &lt;br /&gt;
    #expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'show reviews' &lt;br /&gt;
    #page.should have_selector('table tr', text: 'show reviews')&lt;br /&gt;
    #find(:xpath, &amp;quot;//tr[contains(.,'show reviews')]/td/a&amp;quot;, :text =&amp;gt; 'show reviews').click&lt;br /&gt;
    #expect(page).to have_content &amp;quot;Writeup&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
      #describe &amp;quot;grades/participant&amp;quot;, :type =&amp;gt; :view do&lt;br /&gt;
        #it 'exists' do&lt;br /&gt;
          #find(:xpath, &amp;quot;//tr[contains(.,'show reviews')]/td/a&amp;quot;, :text =&amp;gt; 'show reviews').click&lt;br /&gt;
        #end&lt;br /&gt;
      #end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
describe &amp;quot;test for instructor&amp;quot; do&lt;br /&gt;
  before(:each) do&lt;br /&gt;
    # assignment and topic&lt;br /&gt;
    create(:assignment,&lt;br /&gt;
           name: &amp;quot;Test Assignment&amp;quot;,&lt;br /&gt;
           directory_path: &amp;quot;Test Assignment&amp;quot;,&lt;br /&gt;
           rounds_of_reviews: 2,&lt;br /&gt;
           staggered_deadline: true,&lt;br /&gt;
           max_team_size: 1,&lt;br /&gt;
           allow_selecting_additional_reviews_after_1st_round: true)&lt;br /&gt;
    create_list(:participant, 3)&lt;br /&gt;
    create(:topic, topic_name: &amp;quot;Topic_1&amp;quot;)&lt;br /&gt;
    create(:topic, topic_name: &amp;quot;Topic_2&amp;quot;)&lt;br /&gt;
    create(:topic, topic_name: &amp;quot;Topic_3&amp;quot;)&lt;br /&gt;
    assignment_id = Assignment.where(name: 'Test Assignment')[0].id&lt;br /&gt;
&lt;br /&gt;
    #visit &amp;quot;/response/view2?id=#{review_id}&amp;amp;&amp;amp;team=#{team_id}&amp;amp;&amp;amp;round=1&amp;amp;&amp;amp;assignment=#{assignment_id}&amp;quot;&lt;br /&gt;
    # rubric&lt;br /&gt;
    create(:questionnaire, name: &amp;quot;TestQuestionnaire1&amp;quot;)&lt;br /&gt;
    create(:questionnaire, name: &amp;quot;TestQuestionnaire2&amp;quot;)&lt;br /&gt;
    create(:question, txt: &amp;quot;Question1&amp;quot;, questionnaire: ReviewQuestionnaire.where(name: 'TestQuestionnaire1').first, type: &amp;quot;Criterion&amp;quot;)&lt;br /&gt;
    create(:question, txt: &amp;quot;Question2&amp;quot;, questionnaire: ReviewQuestionnaire.where(name: 'TestQuestionnaire2').first, type: &amp;quot;Criterion&amp;quot;)&lt;br /&gt;
    create(:assignment_questionnaire, questionnaire: ReviewQuestionnaire.where(name: 'TestQuestionnaire1').first, used_in_round: 1)&lt;br /&gt;
    create(:assignment_questionnaire, questionnaire: ReviewQuestionnaire.where(name: 'TestQuestionnaire2').first, used_in_round: 2)&lt;br /&gt;
    questionnaire_id = ReviewQuestionnaire.first.id.to_s&lt;br /&gt;
&lt;br /&gt;
    # deadline type&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;submission&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;review&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;metareview&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;drop_topic&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;signup&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;team_formation&amp;quot;)&lt;br /&gt;
    create(:deadline_right)&lt;br /&gt;
    create(:deadline_right, name: 'Late')&lt;br /&gt;
    create(:deadline_right, name: 'OK')&lt;br /&gt;
&lt;br /&gt;
    create(:team_user, user: User.where(role_id: 2).first)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).second)&lt;br /&gt;
      create(:assignment_team)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).third, team: AssignmentTeam.second)&lt;br /&gt;
      create(:signed_up_team)&lt;br /&gt;
      create(:signed_up_team, team_id: 2, topic: SignUpTopic.second)&lt;br /&gt;
    visit &amp;quot;response/view2?id=#{questionnaire_id}&amp;amp;&amp;amp;team=1&amp;amp;&amp;amp;round=1&amp;amp;&amp;amp;assignment=#{assignment_id}&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  it &amp;quot;can go to review details&amp;quot; do&lt;br /&gt;
    expect(page).to have_content &amp;quot;Toggle navigation&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Papers on Expertiza&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;response&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
#[https://github.com/aranne/expertiza Forked Issue on Github]&lt;br /&gt;
#Weiran Fu (wfu4@ncsu.edu)&lt;br /&gt;
#Qingyan Wang (qwang20@ncsu.edu)&lt;br /&gt;
#Hongli Wang (hwang85@ncsu.edu)&lt;br /&gt;
#'''Mentor:''' Mohit Jain (mjain6@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza on GitHub]&lt;br /&gt;
#[http://expertiza.ncsu.edu/ The live Expertiza website] &lt;br /&gt;
#[http://wikis.lib.ncsu.edu/index.php/Expertiza Expertiza project documentation wiki]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Hwang85</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1966._Tabbed_reviews_partial_file_refactor_for_displaying_the_alternate_view_of_reviews&amp;diff=126473</id>
		<title>CSC/ECE 517 Fall 2019 - E1966. Tabbed reviews partial file refactor for displaying the alternate view of reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1966._Tabbed_reviews_partial_file_refactor_for_displaying_the_alternate_view_of_reviews&amp;diff=126473"/>
		<updated>2019-10-29T03:21:56Z</updated>

		<summary type="html">&lt;p&gt;Hwang85: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''About Expertiza''' ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a open source project currently for CSC517 instructor and students forming groups, submit work, review, and view grades. The project is based on Ruby on Rails framework and the code is on Github: https://github.com/expertiza/expertiza. Expertiza serves wiki page, collecting information of all internal information and updates of all versions.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
===Issue details===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) On student end, Expertiza uses grades/_reviews.html.erb partial file to display reviewers, scores and review details; on instructor end, it uses Response model methods to construct html file for review pages. We need to use the same kinds of partials in instructor-end and student-end.&lt;br /&gt;
&lt;br /&gt;
How to get the view of reviewers, scores and review details on student end? Click &amp;quot;Alternate View&amp;quot; button, and click &amp;quot;show reviews&amp;quot; link. The reviewers and scores pop up on the top and review details are below them.&lt;br /&gt;
How to get the view of reviewers, scores and review details on instructor end? Click &amp;quot;Scores&amp;quot; for a certain assignment and choose a team. Click &amp;quot;Statistics&amp;quot; tab and then reviewers and scores table show up. Click &amp;quot;Reviews&amp;quot; tab and then click one of students' name link in the table head. And a new page pops up with review details.&lt;br /&gt;
&lt;br /&gt;
2) Give Feedback link at view_my_score at student-end should not appear at folded view.&lt;br /&gt;
Where to find Give Feedback link? On student end, click &amp;quot;Alternate View&amp;quot; button and click &amp;quot;show reviews&amp;quot; link. At the bottom of a certain review, a give feedback link shows up.&lt;br /&gt;
&lt;br /&gt;
===What to do===&lt;br /&gt;
1) We need to use the same kinds of partials in instructor-end and student-end. So we decide to use  grades/_team_statistics.html.erb to display reviewers and scores and to use grades/_tabbed_reviews.html.erb to display review details for both student-end and instructor-end.&lt;br /&gt;
&lt;br /&gt;
2) Give Feedback link at view_my_score should appear at the bottom of expanded view.&lt;br /&gt;
&lt;br /&gt;
== '''Solution''' ==&lt;br /&gt;
For student end, split reviews.html.erb into two partial files. One is grades/team_review_statistics.html.erb for reviewers and scores. The other one is grades/tabbed_reviews.html.erb for review details.&lt;br /&gt;
For instructor end, it used to use response model methods to construct html files for review details, now we use grades/tabbed_reviews.html.erb to display review details.&lt;br /&gt;
So student end and instructor end both use grades/team_review_statistics and grades/tabbed_reviews to display reviewers, scores and review details.&lt;br /&gt;
===Deploy Link===&lt;br /&gt;
[http://152.7.98.106:8080  Our project is deployed at VCL ]&lt;br /&gt;
===Student End===&lt;br /&gt;
&lt;br /&gt;
* In student end, render grades/team_review_statistics and grades/tabbed_reviews two partial files instead of grades/reviews partial file.&lt;br /&gt;
'''app/views/grades/_participant.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;TR id=&amp;quot;&amp;lt;%= prefix %&amp;gt;_reviews&amp;quot; style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/team_review_statistics', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :pscore =&amp;gt; pscore} %&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&lt;br /&gt;
    &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Add statistics view to student end by using the team_review_statistics.html.erb file.&lt;br /&gt;
'''app/views/grades/_participant.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;TR id=&amp;quot;&amp;lt;%= prefix %&amp;gt;_reviews&amp;quot; style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/team_review_statistics', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :pscore =&amp;gt; pscore} %&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&lt;br /&gt;
    &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_team_review_statistics.html.erb''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td colspan=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;    &lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:student-table.png ]]&lt;br /&gt;
&lt;br /&gt;
[[File:Student-detail.png]]&lt;br /&gt;
&lt;br /&gt;
* Add feed back link in student end view.&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;% if controller.action_name == &amp;quot;view_my_scores&amp;quot;%&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Generate the feedback html --&amp;gt;&lt;br /&gt;
                    &amp;lt;% map = FeedbackResponseMap.where(reviewed_object_id: review.id, reviewer_id: participant.id).first&lt;br /&gt;
                        review_feedbacks = map.try :response %&amp;gt;&lt;br /&gt;
                    &amp;lt;% if review_feedbacks &amp;amp;&amp;amp; !review_feedbacks.empty? %&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_feedbacks.first.id %&amp;gt; or&lt;br /&gt;
                        &amp;lt;%= link_to &amp;quot;Edit&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'edit', :id =&amp;gt; review_feedbacks.first.id, :return =&amp;gt; &amp;quot;feedback&amp;quot; %&amp;gt; feedback for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                    &amp;lt;% else %&amp;gt;&lt;br /&gt;
                        &amp;lt;%= link_to &amp;quot;Give feedback&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'new_feedback', :id =&amp;gt; review.id %&amp;gt; for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                    &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Student-feedback.png]]&lt;br /&gt;
&lt;br /&gt;
* Add javascript to tabbed review so it can be hidden or shown by clicking the show/hide reviews.&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  toggle_tag_prompt = function() {&lt;br /&gt;
    $('.tag_prompt_container').toggle();&lt;br /&gt;
  };&lt;br /&gt;
  $( document ).ready(function() {&lt;br /&gt;
    $('#tag_prompt_toggler').click(function () {&lt;br /&gt;
      if ($('#tag_prompt_toggler').text() == &amp;quot;hide tags&amp;quot;)&lt;br /&gt;
        $('#tag_prompt_toggler').text(&amp;quot;show tags&amp;quot;)&lt;br /&gt;
      else&lt;br /&gt;
        $('#tag_prompt_toggler').text(&amp;quot;hide tags&amp;quot;)&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Instructor End===&lt;br /&gt;
&lt;br /&gt;
* Create new method view2 for response_controller&lt;br /&gt;
&lt;br /&gt;
''' app/controllers/response_controller.rb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def view2&lt;br /&gt;
    @response = Response.find(params[:id])&lt;br /&gt;
    @map = @response.map&lt;br /&gt;
    set_content2&lt;br /&gt;
    render &amp;quot;response/view&amp;quot;&lt;br /&gt;
  end &lt;br /&gt;
......&lt;br /&gt;
def set_content2(new_response = false)&lt;br /&gt;
    @contributor = @map.contributor&lt;br /&gt;
    members = TeamsUser.where(team_id: params[:team])&lt;br /&gt;
    @user = members.first&lt;br /&gt;
    @participant = AssignmentParticipant.where(user_id: @user.user_id, parent_id: params[:assignment]).first&lt;br /&gt;
    @assignment = @participant.assignment&lt;br /&gt;
    questionnaires = @assignment.questionnaires&lt;br /&gt;
    @questions = retrieve_questions questionnaires, @assignment.id&lt;br /&gt;
    # @pscore has the newest versions of response for each response map, and only one for each response map (unless it is vary rubric by round)&lt;br /&gt;
    @pscore = @participant.scores(@questions)&lt;br /&gt;
    @reviewer = @map.reviewer&lt;br /&gt;
    @round = params[:round]&lt;br /&gt;
  end  &lt;br /&gt;
  def retrieve_questions(questionnaires, assignment_id)&lt;br /&gt;
    questions = {}&lt;br /&gt;
    questionnaires.each do |questionnaire|&lt;br /&gt;
      round = AssignmentQuestionnaire.where(assignment_id: assignment_id, questionnaire_id: questionnaire.id).first.used_in_round&lt;br /&gt;
      questionnaire_symbol = if !round.nil?&lt;br /&gt;
                               (questionnaire.symbol.to_s + round.to_s).to_sym&lt;br /&gt;
                             else&lt;br /&gt;
                               questionnaire.symbol&lt;br /&gt;
                             end&lt;br /&gt;
      questions[questionnaire_symbol] = questionnaire.questions&lt;br /&gt;
    end&lt;br /&gt;
    questions&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* change the url jumping to after clicking to a certain reviewer.&lt;br /&gt;
''' app/views/grades/_view_heatgrid.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;th class=&amp;quot;sorter-false&amp;quot;&amp;gt; &amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;../response/view2?id=&amp;lt;%= review.id.to_s %&amp;gt;&amp;amp;&amp;amp;team=&amp;lt;%= @team.id %&amp;gt;&amp;amp;&amp;amp;round=&amp;lt;%= vm.round.to_s %&amp;gt;&amp;amp;&amp;amp;assignment=&amp;lt;%= @assignment.id %&amp;gt;&amp;quot;  data-toggle=&amp;quot;tooltip&amp;quot; data-placement=&amp;quot;right&amp;quot; title=&amp;quot;Click to see details&amp;quot;&amp;gt;&amp;lt;%= user_name.to_s %&amp;gt;&amp;lt;/a&amp;gt;  &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* render grades/tabbed_reviews for review details at instructor end&lt;br /&gt;
''' app/views/response/view.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view2&amp;quot; %&amp;gt;&lt;br /&gt;
    &amp;lt;% file_url = nil %&amp;gt;&lt;br /&gt;
    &amp;lt;%= @response.display_as_html(nil, nil, file_url) %&amp;gt;&lt;br /&gt;
    &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;% else %&amp;gt;&lt;br /&gt;
    &amp;lt;TR style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; @participant, :rscore =&amp;gt; @pscore[:review], :reviewer =&amp;gt; @reviewer, :round =&amp;gt; @round} %&amp;gt;&lt;br /&gt;
        &amp;lt;/TD&amp;gt;&lt;br /&gt;
    &amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* show right round according to which round user click at instructor-end&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% rounds.each do |round| %&amp;gt;&lt;br /&gt;
        &amp;lt;% if controller.action_name == &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
        &amp;lt;% next if round.to_s != @round.to_s %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
......&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Create construct_instructor2_html in respond model in order to not show review number&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     &amp;lt;% prefix = &amp;quot;instructor&amp;quot; if controller.action_name == &amp;quot;view2&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' app/models/response.rb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if prefix == &amp;quot;instructor&amp;quot;&lt;br /&gt;
      self_id = self.id.to_s&lt;br /&gt;
      code = construct_instructor2_html identifier, self_id, count&lt;br /&gt;
......&lt;br /&gt;
def construct_instructor2_html identifier, self_id, count&lt;br /&gt;
    identifier += '&amp;lt;table width=&amp;quot;100%&amp;quot;&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;tr&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;td align=&amp;quot;left&amp;quot; width=&amp;quot;70%&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Review ' + '&amp;lt;/b&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'\&lt;br /&gt;
						 '&amp;lt;a href=&amp;quot;#&amp;quot; name= &amp;quot;review_' + self_id + 'Link&amp;quot; onClick=&amp;quot;toggleElement(' + &amp;quot;'review_&amp;quot; + self_id + &amp;quot;','review'&amp;quot; + ');return false;&amp;quot;&amp;gt;hide review&amp;lt;/a&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;/td&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Last Reviewed:&amp;lt;/b&amp;gt;'\&lt;br /&gt;
						 &amp;quot;&amp;lt;span&amp;gt;#{(self.updated_at.nil? ? 'Not available' : self.updated_at.strftime('%A %B %d %Y, %I:%M%p'))}&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;\&lt;br /&gt;
						 '&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;'&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Show just one review in instructor-end&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% rscore[:assessments].select{|response| response.round == round}.reverse.uniq{|response| response.map_id}.sort_by{|response| response.map_id}.each_with_index do |review, index| %&amp;gt;&lt;br /&gt;
     &amp;lt;% if controller.action_name == &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
          &amp;lt;% next if review.reviewer != @reviewer || count &amp;gt; 0 %&amp;gt;&lt;br /&gt;
     &amp;lt;% end %&amp;gt;&lt;br /&gt;
......&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:instructorend.png ]] &lt;br /&gt;
&lt;br /&gt;
=='''Test files'''==&lt;br /&gt;
&lt;br /&gt;
*tabbed_review_spec.rb created and added 3 test cases for alternate view of reviews&lt;br /&gt;
'''spec/features/tabbed_review_spec.rb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require &amp;quot;spec_helper&amp;quot;&lt;br /&gt;
require 'rspec'&lt;br /&gt;
describe &amp;quot;alternate view of reviews&amp;quot; do&lt;br /&gt;
    before(:each) do&lt;br /&gt;
      assignment1 = create(:assignment, name: &amp;quot;111&amp;quot;, directory_path: 'test_assignment')&lt;br /&gt;
      create_list(:participant, 3)&lt;br /&gt;
      create(:assignment_node)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;submission&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;review&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;metareview&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;drop_topic&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;signup&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;team_formation&amp;quot;)&lt;br /&gt;
      create(:deadline_right)&lt;br /&gt;
      create(:deadline_right, name: 'Late')&lt;br /&gt;
      create(:deadline_right, name: 'OK')&lt;br /&gt;
      create(:assignment_due_date, deadline_type: DeadlineType.where(name: 'review').first, due_at: Time.now.in_time_zone + 1.day)&lt;br /&gt;
      create(:topic)&lt;br /&gt;
      create(:topic, topic_name: &amp;quot;TestReview&amp;quot;)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).first)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).second)&lt;br /&gt;
      create(:assignment_team)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).third, team: AssignmentTeam.second)&lt;br /&gt;
      create(:signed_up_team)&lt;br /&gt;
      create(:signed_up_team, team_id: 2, topic: SignUpTopic.second)&lt;br /&gt;
      create(:assignment_questionnaire)&lt;br /&gt;
      create(:question)&lt;br /&gt;
      # create(:review_response_map, reviewer_id: User.where(role_id: 2).third.id)&lt;br /&gt;
      # create(:review_response_map, reviewer_id: User.where(role_id: 2).second.id, reviewee: AssignmentTeam.second)&lt;br /&gt;
      # sleep(10000)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
  def load_alternate&lt;br /&gt;
    login_as('student2064')&lt;br /&gt;
    expect(page).to have_content &amp;quot;User: student2064&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;111&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    click_link &amp;quot;111&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Submit or Review work for 111&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Alternate View&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    click_link &amp;quot;Alternate View&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Contributor&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  it &amp;quot;shows the correct alternate view&amp;quot; do&lt;br /&gt;
    # Load questionnaire with generic setup&lt;br /&gt;
    load_alternate&lt;br /&gt;
    expect(page).to have_content &amp;quot;Contributor&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Stats&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Submitted work&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Author Feedback&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Teammate Review&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Final Score&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Range&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Average&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;student2064&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'hide stats' &lt;br /&gt;
    expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'show submission' &lt;br /&gt;
    #expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'show reviews' &lt;br /&gt;
    #page.should have_selector('table tr', text: 'show reviews')&lt;br /&gt;
    #find(:xpath, &amp;quot;//tr[contains(.,'show reviews')]/td/a&amp;quot;, :text =&amp;gt; 'show reviews').click&lt;br /&gt;
    #expect(page).to have_content &amp;quot;Writeup&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
      #describe &amp;quot;grades/participant&amp;quot;, :type =&amp;gt; :view do&lt;br /&gt;
        #it 'exists' do&lt;br /&gt;
          #find(:xpath, &amp;quot;//tr[contains(.,'show reviews')]/td/a&amp;quot;, :text =&amp;gt; 'show reviews').click&lt;br /&gt;
        #end&lt;br /&gt;
      #end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
describe &amp;quot;test for instructor&amp;quot; do&lt;br /&gt;
  before(:each) do&lt;br /&gt;
    # assignment and topic&lt;br /&gt;
    create(:assignment,&lt;br /&gt;
           name: &amp;quot;Test Assignment&amp;quot;,&lt;br /&gt;
           directory_path: &amp;quot;Test Assignment&amp;quot;,&lt;br /&gt;
           rounds_of_reviews: 2,&lt;br /&gt;
           staggered_deadline: true,&lt;br /&gt;
           max_team_size: 1,&lt;br /&gt;
           allow_selecting_additional_reviews_after_1st_round: true)&lt;br /&gt;
    create_list(:participant, 3)&lt;br /&gt;
    create(:topic, topic_name: &amp;quot;Topic_1&amp;quot;)&lt;br /&gt;
    create(:topic, topic_name: &amp;quot;Topic_2&amp;quot;)&lt;br /&gt;
    create(:topic, topic_name: &amp;quot;Topic_3&amp;quot;)&lt;br /&gt;
    assignment_id = Assignment.where(name: 'Test Assignment')[0].id&lt;br /&gt;
&lt;br /&gt;
    #visit &amp;quot;/response/view2?id=#{review_id}&amp;amp;&amp;amp;team=#{team_id}&amp;amp;&amp;amp;round=1&amp;amp;&amp;amp;assignment=#{assignment_id}&amp;quot;&lt;br /&gt;
    # rubric&lt;br /&gt;
    create(:questionnaire, name: &amp;quot;TestQuestionnaire1&amp;quot;)&lt;br /&gt;
    create(:questionnaire, name: &amp;quot;TestQuestionnaire2&amp;quot;)&lt;br /&gt;
    create(:question, txt: &amp;quot;Question1&amp;quot;, questionnaire: ReviewQuestionnaire.where(name: 'TestQuestionnaire1').first, type: &amp;quot;Criterion&amp;quot;)&lt;br /&gt;
    create(:question, txt: &amp;quot;Question2&amp;quot;, questionnaire: ReviewQuestionnaire.where(name: 'TestQuestionnaire2').first, type: &amp;quot;Criterion&amp;quot;)&lt;br /&gt;
    create(:assignment_questionnaire, questionnaire: ReviewQuestionnaire.where(name: 'TestQuestionnaire1').first, used_in_round: 1)&lt;br /&gt;
    create(:assignment_questionnaire, questionnaire: ReviewQuestionnaire.where(name: 'TestQuestionnaire2').first, used_in_round: 2)&lt;br /&gt;
    questionnaire_id = ReviewQuestionnaire.first.id.to_s&lt;br /&gt;
&lt;br /&gt;
    # deadline type&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;submission&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;review&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;metareview&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;drop_topic&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;signup&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;team_formation&amp;quot;)&lt;br /&gt;
    create(:deadline_right)&lt;br /&gt;
    create(:deadline_right, name: 'Late')&lt;br /&gt;
    create(:deadline_right, name: 'OK')&lt;br /&gt;
&lt;br /&gt;
    create(:team_user, user: User.where(role_id: 2).first)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).second)&lt;br /&gt;
      create(:assignment_team)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).third, team: AssignmentTeam.second)&lt;br /&gt;
      create(:signed_up_team)&lt;br /&gt;
      create(:signed_up_team, team_id: 2, topic: SignUpTopic.second)&lt;br /&gt;
    visit &amp;quot;response/view2?id=#{questionnaire_id}&amp;amp;&amp;amp;team=1&amp;amp;&amp;amp;round=1&amp;amp;&amp;amp;assignment=#{assignment_id}&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  it &amp;quot;can go to review details&amp;quot; do&lt;br /&gt;
    expect(page).to have_content &amp;quot;Toggle navigation&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Papers on Expertiza&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;response&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
#[https://github.com/aranne/expertiza Forked Issue on Github]&lt;br /&gt;
#Weiran Fu (@ncsu.edu)&lt;br /&gt;
#Qingyan Wang (qwang20@ncsu.edu)&lt;br /&gt;
#Hongli Wang (hwang85@ncsu.edu)&lt;br /&gt;
#'''Mentor:''' Mohit Jain (mjain6@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza on GitHub]&lt;br /&gt;
#[http://expertiza.ncsu.edu/ The live Expertiza website] &lt;br /&gt;
#[http://wikis.lib.ncsu.edu/index.php/Expertiza Expertiza project documentation wiki]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Hwang85</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1966._Tabbed_reviews_partial_file_refactor_for_displaying_the_alternate_view_of_reviews&amp;diff=126468</id>
		<title>CSC/ECE 517 Fall 2019 - E1966. Tabbed reviews partial file refactor for displaying the alternate view of reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1966._Tabbed_reviews_partial_file_refactor_for_displaying_the_alternate_view_of_reviews&amp;diff=126468"/>
		<updated>2019-10-29T03:20:48Z</updated>

		<summary type="html">&lt;p&gt;Hwang85: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''About Expertiza''' ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a open source project currently for CSC517 instructor and students forming groups, submit work, review, and view grades. The project is based on Ruby on Rails framework and the code is on Github: https://github.com/expertiza/expertiza. Expertiza serves wiki page, collecting information of all internal information and updates of all versions.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
===Issue details===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) On student end, Expertiza uses grades/_reviews.html.erb partial file to display reviewers, scores and review details; on instructor end, it uses Response model methods to construct html file for review pages. We need to use the same kinds of partials in instructor-end and student-end.&lt;br /&gt;
&lt;br /&gt;
How to get the view of reviewers, scores and review details on student end? Click &amp;quot;Alternate View&amp;quot; button, and click &amp;quot;show reviews&amp;quot; link. The reviewers and scores pop up on the top and review details are below them.&lt;br /&gt;
How to get the view of reviewers, scores and review details on instructor end? Click &amp;quot;Scores&amp;quot; for a certain assignment and choose a team. Click &amp;quot;Statistics&amp;quot; tab and then reviewers and scores table show up. Click &amp;quot;Reviews&amp;quot; tab and then click one of students' name link in the table head. And a new page pops up with review details.&lt;br /&gt;
&lt;br /&gt;
2) Give Feedback link at view_my_score at student-end should not appear at folded view.&lt;br /&gt;
Where to find Give Feedback link? On student end, click &amp;quot;Alternate View&amp;quot; button and click &amp;quot;show reviews&amp;quot; link. At the bottom of a certain review, a give feedback link shows up.&lt;br /&gt;
&lt;br /&gt;
===What to do===&lt;br /&gt;
1) We need to use the same kinds of partials in instructor-end and student-end. So we decide to use  grades/_team_statistics.html.erb to display reviewers and scores and to use grades/_tabbed_reviews.html.erb to display review details for both student-end and instructor-end.&lt;br /&gt;
&lt;br /&gt;
2) Give Feedback link at view_my_score should appear at the bottom of expanded view.&lt;br /&gt;
&lt;br /&gt;
== '''Solution''' ==&lt;br /&gt;
For student end, split reviews.html.erb into two partial files. One is grades/team_review_statistics.html.erb for reviewers and scores. The other one is grades/tabbed_reviews.html.erb for review details.&lt;br /&gt;
For instructor end, it used to use response model methods to construct html files for review details, now we use grades/tabbed_reviews.html.erb to display review details.&lt;br /&gt;
So student end and instructor end both use grades/team_review_statistics and grades/tabbed_reviews to display reviewers, scores and review details.&lt;br /&gt;
===Deploy Link===&lt;br /&gt;
[http://152.46.19.149:8080 Our project is deployed at VCL ]&lt;br /&gt;
===Student End===&lt;br /&gt;
&lt;br /&gt;
* In student end, render grades/team_review_statistics and grades/tabbed_reviews two partial files instead of grades/reviews partial file.&lt;br /&gt;
'''app/views/grades/_participant.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;TR id=&amp;quot;&amp;lt;%= prefix %&amp;gt;_reviews&amp;quot; style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/team_review_statistics', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :pscore =&amp;gt; pscore} %&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&lt;br /&gt;
    &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Add statistics view to student end by using the team_review_statistics.html.erb file.&lt;br /&gt;
'''app/views/grades/_participant.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;TR id=&amp;quot;&amp;lt;%= prefix %&amp;gt;_reviews&amp;quot; style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/team_review_statistics', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :pscore =&amp;gt; pscore} %&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&lt;br /&gt;
    &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_team_review_statistics.html.erb''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td colspan=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;    &lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:student-table.png ]]&lt;br /&gt;
&lt;br /&gt;
[[File:Student-detail.png]]&lt;br /&gt;
&lt;br /&gt;
* Add feed back link in student end view.&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;% if controller.action_name == &amp;quot;view_my_scores&amp;quot;%&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Generate the feedback html --&amp;gt;&lt;br /&gt;
                    &amp;lt;% map = FeedbackResponseMap.where(reviewed_object_id: review.id, reviewer_id: participant.id).first&lt;br /&gt;
                        review_feedbacks = map.try :response %&amp;gt;&lt;br /&gt;
                    &amp;lt;% if review_feedbacks &amp;amp;&amp;amp; !review_feedbacks.empty? %&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_feedbacks.first.id %&amp;gt; or&lt;br /&gt;
                        &amp;lt;%= link_to &amp;quot;Edit&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'edit', :id =&amp;gt; review_feedbacks.first.id, :return =&amp;gt; &amp;quot;feedback&amp;quot; %&amp;gt; feedback for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                    &amp;lt;% else %&amp;gt;&lt;br /&gt;
                        &amp;lt;%= link_to &amp;quot;Give feedback&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'new_feedback', :id =&amp;gt; review.id %&amp;gt; for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                    &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Student-feedback.png]]&lt;br /&gt;
&lt;br /&gt;
* Add javascript to tabbed review so it can be hidden or shown by clicking the show/hide reviews.&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  toggle_tag_prompt = function() {&lt;br /&gt;
    $('.tag_prompt_container').toggle();&lt;br /&gt;
  };&lt;br /&gt;
  $( document ).ready(function() {&lt;br /&gt;
    $('#tag_prompt_toggler').click(function () {&lt;br /&gt;
      if ($('#tag_prompt_toggler').text() == &amp;quot;hide tags&amp;quot;)&lt;br /&gt;
        $('#tag_prompt_toggler').text(&amp;quot;show tags&amp;quot;)&lt;br /&gt;
      else&lt;br /&gt;
        $('#tag_prompt_toggler').text(&amp;quot;hide tags&amp;quot;)&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Instructor End===&lt;br /&gt;
&lt;br /&gt;
* Create new method view2 for response_controller&lt;br /&gt;
&lt;br /&gt;
''' app/controllers/response_controller.rb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def view2&lt;br /&gt;
    @response = Response.find(params[:id])&lt;br /&gt;
    @map = @response.map&lt;br /&gt;
    set_content2&lt;br /&gt;
    render &amp;quot;response/view&amp;quot;&lt;br /&gt;
  end &lt;br /&gt;
......&lt;br /&gt;
def set_content2(new_response = false)&lt;br /&gt;
    @contributor = @map.contributor&lt;br /&gt;
    members = TeamsUser.where(team_id: params[:team])&lt;br /&gt;
    @user = members.first&lt;br /&gt;
    @participant = AssignmentParticipant.where(user_id: @user.user_id, parent_id: params[:assignment]).first&lt;br /&gt;
    @assignment = @participant.assignment&lt;br /&gt;
    questionnaires = @assignment.questionnaires&lt;br /&gt;
    @questions = retrieve_questions questionnaires, @assignment.id&lt;br /&gt;
    # @pscore has the newest versions of response for each response map, and only one for each response map (unless it is vary rubric by round)&lt;br /&gt;
    @pscore = @participant.scores(@questions)&lt;br /&gt;
    @reviewer = @map.reviewer&lt;br /&gt;
    @round = params[:round]&lt;br /&gt;
  end  &lt;br /&gt;
  def retrieve_questions(questionnaires, assignment_id)&lt;br /&gt;
    questions = {}&lt;br /&gt;
    questionnaires.each do |questionnaire|&lt;br /&gt;
      round = AssignmentQuestionnaire.where(assignment_id: assignment_id, questionnaire_id: questionnaire.id).first.used_in_round&lt;br /&gt;
      questionnaire_symbol = if !round.nil?&lt;br /&gt;
                               (questionnaire.symbol.to_s + round.to_s).to_sym&lt;br /&gt;
                             else&lt;br /&gt;
                               questionnaire.symbol&lt;br /&gt;
                             end&lt;br /&gt;
      questions[questionnaire_symbol] = questionnaire.questions&lt;br /&gt;
    end&lt;br /&gt;
    questions&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* change the url jumping to after clicking to a certain reviewer.&lt;br /&gt;
''' app/views/grades/_view_heatgrid.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;th class=&amp;quot;sorter-false&amp;quot;&amp;gt; &amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;../response/view2?id=&amp;lt;%= review.id.to_s %&amp;gt;&amp;amp;&amp;amp;team=&amp;lt;%= @team.id %&amp;gt;&amp;amp;&amp;amp;round=&amp;lt;%= vm.round.to_s %&amp;gt;&amp;amp;&amp;amp;assignment=&amp;lt;%= @assignment.id %&amp;gt;&amp;quot;  data-toggle=&amp;quot;tooltip&amp;quot; data-placement=&amp;quot;right&amp;quot; title=&amp;quot;Click to see details&amp;quot;&amp;gt;&amp;lt;%= user_name.to_s %&amp;gt;&amp;lt;/a&amp;gt;  &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* render grades/tabbed_reviews for review details at instructor end&lt;br /&gt;
''' app/views/response/view.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view2&amp;quot; %&amp;gt;&lt;br /&gt;
    &amp;lt;% file_url = nil %&amp;gt;&lt;br /&gt;
    &amp;lt;%= @response.display_as_html(nil, nil, file_url) %&amp;gt;&lt;br /&gt;
    &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;% else %&amp;gt;&lt;br /&gt;
    &amp;lt;TR style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; @participant, :rscore =&amp;gt; @pscore[:review], :reviewer =&amp;gt; @reviewer, :round =&amp;gt; @round} %&amp;gt;&lt;br /&gt;
        &amp;lt;/TD&amp;gt;&lt;br /&gt;
    &amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* show right round according to which round user click at instructor-end&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% rounds.each do |round| %&amp;gt;&lt;br /&gt;
        &amp;lt;% if controller.action_name == &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
        &amp;lt;% next if round.to_s != @round.to_s %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
......&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Create construct_instructor2_html in respond model in order to not show review number&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     &amp;lt;% prefix = &amp;quot;instructor&amp;quot; if controller.action_name == &amp;quot;view2&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' app/models/response.rb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if prefix == &amp;quot;instructor&amp;quot;&lt;br /&gt;
      self_id = self.id.to_s&lt;br /&gt;
      code = construct_instructor2_html identifier, self_id, count&lt;br /&gt;
......&lt;br /&gt;
def construct_instructor2_html identifier, self_id, count&lt;br /&gt;
    identifier += '&amp;lt;table width=&amp;quot;100%&amp;quot;&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;tr&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;td align=&amp;quot;left&amp;quot; width=&amp;quot;70%&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Review ' + '&amp;lt;/b&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'\&lt;br /&gt;
						 '&amp;lt;a href=&amp;quot;#&amp;quot; name= &amp;quot;review_' + self_id + 'Link&amp;quot; onClick=&amp;quot;toggleElement(' + &amp;quot;'review_&amp;quot; + self_id + &amp;quot;','review'&amp;quot; + ');return false;&amp;quot;&amp;gt;hide review&amp;lt;/a&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;/td&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Last Reviewed:&amp;lt;/b&amp;gt;'\&lt;br /&gt;
						 &amp;quot;&amp;lt;span&amp;gt;#{(self.updated_at.nil? ? 'Not available' : self.updated_at.strftime('%A %B %d %Y, %I:%M%p'))}&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;\&lt;br /&gt;
						 '&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;'&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Show just one review in instructor-end&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% rscore[:assessments].select{|response| response.round == round}.reverse.uniq{|response| response.map_id}.sort_by{|response| response.map_id}.each_with_index do |review, index| %&amp;gt;&lt;br /&gt;
     &amp;lt;% if controller.action_name == &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
          &amp;lt;% next if review.reviewer != @reviewer || count &amp;gt; 0 %&amp;gt;&lt;br /&gt;
     &amp;lt;% end %&amp;gt;&lt;br /&gt;
......&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:instructorend.png ]] &lt;br /&gt;
&lt;br /&gt;
=='''Test files'''==&lt;br /&gt;
&lt;br /&gt;
*tabbed_review_spec.rb created and added 3 test cases for alternate view of reviews&lt;br /&gt;
'''spec/features/tabbed_review_spec.rb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require &amp;quot;spec_helper&amp;quot;&lt;br /&gt;
require 'rspec'&lt;br /&gt;
describe &amp;quot;alternate view of reviews&amp;quot; do&lt;br /&gt;
    before(:each) do&lt;br /&gt;
      assignment1 = create(:assignment, name: &amp;quot;111&amp;quot;, directory_path: 'test_assignment')&lt;br /&gt;
      create_list(:participant, 3)&lt;br /&gt;
      create(:assignment_node)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;submission&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;review&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;metareview&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;drop_topic&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;signup&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;team_formation&amp;quot;)&lt;br /&gt;
      create(:deadline_right)&lt;br /&gt;
      create(:deadline_right, name: 'Late')&lt;br /&gt;
      create(:deadline_right, name: 'OK')&lt;br /&gt;
      create(:assignment_due_date, deadline_type: DeadlineType.where(name: 'review').first, due_at: Time.now.in_time_zone + 1.day)&lt;br /&gt;
      create(:topic)&lt;br /&gt;
      create(:topic, topic_name: &amp;quot;TestReview&amp;quot;)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).first)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).second)&lt;br /&gt;
      create(:assignment_team)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).third, team: AssignmentTeam.second)&lt;br /&gt;
      create(:signed_up_team)&lt;br /&gt;
      create(:signed_up_team, team_id: 2, topic: SignUpTopic.second)&lt;br /&gt;
      create(:assignment_questionnaire)&lt;br /&gt;
      create(:question)&lt;br /&gt;
      # create(:review_response_map, reviewer_id: User.where(role_id: 2).third.id)&lt;br /&gt;
      # create(:review_response_map, reviewer_id: User.where(role_id: 2).second.id, reviewee: AssignmentTeam.second)&lt;br /&gt;
      # sleep(10000)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
  def load_alternate&lt;br /&gt;
    login_as('student2064')&lt;br /&gt;
    expect(page).to have_content &amp;quot;User: student2064&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;111&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    click_link &amp;quot;111&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Submit or Review work for 111&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Alternate View&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    click_link &amp;quot;Alternate View&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Contributor&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  it &amp;quot;shows the correct alternate view&amp;quot; do&lt;br /&gt;
    # Load questionnaire with generic setup&lt;br /&gt;
    load_alternate&lt;br /&gt;
    expect(page).to have_content &amp;quot;Contributor&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Stats&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Submitted work&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Author Feedback&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Teammate Review&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Final Score&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Range&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Average&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;student2064&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'hide stats' &lt;br /&gt;
    expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'show submission' &lt;br /&gt;
    #expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'show reviews' &lt;br /&gt;
    #page.should have_selector('table tr', text: 'show reviews')&lt;br /&gt;
    #find(:xpath, &amp;quot;//tr[contains(.,'show reviews')]/td/a&amp;quot;, :text =&amp;gt; 'show reviews').click&lt;br /&gt;
    #expect(page).to have_content &amp;quot;Writeup&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
      #describe &amp;quot;grades/participant&amp;quot;, :type =&amp;gt; :view do&lt;br /&gt;
        #it 'exists' do&lt;br /&gt;
          #find(:xpath, &amp;quot;//tr[contains(.,'show reviews')]/td/a&amp;quot;, :text =&amp;gt; 'show reviews').click&lt;br /&gt;
        #end&lt;br /&gt;
      #end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
describe &amp;quot;test for instructor&amp;quot; do&lt;br /&gt;
  before(:each) do&lt;br /&gt;
    # assignment and topic&lt;br /&gt;
    create(:assignment,&lt;br /&gt;
           name: &amp;quot;Test Assignment&amp;quot;,&lt;br /&gt;
           directory_path: &amp;quot;Test Assignment&amp;quot;,&lt;br /&gt;
           rounds_of_reviews: 2,&lt;br /&gt;
           staggered_deadline: true,&lt;br /&gt;
           max_team_size: 1,&lt;br /&gt;
           allow_selecting_additional_reviews_after_1st_round: true)&lt;br /&gt;
    create_list(:participant, 3)&lt;br /&gt;
    create(:topic, topic_name: &amp;quot;Topic_1&amp;quot;)&lt;br /&gt;
    create(:topic, topic_name: &amp;quot;Topic_2&amp;quot;)&lt;br /&gt;
    create(:topic, topic_name: &amp;quot;Topic_3&amp;quot;)&lt;br /&gt;
    assignment_id = Assignment.where(name: 'Test Assignment')[0].id&lt;br /&gt;
&lt;br /&gt;
    #visit &amp;quot;/response/view2?id=#{review_id}&amp;amp;&amp;amp;team=#{team_id}&amp;amp;&amp;amp;round=1&amp;amp;&amp;amp;assignment=#{assignment_id}&amp;quot;&lt;br /&gt;
    # rubric&lt;br /&gt;
    create(:questionnaire, name: &amp;quot;TestQuestionnaire1&amp;quot;)&lt;br /&gt;
    create(:questionnaire, name: &amp;quot;TestQuestionnaire2&amp;quot;)&lt;br /&gt;
    create(:question, txt: &amp;quot;Question1&amp;quot;, questionnaire: ReviewQuestionnaire.where(name: 'TestQuestionnaire1').first, type: &amp;quot;Criterion&amp;quot;)&lt;br /&gt;
    create(:question, txt: &amp;quot;Question2&amp;quot;, questionnaire: ReviewQuestionnaire.where(name: 'TestQuestionnaire2').first, type: &amp;quot;Criterion&amp;quot;)&lt;br /&gt;
    create(:assignment_questionnaire, questionnaire: ReviewQuestionnaire.where(name: 'TestQuestionnaire1').first, used_in_round: 1)&lt;br /&gt;
    create(:assignment_questionnaire, questionnaire: ReviewQuestionnaire.where(name: 'TestQuestionnaire2').first, used_in_round: 2)&lt;br /&gt;
    questionnaire_id = ReviewQuestionnaire.first.id.to_s&lt;br /&gt;
&lt;br /&gt;
    # deadline type&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;submission&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;review&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;metareview&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;drop_topic&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;signup&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;team_formation&amp;quot;)&lt;br /&gt;
    create(:deadline_right)&lt;br /&gt;
    create(:deadline_right, name: 'Late')&lt;br /&gt;
    create(:deadline_right, name: 'OK')&lt;br /&gt;
&lt;br /&gt;
    create(:team_user, user: User.where(role_id: 2).first)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).second)&lt;br /&gt;
      create(:assignment_team)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).third, team: AssignmentTeam.second)&lt;br /&gt;
      create(:signed_up_team)&lt;br /&gt;
      create(:signed_up_team, team_id: 2, topic: SignUpTopic.second)&lt;br /&gt;
    visit &amp;quot;response/view2?id=#{questionnaire_id}&amp;amp;&amp;amp;team=1&amp;amp;&amp;amp;round=1&amp;amp;&amp;amp;assignment=#{assignment_id}&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  it &amp;quot;can go to review details&amp;quot; do&lt;br /&gt;
    expect(page).to have_content &amp;quot;Toggle navigation&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Papers on Expertiza&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;response&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
#[https://github.com/aranne/expertiza Forked Issue on Github]&lt;br /&gt;
#Weiran Fu (@ncsu.edu)&lt;br /&gt;
#Qingyan Wang (qwang20@ncsu.edu)&lt;br /&gt;
#Hongli Wang (hwang85@ncsu.edu)&lt;br /&gt;
#'''Mentor:''' Mohit Jain (mjain6@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza on GitHub]&lt;br /&gt;
#[http://expertiza.ncsu.edu/ The live Expertiza website] &lt;br /&gt;
#[http://wikis.lib.ncsu.edu/index.php/Expertiza Expertiza project documentation wiki]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Hwang85</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Student-feedback.png&amp;diff=126455</id>
		<title>File:Student-feedback.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Student-feedback.png&amp;diff=126455"/>
		<updated>2019-10-29T03:11:56Z</updated>

		<summary type="html">&lt;p&gt;Hwang85: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Hwang85</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Student-detail.png&amp;diff=126452</id>
		<title>File:Student-detail.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Student-detail.png&amp;diff=126452"/>
		<updated>2019-10-29T03:09:36Z</updated>

		<summary type="html">&lt;p&gt;Hwang85: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Hwang85</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Student-table.png&amp;diff=126447</id>
		<title>File:Student-table.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Student-table.png&amp;diff=126447"/>
		<updated>2019-10-29T03:07:31Z</updated>

		<summary type="html">&lt;p&gt;Hwang85: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Hwang85</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Instructorend.png&amp;diff=126444</id>
		<title>File:Instructorend.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Instructorend.png&amp;diff=126444"/>
		<updated>2019-10-29T03:05:31Z</updated>

		<summary type="html">&lt;p&gt;Hwang85: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Hwang85</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Instructor-partial.png&amp;diff=126427</id>
		<title>File:Instructor-partial.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Instructor-partial.png&amp;diff=126427"/>
		<updated>2019-10-29T02:58:31Z</updated>

		<summary type="html">&lt;p&gt;Hwang85: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Hwang85</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Instructor-end.png&amp;diff=126401</id>
		<title>File:Instructor-end.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Instructor-end.png&amp;diff=126401"/>
		<updated>2019-10-29T02:41:31Z</updated>

		<summary type="html">&lt;p&gt;Hwang85: instructor end screenshot&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;instructor end screenshot&lt;/div&gt;</summary>
		<author><name>Hwang85</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1966._Tabbed_reviews_partial_file_refactor_for_displaying_the_alternate_view_of_reviews&amp;diff=126144</id>
		<title>CSC/ECE 517 Fall 2019 - E1966. Tabbed reviews partial file refactor for displaying the alternate view of reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1966._Tabbed_reviews_partial_file_refactor_for_displaying_the_alternate_view_of_reviews&amp;diff=126144"/>
		<updated>2019-10-29T00:03:18Z</updated>

		<summary type="html">&lt;p&gt;Hwang85: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''About Expertiza''' ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a open source project currently for CSC517 instructor and students forming groups, submit work, review, and view grades. The project is based on Ruby on Rails framework and the code is on Github: https://github.com/expertiza/expertiza. Expertiza serves wiki page, collecting information of all internal information and updates of all versions.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
===Issue details===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) On student-end, Expertiza uses grades/_reviews.html.erb partial file to display reviewers, scores and review details; on instructor-end, it uses Response model methods to construct html file for review pages. We need to use the same kinds of partials in instructor-end and student-end.&lt;br /&gt;
&lt;br /&gt;
2) Give Feedback link at view_my_score at student-end should not appear at folded view.&lt;br /&gt;
&lt;br /&gt;
===What to do===&lt;br /&gt;
1) We need to use the same kinds of partials in instructor-end and student-end. So we decide to use  grades/_team_statistics.html.erb to display reviewers and scores and to use grades/_tabbed_reviews.html.erb to display review details for both student-end and instructor-end.&lt;br /&gt;
&lt;br /&gt;
2) Give Feedback link at view_my_score should appear at the bottom of expanded view.&lt;br /&gt;
&lt;br /&gt;
== '''Solution''' ==&lt;br /&gt;
For student end, split reviews.html.erb into two partial files. One is grades/team_review_statistics.html.erb for reviewers and scores. The other one is grades/tabbed_reviews.html.erb for review details.&lt;br /&gt;
For instructor end, it used to use response model methods to construct html files for review details, now we use grades/tabbed_reviews.html.erb to display review details.&lt;br /&gt;
So student end and instructor end both use grades/team_review_statistics and grades/tabbed_reviews to display reviewers, scores and review details.&lt;br /&gt;
===Deploy Link===&lt;br /&gt;
[http://152.46.19.149:8080 Our project is deployed at VCL ]&lt;br /&gt;
===Student End===&lt;br /&gt;
&lt;br /&gt;
* In student end, render grades/team_review_statistics and grades/tabbed_reviews two partial files instead of grades/reviews partial file.&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_participant.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;TR id=&amp;quot;&amp;lt;%= prefix %&amp;gt;_reviews&amp;quot; style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/team_review_statistics', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :pscore =&amp;gt; pscore} %&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&lt;br /&gt;
    &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Add feed back link in student end view.&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;% if controller.action_name == &amp;quot;view_my_scores&amp;quot;%&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Generate the feedback html --&amp;gt;&lt;br /&gt;
                    &amp;lt;% map = FeedbackResponseMap.where(reviewed_object_id: review.id, reviewer_id: participant.id).first&lt;br /&gt;
                        review_feedbacks = map.try :response %&amp;gt;&lt;br /&gt;
                    &amp;lt;% if review_feedbacks &amp;amp;&amp;amp; !review_feedbacks.empty? %&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_feedbacks.first.id %&amp;gt; or&lt;br /&gt;
                        &amp;lt;%= link_to &amp;quot;Edit&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'edit', :id =&amp;gt; review_feedbacks.first.id, :return =&amp;gt; &amp;quot;feedback&amp;quot; %&amp;gt; feedback for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                    &amp;lt;% else %&amp;gt;&lt;br /&gt;
                        &amp;lt;%= link_to &amp;quot;Give feedback&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'new_feedback', :id =&amp;gt; review.id %&amp;gt; for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                    &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add javascript to tabbed review so it can be hidden or shown by clicking the show/hide reviews.&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  toggle_tag_prompt = function() {&lt;br /&gt;
    $('.tag_prompt_container').toggle();&lt;br /&gt;
  };&lt;br /&gt;
  $( document ).ready(function() {&lt;br /&gt;
    $('#tag_prompt_toggler').click(function () {&lt;br /&gt;
      if ($('#tag_prompt_toggler').text() == &amp;quot;hide tags&amp;quot;)&lt;br /&gt;
        $('#tag_prompt_toggler').text(&amp;quot;show tags&amp;quot;)&lt;br /&gt;
      else&lt;br /&gt;
        $('#tag_prompt_toggler').text(&amp;quot;hide tags&amp;quot;)&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add statistics view to student end by using the team_review_statistics.html.erb file.&lt;br /&gt;
'''app/views/grades/_participant.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;TR id=&amp;quot;&amp;lt;%= prefix %&amp;gt;_reviews&amp;quot; style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/team_review_statistics', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :pscore =&amp;gt; pscore} %&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&lt;br /&gt;
    &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_team_review_statistics.html.erb''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td colspan=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;    &lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Instructor End===&lt;br /&gt;
&lt;br /&gt;
* Create new method view2 for response_controller&lt;br /&gt;
&lt;br /&gt;
''' app/controllers/response_controller.rb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def view2&lt;br /&gt;
    @response = Response.find(params[:id])&lt;br /&gt;
    @map = @response.map&lt;br /&gt;
    set_content2&lt;br /&gt;
    render &amp;quot;response/view&amp;quot;&lt;br /&gt;
  end &lt;br /&gt;
......&lt;br /&gt;
......&lt;br /&gt;
    @participant = @map.reviewer&lt;br /&gt;
......&lt;br /&gt;
def set_content2(new_response = false)&lt;br /&gt;
    @contributor = @map.contributor&lt;br /&gt;
    members = TeamsUser.where(team_id: params[:team])&lt;br /&gt;
    @user = members.first&lt;br /&gt;
    @participant = AssignmentParticipant.where(user_id: @user.user_id, parent_id: params[:assignment]).first&lt;br /&gt;
@@ -264,7 +273,9 @@ def set_content(new_response = false)&lt;br /&gt;
    @questions = retrieve_questions questionnaires, @assignment.id&lt;br /&gt;
    # @pscore has the newest versions of response for each response map, and only one for each response map (unless it is vary rubric by round)&lt;br /&gt;
    @pscore = @participant.scores(@questions)&lt;br /&gt;
    @reviewer = @map.reviewer&lt;br /&gt;
    @round = params[:round]&lt;br /&gt;
  end  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                &amp;lt;% prefix = nil %&amp;gt;&lt;br /&gt;
......&lt;br /&gt;
&amp;lt;% if controller.action_name == &amp;quot;view_my_scores&amp;quot;%&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Generate the feedback html --&amp;gt;&lt;br /&gt;
                    &amp;lt;% map = FeedbackResponseMap.where(reviewed_object_id: review.id, reviewer_id: participant.id).first&lt;br /&gt;
                        review_feedbacks = map.try :response %&amp;gt;&lt;br /&gt;
                    &amp;lt;% if review_feedbacks &amp;amp;&amp;amp; !review_feedbacks.empty? %&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_feedbacks.first.id %&amp;gt; or&lt;br /&gt;
                        &amp;lt;%= link_to &amp;quot;Edit&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'edit', :id =&amp;gt; review_feedbacks.first.id, :return =&amp;gt; &amp;quot;feedback&amp;quot; %&amp;gt; feedback for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                    &amp;lt;% else %&amp;gt;&lt;br /&gt;
                        &amp;lt;%= link_to &amp;quot;Give feedback&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'new_feedback', :id =&amp;gt; review.id %&amp;gt; for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                    &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;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;/table&amp;gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' app/views/grades/_view_heatgrid.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                      &amp;lt;th class=&amp;quot;sorter-false&amp;quot;&amp;gt; &amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;../response/view2?id=&amp;lt;%= review.id.to_s %&amp;gt;&amp;amp;&amp;amp;team=&amp;lt;%= @team.id %&amp;gt;&amp;amp;&amp;amp;round=&amp;lt;%= vm.round.to_s %&amp;gt;&amp;amp;&amp;amp;assignment=&amp;lt;%= @assignment.id %&amp;gt;&amp;quot;  &lt;br /&gt;
data-toggle=&amp;quot;tooltip&amp;quot; data-placement=&amp;quot;right&amp;quot; title=&amp;quot;Click to see details&amp;quot;&amp;gt;&amp;lt;%= user_name.to_s %&amp;gt;&amp;lt;/a&amp;gt;  &amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' app/views/response/view.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view2&amp;quot; %&amp;gt;&lt;br /&gt;
    &amp;lt;% file_url = nil %&amp;gt;&lt;br /&gt;
    &amp;lt;%= @response.display_as_html(nil, nil, file_url) %&amp;gt;&lt;br /&gt;
    &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;% else %&amp;gt;&lt;br /&gt;
    &amp;lt;TR style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; @participant, :rscore =&amp;gt; @pscore[:review], :reviewer =&amp;gt; @reviewer, :round =&amp;gt; @round} %&amp;gt;&lt;br /&gt;
        &amp;lt;/TD&amp;gt;&lt;br /&gt;
    &amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* show right round for instructor-end&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        &amp;lt;% next if round.to_s != @round.to_s %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Create construct_instructor2_html in order to not show review number&lt;br /&gt;
''' app/models/response.rb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if prefix == &amp;quot;instructor&amp;quot;&lt;br /&gt;
      self_id = self.id.to_s&lt;br /&gt;
      code = construct_instructor2_html identifier, self_id, count&lt;br /&gt;
    elsif prefix # has prefix means view_score page in instructor end&lt;br /&gt;
      self_id = prefix + '_' + self.id.to_s&lt;br /&gt;
      code = construct_instructor_html identifier, self_id, count&lt;br /&gt;
......&lt;br /&gt;
def construct_instructor2_html identifier, self_id, count&lt;br /&gt;
    identifier += '&amp;lt;table width=&amp;quot;100%&amp;quot;&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;tr&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;td align=&amp;quot;left&amp;quot; width=&amp;quot;70%&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Review ' + '&amp;lt;/b&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'\&lt;br /&gt;
						 '&amp;lt;a href=&amp;quot;#&amp;quot; name= &amp;quot;review_' + self_id + 'Link&amp;quot; onClick=&amp;quot;toggleElement(' + &amp;quot;'review_&amp;quot; + self_id + &amp;quot;','review'&amp;quot; + ');return false;&amp;quot;&amp;gt;hide review&amp;lt;/a&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;/td&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Last Reviewed:&amp;lt;/b&amp;gt;'\&lt;br /&gt;
						 &amp;quot;&amp;lt;span&amp;gt;#{(self.updated_at.nil? ? 'Not available' : self.updated_at.strftime('%A %B %d %Y, %I:%M%p'))}&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;\&lt;br /&gt;
						 '&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;'&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;Round &amp;lt;%= round %&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot; %&amp;gt;&lt;br /&gt;
                &amp;lt;a href=&amp;quot;#&amp;quot; name= &amp;lt;%= participant.id.to_s + '_' + round.to_s + &amp;quot;Link&amp;quot; %&amp;gt; onClick=&amp;quot;toggleElement('&amp;lt;%= participant.id.to_s + '_' + round.to_s %&amp;gt;','round &amp;lt;%= round.to_s%&amp;gt; reviews');return false;&amp;quot;&amp;gt;show round &amp;lt;%= round.to_s%&amp;gt; reviews&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% if @assignment.is_answer_tagging_allowed %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;spn_qsttog&amp;quot; id=&amp;quot;tag_prompt_toggler&amp;quot; title=&amp;quot;Click to display/hide tags&amp;quot; onclick=&amp;quot;toggle_tag_prompt()&amp;quot;&amp;gt;hide tags&amp;lt;/span&amp;gt;&lt;br /&gt;
@@ -37,6 +39,7 @@&lt;br /&gt;
                &amp;lt;% review_feedback = nil %&amp;gt;&lt;br /&gt;
                &amp;lt;% count = count + 1 %&amp;gt;&lt;br /&gt;
                &amp;lt;% prefix = nil %&amp;gt;&lt;br /&gt;
                &amp;lt;% prefix = &amp;quot;instructor&amp;quot; if controller.action_name == &amp;quot;view2&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Show just one review in instructor-end&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% rounds.each do |round| %&amp;gt;&lt;br /&gt;
        &amp;lt;% if controller.action_name == &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
        &amp;lt;% next if round.to_s != @round.to_s %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% if controller.action_name != &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;Round &amp;lt;%= round %&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot; %&amp;gt;&lt;br /&gt;
@@ -33,8 +35,13 @@&lt;br /&gt;
        &amp;lt;% if @assignment.is_answer_tagging_allowed %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;spn_qsttog&amp;quot; id=&amp;quot;tag_prompt_toggler&amp;quot; title=&amp;quot;Click to display/hide tags&amp;quot; onclick=&amp;quot;toggle_tag_prompt()&amp;quot;&amp;gt;hide tags&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% if controller.action_name != &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
        &amp;lt;table class=&amp;quot;table table-striped&amp;quot; id=&amp;lt;%= participant.id.to_s + '_' + round.to_s %&amp;gt; &amp;lt;%= style=&amp;quot;display: none;&amp;quot; if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
            &amp;lt;% rscore[:assessments].select{|response| response.round == round}.reverse.uniq{|response| response.map_id}.sort_by{|response| response.map_id}.each_with_index do |review, index| %&amp;gt;&lt;br /&gt;
                &amp;lt;% if controller.action_name == &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
                &amp;lt;% next if review.reviewer != @reviewer || count &amp;gt; 0 %&amp;gt;&lt;br /&gt;
                &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;% review_feedback = nil %&amp;gt;&lt;br /&gt;
                &amp;lt;% count = count + 1 %&amp;gt;&lt;br /&gt;
@@ -72,7 +79,9 @@&lt;br /&gt;
                &amp;lt;/td&amp;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;% if controller.action_name != &amp;quot;view2&amp;quot;%&amp;gt;    &lt;br /&gt;
        &amp;lt;/table&amp;gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;% else %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Test files'''==&lt;br /&gt;
&lt;br /&gt;
*tabbed_review_spec.rb created and added 3 test cases for alternate view of reviews&lt;br /&gt;
'''spec/features/tabbed_review_spec.rb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require &amp;quot;spec_helper&amp;quot;&lt;br /&gt;
require 'rspec'&lt;br /&gt;
describe &amp;quot;alternate view of reviews&amp;quot; do&lt;br /&gt;
    before(:each) do&lt;br /&gt;
      assignment1 = create(:assignment, name: &amp;quot;111&amp;quot;, directory_path: 'test_assignment')&lt;br /&gt;
      create_list(:participant, 3)&lt;br /&gt;
      create(:assignment_node)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;submission&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;review&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;metareview&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;drop_topic&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;signup&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;team_formation&amp;quot;)&lt;br /&gt;
      create(:deadline_right)&lt;br /&gt;
      create(:deadline_right, name: 'Late')&lt;br /&gt;
      create(:deadline_right, name: 'OK')&lt;br /&gt;
      create(:assignment_due_date, deadline_type: DeadlineType.where(name: 'review').first, due_at: Time.now.in_time_zone + 1.day)&lt;br /&gt;
      create(:topic)&lt;br /&gt;
      create(:topic, topic_name: &amp;quot;TestReview&amp;quot;)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).first)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).second)&lt;br /&gt;
      create(:assignment_team)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).third, team: AssignmentTeam.second)&lt;br /&gt;
      create(:signed_up_team)&lt;br /&gt;
      create(:signed_up_team, team_id: 2, topic: SignUpTopic.second)&lt;br /&gt;
      create(:assignment_questionnaire)&lt;br /&gt;
      create(:question)&lt;br /&gt;
      # create(:review_response_map, reviewer_id: User.where(role_id: 2).third.id)&lt;br /&gt;
      # create(:review_response_map, reviewer_id: User.where(role_id: 2).second.id, reviewee: AssignmentTeam.second)&lt;br /&gt;
      # sleep(10000)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
  def load_alternate&lt;br /&gt;
    login_as('student2064')&lt;br /&gt;
    expect(page).to have_content &amp;quot;User: student2064&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;111&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    click_link &amp;quot;111&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Submit or Review work for 111&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Alternate View&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    click_link &amp;quot;Alternate View&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Contributor&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  it &amp;quot;shows the correct alternate view&amp;quot; do&lt;br /&gt;
    # Load questionnaire with generic setup&lt;br /&gt;
    load_alternate&lt;br /&gt;
    expect(page).to have_content &amp;quot;Contributor&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Stats&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Submitted work&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Author Feedback&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Teammate Review&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Final Score&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Range&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Average&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;student2064&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'hide stats' &lt;br /&gt;
    expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'show submission' &lt;br /&gt;
    #expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'show reviews' &lt;br /&gt;
    #page.should have_selector('table tr', text: 'show reviews')&lt;br /&gt;
    #find(:xpath, &amp;quot;//tr[contains(.,'show reviews')]/td/a&amp;quot;, :text =&amp;gt; 'show reviews').click&lt;br /&gt;
    #expect(page).to have_content &amp;quot;Writeup&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
      #describe &amp;quot;grades/participant&amp;quot;, :type =&amp;gt; :view do&lt;br /&gt;
        #it 'exists' do&lt;br /&gt;
          #find(:xpath, &amp;quot;//tr[contains(.,'show reviews')]/td/a&amp;quot;, :text =&amp;gt; 'show reviews').click&lt;br /&gt;
        #end&lt;br /&gt;
      #end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
describe &amp;quot;test for instructor&amp;quot; do&lt;br /&gt;
  before(:each) do&lt;br /&gt;
    # assignment and topic&lt;br /&gt;
    create(:assignment,&lt;br /&gt;
           name: &amp;quot;Test Assignment&amp;quot;,&lt;br /&gt;
           directory_path: &amp;quot;Test Assignment&amp;quot;,&lt;br /&gt;
           rounds_of_reviews: 2,&lt;br /&gt;
           staggered_deadline: true,&lt;br /&gt;
           max_team_size: 1,&lt;br /&gt;
           allow_selecting_additional_reviews_after_1st_round: true)&lt;br /&gt;
    create_list(:participant, 3)&lt;br /&gt;
    create(:topic, topic_name: &amp;quot;Topic_1&amp;quot;)&lt;br /&gt;
    create(:topic, topic_name: &amp;quot;Topic_2&amp;quot;)&lt;br /&gt;
    create(:topic, topic_name: &amp;quot;Topic_3&amp;quot;)&lt;br /&gt;
    assignment_id = Assignment.where(name: 'Test Assignment')[0].id&lt;br /&gt;
&lt;br /&gt;
    #visit &amp;quot;/response/view2?id=#{review_id}&amp;amp;&amp;amp;team=#{team_id}&amp;amp;&amp;amp;round=1&amp;amp;&amp;amp;assignment=#{assignment_id}&amp;quot;&lt;br /&gt;
    # rubric&lt;br /&gt;
    create(:questionnaire, name: &amp;quot;TestQuestionnaire1&amp;quot;)&lt;br /&gt;
    create(:questionnaire, name: &amp;quot;TestQuestionnaire2&amp;quot;)&lt;br /&gt;
    create(:question, txt: &amp;quot;Question1&amp;quot;, questionnaire: ReviewQuestionnaire.where(name: 'TestQuestionnaire1').first, type: &amp;quot;Criterion&amp;quot;)&lt;br /&gt;
    create(:question, txt: &amp;quot;Question2&amp;quot;, questionnaire: ReviewQuestionnaire.where(name: 'TestQuestionnaire2').first, type: &amp;quot;Criterion&amp;quot;)&lt;br /&gt;
    create(:assignment_questionnaire, questionnaire: ReviewQuestionnaire.where(name: 'TestQuestionnaire1').first, used_in_round: 1)&lt;br /&gt;
    create(:assignment_questionnaire, questionnaire: ReviewQuestionnaire.where(name: 'TestQuestionnaire2').first, used_in_round: 2)&lt;br /&gt;
    questionnaire_id = ReviewQuestionnaire.first.id.to_s&lt;br /&gt;
&lt;br /&gt;
    # deadline type&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;submission&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;review&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;metareview&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;drop_topic&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;signup&amp;quot;)&lt;br /&gt;
    create(:deadline_type, name: &amp;quot;team_formation&amp;quot;)&lt;br /&gt;
    create(:deadline_right)&lt;br /&gt;
    create(:deadline_right, name: 'Late')&lt;br /&gt;
    create(:deadline_right, name: 'OK')&lt;br /&gt;
&lt;br /&gt;
    create(:team_user, user: User.where(role_id: 2).first)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).second)&lt;br /&gt;
      create(:assignment_team)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).third, team: AssignmentTeam.second)&lt;br /&gt;
      create(:signed_up_team)&lt;br /&gt;
      create(:signed_up_team, team_id: 2, topic: SignUpTopic.second)&lt;br /&gt;
    visit &amp;quot;response/view2?id=#{questionnaire_id}&amp;amp;&amp;amp;team=1&amp;amp;&amp;amp;round=1&amp;amp;&amp;amp;assignment=#{assignment_id}&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  it &amp;quot;can go to review details&amp;quot; do&lt;br /&gt;
    expect(page).to have_content &amp;quot;Toggle navigation&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Papers on Expertiza&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;response&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
#[https://github.com/aranne/expertiza Forked Issue on Github]&lt;br /&gt;
#Weiran Fu (@ncsu.edu)&lt;br /&gt;
#Qingyan Wang (qwang20@ncsu.edu)&lt;br /&gt;
#Hongli Wang (hwang85@ncsu.edu)&lt;br /&gt;
#'''Mentor:''' Mohit Jain (mjain6@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza on GitHub]&lt;br /&gt;
#[http://expertiza.ncsu.edu/ The live Expertiza website] &lt;br /&gt;
#[http://wikis.lib.ncsu.edu/index.php/Expertiza Expertiza project documentation wiki]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Hwang85</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1966._Tabbed_reviews_partial_file_refactor_for_displaying_the_alternate_view_of_reviews&amp;diff=126093</id>
		<title>CSC/ECE 517 Fall 2019 - E1966. Tabbed reviews partial file refactor for displaying the alternate view of reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1966._Tabbed_reviews_partial_file_refactor_for_displaying_the_alternate_view_of_reviews&amp;diff=126093"/>
		<updated>2019-10-28T23:13:17Z</updated>

		<summary type="html">&lt;p&gt;Hwang85: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''About Expertiza''' ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a open source project currently for CSC517 instructor and students forming groups, submit work, review, and view grades. The project is based on Ruby on Rails framework and the code is on Github: https://github.com/expertiza/expertiza. Expertiza serves wiki page, collecting information of all internal information and updates of all versions.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
===Issue details===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) On student-end, Expertiza uses grades/_reviews.html.erb partial file to display reviewers, scores and review details; on instructor-end, it uses response controller and model to construct html file for review pages. (the tables and charts are generated by grades/_team_statistics.html.erb (display reviewers and scores) in Statistics tab). We need to use the same kinds of partials in instructor-end and student-end, either _reviews partial or tabbed_reviews partial.&lt;br /&gt;
&lt;br /&gt;
2) Give Feedback link at view_my_score at student-end should not appear at folded view.&lt;br /&gt;
&lt;br /&gt;
===What to do===&lt;br /&gt;
1) We need to use the same kinds of partials in instructor-end and student-end.&lt;br /&gt;
&lt;br /&gt;
2) Give Feedback link at view_my_score should appear at the bottom of expanded view.&lt;br /&gt;
&lt;br /&gt;
== '''Solution''' ==&lt;br /&gt;
===Deploy Link===&lt;br /&gt;
[http://152.46.19.149:8080 Our project is deployed at VCL ]&lt;br /&gt;
===Student End===&lt;br /&gt;
&lt;br /&gt;
* In student end, add render partial to tabbed reviews.&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_participant.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;TR id=&amp;quot;&amp;lt;%= prefix %&amp;gt;_reviews&amp;quot; style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&amp;lt;%= render :partial=&amp;gt;'grades/reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Add feed back link in student end view.&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;% rounds.each do |round| %&amp;gt;&lt;br /&gt;
        &amp;lt;h3&amp;gt;Round &amp;lt;%= round %&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;#&amp;quot; name= &amp;lt;%= participant.id.to_s + '_' + round.to_s + &amp;quot;Link&amp;quot; %&amp;gt; onClick=&amp;quot;toggleElement('&amp;lt;%= participant.id.to_s +&lt;br /&gt;
                 '_' + round.to_s %&amp;gt;','round &amp;lt;%= round.to_s%&amp;gt; reviews');return false;&amp;quot;&amp;gt;show round &amp;lt;%= round.to_s%&amp;gt; reviews&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;table class=&amp;quot;table table-striped&amp;quot; id=&amp;lt;%= participant.id.to_s + '_' + round.to_s %&amp;gt; &amp;lt;%= style=&amp;quot;display: none;&amp;quot; if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;&amp;gt;&lt;br /&gt;
            &amp;lt;% rscore[:assessments].select{|response| response.round == round}.reverse.uniq{|response| response.map_id}.sort_by{|response| response.map_id}.each_with_index do |review, index| %&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;% review_feedback = nil %&amp;gt;&lt;br /&gt;
                        &amp;lt;%= display_directory_tree(@participant, files, true).html_safe %&amp;gt;&lt;br /&gt;
                    &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;%= review.display_as_html(prefix, index + 1, nil, true) %&amp;gt;&lt;br /&gt;
                &amp;lt;!-- Generate the feedback html --&amp;gt;&lt;br /&gt;
                &amp;lt;% map = FeedbackResponseMap.where(reviewed_object_id: review.id, reviewer_id: participant.id).first&lt;br /&gt;
                    review_feedbacks = map.try :response %&amp;gt;&lt;br /&gt;
                &amp;lt;% if review_feedbacks &amp;amp;&amp;amp; !review_feedbacks.empty? %&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_feedbacks.first.id %&amp;gt; or&lt;br /&gt;
                    &amp;lt;%= link_to &amp;quot;Edit&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'edit', :id =&amp;gt; review_feedbacks.first.id, :return =&amp;gt; &amp;quot;feedback&amp;quot; %&amp;gt; feedback for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                &amp;lt;% else %&amp;gt;                   &lt;br /&gt;
                    &amp;lt;%= link_to &amp;quot;Give feedback&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'new_feedback', :id =&amp;gt; review.id %&amp;gt; for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add javascript to tabbed review so it can be hidden or shown by clicking the show/hide reviews.&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  toggle_tag_prompt = function() {&lt;br /&gt;
    $('.tag_prompt_container').toggle();&lt;br /&gt;
  };&lt;br /&gt;
  $( document ).ready(function() {&lt;br /&gt;
    $('#tag_prompt_toggler').click(function () {&lt;br /&gt;
      if ($('#tag_prompt_toggler').text() == &amp;quot;hide tags&amp;quot;)&lt;br /&gt;
        $('#tag_prompt_toggler').text(&amp;quot;show tags&amp;quot;)&lt;br /&gt;
      else&lt;br /&gt;
        $('#tag_prompt_toggler').text(&amp;quot;hide tags&amp;quot;)&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add statistic view to student end by using the team_review_statistics.html.erb file.&lt;br /&gt;
'''app/views/grades/_participant.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;TR id=&amp;quot;&amp;lt;%= prefix %&amp;gt;_reviews&amp;quot; style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/team_review_statistics', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :pscore =&amp;gt; pscore} %&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&lt;br /&gt;
    &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if @assignment.is_answer_tagging_allowed %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;spn_qsttog&amp;quot; id=&amp;quot;tag_prompt_toggler&amp;quot; title=&amp;quot;Click to display/hide tags&amp;quot; onclick=&amp;quot;toggle_tag_prompt()&amp;quot;&amp;gt;hide tags&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''app/views/grades/_team_review_statistics.html.erb''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td colspan=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;% if rscore and rscore[:assessments].length &amp;gt; 0 %&amp;gt;&lt;br /&gt;
    &amp;lt;%flag_varying_rubrics=false%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@@ -25,6 +29,9 @@&lt;br /&gt;
    &amp;lt;%if flag_varying_rubrics==false%&amp;gt;&lt;br /&gt;
        &amp;lt;%= render :partial =&amp;gt; 'grades/review_table', :locals =&amp;gt; { :ctrl =&amp;gt; 'review', :caction =&amp;gt; 'view_review', :symbol =&amp;gt; &amp;quot;review&amp;quot;.to_sym, :prefix =&amp;gt; prefix, :assignment =&amp;gt; participant.assignment, :reviews =&amp;gt; rscore[:assessments], :collabel =&amp;gt; &amp;quot;Review&amp;quot;, :rowlabel =&amp;gt; &amp;quot;Reviewer&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;/tr&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;    &lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Instructor End===&lt;br /&gt;
&lt;br /&gt;
* Create new method view2 for response_controller&lt;br /&gt;
&lt;br /&gt;
''' app/controllers/response_controller.rb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def view2&lt;br /&gt;
    @response = Response.find(params[:id])&lt;br /&gt;
    @map = @response.map&lt;br /&gt;
    set_content2&lt;br /&gt;
    render &amp;quot;response/view&amp;quot;&lt;br /&gt;
  end &lt;br /&gt;
......&lt;br /&gt;
......&lt;br /&gt;
    @participant = @map.reviewer&lt;br /&gt;
......&lt;br /&gt;
def set_content2(new_response = false)&lt;br /&gt;
    @contributor = @map.contributor&lt;br /&gt;
    members = TeamsUser.where(team_id: params[:team])&lt;br /&gt;
    @user = members.first&lt;br /&gt;
    @participant = AssignmentParticipant.where(user_id: @user.user_id, parent_id: params[:assignment]).first&lt;br /&gt;
@@ -264,7 +273,9 @@ def set_content(new_response = false)&lt;br /&gt;
    @questions = retrieve_questions questionnaires, @assignment.id&lt;br /&gt;
    # @pscore has the newest versions of response for each response map, and only one for each response map (unless it is vary rubric by round)&lt;br /&gt;
    @pscore = @participant.scores(@questions)&lt;br /&gt;
    @reviewer = @map.reviewer&lt;br /&gt;
    @round = params[:round]&lt;br /&gt;
  end  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                &amp;lt;% prefix = nil %&amp;gt;&lt;br /&gt;
......&lt;br /&gt;
&amp;lt;% if controller.action_name == &amp;quot;view_my_scores&amp;quot;%&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Generate the feedback html --&amp;gt;&lt;br /&gt;
                    &amp;lt;% map = FeedbackResponseMap.where(reviewed_object_id: review.id, reviewer_id: participant.id).first&lt;br /&gt;
                        review_feedbacks = map.try :response %&amp;gt;&lt;br /&gt;
                    &amp;lt;% if review_feedbacks &amp;amp;&amp;amp; !review_feedbacks.empty? %&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_feedbacks.first.id %&amp;gt; or&lt;br /&gt;
                        &amp;lt;%= link_to &amp;quot;Edit&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'edit', :id =&amp;gt; review_feedbacks.first.id, :return =&amp;gt; &amp;quot;feedback&amp;quot; %&amp;gt; feedback for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                    &amp;lt;% else %&amp;gt;&lt;br /&gt;
                        &amp;lt;%= link_to &amp;quot;Give feedback&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'new_feedback', :id =&amp;gt; review.id %&amp;gt; for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                    &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;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;/table&amp;gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' app/views/grades/_view_heatgrid.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                      &amp;lt;th class=&amp;quot;sorter-false&amp;quot;&amp;gt; &amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;../response/view2?id=&amp;lt;%= review.id.to_s %&amp;gt;&amp;amp;&amp;amp;team=&amp;lt;%= @team.id %&amp;gt;&amp;amp;&amp;amp;round=&amp;lt;%= vm.round.to_s %&amp;gt;&amp;amp;&amp;amp;assignment=&amp;lt;%= @assignment.id %&amp;gt;&amp;quot;  &lt;br /&gt;
data-toggle=&amp;quot;tooltip&amp;quot; data-placement=&amp;quot;right&amp;quot; title=&amp;quot;Click to see details&amp;quot;&amp;gt;&amp;lt;%= user_name.to_s %&amp;gt;&amp;lt;/a&amp;gt;  &amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' app/views/response/view.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view2&amp;quot; %&amp;gt;&lt;br /&gt;
    &amp;lt;% file_url = nil %&amp;gt;&lt;br /&gt;
    &amp;lt;%= @response.display_as_html(nil, nil, file_url) %&amp;gt;&lt;br /&gt;
    &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;% else %&amp;gt;&lt;br /&gt;
    &amp;lt;TR style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; @participant, :rscore =&amp;gt; @pscore[:review], :reviewer =&amp;gt; @reviewer, :round =&amp;gt; @round} %&amp;gt;&lt;br /&gt;
        &amp;lt;/TD&amp;gt;&lt;br /&gt;
    &amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* show right round for instructor-end&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        &amp;lt;% next if round.to_s != @round.to_s %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Create construct_instructor2_html in order to not show review number&lt;br /&gt;
''' app/models/response.rb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if prefix == &amp;quot;instructor&amp;quot;&lt;br /&gt;
      self_id = self.id.to_s&lt;br /&gt;
      code = construct_instructor2_html identifier, self_id, count&lt;br /&gt;
    elsif prefix # has prefix means view_score page in instructor end&lt;br /&gt;
      self_id = prefix + '_' + self.id.to_s&lt;br /&gt;
      code = construct_instructor_html identifier, self_id, count&lt;br /&gt;
......&lt;br /&gt;
def construct_instructor2_html identifier, self_id, count&lt;br /&gt;
    identifier += '&amp;lt;table width=&amp;quot;100%&amp;quot;&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;tr&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;td align=&amp;quot;left&amp;quot; width=&amp;quot;70%&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Review ' + '&amp;lt;/b&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'\&lt;br /&gt;
						 '&amp;lt;a href=&amp;quot;#&amp;quot; name= &amp;quot;review_' + self_id + 'Link&amp;quot; onClick=&amp;quot;toggleElement(' + &amp;quot;'review_&amp;quot; + self_id + &amp;quot;','review'&amp;quot; + ');return false;&amp;quot;&amp;gt;hide review&amp;lt;/a&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;/td&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Last Reviewed:&amp;lt;/b&amp;gt;'\&lt;br /&gt;
						 &amp;quot;&amp;lt;span&amp;gt;#{(self.updated_at.nil? ? 'Not available' : self.updated_at.strftime('%A %B %d %Y, %I:%M%p'))}&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;\&lt;br /&gt;
						 '&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;'&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;Round &amp;lt;%= round %&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot; %&amp;gt;&lt;br /&gt;
                &amp;lt;a href=&amp;quot;#&amp;quot; name= &amp;lt;%= participant.id.to_s + '_' + round.to_s + &amp;quot;Link&amp;quot; %&amp;gt; onClick=&amp;quot;toggleElement('&amp;lt;%= participant.id.to_s + '_' + round.to_s %&amp;gt;','round &amp;lt;%= round.to_s%&amp;gt; reviews');return false;&amp;quot;&amp;gt;show round &amp;lt;%= round.to_s%&amp;gt; reviews&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% if @assignment.is_answer_tagging_allowed %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;spn_qsttog&amp;quot; id=&amp;quot;tag_prompt_toggler&amp;quot; title=&amp;quot;Click to display/hide tags&amp;quot; onclick=&amp;quot;toggle_tag_prompt()&amp;quot;&amp;gt;hide tags&amp;lt;/span&amp;gt;&lt;br /&gt;
@@ -37,6 +39,7 @@&lt;br /&gt;
                &amp;lt;% review_feedback = nil %&amp;gt;&lt;br /&gt;
                &amp;lt;% count = count + 1 %&amp;gt;&lt;br /&gt;
                &amp;lt;% prefix = nil %&amp;gt;&lt;br /&gt;
                &amp;lt;% prefix = &amp;quot;instructor&amp;quot; if controller.action_name == &amp;quot;view2&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Show just one review in instructor-end&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% rounds.each do |round| %&amp;gt;&lt;br /&gt;
        &amp;lt;% if controller.action_name == &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
        &amp;lt;% next if round.to_s != @round.to_s %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% if controller.action_name != &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;Round &amp;lt;%= round %&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot; %&amp;gt;&lt;br /&gt;
@@ -33,8 +35,13 @@&lt;br /&gt;
        &amp;lt;% if @assignment.is_answer_tagging_allowed %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;spn_qsttog&amp;quot; id=&amp;quot;tag_prompt_toggler&amp;quot; title=&amp;quot;Click to display/hide tags&amp;quot; onclick=&amp;quot;toggle_tag_prompt()&amp;quot;&amp;gt;hide tags&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% if controller.action_name != &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
        &amp;lt;table class=&amp;quot;table table-striped&amp;quot; id=&amp;lt;%= participant.id.to_s + '_' + round.to_s %&amp;gt; &amp;lt;%= style=&amp;quot;display: none;&amp;quot; if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
            &amp;lt;% rscore[:assessments].select{|response| response.round == round}.reverse.uniq{|response| response.map_id}.sort_by{|response| response.map_id}.each_with_index do |review, index| %&amp;gt;&lt;br /&gt;
                &amp;lt;% if controller.action_name == &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
                &amp;lt;% next if review.reviewer != @reviewer || count &amp;gt; 0 %&amp;gt;&lt;br /&gt;
                &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;% review_feedback = nil %&amp;gt;&lt;br /&gt;
                &amp;lt;% count = count + 1 %&amp;gt;&lt;br /&gt;
@@ -72,7 +79,9 @@&lt;br /&gt;
                &amp;lt;/td&amp;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;% if controller.action_name != &amp;quot;view2&amp;quot;%&amp;gt;    &lt;br /&gt;
        &amp;lt;/table&amp;gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;% else %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Test files'''==&lt;br /&gt;
&lt;br /&gt;
*tabbed_review_spec.rb created and added 3 test cases for alternate view of reviews&lt;br /&gt;
'''spec/features/tabbed_review_spec.rb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require &amp;quot;spec_helper&amp;quot;&lt;br /&gt;
require 'rspec'&lt;br /&gt;
describe &amp;quot;alternate view of reviews&amp;quot; do&lt;br /&gt;
    before(:each) do&lt;br /&gt;
      assignment1 = create(:assignment, name: &amp;quot;111&amp;quot;, directory_path: 'test_assignment')&lt;br /&gt;
      create_list(:participant, 3)&lt;br /&gt;
      create(:assignment_node)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;submission&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;review&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;metareview&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;drop_topic&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;signup&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;team_formation&amp;quot;)&lt;br /&gt;
      create(:deadline_right)&lt;br /&gt;
      create(:deadline_right, name: 'Late')&lt;br /&gt;
      create(:deadline_right, name: 'OK')&lt;br /&gt;
      create(:assignment_due_date, deadline_type: DeadlineType.where(name: 'review').first, due_at: Time.now.in_time_zone + 1.day)&lt;br /&gt;
      create(:topic)&lt;br /&gt;
      create(:topic, topic_name: &amp;quot;TestReview&amp;quot;)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).first)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).second)&lt;br /&gt;
      create(:assignment_team)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).third, team: AssignmentTeam.second)&lt;br /&gt;
      create(:signed_up_team)&lt;br /&gt;
      create(:signed_up_team, team_id: 2, topic: SignUpTopic.second)&lt;br /&gt;
      create(:assignment_questionnaire)&lt;br /&gt;
      create(:question)&lt;br /&gt;
      # create(:review_response_map, reviewer_id: User.where(role_id: 2).third.id)&lt;br /&gt;
      # create(:review_response_map, reviewer_id: User.where(role_id: 2).second.id, reviewee: AssignmentTeam.second)&lt;br /&gt;
      # sleep(10000)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
  def load_alternate&lt;br /&gt;
    login_as('student2064')&lt;br /&gt;
    expect(page).to have_content &amp;quot;User: student2064&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;111&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    click_link &amp;quot;111&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Submit or Review work for 111&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Alternate View&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    click_link &amp;quot;Alternate View&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Contributor&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  it &amp;quot;shows the correct alternate view&amp;quot; do&lt;br /&gt;
    # Load questionnaire with generic setup&lt;br /&gt;
    load_alternate&lt;br /&gt;
    expect(page).to have_content &amp;quot;Contributor&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Stats&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Submitted work&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Author Feedback&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Teammate Review&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Final Score&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Range&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Average&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;student2064&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'hide stats' &lt;br /&gt;
    expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'show submission' &lt;br /&gt;
    #expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'show reviews' &lt;br /&gt;
    #page.should have_selector('table tr', text: 'show reviews')&lt;br /&gt;
    #find(:xpath, &amp;quot;//tr[contains(.,'show reviews')]/td/a&amp;quot;, :text =&amp;gt; 'show reviews').click&lt;br /&gt;
    #expect(page).to have_content &amp;quot;Writeup&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
      #describe &amp;quot;grades/participant&amp;quot;, :type =&amp;gt; :view do&lt;br /&gt;
        #it 'exists' do&lt;br /&gt;
          #find(:xpath, &amp;quot;//tr[contains(.,'show reviews')]/td/a&amp;quot;, :text =&amp;gt; 'show reviews').click&lt;br /&gt;
        #end&lt;br /&gt;
      #end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
describe &amp;quot;test for instructor&amp;quot; do&lt;br /&gt;
  before (:each) do&lt;br /&gt;
    create(:instructor)&lt;br /&gt;
    create(:assignment, course: nil, name: 'Test Assignment')&lt;br /&gt;
    assignment_id = Assignment.where(name: 'Test Assignment')[0].id&lt;br /&gt;
&lt;br /&gt;
    assignment_team = create(:assignment_team)&lt;br /&gt;
&lt;br /&gt;
    create(:team_user)&lt;br /&gt;
    login_as 'instructor6'&lt;br /&gt;
    visit &amp;quot;/grades/view?id=#{assignment_id}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  it &amp;quot;shows summary report&amp;quot; do&lt;br /&gt;
    expect(page).to have_content &amp;quot;Summary report for Test Assignment&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Show all teams&amp;quot;&lt;br /&gt;
    page.first(:xpath, &amp;quot;//a[contains(@href,'#')]&amp;quot;).click&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
describe &amp;quot;test for instructor&amp;quot; do&lt;br /&gt;
  before (:each) do&lt;br /&gt;
    create(:instructor)&lt;br /&gt;
    @assignment = create(:assignment, name: &amp;quot;Test Assignment&amp;quot;, directory_path: 'test_assignment')&lt;br /&gt;
    assignment_id = Assignment.where(name: 'Test Assignment')[0].id&lt;br /&gt;
    assignment_team = create(:assignment_team)&lt;br /&gt;
    create(:team_user)&lt;br /&gt;
    team_id = AssignmentTeam.first.id.to_s&lt;br /&gt;
    create(:topic)&lt;br /&gt;
    create(:topic, topic_name: &amp;quot;TestReview&amp;quot;)&lt;br /&gt;
    create(:assignment_questionnaire)&lt;br /&gt;
    create(:question)&lt;br /&gt;
    create(:signed_up_team)&lt;br /&gt;
    create(:signed_up_team, team_id: 2, topic: SignUpTopic.second)&lt;br /&gt;
    #create(:review)&lt;br /&gt;
    #review_id = Review.first.id.to_s&lt;br /&gt;
    #create(:review_response_map, reviewer_id: User.where(role_id: 2).third.id)&lt;br /&gt;
    login_as 'instructor6'&lt;br /&gt;
    #visit &amp;quot;/response/view2?id=#{review_id}&amp;amp;&amp;amp;team=#{team_id}&amp;amp;&amp;amp;round=1&amp;amp;&amp;amp;assignment=#{assignment_id}&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
  it &amp;quot;can go to review details&amp;quot; do&lt;br /&gt;
    login_as 'instructor6'&lt;br /&gt;
    visit &amp;quot;/response/view2?id=#{review_id}&amp;amp;&amp;amp;team=#{team_id}&amp;amp;&amp;amp;round=1&amp;amp;&amp;amp;assignment=#{assignment_id}&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
  it &amp;quot;can go to review details&amp;quot; do&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
#[https://github.com/aranne/expertiza Forked Issue on Github]&lt;br /&gt;
#Weiran Fu (@ncsu.edu)&lt;br /&gt;
#Qingyan Wang (qwang20@ncsu.edu)&lt;br /&gt;
#Hongli Wang (hwang85@ncsu.edu)&lt;br /&gt;
#'''Mentor:''' Mohit Jain (mjain6@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza on GitHub]&lt;br /&gt;
#[http://expertiza.ncsu.edu/ The live Expertiza website] &lt;br /&gt;
#[http://wikis.lib.ncsu.edu/index.php/Expertiza Expertiza project documentation wiki]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Hwang85</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1966._Tabbed_reviews_partial_file_refactor_for_displaying_the_alternate_view_of_reviews&amp;diff=126065</id>
		<title>CSC/ECE 517 Fall 2019 - E1966. Tabbed reviews partial file refactor for displaying the alternate view of reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1966._Tabbed_reviews_partial_file_refactor_for_displaying_the_alternate_view_of_reviews&amp;diff=126065"/>
		<updated>2019-10-28T22:49:12Z</updated>

		<summary type="html">&lt;p&gt;Hwang85: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''About Expertiza''' ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a open source project currently for CSC517 instructor and students forming groups, submit work, review, and view grades. The project is based on Ruby on Rails framework and the code is on Github: https://github.com/expertiza/expertiza. Expertiza serves wiki page, collecting information of all internal information and updates of all versions.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
===Issue details===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) On student-end, Expertiza use grades/_reviews.html.erb partial to display reviewers, scores and review details; on instructor-end, it uses response controller and model to generate reviews page (the tables and charts are generated by grades/_team_statistics.html.erb (display reviewers and scores) in Statistics tab). We need to use the same kinds of partials in instructor-end and student-end, either _reviews partial or tabbed_reviews partial.&lt;br /&gt;
&lt;br /&gt;
2) Give Feedback link at view_my_score at student-end should not appear at folded view.&lt;br /&gt;
&lt;br /&gt;
===What to do===&lt;br /&gt;
1) We need to use the same kinds of partials in instructor-end and student-end.&lt;br /&gt;
&lt;br /&gt;
2) Give Feedback link at view_my_score should appear at the bottom of expanded view.&lt;br /&gt;
&lt;br /&gt;
== '''Solution''' ==&lt;br /&gt;
===Deploy Link===&lt;br /&gt;
[http://152.46.19.149:8080 Our project is deployed at VCL ]&lt;br /&gt;
===Student End===&lt;br /&gt;
&lt;br /&gt;
* In student end, add render partial to tabbed reviews.&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_participant.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;TR id=&amp;quot;&amp;lt;%= prefix %&amp;gt;_reviews&amp;quot; style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&amp;lt;%= render :partial=&amp;gt;'grades/reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Add feed back link in student end view.&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;% rounds.each do |round| %&amp;gt;&lt;br /&gt;
        &amp;lt;h3&amp;gt;Round &amp;lt;%= round %&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;#&amp;quot; name= &amp;lt;%= participant.id.to_s + '_' + round.to_s + &amp;quot;Link&amp;quot; %&amp;gt; onClick=&amp;quot;toggleElement('&amp;lt;%= participant.id.to_s +&lt;br /&gt;
                 '_' + round.to_s %&amp;gt;','round &amp;lt;%= round.to_s%&amp;gt; reviews');return false;&amp;quot;&amp;gt;show round &amp;lt;%= round.to_s%&amp;gt; reviews&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;table class=&amp;quot;table table-striped&amp;quot; id=&amp;lt;%= participant.id.to_s + '_' + round.to_s %&amp;gt; &amp;lt;%= style=&amp;quot;display: none;&amp;quot; if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;&amp;gt;&lt;br /&gt;
            &amp;lt;% rscore[:assessments].select{|response| response.round == round}.reverse.uniq{|response| response.map_id}.sort_by{|response| response.map_id}.each_with_index do |review, index| %&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;% review_feedback = nil %&amp;gt;&lt;br /&gt;
                        &amp;lt;%= display_directory_tree(@participant, files, true).html_safe %&amp;gt;&lt;br /&gt;
                    &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;%= review.display_as_html(prefix, index + 1, nil, true) %&amp;gt;&lt;br /&gt;
                &amp;lt;!-- Generate the feedback html --&amp;gt;&lt;br /&gt;
                &amp;lt;% map = FeedbackResponseMap.where(reviewed_object_id: review.id, reviewer_id: participant.id).first&lt;br /&gt;
                    review_feedbacks = map.try :response %&amp;gt;&lt;br /&gt;
                &amp;lt;% if review_feedbacks &amp;amp;&amp;amp; !review_feedbacks.empty? %&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_feedbacks.first.id %&amp;gt; or&lt;br /&gt;
                    &amp;lt;%= link_to &amp;quot;Edit&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'edit', :id =&amp;gt; review_feedbacks.first.id, :return =&amp;gt; &amp;quot;feedback&amp;quot; %&amp;gt; feedback for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                &amp;lt;% else %&amp;gt;                   &lt;br /&gt;
                    &amp;lt;%= link_to &amp;quot;Give feedback&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'new_feedback', :id =&amp;gt; review.id %&amp;gt; for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add javascript to tabbed review so it can be hidden or shown by clicking the show/hide reviews.&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  toggle_tag_prompt = function() {&lt;br /&gt;
    $('.tag_prompt_container').toggle();&lt;br /&gt;
  };&lt;br /&gt;
  $( document ).ready(function() {&lt;br /&gt;
    $('#tag_prompt_toggler').click(function () {&lt;br /&gt;
      if ($('#tag_prompt_toggler').text() == &amp;quot;hide tags&amp;quot;)&lt;br /&gt;
        $('#tag_prompt_toggler').text(&amp;quot;show tags&amp;quot;)&lt;br /&gt;
      else&lt;br /&gt;
        $('#tag_prompt_toggler').text(&amp;quot;hide tags&amp;quot;)&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add statistic view to student end by using the team_review_statistics.html.erb file.&lt;br /&gt;
'''app/views/grades/_participant.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;TR id=&amp;quot;&amp;lt;%= prefix %&amp;gt;_reviews&amp;quot; style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/team_review_statistics', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :pscore =&amp;gt; pscore} %&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&lt;br /&gt;
    &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if @assignment.is_answer_tagging_allowed %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;spn_qsttog&amp;quot; id=&amp;quot;tag_prompt_toggler&amp;quot; title=&amp;quot;Click to display/hide tags&amp;quot; onclick=&amp;quot;toggle_tag_prompt()&amp;quot;&amp;gt;hide tags&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''app/views/grades/_team_review_statistics.html.erb''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td colspan=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;% if rscore and rscore[:assessments].length &amp;gt; 0 %&amp;gt;&lt;br /&gt;
    &amp;lt;%flag_varying_rubrics=false%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@@ -25,6 +29,9 @@&lt;br /&gt;
    &amp;lt;%if flag_varying_rubrics==false%&amp;gt;&lt;br /&gt;
        &amp;lt;%= render :partial =&amp;gt; 'grades/review_table', :locals =&amp;gt; { :ctrl =&amp;gt; 'review', :caction =&amp;gt; 'view_review', :symbol =&amp;gt; &amp;quot;review&amp;quot;.to_sym, :prefix =&amp;gt; prefix, :assignment =&amp;gt; participant.assignment, :reviews =&amp;gt; rscore[:assessments], :collabel =&amp;gt; &amp;quot;Review&amp;quot;, :rowlabel =&amp;gt; &amp;quot;Reviewer&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;/tr&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;    &lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Instructor End===&lt;br /&gt;
&lt;br /&gt;
* Create new method view2 for response_controller&lt;br /&gt;
&lt;br /&gt;
''' app/controllers/response_controller.rb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def view2&lt;br /&gt;
    @response = Response.find(params[:id])&lt;br /&gt;
    @map = @response.map&lt;br /&gt;
    set_content2&lt;br /&gt;
    render &amp;quot;response/view&amp;quot;&lt;br /&gt;
  end &lt;br /&gt;
......&lt;br /&gt;
......&lt;br /&gt;
    @participant = @map.reviewer&lt;br /&gt;
......&lt;br /&gt;
def set_content2(new_response = false)&lt;br /&gt;
    @contributor = @map.contributor&lt;br /&gt;
    members = TeamsUser.where(team_id: params[:team])&lt;br /&gt;
    @user = members.first&lt;br /&gt;
    @participant = AssignmentParticipant.where(user_id: @user.user_id, parent_id: params[:assignment]).first&lt;br /&gt;
@@ -264,7 +273,9 @@ def set_content(new_response = false)&lt;br /&gt;
    @questions = retrieve_questions questionnaires, @assignment.id&lt;br /&gt;
    # @pscore has the newest versions of response for each response map, and only one for each response map (unless it is vary rubric by round)&lt;br /&gt;
    @pscore = @participant.scores(@questions)&lt;br /&gt;
    @reviewer = @map.reviewer&lt;br /&gt;
    @round = params[:round]&lt;br /&gt;
  end  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                &amp;lt;% prefix = nil %&amp;gt;&lt;br /&gt;
......&lt;br /&gt;
&amp;lt;% if controller.action_name == &amp;quot;view_my_scores&amp;quot;%&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Generate the feedback html --&amp;gt;&lt;br /&gt;
                    &amp;lt;% map = FeedbackResponseMap.where(reviewed_object_id: review.id, reviewer_id: participant.id).first&lt;br /&gt;
                        review_feedbacks = map.try :response %&amp;gt;&lt;br /&gt;
                    &amp;lt;% if review_feedbacks &amp;amp;&amp;amp; !review_feedbacks.empty? %&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_feedbacks.first.id %&amp;gt; or&lt;br /&gt;
                        &amp;lt;%= link_to &amp;quot;Edit&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'edit', :id =&amp;gt; review_feedbacks.first.id, :return =&amp;gt; &amp;quot;feedback&amp;quot; %&amp;gt; feedback for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                    &amp;lt;% else %&amp;gt;&lt;br /&gt;
                        &amp;lt;%= link_to &amp;quot;Give feedback&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'new_feedback', :id =&amp;gt; review.id %&amp;gt; for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                    &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;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;/table&amp;gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' app/views/grades/_view_heatgrid.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                      &amp;lt;th class=&amp;quot;sorter-false&amp;quot;&amp;gt; &amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;../response/view2?id=&amp;lt;%= review.id.to_s %&amp;gt;&amp;amp;&amp;amp;team=&amp;lt;%= @team.id %&amp;gt;&amp;amp;&amp;amp;round=&amp;lt;%= vm.round.to_s %&amp;gt;&amp;amp;&amp;amp;assignment=&amp;lt;%= @assignment.id %&amp;gt;&amp;quot;  &lt;br /&gt;
data-toggle=&amp;quot;tooltip&amp;quot; data-placement=&amp;quot;right&amp;quot; title=&amp;quot;Click to see details&amp;quot;&amp;gt;&amp;lt;%= user_name.to_s %&amp;gt;&amp;lt;/a&amp;gt;  &amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' app/views/response/view.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view2&amp;quot; %&amp;gt;&lt;br /&gt;
    &amp;lt;% file_url = nil %&amp;gt;&lt;br /&gt;
    &amp;lt;%= @response.display_as_html(nil, nil, file_url) %&amp;gt;&lt;br /&gt;
    &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;% else %&amp;gt;&lt;br /&gt;
    &amp;lt;TR style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; @participant, :rscore =&amp;gt; @pscore[:review], :reviewer =&amp;gt; @reviewer, :round =&amp;gt; @round} %&amp;gt;&lt;br /&gt;
        &amp;lt;/TD&amp;gt;&lt;br /&gt;
    &amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* show right round for instructor-end&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        &amp;lt;% next if round.to_s != @round.to_s %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Create construct_instructor2_html in order to not show review number&lt;br /&gt;
''' app/models/response.rb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if prefix == &amp;quot;instructor&amp;quot;&lt;br /&gt;
      self_id = self.id.to_s&lt;br /&gt;
      code = construct_instructor2_html identifier, self_id, count&lt;br /&gt;
    elsif prefix # has prefix means view_score page in instructor end&lt;br /&gt;
      self_id = prefix + '_' + self.id.to_s&lt;br /&gt;
      code = construct_instructor_html identifier, self_id, count&lt;br /&gt;
......&lt;br /&gt;
def construct_instructor2_html identifier, self_id, count&lt;br /&gt;
    identifier += '&amp;lt;table width=&amp;quot;100%&amp;quot;&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;tr&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;td align=&amp;quot;left&amp;quot; width=&amp;quot;70%&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Review ' + '&amp;lt;/b&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'\&lt;br /&gt;
						 '&amp;lt;a href=&amp;quot;#&amp;quot; name= &amp;quot;review_' + self_id + 'Link&amp;quot; onClick=&amp;quot;toggleElement(' + &amp;quot;'review_&amp;quot; + self_id + &amp;quot;','review'&amp;quot; + ');return false;&amp;quot;&amp;gt;hide review&amp;lt;/a&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;/td&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Last Reviewed:&amp;lt;/b&amp;gt;'\&lt;br /&gt;
						 &amp;quot;&amp;lt;span&amp;gt;#{(self.updated_at.nil? ? 'Not available' : self.updated_at.strftime('%A %B %d %Y, %I:%M%p'))}&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;\&lt;br /&gt;
						 '&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;'&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;Round &amp;lt;%= round %&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot; %&amp;gt;&lt;br /&gt;
                &amp;lt;a href=&amp;quot;#&amp;quot; name= &amp;lt;%= participant.id.to_s + '_' + round.to_s + &amp;quot;Link&amp;quot; %&amp;gt; onClick=&amp;quot;toggleElement('&amp;lt;%= participant.id.to_s + '_' + round.to_s %&amp;gt;','round &amp;lt;%= round.to_s%&amp;gt; reviews');return false;&amp;quot;&amp;gt;show round &amp;lt;%= round.to_s%&amp;gt; reviews&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% if @assignment.is_answer_tagging_allowed %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;spn_qsttog&amp;quot; id=&amp;quot;tag_prompt_toggler&amp;quot; title=&amp;quot;Click to display/hide tags&amp;quot; onclick=&amp;quot;toggle_tag_prompt()&amp;quot;&amp;gt;hide tags&amp;lt;/span&amp;gt;&lt;br /&gt;
@@ -37,6 +39,7 @@&lt;br /&gt;
                &amp;lt;% review_feedback = nil %&amp;gt;&lt;br /&gt;
                &amp;lt;% count = count + 1 %&amp;gt;&lt;br /&gt;
                &amp;lt;% prefix = nil %&amp;gt;&lt;br /&gt;
                &amp;lt;% prefix = &amp;quot;instructor&amp;quot; if controller.action_name == &amp;quot;view2&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Show just one review in instructor-end&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% rounds.each do |round| %&amp;gt;&lt;br /&gt;
        &amp;lt;% if controller.action_name == &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
        &amp;lt;% next if round.to_s != @round.to_s %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% if controller.action_name != &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;Round &amp;lt;%= round %&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot; %&amp;gt;&lt;br /&gt;
@@ -33,8 +35,13 @@&lt;br /&gt;
        &amp;lt;% if @assignment.is_answer_tagging_allowed %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;spn_qsttog&amp;quot; id=&amp;quot;tag_prompt_toggler&amp;quot; title=&amp;quot;Click to display/hide tags&amp;quot; onclick=&amp;quot;toggle_tag_prompt()&amp;quot;&amp;gt;hide tags&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% if controller.action_name != &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
        &amp;lt;table class=&amp;quot;table table-striped&amp;quot; id=&amp;lt;%= participant.id.to_s + '_' + round.to_s %&amp;gt; &amp;lt;%= style=&amp;quot;display: none;&amp;quot; if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
            &amp;lt;% rscore[:assessments].select{|response| response.round == round}.reverse.uniq{|response| response.map_id}.sort_by{|response| response.map_id}.each_with_index do |review, index| %&amp;gt;&lt;br /&gt;
                &amp;lt;% if controller.action_name == &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
                &amp;lt;% next if review.reviewer != @reviewer || count &amp;gt; 0 %&amp;gt;&lt;br /&gt;
                &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;% review_feedback = nil %&amp;gt;&lt;br /&gt;
                &amp;lt;% count = count + 1 %&amp;gt;&lt;br /&gt;
@@ -72,7 +79,9 @@&lt;br /&gt;
                &amp;lt;/td&amp;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;% if controller.action_name != &amp;quot;view2&amp;quot;%&amp;gt;    &lt;br /&gt;
        &amp;lt;/table&amp;gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;% else %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Test files'''==&lt;br /&gt;
&lt;br /&gt;
*tabbed_review_spec.rb created and added 3 test cases for alternate view of reviews&lt;br /&gt;
'''spec/features/tabbed_review_spec.rb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require &amp;quot;spec_helper&amp;quot;&lt;br /&gt;
require 'rspec'&lt;br /&gt;
describe &amp;quot;alternate view of reviews&amp;quot; do&lt;br /&gt;
    before(:each) do&lt;br /&gt;
      assignment1 = create(:assignment, name: &amp;quot;111&amp;quot;, directory_path: 'test_assignment')&lt;br /&gt;
      create_list(:participant, 3)&lt;br /&gt;
      create(:assignment_node)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;submission&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;review&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;metareview&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;drop_topic&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;signup&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;team_formation&amp;quot;)&lt;br /&gt;
      create(:deadline_right)&lt;br /&gt;
      create(:deadline_right, name: 'Late')&lt;br /&gt;
      create(:deadline_right, name: 'OK')&lt;br /&gt;
      create(:assignment_due_date, deadline_type: DeadlineType.where(name: 'review').first, due_at: Time.now.in_time_zone + 1.day)&lt;br /&gt;
      create(:topic)&lt;br /&gt;
      create(:topic, topic_name: &amp;quot;TestReview&amp;quot;)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).first)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).second)&lt;br /&gt;
      create(:assignment_team)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).third, team: AssignmentTeam.second)&lt;br /&gt;
      create(:signed_up_team)&lt;br /&gt;
      create(:signed_up_team, team_id: 2, topic: SignUpTopic.second)&lt;br /&gt;
      create(:assignment_questionnaire)&lt;br /&gt;
      create(:question)&lt;br /&gt;
      # create(:review_response_map, reviewer_id: User.where(role_id: 2).third.id)&lt;br /&gt;
      # create(:review_response_map, reviewer_id: User.where(role_id: 2).second.id, reviewee: AssignmentTeam.second)&lt;br /&gt;
      # sleep(10000)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
  def load_alternate&lt;br /&gt;
    login_as('student2064')&lt;br /&gt;
    expect(page).to have_content &amp;quot;User: student2064&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;111&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    click_link &amp;quot;111&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Submit or Review work for 111&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Alternate View&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    click_link &amp;quot;Alternate View&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Contributor&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  it &amp;quot;shows the correct alternate view&amp;quot; do&lt;br /&gt;
    # Load questionnaire with generic setup&lt;br /&gt;
    load_alternate&lt;br /&gt;
    expect(page).to have_content &amp;quot;Contributor&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Stats&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Submitted work&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Author Feedback&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Teammate Review&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Final Score&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Range&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Average&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;student2064&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'hide stats' &lt;br /&gt;
    expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'show submission' &lt;br /&gt;
    #expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'show reviews' &lt;br /&gt;
    #page.should have_selector('table tr', text: 'show reviews')&lt;br /&gt;
    #find(:xpath, &amp;quot;//tr[contains(.,'show reviews')]/td/a&amp;quot;, :text =&amp;gt; 'show reviews').click&lt;br /&gt;
    #expect(page).to have_content &amp;quot;Writeup&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
      #describe &amp;quot;grades/participant&amp;quot;, :type =&amp;gt; :view do&lt;br /&gt;
        #it 'exists' do&lt;br /&gt;
          #find(:xpath, &amp;quot;//tr[contains(.,'show reviews')]/td/a&amp;quot;, :text =&amp;gt; 'show reviews').click&lt;br /&gt;
        #end&lt;br /&gt;
      #end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
describe &amp;quot;test for instructor&amp;quot; do&lt;br /&gt;
  before (:each) do&lt;br /&gt;
    create(:instructor)&lt;br /&gt;
    create(:assignment, course: nil, name: 'Test Assignment')&lt;br /&gt;
    assignment_id = Assignment.where(name: 'Test Assignment')[0].id&lt;br /&gt;
&lt;br /&gt;
    assignment_team = create(:assignment_team)&lt;br /&gt;
&lt;br /&gt;
    create(:team_user)&lt;br /&gt;
    login_as 'instructor6'&lt;br /&gt;
    visit &amp;quot;/grades/view?id=#{assignment_id}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  it &amp;quot;shows summary report&amp;quot; do&lt;br /&gt;
    expect(page).to have_content &amp;quot;Summary report for Test Assignment&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Show all teams&amp;quot;&lt;br /&gt;
    page.first(:xpath, &amp;quot;//a[contains(@href,'#')]&amp;quot;).click&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
describe &amp;quot;test for instructor&amp;quot; do&lt;br /&gt;
  before (:each) do&lt;br /&gt;
    create(:instructor)&lt;br /&gt;
    @assignment = create(:assignment, name: &amp;quot;Test Assignment&amp;quot;, directory_path: 'test_assignment')&lt;br /&gt;
    assignment_id = Assignment.where(name: 'Test Assignment')[0].id&lt;br /&gt;
    assignment_team = create(:assignment_team)&lt;br /&gt;
    create(:team_user)&lt;br /&gt;
    team_id = AssignmentTeam.first.id.to_s&lt;br /&gt;
    create(:topic)&lt;br /&gt;
    create(:topic, topic_name: &amp;quot;TestReview&amp;quot;)&lt;br /&gt;
    create(:assignment_questionnaire)&lt;br /&gt;
    create(:question)&lt;br /&gt;
    create(:signed_up_team)&lt;br /&gt;
    create(:signed_up_team, team_id: 2, topic: SignUpTopic.second)&lt;br /&gt;
    #create(:review)&lt;br /&gt;
    #review_id = Review.first.id.to_s&lt;br /&gt;
    #create(:review_response_map, reviewer_id: User.where(role_id: 2).third.id)&lt;br /&gt;
    login_as 'instructor6'&lt;br /&gt;
    #visit &amp;quot;/response/view2?id=#{review_id}&amp;amp;&amp;amp;team=#{team_id}&amp;amp;&amp;amp;round=1&amp;amp;&amp;amp;assignment=#{assignment_id}&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
  it &amp;quot;can go to review details&amp;quot; do&lt;br /&gt;
    login_as 'instructor6'&lt;br /&gt;
    visit &amp;quot;/response/view2?id=#{review_id}&amp;amp;&amp;amp;team=#{team_id}&amp;amp;&amp;amp;round=1&amp;amp;&amp;amp;assignment=#{assignment_id}&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
  it &amp;quot;can go to review details&amp;quot; do&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
#[https://github.com/aranne/expertiza Forked Issue on Github]&lt;br /&gt;
#Weiran Fu (@ncsu.edu)&lt;br /&gt;
#Qingyan Wang (qwang20@ncsu.edu)&lt;br /&gt;
#Hongli Wang (hwang85@ncsu.edu)&lt;br /&gt;
#'''Mentor:''' Mohit Jain (mjain6@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza on GitHub]&lt;br /&gt;
#[http://expertiza.ncsu.edu/ The live Expertiza website] &lt;br /&gt;
#[http://wikis.lib.ncsu.edu/index.php/Expertiza Expertiza project documentation wiki]&lt;br /&gt;
#[https://github.com/WintersLt/expertiza GitHub Project Repository Fork]&lt;br /&gt;
#[http://bit.ly/myexpertiza  Demo link]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Hwang85</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1966._Tabbed_reviews_partial_file_refactor_for_displaying_the_alternate_view_of_reviews&amp;diff=126059</id>
		<title>CSC/ECE 517 Fall 2019 - E1966. Tabbed reviews partial file refactor for displaying the alternate view of reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1966._Tabbed_reviews_partial_file_refactor_for_displaying_the_alternate_view_of_reviews&amp;diff=126059"/>
		<updated>2019-10-28T22:46:03Z</updated>

		<summary type="html">&lt;p&gt;Hwang85: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''About Expertiza''' ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a open source project currently for CSC517 instructor and students forming groups, submit work, review, and view grades. The project is based on Ruby on Rails framework and the code is on Github: https://github.com/expertiza/expertiza. Expertiza serves wiki page, collecting information of all internal information and updates of all versions.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
===Issue details===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) On student-end, Expertiza use grades/_reviews.html.erb partial to display reviewers, scores and review details; on instructor-end, it uses response controller and model to generate reviews page (the tables and charts are generated by grades/_team_statistics.html.erb (display reviewers and scores) in Statistics tab). We need to use the same kinds of partials in instructor-end and student-end, either _reviews partial or tabbed_reviews partial.&lt;br /&gt;
&lt;br /&gt;
2) Give Feedback link at view_my_score at student-end should not appear at folded view.&lt;br /&gt;
&lt;br /&gt;
===What to do===&lt;br /&gt;
1) We need to use the same kinds of partials in instructor-end and student-end.&lt;br /&gt;
&lt;br /&gt;
2) Give Feedback link at view_my_score should appear at the bottom of expanded view.&lt;br /&gt;
&lt;br /&gt;
== '''Solution''' ==&lt;br /&gt;
===Student End===&lt;br /&gt;
&lt;br /&gt;
* In student end, add render partial to tabbed reviews.&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_participant.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;TR id=&amp;quot;&amp;lt;%= prefix %&amp;gt;_reviews&amp;quot; style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&amp;lt;%= render :partial=&amp;gt;'grades/reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Add feed back link in student end view.&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;% rounds.each do |round| %&amp;gt;&lt;br /&gt;
        &amp;lt;h3&amp;gt;Round &amp;lt;%= round %&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;#&amp;quot; name= &amp;lt;%= participant.id.to_s + '_' + round.to_s + &amp;quot;Link&amp;quot; %&amp;gt; onClick=&amp;quot;toggleElement('&amp;lt;%= participant.id.to_s +&lt;br /&gt;
                 '_' + round.to_s %&amp;gt;','round &amp;lt;%= round.to_s%&amp;gt; reviews');return false;&amp;quot;&amp;gt;show round &amp;lt;%= round.to_s%&amp;gt; reviews&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;table class=&amp;quot;table table-striped&amp;quot; id=&amp;lt;%= participant.id.to_s + '_' + round.to_s %&amp;gt; &amp;lt;%= style=&amp;quot;display: none;&amp;quot; if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;&amp;gt;&lt;br /&gt;
            &amp;lt;% rscore[:assessments].select{|response| response.round == round}.reverse.uniq{|response| response.map_id}.sort_by{|response| response.map_id}.each_with_index do |review, index| %&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;% review_feedback = nil %&amp;gt;&lt;br /&gt;
                        &amp;lt;%= display_directory_tree(@participant, files, true).html_safe %&amp;gt;&lt;br /&gt;
                    &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;%= review.display_as_html(prefix, index + 1, nil, true) %&amp;gt;&lt;br /&gt;
                &amp;lt;!-- Generate the feedback html --&amp;gt;&lt;br /&gt;
                &amp;lt;% map = FeedbackResponseMap.where(reviewed_object_id: review.id, reviewer_id: participant.id).first&lt;br /&gt;
                    review_feedbacks = map.try :response %&amp;gt;&lt;br /&gt;
                &amp;lt;% if review_feedbacks &amp;amp;&amp;amp; !review_feedbacks.empty? %&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_feedbacks.first.id %&amp;gt; or&lt;br /&gt;
                    &amp;lt;%= link_to &amp;quot;Edit&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'edit', :id =&amp;gt; review_feedbacks.first.id, :return =&amp;gt; &amp;quot;feedback&amp;quot; %&amp;gt; feedback for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                &amp;lt;% else %&amp;gt;                   &lt;br /&gt;
                    &amp;lt;%= link_to &amp;quot;Give feedback&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'new_feedback', :id =&amp;gt; review.id %&amp;gt; for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add javascript to tabbed review so it can be hidden or shown by clicking the show/hide reviews.&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  toggle_tag_prompt = function() {&lt;br /&gt;
    $('.tag_prompt_container').toggle();&lt;br /&gt;
  };&lt;br /&gt;
  $( document ).ready(function() {&lt;br /&gt;
    $('#tag_prompt_toggler').click(function () {&lt;br /&gt;
      if ($('#tag_prompt_toggler').text() == &amp;quot;hide tags&amp;quot;)&lt;br /&gt;
        $('#tag_prompt_toggler').text(&amp;quot;show tags&amp;quot;)&lt;br /&gt;
      else&lt;br /&gt;
        $('#tag_prompt_toggler').text(&amp;quot;hide tags&amp;quot;)&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add statistic view to student end by using the team_review_statistics.html.erb file.&lt;br /&gt;
'''app/views/grades/_participant.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;TR id=&amp;quot;&amp;lt;%= prefix %&amp;gt;_reviews&amp;quot; style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/team_review_statistics', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :pscore =&amp;gt; pscore} %&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&lt;br /&gt;
    &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if @assignment.is_answer_tagging_allowed %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;spn_qsttog&amp;quot; id=&amp;quot;tag_prompt_toggler&amp;quot; title=&amp;quot;Click to display/hide tags&amp;quot; onclick=&amp;quot;toggle_tag_prompt()&amp;quot;&amp;gt;hide tags&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''app/views/grades/_team_review_statistics.html.erb''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td colspan=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;% if rscore and rscore[:assessments].length &amp;gt; 0 %&amp;gt;&lt;br /&gt;
    &amp;lt;%flag_varying_rubrics=false%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@@ -25,6 +29,9 @@&lt;br /&gt;
    &amp;lt;%if flag_varying_rubrics==false%&amp;gt;&lt;br /&gt;
        &amp;lt;%= render :partial =&amp;gt; 'grades/review_table', :locals =&amp;gt; { :ctrl =&amp;gt; 'review', :caction =&amp;gt; 'view_review', :symbol =&amp;gt; &amp;quot;review&amp;quot;.to_sym, :prefix =&amp;gt; prefix, :assignment =&amp;gt; participant.assignment, :reviews =&amp;gt; rscore[:assessments], :collabel =&amp;gt; &amp;quot;Review&amp;quot;, :rowlabel =&amp;gt; &amp;quot;Reviewer&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;/tr&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;    &lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Instructor End===&lt;br /&gt;
&lt;br /&gt;
* Create new method view2 for response_controller&lt;br /&gt;
&lt;br /&gt;
''' app/controllers/response_controller.rb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def view2&lt;br /&gt;
    @response = Response.find(params[:id])&lt;br /&gt;
    @map = @response.map&lt;br /&gt;
    set_content2&lt;br /&gt;
    render &amp;quot;response/view&amp;quot;&lt;br /&gt;
  end &lt;br /&gt;
......&lt;br /&gt;
......&lt;br /&gt;
    @participant = @map.reviewer&lt;br /&gt;
......&lt;br /&gt;
def set_content2(new_response = false)&lt;br /&gt;
    @contributor = @map.contributor&lt;br /&gt;
    members = TeamsUser.where(team_id: params[:team])&lt;br /&gt;
    @user = members.first&lt;br /&gt;
    @participant = AssignmentParticipant.where(user_id: @user.user_id, parent_id: params[:assignment]).first&lt;br /&gt;
@@ -264,7 +273,9 @@ def set_content(new_response = false)&lt;br /&gt;
    @questions = retrieve_questions questionnaires, @assignment.id&lt;br /&gt;
    # @pscore has the newest versions of response for each response map, and only one for each response map (unless it is vary rubric by round)&lt;br /&gt;
    @pscore = @participant.scores(@questions)&lt;br /&gt;
    @reviewer = @map.reviewer&lt;br /&gt;
    @round = params[:round]&lt;br /&gt;
  end  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                &amp;lt;% prefix = nil %&amp;gt;&lt;br /&gt;
......&lt;br /&gt;
&amp;lt;% if controller.action_name == &amp;quot;view_my_scores&amp;quot;%&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Generate the feedback html --&amp;gt;&lt;br /&gt;
                    &amp;lt;% map = FeedbackResponseMap.where(reviewed_object_id: review.id, reviewer_id: participant.id).first&lt;br /&gt;
                        review_feedbacks = map.try :response %&amp;gt;&lt;br /&gt;
                    &amp;lt;% if review_feedbacks &amp;amp;&amp;amp; !review_feedbacks.empty? %&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_feedbacks.first.id %&amp;gt; or&lt;br /&gt;
                        &amp;lt;%= link_to &amp;quot;Edit&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'edit', :id =&amp;gt; review_feedbacks.first.id, :return =&amp;gt; &amp;quot;feedback&amp;quot; %&amp;gt; feedback for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                    &amp;lt;% else %&amp;gt;&lt;br /&gt;
                        &amp;lt;%= link_to &amp;quot;Give feedback&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'new_feedback', :id =&amp;gt; review.id %&amp;gt; for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                    &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;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;/table&amp;gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' app/views/grades/_view_heatgrid.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                      &amp;lt;th class=&amp;quot;sorter-false&amp;quot;&amp;gt; &amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;../response/view2?id=&amp;lt;%= review.id.to_s %&amp;gt;&amp;amp;&amp;amp;team=&amp;lt;%= @team.id %&amp;gt;&amp;amp;&amp;amp;round=&amp;lt;%= vm.round.to_s %&amp;gt;&amp;amp;&amp;amp;assignment=&amp;lt;%= @assignment.id %&amp;gt;&amp;quot;  &lt;br /&gt;
data-toggle=&amp;quot;tooltip&amp;quot; data-placement=&amp;quot;right&amp;quot; title=&amp;quot;Click to see details&amp;quot;&amp;gt;&amp;lt;%= user_name.to_s %&amp;gt;&amp;lt;/a&amp;gt;  &amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' app/views/response/view.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view2&amp;quot; %&amp;gt;&lt;br /&gt;
    &amp;lt;% file_url = nil %&amp;gt;&lt;br /&gt;
    &amp;lt;%= @response.display_as_html(nil, nil, file_url) %&amp;gt;&lt;br /&gt;
    &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;% else %&amp;gt;&lt;br /&gt;
    &amp;lt;TR style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; @participant, :rscore =&amp;gt; @pscore[:review], :reviewer =&amp;gt; @reviewer, :round =&amp;gt; @round} %&amp;gt;&lt;br /&gt;
        &amp;lt;/TD&amp;gt;&lt;br /&gt;
    &amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* show right round for instructor-end&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        &amp;lt;% next if round.to_s != @round.to_s %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Create construct_instructor2_html in order to not show review number&lt;br /&gt;
''' app/models/response.rb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if prefix == &amp;quot;instructor&amp;quot;&lt;br /&gt;
      self_id = self.id.to_s&lt;br /&gt;
      code = construct_instructor2_html identifier, self_id, count&lt;br /&gt;
    elsif prefix # has prefix means view_score page in instructor end&lt;br /&gt;
      self_id = prefix + '_' + self.id.to_s&lt;br /&gt;
      code = construct_instructor_html identifier, self_id, count&lt;br /&gt;
......&lt;br /&gt;
def construct_instructor2_html identifier, self_id, count&lt;br /&gt;
    identifier += '&amp;lt;table width=&amp;quot;100%&amp;quot;&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;tr&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;td align=&amp;quot;left&amp;quot; width=&amp;quot;70%&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Review ' + '&amp;lt;/b&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'\&lt;br /&gt;
						 '&amp;lt;a href=&amp;quot;#&amp;quot; name= &amp;quot;review_' + self_id + 'Link&amp;quot; onClick=&amp;quot;toggleElement(' + &amp;quot;'review_&amp;quot; + self_id + &amp;quot;','review'&amp;quot; + ');return false;&amp;quot;&amp;gt;hide review&amp;lt;/a&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;/td&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Last Reviewed:&amp;lt;/b&amp;gt;'\&lt;br /&gt;
						 &amp;quot;&amp;lt;span&amp;gt;#{(self.updated_at.nil? ? 'Not available' : self.updated_at.strftime('%A %B %d %Y, %I:%M%p'))}&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;\&lt;br /&gt;
						 '&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;'&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;Round &amp;lt;%= round %&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot; %&amp;gt;&lt;br /&gt;
                &amp;lt;a href=&amp;quot;#&amp;quot; name= &amp;lt;%= participant.id.to_s + '_' + round.to_s + &amp;quot;Link&amp;quot; %&amp;gt; onClick=&amp;quot;toggleElement('&amp;lt;%= participant.id.to_s + '_' + round.to_s %&amp;gt;','round &amp;lt;%= round.to_s%&amp;gt; reviews');return false;&amp;quot;&amp;gt;show round &amp;lt;%= round.to_s%&amp;gt; reviews&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% if @assignment.is_answer_tagging_allowed %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;spn_qsttog&amp;quot; id=&amp;quot;tag_prompt_toggler&amp;quot; title=&amp;quot;Click to display/hide tags&amp;quot; onclick=&amp;quot;toggle_tag_prompt()&amp;quot;&amp;gt;hide tags&amp;lt;/span&amp;gt;&lt;br /&gt;
@@ -37,6 +39,7 @@&lt;br /&gt;
                &amp;lt;% review_feedback = nil %&amp;gt;&lt;br /&gt;
                &amp;lt;% count = count + 1 %&amp;gt;&lt;br /&gt;
                &amp;lt;% prefix = nil %&amp;gt;&lt;br /&gt;
                &amp;lt;% prefix = &amp;quot;instructor&amp;quot; if controller.action_name == &amp;quot;view2&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Show just one review in instructor-end&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% rounds.each do |round| %&amp;gt;&lt;br /&gt;
        &amp;lt;% if controller.action_name == &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
        &amp;lt;% next if round.to_s != @round.to_s %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% if controller.action_name != &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;Round &amp;lt;%= round %&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot; %&amp;gt;&lt;br /&gt;
@@ -33,8 +35,13 @@&lt;br /&gt;
        &amp;lt;% if @assignment.is_answer_tagging_allowed %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;spn_qsttog&amp;quot; id=&amp;quot;tag_prompt_toggler&amp;quot; title=&amp;quot;Click to display/hide tags&amp;quot; onclick=&amp;quot;toggle_tag_prompt()&amp;quot;&amp;gt;hide tags&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% if controller.action_name != &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
        &amp;lt;table class=&amp;quot;table table-striped&amp;quot; id=&amp;lt;%= participant.id.to_s + '_' + round.to_s %&amp;gt; &amp;lt;%= style=&amp;quot;display: none;&amp;quot; if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
            &amp;lt;% rscore[:assessments].select{|response| response.round == round}.reverse.uniq{|response| response.map_id}.sort_by{|response| response.map_id}.each_with_index do |review, index| %&amp;gt;&lt;br /&gt;
                &amp;lt;% if controller.action_name == &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
                &amp;lt;% next if review.reviewer != @reviewer || count &amp;gt; 0 %&amp;gt;&lt;br /&gt;
                &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;% review_feedback = nil %&amp;gt;&lt;br /&gt;
                &amp;lt;% count = count + 1 %&amp;gt;&lt;br /&gt;
@@ -72,7 +79,9 @@&lt;br /&gt;
                &amp;lt;/td&amp;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;% if controller.action_name != &amp;quot;view2&amp;quot;%&amp;gt;    &lt;br /&gt;
        &amp;lt;/table&amp;gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;% else %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Test files'''==&lt;br /&gt;
&lt;br /&gt;
*tabbed_review_spec.rb created and added 3 test cases for alternate view of reviews&lt;br /&gt;
'''spec/features/tabbed_review_spec.rb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require &amp;quot;spec_helper&amp;quot;&lt;br /&gt;
require 'rspec'&lt;br /&gt;
describe &amp;quot;alternate view of reviews&amp;quot; do&lt;br /&gt;
    before(:each) do&lt;br /&gt;
      assignment1 = create(:assignment, name: &amp;quot;111&amp;quot;, directory_path: 'test_assignment')&lt;br /&gt;
      create_list(:participant, 3)&lt;br /&gt;
      create(:assignment_node)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;submission&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;review&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;metareview&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;drop_topic&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;signup&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;team_formation&amp;quot;)&lt;br /&gt;
      create(:deadline_right)&lt;br /&gt;
      create(:deadline_right, name: 'Late')&lt;br /&gt;
      create(:deadline_right, name: 'OK')&lt;br /&gt;
      create(:assignment_due_date, deadline_type: DeadlineType.where(name: 'review').first, due_at: Time.now.in_time_zone + 1.day)&lt;br /&gt;
      create(:topic)&lt;br /&gt;
      create(:topic, topic_name: &amp;quot;TestReview&amp;quot;)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).first)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).second)&lt;br /&gt;
      create(:assignment_team)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).third, team: AssignmentTeam.second)&lt;br /&gt;
      create(:signed_up_team)&lt;br /&gt;
      create(:signed_up_team, team_id: 2, topic: SignUpTopic.second)&lt;br /&gt;
      create(:assignment_questionnaire)&lt;br /&gt;
      create(:question)&lt;br /&gt;
      # create(:review_response_map, reviewer_id: User.where(role_id: 2).third.id)&lt;br /&gt;
      # create(:review_response_map, reviewer_id: User.where(role_id: 2).second.id, reviewee: AssignmentTeam.second)&lt;br /&gt;
      # sleep(10000)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
  def load_alternate&lt;br /&gt;
    login_as('student2064')&lt;br /&gt;
    expect(page).to have_content &amp;quot;User: student2064&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;111&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    click_link &amp;quot;111&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Submit or Review work for 111&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Alternate View&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    click_link &amp;quot;Alternate View&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Contributor&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  it &amp;quot;shows the correct alternate view&amp;quot; do&lt;br /&gt;
    # Load questionnaire with generic setup&lt;br /&gt;
    load_alternate&lt;br /&gt;
    expect(page).to have_content &amp;quot;Contributor&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Stats&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Submitted work&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Author Feedback&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Teammate Review&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Final Score&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Range&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Average&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;student2064&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'hide stats' &lt;br /&gt;
    expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'show submission' &lt;br /&gt;
    #expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'show reviews' &lt;br /&gt;
    #page.should have_selector('table tr', text: 'show reviews')&lt;br /&gt;
    #find(:xpath, &amp;quot;//tr[contains(.,'show reviews')]/td/a&amp;quot;, :text =&amp;gt; 'show reviews').click&lt;br /&gt;
    #expect(page).to have_content &amp;quot;Writeup&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
      #describe &amp;quot;grades/participant&amp;quot;, :type =&amp;gt; :view do&lt;br /&gt;
        #it 'exists' do&lt;br /&gt;
          #find(:xpath, &amp;quot;//tr[contains(.,'show reviews')]/td/a&amp;quot;, :text =&amp;gt; 'show reviews').click&lt;br /&gt;
        #end&lt;br /&gt;
      #end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
describe &amp;quot;test for instructor&amp;quot; do&lt;br /&gt;
  before (:each) do&lt;br /&gt;
    create(:instructor)&lt;br /&gt;
    create(:assignment, course: nil, name: 'Test Assignment')&lt;br /&gt;
    assignment_id = Assignment.where(name: 'Test Assignment')[0].id&lt;br /&gt;
&lt;br /&gt;
    assignment_team = create(:assignment_team)&lt;br /&gt;
&lt;br /&gt;
    create(:team_user)&lt;br /&gt;
    login_as 'instructor6'&lt;br /&gt;
    visit &amp;quot;/grades/view?id=#{assignment_id}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  it &amp;quot;shows summary report&amp;quot; do&lt;br /&gt;
    expect(page).to have_content &amp;quot;Summary report for Test Assignment&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Show all teams&amp;quot;&lt;br /&gt;
    page.first(:xpath, &amp;quot;//a[contains(@href,'#')]&amp;quot;).click&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
describe &amp;quot;test for instructor&amp;quot; do&lt;br /&gt;
  before (:each) do&lt;br /&gt;
    create(:instructor)&lt;br /&gt;
    @assignment = create(:assignment, name: &amp;quot;Test Assignment&amp;quot;, directory_path: 'test_assignment')&lt;br /&gt;
    assignment_id = Assignment.where(name: 'Test Assignment')[0].id&lt;br /&gt;
    assignment_team = create(:assignment_team)&lt;br /&gt;
    create(:team_user)&lt;br /&gt;
    team_id = AssignmentTeam.first.id.to_s&lt;br /&gt;
    create(:topic)&lt;br /&gt;
    create(:topic, topic_name: &amp;quot;TestReview&amp;quot;)&lt;br /&gt;
    create(:assignment_questionnaire)&lt;br /&gt;
    create(:question)&lt;br /&gt;
    create(:signed_up_team)&lt;br /&gt;
    create(:signed_up_team, team_id: 2, topic: SignUpTopic.second)&lt;br /&gt;
    #create(:review)&lt;br /&gt;
    #review_id = Review.first.id.to_s&lt;br /&gt;
    #create(:review_response_map, reviewer_id: User.where(role_id: 2).third.id)&lt;br /&gt;
    login_as 'instructor6'&lt;br /&gt;
    #visit &amp;quot;/response/view2?id=#{review_id}&amp;amp;&amp;amp;team=#{team_id}&amp;amp;&amp;amp;round=1&amp;amp;&amp;amp;assignment=#{assignment_id}&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
  it &amp;quot;can go to review details&amp;quot; do&lt;br /&gt;
    login_as 'instructor6'&lt;br /&gt;
    visit &amp;quot;/response/view2?id=#{review_id}&amp;amp;&amp;amp;team=#{team_id}&amp;amp;&amp;amp;round=1&amp;amp;&amp;amp;assignment=#{assignment_id}&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
  it &amp;quot;can go to review details&amp;quot; do&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
#[https://github.com/aranne/expertiza Forked Issue on Github]&lt;br /&gt;
#Weiran Fu (@ncsu.edu)&lt;br /&gt;
#Qingyan Wang (qwang20@ncsu.edu)&lt;br /&gt;
#Hongli Wang (hwang85@ncsu.edu)&lt;br /&gt;
#'''Mentor:''' Mohit Jain (mjain6@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza on GitHub]&lt;br /&gt;
#[http://expertiza.ncsu.edu/ The live Expertiza website] &lt;br /&gt;
#[http://wikis.lib.ncsu.edu/index.php/Expertiza Expertiza project documentation wiki]&lt;br /&gt;
#[https://github.com/WintersLt/expertiza GitHub Project Repository Fork]&lt;br /&gt;
#[http://bit.ly/myexpertiza  Demo link]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Hwang85</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1966._Tabbed_reviews_partial_file_refactor_for_displaying_the_alternate_view_of_reviews&amp;diff=125989</id>
		<title>CSC/ECE 517 Fall 2019 - E1966. Tabbed reviews partial file refactor for displaying the alternate view of reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1966._Tabbed_reviews_partial_file_refactor_for_displaying_the_alternate_view_of_reviews&amp;diff=125989"/>
		<updated>2019-10-28T21:08:01Z</updated>

		<summary type="html">&lt;p&gt;Hwang85: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''About Expertiza''' ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a open source project currently for CSC517 instructor and students forming groups, submit work, review, and view grades. The project is based on Ruby on Rails framework and the code is on Github: https://github.com/expertiza/expertiza. Expertiza serves wiki page, collecting information of all internal information and updates of all versions.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
===Issue details===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) On student-end, Expertiza use grades/_reviews.html.erb partial to display reviewers, scores and review details; on instructor-end, it uses response controller and model to generate reviews page (the tables and charts are generated by grades/_team_statistics.html.erb (display reviewers and scores) in Statistics tab). We need to use the same kinds of partials in instructor-end and student-end, either _reviews partial or tabbed_reviews partial.&lt;br /&gt;
&lt;br /&gt;
2) Give Feedback link at view_my_score at student-end should not appear at folded view.&lt;br /&gt;
&lt;br /&gt;
===What to do===&lt;br /&gt;
1) We need to use the same kinds of partials in instructor-end and student-end.&lt;br /&gt;
&lt;br /&gt;
2) Give Feedback link at view_my_score should appear at the bottom of expanded view.&lt;br /&gt;
&lt;br /&gt;
== '''Solution''' ==&lt;br /&gt;
===Student End===&lt;br /&gt;
&lt;br /&gt;
* In student end, add render partial to tabbed reviews.&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_participant.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;TR id=&amp;quot;&amp;lt;%= prefix %&amp;gt;_reviews&amp;quot; style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&amp;lt;%= render :partial=&amp;gt;'grades/reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Add feed back link in student end view.&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;% rounds.each do |round| %&amp;gt;&lt;br /&gt;
        &amp;lt;h3&amp;gt;Round &amp;lt;%= round %&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;#&amp;quot; name= &amp;lt;%= participant.id.to_s + '_' + round.to_s + &amp;quot;Link&amp;quot; %&amp;gt; onClick=&amp;quot;toggleElement('&amp;lt;%= participant.id.to_s +&lt;br /&gt;
                 '_' + round.to_s %&amp;gt;','round &amp;lt;%= round.to_s%&amp;gt; reviews');return false;&amp;quot;&amp;gt;show round &amp;lt;%= round.to_s%&amp;gt; reviews&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;table class=&amp;quot;table table-striped&amp;quot; id=&amp;lt;%= participant.id.to_s + '_' + round.to_s %&amp;gt; &amp;lt;%= style=&amp;quot;display: none;&amp;quot; if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;&amp;gt;&lt;br /&gt;
            &amp;lt;% rscore[:assessments].select{|response| response.round == round}.reverse.uniq{|response| response.map_id}.sort_by{|response| response.map_id}.each_with_index do |review, index| %&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;% review_feedback = nil %&amp;gt;&lt;br /&gt;
                        &amp;lt;%= display_directory_tree(@participant, files, true).html_safe %&amp;gt;&lt;br /&gt;
                    &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;%= review.display_as_html(prefix, index + 1, nil, true) %&amp;gt;&lt;br /&gt;
                &amp;lt;!-- Generate the feedback html --&amp;gt;&lt;br /&gt;
                &amp;lt;% map = FeedbackResponseMap.where(reviewed_object_id: review.id, reviewer_id: participant.id).first&lt;br /&gt;
                    review_feedbacks = map.try :response %&amp;gt;&lt;br /&gt;
                &amp;lt;% if review_feedbacks &amp;amp;&amp;amp; !review_feedbacks.empty? %&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_feedbacks.first.id %&amp;gt; or&lt;br /&gt;
                    &amp;lt;%= link_to &amp;quot;Edit&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'edit', :id =&amp;gt; review_feedbacks.first.id, :return =&amp;gt; &amp;quot;feedback&amp;quot; %&amp;gt; feedback for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                &amp;lt;% else %&amp;gt;                   &lt;br /&gt;
                    &amp;lt;%= link_to &amp;quot;Give feedback&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'new_feedback', :id =&amp;gt; review.id %&amp;gt; for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add javascript to tabbed review so it can be hidden or shown by clicking the show/hide reviews.&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  toggle_tag_prompt = function() {&lt;br /&gt;
    $('.tag_prompt_container').toggle();&lt;br /&gt;
  };&lt;br /&gt;
  $( document ).ready(function() {&lt;br /&gt;
    $('#tag_prompt_toggler').click(function () {&lt;br /&gt;
      if ($('#tag_prompt_toggler').text() == &amp;quot;hide tags&amp;quot;)&lt;br /&gt;
        $('#tag_prompt_toggler').text(&amp;quot;show tags&amp;quot;)&lt;br /&gt;
      else&lt;br /&gt;
        $('#tag_prompt_toggler').text(&amp;quot;hide tags&amp;quot;)&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add statistic view to student end by using the team_review_statistics.html.erb file.&lt;br /&gt;
'''app/views/grades/_participant.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;TR id=&amp;quot;&amp;lt;%= prefix %&amp;gt;_reviews&amp;quot; style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/team_review_statistics', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :pscore =&amp;gt; pscore} %&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&lt;br /&gt;
    &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if @assignment.is_answer_tagging_allowed %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;spn_qsttog&amp;quot; id=&amp;quot;tag_prompt_toggler&amp;quot; title=&amp;quot;Click to display/hide tags&amp;quot; onclick=&amp;quot;toggle_tag_prompt()&amp;quot;&amp;gt;hide tags&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''app/views/grades/_team_review_statistics.html.erb''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td colspan=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;% if rscore and rscore[:assessments].length &amp;gt; 0 %&amp;gt;&lt;br /&gt;
    &amp;lt;%flag_varying_rubrics=false%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@@ -25,6 +29,9 @@&lt;br /&gt;
    &amp;lt;%if flag_varying_rubrics==false%&amp;gt;&lt;br /&gt;
        &amp;lt;%= render :partial =&amp;gt; 'grades/review_table', :locals =&amp;gt; { :ctrl =&amp;gt; 'review', :caction =&amp;gt; 'view_review', :symbol =&amp;gt; &amp;quot;review&amp;quot;.to_sym, :prefix =&amp;gt; prefix, :assignment =&amp;gt; participant.assignment, :reviews =&amp;gt; rscore[:assessments], :collabel =&amp;gt; &amp;quot;Review&amp;quot;, :rowlabel =&amp;gt; &amp;quot;Reviewer&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;/tr&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;    &lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Instructor End===&lt;br /&gt;
&lt;br /&gt;
* Create new method view2 for response_controller&lt;br /&gt;
&lt;br /&gt;
''' app/controllers/response_controller.rb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def view2&lt;br /&gt;
    @response = Response.find(params[:id])&lt;br /&gt;
    @map = @response.map&lt;br /&gt;
    set_content2&lt;br /&gt;
    render &amp;quot;response/view&amp;quot;&lt;br /&gt;
  end &lt;br /&gt;
......&lt;br /&gt;
......&lt;br /&gt;
    @participant = @map.reviewer&lt;br /&gt;
......&lt;br /&gt;
def set_content2(new_response = false)&lt;br /&gt;
    @contributor = @map.contributor&lt;br /&gt;
    members = TeamsUser.where(team_id: params[:team])&lt;br /&gt;
    @user = members.first&lt;br /&gt;
    @participant = AssignmentParticipant.where(user_id: @user.user_id, parent_id: params[:assignment]).first&lt;br /&gt;
@@ -264,7 +273,9 @@ def set_content(new_response = false)&lt;br /&gt;
    @questions = retrieve_questions questionnaires, @assignment.id&lt;br /&gt;
    # @pscore has the newest versions of response for each response map, and only one for each response map (unless it is vary rubric by round)&lt;br /&gt;
    @pscore = @participant.scores(@questions)&lt;br /&gt;
    @reviewer = @map.reviewer&lt;br /&gt;
    @round = params[:round]&lt;br /&gt;
  end  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                &amp;lt;% prefix = nil %&amp;gt;&lt;br /&gt;
......&lt;br /&gt;
&amp;lt;% if controller.action_name == &amp;quot;view_my_scores&amp;quot;%&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Generate the feedback html --&amp;gt;&lt;br /&gt;
                    &amp;lt;% map = FeedbackResponseMap.where(reviewed_object_id: review.id, reviewer_id: participant.id).first&lt;br /&gt;
                        review_feedbacks = map.try :response %&amp;gt;&lt;br /&gt;
                    &amp;lt;% if review_feedbacks &amp;amp;&amp;amp; !review_feedbacks.empty? %&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_feedbacks.first.id %&amp;gt; or&lt;br /&gt;
                        &amp;lt;%= link_to &amp;quot;Edit&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'edit', :id =&amp;gt; review_feedbacks.first.id, :return =&amp;gt; &amp;quot;feedback&amp;quot; %&amp;gt; feedback for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                    &amp;lt;% else %&amp;gt;&lt;br /&gt;
                        &amp;lt;%= link_to &amp;quot;Give feedback&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'new_feedback', :id =&amp;gt; review.id %&amp;gt; for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                    &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;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;/table&amp;gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' app/views/grades/_view_heatgrid.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                      &amp;lt;th class=&amp;quot;sorter-false&amp;quot;&amp;gt; &amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;../response/view2?id=&amp;lt;%= review.id.to_s %&amp;gt;&amp;amp;&amp;amp;team=&amp;lt;%= @team.id %&amp;gt;&amp;amp;&amp;amp;round=&amp;lt;%= vm.round.to_s %&amp;gt;&amp;amp;&amp;amp;assignment=&amp;lt;%= @assignment.id %&amp;gt;&amp;quot;  &lt;br /&gt;
data-toggle=&amp;quot;tooltip&amp;quot; data-placement=&amp;quot;right&amp;quot; title=&amp;quot;Click to see details&amp;quot;&amp;gt;&amp;lt;%= user_name.to_s %&amp;gt;&amp;lt;/a&amp;gt;  &amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' app/views/response/view.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view2&amp;quot; %&amp;gt;&lt;br /&gt;
    &amp;lt;% file_url = nil %&amp;gt;&lt;br /&gt;
    &amp;lt;%= @response.display_as_html(nil, nil, file_url) %&amp;gt;&lt;br /&gt;
    &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;% else %&amp;gt;&lt;br /&gt;
    &amp;lt;TR style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; @participant, :rscore =&amp;gt; @pscore[:review], :reviewer =&amp;gt; @reviewer, :round =&amp;gt; @round} %&amp;gt;&lt;br /&gt;
        &amp;lt;/TD&amp;gt;&lt;br /&gt;
    &amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* show right round for instructor-end&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        &amp;lt;% next if round.to_s != @round.to_s %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Create construct_instructor2_html in order to not show review number&lt;br /&gt;
''' app/models/response.rb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if prefix == &amp;quot;instructor&amp;quot;&lt;br /&gt;
      self_id = self.id.to_s&lt;br /&gt;
      code = construct_instructor2_html identifier, self_id, count&lt;br /&gt;
    elsif prefix # has prefix means view_score page in instructor end&lt;br /&gt;
      self_id = prefix + '_' + self.id.to_s&lt;br /&gt;
      code = construct_instructor_html identifier, self_id, count&lt;br /&gt;
......&lt;br /&gt;
def construct_instructor2_html identifier, self_id, count&lt;br /&gt;
    identifier += '&amp;lt;table width=&amp;quot;100%&amp;quot;&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;tr&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;td align=&amp;quot;left&amp;quot; width=&amp;quot;70%&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Review ' + '&amp;lt;/b&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'\&lt;br /&gt;
						 '&amp;lt;a href=&amp;quot;#&amp;quot; name= &amp;quot;review_' + self_id + 'Link&amp;quot; onClick=&amp;quot;toggleElement(' + &amp;quot;'review_&amp;quot; + self_id + &amp;quot;','review'&amp;quot; + ');return false;&amp;quot;&amp;gt;hide review&amp;lt;/a&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;/td&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Last Reviewed:&amp;lt;/b&amp;gt;'\&lt;br /&gt;
						 &amp;quot;&amp;lt;span&amp;gt;#{(self.updated_at.nil? ? 'Not available' : self.updated_at.strftime('%A %B %d %Y, %I:%M%p'))}&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;\&lt;br /&gt;
						 '&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;'&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;Round &amp;lt;%= round %&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot; %&amp;gt;&lt;br /&gt;
                &amp;lt;a href=&amp;quot;#&amp;quot; name= &amp;lt;%= participant.id.to_s + '_' + round.to_s + &amp;quot;Link&amp;quot; %&amp;gt; onClick=&amp;quot;toggleElement('&amp;lt;%= participant.id.to_s + '_' + round.to_s %&amp;gt;','round &amp;lt;%= round.to_s%&amp;gt; reviews');return false;&amp;quot;&amp;gt;show round &amp;lt;%= round.to_s%&amp;gt; reviews&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% if @assignment.is_answer_tagging_allowed %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;spn_qsttog&amp;quot; id=&amp;quot;tag_prompt_toggler&amp;quot; title=&amp;quot;Click to display/hide tags&amp;quot; onclick=&amp;quot;toggle_tag_prompt()&amp;quot;&amp;gt;hide tags&amp;lt;/span&amp;gt;&lt;br /&gt;
@@ -37,6 +39,7 @@&lt;br /&gt;
                &amp;lt;% review_feedback = nil %&amp;gt;&lt;br /&gt;
                &amp;lt;% count = count + 1 %&amp;gt;&lt;br /&gt;
                &amp;lt;% prefix = nil %&amp;gt;&lt;br /&gt;
                &amp;lt;% prefix = &amp;quot;instructor&amp;quot; if controller.action_name == &amp;quot;view2&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Show just one review in instructor-end&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% rounds.each do |round| %&amp;gt;&lt;br /&gt;
        &amp;lt;% if controller.action_name == &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
        &amp;lt;% next if round.to_s != @round.to_s %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% if controller.action_name != &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;Round &amp;lt;%= round %&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot; %&amp;gt;&lt;br /&gt;
@@ -33,8 +35,13 @@&lt;br /&gt;
        &amp;lt;% if @assignment.is_answer_tagging_allowed %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;spn_qsttog&amp;quot; id=&amp;quot;tag_prompt_toggler&amp;quot; title=&amp;quot;Click to display/hide tags&amp;quot; onclick=&amp;quot;toggle_tag_prompt()&amp;quot;&amp;gt;hide tags&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% if controller.action_name != &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
        &amp;lt;table class=&amp;quot;table table-striped&amp;quot; id=&amp;lt;%= participant.id.to_s + '_' + round.to_s %&amp;gt; &amp;lt;%= style=&amp;quot;display: none;&amp;quot; if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
            &amp;lt;% rscore[:assessments].select{|response| response.round == round}.reverse.uniq{|response| response.map_id}.sort_by{|response| response.map_id}.each_with_index do |review, index| %&amp;gt;&lt;br /&gt;
                &amp;lt;% if controller.action_name == &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
                &amp;lt;% next if review.reviewer != @reviewer || count &amp;gt; 0 %&amp;gt;&lt;br /&gt;
                &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;% review_feedback = nil %&amp;gt;&lt;br /&gt;
                &amp;lt;% count = count + 1 %&amp;gt;&lt;br /&gt;
@@ -72,7 +79,9 @@&lt;br /&gt;
                &amp;lt;/td&amp;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;% if controller.action_name != &amp;quot;view2&amp;quot;%&amp;gt;    &lt;br /&gt;
        &amp;lt;/table&amp;gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;% else %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Test files'''==&lt;br /&gt;
&lt;br /&gt;
*tabbed_review_spec.rb created and added 3 test cases for alternate view of reviews&lt;br /&gt;
'''spec/features/tabbed_review_spec.rb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require &amp;quot;spec_helper&amp;quot;&lt;br /&gt;
require 'rspec'&lt;br /&gt;
describe &amp;quot;alternate view of reviews&amp;quot; do&lt;br /&gt;
    before(:each) do&lt;br /&gt;
      assignment1 = create(:assignment, name: &amp;quot;111&amp;quot;, directory_path: 'test_assignment')&lt;br /&gt;
      create_list(:participant, 3)&lt;br /&gt;
      create(:assignment_node)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;submission&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;review&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;metareview&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;drop_topic&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;signup&amp;quot;)&lt;br /&gt;
      create(:deadline_type, name: &amp;quot;team_formation&amp;quot;)&lt;br /&gt;
      create(:deadline_right)&lt;br /&gt;
      create(:deadline_right, name: 'Late')&lt;br /&gt;
      create(:deadline_right, name: 'OK')&lt;br /&gt;
      create(:assignment_due_date, deadline_type: DeadlineType.where(name: 'review').first, due_at: Time.now.in_time_zone + 1.day)&lt;br /&gt;
      create(:topic)&lt;br /&gt;
      create(:topic, topic_name: &amp;quot;TestReview&amp;quot;)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).first)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).second)&lt;br /&gt;
      create(:assignment_team)&lt;br /&gt;
      create(:team_user, user: User.where(role_id: 2).third, team: AssignmentTeam.second)&lt;br /&gt;
      create(:signed_up_team)&lt;br /&gt;
      create(:signed_up_team, team_id: 2, topic: SignUpTopic.second)&lt;br /&gt;
      create(:assignment_questionnaire)&lt;br /&gt;
      create(:question)&lt;br /&gt;
      # create(:review_response_map, reviewer_id: User.where(role_id: 2).third.id)&lt;br /&gt;
      # create(:review_response_map, reviewer_id: User.where(role_id: 2).second.id, reviewee: AssignmentTeam.second)&lt;br /&gt;
      # sleep(10000)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
  def load_alternate&lt;br /&gt;
    login_as('student2064')&lt;br /&gt;
    expect(page).to have_content &amp;quot;User: student2064&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;111&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    click_link &amp;quot;111&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Submit or Review work for 111&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Alternate View&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    click_link &amp;quot;Alternate View&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Contributor&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  it &amp;quot;shows the correct alternate view&amp;quot; do&lt;br /&gt;
    # Load questionnaire with generic setup&lt;br /&gt;
    load_alternate&lt;br /&gt;
    expect(page).to have_content &amp;quot;Contributor&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Stats&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Submitted work&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Author Feedback&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Teammate Review&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Final Score&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Range&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Average&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;student2064&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'hide stats' &lt;br /&gt;
    expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'show submission' &lt;br /&gt;
    #expect(page).to have_css &amp;quot;a[href='#']&amp;quot;, text: 'show reviews' &lt;br /&gt;
    #page.should have_selector('table tr', text: 'show reviews')&lt;br /&gt;
    #find(:xpath, &amp;quot;//tr[contains(.,'show reviews')]/td/a&amp;quot;, :text =&amp;gt; 'show reviews').click&lt;br /&gt;
    #expect(page).to have_content &amp;quot;Writeup&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
      #describe &amp;quot;grades/participant&amp;quot;, :type =&amp;gt; :view do&lt;br /&gt;
        #it 'exists' do&lt;br /&gt;
          #find(:xpath, &amp;quot;//tr[contains(.,'show reviews')]/td/a&amp;quot;, :text =&amp;gt; 'show reviews').click&lt;br /&gt;
        #end&lt;br /&gt;
      #end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
describe &amp;quot;test for instructor&amp;quot; do&lt;br /&gt;
  before (:each) do&lt;br /&gt;
    create(:instructor)&lt;br /&gt;
    create(:assignment, course: nil, name: 'Test Assignment')&lt;br /&gt;
    assignment_id = Assignment.where(name: 'Test Assignment')[0].id&lt;br /&gt;
&lt;br /&gt;
    assignment_team = create(:assignment_team)&lt;br /&gt;
&lt;br /&gt;
    create(:team_user)&lt;br /&gt;
    login_as 'instructor6'&lt;br /&gt;
    visit &amp;quot;/grades/view?id=#{assignment_id}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  it &amp;quot;shows summary report&amp;quot; do&lt;br /&gt;
    expect(page).to have_content &amp;quot;Summary report for Test Assignment&amp;quot;&lt;br /&gt;
    expect(page).to have_content &amp;quot;Show all teams&amp;quot;&lt;br /&gt;
    page.first(:xpath, &amp;quot;//a[contains(@href,'#')]&amp;quot;).click&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
describe &amp;quot;test for instructor&amp;quot; do&lt;br /&gt;
  before (:each) do&lt;br /&gt;
    create(:instructor)&lt;br /&gt;
    @assignment = create(:assignment, name: &amp;quot;Test Assignment&amp;quot;, directory_path: 'test_assignment')&lt;br /&gt;
    assignment_id = Assignment.where(name: 'Test Assignment')[0].id&lt;br /&gt;
    assignment_team = create(:assignment_team)&lt;br /&gt;
    create(:team_user)&lt;br /&gt;
    team_id = AssignmentTeam.first.id.to_s&lt;br /&gt;
    create(:topic)&lt;br /&gt;
    create(:topic, topic_name: &amp;quot;TestReview&amp;quot;)&lt;br /&gt;
    create(:assignment_questionnaire)&lt;br /&gt;
    create(:question)&lt;br /&gt;
    create(:signed_up_team)&lt;br /&gt;
    create(:signed_up_team, team_id: 2, topic: SignUpTopic.second)&lt;br /&gt;
    create(:review)&lt;br /&gt;
    review_id = Review.first.id.to_s&lt;br /&gt;
    create(:review_response_map, reviewer_id: User.where(role_id: 2).third.id)&lt;br /&gt;
    login_as 'instructor6'&lt;br /&gt;
    visit &amp;quot;/response/view2?id=#{review_id}&amp;amp;&amp;amp;team=#{team_id}&amp;amp;&amp;amp;round=1&amp;amp;&amp;amp;assignment=#{assignment_id}&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
  it &amp;quot;can go to review details&amp;quot; do&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
#[https://github.com/aranne/expertiza Forked Issue on Github]&lt;br /&gt;
#Weiran Fu (@ncsu.edu)&lt;br /&gt;
#Qingyan Wang (qwang20@ncsu.edu)&lt;br /&gt;
#Hongli Wang (hwang85@ncsu.edu)&lt;br /&gt;
#'''Mentor:''' Mohit Jain (mjain6@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza on GitHub]&lt;br /&gt;
#[http://expertiza.ncsu.edu/ The live Expertiza website] &lt;br /&gt;
#[http://wikis.lib.ncsu.edu/index.php/Expertiza Expertiza project documentation wiki]&lt;br /&gt;
#[https://github.com/WintersLt/expertiza GitHub Project Repository Fork]&lt;br /&gt;
#[http://bit.ly/myexpertiza  Demo link]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Hwang85</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1966._Tabbed_reviews_partial_file_refactor_for_displaying_the_alternate_view_of_reviews&amp;diff=125927</id>
		<title>CSC/ECE 517 Fall 2019 - E1966. Tabbed reviews partial file refactor for displaying the alternate view of reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1966._Tabbed_reviews_partial_file_refactor_for_displaying_the_alternate_view_of_reviews&amp;diff=125927"/>
		<updated>2019-10-28T19:23:17Z</updated>

		<summary type="html">&lt;p&gt;Hwang85: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''About Expertiza''' ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a open source project currently for CSC517 instructor and students forming groups, submit work, review, and view grades. The project is based on Ruby on Rails framework and the code is on Github: https://github.com/expertiza/expertiza. Expertiza serves wiki page, collecting information of all internal information and updates of all versions.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
===Issue details===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) On student-end, Expertiza use grades/_reviews.html.erb partial to display reviewers, scores and review details; on instructor-end, it uses response controller and model to generate reviews page (the tables and charts are generated by grades/_team_statistics.html.erb (display reviewers and scores) in Statistics tab). We need to use the same kinds of partials in instructor-end and student-end, either _reviews partial or tabbed_reviews partial.&lt;br /&gt;
&lt;br /&gt;
2) Give Feedback link at view_my_score at student-end should not appear at folded view.&lt;br /&gt;
&lt;br /&gt;
===What to do===&lt;br /&gt;
1) We need to use the same kinds of partials in instructor-end and student-end.&lt;br /&gt;
&lt;br /&gt;
2) Give Feedback link at view_my_score should appear at the bottom of expanded view.&lt;br /&gt;
&lt;br /&gt;
== '''Solution''' ==&lt;br /&gt;
===Student End===&lt;br /&gt;
&lt;br /&gt;
* In student end, add render partial to tabbed reviews.&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_participant.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;TR id=&amp;quot;&amp;lt;%= prefix %&amp;gt;_reviews&amp;quot; style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&amp;lt;%= render :partial=&amp;gt;'grades/reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Add feed back link in student end view.&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;% rounds.each do |round| %&amp;gt;&lt;br /&gt;
        &amp;lt;h3&amp;gt;Round &amp;lt;%= round %&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;#&amp;quot; name= &amp;lt;%= participant.id.to_s + '_' + round.to_s + &amp;quot;Link&amp;quot; %&amp;gt; onClick=&amp;quot;toggleElement('&amp;lt;%= participant.id.to_s +&lt;br /&gt;
                 '_' + round.to_s %&amp;gt;','round &amp;lt;%= round.to_s%&amp;gt; reviews');return false;&amp;quot;&amp;gt;show round &amp;lt;%= round.to_s%&amp;gt; reviews&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;table class=&amp;quot;table table-striped&amp;quot; id=&amp;lt;%= participant.id.to_s + '_' + round.to_s %&amp;gt; &amp;lt;%= style=&amp;quot;display: none;&amp;quot; if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;&amp;gt;&lt;br /&gt;
            &amp;lt;% rscore[:assessments].select{|response| response.round == round}.reverse.uniq{|response| response.map_id}.sort_by{|response| response.map_id}.each_with_index do |review, index| %&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;% review_feedback = nil %&amp;gt;&lt;br /&gt;
                        &amp;lt;%= display_directory_tree(@participant, files, true).html_safe %&amp;gt;&lt;br /&gt;
                    &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;%= review.display_as_html(prefix, index + 1, nil, true) %&amp;gt;&lt;br /&gt;
                &amp;lt;!-- Generate the feedback html --&amp;gt;&lt;br /&gt;
                &amp;lt;% map = FeedbackResponseMap.where(reviewed_object_id: review.id, reviewer_id: participant.id).first&lt;br /&gt;
                    review_feedbacks = map.try :response %&amp;gt;&lt;br /&gt;
                &amp;lt;% if review_feedbacks &amp;amp;&amp;amp; !review_feedbacks.empty? %&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_feedbacks.first.id %&amp;gt; or&lt;br /&gt;
                    &amp;lt;%= link_to &amp;quot;Edit&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'edit', :id =&amp;gt; review_feedbacks.first.id, :return =&amp;gt; &amp;quot;feedback&amp;quot; %&amp;gt; feedback for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                &amp;lt;% else %&amp;gt;                   &lt;br /&gt;
                    &amp;lt;%= link_to &amp;quot;Give feedback&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'new_feedback', :id =&amp;gt; review.id %&amp;gt; for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add javascript to tabbed review so it can be hidden or shown by clicking the show/hide reviews.&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  toggle_tag_prompt = function() {&lt;br /&gt;
    $('.tag_prompt_container').toggle();&lt;br /&gt;
  };&lt;br /&gt;
  $( document ).ready(function() {&lt;br /&gt;
    $('#tag_prompt_toggler').click(function () {&lt;br /&gt;
      if ($('#tag_prompt_toggler').text() == &amp;quot;hide tags&amp;quot;)&lt;br /&gt;
        $('#tag_prompt_toggler').text(&amp;quot;show tags&amp;quot;)&lt;br /&gt;
      else&lt;br /&gt;
        $('#tag_prompt_toggler').text(&amp;quot;hide tags&amp;quot;)&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add statistic view to student end by using the team_review_statistics.html.erb file.&lt;br /&gt;
'''app/views/grades/_participant.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;TR id=&amp;quot;&amp;lt;%= prefix %&amp;gt;_reviews&amp;quot; style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/team_review_statistics', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :pscore =&amp;gt; pscore} %&amp;gt;&lt;br /&gt;
    &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&lt;br /&gt;
    &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if @assignment.is_answer_tagging_allowed %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;spn_qsttog&amp;quot; id=&amp;quot;tag_prompt_toggler&amp;quot; title=&amp;quot;Click to display/hide tags&amp;quot; onclick=&amp;quot;toggle_tag_prompt()&amp;quot;&amp;gt;hide tags&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''app/views/grades/_team_review_statistics.html.erb''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td colspan=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;% if rscore and rscore[:assessments].length &amp;gt; 0 %&amp;gt;&lt;br /&gt;
    &amp;lt;%flag_varying_rubrics=false%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@@ -25,6 +29,9 @@&lt;br /&gt;
    &amp;lt;%if flag_varying_rubrics==false%&amp;gt;&lt;br /&gt;
        &amp;lt;%= render :partial =&amp;gt; 'grades/review_table', :locals =&amp;gt; { :ctrl =&amp;gt; 'review', :caction =&amp;gt; 'view_review', :symbol =&amp;gt; &amp;quot;review&amp;quot;.to_sym, :prefix =&amp;gt; prefix, :assignment =&amp;gt; participant.assignment, :reviews =&amp;gt; rscore[:assessments], :collabel =&amp;gt; &amp;quot;Review&amp;quot;, :rowlabel =&amp;gt; &amp;quot;Reviewer&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;/tr&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;    &lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Instructor End===&lt;br /&gt;
&lt;br /&gt;
* Create new method view2 for response_controller&lt;br /&gt;
&lt;br /&gt;
''' app/controllers/response_controller.rb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def view2&lt;br /&gt;
    @response = Response.find(params[:id])&lt;br /&gt;
    @map = @response.map&lt;br /&gt;
    set_content2&lt;br /&gt;
    render &amp;quot;response/view&amp;quot;&lt;br /&gt;
  end &lt;br /&gt;
......&lt;br /&gt;
......&lt;br /&gt;
    @participant = @map.reviewer&lt;br /&gt;
......&lt;br /&gt;
def set_content2(new_response = false)&lt;br /&gt;
    @contributor = @map.contributor&lt;br /&gt;
    members = TeamsUser.where(team_id: params[:team])&lt;br /&gt;
    @user = members.first&lt;br /&gt;
    @participant = AssignmentParticipant.where(user_id: @user.user_id, parent_id: params[:assignment]).first&lt;br /&gt;
@@ -264,7 +273,9 @@ def set_content(new_response = false)&lt;br /&gt;
    @questions = retrieve_questions questionnaires, @assignment.id&lt;br /&gt;
    # @pscore has the newest versions of response for each response map, and only one for each response map (unless it is vary rubric by round)&lt;br /&gt;
    @pscore = @participant.scores(@questions)&lt;br /&gt;
    @reviewer = @map.reviewer&lt;br /&gt;
    @round = params[:round]&lt;br /&gt;
  end  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                &amp;lt;% prefix = nil %&amp;gt;&lt;br /&gt;
......&lt;br /&gt;
&amp;lt;% if controller.action_name == &amp;quot;view_my_scores&amp;quot;%&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Generate the feedback html --&amp;gt;&lt;br /&gt;
                    &amp;lt;% map = FeedbackResponseMap.where(reviewed_object_id: review.id, reviewer_id: participant.id).first&lt;br /&gt;
                        review_feedbacks = map.try :response %&amp;gt;&lt;br /&gt;
                    &amp;lt;% if review_feedbacks &amp;amp;&amp;amp; !review_feedbacks.empty? %&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_feedbacks.first.id %&amp;gt; or&lt;br /&gt;
                        &amp;lt;%= link_to &amp;quot;Edit&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'edit', :id =&amp;gt; review_feedbacks.first.id, :return =&amp;gt; &amp;quot;feedback&amp;quot; %&amp;gt; feedback for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                    &amp;lt;% else %&amp;gt;&lt;br /&gt;
                        &amp;lt;%= link_to &amp;quot;Give feedback&amp;quot;, :controller =&amp;gt; 'response', :action =&amp;gt; 'new_feedback', :id =&amp;gt; review.id %&amp;gt; for Review &amp;lt;%= count %&amp;gt;&lt;br /&gt;
                    &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;/td&amp;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;/table&amp;gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' app/views/grades/_view_heatgrid.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                      &amp;lt;th class=&amp;quot;sorter-false&amp;quot;&amp;gt; &amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;../response/view2?id=&amp;lt;%= review.id.to_s %&amp;gt;&amp;amp;&amp;amp;team=&amp;lt;%= @team.id %&amp;gt;&amp;amp;&amp;amp;round=&amp;lt;%= vm.round.to_s %&amp;gt;&amp;amp;&amp;amp;assignment=&amp;lt;%= @assignment.id %&amp;gt;&amp;quot;  &lt;br /&gt;
data-toggle=&amp;quot;tooltip&amp;quot; data-placement=&amp;quot;right&amp;quot; title=&amp;quot;Click to see details&amp;quot;&amp;gt;&amp;lt;%= user_name.to_s %&amp;gt;&amp;lt;/a&amp;gt;  &amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' app/views/response/view.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view2&amp;quot; %&amp;gt;&lt;br /&gt;
    &amp;lt;% file_url = nil %&amp;gt;&lt;br /&gt;
    &amp;lt;%= @response.display_as_html(nil, nil, file_url) %&amp;gt;&lt;br /&gt;
    &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;% else %&amp;gt;&lt;br /&gt;
    &amp;lt;TR style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; @participant, :rscore =&amp;gt; @pscore[:review], :reviewer =&amp;gt; @reviewer, :round =&amp;gt; @round} %&amp;gt;&lt;br /&gt;
        &amp;lt;/TD&amp;gt;&lt;br /&gt;
    &amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* show right round for instructor-end&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        &amp;lt;% next if round.to_s != @round.to_s %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Create construct_instructor2_html in order to not show review number&lt;br /&gt;
''' app/models/response.rb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if prefix == &amp;quot;instructor&amp;quot;&lt;br /&gt;
      self_id = self.id.to_s&lt;br /&gt;
      code = construct_instructor2_html identifier, self_id, count&lt;br /&gt;
    elsif prefix # has prefix means view_score page in instructor end&lt;br /&gt;
      self_id = prefix + '_' + self.id.to_s&lt;br /&gt;
      code = construct_instructor_html identifier, self_id, count&lt;br /&gt;
......&lt;br /&gt;
def construct_instructor2_html identifier, self_id, count&lt;br /&gt;
    identifier += '&amp;lt;table width=&amp;quot;100%&amp;quot;&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;tr&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;td align=&amp;quot;left&amp;quot; width=&amp;quot;70%&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Review ' + '&amp;lt;/b&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'\&lt;br /&gt;
						 '&amp;lt;a href=&amp;quot;#&amp;quot; name= &amp;quot;review_' + self_id + 'Link&amp;quot; onClick=&amp;quot;toggleElement(' + &amp;quot;'review_&amp;quot; + self_id + &amp;quot;','review'&amp;quot; + ');return false;&amp;quot;&amp;gt;hide review&amp;lt;/a&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;/td&amp;gt;'\&lt;br /&gt;
						 '&amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Last Reviewed:&amp;lt;/b&amp;gt;'\&lt;br /&gt;
						 &amp;quot;&amp;lt;span&amp;gt;#{(self.updated_at.nil? ? 'Not available' : self.updated_at.strftime('%A %B %d %Y, %I:%M%p'))}&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;\&lt;br /&gt;
						 '&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;'&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;Round &amp;lt;%= round %&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot; %&amp;gt;&lt;br /&gt;
                &amp;lt;a href=&amp;quot;#&amp;quot; name= &amp;lt;%= participant.id.to_s + '_' + round.to_s + &amp;quot;Link&amp;quot; %&amp;gt; onClick=&amp;quot;toggleElement('&amp;lt;%= participant.id.to_s + '_' + round.to_s %&amp;gt;','round &amp;lt;%= round.to_s%&amp;gt; reviews');return false;&amp;quot;&amp;gt;show round &amp;lt;%= round.to_s%&amp;gt; reviews&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% if @assignment.is_answer_tagging_allowed %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;spn_qsttog&amp;quot; id=&amp;quot;tag_prompt_toggler&amp;quot; title=&amp;quot;Click to display/hide tags&amp;quot; onclick=&amp;quot;toggle_tag_prompt()&amp;quot;&amp;gt;hide tags&amp;lt;/span&amp;gt;&lt;br /&gt;
@@ -37,6 +39,7 @@&lt;br /&gt;
                &amp;lt;% review_feedback = nil %&amp;gt;&lt;br /&gt;
                &amp;lt;% count = count + 1 %&amp;gt;&lt;br /&gt;
                &amp;lt;% prefix = nil %&amp;gt;&lt;br /&gt;
                &amp;lt;% prefix = &amp;quot;instructor&amp;quot; if controller.action_name == &amp;quot;view2&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Show just one review in instructor-end&lt;br /&gt;
'''app/views/grades/_tabbed_reviews.html.erb'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% rounds.each do |round| %&amp;gt;&lt;br /&gt;
        &amp;lt;% if controller.action_name == &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
        &amp;lt;% next if round.to_s != @round.to_s %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% if controller.action_name != &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;Round &amp;lt;%= round %&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;% if controller.action_name != &amp;quot;view_my_scores&amp;quot; %&amp;gt;&lt;br /&gt;
@@ -33,8 +35,13 @@&lt;br /&gt;
        &amp;lt;% if @assignment.is_answer_tagging_allowed %&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;spn_qsttog&amp;quot; id=&amp;quot;tag_prompt_toggler&amp;quot; title=&amp;quot;Click to display/hide tags&amp;quot; onclick=&amp;quot;toggle_tag_prompt()&amp;quot;&amp;gt;hide tags&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% if controller.action_name != &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
        &amp;lt;table class=&amp;quot;table table-striped&amp;quot; id=&amp;lt;%= participant.id.to_s + '_' + round.to_s %&amp;gt; &amp;lt;%= style=&amp;quot;display: none;&amp;quot; if controller.action_name != &amp;quot;view_my_scores&amp;quot;%&amp;gt;&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
            &amp;lt;% rscore[:assessments].select{|response| response.round == round}.reverse.uniq{|response| response.map_id}.sort_by{|response| response.map_id}.each_with_index do |review, index| %&amp;gt;&lt;br /&gt;
                &amp;lt;% if controller.action_name == &amp;quot;view2&amp;quot;%&amp;gt;&lt;br /&gt;
                &amp;lt;% next if review.reviewer != @reviewer || count &amp;gt; 0 %&amp;gt;&lt;br /&gt;
                &amp;lt;% end %&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;% review_feedback = nil %&amp;gt;&lt;br /&gt;
                &amp;lt;% count = count + 1 %&amp;gt;&lt;br /&gt;
@@ -72,7 +79,9 @@&lt;br /&gt;
                &amp;lt;/td&amp;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;% if controller.action_name != &amp;quot;view2&amp;quot;%&amp;gt;    &lt;br /&gt;
        &amp;lt;/table&amp;gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;% else %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Test files'''==&lt;br /&gt;
&lt;br /&gt;
* what test done&lt;br /&gt;
::* how to do that&lt;br /&gt;
&lt;br /&gt;
'''path to add '''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
test &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
#[https://github.com/aranne/expertiza Forked Issue on Github]&lt;br /&gt;
#Weiran Fu (@ncsu.edu)&lt;br /&gt;
#Qingyan Wang (qwang20@ncsu.edu)&lt;br /&gt;
#Hongli Wang (hwang85@ncsu.edu)&lt;br /&gt;
#'''Mentor:''' Mohit Jain (mjain6@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza on GitHub]&lt;br /&gt;
#[http://expertiza.ncsu.edu/ The live Expertiza website] &lt;br /&gt;
#[http://wikis.lib.ncsu.edu/index.php/Expertiza Expertiza project documentation wiki]&lt;br /&gt;
#[https://github.com/WintersLt/expertiza GitHub Project Repository Fork]&lt;br /&gt;
#[http://bit.ly/myexpertiza  Demo link]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Hwang85</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1966._Tabbed_reviews_partial_file_refactor_for_displaying_the_alternate_view_of_reviews&amp;diff=125884</id>
		<title>CSC/ECE 517 Fall 2019 - E1966. Tabbed reviews partial file refactor for displaying the alternate view of reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1966._Tabbed_reviews_partial_file_refactor_for_displaying_the_alternate_view_of_reviews&amp;diff=125884"/>
		<updated>2019-10-28T17:28:12Z</updated>

		<summary type="html">&lt;p&gt;Hwang85: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''About Expertiza''' ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a open source project currently for CSC517 instructor and students forming groups, submit work, review, and view grades. The project is based on Ruby on Rails framework and the code is on Github: https://github.com/expertiza/expertiza. Expertiza serves wiki page, collecting information of all internal information and updates of all versions.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
===Issue details===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) On student-end, Expertiza use grades/_reviews.html.erb partial to display reviewers, scores and review details; on instructor-end, it uses response controller and model to generate reviews page (the tables and charts are generated by grades/_team_statistics.html.erb (display reviewers and scores) in Statistics tab). We need to use the same kinds of partials in instructor-end and student-end, either _reviews partial or tabbed_reviews partial.&lt;br /&gt;
&lt;br /&gt;
2) Give Feedback link at view_my_score at student-end should not appear at folded view.&lt;br /&gt;
&lt;br /&gt;
===What to do===&lt;br /&gt;
1) We need to use the same kinds of partials in instructor-end and student-end.&lt;br /&gt;
&lt;br /&gt;
2) Give Feedback link at view_my_score should appear at the bottom of expanded view.&lt;br /&gt;
&lt;br /&gt;
== '''Solution''' ==&lt;br /&gt;
===Student End===&lt;br /&gt;
&lt;br /&gt;
* In student end, add render partial to tabbed reviews.&lt;br /&gt;
'''app/views/grades/_participant.html.erb '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;TR id=&amp;quot;&amp;lt;%= prefix %&amp;gt;_reviews&amp;quot; style=&amp;quot;display:none; background-color: white;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&amp;lt;%= render :partial=&amp;gt;'grades/reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
    &amp;lt;TD COLSPAN=&amp;quot;10&amp;quot;&amp;gt;&amp;lt;%= render :partial=&amp;gt;'grades/tabbed_reviews', :locals =&amp;gt; {:prefix =&amp;gt; 'user', :participant =&amp;gt; participant, :rscore =&amp;gt; pscore[:review]} %&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''path to add '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
to do &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''path to add '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
to do&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''path to add '''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 to do &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Test files'''==&lt;br /&gt;
&lt;br /&gt;
* what test done&lt;br /&gt;
::* how to do that&lt;br /&gt;
&lt;br /&gt;
'''path to add '''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
test &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
#[https://github.com/aranne/expertiza Forked Issue on Github]&lt;br /&gt;
#Weiran Fu (@ncsu.edu)&lt;br /&gt;
#Qingyan Wang (qwang20@ncsu.edu)&lt;br /&gt;
#Hongli Wang (hwang85@ncsu.edu)&lt;br /&gt;
#'''Mentor:''' Mohit Jain (mjain6@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza on GitHub]&lt;br /&gt;
#[http://expertiza.ncsu.edu/ The live Expertiza website] &lt;br /&gt;
#[http://wikis.lib.ncsu.edu/index.php/Expertiza Expertiza project documentation wiki]&lt;br /&gt;
#[https://github.com/WintersLt/expertiza GitHub Project Repository Fork]&lt;br /&gt;
#[http://bit.ly/myexpertiza  Demo link]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Hwang85</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1966._Tabbed_reviews_partial_file_refactor_for_displaying_the_alternate_view_of_reviews&amp;diff=125664</id>
		<title>CSC/ECE 517 Fall 2019 - E1966. Tabbed reviews partial file refactor for displaying the alternate view of reviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1966._Tabbed_reviews_partial_file_refactor_for_displaying_the_alternate_view_of_reviews&amp;diff=125664"/>
		<updated>2019-10-27T20:39:23Z</updated>

		<summary type="html">&lt;p&gt;Hwang85: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''About Expertiza''' ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a open source project currently for CSC517 instructor and students forming groups, submit work, review, and view grades. The project is based on Ruby on Rails framework and the code is on Github: https://github.com/expertiza/expertiza. Expertiza serves wiki page, collecting information of all internal information and updates of all versions.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
===Issue details===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) On student-end, Expertiza use grades/_reviews.html.erb partial to display reviewers, scores and review details; on instructor-end, it uses response controller and model to generate reviews page (the tables and charts are generated by grades/_team_statistics.html.erb (display reviewers and scores) in Statistics tab). We need to use the same kinds of partials in instructor-end and student-end, either _reviews partial or tabbed_reviews partial.&lt;br /&gt;
&lt;br /&gt;
2) Give Feedback link at view_my_score at student-end should not appear at folded view.&lt;br /&gt;
&lt;br /&gt;
===What to do===&lt;br /&gt;
1) We need to use the same kinds of partials in instructor-end and student-end.&lt;br /&gt;
&lt;br /&gt;
2) Give Feedback link at view_my_score should appear at the bottom of expanded view.&lt;br /&gt;
&lt;br /&gt;
== '''Solution''' ==&lt;br /&gt;
&lt;br /&gt;
* &lt;br /&gt;
'''path to add '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
to do&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''path to add '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
to do &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''path to add '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
to do&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''path to add '''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 to do &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Test files'''==&lt;br /&gt;
&lt;br /&gt;
* what test done&lt;br /&gt;
::* how to do that&lt;br /&gt;
&lt;br /&gt;
'''path to add '''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
test &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Team Information'''==&lt;br /&gt;
#[https://github.com/aranne/expertiza Forked Issue on Github]&lt;br /&gt;
#Weiran Fu (@ncsu.edu)&lt;br /&gt;
#Qingyan Wang (qwang20@ncsu.edu)&lt;br /&gt;
#Hongli Wang (hwang85@ncsu.edu)&lt;br /&gt;
#'''Mentor:''' Mohit Jain (mjain6@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza on GitHub]&lt;br /&gt;
#[http://expertiza.ncsu.edu/ The live Expertiza website] &lt;br /&gt;
#[http://wikis.lib.ncsu.edu/index.php/Expertiza Expertiza project documentation wiki]&lt;br /&gt;
#[https://github.com/WintersLt/expertiza GitHub Project Repository Fork]&lt;br /&gt;
#[http://bit.ly/myexpertiza  Demo link]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Hwang85</name></author>
	</entry>
</feed>