<?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=Mgparekh</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=Mgparekh"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Mgparekh"/>
	<updated>2026-08-06T09:53:21Z</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_-_E1990._Integrate_suggestion_detection_algorithm&amp;diff=131121</id>
		<title>CSC/ECE 517 Fall 2019 - E1990. Integrate suggestion detection algorithm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1990._Integrate_suggestion_detection_algorithm&amp;diff=131121"/>
		<updated>2019-12-07T06:49:13Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /*  Our Work  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ''' Introduction ''' ==&lt;br /&gt;
* On Expertiza, students receive review comments for their work from their peers. This review mechanism provides the students a chance to correct/modify their work, based on the reviews they receive. It is expected that the reviewers identify problems and suggest solutions, so that the students can improve their projects. &lt;br /&gt;
* It is observed that the students learn more by reviewing others' work than working on the project as it gives them perspective about alternative approaches to solve a problem.&lt;br /&gt;
* The Instructor is facilitated with metrics such as average volume and total volume of the content of the reviews provided by a student.&lt;br /&gt;
&lt;br /&gt;
== ''' Problem Statement ''' ==&lt;br /&gt;
* The reviewers can fill in the review comments on others' work, however they do not receive feedback on how effective their reviews are for the receiver. It would thus make sense to have a feedback mechanism in place, which can identify whether a reviewer has identified problems and provided suggestions for a student or team's project. In order to achieve this, we need to identify the suggestions in the review comments as a way of determining how useful a review would be. This would motivate the reviewers to give better and constructive reviews.&lt;br /&gt;
* We would want the instructor of the course to be able to view how many constructive reviews were provided by a reviewer in comparison to the average number of constructive reviews provided by the other reviewers of the course. The reviews could be graded on this basis.&lt;br /&gt;
* To detect the number of suggestions in a text, there is a web service in place, developed previously by some contributors. We wish to integrate this suggestion detection algorithm and use its results to show the suggestion metrics to the reviewer as well as the instructor.&lt;br /&gt;
* '''Please note that the web service mentioned above is currently not working. Thus we will use simulations to mock the response from the web service for this project. '''&lt;br /&gt;
&lt;br /&gt;
== '''Implementation Details'''==&lt;br /&gt;
&lt;br /&gt;
=== Part 1 : Mocking the response which is to be received from the suggestion detection web service===&lt;br /&gt;
* The suggestion detection algorithm was expected to identify the number of suggestions in the review comments given by a reviewer. To mock this number, we used a random number generator. Now we expect to receive a value between 0-10 as the number of suggestions provided by the student in one round of review. (Refer to method: num_suggestions_for_responses_by_a_reviewer in review_mapping_helper.rb)&lt;br /&gt;
* In order to be able to use integrate the suggestion detection algorithm in the future, we have included a function with the API calls to the service. This function and the corresponding call to this function is currently commented. (Refer to methods: num_suggestions_for_responses_by_a_reviewer and retrieve_review_suggestion_metrics in review_mapping_helper.rb.)&lt;br /&gt;
&lt;br /&gt;
=== Part 2 : Suggestion metrics on saving / submitting review ===&lt;br /&gt;
* We wish to present the reviewer(student) with an idea of how useful their reviews are, in comparison to that of the class. &lt;br /&gt;
*To achieve this, we have included the following in an alert when the reviewer clicks on &amp;quot;Save&amp;quot; or &amp;quot;Submit&amp;quot;:&lt;br /&gt;
**1. The number of suggestions in the review comments provided by the reviewer for that round &lt;br /&gt;
**2. The average number of suggestions in the review comments provided by all reviewers of the class &lt;br /&gt;
(Again, for the purpose of demonstration, we have used values from the random number generator mentioned above.)&lt;br /&gt;
&lt;br /&gt;
=== Part 3 : Suggestion metrics depicted as bar graphs in &amp;quot;Review Reports&amp;quot; page ===&lt;br /&gt;
* We wish to present the instructor with comparison of the number of suggestions present in the review comments provided by a student and the average number of suggestions typically provided by the class. We have represented this data in the form of a bar graph showing the round-wise comparison for each assignment. This visualization adheres to the pattern of visualization which was present on this page for volume of review comments and average volume of review comments.&lt;br /&gt;
&lt;br /&gt;
== ''' Flowchart '''==&lt;br /&gt;
Given below is the design flowchart of our proposed solution:&lt;br /&gt;
  [[File:CSC517 Final Project Flowchart(3).png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Once the student finishes (partly or completely) giving his/her review and clicks on the &amp;quot;Save&amp;quot; or &amp;quot;Submit&amp;quot; button, the web service API will be called and the review's text will be sent as JSON. The PeerLogic web service will send back the output(number of suggestions in the review comments) which will then be displayed in an alert to the student.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;For all the review scores received by the students, the aggregate data will be displayed to the instructor whenever he/she will view the Review Report for any assignment/project. This will be visible in the metrics column of the review report and will be displayed student-wise, i.e., for each student participating in the assignment.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Overview of code changes''' ==&lt;br /&gt;
Please refer to [https://github.com/expertiza/expertiza/pull/1614/files Code changes] for the exact changes.&lt;br /&gt;
&lt;br /&gt;
We have modified the following files (added methods/ added code to methods/ replace code in the methods):&lt;br /&gt;
&lt;br /&gt;
* review_mapping_helper.rb:&lt;br /&gt;
** display_volume_metric_chart(reviewer) - changes made to resize the bar graph for volume metric and removal of legend for every graph.&lt;br /&gt;
** avg_num_suggestions_per_round(assignment_id, round_id, type) - as the name suggests, the goal is to obtain the average number of suggestions provided by the class in each review round of the assignment.&lt;br /&gt;
** num_suggestions_per_student_per_round(response_maps, round_id) - the goal is to obtain the average number of suggestions provided by the student in each review round of the assignment.&lt;br /&gt;
** comments_in_current_response(response_id) - provides a concatenated text consisting of all review comments in the current response.&lt;br /&gt;
** retrieve_review_suggestion_metrics(comments) - this function has been added to be able to make calls to the API in the future, when it starts working. &lt;br /&gt;
** num_suggestions_for_responses_by_a_reviewer(comments) - this function should make a call to the function mentioned above. Currently, we use this function to simulate the number of suggestions in each comment, using a random number generator.&lt;br /&gt;
** num_suggestions_reviewer(responses) - this function provides the number of suggestion given by a reviewer to a student/team's work.&lt;br /&gt;
** display_suggestion_metric_chart(reviewer) - this method sets up the colors, labels and data to generate the bar graph for the suggestion metrics.&lt;br /&gt;
** initialize_suggestion_chart_elements(reviewer) - this method computes the number of suggestions provided by the student in each round, the average number of suggestions provided by the student in all rounds,  the average number of suggestions provided by the class in each round and the average number of suggestions provided by the class in all rounds. This data is generated as a collection of lists.&lt;br /&gt;
&lt;br /&gt;
*_review_report.html.erb: changes are made to restructure the legend and add labels corresponding to suggestion metrics.&lt;br /&gt;
&lt;br /&gt;
* response.html.erb: jQuery changes have been made to get the current response stored in the params and calculate average of the same instantly, when the student clicks on &amp;quot;Save&amp;quot; or &amp;quot;Submit&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== '''Automated Tests''' ==&lt;br /&gt;
* review_assignment_spec.rb: Tests have been added to test the feature of identifying the number of suggestions in a given review.&lt;br /&gt;
** Check whether the student is able to see a suggestion score for his/her review - on clicking save&lt;br /&gt;
** Check whether the student is able to see the average number of suggestions given by the class - on clicking save&lt;br /&gt;
** Check whether the student is able to see a suggestion score for his/her review - on clicking submit&lt;br /&gt;
** Check whether the student is able to see the average number of suggestions given by the class - on clicking submit&lt;br /&gt;
** Check whether the number of suggestions displayed is in the valid range of numbers - on clicking save and submit&lt;br /&gt;
** Check whether the the average number of suggestions given by the class is in the valid range of numbers - on clicking save and submit&lt;br /&gt;
&lt;br /&gt;
* review_mapping_helper_spec.rb : Test have been added to check whether the new legends for metric is now part of the &amp;quot;Review reports&amp;quot; page.&lt;br /&gt;
&lt;br /&gt;
== ''' Screenshots'''==&lt;br /&gt;
Review reports page as visible to the Instructor, after the above mentioned changes.&lt;br /&gt;
  [[File:Review reports.png]]&lt;br /&gt;
  &lt;br /&gt;
Suggestion metrics as visible to the reviewer when saving the review.&lt;br /&gt;
   [[File:SaveScreenshot.png]]&lt;br /&gt;
&lt;br /&gt;
Suggestion metrics as visible to the reviewer when submitting the review.&lt;br /&gt;
   [[File:SubmitScreenshot.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Steps to follow for UI testing ===&lt;br /&gt;
==== For student ====&lt;br /&gt;
    Steps I:&lt;br /&gt;
    1. Login to student profile.&lt;br /&gt;
    2. Go to your open assignments and submit your work.&lt;br /&gt;
    3. Go to that particular assignment and request a review.&lt;br /&gt;
    4. Begin writing a review. &lt;br /&gt;
    5. Click &amp;quot;Save&amp;quot; button to save the review.&lt;br /&gt;
    6. An alert should be displayed that shows the review comment analysis for the student.&lt;br /&gt;
&lt;br /&gt;
    Steps II:&lt;br /&gt;
    1. Login to student profile.&lt;br /&gt;
    2. Go to your open assignments and submit your work.&lt;br /&gt;
    3. Go to that particular assignment and request a review.&lt;br /&gt;
    4. Begin writing a review. &lt;br /&gt;
    5. Click &amp;quot;Submit Review&amp;quot; button to submit the review.&lt;br /&gt;
    6. An alert should be displayed that shows the review comment analysis for the student.&lt;br /&gt;
&lt;br /&gt;
==== For an instructor ====&lt;br /&gt;
    1. Login as an instructor.&lt;br /&gt;
    2. Navigate to all assignments list.&lt;br /&gt;
    3. Click on View Reports button and open Review Report for that assignment.&lt;br /&gt;
    4. The instructor should be able to see each student's review comment analysis for the submitted reviews under the metric column.&lt;br /&gt;
&lt;br /&gt;
== ''' Our Work ''' ==&lt;br /&gt;
===='''Additions &amp;amp; Modifications'''====&lt;br /&gt;
Listed below are the major changes along with the screenshots of git diffs of those file/functions.&lt;br /&gt;
# Changes made to display the suggestions metrics bar chart to the instructor in review_mapping_helper.rb file.&lt;br /&gt;
  [[File:Display_suggestion_metric_chart_screenshot.png‎]]&lt;br /&gt;
&lt;br /&gt;
2. Changes made to initialize all the metrics and get all their values from the web service / random number generator when the instructor views the Review Report.&lt;br /&gt;
  [[File:Initialize_suggestion_chart_elements_screenshot.png]]&lt;br /&gt;
&lt;br /&gt;
3. Changes made to call the web service (currently commented out since the service is not up) / random number generator. We call the function to get number of suggestions for the reviewer per round per team and for the class as a whole to calculate the average. Below is the git diff:&lt;br /&gt;
  [[File:Num_suggestions_reviewer_screenshot.png]]&lt;br /&gt;
&lt;br /&gt;
4. Changes made to the response.html.erb where these functions are actually called from. &lt;br /&gt;
  [[File:Response_html_screenshot.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''Testing'''====&lt;br /&gt;
Following test cases were added to see whether the functionality works as intended.&lt;br /&gt;
 &lt;br /&gt;
# Whether the alert renders the number of suggestions for a reviewee on save/submit.&lt;br /&gt;
# Whether the alert renders the average number of suggestions in a class for a reviewee on save/submit.&lt;br /&gt;
# Whether the function returns the number of suggestions in correct bounds and returns an Integer value.&lt;br /&gt;
# Whether the function returns the average number of suggestions in correct bounds and returns an Integer value.&lt;br /&gt;
[[File:Testing_few_screenshot.png]]&lt;br /&gt;
#. Whether the review report has the modified legend metrics.&lt;br /&gt;
[[File:Review_mapping_helper_spec_screenshot.png]]&lt;br /&gt;
&lt;br /&gt;
== ''' Team Information ''' ==&lt;br /&gt;
;Mentor: Ed Gehringer (efg@ncsu.edu)&lt;br /&gt;
;Team Name: Pizzamas&lt;br /&gt;
;Members:&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Roshani Narasimhan (rnarasi2)&lt;br /&gt;
* Yash Thakkar (yrthakka) &lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
# [http://wiki.expertiza.ncsu.edu/index.php/Main_Page Expertiza]&lt;br /&gt;
# [https://github.com/expertiza/expertiza/pull/1493 Pull request for a Metrics Legend change]&lt;br /&gt;
# [https://github.com/expertiza/expertiza Expertiza Github Repo]&lt;br /&gt;
# [https://github.com/expertiza/expertiza/pull/1614 Our project's Github pull request]&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1990._Integrate_suggestion_detection_algorithm&amp;diff=131120</id>
		<title>CSC/ECE 517 Fall 2019 - E1990. Integrate suggestion detection algorithm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1990._Integrate_suggestion_detection_algorithm&amp;diff=131120"/>
		<updated>2019-12-07T06:47:39Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /*  Our Work  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ''' Introduction ''' ==&lt;br /&gt;
* On Expertiza, students receive review comments for their work from their peers. This review mechanism provides the students a chance to correct/modify their work, based on the reviews they receive. It is expected that the reviewers identify problems and suggest solutions, so that the students can improve their projects. &lt;br /&gt;
* It is observed that the students learn more by reviewing others' work than working on the project as it gives them perspective about alternative approaches to solve a problem.&lt;br /&gt;
* The Instructor is facilitated with metrics such as average volume and total volume of the content of the reviews provided by a student.&lt;br /&gt;
&lt;br /&gt;
== ''' Problem Statement ''' ==&lt;br /&gt;
* The reviewers can fill in the review comments on others' work, however they do not receive feedback on how effective their reviews are for the receiver. It would thus make sense to have a feedback mechanism in place, which can identify whether a reviewer has identified problems and provided suggestions for a student or team's project. In order to achieve this, we need to identify the suggestions in the review comments as a way of determining how useful a review would be. This would motivate the reviewers to give better and constructive reviews.&lt;br /&gt;
* We would want the instructor of the course to be able to view how many constructive reviews were provided by a reviewer in comparison to the average number of constructive reviews provided by the other reviewers of the course. The reviews could be graded on this basis.&lt;br /&gt;
* To detect the number of suggestions in a text, there is a web service in place, developed previously by some contributors. We wish to integrate this suggestion detection algorithm and use its results to show the suggestion metrics to the reviewer as well as the instructor.&lt;br /&gt;
* '''Please note that the web service mentioned above is currently not working. Thus we will use simulations to mock the response from the web service for this project. '''&lt;br /&gt;
&lt;br /&gt;
== '''Implementation Details'''==&lt;br /&gt;
&lt;br /&gt;
=== Part 1 : Mocking the response which is to be received from the suggestion detection web service===&lt;br /&gt;
* The suggestion detection algorithm was expected to identify the number of suggestions in the review comments given by a reviewer. To mock this number, we used a random number generator. Now we expect to receive a value between 0-10 as the number of suggestions provided by the student in one round of review. (Refer to method: num_suggestions_for_responses_by_a_reviewer in review_mapping_helper.rb)&lt;br /&gt;
* In order to be able to use integrate the suggestion detection algorithm in the future, we have included a function with the API calls to the service. This function and the corresponding call to this function is currently commented. (Refer to methods: num_suggestions_for_responses_by_a_reviewer and retrieve_review_suggestion_metrics in review_mapping_helper.rb.)&lt;br /&gt;
&lt;br /&gt;
=== Part 2 : Suggestion metrics on saving / submitting review ===&lt;br /&gt;
* We wish to present the reviewer(student) with an idea of how useful their reviews are, in comparison to that of the class. &lt;br /&gt;
*To achieve this, we have included the following in an alert when the reviewer clicks on &amp;quot;Save&amp;quot; or &amp;quot;Submit&amp;quot;:&lt;br /&gt;
**1. The number of suggestions in the review comments provided by the reviewer for that round &lt;br /&gt;
**2. The average number of suggestions in the review comments provided by all reviewers of the class &lt;br /&gt;
(Again, for the purpose of demonstration, we have used values from the random number generator mentioned above.)&lt;br /&gt;
&lt;br /&gt;
=== Part 3 : Suggestion metrics depicted as bar graphs in &amp;quot;Review Reports&amp;quot; page ===&lt;br /&gt;
* We wish to present the instructor with comparison of the number of suggestions present in the review comments provided by a student and the average number of suggestions typically provided by the class. We have represented this data in the form of a bar graph showing the round-wise comparison for each assignment. This visualization adheres to the pattern of visualization which was present on this page for volume of review comments and average volume of review comments.&lt;br /&gt;
&lt;br /&gt;
== ''' Flowchart '''==&lt;br /&gt;
Given below is the design flowchart of our proposed solution:&lt;br /&gt;
  [[File:CSC517 Final Project Flowchart(3).png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Once the student finishes (partly or completely) giving his/her review and clicks on the &amp;quot;Save&amp;quot; or &amp;quot;Submit&amp;quot; button, the web service API will be called and the review's text will be sent as JSON. The PeerLogic web service will send back the output(number of suggestions in the review comments) which will then be displayed in an alert to the student.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;For all the review scores received by the students, the aggregate data will be displayed to the instructor whenever he/she will view the Review Report for any assignment/project. This will be visible in the metrics column of the review report and will be displayed student-wise, i.e., for each student participating in the assignment.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Overview of code changes''' ==&lt;br /&gt;
Please refer to [https://github.com/expertiza/expertiza/pull/1614/files Code changes] for the exact changes.&lt;br /&gt;
&lt;br /&gt;
We have modified the following files (added methods/ added code to methods/ replace code in the methods):&lt;br /&gt;
&lt;br /&gt;
* review_mapping_helper.rb:&lt;br /&gt;
** display_volume_metric_chart(reviewer) - changes made to resize the bar graph for volume metric and removal of legend for every graph.&lt;br /&gt;
** avg_num_suggestions_per_round(assignment_id, round_id, type) - as the name suggests, the goal is to obtain the average number of suggestions provided by the class in each review round of the assignment.&lt;br /&gt;
** num_suggestions_per_student_per_round(response_maps, round_id) - the goal is to obtain the average number of suggestions provided by the student in each review round of the assignment.&lt;br /&gt;
** comments_in_current_response(response_id) - provides a concatenated text consisting of all review comments in the current response.&lt;br /&gt;
** retrieve_review_suggestion_metrics(comments) - this function has been added to be able to make calls to the API in the future, when it starts working. &lt;br /&gt;
** num_suggestions_for_responses_by_a_reviewer(comments) - this function should make a call to the function mentioned above. Currently, we use this function to simulate the number of suggestions in each comment, using a random number generator.&lt;br /&gt;
** num_suggestions_reviewer(responses) - this function provides the number of suggestion given by a reviewer to a student/team's work.&lt;br /&gt;
** display_suggestion_metric_chart(reviewer) - this method sets up the colors, labels and data to generate the bar graph for the suggestion metrics.&lt;br /&gt;
** initialize_suggestion_chart_elements(reviewer) - this method computes the number of suggestions provided by the student in each round, the average number of suggestions provided by the student in all rounds,  the average number of suggestions provided by the class in each round and the average number of suggestions provided by the class in all rounds. This data is generated as a collection of lists.&lt;br /&gt;
&lt;br /&gt;
*_review_report.html.erb: changes are made to restructure the legend and add labels corresponding to suggestion metrics.&lt;br /&gt;
&lt;br /&gt;
* response.html.erb: jQuery changes have been made to get the current response stored in the params and calculate average of the same instantly, when the student clicks on &amp;quot;Save&amp;quot; or &amp;quot;Submit&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== '''Automated Tests''' ==&lt;br /&gt;
* review_assignment_spec.rb: Tests have been added to test the feature of identifying the number of suggestions in a given review.&lt;br /&gt;
** Check whether the student is able to see a suggestion score for his/her review - on clicking save&lt;br /&gt;
** Check whether the student is able to see the average number of suggestions given by the class - on clicking save&lt;br /&gt;
** Check whether the student is able to see a suggestion score for his/her review - on clicking submit&lt;br /&gt;
** Check whether the student is able to see the average number of suggestions given by the class - on clicking submit&lt;br /&gt;
** Check whether the number of suggestions displayed is in the valid range of numbers - on clicking save and submit&lt;br /&gt;
** Check whether the the average number of suggestions given by the class is in the valid range of numbers - on clicking save and submit&lt;br /&gt;
&lt;br /&gt;
* review_mapping_helper_spec.rb : Test have been added to check whether the new legends for metric is now part of the &amp;quot;Review reports&amp;quot; page.&lt;br /&gt;
&lt;br /&gt;
== ''' Screenshots'''==&lt;br /&gt;
Review reports page as visible to the Instructor, after the above mentioned changes.&lt;br /&gt;
  [[File:Review reports.png]]&lt;br /&gt;
  &lt;br /&gt;
Suggestion metrics as visible to the reviewer when saving the review.&lt;br /&gt;
   [[File:SaveScreenshot.png]]&lt;br /&gt;
&lt;br /&gt;
Suggestion metrics as visible to the reviewer when submitting the review.&lt;br /&gt;
   [[File:SubmitScreenshot.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Steps to follow for UI testing ===&lt;br /&gt;
==== For student ====&lt;br /&gt;
    Steps I:&lt;br /&gt;
    1. Login to student profile.&lt;br /&gt;
    2. Go to your open assignments and submit your work.&lt;br /&gt;
    3. Go to that particular assignment and request a review.&lt;br /&gt;
    4. Begin writing a review. &lt;br /&gt;
    5. Click &amp;quot;Save&amp;quot; button to save the review.&lt;br /&gt;
    6. An alert should be displayed that shows the review comment analysis for the student.&lt;br /&gt;
&lt;br /&gt;
    Steps II:&lt;br /&gt;
    1. Login to student profile.&lt;br /&gt;
    2. Go to your open assignments and submit your work.&lt;br /&gt;
    3. Go to that particular assignment and request a review.&lt;br /&gt;
    4. Begin writing a review. &lt;br /&gt;
    5. Click &amp;quot;Submit Review&amp;quot; button to submit the review.&lt;br /&gt;
    6. An alert should be displayed that shows the review comment analysis for the student.&lt;br /&gt;
&lt;br /&gt;
==== For an instructor ====&lt;br /&gt;
    1. Login as an instructor.&lt;br /&gt;
    2. Navigate to all assignments list.&lt;br /&gt;
    3. Click on View Reports button and open Review Report for that assignment.&lt;br /&gt;
    4. The instructor should be able to see each student's review comment analysis for the submitted reviews under the metric column.&lt;br /&gt;
&lt;br /&gt;
== ''' Our Work ''' ==&lt;br /&gt;
Listed below are the major changes along with the screenshots of git diffs of those file/functions.&lt;br /&gt;
# Changes made to display the suggestions metrics bar chart to the instructor in review_mapping_helper.rb file.&lt;br /&gt;
  [[File:Display_suggestion_metric_chart_screenshot.png‎]]&lt;br /&gt;
&lt;br /&gt;
2. Changes made to initialize all the metrics and get all their values from the web service / random number generator when the instructor views the Review Report.&lt;br /&gt;
  [[File:Initialize_suggestion_chart_elements_screenshot.png]]&lt;br /&gt;
&lt;br /&gt;
3. Changes made to call the web service (currently commented out since the service is not up) / random number generator. We call the function to get number of suggestions for the reviewer per round per team and for the class as a whole to calculate the average. Below is the git diff:&lt;br /&gt;
  [[File:Num_suggestions_reviewer_screenshot.png]]&lt;br /&gt;
&lt;br /&gt;
4. Changes made to the response.html.erb where these functions are actually called from. &lt;br /&gt;
  [[File:Response_html_screenshot.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''Testing'''====&lt;br /&gt;
Following test cases were added to see whether the functionality works as intended.&lt;br /&gt;
 &lt;br /&gt;
# Whether the alert renders the number of suggestions for a reviewee on save/submit.&lt;br /&gt;
# Whether the alert renders the average number of suggestions in a class for a reviewee on save/submit.&lt;br /&gt;
# Whether the function returns the number of suggestions in correct bounds and returns an Integer value.&lt;br /&gt;
# Whether the function returns the average number of suggestions in correct bounds and returns an Integer value.&lt;br /&gt;
[[File:Testing_few_screenshot.png]]&lt;br /&gt;
#. Whether the review report has the modified legend metrics.&lt;br /&gt;
[[File:Review_mapping_helper_spec_screenshot.png]]&lt;br /&gt;
&lt;br /&gt;
== ''' Team Information ''' ==&lt;br /&gt;
;Mentor: Ed Gehringer (efg@ncsu.edu)&lt;br /&gt;
;Team Name: Pizzamas&lt;br /&gt;
;Members:&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Roshani Narasimhan (rnarasi2)&lt;br /&gt;
* Yash Thakkar (yrthakka) &lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
# [http://wiki.expertiza.ncsu.edu/index.php/Main_Page Expertiza]&lt;br /&gt;
# [https://github.com/expertiza/expertiza/pull/1493 Pull request for a Metrics Legend change]&lt;br /&gt;
# [https://github.com/expertiza/expertiza Expertiza Github Repo]&lt;br /&gt;
# [https://github.com/expertiza/expertiza/pull/1614 Our project's Github pull request]&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1990._Integrate_suggestion_detection_algorithm&amp;diff=131119</id>
		<title>CSC/ECE 517 Fall 2019 - E1990. Integrate suggestion detection algorithm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1990._Integrate_suggestion_detection_algorithm&amp;diff=131119"/>
		<updated>2019-12-07T06:39:55Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /*  Our Work  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ''' Introduction ''' ==&lt;br /&gt;
* On Expertiza, students receive review comments for their work from their peers. This review mechanism provides the students a chance to correct/modify their work, based on the reviews they receive. It is expected that the reviewers identify problems and suggest solutions, so that the students can improve their projects. &lt;br /&gt;
* It is observed that the students learn more by reviewing others' work than working on the project as it gives them perspective about alternative approaches to solve a problem.&lt;br /&gt;
* The Instructor is facilitated with metrics such as average volume and total volume of the content of the reviews provided by a student.&lt;br /&gt;
&lt;br /&gt;
== ''' Problem Statement ''' ==&lt;br /&gt;
* The reviewers can fill in the review comments on others' work, however they do not receive feedback on how effective their reviews are for the receiver. It would thus make sense to have a feedback mechanism in place, which can identify whether a reviewer has identified problems and provided suggestions for a student or team's project. In order to achieve this, we need to identify the suggestions in the review comments as a way of determining how useful a review would be. This would motivate the reviewers to give better and constructive reviews.&lt;br /&gt;
* We would want the instructor of the course to be able to view how many constructive reviews were provided by a reviewer in comparison to the average number of constructive reviews provided by the other reviewers of the course. The reviews could be graded on this basis.&lt;br /&gt;
* To detect the number of suggestions in a text, there is a web service in place, developed previously by some contributors. We wish to integrate this suggestion detection algorithm and use its results to show the suggestion metrics to the reviewer as well as the instructor.&lt;br /&gt;
* '''Please note that the web service mentioned above is currently not working. Thus we will use simulations to mock the response from the web service for this project. '''&lt;br /&gt;
&lt;br /&gt;
== '''Implementation Details'''==&lt;br /&gt;
&lt;br /&gt;
=== Part 1 : Mocking the response which is to be received from the suggestion detection web service===&lt;br /&gt;
* The suggestion detection algorithm was expected to identify the number of suggestions in the review comments given by a reviewer. To mock this number, we used a random number generator. Now we expect to receive a value between 0-10 as the number of suggestions provided by the student in one round of review. (Refer to method: num_suggestions_for_responses_by_a_reviewer in review_mapping_helper.rb)&lt;br /&gt;
* In order to be able to use integrate the suggestion detection algorithm in the future, we have included a function with the API calls to the service. This function and the corresponding call to this function is currently commented. (Refer to methods: num_suggestions_for_responses_by_a_reviewer and retrieve_review_suggestion_metrics in review_mapping_helper.rb.)&lt;br /&gt;
&lt;br /&gt;
=== Part 2 : Suggestion metrics on saving / submitting review ===&lt;br /&gt;
* We wish to present the reviewer(student) with an idea of how useful their reviews are, in comparison to that of the class. &lt;br /&gt;
*To achieve this, we have included the following in an alert when the reviewer clicks on &amp;quot;Save&amp;quot; or &amp;quot;Submit&amp;quot;:&lt;br /&gt;
**1. The number of suggestions in the review comments provided by the reviewer for that round &lt;br /&gt;
**2. The average number of suggestions in the review comments provided by all reviewers of the class &lt;br /&gt;
(Again, for the purpose of demonstration, we have used values from the random number generator mentioned above.)&lt;br /&gt;
&lt;br /&gt;
=== Part 3 : Suggestion metrics depicted as bar graphs in &amp;quot;Review Reports&amp;quot; page ===&lt;br /&gt;
* We wish to present the instructor with comparison of the number of suggestions present in the review comments provided by a student and the average number of suggestions typically provided by the class. We have represented this data in the form of a bar graph showing the round-wise comparison for each assignment. This visualization adheres to the pattern of visualization which was present on this page for volume of review comments and average volume of review comments.&lt;br /&gt;
&lt;br /&gt;
== ''' Flowchart '''==&lt;br /&gt;
Given below is the design flowchart of our proposed solution:&lt;br /&gt;
  [[File:CSC517 Final Project Flowchart(3).png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Once the student finishes (partly or completely) giving his/her review and clicks on the &amp;quot;Save&amp;quot; or &amp;quot;Submit&amp;quot; button, the web service API will be called and the review's text will be sent as JSON. The PeerLogic web service will send back the output(number of suggestions in the review comments) which will then be displayed in an alert to the student.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;For all the review scores received by the students, the aggregate data will be displayed to the instructor whenever he/she will view the Review Report for any assignment/project. This will be visible in the metrics column of the review report and will be displayed student-wise, i.e., for each student participating in the assignment.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Overview of code changes''' ==&lt;br /&gt;
Please refer to [https://github.com/expertiza/expertiza/pull/1614/files Code changes] for the exact changes.&lt;br /&gt;
&lt;br /&gt;
We have modified the following files (added methods/ added code to methods/ replace code in the methods):&lt;br /&gt;
&lt;br /&gt;
* review_mapping_helper.rb:&lt;br /&gt;
** display_volume_metric_chart(reviewer) - changes made to resize the bar graph for volume metric and removal of legend for every graph.&lt;br /&gt;
** avg_num_suggestions_per_round(assignment_id, round_id, type) - as the name suggests, the goal is to obtain the average number of suggestions provided by the class in each review round of the assignment.&lt;br /&gt;
** num_suggestions_per_student_per_round(response_maps, round_id) - the goal is to obtain the average number of suggestions provided by the student in each review round of the assignment.&lt;br /&gt;
** comments_in_current_response(response_id) - provides a concatenated text consisting of all review comments in the current response.&lt;br /&gt;
** retrieve_review_suggestion_metrics(comments) - this function has been added to be able to make calls to the API in the future, when it starts working. &lt;br /&gt;
** num_suggestions_for_responses_by_a_reviewer(comments) - this function should make a call to the function mentioned above. Currently, we use this function to simulate the number of suggestions in each comment, using a random number generator.&lt;br /&gt;
** num_suggestions_reviewer(responses) - this function provides the number of suggestion given by a reviewer to a student/team's work.&lt;br /&gt;
** display_suggestion_metric_chart(reviewer) - this method sets up the colors, labels and data to generate the bar graph for the suggestion metrics.&lt;br /&gt;
** initialize_suggestion_chart_elements(reviewer) - this method computes the number of suggestions provided by the student in each round, the average number of suggestions provided by the student in all rounds,  the average number of suggestions provided by the class in each round and the average number of suggestions provided by the class in all rounds. This data is generated as a collection of lists.&lt;br /&gt;
&lt;br /&gt;
*_review_report.html.erb: changes are made to restructure the legend and add labels corresponding to suggestion metrics.&lt;br /&gt;
&lt;br /&gt;
* response.html.erb: jQuery changes have been made to get the current response stored in the params and calculate average of the same instantly, when the student clicks on &amp;quot;Save&amp;quot; or &amp;quot;Submit&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== '''Automated Tests''' ==&lt;br /&gt;
* review_assignment_spec.rb: Tests have been added to test the feature of identifying the number of suggestions in a given review.&lt;br /&gt;
** Check whether the student is able to see a suggestion score for his/her review - on clicking save&lt;br /&gt;
** Check whether the student is able to see the average number of suggestions given by the class - on clicking save&lt;br /&gt;
** Check whether the student is able to see a suggestion score for his/her review - on clicking submit&lt;br /&gt;
** Check whether the student is able to see the average number of suggestions given by the class - on clicking submit&lt;br /&gt;
** Check whether the number of suggestions displayed is in the valid range of numbers - on clicking save and submit&lt;br /&gt;
** Check whether the the average number of suggestions given by the class is in the valid range of numbers - on clicking save and submit&lt;br /&gt;
&lt;br /&gt;
* review_mapping_helper_spec.rb : Test have been added to check whether the new legends for metric is now part of the &amp;quot;Review reports&amp;quot; page.&lt;br /&gt;
&lt;br /&gt;
== ''' Screenshots'''==&lt;br /&gt;
Review reports page as visible to the Instructor, after the above mentioned changes.&lt;br /&gt;
  [[File:Review reports.png]]&lt;br /&gt;
  &lt;br /&gt;
Suggestion metrics as visible to the reviewer when saving the review.&lt;br /&gt;
   [[File:SaveScreenshot.png]]&lt;br /&gt;
&lt;br /&gt;
Suggestion metrics as visible to the reviewer when submitting the review.&lt;br /&gt;
   [[File:SubmitScreenshot.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Steps to follow for UI testing ===&lt;br /&gt;
==== For student ====&lt;br /&gt;
    Steps I:&lt;br /&gt;
    1. Login to student profile.&lt;br /&gt;
    2. Go to your open assignments and submit your work.&lt;br /&gt;
    3. Go to that particular assignment and request a review.&lt;br /&gt;
    4. Begin writing a review. &lt;br /&gt;
    5. Click &amp;quot;Save&amp;quot; button to save the review.&lt;br /&gt;
    6. An alert should be displayed that shows the review comment analysis for the student.&lt;br /&gt;
&lt;br /&gt;
    Steps II:&lt;br /&gt;
    1. Login to student profile.&lt;br /&gt;
    2. Go to your open assignments and submit your work.&lt;br /&gt;
    3. Go to that particular assignment and request a review.&lt;br /&gt;
    4. Begin writing a review. &lt;br /&gt;
    5. Click &amp;quot;Submit Review&amp;quot; button to submit the review.&lt;br /&gt;
    6. An alert should be displayed that shows the review comment analysis for the student.&lt;br /&gt;
&lt;br /&gt;
==== For an instructor ====&lt;br /&gt;
    1. Login as an instructor.&lt;br /&gt;
    2. Navigate to all assignments list.&lt;br /&gt;
    3. Click on View Reports button and open Review Report for that assignment.&lt;br /&gt;
    4. The instructor should be able to see each student's review comment analysis for the submitted reviews under the metric column.&lt;br /&gt;
&lt;br /&gt;
== ''' Our Work ''' ==&lt;br /&gt;
Listed below are the major changes along with the screenshots of git diffs of those file/functions.&lt;br /&gt;
# Changes made to display the suggestions metrics bar chart to the instructor in review_mapping_helper.rb file.&lt;br /&gt;
  [[File:Display_suggestion_metric_chart_screenshot.png‎]]&lt;br /&gt;
&lt;br /&gt;
2. Changes made to initialize all the metrics and get all their values from the web service / random number generator when the instructor views the Review Report.&lt;br /&gt;
  [[File:Initialize_suggestion_chart_elements_screenshot.png]]&lt;br /&gt;
&lt;br /&gt;
3. Changes made to call the web service (currently commented out since the service is not up) / random number generator. We call the function to get number of suggestions for the reviewer per round per team and for the class as a whole to calculate the average. Below is the git diff:&lt;br /&gt;
  [[File:Num_suggestions_reviewer_screenshot.png]]&lt;br /&gt;
&lt;br /&gt;
4. Changes made to the response.html.erb where these functions are actually called from. &lt;br /&gt;
  [[File:Response_html_screenshot.png]]&lt;br /&gt;
&lt;br /&gt;
== ''' Team Information ''' ==&lt;br /&gt;
;Mentor: Ed Gehringer (efg@ncsu.edu)&lt;br /&gt;
;Team Name: Pizzamas&lt;br /&gt;
;Members:&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Roshani Narasimhan (rnarasi2)&lt;br /&gt;
* Yash Thakkar (yrthakka) &lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
# [http://wiki.expertiza.ncsu.edu/index.php/Main_Page Expertiza]&lt;br /&gt;
# [https://github.com/expertiza/expertiza/pull/1493 Pull request for a Metrics Legend change]&lt;br /&gt;
# [https://github.com/expertiza/expertiza Expertiza Github Repo]&lt;br /&gt;
# [https://github.com/expertiza/expertiza/pull/1614 Our project's Github pull request]&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Display_suggestion_metric_chart_screenshot.png&amp;diff=131117</id>
		<title>File:Display suggestion metric chart screenshot.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Display_suggestion_metric_chart_screenshot.png&amp;diff=131117"/>
		<updated>2019-12-07T06:31:33Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Initialize_suggestion_chart_elements_screenshot.png&amp;diff=131116</id>
		<title>File:Initialize suggestion chart elements screenshot.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Initialize_suggestion_chart_elements_screenshot.png&amp;diff=131116"/>
		<updated>2019-12-07T06:31:25Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Num_suggestions_reviewer_screenshot.png&amp;diff=131115</id>
		<title>File:Num suggestions reviewer screenshot.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Num_suggestions_reviewer_screenshot.png&amp;diff=131115"/>
		<updated>2019-12-07T06:31:13Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: git diff for num_suggestions_reviewer function.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;git diff for num_suggestions_reviewer function.&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Testing_few_screenshot.png&amp;diff=131114</id>
		<title>File:Testing few screenshot.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Testing_few_screenshot.png&amp;diff=131114"/>
		<updated>2019-12-07T06:30:46Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: git diff screenshot of a few testing cases.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;git diff screenshot of a few testing cases.&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Review_mapping_helper_spec_screenshot.png&amp;diff=131113</id>
		<title>File:Review mapping helper spec screenshot.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Review_mapping_helper_spec_screenshot.png&amp;diff=131113"/>
		<updated>2019-12-07T06:30:20Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: git diff screenshot for review mapping helper spec file.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;git diff screenshot for review mapping helper spec file.&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Response_html_screenshot.png&amp;diff=131111</id>
		<title>File:Response html screenshot.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Response_html_screenshot.png&amp;diff=131111"/>
		<updated>2019-12-07T06:29:37Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: Changes made to the response.html.erb file shown in git diff.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Changes made to the response.html.erb file shown in git diff.&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1990._Integrate_suggestion_detection_algorithm&amp;diff=131096</id>
		<title>CSC/ECE 517 Fall 2019 - E1990. Integrate suggestion detection algorithm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1990._Integrate_suggestion_detection_algorithm&amp;diff=131096"/>
		<updated>2019-12-07T06:01:04Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /*  Screenshots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ''' Introduction ''' ==&lt;br /&gt;
* On Expertiza, students receive review comments for their work from their peers. This review mechanism provides the students a chance to correct/modify their work, based on the reviews they receive. It is expected that the reviewers identify problems and suggest solutions, so that the students can improve their projects. &lt;br /&gt;
* It is observed that the students learn more by reviewing others' work than working on the project as it gives them perspective about alternative approaches to solve a problem.&lt;br /&gt;
* The Instructor is facilitated with metrics such as average volume and total volume of the content of the reviews provided by a student.&lt;br /&gt;
&lt;br /&gt;
== ''' Problem Statement ''' ==&lt;br /&gt;
* The reviewers can fill in the review comments on others' work, however they do not receive feedback on how effective their reviews are for the receiver. It would thus make sense to have a feedback mechanism in place, which can identify whether a reviewer has identified problems and provided suggestions for a student or team's project. In order to achieve this, we need to identify the suggestions in the review comments as a way of determining how useful a review would be. This would motivate the reviewers to give better and constructive reviews.&lt;br /&gt;
* We would want the instructor of the course to be able to view how many constructive reviews were provided by a reviewer in comparison to the average number of constructive reviews provided by the other reviewers of the course. The reviews could be graded on this basis.&lt;br /&gt;
* To detect the number of suggestions in a text, there is a web service in place, developed previously by some contributors. We wish to integrate this suggestion detection algorithm and use its results to show the suggestion metrics to the reviewer as well as the instructor.&lt;br /&gt;
* '''Please note that the web service mentioned above is currently not working. Thus we will use simulations to mock the response from the web service for this project. '''&lt;br /&gt;
&lt;br /&gt;
== '''Implementation Details'''==&lt;br /&gt;
&lt;br /&gt;
=== Part 1 : Mocking the response which is to be received from the suggestion detection web service===&lt;br /&gt;
* The suggestion detection algorithm was expected to identify the number of suggestions in the review comments given by a reviewer. To mock this number, we used a random number generator. Now we expect to receive a value between 0-10 as the number of suggestions provided by the student in one round of review. (Refer to method: num_suggestions_for_responses_by_a_reviewer in review_mapping_helper.rb)&lt;br /&gt;
* In order to be able to use integrate the suggestion detection algorithm in the future, we have included a function with the API calls to the service. This function and the corresponding call to this function is currently commented. (Refer to methods: num_suggestions_for_responses_by_a_reviewer and retrieve_review_suggestion_metrics in review_mapping_helper.rb.)&lt;br /&gt;
&lt;br /&gt;
=== Part 2 : Suggestion metrics on saving / submitting review ===&lt;br /&gt;
* We wish to present the reviewer(student) with an idea of how useful their reviews are, in comparison to that of the class. &lt;br /&gt;
*To achieve this, we have included the following in an alert when the reviewer clicks on &amp;quot;Save&amp;quot; or &amp;quot;Submit&amp;quot;:&lt;br /&gt;
**1. The number of suggestions in the review comments provided by the reviewer for that round &lt;br /&gt;
**2. The average number of suggestions in the review comments provided by all reviewers of the class &lt;br /&gt;
(Again, for the purpose of demonstration, we have used values from the random number generator mentioned above.)&lt;br /&gt;
&lt;br /&gt;
=== Part 3 : Suggestion metrics depicted as bar graphs in &amp;quot;Review Reports&amp;quot; page ===&lt;br /&gt;
* We wish to present the instructor with comparison of the number of suggestions present in the review comments provided by a student and the average number of suggestions typically provided by the class. We have represented this data in the form of a bar graph showing the round-wise comparison for each assignment. This visualization adheres to the pattern of visualization which was present on this page for volume of review comments and average volume of review comments.&lt;br /&gt;
&lt;br /&gt;
== ''' Flowchart '''==&lt;br /&gt;
Given below is the design flowchart of our proposed solution:&lt;br /&gt;
  [[File:CSC517 Final Project Flowchart(3).png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Once the student finishes (partly or completely) giving his/her review and clicks on the &amp;quot;Save&amp;quot; or &amp;quot;Submit&amp;quot; button, the web service API will be called and the review's text will be sent as JSON. The PeerLogic web service will send back the output(number of suggestions in the review comments) which will then be displayed in an alert to the student.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;For all the review scores received by the students, the aggregate data will be displayed to the instructor whenever he/she will view the Review Report for any assignment/project. This will be visible in the metrics column of the review report and will be displayed student-wise, i.e., for each student participating in the assignment.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Overview of code changes''' ==&lt;br /&gt;
Please refer to [https://github.com/expertiza/expertiza/pull/1614/files Code changes] for the exact changes.&lt;br /&gt;
&lt;br /&gt;
We have modified the following files (added methods/ added code to methods/ replace code in the methods):&lt;br /&gt;
&lt;br /&gt;
* review_mapping_helper.rb:&lt;br /&gt;
** display_volume_metric_chart(reviewer) - changes made to resize the bar graph for volume metric and removal of legend for every graph.&lt;br /&gt;
** avg_num_suggestions_per_round(assignment_id, round_id, type) - as the name suggests, the goal is to obtain the average number of suggestions provided by the class in each review round of the assignment.&lt;br /&gt;
** num_suggestions_per_student_per_round(response_maps, round_id) - the goal is to obtain the average number of suggestions provided by the student in each review round of the assignment.&lt;br /&gt;
** comments_in_current_response(response_id) - provides a concatenated text consisting of all review comments in the current response.&lt;br /&gt;
** retrieve_review_suggestion_metrics(comments) - this function has been added to be able to make calls to the API in the future, when it starts working. &lt;br /&gt;
** num_suggestions_for_responses_by_a_reviewer(comments) - this function should make a call to the function mentioned above. Currently, we use this function to simulate the number of suggestions in each comment, using a random number generator.&lt;br /&gt;
** num_suggestions_reviewer(responses) - this function provides the number of suggestion given by a reviewer to a student/team's work.&lt;br /&gt;
** display_suggestion_metric_chart(reviewer) - this method sets up the colors, labels and data to generate the bar graph for the suggestion metrics.&lt;br /&gt;
** initialize_suggestion_chart_elements(reviewer) - this method computes the number of suggestions provided by the student in each round, the average number of suggestions provided by the student in all rounds,  the average number of suggestions provided by the class in each round and the average number of suggestions provided by the class in all rounds. This data is generated as a collection of lists.&lt;br /&gt;
&lt;br /&gt;
*_review_report.html.erb: changes are made to restructure the legend and add labels corresponding to suggestion metrics.&lt;br /&gt;
&lt;br /&gt;
* response.html.erb: jQuery changes have been made to get the current response stored in the params and calculate average of the same instantly, when the student clicks on &amp;quot;Save&amp;quot; or &amp;quot;Submit&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== '''Automated Tests''' ==&lt;br /&gt;
* review_assignment_spec.rb: Tests have been added to test the feature of identifying the number of suggestions in a given review.&lt;br /&gt;
** Check whether the student is able to see a suggestion score for his/her review - on clicking save&lt;br /&gt;
** Check whether the student is able to see the average number of suggestions given by the class - on clicking save&lt;br /&gt;
** Check whether the student is able to see a suggestion score for his/her review - on clicking submit&lt;br /&gt;
** Check whether the student is able to see the average number of suggestions given by the class - on clicking submit&lt;br /&gt;
** Check whether the number of suggestions displayed is in the valid range of numbers - on clicking save and submit&lt;br /&gt;
** Check whether the the average number of suggestions given by the class is in the valid range of numbers - on clicking save and submit&lt;br /&gt;
&lt;br /&gt;
* review_mapping_helper_spec.rb : Test have been added to check whether the new legends for metric is now part of the &amp;quot;Review reports&amp;quot; page.&lt;br /&gt;
&lt;br /&gt;
== ''' Screenshots'''==&lt;br /&gt;
Review reports page as visible to the Instructor, after the above mentioned changes.&lt;br /&gt;
  [[File:Review reports.png]]&lt;br /&gt;
  &lt;br /&gt;
Suggestion metrics as visible to the reviewer when saving the review.&lt;br /&gt;
   [[File:SaveScreenshot.png]]&lt;br /&gt;
&lt;br /&gt;
Suggestion metrics as visible to the reviewer when submitting the review.&lt;br /&gt;
   [[File:SubmitScreenshot.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Steps to follow for UI testing ===&lt;br /&gt;
==== For student ====&lt;br /&gt;
    Steps I:&lt;br /&gt;
    1. Login to student profile.&lt;br /&gt;
    2. Go to your open assignments and submit your work.&lt;br /&gt;
    3. Go to that particular assignment and request a review.&lt;br /&gt;
    4. Begin writing a review. &lt;br /&gt;
    5. Click &amp;quot;Save&amp;quot; button to save the review.&lt;br /&gt;
    6. An alert should be displayed that shows the review comment analysis for the student.&lt;br /&gt;
&lt;br /&gt;
    Steps II:&lt;br /&gt;
    1. Login to student profile.&lt;br /&gt;
    2. Go to your open assignments and submit your work.&lt;br /&gt;
    3. Go to that particular assignment and request a review.&lt;br /&gt;
    4. Begin writing a review. &lt;br /&gt;
    5. Click &amp;quot;Submit Review&amp;quot; button to submit the review.&lt;br /&gt;
    6. An alert should be displayed that shows the review comment analysis for the student.&lt;br /&gt;
&lt;br /&gt;
==== For an instructor ====&lt;br /&gt;
    1. Login as an instructor.&lt;br /&gt;
    2. Navigate to all assignments list.&lt;br /&gt;
    3. Click on View Reports button and open Review Report for that assignment.&lt;br /&gt;
    4. The instructor should be able to see each student's review comment analysis for the submitted reviews under the metric column.&lt;br /&gt;
&lt;br /&gt;
== ''' Our Work ''' ==&lt;br /&gt;
&lt;br /&gt;
== ''' Team Information ''' ==&lt;br /&gt;
;Mentor: Ed Gehringer (efg@ncsu.edu)&lt;br /&gt;
;Team Name: Pizzamas&lt;br /&gt;
;Members:&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Roshani Narasimhan (rnarasi2)&lt;br /&gt;
* Yash Thakkar (yrthakka) &lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
# [http://wiki.expertiza.ncsu.edu/index.php/Main_Page Expertiza]&lt;br /&gt;
# [https://github.com/expertiza/expertiza/pull/1493 Pull request for a Metrics Legend change]&lt;br /&gt;
# [https://github.com/expertiza/expertiza Expertiza Github Repo]&lt;br /&gt;
# [https://github.com/expertiza/expertiza/pull/1614 Our project's Github pull request]&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:SubmitScreenshot.png&amp;diff=131094</id>
		<title>File:SubmitScreenshot.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:SubmitScreenshot.png&amp;diff=131094"/>
		<updated>2019-12-07T05:58:13Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: Screenshot of a student's review page when submitting the review.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Screenshot of a student's review page when submitting the review.&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:SaveScreenshot.png&amp;diff=131093</id>
		<title>File:SaveScreenshot.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:SaveScreenshot.png&amp;diff=131093"/>
		<updated>2019-12-07T05:57:46Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: Screenshot of a student's review page when saving the review.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Screenshot of a student's review page when saving the review.&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1990._Integrate_suggestion_detection_algorithm&amp;diff=130780</id>
		<title>CSC/ECE 517 Fall 2019 - E1990. Integrate suggestion detection algorithm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1990._Integrate_suggestion_detection_algorithm&amp;diff=130780"/>
		<updated>2019-12-07T02:29:51Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /*  Anticipated Code Changes  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ''' Introduction ''' ==&lt;br /&gt;
* On Expertiza, students receive review comments for their work from their peers. This review mechanism provides the students a chance to correct/modify their work, based on the reviews they receive. It is expected that the reviewers identify problems and suggest solutions, so that the students can improve their projects. &lt;br /&gt;
* It is observed that the students learn more by reviewing others' work than working on the project as it gives them perspective about alternative approaches to solve a problem.&lt;br /&gt;
* The Instructor is facilitated with metrics such as average volume and total volume of the content of the reviews provided by a student.&lt;br /&gt;
&lt;br /&gt;
== ''' Problem Statement ''' ==&lt;br /&gt;
* The reviewers can fill in the review comments on others' work, however they do not receive feedback on how effective their reviews are for the receiver. It would thus make sense to have a feedback mechanism in place, which can identify whether a reviewer has identified problems and provided suggestions for a student or team's project. In order to achieve this, we need to identify the suggestions in the review comments as a way of determining how useful a review would be. This would motivate the reviewers to give better and constructive reviews.&lt;br /&gt;
* We would want the instructor of the course to be able to view how many constructive reviews were provided by a reviewer in comparison to the average number of constructive reviews provided by the other reviewers of the course. The reviews could be graded on this basis.&lt;br /&gt;
* To detect the number of suggestions in a text, there is a web service in place, developed previously by some contributors. We wish to integrate this suggestion detection algorithm and use its results to show the suggestion metrics to the reviewer as well as the instructor.&lt;br /&gt;
* '''Please note that the web service mentioned above is currently not working. Thus we will use simulations to mock the response from the web service for this project. '''&lt;br /&gt;
&lt;br /&gt;
== '''Implementation Details'''==&lt;br /&gt;
&lt;br /&gt;
=== Part 1 : Mocking the response which is to be received from the suggestion detection web service===&lt;br /&gt;
* The suggestion detection algorithm was expected to identify the number of suggestions in the review comments given by a reviewer. To mock this number, we used a random number generator. Now we expect to receive a value between 0-10 as the number of suggestions provided by the student in one round of review. (Refer to method: num_suggestions_for_responses_by_a_reviewer in review_mapping_helper.rb)&lt;br /&gt;
* In order to be able to use integrate the suggestion detection algorithm in the future, we have included a function with the API calls to the service. This function and the corresponding call to this function is currently commented. (Refer to methods: num_suggestions_for_responses_by_a_reviewer and retrieve_review_suggestion_metrics in review_mapping_helper.rb.)&lt;br /&gt;
&lt;br /&gt;
=== Part 2 : Suggestion metrics on saving / submitting review ===&lt;br /&gt;
* We wish to present the reviewer(student) with an idea of how useful their reviews are, in comparison to that of the class. &lt;br /&gt;
*To achieve this, we have included the following in an alert when the reviewer clicks on &amp;quot;Save&amp;quot; or &amp;quot;Submit&amp;quot;:&lt;br /&gt;
**1. The number of suggestions in the review comments provided by the reviewer for that round &lt;br /&gt;
**2. The average number of suggestions in the review comments provided by all reviewers of the class &lt;br /&gt;
(Again, for the purpose of demonstration, we have used values from the random number generator mentioned above.)&lt;br /&gt;
&lt;br /&gt;
=== Part 3 : Suggestion metrics depicted as bar graphs in &amp;quot;Review Reports&amp;quot; page ===&lt;br /&gt;
* We wish to present the instructor with comparison of the number of suggestions present in the review comments provided by a student and the average number of suggestions typically provided by the class. We have represented this data in the form of a bar graph showing the round-wise comparison for each assignment. This visualization adheres to the pattern of visualization which was present on this page for volume of review comments and average volume of review comments.&lt;br /&gt;
&lt;br /&gt;
== ''' Flowchart '''==&lt;br /&gt;
Given below is the design flowchart of our proposed solution:&lt;br /&gt;
  [[File:CSC517 Final Project Flowchart(3).png]]&lt;br /&gt;
&amp;lt;p&amp;gt; Legend:&lt;br /&gt;
 * Blue - Student/Reviewer&lt;br /&gt;
 * Purple - Instructor&lt;br /&gt;
 * Green - Interactions with the web service&lt;br /&gt;
 * &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;As a student, once the student finishes (partly or completely) giving his/her review and clicks on the &amp;quot;Save&amp;quot; or &amp;quot;Submit&amp;quot; button, the web service API will be called and the review's text will be sent as JSON. The PeerLogic web service will send back the output which will then be displayed in an alert to the student.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;For all the review scores received by the students, the aggregate data will be displayed to the instructor whenever he/she will view the Review Report for any assignment/project. This will be visible in the metrics column of the review report and will be displayed student-wise, i.e., for each student participating in the assignment.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Code changes''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ''' Screenshots'''==&lt;br /&gt;
Review reports page as visible to the Instructor, after the above mentioned changes.&lt;br /&gt;
  [[File:Review reports.png]]&lt;br /&gt;
  &lt;br /&gt;
Suggestion metrics as visible to the reviewer.&lt;br /&gt;
 [[File:Suggestions Display.png]]&lt;br /&gt;
== ''' Anticipated Code Changes ''' ==&lt;br /&gt;
Broadly speaking, the following changes will be made:&lt;br /&gt;
* User: Student&lt;br /&gt;
  - Adding API calls of the suggestion-detection algorithm in the response_controller.rb&lt;br /&gt;
  - Adding an alert to display summarized analysis for all comments in the review&lt;br /&gt;
  - Write unit tests for our method(s) in review_mapping_helper.rb&lt;br /&gt;
  - Write unit tests for our changes in response.html.erb view&lt;br /&gt;
&lt;br /&gt;
* User: Instructor&lt;br /&gt;
  - Adding method call to display the aggregate analysis of student comments/reviews to reports_controller.rb under Metrics column&lt;br /&gt;
  - Write unit tests for our method(s) in reports_controller.rb&lt;br /&gt;
  - Write unit tests for our changes in _review_report.html.erb&lt;br /&gt;
&lt;br /&gt;
==  ''' Test Plan ''' ==&lt;br /&gt;
Below given scenarios is the basic overview of the tests planned on being written.&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing Using Rspec ===&lt;br /&gt;
We will test our project and added functionality using RSepc. Automated tests are carried out to test - &lt;br /&gt;
* Whether the APIs are being called when the student clicks &amp;quot;Save&amp;quot; review button.&lt;br /&gt;
    Steps:&lt;br /&gt;
    &lt;br /&gt;
    1. Login to student profile.&lt;br /&gt;
    2. Go to your open assignments and submit your work.&lt;br /&gt;
    3. Go to that particular assignment and request a review.&lt;br /&gt;
    4. Begin writing a review. &lt;br /&gt;
    5. Click &amp;quot;Save&amp;quot; button to save the review.&lt;br /&gt;
    6. A pop-up should be displayed that shows the review comment analysis for the student.&lt;br /&gt;
* Whether the APIs are being called when the student clicks &amp;quot;Submit Review&amp;quot; button.&lt;br /&gt;
    Steps:&lt;br /&gt;
    &lt;br /&gt;
    1. Login to student profile.&lt;br /&gt;
    2. Go to your open assignments and submit your work.&lt;br /&gt;
    3. Go to that particular assignment and request a review.&lt;br /&gt;
    4. Begin writing a review. &lt;br /&gt;
    5. Click &amp;quot;Submit Review&amp;quot; button to submit the review.&lt;br /&gt;
    6. A pop-up should be displayed that shows the review comment analysis for the student.&lt;br /&gt;
* Whether the pop-up displays review comments analysis when student clicks &amp;quot;Save&amp;quot; button.&lt;br /&gt;
    Steps:&lt;br /&gt;
    &lt;br /&gt;
    1. (As a student) Click &amp;quot;Save&amp;quot; button to save your current review.&lt;br /&gt;
    2. A pop-up should be displayed that shows the review comment analysis for the student.&lt;br /&gt;
    3. Pop-up should display bar graph and comments on the student's review as compared to the average &lt;br /&gt;
       review comments for that assignment.&lt;br /&gt;
    4. Pop-up should display bar graph and comments on the student's review as compared to the total&lt;br /&gt;
       review comments for that assignment.&lt;br /&gt;
* Whether the pop-up displays review comments analysis when student clicks &amp;quot;Submit Review&amp;quot; button.&lt;br /&gt;
    Steps:&lt;br /&gt;
    &lt;br /&gt;
    1. (As a student) Click &amp;quot;Submit Review&amp;quot; button to submit your current review.&lt;br /&gt;
    2. A pop-up should be displayed that shows the review comment analysis for the student.&lt;br /&gt;
    3. Pop-up should display bar graph and comments on the student's review as compared to the average &lt;br /&gt;
       review comments for that assignment.&lt;br /&gt;
    4. Pop-up should display bar graph and comments on the student's review as compared to the total&lt;br /&gt;
       review comments for that assignment.&lt;br /&gt;
* Whether the instructor is able to see each student's aggregate review analysis score when he/she views Review Reports.&lt;br /&gt;
    Steps:&lt;br /&gt;
    &lt;br /&gt;
    1. Login as an instructor.&lt;br /&gt;
    2. Navigate to all assignments list.&lt;br /&gt;
    3. Click on View Reports button and open Review Report for that assignment.&lt;br /&gt;
    4. The instructor should be able to see each student's review comment analysis for the submitted reviews under the metric column.&lt;br /&gt;
&lt;br /&gt;
There can also be other test cases to check for UI elements and control flow tests.&lt;br /&gt;
&lt;br /&gt;
Certain edge cases to look out for:&lt;br /&gt;
# Instructor should not be shown nil/error values when a student has not submitted any reviews.&lt;br /&gt;
# Student should not be shown the pop-up on clicking the &amp;quot;back&amp;quot; button or after refreshing the page.&lt;br /&gt;
&lt;br /&gt;
== ''' Our Work ''' ==&lt;br /&gt;
&lt;br /&gt;
== ''' Team Information ''' ==&lt;br /&gt;
;Mentor: Ed Gehringer (efg@ncsu.edu)&lt;br /&gt;
;Team Name: Pizzamas&lt;br /&gt;
;Members:&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Roshani Narasimhan (rnarasi2)&lt;br /&gt;
* Yash Thakkar (yrthakka) &lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
# [http://wiki.expertiza.ncsu.edu/index.php/Main_Page Expertiza]&lt;br /&gt;
# [https://github.com/expertiza/expertiza/pull/1493 Pull request for a Metrics Legend change]&lt;br /&gt;
# [https://github.com/expertiza/expertiza Expertiza Github Repo]&lt;br /&gt;
# [https://github.com/expertiza/expertiza/pull/1614 Our project's Github pull request]&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1990._Integrate_suggestion_detection_algorithm&amp;diff=129717</id>
		<title>CSC/ECE 517 Fall 2019 - E1990. Integrate suggestion detection algorithm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1990._Integrate_suggestion_detection_algorithm&amp;diff=129717"/>
		<updated>2019-12-02T20:26:19Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ''' Introduction ''' ==&lt;br /&gt;
* On Expertiza, students receive review comments for their work from their peers. This review mechanism provides the students a chance to correct/modify their work, based on the reviews they receive. It is expected that the reviewers identify problems and suggest solutions, so that the students can improve their projects. &lt;br /&gt;
* The Instructor is facilitated with metrics such as average volume and total volume of the content of the reviews provided by a student.&lt;br /&gt;
* It is observed that the students learn more by reviewing others' work than working on the project as it gives them perspective about alternative approaches to solve a problem.&lt;br /&gt;
&lt;br /&gt;
== ''' Problem Statement ''' ==&lt;br /&gt;
* The reviewers can fill in the review comments on others' work, however they do not receive feedback on how effective their reviews are for the receiver. It would thus make sense to have a feedback mechanism in place, which can identify whether a reviewer has identified problems and provided suggestions for a student or team's project. In order to achieve this, we need to identify the suggestions in the review comments as a way of determinimg how useful a review would be. This would motivate the reviewers to give better and constructive reviews.&lt;br /&gt;
* We would want the instructor of the course to be able to view how many constructive reviews were provided by a reviewer in comparison to the average number of constructive reviews provided by the other reviewers of the course. The reviews could be graded on this basis.&lt;br /&gt;
&lt;br /&gt;
== ''' Current Implementation ''' ==&lt;br /&gt;
* Currently, reviewers can only submit reviews for their peers and their comments are not evaluated instantly.&lt;br /&gt;
* Instructor can view insights regarding the text comments entered by the reviewers in terms of the volume of the text. Instructors do not have other metrics with regards to the number of problems and suggestions identified by the reviewers.&lt;br /&gt;
&lt;br /&gt;
== ''' Proposed Solutions ''' ==&lt;br /&gt;
* On the student review page, once a student saves his/her review, a pop can show be shown with the feedback - suggestion scores, problem scores and tone analysis among others.&lt;br /&gt;
* As an instructor, one might be able to check each student's review scores and his performance as compared with the class. These scores along with the metrics will be shown in the review report page under the metrics column.&lt;br /&gt;
&lt;br /&gt;
=== Flowchart ===&lt;br /&gt;
Given below is the design flowchart of our proposed solution:&lt;br /&gt;
  [[File:CSC517 Final Project Flowchart(2).png]]&lt;br /&gt;
&amp;lt;p&amp;gt;As a student, once the student finishes (partly or completely) giving his/her review and clicks on the &amp;quot;Save&amp;quot; or &amp;quot;Submit&amp;quot; button, the web service API will be called and the review's text will be sent as JSON. The PeerLogic web service will send back the output which will then be displayed as a pop-up to the student.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;All the scores for all the reviews conducted by a student will be stored and the aggregate data will be displayed to the instructor whenever he/she will view the Review Report for any assignment/project. This will be visible in the metrics column of the review report and will be displayed student-wise, i.e., for each student participating in the assignment.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ''' Anticipated Code Changes ''' ==&lt;br /&gt;
Broadly speaking, the following changes will be made:&lt;br /&gt;
* User: Student&lt;br /&gt;
  - Adding API calls of the suggestion-detection algorithm in the response_controller.rb&lt;br /&gt;
  - Adding pop-up to display summarized analysis for all comments in the review&lt;br /&gt;
  - Ensure that CORS does not need to be enabled for API call to work&lt;br /&gt;
  - Write unit tests for our method(s) in response_controller.rb&lt;br /&gt;
  - Write unit tests for our changes in response.html.erb view&lt;br /&gt;
&lt;br /&gt;
* User: Instructor&lt;br /&gt;
  - Adding method call to display the aggregate analysis of student comments/reviews to reports_controller.rb under Metrics column&lt;br /&gt;
  - Write unit tests for our method(s) in reports_controller.rb&lt;br /&gt;
  - Write unit tests for our changes in _review_report.html.erb&lt;br /&gt;
&lt;br /&gt;
==  ''' Test Plan ''' ==&lt;br /&gt;
Below given scenarios is the basic overview of the tests planned on being written.&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing Using Rspec ===&lt;br /&gt;
We will test our project and added functionality using RSepc. Automated tests are carried out to test - &lt;br /&gt;
* Whether the APIs are being called when the student clicks &amp;quot;Save&amp;quot; review button.&lt;br /&gt;
    Steps:&lt;br /&gt;
    &lt;br /&gt;
    1. Login to student profile.&lt;br /&gt;
    2. Go to your open assignments and submit your work.&lt;br /&gt;
    3. Go to that particular assignment and request a review.&lt;br /&gt;
    4. Begin writing a review. &lt;br /&gt;
    5. Click &amp;quot;Save&amp;quot; button to save the review.&lt;br /&gt;
    6. A pop-up should be displayed that shows the review comment analysis for the student.&lt;br /&gt;
* Whether the APIs are being called when the student clicks &amp;quot;Submit Review&amp;quot; button.&lt;br /&gt;
    Steps:&lt;br /&gt;
    &lt;br /&gt;
    1. Login to student profile.&lt;br /&gt;
    2. Go to your open assignments and submit your work.&lt;br /&gt;
    3. Go to that particular assignment and request a review.&lt;br /&gt;
    4. Begin writing a review. &lt;br /&gt;
    5. Click &amp;quot;Submit Review&amp;quot; button to submit the review.&lt;br /&gt;
    6. A pop-up should be displayed that shows the review comment analysis for the student.&lt;br /&gt;
* Whether the pop-up displays review comments analysis when student clicks &amp;quot;Save&amp;quot; button.&lt;br /&gt;
    Steps:&lt;br /&gt;
    &lt;br /&gt;
    1. (As a student) Click &amp;quot;Save&amp;quot; button to save your current review.&lt;br /&gt;
    2. A pop-up should be displayed that shows the review comment analysis for the student.&lt;br /&gt;
    3. Pop-up should display bar graph and comments on the student's review as compared to the average &lt;br /&gt;
       review comments for that assignment.&lt;br /&gt;
    4. Pop-up should display bar graph and comments on the student's review as compared to the total&lt;br /&gt;
       review comments for that assignment.&lt;br /&gt;
* Whether the pop-up displays review comments analysis when student clicks &amp;quot;Submit Review&amp;quot; button.&lt;br /&gt;
    Steps:&lt;br /&gt;
    &lt;br /&gt;
    1. (As a student) Click &amp;quot;Submit Review&amp;quot; button to submit your current review.&lt;br /&gt;
    2. A pop-up should be displayed that shows the review comment analysis for the student.&lt;br /&gt;
    3. Pop-up should display bar graph and comments on the student's review as compared to the average &lt;br /&gt;
       review comments for that assignment.&lt;br /&gt;
    4. Pop-up should display bar graph and comments on the student's review as compared to the total&lt;br /&gt;
       review comments for that assignment.&lt;br /&gt;
* Whether the instructor is able to see each student's aggregate review analysis score when he/she views Review Reports.&lt;br /&gt;
    Steps:&lt;br /&gt;
    &lt;br /&gt;
    1. Login as an instructor.&lt;br /&gt;
    2. Navigate to all assignments list.&lt;br /&gt;
    3. Click on View Reports button and open Review Report for that assignment.&lt;br /&gt;
    4. The instructor should be able to see each student's review comment analysis for the submitted reviews under the metric column.&lt;br /&gt;
&lt;br /&gt;
There can also be other test cases to check for UI elements and control flow tests.&lt;br /&gt;
&lt;br /&gt;
Certain edge cases to look out for:&lt;br /&gt;
# Instructor should not be shown nil/error values when a student has not submitted any reviews.&lt;br /&gt;
# Student should not be shown the pop-up on clicking the &amp;quot;back&amp;quot; button or after refreshing the page.&lt;br /&gt;
&lt;br /&gt;
== ''' Our Work ''' ==&lt;br /&gt;
&lt;br /&gt;
== ''' Team Information ''' ==&lt;br /&gt;
;Mentor: Ed Gehringer (efg@ncsu.edu)&lt;br /&gt;
;Team Name: Pizzamas&lt;br /&gt;
;Members:&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Roshani Narasimhan (rnarasi2)&lt;br /&gt;
* Yash Thakkar (yrthakka) &lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
# [http://wiki.expertiza.ncsu.edu/index.php/Main_Page Expertiza]&lt;br /&gt;
# [https://github.com/expertiza/expertiza/pull/1493 Pull request for a Metrics Legend change]&lt;br /&gt;
# [https://github.com/expertiza/expertiza Expertiza Github Repo]&lt;br /&gt;
# [https://github.com/expertiza/expertiza/pull/1614 Our project's Github pull request]&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1990._Integrate_suggestion_detection_algorithm&amp;diff=129381</id>
		<title>CSC/ECE 517 Fall 2019 - E1990. Integrate suggestion detection algorithm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1990._Integrate_suggestion_detection_algorithm&amp;diff=129381"/>
		<updated>2019-11-15T22:07:18Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ''' Introduction ''' ==&lt;br /&gt;
* On Expertiza, students receive review comments for their work from their peers. This review mechanism provides the students a chance to correct/modify their work, based on the reviews they receive. It is expected that the reviewers identify problems and suggest solutions, so that the students can improve their projects. &lt;br /&gt;
* The Instructor is facilitated with metrics such as average volume and total volume of the content of the reviews provided by a student.&lt;br /&gt;
* It is observed that the students learn more by reviewing others' work than working on the project as it gives them perspective about alternative approaches to solve a problem.&lt;br /&gt;
&lt;br /&gt;
== ''' Problem Statement ''' ==&lt;br /&gt;
* The reviewers can fill in the review comments on others' work, however they do not receive feedback on how effective their reviews are for the receiver. It would thus make sense to have a feedback mechanism in place, which can identify whether a reviewer has identified problems and provided suggestions for a student or team's project. In order to achieve this, we need to identify the suggestions in the review comments as a way of determinimg how useful a review would be. This would motivate the reviewers to give better and constructive reviews.&lt;br /&gt;
* We would want the instructor of the course to be able to view how many constructive reviews were provided by a reviewer in comparison to the average number of constructive reviews provided by the other reviewers of the course. The reviews could be graded on this basis.&lt;br /&gt;
&lt;br /&gt;
== ''' Current Implementation ''' ==&lt;br /&gt;
* Currently, reviewers can only submit reviews for their peers and their comments are not evaluated instantly.&lt;br /&gt;
* Instructor can view insights regarding the text comments entered by the reviewers in terms of the volume of the text. Instructors do not have other metrics with regards to the number of problems and suggestions identified by the reviewers.&lt;br /&gt;
&lt;br /&gt;
== ''' Proposed Solutions ''' ==&lt;br /&gt;
* On the student review page, once a student saves his/her review, a pop can show be shown with the feedback - suggestion scores, problem scores and tone analysis among others.&lt;br /&gt;
* As an instructor, one might be able to check each student's review scores and his performance as compared with the class. These scores along with the metrics will be shown in the review report page under the metrics column.&lt;br /&gt;
&lt;br /&gt;
=== Flowchart ===&lt;br /&gt;
Given below is the design flowchart of our proposed solution:&lt;br /&gt;
  [[File:CSC517 Final Project Flowchart(2).png]]&lt;br /&gt;
&amp;lt;p&amp;gt;As a student, once the student finishes (partly or completely) giving his/her review and clicks on the &amp;quot;Save&amp;quot; or &amp;quot;Submit&amp;quot; button, the web service API will be called and the review's text will be sent as JSON. The PeerLogic web service will send back the output which will then be displayed as a pop-up to the student.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;All the scores for all the reviews conducted by a student will be stored and the aggregate data will be displayed to the instructor whenever he/she will view the Review Report for any assignment/project. This will be visible in the metrics column of the review report and will be displayed student-wise, i.e., for each student participating in the assignment.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ''' Anticipated Code Changes ''' ==&lt;br /&gt;
Broadly speaking, the following changes will be made:&lt;br /&gt;
* User: Student&lt;br /&gt;
  - Adding API calls of the suggestion-detection algorithm in the response_controller.rb&lt;br /&gt;
  - Adding pop-up to display summarized analysis for all comments in the review&lt;br /&gt;
  - Ensure that CORS does not need to be enabled for API call to work&lt;br /&gt;
  - Write unit tests for our method(s) in response_controller.rb&lt;br /&gt;
  - Write unit tests for our changes in response.html.erb view&lt;br /&gt;
&lt;br /&gt;
* User: Instructor&lt;br /&gt;
  - Adding method call to display the aggregate analysis of student comments/reviews to reports_controller.rb under Metrics column&lt;br /&gt;
  - Write unit tests for our method(s) in reports_controller.rb&lt;br /&gt;
  - Write unit tests for our changes in _review_report.html.erb&lt;br /&gt;
&lt;br /&gt;
==  ''' Test Plan ''' ==&lt;br /&gt;
Below given scenarios is the basic overview of the tests planned on being written.&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing Using Rspec ===&lt;br /&gt;
We will test our project and added functionality using RSepc. Automated tests are carried out to test - &lt;br /&gt;
* Whether the APIs are being called when the student clicks &amp;quot;Save&amp;quot; review button.&lt;br /&gt;
    Steps:&lt;br /&gt;
    &lt;br /&gt;
    1. Login to student profile.&lt;br /&gt;
    2. Go to your open assignments and submit your work.&lt;br /&gt;
    3. Go to that particular assignment and request a review.&lt;br /&gt;
    4. Begin writing a review. &lt;br /&gt;
    5. Click &amp;quot;Save&amp;quot; button to save the review.&lt;br /&gt;
    6. A pop-up should be displayed that shows the review comment analysis for the student.&lt;br /&gt;
* Whether the APIs are being called when the student clicks &amp;quot;Submit Review&amp;quot; button.&lt;br /&gt;
    Steps:&lt;br /&gt;
    &lt;br /&gt;
    1. Login to student profile.&lt;br /&gt;
    2. Go to your open assignments and submit your work.&lt;br /&gt;
    3. Go to that particular assignment and request a review.&lt;br /&gt;
    4. Begin writing a review. &lt;br /&gt;
    5. Click &amp;quot;Submit Review&amp;quot; button to submit the review.&lt;br /&gt;
    6. A pop-up should be displayed that shows the review comment analysis for the student.&lt;br /&gt;
* Whether the pop-up displays review comments analysis when student clicks &amp;quot;Save&amp;quot; button.&lt;br /&gt;
    Steps:&lt;br /&gt;
    &lt;br /&gt;
    1. (As a student) Click &amp;quot;Save&amp;quot; button to save your current review.&lt;br /&gt;
    2. A pop-up should be displayed that shows the review comment analysis for the student.&lt;br /&gt;
    3. Pop-up should display bar graph and comments on the student's review as compared to the average &lt;br /&gt;
       review comments for that assignment.&lt;br /&gt;
    4. Pop-up should display bar graph and comments on the student's review as compared to the total&lt;br /&gt;
       review comments for that assignment.&lt;br /&gt;
* Whether the pop-up displays review comments analysis when student clicks &amp;quot;Submit Review&amp;quot; button.&lt;br /&gt;
    Steps:&lt;br /&gt;
    &lt;br /&gt;
    1. (As a student) Click &amp;quot;Submit Review&amp;quot; button to submit your current review.&lt;br /&gt;
    2. A pop-up should be displayed that shows the review comment analysis for the student.&lt;br /&gt;
    3. Pop-up should display bar graph and comments on the student's review as compared to the average &lt;br /&gt;
       review comments for that assignment.&lt;br /&gt;
    4. Pop-up should display bar graph and comments on the student's review as compared to the total&lt;br /&gt;
       review comments for that assignment.&lt;br /&gt;
* Whether the instructor is able to see each student's aggregate review analysis score when he/she views Review Reports.&lt;br /&gt;
    Steps:&lt;br /&gt;
    &lt;br /&gt;
    1. Login as an instructor.&lt;br /&gt;
    2. Navigate to all assignments list.&lt;br /&gt;
    3. Click on View Reports button and open Review Report for that assignment.&lt;br /&gt;
    4. The instructor should be able to see each student's review comment analysis for the submitted reviews under the metric column.&lt;br /&gt;
&lt;br /&gt;
There can also be other test cases to check for UI elements and control flow tests.&lt;br /&gt;
&lt;br /&gt;
Certain edge cases to look out for:&lt;br /&gt;
# Instructor should not be shown nil/error values when a student has not submitted any reviews.&lt;br /&gt;
# Student should not be shown the pop-up on clicking the &amp;quot;back&amp;quot; button or after refreshing the page.&lt;br /&gt;
&lt;br /&gt;
== ''' Our Work ''' ==&lt;br /&gt;
&lt;br /&gt;
== ''' Team Information ''' ==&lt;br /&gt;
;Mentor: Ed Gehringer (efg@ncsu.edu)&lt;br /&gt;
;Team Name: Pizzamas&lt;br /&gt;
;Members:&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Roshani Narasimhan (rnarasi2)&lt;br /&gt;
* Yash Thakkar (yrthakka) &lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
# [http://wiki.expertiza.ncsu.edu/index.php/Main_Page Expertiza]&lt;br /&gt;
# [https://github.com/expertiza/expertiza/pull/1493 Pull request for a Metrics Legend change]&lt;br /&gt;
# [https://github.com/expertiza/expertiza Expertiza Github Repo]&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1990._Integrate_suggestion_detection_algorithm&amp;diff=129370</id>
		<title>CSC/ECE 517 Fall 2019 - E1990. Integrate suggestion detection algorithm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1990._Integrate_suggestion_detection_algorithm&amp;diff=129370"/>
		<updated>2019-11-15T21:48:49Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /* Automated Testing Using Rspec */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ''' Introduction ''' ==&lt;br /&gt;
