<?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=Wfu4</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=Wfu4"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Wfu4"/>
	<updated>2026-07-02T05:39:30Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<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=128033</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=128033"/>
		<updated>2019-11-07T22:26:29Z</updated>

		<summary type="html">&lt;p&gt;Wfu4: /* Instructor End */&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 view_instructor 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 view_instructor&lt;br /&gt;
    @response = Response.find(params[:id])&lt;br /&gt;
    @map = @response.map&lt;br /&gt;
    set_content_instructor&lt;br /&gt;
    render &amp;quot;response/view&amp;quot;&lt;br /&gt;
  end &lt;br /&gt;
......&lt;br /&gt;
# sets content in instructor end&lt;br /&gt;
def set_content_instructor(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;
  # retrieves questions for questionnaires&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/view_instructor?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 not on instructor end, then use display_as_html method to construct html --&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view_instructor&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;view_instructor&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_instructor_htm_helper 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;view_instructor&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_instructor_html_helper identifier, self_id, count&lt;br /&gt;
......&lt;br /&gt;
def construct_instructor_html_helper 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;view_instructor&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;
*Use Unit test to test all the codes mentioned above with respect to views, models and controllers.&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>Wfu4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1951._Remove_multiple_topics_at_a_time&amp;diff=126691</id>
		<title>CSC/ECE 517 Fall 2019 - E1951. Remove multiple topics at a time</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1951._Remove_multiple_topics_at_a_time&amp;diff=126691"/>
		<updated>2019-10-30T14:15:46Z</updated>

		<summary type="html">&lt;p&gt;Wfu4: /* Problem Statement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of E1951. Remove multiple topics at a time (Issue #1409).&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
The Expertiza project is software to create reusable learning objects through peer review. It also supports team projects, and the submission of almost any document type, including URLs and wiki pages.&lt;br /&gt;
&lt;br /&gt;
=='''Problem Statement'''==&lt;br /&gt;
If an instructor or a TA wants to delete topics, he has to delete one topic at a time and has to wait for the page to refresh and then (s)he can proceed to delete the next topic, topics can only be deleted one by one.&lt;br /&gt;
&lt;br /&gt;
===To fix the problem:===&lt;br /&gt;
1.There should be a checkbox column, along with other columns in “Topics” tab, where a user can select the topics (s)he wants to delete.&lt;br /&gt;
&lt;br /&gt;
2.There should be a delete button/link at the end of the topic table with the name “delete selected topics” to delete the selected topics after a confirmation, prompted post clicking the button/link.&lt;br /&gt;
&lt;br /&gt;
3.There should be a button/link alongside “delete selected topics” by the name “Select all” so that a user can select all and delete them in one go after clicking on “delete selected topics”.&lt;br /&gt;
&lt;br /&gt;
=='''Solution'''==&lt;br /&gt;
&lt;br /&gt;
===1.Modify view===&lt;br /&gt;
File: app/views/sign_up_sheet/_add_topics.html.erb&lt;br /&gt;
&lt;br /&gt;
Add bottoms of 'Delete select topics' and 'Select all'&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;button&amp;quot; value=&amp;quot;Delete select topics&amp;quot; onclick=&amp;quot;deleteTopics()&amp;quot; /&amp;gt;|&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;a id=&amp;quot;select all &amp;quot; onclick=&amp;quot;checkAll()&amp;quot;&amp;gt;Select all&amp;lt;/a&amp;gt; |&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
File: app/views/sign_up_sheet/_table_header.html.erb&lt;br /&gt;
&lt;br /&gt;
Add 'Select' header&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;th width=&amp;quot;5%&amp;quot;&amp;gt;Select?&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
File: app/views/sign_up_sheet/_table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
Add selected checkbox&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;input type=&amp;quot;checkbox&amp;quot; name=&amp;quot;query_mySelectBox&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===2.'Select All' function===&lt;br /&gt;
File: app/assets/javascripts/signup.js &lt;br /&gt;
&lt;br /&gt;
Select All function checks all checkbox of topics.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  function selectAll(source) {&lt;br /&gt;
      checkboxes = document.getElementsByName('mySelectBox');&lt;br /&gt;
      for (var i = 0, n = checkboxes.length; i &amp;lt; n; i++) {&lt;br /&gt;
          checkboxes[i].checked = source.checked;&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===3.'Delete' function===&lt;br /&gt;
File: app/controllers/sign_up_sheet_controller.rb &lt;br /&gt;
&lt;br /&gt;
Define delete all and get selected topics methods.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  # This deletes all selected topics&lt;br /&gt;
  def delete_all_selected_topics&lt;br /&gt;
    load_all_selected_topics&lt;br /&gt;
    @stopics.each(&amp;amp;:destroy)&lt;br /&gt;
    flash[:success] = &amp;quot;All selected topics have been deleted successfully.&amp;quot;&lt;br /&gt;
    respond_to do |format|&lt;br /&gt;
      format.html { redirect_to edit_assignment_path(params[:a_id]) + &amp;quot;#tabs-2&amp;quot; }&lt;br /&gt;
      format.js {}&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # This get all selected topics&lt;br /&gt;
  def load_all_selected_topics&lt;br /&gt;
    @stopics = SignUpTopic.where(assignment_id: params[:a_id], topic_identifier: params[:idents])&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
File: app/views/sign_up_sheet/_add_signup_topics.html.erb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  #change &amp;lt;table class=&amp;quot;table table-striped&amp;quot;&amp;gt; to&lt;br /&gt;
  &amp;lt;table class=&amp;quot;table table-striped&amp;quot; id=&amp;quot;Table1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
File: app/views/sign_up_sheet/_add_topics.html.erb&lt;br /&gt;
&lt;br /&gt;
Delete function destroys all selected topics.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function deleteTopics() {&lt;br /&gt;
    var msg = 'Are you sure? It will destroy all selected topics';&lt;br /&gt;
    if (confirm(msg)) {&lt;br /&gt;
        var identifiers = []&lt;br /&gt;
        $(&amp;quot;#Table1 input[type=checkbox]:checked&amp;quot;).each(function() {&lt;br /&gt;
            var ient = $(this).closest('tr').find('#ident').text();&lt;br /&gt;
            identifiers.push(ient);&lt;br /&gt;
        });&lt;br /&gt;
        jQuery.ajax({&lt;br /&gt;
            url: '/sign_up_sheet/delete_all_selected_topics',&lt;br /&gt;
            method: 'POST',&lt;br /&gt;
            data: {&lt;br /&gt;
                idents: identifiers,&lt;br /&gt;
                a_id: &amp;lt;%= @assignment.id %&amp;gt;&lt;br /&gt;
            },&lt;br /&gt;
            success: function() {&lt;br /&gt;
                location.reload();&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    } else {&lt;br /&gt;
        window.location.href = '&amp;lt;%= edit_assignment_path(@assignment.id) + &amp;quot;#tabs-2&amp;quot; %&amp;gt;';&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;
&lt;br /&gt;
File: app/views/sign_up_sheet/_table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  #change &amp;lt;td&amp;gt;&amp;lt;%= topic.topic_identifier %&amp;gt;&amp;lt;/td&amp;gt; to&lt;br /&gt;
  &amp;lt;td id='ident'&amp;gt;&amp;lt;%= topic.topic_identifier %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
File: config/routes.rb&lt;br /&gt;
&lt;br /&gt;
Add url.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  post :delete_all_selected_topics&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Result'''==&lt;br /&gt;
Before clicking 'Select all' bottom, there are checkboxes that could select each topic.&lt;br /&gt;
[[File:Before_select.png]]&lt;br /&gt;
After clicking 'Select all' bottom, all checkboxes are selected.&lt;br /&gt;
&lt;br /&gt;
[[File:After_select.png]]&lt;br /&gt;
After pushing 'Deleted selected topics', there's a confirmation alert. After clicking yes could delete all topics.&lt;br /&gt;
&lt;br /&gt;
[[File:Confirm_deletion.png]]&lt;br /&gt;
=='''Test'''==&lt;br /&gt;
File: spec/controllers/sign_up_sheet_controller_spec.rb&lt;br /&gt;
&lt;br /&gt;
Select assignment  with id '834' and topic with id ['E1732'] as params. Post params to delete_all_selected_topics. Expect success flash with 'All selected topics have been deleted successfully.' and redirect to '/assignments/834/edit#tabs-2'.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe '#delete_all_selected_topics' do&lt;br /&gt;
    it 'delete_all_selected_topics and redirects to edit assignment page' do&lt;br /&gt;
      allow(SignUpTopic).to receive(:find).with(assignment_id: '834',topic_identifier: ['E1732']).and_return(topic)&lt;br /&gt;
      params = {assignment_id: 834, idents: ['E1732']}&lt;br /&gt;
      post :delete_all_selected_topics, params&lt;br /&gt;
      expect(flash[:success]).to eq('All selected topics have been deleted successfully.')&lt;br /&gt;
      expect(response).to redirect_to('/assignments/834/edit#tabs-2')&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wfu4</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=126683</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=126683"/>
		<updated>2019-10-30T00:33:23Z</updated>

		<summary type="html">&lt;p&gt;Wfu4: /* Test Plans */&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 view_instructor 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 view_instructor&lt;br /&gt;
    @response = Response.find(params[:id])&lt;br /&gt;
    @map = @response.map&lt;br /&gt;
    set_content_instructor&lt;br /&gt;
    render &amp;quot;response/view&amp;quot;&lt;br /&gt;
  end &lt;br /&gt;
......&lt;br /&gt;
def set_content_instructor(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/view_instructor?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 not on instructor end, then use display_as_html method to construct html --&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view_instructor&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;view_instructor&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_instructor_htm_helper 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;view_instructor&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_instructor_html_helper identifier, self_id, count&lt;br /&gt;
......&lt;br /&gt;
def construct_instructor_html_helper 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;view_instructor&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;
*Use Unit test to test all the codes mentioned above with respect to views, models and controllers.&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>Wfu4</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=126682</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=126682"/>
		<updated>2019-10-30T00:32:48Z</updated>

		<summary type="html">&lt;p&gt;Wfu4: /* Test Plans */&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 view_instructor 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 view_instructor&lt;br /&gt;
    @response = Response.find(params[:id])&lt;br /&gt;
    @map = @response.map&lt;br /&gt;
    set_content_instructor&lt;br /&gt;
    render &amp;quot;response/view&amp;quot;&lt;br /&gt;
  end &lt;br /&gt;
......&lt;br /&gt;
def set_content_instructor(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/view_instructor?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 not on instructor end, then use display_as_html method to construct html --&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view_instructor&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;view_instructor&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_instructor_htm_helper 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;view_instructor&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_instructor_html_helper identifier, self_id, count&lt;br /&gt;
......&lt;br /&gt;
def construct_instructor_html_helper 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;view_instructor&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;
*Use Unit test to test all the function mentioned above with respect to views, models and controllers.&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>Wfu4</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=126681</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=126681"/>
		<updated>2019-10-30T00:32:38Z</updated>

		<summary type="html">&lt;p&gt;Wfu4: /* Test Plans */&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 view_instructor 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 view_instructor&lt;br /&gt;
    @response = Response.find(params[:id])&lt;br /&gt;
    @map = @response.map&lt;br /&gt;
    set_content_instructor&lt;br /&gt;
    render &amp;quot;response/view&amp;quot;&lt;br /&gt;
  end &lt;br /&gt;
......&lt;br /&gt;
def set_content_instructor(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/view_instructor?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 not on instructor end, then use display_as_html method to construct html --&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view_instructor&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;view_instructor&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_instructor_htm_helper 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;view_instructor&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_instructor_html_helper identifier, self_id, count&lt;br /&gt;
......&lt;br /&gt;
def construct_instructor_html_helper 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;view_instructor&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;
*We need use Unit test to test all the function mentioned above with respect to views, models and controllers.&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>Wfu4</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=126680</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=126680"/>
		<updated>2019-10-30T00:30:26Z</updated>

		<summary type="html">&lt;p&gt;Wfu4: /* Test Plans */&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 view_instructor 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 view_instructor&lt;br /&gt;
    @response = Response.find(params[:id])&lt;br /&gt;
    @map = @response.map&lt;br /&gt;
    set_content_instructor&lt;br /&gt;
    render &amp;quot;response/view&amp;quot;&lt;br /&gt;
  end &lt;br /&gt;
......&lt;br /&gt;
def set_content_instructor(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/view_instructor?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 not on instructor end, then use display_as_html method to construct html --&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view_instructor&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;view_instructor&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_instructor_htm_helper 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;view_instructor&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_instructor_html_helper identifier, self_id, count&lt;br /&gt;
......&lt;br /&gt;
def construct_instructor_html_helper 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;view_instructor&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;
*We need to test all the function mentioned above with respect to views, models and controllers.&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>Wfu4</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=126673</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=126673"/>
		<updated>2019-10-29T23:43:02Z</updated>

		<summary type="html">&lt;p&gt;Wfu4: /* Instructor End */&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 view_instructor 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 view_instructor&lt;br /&gt;
    @response = Response.find(params[:id])&lt;br /&gt;
    @map = @response.map&lt;br /&gt;
    set_content_instructor&lt;br /&gt;
    render &amp;quot;response/view&amp;quot;&lt;br /&gt;
  end &lt;br /&gt;
......&lt;br /&gt;
def set_content_instructor(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/view_instructor?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 not on instructor end, then use display_as_html method to construct html --&amp;gt;&lt;br /&gt;
&amp;lt;% if controller.action_name != &amp;quot;view_instructor&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;view_instructor&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_instructor_htm_helper 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;view_instructor&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_instructor_html_helper identifier, self_id, count&lt;br /&gt;
......&lt;br /&gt;
def construct_instructor_html_helper 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;view_instructor&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>Wfu4</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=126672</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=126672"/>
		<updated>2019-10-29T23:37:59Z</updated>

		<summary type="html">&lt;p&gt;Wfu4: /* Instructor End */&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 view_instructor 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 view_instructor&lt;br /&gt;
    @response = Response.find(params[:id])&lt;br /&gt;
    @map = @response.map&lt;br /&gt;
    set_content_instructor&lt;br /&gt;
    render &amp;quot;response/view&amp;quot;&lt;br /&gt;
  end &lt;br /&gt;
......&lt;br /&gt;
def set_content_instructor(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>Wfu4</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=126484</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=126484"/>
		<updated>2019-10-29T03:28:51Z</updated>

		<summary type="html">&lt;p&gt;Wfu4: /* Team Information */&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 (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>Wfu4</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=126189</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=126189"/>
		<updated>2019-10-29T00:23:24Z</updated>

		<summary type="html">&lt;p&gt;Wfu4: /* Instructor End */&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;
&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;
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;
&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>Wfu4</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=126184</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=126184"/>
		<updated>2019-10-29T00:21:19Z</updated>

		<summary type="html">&lt;p&gt;Wfu4: /* Instructor End */&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;
&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;
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/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;
'''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;
* 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;
&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>Wfu4</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=126168</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=126168"/>
		<updated>2019-10-29T00:17:41Z</updated>

		<summary type="html">&lt;p&gt;Wfu4: /* Instructor End */&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;
&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;
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;% 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 respond model 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;
......&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;% 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;% 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;
&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>Wfu4</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=126165</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=126165"/>
		<updated>2019-10-29T00:16:13Z</updated>

		<summary type="html">&lt;p&gt;Wfu4: /* Instructor End */&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;
&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;
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;% 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 respond model 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;
......&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;% 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;
......&lt;br /&gt;
 &amp;lt;% end %&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>Wfu4</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=126145</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=126145"/>
		<updated>2019-10-29T00:03:57Z</updated>

		<summary type="html">&lt;p&gt;Wfu4: /* Issue details */&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;
&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>Wfu4</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=126135</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=126135"/>
		<updated>2019-10-28T23:51:50Z</updated>

		<summary type="html">&lt;p&gt;Wfu4: /* Student End */&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;
    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>Wfu4</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=126132</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=126132"/>
		<updated>2019-10-28T23:49:39Z</updated>

		<summary type="html">&lt;p&gt;Wfu4: /* Student End */&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 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;
&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;
    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>Wfu4</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=126129</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=126129"/>
		<updated>2019-10-28T23:48:08Z</updated>

		<summary type="html">&lt;p&gt;Wfu4: /* Student End */&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/_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;
&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;
    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>Wfu4</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=126125</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=126125"/>
		<updated>2019-10-28T23:44:46Z</updated>

		<summary type="html">&lt;p&gt;Wfu4: /* Solution */&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 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;
&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;
    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>Wfu4</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=126123</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=126123"/>
		<updated>2019-10-28T23:41:29Z</updated>

		<summary type="html">&lt;p&gt;Wfu4: /* Student End */&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;% 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;
&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;
    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>Wfu4</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=126112</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=126112"/>
		<updated>2019-10-28T23:36:10Z</updated>

		<summary type="html">&lt;p&gt;Wfu4: /* Solution */&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, 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;
*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>Wfu4</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=126104</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=126104"/>
		<updated>2019-10-28T23:28:23Z</updated>

		<summary type="html">&lt;p&gt;Wfu4: /* What to do */&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;
===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>Wfu4</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=126103</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=126103"/>
		<updated>2019-10-28T23:27:41Z</updated>

		<summary type="html">&lt;p&gt;Wfu4: /* Issue details */&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.&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>Wfu4</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=126100</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=126100"/>
		<updated>2019-10-28T23:26:13Z</updated>

		<summary type="html">&lt;p&gt;Wfu4: /* Issue details */&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, 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. &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;
Give Feedback link at view_my_score should appear at the bottom of expanded 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>Wfu4</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=126092</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=126092"/>
		<updated>2019-10-28T23:12:01Z</updated>

		<summary type="html">&lt;p&gt;Wfu4: /* Issue details */&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://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>Wfu4</name></author>
	</entry>
</feed>