<?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=Kbisht</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=Kbisht"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Kbisht"/>
	<updated>2026-05-06T04:26:29Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1792_OSS_Visualizations_for_instructors&amp;diff=113818</id>
		<title>CSC/ECE 517 Fall 2017/E1792 OSS Visualizations for instructors</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1792_OSS_Visualizations_for_instructors&amp;diff=113818"/>
		<updated>2017-11-28T05:36:55Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: /* Issue 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made under E1792 OSS Visualizations for instructors.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create new assignments and customize new or existing assignments. It also allows the instructor to create a list of topics the students can sign up for. Students can form teams in Expertiza to work on various projects and assignments. Students can also peer review other students' submissions. Instructors can also use Expertiza for interactive views of class performances and reviews.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This project aims to improve the visualizations of certain pages related to reviews and feedback in Expertiza in the instructor's view. This would aid the instructors to judge outcomes of reviews and class performance in assignments via graphs and tables, which in turn would ease the process of grading the reviews.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
:* &amp;lt;b&amp;gt;Issue 1&amp;lt;/b&amp;gt;: The scale is blue to green, which does not make sense. And colors will change randomly each time loading the page. It will be better to scale from red to green.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Issue 2&amp;lt;/b&amp;gt;: Two adjacent bar represents the response in round 1 to round k. It makes sense only if the rubrics in all review rounds are all the same. If the instructor implements the vary-rubric-by-round mechanism, this visualization will not make sense.&lt;br /&gt;
:*&amp;lt;b&amp;gt;Issue 3&amp;lt;/b&amp;gt;:The table is presorted by teams in the page View Scores, but you can now also sort alphabetically. The cell view looks way too long, and should be divided into partials.&lt;br /&gt;
:*&amp;lt;b&amp;gt;Issue 4&amp;lt;/b&amp;gt;: An interactive visualization or table that shows how a class performed on selected rubric criteria would be immensely helpful. It would show the instructors what they need to focus more attention on.&lt;br /&gt;
&lt;br /&gt;
== UML Diagram ==&lt;br /&gt;
&amp;lt;br&amp;gt;[[File:uml_g_b_1.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 	&lt;br /&gt;
== Solutions Implemented ==&lt;br /&gt;
===Issue 1=== &lt;br /&gt;
'''Description:'''The scale is blue to green, which does not make sense. And colors will change randomly each time loading the page. It will be better to scale from red to green.&lt;br /&gt;
&lt;br /&gt;
'''Approach:''' Here the color coding is blue to green and also it changes randomly which one color in one graph may represent some other score in the next graph. To fix this issue, we have redefined the highchart_colors data structure to contain the colors defined in the grades.scss file (already defined earlier) as suggested by the Professor. This way no matter what scale is being used it will always have appropriate color coding. Also, the color legend is now appropriate to explain correctly the  color-code used.&lt;br /&gt;
&lt;br /&gt;
 highchart_colors = []&lt;br /&gt;
    highchart_colors.push(&amp;quot;#2DE636&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#BCED91&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FFEC8B&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FD992D&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#ff8080&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FD422D&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;i&amp;gt;Related screenshot&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;[[File:graph_g_b_1.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Issue 2=== &lt;br /&gt;
'''Description:''' Two adjacent bar represents the response in round 1 to round k. It makes sense only if the rubrics in all review rounds are all the same. If the instructor implements the vary-rubric-by-round mechanism, this visualization will not make sense.&lt;br /&gt;
&lt;br /&gt;
'''Approach:''' Here the problem was that the data was represented rubric-wise, that is, if there are 5 rubrics, there would be 5 graphs. A graph for a particular rubric would show the performance of a team in that rubric in all rounds of submissions. This is fine when the rubrics are same for all the rounds. But, since rubric 1 of round 1 may not be same as rubric 1 of round 2, therefore this representation seems illogical. In our approach, the graphs are rendered submission-wise, the performance of a team in all rubrics in a particular round are shown in one graph pertaining to that round of submission.&lt;br /&gt;
&lt;br /&gt;
We create an array called chart_data to hold the information for creating the highchart stack charts.&lt;br /&gt;
Data is now stored in the highchart in form of hash-maps which contain the score as key and score pertaining to different rounds of reviews as value. Earlier, data was stored in the hash map in a way that in the value scores pertaining to different rubrics were getting stored. Our process facilitates the graph/chart formation submission/round-wise instead of rubric-wise (earlier approach). This guarantees the data is represented logically. In the earlier approach, data was represented rubric-wise. A graph for a particular rubric would show the performance of a team in that rubric in all rounds. But, since rubric 1 of round 1 may not be same as rubric 1 of round 2, therefore this representation seems illogical. Now, the graphs are submission-wise, the performance of a team in all rubrics in a particular round are shown in one graph pertaining to that round of submission. This addresses the problem of varying rubric by round. We can now have different number of rubrics in different rounds without affecting the visualizations for instructors.&lt;br /&gt;
&lt;br /&gt;
 def get_highchart_data(team_data, assignment, min, max, number_of_review_questions)&lt;br /&gt;
    chart_data = {}  # @chart_data is supposed to hold the general information for creating the highchart stack charts&lt;br /&gt;
    for i in 1..number_of_review_questions&lt;br /&gt;
      chart_data[i] = Hash[(min..max).map {|score| [score, Array.new(assignment.rounds_of_reviews, 0)] }]&lt;br /&gt;
    end&lt;br /&gt;
    team_data.each do |team|&lt;br /&gt;
      team.each do |vm|&lt;br /&gt;
        next if vm.round.nil?&lt;br /&gt;
        j = 1&lt;br /&gt;
        vm.list_of_rows.each do |row|&lt;br /&gt;
          row.score_row.each do |score|&lt;br /&gt;
            unless score.score_value.nil?&lt;br /&gt;
              #chart_data[vm.round][score.score_value][j] += 1&lt;br /&gt;
              chart_data[j][score.score_value][vm.round-1] += 1&lt;br /&gt;
            end&lt;br /&gt;
          end&lt;br /&gt;
          j += 1&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    chart_data&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
vm is an object of the  model 'VmQuestionResponse' (was already defined earlier).&lt;br /&gt;
It contains the following information:&lt;br /&gt;
&lt;br /&gt;
  @list_of_rows = []&lt;br /&gt;
    @list_of_reviewers = []&lt;br /&gt;
    @list_of_reviews = []&lt;br /&gt;
    @list_of_team_participants = []&lt;br /&gt;
    @max_score = questionnaire.max_question_score&lt;br /&gt;
    @questionnaire_type = questionnaire.type&lt;br /&gt;
    @questionnaire_display_type = questionnaire.display_type&lt;br /&gt;
    @rounds = rounds&lt;br /&gt;
    @round = round&lt;br /&gt;
    @name  = questionnaire.name&lt;br /&gt;
&lt;br /&gt;
Here we build the 'series' array which is used by the highchart object to render the graph.&lt;br /&gt;
This array holds the actual data for the chart along with the legend name.&lt;br /&gt;
By introducing the counter count_rounds corresponding to the counter for rounds, we are able to compress the legends of highchart to a standard form, showing only what is required.&lt;br /&gt;
Also, we have redefined the highchart_colors data structure to contain the colors defined in the grades.scss file (already defined earlier) as suggested by the Professor.&lt;br /&gt;
&lt;br /&gt;
  def generate_highchart(chart_data, min, max, number_of_review_questions, assignment, team_data)&lt;br /&gt;
    # Here we actually build the 'series' array which will be used directly in the highchart Object in the _team_charts view file&lt;br /&gt;
    # This array holds the actual data of our chart with legend name&lt;br /&gt;
    highchart_series_data = []&lt;br /&gt;
   &lt;br /&gt;
    count_rounds=0&lt;br /&gt;
    chart_data.each do |round, scores|&lt;br /&gt;
      scores.to_a.reverse.to_h.each do |score, rubric_distribution|&lt;br /&gt;
        if count_rounds == 0&lt;br /&gt;
          highchart_series_data.push(name: &amp;quot;Score #{score}&amp;quot;, data: rubric_distribution, stack: &amp;quot;S#{round}&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
          highchart_series_data.push(linkedTo: &amp;quot;previous&amp;quot;,name: &amp;quot;Rubric #{round} - Score #{score}&amp;quot;, data: rubric_distribution, stack: &amp;quot;S#{round}&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
      count_rounds = count_rounds + 1&lt;br /&gt;
    end&lt;br /&gt;
    # Here we dynamically creates the categories which will be used later in the highchart Object&lt;br /&gt;
    highchart_categories = []&lt;br /&gt;
    for i in 1..@assignment.rounds_of_reviews&lt;br /&gt;
      highchart_categories.push(&amp;quot;Submission #{i}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
    # Here we dynamically create an array of the colors which the highchart uses to show the stack charts.&lt;br /&gt;
    # Currently we create 6 different colors based on the assumption that we always have scores from 0 to 5.&lt;br /&gt;
    highchart_colors = []&lt;br /&gt;
    highchart_colors.push(&amp;quot;#2DE636&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#BCED91&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FFEC8B&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FD992D&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#ff8080&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FD422D&amp;quot;)&lt;br /&gt;
    [highchart_series_data, highchart_categories, highchart_colors]&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Related screenshot&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;[[File:graph_g_b_2.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Issue 3=== &lt;br /&gt;
'''Description''': The table is presorted by teams, but you can now also sort alphabetically. The cell view looks way too long, and should be divided into partials.&lt;br /&gt;
&lt;br /&gt;
Approach: Here we can sort the select query with appropriate column alphabetically, or we can sort the table automatically according to user criteria using dynamic table format. And the long view issue can be solved by using paging.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Related screenshot&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;[[File:graph_g_b_4.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Issue 4===&lt;br /&gt;
'''Description:''' An interactive visualization or table that shows how a class performed on selected rubric criteria would be immensely helpful. It would show me what I need to focus more attention on. &lt;br /&gt;
&lt;br /&gt;
'''Approach:''' The issue is about getting the performance of the entire class graded using the 5 rubrics criteria.Scores will be color coded for each of the rubrics in each of the submissions. When hovered over the graph , for each score, the instructor should see the number of students , the percentage of students that has scored that particular point in that rubric in that submission.&lt;br /&gt;
&lt;br /&gt;
The code snippet used to fix Issue 4 is same as that used to fix Issue 2. The graphs that we are rendering by making use of highcharts addresses this Issue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Related screenshot&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;[[File:graph_g_b_3.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
===Issue 1:Check if color coding from red to green for a range of score===&lt;br /&gt;
*1) Login as instructor&lt;br /&gt;
*2) Create a dummy assignment and come dummy reviews for the same.Log out.&lt;br /&gt;
*3) Login as a student. Attempt the assignment. Log out.&lt;br /&gt;
*4) Login as another student and repeat step 3.&lt;br /&gt;
*5) Login as either student and attempt the review. Logout.&lt;br /&gt;
*6) Login as instructor. Go to Review grades page and check the table. If color code ranges from red ( for least score) to green ( for highest score), then test passed.&lt;br /&gt;
&lt;br /&gt;
===Issue 2:Check if different graph visible for different review submission===&lt;br /&gt;
*1) Login as instructor.&lt;br /&gt;
*2) Create an assignment. Select 2 reviews. Also select different rubrics for both reviews.&lt;br /&gt;
*3) Login as a student (&amp;quot;A&amp;quot;) and submit the assignment. Repeat this for another student(&amp;quot;B&amp;quot;).&lt;br /&gt;
*4) Login as student A and perform review. Do this for student B too.&lt;br /&gt;
*5) Now resubmit assignment as student A and B again.&lt;br /&gt;
*6) Resubmit reviews as student A and B again. This time the rubrics will be different from the previous round.&lt;br /&gt;
*7) Now login as instructor and see the visualization of the reviews. You can see the different graphs for different submissions.&lt;br /&gt;
&lt;br /&gt;
===Issue 3:Check if the table is sorted with appropriate column alphabetically===&lt;br /&gt;
*1) Login as instructor&lt;br /&gt;
*2) Create a dummy assignment with some teams. Logout.&lt;br /&gt;
*3) Login as a student and attempt the assignment and logout.&lt;br /&gt;
*4) Repeat step 3 for all dummy teams.&lt;br /&gt;
*5) Login as instructor.&lt;br /&gt;
*6) Go to View Scores page. Check the grade table. &lt;br /&gt;
*7) Click on a column header and check if data in it is getting sorted alphabetically. If yes, then the test passed.&lt;br /&gt;
&lt;br /&gt;
===Issue 4:Check if graph in Issue 3 shows how a class performed on selected rubric criteria===&lt;br /&gt;
*1) Login as the instructor&lt;br /&gt;
*2) Click on the button to compute graphs&lt;br /&gt;
*3) Compare the bar graphs with separate scores of students in each assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
*[https://github.com/expertiza/expertiza Expertiza repo]&lt;br /&gt;
*[http://expertiza.ncsu.edu/ The live Expertiza website]&lt;br /&gt;
*[https://api.highcharts.com/highcharts Highcharts API]&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1792_OSS_Visualizations_for_instructors&amp;diff=113817</id>
		<title>CSC/ECE 517 Fall 2017/E1792 OSS Visualizations for instructors</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1792_OSS_Visualizations_for_instructors&amp;diff=113817"/>
		<updated>2017-11-28T05:33:36Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: /* Issue 4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made under E1792 OSS Visualizations for instructors.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create new assignments and customize new or existing assignments. It also allows the instructor to create a list of topics the students can sign up for. Students can form teams in Expertiza to work on various projects and assignments. Students can also peer review other students' submissions. Instructors can also use Expertiza for interactive views of class performances and reviews.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This project aims to improve the visualizations of certain pages related to reviews and feedback in Expertiza in the instructor's view. This would aid the instructors to judge outcomes of reviews and class performance in assignments via graphs and tables, which in turn would ease the process of grading the reviews.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
:* &amp;lt;b&amp;gt;Issue 1&amp;lt;/b&amp;gt;: The scale is blue to green, which does not make sense. And colors will change randomly each time loading the page. It will be better to scale from red to green.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Issue 2&amp;lt;/b&amp;gt;: Two adjacent bar represents the response in round 1 to round k. It makes sense only if the rubrics in all review rounds are all the same. If the instructor implements the vary-rubric-by-round mechanism, this visualization will not make sense.&lt;br /&gt;
:*&amp;lt;b&amp;gt;Issue 3&amp;lt;/b&amp;gt;:The table is presorted by teams in the page View Scores, but you can now also sort alphabetically. The cell view looks way too long, and should be divided into partials.&lt;br /&gt;
:*&amp;lt;b&amp;gt;Issue 4&amp;lt;/b&amp;gt;: An interactive visualization or table that shows how a class performed on selected rubric criteria would be immensely helpful. It would show the instructors what they need to focus more attention on.&lt;br /&gt;
&lt;br /&gt;
== UML Diagram ==&lt;br /&gt;
&amp;lt;br&amp;gt;[[File:uml_g_b_1.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 	&lt;br /&gt;
== Solutions Implemented ==&lt;br /&gt;
===Issue 1=== &lt;br /&gt;
'''Description:'''The scale is blue to green, which does not make sense. And colors will change randomly each time loading the page. It will be better to scale from red to green.&lt;br /&gt;
&lt;br /&gt;
'''Approach:''' Here the color coding is blue to green and also it changes randomly which one color in one graph may represent some other score in the next graph. To fix this issue, we have redefined the highchart_colors data structure to contain the colors defined in the grades.scss file (already defined earlier) as suggested by the Professor. This way no matter what scale is being used it will always have appropriate color coding. Also, the color legend is now appropriate to explain correctly the  color-code used.&lt;br /&gt;
&lt;br /&gt;
 highchart_colors = []&lt;br /&gt;
    highchart_colors.push(&amp;quot;#2DE636&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#BCED91&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FFEC8B&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FD992D&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#ff8080&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FD422D&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;i&amp;gt;Related screenshot&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;[[File:graph_g_b_1.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Issue 2=== &lt;br /&gt;
'''Description:''' Two adjacent bar represents the response in round 1 to round k. It makes sense only if the rubrics in all review rounds are all the same. If the instructor implements the vary-rubric-by-round mechanism, this visualization will not make sense.&lt;br /&gt;
&lt;br /&gt;
'''Approach:''' Here the problem was that the data was represented rubric-wise, that is, if there are 5 rubrics, there would be 5 graphs. A graph for a particular rubric would show the performance of a team in that rubric in all rounds of submissions. This is fine when the rubrics are same for all the rounds. But, since rubric 1 of round 1 may not be same as rubric 1 of round 2, therefore this representation seems illogical. In our approach, the graphs are rendered submission-wise, the performance of a team in all rubrics in a particular round are shown in one graph pertaining to that round of submission.&lt;br /&gt;
&lt;br /&gt;
We create an array called chart_data to hold the information for creating the highchart stack charts.&lt;br /&gt;
&lt;br /&gt;
 def get_highchart_data(team_data, assignment, min, max, number_of_review_questions)&lt;br /&gt;
    chart_data = {}  # @chart_data is supposed to hold the general information for creating the highchart stack charts&lt;br /&gt;
    for i in 1..number_of_review_questions&lt;br /&gt;
      chart_data[i] = Hash[(min..max).map {|score| [score, Array.new(assignment.rounds_of_reviews, 0)] }]&lt;br /&gt;
    end&lt;br /&gt;
    team_data.each do |team|&lt;br /&gt;
      team.each do |vm|&lt;br /&gt;
        next if vm.round.nil?&lt;br /&gt;
        j = 1&lt;br /&gt;
        vm.list_of_rows.each do |row|&lt;br /&gt;
          row.score_row.each do |score|&lt;br /&gt;
            unless score.score_value.nil?&lt;br /&gt;
              #chart_data[vm.round][score.score_value][j] += 1&lt;br /&gt;
              chart_data[j][score.score_value][vm.round-1] += 1&lt;br /&gt;
            end&lt;br /&gt;
          end&lt;br /&gt;
          j += 1&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    chart_data&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
vm is an object of the  model 'VmQuestionResponse' (was already defined earlier).&lt;br /&gt;
It contains the following information:&lt;br /&gt;
&lt;br /&gt;
  @list_of_rows = []&lt;br /&gt;
    @list_of_reviewers = []&lt;br /&gt;
    @list_of_reviews = []&lt;br /&gt;
    @list_of_team_participants = []&lt;br /&gt;
    @max_score = questionnaire.max_question_score&lt;br /&gt;
    @questionnaire_type = questionnaire.type&lt;br /&gt;
    @questionnaire_display_type = questionnaire.display_type&lt;br /&gt;
    @rounds = rounds&lt;br /&gt;
    @round = round&lt;br /&gt;
    @name  = questionnaire.name&lt;br /&gt;
&lt;br /&gt;
Data is now stored in the highchart in form of hash-maps which contain the score as key and score pertaining to different rounds of reviews as value. Earlier, data was stored in the hash map in a way that in the value scores pertaining to different rubrics were getting stored. Our process facilitates the graph/chart formation submission/round-wise instead of rubric-wise (earlier approach). This guarantees the data is represented logically. In the earlier approach, data was represented rubric-wise. A graph for a particular rubric would show the performance of a team in that rubric in all rounds. But, since rubric 1 of round 1 may not be same as rubric 1 of round 2, therefore this representation seems illogical. Now, the graphs are submission-wise, the performance of a team in all rubrics in a particular round are shown in one graph pertaining to that round of submission. This addresses the problem of varying rubric by round. We can now have different number of rubrics in different rounds without affecting the visualizations for instructors.&lt;br /&gt;
&lt;br /&gt;
  def generate_highchart(chart_data, min, max, number_of_review_questions, assignment, team_data)&lt;br /&gt;
    # Here we actually build the 'series' array which will be used directly in the highchart Object in the _team_charts view file&lt;br /&gt;
    # This array holds the actual data of our chart with legend name&lt;br /&gt;
    highchart_series_data = []&lt;br /&gt;
   &lt;br /&gt;
    count_rounds=0&lt;br /&gt;
    chart_data.each do |round, scores|&lt;br /&gt;
      scores.to_a.reverse.to_h.each do |score, rubric_distribution|&lt;br /&gt;
        if count_rounds == 0&lt;br /&gt;
          highchart_series_data.push(name: &amp;quot;Score #{score}&amp;quot;, data: rubric_distribution, stack: &amp;quot;S#{round}&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
          highchart_series_data.push(linkedTo: &amp;quot;previous&amp;quot;,name: &amp;quot;Rubric #{round} - Score #{score}&amp;quot;, data: rubric_distribution, stack: &amp;quot;S#{round}&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
      count_rounds = count_rounds + 1&lt;br /&gt;
    end&lt;br /&gt;
    # Here we dynamically creates the categories which will be used later in the highchart Object&lt;br /&gt;
    highchart_categories = []&lt;br /&gt;
    for i in 1..@assignment.rounds_of_reviews&lt;br /&gt;
      highchart_categories.push(&amp;quot;Submission #{i}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
    # Here we dynamically create an array of the colors which the highchart uses to show the stack charts.&lt;br /&gt;
    # Currently we create 6 different colors based on the assumption that we always have scores from 0 to 5.&lt;br /&gt;
    highchart_colors = []&lt;br /&gt;
    highchart_colors.push(&amp;quot;#2DE636&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#BCED91&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FFEC8B&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FD992D&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#ff8080&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FD422D&amp;quot;)&lt;br /&gt;
    [highchart_series_data, highchart_categories, highchart_colors]&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Here we build the 'series' array which is used by the highchart object to render the graph.&lt;br /&gt;
This array holds the actual data for the chart along with the legend name.&lt;br /&gt;
By introducing the counter count_rounds corresponding to the counter for rounds, we are able to compress the legends of highchart to a standard form, showing only what is required.&lt;br /&gt;
Also, we have redefined the highchart_colors data structure to contain the colors defined in the grades.scss file (already defined earlier) as suggested by the Professor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Related screenshot&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;[[File:graph_g_b_2.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Issue 3=== &lt;br /&gt;
'''Description''': The table is presorted by teams, but you can now also sort alphabetically. The cell view looks way too long, and should be divided into partials.&lt;br /&gt;
&lt;br /&gt;
Approach: Here we can sort the select query with appropriate column alphabetically, or we can sort the table automatically according to user criteria using dynamic table format. And the long view issue can be solved by using paging.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Related screenshot&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;[[File:graph_g_b_4.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Issue 4===&lt;br /&gt;
'''Description:''' An interactive visualization or table that shows how a class performed on selected rubric criteria would be immensely helpful. It would show me what I need to focus more attention on. &lt;br /&gt;
&lt;br /&gt;
'''Approach:''' The issue is about getting the performance of the entire class graded using the 5 rubrics criteria.Scores will be color coded for each of the rubrics in each of the submissions. When hovered over the graph , for each score, the instructor should see the number of students , the percentage of students that has scored that particular point in that rubric in that submission.&lt;br /&gt;
&lt;br /&gt;
The code snippet used to fix Issue 4 is same as that used to fix Issue 2. The graphs that we are rendering by making use of highcharts addresses this Issue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Related screenshot&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;[[File:graph_g_b_3.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
===Issue 1:Check if color coding from red to green for a range of score===&lt;br /&gt;
*1) Login as instructor&lt;br /&gt;
*2) Create a dummy assignment and come dummy reviews for the same.Log out.&lt;br /&gt;
*3) Login as a student. Attempt the assignment. Log out.&lt;br /&gt;
*4) Login as another student and repeat step 3.&lt;br /&gt;
*5) Login as either student and attempt the review. Logout.&lt;br /&gt;
*6) Login as instructor. Go to Review grades page and check the table. If color code ranges from red ( for least score) to green ( for highest score), then test passed.&lt;br /&gt;
&lt;br /&gt;
===Issue 2:Check if different graph visible for different review submission===&lt;br /&gt;
*1) Login as instructor.&lt;br /&gt;
*2) Create an assignment. Select 2 reviews. Also select different rubrics for both reviews.&lt;br /&gt;
*3) Login as a student (&amp;quot;A&amp;quot;) and submit the assignment. Repeat this for another student(&amp;quot;B&amp;quot;).&lt;br /&gt;
*4) Login as student A and perform review. Do this for student B too.&lt;br /&gt;
*5) Now resubmit assignment as student A and B again.&lt;br /&gt;
*6) Resubmit reviews as student A and B again. This time the rubrics will be different from the previous round.&lt;br /&gt;
*7) Now login as instructor and see the visualization of the reviews. You can see the different graphs for different submissions.&lt;br /&gt;
&lt;br /&gt;
===Issue 3:Check if the table is sorted with appropriate column alphabetically===&lt;br /&gt;
*1) Login as instructor&lt;br /&gt;
*2) Create a dummy assignment with some teams. Logout.&lt;br /&gt;
*3) Login as a student and attempt the assignment and logout.&lt;br /&gt;
*4) Repeat step 3 for all dummy teams.&lt;br /&gt;
*5) Login as instructor.&lt;br /&gt;
*6) Go to View Scores page. Check the grade table. &lt;br /&gt;
*7) Click on a column header and check if data in it is getting sorted alphabetically. If yes, then the test passed.&lt;br /&gt;
&lt;br /&gt;
===Issue 4:Check if graph in Issue 3 shows how a class performed on selected rubric criteria===&lt;br /&gt;
*1) Login as the instructor&lt;br /&gt;
*2) Click on the button to compute graphs&lt;br /&gt;
*3) Compare the bar graphs with separate scores of students in each assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
*[https://github.com/expertiza/expertiza Expertiza repo]&lt;br /&gt;
*[http://expertiza.ncsu.edu/ The live Expertiza website]&lt;br /&gt;
*[https://api.highcharts.com/highcharts Highcharts API]&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1792_OSS_Visualizations_for_instructors&amp;diff=113816</id>
		<title>CSC/ECE 517 Fall 2017/E1792 OSS Visualizations for instructors</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1792_OSS_Visualizations_for_instructors&amp;diff=113816"/>
		<updated>2017-11-28T05:30:54Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: /* Issue 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made under E1792 OSS Visualizations for instructors.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create new assignments and customize new or existing assignments. It also allows the instructor to create a list of topics the students can sign up for. Students can form teams in Expertiza to work on various projects and assignments. Students can also peer review other students' submissions. Instructors can also use Expertiza for interactive views of class performances and reviews.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This project aims to improve the visualizations of certain pages related to reviews and feedback in Expertiza in the instructor's view. This would aid the instructors to judge outcomes of reviews and class performance in assignments via graphs and tables, which in turn would ease the process of grading the reviews.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
:* &amp;lt;b&amp;gt;Issue 1&amp;lt;/b&amp;gt;: The scale is blue to green, which does not make sense. And colors will change randomly each time loading the page. It will be better to scale from red to green.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Issue 2&amp;lt;/b&amp;gt;: Two adjacent bar represents the response in round 1 to round k. It makes sense only if the rubrics in all review rounds are all the same. If the instructor implements the vary-rubric-by-round mechanism, this visualization will not make sense.&lt;br /&gt;
:*&amp;lt;b&amp;gt;Issue 3&amp;lt;/b&amp;gt;:The table is presorted by teams in the page View Scores, but you can now also sort alphabetically. The cell view looks way too long, and should be divided into partials.&lt;br /&gt;
:*&amp;lt;b&amp;gt;Issue 4&amp;lt;/b&amp;gt;: An interactive visualization or table that shows how a class performed on selected rubric criteria would be immensely helpful. It would show the instructors what they need to focus more attention on.&lt;br /&gt;
&lt;br /&gt;
== UML Diagram ==&lt;br /&gt;
&amp;lt;br&amp;gt;[[File:uml_g_b_1.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 	&lt;br /&gt;
== Solutions Implemented ==&lt;br /&gt;
===Issue 1=== &lt;br /&gt;
'''Description:'''The scale is blue to green, which does not make sense. And colors will change randomly each time loading the page. It will be better to scale from red to green.&lt;br /&gt;
&lt;br /&gt;
'''Approach:''' Here the color coding is blue to green and also it changes randomly which one color in one graph may represent some other score in the next graph. To fix this issue, we have redefined the highchart_colors data structure to contain the colors defined in the grades.scss file (already defined earlier) as suggested by the Professor. This way no matter what scale is being used it will always have appropriate color coding. Also, the color legend is now appropriate to explain correctly the  color-code used.&lt;br /&gt;
&lt;br /&gt;
 highchart_colors = []&lt;br /&gt;
    highchart_colors.push(&amp;quot;#2DE636&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#BCED91&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FFEC8B&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FD992D&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#ff8080&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FD422D&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;i&amp;gt;Related screenshot&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;[[File:graph_g_b_1.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Issue 2=== &lt;br /&gt;
'''Description:''' Two adjacent bar represents the response in round 1 to round k. It makes sense only if the rubrics in all review rounds are all the same. If the instructor implements the vary-rubric-by-round mechanism, this visualization will not make sense.&lt;br /&gt;
&lt;br /&gt;
'''Approach:''' Here the problem was that the data was represented rubric-wise, that is, if there are 5 rubrics, there would be 5 graphs. A graph for a particular rubric would show the performance of a team in that rubric in all rounds of submissions. This is fine when the rubrics are same for all the rounds. But, since rubric 1 of round 1 may not be same as rubric 1 of round 2, therefore this representation seems illogical. In our approach, the graphs are rendered submission-wise, the performance of a team in all rubrics in a particular round are shown in one graph pertaining to that round of submission.&lt;br /&gt;
&lt;br /&gt;
We create an array called chart_data to hold the information for creating the highchart stack charts.&lt;br /&gt;
&lt;br /&gt;
 def get_highchart_data(team_data, assignment, min, max, number_of_review_questions)&lt;br /&gt;
    chart_data = {}  # @chart_data is supposed to hold the general information for creating the highchart stack charts&lt;br /&gt;
    for i in 1..number_of_review_questions&lt;br /&gt;
      chart_data[i] = Hash[(min..max).map {|score| [score, Array.new(assignment.rounds_of_reviews, 0)] }]&lt;br /&gt;
    end&lt;br /&gt;
    team_data.each do |team|&lt;br /&gt;
      team.each do |vm|&lt;br /&gt;
        next if vm.round.nil?&lt;br /&gt;
        j = 1&lt;br /&gt;
        vm.list_of_rows.each do |row|&lt;br /&gt;
          row.score_row.each do |score|&lt;br /&gt;
            unless score.score_value.nil?&lt;br /&gt;
              #chart_data[vm.round][score.score_value][j] += 1&lt;br /&gt;
              chart_data[j][score.score_value][vm.round-1] += 1&lt;br /&gt;
            end&lt;br /&gt;
          end&lt;br /&gt;
          j += 1&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    chart_data&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
vm is an object of the  model 'VmQuestionResponse' (was already defined earlier).&lt;br /&gt;
It contains the following information:&lt;br /&gt;
&lt;br /&gt;
  @list_of_rows = []&lt;br /&gt;
    @list_of_reviewers = []&lt;br /&gt;
    @list_of_reviews = []&lt;br /&gt;
    @list_of_team_participants = []&lt;br /&gt;
    @max_score = questionnaire.max_question_score&lt;br /&gt;
    @questionnaire_type = questionnaire.type&lt;br /&gt;
    @questionnaire_display_type = questionnaire.display_type&lt;br /&gt;
    @rounds = rounds&lt;br /&gt;
    @round = round&lt;br /&gt;
    @name  = questionnaire.name&lt;br /&gt;
&lt;br /&gt;
Data is now stored in the highchart in form of hash-maps which contain the score as key and score pertaining to different rounds of reviews as value. Earlier, data was stored in the hash map in a way that in the value scores pertaining to different rubrics were getting stored. Our process facilitates the graph/chart formation submission/round-wise instead of rubric-wise (earlier approach). This guarantees the data is represented logically. In the earlier approach, data was represented rubric-wise. A graph for a particular rubric would show the performance of a team in that rubric in all rounds. But, since rubric 1 of round 1 may not be same as rubric 1 of round 2, therefore this representation seems illogical. Now, the graphs are submission-wise, the performance of a team in all rubrics in a particular round are shown in one graph pertaining to that round of submission. This addresses the problem of varying rubric by round. We can now have different number of rubrics in different rounds without affecting the visualizations for instructors.&lt;br /&gt;
&lt;br /&gt;
  def generate_highchart(chart_data, min, max, number_of_review_questions, assignment, team_data)&lt;br /&gt;
    # Here we actually build the 'series' array which will be used directly in the highchart Object in the _team_charts view file&lt;br /&gt;
    # This array holds the actual data of our chart with legend name&lt;br /&gt;
    highchart_series_data = []&lt;br /&gt;
   &lt;br /&gt;
    count_rounds=0&lt;br /&gt;
    chart_data.each do |round, scores|&lt;br /&gt;
      scores.to_a.reverse.to_h.each do |score, rubric_distribution|&lt;br /&gt;
        if count_rounds == 0&lt;br /&gt;
          highchart_series_data.push(name: &amp;quot;Score #{score}&amp;quot;, data: rubric_distribution, stack: &amp;quot;S#{round}&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
          highchart_series_data.push(linkedTo: &amp;quot;previous&amp;quot;,name: &amp;quot;Rubric #{round} - Score #{score}&amp;quot;, data: rubric_distribution, stack: &amp;quot;S#{round}&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
      count_rounds = count_rounds + 1&lt;br /&gt;
    end&lt;br /&gt;
    # Here we dynamically creates the categories which will be used later in the highchart Object&lt;br /&gt;
    highchart_categories = []&lt;br /&gt;
    for i in 1..@assignment.rounds_of_reviews&lt;br /&gt;
      highchart_categories.push(&amp;quot;Submission #{i}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
    # Here we dynamically create an array of the colors which the highchart uses to show the stack charts.&lt;br /&gt;
    # Currently we create 6 different colors based on the assumption that we always have scores from 0 to 5.&lt;br /&gt;
    highchart_colors = []&lt;br /&gt;
    highchart_colors.push(&amp;quot;#2DE636&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#BCED91&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FFEC8B&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FD992D&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#ff8080&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FD422D&amp;quot;)&lt;br /&gt;
    [highchart_series_data, highchart_categories, highchart_colors]&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Here we build the 'series' array which is used by the highchart object to render the graph.&lt;br /&gt;
This array holds the actual data for the chart along with the legend name.&lt;br /&gt;
By introducing the counter count_rounds corresponding to the counter for rounds, we are able to compress the legends of highchart to a standard form, showing only what is required.&lt;br /&gt;
Also, we have redefined the highchart_colors data structure to contain the colors defined in the grades.scss file (already defined earlier) as suggested by the Professor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Related screenshot&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;[[File:graph_g_b_2.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Issue 3=== &lt;br /&gt;
'''Description''': The table is presorted by teams, but you can now also sort alphabetically. The cell view looks way too long, and should be divided into partials.&lt;br /&gt;
&lt;br /&gt;
Approach: Here we can sort the select query with appropriate column alphabetically, or we can sort the table automatically according to user criteria using dynamic table format. And the long view issue can be solved by using paging.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Related screenshot&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;[[File:graph_g_b_4.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Issue 4===&lt;br /&gt;
'''Description:''' An interactive visualization or table that shows how a class performed on selected rubric criteria would be immensely helpful. It would show me what I need to focus more attention on. &lt;br /&gt;
&lt;br /&gt;
'''Approach:''' The issue is about getting the performance of the entire class graded using the 5 rubrics criteria.Scores will be color coded for each of the rubrics in each of the submissions. When hovered over the graph , for each score, the instructor should see the number of students , the percentage of students that has scored that particular point in that rubric in that submission.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Related screenshot&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;[[File:graph_g_b_3.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
===Issue 1:Check if color coding from red to green for a range of score===&lt;br /&gt;
*1) Login as instructor&lt;br /&gt;
*2) Create a dummy assignment and come dummy reviews for the same.Log out.&lt;br /&gt;
*3) Login as a student. Attempt the assignment. Log out.&lt;br /&gt;
*4) Login as another student and repeat step 3.&lt;br /&gt;
*5) Login as either student and attempt the review. Logout.&lt;br /&gt;
*6) Login as instructor. Go to Review grades page and check the table. If color code ranges from red ( for least score) to green ( for highest score), then test passed.&lt;br /&gt;
&lt;br /&gt;
===Issue 2:Check if different graph visible for different review submission===&lt;br /&gt;
*1) Login as instructor.&lt;br /&gt;
*2) Create an assignment. Select 2 reviews. Also select different rubrics for both reviews.&lt;br /&gt;
*3) Login as a student (&amp;quot;A&amp;quot;) and submit the assignment. Repeat this for another student(&amp;quot;B&amp;quot;).&lt;br /&gt;
*4) Login as student A and perform review. Do this for student B too.&lt;br /&gt;
*5) Now resubmit assignment as student A and B again.&lt;br /&gt;
*6) Resubmit reviews as student A and B again. This time the rubrics will be different from the previous round.&lt;br /&gt;
*7) Now login as instructor and see the visualization of the reviews. You can see the different graphs for different submissions.&lt;br /&gt;
&lt;br /&gt;
===Issue 3:Check if the table is sorted with appropriate column alphabetically===&lt;br /&gt;
*1) Login as instructor&lt;br /&gt;
*2) Create a dummy assignment with some teams. Logout.&lt;br /&gt;
*3) Login as a student and attempt the assignment and logout.&lt;br /&gt;
*4) Repeat step 3 for all dummy teams.&lt;br /&gt;
*5) Login as instructor.&lt;br /&gt;
*6) Go to View Scores page. Check the grade table. &lt;br /&gt;
*7) Click on a column header and check if data in it is getting sorted alphabetically. If yes, then the test passed.&lt;br /&gt;
&lt;br /&gt;
===Issue 4:Check if graph in Issue 3 shows how a class performed on selected rubric criteria===&lt;br /&gt;
*1) Login as the instructor&lt;br /&gt;
*2) Click on the button to compute graphs&lt;br /&gt;
*3) Compare the bar graphs with separate scores of students in each assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
*[https://github.com/expertiza/expertiza Expertiza repo]&lt;br /&gt;
*[http://expertiza.ncsu.edu/ The live Expertiza website]&lt;br /&gt;
*[https://api.highcharts.com/highcharts Highcharts API]&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1792_OSS_Visualizations_for_instructors&amp;diff=113815</id>
		<title>CSC/ECE 517 Fall 2017/E1792 OSS Visualizations for instructors</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1792_OSS_Visualizations_for_instructors&amp;diff=113815"/>
		<updated>2017-11-28T05:19:44Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: /* Issue 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made under E1792 OSS Visualizations for instructors.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create new assignments and customize new or existing assignments. It also allows the instructor to create a list of topics the students can sign up for. Students can form teams in Expertiza to work on various projects and assignments. Students can also peer review other students' submissions. Instructors can also use Expertiza for interactive views of class performances and reviews.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This project aims to improve the visualizations of certain pages related to reviews and feedback in Expertiza in the instructor's view. This would aid the instructors to judge outcomes of reviews and class performance in assignments via graphs and tables, which in turn would ease the process of grading the reviews.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
:* &amp;lt;b&amp;gt;Issue 1&amp;lt;/b&amp;gt;: The scale is blue to green, which does not make sense. And colors will change randomly each time loading the page. It will be better to scale from red to green.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Issue 2&amp;lt;/b&amp;gt;: Two adjacent bar represents the response in round 1 to round k. It makes sense only if the rubrics in all review rounds are all the same. If the instructor implements the vary-rubric-by-round mechanism, this visualization will not make sense.&lt;br /&gt;
:*&amp;lt;b&amp;gt;Issue 3&amp;lt;/b&amp;gt;:The table is presorted by teams in the page View Scores, but you can now also sort alphabetically. The cell view looks way too long, and should be divided into partials.&lt;br /&gt;
:*&amp;lt;b&amp;gt;Issue 4&amp;lt;/b&amp;gt;: An interactive visualization or table that shows how a class performed on selected rubric criteria would be immensely helpful. It would show the instructors what they need to focus more attention on.&lt;br /&gt;
&lt;br /&gt;
== UML Diagram ==&lt;br /&gt;
&amp;lt;br&amp;gt;[[File:uml_g_b_1.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 	&lt;br /&gt;
== Solutions Implemented ==&lt;br /&gt;
===Issue 1=== &lt;br /&gt;
'''Description:'''The scale is blue to green, which does not make sense. And colors will change randomly each time loading the page. It will be better to scale from red to green.&lt;br /&gt;
&lt;br /&gt;
'''Approach:''' Here the color coding is blue to green and also it changes randomly which one color in one graph may represent some other score in the next graph. To fix this issue, we have redefined the highchart_colors data structure to contain the colors defined in the grades.scss file (already defined earlier) as suggested by the Professor. This way no matter what scale is being used it will always have appropriate color coding. Also, the color legend is now appropriate to explain correctly the  color-code used.&lt;br /&gt;
&lt;br /&gt;
 highchart_colors = []&lt;br /&gt;
    highchart_colors.push(&amp;quot;#2DE636&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#BCED91&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FFEC8B&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FD992D&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#ff8080&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FD422D&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;i&amp;gt;Related screenshot&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;[[File:graph_g_b_1.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Issue 2=== &lt;br /&gt;
'''Description:''' Two adjacent bar represents the response in round 1 to round k. It makes sense only if the rubrics in all review rounds are all the same. If the instructor implements the vary-rubric-by-round mechanism, this visualization will not make sense.&lt;br /&gt;
&lt;br /&gt;
'''Approach:''' Here The problem is that the the review responses show in a grid format that shows all the reviews from round 1 to round n. But this is ok when the rubrics is same for all the rounds. But when the rubric is different from round to round this view doesn't make sense. So what we are thinking is creating different grid for each review round. That will solve the problem for when the rubric is different as well as when the rubric is same.&lt;br /&gt;
&lt;br /&gt;
 def get_highchart_data(team_data, assignment, min, max, number_of_review_questions)&lt;br /&gt;
    chart_data = {}  # @chart_data is supposed to hold the general information for creating the highchart stack charts&lt;br /&gt;
    for i in 1..number_of_review_questions&lt;br /&gt;
      chart_data[i] = Hash[(min..max).map {|score| [score, Array.new(assignment.rounds_of_reviews, 0)] }]&lt;br /&gt;
    end&lt;br /&gt;
    team_data.each do |team|&lt;br /&gt;
      team.each do |vm|&lt;br /&gt;
        next if vm.round.nil?&lt;br /&gt;
        j = 1&lt;br /&gt;
        vm.list_of_rows.each do |row|&lt;br /&gt;
          row.score_row.each do |score|&lt;br /&gt;
            unless score.score_value.nil?&lt;br /&gt;
              #chart_data[vm.round][score.score_value][j] += 1&lt;br /&gt;
              chart_data[j][score.score_value][vm.round-1] += 1&lt;br /&gt;
            end&lt;br /&gt;
          end&lt;br /&gt;
          j += 1&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    chart_data&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  @list_of_rows = []&lt;br /&gt;
    @list_of_reviewers = []&lt;br /&gt;
    @list_of_reviews = []&lt;br /&gt;
    @list_of_team_participants = []&lt;br /&gt;
    @max_score = questionnaire.max_question_score&lt;br /&gt;
    @questionnaire_type = questionnaire.type&lt;br /&gt;
    @questionnaire_display_type = questionnaire.display_type&lt;br /&gt;
    @rounds = rounds&lt;br /&gt;
    @round = round&lt;br /&gt;
    @name  = questionnaire.name&lt;br /&gt;
&lt;br /&gt;
  def generate_highchart(chart_data, min, max, number_of_review_questions, assignment, team_data)&lt;br /&gt;
    # Here we actually build the 'series' array which will be used directly in the highchart Object in the _team_charts view file&lt;br /&gt;
    # This array holds the actual data of our chart with legend name&lt;br /&gt;
    highchart_series_data = []&lt;br /&gt;
   &lt;br /&gt;
    count_rounds=0&lt;br /&gt;
    chart_data.each do |round, scores|&lt;br /&gt;
      scores.to_a.reverse.to_h.each do |score, rubric_distribution|&lt;br /&gt;
        if count_rounds == 0&lt;br /&gt;
          highchart_series_data.push(name: &amp;quot;Score #{score}&amp;quot;, data: rubric_distribution, stack: &amp;quot;S#{round}&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
          highchart_series_data.push(linkedTo: &amp;quot;previous&amp;quot;,name: &amp;quot;Rubric #{round} - Score #{score}&amp;quot;, data: rubric_distribution, stack: &amp;quot;S#{round}&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
      count_rounds = count_rounds + 1&lt;br /&gt;
    end&lt;br /&gt;
    # Here we dynamically creates the categories which will be used later in the highchart Object&lt;br /&gt;
    highchart_categories = []&lt;br /&gt;
    for i in 1..@assignment.rounds_of_reviews&lt;br /&gt;
      highchart_categories.push(&amp;quot;Submission #{i}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
    # Here we dynamically create an array of the colors which the highchart uses to show the stack charts.&lt;br /&gt;
    # Currently we create 6 different colors based on the assumption that we always have scores from 0 to 5.&lt;br /&gt;
    highchart_colors = []&lt;br /&gt;
    highchart_colors.push(&amp;quot;#2DE636&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#BCED91&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FFEC8B&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FD992D&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#ff8080&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FD422D&amp;quot;)&lt;br /&gt;
    [highchart_series_data, highchart_categories, highchart_colors]&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Related screenshot&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;[[File:graph_g_b_2.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Issue 3=== &lt;br /&gt;
'''Description''': The table is presorted by teams, but you can now also sort alphabetically. The cell view looks way too long, and should be divided into partials.&lt;br /&gt;
&lt;br /&gt;
Approach: Here we can sort the select query with appropriate column alphabetically, or we can sort the table automatically according to user criteria using dynamic table format. And the long view issue can be solved by using paging.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Related screenshot&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;[[File:graph_g_b_4.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Issue 4===&lt;br /&gt;
'''Description:''' An interactive visualization or table that shows how a class performed on selected rubric criteria would be immensely helpful. It would show me what I need to focus more attention on. &lt;br /&gt;
&lt;br /&gt;
'''Approach:''' The issue is about getting the performance of the entire class graded using the 5 rubrics criteria.Scores will be color coded for each of the rubrics in each of the submissions. When hovered over the graph , for each score, the instructor should see the number of students , the percentage of students that has scored that particular point in that rubric in that submission.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Related screenshot&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;[[File:graph_g_b_3.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
===Issue 1:Check if color coding from red to green for a range of score===&lt;br /&gt;
*1) Login as instructor&lt;br /&gt;
*2) Create a dummy assignment and come dummy reviews for the same.Log out.&lt;br /&gt;
*3) Login as a student. Attempt the assignment. Log out.&lt;br /&gt;
*4) Login as another student and repeat step 3.&lt;br /&gt;
*5) Login as either student and attempt the review. Logout.&lt;br /&gt;
*6) Login as instructor. Go to Review grades page and check the table. If color code ranges from red ( for least score) to green ( for highest score), then test passed.&lt;br /&gt;
&lt;br /&gt;
===Issue 2:Check if different graph visible for different review submission===&lt;br /&gt;
*1) Login as instructor.&lt;br /&gt;
*2) Create an assignment. Select 2 reviews. Also select different rubrics for both reviews.&lt;br /&gt;
*3) Login as a student (&amp;quot;A&amp;quot;) and submit the assignment. Repeat this for another student(&amp;quot;B&amp;quot;).&lt;br /&gt;
*4) Login as student A and perform review. Do this for student B too.&lt;br /&gt;
*5) Now resubmit assignment as student A and B again.&lt;br /&gt;
*6) Resubmit reviews as student A and B again. This time the rubrics will be different from the previous round.&lt;br /&gt;
*7) Now login as instructor and see the visualization of the reviews. You can see the different graphs for different submissions.&lt;br /&gt;
&lt;br /&gt;
===Issue 3:Check if the table is sorted with appropriate column alphabetically===&lt;br /&gt;
*1) Login as instructor&lt;br /&gt;
*2) Create a dummy assignment with some teams. Logout.&lt;br /&gt;
*3) Login as a student and attempt the assignment and logout.&lt;br /&gt;
*4) Repeat step 3 for all dummy teams.&lt;br /&gt;
*5) Login as instructor.&lt;br /&gt;
*6) Go to View Scores page. Check the grade table. &lt;br /&gt;
*7) Click on a column header and check if data in it is getting sorted alphabetically. If yes, then the test passed.&lt;br /&gt;
&lt;br /&gt;
===Issue 4:Check if graph in Issue 3 shows how a class performed on selected rubric criteria===&lt;br /&gt;
*1) Login as the instructor&lt;br /&gt;
*2) Click on the button to compute graphs&lt;br /&gt;
*3) Compare the bar graphs with separate scores of students in each assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
*[https://github.com/expertiza/expertiza Expertiza repo]&lt;br /&gt;
*[http://expertiza.ncsu.edu/ The live Expertiza website]&lt;br /&gt;
*[https://api.highcharts.com/highcharts Highcharts API]&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1792_OSS_Visualizations_for_instructors&amp;diff=113814</id>
		<title>CSC/ECE 517 Fall 2017/E1792 OSS Visualizations for instructors</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1792_OSS_Visualizations_for_instructors&amp;diff=113814"/>
		<updated>2017-11-28T05:18:17Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: /* Issue 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made under E1792 OSS Visualizations for instructors.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create new assignments and customize new or existing assignments. It also allows the instructor to create a list of topics the students can sign up for. Students can form teams in Expertiza to work on various projects and assignments. Students can also peer review other students' submissions. Instructors can also use Expertiza for interactive views of class performances and reviews.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This project aims to improve the visualizations of certain pages related to reviews and feedback in Expertiza in the instructor's view. This would aid the instructors to judge outcomes of reviews and class performance in assignments via graphs and tables, which in turn would ease the process of grading the reviews.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
:* &amp;lt;b&amp;gt;Issue 1&amp;lt;/b&amp;gt;: The scale is blue to green, which does not make sense. And colors will change randomly each time loading the page. It will be better to scale from red to green.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Issue 2&amp;lt;/b&amp;gt;: Two adjacent bar represents the response in round 1 to round k. It makes sense only if the rubrics in all review rounds are all the same. If the instructor implements the vary-rubric-by-round mechanism, this visualization will not make sense.&lt;br /&gt;
:*&amp;lt;b&amp;gt;Issue 3&amp;lt;/b&amp;gt;:The table is presorted by teams in the page View Scores, but you can now also sort alphabetically. The cell view looks way too long, and should be divided into partials.&lt;br /&gt;
:*&amp;lt;b&amp;gt;Issue 4&amp;lt;/b&amp;gt;: An interactive visualization or table that shows how a class performed on selected rubric criteria would be immensely helpful. It would show the instructors what they need to focus more attention on.&lt;br /&gt;
&lt;br /&gt;
== UML Diagram ==&lt;br /&gt;
&amp;lt;br&amp;gt;[[File:uml_g_b_1.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 	&lt;br /&gt;
== Solutions Implemented ==&lt;br /&gt;
===Issue 1=== &lt;br /&gt;
'''Description:'''The scale is blue to green, which does not make sense. And colors will change randomly each time loading the page. It will be better to scale from red to green.&lt;br /&gt;
&lt;br /&gt;
'''Approach:''' Here the color coding is blue to green and also it changes randomly which one color in one graph may represent some other score in the next graph. To fix this issue, we have redefined the highchart_colors data structure to contain the colors defined in the grades.scss file (already defined earlier) as suggested by the Professor. This way no matter what scale is being used it will always have appropriate color coding. Also, the color legend is now appropriate to explain correctly the  color-code used.&lt;br /&gt;
&lt;br /&gt;
 highchart_colors = []&lt;br /&gt;
    highchart_colors.push(&amp;quot;#2DE636&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#BCED91&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FFEC8B&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FD992D&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#ff8080&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FD422D&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;i&amp;gt;Related screenshot&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;[[File:graph_g_b_1.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Issue 2=== &lt;br /&gt;
'''Description:''' Two adjacent bar represents the response in round 1 to round k. It makes sense only if the rubrics in all review rounds are all the same. If the instructor implements the vary-rubric-by-round mechanism, this visualization will not make sense.&lt;br /&gt;
&lt;br /&gt;
'''Approach:''' Here The problem is that the the review responses show in a grid format that shows all the reviews from round 1 to round n. But this is ok when the rubrics is same for all the rounds. But when the rubric is different from round to round this view doesn't make sense. So what we are thinking is creating different grid for each review round. That will solve the problem for when the rubric is different as well as when the rubric is same.&lt;br /&gt;
&lt;br /&gt;
 def get_highchart_data(team_data, assignment, min, max, number_of_review_questions)&lt;br /&gt;
    chart_data = {}  # @chart_data is supposed to hold the general information for creating the highchart stack charts&lt;br /&gt;
    for i in 1..number_of_review_questions&lt;br /&gt;
      chart_data[i] = Hash[(min..max).map {|score| [score, Array.new(assignment.rounds_of_reviews, 0)] }]&lt;br /&gt;
    end&lt;br /&gt;
    team_data.each do |team|&lt;br /&gt;
      team.each do |vm|&lt;br /&gt;
        next if vm.round.nil?&lt;br /&gt;
        j = 1&lt;br /&gt;
        vm.list_of_rows.each do |row|&lt;br /&gt;
          row.score_row.each do |score|&lt;br /&gt;
            unless score.score_value.nil?&lt;br /&gt;
              #chart_data[vm.round][score.score_value][j] += 1&lt;br /&gt;
              chart_data[j][score.score_value][vm.round-1] += 1&lt;br /&gt;
            end&lt;br /&gt;
          end&lt;br /&gt;
          j += 1&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    chart_data&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  @list_of_rows = []&lt;br /&gt;
    @list_of_reviewers = []&lt;br /&gt;
    @list_of_reviews = []&lt;br /&gt;
    @list_of_team_participants = []&lt;br /&gt;
    @max_score = questionnaire.max_question_score&lt;br /&gt;
    @questionnaire_type = questionnaire.type&lt;br /&gt;
    @questionnaire_display_type = questionnaire.display_type&lt;br /&gt;
    @rounds = rounds&lt;br /&gt;
    @round = round&lt;br /&gt;
    @name  = questionnaire.name&lt;br /&gt;
&lt;br /&gt;
  def generate_highchart(chart_data, min, max, number_of_review_questions, assignment, team_data)&lt;br /&gt;
    # Here we actually build the 'series' array which will be used directly in the highchart Object in the _team_charts view file&lt;br /&gt;
    # This array holds the actual data of our chart with legend name&lt;br /&gt;
    highchart_series_data = []&lt;br /&gt;
   &lt;br /&gt;
    count_rounds=0&lt;br /&gt;
    chart_data.each do |round, scores|&lt;br /&gt;
      scores.to_a.reverse.to_h.each do |score, rubric_distribution|&lt;br /&gt;
        if count_rounds == 0&lt;br /&gt;
          highchart_series_data.push(name: &amp;quot;Score #{score}&amp;quot;, data: rubric_distribution, stack: &amp;quot;S#{round}&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
          highchart_series_data.push(linkedTo: &amp;quot;previous&amp;quot;,name: &amp;quot;Rubric #{round} - Score #{score}&amp;quot;, data: rubric_distribution, stack: &amp;quot;S#{round}&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
      count_rounds = count_rounds + 1&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    # Here we dynamically creates the categories which will be used later in the highchart Object&lt;br /&gt;
    highchart_categories = []&lt;br /&gt;
    for i in 1..@assignment.rounds_of_reviews&lt;br /&gt;
      highchart_categories.push(&amp;quot;Submission #{i}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    # Here we dynamically create an array of the colors which the highchart uses to show the stack charts.&lt;br /&gt;
    # Currently we create 6 different colors based on the assumption that we always have scores from 0 to 5.&lt;br /&gt;
    &lt;br /&gt;
    highchart_colors = []&lt;br /&gt;
    highchart_colors.push(&amp;quot;#2DE636&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#BCED91&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FFEC8B&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FD992D&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#ff8080&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FD422D&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    [highchart_series_data, highchart_categories, highchart_colors]&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Related screenshot&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;[[File:graph_g_b_2.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Issue 3=== &lt;br /&gt;
'''Description''': The table is presorted by teams, but you can now also sort alphabetically. The cell view looks way too long, and should be divided into partials.&lt;br /&gt;
&lt;br /&gt;
Approach: Here we can sort the select query with appropriate column alphabetically, or we can sort the table automatically according to user criteria using dynamic table format. And the long view issue can be solved by using paging.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Related screenshot&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;[[File:graph_g_b_4.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Issue 4===&lt;br /&gt;
'''Description:''' An interactive visualization or table that shows how a class performed on selected rubric criteria would be immensely helpful. It would show me what I need to focus more attention on. &lt;br /&gt;
&lt;br /&gt;
'''Approach:''' The issue is about getting the performance of the entire class graded using the 5 rubrics criteria.Scores will be color coded for each of the rubrics in each of the submissions. When hovered over the graph , for each score, the instructor should see the number of students , the percentage of students that has scored that particular point in that rubric in that submission.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Related screenshot&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;[[File:graph_g_b_3.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
===Issue 1:Check if color coding from red to green for a range of score===&lt;br /&gt;
*1) Login as instructor&lt;br /&gt;
*2) Create a dummy assignment and come dummy reviews for the same.Log out.&lt;br /&gt;
*3) Login as a student. Attempt the assignment. Log out.&lt;br /&gt;
*4) Login as another student and repeat step 3.&lt;br /&gt;
*5) Login as either student and attempt the review. Logout.&lt;br /&gt;
*6) Login as instructor. Go to Review grades page and check the table. If color code ranges from red ( for least score) to green ( for highest score), then test passed.&lt;br /&gt;
&lt;br /&gt;
===Issue 2:Check if different graph visible for different review submission===&lt;br /&gt;
*1) Login as instructor.&lt;br /&gt;
*2) Create an assignment. Select 2 reviews. Also select different rubrics for both reviews.&lt;br /&gt;
*3) Login as a student (&amp;quot;A&amp;quot;) and submit the assignment. Repeat this for another student(&amp;quot;B&amp;quot;).&lt;br /&gt;
*4) Login as student A and perform review. Do this for student B too.&lt;br /&gt;
*5) Now resubmit assignment as student A and B again.&lt;br /&gt;
*6) Resubmit reviews as student A and B again. This time the rubrics will be different from the previous round.&lt;br /&gt;
*7) Now login as instructor and see the visualization of the reviews. You can see the different graphs for different submissions.&lt;br /&gt;
&lt;br /&gt;
===Issue 3:Check if the table is sorted with appropriate column alphabetically===&lt;br /&gt;
*1) Login as instructor&lt;br /&gt;
*2) Create a dummy assignment with some teams. Logout.&lt;br /&gt;
*3) Login as a student and attempt the assignment and logout.&lt;br /&gt;
*4) Repeat step 3 for all dummy teams.&lt;br /&gt;
*5) Login as instructor.&lt;br /&gt;
*6) Go to View Scores page. Check the grade table. &lt;br /&gt;
*7) Click on a column header and check if data in it is getting sorted alphabetically. If yes, then the test passed.&lt;br /&gt;
&lt;br /&gt;
===Issue 4:Check if graph in Issue 3 shows how a class performed on selected rubric criteria===&lt;br /&gt;
*1) Login as the instructor&lt;br /&gt;
*2) Click on the button to compute graphs&lt;br /&gt;
*3) Compare the bar graphs with separate scores of students in each assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
*[https://github.com/expertiza/expertiza Expertiza repo]&lt;br /&gt;
*[http://expertiza.ncsu.edu/ The live Expertiza website]&lt;br /&gt;
*[https://api.highcharts.com/highcharts Highcharts API]&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1792_OSS_Visualizations_for_instructors&amp;diff=113800</id>
		<title>CSC/ECE 517 Fall 2017/E1792 OSS Visualizations for instructors</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1792_OSS_Visualizations_for_instructors&amp;diff=113800"/>
		<updated>2017-11-28T02:14:39Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page is for the description of changes made under E1792 OSS Visualizations for instructors.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create new assignments and customize new or existing assignments. It also allows the instructor to create a list of topics the students can sign up for. Students can form teams in Expertiza to work on various projects and assignments. Students can also peer review other students' submissions. Instructors can also use Expertiza for interactive views of class performances and reviews.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This project aims to improve the visualizations of certain pages related to reviews and feedback in Expertiza in the instructor's view. This would aid the instructors to judge outcomes of reviews and class performance in assignments via graphs and tables, which in turn would ease the process of grading the reviews.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
:* &amp;lt;b&amp;gt;Issue 1&amp;lt;/b&amp;gt;: The scale is blue to green, which does not make sense. And colors will change randomly each time loading the page. It will be better to scale from red to green.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Issue 2&amp;lt;/b&amp;gt;: Two adjacent bar represents the response in round 1 to round k. It makes sense only if the rubrics in all review rounds are all the same. If the instructor implements the vary-rubric-by-round mechanism, this visualization will not make sense.&lt;br /&gt;
:*&amp;lt;b&amp;gt;Issue 3&amp;lt;/b&amp;gt;:The table is presorted by teams in the page View Scores, but you can now also sort alphabetically. The cell view looks way too long, and should be divided into partials.&lt;br /&gt;
:*&amp;lt;b&amp;gt;Issue 4&amp;lt;/b&amp;gt;: An interactive visualization or table that shows how a class performed on selected rubric criteria would be immensely helpful. It would show the instructors what they need to focus more attention on.&lt;br /&gt;
&lt;br /&gt;
== UML Diagram ==&lt;br /&gt;
&amp;lt;br&amp;gt;[[File:uml_g_b_1.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 	&lt;br /&gt;
== Solutions Implemented ==&lt;br /&gt;
===Issue 1=== &lt;br /&gt;
'''Description:'''The scale is blue to green, which does not make sense. And colors will change randomly each time loading the page. It will be better to scale from red to green.&lt;br /&gt;
&lt;br /&gt;
'''Approach:''' Here the color coding is blue to green and also it changes randomly which one color in one graph may represent some other score in the next graph. To fix this issue, we have redefined the highchart_colors data structure to contain the colors defined in the grades.scss file (already defined earlier) as suggested by the Professor. This way no matter what scale is being used it will always have appropriate color coding. Also, the color legend is now appropriate to explain correctly the  color-code used.&lt;br /&gt;
&lt;br /&gt;
 highchart_colors = []&lt;br /&gt;
    highchart_colors.push(&amp;quot;#2DE636&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#BCED91&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FFEC8B&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FD992D&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#ff8080&amp;quot;)&lt;br /&gt;
    highchart_colors.push(&amp;quot;#FD422D&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;i&amp;gt;Related screenshot&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;[[File:graph_g_b_1.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Issue 2=== &lt;br /&gt;
'''Description:''' Two adjacent bar represents the response in round 1 to round k. It makes sense only if the rubrics in all review rounds are all the same. If the instructor implements the vary-rubric-by-round mechanism, this visualization will not make sense.&lt;br /&gt;
&lt;br /&gt;
'''Approach:''' Here The problem is that the the review responses show in a grid format that shows all the reviews from round 1 to round n. But this is ok when the rubrics is same for all the rounds. But when the rubric is different from round to round this view doesn't make sense. So what we are thinking is creating different grid for each review round. That will solve the problem for when the rubric is different as well as when the rubric is same.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Related screenshot&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;[[File:graph_g_b_2.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Issue 3=== &lt;br /&gt;
'''Description''': The table is presorted by teams, but you can now also sort alphabetically. The cell view looks way too long, and should be divided into partials.&lt;br /&gt;
&lt;br /&gt;
Approach: Here we can sort the select query with appropriate column alphabetically, or we can sort the table automatically according to user criteria using dynamic table format. And the long view issue can be solved by using paging.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Related screenshot&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;[[File:graph_g_b_4.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Issue 4===&lt;br /&gt;
'''Description:''' An interactive visualization or table that shows how a class performed on selected rubric criteria would be immensely helpful. It would show me what I need to focus more attention on. &lt;br /&gt;
&lt;br /&gt;
'''Approach:''' The issue is about getting the performance of the entire class graded using the 5 rubrics criteria.Scores will be color coded for each of the rubrics in each of the submissions. When hovered over the graph , for each score, the instructor should see the number of students , the percentage of students that has scored that particular point in that rubric in that submission.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Related screenshot&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;[[File:graph_g_b_3.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
===Issue 1:Check if color coding from red to green for a range of score===&lt;br /&gt;
*1) Login as instructor&lt;br /&gt;
*2) Create a dummy assignment and come dummy reviews for the same.Log out.&lt;br /&gt;
*3) Login as a student. Attempt the assignment. Log out.&lt;br /&gt;
*4) Login as another student and repeat step 3.&lt;br /&gt;
*5) Login as either student and attempt the review. Logout.&lt;br /&gt;
*6) Login as instructor. Go to Review grades page and check the table. If color code ranges from red ( for least score) to green ( for highest score), then test passed.&lt;br /&gt;
&lt;br /&gt;
===Issue 2:Check if different graph visible for different review submission===&lt;br /&gt;
*1) Login as instructor.&lt;br /&gt;
*2) Create an assignment. Select 2 reviews. Also select different rubrics for both reviews.&lt;br /&gt;
*3) Login as a student (&amp;quot;A&amp;quot;) and submit the assignment. Repeat this for another student(&amp;quot;B&amp;quot;).&lt;br /&gt;
*4) Login as student A and perform review. Do this for student B too.&lt;br /&gt;
*5) Now resubmit assignment as student A and B again.&lt;br /&gt;
*6) Resubmit reviews as student A and B again. This time the rubrics will be different from the previous round.&lt;br /&gt;
*7) Now login as instructor and see the visualization of the reviews. You can see the different graphs for different submissions.&lt;br /&gt;
&lt;br /&gt;
===Issue 3:Check if the table is sorted with appropriate column alphabetically===&lt;br /&gt;
*1) Login as instructor&lt;br /&gt;
*2) Create a dummy assignment with some teams. Logout.&lt;br /&gt;
*3) Login as a student and attempt the assignment and logout.&lt;br /&gt;
*4) Repeat step 3 for all dummy teams.&lt;br /&gt;
*5) Login as instructor.&lt;br /&gt;
*6) Go to View Scores page. Check the grade table. &lt;br /&gt;
*7) Click on a column header and check if data in it is getting sorted alphabetically. If yes, then the test passed.&lt;br /&gt;
&lt;br /&gt;
===Issue 4:Check if graph in Issue 3 shows how a class performed on selected rubric criteria===&lt;br /&gt;
*1) Login as the instructor&lt;br /&gt;
*2) Click on the button to compute graphs&lt;br /&gt;
*3) Compare the bar graphs with separate scores of students in each assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
*[https://github.com/expertiza/expertiza Expertiza repo]&lt;br /&gt;
*[http://expertiza.ncsu.edu/ The live Expertiza website]&lt;br /&gt;
*[https://api.highcharts.com/highcharts Highcharts API]&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1792_OSS_Visualizations_for_instructors&amp;diff=113646</id>
		<title>CSC/ECE 517 Fall 2017/E1792 OSS Visualizations for instructors</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1792_OSS_Visualizations_for_instructors&amp;diff=113646"/>
		<updated>2017-11-16T20:52:16Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page provides a description of the expertiza based project for Fall 2017.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
This project aims to improve the visualizations of certain pages related to reviews and feedback in Expertiza in the instructor's view. This would aid the instructors to judge outcomes of reviews and class performance in assignments via graphs and tables, which in turn would ease the process of grading the reviews.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 1:''' For links in each cell. We are not sure what will happen if we click the link and which page will open.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 2:''' The scale is blue to green, which does not make sense. And colors will change randomly each time loading the page. It will be better to scale from red to green.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 3:''' Two adjacent bar represents the response in round 1 to round k. It makes sense only if the rubrics in all review rounds are all the same. If the instructor implements the vary-rubric-by-round mechanism, this visualization will not make sense.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 4:''' The table is presorted by teams in the page View Scores, but you can now also sort alphabetically. The cell view looks way too long, and should be divided into partials.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 5:''' An interactive visualization or table that shows how a class performed on selected rubric criteria would be immensely helpful. It would show the instructors what they need to focus more attention on.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 6:''' Integration of review performance- The basic aim of this implementation is to somehow combine an author’s feedback on a review and the corresponding review of a reviewer, to build a method for grading the reviewers.&lt;br /&gt;
 &lt;br /&gt;
Basic rubrics to be considered:&amp;lt;br&amp;gt;	&lt;br /&gt;
-Number of reviews completed&amp;lt;br&amp;gt;	&lt;br /&gt;
-Length of reviews&amp;lt;br&amp;gt;	&lt;br /&gt;
-Summary of reviews&amp;lt;br&amp;gt;&lt;br /&gt;
-Whether reviewers added a file or link to their review &amp;lt;br&amp;gt;&lt;br /&gt;
-The average ratings they received from the author.&amp;lt;br&amp;gt;&lt;br /&gt;
A graph or table is prefered for easing this change.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Approach to be followed to fix the issues''' ==&lt;br /&gt;
'''Issue 1:''' For links in each cell. We are not sure what will happen if we click the link and which page will open.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 1:''' The issue is about the cell contains link to different pages in expertiza, but there is no way to know which cell is linked to which page. So user don't know the destination page when he/she clicks on some page. So we know that there is link in each cell, so we will show a hover over text displaying the link of the destination page.&lt;br /&gt;
&lt;br /&gt;
'''Issue 2:''' The scale is blue to green, which does not make sense. And colors will change randomly each time loading the page. It will be better to scale from red to green.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 2:''' Here the color coding is blue to green and also it changes randomly. So we will use RBG color coding to make it red to green. We will use percentage to decide color coding. For example if it between 0 - 20% then make it red and so on. This way no matter what scale is being used it will always have appropriate color coding.&lt;br /&gt;
&lt;br /&gt;
'''Issue 3:''' Two adjacent bar represents the response in round 1 to round k. It makes sense only if the rubrics in all review rounds are all the same. If the instructor implements the vary-rubric-by-round mechanism, this visualization will not make sense.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 3:''' Here The problem is that the the review responses show in a grid format that shows all the reviews from round 1 to round n. But this is ok when the rubrics is same for all the rounds. But when the rubric is different from round to round this view doesn't make sense. So what we are thinking is creating different grid for each review round. That will solve the problem for when the rubric is different as well as when the rubric is same.&lt;br /&gt;
&lt;br /&gt;
'''Issue 4:''' The table is presorted by teams, but you can now also sort alphabetically. The cell view looks way too long, and should be divided into partials.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 4:''' Here we can sort the select query with appropriate column alphabetically, or we can sort the table automatically according to user criteria using dynamic table format. And the long view issue can be solved by using paging.&lt;br /&gt;
&lt;br /&gt;
'''Issue 5:''' An interactive visualization or table that shows how a class performed on selected rubric criteria would be immensely helpful. It would show me what I need to focus more attention on. &lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 5 :''' The issue is about getting the performance of the entire class graded using the 5 rubrics criteria.A proposed solution may  be  use the below logic of calculating average grade for each student on all assignments in a particular course  from the controller assessment360_controller.rb&lt;br /&gt;
 &lt;br /&gt;
[[File:scr2.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The average grades of each student can be pulled and then used to plot a bar graph as shown below ( This has been created by using a dummy data ) :-&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Dummydata.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 1 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment1.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 2 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment2.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 3 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment3.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 4 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment4.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 5 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment5.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Average Class performance :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Average.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The work flow can be approximately like the below  diagram :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Workflow.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Issue 6:''' Integration of review performance- The basic aim of this implementation is to somehow combine an author’s feedback on a review and the corresponding review of a reviewer, to build a method for grading the reviewers.&lt;br /&gt;
Basic rubrics to be considered:&amp;lt;br&amp;gt;&lt;br /&gt;
-Number of reviews completed&amp;lt;br&amp;gt;&lt;br /&gt;
-Length of reviews&amp;lt;br&amp;gt;&lt;br /&gt;
-Summary of reviews&amp;lt;br&amp;gt;&lt;br /&gt;
-Whether reviewers added a file or link to their review &amp;lt;br&amp;gt;&lt;br /&gt;
-The average ratings they received from the author.&amp;lt;br&amp;gt;&lt;br /&gt;
-A graph or table is prefered for easing this change.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 6:''' The entire focus is on to what extent a review could help the author. The latter’s feedback is always available in the form of numerical scores. We intend to capture the author’s score of the review topic-wise like that of tone of review, plausible solutions to problems suggested by reviewer and the rate of how much it helped the author to improve(scored by himself). &amp;lt;br&amp;gt;&lt;br /&gt;
-In each round of review done, the author’s feedback is noted topic-wise as suggested in the previous step and ''possibly generate a graph comparing the “n” rounds of reviews''.&amp;lt;br&amp;gt;&lt;br /&gt;
-If reviewer added ''a legit file or link to their review'', then we propose to add a few extra credits to the reviewer that can be added to their final grade.&lt;br /&gt;
The author’s feedback in the form of an average number can be taken and if that value exceeds that of a threshold , then the reviews were really meaningful.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example - &lt;br /&gt;
Consider author’s feedback as follows for 2 rounds of reviews:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ExampleTableForAuthorFeedback.PNG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
Observations: Mean score of round 1 is 3 and Mean score of round 2 is 1.9. &amp;lt;br&amp;gt;&lt;br /&gt;
Suppose , we take into account that Round of 1 has more importance than the second one because it helps a reviewer improve, and also that every reviewer should atleast provide 2 suggestions or comments that help authors improve. Then the threshold value is considered to be 2 and the Mean score of round 1 &amp;gt; threshold. &amp;lt;br&amp;gt;&lt;br /&gt;
Therefore, the reviews were meaningful and deserves a credit in the higher range of grades. If the mean score of round 1 &amp;lt; threshold then the mean score of round 2 is compared with the threshold.  &amp;lt;br&amp;gt;&lt;br /&gt;
		''Overall : Mean round 1&amp;gt; threshold : Higher range of grade to reviewer.&amp;lt;br&amp;gt;&lt;br /&gt;
			  Mean round 1&amp;lt;threshold  : Check if Mean round 2 &amp;gt; threshold &amp;lt;br&amp;gt;&lt;br /&gt;
							If true , Medium range of grade to reviewer.&amp;lt;br&amp;gt;&lt;br /&gt;
							Else , lower range of grades.&amp;lt;br&amp;gt;''&lt;br /&gt;
Now once it’s decided in what range a reviewer deserves credit, The other factors like ''summary of review'' and ''length of review'' are taken into account by the instructors and graded according to the effectiveness of concepts explained in it. Also if a reviewer misses the second round of review then only the first round is taken into consideration. ''The instructor should believe that all but the last round of reviews are crucial to improve a document.''&amp;lt;br&amp;gt;&lt;br /&gt;
'''Graphs:'''Can be generated for comparing the effectiveness of the “n” rounds of reviews for the authors depending on the author’s score. &amp;lt;br&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
In this case - (only an example visualization)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ExampleGraph.PNG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Observations: The graph and table together suggest that round 1 of the review actually had an impact on the author.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Test Plan''' ==&lt;br /&gt;
'''Issue 1:''' Check the link matches to the hover over text&lt;br /&gt;
*1) Login as instructor&lt;br /&gt;
*2) Go to View Scores page. Hover over a cell.&lt;br /&gt;
*3) You will see a link being displayed upon hovering. Click on the cell.&lt;br /&gt;
*4) If the system directs you to the link that was displayed upon hovering, then the test passed.&lt;br /&gt;
&lt;br /&gt;
'''Issue 2:''' Check the color coding when different number is given in different scale.&lt;br /&gt;
*1) Login as instructor&lt;br /&gt;
*2) Create a dummy assignment and come dummy reviews for the same.Log out.&lt;br /&gt;
*3) Login as a student. Attempt the assignment. Log out.&lt;br /&gt;
*4) Login as another student and repeat step 3.&lt;br /&gt;
*5) Login as either student and attempt the review. Logout.&lt;br /&gt;
*6) Login as instructor. Go to Review grades page and check the table. If color code ranges from red ( for least score) to green ( for highest score), then test passed.&lt;br /&gt;
&lt;br /&gt;
'''Issue 3:''' Enter multiple reviews with different rubric and check different table/grid shows for each review round separately.&lt;br /&gt;
*1) Login as instructor.&lt;br /&gt;
*2) Create an assignment. Select 2 reviews. Also select different rubrics for both reviews.&lt;br /&gt;
*3) Login as a student (&amp;quot;A&amp;quot;) and submit the assignment. Repeat this for another student(&amp;quot;B&amp;quot;).&lt;br /&gt;
*4) Login as student A and perform review. Do this for student B too.&lt;br /&gt;
*5) Now resubmit assignment as student A and B again.&lt;br /&gt;
*6) Resubmit reviews as student A and B again. This time the rubrics will be different from the previous round.&lt;br /&gt;
*7) Now login as instructor and see the visualization of the reviews. You can see the different graphs for different submissions.&lt;br /&gt;
&lt;br /&gt;
'''Issue 4:''' Check if the table is sorted with appropriate column alphabetically&lt;br /&gt;
*1) Login as instructor&lt;br /&gt;
*2) Create a dummy assignment with some teams. Logout.&lt;br /&gt;
*3) Login as a student and attempt the assignment and logout.&lt;br /&gt;
*4) Repeat step 3 for all dummy teams.&lt;br /&gt;
*5) Login as instructor.&lt;br /&gt;
*6) Go to View Scores page. Check the grade table. &lt;br /&gt;
*7) Click on a column header and check if data in it is getting sorted alphabetically. If yes, then the test passed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Issue 5:'''&lt;br /&gt;
*1) Login as the instructor&lt;br /&gt;
*2) Click on the button to compute graphs&lt;br /&gt;
*3) Compare the bar graphs with separate scores of students in each assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Issue 6:''' Since it is a new algorithm being proposed, we intend to test it first manually using dummy datasets. Later on, automated test cases can be added for the same.&lt;br /&gt;
*1) Login as an instructor and create a dummy assignment with 2 rounds of review submissions. Assign 2 teams to that assignment of 1 student each. Also, put the deadline of first review as &amp;quot;1 hour&amp;quot;. Log out&lt;br /&gt;
*2) Login as a student and submit some data for the assignment. Log out.&lt;br /&gt;
*3) Login as the second student and submit the same assignment using dummy data. Log out.&lt;br /&gt;
All the above steps will help us reach towards the section of reviews.&lt;br /&gt;
*4) Login as the first student and go to &amp;quot;Other's work&amp;quot; and request for a review document.By default, you will be assigned the document of the second student to review. Once assigned, complete that review with dummy scores. Log out.&lt;br /&gt;
*5) Login as the second student. Check the review in &amp;quot;Your scores&amp;quot; page and click on the section &amp;quot;Show review&amp;quot;. There you can provide scored feedback to the reviewer. Definitely take into account the tone, solutions suggested and how it will help you. Log out.&lt;br /&gt;
*6) Login as the first student after the deadline for the first review completes. Go to &amp;quot;Other's work&amp;quot; and request for a new submission. You will be assigned the same document of the other student to review for the second round. Follow step 4.&lt;br /&gt;
*7) Login as the second student and follow step 5.&lt;br /&gt;
*8) The system has the data related to author's feedback and the reviewer's data and will calculate the scores of the reviewer according to the ''range of credits'' ( lower range, medium range and higher range) set by the instructor.&lt;br /&gt;
&lt;br /&gt;
*Edge cases - May include options like ''adding a link in the review document by the reviewer'' and seeing how the grade is increased.&lt;br /&gt;
May also take into account the situation when author's feedback isn't available and the score of the reviewer would solely depend on the latter's reviews adn the instructor's jurisdiction because the algorithm in this case would fail.&lt;br /&gt;
&lt;br /&gt;
== '''References''' ==&lt;br /&gt;
*Expertiza repo : https://github.com/expertiza/expertiza&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1792_OSS_Visualizations_for_instructors&amp;diff=113134</id>
		<title>CSC/ECE 517 Fall 2017/E1792 OSS Visualizations for instructors</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1792_OSS_Visualizations_for_instructors&amp;diff=113134"/>
		<updated>2017-11-13T23:00:38Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page provides a description of the expertiza based project for Fall 2017.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
This project aims to improve the visualizations of certain pages related to reviews and feedback in Expertiza in the instructor's view. This would aid the instructors to judge outcomes of reviews and class performance in assignments via graphs and tables, which in turn would ease the process of grading the reviews.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 1:''' For links in each cell. We are not sure what will happen if we click the link and which page will open.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 2:''' The scale is blue to green, which does not make sense. And colors will change randomly each time loading the page. It will be better to scale from red to green.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 3:''' Two adjacent bar represents the response in round 1 to round k. It makes sense only if the rubrics in all review rounds are all the same. If the instructor implements the vary-rubric-by-round mechanism, this visualization will not make sense.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 4:''' The table is presorted by teams in the page View Scores, but you can now also sort alphabetically. The cell view looks way too long, and should be divided into partials.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 5:''' An interactive visualization or table that shows how a class performed on selected rubric criteria would be immensely helpful. It would show the instructors what they need to focus more attention on.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 6:''' Integration of review performance- The basic aim of this implementation is to somehow combine an author’s feedback on a review and the corresponding review of a reviewer, to build a method for grading the reviewers.&lt;br /&gt;
 &lt;br /&gt;
Basic rubrics to be considered:&amp;lt;br&amp;gt;	&lt;br /&gt;
-Number of reviews completed&amp;lt;br&amp;gt;	&lt;br /&gt;
-Length of reviews&amp;lt;br&amp;gt;	&lt;br /&gt;
-Summary of reviews&amp;lt;br&amp;gt;&lt;br /&gt;
-Whether reviewers added a file or link to their review &amp;lt;br&amp;gt;&lt;br /&gt;
-The average ratings they received from the author.&amp;lt;br&amp;gt;&lt;br /&gt;
A graph or table is prefered for easing this change.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Approach to be followed to fix the issues''' ==&lt;br /&gt;
'''Issue 1:''' For links in each cell. We are not sure what will happen if we click the link and which page will open.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 1:''' The issue is about the cell contains link to different pages in expertiza, but there is no way to know which cell is linked to which page. So user don't know the destination page when he/she clicks on some page. So we know that there is link in each cell, so we will show a hover over text displaying the link of the destination page.&lt;br /&gt;
&lt;br /&gt;
'''Issue 2:''' The scale is blue to green, which does not make sense. And colors will change randomly each time loading the page. It will be better to scale from red to green.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 2:''' Here the color coding is blue to green and also it changes randomly. So we will use RBG color coding to make it red to green. We will use percentage to decide color coding. For example if it between 0 - 20% then make it red and so on. This way no matter what scale is being used it will always have appropriate color coding.&lt;br /&gt;
&lt;br /&gt;
'''Issue 3:''' Two adjacent bar represents the response in round 1 to round k. It makes sense only if the rubrics in all review rounds are all the same. If the instructor implements the vary-rubric-by-round mechanism, this visualization will not make sense.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 3:''' Here The problem is that the the review responses show in a grid format that shows all the reviews from round 1 to round n. But this is ok when the rubrics is same for all the rounds. But when the rubric is different from round to round this view doesn't make sense. So what we are thinking is creating different grid for each review round. That will solve the problem for when the rubric is different as well as when the rubric is same.&lt;br /&gt;
&lt;br /&gt;
'''Issue 4:''' The table is presorted by teams, but you can now also sort alphabetically. The cell view looks way too long, and should be divided into partials.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 4:''' Here we can sort the select query with appropriate column alphabetically, or we can sort the table automatically according to user criteria using dynamic table format. And the long view issue can be solved by using paging.&lt;br /&gt;
&lt;br /&gt;
'''Issue 5:''' An interactive visualization or table that shows how a class performed on selected rubric criteria would be immensely helpful. It would show me what I need to focus more attention on. &lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 5 :''' The issue is about getting the performance of the entire class graded using the 5 rubrics criteria.A proposed solution may  be  use the below logic of calculating average grade for each student on all assignments in a particular course  from the controller assessment360_controller.rb&lt;br /&gt;
 &lt;br /&gt;
[[File:scr2.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The average grades of each student can be pulled and then used to plot a bar graph as shown below ( This has been created by using a dummy data ) :-&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Dummydata.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 1 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment1.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 2 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment2.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 3 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment3.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 4 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment4.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 5 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment5.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Average Class performance :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Average.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The work flow can be approximately like the below  diagram :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Workflow.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Issue 6:''' Integration of review performance- The basic aim of this implementation is to somehow combine an author’s feedback on a review and the corresponding review of a reviewer, to build a method for grading the reviewers.&lt;br /&gt;
Basic rubrics to be considered:&amp;lt;br&amp;gt;&lt;br /&gt;
-Number of reviews completed&amp;lt;br&amp;gt;&lt;br /&gt;
-Length of reviews&amp;lt;br&amp;gt;&lt;br /&gt;
-Summary of reviews&amp;lt;br&amp;gt;&lt;br /&gt;
-Whether reviewers added a file or link to their review &amp;lt;br&amp;gt;&lt;br /&gt;
-The average ratings they received from the author.&amp;lt;br&amp;gt;&lt;br /&gt;
-A graph or table is prefered for easing this change.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 6:''' The entire focus is on to what extent a review could help the author. The latter’s feedback is always available in the form of numerical scores. We intend to capture the author’s score of the review topic-wise like that of tone of review, plausible solutions to problems suggested by reviewer and the rate of how much it helped the author to improve(scored by himself). &amp;lt;br&amp;gt;&lt;br /&gt;
-In each round of review done, the author’s feedback is noted topic-wise as suggested in the previous step and ''possibly generate a graph comparing the “n” rounds of reviews''.&amp;lt;br&amp;gt;&lt;br /&gt;
-If reviewer added ''a legit file or link to their review'', then we propose to add a few extra credits to the reviewer that can be added to their final grade.&lt;br /&gt;
The author’s feedback in the form of an average number can be taken and if that value exceeds that of a threshold , then the reviews were really meaningful.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example - &lt;br /&gt;
Consider author’s feedback as follows for 2 rounds of reviews:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ExampleTableForAuthorFeedback.PNG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
Observations: Mean score of round 1 is 3 and Mean score of round 2 is 1.9. &amp;lt;br&amp;gt;&lt;br /&gt;
Suppose , we take into account that Round of 1 has more importance than the second one because it helps a reviewer improve, and also that every reviewer should atleast provide 2 suggestions or comments that help authors improve. Then the threshold value is considered to be 2 and the Mean score of round 1 &amp;gt; threshold. &amp;lt;br&amp;gt;&lt;br /&gt;
Therefore, the reviews were meaningful and deserves a credit in the higher range of grades. If the mean score of round 1 &amp;lt; threshold then the mean score of round 2 is compared with the threshold.  &amp;lt;br&amp;gt;&lt;br /&gt;
		''Overall : Mean round 1&amp;gt; threshold : Higher range of grade to reviewer.&amp;lt;br&amp;gt;&lt;br /&gt;
			  Mean round 1&amp;lt;threshold  : Check if Mean round 2 &amp;gt; threshold &amp;lt;br&amp;gt;&lt;br /&gt;
							If true , Medium range of grade to reviewer.&amp;lt;br&amp;gt;&lt;br /&gt;
							Else , lower range of grades.&amp;lt;br&amp;gt;''&lt;br /&gt;
Now once it’s decided in what range a reviewer deserves credit, The other factors like ''summary of review'' and ''length of review'' are taken into account by the instructors and graded according to the effectiveness of concepts explained in it. Also if a reviewer misses the second round of review then only the first round is taken into consideration. ''The instructor should believe that all but the last round of reviews are crucial to improve a document.''&amp;lt;br&amp;gt;&lt;br /&gt;
'''Graphs:'''Can be generated for comparing the effectiveness of the “n” rounds of reviews for the authors depending on the author’s score. &amp;lt;br&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
In this case - (only an example visualization)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ExampleGraph.PNG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Observations: The graph and table together suggest that round 1 of the review actually had an impact on the author.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Test Plan''' ==&lt;br /&gt;
'''Issue 1:''' Check the link matches to the hover over text&lt;br /&gt;
&lt;br /&gt;
'''Issue 2:''' Check the color coding when different number is given in different scale.&lt;br /&gt;
&lt;br /&gt;
'''Issue 3:''' Enter multiple reviews with different rubric and check different table/grid shows for each review round separately.&lt;br /&gt;
&lt;br /&gt;
'''Issue 4:''' Check if the table is sorted with appropriate column alphabetically&lt;br /&gt;
&lt;br /&gt;
'''Issue 5:'''&lt;br /&gt;
*1) Login as the instructor&lt;br /&gt;
*2) Click on the button to compute graphs&lt;br /&gt;
*3) Compare the bar graphs with separate scores of students in each assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Issue 6:''' Since it is a new algorithm being proposed, we intend to test it first manually using dummy datasets. Later on, automated test cases can be added for the same.&lt;br /&gt;
*1) Login as an instructor and create a dummy assignment with 2 rounds of review submissions. Assign 2 teams to that assignment of 1 student each. Also, put the deadline of first review as &amp;quot;1 hour&amp;quot;. Log out&lt;br /&gt;
*2) Login as a student and submit some data for the assignment. Log out.&lt;br /&gt;
*3) Login as the second student and submit the same assignment using dummy data. Log out.&lt;br /&gt;
All the above steps will help us reach towards the section of reviews.&lt;br /&gt;
*4) Login as the first student and go to &amp;quot;Other's work&amp;quot; and request for a review document.By default, you will be assigned the document of the second student to review. Once assigned, complete that review with dummy scores. Log out.&lt;br /&gt;
*5) Login as the second student. Check the review in &amp;quot;Your scores&amp;quot; page and click on the section &amp;quot;Show review&amp;quot;. There you can provide scored feedback to the reviewer. Definitely take into account the tone, solutions suggested and how it will help you. Log out.&lt;br /&gt;
*6) Login as the first student after the deadline for the first review completes. Go to &amp;quot;Other's work&amp;quot; and request for a new submission. You will be assigned the same document of the other student to review for the second round. Follow step 4.&lt;br /&gt;
*7) Login as the second student and follow step 5.&lt;br /&gt;
*8) The system has the data related to author's feedback and the reviewer's data and will calculate the scores of the reviewer according to the ''range of credits'' ( lower range, medium range and higher range) set by the instructor.&lt;br /&gt;
&lt;br /&gt;
*Edge cases - May include options like ''adding a link in the review document by the reviewer'' and seeing how the grade is increased.&lt;br /&gt;
May also take into account the situation when author's feedback isn't available and the score of the reviewer would solely depend on the latter's reviews adn the instructor's jurisdiction because the algorithm in this case would fail.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''References''' ==&lt;br /&gt;
*Expertiza repo : https://github.com/expertiza/expertiza&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1792_OSS_Visualizations_for_instructors&amp;diff=113132</id>
		<title>CSC/ECE 517 Fall 2017/E1792 OSS Visualizations for instructors</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1792_OSS_Visualizations_for_instructors&amp;diff=113132"/>
		<updated>2017-11-13T22:55:33Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page provides a description of the expertiza based project for Fall 2017.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
This project aims to improve the visualizations of certain pages related to reviews and feedback in Expertiza in the instructor's view. This would aid the instructors to judge outcomes of reviews and class performance in assignments via graphs and tables, which in turn would ease the process of grading the reviews.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 1:''' For links in each cell. We are not sure what will happen if we click the link and which page will open.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 2:''' The scale is blue to green, which does not make sense. And colors will change randomly each time loading the page. It will be better to scale from red to green.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 3:''' Two adjacent bar represents the response in round 1 to round k. It makes sense only if the rubrics in all review rounds are all the same. If the instructor implements the vary-rubric-by-round mechanism, this visualization will not make sense.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 4:''' The table is presorted by teams, but you can now also sort alphabetically. The cell view looks way too long, and should be divided into partials.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 5:''' An interactive visualization or table that shows how a class performed on selected rubric criteria would be immensely helpful. It would show me what I need to focus more attention on.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 6:''' Integration of review performance- The basic aim of this implementation is to somehow combine an author’s feedback on a review and the corresponding review of a reviewer, to build a method for grading the reviewers.&lt;br /&gt;
 &lt;br /&gt;
Basic rubrics to be considered:&amp;lt;br&amp;gt;	&lt;br /&gt;
-Number of reviews completed&amp;lt;br&amp;gt;	&lt;br /&gt;
-Length of reviews&amp;lt;br&amp;gt;	&lt;br /&gt;
-Summary of reviews&amp;lt;br&amp;gt;&lt;br /&gt;
-Whether reviewers added a file or link to their review &amp;lt;br&amp;gt;&lt;br /&gt;
-The average ratings they received from the author.&amp;lt;br&amp;gt;&lt;br /&gt;
A graph or table is prefered for easing this change.&amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
== '''Approach to be followed to fix the issues''' ==&lt;br /&gt;
'''Issue 1:''' For links in each cell. We are not sure what will happen if we click the link and which page will open.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 1:''' The issue is about the cell contains link to different pages in expertiza, but there is no way to know which cell is linked to which page. So user don't know the destination page when he/she clicks on some page. So we know that there is link in each cell, so we will show a hover over text displaying the link of the destination page.&lt;br /&gt;
&lt;br /&gt;
'''Issue 2:''' The scale is blue to green, which does not make sense. And colors will change randomly each time loading the page. It will be better to scale from red to green.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 2:''' Here the color coding is blue to green and also it changes randomly. So we will use RBG color coding to make it red to green. We will use percentage to decide color coding. For example if it between 0 - 20% then make it red and so on. This way no matter what scale is being used it will always have appropriate color coding.&lt;br /&gt;
&lt;br /&gt;
'''Issue 3:''' Two adjacent bar represents the response in round 1 to round k. It makes sense only if the rubrics in all review rounds are all the same. If the instructor implements the vary-rubric-by-round mechanism, this visualization will not make sense.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 3:''' Here The problem is that the the review responses show in a grid format that shows all the reviews from round 1 to round n. But this is ok when the rubrics is same for all the rounds. But when the rubric is different from round to round this view doesn't make sense. So what we are thinking is creating different grid for each review round. That will solve the problem for when the rubric is different as well as when the rubric is same.&lt;br /&gt;
&lt;br /&gt;
'''Issue 4:''' The table is presorted by teams, but you can now also sort alphabetically. The cell view looks way too long, and should be divided into partials.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 4:''' Here we can sort the select query with appropriate column alphabetically, or we can sort the table automatically according to user criteria using dynamic table format. And the long view issue can be solved by using paging.&lt;br /&gt;
&lt;br /&gt;
'''Issue 5:''' An interactive visualization or table that shows how a class performed on selected rubric criteria would be immensely helpful. It would show me what I need to focus more attention on. &lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 5 :''' The issue is about getting the performance of the entire class graded using the 5 rubrics criteria.A proposed solution may  be  use the below logic of calculating average grade for each student on all assignments in a particular course  from the controller assessment360_controller.rb&lt;br /&gt;
 &lt;br /&gt;
[[File:scr2.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The average grades of each student can be pulled and then used to plot a bar graph as shown below ( This has been created by using a dummy data ) :-&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Dummydata.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 1 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment1.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 2 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment2.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 3 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment3.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 4 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment4.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 5 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment5.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Average Class performance :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Average.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The work flow can be approximately like the below  diagram :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Workflow.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Issue 6:''' Integration of review performance- The basic aim of this implementation is to somehow combine an author’s feedback on a review and the corresponding review of a reviewer, to build a method for grading the reviewers.&lt;br /&gt;
Basic rubrics to be considered:&amp;lt;br&amp;gt;&lt;br /&gt;
-Number of reviews completed&amp;lt;br&amp;gt;&lt;br /&gt;
-Length of reviews&amp;lt;br&amp;gt;&lt;br /&gt;
-Summary of reviews&amp;lt;br&amp;gt;&lt;br /&gt;
-Whether reviewers added a file or link to their review &amp;lt;br&amp;gt;&lt;br /&gt;
-The average ratings they received from the author.&amp;lt;br&amp;gt;&lt;br /&gt;
-A graph or table is prefered for easing this change.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 9:''' The entire focus is on to what extent a review could help the author. The latter’s feedback is always available in the form of numerical scores. We intend to capture the author’s score of the review topic-wise like that of tone of review, plausible solutions to problems suggested by reviewer and the rate of how much it helped the author to improve(scored by himself). &amp;lt;br&amp;gt;&lt;br /&gt;
-In each round of review done, the author’s feedback is noted topic-wise as suggested in the previous step and ''possibly generate a graph comparing the “n” rounds of reviews''.&amp;lt;br&amp;gt;&lt;br /&gt;
-If reviewer added ''a legit file or link to their review'', then we propose to add a few extra credits to the reviewer that can be added to their final grade.&lt;br /&gt;
The author’s feedback in the form of an average number can be taken and if that value exceeds that of a threshold , then the reviews were really meaningful.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example - &lt;br /&gt;
Consider author’s feedback as follows for 2 rounds of reviews:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ExampleTableForAuthorFeedback.PNG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
Observations: Mean score of round 1 is 3 and Mean score of round 2 is 1.9. &amp;lt;br&amp;gt;&lt;br /&gt;
Suppose , we take into account that Round of 1 has more importance than the second one because it helps a reviewer improve, and also that every reviewer should atleast provide 2 suggestions or comments that help authors improve. Then the threshold value is considered to be 2 and the Mean score of round 1 &amp;gt; threshold. &amp;lt;br&amp;gt;&lt;br /&gt;
Therefore, the reviews were meaningful and deserves a credit in the higher range of grades. If the mean score of round 1 &amp;lt; threshold then the mean score of round 2 is compared with the threshold.  &amp;lt;br&amp;gt;&lt;br /&gt;
		''Overall : Mean round 1&amp;gt; threshold : Higher range of grade to reviewer.&amp;lt;br&amp;gt;&lt;br /&gt;
			  Mean round 1&amp;lt;threshold  : Check if Mean round 2 &amp;gt; threshold &amp;lt;br&amp;gt;&lt;br /&gt;
							If true , Medium range of grade to reviewer.&amp;lt;br&amp;gt;&lt;br /&gt;
							Else , lower range of grades.&amp;lt;br&amp;gt;''&lt;br /&gt;
Now once it’s decided in what range a reviewer deserves credit, The other factors like ''summary of review'' and ''length of review'' are taken into account by the instructors and graded according to the effectiveness of concepts explained in it. Also if a reviewer misses the second round of review then only the first round is taken into consideration. ''The instructor should believe that all but the last round of reviews are crucial to improve a document.''&amp;lt;br&amp;gt;&lt;br /&gt;
'''Graphs:'''Can be generated for comparing the effectiveness of the “n” rounds of reviews for the authors depending on the author’s score. &amp;lt;br&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
In this case - (only an example visualization)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ExampleGraph.PNG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Observations: The graph and table together suggest that round 1 of the review actually had an impact on the author.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Test Plan''' ==&lt;br /&gt;
'''Issue 1:''' Check the link matches to the hover over text&lt;br /&gt;
&lt;br /&gt;
'''Issue 2:''' Check the color coding when different number is given in different scale.&lt;br /&gt;
&lt;br /&gt;
'''Issue 3:''' Enter multiple reviews with different rubric and check different table/grid shows for each review round separately.&lt;br /&gt;
&lt;br /&gt;
'''Issue 4:''' Check if the table is sorted with appropriate column alphabetically&lt;br /&gt;
&lt;br /&gt;
'''Issue 5:'''&lt;br /&gt;
*1) Login as the instructor&lt;br /&gt;
*2) Click on the button to compute graphs&lt;br /&gt;
*3) Compare the bar graphs with separate scores of students in each assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Issue 6:''' Since it is a new algorithm being proposed, we intend to test it first manually using dummy datasets. Later on, automated test cases can be added for the same.&lt;br /&gt;
*1) Login as an instructor and create a dummy assignment with 2 rounds of review submissions. Assign 2 teams to that assignment of 1 student each. Also, put the deadline of first review as &amp;quot;1 hour&amp;quot;. Log out&lt;br /&gt;
*2) Login as a student and submit some data for the assignment. Log out.&lt;br /&gt;
*3) Login as the second student and submit the same assignment using dummy data. Log out.&lt;br /&gt;
All the above steps will help us reach towards the section of reviews.&lt;br /&gt;
*4) Login as the first student and go to &amp;quot;Other's work&amp;quot; and request for a review document.By default, you will be assigned the document of the second student to review. Once assigned, complete that review with dummy scores. Log out.&lt;br /&gt;
*5) Login as the second student. Check the review in &amp;quot;Your scores&amp;quot; page and click on the section &amp;quot;Show review&amp;quot;. There you can provide scored feedback to the reviewer. Definitely take into account the tone, solutions suggested and how it will help you. Log out.&lt;br /&gt;
*6) Login as the first student after the deadline for the first review completes. Go to &amp;quot;Other's work&amp;quot; and request for a new submission. You will be assigned the same document of the other student to review for the second round. Follow step 4.&lt;br /&gt;
*7) Login as the second student and follow step 5.&lt;br /&gt;
*8) The system has the data related to author's feedback and the reviewer's data and will calculate the scores of the reviewer according to the ''range of credits'' ( lower range, medium range and higher range) set by the instructor.&lt;br /&gt;
&lt;br /&gt;
*Edge cases - May include options like ''adding a link in the review document by the reviewer'' and seeing how the grade is increased.&lt;br /&gt;
May also take into account the situation when author's feedback isn't available and the score of the reviewer would solely depend on the latter's reviews adn the instructor's jurisdiction because the algorithm in this case would fail.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''References''' ==&lt;br /&gt;
*Expertiza repo : https://github.com/expertiza/expertiza&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1792_OSS_Visualizations_for_instructors&amp;diff=113131</id>
		<title>CSC/ECE 517 Fall 2017/E1792 OSS Visualizations for instructors</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1792_OSS_Visualizations_for_instructors&amp;diff=113131"/>
		<updated>2017-11-13T22:54:43Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page provides a description of the expertiza based project for Fall 2017.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
This project aims to improve the visualizations of certain pages related to reviews and feedback in Expertiza in the instructor's view. This would aid the instructors to judge outcomes of reviews and class performance in assignments via graphs and tables, which in turn would ease the process of grading the reviews.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 1:''' For links in each cell. We are not sure what will happen if we click the link and which page will open.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 2:''' The scale is blue to green, which does not make sense. And colors will change randomly each time loading the page. It will be better to scale from red to green.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 3:''' Two adjacent bar represents the response in round 1 to round k. It makes sense only if the rubrics in all review rounds are all the same. If the instructor implements the vary-rubric-by-round mechanism, this visualization will not make sense.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 4:''' The table is presorted by teams, but you can now also sort alphabetically. The cell view looks way too long, and should be divided into partials.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 5:''' An interactive visualization or table that shows how a class performed on selected rubric criteria would be immensely helpful. It would show me what I need to focus more attention on.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 6:''' Integration of review performance- The basic aim of this implementation is to somehow combine an author’s feedback on a review and the corresponding review of a reviewer, to build a method for grading the reviewers.&lt;br /&gt;
 &lt;br /&gt;
Basic rubrics to be considered:&amp;lt;br&amp;gt;	&lt;br /&gt;
-Number of reviews completed&amp;lt;br&amp;gt;	&lt;br /&gt;
-Length of reviews&amp;lt;br&amp;gt;	&lt;br /&gt;
-Summary of reviews&amp;lt;br&amp;gt;&lt;br /&gt;
-Whether reviewers added a file or link to their review &amp;lt;br&amp;gt;&lt;br /&gt;
-The average ratings they received from the author.&amp;lt;br&amp;gt;&lt;br /&gt;
A graph or table is prefered for easing this change.&amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
== '''Issue Statements &amp;amp; Approach to be followed''' ==&lt;br /&gt;
'''Issue 1:''' For links in each cell. We are not sure what will happen if we click the link and which page will open.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 1:''' The issue is about the cell contains link to different pages in expertiza, but there is no way to know which cell is linked to which page. So user don't know the destination page when he/she clicks on some page. So we know that there is link in each cell, so we will show a hover over text displaying the link of the destination page.&lt;br /&gt;
&lt;br /&gt;
'''Issue 2:''' The scale is blue to green, which does not make sense. And colors will change randomly each time loading the page. It will be better to scale from red to green.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 2:''' Here the color coding is blue to green and also it changes randomly. So we will use RBG color coding to make it red to green. We will use percentage to decide color coding. For example if it between 0 - 20% then make it red and so on. This way no matter what scale is being used it will always have appropriate color coding.&lt;br /&gt;
&lt;br /&gt;
'''Issue 3:''' Two adjacent bar represents the response in round 1 to round k. It makes sense only if the rubrics in all review rounds are all the same. If the instructor implements the vary-rubric-by-round mechanism, this visualization will not make sense.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 3:''' Here The problem is that the the review responses show in a grid format that shows all the reviews from round 1 to round n. But this is ok when the rubrics is same for all the rounds. But when the rubric is different from round to round this view doesn't make sense. So what we are thinking is creating different grid for each review round. That will solve the problem for when the rubric is different as well as when the rubric is same.&lt;br /&gt;
&lt;br /&gt;
'''Issue 4:''' The table is presorted by teams, but you can now also sort alphabetically. The cell view looks way too long, and should be divided into partials.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 4:''' Here we can sort the select query with appropriate column alphabetically, or we can sort the table automatically according to user criteria using dynamic table format. And the long view issue can be solved by using paging.&lt;br /&gt;
&lt;br /&gt;
'''Issue 5:''' An interactive visualization or table that shows how a class performed on selected rubric criteria would be immensely helpful. It would show me what I need to focus more attention on. &lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 5 :''' The issue is about getting the performance of the entire class graded using the 5 rubrics criteria.A proposed solution may  be  use the below logic of calculating average grade for each student on all assignments in a particular course  from the controller assessment360_controller.rb&lt;br /&gt;
 &lt;br /&gt;
[[File:scr2.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The average grades of each student can be pulled and then used to plot a bar graph as shown below ( This has been created by using a dummy data ) :-&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Dummydata.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 1 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment1.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 2 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment2.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 3 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment3.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 4 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment4.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 5 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment5.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Average Class performance :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Average.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The work flow can be approximately like the below  diagram :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Workflow.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Issue 6:''' Integration of review performance- The basic aim of this implementation is to somehow combine an author’s feedback on a review and the corresponding review of a reviewer, to build a method for grading the reviewers.&lt;br /&gt;
Basic rubrics to be considered:&amp;lt;br&amp;gt;&lt;br /&gt;
-Number of reviews completed&amp;lt;br&amp;gt;&lt;br /&gt;
-Length of reviews&amp;lt;br&amp;gt;&lt;br /&gt;
-Summary of reviews&amp;lt;br&amp;gt;&lt;br /&gt;
-Whether reviewers added a file or link to their review &amp;lt;br&amp;gt;&lt;br /&gt;
-The average ratings they received from the author.&amp;lt;br&amp;gt;&lt;br /&gt;
-A graph or table is prefered for easing this change.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 9:''' The entire focus is on to what extent a review could help the author. The latter’s feedback is always available in the form of numerical scores. We intend to capture the author’s score of the review topic-wise like that of tone of review, plausible solutions to problems suggested by reviewer and the rate of how much it helped the author to improve(scored by himself). &amp;lt;br&amp;gt;&lt;br /&gt;
-In each round of review done, the author’s feedback is noted topic-wise as suggested in the previous step and ''possibly generate a graph comparing the “n” rounds of reviews''.&amp;lt;br&amp;gt;&lt;br /&gt;
-If reviewer added ''a legit file or link to their review'', then we propose to add a few extra credits to the reviewer that can be added to their final grade.&lt;br /&gt;
The author’s feedback in the form of an average number can be taken and if that value exceeds that of a threshold , then the reviews were really meaningful.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example - &lt;br /&gt;
Consider author’s feedback as follows for 2 rounds of reviews:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ExampleTableForAuthorFeedback.PNG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
Observations: Mean score of round 1 is 3 and Mean score of round 2 is 1.9. &amp;lt;br&amp;gt;&lt;br /&gt;
Suppose , we take into account that Round of 1 has more importance than the second one because it helps a reviewer improve, and also that every reviewer should atleast provide 2 suggestions or comments that help authors improve. Then the threshold value is considered to be 2 and the Mean score of round 1 &amp;gt; threshold. &amp;lt;br&amp;gt;&lt;br /&gt;
Therefore, the reviews were meaningful and deserves a credit in the higher range of grades. If the mean score of round 1 &amp;lt; threshold then the mean score of round 2 is compared with the threshold.  &amp;lt;br&amp;gt;&lt;br /&gt;
		''Overall : Mean round 1&amp;gt; threshold : Higher range of grade to reviewer.&amp;lt;br&amp;gt;&lt;br /&gt;
			  Mean round 1&amp;lt;threshold  : Check if Mean round 2 &amp;gt; threshold &amp;lt;br&amp;gt;&lt;br /&gt;
							If true , Medium range of grade to reviewer.&amp;lt;br&amp;gt;&lt;br /&gt;
							Else , lower range of grades.&amp;lt;br&amp;gt;''&lt;br /&gt;
Now once it’s decided in what range a reviewer deserves credit, The other factors like ''summary of review'' and ''length of review'' are taken into account by the instructors and graded according to the effectiveness of concepts explained in it. Also if a reviewer misses the second round of review then only the first round is taken into consideration. ''The instructor should believe that all but the last round of reviews are crucial to improve a document.''&amp;lt;br&amp;gt;&lt;br /&gt;
'''Graphs:'''Can be generated for comparing the effectiveness of the “n” rounds of reviews for the authors depending on the author’s score. &amp;lt;br&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
In this case - (only an example visualization)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ExampleGraph.PNG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Observations: The graph and table together suggest that round 1 of the review actually had an impact on the author.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Test Plan''' ==&lt;br /&gt;
'''Issue 1:''' Check the link matches to the hover over text&lt;br /&gt;
&lt;br /&gt;
'''Issue 2:''' Check the color coding when different number is given in different scale.&lt;br /&gt;
&lt;br /&gt;
'''Issue 3:''' Enter multiple reviews with different rubric and check different table/grid shows for each review round separately.&lt;br /&gt;
&lt;br /&gt;
'''Issue 4:''' Check if the table is sorted with appropriate column alphabetically&lt;br /&gt;
&lt;br /&gt;
'''Issue 5:'''&lt;br /&gt;
*1) Login as the instructor&lt;br /&gt;
*2) Click on the button to compute graphs&lt;br /&gt;
*3) Compare the bar graphs with separate scores of students in each assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Issue 6:''' Since it is a new algorithm being proposed, we intend to test it first manually using dummy datasets. Later on, automated test cases can be added for the same.&lt;br /&gt;
*1) Login as an instructor and create a dummy assignment with 2 rounds of review submissions. Assign 2 teams to that assignment of 1 student each. Also, put the deadline of first review as &amp;quot;1 hour&amp;quot;. Log out&lt;br /&gt;
*2) Login as a student and submit some data for the assignment. Log out.&lt;br /&gt;
*3) Login as the second student and submit the same assignment using dummy data. Log out.&lt;br /&gt;
All the above steps will help us reach towards the section of reviews.&lt;br /&gt;
*4) Login as the first student and go to &amp;quot;Other's work&amp;quot; and request for a review document.By default, you will be assigned the document of the second student to review. Once assigned, complete that review with dummy scores. Log out.&lt;br /&gt;
*5) Login as the second student. Check the review in &amp;quot;Your scores&amp;quot; page and click on the section &amp;quot;Show review&amp;quot;. There you can provide scored feedback to the reviewer. Definitely take into account the tone, solutions suggested and how it will help you. Log out.&lt;br /&gt;
*6) Login as the first student after the deadline for the first review completes. Go to &amp;quot;Other's work&amp;quot; and request for a new submission. You will be assigned the same document of the other student to review for the second round. Follow step 4.&lt;br /&gt;
*7) Login as the second student and follow step 5.&lt;br /&gt;
*8) The system has the data related to author's feedback and the reviewer's data and will calculate the scores of the reviewer according to the ''range of credits'' ( lower range, medium range and higher range) set by the instructor.&lt;br /&gt;
&lt;br /&gt;
*Edge cases - May include options like ''adding a link in the review document by the reviewer'' and seeing how the grade is increased.&lt;br /&gt;
May also take into account the situation when author's feedback isn't available and the score of the reviewer would solely depend on the latter's reviews adn the instructor's jurisdiction because the algorithm in this case would fail.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''References''' ==&lt;br /&gt;
*Expertiza repo : https://github.com/expertiza/expertiza&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1792_OSS_Visualizations_for_instructors&amp;diff=113130</id>
		<title>CSC/ECE 517 Fall 2017/E1792 OSS Visualizations for instructors</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1792_OSS_Visualizations_for_instructors&amp;diff=113130"/>
		<updated>2017-11-13T22:54:13Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page provides a description of the expertiza based project for Fall 2017.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
This project aims to improve the visualizations of certain pages related to reviews and feedback in Expertiza in the instructor's view. This would aid the instructors to judge outcomes of reviews and class performance in assignments via graphs and tables, which in turn would ease the process of grading the reviews.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 1:''' For links in each cell. We are not sure what will happen if we click the link and which page will open.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 2:''' The scale is blue to green, which does not make sense. And colors will change randomly each time loading the page. It will be better to scale from red to green.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 3:''' Two adjacent bar represents the response in round 1 to round k. It makes sense only if the rubrics in all review rounds are all the same. If the instructor implements the vary-rubric-by-round mechanism, this visualization will not make sense.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 4:''' The table is presorted by teams, but you can now also sort alphabetically. The cell view looks way too long, and should be divided into partials.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 5:''' An interactive visualization or table that shows how a class performed on selected rubric criteria would be immensely helpful. It would show me what I need to focus more attention on.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 6:''' Integration of review performance- The basic aim of this implementation is to somehow combine an author’s feedback on a review and the corresponding review of a reviewer, to build a method for grading the reviewers.&lt;br /&gt;
 &lt;br /&gt;
Basic rubrics to be considered:&amp;lt;br&amp;gt;	&lt;br /&gt;
-Number of reviews completed&amp;lt;br&amp;gt;	&lt;br /&gt;
-Length of reviews&amp;lt;br&amp;gt;	&lt;br /&gt;
-Summary of reviews&amp;lt;br&amp;gt;&lt;br /&gt;
-Whether reviewers added a file or link to their review &amp;lt;br&amp;gt;&lt;br /&gt;
-The average ratings they received from the author.&amp;lt;br&amp;gt;&lt;br /&gt;
A graph or table is prefered for easing this change.&amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
== '''Issue Statements &amp;amp; Approach to be followed''' ==&lt;br /&gt;
'''Issue 1:''' For links in each cell. We are not sure what will happen if we click the link and which page will open.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 1:''' The issue is about the cell contains link to different pages in expertiza, but there is no way to know which cell is linked to which page. So user don't know the destination page when he/she clicks on some page. So we know that there is link in each cell, so we will show a hover over text displaying the link of the destination page.&lt;br /&gt;
&lt;br /&gt;
'''Issue 2:''' The scale is blue to green, which does not make sense. And colors will change randomly each time loading the page. It will be better to scale from red to green.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 2:''' Here the color coding is blue to green and also it changes randomly. So we will use RBG color coding to make it red to green. We will use percentage to decide color coding. For example if it between 0 - 20% then make it red and so on. This way no matter what scale is being used it will always have appropriate color coding.&lt;br /&gt;
&lt;br /&gt;
'''Issue 3:''' Two adjacent bar represents the response in round 1 to round k. It makes sense only if the rubrics in all review rounds are all the same. If the instructor implements the vary-rubric-by-round mechanism, this visualization will not make sense.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 3:''' Here The problem is that the the review responses show in a grid format that shows all the reviews from round 1 to round n. But this is ok when the rubrics is same for all the rounds. But when the rubric is different from round to round this view doesn't make sense. So what we are thinking is creating different grid for each review round. That will solve the problem for when the rubric is different as well as when the rubric is same.&lt;br /&gt;
&lt;br /&gt;
'''Issue 4:''' The table is presorted by teams, but you can now also sort alphabetically. The cell view looks way too long, and should be divided into partials.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 4:''' Here we can sort the select query with appropriate column alphabetically, or we can sort the table automatically according to user criteria using dynamic table format. And the long view issue can be solved by using paging.&lt;br /&gt;
&lt;br /&gt;
'''Issue 5:''' An interactive visualization or table that shows how a class performed on selected rubric criteria would be immensely helpful. It would show me what I need to focus more attention on. &lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 5 :''' The issue is about getting the performance of the entire class graded using the 5 rubrics criteria.A proposed solution may  be  use the below logic of calculating average grade for each student on all assignments in a particular course  from the controller assessment360_controller.rb&lt;br /&gt;
 &lt;br /&gt;
[[File:scr2.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The average grades of each student can be pulled and then used to plot a bar graph as shown below ( This has been created by using a dummy data ) :-&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Dummydata.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 1 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment1.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 2 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment2.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 3 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment3.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 4 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment4.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 5 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment5.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Average Class performance :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Average.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The work flow can be approximately like the below  diagram :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Workflow.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Issue 6:''' Integration of review performance- The basic aim of this implementation is to somehow combine an author’s feedback on a review and the corresponding review of a reviewer, to build a method for grading the reviewers.&lt;br /&gt;
Basic rubrics to be considered:&amp;lt;br&amp;gt;&lt;br /&gt;
-Number of reviews completed&amp;lt;br&amp;gt;&lt;br /&gt;
-Length of reviews&amp;lt;br&amp;gt;&lt;br /&gt;
-Summary of reviews&amp;lt;br&amp;gt;&lt;br /&gt;
-Whether reviewers added a file or link to their review &amp;lt;br&amp;gt;&lt;br /&gt;
-The average ratings they received from the author.&amp;lt;br&amp;gt;&lt;br /&gt;
-A graph or table is prefered for easing this change.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 9:''' The entire focus is on to what extent a review could help the author. The latter’s feedback is always available in the form of numerical scores. We intend to capture the author’s score of the review topic-wise like that of tone of review, plausible solutions to problems suggested by reviewer and the rate of how much it helped the author to improve(scored by himself). &amp;lt;br&amp;gt;&lt;br /&gt;
-In each round of review done, the author’s feedback is noted topic-wise as suggested in the previous step and ''possibly generate a graph comparing the “n” rounds of reviews''.&amp;lt;br&amp;gt;&lt;br /&gt;
-If reviewer added ''a legit file or link to their review'', then we propose to add a few extra credits to the reviewer that can be added to their final grade.&lt;br /&gt;
The author’s feedback in the form of an average number can be taken and if that value exceeds that of a threshold , then the reviews were really meaningful.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example - &lt;br /&gt;
Consider author’s feedback as follows for 2 rounds of reviews:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ExampleTableForAuthorFeedback.PNG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
Observations: Mean score of round 1 is 3 and Mean score of round 2 is 1.9. &amp;lt;br&amp;gt;&lt;br /&gt;
Suppose , we take into account that Round of 1 has more importance than the second one because it helps a reviewer improve, and also that every reviewer should atleast provide 2 suggestions or comments that help authors improve. Then the threshold value is considered to be 2 and the Mean score of round 1 &amp;gt; threshold. &amp;lt;br&amp;gt;&lt;br /&gt;
Therefore, the reviews were meaningful and deserves a credit in the higher range of grades. If the mean score of round 1 &amp;lt; threshold then the mean score of round 2 is compared with the threshold.  &amp;lt;br&amp;gt;&lt;br /&gt;
		''Overall : Mean round 1&amp;gt; threshold : Higher range of grade to reviewer.&amp;lt;br&amp;gt;&lt;br /&gt;
			  Mean round 1&amp;lt;threshold  : Check if Mean round 2 &amp;gt; threshold &amp;lt;br&amp;gt;&lt;br /&gt;
							If true , Medium range of grade to reviewer.&amp;lt;br&amp;gt;&lt;br /&gt;
							Else , lower range of grades.&amp;lt;br&amp;gt;''&lt;br /&gt;
Now once it’s decided in what range a reviewer deserves credit, The other factors like ''summary of review'' and ''length of review'' are taken into account by the instructors and graded according to the effectiveness of concepts explained in it. Also if a reviewer misses the second round of review then only the first round is taken into consideration. ''The instructor should believe that all but the last round of reviews are crucial to improve a document.''&amp;lt;br&amp;gt;&lt;br /&gt;
'''Graphs:'''Can be generated for comparing the effectiveness of the “n” rounds of reviews for the authors depending on the author’s score. &amp;lt;br&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
In this case - (only an example visualization)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ExampleGraph.PNG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Observations: The graph and table together suggest that round 1 of the review actually had an impact on the author.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Test Plan''' ==&lt;br /&gt;
'''Issue 1:''' Check the link matches to the hover over text&lt;br /&gt;
&lt;br /&gt;
'''Issue 2:''' Check the color coding when different number is given in different scale.&lt;br /&gt;
&lt;br /&gt;
'''Issue 3:''' Enter multiple reviews with different rubric and check different table/grid shows for each review round separately.&lt;br /&gt;
&lt;br /&gt;
'''Issue 4:''' Check if the table is sorted with appropriate column alphabetically&lt;br /&gt;
&lt;br /&gt;
'''Issue 5:'''&lt;br /&gt;
*1) Login as the instructor&lt;br /&gt;
*2) Click on the button to compute graphs&lt;br /&gt;
*3) Compare the bar graphs with separate scores of students in each assignments.&lt;br /&gt;
&lt;br /&gt;
'''Issue 6:'''&lt;br /&gt;
*1) Login as an instructor.&lt;br /&gt;
*2) Go to the 'Review Summary' page for an assignment.&lt;br /&gt;
*3) The instructor will now be able to see the name of the assignment as a heading. Also, the name of students will now be displayed beside their student id.&lt;br /&gt;
&lt;br /&gt;
'''Issue 7:'''&lt;br /&gt;
*1) Login as instructor.&lt;br /&gt;
*2) Go to the 'Review Summary' page for an assignment.&lt;br /&gt;
*3) Click on the reputation scores.&lt;br /&gt;
*4) The instructor will now be able to see individual reputation scores of the students for that assignment as well as a graphical representation of the reputation scores of all the students enrolled in the exercise.&lt;br /&gt;
&lt;br /&gt;
'''Issue 8:'''&lt;br /&gt;
*1) Login as instructor and create an assignment with 3 rounds of submissions. Enroll few students in the assignment.&lt;br /&gt;
*2) Impersonate at least three students.&lt;br /&gt;
*3) For first student, say 'A', just submit for the first round.&lt;br /&gt;
*4) For second student, say 'B', submit the assignment for first round and then resubmit it for second round.&lt;br /&gt;
*5) For third student, say 'C', submit the assignment for the first round, second round and third round.&lt;br /&gt;
*6) Now, login again as instructor and go to the review submissions page to view submissions of students. You can now see that for 'A', the submission link appears in black font with no background color, for 'B', the submission link appears with a red background color of 50% intensity, and for 'C', the submission link appears with a red background color of 100% intensity.&lt;br /&gt;
*7) Also, the color code is mentioned at the end of the page which clearly indicates the usage of background color-code to represent the number of times the project was submitted all together by any student.&lt;br /&gt;
&lt;br /&gt;
'''Issue 9:''' Since it is a new algorithm being proposed, we intend to test it first manually using dummy datasets. Later on, automated test cases can be added for the same.&lt;br /&gt;
*1) Login as an instructor and create a dummy assignment with 2 rounds of review submissions. Assign 2 teams to that assignment of 1 student each. Also, put the deadline of first review as &amp;quot;1 hour&amp;quot;. Log out&lt;br /&gt;
*2) Login as a student and submit some data for the assignment. Log out.&lt;br /&gt;
*3) Login as the second student and submit the same assignment using dummy data. Log out.&lt;br /&gt;
All the above steps will help us reach towards the section of reviews.&lt;br /&gt;
*4) Login as the first student and go to &amp;quot;Other's work&amp;quot; and request for a review document.By default, you will be assigned the document of the second student to review. Once assigned, complete that review with dummy scores. Log out.&lt;br /&gt;
*5) Login as the second student. Check the review in &amp;quot;Your scores&amp;quot; page and click on the section &amp;quot;Show review&amp;quot;. There you can provide scored feedback to the reviewer. Definitely take into account the tone, solutions suggested and how it will help you. Log out.&lt;br /&gt;
*6) Login as the first student after the deadline for the first review completes. Go to &amp;quot;Other's work&amp;quot; and request for a new submission. You will be assigned the same document of the other student to review for the second round. Follow step 4.&lt;br /&gt;
*7) Login as the second student and follow step 5.&lt;br /&gt;
*8) The system has the data related to author's feedback and the reviewer's data and will calculate the scores of the reviewer according to the ''range of credits'' ( lower range, medium range and higher range) set by the instructor.&lt;br /&gt;
&lt;br /&gt;
*Edge cases - May include options like ''adding a link in the review document by the reviewer'' and seeing how the grade is increased.&lt;br /&gt;
May also take into account the situation when author's feedback isn't available and the score of the reviewer would solely depend on the latter's reviews adn the instructor's jurisdiction because the algorithm in this case would fail.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''References''' ==&lt;br /&gt;
*Expertiza repo : https://github.com/expertiza/expertiza&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1792_OSS_Visualizations_for_instructors&amp;diff=113129</id>
		<title>CSC/ECE 517 Fall 2017/E1792 OSS Visualizations for instructors</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1792_OSS_Visualizations_for_instructors&amp;diff=113129"/>
		<updated>2017-11-13T22:51:39Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page provides a description of the expertiza based project for Fall 2017.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
This project aims to improve the visualizations of certain pages related to reviews and feedback in Expertiza in the instructor's view. This would aid the instructors to judge outcomes of reviews and class performance in assignments via graphs and tables, which in turn would ease the process of grading the reviews.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 1:''' For links in each cell. We are not sure what will happen if we click the link and which page will open.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 2:''' The scale is blue to green, which does not make sense. And colors will change randomly each time loading the page. It will be better to scale from red to green.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 3:''' Two adjacent bar represents the response in round 1 to round k. It makes sense only if the rubrics in all review rounds are all the same. If the instructor implements the vary-rubric-by-round mechanism, this visualization will not make sense.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 4:''' The table is presorted by teams, but you can now also sort alphabetically. The cell view looks way too long, and should be divided into partials.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 5:''' An interactive visualization or table that shows how a class performed on selected rubric criteria would be immensely helpful. It would show me what I need to focus more attention on.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 6:''' Integration of review performance- The basic aim of this implementation is to somehow combine an author’s feedback on a review and the corresponding review of a reviewer, to build a method for grading the reviewers.&lt;br /&gt;
 &lt;br /&gt;
Basic rubrics to be considered:&amp;lt;br&amp;gt;	&lt;br /&gt;
-Number of reviews completed&amp;lt;br&amp;gt;	&lt;br /&gt;
-Length of reviews&amp;lt;br&amp;gt;	&lt;br /&gt;
-Summary of reviews&amp;lt;br&amp;gt;&lt;br /&gt;
-Whether reviewers added a file or link to their review &amp;lt;br&amp;gt;&lt;br /&gt;
-The average ratings they received from the author.&amp;lt;br&amp;gt;&lt;br /&gt;
A graph or table is prefered for easing this change.&amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
== '''Issue Statements &amp;amp; Approach to be followed''' ==&lt;br /&gt;
'''Issue 1:''' For links in each cell. We are not sure what will happen if we click the link and which page will open.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 1:''' The issue is about the cell contains link to different pages in expertiza, but there is no way to know which cell is linked to which page. So user don't know the destination page when he/she clicks on some page. So we know that there is link in each cell, so we will show a hover over text displaying the link of the destination page.&lt;br /&gt;
&lt;br /&gt;
'''Issue 2:''' The scale is blue to green, which does not make sense. And colors will change randomly each time loading the page. It will be better to scale from red to green.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 2:''' Here the color coding is blue to green and also it changes randomly. So we will use RBG color coding to make it red to green. We will use percentage to decide color coding. For example if it between 0 - 20% then make it red and so on. This way no matter what scale is being used it will always have appropriate color coding.&lt;br /&gt;
&lt;br /&gt;
'''Issue 3:''' Two adjacent bar represents the response in round 1 to round k. It makes sense only if the rubrics in all review rounds are all the same. If the instructor implements the vary-rubric-by-round mechanism, this visualization will not make sense.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 3:''' Here The problem is that the the review responses show in a grid format that shows all the reviews from round 1 to round n. But this is ok when the rubrics is same for all the rounds. But when the rubric is different from round to round this view doesn't make sense. So what we are thinking is creating different grid for each review round. That will solve the problem for when the rubric is different as well as when the rubric is same.&lt;br /&gt;
&lt;br /&gt;
'''Issue 4:''' The table is presorted by teams, but you can now also sort alphabetically. The cell view looks way too long, and should be divided into partials.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 4:''' Here we can sort the select query with appropriate column alphabetically, or we can sort the table automatically according to user criteria using dynamic table format. And the long view issue can be solved by using paging.&lt;br /&gt;
&lt;br /&gt;
'''Issue 5:''' An interactive visualization or table that shows how a class performed on selected rubric criteria would be immensely helpful. It would show me what I need to focus more attention on. &lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 5 :''' The issue is about getting the performance of the entire class graded using the 5 rubrics criteria.A proposed solution may  be  use the below logic of calculating average grade for each student on all assignments in a particular course  from the controller assessment360_controller.rb&lt;br /&gt;
 &lt;br /&gt;
[[File:scr2.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The average grades of each student can be pulled and then used to plot a bar graph as shown below ( This has been created by using a dummy data ) :-&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Dummydata.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 1 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment1.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 2 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment2.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 3 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment3.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 4 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment4.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 5 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment5.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Average Class performance :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Average.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The work flow can be approximately like the below  diagram :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Workflow.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Issue 6:''' In the 'Review Summary' page for an assignment, currently there is no header indicating the name of the assignment. Also the page has review information for enrolled students. Currently, only student ids are displayed, which make it difficult to make out which student the information corresponds to. Extra white-space around checkboxes.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 6:''' We will modify the view to show the heading for the assignment. Also, we will include the student name along with their id. We will use a method to truncate extra white-spaces around checkboxes before rendering the view.&lt;br /&gt;
&lt;br /&gt;
'''Issue 7:''' Currently, the reputation scores are not set. They show up as 0.0 for all students.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 7:''' The method to calculate the reputation scores is not being called. We will call that method in the corresponding controller and deliver the computed reputation score(s) to a view where it can be displayed. Also, once we have this data, we will display the reputation scores of all students for an assignment graphically to enable easy visualization for the instructor. This view can be accessed by a link/button (which we will add) on the ‘review summary’ page.&lt;br /&gt;
&lt;br /&gt;
'''Issue 8:''' Currently, the instructor doesn't come to know which submission has not been updated since the previous review.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 8:''' For n rounds of submissions, we can take a color (say red) as a background highlighter, and vary (say increase) it's intensity by a percentage of 100/(n-1) on every submission update. And this color code will be mentioned on the corresponding view. This will enable the instructor to quickly make out whether a student has updated/resubmitted the submission.&lt;br /&gt;
For example, if a project has 3 rounds of submissions, then n=3. Initially there will be no background color. When a student submits for the first time, the submission link will be shown in black font with no background color. After round 1 reviews, there will be time for second submission, in which the students can resubmit the updated version of their project based on the reviews. If a student resubmits the project, the submission link will now have a red background color of 50% intensity. The submission link for the students who did not resubmit/update their submission would remain as it was earlier, that is, without any background color. After this, there will be another round of reviews. After round 2 reviews, it will be time for third submission (which is the final submission in this case). If a student resubmits the project, the submission link will now have a background color of 100% intensity. The submission link for the students who did not resubmit/update their submission would remain as it was earlier. That is, for students who submitted the project only once and did not resubmit thereafter, there will be no background color of the submission link. For students, who resubmitted the project only once after the first submission, the background color of the submission link will have 50% intensity and for the students who resubmitted the project twice (as was expected) will have 100% intensity.&lt;br /&gt;
&lt;br /&gt;
Pseudocode:&lt;br /&gt;
&lt;br /&gt;
   Let n be total rounds of submission for the project&lt;br /&gt;
   For i from 2 to n&lt;br /&gt;
    Increase the intensity of background color red (R,0,0) by 100/(n-1) percent&lt;br /&gt;
&lt;br /&gt;
'''Issue 9:''' Integration of review performance- The basic aim of this implementation is to somehow combine an author’s feedback on a review and the corresponding review of a reviewer, to build a method for grading the reviewers.&lt;br /&gt;
Basic rubrics to be considered:&amp;lt;br&amp;gt;&lt;br /&gt;
-Number of reviews completed&amp;lt;br&amp;gt;&lt;br /&gt;
-Length of reviews&amp;lt;br&amp;gt;&lt;br /&gt;
-Summary of reviews&amp;lt;br&amp;gt;&lt;br /&gt;
-Whether reviewers added a file or link to their review &amp;lt;br&amp;gt;&lt;br /&gt;
-The average ratings they received from the author.&amp;lt;br&amp;gt;&lt;br /&gt;
-A graph or table is prefered for easing this change.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 9:''' The entire focus is on to what extent a review could help the author. The latter’s feedback is always available in the form of numerical scores. We intend to capture the author’s score of the review topic-wise like that of tone of review, plausible solutions to problems suggested by reviewer and the rate of how much it helped the author to improve(scored by himself). &amp;lt;br&amp;gt;&lt;br /&gt;
-In each round of review done, the author’s feedback is noted topic-wise as suggested in the previous step and ''possibly generate a graph comparing the “n” rounds of reviews''.&amp;lt;br&amp;gt;&lt;br /&gt;
-If reviewer added ''a legit file or link to their review'', then we propose to add a few extra credits to the reviewer that can be added to their final grade.&lt;br /&gt;
The author’s feedback in the form of an average number can be taken and if that value exceeds that of a threshold , then the reviews were really meaningful.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example - &lt;br /&gt;
Consider author’s feedback as follows for 2 rounds of reviews:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ExampleTableForAuthorFeedback.PNG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
Observations: Mean score of round 1 is 3 and Mean score of round 2 is 1.9. &amp;lt;br&amp;gt;&lt;br /&gt;
Suppose , we take into account that Round of 1 has more importance than the second one because it helps a reviewer improve, and also that every reviewer should atleast provide 2 suggestions or comments that help authors improve. Then the threshold value is considered to be 2 and the Mean score of round 1 &amp;gt; threshold. &amp;lt;br&amp;gt;&lt;br /&gt;
Therefore, the reviews were meaningful and deserves a credit in the higher range of grades. If the mean score of round 1 &amp;lt; threshold then the mean score of round 2 is compared with the threshold.  &amp;lt;br&amp;gt;&lt;br /&gt;
		''Overall : Mean round 1&amp;gt; threshold : Higher range of grade to reviewer.&amp;lt;br&amp;gt;&lt;br /&gt;
			  Mean round 1&amp;lt;threshold  : Check if Mean round 2 &amp;gt; threshold &amp;lt;br&amp;gt;&lt;br /&gt;
							If true , Medium range of grade to reviewer.&amp;lt;br&amp;gt;&lt;br /&gt;
							Else , lower range of grades.&amp;lt;br&amp;gt;''&lt;br /&gt;
Now once it’s decided in what range a reviewer deserves credit, The other factors like ''summary of review'' and ''length of review'' are taken into account by the instructors and graded according to the effectiveness of concepts explained in it. Also if a reviewer misses the second round of review then only the first round is taken into consideration. ''The instructor should believe that all but the last round of reviews are crucial to improve a document.''&amp;lt;br&amp;gt;&lt;br /&gt;
'''Graphs:'''Can be generated for comparing the effectiveness of the “n” rounds of reviews for the authors depending on the author’s score. &amp;lt;br&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
In this case - (only an example visualization)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ExampleGraph.PNG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Observations: The graph and table together suggest that round 1 of the review actually had an impact on the author.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Test Plan''' ==&lt;br /&gt;
'''Issue 1:''' Check the link matches to the hover over text&lt;br /&gt;
&lt;br /&gt;
'''Issue 2:''' Check the color coding when different number is given in different scale.&lt;br /&gt;
&lt;br /&gt;
'''Issue 3:''' Enter multiple reviews with different rubric and check different table/grid shows for each review round separately.&lt;br /&gt;
&lt;br /&gt;
'''Issue 4:''' Check if the table is sorted with appropriate column alphabetically&lt;br /&gt;
&lt;br /&gt;
'''Issue 5:'''&lt;br /&gt;
*1) Login as the instructor&lt;br /&gt;
*2) Click on the button to compute graphs&lt;br /&gt;
*3) Compare the bar graphs with separate scores of students in each assignments.&lt;br /&gt;
&lt;br /&gt;
'''Issue 6:'''&lt;br /&gt;
*1) Login as an instructor.&lt;br /&gt;
*2) Go to the 'Review Summary' page for an assignment.&lt;br /&gt;
*3) The instructor will now be able to see the name of the assignment as a heading. Also, the name of students will now be displayed beside their student id.&lt;br /&gt;
&lt;br /&gt;
'''Issue 7:'''&lt;br /&gt;
*1) Login as instructor.&lt;br /&gt;
*2) Go to the 'Review Summary' page for an assignment.&lt;br /&gt;
*3) Click on the reputation scores.&lt;br /&gt;
*4) The instructor will now be able to see individual reputation scores of the students for that assignment as well as a graphical representation of the reputation scores of all the students enrolled in the exercise.&lt;br /&gt;
&lt;br /&gt;
'''Issue 8:'''&lt;br /&gt;
*1) Login as instructor and create an assignment with 3 rounds of submissions. Enroll few students in the assignment.&lt;br /&gt;
*2) Impersonate at least three students.&lt;br /&gt;
*3) For first student, say 'A', just submit for the first round.&lt;br /&gt;
*4) For second student, say 'B', submit the assignment for first round and then resubmit it for second round.&lt;br /&gt;
*5) For third student, say 'C', submit the assignment for the first round, second round and third round.&lt;br /&gt;
*6) Now, login again as instructor and go to the review submissions page to view submissions of students. You can now see that for 'A', the submission link appears in black font with no background color, for 'B', the submission link appears with a red background color of 50% intensity, and for 'C', the submission link appears with a red background color of 100% intensity.&lt;br /&gt;
*7) Also, the color code is mentioned at the end of the page which clearly indicates the usage of background color-code to represent the number of times the project was submitted all together by any student.&lt;br /&gt;
&lt;br /&gt;
'''Issue 9:''' Since it is a new algorithm being proposed, we intend to test it first manually using dummy datasets. Later on, automated test cases can be added for the same.&lt;br /&gt;
*1) Login as an instructor and create a dummy assignment with 2 rounds of review submissions. Assign 2 teams to that assignment of 1 student each. Also, put the deadline of first review as &amp;quot;1 hour&amp;quot;. Log out&lt;br /&gt;
*2) Login as a student and submit some data for the assignment. Log out.&lt;br /&gt;
*3) Login as the second student and submit the same assignment using dummy data. Log out.&lt;br /&gt;
All the above steps will help us reach towards the section of reviews.&lt;br /&gt;
*4) Login as the first student and go to &amp;quot;Other's work&amp;quot; and request for a review document.By default, you will be assigned the document of the second student to review. Once assigned, complete that review with dummy scores. Log out.&lt;br /&gt;
*5) Login as the second student. Check the review in &amp;quot;Your scores&amp;quot; page and click on the section &amp;quot;Show review&amp;quot;. There you can provide scored feedback to the reviewer. Definitely take into account the tone, solutions suggested and how it will help you. Log out.&lt;br /&gt;
*6) Login as the first student after the deadline for the first review completes. Go to &amp;quot;Other's work&amp;quot; and request for a new submission. You will be assigned the same document of the other student to review for the second round. Follow step 4.&lt;br /&gt;
*7) Login as the second student and follow step 5.&lt;br /&gt;
*8) The system has the data related to author's feedback and the reviewer's data and will calculate the scores of the reviewer according to the ''range of credits'' ( lower range, medium range and higher range) set by the instructor.&lt;br /&gt;
&lt;br /&gt;
*Edge cases - May include options like ''adding a link in the review document by the reviewer'' and seeing how the grade is increased.&lt;br /&gt;
May also take into account the situation when author's feedback isn't available and the score of the reviewer would solely depend on the latter's reviews adn the instructor's jurisdiction because the algorithm in this case would fail.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''References''' ==&lt;br /&gt;
*Expertiza repo : https://github.com/expertiza/expertiza&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1792_OSS_Visualizations_for_instructors&amp;diff=113128</id>
		<title>CSC/ECE 517 Fall 2017/E1792 OSS Visualizations for instructors</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1792_OSS_Visualizations_for_instructors&amp;diff=113128"/>
		<updated>2017-11-13T22:50:16Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page provides a description of the expertiza based project for Fall 2017.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
This project aims to improve the visualizations of certain pages related to reviews and feedback in Expertiza in the instructor's view. This would aid the instructors to judge outcomes of reviews and class performance in assignments via graphs and tables, which in turn would ease the process of grading the reviews.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 1:''' For links in each cell. We are not sure what will happen if we click the link and which page will open.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 2:''' The scale is blue to green, which does not make sense. And colors will change randomly each time loading the page. It will be better to scale from red to green.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 3:''' Two adjacent bar represents the response in round 1 to round k. It makes sense only if the rubrics in all review rounds are all the same. If the instructor implements the vary-rubric-by-round mechanism, this visualization will not make sense.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 4:''' The table is presorted by teams, but you can now also sort alphabetically. The cell view looks way too long, and should be divided into partials.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 5:''' An interactive visualization or table that shows how a class performed on selected rubric criteria would be immensely helpful. It would show me what I need to focus more attention on.&lt;br /&gt;
 	&lt;br /&gt;
'''Issue 6:''' Integration of review performance- The basic aim of this implementation is to somehow combine an author’s feedback on a review and the corresponding review of a reviewer, to build a method for grading the reviewers.&lt;br /&gt;
 &lt;br /&gt;
Basic rubrics to be considered:&amp;lt;br&amp;gt;	&lt;br /&gt;
-Number of reviews completed&amp;lt;br&amp;gt;	&lt;br /&gt;
-Length of reviews&amp;lt;br&amp;gt;	&lt;br /&gt;
-Summary of reviews&amp;lt;br&amp;gt;&lt;br /&gt;
-Whether reviewers added a file or link to their review &amp;lt;br&amp;gt;&lt;br /&gt;
The average ratings they received from the author.&amp;lt;br&amp;gt;&lt;br /&gt;
A graph or table is prefered for easing this change.&amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
== '''Issue Statements &amp;amp; Approach to be followed''' ==&lt;br /&gt;
'''Issue 1:''' For links in each cell. We are not sure what will happen if we click the link and which page will open.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 1:''' The issue is about the cell contains link to different pages in expertiza, but there is no way to know which cell is linked to which page. So user don't know the destination page when he/she clicks on some page. So we know that there is link in each cell, so we will show a hover over text displaying the link of the destination page.&lt;br /&gt;
&lt;br /&gt;
'''Issue 2:''' The scale is blue to green, which does not make sense. And colors will change randomly each time loading the page. It will be better to scale from red to green.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 2:''' Here the color coding is blue to green and also it changes randomly. So we will use RBG color coding to make it red to green. We will use percentage to decide color coding. For example if it between 0 - 20% then make it red and so on. This way no matter what scale is being used it will always have appropriate color coding.&lt;br /&gt;
&lt;br /&gt;
'''Issue 3:''' Two adjacent bar represents the response in round 1 to round k. It makes sense only if the rubrics in all review rounds are all the same. If the instructor implements the vary-rubric-by-round mechanism, this visualization will not make sense.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 3:''' Here The problem is that the the review responses show in a grid format that shows all the reviews from round 1 to round n. But this is ok when the rubrics is same for all the rounds. But when the rubric is different from round to round this view doesn't make sense. So what we are thinking is creating different grid for each review round. That will solve the problem for when the rubric is different as well as when the rubric is same.&lt;br /&gt;
&lt;br /&gt;
'''Issue 4:''' The table is presorted by teams, but you can now also sort alphabetically. The cell view looks way too long, and should be divided into partials.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 4:''' Here we can sort the select query with appropriate column alphabetically, or we can sort the table automatically according to user criteria using dynamic table format. And the long view issue can be solved by using paging.&lt;br /&gt;
&lt;br /&gt;
'''Issue 5:''' An interactive visualization or table that shows how a class performed on selected rubric criteria would be immensely helpful. It would show me what I need to focus more attention on. &lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 5 :''' The issue is about getting the performance of the entire class graded using the 5 rubrics criteria.A proposed solution may  be  use the below logic of calculating average grade for each student on all assignments in a particular course  from the controller assessment360_controller.rb&lt;br /&gt;
 &lt;br /&gt;
[[File:scr2.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The average grades of each student can be pulled and then used to plot a bar graph as shown below ( This has been created by using a dummy data ) :-&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Dummydata.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 1 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment1.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 2 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment2.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 3 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment3.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 4 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment4.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 5 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment5.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Average Class performance :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Average.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The work flow can be approximately like the below  diagram :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Workflow.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Issue 6:''' In the 'Review Summary' page for an assignment, currently there is no header indicating the name of the assignment. Also the page has review information for enrolled students. Currently, only student ids are displayed, which make it difficult to make out which student the information corresponds to. Extra white-space around checkboxes.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 6:''' We will modify the view to show the heading for the assignment. Also, we will include the student name along with their id. We will use a method to truncate extra white-spaces around checkboxes before rendering the view.&lt;br /&gt;
&lt;br /&gt;
'''Issue 7:''' Currently, the reputation scores are not set. They show up as 0.0 for all students.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 7:''' The method to calculate the reputation scores is not being called. We will call that method in the corresponding controller and deliver the computed reputation score(s) to a view where it can be displayed. Also, once we have this data, we will display the reputation scores of all students for an assignment graphically to enable easy visualization for the instructor. This view can be accessed by a link/button (which we will add) on the ‘review summary’ page.&lt;br /&gt;
&lt;br /&gt;
'''Issue 8:''' Currently, the instructor doesn't come to know which submission has not been updated since the previous review.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 8:''' For n rounds of submissions, we can take a color (say red) as a background highlighter, and vary (say increase) it's intensity by a percentage of 100/(n-1) on every submission update. And this color code will be mentioned on the corresponding view. This will enable the instructor to quickly make out whether a student has updated/resubmitted the submission.&lt;br /&gt;
For example, if a project has 3 rounds of submissions, then n=3. Initially there will be no background color. When a student submits for the first time, the submission link will be shown in black font with no background color. After round 1 reviews, there will be time for second submission, in which the students can resubmit the updated version of their project based on the reviews. If a student resubmits the project, the submission link will now have a red background color of 50% intensity. The submission link for the students who did not resubmit/update their submission would remain as it was earlier, that is, without any background color. After this, there will be another round of reviews. After round 2 reviews, it will be time for third submission (which is the final submission in this case). If a student resubmits the project, the submission link will now have a background color of 100% intensity. The submission link for the students who did not resubmit/update their submission would remain as it was earlier. That is, for students who submitted the project only once and did not resubmit thereafter, there will be no background color of the submission link. For students, who resubmitted the project only once after the first submission, the background color of the submission link will have 50% intensity and for the students who resubmitted the project twice (as was expected) will have 100% intensity.&lt;br /&gt;
&lt;br /&gt;
Pseudocode:&lt;br /&gt;
&lt;br /&gt;
   Let n be total rounds of submission for the project&lt;br /&gt;
   For i from 2 to n&lt;br /&gt;
    Increase the intensity of background color red (R,0,0) by 100/(n-1) percent&lt;br /&gt;
&lt;br /&gt;
'''Issue 9:''' Integration of review performance- The basic aim of this implementation is to somehow combine an author’s feedback on a review and the corresponding review of a reviewer, to build a method for grading the reviewers.&lt;br /&gt;
Basic rubrics to be considered:&amp;lt;br&amp;gt;&lt;br /&gt;
-Number of reviews completed&amp;lt;br&amp;gt;&lt;br /&gt;
-Length of reviews&amp;lt;br&amp;gt;&lt;br /&gt;
-Summary of reviews&amp;lt;br&amp;gt;&lt;br /&gt;
-Whether reviewers added a file or link to their review &amp;lt;br&amp;gt;&lt;br /&gt;
-The average ratings they received from the author.&amp;lt;br&amp;gt;&lt;br /&gt;
-A graph or table is prefered for easing this change.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 9:''' The entire focus is on to what extent a review could help the author. The latter’s feedback is always available in the form of numerical scores. We intend to capture the author’s score of the review topic-wise like that of tone of review, plausible solutions to problems suggested by reviewer and the rate of how much it helped the author to improve(scored by himself). &amp;lt;br&amp;gt;&lt;br /&gt;
-In each round of review done, the author’s feedback is noted topic-wise as suggested in the previous step and ''possibly generate a graph comparing the “n” rounds of reviews''.&amp;lt;br&amp;gt;&lt;br /&gt;
-If reviewer added ''a legit file or link to their review'', then we propose to add a few extra credits to the reviewer that can be added to their final grade.&lt;br /&gt;
The author’s feedback in the form of an average number can be taken and if that value exceeds that of a threshold , then the reviews were really meaningful.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example - &lt;br /&gt;
Consider author’s feedback as follows for 2 rounds of reviews:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ExampleTableForAuthorFeedback.PNG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
Observations: Mean score of round 1 is 3 and Mean score of round 2 is 1.9. &amp;lt;br&amp;gt;&lt;br /&gt;
Suppose , we take into account that Round of 1 has more importance than the second one because it helps a reviewer improve, and also that every reviewer should atleast provide 2 suggestions or comments that help authors improve. Then the threshold value is considered to be 2 and the Mean score of round 1 &amp;gt; threshold. &amp;lt;br&amp;gt;&lt;br /&gt;
Therefore, the reviews were meaningful and deserves a credit in the higher range of grades. If the mean score of round 1 &amp;lt; threshold then the mean score of round 2 is compared with the threshold.  &amp;lt;br&amp;gt;&lt;br /&gt;
		''Overall : Mean round 1&amp;gt; threshold : Higher range of grade to reviewer.&amp;lt;br&amp;gt;&lt;br /&gt;
			  Mean round 1&amp;lt;threshold  : Check if Mean round 2 &amp;gt; threshold &amp;lt;br&amp;gt;&lt;br /&gt;
							If true , Medium range of grade to reviewer.&amp;lt;br&amp;gt;&lt;br /&gt;
							Else , lower range of grades.&amp;lt;br&amp;gt;''&lt;br /&gt;
Now once it’s decided in what range a reviewer deserves credit, The other factors like ''summary of review'' and ''length of review'' are taken into account by the instructors and graded according to the effectiveness of concepts explained in it. Also if a reviewer misses the second round of review then only the first round is taken into consideration. ''The instructor should believe that all but the last round of reviews are crucial to improve a document.''&amp;lt;br&amp;gt;&lt;br /&gt;
'''Graphs:'''Can be generated for comparing the effectiveness of the “n” rounds of reviews for the authors depending on the author’s score. &amp;lt;br&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
In this case - (only an example visualization)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ExampleGraph.PNG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Observations: The graph and table together suggest that round 1 of the review actually had an impact on the author.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Test Plan''' ==&lt;br /&gt;
'''Issue 1:''' Check the link matches to the hover over text&lt;br /&gt;
&lt;br /&gt;
'''Issue 2:''' Check the color coding when different number is given in different scale.&lt;br /&gt;
&lt;br /&gt;
'''Issue 3:''' Enter multiple reviews with different rubric and check different table/grid shows for each review round separately.&lt;br /&gt;
&lt;br /&gt;
'''Issue 4:''' Check if the table is sorted with appropriate column alphabetically&lt;br /&gt;
&lt;br /&gt;
'''Issue 5:'''&lt;br /&gt;
*1) Login as the instructor&lt;br /&gt;
*2) Click on the button to compute graphs&lt;br /&gt;
*3) Compare the bar graphs with separate scores of students in each assignments.&lt;br /&gt;
&lt;br /&gt;
'''Issue 6:'''&lt;br /&gt;
*1) Login as an instructor.&lt;br /&gt;
*2) Go to the 'Review Summary' page for an assignment.&lt;br /&gt;
*3) The instructor will now be able to see the name of the assignment as a heading. Also, the name of students will now be displayed beside their student id.&lt;br /&gt;
&lt;br /&gt;
'''Issue 7:'''&lt;br /&gt;
*1) Login as instructor.&lt;br /&gt;
*2) Go to the 'Review Summary' page for an assignment.&lt;br /&gt;
*3) Click on the reputation scores.&lt;br /&gt;
*4) The instructor will now be able to see individual reputation scores of the students for that assignment as well as a graphical representation of the reputation scores of all the students enrolled in the exercise.&lt;br /&gt;
&lt;br /&gt;
'''Issue 8:'''&lt;br /&gt;
*1) Login as instructor and create an assignment with 3 rounds of submissions. Enroll few students in the assignment.&lt;br /&gt;
*2) Impersonate at least three students.&lt;br /&gt;
*3) For first student, say 'A', just submit for the first round.&lt;br /&gt;
*4) For second student, say 'B', submit the assignment for first round and then resubmit it for second round.&lt;br /&gt;
*5) For third student, say 'C', submit the assignment for the first round, second round and third round.&lt;br /&gt;
*6) Now, login again as instructor and go to the review submissions page to view submissions of students. You can now see that for 'A', the submission link appears in black font with no background color, for 'B', the submission link appears with a red background color of 50% intensity, and for 'C', the submission link appears with a red background color of 100% intensity.&lt;br /&gt;
*7) Also, the color code is mentioned at the end of the page which clearly indicates the usage of background color-code to represent the number of times the project was submitted all together by any student.&lt;br /&gt;
&lt;br /&gt;
'''Issue 9:''' Since it is a new algorithm being proposed, we intend to test it first manually using dummy datasets. Later on, automated test cases can be added for the same.&lt;br /&gt;
*1) Login as an instructor and create a dummy assignment with 2 rounds of review submissions. Assign 2 teams to that assignment of 1 student each. Also, put the deadline of first review as &amp;quot;1 hour&amp;quot;. Log out&lt;br /&gt;
*2) Login as a student and submit some data for the assignment. Log out.&lt;br /&gt;
*3) Login as the second student and submit the same assignment using dummy data. Log out.&lt;br /&gt;
All the above steps will help us reach towards the section of reviews.&lt;br /&gt;
*4) Login as the first student and go to &amp;quot;Other's work&amp;quot; and request for a review document.By default, you will be assigned the document of the second student to review. Once assigned, complete that review with dummy scores. Log out.&lt;br /&gt;
*5) Login as the second student. Check the review in &amp;quot;Your scores&amp;quot; page and click on the section &amp;quot;Show review&amp;quot;. There you can provide scored feedback to the reviewer. Definitely take into account the tone, solutions suggested and how it will help you. Log out.&lt;br /&gt;
*6) Login as the first student after the deadline for the first review completes. Go to &amp;quot;Other's work&amp;quot; and request for a new submission. You will be assigned the same document of the other student to review for the second round. Follow step 4.&lt;br /&gt;
*7) Login as the second student and follow step 5.&lt;br /&gt;
*8) The system has the data related to author's feedback and the reviewer's data and will calculate the scores of the reviewer according to the ''range of credits'' ( lower range, medium range and higher range) set by the instructor.&lt;br /&gt;
&lt;br /&gt;
*Edge cases - May include options like ''adding a link in the review document by the reviewer'' and seeing how the grade is increased.&lt;br /&gt;
May also take into account the situation when author's feedback isn't available and the score of the reviewer would solely depend on the latter's reviews adn the instructor's jurisdiction because the algorithm in this case would fail.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''References''' ==&lt;br /&gt;
*Expertiza repo : https://github.com/expertiza/expertiza&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1792_OSS_Visualizations_for_instructors&amp;diff=112294</id>
		<title>CSC/ECE 517 Fall 2017/E1792 OSS Visualizations for instructors</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1792_OSS_Visualizations_for_instructors&amp;diff=112294"/>
		<updated>2017-11-07T06:52:32Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Visualisations for instructors =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Issue Statement &amp;amp; Approach followed:''' ==&lt;br /&gt;
'''Issue 1:''' For links in each cell. We are not sure what will happen if we click the link and which page will open.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 1:''' The issue is about the cell contains link to different pages in expertiza, but there is no way to know which cell is linked to which page. So user don't know the destination page when he/she clicks on some page. So we know that there is link in each cell, so we will show a hover over text displaying the link of the destination page.&lt;br /&gt;
&lt;br /&gt;
'''Issue 2:''' The scale is blue to green, which does not make sense. And colors will change randomly each time loading the page. It will be better to scale from red to green.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 2:''' Here the color coding is blue to green and also it changes randomly. So we will use RBG color coding to make it red to green. We will use percentage to decide color coding. For example if it between 0 - 20% then make it red and so on. This way no matter what scale is being used it will always have appropriate color coding.&lt;br /&gt;
&lt;br /&gt;
'''Issue 3:''' Two adjacent bar represents the response in round 1 to round k. It makes sense only if the rubrics in all review rounds are all the same. If the instructor implements the vary-rubric-by-round mechanism, this visualization will not make sense.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 3:''' Here The problem is that the the review responses show in a grid format that shows all the reviews from round 1 to round n. But this is ok when the rubrics is same for all the rounds. But when the rubric is different from round to round this view doesn't make sense. So what we are thinking is creating different grid for each review round. That will solve the problem for when the rubric is different as well as when the rubric is same.&lt;br /&gt;
&lt;br /&gt;
'''Issue 4:''' The table is presorted by teams, but you can now also sort alphabetically. The cell view looks way too long, and should be divided into partials.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 4:''' Here we can sort the select query with appropriate column alphabetically, or we can sort the table automatically according to user criteria using dynamic table format. And the long view issue can be solved by using paging.&lt;br /&gt;
&lt;br /&gt;
'''Issue 5:''' An interactive visualization or table that shows how a class performed on selected rubric criteria would be immensely helpful. It would show me what I need to focus more attention on. &lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 5 :''' The issue is about getting the performance of the entire class graded using the 5 rubrics criteria.A proposed solution may  be  use the below logic of calculating average grade for each student on all assignments in a particular course  from the controller assessment360_controller.rb &lt;br /&gt;
[[File:scr2.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The average grades of each student can be pulled and then used to plot a bar graph as shown below ( This has been created by using a dummy data ) :-&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Dummydata.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 1 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment1.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 2 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment2.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 3 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment3.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 4 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment4.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Assignment 5 :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Assignment5.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Graph for class performance on Average Class performance :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Average.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The work flow can be approximately like the below  diagram :-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Workflow.PNG]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Issue 6:''' In the 'Review Summary' page for an assignment, currently there is no header indicating the name of the assignment. Also the page has review information for enrolled students. Currently, only student ids are displayed, which make it difficult to make out which student the information corresponds to. Extra white-space around checkboxes.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 6:''' We will modify the view to show the heading for the assignment. Also, we will include the student name along with their id. We will use a method to truncate extra white-spaces around checkboxes before rendering the view.&lt;br /&gt;
&lt;br /&gt;
'''Issue 7:''' Currently, the reputation scores are not set. They show up as 0.0 for all students.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 7:''' The method to calculate the reputation scores is not being called. We will call that method in the corresponding controller and deliver the computed reputation score(s) to a view where it can be displayed. Also, once we have this data, we will display the reputation scores of all students for an assignment graphically to enable easy visualization for the instructor. This view can be accessed by a link/button (which we will add) on the ‘review summary’ page.&lt;br /&gt;
&lt;br /&gt;
'''Issue 8:''' Currently, the instructor doesn't come to know which submission has not been updated since the previous review.&lt;br /&gt;
&lt;br /&gt;
'''Approach to solve issue 8:''' For n rounds of submissions, we can take a color (say red) as a background highlighter, and vary (say increase) it's intensity by a percentage of 100/(n-1) on every submission update. And this color code will be mentioned on the corresponding view. This will enable the instructor to quickly make out whether a student has updated/resubmitted the submission.&lt;br /&gt;
For example, if a project has 3 rounds of submissions, then n=3. Initially there will be no background color. When a student submits for the first time, the submission link will be shown in black font with no background color. After round 1 reviews, there will be time for second submission, in which the students can resubmit the updated version of their project based on the reviews. If a student resubmits the project, the submission link will now have a red background color of 50% intensity. The submission link for the students who did not resubmit/update their submission would remain as it was earlier, that is, without any background color. After this, there will be another round of reviews. After round 2 reviews, it will be time for third submission (which is the final submission in this case). If a student resubmits the project, the submission link will now have a background color of 100% intensity. The submission link for the students who did not resubmit/update their submission would remain as it was earlier. That is, for students who submitted the project only once and did not resubmit thereafter, there will be no background color of the submission link. For students, who resubmitted the project only once after the first submission, the background color of the submission link will have 50% intensity and for the students who resubmitted the project twice (as was expected) will have 100% intensity.&lt;br /&gt;
&lt;br /&gt;
Pseudocode:&lt;br /&gt;
&lt;br /&gt;
   Let n be total rounds of submission for the project&lt;br /&gt;
   For i from 2 to n&lt;br /&gt;
    Increase the intensity of background color red (R,0,0) by 100/(n-1) percent&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Test Plan: ==&lt;br /&gt;
'''Issue 1:''' Check the link matches to the hover over text&lt;br /&gt;
&lt;br /&gt;
'''Issue 2:''' Check the color coding when different number is given in different scale.&lt;br /&gt;
&lt;br /&gt;
'''Issue 3:''' Enter multiple reviews with different rubric and check different table/grid shows for each review round separately.&lt;br /&gt;
&lt;br /&gt;
'''Issue 4:''' Check if the table is sorted with appropriate column alphabetically&lt;br /&gt;
&lt;br /&gt;
'''Issue 5:'''&lt;br /&gt;
*1) Login as the instructor&lt;br /&gt;
*2) Click on the button to compute graphs&lt;br /&gt;
*3) Compare the bar graphs with separate scores of students in each assignments.&lt;br /&gt;
&lt;br /&gt;
'''Issue 6:'''&lt;br /&gt;
*1) Login as an instructor.&lt;br /&gt;
*2) Go to the 'Review Summary' page for an assignment.&lt;br /&gt;
*3) The instructor will now be able to see the name of the assignment as a heading. Also, the name of students will now be displayed beside their student id.&lt;br /&gt;
&lt;br /&gt;
'''Issue 7:'''&lt;br /&gt;
*1) Login as instructor.&lt;br /&gt;
*2) Go to the 'Review Summary' page for an assignment.&lt;br /&gt;
*3) Click on the reputation scores.&lt;br /&gt;
*4) The instructor will now be able to see individual reputation scores of the students for that assignment as well as a graphical representation of the reputation scores of all the students enrolled in the exercise.&lt;br /&gt;
&lt;br /&gt;
'''Issue 8:'''&lt;br /&gt;
*1) Login as instructor and create an assignment with 3 rounds of submissions. Enroll few students in the assignment.&lt;br /&gt;
*2) Impersonate at least three students.&lt;br /&gt;
*3) For first student, say 'A', just submit for the first round.&lt;br /&gt;
*4) For second student, say 'B', submit the assignment for first round and then resubmit it for second round.&lt;br /&gt;
*5) For third student, say 'C', submit the assignment for the first round, second round and third round.&lt;br /&gt;
*6) Now, login again as instructor and go to the review submissions page to view submissions of students. You can now see that for 'A', the submission link appears in black font with no background color, for 'B', the submission link appears with a red background color of 50% intensity, and for 'C', the submission link appears with a red background color of 100% intensity.&lt;br /&gt;
*7) Also, the color code is mentioned at the end of the page which clearly indicates the usage of background color-code to represent the number of times the project was submitted all together by any student.&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=112289</id>
		<title>CSC/ECE 517 Fall 2017/E1779. Fix teammate advertisements and requests to join a team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=112289"/>
		<updated>2017-11-07T06:38:39Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: /* Issue #311  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
==='''Problem Statement'''===&lt;br /&gt;
In Expertiza, there are teammate advertisement, invitation and join team request features which facilitate students to form teams. Teammate advertisement works only for assignments with topics. The topic holders can create advertisement and a trumpet icon will show on the signup sheet page. If one respond to the advertisement, a join team request will be created and the topic holder can see it on “Your team” page. After a student gets a team and the team is not full, (s)he should also be able to send invitations to others.&lt;br /&gt;
----&lt;br /&gt;
=='''Issues to be fixed'''==&lt;br /&gt;
&lt;br /&gt;
Issues as described by the problem statement:&lt;br /&gt;
&lt;br /&gt;
Fix Issue #311: When one responds to an advertisement, (s)he should only be able to respond once. When a team advertises for new members, someone who responds to an ad should only be allowed to respond once. Currently, after someone responds to an ad, they can respond again an unlimited number of times.&lt;br /&gt;
&lt;br /&gt;
Fix Issue #227 : If user 'A' got a topic and user 'B' got no topic, then if A join B’s team, A’s topic is  dropped and A and B end up with a new team with no topic. This issue should be handle carefully because we cannot simply add B to A’s team (imagine, if A has teammate X and B has teammate Y...). One of a potential fix is that, for assignment w/ topics, one cannot not post an ad unless (s)he holds a topic, similarly, one cannot sent invitations unless (s)he holds a topic. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&lt;br /&gt;
1) app/models/sign_up_sheet.rb&lt;br /&gt;
&lt;br /&gt;
2) app/helpers/student_teams_helper.rb&lt;br /&gt;
&lt;br /&gt;
3) app/views/sign_up_sheet/_table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
4) app/views/student_teams/view.html.erb&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Approach taken to resolve the issues'''==&lt;br /&gt;
&lt;br /&gt;
==='''Issue #311 '''===&lt;br /&gt;
&lt;br /&gt;
A user who is enrolled in an assignment and has a topic, can advertise for more team members. When another user goes on the 'your team' link, who is enrolled in the same assignment but doesn't have a team and topic yet, he will be able to see the team advertisements by other teams. He can respond to any of the available advertisements. As soon as he responds to an advertisement, an entry is created in the &amp;quot;join_team_requests&amp;quot; table and the &amp;quot;status&amp;quot; attribute of the corresponding tuple holds &amp;quot;P&amp;quot; value signifying pending status. This request goes to the team who had posted that advertisement. The request can be approved or denied by the team members. In either of the case, the  &amp;quot;status&amp;quot; changes to &amp;quot;A&amp;quot; or &amp;quot;D&amp;quot; respectively for that entry.&lt;br /&gt;
&lt;br /&gt;
If there is an entry in the &amp;quot;join_team_requests&amp;quot; table for a user, then (s)he can only see advertisements if the corresponding &amp;quot;status&amp;quot; is &amp;quot;D&amp;quot;, which implies that this user is not yet part of a team. This can be checked by querying for participant_id, which is unique for each combination of (user_id, assignment_id), and then checking the &amp;quot;status&amp;quot; corresponding to that participant_id.&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify sign_up_sheet.rb:&lt;br /&gt;
&lt;br /&gt;
  Respond_To_Ads(user_id, assignment_id)&lt;br /&gt;
  p_id=Fetch participant_id corresponding to (user_id, assignment_id)&lt;br /&gt;
  Check entries for p_id in table join_team_request_table where status is either &amp;quot;A&amp;quot; or &amp;quot;P&amp;quot;&lt;br /&gt;
  count=number of such entries&lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If Sign Up Sheet has topics for a particular assignment()&lt;br /&gt;
  If Respond_To_Ads(user_id, assignment_id) is equal to 0&lt;br /&gt;
     Show Trumpet icon which is a link to the Ads&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227 '''===&lt;br /&gt;
&lt;br /&gt;
If a user has an assignment and a topic only then (s)he will be able to advertise for team members to join their team. If a user doesn't have a topic (s)he won't be able to advertise.&lt;br /&gt;
The scenario in which A, B were two users, A with a topic, B without a topic, A joins B's  team but A's topic gets dropped; A,B become a team but with no topic. Such cases are now avoided as we have ensured that without first selecting a topic a user cannot advertise for team members nor can he send invitations to other users to join his team. This is done by quering in the database using inner join between tables-SignUpTopic, signed_up_teams,  team_users; and checking if the user has a topic for a particular assignment. If (s)he has a topic then he'll be able to see the option for advertising for teammates.&lt;br /&gt;
If the assignment doesn't have a topic then the user will be able to send out team invitations.&lt;br /&gt;
Pseudocode representing the logic we have used to modify student_teams_helper.rb:&lt;br /&gt;
&lt;br /&gt;
  StudentTeamsHelper&lt;br /&gt;
    If the concerned assignment has topics&lt;br /&gt;
       return false if their are topics&lt;br /&gt;
    else return true&lt;br /&gt;
&lt;br /&gt;
  User_Has_Topic(user_id, assignment_id)&lt;br /&gt;
    Query the database using inner joins between SignUpTopic, signed_up_teams, team_users&lt;br /&gt;
    rows= number of rows returned by the above query&lt;br /&gt;
    If rows&amp;gt;0&lt;br /&gt;
       return true&lt;br /&gt;
    else&lt;br /&gt;
       return false&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
    If concerned assignment does not have topics OR User_Has_Topic is true&lt;br /&gt;
       Make Invite link visible&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
Automated tests cannot be written for this project. Automated tests will only be able to test the functionality of Rails and not the functionality of the amended files.&lt;br /&gt;
----&lt;br /&gt;
https://mymediasite.online.ncsu.edu/online/Play/3b649b16e7f7448d9d1ee79ee1448b221d&lt;br /&gt;
----&lt;br /&gt;
https://mymediasite.online.ncsu.edu/online/Play/31dcb783510c4322bcfbc894c71fbdd01d&lt;br /&gt;
----&lt;br /&gt;
==='''Issue #311'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
2)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
3)Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
4)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. &lt;br /&gt;
&lt;br /&gt;
5)Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
6)Login as another user(Student) or impersonate another student, say student B, whom you have enrolled in the assignment.&lt;br /&gt;
&lt;br /&gt;
7)Since B doesn't have a topic yet, so you won't be able to see the advertise link. &lt;br /&gt;
&lt;br /&gt;
8)Go to the sign-up sheet for the assignment, you'll be able to see a trumpet icon next to the topic that has an ad posted.&lt;br /&gt;
&lt;br /&gt;
9)Click on the icon, you'll see the ad posted by A. Click on request to join A's team.&lt;br /&gt;
&lt;br /&gt;
10)On doing so an entry is created on the table &amp;quot;&amp;quot; and status holds value &amp;quot;P&amp;quot; signifying a pending request.&lt;br /&gt;
&lt;br /&gt;
11)Now if you go on the sign-up sheet again, you will no longer see the trumpet icon through which you can access the ads since you have already responded to an ad and the request is in pending state.&lt;br /&gt;
&lt;br /&gt;
12)Login as user A or impersonate A, now you'll be able to see the team join request sent by user B.&lt;br /&gt;
&lt;br /&gt;
13) Now, you can either approve it or decline it. Suppose you approve it, B will become a part of your team, and the status will change to &amp;quot;A&amp;quot;. And now if you login as B or impersonate B, you will no longer be able to access the trumpet icon which is a link to all ads pertaining to topics the concerned assignment.&lt;br /&gt;
&lt;br /&gt;
14)Had user A declined User Bs join request, the status in the table &amp;quot;&amp;quot; would change to &amp;quot;D&amp;quot;, that means user B still doesn't have a team. So, now if you login as B or impersonate, you'll be able to see the ads again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. &lt;br /&gt;
&lt;br /&gt;
2)You should be able to see the assignment now in the Assignment section. Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
3)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4)This ensures that for an assignment with  topics, a user can send out advertisements only if (s)he has a topic.&lt;br /&gt;
&lt;br /&gt;
5)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, do not add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
6)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
7)Since the assignment doesn't have any topics, therefore, you will be able to see the advertise link. You won't see a sign-up sheet since the assignment has no topics. You can advertise for teammates.&lt;br /&gt;
&lt;br /&gt;
==='''Screenshots from conducted Test '''===&lt;br /&gt;
1) On clicking on 'Manage Content' the following screen is rendered which lists the existing assignments.&lt;br /&gt;
----&lt;br /&gt;
[[File:create public assignment.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
2) On clicking on 'New Public Assignment' the following form is displayed in which assignment details can be entered.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup1.jpg  ]]&lt;br /&gt;
----&lt;br /&gt;
3)Editing the created assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup2.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
4)Click on 'Topics' to add topics for the assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup3.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
5)Click on 'Rubrics' to setup assignment rubrics.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup4.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
6)The following screenshot shows the completed setup.&lt;br /&gt;
----&lt;br /&gt;
[[File:completed setup for assignment with topic.jpg]]&lt;br /&gt;
----&lt;br /&gt;
7)On clicking on the image-link for adding participants for an assignment, the following screen is rendered.&lt;br /&gt;
----&lt;br /&gt;
[[File:adding student to assignmet.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
8)Showing all added participants.&lt;br /&gt;
----&lt;br /&gt;
[[File:add the students.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
9)The following screen is rendered when a student who is a participant in the current assignment clicks on it's sign-up sheet.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the  topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
10)The following screen is rendered when a participant clicks on the sign-up sheet for the assignment. link.&lt;br /&gt;
----&lt;br /&gt;
[[File:select topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
11)The following screen is rendered when a participant chooses a topic and then clicks on 'create advertisement'.&lt;br /&gt;
----&lt;br /&gt;
[[File:create ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
12)After creating an ad, user can now see a horn icon which is a link to display the advertisements corresponding to that topic in that assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:see ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
13)The following screen is rendered after clicking on the horn icon.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
14)The following screen is rendered after clicking on the link 'Request invitation'.&lt;br /&gt;
----&lt;br /&gt;
[[File:respond to ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
15)After sending a request to join a team (via ad), the user will no longer see the link for the ads unless the request is denied by the receiver.&lt;br /&gt;
----&lt;br /&gt;
[[File:cant see any more ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
16)This is the screen of the user who had created the ad. He is now able to see any join requests that he can approve/decline.&lt;br /&gt;
----&lt;br /&gt;
[[File:request to join.jpg  ]]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=111103</id>
		<title>CSC/ECE 517 Fall 2017/E1779. Fix teammate advertisements and requests to join a team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=111103"/>
		<updated>2017-11-01T01:48:08Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
==='''Problem Statement'''===&lt;br /&gt;
In Expertiza, there are teammate advertisement, invitation and join team request features which facilitate students to form teams. Teammate advertisement works only for assignments with topics. The topic holders can create advertisement and a trumpet icon will show on the signup sheet page. If one respond to the advertisement, a join team request will be created and the topic holder can see it on “Your team” page. After a student gets a team and the team is not full, (s)he should also be able to send invitations to others.&lt;br /&gt;
----&lt;br /&gt;
=='''Issues to be fixed'''==&lt;br /&gt;
&lt;br /&gt;
Issues as described by the problem statement:&lt;br /&gt;
&lt;br /&gt;
Fix Issue #311: When one responds to an advertisement, (s)he should only be able to respond once. When a team advertises for new members, someone who responds to an ad should only be allowed to respond once. Currently, after someone responds to an ad, they can respond again an unlimited number of times.&lt;br /&gt;
&lt;br /&gt;
Fix Issue #227 : If user 'A' got a topic and user 'B' got no topic, then if A join B’s team, A’s topic is  dropped and A and B end up with a new team with no topic. This issue should be handle carefully because we cannot simply add B to A’s team (imagine, if A has teammate X and B has teammate Y...). One of a potential fix is that, for assignment w/ topics, one cannot not post an ad unless (s)he holds a topic, similarly, one cannot sent invitations unless (s)he holds a topic. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&lt;br /&gt;
1) app/models/sign_up_sheet.rb&lt;br /&gt;
&lt;br /&gt;
2) app/helpers/student_teams_helper.rb&lt;br /&gt;
&lt;br /&gt;
3) app/views/sign_up_sheet/_table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
4) app/views/student_teams/view.html.erb&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Approach taken to resolve the issues'''==&lt;br /&gt;
&lt;br /&gt;
==='''Issue #311 '''===&lt;br /&gt;
&lt;br /&gt;
A user who is enrolled in an assignment and has a topic, can advertise for more team members. When another user goes on the 'your team' link, who is enrolled in the same assignment but doesn't have a team and topic yet, he will be able to see the team advertisements by other teams. He can respond to any of the available advertisements. As soon as he responds to an advertisement, an entry is created in the &amp;quot;join_team_requests&amp;quot; table and the &amp;quot;status&amp;quot; attribute of the corresponding tuple holds &amp;quot;P&amp;quot; value signifying pending status. This request goes to the team who had posted that advertisement. The request can be approved or denied by the team members. In either of the case, the  &amp;quot;status&amp;quot; changes to &amp;quot;A&amp;quot; or &amp;quot;D&amp;quot; respectively for that entry.&lt;br /&gt;
&lt;br /&gt;
If there is an entry in the &amp;quot;join_team_requests&amp;quot; table for a user, then (s)he can only see advertisements if the corresponding &amp;quot;status&amp;quot; is &amp;quot;D&amp;quot;, which implies that this user is not yet part of a team. This can be checked by querying for participant_id, which is unique for each combination of (user_id, assignment_id), and then checking the &amp;quot;status&amp;quot; corresponding to that participant_id.&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify sign_up_sheet.rb:&lt;br /&gt;
&lt;br /&gt;
  Respond_To_Ads(user_id, assignment_id)&lt;br /&gt;
  p_id=Fetch participant_id corressponding to (user_id, assignment_id)&lt;br /&gt;
  Check entries for p_id in table join_team_request_table where status is either &amp;quot;A&amp;quot; or &amp;quot;P&amp;quot;&lt;br /&gt;
  count=number of such entries&lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If Sign Up Sheet has topics for a particular assignment()&lt;br /&gt;
  If Respond_To_Ads(user_id, assignment_id) is equal to 0&lt;br /&gt;
     Show Trumpet icon which is a link to the Ads&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227 '''===&lt;br /&gt;
&lt;br /&gt;
If a user has an assignment and a topic only then (s)he will be able to advertise for team members to join their team. If a user doesn't have a topic (s)he won't be able to advertise.&lt;br /&gt;
The scenario in which A, B were two users, A with a topic, B without a topic, A joins B's  team but A's topic gets dropped; A,B become a team but with no topic. Such cases are now avoided as we have ensured that without first selecting a topic a user cannot advertise for team members nor can he send invitations to other users to join his team. This is done by quering in the database using inner join between tables-SignUpTopic, signed_up_teams,  team_users; and checking if the user has a topic for a particular assignment. If (s)he has a topic then he'll be able to see the option for advertising for teammates.&lt;br /&gt;
If the assignment doesn't have a topic then the user will be able to send out team invitations.&lt;br /&gt;
Pseudocode representing the logic we have used to modify student_teams_helper.rb:&lt;br /&gt;
&lt;br /&gt;
  StudentTeamsHelper&lt;br /&gt;
    If the concerned assignment has topics&lt;br /&gt;
       return false if their are topics&lt;br /&gt;
    else return true&lt;br /&gt;
&lt;br /&gt;
  User_Has_Topic(user_id, assignment_id)&lt;br /&gt;
    Query the database using inner joins between SignUpTopic, signed_up_teams, team_users&lt;br /&gt;
    rows= number of rows returned by the above query&lt;br /&gt;
    If rows&amp;gt;0&lt;br /&gt;
       return true&lt;br /&gt;
    else&lt;br /&gt;
       return false&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
    If concerned assignment does not have topics OR User_Has_Topic is true&lt;br /&gt;
       Make Invite link visible&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
Automated tests cannot be written for this project. Automated tests will only be able to test the functionality of Rails and not the functionality of the amended files.&lt;br /&gt;
----&lt;br /&gt;
https://mymediasite.online.ncsu.edu/online/Play/3b649b16e7f7448d9d1ee79ee1448b221d&lt;br /&gt;
----&lt;br /&gt;
https://mymediasite.online.ncsu.edu/online/Play/31dcb783510c4322bcfbc894c71fbdd01d&lt;br /&gt;
----&lt;br /&gt;
==='''Issue #311'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
2)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
3)Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
4)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. &lt;br /&gt;
&lt;br /&gt;
5)Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
6)Login as another user(Student) or impersonate another student, say student B, whom you have enrolled in the assignment.&lt;br /&gt;
&lt;br /&gt;
7)Since B doesn't have a topic yet, so you won't be able to see the advertise link. &lt;br /&gt;
&lt;br /&gt;
8)Go to the sign-up sheet for the assignment, you'll be able to see a trumpet icon next to the topic that has an ad posted.&lt;br /&gt;
&lt;br /&gt;
9)Click on the icon, you'll see the ad posted by A. Click on request to join A's team.&lt;br /&gt;
&lt;br /&gt;
10)On doing so an entry is created on the table &amp;quot;&amp;quot; and status holds value &amp;quot;P&amp;quot; signifying a pending request.&lt;br /&gt;
&lt;br /&gt;
11)Now if you go on the sign-up sheet again, you will no longer see the trumpet icon through which you can access the ads since you have already responded to an ad and the request is in pending state.&lt;br /&gt;
&lt;br /&gt;
12)Login as user A or impersonate A, now you'll be able to see the team join request sent by user B.&lt;br /&gt;
&lt;br /&gt;
13) Now, you can either approve it or decline it. Suppose you approve it, B will become a part of your team, and the status will change to &amp;quot;A&amp;quot;. And now if you login as B or impersonate B, you will no longer be able to access the trumpet icon which is a link to all ads pertaining to topics the concerned assignment.&lt;br /&gt;
&lt;br /&gt;
14)Had user A declined User Bs join request, the status in the table &amp;quot;&amp;quot; would change to &amp;quot;D&amp;quot;, that means user B still doesn't have a team. So, now if you login as B or impersonate, you'll be able to see the ads again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. &lt;br /&gt;
&lt;br /&gt;
2)You should be able to see the assignment now in the Assignment section. Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
3)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4)This ensures that for an assignment with  topics, a user can send out advertisements only if (s)he has a topic.&lt;br /&gt;
&lt;br /&gt;
5)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, do not add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
6)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
7)Since the assignment doesn't have any topics, therefore, you will be able to see the advertise link. You won't see a sign-up sheet since the assignment has no topics. You can advertise for teammates.&lt;br /&gt;
&lt;br /&gt;
==='''Screenshots from conducted Test '''===&lt;br /&gt;
1) On clicking on 'Manage Content' the following screen is rendered which lists the existing assignments.&lt;br /&gt;
----&lt;br /&gt;
[[File:create public assignment.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
2) On clicking on 'New Public Assignment' the following form is displayed in which assignment details can be entered.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup1.jpg  ]]&lt;br /&gt;
----&lt;br /&gt;
3)Editing the created assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup2.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
4)Click on 'Topics' to add topics for the assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup3.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
5)Click on 'Rubrics' to setup assignment rubrics.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup4.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
6)The following screenshot shows the completed setup.&lt;br /&gt;
----&lt;br /&gt;
[[File:completed setup for assignment with topic.jpg]]&lt;br /&gt;
----&lt;br /&gt;
7)On clicking on the image-link for adding participants for an assignment, the following screen is rendered.&lt;br /&gt;
----&lt;br /&gt;
[[File:adding student to assignmet.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
8)Showing all added participants.&lt;br /&gt;
----&lt;br /&gt;
[[File:add the students.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
9)The following screen is rendered when a student who is a participant in the current assignment clicks on it's sign-up sheet.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the  topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
10)The following screen is rendered when a participant clicks on the sign-up sheet for the assignment. link.&lt;br /&gt;
----&lt;br /&gt;
[[File:select topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
11)The following screen is rendered when a participant chooses a topic and then clicks on 'create advertisement'.&lt;br /&gt;
----&lt;br /&gt;
[[File:create ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
12)After creating an ad, user can now see a horn icon which is a link to display the advertisements corresponding to that topic in that assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:see ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
13)The following screen is rendered after clicking on the horn icon.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
14)The following screen is rendered after clicking on the link 'Request invitation'.&lt;br /&gt;
----&lt;br /&gt;
[[File:respond to ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
15)After sending a request to join a team (via ad), the user will no longer see the link for the ads unless the request is denied by the receiver.&lt;br /&gt;
----&lt;br /&gt;
[[File:cant see any more ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
16)This is the screen of the user who had created the ad. He is now able to see any join requests that he can approve/decline.&lt;br /&gt;
----&lt;br /&gt;
[[File:request to join.jpg  ]]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=111100</id>
		<title>CSC/ECE 517 Fall 2017/E1779. Fix teammate advertisements and requests to join a team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=111100"/>
		<updated>2017-11-01T01:22:59Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
==='''Problem Statement'''===&lt;br /&gt;
In Expertiza, there are teammate advertisement, invitation and join team request features which facilitate students to form teams. Teammate advertisement works only for assignments with topics. The topic holders can create advertisement and a trumpet icon will show on the signup sheet page. If one respond to the advertisement, a join team request will be created and the topic holder can see it on “Your team” page. After a student gets a team and the team is not full, (s)he should also be able to send invitations to others.&lt;br /&gt;
----&lt;br /&gt;
=='''Issues to be fixed'''==&lt;br /&gt;
&lt;br /&gt;
Issues as described by the problem statement:&lt;br /&gt;
&lt;br /&gt;
Fix Issue #311: When one responds to an advertisement, (s)he should only be able to respond once. When a team advertises for new members, someone who responds to an ad should only be allowed to respond once. Currently, after someone responds to an ad, they can respond again an unlimited number of times.&lt;br /&gt;
&lt;br /&gt;
Fix Issue #227 : If user 'A' got a topic and user 'B' got no topic, then if A join B’s team, A’s topic is  dropped and A and B end up with a new team with no topic. This issue should be handle carefully because we cannot simply add B to A’s team (imagine, if A has teammate X and B has teammate Y...). One of a potential fix is that, for assignment w/ topics, one cannot not post an ad unless (s)he holds a topic, similarly, one cannot sent invitations unless (s)he holds a topic. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&lt;br /&gt;
1) app/models/sign_up_sheet.rb&lt;br /&gt;
&lt;br /&gt;
2) app/helpers/student_teams_helper.rb&lt;br /&gt;
&lt;br /&gt;
3) app/views/sign_up_sheet/_table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
4) app/views/student_teams/view.html.erb&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Approach taken to resolve the issues'''==&lt;br /&gt;
&lt;br /&gt;
==='''Issue #311 '''===&lt;br /&gt;
&lt;br /&gt;
A user who is enrolled in an assignment and has a topic, can advertise for more team members. When another user goes on the 'your team' link, who is enrolled in the same assignment but doesn't have a team and topic yet, he will be able to see the team advertisements by other teams. He can respond to any of the available advertisements. As soon as he responds to an advertisement, an entry is created in the &amp;quot;join_team_requests&amp;quot; table and the &amp;quot;status&amp;quot; attribute of the corresponding tuple holds &amp;quot;P&amp;quot; value signifying pending status. This request goes to the team who had posted that advertisement. The request can be approved or denied by the team members. In either of the case, the  &amp;quot;status&amp;quot; changes to &amp;quot;A&amp;quot; or &amp;quot;D&amp;quot; respectively for that entry.&lt;br /&gt;
&lt;br /&gt;
If there is an entry in the &amp;quot;join_team_requests&amp;quot; table for a user, then (s)he can only see advertisements if the corresponding &amp;quot;status&amp;quot; is &amp;quot;D&amp;quot;, which implies that this user is not yet part of a team. This can be checked by querying for participant_id, which is unique for each combination of (user_id, assignment_id), and then checking the &amp;quot;status&amp;quot; corresponding to that participant_id.&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify sign_up_sheet.rb:&lt;br /&gt;
&lt;br /&gt;
  Respond_To_Ads(user_id, assignment_id)&lt;br /&gt;
  p_id=Fetch participant_id corressponding to (user_id, assignment_id)&lt;br /&gt;
  Check entries for p_id in table join_team_request_table where status is either &amp;quot;A&amp;quot; or &amp;quot;P&amp;quot;&lt;br /&gt;
  count=number of such entries&lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If Sign Up Sheet has topics for a particular assignment()&lt;br /&gt;
  If Respond_To_Ads(user_id, assignment_id) is equal to 0&lt;br /&gt;
     Show Trumpet icon which is a link to the Ads&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227 '''===&lt;br /&gt;
&lt;br /&gt;
If a user has an assignment and a topic only then (s)he will be able to advertise for team members to join their team. If a user doesn't have a topic (s)he won't be able to advertise.&lt;br /&gt;
The scenario in which A, B were two users, A with a topic, B without a topic, A joins B's  team but A's topic gets dropped; A,B become a team but with no topic. Such cases are now avoided as we have ensured that without first selecting a topic a user cannot advertise for team members nor can he send invitations to other users to join his team. This is done by quering in the database using inner join between tables-SignUpTopic, signed_up_teams,  team_users; and checking if the user has a topic for a particular assignment. If (s)he has a topic then he'll be able to see the option for advertising for teammates.&lt;br /&gt;
If the assignment doesn't have a topic then the user will be able to send out team invitations.&lt;br /&gt;
Pseudocode representing the logic we have used to modify student_teams_helper.rb:&lt;br /&gt;
&lt;br /&gt;
  StudentTeamsHelper&lt;br /&gt;
  If the concerned assignment has topics&lt;br /&gt;
    return false if their are topics&lt;br /&gt;
  else return true&lt;br /&gt;
&lt;br /&gt;
  User_Has_Topic(user_id, assignment_id)&lt;br /&gt;
    Query the database using inner joins between SignUpTopic, signed_up_teams,  team_users rows= number of rows returned by the above query&lt;br /&gt;
  If rows&amp;gt;0&lt;br /&gt;
    return true&lt;br /&gt;
  else&lt;br /&gt;
    return false&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If concerned assignment does not have topics OR User_Has_Topic is true&lt;br /&gt;
    Make Invite link visible&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
Automated tests cannot be written for this project. Automated tests will only be able to test the functionality of Rails and not the functionality of the amended files.&lt;br /&gt;
----&lt;br /&gt;
https://mymediasite.online.ncsu.edu/online/Play/3b649b16e7f7448d9d1ee79ee1448b221d&lt;br /&gt;
----&lt;br /&gt;
https://mymediasite.online.ncsu.edu/online/Play/31dcb783510c4322bcfbc894c71fbdd01d&lt;br /&gt;
----&lt;br /&gt;
==='''Issue #311'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
2)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
3)Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
4)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. &lt;br /&gt;
&lt;br /&gt;
5)Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
6)Login as another user(Student) or impersonate another student, say student B, whom you have enrolled in the assignment.&lt;br /&gt;
&lt;br /&gt;
7)Since B doesn't have a topic yet, so you won't be able to see the advertise link. &lt;br /&gt;
&lt;br /&gt;
8)Go to the sign-up sheet for the assignment, you'll be able to see a trumpet icon next to the topic that has an ad posted.&lt;br /&gt;
&lt;br /&gt;
9)Click on the icon, you'll see the ad posted by A. Click on request to join A's team.&lt;br /&gt;
&lt;br /&gt;
10)On doing so an entry is created on the table &amp;quot;&amp;quot; and status holds value &amp;quot;P&amp;quot; signifying a pending request.&lt;br /&gt;
&lt;br /&gt;
11)Now if you go on the sign-up sheet again, you will no longer see the trumpet icon through which you can access the ads since you have already responded to an ad and the request is in pending state.&lt;br /&gt;
&lt;br /&gt;
12)Login as user A or impersonate A, now you'll be able to see the team join request sent by user B.&lt;br /&gt;
&lt;br /&gt;
13) Now, you can either approve it or decline it. Suppose you approve it, B will become a part of your team, and the status will change to &amp;quot;A&amp;quot;. And now if you login as B or impersonate B, you will no longer be able to access the trumpet icon which is a link to all ads pertaining to topics the concerned assignment.&lt;br /&gt;
&lt;br /&gt;
14)Had user A declined User Bs join request, the status in the table &amp;quot;&amp;quot; would change to &amp;quot;D&amp;quot;, that means user B still doesn't have a team. So, now if you login as B or impersonate, you'll be able to see the ads again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. &lt;br /&gt;
&lt;br /&gt;
2)You should be able to see the assignment now in the Assignment section. Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
3)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4)This ensures that for an assignment with  topics, a user can send out advertisements only if (s)he has a topic.&lt;br /&gt;
&lt;br /&gt;
5)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, do not add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
6)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
7)Since the assignment doesn't have any topics, therefore, you will be able to see the advertise link. You won't see a sign-up sheet since the assignment has no topics. You can advertise for teammates.&lt;br /&gt;
&lt;br /&gt;
==='''Screenshots from conducted Test '''===&lt;br /&gt;
1) On clicking on 'Manage Content' the following screen is rendered which lists the existing assignments.&lt;br /&gt;
----&lt;br /&gt;
[[File:create public assignment.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
2) On clicking on 'New Public Assignment' the following form is displayed in which assignment details can be entered.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup1.jpg  ]]&lt;br /&gt;
----&lt;br /&gt;
3)Editing the created assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup2.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
4)Click on 'Topics' to add topics for the assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup3.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
5)Click on 'Rubrics' to setup assignment rubrics.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup4.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
6)The following screenshot shows the completed setup.&lt;br /&gt;
----&lt;br /&gt;
[[File:completed setup for assignment with topic.jpg]]&lt;br /&gt;
----&lt;br /&gt;
7)On clicking on the image-link for adding participants for an assignment, the following screen is rendered.&lt;br /&gt;
----&lt;br /&gt;
[[File:adding student to assignmet.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
8)Showing all added participants.&lt;br /&gt;
----&lt;br /&gt;
[[File:add the students.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
9)The following screen is rendered when a student who is a participant in the current assignment clicks on it's sign-up sheet.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the  topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
10)The following screen is rendered when a participant clicks on the sign-up sheet for the assignment. link.&lt;br /&gt;
----&lt;br /&gt;
[[File:select topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
11)The following screen is rendered when a participant chooses a topic and then clicks on 'create advertisement'.&lt;br /&gt;
----&lt;br /&gt;
[[File:create ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
12)After creating an ad, user can now see a horn icon which is a link to display the advertisements corresponding to that topic in that assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:see ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
13)The following screen is rendered after clicking on the horn icon.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
14)The following screen is rendered after clicking on the link 'Request invitation'.&lt;br /&gt;
----&lt;br /&gt;
[[File:respond to ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
15)After sending a request to join a team (via ad), the user will no longer see the link for the ads unless the request is denied by the receiver.&lt;br /&gt;
----&lt;br /&gt;
[[File:cant see any more ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
16)This is the screen of the user who had created the ad. He is now able to see any join requests that he can approve/decline.&lt;br /&gt;
----&lt;br /&gt;
[[File:request to join.jpg  ]]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=111099</id>
		<title>CSC/ECE 517 Fall 2017/E1779. Fix teammate advertisements and requests to join a team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=111099"/>
		<updated>2017-11-01T01:05:30Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
==='''Problem Statement'''===&lt;br /&gt;
In Expertiza, there are teammate advertisement, invitation and join team request features which facilitate students to form teams. Teammate advertisement works only for assignments with topics. The topic holders can create advertisement and a trumpet icon will show on the signup sheet page. If one respond to the advertisement, a join team request will be created and the topic holder can see it on “Your team” page. After a student gets a team and the team is not full, (s)he should also be able to send invitations to others.&lt;br /&gt;
----&lt;br /&gt;
=='''Issues to be fixed'''==&lt;br /&gt;
&lt;br /&gt;
Issues as described by the problem statement:&lt;br /&gt;
&lt;br /&gt;
Fix Issue #311: When one responds to an advertisement, (s)he should only be able to respond once. When a team advertises for new members, someone who responds to an ad should only be allowed to respond once. Currently, after someone responds to an ad, they can respond again an unlimited number of times.&lt;br /&gt;
&lt;br /&gt;
Fix Issue #227 : If user 'A' got a topic and user 'B' got no topic, then if A join B’s team, A’s topic is  dropped and A and B end up with a new team with no topic. This issue should be handle carefully because we cannot simply add B to A’s team (imagine, if A has teammate X and B has teammate Y...). One of a potential fix is that, for assignment w/ topics, one cannot not post an ad unless (s)he holds a topic, similarly, one cannot sent invitations unless (s)he holds a topic. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&lt;br /&gt;
1) app/models/sign_up_sheet.rb&lt;br /&gt;
&lt;br /&gt;
2) app/helpers/student_teams_helper.rb&lt;br /&gt;
&lt;br /&gt;
3) app/views/sign_up_sheet/_table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
4) app/views/student_teams/view.html.erb&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Approach taken to resolve the issues'''==&lt;br /&gt;
&lt;br /&gt;
==='''Issue #311 '''===&lt;br /&gt;
&lt;br /&gt;
A user who is enrolled in an assignment and has a topic, can advertise for more team members. When another user goes on the 'your team' link, who is enrolled in the same assignment but doesn't have a team and topic yet, he will be able to see the team advertisements by other teams. He can respond to any of the available advertisements. As soon as he responds to an advertisement, an entry is created in the &amp;quot;join_team_requests&amp;quot; table and the &amp;quot;status&amp;quot; attribute of the corresponding tuple holds &amp;quot;P&amp;quot; value signifying pending status. This request goes to the team who had posted that advertisement. The request can be approved or denied by the team members. In either of the case, the  &amp;quot;status&amp;quot; changes to &amp;quot;A&amp;quot; or &amp;quot;D&amp;quot; respectively for that entry.&lt;br /&gt;
&lt;br /&gt;
If there is an entry in the &amp;quot;join_team_requests&amp;quot; table for a user, then (s)he can only see advertisements if the corresponding &amp;quot;status&amp;quot; is &amp;quot;D&amp;quot;, which implies that this user is not yet part of a team. This can be checked by querying for participant_id, which is unique for each combination of (user_id, assignment_id), and then checking the &amp;quot;status&amp;quot; corresponding to that participant_id.&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify sign_up_sheet.rb:&lt;br /&gt;
&lt;br /&gt;
  Respond_To_Ads(user_id, assignment_id)&lt;br /&gt;
  p_id=Fetch participant_id corressponding to (user_id, assignment_id)&lt;br /&gt;
  Check entries for p_id in table join_team_request_table where status is either &amp;quot;A&amp;quot; or &amp;quot;P&amp;quot;&lt;br /&gt;
  count=number of such entries&lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If Sign Up Sheet has topics for a particular assignment()&lt;br /&gt;
  If Respond_To_Ads(user_id, assignment_id) is equal to 0&lt;br /&gt;
     Show Trumpet icon which is a link to the Ads&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227 '''===&lt;br /&gt;
&lt;br /&gt;
If a user has an assignment and a topic only then (s)he will be able to advertise for team members to join their team. If a user doesn't have a topic (s)he won't be able to advertise.&lt;br /&gt;
The scenario in which A, B were two users, A with a topic, B without a topic, A joins B's  team but A's topic gets dropped; A,B become a team but with no topic. Such cases are now avoided as we have ensured that without first selecting a topic a user cannot advertise for team members nor can he send invitations to other users to join his team. This is done by quering in the database using inner join between tables-SignUpTopic, signed_up_teams,  team_users; and checking if the user has a topic for a particular assignment. If (s)he has a topic then he'll be able to see the option for advertising for teammates.&lt;br /&gt;
If the assignment doesn't have a topic then the user will be able to send out team invitations.&lt;br /&gt;
Pseudocode representing the logic we have used to modify student_teams_helper.rb:&lt;br /&gt;
&lt;br /&gt;
  StudentTeamsHelper&lt;br /&gt;
  If the concerned assignment has topics&lt;br /&gt;
    return false if their are topics&lt;br /&gt;
  else return true&lt;br /&gt;
&lt;br /&gt;
  User_Has_Topic(user_id, assignment_id)&lt;br /&gt;
    Query the database using inner joins between SignUpTopic, signed_up_teams,  team_users rows= number of rows returned by the above query&lt;br /&gt;
  If rows&amp;gt;0&lt;br /&gt;
    return true&lt;br /&gt;
  else&lt;br /&gt;
    return false&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If concerned assignment does not have topics OR User_Has_Topic is true&lt;br /&gt;
    Make Invite link visible&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
----&lt;br /&gt;
https://mymediasite.online.ncsu.edu/online/Play/3b649b16e7f7448d9d1ee79ee1448b221d&lt;br /&gt;
----&lt;br /&gt;
https://mymediasite.online.ncsu.edu/online/Play/31dcb783510c4322bcfbc894c71fbdd01d&lt;br /&gt;
----&lt;br /&gt;
==='''Issue #311'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
2)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
3)Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
4)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. &lt;br /&gt;
&lt;br /&gt;
5)Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
6)Login as another user(Student) or impersonate another student, say student B, whom you have enrolled in the assignment.&lt;br /&gt;
&lt;br /&gt;
7)Since B doesn't have a topic yet, so you won't be able to see the advertise link. &lt;br /&gt;
&lt;br /&gt;
8)Go to the sign-up sheet for the assignment, you'll be able to see a trumpet icon next to the topic that has an ad posted.&lt;br /&gt;
&lt;br /&gt;
9)Click on the icon, you'll see the ad posted by A. Click on request to join A's team.&lt;br /&gt;
&lt;br /&gt;
10)On doing so an entry is created on the table &amp;quot;&amp;quot; and status holds value &amp;quot;P&amp;quot; signifying a pending request.&lt;br /&gt;
&lt;br /&gt;
11)Now if you go on the sign-up sheet again, you will no longer see the trumpet icon through which you can access the ads since you have already responded to an ad and the request is in pending state.&lt;br /&gt;
&lt;br /&gt;
12)Login as user A or impersonate A, now you'll be able to see the team join request sent by user B.&lt;br /&gt;
&lt;br /&gt;
13) Now, you can either approve it or decline it. Suppose you approve it, B will become a part of your team, and the status will change to &amp;quot;A&amp;quot;. And now if you login as B or impersonate B, you will no longer be able to access the trumpet icon which is a link to all ads pertaining to topics the concerned assignment.&lt;br /&gt;
&lt;br /&gt;
14)Had user A declined User Bs join request, the status in the table &amp;quot;&amp;quot; would change to &amp;quot;D&amp;quot;, that means user B still doesn't have a team. So, now if you login as B or impersonate, you'll be able to see the ads again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. &lt;br /&gt;
&lt;br /&gt;
2)You should be able to see the assignment now in the Assignment section. Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
3)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4)This ensures that for an assignment with  topics, a user can send out advertisements only if (s)he has a topic.&lt;br /&gt;
&lt;br /&gt;
5)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, do not add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
6)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
7)Since the assignment doesn't have any topics, therefore, you will be able to see the advertise link. You won't see a sign-up sheet since the assignment has no topics. You can advertise for teammates.&lt;br /&gt;
&lt;br /&gt;
==='''Screenshots from conducted Test '''===&lt;br /&gt;
1) On clicking on 'Manage Content' the following screen is rendered which lists the existing assignments.&lt;br /&gt;
----&lt;br /&gt;
[[File:create public assignment.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
2) On clicking on 'New Public Assignment' the following form is displayed in which assignment details can be entered.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup1.jpg  ]]&lt;br /&gt;
----&lt;br /&gt;
3)Editing the created assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup2.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
4)Click on 'Topics' to add topics for the assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup3.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
5)Click on 'Rubrics' to setup assignment rubrics.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup4.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
6)The following screenshot shows the completed setup.&lt;br /&gt;
----&lt;br /&gt;
[[File:completed setup for assignment with topic.jpg]]&lt;br /&gt;
----&lt;br /&gt;
7)On clicking on the image-link for adding participants for an assignment, the following screen is rendered.&lt;br /&gt;
----&lt;br /&gt;
[[File:adding student to assignmet.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
8)Showing all added participants.&lt;br /&gt;
----&lt;br /&gt;
[[File:add the students.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
9)The following screen is rendered when a student who is a participant in the current assignment clicks on it's sign-up sheet.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the  topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
10)The following screen is rendered when a participant clicks on the sign-up sheet for the assignment. link.&lt;br /&gt;
----&lt;br /&gt;
[[File:select topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
11)The following screen is rendered when a participant chooses a topic and then clicks on 'create advertisement'.&lt;br /&gt;
----&lt;br /&gt;
[[File:create ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
12)After creating an ad, user can now see a horn icon which is a link to display the advertisements corresponding to that topic in that assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:see ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
13)The following screen is rendered after clicking on the horn icon.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
14)The following screen is rendered after clicking on the link 'Request invitation'.&lt;br /&gt;
----&lt;br /&gt;
[[File:respond to ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
15)After sending a request to join a team (via ad), the user will no longer see the link for the ads unless the request is denied by the receiver.&lt;br /&gt;
----&lt;br /&gt;
[[File:cant see any more ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
16)This is the screen of the user who had created the ad. He is now able to see any join requests that he can approve/decline.&lt;br /&gt;
----&lt;br /&gt;
[[File:request to join.jpg  ]]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=111098</id>
		<title>CSC/ECE 517 Fall 2017/E1779. Fix teammate advertisements and requests to join a team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=111098"/>
		<updated>2017-11-01T01:04:22Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
==='''Problem Statement'''===&lt;br /&gt;
In Expertiza, there are teammate advertisement, invitation and join team request features which facilitate students to form teams. Teammate advertisement works only for assignments with topics. The topic holders can create advertisement and a trumpet icon will show on the signup sheet page. If one respond to the advertisement, a join team request will be created and the topic holder can see it on “Your team” page. After a student gets a team and the team is not full, (s)he should also be able to send invitations to others.&lt;br /&gt;
----&lt;br /&gt;
=='''Issues to be fixed'''==&lt;br /&gt;
&lt;br /&gt;
Issues as described by the problem statement:&lt;br /&gt;
&lt;br /&gt;
Fix Issue #311: When one responds to an advertisement, (s)he should only be able to respond once. When a team advertises for new members, someone who responds to an ad should only be allowed to respond once. Currently, after someone responds to an ad, they can respond again an unlimited number of times.&lt;br /&gt;
&lt;br /&gt;
Fix Issue #227 : If user 'A' got a topic and user 'B' got no topic, then if A join B’s team, A’s topic is  dropped and A and B end up with a new team with no topic. This issue should be handle carefully because we cannot simply add B to A’s team (imagine, if A has teammate X and B has teammate Y...). One of a potential fix is that, for assignment w/ topics, one cannot not post an ad unless (s)he holds a topic, similarly, one cannot sent invitations unless (s)he holds a topic. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&lt;br /&gt;
1) app/models/sign_up_sheet.rb&lt;br /&gt;
&lt;br /&gt;
2) app/helpers/student_teams_helper.rb&lt;br /&gt;
&lt;br /&gt;
3) app/views/sign_up_sheet/_table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
4) app/views/student_teams/view.html.erb&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Approach taken to resolve the issues'''==&lt;br /&gt;
&lt;br /&gt;
==='''Issue #311 '''===&lt;br /&gt;
&lt;br /&gt;
A user who is enrolled in an assignment and has a topic, can advertise for more team members. When another user goes on the 'your team' link, who is enrolled in the same assignment but doesn't have a team and topic yet, he will be able to see the team advertisements by other teams. He can respond to any of the available advertisements. As soon as he responds to an advertisement, an entry is created in the &amp;quot;join_team_requests&amp;quot; table and the &amp;quot;status&amp;quot; attribute of the corresponding tuple holds &amp;quot;P&amp;quot; value signifying pending status. This request goes to the team who had posted that advertisement. The request can be approved or denied by the team members. In either of the case, the  &amp;quot;status&amp;quot; changes to &amp;quot;A&amp;quot; or &amp;quot;D&amp;quot; respectively for that entry.&lt;br /&gt;
&lt;br /&gt;
If there is an entry in the &amp;quot;join_team_requests&amp;quot; table for a user, then (s)he can only see advertisements if the corresponding &amp;quot;status&amp;quot; is &amp;quot;D&amp;quot;, which implies that this user is not yet part of a team. This can be checked by querying for participant_id, which is unique for each combination of (user_id, assignment_id), and then checking the &amp;quot;status&amp;quot; corresponding to that participant_id.&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify sign_up_sheet.rb:&lt;br /&gt;
&lt;br /&gt;
  Respond_To_Ads(user_id, assignment_id)&lt;br /&gt;
  p_id=Fetch participant_id corressponding to (user_id, assignment_id)&lt;br /&gt;
  Check entries for p_id in table join_team_request_table where status is either &amp;quot;A&amp;quot; or &amp;quot;P&amp;quot;&lt;br /&gt;
  count=number of such entries&lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If Sign Up Sheet has topics for a particular assignment()&lt;br /&gt;
  If Respond_To_Ads(user_id, assignment_id) is equal to 0&lt;br /&gt;
     Show Trumpet icon which is a link to the Ads&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227 '''===&lt;br /&gt;
&lt;br /&gt;
If a user has an assignment and a topic only then (s)he will be able to advertise for team members to join their team. If a user doesn't have a topic (s)he won't be able to advertise.&lt;br /&gt;
The scenario in which A, B were two users, A with a topic, B without a topic, A joins B's  team but A's topic gets dropped; A,B become a team but with no topic. Such cases are now avoided as we have ensured that without first selecting a topic a user cannot advertise for team members nor can he send invitations to other users to join his team. This is done by quering in the database using inner join between tables-SignUpTopic, signed_up_teams,  team_users; and checking if the user has a topic for a particular assignment. If (s)he has a topic then he'll be able to see the option for advertising for teammates.&lt;br /&gt;
If the assignment doesn't have a topic then the user will be able to send out team invitations.&lt;br /&gt;
Pseudocode representing the logic we have used to modify student_teams_helper.rb:&lt;br /&gt;
&lt;br /&gt;
  StudentTeamsHelper&lt;br /&gt;
  If the concerned assignment has topics&lt;br /&gt;
    return false if their are topics&lt;br /&gt;
  else return true&lt;br /&gt;
&lt;br /&gt;
  User_Has_Topic(user_id, assignment_id)&lt;br /&gt;
    Query the database using inner joins between SignUpTopic, signed_up_teams,  team_users rows= number of rows returned by the above query&lt;br /&gt;
  If rows&amp;gt;0&lt;br /&gt;
    return true&lt;br /&gt;
  else&lt;br /&gt;
    return false&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If concerned assignment does not have topics OR User_Has_Topic is true&lt;br /&gt;
    Make Invite link visible&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''How to test'''==&lt;br /&gt;
----&lt;br /&gt;
https://mymediasite.online.ncsu.edu/online/Play/3b649b16e7f7448d9d1ee79ee1448b221d&lt;br /&gt;
----&lt;br /&gt;
https://mymediasite.online.ncsu.edu/online/Play/31dcb783510c4322bcfbc894c71fbdd01d&lt;br /&gt;
----&lt;br /&gt;
==='''Issue #311'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
2)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
3)Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
4)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. &lt;br /&gt;
&lt;br /&gt;
5)Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
6)Login as another user(Student) or impersonate another student, say student B, whom you have enrolled in the assignment.&lt;br /&gt;
&lt;br /&gt;
7)Since B doesn't have a topic yet, so you won't be able to see the advertise link. &lt;br /&gt;
&lt;br /&gt;
8)Go to the sign-up sheet for the assignment, you'll be able to see a trumpet icon next to the topic that has an ad posted.&lt;br /&gt;
&lt;br /&gt;
9)Click on the icon, you'll see the ad posted by A. Click on request to join A's team.&lt;br /&gt;
&lt;br /&gt;
10)On doing so an entry is created on the table &amp;quot;&amp;quot; and status holds value &amp;quot;P&amp;quot; signifying a pending request.&lt;br /&gt;
&lt;br /&gt;
11)Now if you go on the sign-up sheet again, you will no longer see the trumpet icon through which you can access the ads since you have already responded to an ad and the request is in pending state.&lt;br /&gt;
&lt;br /&gt;
12)Login as user A or impersonate A, now you'll be able to see the team join request sent by user B.&lt;br /&gt;
&lt;br /&gt;
13) Now, you can either approve it or decline it. Suppose you approve it, B will become a part of your team, and the status will change to &amp;quot;A&amp;quot;. And now if you login as B or impersonate B, you will no longer be able to access the trumpet icon which is a link to all ads pertaining to topics the concerned assignment.&lt;br /&gt;
&lt;br /&gt;
14)Had user A declined User Bs join request, the status in the table &amp;quot;&amp;quot; would change to &amp;quot;D&amp;quot;, that means user B still doesn't have a team. So, now if you login as B or impersonate, you'll be able to see the ads again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. &lt;br /&gt;
&lt;br /&gt;
2)You should be able to see the assignment now in the Assignment section. Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
3)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4)This ensures that for an assignment with  topics, a user can send out advertisements only if (s)he has a topic.&lt;br /&gt;
&lt;br /&gt;
5)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, do not add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
6)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
7)Since the assignment doesn't have any topics, therefore, you will be able to see the advertise link. You won't see a sign-up sheet since the assignment has no topics. You can advertise for teammates.&lt;br /&gt;
&lt;br /&gt;
==='''Screenshots from conducted Test '''===&lt;br /&gt;
1) On clicking on 'Manage Content' the following screen is rendered which lists the existing assignments.&lt;br /&gt;
----&lt;br /&gt;
[[File:create public assignment.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
2) On clicking on 'New Public Assignment' the following form is displayed in which assignment details can be entered.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup1.jpg  ]]&lt;br /&gt;
----&lt;br /&gt;
3)Editing the created assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup2.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
4)Click on 'Topics' to add topics for the assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup3.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
5)Click on 'Rubrics' to setup assignment rubrics.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup4.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
6)The following screenshot shows the completed setup.&lt;br /&gt;
----&lt;br /&gt;
[[File:completed setup for assignment with topic.jpg]]&lt;br /&gt;
----&lt;br /&gt;
7)On clicking on the image-link for adding participants for an assignment, the following screen is rendered.&lt;br /&gt;
----&lt;br /&gt;
[[File:adding student to assignmet.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
8)Showing all added participants.&lt;br /&gt;
----&lt;br /&gt;
[[File:add the students.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
9)The following screen is rendered when a student who is a participant in the current assignment clicks on it's sign-up sheet.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the  topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
10)The following screen is rendered when a participant clicks on the sign-up sheet for the assignment. link.&lt;br /&gt;
----&lt;br /&gt;
[[File:select topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
11)The following screen is rendered when a participant chooses a topic and then clicks on 'create advertisement'.&lt;br /&gt;
----&lt;br /&gt;
[[File:create ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
12)After creating an ad, user can now see a horn icon which is a link to display the advertisements corresponding to that topic in that assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:see ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
13)The following screen is rendered after clicking on the horn icon.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
14)The following screen is rendered after clicking on the link 'Request invitation'.&lt;br /&gt;
----&lt;br /&gt;
[[File:respond to ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
15)After sending a request to join a team (via ad), the user will no longer see the link for the ads unless the request is denied by the receiver.&lt;br /&gt;
----&lt;br /&gt;
[[File:cant see any more ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
16)This is the screen of the user who had created the ad. He is now able to see any join requests that he can approve/decline.&lt;br /&gt;
----&lt;br /&gt;
[[File:request to join.jpg  ]]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=111091</id>
		<title>CSC/ECE 517 Fall 2017/E1779. Fix teammate advertisements and requests to join a team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=111091"/>
		<updated>2017-11-01T00:25:01Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
==='''Problem Statement'''===&lt;br /&gt;
In Expertiza, there are teammate advertisement, invitation and join team request features which facilitate students to form teams. Teammate advertisement works only for assignments with topics. The topic holders can create advertisement and a trumpet icon will show on the signup sheet page. If one respond to the advertisement, a join team request will be created and the topic holder can see it on “Your team” page. After a student gets a team and the team is not full, (s)he should also be able to send invitations to others.&lt;br /&gt;
----&lt;br /&gt;
=='''Issues to be fixed'''==&lt;br /&gt;
&lt;br /&gt;
Fix Issue #311: when one respond to an advertisement, (s)he should only be able to respond once. When a team advertises for new members, someone who responds to an ad should only be allowed to respond once. Currently, after someone responds to an ad, they can respond again an unlimited number of times.&lt;br /&gt;
&lt;br /&gt;
Fix Issue #227 : if user A got a topic and user B got no topic, then A join B’s team, A’s topic be  dropped and A and B end up with a new team with no topic. This issue should be handle carefully because we cannot simply add B to A’s team (imagine, if A has teammate X and B has teammate Y...). One of a potential fix is that, for assignment w/ topics, one cannot not post an ad unless (s)he holds a topic, similarly, one cannot sent invitations unless (s)he holds a topic. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&lt;br /&gt;
1) app/models/sign_up_sheet.rb&lt;br /&gt;
&lt;br /&gt;
2) app/helpers/student_teams_helper.rb&lt;br /&gt;
&lt;br /&gt;
3) app/views/sign_up_sheet/_table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
4) app/views/student_teams/view.html.erb&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Approach taken to resolve the issues'''==&lt;br /&gt;
&lt;br /&gt;
==='''Issue #311 '''===&lt;br /&gt;
&lt;br /&gt;
A user who is enrolled in an assignment and has a topic can advertise for more team members. When another user, who is enrolled in the same assignment but doesn't have a team and topic yet, can see the team advertisements by other teams. He can respond to any advertisement. As soon as he responds to an advertisement, an entry is created in the &amp;quot;&amp;quot; table and the &amp;quot;status&amp;quot; attribute of the corressponding tupple holds &amp;quot;P&amp;quot; value signifying pending status. This request goes to the team who had posted that advertisement. The request can be approved or denied by the team members. In either of the case, the  &amp;quot;status&amp;quot; changes to &amp;quot;A&amp;quot; or &amp;quot;D&amp;quot; respectively.&lt;br /&gt;
&lt;br /&gt;
If there is an entry in the &amp;quot;&amp;quot; table for a user, then (s)he can only see advertisements if the corresponding &amp;quot;status&amp;quot; is &amp;quot;D&amp;quot;, which implies that this user is not yet part of a team. This can be checked by querying for participant_id, which is unique for each combination of  user_id, assignment_id, and then checking the &amp;quot;status&amp;quot; corresponding to that participant_id.&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify sign_up_sheet.rb:&lt;br /&gt;
&lt;br /&gt;
  Respond_To_Ads(user_id, assignment_id)&lt;br /&gt;
  p_id=Fetch participant_id corressponding to (user_id, assignment_id)&lt;br /&gt;
  Check entries for p_id in table join_team_request_table where status is either &amp;quot;A&amp;quot; or &amp;quot;P&amp;quot;&lt;br /&gt;
  count=number of such entries&lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If Sign Up Sheet has topics for a particular assignment()&lt;br /&gt;
  If Respond_To_Ads(user_id, assignment_id) is equal to 0&lt;br /&gt;
     Show Trumpet icon which is a link to the Ads&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227 '''===&lt;br /&gt;
&lt;br /&gt;
If a user has an assignment and a topic only then (s)he will be able to advertise for team members to join their team. If a user doesn't have a topic (s)he won't be able to advertise.&lt;br /&gt;
The scenario in which A, B were two users, A with a topic, B without a topic, A joins B's  team but A's topic gets dropped; A,B become a team but with no topic. Such cases are now avoided as we have ensured that without first selecting a topic a user cannot advertise for team members nor can he send invitations to other users to join his team. This is done by quering in the database using inner join between tables-SignUpTopic, signed_up_teams,  team_users; and checking if the user has a topic for a particular assignment. If (s)he has a topic then he'll be able to see the option for advertising for teammates.&lt;br /&gt;
If the assignment doesn't have a topic then the user will be able to send out team invitations.&lt;br /&gt;
Pseudocode representing the logic we have used to modify student_teams_helper.rb:&lt;br /&gt;
&lt;br /&gt;
  StudentTeamsHelper&lt;br /&gt;
  If the concerned assignment has topics&lt;br /&gt;
    return false if their are topics&lt;br /&gt;
  else return true&lt;br /&gt;
&lt;br /&gt;
  User_Has_Topic(user_id, assignment_id)&lt;br /&gt;
    Query the database using inner joins between SignUpTopic, signed_up_teams,  team_users rows= number of rows returned by the above query&lt;br /&gt;
  If rows&amp;gt;0&lt;br /&gt;
    return true&lt;br /&gt;
  else&lt;br /&gt;
    return false&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If concerned assignment does not have topics OR User_Has_Topic is true&lt;br /&gt;
    Make Invite link visible&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''How to test'''==&lt;br /&gt;
----&lt;br /&gt;
https://mymediasite.online.ncsu.edu/online/Play/3b649b16e7f7448d9d1ee79ee1448b221d&lt;br /&gt;
----&lt;br /&gt;
https://mymediasite.online.ncsu.edu/online/Play/31dcb783510c4322bcfbc894c71fbdd01d&lt;br /&gt;
----&lt;br /&gt;
==='''Issue #311'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
2)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
3)Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
4)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. &lt;br /&gt;
&lt;br /&gt;
5)Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
6)Login as another user(Student) or impersonate another student, say student B, whom you have enrolled in the assignment.&lt;br /&gt;
&lt;br /&gt;
7)Since B doesn't have a topic yet, so you won't be able to see the advertise link. &lt;br /&gt;
&lt;br /&gt;
8)Go to the sign-up sheet for the assignment, you'll be able to see a trumpet icon next to the topic that has an ad posted.&lt;br /&gt;
&lt;br /&gt;
9)Click on the icon, you'll see the ad posted by A. Click on request to join A's team.&lt;br /&gt;
&lt;br /&gt;
10)On doing so an entry is created on the table &amp;quot;&amp;quot; and status holds value &amp;quot;P&amp;quot; signifying a pending request.&lt;br /&gt;
&lt;br /&gt;
11)Now if you go on the sign-up sheet again, you will no longer see the trumpet icon through which you can access the ads since you have already responded to an ad and the request is in pending state.&lt;br /&gt;
&lt;br /&gt;
12)Login as user A or impersonate A, now you'll be able to see the team join request sent by user B.&lt;br /&gt;
&lt;br /&gt;
13) Now, you can either approve it or decline it. Suppose you approve it, B will become a part of your team, and the status will change to &amp;quot;A&amp;quot;. And now if you login as B or impersonate B, you will no longer be able to access the trumpet icon which is a link to all ads pertaining to topics the concerned assignment.&lt;br /&gt;
&lt;br /&gt;
14)Had user A declined User Bs join request, the status in the table &amp;quot;&amp;quot; would change to &amp;quot;D&amp;quot;, that means user B still doesn't have a team. So, now if you login as B or impersonate, you'll be able to see the ads again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. &lt;br /&gt;
&lt;br /&gt;
2)You should be able to see the assignment now in the Assignment section. Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
3)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4)This ensures that for an assignment with  topics, a user can send out advertisements only if (s)he has a topic.&lt;br /&gt;
&lt;br /&gt;
5)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, do not add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
6)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
7)Since the assignment doesn't have any topics, therefore, you will be able to see the advertise link. You won't see a sign-up sheet since the assignment has no topics. You can advertise for teammates.&lt;br /&gt;
&lt;br /&gt;
==='''Screenshots from conducted Test '''===&lt;br /&gt;
1) On clicking on 'Manage Content' the following screen is rendered which lists the existing assignments.&lt;br /&gt;
----&lt;br /&gt;
[[File:create public assignment.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
2) On clicking on 'New Public Assignment' the following form is displayed in which assignment details can be entered.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup1.jpg  ]]&lt;br /&gt;
----&lt;br /&gt;
3)Editing the created assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup2.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
4)Click on 'Topics' to add topics for the assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup3.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
5)Click on 'Rubrics' to setup assignment rubrics.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup4.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
6)The following screenshot shows the completed setup.&lt;br /&gt;
----&lt;br /&gt;
[[File:completed setup for assignment with topic.jpg]]&lt;br /&gt;
----&lt;br /&gt;
7)On clicking on the image-link for adding participants for an assignment, the following screen is rendered.&lt;br /&gt;
----&lt;br /&gt;
[[File:adding student to assignmet.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
8)Showing all added participants.&lt;br /&gt;
----&lt;br /&gt;
[[File:add the students.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
9)The following screen is rendered when a student who is a participant in the current assignment clicks on it's sign-up sheet.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the  topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
10)The following screen is rendered when a participant clicks on the sign-up sheet for the assignment. link.&lt;br /&gt;
----&lt;br /&gt;
[[File:select topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
11)The following screen is rendered when a participant chooses a topic and then clicks on 'create advertisement'.&lt;br /&gt;
----&lt;br /&gt;
[[File:create ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
12)After creating an ad, user can now see a horn icon which is a link to display the advertisements corresponding to that topic in that assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:see ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
13)The following screen is rendered after clicking on the horn icon.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
14)The following screen is rendered after clicking on the link 'Request invitation'.&lt;br /&gt;
----&lt;br /&gt;
[[File:respond to ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
15)After sending a request to join a team (via ad), the user will no longer see the link for the ads unless the request is denied by the receiver.&lt;br /&gt;
----&lt;br /&gt;
[[File:cant see any more ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
16)This is the screen of the user who had created the ad. He is now able to see any join requests that he can approve/decline.&lt;br /&gt;
----&lt;br /&gt;
[[File:request to join.jpg  ]]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:See_the_topic.jpg&amp;diff=109252</id>
		<title>File:See the topic.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:See_the_topic.jpg&amp;diff=109252"/>
		<updated>2017-10-25T04:07:32Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: uploaded a new version of &amp;amp;quot;File:See the topic.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Add_the_students.jpg&amp;diff=109251</id>
		<title>File:Add the students.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Add_the_students.jpg&amp;diff=109251"/>
		<updated>2017-10-25T04:07:01Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: uploaded a new version of &amp;amp;quot;File:Add the students.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Completed_setup_for_assignment_with_topic.jpg&amp;diff=109250</id>
		<title>File:Completed setup for assignment with topic.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Completed_setup_for_assignment_with_topic.jpg&amp;diff=109250"/>
		<updated>2017-10-25T04:06:07Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: uploaded a new version of &amp;amp;quot;File:Completed setup for assignment with topic.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Create_setup4.jpg&amp;diff=109249</id>
		<title>File:Create setup4.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Create_setup4.jpg&amp;diff=109249"/>
		<updated>2017-10-25T04:03:44Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: uploaded a new version of &amp;amp;quot;File:Create setup4.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Create_setup4.jpg&amp;diff=109248</id>
		<title>File:Create setup4.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Create_setup4.jpg&amp;diff=109248"/>
		<updated>2017-10-25T04:03:24Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: uploaded a new version of &amp;amp;quot;File:Create setup4.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Create_setup3.jpg&amp;diff=109247</id>
		<title>File:Create setup3.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Create_setup3.jpg&amp;diff=109247"/>
		<updated>2017-10-25T04:01:42Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: uploaded a new version of &amp;amp;quot;File:Create setup3.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Create_setup2.jpg&amp;diff=109246</id>
		<title>File:Create setup2.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Create_setup2.jpg&amp;diff=109246"/>
		<updated>2017-10-25T04:01:04Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: uploaded a new version of &amp;amp;quot;File:Create setup2.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Create_setup1.jpg&amp;diff=109245</id>
		<title>File:Create setup1.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Create_setup1.jpg&amp;diff=109245"/>
		<updated>2017-10-25T04:00:36Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: uploaded a new version of &amp;amp;quot;File:Create setup1.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Create_public_assignment.jpg&amp;diff=109244</id>
		<title>File:Create public assignment.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Create_public_assignment.jpg&amp;diff=109244"/>
		<updated>2017-10-25T04:00:13Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: uploaded a new version of &amp;amp;quot;File:Create public assignment.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Select_topic.jpg&amp;diff=109243</id>
		<title>File:Select topic.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Select_topic.jpg&amp;diff=109243"/>
		<updated>2017-10-25T03:59:45Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: uploaded a new version of &amp;amp;quot;File:Select topic.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:See_ad.jpg&amp;diff=109241</id>
		<title>File:See ad.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:See_ad.jpg&amp;diff=109241"/>
		<updated>2017-10-25T03:58:53Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: uploaded a new version of &amp;amp;quot;File:See ad.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:See_the_ad.jpg&amp;diff=109239</id>
		<title>File:See the ad.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:See_the_ad.jpg&amp;diff=109239"/>
		<updated>2017-10-25T03:58:14Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: uploaded a new version of &amp;amp;quot;File:See the ad.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Respond_to_ad.jpg&amp;diff=109238</id>
		<title>File:Respond to ad.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Respond_to_ad.jpg&amp;diff=109238"/>
		<updated>2017-10-25T03:57:36Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: uploaded a new version of &amp;amp;quot;File:Respond to ad.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Cant_see_any_more_ad.jpg&amp;diff=109237</id>
		<title>File:Cant see any more ad.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Cant_see_any_more_ad.jpg&amp;diff=109237"/>
		<updated>2017-10-25T03:56:58Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: uploaded a new version of &amp;amp;quot;File:Cant see any more ad.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Request_to_join.jpg&amp;diff=109236</id>
		<title>File:Request to join.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Request_to_join.jpg&amp;diff=109236"/>
		<updated>2017-10-25T03:55:16Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: uploaded a new version of &amp;amp;quot;File:Request to join.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=109233</id>
		<title>CSC/ECE 517 Fall 2017/E1779. Fix teammate advertisements and requests to join a team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=109233"/>
		<updated>2017-10-25T03:39:05Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
==='''Problem Statement'''===&lt;br /&gt;
In Expertiza, there are teammate advertisement, invitation and join team request features which facilitate students to form teams. Teammate advertisement works only for assignments with topics. The topic holders can create advertisement and a trumpet icon will show on the signup sheet page. If one respond to the advertisement, a join team request will be created and the topic holder can see it on “Your team” page. After a student gets a team and the team is not full, (s)he should also be able to send invitations to others.&lt;br /&gt;
----&lt;br /&gt;
=='''Issues to be fixed'''==&lt;br /&gt;
&lt;br /&gt;
Fix Issue #311: when one respond to an advertisement, (s)he should only be able to respond once. When a team advertises for new members, someone who responds to an ad should only be allowed to respond once. Currently, after someone responds to an ad, they can respond again an unlimited number of times.&lt;br /&gt;
&lt;br /&gt;
Fix Issue #227 : if user A got a topic and user B got no topic, then A join B’s team, A’s topic be  dropped and A and B end up with a new team with no topic. This issue should be handle carefully because we cannot simply add B to A’s team (imagine, if A has teammate X and B has teammate Y...). One of a potential fix is that, for assignment w/ topics, one cannot not post an ad unless (s)he holds a topic, similarly, one cannot sent invitations unless (s)he holds a topic. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&lt;br /&gt;
1) sign_up_sheet.rb&lt;br /&gt;
&lt;br /&gt;
2) student_teams_helper.rb&lt;br /&gt;
&lt;br /&gt;
3) _table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
4) view.html.erb&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Approach taken to resolve the issues'''==&lt;br /&gt;
&lt;br /&gt;
==='''Issue #311 '''===&lt;br /&gt;
&lt;br /&gt;
A user who is enrolled in an assignment and has a topic can advertise for more team members. When another user, who is enrolled in the same assignment but doesn't have a team and topic yet, can see the team advertisements by other teams. He can respond to any advertisement. As soon as he responds to an advertisement, an entry is created in the &amp;quot;&amp;quot; table and the &amp;quot;status&amp;quot; attribute of the corressponding tupple holds &amp;quot;P&amp;quot; value signifying pending status. This request goes to the team who had posted that advertisement. The request can be approved or denied by the team members. In either of the case, the  &amp;quot;status&amp;quot; changes to &amp;quot;A&amp;quot; or &amp;quot;D&amp;quot; respectively.&lt;br /&gt;
&lt;br /&gt;
If there is an entry in the &amp;quot;&amp;quot; table for a user, then (s)he can only see advertisements if the corresponding &amp;quot;status&amp;quot; is &amp;quot;D&amp;quot;, which implies that this user is not yet part of a team. This can be checked by querying for participant_id, which is unique for each combination of  user_id, assignment_id, and then checking the &amp;quot;status&amp;quot; corresponding to that participant_id.&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify sign_up_sheet.rb:&lt;br /&gt;
&lt;br /&gt;
  Respond_To_Ads(user_id, assignment_id)&lt;br /&gt;
  p_id=Fetch participant_id corressponding to (user_id, assignment_id)&lt;br /&gt;
  Check entries for p_id in table join_team_request_table where status is either &amp;quot;A&amp;quot; or &amp;quot;P&amp;quot;&lt;br /&gt;
  count=number of such entries&lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If Sign Up Sheet has topics for a particular assignment()&lt;br /&gt;
  If Respond_To_Ads(user_id, assignment_id) is equal to 0&lt;br /&gt;
     Show Trumpet icon which is a link to the Ads&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227 '''===&lt;br /&gt;
&lt;br /&gt;
If a user has an assignment and a topic only then (s)he will be able to advertise for team members to join their team. If a user doesn't have a topic (s)he won't be able to advertise.&lt;br /&gt;
The scenario in which A, B were two users, A with a topic, B without a topic, A joins B's  team but A's topic gets dropped; A,B become a team but with no topic. Such cases are now avoided as we have ensured that without first selecting a topic a user cannot advertise for team members nor can he send invitations to other users to join his team. This is done by quering in the database using inner join between tables-SignUpTopic, signed_up_teams,  team_users; and checking if the user has a topic for a particular assignment. If (s)he has a topic then he'll be able to see the option for advertising for teammates.&lt;br /&gt;
If the assignment doesn't have a topic then the user will be able to send out team invitations.&lt;br /&gt;
Pseudocode representing the logic we have used to modify student_teams_helper.rb:&lt;br /&gt;
&lt;br /&gt;
  StudentTeamsHelper&lt;br /&gt;
  If the concerned assignment has topics&lt;br /&gt;
    return false if their are topics&lt;br /&gt;
  else return true&lt;br /&gt;
&lt;br /&gt;
  User_Has_Topic(user_id, assignment_id)&lt;br /&gt;
    Query the database using inner joins between SignUpTopic, signed_up_teams,  team_users rows= number of rows returned by the above query&lt;br /&gt;
  If rows&amp;gt;0&lt;br /&gt;
    return true&lt;br /&gt;
  else&lt;br /&gt;
    return false&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If concerned assignment does not have topics OR User_Has_Topic is true&lt;br /&gt;
    Make Invite link visible&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''How to test'''==&lt;br /&gt;
----&lt;br /&gt;
https://mymediasite.online.ncsu.edu/online/Play/3b649b16e7f7448d9d1ee79ee1448b221d&lt;br /&gt;
----&lt;br /&gt;
https://mymediasite.online.ncsu.edu/online/Play/31dcb783510c4322bcfbc894c71fbdd01d&lt;br /&gt;
----&lt;br /&gt;
==='''Issue #311'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
2)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
3)Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
4)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. &lt;br /&gt;
&lt;br /&gt;
5)Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
6)Login as another user(Student) or impersonate another student, say student B, whom you have enrolled in the assignment.&lt;br /&gt;
&lt;br /&gt;
7)Since B doesn't have a topic yet, so you won't be able to see the advertise link. &lt;br /&gt;
&lt;br /&gt;
8)Go to the sign-up sheet for the assignment, you'll be able to see a trumpet icon next to the topic that has an ad posted.&lt;br /&gt;
&lt;br /&gt;
9)Click on the icon, you'll see the ad posted by A. Click on request to join A's team.&lt;br /&gt;
&lt;br /&gt;
10)On doing so an entry is created on the table &amp;quot;&amp;quot; and status holds value &amp;quot;P&amp;quot; signifying a pending request.&lt;br /&gt;
&lt;br /&gt;
11)Now if you go on the sign-up sheet again, you will no longer see the trumpet icon through which you can access the ads since you have already responded to an ad and the request is in pending state.&lt;br /&gt;
&lt;br /&gt;
12)Login as user A or impersonate A, now you'll be able to see the team join request sent by user B.&lt;br /&gt;
&lt;br /&gt;
13) Now, you can either approve it or decline it. Suppose you approve it, B will become a part of your team, and the status will change to &amp;quot;A&amp;quot;. And now if you login as B or impersonate B, you will no longer be able to access the trumpet icon which is a link to all ads pertaining to topics the concerned assignment.&lt;br /&gt;
&lt;br /&gt;
14)Had user A declined User Bs join request, the status in the table &amp;quot;&amp;quot; would change to &amp;quot;D&amp;quot;, that means user B still doesn't have a team. So, now if you login as B or impersonate, you'll be able to see the ads again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. &lt;br /&gt;
&lt;br /&gt;
2)You should be able to see the assignment now in the Assignment section. Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
3)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4)This ensures that for an assignment with  topics, a user can send out advertisements only if (s)he has a topic.&lt;br /&gt;
&lt;br /&gt;
5)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, do not add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
6)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
7)Since the assignment doesn't have any topics, therefore, you will be able to see the advertise link. You won't see a sign-up sheet since the assignment has no topics. You can advertise for teammates.&lt;br /&gt;
&lt;br /&gt;
==='''Screenshots from conducted Test '''===&lt;br /&gt;
1) On clicking on 'Manage Content' the following screen is rendered which lists the existing assignments.&lt;br /&gt;
----&lt;br /&gt;
[[File:create public assignment.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
2) On clicking on 'New Public Assignment' the following form is displayed in which assignment details can be entered.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup1.jpg  ]]&lt;br /&gt;
----&lt;br /&gt;
3)Editing the created assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup2.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
4)Click on 'Topics' to add topics for the assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup3.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
5)Click on 'Rubrics' to setup assignment rubrics.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup4.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
6)The following screenshot shows the completed setup.&lt;br /&gt;
----&lt;br /&gt;
[[File:completed setup for assignment with topic.jpg]]&lt;br /&gt;
----&lt;br /&gt;
7)On clicking on the image-link for adding participants for an assignment, the following screen is rendered.&lt;br /&gt;
----&lt;br /&gt;
[[File:adding student to assignmet.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
8)Showing all added participants.&lt;br /&gt;
----&lt;br /&gt;
[[File:add the students.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
9)The following screen is rendered when a student who is a participant in the current assignment clicks on it's sign-up sheet.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the  topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
10)The following screen is rendered when a participant clicks on the sign-up sheet for the assignment. link.&lt;br /&gt;
----&lt;br /&gt;
[[File:select topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
11)The following screen is rendered when a participant chooses a topic and then clicks on 'create advertisement'.&lt;br /&gt;
----&lt;br /&gt;
[[File:create ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
12)After creating an ad, user can now see a horn icon which is a link to display the advertisements corresponding to that topic in that assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:see ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
13)The following screen is rendered after clicking on the horn icon.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
14)The following screen is rendered after clicking on the link 'Request invitation'.&lt;br /&gt;
----&lt;br /&gt;
[[File:respond to ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
15)After sending a request to join a team (via ad), the user will no longer see the link for the ads unless the request is denied by the receiver.&lt;br /&gt;
----&lt;br /&gt;
[[File:cant see any more ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
16)This is the screen of the user who had created the ad. He is now able to see any join requests that he can approve/decline.&lt;br /&gt;
----&lt;br /&gt;
[[File:request to join.jpg |frame|upright=0.6|center|width:10px|Request to Join  ]]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=109230</id>
		<title>CSC/ECE 517 Fall 2017/E1779. Fix teammate advertisements and requests to join a team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=109230"/>
		<updated>2017-10-25T03:34:15Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: /* How to test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
==='''Problem Statement'''===&lt;br /&gt;
In Expertiza, there are teammate advertisement, invitation and join team request features which facilitate students to form teams. Teammate advertisement works only for assignments with topics. The topic holders can create advertisement and a trumpet icon will show on the signup sheet page. If one respond to the advertisement, a join team request will be created and the topic holder can see it on “Your team” page. After a student gets a team and the team is not full, (s)he should also be able to send invitations to others.&lt;br /&gt;
----&lt;br /&gt;
=='''Issues to be fixed'''==&lt;br /&gt;
&lt;br /&gt;
Fix Issue #311: when one respond to an advertisement, (s)he should only be able to respond once. When a team advertises for new members, someone who responds to an ad should only be allowed to respond once. Currently, after someone responds to an ad, they can respond again an unlimited number of times.&lt;br /&gt;
&lt;br /&gt;
Fix Issue #227 : if user A got a topic and user B got no topic, then A join B’s team, A’s topic be  dropped and A and B end up with a new team with no topic. This issue should be handle carefully because we cannot simply add B to A’s team (imagine, if A has teammate X and B has teammate Y...). One of a potential fix is that, for assignment w/ topics, one cannot not post an ad unless (s)he holds a topic, similarly, one cannot sent invitations unless (s)he holds a topic. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&lt;br /&gt;
1) sign_up_sheet.rb&lt;br /&gt;
&lt;br /&gt;
2) student_teams_helper.rb&lt;br /&gt;
&lt;br /&gt;
3) _table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
4) view.html.erb&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Approach taken to resolve the issues'''==&lt;br /&gt;
&lt;br /&gt;
==='''Issue #311 '''===&lt;br /&gt;
&lt;br /&gt;
A user who is enrolled in an assignment and has a topic can advertise for more team members. When another user, who is enrolled in the same assignment but doesn't have a team and topic yet, can see the team advertisements by other teams. He can respond to any advertisement. As soon as he responds to an advertisement, an entry is created in the &amp;quot;&amp;quot; table and the &amp;quot;status&amp;quot; attribute of the corressponding tupple holds &amp;quot;P&amp;quot; value signifying pending status. This request goes to the team who had posted that advertisement. The request can be approved or denied by the team members. In either of the case, the  &amp;quot;status&amp;quot; changes to &amp;quot;A&amp;quot; or &amp;quot;D&amp;quot; respectively.&lt;br /&gt;
&lt;br /&gt;
If there is an entry in the &amp;quot;&amp;quot; table for a user, then (s)he can only see advertisements if the corresponding &amp;quot;status&amp;quot; is &amp;quot;D&amp;quot;, which implies that this user is not yet part of a team. This can be checked by querying for participant_id, which is unique for each combination of  user_id, assignment_id, and then checking the &amp;quot;status&amp;quot; corresponding to that participant_id.&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify sign_up_sheet.rb:&lt;br /&gt;
&lt;br /&gt;
  Respond_To_Ads(user_id, assignment_id)&lt;br /&gt;
  p_id=Fetch participant_id corressponding to (user_id, assignment_id)&lt;br /&gt;
  Check entries for p_id in table join_team_request_table where status is either &amp;quot;A&amp;quot; or &amp;quot;P&amp;quot;&lt;br /&gt;
  count=number of such entries&lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If Sign Up Sheet has topics for a particular assignment()&lt;br /&gt;
  If Respond_To_Ads(user_id, assignment_id) is equal to 0&lt;br /&gt;
     Show Trumpet icon which is a link to the Ads&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227 '''===&lt;br /&gt;
&lt;br /&gt;
If a user has an assignment and a topic only then (s)he will be able to advertise for team members to join their team. If a user doesn't have a topic (s)he won't be able to advertise.&lt;br /&gt;
The scenario in which A, B were two users, A with a topic, B without a topic, A joins B's  team but A's topic gets dropped; A,B become a team but with no topic. Such cases are now avoided as we have ensured that without first selecting a topic a user cannot advertise for team members nor can he send invitations to other users to join his team. This is done by quering in the database using inner join between tables-SignUpTopic, signed_up_teams,  team_users; and checking if the user has a topic for a particular assignment. If (s)he has a topic then he'll be able to see the option for advertising for teammates.&lt;br /&gt;
If the assignment doesn't have a topic then the user will be able to send out team invitations.&lt;br /&gt;
Pseudocode representing the logic we have used to modify student_teams_helper.rb:&lt;br /&gt;
&lt;br /&gt;
  StudentTeamsHelper&lt;br /&gt;
  If the concerned assignment has topics&lt;br /&gt;
    return false if their are topics&lt;br /&gt;
  else return true&lt;br /&gt;
&lt;br /&gt;
  User_Has_Topic(user_id, assignment_id)&lt;br /&gt;
    Query the database using inner joins between SignUpTopic, signed_up_teams,  team_users rows= number of rows returned by the above query&lt;br /&gt;
  If rows&amp;gt;0&lt;br /&gt;
    return true&lt;br /&gt;
  else&lt;br /&gt;
    return false&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If concerned assignment does not have topics OR User_Has_Topic is true&lt;br /&gt;
    Make Invite link visible&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''How to test'''==&lt;br /&gt;
----&lt;br /&gt;
https://mymediasite.online.ncsu.edu/online/Play/3b649b16e7f7448d9d1ee79ee1448b221d&lt;br /&gt;
----&lt;br /&gt;
https://mymediasite.online.ncsu.edu/online/Play/31dcb783510c4322bcfbc894c71fbdd01d&lt;br /&gt;
----&lt;br /&gt;
==='''Issue #311'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
2)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
3)Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
4)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. &lt;br /&gt;
&lt;br /&gt;
5)Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
6)Login as another user(Student) or impersonate another student, say student B, whom you have enrolled in the assignment.&lt;br /&gt;
&lt;br /&gt;
7)Since B doesn't have a topic yet, so you won't be able to see the advertise link. &lt;br /&gt;
&lt;br /&gt;
8)Go to the sign-up sheet for the assignment, you'll be able to see a trumpet icon next to the topic that has an ad posted.&lt;br /&gt;
&lt;br /&gt;
9)Click on the icon, you'll see the ad posted by A. Click on request to join A's team.&lt;br /&gt;
&lt;br /&gt;
10)On doing so an entry is created on the table &amp;quot;&amp;quot; and status holds value &amp;quot;P&amp;quot; signifying a pending request.&lt;br /&gt;
&lt;br /&gt;
11)Now if you go on the sign-up sheet again, you will no longer see the trumpet icon through which you can access the ads since you have already responded to an ad and the request is in pending state.&lt;br /&gt;
&lt;br /&gt;
12)Login as user A or impersonate A, now you'll be able to see the team join request sent by user B.&lt;br /&gt;
&lt;br /&gt;
13) Now, you can either approve it or decline it. Suppose you approve it, B will become a part of your team, and the status will change to &amp;quot;A&amp;quot;. And now if you login as B or impersonate B, you will no longer be able to access the trumpet icon which is a link to all ads pertaining to topics the concerned assignment.&lt;br /&gt;
&lt;br /&gt;
14)Had user A declined User Bs join request, the status in the table &amp;quot;&amp;quot; would change to &amp;quot;D&amp;quot;, that means user B still doesn't have a team. So, now if you login as B or impersonate, you'll be able to see the ads again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. &lt;br /&gt;
&lt;br /&gt;
2)You should be able to see the assignment now in the Assignment section. Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
3)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4)This ensures that for an assignment with  topics, a user can send out advertisements only if (s)he has a topic.&lt;br /&gt;
&lt;br /&gt;
5)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, do not add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
6)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
7)Since the assignment doesn't have any topics, therefore, you will be able to see the advertise link. You won't see a sign-up sheet since the assignment has no topics. You can advertise for teammates.&lt;br /&gt;
&lt;br /&gt;
==='''Screenshots from conducted Test '''===&lt;br /&gt;
On clicking on 'Manage Content' the following screen is rendered which lists the existing assignments.&lt;br /&gt;
----&lt;br /&gt;
[[File:create public assignment.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
On clicking on 'New Public Assignment' the following form is displayed in which assignment details can be entered.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup1.jpg  ]]&lt;br /&gt;
----&lt;br /&gt;
Editing the created assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup2.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Click on 'Topics' to add topics for the assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup3.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Click on 'Rubrics' to setup assignment rubrics.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup4.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screenshot shows the completed setup.&lt;br /&gt;
----&lt;br /&gt;
[[File:completed setup for assignment with topic.jpg]]&lt;br /&gt;
----&lt;br /&gt;
On clicking on the image-link for adding participants for an assignment, the following screen is rendered.&lt;br /&gt;
----&lt;br /&gt;
[[File:adding student to assignmet.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Showing all added participants.&lt;br /&gt;
----&lt;br /&gt;
[[File:add the students.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a student who is a participant in the current assignment clicks on it's sign-up sheet.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the  topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a participant clicks on the sign-up sheet for the assignment. link.&lt;br /&gt;
----&lt;br /&gt;
[[File:select topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a participant chooses a topic and then clicks on 'create advertisement'.&lt;br /&gt;
----&lt;br /&gt;
[[File:create ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
After creating an ad, user can now see a horn icon which is a link to display the advertisements corresponding to that topic in that assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:see ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered after clicking on the horn icon.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered after clicking on the link 'Request invitation'.&lt;br /&gt;
----&lt;br /&gt;
[[File:respond to ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
After sending a request to join a team (via ad), the user will no longer see the link for the ads unless the request is denied by the receiver.&lt;br /&gt;
----&lt;br /&gt;
[[File:cant see any more ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
'''This is the screen of the user who had created the ad. He is now able to see any join requests that he can approve/decline.'''&lt;br /&gt;
----&lt;br /&gt;
[[File:request to join.jpg ]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=109229</id>
		<title>CSC/ECE 517 Fall 2017/E1779. Fix teammate advertisements and requests to join a team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=109229"/>
		<updated>2017-10-25T03:33:52Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
==='''Problem Statement'''===&lt;br /&gt;
In Expertiza, there are teammate advertisement, invitation and join team request features which facilitate students to form teams. Teammate advertisement works only for assignments with topics. The topic holders can create advertisement and a trumpet icon will show on the signup sheet page. If one respond to the advertisement, a join team request will be created and the topic holder can see it on “Your team” page. After a student gets a team and the team is not full, (s)he should also be able to send invitations to others.&lt;br /&gt;
----&lt;br /&gt;
=='''Issues to be fixed'''==&lt;br /&gt;
&lt;br /&gt;
Fix Issue #311: when one respond to an advertisement, (s)he should only be able to respond once. When a team advertises for new members, someone who responds to an ad should only be allowed to respond once. Currently, after someone responds to an ad, they can respond again an unlimited number of times.&lt;br /&gt;
&lt;br /&gt;
Fix Issue #227 : if user A got a topic and user B got no topic, then A join B’s team, A’s topic be  dropped and A and B end up with a new team with no topic. This issue should be handle carefully because we cannot simply add B to A’s team (imagine, if A has teammate X and B has teammate Y...). One of a potential fix is that, for assignment w/ topics, one cannot not post an ad unless (s)he holds a topic, similarly, one cannot sent invitations unless (s)he holds a topic. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&lt;br /&gt;
1) sign_up_sheet.rb&lt;br /&gt;
&lt;br /&gt;
2) student_teams_helper.rb&lt;br /&gt;
&lt;br /&gt;
3) _table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
4) view.html.erb&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Approach taken to resolve the issues'''==&lt;br /&gt;
&lt;br /&gt;
==='''Issue #311 '''===&lt;br /&gt;
&lt;br /&gt;
A user who is enrolled in an assignment and has a topic can advertise for more team members. When another user, who is enrolled in the same assignment but doesn't have a team and topic yet, can see the team advertisements by other teams. He can respond to any advertisement. As soon as he responds to an advertisement, an entry is created in the &amp;quot;&amp;quot; table and the &amp;quot;status&amp;quot; attribute of the corressponding tupple holds &amp;quot;P&amp;quot; value signifying pending status. This request goes to the team who had posted that advertisement. The request can be approved or denied by the team members. In either of the case, the  &amp;quot;status&amp;quot; changes to &amp;quot;A&amp;quot; or &amp;quot;D&amp;quot; respectively.&lt;br /&gt;
&lt;br /&gt;
If there is an entry in the &amp;quot;&amp;quot; table for a user, then (s)he can only see advertisements if the corresponding &amp;quot;status&amp;quot; is &amp;quot;D&amp;quot;, which implies that this user is not yet part of a team. This can be checked by querying for participant_id, which is unique for each combination of  user_id, assignment_id, and then checking the &amp;quot;status&amp;quot; corresponding to that participant_id.&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify sign_up_sheet.rb:&lt;br /&gt;
&lt;br /&gt;
  Respond_To_Ads(user_id, assignment_id)&lt;br /&gt;
  p_id=Fetch participant_id corressponding to (user_id, assignment_id)&lt;br /&gt;
  Check entries for p_id in table join_team_request_table where status is either &amp;quot;A&amp;quot; or &amp;quot;P&amp;quot;&lt;br /&gt;
  count=number of such entries&lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If Sign Up Sheet has topics for a particular assignment()&lt;br /&gt;
  If Respond_To_Ads(user_id, assignment_id) is equal to 0&lt;br /&gt;
     Show Trumpet icon which is a link to the Ads&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227 '''===&lt;br /&gt;
&lt;br /&gt;
If a user has an assignment and a topic only then (s)he will be able to advertise for team members to join their team. If a user doesn't have a topic (s)he won't be able to advertise.&lt;br /&gt;
The scenario in which A, B were two users, A with a topic, B without a topic, A joins B's  team but A's topic gets dropped; A,B become a team but with no topic. Such cases are now avoided as we have ensured that without first selecting a topic a user cannot advertise for team members nor can he send invitations to other users to join his team. This is done by quering in the database using inner join between tables-SignUpTopic, signed_up_teams,  team_users; and checking if the user has a topic for a particular assignment. If (s)he has a topic then he'll be able to see the option for advertising for teammates.&lt;br /&gt;
If the assignment doesn't have a topic then the user will be able to send out team invitations.&lt;br /&gt;
Pseudocode representing the logic we have used to modify student_teams_helper.rb:&lt;br /&gt;
&lt;br /&gt;
  StudentTeamsHelper&lt;br /&gt;
  If the concerned assignment has topics&lt;br /&gt;
    return false if their are topics&lt;br /&gt;
  else return true&lt;br /&gt;
&lt;br /&gt;
  User_Has_Topic(user_id, assignment_id)&lt;br /&gt;
    Query the database using inner joins between SignUpTopic, signed_up_teams,  team_users rows= number of rows returned by the above query&lt;br /&gt;
  If rows&amp;gt;0&lt;br /&gt;
    return true&lt;br /&gt;
  else&lt;br /&gt;
    return false&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If concerned assignment does not have topics OR User_Has_Topic is true&lt;br /&gt;
    Make Invite link visible&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''How to test'''==&lt;br /&gt;
----&lt;br /&gt;
https://mymediasite.online.ncsu.edu/online/Play/3b649b16e7f7448d9d1ee79ee1448b221d&lt;br /&gt;
https://mymediasite.online.ncsu.edu/online/Play/31dcb783510c4322bcfbc894c71fbdd01d&lt;br /&gt;
----&lt;br /&gt;
==='''Issue #311'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
2)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
3)Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
4)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. &lt;br /&gt;
&lt;br /&gt;
5)Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
6)Login as another user(Student) or impersonate another student, say student B, whom you have enrolled in the assignment.&lt;br /&gt;
&lt;br /&gt;
7)Since B doesn't have a topic yet, so you won't be able to see the advertise link. &lt;br /&gt;
&lt;br /&gt;
8)Go to the sign-up sheet for the assignment, you'll be able to see a trumpet icon next to the topic that has an ad posted.&lt;br /&gt;
&lt;br /&gt;
9)Click on the icon, you'll see the ad posted by A. Click on request to join A's team.&lt;br /&gt;
&lt;br /&gt;
10)On doing so an entry is created on the table &amp;quot;&amp;quot; and status holds value &amp;quot;P&amp;quot; signifying a pending request.&lt;br /&gt;
&lt;br /&gt;
11)Now if you go on the sign-up sheet again, you will no longer see the trumpet icon through which you can access the ads since you have already responded to an ad and the request is in pending state.&lt;br /&gt;
&lt;br /&gt;
12)Login as user A or impersonate A, now you'll be able to see the team join request sent by user B.&lt;br /&gt;
&lt;br /&gt;
13) Now, you can either approve it or decline it. Suppose you approve it, B will become a part of your team, and the status will change to &amp;quot;A&amp;quot;. And now if you login as B or impersonate B, you will no longer be able to access the trumpet icon which is a link to all ads pertaining to topics the concerned assignment.&lt;br /&gt;
&lt;br /&gt;
14)Had user A declined User Bs join request, the status in the table &amp;quot;&amp;quot; would change to &amp;quot;D&amp;quot;, that means user B still doesn't have a team. So, now if you login as B or impersonate, you'll be able to see the ads again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. &lt;br /&gt;
&lt;br /&gt;
2)You should be able to see the assignment now in the Assignment section. Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
3)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4)This ensures that for an assignment with  topics, a user can send out advertisements only if (s)he has a topic.&lt;br /&gt;
&lt;br /&gt;
5)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, do not add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
6)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
7)Since the assignment doesn't have any topics, therefore, you will be able to see the advertise link. You won't see a sign-up sheet since the assignment has no topics. You can advertise for teammates.&lt;br /&gt;
&lt;br /&gt;
==='''Screenshots from conducted Test '''===&lt;br /&gt;
On clicking on 'Manage Content' the following screen is rendered which lists the existing assignments.&lt;br /&gt;
----&lt;br /&gt;
[[File:create public assignment.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
On clicking on 'New Public Assignment' the following form is displayed in which assignment details can be entered.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup1.jpg  ]]&lt;br /&gt;
----&lt;br /&gt;
Editing the created assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup2.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Click on 'Topics' to add topics for the assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup3.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Click on 'Rubrics' to setup assignment rubrics.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup4.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screenshot shows the completed setup.&lt;br /&gt;
----&lt;br /&gt;
[[File:completed setup for assignment with topic.jpg]]&lt;br /&gt;
----&lt;br /&gt;
On clicking on the image-link for adding participants for an assignment, the following screen is rendered.&lt;br /&gt;
----&lt;br /&gt;
[[File:adding student to assignmet.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Showing all added participants.&lt;br /&gt;
----&lt;br /&gt;
[[File:add the students.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a student who is a participant in the current assignment clicks on it's sign-up sheet.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the  topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a participant clicks on the sign-up sheet for the assignment. link.&lt;br /&gt;
----&lt;br /&gt;
[[File:select topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a participant chooses a topic and then clicks on 'create advertisement'.&lt;br /&gt;
----&lt;br /&gt;
[[File:create ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
After creating an ad, user can now see a horn icon which is a link to display the advertisements corresponding to that topic in that assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:see ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered after clicking on the horn icon.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered after clicking on the link 'Request invitation'.&lt;br /&gt;
----&lt;br /&gt;
[[File:respond to ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
After sending a request to join a team (via ad), the user will no longer see the link for the ads unless the request is denied by the receiver.&lt;br /&gt;
----&lt;br /&gt;
[[File:cant see any more ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
'''This is the screen of the user who had created the ad. He is now able to see any join requests that he can approve/decline.'''&lt;br /&gt;
----&lt;br /&gt;
[[File:request to join.jpg ]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=109228</id>
		<title>CSC/ECE 517 Fall 2017/E1779. Fix teammate advertisements and requests to join a team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=109228"/>
		<updated>2017-10-25T03:32:39Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
==='''Problem Statement'''===&lt;br /&gt;
In Expertiza, there are teammate advertisement, invitation and join team request features which facilitate students to form teams. Teammate advertisement works only for assignments with topics. The topic holders can create advertisement and a trumpet icon will show on the signup sheet page. If one respond to the advertisement, a join team request will be created and the topic holder can see it on “Your team” page. After a student gets a team and the team is not full, (s)he should also be able to send invitations to others.&lt;br /&gt;
----&lt;br /&gt;
=='''Issues to be fixed'''==&lt;br /&gt;
&lt;br /&gt;
Fix Issue #311: when one respond to an advertisement, (s)he should only be able to respond once. When a team advertises for new members, someone who responds to an ad should only be allowed to respond once. Currently, after someone responds to an ad, they can respond again an unlimited number of times.&lt;br /&gt;
&lt;br /&gt;
Fix Issue #227 : if user A got a topic and user B got no topic, then A join B’s team, A’s topic be  dropped and A and B end up with a new team with no topic. This issue should be handle carefully because we cannot simply add B to A’s team (imagine, if A has teammate X and B has teammate Y...). One of a potential fix is that, for assignment w/ topics, one cannot not post an ad unless (s)he holds a topic, similarly, one cannot sent invitations unless (s)he holds a topic. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&lt;br /&gt;
1) sign_up_sheet.rb&lt;br /&gt;
&lt;br /&gt;
2) student_teams_helper.rb&lt;br /&gt;
&lt;br /&gt;
3) _table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
4) view.html.erb&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Approach taken to resolve the issues'''==&lt;br /&gt;
&lt;br /&gt;
==='''Issue #311 '''===&lt;br /&gt;
&lt;br /&gt;
A user who is enrolled in an assignment and has a topic can advertise for more team members. When another user, who is enrolled in the same assignment but doesn't have a team and topic yet, can see the team advertisements by other teams. He can respond to any advertisement. As soon as he responds to an advertisement, an entry is created in the &amp;quot;&amp;quot; table and the &amp;quot;status&amp;quot; attribute of the corressponding tupple holds &amp;quot;P&amp;quot; value signifying pending status. This request goes to the team who had posted that advertisement. The request can be approved or denied by the team members. In either of the case, the  &amp;quot;status&amp;quot; changes to &amp;quot;A&amp;quot; or &amp;quot;D&amp;quot; respectively.&lt;br /&gt;
&lt;br /&gt;
If there is an entry in the &amp;quot;&amp;quot; table for a user, then (s)he can only see advertisements if the corresponding &amp;quot;status&amp;quot; is &amp;quot;D&amp;quot;, which implies that this user is not yet part of a team. This can be checked by querying for participant_id, which is unique for each combination of  user_id, assignment_id, and then checking the &amp;quot;status&amp;quot; corresponding to that participant_id.&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify sign_up_sheet.rb:&lt;br /&gt;
&lt;br /&gt;
  Respond_To_Ads(user_id, assignment_id)&lt;br /&gt;
  p_id=Fetch participant_id corressponding to (user_id, assignment_id)&lt;br /&gt;
  Check entries for p_id in table join_team_request_table where status is either &amp;quot;A&amp;quot; or &amp;quot;P&amp;quot;&lt;br /&gt;
  count=number of such entries&lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If Sign Up Sheet has topics for a particular assignment()&lt;br /&gt;
  If Respond_To_Ads(user_id, assignment_id) is equal to 0&lt;br /&gt;
     Show Trumpet icon which is a link to the Ads&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227 '''===&lt;br /&gt;
&lt;br /&gt;
If a user has an assignment and a topic only then (s)he will be able to advertise for team members to join their team. If a user doesn't have a topic (s)he won't be able to advertise.&lt;br /&gt;
The scenario in which A, B were two users, A with a topic, B without a topic, A joins B's  team but A's topic gets dropped; A,B become a team but with no topic. Such cases are now avoided as we have ensured that without first selecting a topic a user cannot advertise for team members nor can he send invitations to other users to join his team. This is done by quering in the database using inner join between tables-SignUpTopic, signed_up_teams,  team_users; and checking if the user has a topic for a particular assignment. If (s)he has a topic then he'll be able to see the option for advertising for teammates.&lt;br /&gt;
If the assignment doesn't have a topic then the user will be able to send out team invitations.&lt;br /&gt;
Pseudocode representing the logic we have used to modify student_teams_helper.rb:&lt;br /&gt;
&lt;br /&gt;
  StudentTeamsHelper&lt;br /&gt;
  If the concerned assignment has topics&lt;br /&gt;
    return false if their are topics&lt;br /&gt;
  else return true&lt;br /&gt;
&lt;br /&gt;
  User_Has_Topic(user_id, assignment_id)&lt;br /&gt;
    Query the database using inner joins between SignUpTopic, signed_up_teams,  team_users rows= number of rows returned by the above query&lt;br /&gt;
  If rows&amp;gt;0&lt;br /&gt;
    return true&lt;br /&gt;
  else&lt;br /&gt;
    return false&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If concerned assignment does not have topics OR User_Has_Topic is true&lt;br /&gt;
    Make Invite link visible&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''How to test'''==&lt;br /&gt;
----&lt;br /&gt;
https://mymediasite.online.ncsu.edu/online/Play/3b649b16e7f7448d9d1ee79ee1448b221d&lt;br /&gt;
----&lt;br /&gt;
==='''Issue #311'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
2)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
3)Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
4)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. &lt;br /&gt;
&lt;br /&gt;
5)Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
6)Login as another user(Student) or impersonate another student, say student B, whom you have enrolled in the assignment.&lt;br /&gt;
&lt;br /&gt;
7)Since B doesn't have a topic yet, so you won't be able to see the advertise link. &lt;br /&gt;
&lt;br /&gt;
8)Go to the sign-up sheet for the assignment, you'll be able to see a trumpet icon next to the topic that has an ad posted.&lt;br /&gt;
&lt;br /&gt;
9)Click on the icon, you'll see the ad posted by A. Click on request to join A's team.&lt;br /&gt;
&lt;br /&gt;
10)On doing so an entry is created on the table &amp;quot;&amp;quot; and status holds value &amp;quot;P&amp;quot; signifying a pending request.&lt;br /&gt;
&lt;br /&gt;
11)Now if you go on the sign-up sheet again, you will no longer see the trumpet icon through which you can access the ads since you have already responded to an ad and the request is in pending state.&lt;br /&gt;
&lt;br /&gt;
12)Login as user A or impersonate A, now you'll be able to see the team join request sent by user B.&lt;br /&gt;
&lt;br /&gt;
13) Now, you can either approve it or decline it. Suppose you approve it, B will become a part of your team, and the status will change to &amp;quot;A&amp;quot;. And now if you login as B or impersonate B, you will no longer be able to access the trumpet icon which is a link to all ads pertaining to topics the concerned assignment.&lt;br /&gt;
&lt;br /&gt;
14)Had user A declined User Bs join request, the status in the table &amp;quot;&amp;quot; would change to &amp;quot;D&amp;quot;, that means user B still doesn't have a team. So, now if you login as B or impersonate, you'll be able to see the ads again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. &lt;br /&gt;
&lt;br /&gt;
2)You should be able to see the assignment now in the Assignment section. Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
3)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4)This ensures that for an assignment with  topics, a user can send out advertisements only if (s)he has a topic.&lt;br /&gt;
&lt;br /&gt;
5)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, do not add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
6)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
7)Since the assignment doesn't have any topics, therefore, you will be able to see the advertise link. You won't see a sign-up sheet since the assignment has no topics. You can advertise for teammates.&lt;br /&gt;
&lt;br /&gt;
==='''Screenshots from conducted Test '''===&lt;br /&gt;
On clicking on 'Manage Content' the following screen is rendered which lists the existing assignments.&lt;br /&gt;
----&lt;br /&gt;
[[File:create public assignment.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
On clicking on 'New Public Assignment' the following form is displayed in which assignment details can be entered.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup1.jpg  ]]&lt;br /&gt;
----&lt;br /&gt;
Editing the created assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup2.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Click on 'Topics' to add topics for the assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup3.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Click on 'Rubrics' to setup assignment rubrics.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup4.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screenshot shows the completed setup.&lt;br /&gt;
----&lt;br /&gt;
[[File:completed setup for assignment with topic.jpg]]&lt;br /&gt;
----&lt;br /&gt;
On clicking on the image-link for adding participants for an assignment, the following screen is rendered.&lt;br /&gt;
----&lt;br /&gt;
[[File:adding student to assignmet.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Showing all added participants.&lt;br /&gt;
----&lt;br /&gt;
[[File:add the students.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a student who is a participant in the current assignment clicks on it's sign-up sheet.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the  topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a participant clicks on the sign-up sheet for the assignment. link.&lt;br /&gt;
----&lt;br /&gt;
[[File:select topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a participant chooses a topic and then clicks on 'create advertisement'.&lt;br /&gt;
----&lt;br /&gt;
[[File:create ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
After creating an ad, user can now see a horn icon which is a link to display the advertisements corresponding to that topic in that assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:see ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered after clicking on the horn icon.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered after clicking on the link 'Request invitation'.&lt;br /&gt;
----&lt;br /&gt;
[[File:respond to ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
After sending a request to join a team (via ad), the user will no longer see the link for the ads unless the request is denied by the receiver.&lt;br /&gt;
----&lt;br /&gt;
[[File:cant see any more ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
'''This is the screen of the user who had created the ad. He is now able to see any join requests that he can approve/decline.'''&lt;br /&gt;
----&lt;br /&gt;
[[File:request to join.jpg ]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=109227</id>
		<title>CSC/ECE 517 Fall 2017/E1779. Fix teammate advertisements and requests to join a team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=109227"/>
		<updated>2017-10-25T03:24:13Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Introduction==&lt;br /&gt;
==='''Problem Statement'''===&lt;br /&gt;
In Expertiza, there are teammate advertisement, invitation and join team request features which facilitate students to form teams. Teammate advertisement works only for assignments with topics. The topic holders can create advertisement and a trumpet icon will show on the signup sheet page. If one respond to the advertisement, a join team request will be created and the topic holder can see it on “Your team” page. After a student gets a team and the team is not full, (s)he should also be able to send invitations to others.&lt;br /&gt;
----&lt;br /&gt;
=='''Issues to be fixed'''==&lt;br /&gt;
&lt;br /&gt;
Fix Issue #311: when one respond to an advertisement, (s)he should only be able to respond once. When a team advertises for new members, someone who responds to an ad should only be allowed to respond once. Currently, after someone responds to an ad, they can respond again an unlimited number of times.&lt;br /&gt;
&lt;br /&gt;
Fix Issue #227 : if user A got a topic and user B got no topic, then A join B’s team, A’s topic be  dropped and A and B end up with a new team with no topic. This issue should be handle carefully because we cannot simply add B to A’s team (imagine, if A has teammate X and B has teammate Y...). One of a potential fix is that, for assignment w/ topics, one cannot not post an ad unless (s)he holds a topic, similarly, one cannot sent invitations unless (s)he holds a topic. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&lt;br /&gt;
1) sign_up_sheet.rb&lt;br /&gt;
&lt;br /&gt;
2) student_teams_helper.rb&lt;br /&gt;
&lt;br /&gt;
3) _table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
4) view.html.erb&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Approach taken to resolve the issues'''==&lt;br /&gt;
&lt;br /&gt;
==='''Issue #311 '''===&lt;br /&gt;
&lt;br /&gt;
A user who is enrolled in an assignment and has a topic can advertise for more team members. When another user, who is enrolled in the same assignment but doesn't have a team and topic yet, can see the team advertisements by other teams. He can respond to any advertisement. As soon as he responds to an advertisement, an entry is created in the &amp;quot;&amp;quot; table and the &amp;quot;status&amp;quot; attribute of the corressponding tupple holds &amp;quot;P&amp;quot; value signifying pending status. This request goes to the team who had posted that advertisement. The request can be approved or denied by the team members. In either of the case, the  &amp;quot;status&amp;quot; changes to &amp;quot;A&amp;quot; or &amp;quot;D&amp;quot; respectively.&lt;br /&gt;
&lt;br /&gt;
If there is an entry in the &amp;quot;&amp;quot; table for a user, then (s)he can only see advertisements if the corresponding &amp;quot;status&amp;quot; is &amp;quot;D&amp;quot;, which implies that this user is not yet part of a team. This can be checked by querying for participant_id, which is unique for each combination of  user_id, assignment_id, and then checking the &amp;quot;status&amp;quot; corresponding to that participant_id.&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify sign_up_sheet.rb:&lt;br /&gt;
&lt;br /&gt;
  Respond_To_Ads(user_id, assignment_id)&lt;br /&gt;
  p_id=Fetch participant_id corressponding to (user_id, assignment_id)&lt;br /&gt;
  Check entries for p_id in table join_team_request_table where status is either &amp;quot;A&amp;quot; or &amp;quot;P&amp;quot;&lt;br /&gt;
  count=number of such entries&lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If Sign Up Sheet has topics for a particular assignment()&lt;br /&gt;
  If Respond_To_Ads(user_id, assignment_id) is equal to 0&lt;br /&gt;
     Show Trumpet icon which is a link to the Ads&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227 '''===&lt;br /&gt;
&lt;br /&gt;
If a user has an assignment and a topic only then (s)he will be able to advertise for team members to join their team. If a user doesn't have a topic (s)he won't be able to advertise.&lt;br /&gt;
The scenario in which A, B were two users, A with a topic, B without a topic, A joins B's  team but A's topic gets dropped; A,B become a team but with no topic. Such cases are now avoided as we have ensured that without first selecting a topic a user cannot advertise for team members nor can he send invitations to other users to join his team. This is done by quering in the database using inner join between tables-SignUpTopic, signed_up_teams,  team_users; and checking if the user has a topic for a particular assignment. If (s)he has a topic then he'll be able to see the option for advertising for teammates.&lt;br /&gt;
If the assignment doesn't have a topic then the user will be able to send out team invitations.&lt;br /&gt;
Pseudocode representing the logic we have used to modify student_teams_helper.rb:&lt;br /&gt;
&lt;br /&gt;
  StudentTeamsHelper&lt;br /&gt;
  If the concerned assignment has topics&lt;br /&gt;
    return false if their are topics&lt;br /&gt;
  else return true&lt;br /&gt;
&lt;br /&gt;
  User_Has_Topic(user_id, assignment_id)&lt;br /&gt;
    Query the database using inner joins between SignUpTopic, signed_up_teams,  team_users rows= number of rows returned by the above query&lt;br /&gt;
  If rows&amp;gt;0&lt;br /&gt;
    return true&lt;br /&gt;
  else&lt;br /&gt;
    return false&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If concerned assignment does not have topics OR User_Has_Topic is true&lt;br /&gt;
    Make Invite link visible&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''How to test'''==&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==='''Issue #311'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
2)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
3)Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
4)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. &lt;br /&gt;
&lt;br /&gt;
5)Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
6)Login as another user(Student) or impersonate another student, say student B, whom you have enrolled in the assignment.&lt;br /&gt;
&lt;br /&gt;
7)Since B doesn't have a topic yet, so you won't be able to see the advertise link. &lt;br /&gt;
&lt;br /&gt;
8)Go to the sign-up sheet for the assignment, you'll be able to see a trumpet icon next to the topic that has an ad posted.&lt;br /&gt;
&lt;br /&gt;
9)Click on the icon, you'll see the ad posted by A. Click on request to join A's team.&lt;br /&gt;
&lt;br /&gt;
10)On doing so an entry is created on the table &amp;quot;&amp;quot; and status holds value &amp;quot;P&amp;quot; signifying a pending request.&lt;br /&gt;
&lt;br /&gt;
11)Now if you go on the sign-up sheet again, you will no longer see the trumpet icon through which you can access the ads since you have already responded to an ad and the request is in pending state.&lt;br /&gt;
&lt;br /&gt;
12)Login as user A or impersonate A, now you'll be able to see the team join request sent by user B.&lt;br /&gt;
&lt;br /&gt;
13) Now, you can either approve it or decline it. Suppose you approve it, B will become a part of your team, and the status will change to &amp;quot;A&amp;quot;. And now if you login as B or impersonate B, you will no longer be able to access the trumpet icon which is a link to all ads pertaining to topics the concerned assignment.&lt;br /&gt;
&lt;br /&gt;
14)Had user A declined User Bs join request, the status in the table &amp;quot;&amp;quot; would change to &amp;quot;D&amp;quot;, that means user B still doesn't have a team. So, now if you login as B or impersonate, you'll be able to see the ads again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. &lt;br /&gt;
&lt;br /&gt;
2)You should be able to see the assignment now in the Assignment section. Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
3)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4)This ensures that for an assignment with  topics, a user can send out advertisements only if (s)he has a topic.&lt;br /&gt;
&lt;br /&gt;
5)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, do not add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
6)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
7)Since the assignment doesn't have any topics, therefore, you will be able to see the advertise link. You won't see a sign-up sheet since the assignment has no topics. You can advertise for teammates.&lt;br /&gt;
&lt;br /&gt;
==='''Screenshots from conducted Test '''===&lt;br /&gt;
On clicking on 'Manage Content' the following screen is rendered which lists the existing assignments.&lt;br /&gt;
----&lt;br /&gt;
[[File:create public assignment.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
On clicking on 'New Public Assignment' the following form is displayed in which assignment details can be entered.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup1.jpg  ]]&lt;br /&gt;
----&lt;br /&gt;
Editing the created assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup2.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Click on 'Topics' to add topics for the assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup3.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Click on 'Rubrics' to setup assignment rubrics.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup4.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screenshot shows the completed setup.&lt;br /&gt;
----&lt;br /&gt;
[[File:completed setup for assignment with topic.jpg]]&lt;br /&gt;
----&lt;br /&gt;
On clicking on the image-link for adding participants for an assignment, the following screen is rendered.&lt;br /&gt;
----&lt;br /&gt;
[[File:adding student to assignmet.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Showing all added participants.&lt;br /&gt;
----&lt;br /&gt;
[[File:add the students.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a student who is a participant in the current assignment clicks on it's sign-up sheet.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the  topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a participant clicks on the sign-up sheet for the assignment. link.&lt;br /&gt;
----&lt;br /&gt;
[[File:select topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a participant chooses a topic and then clicks on 'create advertisement'.&lt;br /&gt;
----&lt;br /&gt;
[[File:create ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
After creating an ad, user can now see a horn icon which is a link to display the advertisements corresponding to that topic in that assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:see ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered after clicking on the horn icon.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered after clicking on the link 'Request invitation'.&lt;br /&gt;
----&lt;br /&gt;
[[File:respond to ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
After sending a request to join a team (via ad), the user will no longer see the link for the ads unless the request is denied by the receiver.&lt;br /&gt;
----&lt;br /&gt;
[[File:cant see any more ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
'''This is the screen of the user who had created the ad. He is now able to see any join requests that he can approve/decline.'''&lt;br /&gt;
----&lt;br /&gt;
[[File:request to join.jpg ]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=109226</id>
		<title>CSC/ECE 517 Fall 2017/E1779. Fix teammate advertisements and requests to join a team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=109226"/>
		<updated>2017-10-25T03:23:05Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
==='''Problem Statement'''===&lt;br /&gt;
In Expertiza, there are teammate advertisement, invitation and join team request features which facilitate students to form teams. Teammate advertisement works only for assignments with topics. The topic holders can create advertisement and a trumpet icon will show on the signup sheet page. If one respond to the advertisement, a join team request will be created and the topic holder can see it on “Your team” page. After a student gets a team and the team is not full, (s)he should also be able to send invitations to others.&lt;br /&gt;
----&lt;br /&gt;
=='''Issues to be fixed'''==&lt;br /&gt;
&lt;br /&gt;
Fix Issue #311: when one respond to an advertisement, (s)he should only be able to respond once. When a team advertises for new members, someone who responds to an ad should only be allowed to respond once. Currently, after someone responds to an ad, they can respond again an unlimited number of times.&lt;br /&gt;
&lt;br /&gt;
Fix Issue #227 : if user A got a topic and user B got no topic, then A join B’s team, A’s topic be  dropped and A and B end up with a new team with no topic. This issue should be handle carefully because we cannot simply add B to A’s team (imagine, if A has teammate X and B has teammate Y...). One of a potential fix is that, for assignment w/ topics, one cannot not post an ad unless (s)he holds a topic, similarly, one cannot sent invitations unless (s)he holds a topic. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&lt;br /&gt;
1) sign_up_sheet.rb&lt;br /&gt;
&lt;br /&gt;
2) student_teams_helper.rb&lt;br /&gt;
&lt;br /&gt;
3) _table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
4) view.html.erb&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Approach taken to resolve the issues'''==&lt;br /&gt;
&lt;br /&gt;
==='''Issue #311 '''===&lt;br /&gt;
&lt;br /&gt;
A user who is enrolled in an assignment and has a topic can advertise for more team members. When another user, who is enrolled in the same assignment but doesn't have a team and topic yet, can see the team advertisements by other teams. He can respond to any advertisement. As soon as he responds to an advertisement, an entry is created in the &amp;quot;&amp;quot; table and the &amp;quot;status&amp;quot; attribute of the corressponding tupple holds &amp;quot;P&amp;quot; value signifying pending status. This request goes to the team who had posted that advertisement. The request can be approved or denied by the team members. In either of the case, the  &amp;quot;status&amp;quot; changes to &amp;quot;A&amp;quot; or &amp;quot;D&amp;quot; respectively.&lt;br /&gt;
&lt;br /&gt;
If there is an entry in the &amp;quot;&amp;quot; table for a user, then (s)he can only see advertisements if the corresponding &amp;quot;status&amp;quot; is &amp;quot;D&amp;quot;, which implies that this user is not yet part of a team. This can be checked by querying for participant_id, which is unique for each combination of  user_id, assignment_id, and then checking the &amp;quot;status&amp;quot; corresponding to that participant_id.&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify sign_up_sheet.rb:&lt;br /&gt;
&lt;br /&gt;
  Respond_To_Ads(user_id, assignment_id)&lt;br /&gt;
  p_id=Fetch participant_id corressponding to (user_id, assignment_id)&lt;br /&gt;
  Check entries for p_id in table join_team_request_table where status is either &amp;quot;A&amp;quot; or &amp;quot;P&amp;quot;&lt;br /&gt;
  count=number of such entries&lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If Sign Up Sheet has topics for a particular assignment()&lt;br /&gt;
  If Respond_To_Ads(user_id, assignment_id) is equal to 0&lt;br /&gt;
     Show Trumpet icon which is a link to the Ads&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227 '''===&lt;br /&gt;
&lt;br /&gt;
If a user has an assignment and a topic only then (s)he will be able to advertise for team members to join their team. If a user doesn't have a topic (s)he won't be able to advertise.&lt;br /&gt;
The scenario in which A, B were two users, A with a topic, B without a topic, A joins B's  team but A's topic gets dropped; A,B become a team but with no topic. Such cases are now avoided as we have ensured that without first selecting a topic a user cannot advertise for team members nor can he send invitations to other users to join his team. This is done by quering in the database using inner join between tables-SignUpTopic, signed_up_teams,  team_users; and checking if the user has a topic for a particular assignment. If (s)he has a topic then he'll be able to see the option for advertising for teammates.&lt;br /&gt;
If the assignment doesn't have a topic then the user will be able to send out team invitations.&lt;br /&gt;
Pseudocode representing the logic we have used to modify student_teams_helper.rb:&lt;br /&gt;
&lt;br /&gt;
  StudentTeamsHelper&lt;br /&gt;
  If the concerned assignment has topics&lt;br /&gt;
    return false if their are topics&lt;br /&gt;
  else return true&lt;br /&gt;
&lt;br /&gt;
  User_Has_Topic(user_id, assignment_id)&lt;br /&gt;
    Query the database using inner joins between SignUpTopic, signed_up_teams,  team_users rows= number of rows returned by the above query&lt;br /&gt;
  If rows&amp;gt;0&lt;br /&gt;
    return true&lt;br /&gt;
  else&lt;br /&gt;
    return false&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If concerned assignment does not have topics OR User_Has_Topic is true&lt;br /&gt;
    Make Invite link visible&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''How to test'''==&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==='''Issue #311'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
2)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
3)Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
4)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. &lt;br /&gt;
&lt;br /&gt;
5)Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
6)Login as another user(Student) or impersonate another student, say student B, whom you have enrolled in the assignment.&lt;br /&gt;
&lt;br /&gt;
7)Since B doesn't have a topic yet, so you won't be able to see the advertise link. &lt;br /&gt;
&lt;br /&gt;
8)Go to the sign-up sheet for the assignment, you'll be able to see a trumpet icon next to the topic that has an ad posted.&lt;br /&gt;
&lt;br /&gt;
9)Click on the icon, you'll see the ad posted by A. Click on request to join A's team.&lt;br /&gt;
&lt;br /&gt;
10)On doing so an entry is created on the table &amp;quot;&amp;quot; and status holds value &amp;quot;P&amp;quot; signifying a pending request.&lt;br /&gt;
&lt;br /&gt;
11)Now if you go on the sign-up sheet again, you will no longer see the trumpet icon through which you can access the ads since you have already responded to an ad and the request is in pending state.&lt;br /&gt;
&lt;br /&gt;
12)Login as user A or impersonate A, now you'll be able to see the team join request sent by user B.&lt;br /&gt;
&lt;br /&gt;
13) Now, you can either approve it or decline it. Suppose you approve it, B will become a part of your team, and the status will change to &amp;quot;A&amp;quot;. And now if you login as B or impersonate B, you will no longer be able to access the trumpet icon which is a link to all ads pertaining to topics the concerned assignment.&lt;br /&gt;
&lt;br /&gt;
14)Had user A declined User Bs join request, the status in the table &amp;quot;&amp;quot; would change to &amp;quot;D&amp;quot;, that means user B still doesn't have a team. So, now if you login as B or impersonate, you'll be able to see the ads again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. &lt;br /&gt;
&lt;br /&gt;
2)You should be able to see the assignment now in the Assignment section. Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
3)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4)This ensures that for an assignment with  topics, a user can send out advertisements only if (s)he has a topic.&lt;br /&gt;
&lt;br /&gt;
5)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, do not add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
6)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
7)Since the assignment doesn't have any topics, therefore, you will be able to see the advertise link. You won't see a sign-up sheet since the assignment has no topics. You can advertise for teammates.&lt;br /&gt;
&lt;br /&gt;
==='''Screenshots from conducted Test '''===&lt;br /&gt;
On clicking on 'Manage Content' the following screen is rendered which lists the existing assignments.&lt;br /&gt;
----&lt;br /&gt;
[[File:create public assignment.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
On clicking on 'New Public Assignment' the following form is displayed in which assignment details can be entered.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup1.jpg  ]]&lt;br /&gt;
----&lt;br /&gt;
Editing the created assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup2.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Click on 'Topics' to add topics for the assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup3.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Click on 'Rubrics' to setup assignment rubrics.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup4.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screenshot shows the completed setup.&lt;br /&gt;
----&lt;br /&gt;
[[File:completed setup for assignment with topic.jpg]]&lt;br /&gt;
----&lt;br /&gt;
On clicking on the image-link for adding participants for an assignment, the following screen is rendered.&lt;br /&gt;
----&lt;br /&gt;
[[File:adding student to assignmet.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Showing all added participants.&lt;br /&gt;
----&lt;br /&gt;
[[File:add the students.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a student who is a participant in the current assignment clicks on it's sign-up sheet.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the  topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a participant clicks on the sign-up sheet for the assignment. link.&lt;br /&gt;
----&lt;br /&gt;
[[File:select topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a participant chooses a topic and then clicks on 'create advertisement'.&lt;br /&gt;
----&lt;br /&gt;
[[File:create ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
After creating an ad, user can now see a horn icon which is a link to display the advertisements corresponding to that topic in that assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:see ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered after clicking on the horn icon.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered after clicking on the link 'Request invitation'.&lt;br /&gt;
----&lt;br /&gt;
[[File:respond to ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
After sending a request to join a team (via ad), the user will no longer see the link for the ads unless the request is denied by the receiver.&lt;br /&gt;
----&lt;br /&gt;
[[File:cant see any more ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
'''This is the screen of the user who had created the ad. He is now able to see any join requests that he can approve/decline.'''&lt;br /&gt;
----&lt;br /&gt;
[[File:request to join.jpg |center|]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=109225</id>
		<title>CSC/ECE 517 Fall 2017/E1779. Fix teammate advertisements and requests to join a team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=109225"/>
		<updated>2017-10-25T03:20:44Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;iframe width=&amp;quot;450&amp;quot; height=&amp;quot;300&amp;quot; frameborder=&amp;quot;0&amp;quot; scrolling=&amp;quot;auto&amp;quot; marginheight=&amp;quot;0&amp;quot; marginwidth=&amp;quot;0&amp;quot; src=&amp;quot;https://mymediasite.online.ncsu.edu/online/Play/31dcb783510c4322bcfbc894c71fbdd01d&amp;quot;&amp;gt;&amp;lt;/iframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
==='''Problem Statement'''===&lt;br /&gt;
In Expertiza, there are teammate advertisement, invitation and join team request features which facilitate students to form teams. Teammate advertisement works only for assignments with topics. The topic holders can create advertisement and a trumpet icon will show on the signup sheet page. If one respond to the advertisement, a join team request will be created and the topic holder can see it on “Your team” page. After a student gets a team and the team is not full, (s)he should also be able to send invitations to others.&lt;br /&gt;
----&lt;br /&gt;
=='''Issues to be fixed'''==&lt;br /&gt;
&lt;br /&gt;
Fix Issue #311: when one respond to an advertisement, (s)he should only be able to respond once. When a team advertises for new members, someone who responds to an ad should only be allowed to respond once. Currently, after someone responds to an ad, they can respond again an unlimited number of times.&lt;br /&gt;
&lt;br /&gt;
Fix Issue #227 : if user A got a topic and user B got no topic, then A join B’s team, A’s topic be  dropped and A and B end up with a new team with no topic. This issue should be handle carefully because we cannot simply add B to A’s team (imagine, if A has teammate X and B has teammate Y...). One of a potential fix is that, for assignment w/ topics, one cannot not post an ad unless (s)he holds a topic, similarly, one cannot sent invitations unless (s)he holds a topic. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&lt;br /&gt;
1) sign_up_sheet.rb&lt;br /&gt;
&lt;br /&gt;
2) student_teams_helper.rb&lt;br /&gt;
&lt;br /&gt;
3) _table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
4) view.html.erb&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Approach taken to resolve the issues'''==&lt;br /&gt;
&lt;br /&gt;
==='''Issue #311 '''===&lt;br /&gt;
&lt;br /&gt;
A user who is enrolled in an assignment and has a topic can advertise for more team members. When another user, who is enrolled in the same assignment but doesn't have a team and topic yet, can see the team advertisements by other teams. He can respond to any advertisement. As soon as he responds to an advertisement, an entry is created in the &amp;quot;&amp;quot; table and the &amp;quot;status&amp;quot; attribute of the corressponding tupple holds &amp;quot;P&amp;quot; value signifying pending status. This request goes to the team who had posted that advertisement. The request can be approved or denied by the team members. In either of the case, the  &amp;quot;status&amp;quot; changes to &amp;quot;A&amp;quot; or &amp;quot;D&amp;quot; respectively.&lt;br /&gt;
&lt;br /&gt;
If there is an entry in the &amp;quot;&amp;quot; table for a user, then (s)he can only see advertisements if the corresponding &amp;quot;status&amp;quot; is &amp;quot;D&amp;quot;, which implies that this user is not yet part of a team. This can be checked by querying for participant_id, which is unique for each combination of  user_id, assignment_id, and then checking the &amp;quot;status&amp;quot; corresponding to that participant_id.&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify sign_up_sheet.rb:&lt;br /&gt;
&lt;br /&gt;
  Respond_To_Ads(user_id, assignment_id)&lt;br /&gt;
  p_id=Fetch participant_id corressponding to (user_id, assignment_id)&lt;br /&gt;
  Check entries for p_id in table join_team_request_table where status is either &amp;quot;A&amp;quot; or &amp;quot;P&amp;quot;&lt;br /&gt;
  count=number of such entries&lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If Sign Up Sheet has topics for a particular assignment()&lt;br /&gt;
  If Respond_To_Ads(user_id, assignment_id) is equal to 0&lt;br /&gt;
     Show Trumpet icon which is a link to the Ads&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227 '''===&lt;br /&gt;
&lt;br /&gt;
If a user has an assignment and a topic only then (s)he will be able to advertise for team members to join their team. If a user doesn't have a topic (s)he won't be able to advertise.&lt;br /&gt;
The scenario in which A, B were two users, A with a topic, B without a topic, A joins B's  team but A's topic gets dropped; A,B become a team but with no topic. Such cases are now avoided as we have ensured that without first selecting a topic a user cannot advertise for team members nor can he send invitations to other users to join his team. This is done by quering in the database using inner join between tables-SignUpTopic, signed_up_teams,  team_users; and checking if the user has a topic for a particular assignment. If (s)he has a topic then he'll be able to see the option for advertising for teammates.&lt;br /&gt;
If the assignment doesn't have a topic then the user will be able to send out team invitations.&lt;br /&gt;
Pseudocode representing the logic we have used to modify student_teams_helper.rb:&lt;br /&gt;
&lt;br /&gt;
  StudentTeamsHelper&lt;br /&gt;
  If the concerned assignment has topics&lt;br /&gt;
    return false if their are topics&lt;br /&gt;
  else return true&lt;br /&gt;
&lt;br /&gt;
  User_Has_Topic(user_id, assignment_id)&lt;br /&gt;
    Query the database using inner joins between SignUpTopic, signed_up_teams,  team_users rows= number of rows returned by the above query&lt;br /&gt;
  If rows&amp;gt;0&lt;br /&gt;
    return true&lt;br /&gt;
  else&lt;br /&gt;
    return false&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If concerned assignment does not have topics OR User_Has_Topic is true&lt;br /&gt;
    Make Invite link visible&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''How to test'''==&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==='''Issue #311'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
2)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
3)Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
4)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. &lt;br /&gt;
&lt;br /&gt;
5)Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
6)Login as another user(Student) or impersonate another student, say student B, whom you have enrolled in the assignment.&lt;br /&gt;
&lt;br /&gt;
7)Since B doesn't have a topic yet, so you won't be able to see the advertise link. &lt;br /&gt;
&lt;br /&gt;
8)Go to the sign-up sheet for the assignment, you'll be able to see a trumpet icon next to the topic that has an ad posted.&lt;br /&gt;
&lt;br /&gt;
9)Click on the icon, you'll see the ad posted by A. Click on request to join A's team.&lt;br /&gt;
&lt;br /&gt;
10)On doing so an entry is created on the table &amp;quot;&amp;quot; and status holds value &amp;quot;P&amp;quot; signifying a pending request.&lt;br /&gt;
&lt;br /&gt;
11)Now if you go on the sign-up sheet again, you will no longer see the trumpet icon through which you can access the ads since you have already responded to an ad and the request is in pending state.&lt;br /&gt;
&lt;br /&gt;
12)Login as user A or impersonate A, now you'll be able to see the team join request sent by user B.&lt;br /&gt;
&lt;br /&gt;
13) Now, you can either approve it or decline it. Suppose you approve it, B will become a part of your team, and the status will change to &amp;quot;A&amp;quot;. And now if you login as B or impersonate B, you will no longer be able to access the trumpet icon which is a link to all ads pertaining to topics the concerned assignment.&lt;br /&gt;
&lt;br /&gt;
14)Had user A declined User Bs join request, the status in the table &amp;quot;&amp;quot; would change to &amp;quot;D&amp;quot;, that means user B still doesn't have a team. So, now if you login as B or impersonate, you'll be able to see the ads again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. &lt;br /&gt;
&lt;br /&gt;
2)You should be able to see the assignment now in the Assignment section. Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
3)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4)This ensures that for an assignment with  topics, a user can send out advertisements only if (s)he has a topic.&lt;br /&gt;
&lt;br /&gt;
5)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, do not add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
6)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
7)Since the assignment doesn't have any topics, therefore, you will be able to see the advertise link. You won't see a sign-up sheet since the assignment has no topics. You can advertise for teammates.&lt;br /&gt;
&lt;br /&gt;
==='''Screenshots from conducted Test '''===&lt;br /&gt;
On clicking on 'Manage Content' the following screen is rendered which lists the existing assignments.&lt;br /&gt;
----&lt;br /&gt;
[[File:create public assignment.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
On clicking on 'New Public Assignment' the following form is displayed in which assignment details can be entered.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup1.jpg |center| ]]&lt;br /&gt;
----&lt;br /&gt;
Editing the created assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup2.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Click on 'Topics' to add topics for the assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup3.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Click on 'Rubrics' to setup assignment rubrics.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup4.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screenshot shows the completed setup.&lt;br /&gt;
----&lt;br /&gt;
[[File:completed setup for assignment with topic.jpg]]&lt;br /&gt;
----&lt;br /&gt;
On clicking on the image-link for adding participants for an assignment, the following screen is rendered.&lt;br /&gt;
----&lt;br /&gt;
[[File:adding student to assignmet.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Showing all added participants.&lt;br /&gt;
----&lt;br /&gt;
[[File:add the students.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a student who is a participant in the current assignment clicks on it's sign-up sheet.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the  topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a participant clicks on the sign-up sheet for the assignment. link.&lt;br /&gt;
----&lt;br /&gt;
[[File:select topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a participant chooses a topic and then clicks on 'create advertisement'.&lt;br /&gt;
----&lt;br /&gt;
[[File:create ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
After creating an ad, user can now see a horn icon which is a link to display the advertisements corresponding to that topic in that assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:see ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered after clicking on the horn icon.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered after clicking on the link 'Request invitation'.&lt;br /&gt;
----&lt;br /&gt;
[[File:respond to ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
After sending a request to join a team (via ad), the user will no longer see the link for the ads unless the request is denied by the receiver.&lt;br /&gt;
----&lt;br /&gt;
[[File:cant see any more ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
'''This is the screen of the user who had created the ad. He is now able to see any join requests that he can approve/decline.'''&lt;br /&gt;
----&lt;br /&gt;
[[File:request to join.jpg|Width:100px|Height:100px]]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=109224</id>
		<title>CSC/ECE 517 Fall 2017/E1779. Fix teammate advertisements and requests to join a team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=109224"/>
		<updated>2017-10-25T03:18:46Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;iframe width=&amp;quot;450&amp;quot; height=&amp;quot;300&amp;quot; frameborder=&amp;quot;0&amp;quot; scrolling=&amp;quot;auto&amp;quot; marginheight=&amp;quot;0&amp;quot; marginwidth=&amp;quot;0&amp;quot; src=&amp;quot;https://mymediasite.online.ncsu.edu/online/Play/31dcb783510c4322bcfbc894c71fbdd01d&amp;quot;&amp;gt;&amp;lt;/iframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
==='''Problem Statement'''===&lt;br /&gt;
In Expertiza, there are teammate advertisement, invitation and join team request features which facilitate students to form teams. Teammate advertisement works only for assignments with topics. The topic holders can create advertisement and a trumpet icon will show on the signup sheet page. If one respond to the advertisement, a join team request will be created and the topic holder can see it on “Your team” page. After a student gets a team and the team is not full, (s)he should also be able to send invitations to others.&lt;br /&gt;
----&lt;br /&gt;
=='''Issues to be fixed'''==&lt;br /&gt;
&lt;br /&gt;
Fix Issue #311: when one respond to an advertisement, (s)he should only be able to respond once. When a team advertises for new members, someone who responds to an ad should only be allowed to respond once. Currently, after someone responds to an ad, they can respond again an unlimited number of times.&lt;br /&gt;
&lt;br /&gt;
Fix Issue #227 : if user A got a topic and user B got no topic, then A join B’s team, A’s topic be  dropped and A and B end up with a new team with no topic. This issue should be handle carefully because we cannot simply add B to A’s team (imagine, if A has teammate X and B has teammate Y...). One of a potential fix is that, for assignment w/ topics, one cannot not post an ad unless (s)he holds a topic, similarly, one cannot sent invitations unless (s)he holds a topic. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&lt;br /&gt;
1) sign_up_sheet.rb&lt;br /&gt;
&lt;br /&gt;
2) student_teams_helper.rb&lt;br /&gt;
&lt;br /&gt;
3) _table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
4) view.html.erb&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Approach taken to resolve the issues'''==&lt;br /&gt;
&lt;br /&gt;
==='''Issue #311 '''===&lt;br /&gt;
&lt;br /&gt;
A user who is enrolled in an assignment and has a topic can advertise for more team members. When another user, who is enrolled in the same assignment but doesn't have a team and topic yet, can see the team advertisements by other teams. He can respond to any advertisement. As soon as he responds to an advertisement, an entry is created in the &amp;quot;&amp;quot; table and the &amp;quot;status&amp;quot; attribute of the corressponding tupple holds &amp;quot;P&amp;quot; value signifying pending status. This request goes to the team who had posted that advertisement. The request can be approved or denied by the team members. In either of the case, the  &amp;quot;status&amp;quot; changes to &amp;quot;A&amp;quot; or &amp;quot;D&amp;quot; respectively.&lt;br /&gt;
&lt;br /&gt;
If there is an entry in the &amp;quot;&amp;quot; table for a user, then (s)he can only see advertisements if the corresponding &amp;quot;status&amp;quot; is &amp;quot;D&amp;quot;, which implies that this user is not yet part of a team. This can be checked by querying for participant_id, which is unique for each combination of  user_id, assignment_id, and then checking the &amp;quot;status&amp;quot; corresponding to that participant_id.&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify sign_up_sheet.rb:&lt;br /&gt;
&lt;br /&gt;
  Respond_To_Ads(user_id, assignment_id)&lt;br /&gt;
  p_id=Fetch participant_id corressponding to (user_id, assignment_id)&lt;br /&gt;
  Check entries for p_id in table join_team_request_table where status is either &amp;quot;A&amp;quot; or &amp;quot;P&amp;quot;&lt;br /&gt;
  count=number of such entries&lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If Sign Up Sheet has topics for a particular assignment()&lt;br /&gt;
  If Respond_To_Ads(user_id, assignment_id) is equal to 0&lt;br /&gt;
     Show Trumpet icon which is a link to the Ads&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227 '''===&lt;br /&gt;
&lt;br /&gt;
If a user has an assignment and a topic only then (s)he will be able to advertise for team members to join their team. If a user doesn't have a topic (s)he won't be able to advertise.&lt;br /&gt;
The scenario in which A, B were two users, A with a topic, B without a topic, A joins B's  team but A's topic gets dropped; A,B become a team but with no topic. Such cases are now avoided as we have ensured that without first selecting a topic a user cannot advertise for team members nor can he send invitations to other users to join his team. This is done by quering in the database using inner join between tables-SignUpTopic, signed_up_teams,  team_users; and checking if the user has a topic for a particular assignment. If (s)he has a topic then he'll be able to see the option for advertising for teammates.&lt;br /&gt;
If the assignment doesn't have a topic then the user will be able to send out team invitations.&lt;br /&gt;
Pseudocode representing the logic we have used to modify student_teams_helper.rb:&lt;br /&gt;
&lt;br /&gt;
  StudentTeamsHelper&lt;br /&gt;
  If the concerned assignment has topics&lt;br /&gt;
    return false if their are topics&lt;br /&gt;
  else return true&lt;br /&gt;
&lt;br /&gt;
  User_Has_Topic(user_id, assignment_id)&lt;br /&gt;
    Query the database using inner joins between SignUpTopic, signed_up_teams,  team_users rows= number of rows returned by the above query&lt;br /&gt;
  If rows&amp;gt;0&lt;br /&gt;
    return true&lt;br /&gt;
  else&lt;br /&gt;
    return false&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If concerned assignment does not have topics OR User_Has_Topic is true&lt;br /&gt;
    Make Invite link visible&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''How to test'''==&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==='''Issue #311'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
2)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
3)Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
4)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. &lt;br /&gt;
&lt;br /&gt;
5)Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
6)Login as another user(Student) or impersonate another student, say student B, whom you have enrolled in the assignment.&lt;br /&gt;
&lt;br /&gt;
7)Since B doesn't have a topic yet, so you won't be able to see the advertise link. &lt;br /&gt;
&lt;br /&gt;
8)Go to the sign-up sheet for the assignment, you'll be able to see a trumpet icon next to the topic that has an ad posted.&lt;br /&gt;
&lt;br /&gt;
9)Click on the icon, you'll see the ad posted by A. Click on request to join A's team.&lt;br /&gt;
&lt;br /&gt;
10)On doing so an entry is created on the table &amp;quot;&amp;quot; and status holds value &amp;quot;P&amp;quot; signifying a pending request.&lt;br /&gt;
&lt;br /&gt;
11)Now if you go on the sign-up sheet again, you will no longer see the trumpet icon through which you can access the ads since you have already responded to an ad and the request is in pending state.&lt;br /&gt;
&lt;br /&gt;
12)Login as user A or impersonate A, now you'll be able to see the team join request sent by user B.&lt;br /&gt;
&lt;br /&gt;
13) Now, you can either approve it or decline it. Suppose you approve it, B will become a part of your team, and the status will change to &amp;quot;A&amp;quot;. And now if you login as B or impersonate B, you will no longer be able to access the trumpet icon which is a link to all ads pertaining to topics the concerned assignment.&lt;br /&gt;
&lt;br /&gt;
14)Had user A declined User Bs join request, the status in the table &amp;quot;&amp;quot; would change to &amp;quot;D&amp;quot;, that means user B still doesn't have a team. So, now if you login as B or impersonate, you'll be able to see the ads again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. &lt;br /&gt;
&lt;br /&gt;
2)You should be able to see the assignment now in the Assignment section. Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
3)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4)This ensures that for an assignment with  topics, a user can send out advertisements only if (s)he has a topic.&lt;br /&gt;
&lt;br /&gt;
5)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, do not add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
6)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
7)Since the assignment doesn't have any topics, therefore, you will be able to see the advertise link. You won't see a sign-up sheet since the assignment has no topics. You can advertise for teammates.&lt;br /&gt;
&lt;br /&gt;
==='''Screenshots from conducted Test '''===&lt;br /&gt;
On clicking on 'Manage Content' the following screen is rendered which lists the existing assignments.&lt;br /&gt;
----&lt;br /&gt;
[[File:create public assignment.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
On clicking on 'New Public Assignment' the following form is displayed in which assignment details can be entered.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup1.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Editing the created assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup2.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Click on 'Topics' to add topics for the assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup3.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Click on 'Rubrics' to setup assignment rubrics.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup4.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screenshot shows the completed setup.&lt;br /&gt;
----&lt;br /&gt;
[[File:completed setup for assignment with topic.jpg]]&lt;br /&gt;
----&lt;br /&gt;
On clicking on the image-link for adding participants for an assignment, the following screen is rendered.&lt;br /&gt;
----&lt;br /&gt;
[[File:adding student to assignmet.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Showing all added participants.&lt;br /&gt;
----&lt;br /&gt;
[[File:add the students.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a student who is a participant in the current assignment clicks on it's sign-up sheet.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the  topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a participant clicks on the sign-up sheet for the assignment. link.&lt;br /&gt;
----&lt;br /&gt;
[[File:select topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a participant chooses a topic and then clicks on 'create advertisement'.&lt;br /&gt;
----&lt;br /&gt;
[[File:create ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
After creating an ad, user can now see a horn icon which is a link to display the advertisements corresponding to that topic in that assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:see ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered after clicking on the horn icon.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered after clicking on the link 'Request invitation'.&lt;br /&gt;
----&lt;br /&gt;
[[File:respond to ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
After sending a request to join a team (via ad), the user will no longer see the link for the ads unless the request is denied by the receiver.&lt;br /&gt;
----&lt;br /&gt;
[[File:cant see any more ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
'''This is the screen of the user who had created the ad. He is now able to see any join requests that he can approve/decline.'''&lt;br /&gt;
----&lt;br /&gt;
[[File:request to join.jpg|Width:100px|Height:100px]]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=109223</id>
		<title>CSC/ECE 517 Fall 2017/E1779. Fix teammate advertisements and requests to join a team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=109223"/>
		<updated>2017-10-25T03:18:15Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:bug2.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
==='''Problem Statement'''===&lt;br /&gt;
In Expertiza, there are teammate advertisement, invitation and join team request features which facilitate students to form teams. Teammate advertisement works only for assignments with topics. The topic holders can create advertisement and a trumpet icon will show on the signup sheet page. If one respond to the advertisement, a join team request will be created and the topic holder can see it on “Your team” page. After a student gets a team and the team is not full, (s)he should also be able to send invitations to others.&lt;br /&gt;
----&lt;br /&gt;
=='''Issues to be fixed'''==&lt;br /&gt;
&lt;br /&gt;
Fix Issue #311: when one respond to an advertisement, (s)he should only be able to respond once. When a team advertises for new members, someone who responds to an ad should only be allowed to respond once. Currently, after someone responds to an ad, they can respond again an unlimited number of times.&lt;br /&gt;
&lt;br /&gt;
Fix Issue #227 : if user A got a topic and user B got no topic, then A join B’s team, A’s topic be  dropped and A and B end up with a new team with no topic. This issue should be handle carefully because we cannot simply add B to A’s team (imagine, if A has teammate X and B has teammate Y...). One of a potential fix is that, for assignment w/ topics, one cannot not post an ad unless (s)he holds a topic, similarly, one cannot sent invitations unless (s)he holds a topic. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&lt;br /&gt;
1) sign_up_sheet.rb&lt;br /&gt;
&lt;br /&gt;
2) student_teams_helper.rb&lt;br /&gt;
&lt;br /&gt;
3) _table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
4) view.html.erb&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Approach taken to resolve the issues'''==&lt;br /&gt;
&lt;br /&gt;
==='''Issue #311 '''===&lt;br /&gt;
&lt;br /&gt;
A user who is enrolled in an assignment and has a topic can advertise for more team members. When another user, who is enrolled in the same assignment but doesn't have a team and topic yet, can see the team advertisements by other teams. He can respond to any advertisement. As soon as he responds to an advertisement, an entry is created in the &amp;quot;&amp;quot; table and the &amp;quot;status&amp;quot; attribute of the corressponding tupple holds &amp;quot;P&amp;quot; value signifying pending status. This request goes to the team who had posted that advertisement. The request can be approved or denied by the team members. In either of the case, the  &amp;quot;status&amp;quot; changes to &amp;quot;A&amp;quot; or &amp;quot;D&amp;quot; respectively.&lt;br /&gt;
&lt;br /&gt;
If there is an entry in the &amp;quot;&amp;quot; table for a user, then (s)he can only see advertisements if the corresponding &amp;quot;status&amp;quot; is &amp;quot;D&amp;quot;, which implies that this user is not yet part of a team. This can be checked by querying for participant_id, which is unique for each combination of  user_id, assignment_id, and then checking the &amp;quot;status&amp;quot; corresponding to that participant_id.&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify sign_up_sheet.rb:&lt;br /&gt;
&lt;br /&gt;
  Respond_To_Ads(user_id, assignment_id)&lt;br /&gt;
  p_id=Fetch participant_id corressponding to (user_id, assignment_id)&lt;br /&gt;
  Check entries for p_id in table join_team_request_table where status is either &amp;quot;A&amp;quot; or &amp;quot;P&amp;quot;&lt;br /&gt;
  count=number of such entries&lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If Sign Up Sheet has topics for a particular assignment()&lt;br /&gt;
  If Respond_To_Ads(user_id, assignment_id) is equal to 0&lt;br /&gt;
     Show Trumpet icon which is a link to the Ads&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227 '''===&lt;br /&gt;
&lt;br /&gt;
If a user has an assignment and a topic only then (s)he will be able to advertise for team members to join their team. If a user doesn't have a topic (s)he won't be able to advertise.&lt;br /&gt;
The scenario in which A, B were two users, A with a topic, B without a topic, A joins B's  team but A's topic gets dropped; A,B become a team but with no topic. Such cases are now avoided as we have ensured that without first selecting a topic a user cannot advertise for team members nor can he send invitations to other users to join his team. This is done by quering in the database using inner join between tables-SignUpTopic, signed_up_teams,  team_users; and checking if the user has a topic for a particular assignment. If (s)he has a topic then he'll be able to see the option for advertising for teammates.&lt;br /&gt;
If the assignment doesn't have a topic then the user will be able to send out team invitations.&lt;br /&gt;
Pseudocode representing the logic we have used to modify student_teams_helper.rb:&lt;br /&gt;
&lt;br /&gt;
  StudentTeamsHelper&lt;br /&gt;
  If the concerned assignment has topics&lt;br /&gt;
    return false if their are topics&lt;br /&gt;
  else return true&lt;br /&gt;
&lt;br /&gt;
  User_Has_Topic(user_id, assignment_id)&lt;br /&gt;
    Query the database using inner joins between SignUpTopic, signed_up_teams,  team_users rows= number of rows returned by the above query&lt;br /&gt;
  If rows&amp;gt;0&lt;br /&gt;
    return true&lt;br /&gt;
  else&lt;br /&gt;
    return false&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If concerned assignment does not have topics OR User_Has_Topic is true&lt;br /&gt;
    Make Invite link visible&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''How to test'''==&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==='''Issue #311'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
2)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
3)Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
4)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. &lt;br /&gt;
&lt;br /&gt;
5)Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
6)Login as another user(Student) or impersonate another student, say student B, whom you have enrolled in the assignment.&lt;br /&gt;
&lt;br /&gt;
7)Since B doesn't have a topic yet, so you won't be able to see the advertise link. &lt;br /&gt;
&lt;br /&gt;
8)Go to the sign-up sheet for the assignment, you'll be able to see a trumpet icon next to the topic that has an ad posted.&lt;br /&gt;
&lt;br /&gt;
9)Click on the icon, you'll see the ad posted by A. Click on request to join A's team.&lt;br /&gt;
&lt;br /&gt;
10)On doing so an entry is created on the table &amp;quot;&amp;quot; and status holds value &amp;quot;P&amp;quot; signifying a pending request.&lt;br /&gt;
&lt;br /&gt;
11)Now if you go on the sign-up sheet again, you will no longer see the trumpet icon through which you can access the ads since you have already responded to an ad and the request is in pending state.&lt;br /&gt;
&lt;br /&gt;
12)Login as user A or impersonate A, now you'll be able to see the team join request sent by user B.&lt;br /&gt;
&lt;br /&gt;
13) Now, you can either approve it or decline it. Suppose you approve it, B will become a part of your team, and the status will change to &amp;quot;A&amp;quot;. And now if you login as B or impersonate B, you will no longer be able to access the trumpet icon which is a link to all ads pertaining to topics the concerned assignment.&lt;br /&gt;
&lt;br /&gt;
14)Had user A declined User Bs join request, the status in the table &amp;quot;&amp;quot; would change to &amp;quot;D&amp;quot;, that means user B still doesn't have a team. So, now if you login as B or impersonate, you'll be able to see the ads again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. &lt;br /&gt;
&lt;br /&gt;
2)You should be able to see the assignment now in the Assignment section. Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
3)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4)This ensures that for an assignment with  topics, a user can send out advertisements only if (s)he has a topic.&lt;br /&gt;
&lt;br /&gt;
5)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, do not add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
6)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
7)Since the assignment doesn't have any topics, therefore, you will be able to see the advertise link. You won't see a sign-up sheet since the assignment has no topics. You can advertise for teammates.&lt;br /&gt;
&lt;br /&gt;
==='''Screenshots from conducted Test '''===&lt;br /&gt;
On clicking on 'Manage Content' the following screen is rendered which lists the existing assignments.&lt;br /&gt;
----&lt;br /&gt;
[[File:create public assignment.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
On clicking on 'New Public Assignment' the following form is displayed in which assignment details can be entered.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup1.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Editing the created assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup2.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Click on 'Topics' to add topics for the assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup3.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Click on 'Rubrics' to setup assignment rubrics.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup4.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screenshot shows the completed setup.&lt;br /&gt;
----&lt;br /&gt;
[[File:completed setup for assignment with topic.jpg]]&lt;br /&gt;
----&lt;br /&gt;
On clicking on the image-link for adding participants for an assignment, the following screen is rendered.&lt;br /&gt;
----&lt;br /&gt;
[[File:adding student to assignmet.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Showing all added participants.&lt;br /&gt;
----&lt;br /&gt;
[[File:add the students.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a student who is a participant in the current assignment clicks on it's sign-up sheet.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the  topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a participant clicks on the sign-up sheet for the assignment. link.&lt;br /&gt;
----&lt;br /&gt;
[[File:select topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a participant chooses a topic and then clicks on 'create advertisement'.&lt;br /&gt;
----&lt;br /&gt;
[[File:create ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
After creating an ad, user can now see a horn icon which is a link to display the advertisements corresponding to that topic in that assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:see ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered after clicking on the horn icon.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered after clicking on the link 'Request invitation'.&lt;br /&gt;
----&lt;br /&gt;
[[File:respond to ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
After sending a request to join a team (via ad), the user will no longer see the link for the ads unless the request is denied by the receiver.&lt;br /&gt;
----&lt;br /&gt;
[[File:cant see any more ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
'''This is the screen of the user who had created the ad. He is now able to see any join requests that he can approve/decline.'''&lt;br /&gt;
----&lt;br /&gt;
[[File:request to join.jpg|Width:100px|Height:100px]]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=109222</id>
		<title>CSC/ECE 517 Fall 2017/E1779. Fix teammate advertisements and requests to join a team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=109222"/>
		<updated>2017-10-25T03:15:54Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
==='''Problem Statement'''===&lt;br /&gt;
In Expertiza, there are teammate advertisement, invitation and join team request features which facilitate students to form teams. Teammate advertisement works only for assignments with topics. The topic holders can create advertisement and a trumpet icon will show on the signup sheet page. If one respond to the advertisement, a join team request will be created and the topic holder can see it on “Your team” page. After a student gets a team and the team is not full, (s)he should also be able to send invitations to others.&lt;br /&gt;
----&lt;br /&gt;
=='''Issues to be fixed'''==&lt;br /&gt;
&lt;br /&gt;
Fix Issue #311: when one respond to an advertisement, (s)he should only be able to respond once. When a team advertises for new members, someone who responds to an ad should only be allowed to respond once. Currently, after someone responds to an ad, they can respond again an unlimited number of times.&lt;br /&gt;
&lt;br /&gt;
Fix Issue #227 : if user A got a topic and user B got no topic, then A join B’s team, A’s topic be  dropped and A and B end up with a new team with no topic. This issue should be handle carefully because we cannot simply add B to A’s team (imagine, if A has teammate X and B has teammate Y...). One of a potential fix is that, for assignment w/ topics, one cannot not post an ad unless (s)he holds a topic, similarly, one cannot sent invitations unless (s)he holds a topic. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&lt;br /&gt;
1) sign_up_sheet.rb&lt;br /&gt;
&lt;br /&gt;
2) student_teams_helper.rb&lt;br /&gt;
&lt;br /&gt;
3) _table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
4) view.html.erb&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Approach taken to resolve the issues'''==&lt;br /&gt;
&lt;br /&gt;
==='''Issue #311 '''===&lt;br /&gt;
&lt;br /&gt;
A user who is enrolled in an assignment and has a topic can advertise for more team members. When another user, who is enrolled in the same assignment but doesn't have a team and topic yet, can see the team advertisements by other teams. He can respond to any advertisement. As soon as he responds to an advertisement, an entry is created in the &amp;quot;&amp;quot; table and the &amp;quot;status&amp;quot; attribute of the corressponding tupple holds &amp;quot;P&amp;quot; value signifying pending status. This request goes to the team who had posted that advertisement. The request can be approved or denied by the team members. In either of the case, the  &amp;quot;status&amp;quot; changes to &amp;quot;A&amp;quot; or &amp;quot;D&amp;quot; respectively.&lt;br /&gt;
&lt;br /&gt;
If there is an entry in the &amp;quot;&amp;quot; table for a user, then (s)he can only see advertisements if the corresponding &amp;quot;status&amp;quot; is &amp;quot;D&amp;quot;, which implies that this user is not yet part of a team. This can be checked by querying for participant_id, which is unique for each combination of  user_id, assignment_id, and then checking the &amp;quot;status&amp;quot; corresponding to that participant_id.&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify sign_up_sheet.rb:&lt;br /&gt;
&lt;br /&gt;
  Respond_To_Ads(user_id, assignment_id)&lt;br /&gt;
  p_id=Fetch participant_id corressponding to (user_id, assignment_id)&lt;br /&gt;
  Check entries for p_id in table join_team_request_table where status is either &amp;quot;A&amp;quot; or &amp;quot;P&amp;quot;&lt;br /&gt;
  count=number of such entries&lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If Sign Up Sheet has topics for a particular assignment()&lt;br /&gt;
  If Respond_To_Ads(user_id, assignment_id) is equal to 0&lt;br /&gt;
     Show Trumpet icon which is a link to the Ads&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227 '''===&lt;br /&gt;
&lt;br /&gt;
If a user has an assignment and a topic only then (s)he will be able to advertise for team members to join their team. If a user doesn't have a topic (s)he won't be able to advertise.&lt;br /&gt;
The scenario in which A, B were two users, A with a topic, B without a topic, A joins B's  team but A's topic gets dropped; A,B become a team but with no topic. Such cases are now avoided as we have ensured that without first selecting a topic a user cannot advertise for team members nor can he send invitations to other users to join his team. This is done by quering in the database using inner join between tables-SignUpTopic, signed_up_teams,  team_users; and checking if the user has a topic for a particular assignment. If (s)he has a topic then he'll be able to see the option for advertising for teammates.&lt;br /&gt;
If the assignment doesn't have a topic then the user will be able to send out team invitations.&lt;br /&gt;
Pseudocode representing the logic we have used to modify student_teams_helper.rb:&lt;br /&gt;
&lt;br /&gt;
  StudentTeamsHelper&lt;br /&gt;
  If the concerned assignment has topics&lt;br /&gt;
    return false if their are topics&lt;br /&gt;
  else return true&lt;br /&gt;
&lt;br /&gt;
  User_Has_Topic(user_id, assignment_id)&lt;br /&gt;
    Query the database using inner joins between SignUpTopic, signed_up_teams,  team_users rows= number of rows returned by the above query&lt;br /&gt;
  If rows&amp;gt;0&lt;br /&gt;
    return true&lt;br /&gt;
  else&lt;br /&gt;
    return false&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If concerned assignment does not have topics OR User_Has_Topic is true&lt;br /&gt;
    Make Invite link visible&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''How to test'''==&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==='''Issue #311'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
2)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
3)Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
4)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. &lt;br /&gt;
&lt;br /&gt;
5)Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
6)Login as another user(Student) or impersonate another student, say student B, whom you have enrolled in the assignment.&lt;br /&gt;
&lt;br /&gt;
7)Since B doesn't have a topic yet, so you won't be able to see the advertise link. &lt;br /&gt;
&lt;br /&gt;
8)Go to the sign-up sheet for the assignment, you'll be able to see a trumpet icon next to the topic that has an ad posted.&lt;br /&gt;
&lt;br /&gt;
9)Click on the icon, you'll see the ad posted by A. Click on request to join A's team.&lt;br /&gt;
&lt;br /&gt;
10)On doing so an entry is created on the table &amp;quot;&amp;quot; and status holds value &amp;quot;P&amp;quot; signifying a pending request.&lt;br /&gt;
&lt;br /&gt;
11)Now if you go on the sign-up sheet again, you will no longer see the trumpet icon through which you can access the ads since you have already responded to an ad and the request is in pending state.&lt;br /&gt;
&lt;br /&gt;
12)Login as user A or impersonate A, now you'll be able to see the team join request sent by user B.&lt;br /&gt;
&lt;br /&gt;
13) Now, you can either approve it or decline it. Suppose you approve it, B will become a part of your team, and the status will change to &amp;quot;A&amp;quot;. And now if you login as B or impersonate B, you will no longer be able to access the trumpet icon which is a link to all ads pertaining to topics the concerned assignment.&lt;br /&gt;
&lt;br /&gt;
14)Had user A declined User Bs join request, the status in the table &amp;quot;&amp;quot; would change to &amp;quot;D&amp;quot;, that means user B still doesn't have a team. So, now if you login as B or impersonate, you'll be able to see the ads again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. &lt;br /&gt;
&lt;br /&gt;
2)You should be able to see the assignment now in the Assignment section. Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
3)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4)This ensures that for an assignment with  topics, a user can send out advertisements only if (s)he has a topic.&lt;br /&gt;
&lt;br /&gt;
5)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, do not add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
6)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
7)Since the assignment doesn't have any topics, therefore, you will be able to see the advertise link. You won't see a sign-up sheet since the assignment has no topics. You can advertise for teammates.&lt;br /&gt;
&lt;br /&gt;
==='''Screenshots from conducted Test '''===&lt;br /&gt;
On clicking on 'Manage Content' the following screen is rendered which lists the existing assignments.&lt;br /&gt;
----&lt;br /&gt;
[[File:create public assignment.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
On clicking on 'New Public Assignment' the following form is displayed in which assignment details can be entered.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup1.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Editing the created assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup2.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Click on 'Topics' to add topics for the assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup3.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Click on 'Rubrics' to setup assignment rubrics.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup4.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screenshot shows the completed setup.&lt;br /&gt;
----&lt;br /&gt;
[[File:completed setup for assignment with topic.jpg]]&lt;br /&gt;
----&lt;br /&gt;
On clicking on the image-link for adding participants for an assignment, the following screen is rendered.&lt;br /&gt;
----&lt;br /&gt;
[[File:adding student to assignmet.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Showing all added participants.&lt;br /&gt;
----&lt;br /&gt;
[[File:add the students.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a student who is a participant in the current assignment clicks on it's sign-up sheet.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the  topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a participant clicks on the sign-up sheet for the assignment. link.&lt;br /&gt;
----&lt;br /&gt;
[[File:select topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a participant chooses a topic and then clicks on 'create advertisement'.&lt;br /&gt;
----&lt;br /&gt;
[[File:create ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
After creating an ad, user can now see a horn icon which is a link to display the advertisements corresponding to that topic in that assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:see ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered after clicking on the horn icon.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered after clicking on the link 'Request invitation'.&lt;br /&gt;
----&lt;br /&gt;
[[File:respond to ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
After sending a request to join a team (via ad), the user will no longer see the link for the ads unless the request is denied by the receiver.&lt;br /&gt;
----&lt;br /&gt;
[[File:cant see any more ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
'''This is the screen of the user who had created the ad. He is now able to see any join requests that he can approve/decline.'''&lt;br /&gt;
----&lt;br /&gt;
[[File:request to join.jpg|Width:100px|Height:100px]]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=109221</id>
		<title>CSC/ECE 517 Fall 2017/E1779. Fix teammate advertisements and requests to join a team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=109221"/>
		<updated>2017-10-25T03:12:51Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
==='''Problem Statement'''===&lt;br /&gt;
In Expertiza, there are teammate advertisement, invitation and join team request features which facilitate students to form teams. Teammate advertisement works only for assignments with topics. The topic holders can create advertisement and a trumpet icon will show on the signup sheet page. If one respond to the advertisement, a join team request will be created and the topic holder can see it on “Your team” page. After a student gets a team and the team is not full, (s)he should also be able to send invitations to others.&lt;br /&gt;
----&lt;br /&gt;
=='''Issues to be fixed'''==&lt;br /&gt;
&lt;br /&gt;
Fix Issue #311: when one respond to an advertisement, (s)he should only be able to respond once. When a team advertises for new members, someone who responds to an ad should only be allowed to respond once. Currently, after someone responds to an ad, they can respond again an unlimited number of times.&lt;br /&gt;
&lt;br /&gt;
Fix Issue #227 : if user A got a topic and user B got no topic, then A join B’s team, A’s topic be  dropped and A and B end up with a new team with no topic. This issue should be handle carefully because we cannot simply add B to A’s team (imagine, if A has teammate X and B has teammate Y...). One of a potential fix is that, for assignment w/ topics, one cannot not post an ad unless (s)he holds a topic, similarly, one cannot sent invitations unless (s)he holds a topic. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&lt;br /&gt;
1) sign_up_sheet.rb&lt;br /&gt;
&lt;br /&gt;
2) student_teams_helper.rb&lt;br /&gt;
&lt;br /&gt;
3) _table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
4) view.html.erb&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Approach taken to resolve the issues'''==&lt;br /&gt;
&lt;br /&gt;
==='''Issue #311 '''===&lt;br /&gt;
&lt;br /&gt;
A user who is enrolled in an assignment and has a topic can advertise for more team members. When another user, who is enrolled in the same assignment but doesn't have a team and topic yet, can see the team advertisements by other teams. He can respond to any advertisement. As soon as he responds to an advertisement, an entry is created in the &amp;quot;&amp;quot; table and the &amp;quot;status&amp;quot; attribute of the corressponding tupple holds &amp;quot;P&amp;quot; value signifying pending status. This request goes to the team who had posted that advertisement. The request can be approved or denied by the team members. In either of the case, the  &amp;quot;status&amp;quot; changes to &amp;quot;A&amp;quot; or &amp;quot;D&amp;quot; respectively.&lt;br /&gt;
&lt;br /&gt;
If there is an entry in the &amp;quot;&amp;quot; table for a user, then (s)he can only see advertisements if the corresponding &amp;quot;status&amp;quot; is &amp;quot;D&amp;quot;, which implies that this user is not yet part of a team. This can be checked by querying for participant_id, which is unique for each combination of  user_id, assignment_id, and then checking the &amp;quot;status&amp;quot; corresponding to that participant_id.&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify sign_up_sheet.rb:&lt;br /&gt;
&lt;br /&gt;
  Respond_To_Ads(user_id, assignment_id)&lt;br /&gt;
  p_id=Fetch participant_id corressponding to (user_id, assignment_id)&lt;br /&gt;
  Check entries for p_id in table join_team_request_table where status is either &amp;quot;A&amp;quot; or &amp;quot;P&amp;quot;&lt;br /&gt;
  count=number of such entries&lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If Sign Up Sheet has topics for a particular assignment()&lt;br /&gt;
  If Respond_To_Ads(user_id, assignment_id) is equal to 0&lt;br /&gt;
     Show Trumpet icon which is a link to the Ads&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227 '''===&lt;br /&gt;
&lt;br /&gt;
If a user has an assignment and a topic only then (s)he will be able to advertise for team members to join their team. If a user doesn't have a topic (s)he won't be able to advertise.&lt;br /&gt;
The scenario in which A, B were two users, A with a topic, B without a topic, A joins B's  team but A's topic gets dropped; A,B become a team but with no topic. Such cases are now avoided as we have ensured that without first selecting a topic a user cannot advertise for team members nor can he send invitations to other users to join his team. This is done by quering in the database using inner join between tables-SignUpTopic, signed_up_teams,  team_users; and checking if the user has a topic for a particular assignment. If (s)he has a topic then he'll be able to see the option for advertising for teammates.&lt;br /&gt;
If the assignment doesn't have a topic then the user will be able to send out team invitations.&lt;br /&gt;
Pseudocode representing the logic we have used to modify student_teams_helper.rb:&lt;br /&gt;
&lt;br /&gt;
  StudentTeamsHelper&lt;br /&gt;
  If the concerned assignment has topics&lt;br /&gt;
    return false if their are topics&lt;br /&gt;
  else return true&lt;br /&gt;
&lt;br /&gt;
  User_Has_Topic(user_id, assignment_id)&lt;br /&gt;
    Query the database using inner joins between SignUpTopic, signed_up_teams,  team_users rows= number of rows returned by the above query&lt;br /&gt;
  If rows&amp;gt;0&lt;br /&gt;
    return true&lt;br /&gt;
  else&lt;br /&gt;
    return false&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If concerned assignment does not have topics OR User_Has_Topic is true&lt;br /&gt;
    Make Invite link visible&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''How to test'''==&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==='''Issue #311'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
2)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
3)Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
4)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. &lt;br /&gt;
&lt;br /&gt;
5)Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
6)Login as another user(Student) or impersonate another student, say student B, whom you have enrolled in the assignment.&lt;br /&gt;
&lt;br /&gt;
7)Since B doesn't have a topic yet, so you won't be able to see the advertise link. &lt;br /&gt;
&lt;br /&gt;
8)Go to the sign-up sheet for the assignment, you'll be able to see a trumpet icon next to the topic that has an ad posted.&lt;br /&gt;
&lt;br /&gt;
9)Click on the icon, you'll see the ad posted by A. Click on request to join A's team.&lt;br /&gt;
&lt;br /&gt;
10)On doing so an entry is created on the table &amp;quot;&amp;quot; and status holds value &amp;quot;P&amp;quot; signifying a pending request.&lt;br /&gt;
&lt;br /&gt;
11)Now if you go on the sign-up sheet again, you will no longer see the trumpet icon through which you can access the ads since you have already responded to an ad and the request is in pending state.&lt;br /&gt;
&lt;br /&gt;
12)Login as user A or impersonate A, now you'll be able to see the team join request sent by user B.&lt;br /&gt;
&lt;br /&gt;
13) Now, you can either approve it or decline it. Suppose you approve it, B will become a part of your team, and the status will change to &amp;quot;A&amp;quot;. And now if you login as B or impersonate B, you will no longer be able to access the trumpet icon which is a link to all ads pertaining to topics the concerned assignment.&lt;br /&gt;
&lt;br /&gt;
14)Had user A declined User Bs join request, the status in the table &amp;quot;&amp;quot; would change to &amp;quot;D&amp;quot;, that means user B still doesn't have a team. So, now if you login as B or impersonate, you'll be able to see the ads again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. &lt;br /&gt;
&lt;br /&gt;
2)You should be able to see the assignment now in the Assignment section. Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
3)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4)This ensures that for an assignment with  topics, a user can send out advertisements only if (s)he has a topic.&lt;br /&gt;
&lt;br /&gt;
5)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, do not add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
6)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
7)Since the assignment doesn't have any topics, therefore, you will be able to see the advertise link. You won't see a sign-up sheet since the assignment has no topics. You can advertise for teammates.&lt;br /&gt;
&lt;br /&gt;
==='''Screenshots from conducted Test '''===&lt;br /&gt;
On clicking on 'Manage Content' the following screen is rendered which lists the existing assignments.&lt;br /&gt;
----&lt;br /&gt;
[[File:create public assignment.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
On clicking on 'New Public Assignment' the following form is displayed in which assignment details can be entered.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup1.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Editing the created assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup2.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Click on 'Topics' to add topics for the assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup3.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Click on 'Rubrics' to setup assignment rubrics.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup4.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screenshot shows the completed setup.&lt;br /&gt;
----&lt;br /&gt;
[[File:completed setup for assignment with topic.jpg]]&lt;br /&gt;
----&lt;br /&gt;
On clicking on the image-link for adding participants for an assignment, the following screen is rendered.&lt;br /&gt;
----&lt;br /&gt;
[[File:adding student to assignmet.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Showing all added participants.&lt;br /&gt;
----&lt;br /&gt;
[[File:add the students.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a student who is a participant in the current assignment clicks on it's sign-up sheet.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the  topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a participant clicks on the sign-up sheet for the assignment. link.&lt;br /&gt;
----&lt;br /&gt;
[[File:select topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a participant chooses a topic and then clicks on 'create advertisement'.&lt;br /&gt;
----&lt;br /&gt;
[[File:create ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
After creating an ad, user can now see a horn icon which is a link to display the advertisements corresponding to that topic in that assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:see ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered after clicking on the horn icon.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered after clicking on the link 'Request invitation'.&lt;br /&gt;
----&lt;br /&gt;
[[File:respond to ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
After sending a request to join a team (via ad), the user will no longer see the link for the ads unless the request is denied by the receiver.&lt;br /&gt;
----&lt;br /&gt;
[[File:cant see any more ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
This is the screen of the user who had created the ad. He is now able to see any join requests that he can approve/decline.&lt;br /&gt;
----&lt;br /&gt;
[[File:request to join.jpg|Width:100px|Height:100px]]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=109220</id>
		<title>CSC/ECE 517 Fall 2017/E1779. Fix teammate advertisements and requests to join a team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=109220"/>
		<updated>2017-10-25T03:11:31Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
==='''Problem Statement'''===&lt;br /&gt;
In Expertiza, there are teammate advertisement, invitation and join team request features which facilitate students to form teams. Teammate advertisement works only for assignments with topics. The topic holders can create advertisement and a trumpet icon will show on the signup sheet page. If one respond to the advertisement, a join team request will be created and the topic holder can see it on “Your team” page. After a student gets a team and the team is not full, (s)he should also be able to send invitations to others.&lt;br /&gt;
----&lt;br /&gt;
=='''Issues to be fixed'''==&lt;br /&gt;
&lt;br /&gt;
Fix Issue #311: when one respond to an advertisement, (s)he should only be able to respond once. When a team advertises for new members, someone who responds to an ad should only be allowed to respond once. Currently, after someone responds to an ad, they can respond again an unlimited number of times.&lt;br /&gt;
&lt;br /&gt;
Fix Issue #227 : if user A got a topic and user B got no topic, then A join B’s team, A’s topic be  dropped and A and B end up with a new team with no topic. This issue should be handle carefully because we cannot simply add B to A’s team (imagine, if A has teammate X and B has teammate Y...). One of a potential fix is that, for assignment w/ topics, one cannot not post an ad unless (s)he holds a topic, similarly, one cannot sent invitations unless (s)he holds a topic. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&lt;br /&gt;
1) sign_up_sheet.rb&lt;br /&gt;
&lt;br /&gt;
2) student_teams_helper.rb&lt;br /&gt;
&lt;br /&gt;
3) _table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
4) view.html.erb&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Approach taken to resolve the issues'''==&lt;br /&gt;
&lt;br /&gt;
==='''Issue #311 '''===&lt;br /&gt;
&lt;br /&gt;
A user who is enrolled in an assignment and has a topic can advertise for more team members. When another user, who is enrolled in the same assignment but doesn't have a team and topic yet, can see the team advertisements by other teams. He can respond to any advertisement. As soon as he responds to an advertisement, an entry is created in the &amp;quot;&amp;quot; table and the &amp;quot;status&amp;quot; attribute of the corressponding tupple holds &amp;quot;P&amp;quot; value signifying pending status. This request goes to the team who had posted that advertisement. The request can be approved or denied by the team members. In either of the case, the  &amp;quot;status&amp;quot; changes to &amp;quot;A&amp;quot; or &amp;quot;D&amp;quot; respectively.&lt;br /&gt;
&lt;br /&gt;
If there is an entry in the &amp;quot;&amp;quot; table for a user, then (s)he can only see advertisements if the corresponding &amp;quot;status&amp;quot; is &amp;quot;D&amp;quot;, which implies that this user is not yet part of a team. This can be checked by querying for participant_id, which is unique for each combination of  user_id, assignment_id, and then checking the &amp;quot;status&amp;quot; corresponding to that participant_id.&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify sign_up_sheet.rb:&lt;br /&gt;
&lt;br /&gt;
  Respond_To_Ads(user_id, assignment_id)&lt;br /&gt;
  p_id=Fetch participant_id corressponding to (user_id, assignment_id)&lt;br /&gt;
  Check entries for p_id in table join_team_request_table where status is either &amp;quot;A&amp;quot; or &amp;quot;P&amp;quot;&lt;br /&gt;
  count=number of such entries&lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If Sign Up Sheet has topics for a particular assignment()&lt;br /&gt;
  If Respond_To_Ads(user_id, assignment_id) is equal to 0&lt;br /&gt;
     Show Trumpet icon which is a link to the Ads&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227 '''===&lt;br /&gt;
&lt;br /&gt;
If a user has an assignment and a topic only then (s)he will be able to advertise for team members to join their team. If a user doesn't have a topic (s)he won't be able to advertise.&lt;br /&gt;
The scenario in which A, B were two users, A with a topic, B without a topic, A joins B's  team but A's topic gets dropped; A,B become a team but with no topic. Such cases are now avoided as we have ensured that without first selecting a topic a user cannot advertise for team members nor can he send invitations to other users to join his team. This is done by quering in the database using inner join between tables-SignUpTopic, signed_up_teams,  team_users; and checking if the user has a topic for a particular assignment. If (s)he has a topic then he'll be able to see the option for advertising for teammates.&lt;br /&gt;
If the assignment doesn't have a topic then the user will be able to send out team invitations.&lt;br /&gt;
Pseudocode representing the logic we have used to modify student_teams_helper.rb:&lt;br /&gt;
&lt;br /&gt;
  StudentTeamsHelper&lt;br /&gt;
  If the concerned assignment has topics&lt;br /&gt;
    return false if their are topics&lt;br /&gt;
  else return true&lt;br /&gt;
&lt;br /&gt;
  User_Has_Topic(user_id, assignment_id)&lt;br /&gt;
    Query the database using inner joins between SignUpTopic, signed_up_teams,  team_users rows= number of rows returned by the above query&lt;br /&gt;
  If rows&amp;gt;0&lt;br /&gt;
    return true&lt;br /&gt;
  else&lt;br /&gt;
    return false&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If concerned assignment does not have topics OR User_Has_Topic is true&lt;br /&gt;
    Make Invite link visible&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''How to test'''==&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==='''Issue #311'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
2)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
3)Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
4)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. &lt;br /&gt;
&lt;br /&gt;
5)Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
6)Login as another user(Student) or impersonate another student, say student B, whom you have enrolled in the assignment.&lt;br /&gt;
&lt;br /&gt;
7)Since B doesn't have a topic yet, so you won't be able to see the advertise link. &lt;br /&gt;
&lt;br /&gt;
8)Go to the sign-up sheet for the assignment, you'll be able to see a trumpet icon next to the topic that has an ad posted.&lt;br /&gt;
&lt;br /&gt;
9)Click on the icon, you'll see the ad posted by A. Click on request to join A's team.&lt;br /&gt;
&lt;br /&gt;
10)On doing so an entry is created on the table &amp;quot;&amp;quot; and status holds value &amp;quot;P&amp;quot; signifying a pending request.&lt;br /&gt;
&lt;br /&gt;
11)Now if you go on the sign-up sheet again, you will no longer see the trumpet icon through which you can access the ads since you have already responded to an ad and the request is in pending state.&lt;br /&gt;
&lt;br /&gt;
12)Login as user A or impersonate A, now you'll be able to see the team join request sent by user B.&lt;br /&gt;
&lt;br /&gt;
13) Now, you can either approve it or decline it. Suppose you approve it, B will become a part of your team, and the status will change to &amp;quot;A&amp;quot;. And now if you login as B or impersonate B, you will no longer be able to access the trumpet icon which is a link to all ads pertaining to topics the concerned assignment.&lt;br /&gt;
&lt;br /&gt;
14)Had user A declined User Bs join request, the status in the table &amp;quot;&amp;quot; would change to &amp;quot;D&amp;quot;, that means user B still doesn't have a team. So, now if you login as B or impersonate, you'll be able to see the ads again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. &lt;br /&gt;
&lt;br /&gt;
2)You should be able to see the assignment now in the Assignment section. Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
3)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4)This ensures that for an assignment with  topics, a user can send out advertisements only if (s)he has a topic.&lt;br /&gt;
&lt;br /&gt;
5)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, do not add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
6)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
7)Since the assignment doesn't have any topics, therefore, you will be able to see the advertise link. You won't see a sign-up sheet since the assignment has no topics. You can advertise for teammates.&lt;br /&gt;
&lt;br /&gt;
==='''Screenshots from conducted Test '''===&lt;br /&gt;
On clicking on 'Manage Content' the following screen is rendered which lists the existing assignments.&lt;br /&gt;
----&lt;br /&gt;
[[File:create public assignment.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
On clicking on 'New Public Assignment' the following form is displayed in which assignment details can be entered.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup1.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Editing the created assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup2.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Click on 'Topics' to add topics for the assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup3.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Click on 'Rubrics' to setup assignment rubrics.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup4.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screenshot shows the completed setup.&lt;br /&gt;
----&lt;br /&gt;
[[File:completed setup for assignment with topic.jpg]]&lt;br /&gt;
----&lt;br /&gt;
On clicking on the image-link for adding participants for an assignment, the following screen is rendered.&lt;br /&gt;
----&lt;br /&gt;
[[File:adding student to assignmet.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Showing all added participants.&lt;br /&gt;
----&lt;br /&gt;
[[File:add the students.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a student who is a participant in the current assignment clicks on it's sign-up sheet.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the  topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a participant clicks on the sign-up sheet for the assignment. link.&lt;br /&gt;
----&lt;br /&gt;
[[File:select topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a participant chooses a topic and then clicks on 'create advertisement'.&lt;br /&gt;
----&lt;br /&gt;
[[File:create ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
After creating an ad, user can now see a horn icon which is a link to display the advertisements corresponding to that topic in that assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:see ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered after clicking on the horn icon.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered after clicking on the link 'Request invitation'.&lt;br /&gt;
----&lt;br /&gt;
[[File:respond to ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
After sending a request to join a team (via ad), the user will no longer see the link for the ads unless the request is denied by the receiver.&lt;br /&gt;
----&lt;br /&gt;
[[File:cant see any more ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
This is the screen of the user who had created the ad. He is now able to see any join requests that he can approve/decline.&lt;br /&gt;
----&lt;br /&gt;
[[File:request to join.jpg|Size Width:100px Height:100px]]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=109219</id>
		<title>CSC/ECE 517 Fall 2017/E1779. Fix teammate advertisements and requests to join a team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=109219"/>
		<updated>2017-10-25T03:10:43Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
==='''Problem Statement'''===&lt;br /&gt;
In Expertiza, there are teammate advertisement, invitation and join team request features which facilitate students to form teams. Teammate advertisement works only for assignments with topics. The topic holders can create advertisement and a trumpet icon will show on the signup sheet page. If one respond to the advertisement, a join team request will be created and the topic holder can see it on “Your team” page. After a student gets a team and the team is not full, (s)he should also be able to send invitations to others.&lt;br /&gt;
----&lt;br /&gt;
=='''Issues to be fixed'''==&lt;br /&gt;
&lt;br /&gt;
Fix Issue #311: when one respond to an advertisement, (s)he should only be able to respond once. When a team advertises for new members, someone who responds to an ad should only be allowed to respond once. Currently, after someone responds to an ad, they can respond again an unlimited number of times.&lt;br /&gt;
&lt;br /&gt;
Fix Issue #227 : if user A got a topic and user B got no topic, then A join B’s team, A’s topic be  dropped and A and B end up with a new team with no topic. This issue should be handle carefully because we cannot simply add B to A’s team (imagine, if A has teammate X and B has teammate Y...). One of a potential fix is that, for assignment w/ topics, one cannot not post an ad unless (s)he holds a topic, similarly, one cannot sent invitations unless (s)he holds a topic. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&lt;br /&gt;
1) sign_up_sheet.rb&lt;br /&gt;
&lt;br /&gt;
2) student_teams_helper.rb&lt;br /&gt;
&lt;br /&gt;
3) _table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
4) view.html.erb&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Approach taken to resolve the issues'''==&lt;br /&gt;
&lt;br /&gt;
==='''Issue #311 '''===&lt;br /&gt;
&lt;br /&gt;
A user who is enrolled in an assignment and has a topic can advertise for more team members. When another user, who is enrolled in the same assignment but doesn't have a team and topic yet, can see the team advertisements by other teams. He can respond to any advertisement. As soon as he responds to an advertisement, an entry is created in the &amp;quot;&amp;quot; table and the &amp;quot;status&amp;quot; attribute of the corressponding tupple holds &amp;quot;P&amp;quot; value signifying pending status. This request goes to the team who had posted that advertisement. The request can be approved or denied by the team members. In either of the case, the  &amp;quot;status&amp;quot; changes to &amp;quot;A&amp;quot; or &amp;quot;D&amp;quot; respectively.&lt;br /&gt;
&lt;br /&gt;
If there is an entry in the &amp;quot;&amp;quot; table for a user, then (s)he can only see advertisements if the corresponding &amp;quot;status&amp;quot; is &amp;quot;D&amp;quot;, which implies that this user is not yet part of a team. This can be checked by querying for participant_id, which is unique for each combination of  user_id, assignment_id, and then checking the &amp;quot;status&amp;quot; corresponding to that participant_id.&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify sign_up_sheet.rb:&lt;br /&gt;
&lt;br /&gt;
  Respond_To_Ads(user_id, assignment_id)&lt;br /&gt;
  p_id=Fetch participant_id corressponding to (user_id, assignment_id)&lt;br /&gt;
  Check entries for p_id in table join_team_request_table where status is either &amp;quot;A&amp;quot; or &amp;quot;P&amp;quot;&lt;br /&gt;
  count=number of such entries&lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If Sign Up Sheet has topics for a particular assignment()&lt;br /&gt;
  If Respond_To_Ads(user_id, assignment_id) is equal to 0&lt;br /&gt;
     Show Trumpet icon which is a link to the Ads&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227 '''===&lt;br /&gt;
&lt;br /&gt;
If a user has an assignment and a topic only then (s)he will be able to advertise for team members to join their team. If a user doesn't have a topic (s)he won't be able to advertise.&lt;br /&gt;
The scenario in which A, B were two users, A with a topic, B without a topic, A joins B's  team but A's topic gets dropped; A,B become a team but with no topic. Such cases are now avoided as we have ensured that without first selecting a topic a user cannot advertise for team members nor can he send invitations to other users to join his team. This is done by quering in the database using inner join between tables-SignUpTopic, signed_up_teams,  team_users; and checking if the user has a topic for a particular assignment. If (s)he has a topic then he'll be able to see the option for advertising for teammates.&lt;br /&gt;
If the assignment doesn't have a topic then the user will be able to send out team invitations.&lt;br /&gt;
Pseudocode representing the logic we have used to modify student_teams_helper.rb:&lt;br /&gt;
&lt;br /&gt;
  StudentTeamsHelper&lt;br /&gt;
  If the concerned assignment has topics&lt;br /&gt;
    return false if their are topics&lt;br /&gt;
  else return true&lt;br /&gt;
&lt;br /&gt;
  User_Has_Topic(user_id, assignment_id)&lt;br /&gt;
    Query the database using inner joins between SignUpTopic, signed_up_teams,  team_users rows= number of rows returned by the above query&lt;br /&gt;
  If rows&amp;gt;0&lt;br /&gt;
    return true&lt;br /&gt;
  else&lt;br /&gt;
    return false&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If concerned assignment does not have topics OR User_Has_Topic is true&lt;br /&gt;
    Make Invite link visible&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''How to test'''==&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==='''Issue #311'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
2)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
3)Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
4)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. &lt;br /&gt;
&lt;br /&gt;
5)Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
6)Login as another user(Student) or impersonate another student, say student B, whom you have enrolled in the assignment.&lt;br /&gt;
&lt;br /&gt;
7)Since B doesn't have a topic yet, so you won't be able to see the advertise link. &lt;br /&gt;
&lt;br /&gt;
8)Go to the sign-up sheet for the assignment, you'll be able to see a trumpet icon next to the topic that has an ad posted.&lt;br /&gt;
&lt;br /&gt;
9)Click on the icon, you'll see the ad posted by A. Click on request to join A's team.&lt;br /&gt;
&lt;br /&gt;
10)On doing so an entry is created on the table &amp;quot;&amp;quot; and status holds value &amp;quot;P&amp;quot; signifying a pending request.&lt;br /&gt;
&lt;br /&gt;
11)Now if you go on the sign-up sheet again, you will no longer see the trumpet icon through which you can access the ads since you have already responded to an ad and the request is in pending state.&lt;br /&gt;
&lt;br /&gt;
12)Login as user A or impersonate A, now you'll be able to see the team join request sent by user B.&lt;br /&gt;
&lt;br /&gt;
13) Now, you can either approve it or decline it. Suppose you approve it, B will become a part of your team, and the status will change to &amp;quot;A&amp;quot;. And now if you login as B or impersonate B, you will no longer be able to access the trumpet icon which is a link to all ads pertaining to topics the concerned assignment.&lt;br /&gt;
&lt;br /&gt;
14)Had user A declined User Bs join request, the status in the table &amp;quot;&amp;quot; would change to &amp;quot;D&amp;quot;, that means user B still doesn't have a team. So, now if you login as B or impersonate, you'll be able to see the ads again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. &lt;br /&gt;
&lt;br /&gt;
2)You should be able to see the assignment now in the Assignment section. Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
3)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4)This ensures that for an assignment with  topics, a user can send out advertisements only if (s)he has a topic.&lt;br /&gt;
&lt;br /&gt;
5)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, do not add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
6)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
7)Since the assignment doesn't have any topics, therefore, you will be able to see the advertise link. You won't see a sign-up sheet since the assignment has no topics. You can advertise for teammates.&lt;br /&gt;
&lt;br /&gt;
==='''Screenshots from conducted Test '''===&lt;br /&gt;
On clicking on 'Manage Content' the following screen is rendered which lists the existing assignments.&lt;br /&gt;
----&lt;br /&gt;
[[File:create public assignment.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
On clicking on 'New Public Assignment' the following form is displayed in which assignment details can be entered.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup1.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Editing the created assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup2.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Click on 'Topics' to add topics for the assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup3.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Click on 'Rubrics' to setup assignment rubrics.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup4.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screenshot shows the completed setup.&lt;br /&gt;
----&lt;br /&gt;
[[File:completed setup for assignment with topic.jpg]]&lt;br /&gt;
----&lt;br /&gt;
On clicking on the image-link for adding participants for an assignment, the following screen is rendered.&lt;br /&gt;
----&lt;br /&gt;
[[File:adding student to assignmet.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Showing all added participants.&lt;br /&gt;
----&lt;br /&gt;
[[File:add the students.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a student who is a participant in the current assignment clicks on it's sign-up sheet.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the  topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a participant clicks on the sign-up sheet for the assignment. link.&lt;br /&gt;
----&lt;br /&gt;
[[File:select topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a participant chooses a topic and then clicks on 'create advertisement'.&lt;br /&gt;
----&lt;br /&gt;
[[File:create ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
After creating an ad, user can now see a horn icon which is a link to display the advertisements corresponding to that topic in that assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:see ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered after clicking on the horn icon.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered after clicking on the link 'Request invitation'.&lt;br /&gt;
----&lt;br /&gt;
[[File:respond to ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
After sending a request to join a team (via ad), the user will no longer see the link for the ads unless the request is denied by the receiver.&lt;br /&gt;
----&lt;br /&gt;
[[File:cant see any more ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
This is the screen of the user who had created the ad. He is now able to see any join requests that he can approve/decline.&lt;br /&gt;
----&lt;br /&gt;
[[File:request to join.jpg|Size Width=100px Height=100px]]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=109218</id>
		<title>CSC/ECE 517 Fall 2017/E1779. Fix teammate advertisements and requests to join a team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=109218"/>
		<updated>2017-10-25T03:08:54Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
==='''Problem Statement'''===&lt;br /&gt;
In Expertiza, there are teammate advertisement, invitation and join team request features which facilitate students to form teams. Teammate advertisement works only for assignments with topics. The topic holders can create advertisement and a trumpet icon will show on the signup sheet page. If one respond to the advertisement, a join team request will be created and the topic holder can see it on “Your team” page. After a student gets a team and the team is not full, (s)he should also be able to send invitations to others.&lt;br /&gt;
----&lt;br /&gt;
=='''Issues to be fixed'''==&lt;br /&gt;
&lt;br /&gt;
Fix Issue #311: when one respond to an advertisement, (s)he should only be able to respond once. When a team advertises for new members, someone who responds to an ad should only be allowed to respond once. Currently, after someone responds to an ad, they can respond again an unlimited number of times.&lt;br /&gt;
&lt;br /&gt;
Fix Issue #227 : if user A got a topic and user B got no topic, then A join B’s team, A’s topic be  dropped and A and B end up with a new team with no topic. This issue should be handle carefully because we cannot simply add B to A’s team (imagine, if A has teammate X and B has teammate Y...). One of a potential fix is that, for assignment w/ topics, one cannot not post an ad unless (s)he holds a topic, similarly, one cannot sent invitations unless (s)he holds a topic. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&lt;br /&gt;
1) sign_up_sheet.rb&lt;br /&gt;
&lt;br /&gt;
2) student_teams_helper.rb&lt;br /&gt;
&lt;br /&gt;
3) _table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
4) view.html.erb&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Approach taken to resolve the issues'''==&lt;br /&gt;
&lt;br /&gt;
==='''Issue #311 '''===&lt;br /&gt;
&lt;br /&gt;
A user who is enrolled in an assignment and has a topic can advertise for more team members. When another user, who is enrolled in the same assignment but doesn't have a team and topic yet, can see the team advertisements by other teams. He can respond to any advertisement. As soon as he responds to an advertisement, an entry is created in the &amp;quot;&amp;quot; table and the &amp;quot;status&amp;quot; attribute of the corressponding tupple holds &amp;quot;P&amp;quot; value signifying pending status. This request goes to the team who had posted that advertisement. The request can be approved or denied by the team members. In either of the case, the  &amp;quot;status&amp;quot; changes to &amp;quot;A&amp;quot; or &amp;quot;D&amp;quot; respectively.&lt;br /&gt;
&lt;br /&gt;
If there is an entry in the &amp;quot;&amp;quot; table for a user, then (s)he can only see advertisements if the corresponding &amp;quot;status&amp;quot; is &amp;quot;D&amp;quot;, which implies that this user is not yet part of a team. This can be checked by querying for participant_id, which is unique for each combination of  user_id, assignment_id, and then checking the &amp;quot;status&amp;quot; corresponding to that participant_id.&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify sign_up_sheet.rb:&lt;br /&gt;
&lt;br /&gt;
  Respond_To_Ads(user_id, assignment_id)&lt;br /&gt;
  p_id=Fetch participant_id corressponding to (user_id, assignment_id)&lt;br /&gt;
  Check entries for p_id in table join_team_request_table where status is either &amp;quot;A&amp;quot; or &amp;quot;P&amp;quot;&lt;br /&gt;
  count=number of such entries&lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If Sign Up Sheet has topics for a particular assignment()&lt;br /&gt;
  If Respond_To_Ads(user_id, assignment_id) is equal to 0&lt;br /&gt;
     Show Trumpet icon which is a link to the Ads&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227 '''===&lt;br /&gt;
&lt;br /&gt;
If a user has an assignment and a topic only then (s)he will be able to advertise for team members to join their team. If a user doesn't have a topic (s)he won't be able to advertise.&lt;br /&gt;
The scenario in which A, B were two users, A with a topic, B without a topic, A joins B's  team but A's topic gets dropped; A,B become a team but with no topic. Such cases are now avoided as we have ensured that without first selecting a topic a user cannot advertise for team members nor can he send invitations to other users to join his team. This is done by quering in the database using inner join between tables-SignUpTopic, signed_up_teams,  team_users; and checking if the user has a topic for a particular assignment. If (s)he has a topic then he'll be able to see the option for advertising for teammates.&lt;br /&gt;
If the assignment doesn't have a topic then the user will be able to send out team invitations.&lt;br /&gt;
Pseudocode representing the logic we have used to modify student_teams_helper.rb:&lt;br /&gt;
&lt;br /&gt;
  StudentTeamsHelper&lt;br /&gt;
  If the concerned assignment has topics&lt;br /&gt;
    return false if their are topics&lt;br /&gt;
  else return true&lt;br /&gt;
&lt;br /&gt;
  User_Has_Topic(user_id, assignment_id)&lt;br /&gt;
    Query the database using inner joins between SignUpTopic, signed_up_teams,  team_users rows= number of rows returned by the above query&lt;br /&gt;
  If rows&amp;gt;0&lt;br /&gt;
    return true&lt;br /&gt;
  else&lt;br /&gt;
    return false&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If concerned assignment does not have topics OR User_Has_Topic is true&lt;br /&gt;
    Make Invite link visible&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''How to test'''==&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==='''Issue #311'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
2)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
3)Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
4)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. &lt;br /&gt;
&lt;br /&gt;
5)Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
6)Login as another user(Student) or impersonate another student, say student B, whom you have enrolled in the assignment.&lt;br /&gt;
&lt;br /&gt;
7)Since B doesn't have a topic yet, so you won't be able to see the advertise link. &lt;br /&gt;
&lt;br /&gt;
8)Go to the sign-up sheet for the assignment, you'll be able to see a trumpet icon next to the topic that has an ad posted.&lt;br /&gt;
&lt;br /&gt;
9)Click on the icon, you'll see the ad posted by A. Click on request to join A's team.&lt;br /&gt;
&lt;br /&gt;
10)On doing so an entry is created on the table &amp;quot;&amp;quot; and status holds value &amp;quot;P&amp;quot; signifying a pending request.&lt;br /&gt;
&lt;br /&gt;
11)Now if you go on the sign-up sheet again, you will no longer see the trumpet icon through which you can access the ads since you have already responded to an ad and the request is in pending state.&lt;br /&gt;
&lt;br /&gt;
12)Login as user A or impersonate A, now you'll be able to see the team join request sent by user B.&lt;br /&gt;
&lt;br /&gt;
13) Now, you can either approve it or decline it. Suppose you approve it, B will become a part of your team, and the status will change to &amp;quot;A&amp;quot;. And now if you login as B or impersonate B, you will no longer be able to access the trumpet icon which is a link to all ads pertaining to topics the concerned assignment.&lt;br /&gt;
&lt;br /&gt;
14)Had user A declined User Bs join request, the status in the table &amp;quot;&amp;quot; would change to &amp;quot;D&amp;quot;, that means user B still doesn't have a team. So, now if you login as B or impersonate, you'll be able to see the ads again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. &lt;br /&gt;
&lt;br /&gt;
2)You should be able to see the assignment now in the Assignment section. Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
3)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4)This ensures that for an assignment with  topics, a user can send out advertisements only if (s)he has a topic.&lt;br /&gt;
&lt;br /&gt;
5)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, do not add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
6)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
7)Since the assignment doesn't have any topics, therefore, you will be able to see the advertise link. You won't see a sign-up sheet since the assignment has no topics. You can advertise for teammates.&lt;br /&gt;
&lt;br /&gt;
==='''Screenshots from conducted Test '''===&lt;br /&gt;
On clicking on 'Manage Content' the following screen is rendered which lists the existing assignments.&lt;br /&gt;
----&lt;br /&gt;
[[File:create public assignment.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
On clicking on 'New Public Assignment' the following form is displayed in which assignment details can be entered.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup1.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Editing the created assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup2.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Click on 'Topics' to add topics for the assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup3.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Click on 'Rubrics' to setup assignment rubrics.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup4.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screenshot shows the completed setup.&lt;br /&gt;
----&lt;br /&gt;
[[File:completed setup for assignment with topic.jpg]]&lt;br /&gt;
----&lt;br /&gt;
On clicking on the image-link for adding participants for an assignment, the following screen is rendered.&lt;br /&gt;
----&lt;br /&gt;
[[File:adding student to assignmet.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Showing all added participants.&lt;br /&gt;
----&lt;br /&gt;
[[File:add the students.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a student who is a participant in the current assignment clicks on it's sign-up sheet.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the  topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a participant clicks on the sign-up sheet for the assignment. link.&lt;br /&gt;
----&lt;br /&gt;
[[File:select topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a participant chooses a topic and then clicks on 'create advertisement'.&lt;br /&gt;
----&lt;br /&gt;
[[File:create ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
After creating an ad, user can now see a horn icon which is a link to display the advertisements corresponding to that topic in that assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:see ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered after clicking on the horn icon.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered after clicking on the link 'Request invitation'.&lt;br /&gt;
----&lt;br /&gt;
[[File:respond to ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
After sending a request to join a team (via ad), the user will no longer see the link for the ads unless the request is denied by the receiver.&lt;br /&gt;
----&lt;br /&gt;
[[File:cant see any more ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
This is the screen of the user who had created the ad. He is now able to see any join requests that he can approve/decline.&lt;br /&gt;
----&lt;br /&gt;
[[File:request to join.jpg|Size Width 200px Height 100px]]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=109217</id>
		<title>CSC/ECE 517 Fall 2017/E1779. Fix teammate advertisements and requests to join a team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1779._Fix_teammate_advertisements_and_requests_to_join_a_team&amp;diff=109217"/>
		<updated>2017-10-25T03:05:39Z</updated>

		<summary type="html">&lt;p&gt;Kbisht: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
==='''Problem Statement'''===&lt;br /&gt;
In Expertiza, there are teammate advertisement, invitation and join team request features which facilitate students to form teams. Teammate advertisement works only for assignments with topics. The topic holders can create advertisement and a trumpet icon will show on the signup sheet page. If one respond to the advertisement, a join team request will be created and the topic holder can see it on “Your team” page. After a student gets a team and the team is not full, (s)he should also be able to send invitations to others.&lt;br /&gt;
----&lt;br /&gt;
=='''Issues to be fixed'''==&lt;br /&gt;
&lt;br /&gt;
Fix Issue #311: when one respond to an advertisement, (s)he should only be able to respond once. When a team advertises for new members, someone who responds to an ad should only be allowed to respond once. Currently, after someone responds to an ad, they can respond again an unlimited number of times.&lt;br /&gt;
&lt;br /&gt;
Fix Issue #227 : if user A got a topic and user B got no topic, then A join B’s team, A’s topic be  dropped and A and B end up with a new team with no topic. This issue should be handle carefully because we cannot simply add B to A’s team (imagine, if A has teammate X and B has teammate Y...). One of a potential fix is that, for assignment w/ topics, one cannot not post an ad unless (s)he holds a topic, similarly, one cannot sent invitations unless (s)he holds a topic. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&lt;br /&gt;
1) sign_up_sheet.rb&lt;br /&gt;
&lt;br /&gt;
2) student_teams_helper.rb&lt;br /&gt;
&lt;br /&gt;
3) _table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
4) view.html.erb&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Approach taken to resolve the issues'''==&lt;br /&gt;
&lt;br /&gt;
==='''Issue #311 '''===&lt;br /&gt;
&lt;br /&gt;
A user who is enrolled in an assignment and has a topic can advertise for more team members. When another user, who is enrolled in the same assignment but doesn't have a team and topic yet, can see the team advertisements by other teams. He can respond to any advertisement. As soon as he responds to an advertisement, an entry is created in the &amp;quot;&amp;quot; table and the &amp;quot;status&amp;quot; attribute of the corressponding tupple holds &amp;quot;P&amp;quot; value signifying pending status. This request goes to the team who had posted that advertisement. The request can be approved or denied by the team members. In either of the case, the  &amp;quot;status&amp;quot; changes to &amp;quot;A&amp;quot; or &amp;quot;D&amp;quot; respectively.&lt;br /&gt;
&lt;br /&gt;
If there is an entry in the &amp;quot;&amp;quot; table for a user, then (s)he can only see advertisements if the corresponding &amp;quot;status&amp;quot; is &amp;quot;D&amp;quot;, which implies that this user is not yet part of a team. This can be checked by querying for participant_id, which is unique for each combination of  user_id, assignment_id, and then checking the &amp;quot;status&amp;quot; corresponding to that participant_id.&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify sign_up_sheet.rb:&lt;br /&gt;
&lt;br /&gt;
  Respond_To_Ads(user_id, assignment_id)&lt;br /&gt;
  p_id=Fetch participant_id corressponding to (user_id, assignment_id)&lt;br /&gt;
  Check entries for p_id in table join_team_request_table where status is either &amp;quot;A&amp;quot; or &amp;quot;P&amp;quot;&lt;br /&gt;
  count=number of such entries&lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If Sign Up Sheet has topics for a particular assignment()&lt;br /&gt;
  If Respond_To_Ads(user_id, assignment_id) is equal to 0&lt;br /&gt;
     Show Trumpet icon which is a link to the Ads&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227 '''===&lt;br /&gt;
&lt;br /&gt;
If a user has an assignment and a topic only then (s)he will be able to advertise for team members to join their team. If a user doesn't have a topic (s)he won't be able to advertise.&lt;br /&gt;
The scenario in which A, B were two users, A with a topic, B without a topic, A joins B's  team but A's topic gets dropped; A,B become a team but with no topic. Such cases are now avoided as we have ensured that without first selecting a topic a user cannot advertise for team members nor can he send invitations to other users to join his team. This is done by quering in the database using inner join between tables-SignUpTopic, signed_up_teams,  team_users; and checking if the user has a topic for a particular assignment. If (s)he has a topic then he'll be able to see the option for advertising for teammates.&lt;br /&gt;
If the assignment doesn't have a topic then the user will be able to send out team invitations.&lt;br /&gt;
Pseudocode representing the logic we have used to modify student_teams_helper.rb:&lt;br /&gt;
&lt;br /&gt;
  StudentTeamsHelper&lt;br /&gt;
  If the concerned assignment has topics&lt;br /&gt;
    return false if their are topics&lt;br /&gt;
  else return true&lt;br /&gt;
&lt;br /&gt;
  User_Has_Topic(user_id, assignment_id)&lt;br /&gt;
    Query the database using inner joins between SignUpTopic, signed_up_teams,  team_users rows= number of rows returned by the above query&lt;br /&gt;
  If rows&amp;gt;0&lt;br /&gt;
    return true&lt;br /&gt;
  else&lt;br /&gt;
    return false&lt;br /&gt;
Pseudocode representing the logic we have used to modify view.html.erb:&lt;br /&gt;
&lt;br /&gt;
  If concerned assignment does not have topics OR User_Has_Topic is true&lt;br /&gt;
    Make Invite link visible&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''How to test'''==&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==='''Issue #311'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
2)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
3)Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
4)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. &lt;br /&gt;
&lt;br /&gt;
5)Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
6)Login as another user(Student) or impersonate another student, say student B, whom you have enrolled in the assignment.&lt;br /&gt;
&lt;br /&gt;
7)Since B doesn't have a topic yet, so you won't be able to see the advertise link. &lt;br /&gt;
&lt;br /&gt;
8)Go to the sign-up sheet for the assignment, you'll be able to see a trumpet icon next to the topic that has an ad posted.&lt;br /&gt;
&lt;br /&gt;
9)Click on the icon, you'll see the ad posted by A. Click on request to join A's team.&lt;br /&gt;
&lt;br /&gt;
10)On doing so an entry is created on the table &amp;quot;&amp;quot; and status holds value &amp;quot;P&amp;quot; signifying a pending request.&lt;br /&gt;
&lt;br /&gt;
11)Now if you go on the sign-up sheet again, you will no longer see the trumpet icon through which you can access the ads since you have already responded to an ad and the request is in pending state.&lt;br /&gt;
&lt;br /&gt;
12)Login as user A or impersonate A, now you'll be able to see the team join request sent by user B.&lt;br /&gt;
&lt;br /&gt;
13) Now, you can either approve it or decline it. Suppose you approve it, B will become a part of your team, and the status will change to &amp;quot;A&amp;quot;. And now if you login as B or impersonate B, you will no longer be able to access the trumpet icon which is a link to all ads pertaining to topics the concerned assignment.&lt;br /&gt;
&lt;br /&gt;
14)Had user A declined User Bs join request, the status in the table &amp;quot;&amp;quot; would change to &amp;quot;D&amp;quot;, that means user B still doesn't have a team. So, now if you login as B or impersonate, you'll be able to see the ads again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Issue #227'''===&lt;br /&gt;
&lt;br /&gt;
1)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. &lt;br /&gt;
&lt;br /&gt;
2)You should be able to see the assignment now in the Assignment section. Since A doesn't have a topic yet, so you won't be able to see the advertise link.&lt;br /&gt;
&lt;br /&gt;
3)Go to the sign-up sheet for the assignment, select a topic. A now has a topic, so now A can advertise for team-members. Post an advertisement-&amp;quot;Need team-members who know Ruby.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4)This ensures that for an assignment with  topics, a user can send out advertisements only if (s)he has a topic.&lt;br /&gt;
&lt;br /&gt;
5)Login as Admin, create an assignment with all the necessary details like maximum no of users per team, do not add topics for the assignment, enroll users(students) in the assignment.&lt;br /&gt;
&lt;br /&gt;
6)Login as user(Student) or impersonate a student, say student A, whom you have enrolled in the assignment. You should be able to see the assignment now in the Assignment section.&lt;br /&gt;
&lt;br /&gt;
7)Since the assignment doesn't have any topics, therefore, you will be able to see the advertise link. You won't see a sign-up sheet since the assignment has no topics. You can advertise for teammates.&lt;br /&gt;
&lt;br /&gt;
==='''Screenshots from conducted Test '''===&lt;br /&gt;
On clicking on 'Manage Content' the following screen is rendered which lists the existing assignments.&lt;br /&gt;
----&lt;br /&gt;
[[File:create public assignment.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
On clicking on 'New Public Assignment' the following form is displayed in which assignment details can be entered.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup1.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Editing the created assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup2.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Click on 'Topics' to add topics for the assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup3.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Click on 'Rubrics' to setup assignment rubrics.&lt;br /&gt;
----&lt;br /&gt;
[[File:create setup4.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screenshot shows the completed setup.&lt;br /&gt;
----&lt;br /&gt;
[[File:completed setup for assignment with topic.jpg]]&lt;br /&gt;
----&lt;br /&gt;
On clicking on the image-link for adding participants for an assignment, the following screen is rendered.&lt;br /&gt;
----&lt;br /&gt;
[[File:adding student to assignmet.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
Showing all added participants.&lt;br /&gt;
----&lt;br /&gt;
[[File:add the students.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a student who is a participant in the current assignment clicks on it's sign-up sheet.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the  topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a participant clicks on the sign-up sheet for the assignment. link.&lt;br /&gt;
----&lt;br /&gt;
[[File:select topic.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered when a participant chooses a topic and then clicks on 'create advertisement'.&lt;br /&gt;
----&lt;br /&gt;
[[File:create ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
After creating an ad, user can now see a horn icon which is a link to display the advertisements corresponding to that topic in that assignment.&lt;br /&gt;
----&lt;br /&gt;
[[File:see ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered after clicking on the horn icon.&lt;br /&gt;
----&lt;br /&gt;
[[File:see the ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
The following screen is rendered after clicking on the link 'Request invitation'.&lt;br /&gt;
----&lt;br /&gt;
[[File:respond to ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
After sending a request to join a team (via ad), the user will no longer see the link for the ads unless the request is denied by the receiver.&lt;br /&gt;
----&lt;br /&gt;
[[File:cant see any more ad.jpg ]]&lt;br /&gt;
----&lt;br /&gt;
This is the screen of the user who had created the ad. He is now able to see any join requests that he can approve/decline.&lt;br /&gt;
----&lt;br /&gt;
[[File:request to join.jpg Width 200px Height 100px]]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Kbisht</name></author>
	</entry>
</feed>