* On Expertiza, students receive review comments for their work from their peers. This review mechanism provides the students a chance to correct/modify their work, based on the reviews they receive. It is expected that the reviewers identify problems and suggest solutions, so that the students can improve their projects. &lt;br /&gt;
* The Instructor is facilitated with metrics such as average volume and total volume of the content of the reviews provided by a student.&lt;br /&gt;
* It is observed that the students learn more by reviewing others' work than working on the project as it gives them perspective about alternative approaches to solve a problem.&lt;br /&gt;
&lt;br /&gt;
== ''' Problem Statement ''' ==&lt;br /&gt;
* The reviewers can fill in the review comments on others' work, however they do not receive feedback on how effective their reviews are for the receiver. It would thus make sense to have a feedback mechanism in place, which can identify whether a reviewer has identified problems and provided suggestions for a student or team's project. In order to achieve this, we need to identify the suggestions in the review comments as a way of determinimg how useful a review would be. This would motivate the reviewers to give better and constructive reviews.&lt;br /&gt;
* We would want the instructor of the course to be able to view how many constructive reviews were provided by a reviewer in comparison to the average number of constructive reviews provided by the other reviewers of the course. The reviews could be graded on this basis.&lt;br /&gt;
&lt;br /&gt;
== ''' Current Implementation ''' ==&lt;br /&gt;
* Currently, reviewers can only submit reviews for their peers and their comments are not evaluated instantly.&lt;br /&gt;
* Instructor can view insights regarding the text comments entered by the reviewers in terms of the volume of the text. Instructors do not have other metrics with regards to the number of problems and suggestions identified by the reviewers.&lt;br /&gt;
&lt;br /&gt;
== ''' Proposed Solutions ''' ==&lt;br /&gt;
* On the student review page, once a student saves his/her review, a pop can show be shown with the feedback - suggestion scores, problem scores and tone analysis among others.&lt;br /&gt;
* As an instructor, one might be able to check each student's review scores and his performance as compared with the class. These scores along with the metrics will be shown in the review report page under the metrics column.&lt;br /&gt;
&lt;br /&gt;
=== Flowchart ===&lt;br /&gt;
Given below is the design flowchart of our proposed solution:&lt;br /&gt;
  [[File:CSC517 Final Project Flowchart(2).png]]&lt;br /&gt;
&amp;lt;p&amp;gt;As a student, once the student finishes (partly or completely) giving his/her review and clicks on the &amp;quot;Save&amp;quot; or &amp;quot;Submit&amp;quot; button, the web service API will be called and the review's text will be sent as JSON. The PeerLogic web service will send back the output which will then be displayed as a pop-up to the student.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;All the scores for all the reviews conducted by a student will be stored and the aggregate data will be displayed to the instructor whenever he/she will view the Review Report for any assignment/project. This will be visible in the metrics column of the review report and will be displayed student-wise, i.e., for each student participating in the assignment.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ''' Anticipated Code Changes ''' ==&lt;br /&gt;
Broadly speaking, the following changes will be made:&lt;br /&gt;
* User: Student&lt;br /&gt;
  - Adding API calls of the suggestion-detection algorithm in the response_controller.rb&lt;br /&gt;
  - Adding pop-up to display summarized analysis for all comments in the review&lt;br /&gt;
  - Ensure that CORS does not need to be enabled for API call to work&lt;br /&gt;
  - Write unit tests for our method(s) in response_controller.rb&lt;br /&gt;
  - Write unit tests for our changes in response.html.erb view&lt;br /&gt;
&lt;br /&gt;
* User: Instructor&lt;br /&gt;
  - Adding method call to display the aggregate analysis of student comments/reviews to reports_controller.rb under Metrics column&lt;br /&gt;
  - Write unit tests for our method(s) in reports_controller.rb&lt;br /&gt;
  - Write unit tests for our changes in _review_report.html.erb&lt;br /&gt;
&lt;br /&gt;
==  ''' Test Plan ''' ==&lt;br /&gt;
Below given scenarios is the basic overview of the tests planned on being written.&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing Using Rspec ===&lt;br /&gt;
We will test our project and added functionality using RSepc. Automated tests are carried out to test - &lt;br /&gt;
* Whether the APIs are being called when the student clicks &amp;quot;Save&amp;quot; review button.&lt;br /&gt;
    Steps:&lt;br /&gt;
    &lt;br /&gt;
    1. Login to student profile.&lt;br /&gt;
    2. Go to your open assignments and submit your work.&lt;br /&gt;
    3. Go to that particular assignment and request a review.&lt;br /&gt;
    4. Begin writing a review. &lt;br /&gt;
    5. Click &amp;quot;Save&amp;quot; button to save the review.&lt;br /&gt;
    6. A pop-up should be displayed that shows the review comment analysis for the student.&lt;br /&gt;
* Whether the APIs are being called when the student clicks &amp;quot;Submit Review&amp;quot; button.&lt;br /&gt;
    Steps:&lt;br /&gt;
    &lt;br /&gt;
    1. Login to student profile.&lt;br /&gt;
    2. Go to your open assignments and submit your work.&lt;br /&gt;
    3. Go to that particular assignment and request a review.&lt;br /&gt;
    4. Begin writing a review. &lt;br /&gt;
    5. Click &amp;quot;Submit Review&amp;quot; button to submit the review.&lt;br /&gt;
    6. A pop-up should be displayed that shows the review comment analysis for the student.&lt;br /&gt;
* Whether the pop-up displays review comments analysis when student clicks &amp;quot;Save&amp;quot; button.&lt;br /&gt;
    Steps:&lt;br /&gt;
    &lt;br /&gt;
    1. (As a student) Click &amp;quot;Save&amp;quot; button to save your current review.&lt;br /&gt;
    2. A pop-up should be displayed that shows the review comment analysis for the student.&lt;br /&gt;
    3. Pop-up should display bar graph and comments on the student's review as compared to the average &lt;br /&gt;
       review comments for that assignment.&lt;br /&gt;
    4. Pop-up should display bar graph and comments on the student's review as compared to the total&lt;br /&gt;
       review comments for that assignment.&lt;br /&gt;
* Whether the pop-up displays review comments analysis when student clicks &amp;quot;Submit Review&amp;quot; button.&lt;br /&gt;
    Steps:&lt;br /&gt;
    &lt;br /&gt;
    1. (As a student) Click &amp;quot;Submit Review&amp;quot; button to submit your current review.&lt;br /&gt;
    2. A pop-up should be displayed that shows the review comment analysis for the student.&lt;br /&gt;
    3. Pop-up should display bar graph and comments on the student's review as compared to the average &lt;br /&gt;
       review comments for that assignment.&lt;br /&gt;
    4. Pop-up should display bar graph and comments on the student's review as compared to the total&lt;br /&gt;
       review comments for that assignment.&lt;br /&gt;
* Whether the instructor is able to see each student's aggregate review analysis score when he/she views Review Reports.&lt;br /&gt;
    Steps:&lt;br /&gt;
    &lt;br /&gt;
    1. Login as an instructor.&lt;br /&gt;
    2. Navigate to all assignments list.&lt;br /&gt;
    3. Click on View Reports button and open Review Report for that assignment.&lt;br /&gt;
    4. The instructor should be able to see each student's review comment analysis for the submitted reviews under the metric column.&lt;br /&gt;
&lt;br /&gt;
There can also be other test cases to check for UI elements and control flow tests.&lt;br /&gt;
&lt;br /&gt;
Certain edge cases to look out for:&lt;br /&gt;
# Instructor should not be shown nil/error values when a student has not submitted any reviews.&lt;br /&gt;
# Student should not be shown the pop-up on clicking the &amp;quot;back&amp;quot; button or after refreshing the page.&lt;br /&gt;
&lt;br /&gt;
== ''' Our Work ''' ==&lt;br /&gt;
&lt;br /&gt;
== ''' Team Information ''' ==&lt;br /&gt;
;Mentor: Ed Gehringer (efg@ncsu.edu)&lt;br /&gt;
;Team Name: Pizzamas&lt;br /&gt;
;Members:&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Roshani Narasimhan (rnarasi2)&lt;br /&gt;
* Yash Thakkar (yrthakka) &lt;br /&gt;
&lt;br /&gt;
===References===&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1990._Integrate_suggestion_detection_algorithm&amp;diff=128857</id>
		<title>CSC/ECE 517 Fall 2019 - E1990. Integrate suggestion detection algorithm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1990._Integrate_suggestion_detection_algorithm&amp;diff=128857"/>
		<updated>2019-11-12T00:09:17Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /*  Team Information  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ''' Introduction ''' ==&lt;br /&gt;
* On Expertiza, students receive review comments for their work from their peers. This review mechanism provides the students a chance to correct/modify their work, based on the reviews they receive. It is expected that the reviewers identify problems and suggest solutions, so that the students can improve their projects. &lt;br /&gt;
* The Instructor is facilitated with metrics such as average volume and total volume of the content of the reviews provided by a student.&lt;br /&gt;
&lt;br /&gt;
== ''' Current Implementation ''' ==&lt;br /&gt;
* Currently, reviewers cannot see insights on the how many problems and suggestions have been identified in their reviews. They can only submit reviews for their peers.&lt;br /&gt;
* Instructor can view insights regarding the text comments entered by the reviewers in terms of the volume of the text. Instructors do not have metrics with regards to the number of problems and suggestions identified by the reviewers.&lt;br /&gt;
&lt;br /&gt;
== ''' Problem Statement ''' ==&lt;br /&gt;
* The reviewers can fill in the review comments on others' work, however they do not receive feedback on how effective their reviews are. It would thus make sense to have a feedback mechanism in place, which can identify whether a reviewer has identified problems and provided suggestions for a student or team's project. In order to achieve this, we need to identify the suggestions in the review comments to determine how useful a review would be. This would motivate the reviewers to give better and constructive reviews.&lt;br /&gt;
* We would want the instructor of the course to be able to view how many constructive reviews were provided by a reviewer in comparison to the average number of constructive reviews provided by the other reviewers of the course.&lt;br /&gt;
&lt;br /&gt;
== ''' Proposed Solutions ''' ==&lt;br /&gt;
* On the student review page, once a student saves his/her review, a pop can show be shown with the feedback - suggestion scores, problem scores and tone analysis among others.&lt;br /&gt;
* As an instructor, one might be able to check each student's review scores and his performance as compared with the class. These scores along with the metrics will be shown in the review report page under the metrics column.&lt;br /&gt;
&lt;br /&gt;
=== Flowchart ===&lt;br /&gt;
Given below is the design flowchart of our proposed solution:&lt;br /&gt;
  [[File:CSC517 Final Project Flowchart (1).png]]&lt;br /&gt;
&amp;lt;p&amp;gt;As a student, once the student finishes (partly or completely) giving his/her review and clicks on the &amp;quot;Save&amp;quot; or &amp;quot;Submit&amp;quot; button, the web service API will be called and the review's text will be sent as JSON. The PeerLogic web service will send back the output which will then be displayed as a pop-up to the student.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;All the scores for all the reviews conducted by a student will be stored and the aggregate data will be displayed to the instructor whenever he/she will view the Review Report for any assignment/project. This will be visible in the metrics column of the review report and will be displayed student-wise, i.e., for each student participating in the assignment.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ''' Code Changes ''' ==&lt;br /&gt;
Broadly speaking, the following changes will be made:&lt;br /&gt;
* User: Student&lt;br /&gt;
  - Adding API calls of the suggestion-detection algorithm to response_controller.rb&lt;br /&gt;
  - Adding pop-up to display summarized analysis for all comments in the review&lt;br /&gt;
  - Ensure that CORS does not need to be enabled for API call to work&lt;br /&gt;
  - Write unit tests for our method(s) in response_controller.rb&lt;br /&gt;
  - Write unit tests for our changes in response.html.erb view&lt;br /&gt;
&lt;br /&gt;
* User: Instructor&lt;br /&gt;
  - Adding method call to display the aggregate analysis of student comments/reviews to reports_controller.rb under Metrics column&lt;br /&gt;
  - Write unit tests for our method(s) in reports_controller.rb&lt;br /&gt;
  - Write unit tests for our changes in _review_report.html.erb&lt;br /&gt;
&lt;br /&gt;
==  ''' Test Plan ''' ==&lt;br /&gt;
Below given scenarios is the basic overview of the tests planned on being written.&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing Using Rspec ===&lt;br /&gt;
We will test our project and added functionality using RSepc. Automated tests are carried out to test - &lt;br /&gt;
# Whether the APIs are being called when the student clicks &amp;quot;Save&amp;quot; review button.&lt;br /&gt;
# Whether the APIs are being called when the student clicks &amp;quot;Submit Review&amp;quot; button.&lt;br /&gt;
# Whether the pop-up displays review comments analysis when student clicks &amp;quot;Save&amp;quot; button.&lt;br /&gt;
# Whether the pop-up displays review comments analysis when student clicks &amp;quot;Submit Review&amp;quot; button.&lt;br /&gt;
# Whether the instructor is able to see each student's aggregate review analysis score when he/she views Review Reports.&lt;br /&gt;
&lt;br /&gt;
There can also be other test cases to check for UI elements and control flow tests.&lt;br /&gt;
&lt;br /&gt;
Certain edge cases to look out for:&lt;br /&gt;
# Instructor should not be shown nil/error values when a student has not submitted any reviews.&lt;br /&gt;
# Student should not be shown the pop-up on clicking the &amp;quot;back&amp;quot; button or after refreshing the page.&lt;br /&gt;
&lt;br /&gt;
== ''' Our Work ''' ==&lt;br /&gt;
&lt;br /&gt;
== ''' Team Information ''' ==&lt;br /&gt;
;Mentor: Ed Gehringer (efg@ncsu.edu)&lt;br /&gt;
;Team Name: Pizzamas&lt;br /&gt;
;Members:&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Roshani Narasimhan (rnarasi2)&lt;br /&gt;
* Yash Thakkar (yrthakka) &lt;br /&gt;
&lt;br /&gt;
===References===&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1990._Integrate_suggestion_detection_algorithm&amp;diff=128856</id>
		<title>CSC/ECE 517 Fall 2019 - E1990. Integrate suggestion detection algorithm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1990._Integrate_suggestion_detection_algorithm&amp;diff=128856"/>
		<updated>2019-11-12T00:08:39Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /*  Team Information  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ''' Introduction ''' ==&lt;br /&gt;
* On Expertiza, students receive review comments for their work from their peers. This review mechanism provides the students a chance to correct/modify their work, based on the reviews they receive. It is expected that the reviewers identify problems and suggest solutions, so that the students can improve their projects. &lt;br /&gt;
* The Instructor is facilitated with metrics such as average volume and total volume of the content of the reviews provided by a student.&lt;br /&gt;
&lt;br /&gt;
== ''' Current Implementation ''' ==&lt;br /&gt;
* Currently, reviewers cannot see insights on the how many problems and suggestions have been identified in their reviews. They can only submit reviews for their peers.&lt;br /&gt;
* Instructor can view insights regarding the text comments entered by the reviewers in terms of the volume of the text. Instructors do not have metrics with regards to the number of problems and suggestions identified by the reviewers.&lt;br /&gt;
&lt;br /&gt;
== ''' Problem Statement ''' ==&lt;br /&gt;
* The reviewers can fill in the review comments on others' work, however they do not receive feedback on how effective their reviews are. It would thus make sense to have a feedback mechanism in place, which can identify whether a reviewer has identified problems and provided suggestions for a student or team's project. In order to achieve this, we need to identify the suggestions in the review comments to determine how useful a review would be. This would motivate the reviewers to give better and constructive reviews.&lt;br /&gt;
* We would want the instructor of the course to be able to view how many constructive reviews were provided by a reviewer in comparison to the average number of constructive reviews provided by the other reviewers of the course.&lt;br /&gt;
&lt;br /&gt;
== ''' Proposed Solutions ''' ==&lt;br /&gt;
* On the student review page, once a student saves his/her review, a pop can show be shown with the feedback - suggestion scores, problem scores and tone analysis among others.&lt;br /&gt;
* As an instructor, one might be able to check each student's review scores and his performance as compared with the class. These scores along with the metrics will be shown in the review report page under the metrics column.&lt;br /&gt;
&lt;br /&gt;
=== Flowchart ===&lt;br /&gt;
Given below is the design flowchart of our proposed solution:&lt;br /&gt;
  [[File:CSC517 Final Project Flowchart (1).png]]&lt;br /&gt;
&amp;lt;p&amp;gt;As a student, once the student finishes (partly or completely) giving his/her review and clicks on the &amp;quot;Save&amp;quot; or &amp;quot;Submit&amp;quot; button, the web service API will be called and the review's text will be sent as JSON. The PeerLogic web service will send back the output which will then be displayed as a pop-up to the student.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;All the scores for all the reviews conducted by a student will be stored and the aggregate data will be displayed to the instructor whenever he/she will view the Review Report for any assignment/project. This will be visible in the metrics column of the review report and will be displayed student-wise, i.e., for each student participating in the assignment.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ''' Code Changes ''' ==&lt;br /&gt;
Broadly speaking, the following changes will be made:&lt;br /&gt;
* User: Student&lt;br /&gt;
  - Adding API calls of the suggestion-detection algorithm to response_controller.rb&lt;br /&gt;
  - Adding pop-up to display summarized analysis for all comments in the review&lt;br /&gt;
  - Ensure that CORS does not need to be enabled for API call to work&lt;br /&gt;
  - Write unit tests for our method(s) in response_controller.rb&lt;br /&gt;
  - Write unit tests for our changes in response.html.erb view&lt;br /&gt;
&lt;br /&gt;
* User: Instructor&lt;br /&gt;
  - Adding method call to display the aggregate analysis of student comments/reviews to reports_controller.rb under Metrics column&lt;br /&gt;
  - Write unit tests for our method(s) in reports_controller.rb&lt;br /&gt;
  - Write unit tests for our changes in _review_report.html.erb&lt;br /&gt;
&lt;br /&gt;
==  ''' Test Plan ''' ==&lt;br /&gt;
Below given scenarios is the basic overview of the tests planned on being written.&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing Using Rspec ===&lt;br /&gt;
We will test our project and added functionality using RSepc. Automated tests are carried out to test - &lt;br /&gt;
# Whether the APIs are being called when the student clicks &amp;quot;Save&amp;quot; review button.&lt;br /&gt;
# Whether the APIs are being called when the student clicks &amp;quot;Submit Review&amp;quot; button.&lt;br /&gt;
# Whether the pop-up displays review comments analysis when student clicks &amp;quot;Save&amp;quot; button.&lt;br /&gt;
# Whether the pop-up displays review comments analysis when student clicks &amp;quot;Submit Review&amp;quot; button.&lt;br /&gt;
# Whether the instructor is able to see each student's aggregate review analysis score when he/she views Review Reports.&lt;br /&gt;
&lt;br /&gt;
There can also be other test cases to check for UI elements and control flow tests.&lt;br /&gt;
&lt;br /&gt;
Certain edge cases to look out for:&lt;br /&gt;
# Instructor should not be shown nil/error values when a student has not submitted any reviews.&lt;br /&gt;
# Student should not be shown the pop-up on clicking the &amp;quot;back&amp;quot; button or after refreshing the page.&lt;br /&gt;
&lt;br /&gt;
== ''' Our Work ''' ==&lt;br /&gt;
&lt;br /&gt;
== ''' Team Information ''' ==&lt;br /&gt;
;Mentor: Ed Gehringer&lt;br /&gt;
;Team Name: Pizzamas&lt;br /&gt;
;Members:&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Roshani Narasimhan (rnarasi2)&lt;br /&gt;
* Yash Thakkar (yrthakka) &lt;br /&gt;
&lt;br /&gt;
===References===&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1990._Integrate_suggestion_detection_algorithm&amp;diff=128854</id>
		<title>CSC/ECE 517 Fall 2019 - E1990. Integrate suggestion detection algorithm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1990._Integrate_suggestion_detection_algorithm&amp;diff=128854"/>
		<updated>2019-11-12T00:06:45Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /*  Test Plan  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ''' Introduction ''' ==&lt;br /&gt;
* On Expertiza, students receive review comments for their work from their peers. This review mechanism provides the students a chance to correct/modify their work, based on the reviews they receive. It is expected that the reviewers identify problems and suggest solutions, so that the students can improve their projects. &lt;br /&gt;
* The Instructor is facilitated with metrics such as average volume and total volume of the content of the reviews provided by a student.&lt;br /&gt;
&lt;br /&gt;
== ''' Current Implementation ''' ==&lt;br /&gt;
* Currently, reviewers cannot see insights on the how many problems and suggestions have been identified in their reviews. They can only submit reviews for their peers.&lt;br /&gt;
* Instructor can view insights regarding the text comments entered by the reviewers in terms of the volume of the text. Instructors do not have metrics with regards to the number of problems and suggestions identified by the reviewers.&lt;br /&gt;
&lt;br /&gt;
== ''' Problem Statement ''' ==&lt;br /&gt;
* The reviewers can fill in the review comments on others' work, however they do not receive feedback on how effective their reviews are. It would thus make sense to have a feedback mechanism in place, which can identify whether a reviewer has identified problems and provided suggestions for a student or team's project. In order to achieve this, we need to identify the suggestions in the review comments to determine how useful a review would be. This would motivate the reviewers to give better and constructive reviews.&lt;br /&gt;
* We would want the instructor of the course to be able to view how many constructive reviews were provided by a reviewer in comparison to the average number of constructive reviews provided by the other reviewers of the course.&lt;br /&gt;
&lt;br /&gt;
== ''' Proposed Solutions ''' ==&lt;br /&gt;
* On the student review page, once a student saves his/her review, a pop can show be shown with the feedback - suggestion scores, problem scores and tone analysis among others.&lt;br /&gt;
* As an instructor, one might be able to check each student's review scores and his performance as compared with the class. These scores along with the metrics will be shown in the review report page under the metrics column.&lt;br /&gt;
&lt;br /&gt;
=== Flowchart ===&lt;br /&gt;
Given below is the design flowchart of our proposed solution:&lt;br /&gt;
  [[File:CSC517 Final Project Flowchart (1).png]]&lt;br /&gt;
&amp;lt;p&amp;gt;As a student, once the student finishes (partly or completely) giving his/her review and clicks on the &amp;quot;Save&amp;quot; or &amp;quot;Submit&amp;quot; button, the web service API will be called and the review's text will be sent as JSON. The PeerLogic web service will send back the output which will then be displayed as a pop-up to the student.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;All the scores for all the reviews conducted by a student will be stored and the aggregate data will be displayed to the instructor whenever he/she will view the Review Report for any assignment/project. This will be visible in the metrics column of the review report and will be displayed student-wise, i.e., for each student participating in the assignment.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ''' Code Changes ''' ==&lt;br /&gt;
Broadly speaking, the following changes will be made:&lt;br /&gt;
* User: Student&lt;br /&gt;
  - Adding API calls of the suggestion-detection algorithm to response_controller.rb&lt;br /&gt;
  - Adding pop-up to display summarized analysis for all comments in the review&lt;br /&gt;
  - Ensure that CORS does not need to be enabled for API call to work&lt;br /&gt;
  - Write unit tests for our method(s) in response_controller.rb&lt;br /&gt;
  - Write unit tests for our changes in response.html.erb view&lt;br /&gt;
&lt;br /&gt;
* User: Instructor&lt;br /&gt;
  - Adding method call to display the aggregate analysis of student comments/reviews to reports_controller.rb under Metrics column&lt;br /&gt;
  - Write unit tests for our method(s) in reports_controller.rb&lt;br /&gt;
  - Write unit tests for our changes in _review_report.html.erb&lt;br /&gt;
&lt;br /&gt;
==  ''' Test Plan ''' ==&lt;br /&gt;
Below given scenarios is the basic overview of the tests planned on being written.&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing Using Rspec ===&lt;br /&gt;
We will test our project and added functionality using RSepc. Automated tests are carried out to test - &lt;br /&gt;
# Whether the APIs are being called when the student clicks &amp;quot;Save&amp;quot; review button.&lt;br /&gt;
# Whether the APIs are being called when the student clicks &amp;quot;Submit Review&amp;quot; button.&lt;br /&gt;
# Whether the pop-up displays review comments analysis when student clicks &amp;quot;Save&amp;quot; button.&lt;br /&gt;
# Whether the pop-up displays review comments analysis when student clicks &amp;quot;Submit Review&amp;quot; button.&lt;br /&gt;
# Whether the instructor is able to see each student's aggregate review analysis score when he/she views Review Reports.&lt;br /&gt;
&lt;br /&gt;
There can also be other test cases to check for UI elements and control flow tests.&lt;br /&gt;
&lt;br /&gt;
Certain edge cases to look out for:&lt;br /&gt;
# Instructor should not be shown nil/error values when a student has not submitted any reviews.&lt;br /&gt;
# Student should not be shown the pop-up on clicking the &amp;quot;back&amp;quot; button or after refreshing the page.&lt;br /&gt;
&lt;br /&gt;
== ''' Our Work ''' ==&lt;br /&gt;
&lt;br /&gt;
== ''' Team Information ''' ==&lt;br /&gt;
Mentor: Ed Gehringer&lt;br /&gt;
Team Name: Pizzamas&lt;br /&gt;
Members:&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Roshani Narasimhan (rnarasi2)&lt;br /&gt;
* Yash Thakkar (yrthakka) &lt;br /&gt;
&lt;br /&gt;
===References===&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1990._Integrate_suggestion_detection_algorithm&amp;diff=128836</id>
		<title>CSC/ECE 517 Fall 2019 - E1990. Integrate suggestion detection algorithm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1990._Integrate_suggestion_detection_algorithm&amp;diff=128836"/>
		<updated>2019-11-11T23:36:01Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /*  Team Information  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ''' Introduction ''' ==&lt;br /&gt;
* On Expertiza, students receive review comments for their work from their peers. This review mechanism provides the students a chance to correct/modify their work, based on the reviews they receive. It is expected that the reviewers identify problems and suggest solutions, so that the students can improve their projects. &lt;br /&gt;
* The Instructor is facilitated with metrics such as average volume and total volume of the content of the reviews provided by a student.&lt;br /&gt;
&lt;br /&gt;
== ''' Current Implementation ''' ==&lt;br /&gt;
* Currently, reviewers cannot see insights on the how many problems and suggestions have been identified in their reviews. They can only submit reviews for their peers.&lt;br /&gt;
* Instructor can view insights regarding the text comments entered by the reviewers in terms of the volume of the text. Instructors do not have metrics with regards to the number of problems and suggestions identified by the reviewers.&lt;br /&gt;
&lt;br /&gt;
== ''' Problem Statement ''' ==&lt;br /&gt;
* The reviewers can fill in the review comments on others' work, however they do not receive feedback on how effective their reviews are. It would thus make sense to have a feedback mechanism in place, which can identify whether a reviewer has identified problems and provided suggestions for a student or team's project. In order to achieve this, we need to identify the suggestions in the review comments to determine how useful a review would be. This would motivate the reviewers to give better and constructive reviews.&lt;br /&gt;
* We would want the instructor of the course to be able to view how many constructive reviews were provided by a reviewer in comparison to the average number of constructive reviews provided by the other reviewers of the course.&lt;br /&gt;
&lt;br /&gt;
== ''' Proposed Solutions ''' ==&lt;br /&gt;
* On the student review page, once a student saves his/her review, a pop can show be shown with the feedback - suggestion scores, problem scores and tone analysis among others.&lt;br /&gt;
* As an instructor, one might be able to check each student's review scores and his performance as compared with the class. These scores along with the metrics will be shown in the review report page under the metrics column.&lt;br /&gt;
&lt;br /&gt;
=== Flowchart ===&lt;br /&gt;
Given below is the design flowchart of our proposed solution:&lt;br /&gt;
  [[File:CSC517 Final Project Flowchart (1).png]]&lt;br /&gt;
&amp;lt;p&amp;gt;As a student, once the student finishes (partly or completely) giving his/her review and clicks on the &amp;quot;Save&amp;quot; or &amp;quot;Submit&amp;quot; button, the web service API will be called and the review's text will be sent as JSON. The PeerLogic web service will send back the output which will then be displayed as a pop-up to the student.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;All the scores for all the reviews conducted by a student will be stored and the aggregate data will be displayed to the instructor whenever he/she will view the Review Report for any assignment/project. This will be visible in the metrics column of the review report and will be displayed student-wise, i.e., for each student participating in the assignment.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ''' Code Changes ''' ==&lt;br /&gt;
Broadly speaking, the following changes will be made:&lt;br /&gt;
* User: Student&lt;br /&gt;
  - Adding API calls of the suggestion-detection algorithm to response_controller.rb&lt;br /&gt;
  - Adding pop-up to display summarized analysis for all comments in the review&lt;br /&gt;
  - Ensure that CORS does not need to be enabled for API call to work&lt;br /&gt;
  - Write unit tests for our method(s) in response_controller.rb&lt;br /&gt;
  - Write unit tests for our changes in response.html.erb view&lt;br /&gt;
&lt;br /&gt;
* User: Instructor&lt;br /&gt;
  - Adding method call to display the aggregate analysis of student comments/reviews to reports_controller.rb under Metrics column&lt;br /&gt;
  - Write unit tests for our method(s) in reports_controller.rb&lt;br /&gt;
  - Write unit tests for our changes in _review_report.html.erb&lt;br /&gt;
&lt;br /&gt;
==  ''' Test Plan ''' ==&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing Using Rspec ===&lt;br /&gt;
&lt;br /&gt;
=== Coverage ===&lt;br /&gt;
&lt;br /&gt;
=== Manual UI Testing ===&lt;br /&gt;
&lt;br /&gt;
== ''' Our Work ''' ==&lt;br /&gt;
&lt;br /&gt;
== ''' Team Information ''' ==&lt;br /&gt;
Mentor: Ed Gehringer&lt;br /&gt;
Team Name: Pizzamas&lt;br /&gt;
Members:&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Roshani Narasimhan (rnarasi2)&lt;br /&gt;
* Yash Thakkar (yrthakka) &lt;br /&gt;
&lt;br /&gt;
===References===&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1990._Integrate_suggestion_detection_algorithm&amp;diff=128834</id>
		<title>CSC/ECE 517 Fall 2019 - E1990. Integrate suggestion detection algorithm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1990._Integrate_suggestion_detection_algorithm&amp;diff=128834"/>
		<updated>2019-11-11T23:21:09Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /*  Code Changes  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ''' Introduction ''' ==&lt;br /&gt;
* On Expertiza, students receive review comments for their work from their peers. This review mechanism provides the students a chance to correct/modify their work, based on the reviews they receive. It is expected that the reviewers identify problems and suggest solutions, so that the students can improve their projects. &lt;br /&gt;
* The Instructor is facilitated with metrics such as average volume and total volume of the content of the reviews provided by a student.&lt;br /&gt;
&lt;br /&gt;
== ''' Current Implementation ''' ==&lt;br /&gt;
* Currently, reviewers cannot see insights on the how many problems and suggestions have been identified in their reviews. They can only submit reviews for their peers.&lt;br /&gt;
* Instructor can view insights regarding the text comments entered by the reviewers in terms of the volume of the text. Instructors do not have metrics with regards to the number of problems and suggestions identified by the reviewers.&lt;br /&gt;
&lt;br /&gt;
== ''' Problem Statement ''' ==&lt;br /&gt;
* The reviewers can fill in the review comments on others' work, however they do not receive feedback on how effective their reviews are. It would thus make sense to have a feedback mechanism in place, which can identify whether a reviewer has identified problems and provided suggestions for a student or team's project. In order to achieve this, we need to identify the suggestions in the review comments to determine how useful a review would be. This would motivate the reviewers to give better and constructive reviews.&lt;br /&gt;
* We would want the instructor of the course to be able to view how many constructive reviews were provided by a reviewer in comparison to the average number of constructive reviews provided by the other reviewers of the course.&lt;br /&gt;
&lt;br /&gt;
== ''' Proposed Solutions ''' ==&lt;br /&gt;
* On the student review page, once a student saves his/her review, a pop can show be shown with the feedback - suggestion scores, problem scores and tone analysis among others.&lt;br /&gt;
* As an instructor, one might be able to check each student's review scores and his performance as compared with the class. These scores along with the metrics will be shown in the review report page under the metrics column.&lt;br /&gt;
&lt;br /&gt;
=== Flowchart ===&lt;br /&gt;
Given below is the design flowchart of our proposed solution:&lt;br /&gt;
  [[File:CSC517 Final Project Flowchart (1).png]]&lt;br /&gt;
&amp;lt;p&amp;gt;As a student, once the student finishes (partly or completely) giving his/her review and clicks on the &amp;quot;Save&amp;quot; or &amp;quot;Submit&amp;quot; button, the web service API will be called and the review's text will be sent as JSON. The PeerLogic web service will send back the output which will then be displayed as a pop-up to the student.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;All the scores for all the reviews conducted by a student will be stored and the aggregate data will be displayed to the instructor whenever he/she will view the Review Report for any assignment/project. This will be visible in the metrics column of the review report and will be displayed student-wise, i.e., for each student participating in the assignment.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ''' Code Changes ''' ==&lt;br /&gt;
Broadly speaking, the following changes will be made:&lt;br /&gt;
* User: Student&lt;br /&gt;
  - Adding API calls of the suggestion-detection algorithm to response_controller.rb&lt;br /&gt;
  - Adding pop-up to display summarized analysis for all comments in the review&lt;br /&gt;
  - Ensure that CORS does not need to be enabled for API call to work&lt;br /&gt;
  - Write unit tests for our method(s) in response_controller.rb&lt;br /&gt;
  - Write unit tests for our changes in response.html.erb view&lt;br /&gt;
&lt;br /&gt;
* User: Instructor&lt;br /&gt;
  - Adding method call to display the aggregate analysis of student comments/reviews to reports_controller.rb under Metrics column&lt;br /&gt;
  - Write unit tests for our method(s) in reports_controller.rb&lt;br /&gt;
  - Write unit tests for our changes in _review_report.html.erb&lt;br /&gt;
&lt;br /&gt;
==  ''' Test Plan ''' ==&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing Using Rspec ===&lt;br /&gt;
&lt;br /&gt;
=== Coverage ===&lt;br /&gt;
&lt;br /&gt;
=== Manual UI Testing ===&lt;br /&gt;
&lt;br /&gt;
== ''' Our Work ''' ==&lt;br /&gt;
&lt;br /&gt;
== ''' Team Information ''' ==&lt;br /&gt;
Mentor: Ed Gehringer&lt;br /&gt;
Team Name: Pizzamas&lt;br /&gt;
Members:&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Roshani (rnarasi2)&lt;br /&gt;
* Yash Thakkar (yrthakka) &lt;br /&gt;
&lt;br /&gt;
===References===&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1990._Integrate_suggestion_detection_algorithm&amp;diff=128832</id>
		<title>CSC/ECE 517 Fall 2019 - E1990. Integrate suggestion detection algorithm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1990._Integrate_suggestion_detection_algorithm&amp;diff=128832"/>
		<updated>2019-11-11T23:11:54Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /*  Proposed Solutions  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ''' Introduction ''' ==&lt;br /&gt;
* On Expertiza, students receive review comments for their work from their peers. This review mechanism provides the students a chance to correct/modify their work, based on the reviews they receive. It is expected that the reviewers identify problems and suggest solutions, so that the students can improve their projects. &lt;br /&gt;
* The Instructor is facilitated with metrics such as average volume and total volume of the content of the reviews provided by a student.&lt;br /&gt;
&lt;br /&gt;
== ''' Current Implementation ''' ==&lt;br /&gt;
* Currently, reviewers cannot see insights on the how many problems and suggestions have been identified in their reviews. They can only submit reviews for their peers.&lt;br /&gt;
* Instructor can view insights regarding the text comments entered by the reviewers in terms of the volume of the text. Instructors do not have metrics with regards to the number of problems and suggestions identified by the reviewers.&lt;br /&gt;
&lt;br /&gt;
== ''' Problem Statement ''' ==&lt;br /&gt;
* The reviewers can fill in the review comments on others' work, however they do not receive feedback on how effective their reviews are. It would thus make sense to have a feedback mechanism in place, which can identify whether a reviewer has identified problems and provided suggestions for a student or team's project. In order to achieve this, we need to identify the suggestions in the review comments to determine how useful a review would be. This would motivate the reviewers to give better and constructive reviews.&lt;br /&gt;
* We would want the instructor of the course to be able to view how many constructive reviews were provided by a reviewer in comparison to the average number of constructive reviews provided by the other reviewers of the course.&lt;br /&gt;
&lt;br /&gt;
== ''' Proposed Solutions ''' ==&lt;br /&gt;
* On the student review page, once a student saves his/her review, a pop can show be shown with the feedback - suggestion scores, problem scores and tone analysis among others.&lt;br /&gt;
* As an instructor, one might be able to check each student's review scores and his performance as compared with the class. These scores along with the metrics will be shown in the review report page under the metrics column.&lt;br /&gt;
&lt;br /&gt;
=== Flowchart ===&lt;br /&gt;
Given below is the design flowchart of our proposed solution:&lt;br /&gt;
  [[File:CSC517 Final Project Flowchart (1).png]]&lt;br /&gt;
&amp;lt;p&amp;gt;As a student, once the student finishes (partly or completely) giving his/her review and clicks on the &amp;quot;Save&amp;quot; or &amp;quot;Submit&amp;quot; button, the web service API will be called and the review's text will be sent as JSON. The PeerLogic web service will send back the output which will then be displayed as a pop-up to the student.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;All the scores for all the reviews conducted by a student will be stored and the aggregate data will be displayed to the instructor whenever he/she will view the Review Report for any assignment/project. This will be visible in the metrics column of the review report and will be displayed student-wise, i.e., for each student participating in the assignment.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ''' Code Changes ''' ==&lt;br /&gt;
&lt;br /&gt;
==  ''' Test Plan ''' ==&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing Using Rspec ===&lt;br /&gt;
&lt;br /&gt;
=== Coverage ===&lt;br /&gt;
&lt;br /&gt;
=== Manual UI Testing ===&lt;br /&gt;
&lt;br /&gt;
== ''' Our Work ''' ==&lt;br /&gt;
&lt;br /&gt;
== ''' Team Information ''' ==&lt;br /&gt;
Mentor: Ed Gehringer&lt;br /&gt;
Team Name: Pizzamas&lt;br /&gt;
Members:&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Roshani (rnarasi2)&lt;br /&gt;
* Yash Thakkar (yrthakka) &lt;br /&gt;
&lt;br /&gt;
===References===&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1990._Integrate_suggestion_detection_algorithm&amp;diff=128831</id>
		<title>CSC/ECE 517 Fall 2019 - E1990. Integrate suggestion detection algorithm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1990._Integrate_suggestion_detection_algorithm&amp;diff=128831"/>
		<updated>2019-11-11T23:04:31Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /*  Team Information  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ''' Introduction ''' ==&lt;br /&gt;
* On Expertiza, students receive review comments for their work from their peers. This review mechanism provides the students a chance to correct/modify their work, based on the reviews they receive. It is expected that the reviewers identify problems and suggest solutions, so that the students can improve their projects. &lt;br /&gt;
* The Instructor is facilitated with metrics such as average volume and total volume of the content of the reviews provided by a student.&lt;br /&gt;
&lt;br /&gt;
== ''' Current Implementation ''' ==&lt;br /&gt;
* Currently, reviewers cannot see insights on the how many problems and suggestions have been identified in their reviews. They can only submit reviews for their peers.&lt;br /&gt;
* Instructor can view insights regarding the text comments entered by the reviewers in terms of the volume of the text. Instructors do not have metrics with regards to the number of problems and suggestions identified by the reviewers.&lt;br /&gt;
&lt;br /&gt;
== ''' Problem Statement ''' ==&lt;br /&gt;
* The reviewers can fill in the review comments on others' work, however they do not receive feedback on how effective their reviews are. It would thus make sense to have a feedback mechanism in place, which can identify whether a reviewer has identified problems and provided suggestions for a student or team's project. In order to achieve this, we need to identify the suggestions in the review comments to determine how useful a review would be. This would motivate the reviewers to give better and constructive reviews.&lt;br /&gt;
* We would want the instructor of the course to be able to view how many constructive reviews were provided by a reviewer in comparison to the average number of constructive reviews provided by the other reviewers of the course.&lt;br /&gt;
&lt;br /&gt;
== ''' Proposed Solutions ''' ==&lt;br /&gt;
* On the student review page, once a student saves his/her review, a pop can show be shown with the feedback - suggestion scores, problem scores and tone analysis among others.&lt;br /&gt;
* As an instructor, one might be able to check each student's review scores and his performance as compared with the class. These scores along with the metrics will be shown in the review report page under the metrics column. &lt;br /&gt;
&lt;br /&gt;
== ''' Code Changes ''' ==&lt;br /&gt;
&lt;br /&gt;
==  ''' Test Plan ''' ==&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing Using Rspec ===&lt;br /&gt;
&lt;br /&gt;
=== Coverage ===&lt;br /&gt;
&lt;br /&gt;
=== Manual UI Testing ===&lt;br /&gt;
&lt;br /&gt;
== ''' Our Work ''' ==&lt;br /&gt;
&lt;br /&gt;
== ''' Team Information ''' ==&lt;br /&gt;
Mentor: Ed Gehringer&lt;br /&gt;
Team Name: Pizzamas&lt;br /&gt;
Members:&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Roshani (rnarasi2)&lt;br /&gt;
* Yash Thakkar (yrthakka) &lt;br /&gt;
&lt;br /&gt;
===References===&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:CSC517_Final_Project_Flowchart_(1).png&amp;diff=128830</id>
		<title>File:CSC517 Final Project Flowchart (1).png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:CSC517_Final_Project_Flowchart_(1).png&amp;diff=128830"/>
		<updated>2019-11-11T23:01:57Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: Design flowchart - 1.
Shows the expected control flow and user interaction in our implementation.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Design flowchart - 1.&lt;br /&gt;
Shows the expected control flow and user interaction in our implementation.&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=127689</id>
		<title>CSC/ECE 517 Fall 2019 - E1964. Export review scores for projects</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=127689"/>
		<updated>2019-11-07T01:05:12Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1964. Export review scores for projects==&lt;br /&gt;
This page provides a description of the [http://expertiza.ncsu.edu/ Expertiza website] project undertaken for OSS component in Object Oriented Design and Development.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[https://github.com/expertiza/expertiza Expertiza GitHub source code] is an Open Source project based on Ruby on Rails framework. It is a software to create renewable learning projects through peer reviews and continuous assessments. It enables group projects and project submissions via URLs and wiki pages as well. It is supported by the National Science Foundation.&lt;br /&gt;
&lt;br /&gt;
===Problem Statement / Motivation===&lt;br /&gt;
This project aims to easily handle review score exporting for instructor and TAs, when they try to export scores from Expertiza to [https://www.webassign.net/ncsu/login.html WebAssign website]. Currently, no such option exists to export scores so that it can be later uploaded to WebAssign efficiently. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Tasks Identified===&lt;br /&gt;
All tasks pertaining to the completion of the project have been listed out here as follows:&lt;br /&gt;
* A new button has been added to export scores. &lt;br /&gt;
* All functionality to be handled will be taken care of using VanillaJS in the view of Review Report.&lt;br /&gt;
* Tests have been written for the UI and CSV creation.&lt;br /&gt;
* Files modified:   &lt;br /&gt;
  1. app/views/reports/_review_report.html.erb                         - Functionality and UI changes.&lt;br /&gt;
  2. spec/features/review_mapping_helper_spec.rb                       - Added new test cases.&lt;br /&gt;
  3. app/controllers/reports_controller.rb                             - Added new function for test case.&lt;br /&gt;
  4. spec/features/review_report_details/review_report_no_data_csv.txt - Created a blank csv for testing.&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
Diagrammatic representation of the workflow of the project is shown as follows:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
    [[File:Review Report Flow Chart Diagram.png]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Screenshot of the Review Report page with the option to export scores (marked in red):&lt;br /&gt;
&lt;br /&gt;
    [[File:Review page.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Code snippet of the added button:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;button onclick=&amp;quot;exportTableToCSV('review_scores.csv')&amp;quot;&amp;gt;Export Review Scores To CSV File&amp;lt;/button&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
   .&lt;br /&gt;
   . &lt;br /&gt;
   .&lt;br /&gt;
   &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;%= link_to user.name(session[:ip]), impersonate_impersonate_path(:user =&amp;gt; {:name =&amp;gt; user.name(session[:ip])}), :method =&amp;gt; :post, :class =&amp;gt; &amp;quot;runityID&amp;quot; %&amp;gt;&lt;br /&gt;
      (&amp;lt;span class=&amp;quot;rname&amp;quot;&amp;gt;&amp;lt;%= user.fullname(session[:ip]) %&amp;gt;&amp;lt;/span&amp;gt;)&lt;br /&gt;
   &amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Screencast==&lt;br /&gt;
#[https://drive.google.com/open?id=1FSXYgkppHZsgEW7_CpY0hvLwA2PqZ5wZ Here] is the link to a screen recording on how to access the functionality and export the CSV file.&lt;br /&gt;
&lt;br /&gt;
==Code and Snapshots==&lt;br /&gt;
We have written two methods inside _review_report.html.erb named exportTableToCSV and downloadCSV which are as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function downloadCSV(csv, filename) {&lt;br /&gt;
var csvFile;&lt;br /&gt;
var downloadLink;&lt;br /&gt;
&lt;br /&gt;
// CSV file&lt;br /&gt;
csvFile = new Blob([csv], {type: &amp;quot;text/csv&amp;quot;});&lt;br /&gt;
&lt;br /&gt;
// Download link&lt;br /&gt;
downloadLink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// File name&lt;br /&gt;
downloadLink.download = filename;&lt;br /&gt;
&lt;br /&gt;
// Create a link to the file&lt;br /&gt;
downloadLink.href = window.URL.createObjectURL(csvFile);&lt;br /&gt;
&lt;br /&gt;
// Hide download link&lt;br /&gt;
downloadLink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Add the link to DOM&lt;br /&gt;
document.body.appendChild(downloadLink);&lt;br /&gt;
&lt;br /&gt;
// Click download link&lt;br /&gt;
downloadLink.click();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	function exportTableToCSV(filename) {&lt;br /&gt;
		var csv = [];&lt;br /&gt;
		var rows = document.querySelector(&amp;quot;table#myTable&amp;quot;).rows;&lt;br /&gt;
		var row = [];&lt;br /&gt;
		row = setHeaderForCSV();&lt;br /&gt;
		csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		for (var i = 1; i &amp;lt; rows.length; i++) {&lt;br /&gt;
			var row = [];&lt;br /&gt;
			&lt;br /&gt;
			reviewer_name = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;td span.rname&amp;quot;).innerHTML + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			reviewer_unityid = rows[i].querySelector(&amp;quot;td a.runityID&amp;quot;).innerHTML;&lt;br /&gt;
			reviewer_emailid = reviewer_unityid + &amp;quot;@ncsu.edu&amp;quot;;&lt;br /&gt;
			reviewer_grade = rows[i].querySelector(&amp;quot;input#grade_for_reviewer&amp;quot;).value;&lt;br /&gt;
			reviewer_comment = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;textarea#comment_for_reviewer&amp;quot;).innerHTML.replace(/&amp;quot;/g,&amp;quot;\'&amp;quot;) + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			&lt;br /&gt;
			row.push(reviewer_name);&lt;br /&gt;
			row.push(reviewer_unityid);&lt;br /&gt;
			row.push(reviewer_emailid);&lt;br /&gt;
			row.push(reviewer_grade);&lt;br /&gt;
			row.push(reviewer_comment);&lt;br /&gt;
			&lt;br /&gt;
      csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
              &lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
    // Call Download CSV file function here&lt;br /&gt;
    downloadCSV(csv.join(&amp;quot;\n&amp;quot;), filename);&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output file has &amp;quot;name&amp;quot;, &amp;quot;unity_id&amp;quot;, &amp;quot;email_id&amp;quot;, &amp;quot;grade&amp;quot; and &amp;quot;comment&amp;quot; fields from the Review Scores Report table.&lt;br /&gt;
&lt;br /&gt;
[[File:Csv_view.png]]&lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
The code has been designed such that all the reviews completed by reviewers for a particular assignment can be seen, graded collected and stored easily by the click of a button. Thus, a good test case would be to check whether the required headers and data are getting stored and to check whether junk data gets stored in the csv if there are no reviews by reviewers. &amp;lt;br&amp;gt;&lt;br /&gt;
Newly created test cases include:&lt;br /&gt;
* Test cases to check for the UI elements in Review Report html page.&lt;br /&gt;
* Test case to check whether added button (&amp;quot;Export Review Scores To CSV File&amp;quot;) is actually rendered in the html page.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  it &amp;quot;has Export Reviews button&amp;quot; do&lt;br /&gt;
    expect(page).to have_button('Export Review Scores To CSV File')&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Test case to see whether a simple CSV with the correct headers (Name, Unity ID, Email ID, Grade and Comments) is being created.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  # test to check whether a blank CSV with headers is being created or not.&lt;br /&gt;
  it &amp;quot;can create an empty csv with just headers&amp;quot; do&lt;br /&gt;
    expected_csv = File.read('spec/features/review_report_details/review_report_no_data_csv.txt')&lt;br /&gt;
    expect(generated_csv(true, @options)).to eq(expected_csv)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # function to generate a simple CSV with headers.&lt;br /&gt;
  def generated_csv(t_assignment, t_options)&lt;br /&gt;
    delimiter = ','&lt;br /&gt;
    CSV.generate(col_sep: delimiter) do |csv|&lt;br /&gt;
      csv &amp;lt;&amp;lt; ReportsController.export_details_fields(t_options)&lt;br /&gt;
      ReportsController.export_details(csv, t_assignment, false)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Test Plan===&lt;br /&gt;
   1. Log into expertiza as the instructor.&amp;lt;br&amp;gt;&lt;br /&gt;
   2. Load all assignments. (Manage -&amp;gt; Assignments)&amp;lt;br&amp;gt;&lt;br /&gt;
   3. Click on 'View Reports' button.&amp;lt;br&amp;gt;&lt;br /&gt;
   4. Choose 'Review Report' from the dropdown and click 'View'.&amp;lt;br&amp;gt;&lt;br /&gt;
   5. You can now export the grade and comments of the reviewers along with their details, i.e, name, unity ID and email.&amp;lt;br&amp;gt;&lt;br /&gt;
   6. The file will be downloaded.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Mentor: Harsh Agrawal &amp;lt;br&amp;gt;&lt;br /&gt;
Team: &amp;lt;br&amp;gt;&lt;br /&gt;
* Yash Thakkar (yrthakka)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
#[http://expertiza.ncsu.edu/ Expertiza website]&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza GitHub source code]&lt;br /&gt;
#[https://www.webassign.net/ncsu/login.html WebAssign website]&lt;br /&gt;
#[http://wiki.expertiza.ncsu.edu/index.php/Main_Page Wiki Expertiza project documentation]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=127649</id>
		<title>CSC/ECE 517 Fall 2019 - E1964. Export review scores for projects</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=127649"/>
		<updated>2019-11-07T00:43:43Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1964. Export review scores for projects==&lt;br /&gt;
This page provides a description of the [http://expertiza.ncsu.edu/ Expertiza website] project undertaken for OSS component in Object Oriented Design and Development.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[https://github.com/expertiza/expertiza Expertiza GitHub source code] is an Open Source project based on Ruby on Rails framework. It is a software to create renewable learning projects through peer reviews and continuous assessments. It enables group projects and project submissions via URLs and wiki pages as well. It is supported by the National Science Foundation.&lt;br /&gt;
&lt;br /&gt;
===Problem Statement / Motivation===&lt;br /&gt;
This project aims to easily handle review score exporting for instructor and TAs, when they try to export scores from Expertiza to [https://www.webassign.net/ncsu/login.html WebAssign website]. Currently, no such option exists to export scores so that it can be later uploaded to WebAssign efficiently. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Tasks Identified===&lt;br /&gt;
All tasks pertaining to the completion of the project have been listed out here as follows:&lt;br /&gt;
* A new button has been added to export scores. &lt;br /&gt;
* All functionality to be handled will be taken care of using VanillaJS in the view of Review Report.&lt;br /&gt;
* Tests have been written for the UI and CSV creation.&lt;br /&gt;
* Files modified:   &lt;br /&gt;
  1. app/views/reports/_review_report.html.erb                         - Functionality and UI changes.&lt;br /&gt;
  2. spec/features/review_mapping_helper_spec.rb                       - Added new test cases.&lt;br /&gt;
  3. app/controllers/reports_controller.rb                             - Added new function for test case.&lt;br /&gt;
  4. spec/features/review_report_details/review_report_no_data_csv.txt - Created a blank csv for testing.&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
Diagrammatic representation of the workflow of the project is shown as follows:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
    [[File:Review Report Flow Chart Diagram.png]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Screenshot of the Review Report page with the option to export scores (marked in red):&lt;br /&gt;
&lt;br /&gt;
    [[File:Review page.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Code snippet of the added button:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;button onclick=&amp;quot;exportTableToCSV('review_scores.csv')&amp;quot;&amp;gt;Export Review Scores To CSV File&amp;lt;/button&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
   .&lt;br /&gt;
   . &lt;br /&gt;
   .&lt;br /&gt;
   &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;%= link_to user.name(session[:ip]), impersonate_impersonate_path(:user =&amp;gt; {:name =&amp;gt; user.name(session[:ip])}), :method =&amp;gt; :post, :class =&amp;gt; &amp;quot;runityID&amp;quot; %&amp;gt;&lt;br /&gt;
      (&amp;lt;span class=&amp;quot;rname&amp;quot;&amp;gt;&amp;lt;%= user.fullname(session[:ip]) %&amp;gt;&amp;lt;/span&amp;gt;)&lt;br /&gt;
   &amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Screencast==&lt;br /&gt;
#[https://drive.google.com/open?id=1FSXYgkppHZsgEW7_CpY0hvLwA2PqZ5wZ Here] is the link to a screen recording on how to access the functionality and export the CSV file.&lt;br /&gt;
&lt;br /&gt;
==Code and Snapshots==&lt;br /&gt;
We have written two methods inside _review_report.html.erb named exportTableToCSV and downloadCSV which are as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function downloadCSV(csv, filename) {&lt;br /&gt;
var csvFile;&lt;br /&gt;
var downloadLink;&lt;br /&gt;
&lt;br /&gt;
// CSV file&lt;br /&gt;
csvFile = new Blob([csv], {type: &amp;quot;text/csv&amp;quot;});&lt;br /&gt;
&lt;br /&gt;
// Download link&lt;br /&gt;
downloadLink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// File name&lt;br /&gt;
downloadLink.download = filename;&lt;br /&gt;
&lt;br /&gt;
// Create a link to the file&lt;br /&gt;
downloadLink.href = window.URL.createObjectURL(csvFile);&lt;br /&gt;
&lt;br /&gt;
// Hide download link&lt;br /&gt;
downloadLink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Add the link to DOM&lt;br /&gt;
document.body.appendChild(downloadLink);&lt;br /&gt;
&lt;br /&gt;
// Click download link&lt;br /&gt;
downloadLink.click();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	function exportTableToCSV(filename) {&lt;br /&gt;
		var csv = [];&lt;br /&gt;
		var rows = document.querySelector(&amp;quot;table#myTable&amp;quot;).rows;&lt;br /&gt;
		var row = [];&lt;br /&gt;
		row = setHeaderForCSV();&lt;br /&gt;
		csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		for (var i = 1; i &amp;lt; rows.length; i++) {&lt;br /&gt;
			var row = [];&lt;br /&gt;
			&lt;br /&gt;
			reviewer_name = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;td span.rname&amp;quot;).innerHTML + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			reviewer_unityid = rows[i].querySelector(&amp;quot;td a.runityID&amp;quot;).innerHTML;&lt;br /&gt;
			reviewer_emailid = reviewer_unityid + &amp;quot;@ncsu.edu&amp;quot;;&lt;br /&gt;
			reviewer_grade = rows[i].querySelector(&amp;quot;input#grade_for_reviewer&amp;quot;).value;&lt;br /&gt;
			reviewer_comment = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;textarea#comment_for_reviewer&amp;quot;).innerHTML.replace(/&amp;quot;/g,&amp;quot;\'&amp;quot;) + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			&lt;br /&gt;
			row.push(reviewer_name);&lt;br /&gt;
			row.push(reviewer_unityid);&lt;br /&gt;
			row.push(reviewer_emailid);&lt;br /&gt;
			row.push(reviewer_grade);&lt;br /&gt;
			row.push(reviewer_comment);&lt;br /&gt;
			&lt;br /&gt;
      csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
              &lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
    // Call Download CSV file function here&lt;br /&gt;
    downloadCSV(csv.join(&amp;quot;\n&amp;quot;), filename);&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output file has &amp;quot;name&amp;quot;, &amp;quot;unity_id&amp;quot;, &amp;quot;email_id&amp;quot;, &amp;quot;grade&amp;quot; and &amp;quot;comment&amp;quot; fields from the Review Scores Report table.&lt;br /&gt;
&lt;br /&gt;
[[File:Csv_view.png]]&lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
The code has been designed such that all the reviews completed by reviewers for a particular assignment can be seen, graded collected and stored easily by the click of a button. Thus, a good test case would be to check whether the required headers and data are getting stored and to check whether junk data gets stored in the csv if there are no reviews by reviewers. &amp;lt;br&amp;gt;&lt;br /&gt;
Newly created test cases include:&lt;br /&gt;
* Test cases to check for the UI elements in Review Report html page.&lt;br /&gt;
* Test case to check whether added button (&amp;quot;Export Review Scores To CSV File&amp;quot;) is actually rendered in the html page.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  it &amp;quot;has Export Reviews button&amp;quot; do&lt;br /&gt;
    expect(page).to have_button('Export Review Scores To CSV File')&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Test case to see whether a simple CSV with the correct headers (Name, Unity ID, Email ID, Grade and Comments) is being created.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  # test to check whether a blank CSV with headers is being created or not.&lt;br /&gt;
  it &amp;quot;can create an empty csv with just headers&amp;quot; do&lt;br /&gt;
    expected_csv = File.read('spec/features/review_report_details/review_report_no_data_csv.txt')&lt;br /&gt;
    expect(generated_csv(true, @options)).to eq(expected_csv)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # function to generate a simple CSV with headers.&lt;br /&gt;
  def generated_csv(t_assignment, t_options)&lt;br /&gt;
    delimiter = ','&lt;br /&gt;
    CSV.generate(col_sep: delimiter) do |csv|&lt;br /&gt;
      csv &amp;lt;&amp;lt; ReportsController.export_details_fields(t_options)&lt;br /&gt;
      ReportsController.export_details(csv, t_assignment, false)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Test Plan===&lt;br /&gt;
   1. Log into expertiza as the instructor.&amp;lt;br&amp;gt;&lt;br /&gt;
   2. Load all assignments. (Manage -&amp;gt; Assignments)&amp;lt;br&amp;gt;&lt;br /&gt;
   3. Click on 'View Reports' button.&amp;lt;br&amp;gt;&lt;br /&gt;
   4. Choose 'Review Report' from the dropdown and click 'View'.&amp;lt;br&amp;gt;&lt;br /&gt;
   5. You can now export the grade and comments of the reviewers along with their details, i.e, name, unity ID and email.&amp;lt;br&amp;gt;&lt;br /&gt;
   6. The file will be downloaded.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Design===&lt;br /&gt;
The aim of our project was to implement exporting of review scores from Expertiza software. To accomplish this, we shall advance by using the delegation pattern to add exporting capabilities to the _review_report.html.erb for exporting review scores.&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Mentor: Harsh Agrawal &amp;lt;br&amp;gt;&lt;br /&gt;
Team: &amp;lt;br&amp;gt;&lt;br /&gt;
* Yash Thakkar (yrthakka)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
#[http://expertiza.ncsu.edu/ Expertiza website]&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza GitHub source code]&lt;br /&gt;
#[https://www.webassign.net/ncsu/login.html WebAssign website]&lt;br /&gt;
#[http://wiki.expertiza.ncsu.edu/index.php/Main_Page Wiki Expertiza project documentation]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=127634</id>
		<title>CSC/ECE 517 Fall 2019 - E1964. Export review scores for projects</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=127634"/>
		<updated>2019-11-07T00:41:04Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /* Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1964. Export review scores for projects==&lt;br /&gt;
This page provides a description of the [http://expertiza.ncsu.edu/ Expertiza website] project undertaken for OSS component in Object Oriented Design and Development.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[https://github.com/expertiza/expertiza Expertiza GitHub source code] is an Open Source project based on Ruby on Rails framework. It is a software to create renewable learning projects through peer reviews and continuous assessments. It enables group projects and project submissions via URLs and wiki pages as well. It is supported by the National Science Foundation.&lt;br /&gt;
&lt;br /&gt;
===Problem Statement / Motivation===&lt;br /&gt;
This project aims to easily handle review score exporting for instructor and TAs, when they try to export scores from Expertiza to [https://www.webassign.net/ncsu/login.html WebAssign website]. Currently, no such option exists to export scores so that it can be later uploaded to WebAssign efficiently. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Tasks Identified===&lt;br /&gt;
All tasks pertaining to the completion of the project have been listed out here as follows:&lt;br /&gt;
* A new button has been added to export scores. &lt;br /&gt;
* All functionality to be handled will be taken care of using VanillaJS in the view of Review Report.&lt;br /&gt;
* Tests have been written for the UI and CSV creation.&lt;br /&gt;
* Files modified:   &lt;br /&gt;
  1. app/views/reports/_review_report.html.erb                         - Functionality and UI changes.&lt;br /&gt;
  2. spec/features/review_mapping_helper_spec.rb                       - Added new test cases.&lt;br /&gt;
  3. app/controllers/reports_controller.rb                             - Added new function for test case.&lt;br /&gt;
  4. spec/features/review_report_details/review_report_no_data_csv.txt - Created a blank csv for testing.&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
Diagrammatic representation of the workflow of the project is shown as follows:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
    [[File:Review Report Flow Chart Diagram.png]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Screenshot of the Review Report page with the option to export scores (marked in red):&lt;br /&gt;
&lt;br /&gt;
    [[File:Review page.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Code snippet of the added button:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;button onclick=&amp;quot;exportTableToCSV('review_scores.csv')&amp;quot;&amp;gt;Export Review Scores To CSV File&amp;lt;/button&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
   .&lt;br /&gt;
   . &lt;br /&gt;
   .&lt;br /&gt;
   &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;%= link_to user.name(session[:ip]), impersonate_impersonate_path(:user =&amp;gt; {:name =&amp;gt; user.name(session[:ip])}), :method =&amp;gt; :post, :class =&amp;gt; &amp;quot;runityID&amp;quot; %&amp;gt;&lt;br /&gt;
      (&amp;lt;span class=&amp;quot;rname&amp;quot;&amp;gt;&amp;lt;%= user.fullname(session[:ip]) %&amp;gt;&amp;lt;/span&amp;gt;)&lt;br /&gt;
   &amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Screencast==&lt;br /&gt;
#[https://drive.google.com/open?id=1FSXYgkppHZsgEW7_CpY0hvLwA2PqZ5wZ Here] is the link to a screen recording on how to access the functionality and export the CSV file.&lt;br /&gt;
&lt;br /&gt;
==Code and Snapshots==&lt;br /&gt;
We have written two methods inside _review_report.html.erb named exportTableToCSV and downloadCSV which are as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function downloadCSV(csv, filename) {&lt;br /&gt;
var csvFile;&lt;br /&gt;
var downloadLink;&lt;br /&gt;
&lt;br /&gt;
// CSV file&lt;br /&gt;
csvFile = new Blob([csv], {type: &amp;quot;text/csv&amp;quot;});&lt;br /&gt;
&lt;br /&gt;
// Download link&lt;br /&gt;
downloadLink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// File name&lt;br /&gt;
downloadLink.download = filename;&lt;br /&gt;
&lt;br /&gt;
// Create a link to the file&lt;br /&gt;
downloadLink.href = window.URL.createObjectURL(csvFile);&lt;br /&gt;
&lt;br /&gt;
// Hide download link&lt;br /&gt;
downloadLink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Add the link to DOM&lt;br /&gt;
document.body.appendChild(downloadLink);&lt;br /&gt;
&lt;br /&gt;
// Click download link&lt;br /&gt;
downloadLink.click();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	function exportTableToCSV(filename) {&lt;br /&gt;
		var csv = [];&lt;br /&gt;
		var rows = document.querySelector(&amp;quot;table#myTable&amp;quot;).rows;&lt;br /&gt;
		var row = [];&lt;br /&gt;
		row = setHeaderForCSV();&lt;br /&gt;
		csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		for (var i = 1; i &amp;lt; rows.length; i++) {&lt;br /&gt;
			var row = [];&lt;br /&gt;
			&lt;br /&gt;
			reviewer_name = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;td span.rname&amp;quot;).innerHTML + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			reviewer_unityid = rows[i].querySelector(&amp;quot;td a.runityID&amp;quot;).innerHTML;&lt;br /&gt;
			reviewer_emailid = reviewer_unityid + &amp;quot;@ncsu.edu&amp;quot;;&lt;br /&gt;
			reviewer_grade = rows[i].querySelector(&amp;quot;input#grade_for_reviewer&amp;quot;).value;&lt;br /&gt;
			reviewer_comment = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;textarea#comment_for_reviewer&amp;quot;).innerHTML.replace(/&amp;quot;/g,&amp;quot;\'&amp;quot;) + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			&lt;br /&gt;
			row.push(reviewer_name);&lt;br /&gt;
			row.push(reviewer_unityid);&lt;br /&gt;
			row.push(reviewer_emailid);&lt;br /&gt;
			row.push(reviewer_grade);&lt;br /&gt;
			row.push(reviewer_comment);&lt;br /&gt;
			&lt;br /&gt;
      csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
              &lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
    // Call Download CSV file function here&lt;br /&gt;
    downloadCSV(csv.join(&amp;quot;\n&amp;quot;), filename);&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output file has &amp;quot;name&amp;quot;, &amp;quot;unity_id&amp;quot;, &amp;quot;email_id&amp;quot;, &amp;quot;grade&amp;quot; and &amp;quot;comment&amp;quot; fields from the Review Scores Report table.&lt;br /&gt;
&lt;br /&gt;
[[File:Csv_view.png]]&lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
The code has been designed such that all the reviews completed by reviewers for a particular assignment can be seen, graded collected and stored easily by the click of a button. Thus, a good test case would be to check whether the required headers and data are getting stored and to check whether junk data gets stored in the csv if there are no reviews by reviewers. &amp;lt;br&amp;gt;&lt;br /&gt;
Newly created test cases include:&lt;br /&gt;
* Test cases to check for the UI elements in Review Report html page.&lt;br /&gt;
* Test case to check whether added button (&amp;quot;Export Review Scores To CSV File&amp;quot;) is actually rendered in the html page.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  it &amp;quot;has Export Reviews button&amp;quot; do&lt;br /&gt;
    expect(page).to have_button('Export Review Scores To CSV File')&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Test case to see whether a simple CSV with the correct headers (Name, Unity ID, Email ID, Grade and Comments) is being created.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  # test to check whether a blank CSV with headers is being created or not.&lt;br /&gt;
  it &amp;quot;can create an empty csv with just headers&amp;quot; do&lt;br /&gt;
    expected_csv = File.read('spec/features/review_report_details/review_report_no_data_csv.txt')&lt;br /&gt;
    expect(generated_csv(true, @options)).to eq(expected_csv)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # function to generate a simple CSV with headers.&lt;br /&gt;
  def generated_csv(t_assignment, t_options)&lt;br /&gt;
    delimiter = ','&lt;br /&gt;
    CSV.generate(col_sep: delimiter) do |csv|&lt;br /&gt;
      csv &amp;lt;&amp;lt; ReportsController.export_details_fields(t_options)&lt;br /&gt;
      ReportsController.export_details(csv, t_assignment, false)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Test Plan===&lt;br /&gt;
   1. Log into expertiza as the instructor.&amp;lt;br&amp;gt;&lt;br /&gt;
   2. Load all assignments. (Manage -&amp;gt; Assignments)&amp;lt;br&amp;gt;&lt;br /&gt;
   3. Click on 'View Reports' button.&amp;lt;br&amp;gt;&lt;br /&gt;
   4. Choose 'Review Report' from the dropdown and click 'View'.&amp;lt;br&amp;gt;&lt;br /&gt;
   5. You can now export the grade and comments of the reviewers along with their details, i.e, name, unity ID and email.&amp;lt;br&amp;gt;&lt;br /&gt;
   6. The file will be downloaded.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Design===&lt;br /&gt;
The aim of our project was to implement exporting of review scores from Expertiza software. To accomplish this, we shall advance by using the delegation pattern to add exporting capabilities to the _review_report.html.erb for exporting review scores.&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Mentor: Harsh Agrawal &amp;lt;br&amp;gt;&lt;br /&gt;
Team: &amp;lt;br&amp;gt;&lt;br /&gt;
* Yash Thakkar (yrthakka)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
#[http://expertiza.ncsu.edu/ Expertiza website]&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza GitHub source code]&lt;br /&gt;
#[https://www.webassign.net/ncsu/login.html WebAssign website]&lt;br /&gt;
#[http://wikis.lib.ncsu.edu/index.php/Expertiza Wiki Expertiza project documentation]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=127632</id>
		<title>CSC/ECE 517 Fall 2019 - E1964. Export review scores for projects</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=127632"/>
		<updated>2019-11-07T00:37:54Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /* About Expertiza */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1964. Export review scores for projects==&lt;br /&gt;
This page provides a description of the [http://expertiza.ncsu.edu/ Expertiza website] project undertaken for OSS component in Object Oriented Design and Development.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[https://github.com/expertiza/expertiza Expertiza GitHub source code] is an Open Source project based on Ruby on Rails framework. It is a software to create renewable learning projects through peer reviews and continuous assessments. It enables group projects and project submissions via URLs and wiki pages as well. It is supported by the National Science Foundation.&lt;br /&gt;
&lt;br /&gt;
===Problem Statement / Motivation===&lt;br /&gt;
This project aims to easily handle review score exporting for instructor and TAs, when they try to export scores from Expertiza to [https://www.webassign.net/ncsu/login.html WebAssign website]. Currently, no such option exists to export scores so that it can be later uploaded to WebAssign efficiently. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Tasks Identified===&lt;br /&gt;
All tasks pertaining to the completion of the project have been listed out here as follows:&lt;br /&gt;
* A new button has been added to export scores. &lt;br /&gt;
* All functionality to be handled will be taken care of using VanillaJS in the view of Review Report.&lt;br /&gt;
* Tests have been written for the UI and CSV creation.&lt;br /&gt;
* Files modified:   &lt;br /&gt;
  1. app/views/reports/_review_report.html.erb                         - Functionality and UI changes.&lt;br /&gt;
  2. spec/features/review_mapping_helper_spec.rb                       - Added new test cases.&lt;br /&gt;
  3. app/controllers/reports_controller.rb                             - Added new function for test case.&lt;br /&gt;
  4. spec/features/review_report_details/review_report_no_data_csv.txt - Created a blank csv for testing.&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
Diagrammatic representation of the workflow of the project is shown as follows:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Review Report Flow Chart Diagram.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review page.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;button onclick=&amp;quot;exportTableToCSV('review_scores.csv')&amp;quot;&amp;gt;Export Review Scores To CSV File&amp;lt;/button&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
   .&lt;br /&gt;
   . &lt;br /&gt;
   .&lt;br /&gt;
   &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;%= link_to user.name(session[:ip]), impersonate_impersonate_path(:user =&amp;gt; {:name =&amp;gt; user.name(session[:ip])}), :method =&amp;gt; :post, :class =&amp;gt; &amp;quot;runityID&amp;quot; %&amp;gt;&lt;br /&gt;
      (&amp;lt;span class=&amp;quot;rname&amp;quot;&amp;gt;&amp;lt;%= user.fullname(session[:ip]) %&amp;gt;&amp;lt;/span&amp;gt;)&lt;br /&gt;
   &amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Screencast==&lt;br /&gt;
#[https://drive.google.com/open?id=1FSXYgkppHZsgEW7_CpY0hvLwA2PqZ5wZ Here] is the link to a screen recording on how to access the functionality and export the CSV file.&lt;br /&gt;
&lt;br /&gt;
==Code and Snapshots==&lt;br /&gt;
We have written two methods inside _review_report.html.erb named exportTableToCSV and downloadCSV which are as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function downloadCSV(csv, filename) {&lt;br /&gt;
var csvFile;&lt;br /&gt;
var downloadLink;&lt;br /&gt;
&lt;br /&gt;
// CSV file&lt;br /&gt;
csvFile = new Blob([csv], {type: &amp;quot;text/csv&amp;quot;});&lt;br /&gt;
&lt;br /&gt;
// Download link&lt;br /&gt;
downloadLink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// File name&lt;br /&gt;
downloadLink.download = filename;&lt;br /&gt;
&lt;br /&gt;
// Create a link to the file&lt;br /&gt;
downloadLink.href = window.URL.createObjectURL(csvFile);&lt;br /&gt;
&lt;br /&gt;
// Hide download link&lt;br /&gt;
downloadLink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Add the link to DOM&lt;br /&gt;
document.body.appendChild(downloadLink);&lt;br /&gt;
&lt;br /&gt;
// Click download link&lt;br /&gt;
downloadLink.click();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	function exportTableToCSV(filename) {&lt;br /&gt;
		var csv = [];&lt;br /&gt;
		var rows = document.querySelector(&amp;quot;table#myTable&amp;quot;).rows;&lt;br /&gt;
		var row = [];&lt;br /&gt;
		row = setHeaderForCSV();&lt;br /&gt;
		csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		for (var i = 1; i &amp;lt; rows.length; i++) {&lt;br /&gt;
			var row = [];&lt;br /&gt;
			&lt;br /&gt;
			reviewer_name = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;td span.rname&amp;quot;).innerHTML + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			reviewer_unityid = rows[i].querySelector(&amp;quot;td a.runityID&amp;quot;).innerHTML;&lt;br /&gt;
			reviewer_emailid = reviewer_unityid + &amp;quot;@ncsu.edu&amp;quot;;&lt;br /&gt;
			reviewer_grade = rows[i].querySelector(&amp;quot;input#grade_for_reviewer&amp;quot;).value;&lt;br /&gt;
			reviewer_comment = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;textarea#comment_for_reviewer&amp;quot;).innerHTML.replace(/&amp;quot;/g,&amp;quot;\'&amp;quot;) + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			&lt;br /&gt;
			row.push(reviewer_name);&lt;br /&gt;
			row.push(reviewer_unityid);&lt;br /&gt;
			row.push(reviewer_emailid);&lt;br /&gt;
			row.push(reviewer_grade);&lt;br /&gt;
			row.push(reviewer_comment);&lt;br /&gt;
			&lt;br /&gt;
      csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
              &lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
    // Call Download CSV file function here&lt;br /&gt;
    downloadCSV(csv.join(&amp;quot;\n&amp;quot;), filename);&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output file has &amp;quot;name&amp;quot;, &amp;quot;unity_id&amp;quot;, &amp;quot;email_id&amp;quot;, &amp;quot;grade&amp;quot; and &amp;quot;comment&amp;quot; fields from the Review Scores Report table.&lt;br /&gt;
&lt;br /&gt;
[[File:Csv_view.png]]&lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
The code has been designed such that all the reviews completed by reviewers for a particular assignment can be seen, graded collected and stored easily by the click of a button. Thus, a good test case would be to check whether the required headers and data are getting stored and to check whether junk data gets stored in the csv if there are no reviews by reviewers. &amp;lt;br&amp;gt;&lt;br /&gt;
Newly created test cases include:&lt;br /&gt;
* Test cases to check for the UI elements in Review Report html page.&lt;br /&gt;
* Test case to check whether added button (&amp;quot;Export Review Scores To CSV File&amp;quot;) is actually rendered in the html page.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  it &amp;quot;has Export Reviews button&amp;quot; do&lt;br /&gt;
    expect(page).to have_button('Export Review Scores To CSV File')&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Test case to see whether a simple CSV with the correct headers (Name, Unity ID, Email ID, Grade and Comments) is being created.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  # test to check whether a blank CSV with headers is being created or not.&lt;br /&gt;
  it &amp;quot;can create an empty csv with just headers&amp;quot; do&lt;br /&gt;
    expected_csv = File.read('spec/features/review_report_details/review_report_no_data_csv.txt')&lt;br /&gt;
    expect(generated_csv(true, @options)).to eq(expected_csv)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # function to generate a simple CSV with headers.&lt;br /&gt;
  def generated_csv(t_assignment, t_options)&lt;br /&gt;
    delimiter = ','&lt;br /&gt;
    CSV.generate(col_sep: delimiter) do |csv|&lt;br /&gt;
      csv &amp;lt;&amp;lt; ReportsController.export_details_fields(t_options)&lt;br /&gt;
      ReportsController.export_details(csv, t_assignment, false)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Test Plan===&lt;br /&gt;
   1. Log into expertiza as the instructor.&amp;lt;br&amp;gt;&lt;br /&gt;
   2. Load all assignments. (Manage -&amp;gt; Assignments)&amp;lt;br&amp;gt;&lt;br /&gt;
   3. Click on 'View Reports' button.&amp;lt;br&amp;gt;&lt;br /&gt;
   4. Choose 'Review Report' from the dropdown and click 'View'.&amp;lt;br&amp;gt;&lt;br /&gt;
   5. You can now export the grade and comments of the reviewers along with their details, i.e, name, unity ID and email.&amp;lt;br&amp;gt;&lt;br /&gt;
   6. The file will be downloaded.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Design===&lt;br /&gt;
The aim of our project was to implement exporting of review scores from Expertiza software. To accomplish this, we shall advance by using the delegation pattern to add exporting capabilities to the _review_report.html.erb for exporting review scores.&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Mentor: Harsh Agrawal &amp;lt;br&amp;gt;&lt;br /&gt;
Team: &amp;lt;br&amp;gt;&lt;br /&gt;
* Yash Thakkar (yrthakka)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
#[http://expertiza.ncsu.edu/ Expertiza website]&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza GitHub source code]&lt;br /&gt;
#[https://www.webassign.net/ncsu/login.html WebAssign website]&lt;br /&gt;
#[http://wikis.lib.ncsu.edu/index.php/Expertiza Wiki Expertiza project documentation]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=127631</id>
		<title>CSC/ECE 517 Fall 2019 - E1964. Export review scores for projects</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=127631"/>
		<updated>2019-11-07T00:37:45Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /* E1964. Export review scores for projects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1964. Export review scores for projects==&lt;br /&gt;
This page provides a description of the [http://expertiza.ncsu.edu/ Expertiza website] project undertaken for OSS component in Object Oriented Design and Development.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[https://github.com/expertiza/expertiza Expertiza GitHub source code(2)] is an Open Source project based on Ruby on Rails framework. It is a software to create renewable learning projects through peer reviews and continuous assessments. It enables group projects and project submissions via URLs and wiki pages as well. It is supported by the National Science Foundation.&lt;br /&gt;
&lt;br /&gt;
===Problem Statement / Motivation===&lt;br /&gt;
This project aims to easily handle review score exporting for instructor and TAs, when they try to export scores from Expertiza to [https://www.webassign.net/ncsu/login.html WebAssign website]. Currently, no such option exists to export scores so that it can be later uploaded to WebAssign efficiently. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Tasks Identified===&lt;br /&gt;
All tasks pertaining to the completion of the project have been listed out here as follows:&lt;br /&gt;
* A new button has been added to export scores. &lt;br /&gt;
* All functionality to be handled will be taken care of using VanillaJS in the view of Review Report.&lt;br /&gt;
* Tests have been written for the UI and CSV creation.&lt;br /&gt;
* Files modified:   &lt;br /&gt;
  1. app/views/reports/_review_report.html.erb                         - Functionality and UI changes.&lt;br /&gt;
  2. spec/features/review_mapping_helper_spec.rb                       - Added new test cases.&lt;br /&gt;
  3. app/controllers/reports_controller.rb                             - Added new function for test case.&lt;br /&gt;
  4. spec/features/review_report_details/review_report_no_data_csv.txt - Created a blank csv for testing.&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
Diagrammatic representation of the workflow of the project is shown as follows:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Review Report Flow Chart Diagram.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review page.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;button onclick=&amp;quot;exportTableToCSV('review_scores.csv')&amp;quot;&amp;gt;Export Review Scores To CSV File&amp;lt;/button&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
   .&lt;br /&gt;
   . &lt;br /&gt;
   .&lt;br /&gt;
   &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;%= link_to user.name(session[:ip]), impersonate_impersonate_path(:user =&amp;gt; {:name =&amp;gt; user.name(session[:ip])}), :method =&amp;gt; :post, :class =&amp;gt; &amp;quot;runityID&amp;quot; %&amp;gt;&lt;br /&gt;
      (&amp;lt;span class=&amp;quot;rname&amp;quot;&amp;gt;&amp;lt;%= user.fullname(session[:ip]) %&amp;gt;&amp;lt;/span&amp;gt;)&lt;br /&gt;
   &amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Screencast==&lt;br /&gt;
#[https://drive.google.com/open?id=1FSXYgkppHZsgEW7_CpY0hvLwA2PqZ5wZ Here] is the link to a screen recording on how to access the functionality and export the CSV file.&lt;br /&gt;
&lt;br /&gt;
==Code and Snapshots==&lt;br /&gt;
We have written two methods inside _review_report.html.erb named exportTableToCSV and downloadCSV which are as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function downloadCSV(csv, filename) {&lt;br /&gt;
var csvFile;&lt;br /&gt;
var downloadLink;&lt;br /&gt;
&lt;br /&gt;
// CSV file&lt;br /&gt;
csvFile = new Blob([csv], {type: &amp;quot;text/csv&amp;quot;});&lt;br /&gt;
&lt;br /&gt;
// Download link&lt;br /&gt;
downloadLink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// File name&lt;br /&gt;
downloadLink.download = filename;&lt;br /&gt;
&lt;br /&gt;
// Create a link to the file&lt;br /&gt;
downloadLink.href = window.URL.createObjectURL(csvFile);&lt;br /&gt;
&lt;br /&gt;
// Hide download link&lt;br /&gt;
downloadLink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Add the link to DOM&lt;br /&gt;
document.body.appendChild(downloadLink);&lt;br /&gt;
&lt;br /&gt;
// Click download link&lt;br /&gt;
downloadLink.click();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	function exportTableToCSV(filename) {&lt;br /&gt;
		var csv = [];&lt;br /&gt;
		var rows = document.querySelector(&amp;quot;table#myTable&amp;quot;).rows;&lt;br /&gt;
		var row = [];&lt;br /&gt;
		row = setHeaderForCSV();&lt;br /&gt;
		csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		for (var i = 1; i &amp;lt; rows.length; i++) {&lt;br /&gt;
			var row = [];&lt;br /&gt;
			&lt;br /&gt;
			reviewer_name = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;td span.rname&amp;quot;).innerHTML + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			reviewer_unityid = rows[i].querySelector(&amp;quot;td a.runityID&amp;quot;).innerHTML;&lt;br /&gt;
			reviewer_emailid = reviewer_unityid + &amp;quot;@ncsu.edu&amp;quot;;&lt;br /&gt;
			reviewer_grade = rows[i].querySelector(&amp;quot;input#grade_for_reviewer&amp;quot;).value;&lt;br /&gt;
			reviewer_comment = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;textarea#comment_for_reviewer&amp;quot;).innerHTML.replace(/&amp;quot;/g,&amp;quot;\'&amp;quot;) + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			&lt;br /&gt;
			row.push(reviewer_name);&lt;br /&gt;
			row.push(reviewer_unityid);&lt;br /&gt;
			row.push(reviewer_emailid);&lt;br /&gt;
			row.push(reviewer_grade);&lt;br /&gt;
			row.push(reviewer_comment);&lt;br /&gt;
			&lt;br /&gt;
      csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
              &lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
    // Call Download CSV file function here&lt;br /&gt;
    downloadCSV(csv.join(&amp;quot;\n&amp;quot;), filename);&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output file has &amp;quot;name&amp;quot;, &amp;quot;unity_id&amp;quot;, &amp;quot;email_id&amp;quot;, &amp;quot;grade&amp;quot; and &amp;quot;comment&amp;quot; fields from the Review Scores Report table.&lt;br /&gt;
&lt;br /&gt;
[[File:Csv_view.png]]&lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
The code has been designed such that all the reviews completed by reviewers for a particular assignment can be seen, graded collected and stored easily by the click of a button. Thus, a good test case would be to check whether the required headers and data are getting stored and to check whether junk data gets stored in the csv if there are no reviews by reviewers. &amp;lt;br&amp;gt;&lt;br /&gt;
Newly created test cases include:&lt;br /&gt;
* Test cases to check for the UI elements in Review Report html page.&lt;br /&gt;
* Test case to check whether added button (&amp;quot;Export Review Scores To CSV File&amp;quot;) is actually rendered in the html page.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  it &amp;quot;has Export Reviews button&amp;quot; do&lt;br /&gt;
    expect(page).to have_button('Export Review Scores To CSV File')&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Test case to see whether a simple CSV with the correct headers (Name, Unity ID, Email ID, Grade and Comments) is being created.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  # test to check whether a blank CSV with headers is being created or not.&lt;br /&gt;
  it &amp;quot;can create an empty csv with just headers&amp;quot; do&lt;br /&gt;
    expected_csv = File.read('spec/features/review_report_details/review_report_no_data_csv.txt')&lt;br /&gt;
    expect(generated_csv(true, @options)).to eq(expected_csv)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # function to generate a simple CSV with headers.&lt;br /&gt;
  def generated_csv(t_assignment, t_options)&lt;br /&gt;
    delimiter = ','&lt;br /&gt;
    CSV.generate(col_sep: delimiter) do |csv|&lt;br /&gt;
      csv &amp;lt;&amp;lt; ReportsController.export_details_fields(t_options)&lt;br /&gt;
      ReportsController.export_details(csv, t_assignment, false)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Test Plan===&lt;br /&gt;
   1. Log into expertiza as the instructor.&amp;lt;br&amp;gt;&lt;br /&gt;
   2. Load all assignments. (Manage -&amp;gt; Assignments)&amp;lt;br&amp;gt;&lt;br /&gt;
   3. Click on 'View Reports' button.&amp;lt;br&amp;gt;&lt;br /&gt;
   4. Choose 'Review Report' from the dropdown and click 'View'.&amp;lt;br&amp;gt;&lt;br /&gt;
   5. You can now export the grade and comments of the reviewers along with their details, i.e, name, unity ID and email.&amp;lt;br&amp;gt;&lt;br /&gt;
   6. The file will be downloaded.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Design===&lt;br /&gt;
The aim of our project was to implement exporting of review scores from Expertiza software. To accomplish this, we shall advance by using the delegation pattern to add exporting capabilities to the _review_report.html.erb for exporting review scores.&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Mentor: Harsh Agrawal &amp;lt;br&amp;gt;&lt;br /&gt;
Team: &amp;lt;br&amp;gt;&lt;br /&gt;
* Yash Thakkar (yrthakka)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
#[http://expertiza.ncsu.edu/ Expertiza website]&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza GitHub source code]&lt;br /&gt;
#[https://www.webassign.net/ncsu/login.html WebAssign website]&lt;br /&gt;
#[http://wikis.lib.ncsu.edu/index.php/Expertiza Wiki Expertiza project documentation]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=127630</id>
		<title>CSC/ECE 517 Fall 2019 - E1964. Export review scores for projects</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=127630"/>
		<updated>2019-11-07T00:37:33Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1964. Export review scores for projects==&lt;br /&gt;
This page provides a description of the [http://expertiza.ncsu.edu/ Expertiza website(1)] project undertaken for OSS component in Object Oriented Design and Development.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[https://github.com/expertiza/expertiza Expertiza GitHub source code(2)] is an Open Source project based on Ruby on Rails framework. It is a software to create renewable learning projects through peer reviews and continuous assessments. It enables group projects and project submissions via URLs and wiki pages as well. It is supported by the National Science Foundation.&lt;br /&gt;
&lt;br /&gt;
===Problem Statement / Motivation===&lt;br /&gt;
This project aims to easily handle review score exporting for instructor and TAs, when they try to export scores from Expertiza to [https://www.webassign.net/ncsu/login.html WebAssign website]. Currently, no such option exists to export scores so that it can be later uploaded to WebAssign efficiently. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Tasks Identified===&lt;br /&gt;
All tasks pertaining to the completion of the project have been listed out here as follows:&lt;br /&gt;
* A new button has been added to export scores. &lt;br /&gt;
* All functionality to be handled will be taken care of using VanillaJS in the view of Review Report.&lt;br /&gt;
* Tests have been written for the UI and CSV creation.&lt;br /&gt;
* Files modified:   &lt;br /&gt;
  1. app/views/reports/_review_report.html.erb                         - Functionality and UI changes.&lt;br /&gt;
  2. spec/features/review_mapping_helper_spec.rb                       - Added new test cases.&lt;br /&gt;
  3. app/controllers/reports_controller.rb                             - Added new function for test case.&lt;br /&gt;
  4. spec/features/review_report_details/review_report_no_data_csv.txt - Created a blank csv for testing.&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
Diagrammatic representation of the workflow of the project is shown as follows:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Review Report Flow Chart Diagram.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review page.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;button onclick=&amp;quot;exportTableToCSV('review_scores.csv')&amp;quot;&amp;gt;Export Review Scores To CSV File&amp;lt;/button&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
   .&lt;br /&gt;
   . &lt;br /&gt;
   .&lt;br /&gt;
   &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;%= link_to user.name(session[:ip]), impersonate_impersonate_path(:user =&amp;gt; {:name =&amp;gt; user.name(session[:ip])}), :method =&amp;gt; :post, :class =&amp;gt; &amp;quot;runityID&amp;quot; %&amp;gt;&lt;br /&gt;
      (&amp;lt;span class=&amp;quot;rname&amp;quot;&amp;gt;&amp;lt;%= user.fullname(session[:ip]) %&amp;gt;&amp;lt;/span&amp;gt;)&lt;br /&gt;
   &amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Screencast==&lt;br /&gt;
#[https://drive.google.com/open?id=1FSXYgkppHZsgEW7_CpY0hvLwA2PqZ5wZ Here] is the link to a screen recording on how to access the functionality and export the CSV file.&lt;br /&gt;
&lt;br /&gt;
==Code and Snapshots==&lt;br /&gt;
We have written two methods inside _review_report.html.erb named exportTableToCSV and downloadCSV which are as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function downloadCSV(csv, filename) {&lt;br /&gt;
var csvFile;&lt;br /&gt;
var downloadLink;&lt;br /&gt;
&lt;br /&gt;
// CSV file&lt;br /&gt;
csvFile = new Blob([csv], {type: &amp;quot;text/csv&amp;quot;});&lt;br /&gt;
&lt;br /&gt;
// Download link&lt;br /&gt;
downloadLink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// File name&lt;br /&gt;
downloadLink.download = filename;&lt;br /&gt;
&lt;br /&gt;
// Create a link to the file&lt;br /&gt;
downloadLink.href = window.URL.createObjectURL(csvFile);&lt;br /&gt;
&lt;br /&gt;
// Hide download link&lt;br /&gt;
downloadLink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Add the link to DOM&lt;br /&gt;
document.body.appendChild(downloadLink);&lt;br /&gt;
&lt;br /&gt;
// Click download link&lt;br /&gt;
downloadLink.click();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	function exportTableToCSV(filename) {&lt;br /&gt;
		var csv = [];&lt;br /&gt;
		var rows = document.querySelector(&amp;quot;table#myTable&amp;quot;).rows;&lt;br /&gt;
		var row = [];&lt;br /&gt;
		row = setHeaderForCSV();&lt;br /&gt;
		csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		for (var i = 1; i &amp;lt; rows.length; i++) {&lt;br /&gt;
			var row = [];&lt;br /&gt;
			&lt;br /&gt;
			reviewer_name = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;td span.rname&amp;quot;).innerHTML + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			reviewer_unityid = rows[i].querySelector(&amp;quot;td a.runityID&amp;quot;).innerHTML;&lt;br /&gt;
			reviewer_emailid = reviewer_unityid + &amp;quot;@ncsu.edu&amp;quot;;&lt;br /&gt;
			reviewer_grade = rows[i].querySelector(&amp;quot;input#grade_for_reviewer&amp;quot;).value;&lt;br /&gt;
			reviewer_comment = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;textarea#comment_for_reviewer&amp;quot;).innerHTML.replace(/&amp;quot;/g,&amp;quot;\'&amp;quot;) + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			&lt;br /&gt;
			row.push(reviewer_name);&lt;br /&gt;
			row.push(reviewer_unityid);&lt;br /&gt;
			row.push(reviewer_emailid);&lt;br /&gt;
			row.push(reviewer_grade);&lt;br /&gt;
			row.push(reviewer_comment);&lt;br /&gt;
			&lt;br /&gt;
      csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
              &lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
    // Call Download CSV file function here&lt;br /&gt;
    downloadCSV(csv.join(&amp;quot;\n&amp;quot;), filename);&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output file has &amp;quot;name&amp;quot;, &amp;quot;unity_id&amp;quot;, &amp;quot;email_id&amp;quot;, &amp;quot;grade&amp;quot; and &amp;quot;comment&amp;quot; fields from the Review Scores Report table.&lt;br /&gt;
&lt;br /&gt;
[[File:Csv_view.png]]&lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
The code has been designed such that all the reviews completed by reviewers for a particular assignment can be seen, graded collected and stored easily by the click of a button. Thus, a good test case would be to check whether the required headers and data are getting stored and to check whether junk data gets stored in the csv if there are no reviews by reviewers. &amp;lt;br&amp;gt;&lt;br /&gt;
Newly created test cases include:&lt;br /&gt;
* Test cases to check for the UI elements in Review Report html page.&lt;br /&gt;
* Test case to check whether added button (&amp;quot;Export Review Scores To CSV File&amp;quot;) is actually rendered in the html page.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  it &amp;quot;has Export Reviews button&amp;quot; do&lt;br /&gt;
    expect(page).to have_button('Export Review Scores To CSV File')&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Test case to see whether a simple CSV with the correct headers (Name, Unity ID, Email ID, Grade and Comments) is being created.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  # test to check whether a blank CSV with headers is being created or not.&lt;br /&gt;
  it &amp;quot;can create an empty csv with just headers&amp;quot; do&lt;br /&gt;
    expected_csv = File.read('spec/features/review_report_details/review_report_no_data_csv.txt')&lt;br /&gt;
    expect(generated_csv(true, @options)).to eq(expected_csv)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # function to generate a simple CSV with headers.&lt;br /&gt;
  def generated_csv(t_assignment, t_options)&lt;br /&gt;
    delimiter = ','&lt;br /&gt;
    CSV.generate(col_sep: delimiter) do |csv|&lt;br /&gt;
      csv &amp;lt;&amp;lt; ReportsController.export_details_fields(t_options)&lt;br /&gt;
      ReportsController.export_details(csv, t_assignment, false)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Test Plan===&lt;br /&gt;
   1. Log into expertiza as the instructor.&amp;lt;br&amp;gt;&lt;br /&gt;
   2. Load all assignments. (Manage -&amp;gt; Assignments)&amp;lt;br&amp;gt;&lt;br /&gt;
   3. Click on 'View Reports' button.&amp;lt;br&amp;gt;&lt;br /&gt;
   4. Choose 'Review Report' from the dropdown and click 'View'.&amp;lt;br&amp;gt;&lt;br /&gt;
   5. You can now export the grade and comments of the reviewers along with their details, i.e, name, unity ID and email.&amp;lt;br&amp;gt;&lt;br /&gt;
   6. The file will be downloaded.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Design===&lt;br /&gt;
The aim of our project was to implement exporting of review scores from Expertiza software. To accomplish this, we shall advance by using the delegation pattern to add exporting capabilities to the _review_report.html.erb for exporting review scores.&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Mentor: Harsh Agrawal &amp;lt;br&amp;gt;&lt;br /&gt;
Team: &amp;lt;br&amp;gt;&lt;br /&gt;
* Yash Thakkar (yrthakka)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
#[http://expertiza.ncsu.edu/ Expertiza website]&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza GitHub source code]&lt;br /&gt;
#[https://www.webassign.net/ncsu/login.html WebAssign website]&lt;br /&gt;
#[http://wikis.lib.ncsu.edu/index.php/Expertiza Wiki Expertiza project documentation]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=127629</id>
		<title>CSC/ECE 517 Fall 2019 - E1964. Export review scores for projects</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=127629"/>
		<updated>2019-11-07T00:37:18Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /* Problem Statement / Motivation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1964. Export review scores for projects==&lt;br /&gt;
This page provides a description of the [http://expertiza.ncsu.edu/ Expertiza website(1)] project undertaken for OSS component in Object Oriented Design and Development.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[https://github.com/expertiza/expertiza Expertiza GitHub source code(2)] is an Open Source project based on Ruby on Rails framework. It is a software to create renewable learning projects through peer reviews and continuous assessments. It enables group projects and project submissions via URLs and wiki pages as well. It is supported by the National Science Foundation.&lt;br /&gt;
&lt;br /&gt;
===Problem Statement / Motivation===&lt;br /&gt;
This project aims to easily handle review score exporting for instructor and TAs, when they try to export scores from Expertiza to [https://www.webassign.net/ncsu/login.html WebAssign website]. Currently, no such option exists to export scores so that it can be later uploaded to WebAssign efficiently. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Tasks Identified===&lt;br /&gt;
All tasks pertaining to the completion of the project have been listed out here as follows:&lt;br /&gt;
* A new button has been added to export scores. &lt;br /&gt;
* All functionality to be handled will be taken care of using VanillaJS in the view of Review Report.&lt;br /&gt;
* Tests have been written for the UI and CSV creation.&lt;br /&gt;
* Files modified:   &lt;br /&gt;
  1. app/views/reports/_review_report.html.erb                         - Functionality and UI changes.&lt;br /&gt;
  2. spec/features/review_mapping_helper_spec.rb                       - Added new test cases.&lt;br /&gt;
  3. app/controllers/reports_controller.rb                             - Added new function for test case.&lt;br /&gt;
  4. spec/features/review_report_details/review_report_no_data_csv.txt - Created a blank csv for testing.&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
Diagrammatic representation of the workflow of the project is shown as follows:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Review Report Flow Chart Diagram.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review page.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;button onclick=&amp;quot;exportTableToCSV('review_scores.csv')&amp;quot;&amp;gt;Export Review Scores To CSV File&amp;lt;/button&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
   .&lt;br /&gt;
   . &lt;br /&gt;
   .&lt;br /&gt;
   &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;%= link_to user.name(session[:ip]), impersonate_impersonate_path(:user =&amp;gt; {:name =&amp;gt; user.name(session[:ip])}), :method =&amp;gt; :post, :class =&amp;gt; &amp;quot;runityID&amp;quot; %&amp;gt;&lt;br /&gt;
      (&amp;lt;span class=&amp;quot;rname&amp;quot;&amp;gt;&amp;lt;%= user.fullname(session[:ip]) %&amp;gt;&amp;lt;/span&amp;gt;)&lt;br /&gt;
   &amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Screencast==&lt;br /&gt;
#[https://drive.google.com/open?id=1FSXYgkppHZsgEW7_CpY0hvLwA2PqZ5wZ Here] is the link to a screen recording on how to access the functionality and export the CSV file.&lt;br /&gt;
&lt;br /&gt;
==Code and Snapshots==&lt;br /&gt;
We have written two methods inside _review_report.html.erb named exportTableToCSV and downloadCSV which are as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function downloadCSV(csv, filename) {&lt;br /&gt;
var csvFile;&lt;br /&gt;
var downloadLink;&lt;br /&gt;
&lt;br /&gt;
// CSV file&lt;br /&gt;
csvFile = new Blob([csv], {type: &amp;quot;text/csv&amp;quot;});&lt;br /&gt;
&lt;br /&gt;
// Download link&lt;br /&gt;
downloadLink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// File name&lt;br /&gt;
downloadLink.download = filename;&lt;br /&gt;
&lt;br /&gt;
// Create a link to the file&lt;br /&gt;
downloadLink.href = window.URL.createObjectURL(csvFile);&lt;br /&gt;
&lt;br /&gt;
// Hide download link&lt;br /&gt;
downloadLink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Add the link to DOM&lt;br /&gt;
document.body.appendChild(downloadLink);&lt;br /&gt;
&lt;br /&gt;
// Click download link&lt;br /&gt;
downloadLink.click();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	function exportTableToCSV(filename) {&lt;br /&gt;
		var csv = [];&lt;br /&gt;
		var rows = document.querySelector(&amp;quot;table#myTable&amp;quot;).rows;&lt;br /&gt;
		var row = [];&lt;br /&gt;
		row = setHeaderForCSV();&lt;br /&gt;
		csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		for (var i = 1; i &amp;lt; rows.length; i++) {&lt;br /&gt;
			var row = [];&lt;br /&gt;
			&lt;br /&gt;
			reviewer_name = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;td span.rname&amp;quot;).innerHTML + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			reviewer_unityid = rows[i].querySelector(&amp;quot;td a.runityID&amp;quot;).innerHTML;&lt;br /&gt;
			reviewer_emailid = reviewer_unityid + &amp;quot;@ncsu.edu&amp;quot;;&lt;br /&gt;
			reviewer_grade = rows[i].querySelector(&amp;quot;input#grade_for_reviewer&amp;quot;).value;&lt;br /&gt;
			reviewer_comment = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;textarea#comment_for_reviewer&amp;quot;).innerHTML.replace(/&amp;quot;/g,&amp;quot;\'&amp;quot;) + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			&lt;br /&gt;
			row.push(reviewer_name);&lt;br /&gt;
			row.push(reviewer_unityid);&lt;br /&gt;
			row.push(reviewer_emailid);&lt;br /&gt;
			row.push(reviewer_grade);&lt;br /&gt;
			row.push(reviewer_comment);&lt;br /&gt;
			&lt;br /&gt;
      csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
              &lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
    // Call Download CSV file function here&lt;br /&gt;
    downloadCSV(csv.join(&amp;quot;\n&amp;quot;), filename);&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output file has &amp;quot;name&amp;quot;, &amp;quot;unity_id&amp;quot;, &amp;quot;email_id&amp;quot;, &amp;quot;grade&amp;quot; and &amp;quot;comment&amp;quot; fields from the Review Scores Report table.&lt;br /&gt;
&lt;br /&gt;
[[File:Csv_view.png]]&lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
The code has been designed such that all the reviews completed by reviewers for a particular assignment can be seen, graded collected and stored easily by the click of a button. Thus, a good test case would be to check whether the required headers and data are getting stored and to check whether junk data gets stored in the csv if there are no reviews by reviewers. &amp;lt;br&amp;gt;&lt;br /&gt;
Newly created test cases include:&lt;br /&gt;
* Test cases to check for the UI elements in Review Report html page.&lt;br /&gt;
* Test case to check whether added button (&amp;quot;Export Review Scores To CSV File&amp;quot;) is actually rendered in the html page.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  it &amp;quot;has Export Reviews button&amp;quot; do&lt;br /&gt;
    expect(page).to have_button('Export Review Scores To CSV File')&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Test case to see whether a simple CSV with the correct headers (Name, Unity ID, Email ID, Grade and Comments) is being created.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  # test to check whether a blank CSV with headers is being created or not.&lt;br /&gt;
  it &amp;quot;can create an empty csv with just headers&amp;quot; do&lt;br /&gt;
    expected_csv = File.read('spec/features/review_report_details/review_report_no_data_csv.txt')&lt;br /&gt;
    expect(generated_csv(true, @options)).to eq(expected_csv)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # function to generate a simple CSV with headers.&lt;br /&gt;
  def generated_csv(t_assignment, t_options)&lt;br /&gt;
    delimiter = ','&lt;br /&gt;
    CSV.generate(col_sep: delimiter) do |csv|&lt;br /&gt;
      csv &amp;lt;&amp;lt; ReportsController.export_details_fields(t_options)&lt;br /&gt;
      ReportsController.export_details(csv, t_assignment, false)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Test Plan===&lt;br /&gt;
   1. Log into expertiza as the instructor.&amp;lt;br&amp;gt;&lt;br /&gt;
   2. Load all assignments. (Manage -&amp;gt; Assignments)&amp;lt;br&amp;gt;&lt;br /&gt;
   3. Click on 'View Reports' button.&amp;lt;br&amp;gt;&lt;br /&gt;
   4. Choose 'Review Report' from the dropdown and click 'View'.&amp;lt;br&amp;gt;&lt;br /&gt;
   5. You can now export the grade and comments of the reviewers along with their details, i.e, name, unity ID and email.&amp;lt;br&amp;gt;&lt;br /&gt;
   6. The file will be downloaded.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Design===&lt;br /&gt;
The aim of our project was to implement exporting of review scores from Expertiza software. To accomplish this, we shall advance by using the delegation pattern to add exporting capabilities to the _review_report.html.erb for exporting review scores.&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Mentor: Harsh Agrawal &amp;lt;br&amp;gt;&lt;br /&gt;
Team: &amp;lt;br&amp;gt;&lt;br /&gt;
* Yash Thakkar (yrthakka)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
#[http://expertiza.ncsu.edu/ Expertiza website]&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza GitHub source code]&lt;br /&gt;
#[https://webassign.net/ WebAssign website]&lt;br /&gt;
#[http://wikis.lib.ncsu.edu/index.php/Expertiza Wiki Expertiza project documentation]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=127628</id>
		<title>CSC/ECE 517 Fall 2019 - E1964. Export review scores for projects</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=127628"/>
		<updated>2019-11-07T00:36:13Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /* Tasks Identified */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1964. Export review scores for projects==&lt;br /&gt;
This page provides a description of the [http://expertiza.ncsu.edu/ Expertiza website(1)] project undertaken for OSS component in Object Oriented Design and Development.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[https://github.com/expertiza/expertiza Expertiza GitHub source code(2)] is an Open Source project based on Ruby on Rails framework. It is a software to create renewable learning projects through peer reviews and continuous assessments. It enables group projects and project submissions via URLs and wiki pages as well. It is supported by the National Science Foundation.&lt;br /&gt;
&lt;br /&gt;
===Problem Statement / Motivation===&lt;br /&gt;
This project aims to easily handle review score exporting for instructor and TAs, when they try to export scores from Expertiza to [https://webassign.net/ WebAssign website(3)]. Currently, no such option exists to export scores so that it can be later uploaded to WebAssign efficiently. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Tasks Identified===&lt;br /&gt;
All tasks pertaining to the completion of the project have been listed out here as follows:&lt;br /&gt;
* A new button has been added to export scores. &lt;br /&gt;
* All functionality to be handled will be taken care of using VanillaJS in the view of Review Report.&lt;br /&gt;
* Tests have been written for the UI and CSV creation.&lt;br /&gt;
* Files modified:   &lt;br /&gt;
  1. app/views/reports/_review_report.html.erb                         - Functionality and UI changes.&lt;br /&gt;
  2. spec/features/review_mapping_helper_spec.rb                       - Added new test cases.&lt;br /&gt;
  3. app/controllers/reports_controller.rb                             - Added new function for test case.&lt;br /&gt;
  4. spec/features/review_report_details/review_report_no_data_csv.txt - Created a blank csv for testing.&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
Diagrammatic representation of the workflow of the project is shown as follows:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Review Report Flow Chart Diagram.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review page.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;button onclick=&amp;quot;exportTableToCSV('review_scores.csv')&amp;quot;&amp;gt;Export Review Scores To CSV File&amp;lt;/button&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
   .&lt;br /&gt;
   . &lt;br /&gt;
   .&lt;br /&gt;
   &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;%= link_to user.name(session[:ip]), impersonate_impersonate_path(:user =&amp;gt; {:name =&amp;gt; user.name(session[:ip])}), :method =&amp;gt; :post, :class =&amp;gt; &amp;quot;runityID&amp;quot; %&amp;gt;&lt;br /&gt;
      (&amp;lt;span class=&amp;quot;rname&amp;quot;&amp;gt;&amp;lt;%= user.fullname(session[:ip]) %&amp;gt;&amp;lt;/span&amp;gt;)&lt;br /&gt;
   &amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Screencast==&lt;br /&gt;
#[https://drive.google.com/open?id=1FSXYgkppHZsgEW7_CpY0hvLwA2PqZ5wZ Here] is the link to a screen recording on how to access the functionality and export the CSV file.&lt;br /&gt;
&lt;br /&gt;
==Code and Snapshots==&lt;br /&gt;
We have written two methods inside _review_report.html.erb named exportTableToCSV and downloadCSV which are as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function downloadCSV(csv, filename) {&lt;br /&gt;
var csvFile;&lt;br /&gt;
var downloadLink;&lt;br /&gt;
&lt;br /&gt;
// CSV file&lt;br /&gt;
csvFile = new Blob([csv], {type: &amp;quot;text/csv&amp;quot;});&lt;br /&gt;
&lt;br /&gt;
// Download link&lt;br /&gt;
downloadLink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// File name&lt;br /&gt;
downloadLink.download = filename;&lt;br /&gt;
&lt;br /&gt;
// Create a link to the file&lt;br /&gt;
downloadLink.href = window.URL.createObjectURL(csvFile);&lt;br /&gt;
&lt;br /&gt;
// Hide download link&lt;br /&gt;
downloadLink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Add the link to DOM&lt;br /&gt;
document.body.appendChild(downloadLink);&lt;br /&gt;
&lt;br /&gt;
// Click download link&lt;br /&gt;
downloadLink.click();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	function exportTableToCSV(filename) {&lt;br /&gt;
		var csv = [];&lt;br /&gt;
		var rows = document.querySelector(&amp;quot;table#myTable&amp;quot;).rows;&lt;br /&gt;
		var row = [];&lt;br /&gt;
		row = setHeaderForCSV();&lt;br /&gt;
		csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		for (var i = 1; i &amp;lt; rows.length; i++) {&lt;br /&gt;
			var row = [];&lt;br /&gt;
			&lt;br /&gt;
			reviewer_name = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;td span.rname&amp;quot;).innerHTML + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			reviewer_unityid = rows[i].querySelector(&amp;quot;td a.runityID&amp;quot;).innerHTML;&lt;br /&gt;
			reviewer_emailid = reviewer_unityid + &amp;quot;@ncsu.edu&amp;quot;;&lt;br /&gt;
			reviewer_grade = rows[i].querySelector(&amp;quot;input#grade_for_reviewer&amp;quot;).value;&lt;br /&gt;
			reviewer_comment = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;textarea#comment_for_reviewer&amp;quot;).innerHTML.replace(/&amp;quot;/g,&amp;quot;\'&amp;quot;) + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			&lt;br /&gt;
			row.push(reviewer_name);&lt;br /&gt;
			row.push(reviewer_unityid);&lt;br /&gt;
			row.push(reviewer_emailid);&lt;br /&gt;
			row.push(reviewer_grade);&lt;br /&gt;
			row.push(reviewer_comment);&lt;br /&gt;
			&lt;br /&gt;
      csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
              &lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
    // Call Download CSV file function here&lt;br /&gt;
    downloadCSV(csv.join(&amp;quot;\n&amp;quot;), filename);&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output file has &amp;quot;name&amp;quot;, &amp;quot;unity_id&amp;quot;, &amp;quot;email_id&amp;quot;, &amp;quot;grade&amp;quot; and &amp;quot;comment&amp;quot; fields from the Review Scores Report table.&lt;br /&gt;
&lt;br /&gt;
[[File:Csv_view.png]]&lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
The code has been designed such that all the reviews completed by reviewers for a particular assignment can be seen, graded collected and stored easily by the click of a button. Thus, a good test case would be to check whether the required headers and data are getting stored and to check whether junk data gets stored in the csv if there are no reviews by reviewers. &amp;lt;br&amp;gt;&lt;br /&gt;
Newly created test cases include:&lt;br /&gt;
* Test cases to check for the UI elements in Review Report html page.&lt;br /&gt;
* Test case to check whether added button (&amp;quot;Export Review Scores To CSV File&amp;quot;) is actually rendered in the html page.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  it &amp;quot;has Export Reviews button&amp;quot; do&lt;br /&gt;
    expect(page).to have_button('Export Review Scores To CSV File')&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Test case to see whether a simple CSV with the correct headers (Name, Unity ID, Email ID, Grade and Comments) is being created.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  # test to check whether a blank CSV with headers is being created or not.&lt;br /&gt;
  it &amp;quot;can create an empty csv with just headers&amp;quot; do&lt;br /&gt;
    expected_csv = File.read('spec/features/review_report_details/review_report_no_data_csv.txt')&lt;br /&gt;
    expect(generated_csv(true, @options)).to eq(expected_csv)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # function to generate a simple CSV with headers.&lt;br /&gt;
  def generated_csv(t_assignment, t_options)&lt;br /&gt;
    delimiter = ','&lt;br /&gt;
    CSV.generate(col_sep: delimiter) do |csv|&lt;br /&gt;
      csv &amp;lt;&amp;lt; ReportsController.export_details_fields(t_options)&lt;br /&gt;
      ReportsController.export_details(csv, t_assignment, false)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Test Plan===&lt;br /&gt;
   1. Log into expertiza as the instructor.&amp;lt;br&amp;gt;&lt;br /&gt;
   2. Load all assignments. (Manage -&amp;gt; Assignments)&amp;lt;br&amp;gt;&lt;br /&gt;
   3. Click on 'View Reports' button.&amp;lt;br&amp;gt;&lt;br /&gt;
   4. Choose 'Review Report' from the dropdown and click 'View'.&amp;lt;br&amp;gt;&lt;br /&gt;
   5. You can now export the grade and comments of the reviewers along with their details, i.e, name, unity ID and email.&amp;lt;br&amp;gt;&lt;br /&gt;
   6. The file will be downloaded.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Design===&lt;br /&gt;
The aim of our project was to implement exporting of review scores from Expertiza software. To accomplish this, we shall advance by using the delegation pattern to add exporting capabilities to the _review_report.html.erb for exporting review scores.&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Mentor: Harsh Agrawal &amp;lt;br&amp;gt;&lt;br /&gt;
Team: &amp;lt;br&amp;gt;&lt;br /&gt;
* Yash Thakkar (yrthakka)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
#[http://expertiza.ncsu.edu/ Expertiza website]&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza GitHub source code]&lt;br /&gt;
#[https://webassign.net/ WebAssign website]&lt;br /&gt;
#[http://wikis.lib.ncsu.edu/index.php/Expertiza Wiki Expertiza project documentation]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=127610</id>
		<title>CSC/ECE 517 Fall 2019 - E1964. Export review scores for projects</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=127610"/>
		<updated>2019-11-07T00:27:40Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /* Tasks Identified */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1964. Export review scores for projects==&lt;br /&gt;
This page provides a description of the [http://expertiza.ncsu.edu/ Expertiza website(1)] project undertaken for OSS component in Object Oriented Design and Development.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[https://github.com/expertiza/expertiza Expertiza GitHub source code(2)] is an Open Source project based on Ruby on Rails framework. It is a software to create renewable learning projects through peer reviews and continuous assessments. It enables group projects and project submissions via URLs and wiki pages as well. It is supported by the National Science Foundation.&lt;br /&gt;
&lt;br /&gt;
===Problem Statement / Motivation===&lt;br /&gt;
This project aims to easily handle review score exporting for instructor and TAs, when they try to export scores from Expertiza to [https://webassign.net/ WebAssign website(3)]. Currently, no such option exists to export scores so that it can be later uploaded to WebAssign efficiently. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Tasks Identified===&lt;br /&gt;
All tasks pertaining to the completion of the project have been listed out here as follows:&lt;br /&gt;
* A new button is to be added to export scores. All functionality to be handled will be taken care of using VanillaJS. &lt;br /&gt;
* Files modified:   &lt;br /&gt;
  1. app/views/reports/_review_report.html.erb                         - Functionality and UI changes.&lt;br /&gt;
  2. spec/features/review_mapping_helper_spec.rb                       - Added new test cases.&lt;br /&gt;
  3. app/controllers/reports_controller.rb                             - Added new function for test case.&lt;br /&gt;
  4. spec/features/review_report_details/review_report_no_data_csv.txt - Created a blank csv for testing.&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
Diagrammatic representation of the workflow of the project is shown as follows:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Review Report Flow Chart Diagram.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review page.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;button onclick=&amp;quot;exportTableToCSV('review_scores.csv')&amp;quot;&amp;gt;Export Review Scores To CSV File&amp;lt;/button&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
   .&lt;br /&gt;
   . &lt;br /&gt;
   .&lt;br /&gt;
   &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;%= link_to user.name(session[:ip]), impersonate_impersonate_path(:user =&amp;gt; {:name =&amp;gt; user.name(session[:ip])}), :method =&amp;gt; :post, :class =&amp;gt; &amp;quot;runityID&amp;quot; %&amp;gt;&lt;br /&gt;
      (&amp;lt;span class=&amp;quot;rname&amp;quot;&amp;gt;&amp;lt;%= user.fullname(session[:ip]) %&amp;gt;&amp;lt;/span&amp;gt;)&lt;br /&gt;
   &amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Screencast==&lt;br /&gt;
#[https://drive.google.com/open?id=1FSXYgkppHZsgEW7_CpY0hvLwA2PqZ5wZ Here] is the link to a screen recording on how to access the functionality and export the CSV file.&lt;br /&gt;
&lt;br /&gt;
==Code and Snapshots==&lt;br /&gt;
We have written two methods inside _review_report.html.erb named exportTableToCSV and downloadCSV which are as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function downloadCSV(csv, filename) {&lt;br /&gt;
var csvFile;&lt;br /&gt;
var downloadLink;&lt;br /&gt;
&lt;br /&gt;
// CSV file&lt;br /&gt;
csvFile = new Blob([csv], {type: &amp;quot;text/csv&amp;quot;});&lt;br /&gt;
&lt;br /&gt;
// Download link&lt;br /&gt;
downloadLink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// File name&lt;br /&gt;
downloadLink.download = filename;&lt;br /&gt;
&lt;br /&gt;
// Create a link to the file&lt;br /&gt;
downloadLink.href = window.URL.createObjectURL(csvFile);&lt;br /&gt;
&lt;br /&gt;
// Hide download link&lt;br /&gt;
downloadLink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Add the link to DOM&lt;br /&gt;
document.body.appendChild(downloadLink);&lt;br /&gt;
&lt;br /&gt;
// Click download link&lt;br /&gt;
downloadLink.click();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	function exportTableToCSV(filename) {&lt;br /&gt;
		var csv = [];&lt;br /&gt;
		var rows = document.querySelector(&amp;quot;table#myTable&amp;quot;).rows;&lt;br /&gt;
		var row = [];&lt;br /&gt;
		row = setHeaderForCSV();&lt;br /&gt;
		csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		for (var i = 1; i &amp;lt; rows.length; i++) {&lt;br /&gt;
			var row = [];&lt;br /&gt;
			&lt;br /&gt;
			reviewer_name = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;td span.rname&amp;quot;).innerHTML + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			reviewer_unityid = rows[i].querySelector(&amp;quot;td a.runityID&amp;quot;).innerHTML;&lt;br /&gt;
			reviewer_emailid = reviewer_unityid + &amp;quot;@ncsu.edu&amp;quot;;&lt;br /&gt;
			reviewer_grade = rows[i].querySelector(&amp;quot;input#grade_for_reviewer&amp;quot;).value;&lt;br /&gt;
			reviewer_comment = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;textarea#comment_for_reviewer&amp;quot;).innerHTML.replace(/&amp;quot;/g,&amp;quot;\'&amp;quot;) + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			&lt;br /&gt;
			row.push(reviewer_name);&lt;br /&gt;
			row.push(reviewer_unityid);&lt;br /&gt;
			row.push(reviewer_emailid);&lt;br /&gt;
			row.push(reviewer_grade);&lt;br /&gt;
			row.push(reviewer_comment);&lt;br /&gt;
			&lt;br /&gt;
      csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
              &lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
    // Call Download CSV file function here&lt;br /&gt;
    downloadCSV(csv.join(&amp;quot;\n&amp;quot;), filename);&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output file has &amp;quot;name&amp;quot;, &amp;quot;unity_id&amp;quot;, &amp;quot;email_id&amp;quot;, &amp;quot;grade&amp;quot; and &amp;quot;comment&amp;quot; fields from the Review Scores Report table.&lt;br /&gt;
&lt;br /&gt;
[[File:Csv_view.png]]&lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
The code has been designed such that all the reviews completed by reviewers for a particular assignment can be seen, graded collected and stored easily by the click of a button. Thus, a good test case would be to check whether the required headers and data are getting stored and to check whether junk data gets stored in the csv if there are no reviews by reviewers. &amp;lt;br&amp;gt;&lt;br /&gt;
Newly created test cases include:&lt;br /&gt;
* Test cases to check for the UI elements in Review Report html page.&lt;br /&gt;
* Test case to check whether added button (&amp;quot;Export Review Scores To CSV File&amp;quot;) is actually rendered in the html page.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  it &amp;quot;has Export Reviews button&amp;quot; do&lt;br /&gt;
    expect(page).to have_button('Export Review Scores To CSV File')&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Test case to see whether a simple CSV with the correct headers (Name, Unity ID, Email ID, Grade and Comments) is being created.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  # test to check whether a blank CSV with headers is being created or not.&lt;br /&gt;
  it &amp;quot;can create an empty csv with just headers&amp;quot; do&lt;br /&gt;
    expected_csv = File.read('spec/features/review_report_details/review_report_no_data_csv.txt')&lt;br /&gt;
    expect(generated_csv(true, @options)).to eq(expected_csv)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # function to generate a simple CSV with headers.&lt;br /&gt;
  def generated_csv(t_assignment, t_options)&lt;br /&gt;
    delimiter = ','&lt;br /&gt;
    CSV.generate(col_sep: delimiter) do |csv|&lt;br /&gt;
      csv &amp;lt;&amp;lt; ReportsController.export_details_fields(t_options)&lt;br /&gt;
      ReportsController.export_details(csv, t_assignment, false)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Test Plan===&lt;br /&gt;
   1. Log into expertiza as the instructor.&amp;lt;br&amp;gt;&lt;br /&gt;
   2. Load all assignments. (Manage -&amp;gt; Assignments)&amp;lt;br&amp;gt;&lt;br /&gt;
   3. Click on 'View Reports' button.&amp;lt;br&amp;gt;&lt;br /&gt;
   4. Choose 'Review Report' from the dropdown and click 'View'.&amp;lt;br&amp;gt;&lt;br /&gt;
   5. You can now export the grade and comments of the reviewers along with their details, i.e, name, unity ID and email.&amp;lt;br&amp;gt;&lt;br /&gt;
   6. The file will be downloaded.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Design===&lt;br /&gt;
The aim of our project was to implement exporting of review scores from Expertiza software. To accomplish this, we shall advance by using the delegation pattern to add exporting capabilities to the _review_report.html.erb for exporting review scores.&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Mentor: Harsh Agrawal &amp;lt;br&amp;gt;&lt;br /&gt;
Team: &amp;lt;br&amp;gt;&lt;br /&gt;
* Yash Thakkar (yrthakka)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
#[http://expertiza.ncsu.edu/ Expertiza website]&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza GitHub source code]&lt;br /&gt;
#[https://webassign.net/ WebAssign website]&lt;br /&gt;
#[http://wikis.lib.ncsu.edu/index.php/Expertiza Wiki Expertiza project documentation]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=127599</id>
		<title>CSC/ECE 517 Fall 2019 - E1964. Export review scores for projects</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=127599"/>
		<updated>2019-11-07T00:22:18Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /* Test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1964. Export review scores for projects==&lt;br /&gt;
This page provides a description of the [http://expertiza.ncsu.edu/ Expertiza website(1)] project undertaken for OSS component in Object Oriented Design and Development.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[https://github.com/expertiza/expertiza Expertiza GitHub source code(2)] is an Open Source project based on Ruby on Rails framework. It is a software to create renewable learning projects through peer reviews and continuous assessments. It enables group projects and project submissions via URLs and wiki pages as well. It is supported by the National Science Foundation.&lt;br /&gt;
&lt;br /&gt;
===Problem Statement / Motivation===&lt;br /&gt;
This project aims to easily handle review score exporting for instructor and TAs, when they try to export scores from Expertiza to [https://webassign.net/ WebAssign website(3)]. Currently, no such option exists to export scores so that it can be later uploaded to WebAssign efficiently. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Tasks Identified===&lt;br /&gt;
All tasks pertaining to the completion of the project have been listed out here as follows:&lt;br /&gt;
* A new button is to be added to export scores. All functionality to be handled will be taken care of using VanillaJS. &lt;br /&gt;
* Files modified:   &lt;br /&gt;
  _review_report.html.erb&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
Diagrammatic representation of the workflow of the project is shown as follows:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Review Report Flow Chart Diagram.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review page.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;button onclick=&amp;quot;exportTableToCSV('review_scores.csv')&amp;quot;&amp;gt;Export Review Scores To CSV File&amp;lt;/button&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
   .&lt;br /&gt;
   . &lt;br /&gt;
   .&lt;br /&gt;
   &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;%= link_to user.name(session[:ip]), impersonate_impersonate_path(:user =&amp;gt; {:name =&amp;gt; user.name(session[:ip])}), :method =&amp;gt; :post, :class =&amp;gt; &amp;quot;runityID&amp;quot; %&amp;gt;&lt;br /&gt;
      (&amp;lt;span class=&amp;quot;rname&amp;quot;&amp;gt;&amp;lt;%= user.fullname(session[:ip]) %&amp;gt;&amp;lt;/span&amp;gt;)&lt;br /&gt;
   &amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Screencast==&lt;br /&gt;
#[https://drive.google.com/open?id=1FSXYgkppHZsgEW7_CpY0hvLwA2PqZ5wZ Here] is the link to a screen recording on how to access the functionality and export the CSV file.&lt;br /&gt;
&lt;br /&gt;
==Code and Snapshots==&lt;br /&gt;
We have written two methods inside _review_report.html.erb named exportTableToCSV and downloadCSV which are as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function downloadCSV(csv, filename) {&lt;br /&gt;
var csvFile;&lt;br /&gt;
var downloadLink;&lt;br /&gt;
&lt;br /&gt;
// CSV file&lt;br /&gt;
csvFile = new Blob([csv], {type: &amp;quot;text/csv&amp;quot;});&lt;br /&gt;
&lt;br /&gt;
// Download link&lt;br /&gt;
downloadLink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// File name&lt;br /&gt;
downloadLink.download = filename;&lt;br /&gt;
&lt;br /&gt;
// Create a link to the file&lt;br /&gt;
downloadLink.href = window.URL.createObjectURL(csvFile);&lt;br /&gt;
&lt;br /&gt;
// Hide download link&lt;br /&gt;
downloadLink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Add the link to DOM&lt;br /&gt;
document.body.appendChild(downloadLink);&lt;br /&gt;
&lt;br /&gt;
// Click download link&lt;br /&gt;
downloadLink.click();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	function exportTableToCSV(filename) {&lt;br /&gt;
		var csv = [];&lt;br /&gt;
		var rows = document.querySelector(&amp;quot;table#myTable&amp;quot;).rows;&lt;br /&gt;
		var row = [];&lt;br /&gt;
		row = setHeaderForCSV();&lt;br /&gt;
		csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		for (var i = 1; i &amp;lt; rows.length; i++) {&lt;br /&gt;
			var row = [];&lt;br /&gt;
			&lt;br /&gt;
			reviewer_name = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;td span.rname&amp;quot;).innerHTML + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			reviewer_unityid = rows[i].querySelector(&amp;quot;td a.runityID&amp;quot;).innerHTML;&lt;br /&gt;
			reviewer_emailid = reviewer_unityid + &amp;quot;@ncsu.edu&amp;quot;;&lt;br /&gt;
			reviewer_grade = rows[i].querySelector(&amp;quot;input#grade_for_reviewer&amp;quot;).value;&lt;br /&gt;
			reviewer_comment = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;textarea#comment_for_reviewer&amp;quot;).innerHTML.replace(/&amp;quot;/g,&amp;quot;\'&amp;quot;) + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			&lt;br /&gt;
			row.push(reviewer_name);&lt;br /&gt;
			row.push(reviewer_unityid);&lt;br /&gt;
			row.push(reviewer_emailid);&lt;br /&gt;
			row.push(reviewer_grade);&lt;br /&gt;
			row.push(reviewer_comment);&lt;br /&gt;
			&lt;br /&gt;
      csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
              &lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
    // Call Download CSV file function here&lt;br /&gt;
    downloadCSV(csv.join(&amp;quot;\n&amp;quot;), filename);&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output file has &amp;quot;name&amp;quot;, &amp;quot;unity_id&amp;quot;, &amp;quot;email_id&amp;quot;, &amp;quot;grade&amp;quot; and &amp;quot;comment&amp;quot; fields from the Review Scores Report table.&lt;br /&gt;
&lt;br /&gt;
[[File:Csv_view.png]]&lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
The code has been designed such that all the reviews completed by reviewers for a particular assignment can be seen, graded collected and stored easily by the click of a button. Thus, a good test case would be to check whether the required headers and data are getting stored and to check whether junk data gets stored in the csv if there are no reviews by reviewers. &amp;lt;br&amp;gt;&lt;br /&gt;
Newly created test cases include:&lt;br /&gt;
* Test cases to check for the UI elements in Review Report html page.&lt;br /&gt;
* Test case to check whether added button (&amp;quot;Export Review Scores To CSV File&amp;quot;) is actually rendered in the html page.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  it &amp;quot;has Export Reviews button&amp;quot; do&lt;br /&gt;
    expect(page).to have_button('Export Review Scores To CSV File')&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Test case to see whether a simple CSV with the correct headers (Name, Unity ID, Email ID, Grade and Comments) is being created.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  # test to check whether a blank CSV with headers is being created or not.&lt;br /&gt;
  it &amp;quot;can create an empty csv with just headers&amp;quot; do&lt;br /&gt;
    expected_csv = File.read('spec/features/review_report_details/review_report_no_data_csv.txt')&lt;br /&gt;
    expect(generated_csv(true, @options)).to eq(expected_csv)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # function to generate a simple CSV with headers.&lt;br /&gt;
  def generated_csv(t_assignment, t_options)&lt;br /&gt;
    delimiter = ','&lt;br /&gt;
    CSV.generate(col_sep: delimiter) do |csv|&lt;br /&gt;
      csv &amp;lt;&amp;lt; ReportsController.export_details_fields(t_options)&lt;br /&gt;
      ReportsController.export_details(csv, t_assignment, false)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Test Plan===&lt;br /&gt;
   1. Log into expertiza as the instructor.&amp;lt;br&amp;gt;&lt;br /&gt;
   2. Load all assignments. (Manage -&amp;gt; Assignments)&amp;lt;br&amp;gt;&lt;br /&gt;
   3. Click on 'View Reports' button.&amp;lt;br&amp;gt;&lt;br /&gt;
   4. Choose 'Review Report' from the dropdown and click 'View'.&amp;lt;br&amp;gt;&lt;br /&gt;
   5. You can now export the grade and comments of the reviewers along with their details, i.e, name, unity ID and email.&amp;lt;br&amp;gt;&lt;br /&gt;
   6. The file will be downloaded.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Design===&lt;br /&gt;
The aim of our project was to implement exporting of review scores from Expertiza software. To accomplish this, we shall advance by using the delegation pattern to add exporting capabilities to the _review_report.html.erb for exporting review scores.&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Mentor: Harsh Agrawal &amp;lt;br&amp;gt;&lt;br /&gt;
Team: &amp;lt;br&amp;gt;&lt;br /&gt;
* Yash Thakkar (yrthakka)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
#[http://expertiza.ncsu.edu/ Expertiza website]&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza GitHub source code]&lt;br /&gt;
#[https://webassign.net/ WebAssign website]&lt;br /&gt;
#[http://wikis.lib.ncsu.edu/index.php/Expertiza Wiki Expertiza project documentation]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=127592</id>
		<title>CSC/ECE 517 Fall 2019 - E1964. Export review scores for projects</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=127592"/>
		<updated>2019-11-07T00:19:17Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /* Test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1964. Export review scores for projects==&lt;br /&gt;
This page provides a description of the [http://expertiza.ncsu.edu/ Expertiza website(1)] project undertaken for OSS component in Object Oriented Design and Development.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[https://github.com/expertiza/expertiza Expertiza GitHub source code(2)] is an Open Source project based on Ruby on Rails framework. It is a software to create renewable learning projects through peer reviews and continuous assessments. It enables group projects and project submissions via URLs and wiki pages as well. It is supported by the National Science Foundation.&lt;br /&gt;
&lt;br /&gt;
===Problem Statement / Motivation===&lt;br /&gt;
This project aims to easily handle review score exporting for instructor and TAs, when they try to export scores from Expertiza to [https://webassign.net/ WebAssign website(3)]. Currently, no such option exists to export scores so that it can be later uploaded to WebAssign efficiently. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Tasks Identified===&lt;br /&gt;
All tasks pertaining to the completion of the project have been listed out here as follows:&lt;br /&gt;
* A new button is to be added to export scores. All functionality to be handled will be taken care of using VanillaJS. &lt;br /&gt;
* Files modified:   &lt;br /&gt;
  _review_report.html.erb&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
Diagrammatic representation of the workflow of the project is shown as follows:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Review Report Flow Chart Diagram.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review page.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;button onclick=&amp;quot;exportTableToCSV('review_scores.csv')&amp;quot;&amp;gt;Export Review Scores To CSV File&amp;lt;/button&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
   .&lt;br /&gt;
   . &lt;br /&gt;
   .&lt;br /&gt;
   &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;%= link_to user.name(session[:ip]), impersonate_impersonate_path(:user =&amp;gt; {:name =&amp;gt; user.name(session[:ip])}), :method =&amp;gt; :post, :class =&amp;gt; &amp;quot;runityID&amp;quot; %&amp;gt;&lt;br /&gt;
      (&amp;lt;span class=&amp;quot;rname&amp;quot;&amp;gt;&amp;lt;%= user.fullname(session[:ip]) %&amp;gt;&amp;lt;/span&amp;gt;)&lt;br /&gt;
   &amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Screencast==&lt;br /&gt;
#[https://drive.google.com/open?id=1FSXYgkppHZsgEW7_CpY0hvLwA2PqZ5wZ Here] is the link to a screen recording on how to access the functionality and export the CSV file.&lt;br /&gt;
&lt;br /&gt;
==Code and Snapshots==&lt;br /&gt;
We have written two methods inside _review_report.html.erb named exportTableToCSV and downloadCSV which are as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function downloadCSV(csv, filename) {&lt;br /&gt;
var csvFile;&lt;br /&gt;
var downloadLink;&lt;br /&gt;
&lt;br /&gt;
// CSV file&lt;br /&gt;
csvFile = new Blob([csv], {type: &amp;quot;text/csv&amp;quot;});&lt;br /&gt;
&lt;br /&gt;
// Download link&lt;br /&gt;
downloadLink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// File name&lt;br /&gt;
downloadLink.download = filename;&lt;br /&gt;
&lt;br /&gt;
// Create a link to the file&lt;br /&gt;
downloadLink.href = window.URL.createObjectURL(csvFile);&lt;br /&gt;
&lt;br /&gt;
// Hide download link&lt;br /&gt;
downloadLink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Add the link to DOM&lt;br /&gt;
document.body.appendChild(downloadLink);&lt;br /&gt;
&lt;br /&gt;
// Click download link&lt;br /&gt;
downloadLink.click();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	function exportTableToCSV(filename) {&lt;br /&gt;
		var csv = [];&lt;br /&gt;
		var rows = document.querySelector(&amp;quot;table#myTable&amp;quot;).rows;&lt;br /&gt;
		var row = [];&lt;br /&gt;
		row = setHeaderForCSV();&lt;br /&gt;
		csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		for (var i = 1; i &amp;lt; rows.length; i++) {&lt;br /&gt;
			var row = [];&lt;br /&gt;
			&lt;br /&gt;
			reviewer_name = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;td span.rname&amp;quot;).innerHTML + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			reviewer_unityid = rows[i].querySelector(&amp;quot;td a.runityID&amp;quot;).innerHTML;&lt;br /&gt;
			reviewer_emailid = reviewer_unityid + &amp;quot;@ncsu.edu&amp;quot;;&lt;br /&gt;
			reviewer_grade = rows[i].querySelector(&amp;quot;input#grade_for_reviewer&amp;quot;).value;&lt;br /&gt;
			reviewer_comment = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;textarea#comment_for_reviewer&amp;quot;).innerHTML.replace(/&amp;quot;/g,&amp;quot;\'&amp;quot;) + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			&lt;br /&gt;
			row.push(reviewer_name);&lt;br /&gt;
			row.push(reviewer_unityid);&lt;br /&gt;
			row.push(reviewer_emailid);&lt;br /&gt;
			row.push(reviewer_grade);&lt;br /&gt;
			row.push(reviewer_comment);&lt;br /&gt;
			&lt;br /&gt;
      csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
              &lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
    // Call Download CSV file function here&lt;br /&gt;
    downloadCSV(csv.join(&amp;quot;\n&amp;quot;), filename);&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output file has &amp;quot;name&amp;quot;, &amp;quot;unity_id&amp;quot;, &amp;quot;email_id&amp;quot;, &amp;quot;grade&amp;quot; and &amp;quot;comment&amp;quot; fields from the Review Scores Report table.&lt;br /&gt;
&lt;br /&gt;
[[File:Csv_view.png]]&lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
The code has been designed such that all the reviews completed by reviewers for a particular assignment can be seen, graded collected and stored easily by the click of a button. Thus, a good test case would be to check whether the required headers and data are getting stored and to check whether junk data gets stored in the csv if there are no reviews by reviewers. &amp;lt;br&amp;gt;&lt;br /&gt;
Newly created test cases include:&lt;br /&gt;
* Test cases to check for the UI elements in Review Report html page.&lt;br /&gt;
* Test case to check whether added button (&amp;quot;Export Review Scores To CSV File&amp;quot;) is actually rendered in the html page.&lt;br /&gt;
* Test case to see whether a simple CSV with the correct headers (Name, Unity ID, Email ID, Grade and Comments) is being created.&lt;br /&gt;
&lt;br /&gt;
===Test Plan===&lt;br /&gt;
   1. Log into expertiza as the instructor.&amp;lt;br&amp;gt;&lt;br /&gt;
   2. Load all assignments. (Manage -&amp;gt; Assignments)&amp;lt;br&amp;gt;&lt;br /&gt;
   3. Click on 'View Reports' button.&amp;lt;br&amp;gt;&lt;br /&gt;
   4. Choose 'Review Report' from the dropdown and click 'View'.&amp;lt;br&amp;gt;&lt;br /&gt;
   5. You can now export the grade and comments of the reviewers along with their details, i.e, name, unity ID and email.&amp;lt;br&amp;gt;&lt;br /&gt;
   6. The file will be downloaded.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Design===&lt;br /&gt;
The aim of our project was to implement exporting of review scores from Expertiza software. To accomplish this, we shall advance by using the delegation pattern to add exporting capabilities to the _review_report.html.erb for exporting review scores.&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Mentor: Harsh Agrawal &amp;lt;br&amp;gt;&lt;br /&gt;
Team: &amp;lt;br&amp;gt;&lt;br /&gt;
* Yash Thakkar (yrthakka)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
#[http://expertiza.ncsu.edu/ Expertiza website]&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza GitHub source code]&lt;br /&gt;
#[https://webassign.net/ WebAssign website]&lt;br /&gt;
#[http://wikis.lib.ncsu.edu/index.php/Expertiza Wiki Expertiza project documentation]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=126156</id>
		<title>CSC/ECE 517 Fall 2019 - E1964. Export review scores for projects</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=126156"/>
		<updated>2019-10-29T00:08:58Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1964. Export review scores for projects==&lt;br /&gt;
This page provides a description of the [http://expertiza.ncsu.edu/ Expertiza website(1)] project undertaken for OSS component in Object Oriented Design and Development.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[https://github.com/expertiza/expertiza Expertiza GitHub source code(2)] is an Open Source project based on Ruby on Rails framework. It is a software to create renewable learning projects through peer reviews and continuous assessments. It enables group projects and project submissions via URLs and wiki pages as well. It is supported by the National Science Foundation.&lt;br /&gt;
&lt;br /&gt;
===Problem Statement / Motivation===&lt;br /&gt;
This project aims to easily handle review score exporting for instructor and TAs, when they try to export scores from Expertiza to [https://webassign.net/ WebAssign website(3)]. Currently, no such option exists to export scores so that it can be later uploaded to WebAssign efficiently. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Tasks Identified===&lt;br /&gt;
All tasks pertaining to the completion of the project have been listed out here as follows:&lt;br /&gt;
* A new button is to be added to export scores. All functionality to be handled will be taken care of using VanillaJS. &lt;br /&gt;
* Files modified:   &lt;br /&gt;
  _review_report.html.erb&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
Diagrammatic representation of the workflow of the project is shown as follows:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Review Report Flow Chart Diagram.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review page.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;button onclick=&amp;quot;exportTableToCSV('review_scores.csv')&amp;quot;&amp;gt;Export Review Scores To CSV File&amp;lt;/button&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
   .&lt;br /&gt;
   . &lt;br /&gt;
   .&lt;br /&gt;
   &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;%= link_to user.name(session[:ip]), impersonate_impersonate_path(:user =&amp;gt; {:name =&amp;gt; user.name(session[:ip])}), :method =&amp;gt; :post, :class =&amp;gt; &amp;quot;runityID&amp;quot; %&amp;gt;&lt;br /&gt;
      (&amp;lt;span class=&amp;quot;rname&amp;quot;&amp;gt;&amp;lt;%= user.fullname(session[:ip]) %&amp;gt;&amp;lt;/span&amp;gt;)&lt;br /&gt;
   &amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Screencast==&lt;br /&gt;
#[https://drive.google.com/open?id=1FSXYgkppHZsgEW7_CpY0hvLwA2PqZ5wZ Here] is the link to a screen recording on how to access the functionality and export the CSV file.&lt;br /&gt;
&lt;br /&gt;
==Code and Snapshots==&lt;br /&gt;
We have written two methods inside _review_report.html.erb named exportTableToCSV and downloadCSV which are as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function downloadCSV(csv, filename) {&lt;br /&gt;
var csvFile;&lt;br /&gt;
var downloadLink;&lt;br /&gt;
&lt;br /&gt;
// CSV file&lt;br /&gt;
csvFile = new Blob([csv], {type: &amp;quot;text/csv&amp;quot;});&lt;br /&gt;
&lt;br /&gt;
// Download link&lt;br /&gt;
downloadLink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// File name&lt;br /&gt;
downloadLink.download = filename;&lt;br /&gt;
&lt;br /&gt;
// Create a link to the file&lt;br /&gt;
downloadLink.href = window.URL.createObjectURL(csvFile);&lt;br /&gt;
&lt;br /&gt;
// Hide download link&lt;br /&gt;
downloadLink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Add the link to DOM&lt;br /&gt;
document.body.appendChild(downloadLink);&lt;br /&gt;
&lt;br /&gt;
// Click download link&lt;br /&gt;
downloadLink.click();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	function exportTableToCSV(filename) {&lt;br /&gt;
		var csv = [];&lt;br /&gt;
		var rows = document.querySelector(&amp;quot;table#myTable&amp;quot;).rows;&lt;br /&gt;
		var row = [];&lt;br /&gt;
		row = setHeaderForCSV();&lt;br /&gt;
		csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		for (var i = 1; i &amp;lt; rows.length; i++) {&lt;br /&gt;
			var row = [];&lt;br /&gt;
			&lt;br /&gt;
			reviewer_name = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;td span.rname&amp;quot;).innerHTML + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			reviewer_unityid = rows[i].querySelector(&amp;quot;td a.runityID&amp;quot;).innerHTML;&lt;br /&gt;
			reviewer_emailid = reviewer_unityid + &amp;quot;@ncsu.edu&amp;quot;;&lt;br /&gt;
			reviewer_grade = rows[i].querySelector(&amp;quot;input#grade_for_reviewer&amp;quot;).value;&lt;br /&gt;
			reviewer_comment = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;textarea#comment_for_reviewer&amp;quot;).innerHTML.replace(/&amp;quot;/g,&amp;quot;\'&amp;quot;) + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			&lt;br /&gt;
			row.push(reviewer_name);&lt;br /&gt;
			row.push(reviewer_unityid);&lt;br /&gt;
			row.push(reviewer_emailid);&lt;br /&gt;
			row.push(reviewer_grade);&lt;br /&gt;
			row.push(reviewer_comment);&lt;br /&gt;
			&lt;br /&gt;
      csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
              &lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
    // Call Download CSV file function here&lt;br /&gt;
    downloadCSV(csv.join(&amp;quot;\n&amp;quot;), filename);&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output file has &amp;quot;name&amp;quot;, &amp;quot;unity_id&amp;quot;, &amp;quot;email_id&amp;quot;, &amp;quot;grade&amp;quot; and &amp;quot;comment&amp;quot; fields from the Review Scores Report table.&lt;br /&gt;
&lt;br /&gt;
[[File:Csv_view.png]]&lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
The code has been designed such that all the reviews completed by reviewers for a particular assignment can be seen, graded collected and stored easily by the click of a button. Thus, a good test case would be to check whether the required headers and data are getting stored and to check whether junk data gets stored in the csv if there are no reviews by reviewers.&lt;br /&gt;
&lt;br /&gt;
===Design===&lt;br /&gt;
The aim of our project was to implement exporting of review scores from Expertiza software. To accomplish this, we shall advance by using the delegation pattern to add exporting capabilities to the _review_report.html.erb for exporting review scores.&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Mentor: Harsh Agrawal &amp;lt;br&amp;gt;&lt;br /&gt;
Team: &amp;lt;br&amp;gt;&lt;br /&gt;
* Yash Thakkar (yrthakka)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
#[http://expertiza.ncsu.edu/ Expertiza website]&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza GitHub source code]&lt;br /&gt;
#[https://webassign.net/ WebAssign website]&lt;br /&gt;
#[http://wikis.lib.ncsu.edu/index.php/Expertiza Wiki Expertiza project documentation]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019&amp;diff=126155</id>
		<title>CSC/ECE 517 Fall 2019</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019&amp;diff=126155"/>
		<updated>2019-10-29T00:08:38Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[CSC/ECE 517 Fall 2019 - Project E1947. Refactor quiz_questionnaire_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - Project E1965. Review report should link to the usual view for reviews]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1972. OSS project J. Skellington: Accessing Assignment Rubrics]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1961. Email notification to reviewers and instructors]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1971. OSS project Finklestein: Instructors &amp;amp; Institutions]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1953. Tagging report for student]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1955.Write  unit tests for student_task.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1954. Auto-generate submission directory names based on assignment names]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1958. Two issues related to assignment management]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1948. Refactor review_mapping_helper.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1959. Intelligent copying of assignments without topics]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1968. Fixes for adding members to teams]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1969. Fixes for reviews not being available]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1951. Remove multiple topics at a time]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1957. Time travel Not Allowed..!!! Restrict TAs’ ability to change their own grade + limit file-size upload]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1963. Changing assignment participant role]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1941. Issues related to topic deadlines]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1966. Tabbed_reviews partial file refactor for displaying the alternate view of reviews]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1962. Email notification upon account creation]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1967. Fix glitches in author feedback]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1960. Create new late policy successfully and fixing &amp;quot;Back&amp;quot; link]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1939. OSS Project Juniper: Bookmark enhancements]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - M1950. Support Asynchronous Web Assembly Compilation]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1938. OSS project Duke Blue: Fix import glitches]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - M1951. Implement missing OffscreenCanvas APIs]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1940. Improving email notification]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1956. There is no shortcut to get free review points: Review Assignment Bug]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1942. Refactor stage deadlines in assignment.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - M1952. Missing DOM features project]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1964. Export review scores for projects]]&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=126153</id>
		<title>CSC/ECE 517 Fall 2019 - E1964. Export review scores for projects</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=126153"/>
		<updated>2019-10-29T00:07:12Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /* Problem Statement / Motivation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1964. Export review scores for projects==&lt;br /&gt;
This page provides a description of the [http://expertiza.ncsu.edu/ Expertiza website(1)] project undertaken for OSS component in Object Oriented Design and Development.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[https://github.com/expertiza/expertiza Expertiza GitHub source code(2)] is an Open Source project based on Ruby on Rails framework. It is a software to create renewable learning projects through peer reviews and continuous assessments. It enables group projects and project submissions via URLs and wiki pages as well. It is supported by the National Science Foundation.&lt;br /&gt;
&lt;br /&gt;
===Problem Statement / Motivation===&lt;br /&gt;
This project aims to easily handle review score exporting for instructor and TAs, when they try to export scores from Expertiza to [https://webassign.net/ WebAssign website(3)]. Currently, no such option exists to export scores so that it can be later uploaded to WebAssign efficiently. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Tasks Identified===&lt;br /&gt;
All tasks pertaining to the completion of the project have been listed out here as follows:&lt;br /&gt;
* A new button is to be added to export scores. All functionality to be handled will be taken care of using VanillaJS. &lt;br /&gt;
* Files modified:   &lt;br /&gt;
  _review_report.html.erb&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
Diagrammatic representation of the workflow of the project is shown as follows:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Review Report Flow Chart Diagram.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review page.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;button onclick=&amp;quot;exportTableToCSV('review_scores.csv')&amp;quot;&amp;gt;Export Review Scores To CSV File&amp;lt;/button&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
   .&lt;br /&gt;
   . &lt;br /&gt;
   .&lt;br /&gt;
   &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;%= link_to user.name(session[:ip]), impersonate_impersonate_path(:user =&amp;gt; {:name =&amp;gt; user.name(session[:ip])}), :method =&amp;gt; :post, :class =&amp;gt; &amp;quot;runityID&amp;quot; %&amp;gt;&lt;br /&gt;
      (&amp;lt;span class=&amp;quot;rname&amp;quot;&amp;gt;&amp;lt;%= user.fullname(session[:ip]) %&amp;gt;&amp;lt;/span&amp;gt;)&lt;br /&gt;
   &amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Screencast==&lt;br /&gt;
#[https://drive.google.com/open?id=1FSXYgkppHZsgEW7_CpY0hvLwA2PqZ5wZ Here] is the link to a screen recording on how to access the functionality and export the CSV file.&lt;br /&gt;
&lt;br /&gt;
==Code and Snapshots==&lt;br /&gt;
We have written two methods inside _review_report.html.erb named exportTableToCSV and downloadCSV which are as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function downloadCSV(csv, filename) {&lt;br /&gt;
var csvFile;&lt;br /&gt;
var downloadLink;&lt;br /&gt;
&lt;br /&gt;
// CSV file&lt;br /&gt;
csvFile = new Blob([csv], {type: &amp;quot;text/csv&amp;quot;});&lt;br /&gt;
&lt;br /&gt;
// Download link&lt;br /&gt;
downloadLink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// File name&lt;br /&gt;
downloadLink.download = filename;&lt;br /&gt;
&lt;br /&gt;
// Create a link to the file&lt;br /&gt;
downloadLink.href = window.URL.createObjectURL(csvFile);&lt;br /&gt;
&lt;br /&gt;
// Hide download link&lt;br /&gt;
downloadLink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Add the link to DOM&lt;br /&gt;
document.body.appendChild(downloadLink);&lt;br /&gt;
&lt;br /&gt;
// Click download link&lt;br /&gt;
downloadLink.click();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	function exportTableToCSV(filename) {&lt;br /&gt;
		var csv = [];&lt;br /&gt;
		var rows = document.querySelector(&amp;quot;table#myTable&amp;quot;).rows;&lt;br /&gt;
		var row = [];&lt;br /&gt;
		row = setHeaderForCSV();&lt;br /&gt;
		csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		for (var i = 1; i &amp;lt; rows.length; i++) {&lt;br /&gt;
			var row = [];&lt;br /&gt;
			&lt;br /&gt;
			reviewer_name = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;td span.rname&amp;quot;).innerHTML + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			reviewer_unityid = rows[i].querySelector(&amp;quot;td a.runityID&amp;quot;).innerHTML;&lt;br /&gt;
			reviewer_emailid = reviewer_unityid + &amp;quot;@ncsu.edu&amp;quot;;&lt;br /&gt;
			reviewer_grade = rows[i].querySelector(&amp;quot;input#grade_for_reviewer&amp;quot;).value;&lt;br /&gt;
			reviewer_comment = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;textarea#comment_for_reviewer&amp;quot;).innerHTML.replace(/&amp;quot;/g,&amp;quot;\'&amp;quot;) + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			&lt;br /&gt;
			row.push(reviewer_name);&lt;br /&gt;
			row.push(reviewer_unityid);&lt;br /&gt;
			row.push(reviewer_emailid);&lt;br /&gt;
			row.push(reviewer_grade);&lt;br /&gt;
			row.push(reviewer_comment);&lt;br /&gt;
			&lt;br /&gt;
      csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
              &lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
    // Call Download CSV file function here&lt;br /&gt;
    downloadCSV(csv.join(&amp;quot;\n&amp;quot;), filename);&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output file has &amp;quot;name&amp;quot;, &amp;quot;unity_id&amp;quot;, &amp;quot;email_id&amp;quot;, &amp;quot;grade&amp;quot; and &amp;quot;comment&amp;quot; fields from the Review Scores Report table.&lt;br /&gt;
&lt;br /&gt;
[[File:Csv_view.png]]&lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
The code has been designed such that all the reviews completed by reviewers for a particular assignment can be seen, graded collected and stored easily by the click of a button. Thus, a good test case would be to check whether the required headers and data are getting stored and to check whether junk data gets stored in the csv if there are no reviews by reviewers.&lt;br /&gt;
&lt;br /&gt;
===Design===&lt;br /&gt;
The aim of our project was to implement exporting of review scores from Expertiza software. To accomplish this, we shall advance by using the delegation pattern to add exporting capabilities to the _review_report.html.erb for exporting review scores.&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Mentor: Harsh Agrawal &amp;lt;br&amp;gt;&lt;br /&gt;
Team: &amp;lt;br&amp;gt;&lt;br /&gt;
* Yash Thakkar (yrthakka)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
TODO: Add all references by number.&lt;br /&gt;
#[http://expertiza.ncsu.edu/ Expertiza website]&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza GitHub source code]&lt;br /&gt;
#[https://webassign.net/ WebAssign website]&lt;br /&gt;
#[http://wikis.lib.ncsu.edu/index.php/Expertiza Wiki Expertiza project documentation]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=126152</id>
		<title>CSC/ECE 517 Fall 2019 - E1964. Export review scores for projects</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=126152"/>
		<updated>2019-10-29T00:06:45Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1964. Export review scores for projects==&lt;br /&gt;
This page provides a description of the [http://expertiza.ncsu.edu/ Expertiza website(1)] project undertaken for OSS component in Object Oriented Design and Development.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[https://github.com/expertiza/expertiza Expertiza GitHub source code(2)] is an Open Source project based on Ruby on Rails framework. It is a software to create renewable learning projects through peer reviews and continuous assessments. It enables group projects and project submissions via URLs and wiki pages as well. It is supported by the National Science Foundation.&lt;br /&gt;
&lt;br /&gt;
===Problem Statement / Motivation===&lt;br /&gt;
This project aims to easily handle review score exporting for instructor and TAs, when they try to export scores from Expertiza to [https://webassign.net/ WebAssign website(3)]. Currently, no such option exists to export scores so that it can be later uploaded to WebAssign efficiently. &amp;lt;br&amp;gt;&lt;br /&gt;
TODO:&lt;br /&gt;
&lt;br /&gt;
===Tasks Identified===&lt;br /&gt;
All tasks pertaining to the completion of the project have been listed out here as follows:&lt;br /&gt;
* A new button is to be added to export scores. All functionality to be handled will be taken care of using VanillaJS. &lt;br /&gt;
* Files modified:   &lt;br /&gt;
  _review_report.html.erb&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
Diagrammatic representation of the workflow of the project is shown as follows:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Review Report Flow Chart Diagram.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review page.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;button onclick=&amp;quot;exportTableToCSV('review_scores.csv')&amp;quot;&amp;gt;Export Review Scores To CSV File&amp;lt;/button&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
   .&lt;br /&gt;
   . &lt;br /&gt;
   .&lt;br /&gt;
   &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;%= link_to user.name(session[:ip]), impersonate_impersonate_path(:user =&amp;gt; {:name =&amp;gt; user.name(session[:ip])}), :method =&amp;gt; :post, :class =&amp;gt; &amp;quot;runityID&amp;quot; %&amp;gt;&lt;br /&gt;
      (&amp;lt;span class=&amp;quot;rname&amp;quot;&amp;gt;&amp;lt;%= user.fullname(session[:ip]) %&amp;gt;&amp;lt;/span&amp;gt;)&lt;br /&gt;
   &amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Screencast==&lt;br /&gt;
#[https://drive.google.com/open?id=1FSXYgkppHZsgEW7_CpY0hvLwA2PqZ5wZ Here] is the link to a screen recording on how to access the functionality and export the CSV file.&lt;br /&gt;
&lt;br /&gt;
==Code and Snapshots==&lt;br /&gt;
We have written two methods inside _review_report.html.erb named exportTableToCSV and downloadCSV which are as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function downloadCSV(csv, filename) {&lt;br /&gt;
var csvFile;&lt;br /&gt;
var downloadLink;&lt;br /&gt;
&lt;br /&gt;
// CSV file&lt;br /&gt;
csvFile = new Blob([csv], {type: &amp;quot;text/csv&amp;quot;});&lt;br /&gt;
&lt;br /&gt;
// Download link&lt;br /&gt;
downloadLink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// File name&lt;br /&gt;
downloadLink.download = filename;&lt;br /&gt;
&lt;br /&gt;
// Create a link to the file&lt;br /&gt;
downloadLink.href = window.URL.createObjectURL(csvFile);&lt;br /&gt;
&lt;br /&gt;
// Hide download link&lt;br /&gt;
downloadLink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Add the link to DOM&lt;br /&gt;
document.body.appendChild(downloadLink);&lt;br /&gt;
&lt;br /&gt;
// Click download link&lt;br /&gt;
downloadLink.click();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	function exportTableToCSV(filename) {&lt;br /&gt;
		var csv = [];&lt;br /&gt;
		var rows = document.querySelector(&amp;quot;table#myTable&amp;quot;).rows;&lt;br /&gt;
		var row = [];&lt;br /&gt;
		row = setHeaderForCSV();&lt;br /&gt;
		csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		for (var i = 1; i &amp;lt; rows.length; i++) {&lt;br /&gt;
			var row = [];&lt;br /&gt;
			&lt;br /&gt;
			reviewer_name = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;td span.rname&amp;quot;).innerHTML + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			reviewer_unityid = rows[i].querySelector(&amp;quot;td a.runityID&amp;quot;).innerHTML;&lt;br /&gt;
			reviewer_emailid = reviewer_unityid + &amp;quot;@ncsu.edu&amp;quot;;&lt;br /&gt;
			reviewer_grade = rows[i].querySelector(&amp;quot;input#grade_for_reviewer&amp;quot;).value;&lt;br /&gt;
			reviewer_comment = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;textarea#comment_for_reviewer&amp;quot;).innerHTML.replace(/&amp;quot;/g,&amp;quot;\'&amp;quot;) + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			&lt;br /&gt;
			row.push(reviewer_name);&lt;br /&gt;
			row.push(reviewer_unityid);&lt;br /&gt;
			row.push(reviewer_emailid);&lt;br /&gt;
			row.push(reviewer_grade);&lt;br /&gt;
			row.push(reviewer_comment);&lt;br /&gt;
			&lt;br /&gt;
      csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
              &lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
    // Call Download CSV file function here&lt;br /&gt;
    downloadCSV(csv.join(&amp;quot;\n&amp;quot;), filename);&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output file has &amp;quot;name&amp;quot;, &amp;quot;unity_id&amp;quot;, &amp;quot;email_id&amp;quot;, &amp;quot;grade&amp;quot; and &amp;quot;comment&amp;quot; fields from the Review Scores Report table.&lt;br /&gt;
&lt;br /&gt;
[[File:Csv_view.png]]&lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
The code has been designed such that all the reviews completed by reviewers for a particular assignment can be seen, graded collected and stored easily by the click of a button. Thus, a good test case would be to check whether the required headers and data are getting stored and to check whether junk data gets stored in the csv if there are no reviews by reviewers.&lt;br /&gt;
&lt;br /&gt;
===Design===&lt;br /&gt;
The aim of our project was to implement exporting of review scores from Expertiza software. To accomplish this, we shall advance by using the delegation pattern to add exporting capabilities to the _review_report.html.erb for exporting review scores.&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Mentor: Harsh Agrawal &amp;lt;br&amp;gt;&lt;br /&gt;
Team: &amp;lt;br&amp;gt;&lt;br /&gt;
* Yash Thakkar (yrthakka)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
TODO: Add all references by number.&lt;br /&gt;
#[http://expertiza.ncsu.edu/ Expertiza website]&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza GitHub source code]&lt;br /&gt;
#[https://webassign.net/ WebAssign website]&lt;br /&gt;
#[http://wikis.lib.ncsu.edu/index.php/Expertiza Wiki Expertiza project documentation]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=126117</id>
		<title>CSC/ECE 517 Fall 2019 - E1964. Export review scores for projects</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=126117"/>
		<updated>2019-10-28T23:38:01Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /* Tasks Identified */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1964. Export review scores for projects==&lt;br /&gt;
This page provides a description of the [http://expertiza.ncsu.edu/ Expertiza website(1)] project undertaken for OSS component in Object Oriented Design and Development.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[https://github.com/expertiza/expertiza Expertiza GitHub source code(2)] is an Open Source project based on Ruby on Rails framework. It is a software to create renewable learning projects through peer reviews and continuous assessments. It enables group projects and project submissions via URLs and wiki pages as well. It is supported by the National Science Foundation.&lt;br /&gt;
&lt;br /&gt;
===Problem Statement / Motivation===&lt;br /&gt;
This project aims to easily handle review score exporting for instructor and TAs, when they try to export scores from Expertiza to [https://webassign.net/ WebAssign website(3)]. Currently, no such option exists to export scores so that it can be later uploaded to WebAssign efficiently. &amp;lt;br&amp;gt;&lt;br /&gt;
TODO:&lt;br /&gt;
&lt;br /&gt;
===Tasks Identified===&lt;br /&gt;
All tasks pertaining to the completion of the project have been listed out here as follows:&lt;br /&gt;
* A new button is to be added to export scores. All functionality to be handled will be taken care of using VanillaJS. &lt;br /&gt;
* Files modified:   &lt;br /&gt;
  _review_report.html.erb&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
Diagrammatic representation of the workflow of the project is shown as follows:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Review Report Flow Chart Diagram.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review page.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;button onclick=&amp;quot;exportTableToCSV('review_scores.csv')&amp;quot;&amp;gt;Export Review Scores To CSV File&amp;lt;/button&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
   .&lt;br /&gt;
   . &lt;br /&gt;
   .&lt;br /&gt;
   &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;%= link_to user.name(session[:ip]), impersonate_impersonate_path(:user =&amp;gt; {:name =&amp;gt; user.name(session[:ip])}), :method =&amp;gt; :post, :class =&amp;gt; &amp;quot;runityID&amp;quot; %&amp;gt;&lt;br /&gt;
      (&amp;lt;span class=&amp;quot;rname&amp;quot;&amp;gt;&amp;lt;%= user.fullname(session[:ip]) %&amp;gt;&amp;lt;/span&amp;gt;)&lt;br /&gt;
   &amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Screencast==&lt;br /&gt;
#[https://drive.google.com/open?id=1FSXYgkppHZsgEW7_CpY0hvLwA2PqZ5wZ Here] is the link to a screen recording on how to access the functionality and export the CSV file.&lt;br /&gt;
&lt;br /&gt;
==Code and Snapshots==&lt;br /&gt;
We have written two methods inside _review_report.html.erb named exportTableToCSV and downloadCSV which are as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function downloadCSV(csv, filename) {&lt;br /&gt;
var csvFile;&lt;br /&gt;
var downloadLink;&lt;br /&gt;
&lt;br /&gt;
// CSV file&lt;br /&gt;
csvFile = new Blob([csv], {type: &amp;quot;text/csv&amp;quot;});&lt;br /&gt;
&lt;br /&gt;
// Download link&lt;br /&gt;
downloadLink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// File name&lt;br /&gt;
downloadLink.download = filename;&lt;br /&gt;
&lt;br /&gt;
// Create a link to the file&lt;br /&gt;
downloadLink.href = window.URL.createObjectURL(csvFile);&lt;br /&gt;
&lt;br /&gt;
// Hide download link&lt;br /&gt;
downloadLink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Add the link to DOM&lt;br /&gt;
document.body.appendChild(downloadLink);&lt;br /&gt;
&lt;br /&gt;
// Click download link&lt;br /&gt;
downloadLink.click();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	function exportTableToCSV(filename) {&lt;br /&gt;
		var csv = [];&lt;br /&gt;
		var rows = document.querySelector(&amp;quot;table#myTable&amp;quot;).rows;&lt;br /&gt;
		var row = [];&lt;br /&gt;
		row = setHeaderForCSV();&lt;br /&gt;
		csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		for (var i = 1; i &amp;lt; rows.length; i++) {&lt;br /&gt;
			var row = [];&lt;br /&gt;
			&lt;br /&gt;
			reviewer_name = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;td span.rname&amp;quot;).innerHTML + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			reviewer_unityid = rows[i].querySelector(&amp;quot;td a.runityID&amp;quot;).innerHTML;&lt;br /&gt;
			reviewer_emailid = reviewer_unityid + &amp;quot;@ncsu.edu&amp;quot;;&lt;br /&gt;
			reviewer_grade = rows[i].querySelector(&amp;quot;input#grade_for_reviewer&amp;quot;).value;&lt;br /&gt;
			reviewer_comment = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;textarea#comment_for_reviewer&amp;quot;).innerHTML.replace(/&amp;quot;/g,&amp;quot;\'&amp;quot;) + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			&lt;br /&gt;
			row.push(reviewer_name);&lt;br /&gt;
			row.push(reviewer_unityid);&lt;br /&gt;
			row.push(reviewer_emailid);&lt;br /&gt;
			row.push(reviewer_grade);&lt;br /&gt;
			row.push(reviewer_comment);&lt;br /&gt;
			&lt;br /&gt;
      csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
              &lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
    // Call Download CSV file function here&lt;br /&gt;
    downloadCSV(csv.join(&amp;quot;\n&amp;quot;), filename);&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output file has &amp;quot;name&amp;quot;, &amp;quot;unity_id&amp;quot;, &amp;quot;email_id&amp;quot;, &amp;quot;grade&amp;quot; and &amp;quot;comment&amp;quot; fields from the Review Scores Report table.&lt;br /&gt;
&lt;br /&gt;
[[File:Csv_view.png]]&lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
The code has been designed such that all the reviews completed by reviewers for a particular assignment can be seen, graded collected and stored easily by the click of a button. Thus, a good test case would be to check whether the required headers and data are getting stored and to check whether junk data gets stored in the csv if there are no reviews by reviewers.&lt;br /&gt;
&lt;br /&gt;
===Design===&lt;br /&gt;
The aim of our project was to implement exporting of review scores from Expertiza software. To accomplish this, we shall advance by using the delegation pattern to add exporting capabilities to the &amp;quot; &amp;lt;TODO:&amp;gt; export file controller &amp;quot; for exporting review scores.&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Mentor: Harsh Agrawal &amp;lt;br&amp;gt;&lt;br /&gt;
Team: &amp;lt;br&amp;gt;&lt;br /&gt;
* Yash Thakkar (yrthakka)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
TODO: Add all references by number.&lt;br /&gt;
#[http://expertiza.ncsu.edu/ Expertiza website]&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza GitHub source code]&lt;br /&gt;
#[https://webassign.net/ WebAssign website]&lt;br /&gt;
#[http://wikis.lib.ncsu.edu/index.php/Expertiza Wiki Expertiza project documentation]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=126116</id>
		<title>CSC/ECE 517 Fall 2019 - E1964. Export review scores for projects</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=126116"/>
		<updated>2019-10-28T23:37:15Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /* Test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1964. Export review scores for projects==&lt;br /&gt;
This page provides a description of the [http://expertiza.ncsu.edu/ Expertiza website(1)] project undertaken for OSS component in Object Oriented Design and Development.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[https://github.com/expertiza/expertiza Expertiza GitHub source code(2)] is an Open Source project based on Ruby on Rails framework. It is a software to create renewable learning projects through peer reviews and continuous assessments. It enables group projects and project submissions via URLs and wiki pages as well. It is supported by the National Science Foundation.&lt;br /&gt;
&lt;br /&gt;
===Problem Statement / Motivation===&lt;br /&gt;
This project aims to easily handle review score exporting for instructor and TAs, when they try to export scores from Expertiza to [https://webassign.net/ WebAssign website(3)]. Currently, no such option exists to export scores so that it can be later uploaded to WebAssign efficiently. &amp;lt;br&amp;gt;&lt;br /&gt;
TODO:&lt;br /&gt;
&lt;br /&gt;
===Tasks Identified===&lt;br /&gt;
All tasks pertaining to the completion of the project have been listed out here as follows:&lt;br /&gt;
* A new button is to be added to export scores. All functionality to be handled will be taken care of using VanillaJS. &lt;br /&gt;
* TODO&lt;br /&gt;
* Files modified:   &lt;br /&gt;
  _review_report.html.erb&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
Diagrammatic representation of the workflow of the project is shown as follows:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Review Report Flow Chart Diagram.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review page.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;button onclick=&amp;quot;exportTableToCSV('review_scores.csv')&amp;quot;&amp;gt;Export Review Scores To CSV File&amp;lt;/button&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
   .&lt;br /&gt;
   . &lt;br /&gt;
   .&lt;br /&gt;
   &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;%= link_to user.name(session[:ip]), impersonate_impersonate_path(:user =&amp;gt; {:name =&amp;gt; user.name(session[:ip])}), :method =&amp;gt; :post, :class =&amp;gt; &amp;quot;runityID&amp;quot; %&amp;gt;&lt;br /&gt;
      (&amp;lt;span class=&amp;quot;rname&amp;quot;&amp;gt;&amp;lt;%= user.fullname(session[:ip]) %&amp;gt;&amp;lt;/span&amp;gt;)&lt;br /&gt;
   &amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Screencast==&lt;br /&gt;
#[https://drive.google.com/open?id=1FSXYgkppHZsgEW7_CpY0hvLwA2PqZ5wZ Here] is the link to a screen recording on how to access the functionality and export the CSV file.&lt;br /&gt;
&lt;br /&gt;
==Code and Snapshots==&lt;br /&gt;
We have written two methods inside _review_report.html.erb named exportTableToCSV and downloadCSV which are as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function downloadCSV(csv, filename) {&lt;br /&gt;
var csvFile;&lt;br /&gt;
var downloadLink;&lt;br /&gt;
&lt;br /&gt;
// CSV file&lt;br /&gt;
csvFile = new Blob([csv], {type: &amp;quot;text/csv&amp;quot;});&lt;br /&gt;
&lt;br /&gt;
// Download link&lt;br /&gt;
downloadLink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// File name&lt;br /&gt;
downloadLink.download = filename;&lt;br /&gt;
&lt;br /&gt;
// Create a link to the file&lt;br /&gt;
downloadLink.href = window.URL.createObjectURL(csvFile);&lt;br /&gt;
&lt;br /&gt;
// Hide download link&lt;br /&gt;
downloadLink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Add the link to DOM&lt;br /&gt;
document.body.appendChild(downloadLink);&lt;br /&gt;
&lt;br /&gt;
// Click download link&lt;br /&gt;
downloadLink.click();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	function exportTableToCSV(filename) {&lt;br /&gt;
		var csv = [];&lt;br /&gt;
		var rows = document.querySelector(&amp;quot;table#myTable&amp;quot;).rows;&lt;br /&gt;
		var row = [];&lt;br /&gt;
		row = setHeaderForCSV();&lt;br /&gt;
		csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		for (var i = 1; i &amp;lt; rows.length; i++) {&lt;br /&gt;
			var row = [];&lt;br /&gt;
			&lt;br /&gt;
			reviewer_name = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;td span.rname&amp;quot;).innerHTML + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			reviewer_unityid = rows[i].querySelector(&amp;quot;td a.runityID&amp;quot;).innerHTML;&lt;br /&gt;
			reviewer_emailid = reviewer_unityid + &amp;quot;@ncsu.edu&amp;quot;;&lt;br /&gt;
			reviewer_grade = rows[i].querySelector(&amp;quot;input#grade_for_reviewer&amp;quot;).value;&lt;br /&gt;
			reviewer_comment = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;textarea#comment_for_reviewer&amp;quot;).innerHTML.replace(/&amp;quot;/g,&amp;quot;\'&amp;quot;) + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			&lt;br /&gt;
			row.push(reviewer_name);&lt;br /&gt;
			row.push(reviewer_unityid);&lt;br /&gt;
			row.push(reviewer_emailid);&lt;br /&gt;
			row.push(reviewer_grade);&lt;br /&gt;
			row.push(reviewer_comment);&lt;br /&gt;
			&lt;br /&gt;
      csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
              &lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
    // Call Download CSV file function here&lt;br /&gt;
    downloadCSV(csv.join(&amp;quot;\n&amp;quot;), filename);&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output file has &amp;quot;name&amp;quot;, &amp;quot;unity_id&amp;quot;, &amp;quot;email_id&amp;quot;, &amp;quot;grade&amp;quot; and &amp;quot;comment&amp;quot; fields from the Review Scores Report table.&lt;br /&gt;
&lt;br /&gt;
[[File:Csv_view.png]]&lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
The code has been designed such that all the reviews completed by reviewers for a particular assignment can be seen, graded collected and stored easily by the click of a button. Thus, a good test case would be to check whether the required headers and data are getting stored and to check whether junk data gets stored in the csv if there are no reviews by reviewers.&lt;br /&gt;
&lt;br /&gt;
===Design===&lt;br /&gt;
The aim of our project was to implement exporting of review scores from Expertiza software. To accomplish this, we shall advance by using the delegation pattern to add exporting capabilities to the &amp;quot; &amp;lt;TODO:&amp;gt; export file controller &amp;quot; for exporting review scores.&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Mentor: Harsh Agrawal &amp;lt;br&amp;gt;&lt;br /&gt;
Team: &amp;lt;br&amp;gt;&lt;br /&gt;
* Yash Thakkar (yrthakka)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
TODO: Add all references by number.&lt;br /&gt;
#[http://expertiza.ncsu.edu/ Expertiza website]&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza GitHub source code]&lt;br /&gt;
#[https://webassign.net/ WebAssign website]&lt;br /&gt;
#[http://wikis.lib.ncsu.edu/index.php/Expertiza Wiki Expertiza project documentation]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=126102</id>
		<title>CSC/ECE 517 Fall 2019 - E1964. Export review scores for projects</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=126102"/>
		<updated>2019-10-28T23:27:29Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: /* Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1964. Export review scores for projects==&lt;br /&gt;
This page provides a description of the [http://expertiza.ncsu.edu/ Expertiza website(1)] project undertaken for OSS component in Object Oriented Design and Development.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[https://github.com/expertiza/expertiza Expertiza GitHub source code(2)] is an Open Source project based on Ruby on Rails framework. It is a software to create renewable learning projects through peer reviews and continuous assessments. It enables group projects and project submissions via URLs and wiki pages as well. It is supported by the National Science Foundation.&lt;br /&gt;
&lt;br /&gt;
===Problem Statement / Motivation===&lt;br /&gt;
This project aims to easily handle review score exporting for instructor and TAs, when they try to export scores from Expertiza to [https://webassign.net/ WebAssign website(3)]. Currently, no such option exists to export scores so that it can be later uploaded to WebAssign efficiently. &amp;lt;br&amp;gt;&lt;br /&gt;
TODO:&lt;br /&gt;
&lt;br /&gt;
===Tasks Identified===&lt;br /&gt;
All tasks pertaining to the completion of the project have been listed out here as follows:&lt;br /&gt;
* A new button is to be added to export scores. All functionality to be handled will be taken care of using VanillaJS. &lt;br /&gt;
* TODO&lt;br /&gt;
* Files modified:   &lt;br /&gt;
  _review_report.html.erb&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
Diagrammatic representation of the workflow of the project is shown as follows:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Review Report Flow Chart Diagram.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review page.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;button onclick=&amp;quot;exportTableToCSV('review_scores.csv')&amp;quot;&amp;gt;Export Review Scores To CSV File&amp;lt;/button&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
  &amp;lt;br /&amp;gt;&lt;br /&gt;
   .&lt;br /&gt;
   . &lt;br /&gt;
   .&lt;br /&gt;
   &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;%= link_to user.name(session[:ip]), impersonate_impersonate_path(:user =&amp;gt; {:name =&amp;gt; user.name(session[:ip])}), :method =&amp;gt; :post, :class =&amp;gt; &amp;quot;runityID&amp;quot; %&amp;gt;&lt;br /&gt;
      (&amp;lt;span class=&amp;quot;rname&amp;quot;&amp;gt;&amp;lt;%= user.fullname(session[:ip]) %&amp;gt;&amp;lt;/span&amp;gt;)&lt;br /&gt;
   &amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Screencast==&lt;br /&gt;
#[https://drive.google.com/open?id=1FSXYgkppHZsgEW7_CpY0hvLwA2PqZ5wZ Here] is the link to a screen recording on how to access the functionality and export the CSV file.&lt;br /&gt;
&lt;br /&gt;
==Code and Snapshots==&lt;br /&gt;
We have written two methods inside _review_report.html.erb named exportTableToCSV and downloadCSV which are as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function downloadCSV(csv, filename) {&lt;br /&gt;
var csvFile;&lt;br /&gt;
var downloadLink;&lt;br /&gt;
&lt;br /&gt;
// CSV file&lt;br /&gt;
csvFile = new Blob([csv], {type: &amp;quot;text/csv&amp;quot;});&lt;br /&gt;
&lt;br /&gt;
// Download link&lt;br /&gt;
downloadLink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// File name&lt;br /&gt;
downloadLink.download = filename;&lt;br /&gt;
&lt;br /&gt;
// Create a link to the file&lt;br /&gt;
downloadLink.href = window.URL.createObjectURL(csvFile);&lt;br /&gt;
&lt;br /&gt;
// Hide download link&lt;br /&gt;
downloadLink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Add the link to DOM&lt;br /&gt;
document.body.appendChild(downloadLink);&lt;br /&gt;
&lt;br /&gt;
// Click download link&lt;br /&gt;
downloadLink.click();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	function exportTableToCSV(filename) {&lt;br /&gt;
		var csv = [];&lt;br /&gt;
		var rows = document.querySelector(&amp;quot;table#myTable&amp;quot;).rows;&lt;br /&gt;
		var row = [];&lt;br /&gt;
		row = setHeaderForCSV();&lt;br /&gt;
		csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		for (var i = 1; i &amp;lt; rows.length; i++) {&lt;br /&gt;
			var row = [];&lt;br /&gt;
			&lt;br /&gt;
			reviewer_name = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;td span.rname&amp;quot;).innerHTML + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			reviewer_unityid = rows[i].querySelector(&amp;quot;td a.runityID&amp;quot;).innerHTML;&lt;br /&gt;
			reviewer_emailid = reviewer_unityid + &amp;quot;@ncsu.edu&amp;quot;;&lt;br /&gt;
			reviewer_grade = rows[i].querySelector(&amp;quot;input#grade_for_reviewer&amp;quot;).value;&lt;br /&gt;
			reviewer_comment = &amp;quot;\&amp;quot;&amp;quot; + rows[i].querySelector(&amp;quot;textarea#comment_for_reviewer&amp;quot;).innerHTML.replace(/&amp;quot;/g,&amp;quot;\'&amp;quot;) + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
			&lt;br /&gt;
			row.push(reviewer_name);&lt;br /&gt;
			row.push(reviewer_unityid);&lt;br /&gt;
			row.push(reviewer_emailid);&lt;br /&gt;
			row.push(reviewer_grade);&lt;br /&gt;
			row.push(reviewer_comment);&lt;br /&gt;
			&lt;br /&gt;
      csv.push(row.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
              &lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
    // Call Download CSV file function here&lt;br /&gt;
    downloadCSV(csv.join(&amp;quot;\n&amp;quot;), filename);&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output file has &amp;quot;name&amp;quot;, &amp;quot;unity_id&amp;quot;, &amp;quot;email_id&amp;quot;, &amp;quot;grade&amp;quot; and &amp;quot;comment&amp;quot; fields from the Review Scores Report table.&lt;br /&gt;
&lt;br /&gt;
[[File:Csv_view.png]]&lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
TODO: Rspec test cases were written with the help of Cucumber and Capybara. &lt;br /&gt;
&lt;br /&gt;
===Design===&lt;br /&gt;
The aim of our project was to implement exporting of review scores from Expertiza software. To accomplish this, we shall advance by using the delegation pattern to add exporting capabilities to the &amp;quot; &amp;lt;TODO:&amp;gt; export file controller &amp;quot; for exporting review scores.&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Mentor: Harsh Agrawal &amp;lt;br&amp;gt;&lt;br /&gt;
Team: &amp;lt;br&amp;gt;&lt;br /&gt;
* Yash Thakkar (yrthakka)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
TODO: Add all references by number.&lt;br /&gt;
#[http://expertiza.ncsu.edu/ Expertiza website]&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza GitHub source code]&lt;br /&gt;
#[https://webassign.net/ WebAssign website]&lt;br /&gt;
#[http://wikis.lib.ncsu.edu/index.php/Expertiza Wiki Expertiza project documentation]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Review_Report_Flow_Chart_Diagram.png&amp;diff=126099</id>
		<title>File:Review Report Flow Chart Diagram.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Review_Report_Flow_Chart_Diagram.png&amp;diff=126099"/>
		<updated>2019-10-28T23:25:06Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: Image showing the flowchart of OSS Project implementation.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Image showing the flowchart of OSS Project implementation.&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=125163</id>
		<title>CSC/ECE 517 Fall 2019 - E1964. Export review scores for projects</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1964._Export_review_scores_for_projects&amp;diff=125163"/>
		<updated>2019-10-21T18:34:35Z</updated>

		<summary type="html">&lt;p&gt;Mgparekh: Initial commit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1964. Export review scores for projects==&lt;br /&gt;
This page provides a description of the [http://expertiza.ncsu.edu/ Expertiza website(1)] project undertaken for OSS component in Object Oriented Design and Development.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
===About Expertiza===&lt;br /&gt;
[https://github.com/expertiza/expertiza Expertiza GitHub source code(2)] is an Open Source project based on Ruby on Rails framework. It is a software to create renewable learning projects through peer reviews and continuous assessments. It enables group projects and project submissions via URLs and wiki pages as well. It is supported by the National Science Foundation.&lt;br /&gt;
&lt;br /&gt;
===Problem Statement / Motivation===&lt;br /&gt;
This project aims to easily handle review score exporting for instructor and TAs, when they try to export scores from Expertiza to [https://webassign.net/ WebAssign website(3)]. Currently, no such option exists to export scores so that it can be later uploaded to WebAssign efficiently. &amp;lt;br&amp;gt;&lt;br /&gt;
TODO:&lt;br /&gt;
&lt;br /&gt;
===Tasks Identified===&lt;br /&gt;
All tasks pertaining to the completion of the project have been listed out here as follows:&lt;br /&gt;
* A new button is to be added to export scores. All functionality to be handled will be taken care of using VanillaJS. &lt;br /&gt;
* TODO&lt;br /&gt;
* Files modified:  &lt;br /&gt;
  review_mapping_helper.rb &lt;br /&gt;
  _review_report.html.erb&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
TODO:&lt;br /&gt;
* Diagrammatic representation&lt;br /&gt;
* Code snippets&lt;br /&gt;
* Screenshot of website changes&lt;br /&gt;
* Optional: screen-recording of working case&lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
TODO: Rspec test cases were written with the help of Cucumber and Capybara. &lt;br /&gt;
&lt;br /&gt;
===Design===&lt;br /&gt;
The aim of our project was to implement exporting of review scores from Expertiza software. To accomplish this, we shall advance by using the delegation pattern to add exporting capabilities to the &amp;quot; &amp;lt;TODO:&amp;gt; export file controller &amp;quot; for exporting review scores.&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Mentor: Harsh Agrawal &amp;lt;br&amp;gt;&lt;br /&gt;
Team: &amp;lt;br&amp;gt;&lt;br /&gt;
* Yash Thakkar (yrthakka)&lt;br /&gt;
* Pururaj Dave (pdave2)&lt;br /&gt;
* Maharshi Parekh (mgparekh)&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
TODO: Add all references by number.&lt;br /&gt;
#[http://expertiza.ncsu.edu/ Expertiza website]&lt;br /&gt;
#[https://github.com/expertiza/expertiza Expertiza GitHub source code]&lt;br /&gt;
#[https://webassign.net/ WebAssign website]&lt;br /&gt;
#[http://wikis.lib.ncsu.edu/index.php/Expertiza Wiki Expertiza project documentation]&lt;br /&gt;
#[https://relishapp.com/rspec Rspec Documentation]&lt;/div&gt;</summary>
		<author><name>Mgparekh</name></author>
	</entry>
</feed>