<?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=Jitesh</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=Jitesh"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Jitesh"/>
	<updated>2026-10-01T20:05:13Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102331</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102331"/>
		<updated>2016-04-26T19:57:54Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: /* Automated Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in to the system they are redirected to the course/assignment/questionnaire list page. This page lists all the courses that are created by the logged in user and also the public courses that are created by other users. The current implementation of the page is in ReactJS and takes a long time to load. The purpose of this project is to improve the performance of this functionality so that it takes lesser time to display the relevant data.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The course assignment listing page has three tabs. These tabs are '''Courses''', '''Assignments''' and '''Questionnaires'''. The courses tab lists all all the courses that the instructor/TA might be interested in. This includes all the courses that they created and also the public courses. Additionally in the courses page all the assignments related to each course is also loaded when the page is loaded. All assignments belonging to a course can be viewed by clicking on that course.&lt;br /&gt;
On the listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. Because of this the page takes a long time to load. This project is concerned with coming up with solutions so that the page is loaded in a quicker manner. The individual work items identified are as follows:&lt;br /&gt;
* ''Include others' items'' check-box should be unchecked by default for both courses and assignments page. By default, the public courses should not be loaded.&lt;br /&gt;
* Current implementation of the Course page makes separate REST calls to the controller for fetching assignments for each course. This is a bad design and it takes a while to load the whole page. we plan to modify such that the assignments are loaded only when a particular course is clicked.&lt;br /&gt;
* List the courses in two different sections. One section should be to list all the courses that are created by the user. The other section should be to display all the public courses. This section should be displayed only if the check-box is selected. Searching for courses in the current single list implementation is difficult. Partitioning the list into two sections would greatly improve the usability of the page.&lt;br /&gt;
* Similarly the assignments tab should be divided into two sections. The first section should list all the assignments that are created by the user and the next should list all the public assignments.&lt;br /&gt;
=== Magnitude of Problem ===&lt;br /&gt;
In order to better understand the problem consider the following scenario:&amp;lt;br&amp;gt;When logged in as an instructor(instructor6) the course page loads a total of 103 courses. Hence it will make 103 REST calls to fetch assignments for all these courses. Out of these 103 courses the signed in instructor is concerned with 25 courses. Assuming he checks the assignments to all of these courses it would result in a total of 25 REST calls to fetch assignments. This is a considerable reduction in the number of REST calls.&lt;br /&gt;
&lt;br /&gt;
== Design of Solution ==&lt;br /&gt;
&lt;br /&gt;
===Work Item 1: Separate Courses/Assignments into two sections===&lt;br /&gt;
The table that displays the course listing is a ReactJS component. Currently it loads both private and public courses in the same section by means of a single REST call. We intend to split this such that one rest call is made for public courses and one call is made for private courses.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_folder_actions.html.erb&lt;br /&gt;
'''View of the Private Courses Section'''&lt;br /&gt;
[[File:Private Tab for Courses.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
'''View of the Public Courses Section'''&lt;br /&gt;
[[File:Public Tab for Courses.png]]&lt;br /&gt;
&lt;br /&gt;
===Work Item 2: Load only the private courses section===&lt;br /&gt;
Adding to the changes made in previous work item, load only the private section on page load. The public section is loaded only when the check-box to load public courses is selected.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_folder_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Work Item 3: Load assignments for each course as required===&lt;br /&gt;
Each row in the course listing table represents a course. Each course has a sub section listing its assignment. Whenever a user clicks on a course a REST API call will be triggered and this will fetch the assignments, and a subsection will be added to the user interface.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Use Case Diagrams===&lt;br /&gt;
[[File:Current_Implemenation.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Proposed_Implementation.png]]&lt;br /&gt;
&lt;br /&gt;
=== Database Design ===&lt;br /&gt;
This project is involved with improving the performance of the Course and Assignment Listing page. The work is majorly in reactJS and there is no necessity to change the current database design.&lt;br /&gt;
&lt;br /&gt;
=== Performance Metric ===&lt;br /&gt;
In order to measure if the changes we made as part of the project leads to actual performance improvement, we are planning to use '''page load time''' as a metric. We will update this section with a comparison of the page load time on completion of the project.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
Since most of the changes that are required to implement this project are proposed in the user-interface using javascript we will be performing manual testing of the UI.&lt;br /&gt;
&lt;br /&gt;
Detailed steps are as follows:&lt;br /&gt;
&lt;br /&gt;
1. Course listing is a view used by instructors &amp;amp; TAs to view courses. As the instructor &amp;amp; TAs login to expertiza, they would be directed to the course listing where they would see that checkbox (“include others’ items”) to include public courses by other members, in the listing is unchecked by default. Similar to course listing, there is an assignment listing as well to be tested. Also check to see that only private courses are loaded by default.&lt;br /&gt;
&lt;br /&gt;
2. The logged in user’s courses and others’ public courses are listed in two different sections. One section for each type. Section listing others’ public courses are displayed only when user selects the checkbox “include others’ items.&lt;br /&gt;
&lt;br /&gt;
3. Similarly, the logged in user’s assignments and others’ public assignments are listed in two different sections. Section listing public assignments are be displayed only when user selects the checkbox “include others’ items”.&lt;br /&gt;
&lt;br /&gt;
4. Check that on clicking a particular course in the course-listing page, the assignments of that course are listed.&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing ===&lt;br /&gt;
Added the following new test cases to the tree_display_controller:&lt;br /&gt;
 TreeDisplayController&lt;br /&gt;
  should respond to #get_children_node_ng&lt;br /&gt;
  should respond to #get_children_node_2_ng&lt;br /&gt;
  should respond to #get_folder_node_ng&lt;br /&gt;
  POST #get_children_node_ng&lt;br /&gt;
    returns an empty list when there are no private or public courses&lt;br /&gt;
    returns a list of course objects(public) as json&lt;br /&gt;
    returns a list of course objects(private) as json&lt;br /&gt;
  GET #get_session_last_open_tab&lt;br /&gt;
    returns HTTP status 200&lt;br /&gt;
  GET #get_folder_node_ng&lt;br /&gt;
    populates a list of FolderNodes when there is a match&lt;br /&gt;
    populates an empty list when there is no match&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102323</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102323"/>
		<updated>2016-04-26T04:47:02Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: /* Work Item 1: Separate Courses/Assignments into two sections */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in to the system they are redirected to the course/assignment/questionnaire list page. This page lists all the courses that are created by the logged in user and also the public courses that are created by other users. The current implementation of the page is in ReactJS and takes a long time to load. The purpose of this project is to improve the performance of this functionality so that it takes lesser time to display the relevant data.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The course assignment listing page has three tabs. These tabs are '''Courses''', '''Assignments''' and '''Questionnaires'''. The courses tab lists all all the courses that the instructor/TA might be interested in. This includes all the courses that they created and also the public courses. Additionally in the courses page all the assignments related to each course is also loaded when the page is loaded. All assignments belonging to a course can be viewed by clicking on that course.&lt;br /&gt;
On the listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. Because of this the page takes a long time to load. This project is concerned with coming up with solutions so that the page is loaded in a quicker manner. The individual work items identified are as follows:&lt;br /&gt;
* ''Include others' items'' check-box should be unchecked by default for both courses and assignments page. By default, the public courses should not be loaded.&lt;br /&gt;
* Current implementation of the Course page makes separate REST calls to the controller for fetching assignments for each course. This is a bad design and it takes a while to load the whole page. we plan to modify such that the assignments are loaded only when a particular course is clicked.&lt;br /&gt;
* List the courses in two different sections. One section should be to list all the courses that are created by the user. The other section should be to display all the public courses. This section should be displayed only if the check-box is selected. Searching for courses in the current single list implementation is difficult. Partitioning the list into two sections would greatly improve the usability of the page.&lt;br /&gt;
* Similarly the assignments tab should be divided into two sections. The first section should list all the assignments that are created by the user and the next should list all the public assignments.&lt;br /&gt;
=== Magnitude of Problem ===&lt;br /&gt;
In order to better understand the problem consider the following scenario:&amp;lt;br&amp;gt;When logged in as an instructor(instructor6) the course page loads a total of 103 courses. Hence it will make 103 REST calls to fetch assignments for all these courses. Out of these 103 courses the signed in instructor is concerned with 25 courses. Assuming he checks the assignments to all of these courses it would result in a total of 25 REST calls to fetch assignments. This is a considerable reduction in the number of REST calls.&lt;br /&gt;
&lt;br /&gt;
== Design of Solution ==&lt;br /&gt;
&lt;br /&gt;
===Work Item 1: Separate Courses/Assignments into two sections===&lt;br /&gt;
The table that displays the course listing is a ReactJS component. Currently it loads both private and public courses in the same section by means of a single REST call. We intend to split this such that one rest call is made for public courses and one call is made for private courses.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_folder_actions.html.erb&lt;br /&gt;
'''View of the Private Courses Section'''&lt;br /&gt;
[[File:Private Tab for Courses.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
'''View of the Public Courses Section'''&lt;br /&gt;
[[File:Public Tab for Courses.png]]&lt;br /&gt;
&lt;br /&gt;
===Work Item 2: Load only the private courses section===&lt;br /&gt;
Adding to the changes made in previous work item, load only the private section on page load. The public section is loaded only when the check-box to load public courses is selected.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_folder_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Work Item 3: Load assignments for each course as required===&lt;br /&gt;
Each row in the course listing table represents a course. Each course has a sub section listing its assignment. Whenever a user clicks on a course a REST API call will be triggered and this will fetch the assignments, and a subsection will be added to the user interface.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Use Case Diagrams===&lt;br /&gt;
[[File:Current_Implemenation.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Proposed_Implementation.png]]&lt;br /&gt;
&lt;br /&gt;
=== Database Design ===&lt;br /&gt;
This project is involved with improving the performance of the Course and Assignment Listing page. The work is majorly in reactJS and there is no necessity to change the current database design.&lt;br /&gt;
&lt;br /&gt;
=== Performance Metric ===&lt;br /&gt;
In order to measure if the changes we made as part of the project leads to actual performance improvement, we are planning to use '''page load time''' as a metric. We will update this section with a comparison of the page load time on completion of the project.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
Since most of the changes that are required to implement this project are proposed in the user-interface using javascript we will be performing manual testing of the UI.&lt;br /&gt;
&lt;br /&gt;
Detailed steps are as follows:&lt;br /&gt;
&lt;br /&gt;
1. Course listing is a view used by instructors &amp;amp; TAs to view courses. As the instructor &amp;amp; TAs login to expertiza, they would be directed to the course listing where they would see that checkbox (“include others’ items”) to include public courses by other members, in the listing is unchecked by default. Similar to course listing, there is an assignment listing as well to be tested. Also check to see that only private courses are loaded by default.&lt;br /&gt;
&lt;br /&gt;
2. The logged in user’s courses and others’ public courses are listed in two different sections. One section for each type. Section listing others’ public courses are displayed only when user selects the checkbox “include others’ items.&lt;br /&gt;
&lt;br /&gt;
3. Similarly, the logged in user’s assignments and others’ public assignments are listed in two different sections. Section listing public assignments are be displayed only when user selects the checkbox “include others’ items”.&lt;br /&gt;
&lt;br /&gt;
4. Check that on clicking a particular course in the course-listing page, the assignments of that course are listed.&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing ===&lt;br /&gt;
For changes in the backend, we will be using Capybara to write automated tests. This would include tests for changes in the tree_display controller.&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Public_Tab_for_Courses.png&amp;diff=102322</id>
		<title>File:Public Tab for Courses.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Public_Tab_for_Courses.png&amp;diff=102322"/>
		<updated>2016-04-26T04:45:49Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: uploaded a new version of &amp;amp;quot;File:Public Tab for Courses.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102321</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102321"/>
		<updated>2016-04-26T04:45:37Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: /* Work Item 1: Separate Courses/Assignments into two sections */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in to the system they are redirected to the course/assignment/questionnaire list page. This page lists all the courses that are created by the logged in user and also the public courses that are created by other users. The current implementation of the page is in ReactJS and takes a long time to load. The purpose of this project is to improve the performance of this functionality so that it takes lesser time to display the relevant data.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The course assignment listing page has three tabs. These tabs are '''Courses''', '''Assignments''' and '''Questionnaires'''. The courses tab lists all all the courses that the instructor/TA might be interested in. This includes all the courses that they created and also the public courses. Additionally in the courses page all the assignments related to each course is also loaded when the page is loaded. All assignments belonging to a course can be viewed by clicking on that course.&lt;br /&gt;
On the listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. Because of this the page takes a long time to load. This project is concerned with coming up with solutions so that the page is loaded in a quicker manner. The individual work items identified are as follows:&lt;br /&gt;
* ''Include others' items'' check-box should be unchecked by default for both courses and assignments page. By default, the public courses should not be loaded.&lt;br /&gt;
* Current implementation of the Course page makes separate REST calls to the controller for fetching assignments for each course. This is a bad design and it takes a while to load the whole page. we plan to modify such that the assignments are loaded only when a particular course is clicked.&lt;br /&gt;
* List the courses in two different sections. One section should be to list all the courses that are created by the user. The other section should be to display all the public courses. This section should be displayed only if the check-box is selected. Searching for courses in the current single list implementation is difficult. Partitioning the list into two sections would greatly improve the usability of the page.&lt;br /&gt;
* Similarly the assignments tab should be divided into two sections. The first section should list all the assignments that are created by the user and the next should list all the public assignments.&lt;br /&gt;
=== Magnitude of Problem ===&lt;br /&gt;
In order to better understand the problem consider the following scenario:&amp;lt;br&amp;gt;When logged in as an instructor(instructor6) the course page loads a total of 103 courses. Hence it will make 103 REST calls to fetch assignments for all these courses. Out of these 103 courses the signed in instructor is concerned with 25 courses. Assuming he checks the assignments to all of these courses it would result in a total of 25 REST calls to fetch assignments. This is a considerable reduction in the number of REST calls.&lt;br /&gt;
&lt;br /&gt;
== Design of Solution ==&lt;br /&gt;
&lt;br /&gt;
===Work Item 1: Separate Courses/Assignments into two sections===&lt;br /&gt;
The table that displays the course listing is a ReactJS component. Currently it loads both private and public courses in the same section by means of a single REST call. We intend to split this such that one rest call is made for public courses and one call is made for private courses.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_folder_actions.html.erb&lt;br /&gt;
[[File:Private Tab for Courses.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Public Tab for Courses.png]]&lt;br /&gt;
&lt;br /&gt;
===Work Item 2: Load only the private courses section===&lt;br /&gt;
Adding to the changes made in previous work item, load only the private section on page load. The public section is loaded only when the check-box to load public courses is selected.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_folder_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Work Item 3: Load assignments for each course as required===&lt;br /&gt;
Each row in the course listing table represents a course. Each course has a sub section listing its assignment. Whenever a user clicks on a course a REST API call will be triggered and this will fetch the assignments, and a subsection will be added to the user interface.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Use Case Diagrams===&lt;br /&gt;
[[File:Current_Implemenation.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Proposed_Implementation.png]]&lt;br /&gt;
&lt;br /&gt;
=== Database Design ===&lt;br /&gt;
This project is involved with improving the performance of the Course and Assignment Listing page. The work is majorly in reactJS and there is no necessity to change the current database design.&lt;br /&gt;
&lt;br /&gt;
=== Performance Metric ===&lt;br /&gt;
In order to measure if the changes we made as part of the project leads to actual performance improvement, we are planning to use '''page load time''' as a metric. We will update this section with a comparison of the page load time on completion of the project.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
Since most of the changes that are required to implement this project are proposed in the user-interface using javascript we will be performing manual testing of the UI.&lt;br /&gt;
&lt;br /&gt;
Detailed steps are as follows:&lt;br /&gt;
&lt;br /&gt;
1. Course listing is a view used by instructors &amp;amp; TAs to view courses. As the instructor &amp;amp; TAs login to expertiza, they would be directed to the course listing where they would see that checkbox (“include others’ items”) to include public courses by other members, in the listing is unchecked by default. Similar to course listing, there is an assignment listing as well to be tested. Also check to see that only private courses are loaded by default.&lt;br /&gt;
&lt;br /&gt;
2. The logged in user’s courses and others’ public courses are listed in two different sections. One section for each type. Section listing others’ public courses are displayed only when user selects the checkbox “include others’ items.&lt;br /&gt;
&lt;br /&gt;
3. Similarly, the logged in user’s assignments and others’ public assignments are listed in two different sections. Section listing public assignments are be displayed only when user selects the checkbox “include others’ items”.&lt;br /&gt;
&lt;br /&gt;
4. Check that on clicking a particular course in the course-listing page, the assignments of that course are listed.&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing ===&lt;br /&gt;
For changes in the backend, we will be using Capybara to write automated tests. This would include tests for changes in the tree_display controller.&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Public_Tab_for_Courses.png&amp;diff=102320</id>
		<title>File:Public Tab for Courses.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Public_Tab_for_Courses.png&amp;diff=102320"/>
		<updated>2016-04-26T04:43:39Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Private_Tab_for_Courses.png&amp;diff=102319</id>
		<title>File:Private Tab for Courses.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Private_Tab_for_Courses.png&amp;diff=102319"/>
		<updated>2016-04-26T04:43:25Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102318</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102318"/>
		<updated>2016-04-26T04:42:54Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: /* Work Item 1: Separate Courses/Assignments into two sections */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in to the system they are redirected to the course/assignment/questionnaire list page. This page lists all the courses that are created by the logged in user and also the public courses that are created by other users. The current implementation of the page is in ReactJS and takes a long time to load. The purpose of this project is to improve the performance of this functionality so that it takes lesser time to display the relevant data.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The course assignment listing page has three tabs. These tabs are '''Courses''', '''Assignments''' and '''Questionnaires'''. The courses tab lists all all the courses that the instructor/TA might be interested in. This includes all the courses that they created and also the public courses. Additionally in the courses page all the assignments related to each course is also loaded when the page is loaded. All assignments belonging to a course can be viewed by clicking on that course.&lt;br /&gt;
On the listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. Because of this the page takes a long time to load. This project is concerned with coming up with solutions so that the page is loaded in a quicker manner. The individual work items identified are as follows:&lt;br /&gt;
* ''Include others' items'' check-box should be unchecked by default for both courses and assignments page. By default, the public courses should not be loaded.&lt;br /&gt;
* Current implementation of the Course page makes separate REST calls to the controller for fetching assignments for each course. This is a bad design and it takes a while to load the whole page. we plan to modify such that the assignments are loaded only when a particular course is clicked.&lt;br /&gt;
* List the courses in two different sections. One section should be to list all the courses that are created by the user. The other section should be to display all the public courses. This section should be displayed only if the check-box is selected. Searching for courses in the current single list implementation is difficult. Partitioning the list into two sections would greatly improve the usability of the page.&lt;br /&gt;
* Similarly the assignments tab should be divided into two sections. The first section should list all the assignments that are created by the user and the next should list all the public assignments.&lt;br /&gt;
=== Magnitude of Problem ===&lt;br /&gt;
In order to better understand the problem consider the following scenario:&amp;lt;br&amp;gt;When logged in as an instructor(instructor6) the course page loads a total of 103 courses. Hence it will make 103 REST calls to fetch assignments for all these courses. Out of these 103 courses the signed in instructor is concerned with 25 courses. Assuming he checks the assignments to all of these courses it would result in a total of 25 REST calls to fetch assignments. This is a considerable reduction in the number of REST calls.&lt;br /&gt;
&lt;br /&gt;
== Design of Solution ==&lt;br /&gt;
&lt;br /&gt;
===Work Item 1: Separate Courses/Assignments into two sections===&lt;br /&gt;
The table that displays the course listing is a ReactJS component. Currently it loads both private and public courses in the same section by means of a single REST call. We intend to split this such that one rest call is made for public courses and one call is made for private courses.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_folder_actions.html.erb&lt;br /&gt;
[[File:Example.jpg]]&lt;br /&gt;
[[File:Example.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Work Item 2: Load only the private courses section===&lt;br /&gt;
Adding to the changes made in previous work item, load only the private section on page load. The public section is loaded only when the check-box to load public courses is selected.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_folder_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Work Item 3: Load assignments for each course as required===&lt;br /&gt;
Each row in the course listing table represents a course. Each course has a sub section listing its assignment. Whenever a user clicks on a course a REST API call will be triggered and this will fetch the assignments, and a subsection will be added to the user interface.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Use Case Diagrams===&lt;br /&gt;
[[File:Current_Implemenation.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Proposed_Implementation.png]]&lt;br /&gt;
&lt;br /&gt;
=== Database Design ===&lt;br /&gt;
This project is involved with improving the performance of the Course and Assignment Listing page. The work is majorly in reactJS and there is no necessity to change the current database design.&lt;br /&gt;
&lt;br /&gt;
=== Performance Metric ===&lt;br /&gt;
In order to measure if the changes we made as part of the project leads to actual performance improvement, we are planning to use '''page load time''' as a metric. We will update this section with a comparison of the page load time on completion of the project.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
Since most of the changes that are required to implement this project are proposed in the user-interface using javascript we will be performing manual testing of the UI.&lt;br /&gt;
&lt;br /&gt;
Detailed steps are as follows:&lt;br /&gt;
&lt;br /&gt;
1. Course listing is a view used by instructors &amp;amp; TAs to view courses. As the instructor &amp;amp; TAs login to expertiza, they would be directed to the course listing where they would see that checkbox (“include others’ items”) to include public courses by other members, in the listing is unchecked by default. Similar to course listing, there is an assignment listing as well to be tested. Also check to see that only private courses are loaded by default.&lt;br /&gt;
&lt;br /&gt;
2. The logged in user’s courses and others’ public courses are listed in two different sections. One section for each type. Section listing others’ public courses are displayed only when user selects the checkbox “include others’ items.&lt;br /&gt;
&lt;br /&gt;
3. Similarly, the logged in user’s assignments and others’ public assignments are listed in two different sections. Section listing public assignments are be displayed only when user selects the checkbox “include others’ items”.&lt;br /&gt;
&lt;br /&gt;
4. Check that on clicking a particular course in the course-listing page, the assignments of that course are listed.&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing ===&lt;br /&gt;
For changes in the backend, we will be using Capybara to write automated tests. This would include tests for changes in the tree_display controller.&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102317</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102317"/>
		<updated>2016-04-26T03:49:10Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: /* Magnitude of Problem */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in to the system they are redirected to the course/assignment/questionnaire list page. This page lists all the courses that are created by the logged in user and also the public courses that are created by other users. The current implementation of the page is in ReactJS and takes a long time to load. The purpose of this project is to improve the performance of this functionality so that it takes lesser time to display the relevant data.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The course assignment listing page has three tabs. These tabs are '''Courses''', '''Assignments''' and '''Questionnaires'''. The courses tab lists all all the courses that the instructor/TA might be interested in. This includes all the courses that they created and also the public courses. Additionally in the courses page all the assignments related to each course is also loaded when the page is loaded. All assignments belonging to a course can be viewed by clicking on that course.&lt;br /&gt;
On the listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. Because of this the page takes a long time to load. This project is concerned with coming up with solutions so that the page is loaded in a quicker manner. The individual work items identified are as follows:&lt;br /&gt;
* ''Include others' items'' check-box should be unchecked by default for both courses and assignments page. By default, the public courses should not be loaded.&lt;br /&gt;
* Current implementation of the Course page makes separate REST calls to the controller for fetching assignments for each course. This is a bad design and it takes a while to load the whole page. we plan to modify such that the assignments are loaded only when a particular course is clicked.&lt;br /&gt;
* List the courses in two different sections. One section should be to list all the courses that are created by the user. The other section should be to display all the public courses. This section should be displayed only if the check-box is selected. Searching for courses in the current single list implementation is difficult. Partitioning the list into two sections would greatly improve the usability of the page.&lt;br /&gt;
* Similarly the assignments tab should be divided into two sections. The first section should list all the assignments that are created by the user and the next should list all the public assignments.&lt;br /&gt;
=== Magnitude of Problem ===&lt;br /&gt;
In order to better understand the problem consider the following scenario:&amp;lt;br&amp;gt;When logged in as an instructor(instructor6) the course page loads a total of 103 courses. Hence it will make 103 REST calls to fetch assignments for all these courses. Out of these 103 courses the signed in instructor is concerned with 25 courses. Assuming he checks the assignments to all of these courses it would result in a total of 25 REST calls to fetch assignments. This is a considerable reduction in the number of REST calls.&lt;br /&gt;
&lt;br /&gt;
== Design of Solution ==&lt;br /&gt;
&lt;br /&gt;
===Work Item 1: Separate Courses/Assignments into two sections===&lt;br /&gt;
The table that displays the course listing is a ReactJS component. Currently it loads both private and public courses in the same section by means of a single REST call. We intend to split this such that one rest call is made for public courses and one call is made for private courses.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_folder_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Work Item 2: Load only the private courses section===&lt;br /&gt;
Adding to the changes made in previous work item, load only the private section on page load. The public section is loaded only when the check-box to load public courses is selected.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_folder_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Work Item 3: Load assignments for each course as required===&lt;br /&gt;
Each row in the course listing table represents a course. Each course has a sub section listing its assignment. Whenever a user clicks on a course a REST API call will be triggered and this will fetch the assignments, and a subsection will be added to the user interface.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Use Case Diagrams===&lt;br /&gt;
[[File:Current_Implemenation.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Proposed_Implementation.png]]&lt;br /&gt;
&lt;br /&gt;
=== Database Design ===&lt;br /&gt;
This project is involved with improving the performance of the Course and Assignment Listing page. The work is majorly in reactJS and there is no necessity to change the current database design.&lt;br /&gt;
&lt;br /&gt;
=== Performance Metric ===&lt;br /&gt;
In order to measure if the changes we made as part of the project leads to actual performance improvement, we are planning to use '''page load time''' as a metric. We will update this section with a comparison of the page load time on completion of the project.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
Since most of the changes that are required to implement this project are proposed in the user-interface using javascript we will be performing manual testing of the UI.&lt;br /&gt;
&lt;br /&gt;
Detailed steps are as follows:&lt;br /&gt;
&lt;br /&gt;
1. Course listing is a view used by instructors &amp;amp; TAs to view courses. As the instructor &amp;amp; TAs login to expertiza, they would be directed to the course listing where they would see that checkbox (“include others’ items”) to include public courses by other members, in the listing is unchecked by default. Similar to course listing, there is an assignment listing as well to be tested. Also check to see that only private courses are loaded by default.&lt;br /&gt;
&lt;br /&gt;
2. The logged in user’s courses and others’ public courses are listed in two different sections. One section for each type. Section listing others’ public courses are displayed only when user selects the checkbox “include others’ items.&lt;br /&gt;
&lt;br /&gt;
3. Similarly, the logged in user’s assignments and others’ public assignments are listed in two different sections. Section listing public assignments are be displayed only when user selects the checkbox “include others’ items”.&lt;br /&gt;
&lt;br /&gt;
4. Check that on clicking a particular course in the course-listing page, the assignments of that course are listed.&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing ===&lt;br /&gt;
For changes in the backend, we will be using Capybara to write automated tests. This would include tests for changes in the tree_display controller.&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102169</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102169"/>
		<updated>2016-04-11T22:46:27Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: /* Performance Metric */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in to the system they are redirected to the course/assignment/questionnaire list page. This page lists all the courses that are created by the logged in user and also the public courses that are created by other users. The current implementation of the page is in ReactJS and takes a long time to load. The purpose of this project is to improve the performance of this functionality so that it takes lesser time to display the relevant data.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The course assignment listing page has three tabs. These tabs are '''Courses''', '''Assignments''' and '''Questionnaires'''. The courses tab lists all all the courses that the instructor/TA might be interested in. This includes all the courses that they created and also the public courses. Additionally in the courses page all the assignments related to each course is also loaded when the page is loaded. All assignments belonging to a course can be viewed by clicking on that course.&lt;br /&gt;
On the listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. Because of this the page takes a long time to load. This project is concerned with coming up with solutions so that the page is loaded in a quicker manner. The individual work items identified are as follows:&lt;br /&gt;
* ''Include others' items'' check-box should be unchecked by default for both courses and assignments page. By default, the public courses should not be loaded.&lt;br /&gt;
* Current implementation of the Course page makes separate REST calls to the controller for fetching assignments for each course. This is a bad design and it takes a while to load the whole page. we plan to modify such that the assignments are loaded only when a particular course is clicked.&lt;br /&gt;
* List the courses in two different sections. One section should be to list all the courses that are created by the user. The other section should be to display all the public courses. This section should be displayed only if the check-box is selected. Searching for courses in the current single list implementation is difficult. Partitioning the list into two sections would greatly improve the usability of the page.&lt;br /&gt;
* Similarly the assignments tab should be divided into two sections. The first section should list all the assignments that are created by the user and the next should list all the public assignments.&lt;br /&gt;
=== Magnitude of Problem ===&lt;br /&gt;
In order to better understand the problem consider the following scenario:&amp;lt;br&amp;gt;When logged in as an instructor(instructor6) the course page loads a total of 103 courses. Hence it will make 103 REST calls to fetch assignments. Out of these 25 are concerned with the signed in instructor. Hence if we only load courses related to the instructor by default it drastically reduces the amount the work done. Also we will load assignment details only on demand.&lt;br /&gt;
&lt;br /&gt;
== Design of Solution ==&lt;br /&gt;
&lt;br /&gt;
===Work Item 1: Separate Courses/Assignments into two sections===&lt;br /&gt;
The table that displays the course listing is a ReactJS component. Currently it loads both private and public courses in the same section by means of a single REST call. We intend to split this such that one rest call is made for public courses and one call is made for private courses.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_folder_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Work Item 2: Load only the private courses section===&lt;br /&gt;
Adding to the changes made in previous work item, load only the private section on page load. The public section is loaded only when the check-box to load public courses is selected.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_folder_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Work Item 3: Load assignments for each course as required===&lt;br /&gt;
Each row in the course listing table represents a course. Each course has a sub section listing its assignment. Whenever a user clicks on a course a REST API call will be triggered and this will fetch the assignments, and a subsection will be added to the user interface.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Use Case Diagrams===&lt;br /&gt;
[[File:Current_Implemenation.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Proposed_Implementation.png]]&lt;br /&gt;
&lt;br /&gt;
=== Database Design ===&lt;br /&gt;
This project is involved with improving the performance of the Course and Assignment Listing page. The work is majorly in reactJS and there is no necessity to change the current database design.&lt;br /&gt;
&lt;br /&gt;
=== Performance Metric ===&lt;br /&gt;
In order to measure if the changes we made as part of the project leads to actual performance improvement, we are planning to use '''page load time''' as a metric. We will update this section with a comparison of the page load time on completion of the project.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
Since most of the changes that are required to implement this project are proposed in the user-interface using javascript we will be performing manual testing of the UI.&lt;br /&gt;
&lt;br /&gt;
Detailed steps are as follows:&lt;br /&gt;
&lt;br /&gt;
1. Course listing is a view used by instructors &amp;amp; TAs to view courses. As the instructor &amp;amp; TAs login to expertiza, they would be directed to the course listing where they would see that checkbox (“include others’ items”) to include public courses by other members, in the listing is unchecked by default. Similar to course listing, there is an assignment listing as well to be tested. Also check to see that only private courses are loaded by default.&lt;br /&gt;
&lt;br /&gt;
2. The logged in user’s courses and others’ public courses are listed in two different sections. One section for each type. Section listing others’ public courses are displayed only when user selects the checkbox “include others’ items.&lt;br /&gt;
&lt;br /&gt;
3. Similarly, the logged in user’s assignments and others’ public assignments are listed in two different sections. Section listing public assignments are be displayed only when user selects the checkbox “include others’ items”.&lt;br /&gt;
&lt;br /&gt;
4. Check that on clicking a particular course in the course-listing page, the assignments of that course are listed.&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing ===&lt;br /&gt;
For changes in the backend, we will be using Capybara to write automated tests. This would include tests for changes in the tree_display controller.&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102168</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102168"/>
		<updated>2016-04-11T22:45:37Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: /* Design of Solution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in to the system they are redirected to the course/assignment/questionnaire list page. This page lists all the courses that are created by the logged in user and also the public courses that are created by other users. The current implementation of the page is in ReactJS and takes a long time to load. The purpose of this project is to improve the performance of this functionality so that it takes lesser time to display the relevant data.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The course assignment listing page has three tabs. These tabs are '''Courses''', '''Assignments''' and '''Questionnaires'''. The courses tab lists all all the courses that the instructor/TA might be interested in. This includes all the courses that they created and also the public courses. Additionally in the courses page all the assignments related to each course is also loaded when the page is loaded. All assignments belonging to a course can be viewed by clicking on that course.&lt;br /&gt;
On the listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. Because of this the page takes a long time to load. This project is concerned with coming up with solutions so that the page is loaded in a quicker manner. The individual work items identified are as follows:&lt;br /&gt;
* ''Include others' items'' check-box should be unchecked by default for both courses and assignments page. By default, the public courses should not be loaded.&lt;br /&gt;
* Current implementation of the Course page makes separate REST calls to the controller for fetching assignments for each course. This is a bad design and it takes a while to load the whole page. we plan to modify such that the assignments are loaded only when a particular course is clicked.&lt;br /&gt;
* List the courses in two different sections. One section should be to list all the courses that are created by the user. The other section should be to display all the public courses. This section should be displayed only if the check-box is selected. Searching for courses in the current single list implementation is difficult. Partitioning the list into two sections would greatly improve the usability of the page.&lt;br /&gt;
* Similarly the assignments tab should be divided into two sections. The first section should list all the assignments that are created by the user and the next should list all the public assignments.&lt;br /&gt;
=== Magnitude of Problem ===&lt;br /&gt;
In order to better understand the problem consider the following scenario:&amp;lt;br&amp;gt;When logged in as an instructor(instructor6) the course page loads a total of 103 courses. Hence it will make 103 REST calls to fetch assignments. Out of these 25 are concerned with the signed in instructor. Hence if we only load courses related to the instructor by default it drastically reduces the amount the work done. Also we will load assignment details only on demand.&lt;br /&gt;
&lt;br /&gt;
== Design of Solution ==&lt;br /&gt;
&lt;br /&gt;
===Work Item 1: Separate Courses/Assignments into two sections===&lt;br /&gt;
The table that displays the course listing is a ReactJS component. Currently it loads both private and public courses in the same section by means of a single REST call. We intend to split this such that one rest call is made for public courses and one call is made for private courses.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_folder_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Work Item 2: Load only the private courses section===&lt;br /&gt;
Adding to the changes made in previous work item, load only the private section on page load. The public section is loaded only when the check-box to load public courses is selected.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_folder_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Work Item 3: Load assignments for each course as required===&lt;br /&gt;
Each row in the course listing table represents a course. Each course has a sub section listing its assignment. Whenever a user clicks on a course a REST API call will be triggered and this will fetch the assignments, and a subsection will be added to the user interface.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Use Case Diagrams===&lt;br /&gt;
[[File:Current_Implemenation.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Proposed_Implementation.png]]&lt;br /&gt;
&lt;br /&gt;
=== Database Design ===&lt;br /&gt;
This project is involved with improving the performance of the Course and Assignment Listing page. The work is majorly in reactJS and there is no necessity to change the current database design.&lt;br /&gt;
&lt;br /&gt;
=== Performance Metric ===&lt;br /&gt;
In order to measure if the changes we made as part of the project leads to actual performance improvement, we are planning to use page load time as a metric. We will update this section with a comparison of the page load time on completion of the project.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
Since most of the changes that are required to implement this project are proposed in the user-interface using javascript we will be performing manual testing of the UI.&lt;br /&gt;
&lt;br /&gt;
Detailed steps are as follows:&lt;br /&gt;
&lt;br /&gt;
1. Course listing is a view used by instructors &amp;amp; TAs to view courses. As the instructor &amp;amp; TAs login to expertiza, they would be directed to the course listing where they would see that checkbox (“include others’ items”) to include public courses by other members, in the listing is unchecked by default. Similar to course listing, there is an assignment listing as well to be tested. Also check to see that only private courses are loaded by default.&lt;br /&gt;
&lt;br /&gt;
2. The logged in user’s courses and others’ public courses are listed in two different sections. One section for each type. Section listing others’ public courses are displayed only when user selects the checkbox “include others’ items.&lt;br /&gt;
&lt;br /&gt;
3. Similarly, the logged in user’s assignments and others’ public assignments are listed in two different sections. Section listing public assignments are be displayed only when user selects the checkbox “include others’ items”.&lt;br /&gt;
&lt;br /&gt;
4. Check that on clicking a particular course in the course-listing page, the assignments of that course are listed.&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing ===&lt;br /&gt;
For changes in the backend, we will be using Capybara to write automated tests. This would include tests for changes in the tree_display controller.&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102167</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102167"/>
		<updated>2016-04-11T22:43:54Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in to the system they are redirected to the course/assignment/questionnaire list page. This page lists all the courses that are created by the logged in user and also the public courses that are created by other users. The current implementation of the page is in ReactJS and takes a long time to load. The purpose of this project is to improve the performance of this functionality so that it takes lesser time to display the relevant data.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The course assignment listing page has three tabs. These tabs are '''Courses''', '''Assignments''' and '''Questionnaires'''. The courses tab lists all all the courses that the instructor/TA might be interested in. This includes all the courses that they created and also the public courses. Additionally in the courses page all the assignments related to each course is also loaded when the page is loaded. All assignments belonging to a course can be viewed by clicking on that course.&lt;br /&gt;
On the listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. Because of this the page takes a long time to load. This project is concerned with coming up with solutions so that the page is loaded in a quicker manner. The individual work items identified are as follows:&lt;br /&gt;
* ''Include others' items'' check-box should be unchecked by default for both courses and assignments page. By default, the public courses should not be loaded.&lt;br /&gt;
* Current implementation of the Course page makes separate REST calls to the controller for fetching assignments for each course. This is a bad design and it takes a while to load the whole page. we plan to modify such that the assignments are loaded only when a particular course is clicked.&lt;br /&gt;
* List the courses in two different sections. One section should be to list all the courses that are created by the user. The other section should be to display all the public courses. This section should be displayed only if the check-box is selected. Searching for courses in the current single list implementation is difficult. Partitioning the list into two sections would greatly improve the usability of the page.&lt;br /&gt;
* Similarly the assignments tab should be divided into two sections. The first section should list all the assignments that are created by the user and the next should list all the public assignments.&lt;br /&gt;
=== Magnitude of Problem ===&lt;br /&gt;
In order to better understand the problem consider the following scenario:&amp;lt;br&amp;gt;When logged in as an instructor(instructor6) the course page loads a total of 103 courses. Hence it will make 103 REST calls to fetch assignments. Out of these 25 are concerned with the signed in instructor. Hence if we only load courses related to the instructor by default it drastically reduces the amount the work done. Also we will load assignment details only on demand.&lt;br /&gt;
&lt;br /&gt;
== Design of Solution ==&lt;br /&gt;
&lt;br /&gt;
===Work Item 1: Separate Courses/Assignments into two sections===&lt;br /&gt;
The table that displays the course listing is a ReactJS component. Currently it loads both private and public courses in the same section by means of a single REST call. We intend to split this such that one rest call is made for public courses and one call is made for private courses.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_folder_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Work Item 2: Load only the private courses section===&lt;br /&gt;
Adding to the changes made in previous work item, load only the private section on page load. The public section is loaded only when the check-box to load public courses is selected.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_folder_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Work Item 3: Load assignments for each course as required===&lt;br /&gt;
Each row in the course listing table represents a course. Each course has a sub section listing its assignment. Whenever a user clicks on a course a REST API call will be triggered and this will fetch the assignments, and a subsection will be added to the user interface.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Use Case Diagrams===&lt;br /&gt;
[[File:Current_Implemenation.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Proposed_Implementation.png]]&lt;br /&gt;
&lt;br /&gt;
=== Database Design ===&lt;br /&gt;
This project is involved with improving the performance of the Course and Assignment Listing page. The work is majorly in reactJS and there is no necessity to change the current database design.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
Since most of the changes that are required to implement this project are proposed in the user-interface using javascript we will be performing manual testing of the UI.&lt;br /&gt;
&lt;br /&gt;
Detailed steps are as follows:&lt;br /&gt;
&lt;br /&gt;
1. Course listing is a view used by instructors &amp;amp; TAs to view courses. As the instructor &amp;amp; TAs login to expertiza, they would be directed to the course listing where they would see that checkbox (“include others’ items”) to include public courses by other members, in the listing is unchecked by default. Similar to course listing, there is an assignment listing as well to be tested. Also check to see that only private courses are loaded by default.&lt;br /&gt;
&lt;br /&gt;
2. The logged in user’s courses and others’ public courses are listed in two different sections. One section for each type. Section listing others’ public courses are displayed only when user selects the checkbox “include others’ items.&lt;br /&gt;
&lt;br /&gt;
3. Similarly, the logged in user’s assignments and others’ public assignments are listed in two different sections. Section listing public assignments are be displayed only when user selects the checkbox “include others’ items”.&lt;br /&gt;
&lt;br /&gt;
4. Check that on clicking a particular course in the course-listing page, the assignments of that course are listed.&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing ===&lt;br /&gt;
For changes in the backend, we will be using Capybara to write automated tests. This would include tests for changes in the tree_display controller.&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102165</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102165"/>
		<updated>2016-04-11T22:42:38Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: /* Automated Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in to the system they are redirected to the course/assignment/questionnaire list page. This page lists all the courses that are created by the logged in user and also the public courses that are created by other users. The current implementation of the page is in ReactJS and takes a long time to load. The purpose of this project is to improve the performance of this functionality so that it takes lesser time to display the relevant data.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The course assignment listing page has three tabs. These tabs are '''Courses''', '''Assignments''' and '''Questionnaires'''. The courses tab lists all all the courses that the instructor/TA might be interested in. This includes all the courses that they created and also the public courses. Additionally in the courses page all the assignments related to each course is also loaded when the page is loaded. All assignments belonging to a course can be viewed by clicking on that course.&lt;br /&gt;
On the listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. Because of this the page takes a long time to load. This project is concerned with coming up with solutions so that the page is loaded in a quicker manner. The individual work items identified are as follows:&lt;br /&gt;
* ''Include others' items'' check-box should be unchecked by default for both courses and assignments page. By default, the public courses should not be loaded.&lt;br /&gt;
* Current implementation of the Course page makes separate REST calls to the controller for fetching assignments for each course. This is a bad design and it takes a while to load the whole page. we plan to modify such that the assignments are loaded only when a particular course is clicked.&lt;br /&gt;
* List the courses in two different sections. One section should be to list all the courses that are created by the user. The other section should be to display all the public courses. This section should be displayed only if the check-box is selected. Searching for courses in the current single list implementation is difficult. Partitioning the list into two sections would greatly improve the usability of the page.&lt;br /&gt;
* Similarly the assignments tab should be divided into two sections. The first section should list all the assignments that are created by the user and the next should list all the public assignments.&lt;br /&gt;
=== Magnitude of Problem ===&lt;br /&gt;
In order to better understand the problem consider the following scenario:&amp;lt;br&amp;gt;When logged in as an instructor(instructor6) the course page loads a total of 103 courses. Hence it will make 103 REST calls to fetch assignments. Out of these 25 are concerned with the signed in instructor. Hence if we only load courses related to the instructor by default it drastically reduces the amount the work done. Also we will load assignment details only on demand.&lt;br /&gt;
&lt;br /&gt;
== Overview of Approach ==&lt;br /&gt;
The page loads the details of the courses and assignments related to all the courses during the page load. But the assignment details are hidden are not shown for each course. They are shown only when a user clicks on a assignment. We can improve the speed of the page load by postponing the loading of assignments till the user clicks on a course. This will involve making an asynchronous call to the server and fetching the assignment details when a clicks on the course. We will also not load the public courses by default and give an option to load them in case a user needs to.&lt;br /&gt;
The list of courses will be divided into two sections for user courses and public courses. Same will be applicable for assignments also.&lt;br /&gt;
&lt;br /&gt;
== Design of Solution ==&lt;br /&gt;
&lt;br /&gt;
===Work Item 1: Separate Courses/Assignments into two sections===&lt;br /&gt;
The table that displays the course listing is a ReactJS component. Currently it loads both private and public courses in the same section by means of a single REST call. We intend to split this such that one rest call is made for public courses and one call is made for private courses.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_folder_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Work Item 2: Load only the private courses section===&lt;br /&gt;
Adding to the changes made in previous work item, load only the private section on page load. The public section is loaded only when the check-box to load public courses is selected.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_folder_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Work Item 3: Load assignments for each course as required===&lt;br /&gt;
Each row in the course listing table represents a course. Each course has a sub section listing its assignment. Whenever a user clicks on a course a REST API call will be triggered and this will fetch the assignments, and a subsection will be added to the user interface.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Use Case Diagrams===&lt;br /&gt;
[[File:Current_Implemenation.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Proposed_Implementation.png]]&lt;br /&gt;
&lt;br /&gt;
=== Database Design ===&lt;br /&gt;
This project is involved with improving the performance of the Course and Assignment Listing page. The work is majorly in reactJS and there is no necessity to change the current database design.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
Since most of the changes that are required to implement this project are proposed in the user-interface using javascript we will be performing manual testing of the UI.&lt;br /&gt;
&lt;br /&gt;
Detailed steps are as follows:&lt;br /&gt;
&lt;br /&gt;
1. Course listing is a view used by instructors &amp;amp; TAs to view courses. As the instructor &amp;amp; TAs login to expertiza, they would be directed to the course listing where they would see that checkbox (“include others’ items”) to include public courses by other members, in the listing is unchecked by default. Similar to course listing, there is an assignment listing as well to be tested. Also check to see that only private courses are loaded by default.&lt;br /&gt;
&lt;br /&gt;
2. The logged in user’s courses and others’ public courses are listed in two different sections. One section for each type. Section listing others’ public courses are displayed only when user selects the checkbox “include others’ items.&lt;br /&gt;
&lt;br /&gt;
3. Similarly, the logged in user’s assignments and others’ public assignments are listed in two different sections. Section listing public assignments are be displayed only when user selects the checkbox “include others’ items”.&lt;br /&gt;
&lt;br /&gt;
4. Check that on clicking a particular course in the course-listing page, the assignments of that course are listed.&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing ===&lt;br /&gt;
For changes in the backend, we will be using Capybara to write automated tests. This would include tests for changes in the tree_display controller.&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102164</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102164"/>
		<updated>2016-04-11T22:41:28Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: /* Manual Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in to the system they are redirected to the course/assignment/questionnaire list page. This page lists all the courses that are created by the logged in user and also the public courses that are created by other users. The current implementation of the page is in ReactJS and takes a long time to load. The purpose of this project is to improve the performance of this functionality so that it takes lesser time to display the relevant data.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The course assignment listing page has three tabs. These tabs are '''Courses''', '''Assignments''' and '''Questionnaires'''. The courses tab lists all all the courses that the instructor/TA might be interested in. This includes all the courses that they created and also the public courses. Additionally in the courses page all the assignments related to each course is also loaded when the page is loaded. All assignments belonging to a course can be viewed by clicking on that course.&lt;br /&gt;
On the listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. Because of this the page takes a long time to load. This project is concerned with coming up with solutions so that the page is loaded in a quicker manner. The individual work items identified are as follows:&lt;br /&gt;
* ''Include others' items'' check-box should be unchecked by default for both courses and assignments page. By default, the public courses should not be loaded.&lt;br /&gt;
* Current implementation of the Course page makes separate REST calls to the controller for fetching assignments for each course. This is a bad design and it takes a while to load the whole page. we plan to modify such that the assignments are loaded only when a particular course is clicked.&lt;br /&gt;
* List the courses in two different sections. One section should be to list all the courses that are created by the user. The other section should be to display all the public courses. This section should be displayed only if the check-box is selected. Searching for courses in the current single list implementation is difficult. Partitioning the list into two sections would greatly improve the usability of the page.&lt;br /&gt;
* Similarly the assignments tab should be divided into two sections. The first section should list all the assignments that are created by the user and the next should list all the public assignments.&lt;br /&gt;
=== Magnitude of Problem ===&lt;br /&gt;
In order to better understand the problem consider the following scenario:&amp;lt;br&amp;gt;When logged in as an instructor(instructor6) the course page loads a total of 103 courses. Hence it will make 103 REST calls to fetch assignments. Out of these 25 are concerned with the signed in instructor. Hence if we only load courses related to the instructor by default it drastically reduces the amount the work done. Also we will load assignment details only on demand.&lt;br /&gt;
&lt;br /&gt;
== Overview of Approach ==&lt;br /&gt;
The page loads the details of the courses and assignments related to all the courses during the page load. But the assignment details are hidden are not shown for each course. They are shown only when a user clicks on a assignment. We can improve the speed of the page load by postponing the loading of assignments till the user clicks on a course. This will involve making an asynchronous call to the server and fetching the assignment details when a clicks on the course. We will also not load the public courses by default and give an option to load them in case a user needs to.&lt;br /&gt;
The list of courses will be divided into two sections for user courses and public courses. Same will be applicable for assignments also.&lt;br /&gt;
&lt;br /&gt;
== Design of Solution ==&lt;br /&gt;
&lt;br /&gt;
===Work Item 1: Separate Courses/Assignments into two sections===&lt;br /&gt;
The table that displays the course listing is a ReactJS component. Currently it loads both private and public courses in the same section by means of a single REST call. We intend to split this such that one rest call is made for public courses and one call is made for private courses.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_folder_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Work Item 2: Load only the private courses section===&lt;br /&gt;
Adding to the changes made in previous work item, load only the private section on page load. The public section is loaded only when the check-box to load public courses is selected.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_folder_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Work Item 3: Load assignments for each course as required===&lt;br /&gt;
Each row in the course listing table represents a course. Each course has a sub section listing its assignment. Whenever a user clicks on a course a REST API call will be triggered and this will fetch the assignments, and a subsection will be added to the user interface.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Use Case Diagrams===&lt;br /&gt;
[[File:Current_Implemenation.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Proposed_Implementation.png]]&lt;br /&gt;
&lt;br /&gt;
=== Database Design ===&lt;br /&gt;
This project is involved with improving the performance of the Course and Assignment Listing page. The work is majorly in reactJS and there is no necessity to change the current database design.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
Since most of the changes that are required to implement this project are proposed in the user-interface using javascript we will be performing manual testing of the UI.&lt;br /&gt;
&lt;br /&gt;
Detailed steps are as follows:&lt;br /&gt;
&lt;br /&gt;
1. Course listing is a view used by instructors &amp;amp; TAs to view courses. As the instructor &amp;amp; TAs login to expertiza, they would be directed to the course listing where they would see that checkbox (“include others’ items”) to include public courses by other members, in the listing is unchecked by default. Similar to course listing, there is an assignment listing as well to be tested. Also check to see that only private courses are loaded by default.&lt;br /&gt;
&lt;br /&gt;
2. The logged in user’s courses and others’ public courses are listed in two different sections. One section for each type. Section listing others’ public courses are displayed only when user selects the checkbox “include others’ items.&lt;br /&gt;
&lt;br /&gt;
3. Similarly, the logged in user’s assignments and others’ public assignments are listed in two different sections. Section listing public assignments are be displayed only when user selects the checkbox “include others’ items”.&lt;br /&gt;
&lt;br /&gt;
4. Check that on clicking a particular course in the course-listing page, the assignments of that course are listed.&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing ===&lt;br /&gt;
For changes in the backend, we will be using Capybara to write automated tests. This would include tests for changes in the tree_display controller and student_task controller.&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102162</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102162"/>
		<updated>2016-04-11T22:36:56Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: /* Work Item 3: Load assignments for each course as required */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in to the system they are redirected to the course/assignment/questionnaire list page. This page lists all the courses that are created by the logged in user and also the public courses that are created by other users. The current implementation of the page is in ReactJS and takes a long time to load. The purpose of this project is to improve the performance of this functionality so that it takes lesser time to display the relevant data.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The course assignment listing page has three tabs. These tabs are '''Courses''', '''Assignments''' and '''Questionnaires'''. The courses tab lists all all the courses that the instructor/TA might be interested in. This includes all the courses that they created and also the public courses. Additionally in the courses page all the assignments related to each course is also loaded when the page is loaded. All assignments belonging to a course can be viewed by clicking on that course.&lt;br /&gt;
On the listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. Because of this the page takes a long time to load. This project is concerned with coming up with solutions so that the page is loaded in a quicker manner. The individual work items identified are as follows:&lt;br /&gt;
* ''Include others' items'' check-box should be unchecked by default for both courses and assignments page. By default, the public courses should not be loaded.&lt;br /&gt;
* Current implementation of the Course page makes separate REST calls to the controller for fetching assignments for each course. This is a bad design and it takes a while to load the whole page. we plan to modify such that the assignments are loaded only when a particular course is clicked.&lt;br /&gt;
* List the courses in two different sections. One section should be to list all the courses that are created by the user. The other section should be to display all the public courses. This section should be displayed only if the check-box is selected. Searching for courses in the current single list implementation is difficult. Partitioning the list into two sections would greatly improve the usability of the page.&lt;br /&gt;
* Similarly the assignments tab should be divided into two sections. The first section should list all the assignments that are created by the user and the next should list all the public assignments.&lt;br /&gt;
=== Magnitude of Problem ===&lt;br /&gt;
In order to better understand the problem consider the following scenario:&amp;lt;br&amp;gt;When logged in as an instructor(instructor6) the course page loads a total of 103 courses. Hence it will make 103 REST calls to fetch assignments. Out of these 25 are concerned with the signed in instructor. Hence if we only load courses related to the instructor by default it drastically reduces the amount the work done. Also we will load assignment details only on demand.&lt;br /&gt;
&lt;br /&gt;
== Overview of Approach ==&lt;br /&gt;
The page loads the details of the courses and assignments related to all the courses during the page load. But the assignment details are hidden are not shown for each course. They are shown only when a user clicks on a assignment. We can improve the speed of the page load by postponing the loading of assignments till the user clicks on a course. This will involve making an asynchronous call to the server and fetching the assignment details when a clicks on the course. We will also not load the public courses by default and give an option to load them in case a user needs to.&lt;br /&gt;
The list of courses will be divided into two sections for user courses and public courses. Same will be applicable for assignments also.&lt;br /&gt;
&lt;br /&gt;
== Design of Solution ==&lt;br /&gt;
&lt;br /&gt;
===Work Item 1: Separate Courses/Assignments into two sections===&lt;br /&gt;
The table that displays the course listing is a ReactJS component. Currently it loads both private and public courses in the same section by means of a single REST call. We intend to split this such that one rest call is made for public courses and one call is made for private courses.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_folder_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Work Item 2: Load only the private courses section===&lt;br /&gt;
Adding to the changes made in previous work item, load only the private section on page load. The public section is loaded only when the check-box to load public courses is selected.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_folder_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Work Item 3: Load assignments for each course as required===&lt;br /&gt;
Each row in the course listing table represents a course. Each course has a sub section listing its assignment. Whenever a user clicks on a course a REST API call will be triggered and this will fetch the assignments, and a subsection will be added to the user interface.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Use Case Diagrams===&lt;br /&gt;
[[File:Current_Implemenation.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Proposed_Implementation.png]]&lt;br /&gt;
&lt;br /&gt;
=== Database Design ===&lt;br /&gt;
This project is involved with improving the performance of the Course and Assignment Listing page. The work is majorly in reactJS and there is no necessity to change the current database design.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
We will be performing manual testing for changes in the UI. Detailed steps are as follows:&lt;br /&gt;
&lt;br /&gt;
1. Course listing is a view used by instructors &amp;amp; TAs to view courses. As the instructor &amp;amp; TAs login to expertiza, they would be directed to the course listing where they would see that checkbox (“include others’ items”) to include public courses by other members, in the listing is unchecked by default. Similar to course listing, there is an assignment listing as well to be tested.&lt;br /&gt;
&lt;br /&gt;
2. The logged in user’s courses and others’ public courses are listed in two different sections. One section for each type. Section listing others’ public courses are displayed only when user selects the checkbox “include others’ items.&lt;br /&gt;
&lt;br /&gt;
3. Similarly, the logged in user’s assignments and others’ public assignments are listed in two different sections. Section listing public assignments are be displayed only when user selects the checkbox “include others’ items”.&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing ===&lt;br /&gt;
For changes in the backend, we will be using Capybara to write automated tests. This would include tests for changes in the tree_display controller and student_task controller.&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102161</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102161"/>
		<updated>2016-04-11T22:36:19Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: /* Work Item 2: Load only the private courses section */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in to the system they are redirected to the course/assignment/questionnaire list page. This page lists all the courses that are created by the logged in user and also the public courses that are created by other users. The current implementation of the page is in ReactJS and takes a long time to load. The purpose of this project is to improve the performance of this functionality so that it takes lesser time to display the relevant data.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The course assignment listing page has three tabs. These tabs are '''Courses''', '''Assignments''' and '''Questionnaires'''. The courses tab lists all all the courses that the instructor/TA might be interested in. This includes all the courses that they created and also the public courses. Additionally in the courses page all the assignments related to each course is also loaded when the page is loaded. All assignments belonging to a course can be viewed by clicking on that course.&lt;br /&gt;
On the listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. Because of this the page takes a long time to load. This project is concerned with coming up with solutions so that the page is loaded in a quicker manner. The individual work items identified are as follows:&lt;br /&gt;
* ''Include others' items'' check-box should be unchecked by default for both courses and assignments page. By default, the public courses should not be loaded.&lt;br /&gt;
* Current implementation of the Course page makes separate REST calls to the controller for fetching assignments for each course. This is a bad design and it takes a while to load the whole page. we plan to modify such that the assignments are loaded only when a particular course is clicked.&lt;br /&gt;
* List the courses in two different sections. One section should be to list all the courses that are created by the user. The other section should be to display all the public courses. This section should be displayed only if the check-box is selected. Searching for courses in the current single list implementation is difficult. Partitioning the list into two sections would greatly improve the usability of the page.&lt;br /&gt;
* Similarly the assignments tab should be divided into two sections. The first section should list all the assignments that are created by the user and the next should list all the public assignments.&lt;br /&gt;
=== Magnitude of Problem ===&lt;br /&gt;
In order to better understand the problem consider the following scenario:&amp;lt;br&amp;gt;When logged in as an instructor(instructor6) the course page loads a total of 103 courses. Hence it will make 103 REST calls to fetch assignments. Out of these 25 are concerned with the signed in instructor. Hence if we only load courses related to the instructor by default it drastically reduces the amount the work done. Also we will load assignment details only on demand.&lt;br /&gt;
&lt;br /&gt;
== Overview of Approach ==&lt;br /&gt;
The page loads the details of the courses and assignments related to all the courses during the page load. But the assignment details are hidden are not shown for each course. They are shown only when a user clicks on a assignment. We can improve the speed of the page load by postponing the loading of assignments till the user clicks on a course. This will involve making an asynchronous call to the server and fetching the assignment details when a clicks on the course. We will also not load the public courses by default and give an option to load them in case a user needs to.&lt;br /&gt;
The list of courses will be divided into two sections for user courses and public courses. Same will be applicable for assignments also.&lt;br /&gt;
&lt;br /&gt;
== Design of Solution ==&lt;br /&gt;
&lt;br /&gt;
===Work Item 1: Separate Courses/Assignments into two sections===&lt;br /&gt;
The table that displays the course listing is a ReactJS component. Currently it loads both private and public courses in the same section by means of a single REST call. We intend to split this such that one rest call is made for public courses and one call is made for private courses.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_folder_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Work Item 2: Load only the private courses section===&lt;br /&gt;
Adding to the changes made in previous work item, load only the private section on page load. The public section is loaded only when the check-box to load public courses is selected.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_folder_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Work Item 3: Load assignments for each course as required===&lt;br /&gt;
Each row in the course listing table represents a course. Each course has a sub section listing its assignment. Whenever a user clicks on a course a REST API call will be triggered and this will fetch the assignments, and a subsection will be added to the user interface.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
&lt;br /&gt;
===Use Case Diagrams===&lt;br /&gt;
[[File:Current_Implemenation.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Proposed_Implementation.png]]&lt;br /&gt;
&lt;br /&gt;
=== Database Design ===&lt;br /&gt;
This project is involved with improving the performance of the Course and Assignment Listing page. The work is majorly in reactJS and there is no necessity to change the current database design.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
We will be performing manual testing for changes in the UI. Detailed steps are as follows:&lt;br /&gt;
&lt;br /&gt;
1. Course listing is a view used by instructors &amp;amp; TAs to view courses. As the instructor &amp;amp; TAs login to expertiza, they would be directed to the course listing where they would see that checkbox (“include others’ items”) to include public courses by other members, in the listing is unchecked by default. Similar to course listing, there is an assignment listing as well to be tested.&lt;br /&gt;
&lt;br /&gt;
2. The logged in user’s courses and others’ public courses are listed in two different sections. One section for each type. Section listing others’ public courses are displayed only when user selects the checkbox “include others’ items.&lt;br /&gt;
&lt;br /&gt;
3. Similarly, the logged in user’s assignments and others’ public assignments are listed in two different sections. Section listing public assignments are be displayed only when user selects the checkbox “include others’ items”.&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing ===&lt;br /&gt;
For changes in the backend, we will be using Capybara to write automated tests. This would include tests for changes in the tree_display controller and student_task controller.&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102160</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102160"/>
		<updated>2016-04-11T22:36:06Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: /* Work Item 1: Separate Courses/Assignments into two sections */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in to the system they are redirected to the course/assignment/questionnaire list page. This page lists all the courses that are created by the logged in user and also the public courses that are created by other users. The current implementation of the page is in ReactJS and takes a long time to load. The purpose of this project is to improve the performance of this functionality so that it takes lesser time to display the relevant data.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The course assignment listing page has three tabs. These tabs are '''Courses''', '''Assignments''' and '''Questionnaires'''. The courses tab lists all all the courses that the instructor/TA might be interested in. This includes all the courses that they created and also the public courses. Additionally in the courses page all the assignments related to each course is also loaded when the page is loaded. All assignments belonging to a course can be viewed by clicking on that course.&lt;br /&gt;
On the listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. Because of this the page takes a long time to load. This project is concerned with coming up with solutions so that the page is loaded in a quicker manner. The individual work items identified are as follows:&lt;br /&gt;
* ''Include others' items'' check-box should be unchecked by default for both courses and assignments page. By default, the public courses should not be loaded.&lt;br /&gt;
* Current implementation of the Course page makes separate REST calls to the controller for fetching assignments for each course. This is a bad design and it takes a while to load the whole page. we plan to modify such that the assignments are loaded only when a particular course is clicked.&lt;br /&gt;
* List the courses in two different sections. One section should be to list all the courses that are created by the user. The other section should be to display all the public courses. This section should be displayed only if the check-box is selected. Searching for courses in the current single list implementation is difficult. Partitioning the list into two sections would greatly improve the usability of the page.&lt;br /&gt;
* Similarly the assignments tab should be divided into two sections. The first section should list all the assignments that are created by the user and the next should list all the public assignments.&lt;br /&gt;
=== Magnitude of Problem ===&lt;br /&gt;
In order to better understand the problem consider the following scenario:&amp;lt;br&amp;gt;When logged in as an instructor(instructor6) the course page loads a total of 103 courses. Hence it will make 103 REST calls to fetch assignments. Out of these 25 are concerned with the signed in instructor. Hence if we only load courses related to the instructor by default it drastically reduces the amount the work done. Also we will load assignment details only on demand.&lt;br /&gt;
&lt;br /&gt;
== Overview of Approach ==&lt;br /&gt;
The page loads the details of the courses and assignments related to all the courses during the page load. But the assignment details are hidden are not shown for each course. They are shown only when a user clicks on a assignment. We can improve the speed of the page load by postponing the loading of assignments till the user clicks on a course. This will involve making an asynchronous call to the server and fetching the assignment details when a clicks on the course. We will also not load the public courses by default and give an option to load them in case a user needs to.&lt;br /&gt;
The list of courses will be divided into two sections for user courses and public courses. Same will be applicable for assignments also.&lt;br /&gt;
&lt;br /&gt;
== Design of Solution ==&lt;br /&gt;
&lt;br /&gt;
===Work Item 1: Separate Courses/Assignments into two sections===&lt;br /&gt;
The table that displays the course listing is a ReactJS component. Currently it loads both private and public courses in the same section by means of a single REST call. We intend to split this such that one rest call is made for public courses and one call is made for private courses.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* app/views/tree_display/actions/_courses_folder_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
===Work Item 2: Load only the private courses section===&lt;br /&gt;
Adding to the changes made in previous work item, load only the private section on page load. The public section is loaded only when the check-box to load public courses is selected.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
&lt;br /&gt;
===Work Item 3: Load assignments for each course as required===&lt;br /&gt;
Each row in the course listing table represents a course. Each course has a sub section listing its assignment. Whenever a user clicks on a course a REST API call will be triggered and this will fetch the assignments, and a subsection will be added to the user interface.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
&lt;br /&gt;
===Use Case Diagrams===&lt;br /&gt;
[[File:Current_Implemenation.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Proposed_Implementation.png]]&lt;br /&gt;
&lt;br /&gt;
=== Database Design ===&lt;br /&gt;
This project is involved with improving the performance of the Course and Assignment Listing page. The work is majorly in reactJS and there is no necessity to change the current database design.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
We will be performing manual testing for changes in the UI. Detailed steps are as follows:&lt;br /&gt;
&lt;br /&gt;
1. Course listing is a view used by instructors &amp;amp; TAs to view courses. As the instructor &amp;amp; TAs login to expertiza, they would be directed to the course listing where they would see that checkbox (“include others’ items”) to include public courses by other members, in the listing is unchecked by default. Similar to course listing, there is an assignment listing as well to be tested.&lt;br /&gt;
&lt;br /&gt;
2. The logged in user’s courses and others’ public courses are listed in two different sections. One section for each type. Section listing others’ public courses are displayed only when user selects the checkbox “include others’ items.&lt;br /&gt;
&lt;br /&gt;
3. Similarly, the logged in user’s assignments and others’ public assignments are listed in two different sections. Section listing public assignments are be displayed only when user selects the checkbox “include others’ items”.&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing ===&lt;br /&gt;
For changes in the backend, we will be using Capybara to write automated tests. This would include tests for changes in the tree_display controller and student_task controller.&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102159</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102159"/>
		<updated>2016-04-11T22:34:00Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: /* Work Item 3: Load assignments for each course as required */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in to the system they are redirected to the course/assignment/questionnaire list page. This page lists all the courses that are created by the logged in user and also the public courses that are created by other users. The current implementation of the page is in ReactJS and takes a long time to load. The purpose of this project is to improve the performance of this functionality so that it takes lesser time to display the relevant data.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The course assignment listing page has three tabs. These tabs are '''Courses''', '''Assignments''' and '''Questionnaires'''. The courses tab lists all all the courses that the instructor/TA might be interested in. This includes all the courses that they created and also the public courses. Additionally in the courses page all the assignments related to each course is also loaded when the page is loaded. All assignments belonging to a course can be viewed by clicking on that course.&lt;br /&gt;
On the listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. Because of this the page takes a long time to load. This project is concerned with coming up with solutions so that the page is loaded in a quicker manner. The individual work items identified are as follows:&lt;br /&gt;
* ''Include others' items'' check-box should be unchecked by default for both courses and assignments page. By default, the public courses should not be loaded.&lt;br /&gt;
* Current implementation of the Course page makes separate REST calls to the controller for fetching assignments for each course. This is a bad design and it takes a while to load the whole page. we plan to modify such that the assignments are loaded only when a particular course is clicked.&lt;br /&gt;
* List the courses in two different sections. One section should be to list all the courses that are created by the user. The other section should be to display all the public courses. This section should be displayed only if the check-box is selected. Searching for courses in the current single list implementation is difficult. Partitioning the list into two sections would greatly improve the usability of the page.&lt;br /&gt;
* Similarly the assignments tab should be divided into two sections. The first section should list all the assignments that are created by the user and the next should list all the public assignments.&lt;br /&gt;
=== Magnitude of Problem ===&lt;br /&gt;
In order to better understand the problem consider the following scenario:&amp;lt;br&amp;gt;When logged in as an instructor(instructor6) the course page loads a total of 103 courses. Hence it will make 103 REST calls to fetch assignments. Out of these 25 are concerned with the signed in instructor. Hence if we only load courses related to the instructor by default it drastically reduces the amount the work done. Also we will load assignment details only on demand.&lt;br /&gt;
&lt;br /&gt;
== Overview of Approach ==&lt;br /&gt;
The page loads the details of the courses and assignments related to all the courses during the page load. But the assignment details are hidden are not shown for each course. They are shown only when a user clicks on a assignment. We can improve the speed of the page load by postponing the loading of assignments till the user clicks on a course. This will involve making an asynchronous call to the server and fetching the assignment details when a clicks on the course. We will also not load the public courses by default and give an option to load them in case a user needs to.&lt;br /&gt;
The list of courses will be divided into two sections for user courses and public courses. Same will be applicable for assignments also.&lt;br /&gt;
&lt;br /&gt;
== Design of Solution ==&lt;br /&gt;
&lt;br /&gt;
===Work Item 1: Separate Courses/Assignments into two sections===&lt;br /&gt;
The table that displays the course listing is a ReactJS component. Currently it loads both private and public courses in the same section by means of a single REST call. We intend to split this such that one rest call is made for public courses and one call is made for private courses.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
&lt;br /&gt;
===Work Item 2: Load only the private courses section===&lt;br /&gt;
Adding to the changes made in previous work item, load only the private section on page load. The public section is loaded only when the check-box to load public courses is selected.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
&lt;br /&gt;
===Work Item 3: Load assignments for each course as required===&lt;br /&gt;
Each row in the course listing table represents a course. Each course has a sub section listing its assignment. Whenever a user clicks on a course a REST API call will be triggered and this will fetch the assignments, and a subsection will be added to the user interface.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
&lt;br /&gt;
===Use Case Diagrams===&lt;br /&gt;
[[File:Current_Implemenation.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Proposed_Implementation.png]]&lt;br /&gt;
&lt;br /&gt;
=== Database Design ===&lt;br /&gt;
This project is involved with improving the performance of the Course and Assignment Listing page. The work is majorly in reactJS and there is no necessity to change the current database design.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
We will be performing manual testing for changes in the UI. Detailed steps are as follows:&lt;br /&gt;
&lt;br /&gt;
1. Course listing is a view used by instructors &amp;amp; TAs to view courses. As the instructor &amp;amp; TAs login to expertiza, they would be directed to the course listing where they would see that checkbox (“include others’ items”) to include public courses by other members, in the listing is unchecked by default. Similar to course listing, there is an assignment listing as well to be tested.&lt;br /&gt;
&lt;br /&gt;
2. The logged in user’s courses and others’ public courses are listed in two different sections. One section for each type. Section listing others’ public courses are displayed only when user selects the checkbox “include others’ items.&lt;br /&gt;
&lt;br /&gt;
3. Similarly, the logged in user’s assignments and others’ public assignments are listed in two different sections. Section listing public assignments are be displayed only when user selects the checkbox “include others’ items”.&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing ===&lt;br /&gt;
For changes in the backend, we will be using Capybara to write automated tests. This would include tests for changes in the tree_display controller and student_task controller.&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102158</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102158"/>
		<updated>2016-04-11T22:33:50Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: /* Work Item 2: Load only the private courses section */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in to the system they are redirected to the course/assignment/questionnaire list page. This page lists all the courses that are created by the logged in user and also the public courses that are created by other users. The current implementation of the page is in ReactJS and takes a long time to load. The purpose of this project is to improve the performance of this functionality so that it takes lesser time to display the relevant data.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The course assignment listing page has three tabs. These tabs are '''Courses''', '''Assignments''' and '''Questionnaires'''. The courses tab lists all all the courses that the instructor/TA might be interested in. This includes all the courses that they created and also the public courses. Additionally in the courses page all the assignments related to each course is also loaded when the page is loaded. All assignments belonging to a course can be viewed by clicking on that course.&lt;br /&gt;
On the listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. Because of this the page takes a long time to load. This project is concerned with coming up with solutions so that the page is loaded in a quicker manner. The individual work items identified are as follows:&lt;br /&gt;
* ''Include others' items'' check-box should be unchecked by default for both courses and assignments page. By default, the public courses should not be loaded.&lt;br /&gt;
* Current implementation of the Course page makes separate REST calls to the controller for fetching assignments for each course. This is a bad design and it takes a while to load the whole page. we plan to modify such that the assignments are loaded only when a particular course is clicked.&lt;br /&gt;
* List the courses in two different sections. One section should be to list all the courses that are created by the user. The other section should be to display all the public courses. This section should be displayed only if the check-box is selected. Searching for courses in the current single list implementation is difficult. Partitioning the list into two sections would greatly improve the usability of the page.&lt;br /&gt;
* Similarly the assignments tab should be divided into two sections. The first section should list all the assignments that are created by the user and the next should list all the public assignments.&lt;br /&gt;
=== Magnitude of Problem ===&lt;br /&gt;
In order to better understand the problem consider the following scenario:&amp;lt;br&amp;gt;When logged in as an instructor(instructor6) the course page loads a total of 103 courses. Hence it will make 103 REST calls to fetch assignments. Out of these 25 are concerned with the signed in instructor. Hence if we only load courses related to the instructor by default it drastically reduces the amount the work done. Also we will load assignment details only on demand.&lt;br /&gt;
&lt;br /&gt;
== Overview of Approach ==&lt;br /&gt;
The page loads the details of the courses and assignments related to all the courses during the page load. But the assignment details are hidden are not shown for each course. They are shown only when a user clicks on a assignment. We can improve the speed of the page load by postponing the loading of assignments till the user clicks on a course. This will involve making an asynchronous call to the server and fetching the assignment details when a clicks on the course. We will also not load the public courses by default and give an option to load them in case a user needs to.&lt;br /&gt;
The list of courses will be divided into two sections for user courses and public courses. Same will be applicable for assignments also.&lt;br /&gt;
&lt;br /&gt;
== Design of Solution ==&lt;br /&gt;
&lt;br /&gt;
===Work Item 1: Separate Courses/Assignments into two sections===&lt;br /&gt;
The table that displays the course listing is a ReactJS component. Currently it loads both private and public courses in the same section by means of a single REST call. We intend to split this such that one rest call is made for public courses and one call is made for private courses.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
&lt;br /&gt;
===Work Item 2: Load only the private courses section===&lt;br /&gt;
Adding to the changes made in previous work item, load only the private section on page load. The public section is loaded only when the check-box to load public courses is selected.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
&lt;br /&gt;
===Work Item 3: Load assignments for each course as required===&lt;br /&gt;
Each row in the course listing table represents a course. Each course has a sub section listing its assignment. Whenever a user clicks on a course a REST API call will be triggered and this will fetch the assignments, and a subsection will be added to the user interface.&lt;br /&gt;
'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Use Case Diagrams===&lt;br /&gt;
[[File:Current_Implemenation.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Proposed_Implementation.png]]&lt;br /&gt;
&lt;br /&gt;
=== Database Design ===&lt;br /&gt;
This project is involved with improving the performance of the Course and Assignment Listing page. The work is majorly in reactJS and there is no necessity to change the current database design.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
We will be performing manual testing for changes in the UI. Detailed steps are as follows:&lt;br /&gt;
&lt;br /&gt;
1. Course listing is a view used by instructors &amp;amp; TAs to view courses. As the instructor &amp;amp; TAs login to expertiza, they would be directed to the course listing where they would see that checkbox (“include others’ items”) to include public courses by other members, in the listing is unchecked by default. Similar to course listing, there is an assignment listing as well to be tested.&lt;br /&gt;
&lt;br /&gt;
2. The logged in user’s courses and others’ public courses are listed in two different sections. One section for each type. Section listing others’ public courses are displayed only when user selects the checkbox “include others’ items.&lt;br /&gt;
&lt;br /&gt;
3. Similarly, the logged in user’s assignments and others’ public assignments are listed in two different sections. Section listing public assignments are be displayed only when user selects the checkbox “include others’ items”.&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing ===&lt;br /&gt;
For changes in the backend, we will be using Capybara to write automated tests. This would include tests for changes in the tree_display controller and student_task controller.&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102157</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102157"/>
		<updated>2016-04-11T22:33:32Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: /* Work Item 1: Separate Courses/Assignments into two sections */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in to the system they are redirected to the course/assignment/questionnaire list page. This page lists all the courses that are created by the logged in user and also the public courses that are created by other users. The current implementation of the page is in ReactJS and takes a long time to load. The purpose of this project is to improve the performance of this functionality so that it takes lesser time to display the relevant data.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The course assignment listing page has three tabs. These tabs are '''Courses''', '''Assignments''' and '''Questionnaires'''. The courses tab lists all all the courses that the instructor/TA might be interested in. This includes all the courses that they created and also the public courses. Additionally in the courses page all the assignments related to each course is also loaded when the page is loaded. All assignments belonging to a course can be viewed by clicking on that course.&lt;br /&gt;
On the listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. Because of this the page takes a long time to load. This project is concerned with coming up with solutions so that the page is loaded in a quicker manner. The individual work items identified are as follows:&lt;br /&gt;
* ''Include others' items'' check-box should be unchecked by default for both courses and assignments page. By default, the public courses should not be loaded.&lt;br /&gt;
* Current implementation of the Course page makes separate REST calls to the controller for fetching assignments for each course. This is a bad design and it takes a while to load the whole page. we plan to modify such that the assignments are loaded only when a particular course is clicked.&lt;br /&gt;
* List the courses in two different sections. One section should be to list all the courses that are created by the user. The other section should be to display all the public courses. This section should be displayed only if the check-box is selected. Searching for courses in the current single list implementation is difficult. Partitioning the list into two sections would greatly improve the usability of the page.&lt;br /&gt;
* Similarly the assignments tab should be divided into two sections. The first section should list all the assignments that are created by the user and the next should list all the public assignments.&lt;br /&gt;
=== Magnitude of Problem ===&lt;br /&gt;
In order to better understand the problem consider the following scenario:&amp;lt;br&amp;gt;When logged in as an instructor(instructor6) the course page loads a total of 103 courses. Hence it will make 103 REST calls to fetch assignments. Out of these 25 are concerned with the signed in instructor. Hence if we only load courses related to the instructor by default it drastically reduces the amount the work done. Also we will load assignment details only on demand.&lt;br /&gt;
&lt;br /&gt;
== Overview of Approach ==&lt;br /&gt;
The page loads the details of the courses and assignments related to all the courses during the page load. But the assignment details are hidden are not shown for each course. They are shown only when a user clicks on a assignment. We can improve the speed of the page load by postponing the loading of assignments till the user clicks on a course. This will involve making an asynchronous call to the server and fetching the assignment details when a clicks on the course. We will also not load the public courses by default and give an option to load them in case a user needs to.&lt;br /&gt;
The list of courses will be divided into two sections for user courses and public courses. Same will be applicable for assignments also.&lt;br /&gt;
&lt;br /&gt;
== Design of Solution ==&lt;br /&gt;
&lt;br /&gt;
===Work Item 1: Separate Courses/Assignments into two sections===&lt;br /&gt;
The table that displays the course listing is a ReactJS component. Currently it loads both private and public courses in the same section by means of a single REST call. We intend to split this such that one rest call is made for public courses and one call is made for private courses.&lt;br /&gt;
&amp;lt;br&amp;gt;'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* app/controllers/tree_display_controller.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
&lt;br /&gt;
===Work Item 2: Load only the private courses section===&lt;br /&gt;
Adding to the changes made in previous work item, load only the private section on page load. The public section is loaded only when the check-box to load public courses is selected.&lt;br /&gt;
'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
===Work Item 3: Load assignments for each course as required===&lt;br /&gt;
Each row in the course listing table represents a course. Each course has a sub section listing its assignment. Whenever a user clicks on a course a REST API call will be triggered and this will fetch the assignments, and a subsection will be added to the user interface.&lt;br /&gt;
'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Use Case Diagrams===&lt;br /&gt;
[[File:Current_Implemenation.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Proposed_Implementation.png]]&lt;br /&gt;
&lt;br /&gt;
=== Database Design ===&lt;br /&gt;
This project is involved with improving the performance of the Course and Assignment Listing page. The work is majorly in reactJS and there is no necessity to change the current database design.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
We will be performing manual testing for changes in the UI. Detailed steps are as follows:&lt;br /&gt;
&lt;br /&gt;
1. Course listing is a view used by instructors &amp;amp; TAs to view courses. As the instructor &amp;amp; TAs login to expertiza, they would be directed to the course listing where they would see that checkbox (“include others’ items”) to include public courses by other members, in the listing is unchecked by default. Similar to course listing, there is an assignment listing as well to be tested.&lt;br /&gt;
&lt;br /&gt;
2. The logged in user’s courses and others’ public courses are listed in two different sections. One section for each type. Section listing others’ public courses are displayed only when user selects the checkbox “include others’ items.&lt;br /&gt;
&lt;br /&gt;
3. Similarly, the logged in user’s assignments and others’ public assignments are listed in two different sections. Section listing public assignments are be displayed only when user selects the checkbox “include others’ items”.&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing ===&lt;br /&gt;
For changes in the backend, we will be using Capybara to write automated tests. This would include tests for changes in the tree_display controller and student_task controller.&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102156</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102156"/>
		<updated>2016-04-11T22:31:48Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: /* Design of Solution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in to the system they are redirected to the course/assignment/questionnaire list page. This page lists all the courses that are created by the logged in user and also the public courses that are created by other users. The current implementation of the page is in ReactJS and takes a long time to load. The purpose of this project is to improve the performance of this functionality so that it takes lesser time to display the relevant data.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The course assignment listing page has three tabs. These tabs are '''Courses''', '''Assignments''' and '''Questionnaires'''. The courses tab lists all all the courses that the instructor/TA might be interested in. This includes all the courses that they created and also the public courses. Additionally in the courses page all the assignments related to each course is also loaded when the page is loaded. All assignments belonging to a course can be viewed by clicking on that course.&lt;br /&gt;
On the listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. Because of this the page takes a long time to load. This project is concerned with coming up with solutions so that the page is loaded in a quicker manner. The individual work items identified are as follows:&lt;br /&gt;
* ''Include others' items'' check-box should be unchecked by default for both courses and assignments page. By default, the public courses should not be loaded.&lt;br /&gt;
* Current implementation of the Course page makes separate REST calls to the controller for fetching assignments for each course. This is a bad design and it takes a while to load the whole page. we plan to modify such that the assignments are loaded only when a particular course is clicked.&lt;br /&gt;
* List the courses in two different sections. One section should be to list all the courses that are created by the user. The other section should be to display all the public courses. This section should be displayed only if the check-box is selected. Searching for courses in the current single list implementation is difficult. Partitioning the list into two sections would greatly improve the usability of the page.&lt;br /&gt;
* Similarly the assignments tab should be divided into two sections. The first section should list all the assignments that are created by the user and the next should list all the public assignments.&lt;br /&gt;
=== Magnitude of Problem ===&lt;br /&gt;
In order to better understand the problem consider the following scenario:&amp;lt;br&amp;gt;When logged in as an instructor(instructor6) the course page loads a total of 103 courses. Hence it will make 103 REST calls to fetch assignments. Out of these 25 are concerned with the signed in instructor. Hence if we only load courses related to the instructor by default it drastically reduces the amount the work done. Also we will load assignment details only on demand.&lt;br /&gt;
&lt;br /&gt;
== Overview of Approach ==&lt;br /&gt;
The page loads the details of the courses and assignments related to all the courses during the page load. But the assignment details are hidden are not shown for each course. They are shown only when a user clicks on a assignment. We can improve the speed of the page load by postponing the loading of assignments till the user clicks on a course. This will involve making an asynchronous call to the server and fetching the assignment details when a clicks on the course. We will also not load the public courses by default and give an option to load them in case a user needs to.&lt;br /&gt;
The list of courses will be divided into two sections for user courses and public courses. Same will be applicable for assignments also.&lt;br /&gt;
&lt;br /&gt;
== Design of Solution ==&lt;br /&gt;
&lt;br /&gt;
===Work Item 1: Separate Courses/Assignments into two sections===&lt;br /&gt;
The table that displays the course listing is a ReactJS component. Currently it loads both private and public courses in the same section by means of a single REST call. We intend to split this such that one rest call is made for public courses and one call is made for private courses.&lt;br /&gt;
'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
===Work Item 2: Load only the private courses section===&lt;br /&gt;
Adding to the changes made in previous work item, load only the private section on page load. The public section is loaded only when the check-box to load public courses is selected.&lt;br /&gt;
'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
===Work Item 3: Load assignments for each course as required===&lt;br /&gt;
Each row in the course listing table represents a course. Each course has a sub section listing its assignment. Whenever a user clicks on a course a REST API call will be triggered and this will fetch the assignments, and a subsection will be added to the user interface.&lt;br /&gt;
'''Files modified:'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Use Case Diagrams===&lt;br /&gt;
[[File:Current_Implemenation.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Proposed_Implementation.png]]&lt;br /&gt;
&lt;br /&gt;
=== Database Design ===&lt;br /&gt;
This project is involved with improving the performance of the Course and Assignment Listing page. The work is majorly in reactJS and there is no necessity to change the current database design.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
We will be performing manual testing for changes in the UI. Detailed steps are as follows:&lt;br /&gt;
&lt;br /&gt;
1. Course listing is a view used by instructors &amp;amp; TAs to view courses. As the instructor &amp;amp; TAs login to expertiza, they would be directed to the course listing where they would see that checkbox (“include others’ items”) to include public courses by other members, in the listing is unchecked by default. Similar to course listing, there is an assignment listing as well to be tested.&lt;br /&gt;
&lt;br /&gt;
2. The logged in user’s courses and others’ public courses are listed in two different sections. One section for each type. Section listing others’ public courses are displayed only when user selects the checkbox “include others’ items.&lt;br /&gt;
&lt;br /&gt;
3. Similarly, the logged in user’s assignments and others’ public assignments are listed in two different sections. Section listing public assignments are be displayed only when user selects the checkbox “include others’ items”.&lt;br /&gt;
&lt;br /&gt;
=== Automated Testing ===&lt;br /&gt;
For changes in the backend, we will be using Capybara to write automated tests. This would include tests for changes in the tree_display controller and student_task controller.&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102105</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102105"/>
		<updated>2016-04-11T20:50:30Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: /* Magnitude of Problem */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in to the system they are redirected to the course/assignment/questionnaire list page. This page lists all the courses that are created by the logged in user and also the public courses that are created by other users. The current implementation of the page is in ReactJS and takes a long time to load. The purpose of this project is to improve the performance of this functionality so that it takes lesser time to display the relevant data.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The course assignment listing page has three tabs. These tabs are '''Courses''', '''Assignments''' and '''Questionnaires'''. The courses tab lists all all the courses that the instructor/TA might be interested in. This includes all the courses that they created and also the public courses. Additionally in the courses page all the assignments related to each course is also loaded when the page is loaded. All assignments belonging to a course can be viewed by clicking on that course.&lt;br /&gt;
On the listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. Because of this the page takes a long time to load. This project is concerned with coming up with solutions so that the page is loaded in a quicker manner. The individual work items identified are as follows:&lt;br /&gt;
* ''Include others' items'' check-box should be unchecked by default for both courses and assignments page.&lt;br /&gt;
* Current implementation of the Course page needs to be modified such that the assignments for a course are loaded only when a particular course is clicked.&lt;br /&gt;
* List the courses in two different sections. One section should be to list all the courses that are created by the user. The other section should be to display all the public courses. This section should be displayed only if the check-box is selected. Searching for courses in the current single list implementation is difficult. Partitioning the list into two sections would greatly improve the usability of the page.&lt;br /&gt;
* Similarly the assignments tab should be divided into two sections. The first section should list all the assignments that are created by the user and the next should list all the public assignments.&lt;br /&gt;
=== Magnitude of Problem ===&lt;br /&gt;
In order to better understand the problem consider the following scenario:&amp;lt;br&amp;gt;When logged in as an instructor(instructor6) the course page loads a total of 103 courses. Out of these 25 are concerned with the signed in instructor. Hence if we only load courses related to the instructor by default it drastically reduces the amount the work done.&lt;br /&gt;
&lt;br /&gt;
== Overview of Approach ==&lt;br /&gt;
The page loads the details of the courses and assignments related to all the courses during the page load. But the assignment details are hidden are not shown for each course. They are shown only when a user clicks on a assignment. We can improve the speed of the page load by postponing the loading of assignments till the user clicks on a course. This will involve making an asynchronous call to the server and fetching the assignment details when a clicks on the course. We will also not load the public courses by default and give an option to load them in case a user needs to.&lt;br /&gt;
The list of courses will be divided into two sections for user courses and public courses. Same will be applicable for assignments also.&lt;br /&gt;
&lt;br /&gt;
== Design of Solution ==&lt;br /&gt;
&lt;br /&gt;
Task 1: &amp;quot;Include others' items&amp;quot; checkbox is checked by default on Courses and Assignments manage contents page. At first it might seem that the design solution to improve latency is to uncheck this checkbox by default on page load. However, it's not the hard coded value of this checkbox that leads to latency of the page load. We need to further investigate what causes this latency.&lt;br /&gt;
&lt;br /&gt;
On course tab, load assignment (children) nodes only when user expands the course listing.&lt;br /&gt;
&lt;br /&gt;
Task 2: Assignments are preloaded along with the page for the course. Whenever you click on the course, there is an asynchronous AJAX call to the server to fetch the details of the assignment. To solve this problem, we would need to implement a function which would make an AJAX call to the server to fetch the assignment details in JSON format. For this, need to make changes in tree_display.jsx file to dynamically fetch the data.&lt;br /&gt;
&lt;br /&gt;
=== Database Design ===&lt;br /&gt;
This project is involved with improving the performance of the Course and Assignment Listing page. The work is majorly in reactJS and there is no necessity to change the current database design.&lt;br /&gt;
&lt;br /&gt;
=== Testing ===&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102096</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102096"/>
		<updated>2016-04-11T20:43:59Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: /* Magnitude of Problem */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in to the system they are redirected to the course/assignment/questionnaire list page. This page lists all the courses that are created by the logged in user and also the public courses that are created by other users. The current implementation of the page is in ReactJS and takes a long time to load. The purpose of this project is to improve the performance of this functionality so that it takes lesser time to display the relevant data.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The course assignment listing page has three tabs. These tabs are '''Courses''', '''Assignments''' and '''Questionnaires'''. The courses tab lists all all the courses that the instructor/TA might be interested in. This includes all the courses that they created and also the public courses. Additionally in the courses page all the assignments related to each course is also loaded when the page is loaded. All assignments belonging to a course can be viewed by clicking on that course.&lt;br /&gt;
On the listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. Because of this the page takes a long time to load. This project is concerned with coming up with solutions so that the page is loaded in a quicker manner. The individual work items identified are as follows:&lt;br /&gt;
* ''Include others' items'' check-box should be unchecked by default for both courses and assignments page.&lt;br /&gt;
* Current implementation of the Course page needs to be modified such that the assignments for a course are loaded only when a particular course is clicked.&lt;br /&gt;
* List the courses in two different sections. One section should be to list all the courses that are created by the user. The other section should be to display all the public courses. This section should be displayed only if the check-box is selected. Searching for courses in the current single list implementation is difficult. Partitioning the list into two sections would greatly improve the usability of the page.&lt;br /&gt;
* Similarly the assignments tab should be divided into two sections. The first section should list all the assignments that are created by the user and the next should list all the public assignments.&lt;br /&gt;
=== Magnitude of Problem ===&lt;br /&gt;
In order to better understand the problem consider the following scenario:&amp;lt;br&amp;gt;When logged in as an instructor(instructor6) the course page loads a total of 103 courses. Out of these 26 are concerned with the signed in instructor. Hence if we only load courses related to the instructor by default it drastically reduces the amount the work done.&lt;br /&gt;
&lt;br /&gt;
== Overview of Approach ==&lt;br /&gt;
The page loads the details of the courses and assignments related to all the courses during the page load. But the assignment details are hidden are not shown for each course. They are shown only when a user clicks on a assignment. We can improve the speed of the page load by postponing the loading of assignments till the user clicks on a course. This will involve making an asynchronous call to the server and fetching the assignment details when a clicks on the course. We will also not load the public courses by default and give an option to load them in case a user needs to.&lt;br /&gt;
The list of courses will be divided into two sections for user courses and public courses. Same will be applicable for assignments also.&lt;br /&gt;
&lt;br /&gt;
== Design of Solution ==&lt;br /&gt;
&lt;br /&gt;
Task 1: &amp;quot;Include others' items&amp;quot; checkbox is checked by default on Courses and Assignments manage contents page. At first it might seem that the design solution to improve latency is to uncheck this checkbox by default on page load. However, it's not the hard coded value of this checkbox that leads to latency of the page load. We need to further investigate what causes this latency.&lt;br /&gt;
&lt;br /&gt;
On course tab, load assignment (children) nodes only when user expands the course listing.&lt;br /&gt;
&lt;br /&gt;
Task 2: Assignments are preloaded along with the page for the course. Whenever you click on the course, there is an asynchronous AJAX call to the server to fetch the details of the assignment. To solve this problem, we would need to implement a function which would make an AJAX call to the server to fetch the assignment details in JSON format. For this, need to make changes in tree_display.jsx file to dynamically fetch the data.&lt;br /&gt;
&lt;br /&gt;
=== Database Design ===&lt;br /&gt;
This project is involved with improving the performance of the Course and Assignment Listing page. The work is majorly in reactJS and there is no necessity to change the current database design.&lt;br /&gt;
&lt;br /&gt;
=== Testing ===&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102094</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102094"/>
		<updated>2016-04-11T20:43:36Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: /* Magnitude of Problem */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in to the system they are redirected to the course/assignment/questionnaire list page. This page lists all the courses that are created by the logged in user and also the public courses that are created by other users. The current implementation of the page is in ReactJS and takes a long time to load. The purpose of this project is to improve the performance of this functionality so that it takes lesser time to display the relevant data.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The course assignment listing page has three tabs. These tabs are '''Courses''', '''Assignments''' and '''Questionnaires'''. The courses tab lists all all the courses that the instructor/TA might be interested in. This includes all the courses that they created and also the public courses. Additionally in the courses page all the assignments related to each course is also loaded when the page is loaded. All assignments belonging to a course can be viewed by clicking on that course.&lt;br /&gt;
On the listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. Because of this the page takes a long time to load. This project is concerned with coming up with solutions so that the page is loaded in a quicker manner. The individual work items identified are as follows:&lt;br /&gt;
* ''Include others' items'' check-box should be unchecked by default for both courses and assignments page.&lt;br /&gt;
* Current implementation of the Course page needs to be modified such that the assignments for a course are loaded only when a particular course is clicked.&lt;br /&gt;
* List the courses in two different sections. One section should be to list all the courses that are created by the user. The other section should be to display all the public courses. This section should be displayed only if the check-box is selected. Searching for courses in the current single list implementation is difficult. Partitioning the list into two sections would greatly improve the usability of the page.&lt;br /&gt;
* Similarly the assignments tab should be divided into two sections. The first section should list all the assignments that are created by the user and the next should list all the public assignments.&lt;br /&gt;
=== Magnitude of Problem ===&lt;br /&gt;
In order to better understand the problem consider the following scenario:&lt;br /&gt;
&lt;br /&gt;
When logged in as an instructor(instructor6) the course page loads a total of 103 courses. Out of these 26 are concerned with the signed in instructor. Hence if we only load courses related to the instructor by default it drastically reduces the amount the work done.&lt;br /&gt;
&lt;br /&gt;
== Overview of Approach ==&lt;br /&gt;
The page loads the details of the courses and assignments related to all the courses during the page load. But the assignment details are hidden are not shown for each course. They are shown only when a user clicks on a assignment. We can improve the speed of the page load by postponing the loading of assignments till the user clicks on a course. This will involve making an asynchronous call to the server and fetching the assignment details when a clicks on the course. We will also not load the public courses by default and give an option to load them in case a user needs to.&lt;br /&gt;
The list of courses will be divided into two sections for user courses and public courses. Same will be applicable for assignments also.&lt;br /&gt;
&lt;br /&gt;
== Design of Solution ==&lt;br /&gt;
&lt;br /&gt;
Task 1: &amp;quot;Include others' items&amp;quot; checkbox is checked by default on Courses and Assignments manage contents page. At first it might seem that the design solution to improve latency is to uncheck this checkbox by default on page load. However, it's not the hard coded value of this checkbox that leads to latency of the page load. We need to further investigate what causes this latency.&lt;br /&gt;
&lt;br /&gt;
On course tab, load assignment (children) nodes only when user expands the course listing.&lt;br /&gt;
&lt;br /&gt;
Task 2: Assignments are preloaded along with the page for the course. Whenever you click on the course, there is an asynchronous AJAX call to the server to fetch the details of the assignment. To solve this problem, we would need to implement a function which would make an AJAX call to the server to fetch the assignment details in JSON format. For this, need to make changes in tree_display.jsx file to dynamically fetch the data.&lt;br /&gt;
&lt;br /&gt;
=== Database Design ===&lt;br /&gt;
This project is involved with improving the performance of the Course and Assignment Listing page. The work is majorly in reactJS and there is no necessity to change the current database design.&lt;br /&gt;
&lt;br /&gt;
=== Testing ===&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102092</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102092"/>
		<updated>2016-04-11T20:43:12Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: /* Problem Statement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in to the system they are redirected to the course/assignment/questionnaire list page. This page lists all the courses that are created by the logged in user and also the public courses that are created by other users. The current implementation of the page is in ReactJS and takes a long time to load. The purpose of this project is to improve the performance of this functionality so that it takes lesser time to display the relevant data.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The course assignment listing page has three tabs. These tabs are '''Courses''', '''Assignments''' and '''Questionnaires'''. The courses tab lists all all the courses that the instructor/TA might be interested in. This includes all the courses that they created and also the public courses. Additionally in the courses page all the assignments related to each course is also loaded when the page is loaded. All assignments belonging to a course can be viewed by clicking on that course.&lt;br /&gt;
On the listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. Because of this the page takes a long time to load. This project is concerned with coming up with solutions so that the page is loaded in a quicker manner. The individual work items identified are as follows:&lt;br /&gt;
* ''Include others' items'' check-box should be unchecked by default for both courses and assignments page.&lt;br /&gt;
* Current implementation of the Course page needs to be modified such that the assignments for a course are loaded only when a particular course is clicked.&lt;br /&gt;
* List the courses in two different sections. One section should be to list all the courses that are created by the user. The other section should be to display all the public courses. This section should be displayed only if the check-box is selected. Searching for courses in the current single list implementation is difficult. Partitioning the list into two sections would greatly improve the usability of the page.&lt;br /&gt;
* Similarly the assignments tab should be divided into two sections. The first section should list all the assignments that are created by the user and the next should list all the public assignments.&lt;br /&gt;
=== Magnitude of Problem ===&lt;br /&gt;
In order to better understand the problem consider the following scenario:&lt;br /&gt;
When logged in as an instructor(instructor6) the course page loads a total of 103 courses. Out of these 26 are concerned with the signed in instructor. Hence if we only load courses related to the instructor by default it drastically reduces the amount the work done.&lt;br /&gt;
&lt;br /&gt;
== Overview of Approach ==&lt;br /&gt;
The page loads the details of the courses and assignments related to all the courses during the page load. But the assignment details are hidden are not shown for each course. They are shown only when a user clicks on a assignment. We can improve the speed of the page load by postponing the loading of assignments till the user clicks on a course. This will involve making an asynchronous call to the server and fetching the assignment details when a clicks on the course. We will also not load the public courses by default and give an option to load them in case a user needs to.&lt;br /&gt;
The list of courses will be divided into two sections for user courses and public courses. Same will be applicable for assignments also.&lt;br /&gt;
&lt;br /&gt;
== Design of Solution ==&lt;br /&gt;
&lt;br /&gt;
Task 1: &amp;quot;Include others' items&amp;quot; checkbox is checked by default on Courses and Assignments manage contents page. At first it might seem that the design solution to improve latency is to uncheck this checkbox by default on page load. However, it's not the hard coded value of this checkbox that leads to latency of the page load. We need to further investigate what causes this latency.&lt;br /&gt;
&lt;br /&gt;
On course tab, load assignment (children) nodes only when user expands the course listing.&lt;br /&gt;
&lt;br /&gt;
Task 2: Assignments are preloaded along with the page for the course. Whenever you click on the course, there is an asynchronous AJAX call to the server to fetch the details of the assignment. To solve this problem, we would need to implement a function which would make an AJAX call to the server to fetch the assignment details in JSON format. For this, need to make changes in tree_display.jsx file to dynamically fetch the data.&lt;br /&gt;
&lt;br /&gt;
=== Database Design ===&lt;br /&gt;
This project is involved with improving the performance of the Course and Assignment Listing page. The work is majorly in reactJS and there is no necessity to change the current database design.&lt;br /&gt;
&lt;br /&gt;
=== Testing ===&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102079</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102079"/>
		<updated>2016-04-11T20:23:44Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: /* Problem Statement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in to the system they are redirected to the course/assignment/questionnaire list page. This page lists all the courses that are created by the logged in user and also the public courses that are created by other users. The current implementation of the page is in ReactJS and takes a long time to load. The purpose of this project is to improve the performance of this functionality so that it takes lesser time to display the relevant data.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The course assignment listing page has three tabs. These tabs are '''Courses''', '''Assignments''' and '''Questionnaires'''. The courses tab lists all all the courses that the instructor/TA might be interested in. This includes all the courses that they created and also the public courses. Additionally in the courses page all the assignments related to each course is also loaded when the page is loaded. All assignments belonging to a course can be viewed by clicking on that course.&lt;br /&gt;
On the listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. Because of this the page takes a long time to load. This project is concerned with coming up with solutions so that the page is loaded in a quicker manner. The individual work items identified are as follows:&lt;br /&gt;
* ''Include others' items'' check-box should be unchecked by default for both courses and assignments page.&lt;br /&gt;
* Current implementation of the Course page needs to be modified such that the assignments for a course are loaded only when a particular course is clicked.&lt;br /&gt;
* List the courses in two different sections. One section should be to list all the courses that are created by the user. The other section should be to display all the public courses. This section should be displayed only if the check-box is selected. Searching for courses in the current single list implementation is difficult. Partitioning the list into two sections would greatly improve the usability of the page.&lt;br /&gt;
* Similarly the assignments tab should be divided into two sections. The first section should list all the assignments that are created by the user and the next should list all the public assignments.&lt;br /&gt;
&lt;br /&gt;
== Overview of Approach ==&lt;br /&gt;
The page loads the details of the courses and assignments related to all the courses during the page load. But the assignment details are hidden are not shown for each course. They are shown only when a user clicks on a assignment. We can improve the speed of the page load by postponing the loading of assignments till the user clicks on a course. This will involve making an asynchronous call to the server and fetching the assignment details when a clicks on the course. We will also not load the public courses by default and give an option to load them in case a user needs to.&lt;br /&gt;
The list of courses will be divided into two sections for user courses and public courses. Same will be applicable for assignments also.&lt;br /&gt;
&lt;br /&gt;
== Design of Solution ==&lt;br /&gt;
&lt;br /&gt;
Task1: &amp;quot;Include others' items&amp;quot; checkbox is checked by default on Courses and Assignments manage contents page. At first it might seem that the design solution to improve latency is to uncheck this checkbox by default on page load. However, it's not the hard coded value of this checkbox that leads to latency of the page load. We need to further investigate what causes this latency.&lt;br /&gt;
&lt;br /&gt;
On course tab, load assignment (children) nodes only when user expands the course listing.&lt;br /&gt;
&lt;br /&gt;
Task 2: Assignments are preloaded along with the page for the course. Whenever you click on the course, there is an asynchronous AJAX call to the server to fetch the details of the assignment. To solve this problem, we would need to implement a function which would make an AJAX call to the server to fetch the assignment details in JSON format. For this, need to make changes in tree_display.jsx file to dynamically fetch the data.&lt;br /&gt;
=== Database Design ===&lt;br /&gt;
This project is involved with improving the performance of the Course and Assignment Listing page. The work is majorly in reactJS and there is no necessity to change the current database design.&lt;br /&gt;
=== Testing ===&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102075</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102075"/>
		<updated>2016-04-11T20:20:13Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: /* Problem Statement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in to the system they are redirected to the course/assignment/questionnaire list page. This page lists all the courses that are created by the logged in user and also the public courses that are created by other users. The current implementation of the page is in ReactJS and takes a long time to load. The purpose of this project is to improve the performance of this functionality so that it takes lesser time to display the relevant data.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The course assignment listing page has three tabs. These tabs are '''Courses''', '''Assignments''' and '''Questionnaires'''. The courses tab lists all all the courses that the instructor/TA might be interested in. This includes all the courses that they created and also the public courses. On the listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. Because of this the page takes a long time to load. This project is concerned with coming up with solutions so that the page is loaded in a quicker manner. The individual work items identified are as follows:&lt;br /&gt;
* ''Include others' items'' check-box should be unchecked by default for both courses and assignments page.&lt;br /&gt;
* Current implementation of the courses tab loads all the assignments pertaining to all the courses(both private and public courses). This implementation needs to be modified such that the assignments for a course are loaded only when a particular course is clicked.&lt;br /&gt;
* List the courses in two different sections. One section should be to list all the courses that are created by the user. The other section should be to display all the public courses. This section should be displayed only if the check-box is selected. Searching for courses in the current single list implementation is difficult. Partitioning the list into two sections would greatly improve the usability of the page.&lt;br /&gt;
* Similarly the assignments tab should be divided into two sections. The first section should list all the assignments that are created by the user and the next should list all the public assignments.&lt;br /&gt;
&lt;br /&gt;
== Overview of Approach ==&lt;br /&gt;
The page loads the details of the courses and assignments related to all the courses during the page load. But the assignment details are hidden are not shown for each course. They are shown only when a user clicks on a assignment. We can improve the speed of the page load by postponing the loading of assignments till the user clicks on a course. This will involve making an asynchronous call to the server and fetching the assignment details when a clicks on the course. We will also not load the public courses by default and give an option to load them in case a user needs to.&lt;br /&gt;
The list of courses will be divided into two sections for user courses and public courses. Same will be applicable for assignments also.&lt;br /&gt;
&lt;br /&gt;
== Design of Solution ==&lt;br /&gt;
&lt;br /&gt;
Task1: &amp;quot;Include others' items&amp;quot; checkbox is checked by default on Courses and Assignments manage contents page. At first it might seem that the design solution to improve latency is to uncheck this checkbox by default on page load. However, it's not the hard coded value of this checkbox that leads to latency of the page load. We need to further investigate what causes this latency.&lt;br /&gt;
&lt;br /&gt;
On course tab, load assignment (children) nodes only when user expands the course listing.&lt;br /&gt;
&lt;br /&gt;
Task 2: Assignments are preloaded along with the page for the course. Whenever you click on the course, there is an asynchronous AJAX call to the server to fetch the details of the assignment. To solve this problem, we would need to implement a function which would make an AJAX call to the server to fetch the assignment details in JSON format. For this, need to make changes in tree_display.jsx file to dynamically fetch the data.&lt;br /&gt;
=== Database Design ===&lt;br /&gt;
This project is involved with improving the performance of the Course and Assignment Listing page. The work is majorly in reactJS and there is no necessity to change the current database design.&lt;br /&gt;
=== Testing ===&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102061</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102061"/>
		<updated>2016-04-11T19:52:36Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: /* Purpose */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in to the system they are redirected to the course/assignment/questionnaire list page. This page lists all the courses that are created by the logged in user and also the public courses that are created by other users. The current implementation of the page is in ReactJS and takes a long time to load. The purpose of this project is to improve the performance of this functionality so that it takes lesser time to display the relevant data.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
On the course/assignment listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses created by the logged in user are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. As a result the page takes a long time to load. The project is concerned with coming up with solutions so that the page is loaded in a quicker manner. The individual work items identified are as follows:&lt;br /&gt;
* ''Include others' items'' check-box should be unchecked by default for both courses and assignments page.&lt;br /&gt;
* Current implementation of the courses tab loads all the assignments pertaining to all the courses(both private and public courses). This implementation needs to be modified such that the assignments for a course are loaded only when a particular course is clicked.&lt;br /&gt;
* List the courses in two different sections. One section should be to list all the courses that are created by the user. The other section should be to display all the public courses. This section should be displayed only if the check-box is selected.&lt;br /&gt;
* Similarly the assignments tab should be divided into two sections. The first section should list all the assignments that are created by the user and the next should list all the public assignments.&lt;br /&gt;
&lt;br /&gt;
== Overview of Approach ==&lt;br /&gt;
The page loads the details of the courses and assignments related to all the courses during the page load. But the assignment details are hidden are not shown for each course. They are shown only when a user clicks on a assignment. We can improve the speed of the page load by postponing the loading of assignments till the user clicks on a course. This will involve making an asynchronous call to the server and fetching the assignment details when a clicks on the course. We will also not load the public courses by default and give an option to load them in case a user needs to.&lt;br /&gt;
The list of courses will be divided into two sections for user courses and public courses. Same will be applicable for assignments also.&lt;br /&gt;
&lt;br /&gt;
== Design of Solution ==&lt;br /&gt;
&lt;br /&gt;
Task1: &amp;quot;Include others' items&amp;quot; checkbox is checked by default on Courses and Assignments manage contents page. At first it might seem that the design solution to improve latency is to uncheck this checkbox by default on page load. However, it's not the hard coded value of this checkbox that leads to latency of the page load. We need to further investigate what causes this latency.&lt;br /&gt;
&lt;br /&gt;
On course tab, load assignment (children) nodes only when user expands the course listing.&lt;br /&gt;
&lt;br /&gt;
Task 2: Assignments are preloaded along with the page for the course. Whenever you click on the course, there is an asynchronous AJAX call to the server to fetch the details of the assignment. To solve this problem, we would need to implement a function which would make an AJAX call to the server to fetch the assignment details in JSON format. For this, need to make changes in tree_display.jsx file to dynamically fetch the data.&lt;br /&gt;
=== Database Design ===&lt;br /&gt;
This project is involved with improving the performance of the Course and Assignment Listing page. The work is majorly in reactJS and there is no necessity to change the current database design.&lt;br /&gt;
=== Testing ===&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102060</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102060"/>
		<updated>2016-04-11T19:45:29Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: /* Overview of Approach */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in to the system they are redirected to the course/assignment/questionnaire list page. This page lists all the courses that are created by the logged in user and the public courses that are created by other users. In the current implementation the page takes a long time to load. The purpose of this project is to improve the performance of this functionality so that it takes lesser time to display the relevant data.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
On the course/assignment listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses created by the logged in user are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. As a result the page takes a long time to load. The project is concerned with coming up with solutions so that the page is loaded in a quicker manner. The individual work items identified are as follows:&lt;br /&gt;
* ''Include others' items'' check-box should be unchecked by default for both courses and assignments page.&lt;br /&gt;
* Current implementation of the courses tab loads all the assignments pertaining to all the courses(both private and public courses). This implementation needs to be modified such that the assignments for a course are loaded only when a particular course is clicked.&lt;br /&gt;
* List the courses in two different sections. One section should be to list all the courses that are created by the user. The other section should be to display all the public courses. This section should be displayed only if the check-box is selected.&lt;br /&gt;
* Similarly the assignments tab should be divided into two sections. The first section should list all the assignments that are created by the user and the next should list all the public assignments.&lt;br /&gt;
&lt;br /&gt;
== Overview of Approach ==&lt;br /&gt;
The page loads the details of the courses and assignments related to all the courses during the page load. But the assignment details are hidden are not shown for each course. They are shown only when a user clicks on a assignment. We can improve the speed of the page load by postponing the loading of assignments till the user clicks on a course. This will involve making an asynchronous call to the server and fetching the assignment details when a clicks on the course. We will also not load the public courses by default and give an option to load them in case a user needs to.&lt;br /&gt;
The list of courses will be divided into two sections for user courses and public courses. Same will be applicable for assignments also.&lt;br /&gt;
&lt;br /&gt;
== Design of Solution ==&lt;br /&gt;
&lt;br /&gt;
Task1: &amp;quot;Include others' items&amp;quot; checkbox is checked by default on Courses and Assignments manage contents page. At first it might seem that the design solution to improve latency is to uncheck this checkbox by default on page load. However, it's not the hard coded value of this checkbox that leads to latency of the page load. We need to further investigate what causes this latency.&lt;br /&gt;
&lt;br /&gt;
On course tab, load assignment (children) nodes only when user expands the course listing.&lt;br /&gt;
&lt;br /&gt;
Task 2: Assignments are preloaded along with the page for the course. Whenever you click on the course, there is an asynchronous AJAX call to the server to fetch the details of the assignment. To solve this problem, we would need to implement a function which would make an AJAX call to the server to fetch the assignment details in JSON format. For this, need to make changes in tree_display.jsx file to dynamically fetch the data.&lt;br /&gt;
=== Database Design ===&lt;br /&gt;
This project is involved with improving the performance of the Course and Assignment Listing page. The work is majorly in reactJS and there is no necessity to change the current database design.&lt;br /&gt;
=== Testing ===&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102059</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102059"/>
		<updated>2016-04-11T19:43:45Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: /* Design of Solution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in to the system they are redirected to the course/assignment/questionnaire list page. This page lists all the courses that are created by the logged in user and the public courses that are created by other users. In the current implementation the page takes a long time to load. The purpose of this project is to improve the performance of this functionality so that it takes lesser time to display the relevant data.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
On the course/assignment listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses created by the logged in user are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. As a result the page takes a long time to load. The project is concerned with coming up with solutions so that the page is loaded in a quicker manner. The individual work items identified are as follows:&lt;br /&gt;
* ''Include others' items'' check-box should be unchecked by default for both courses and assignments page.&lt;br /&gt;
* Current implementation of the courses tab loads all the assignments pertaining to all the courses(both private and public courses). This implementation needs to be modified such that the assignments for a course are loaded only when a particular course is clicked.&lt;br /&gt;
* List the courses in two different sections. One section should be to list all the courses that are created by the user. The other section should be to display all the public courses. This section should be displayed only if the check-box is selected.&lt;br /&gt;
* Similarly the assignments tab should be divided into two sections. The first section should list all the assignments that are created by the user and the next should list all the public assignments.&lt;br /&gt;
&lt;br /&gt;
== Overview of Approach ==&lt;br /&gt;
The page loads the details of the courses and assignments related to all the courses during the page load. But the assignment details are hidden are not shown for each course. They are shown only when a user clicks on a assignment. We can improve the speed of the page load by postponing the loading of assignments till the user clicks on a course. This will involve making an asynchronous call to the server and fetching the assignment details when a clicks on the course. We will also not load the public courses by default and give an option to load them in case a user needs to.&lt;br /&gt;
The list of courses will be divided into two sections for user courses and private courses. Same will be applicable for assignments also.&lt;br /&gt;
&lt;br /&gt;
== Design of Solution ==&lt;br /&gt;
&lt;br /&gt;
Task1: &amp;quot;Include others' items&amp;quot; checkbox is checked by default on Courses and Assignments manage contents page. At first it might seem that the design solution to improve latency is to uncheck this checkbox by default on page load. However, it's not the hard coded value of this checkbox that leads to latency of the page load. We need to further investigate what causes this latency.&lt;br /&gt;
&lt;br /&gt;
On course tab, load assignment (children) nodes only when user expands the course listing.&lt;br /&gt;
&lt;br /&gt;
Task 2: Assignments are preloaded along with the page for the course. Whenever you click on the course, there is an asynchronous AJAX call to the server to fetch the details of the assignment. To solve this problem, we would need to implement a function which would make an AJAX call to the server to fetch the assignment details in JSON format. For this, need to make changes in tree_display.jsx file to dynamically fetch the data.&lt;br /&gt;
=== Database Design ===&lt;br /&gt;
This project is involved with improving the performance of the Course and Assignment Listing page. The work is majorly in reactJS and there is no necessity to change the current database design.&lt;br /&gt;
=== Testing ===&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102058</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=102058"/>
		<updated>2016-04-11T19:38:47Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: /* Design of Solution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in to the system they are redirected to the course/assignment/questionnaire list page. This page lists all the courses that are created by the logged in user and the public courses that are created by other users. In the current implementation the page takes a long time to load. The purpose of this project is to improve the performance of this functionality so that it takes lesser time to display the relevant data.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
On the course/assignment listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses created by the logged in user are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. As a result the page takes a long time to load. The project is concerned with coming up with solutions so that the page is loaded in a quicker manner. The individual work items identified are as follows:&lt;br /&gt;
* ''Include others' items'' check-box should be unchecked by default for both courses and assignments page.&lt;br /&gt;
* Current implementation of the courses tab loads all the assignments pertaining to all the courses(both private and public courses). This implementation needs to be modified such that the assignments for a course are loaded only when a particular course is clicked.&lt;br /&gt;
* List the courses in two different sections. One section should be to list all the courses that are created by the user. The other section should be to display all the public courses. This section should be displayed only if the check-box is selected.&lt;br /&gt;
* Similarly the assignments tab should be divided into two sections. The first section should list all the assignments that are created by the user and the next should list all the public assignments.&lt;br /&gt;
&lt;br /&gt;
== Overview of Approach ==&lt;br /&gt;
The page loads the details of the courses and assignments related to all the courses during the page load. But the assignment details are hidden are not shown for each course. They are shown only when a user clicks on a assignment. We can improve the speed of the page load by postponing the loading of assignments till the user clicks on a course. This will involve making an asynchronous call to the server and fetching the assignment details when a clicks on the course. We will also not load the public courses by default and give an option to load them in case a user needs to.&lt;br /&gt;
The list of courses will be divided into two sections for user courses and private courses. Same will be applicable for assignments also.&lt;br /&gt;
&lt;br /&gt;
== Design of Solution ==&lt;br /&gt;
&lt;br /&gt;
Task1: &amp;quot;Include others' items&amp;quot; checkbox is checked by default on Courses and Assignments manage contents page. At first it might seem that the design solution to improve latency is to uncheck this checkbox by default on page load. However, it's not the hard coded value of this checkbox that leads to latency of the page load. We need to further investigate what causes this latency.&lt;br /&gt;
&lt;br /&gt;
On course tab, load assignment (children) nodes only when user expands the course listing.&lt;br /&gt;
&lt;br /&gt;
Task 2: Assignments are preloaded along with the page for the course. Whenever you click on the course, there is an asynchronous AJAX call to the server to fetch the details of the assignment. To solve this problem, we would need to implement a function which would make an AJAX call to the server to fetch the assignment details in JSON format. For this, need to make changes in tree_display.jsx file to dynamically fetch the data.&lt;br /&gt;
=== Database Design ===&lt;br /&gt;
This project is involved with improving the performance of the Course and Assignment Listing page. The work is majorly in reactJS and there is no necessity to change the current database design.&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=101873</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=101873"/>
		<updated>2016-04-05T01:26:00Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: /* Overview of Approach */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in to the system they are redirected to the course/assignment/questionnaire list page. This page lists all the courses that are created by the logged in user and the public courses that are created by other users. In the current implementation the page takes a long time to load. The purpose of this project is to improve the performance of this functionality so that it takes lesser time to display the relevant data.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
On the course/assignment listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses created by the logged in user are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. As a result the page takes a long time to load. The project is concerned with coming up with solutions so that the page is loaded in a quicker manner. The individual work items identified are as follows:&lt;br /&gt;
* ''Include others' items'' check-box should be unchecked by default for both courses and assignments page.&lt;br /&gt;
* Current implementation of the courses tab loads all the assignments pertaining to all the courses(both private and public courses). This implementation needs to be modified such that the assignments for a course are loaded only when a particular course is clicked.&lt;br /&gt;
* List the courses in two different sections. One section should be to list all the courses that are created by the user. The other section should be to display all the public courses. This section should be displayed only if the check-box is selected.&lt;br /&gt;
* Similarly the assignments tab should be divided into two sections. The first section should list all the assignments that are created by the user and the next should list all the public assignments.&lt;br /&gt;
&lt;br /&gt;
== Overview of Approach ==&lt;br /&gt;
The page loads the details of the courses and assignments related to all the courses during the page load. But the assignment details are hidden are not shown for each course. They are shown only when a user clicks on a assignment. We can improve the speed of the page load by postponing the loading of assignments till the user clicks on a course. This will involve making an asynchronous call to the server and fetching the assignment details when a clicks on the course. We will also not load the public courses by default and give an option to load them in case a user needs to.&lt;br /&gt;
The list of courses will be divided into two sections for user courses and private courses. Same will be applicable for assignments also.&lt;br /&gt;
&lt;br /&gt;
== Design of Solution ==&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=101872</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=101872"/>
		<updated>2016-04-05T01:22:55Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: /* Problem Statement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in to the system they are redirected to the course/assignment/questionnaire list page. This page lists all the courses that are created by the logged in user and the public courses that are created by other users. In the current implementation the page takes a long time to load. The purpose of this project is to improve the performance of this functionality so that it takes lesser time to display the relevant data.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
On the course/assignment listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses created by the logged in user are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. As a result the page takes a long time to load. The project is concerned with coming up with solutions so that the page is loaded in a quicker manner. The individual work items identified are as follows:&lt;br /&gt;
* ''Include others' items'' check-box should be unchecked by default for both courses and assignments page.&lt;br /&gt;
* Current implementation of the courses tab loads all the assignments pertaining to all the courses(both private and public courses). This implementation needs to be modified such that the assignments for a course are loaded only when a particular course is clicked.&lt;br /&gt;
* List the courses in two different sections. One section should be to list all the courses that are created by the user. The other section should be to display all the public courses. This section should be displayed only if the check-box is selected.&lt;br /&gt;
* Similarly the assignments tab should be divided into two sections. The first section should list all the assignments that are created by the user and the next should list all the public assignments.&lt;br /&gt;
&lt;br /&gt;
==Overview of Approach==&lt;br /&gt;
== Overview of Approach ==&lt;br /&gt;
The page loads the details of the courses and assignments related to all the courses during the page load. But the assignment details are hidden are not shown for each course. They are shown only when a user clicks on a assignment. We can improve the speed of the page load by postponing the loading of assignments till the user clicks on a course. This will involve making an asynchronous call to the server and fetching the assignment details when a clicks on the course. We will also not load the public courses by default and give an option to load them in case a user needs to.&lt;br /&gt;
The list of courses will be divided into two sections for user courses and private courses. Same will be applicable for assignments also.&lt;br /&gt;
&lt;br /&gt;
== Design of Solution ==&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=101866</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=101866"/>
		<updated>2016-04-05T00:58:04Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: /* Purpose */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in to the system they are redirected to the course/assignment/questionnaire list page. This page lists all the courses that are created by the logged in user and the public courses that are created by other users. In the current implementation the page takes a long time to load. The purpose of this project is to improve the performance of this functionality so that it takes lesser time to display the relevant data.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
On the course/assignment listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses created by the logged in user are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. As a result the page takes a long time to load. The project is concerned with coming up with solutions so that the page is loaded in a quicker manner.&lt;br /&gt;
== Overview of Approach  ==&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=101864</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=101864"/>
		<updated>2016-04-05T00:49:21Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in they are redirected to the tree display list page. This page lists all the courses that are created by the logged in user and the public courses that are created by other users.&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
On the course/assignment listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses created by the logged in user are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. As a result the page takes a long time to load. The project is concerned with coming up with solutions so that the page is loaded in a quicker manner.&lt;br /&gt;
==  ==&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=101863</id>
		<title>CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp; Assignment Listing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2016_E1629_Performance_improvement_for_Course_%26_Assignment_Listing&amp;diff=101863"/>
		<updated>2016-04-05T00:48:59Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: Created page with &amp;quot;= CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp;amp; Assignment Listing = == Purpose == The purpose of this project is to improve the performance of the Course an...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CSC/ECE 517 Spring 2016 E1629 Performance improvement for Course &amp;amp; Assignment Listing =&lt;br /&gt;
== Purpose ==&lt;br /&gt;
The purpose of this project is to improve the performance of the Course and Assignment listing page. When an instructor or TA logs in they are redirected to the tree display list page. This page lists all the courses that are created by the logged in user and the public courses that are created by other users.&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
On the course/assignment listing page there exists a check-box which allows the user to select whether or not to display public projects. By default this option is selected and as a result all public and private courses created by the logged in user are displayed. Similarly for the assignments page all the public as well as private assignments created by the user are loaded. As a result the page takes a long time to load. The project is concerned with coming up with solutions so that the page is loaded in a quicker manner.&lt;br /&gt;
==  ==&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Jitesh&amp;diff=101319</id>
		<title>User:Jitesh</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Jitesh&amp;diff=101319"/>
		<updated>2016-03-24T03:16:38Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CSC/ECE 517 Spring 2016 - Expertiza E1613 =&lt;br /&gt;
This wiki page is for the description of changes made according to the specification of E1613 OSS assignment for Spring 2016.&lt;br /&gt;
&lt;br /&gt;
== Peer Review Information ==&lt;br /&gt;
For testing the changes made, the following credentials are recommended:&lt;br /&gt;
* Instructor Login: '''username:''' ''instructor6'' '''password:''' ''password''&lt;br /&gt;
* Student Login: '''username:''' ''student11'' '''password:''' ''password''&lt;br /&gt;
* Student Login: '''username:''' ''student1862'' '''password:''' ''password''&lt;br /&gt;
The above users are suggested for testing because there are a few users which would lead to exceptions upon login for unknown reasons completely unrelated to our work.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
=== Background ===&lt;br /&gt;
Expertiza is a web portal which can be used to manage assignments related to a course. It provides a platform to view assignments, manage teams, select topics and work improvement through anonymous peer reviews. For the instructor it provides complete control to create assignments, view reviews submitted and provide feedback. The instructors also have an option to publish the students work based on the rights provided by the student.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
The following were the tasks identified to accomplish through this project. These tasks are part of the sign_up_sheet_controller.rb and sign_up_topic.rb&lt;br /&gt;
* '''WI-1:''' Method ad_info in the sign_up_sheet_controller.rb users sql query to retrieve the desired objects. This needs to be changed so that action records are used instead and a hash/array of the required object is returned.&lt;br /&gt;
* '''WI-2:''' Delete the method add_default_microtask after confirming that there is no reference to the method.&lt;br /&gt;
* '''WI-3:''' The view_publishing_rights method brings up a webpage to the instructor on whether the course staff has been granted or denied the right to use each submission in the future. The current implementation of the project works only for assignments that have topics assigned to them. This needs to be enhanced to include assignments that do not have associated topics as well. Another change that needs to be brought about is that the view_publishing_rights needs to be refactored and moved to the participants controller. &lt;br /&gt;
* '''WI-4:''' The methods slotAvailable? implemented in the sign_up_sheet_controller.rb needs to be removed from the controller. The methods should only exist in the corresponding model.&lt;br /&gt;
* '''WI-5:''' Method other_confirmed_topic_for_user is only referenced by the method waitlist_teams. The method wait_list_teams is not referenced anywhere. These methods need to be removed if it is confirmed that they are not used anywhere else.&lt;br /&gt;
* '''WI-6:''' Expertiza provides a functionality to import topics from a file(.csv or .txt). This feature is currently not tested. Test the functionality of this feature and fix it if broken. Another change that needs to be brought about is that the current implementation requires that each row of the imported file needs to have four columns. However the fourth column which represents &amp;quot;category&amp;quot; is not mandatory and it should be possible to import a document which does not include values for this column.&lt;br /&gt;
* '''WI-7:''' Add Rspec testcases to test the changes implemented above.&lt;br /&gt;
== Files Modified in this Project ==&lt;br /&gt;
The following files were modified for this project.&lt;br /&gt;
* app/controllers/participants_controller.rb&lt;br /&gt;
* app/controllers/sign_up_sheet_controller.rb&lt;br /&gt;
* app/models/sign_up_topic.rb&lt;br /&gt;
* app/models/signed_up_team.rb&lt;br /&gt;
* app/models/team.rb&lt;br /&gt;
* app/models/waitlist.rb&lt;br /&gt;
* app/views/participants/view_publishing_rights.html.erb&lt;br /&gt;
* app/views/sign_up_sheet/list.html.erb&lt;br /&gt;
* app/views/sign_up_sheet/show_team.html.erb&lt;br /&gt;
* app/views/sign_up_sheet/view_publishing_rights.html.erb&lt;br /&gt;
* app/views/tree_display/actions/_assignments_actions.html.erb&lt;br /&gt;
* app/helpers/import_topics_helper.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* config/routes.rb&lt;br /&gt;
* spec/features/instructor_interface_spec.rb&lt;br /&gt;
* spec/features/team_creation_spec.rb&lt;br /&gt;
== Solutions implemented and Delivered ==&lt;br /&gt;
=== WI-1: ===&lt;br /&gt;
For this work item the following files were modified:&lt;br /&gt;
'''''app/controllers/sign_up_sheet_controller.rb:''''' &lt;br /&gt;
In this file the method ad_info is defined. This method was defined using sql query to provide its results. To change this method in such a way that it uses active record associations changes needed to be made to the function as shown below. Additionally since the new implementation returns a list of hashes the way in which this result is accessed in show_team method was also changed to accommodate this change.&lt;br /&gt;
&lt;br /&gt;
'''''Original Code:'''''&lt;br /&gt;
  def ad_info(assignment_id, topic_id)&lt;br /&gt;
    query = &amp;quot;select t.id as team_id,t.comments_for_advertisement,t.name,su.assignment_id, t.advertise_for_partner from teams t, signed_up_teams s,sign_up_topics su &amp;quot;+&lt;br /&gt;
        &amp;quot;where s.topic_id='&amp;quot;+topic_id.to_s+&amp;quot;' and s.team_id=t.id and s.topic_id = su.id;    &amp;quot;&lt;br /&gt;
    SignUpTopic.find_by_sql(query)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''''Modified Code:'''''&lt;br /&gt;
  def ad_info(assignment_id, topic_id)&lt;br /&gt;
    # List that contains individual result object&lt;br /&gt;
    @result_list = []&lt;br /&gt;
    # Get the results&lt;br /&gt;
    @results = SignedUpTeam.where(&amp;quot;topic_id = ?&amp;quot;, &amp;quot;#{topic_id}&amp;quot;)&lt;br /&gt;
    # Iterate through the results of the query and get the required attributes&lt;br /&gt;
    @results.each do |result| &lt;br /&gt;
      team = result.team&lt;br /&gt;
      topic = result.topic&lt;br /&gt;
      resultMap = {}&lt;br /&gt;
      resultMap[:team_id] = team.id&lt;br /&gt;
      resultMap[:comments_for_advertisement] = team.comments_for_advertisement&lt;br /&gt;
      resultMap[:name] = team.name&lt;br /&gt;
      resultMap[:assignment_id] = topic.assignment_id&lt;br /&gt;
      resultMap[:advertise_for_partner] = team.advertise_for_partner&lt;br /&gt;
      # Append to the list&lt;br /&gt;
      @result_list.append(resultMap)&lt;br /&gt;
    end&lt;br /&gt;
    @result_list&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Additionally changes were also required in the models signed_up_team.rb and team.rb. This was because these associations were required to fetch required data using active record associations. The following changes were made to the files:&lt;br /&gt;
&lt;br /&gt;
'''''app/models/signed_up_team.rb:'''''&lt;br /&gt;
  class SignedUpTeam &amp;lt; ActiveRecord::Base&lt;br /&gt;
    belongs_to :topic, :class_name =&amp;gt; 'SignUpTopic'&lt;br /&gt;
    belongs_to :team, :class_name =&amp;gt; 'Team' #Added this association between SignedUpTeam and Team.&lt;br /&gt;
&lt;br /&gt;
'''''app/models/team.rb'''''&lt;br /&gt;
  class Team &amp;lt; ActiveRecord::Base&lt;br /&gt;
    has_many :teams_users, :dependent =&amp;gt; :destroy&lt;br /&gt;
    has_many :users, :through =&amp;gt; :teams_users&lt;br /&gt;
    has_many :join_team_requests&lt;br /&gt;
    has_one :team_node,:foreign_key =&amp;gt; :node_object_id,:dependent =&amp;gt; :destroy&lt;br /&gt;
    has_many :bids, :dependent =&amp;gt; :destroy&lt;br /&gt;
    has_many :signed_up_teams #Added this association between Team and SignedUpTeam.&lt;br /&gt;
&lt;br /&gt;
=== WI-2: ===&lt;br /&gt;
For this work item the file ''app/controllers/sign_up_sheet_controller.rb'' was modified. After performing a code-analysis it was concluded that the method ''add_default_microtask'' was not referenced from any other part of the project. Hence it was safely removed.&lt;br /&gt;
&lt;br /&gt;
=== WI-3: ===&lt;br /&gt;
The first part of this task is it enable the ''view_publishing_rights'' view to all the assignments. When logged in as an instructor, (s)he can go to the list of assignments by navigating through ''Manage &amp;gt; Assignments''. Here, only the assignments which have topics associated with them have the icon to go to the ''view_publishing_rights'' page. This icon should be available to all the assignments. This view of the assignments/courses is known as the ''tree_display''. The part of the code that made sure that only the assignments with topics have this icon is in ''app/assets/javascripts/tree_display.jsx''.&lt;br /&gt;
  if (this.props.is_available) {&lt;br /&gt;
    ...&lt;br /&gt;
    if (this. if (this.props.has_topic) {&lt;br /&gt;
      moreContent.push(&lt;br /&gt;
        &amp;lt;span&amp;gt;&lt;br /&gt;
          &amp;lt;a title=&amp;quot;View publishing rights&amp;quot; href={&amp;quot;/sign_up_sheet/view_publishing_rights?id=&amp;quot;+(parseInt(this.props.id)/2).toString()}&amp;gt;&lt;br /&gt;
            &amp;lt;img src=&amp;quot;/assets/tree_view/view-publish-rights-24.png&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;/span&amp;gt;&lt;br /&gt;
      )&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Here we see that the code that adds the icon to the content if two conditions are met. To get the icon for all the assignments, the change to made is pretty simple. Move the code outside of the two ''if'' conditions.&lt;br /&gt;
  if (this.props.is_available) {&lt;br /&gt;
    ...&lt;br /&gt;
    if (this. if (this.props.has_topic) {&lt;br /&gt;
      // Move it outside these ifs&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  moreContent.push(&lt;br /&gt;
    &amp;lt;span&amp;gt;&lt;br /&gt;
      &amp;lt;a title=&amp;quot;View publishing rights&amp;quot; href={&amp;quot;/sign_up_sheet/view_publishing_rights?id=&amp;quot;+(parseInt(this.props.id)/2).toString()}&amp;gt;&lt;br /&gt;
        &amp;lt;img src=&amp;quot;/assets/tree_view/view-publish-rights-24.png&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;/span&amp;gt;&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
All the business logic that will be used to display content in the ''view_publishing_rights.html.erb'' is in the ''sign_up_sheet_controller.rb''. Logically speaking, this should be in the ''participants_controller.rb'', since we are taking about the publishing rights provided by the ''participants'' of the assignment. The next part of the tasks involves moving the ''view_publishing_rights'' method to the ''participants_controller.rb''. &lt;br /&gt;
&lt;br /&gt;
'''''sign_up_sheet_controller.rb'''''&lt;br /&gt;
  def view_publishing_rights&lt;br /&gt;
    load_add_signup_topics(params[:id])&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  def load_add_signup_topics(assignment_id)&lt;br /&gt;
    @id = assignment_id&lt;br /&gt;
    @sign_up_topics = SignUpTopic.where( ['assignment_id = ?', assignment_id])&lt;br /&gt;
    @slots_filled = SignUpTopic.find_slots_filled(assignment_id)&lt;br /&gt;
    @slots_waitlisted = SignUpTopic.find_slots_waitlisted(assignment_id)&lt;br /&gt;
  &lt;br /&gt;
    @assignment = Assignment.find(assignment_id)&lt;br /&gt;
    #ACS Removed the if condition (and corresponding else) which differentiate assignments as team and individual assignments&lt;br /&gt;
    # to treat all assignments as team assignments&lt;br /&gt;
    #Though called participants, @participants are actually records in signed_up_teams table, which&lt;br /&gt;
    #is a mapping table between teams and topics (waitlisted recored are also counted)&lt;br /&gt;
    @participants = SignedUpTeam.find_team_participants(assignment_id)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
''view_publishing_rights'' then calls the ''load_add_signup_topics'' method. In that, a lot of attributes are set to be used in the view. But in reality, the view just made use of the ''@sign_up_topics'' and ''@assignment''. But the ''load_add_signup_topics'' is used in multiple places within this controller, and to cater for the needs of all those views, a lot of extra attributes are set. In other words, the method is doing more than one thing. Also, the two relevant attributes to be used in the ''view_publishing_rights'' views are not set up ideally. Only those assignments that have topics can be shown in the view. This should be changed so that all assignments should show up, because a ''participant'' can be in any type of assignment, and this view is for viewing the publishing rights that the participant has provided. So, by using ''@sign_up_topics&amp;quot;, the scope is limited to just the assignments with topics in them. &lt;br /&gt;
So, apart from moving the method to the ''participant_controller.rb'', the following code was added so that the participants of any type of assignment can be viewed.&lt;br /&gt;
&lt;br /&gt;
'''''Original code''''' (what was in place and moved, but did not work as expected)&lt;br /&gt;
  def view_publishing_rights&lt;br /&gt;
    @sign_up_topics = SignUpTopic.where( ['assignment_id = ?', assignment_id])&lt;br /&gt;
    @assignment = Assignment.find(assignment_id)&lt;br /&gt;
  end&lt;br /&gt;
'''''Modified code'''''&lt;br /&gt;
  def view_publishing_rights&lt;br /&gt;
    # Get the assignment ID from the params&lt;br /&gt;
    assignment_id = params[:id]&lt;br /&gt;
  &lt;br /&gt;
    # Get the assignment object for the above ID and set the @assignment_name object for the view&lt;br /&gt;
    assignment = Assignment.find(assignment_id)&lt;br /&gt;
    @assignment_name = assignment.name&lt;br /&gt;
  &lt;br /&gt;
    # Initially set to false, will be true if the assignment has any topics&lt;br /&gt;
    @has_topics = false&lt;br /&gt;
  &lt;br /&gt;
    # Attribute that contains the list of the teams and their info related to this assignment&lt;br /&gt;
    @teams_info = []&lt;br /&gt;
  &lt;br /&gt;
    # Get all the teams that work on the assignment with ID assignment_id&lt;br /&gt;
    teams = Team.find_by_sql([&amp;quot;select * from teams where parent_id = ?&amp;quot;, assignment_id])&lt;br /&gt;
  &lt;br /&gt;
    # For each of the teams, do&lt;br /&gt;
    teams.each do |team|&lt;br /&gt;
      team_info = {}&lt;br /&gt;
      # Set the team name&lt;br /&gt;
      team_info[:name] = team.name&lt;br /&gt;
      # List that hold the details of the users in the team&lt;br /&gt;
      users = []&lt;br /&gt;
      # For each of the users, do&lt;br /&gt;
      team.users.each do |team_user|       &lt;br /&gt;
        # Append the user info to the users list&lt;br /&gt;
        users.append(get_user_info(team_user, assignment))&lt;br /&gt;
      end&lt;br /&gt;
      # Append the users list to the team_info object&lt;br /&gt;
      team_info[:users] = users  &lt;br /&gt;
  &lt;br /&gt;
      # Get the signup topics for the assignment&lt;br /&gt;
      @has_topics = get_signup_topics_for_assignment(assignment_id, team_info, team.id)   &lt;br /&gt;
  &lt;br /&gt;
      # Choose only those teams that have signed up for topics&lt;br /&gt;
      team_without_topic = !SignedUpTeam.where([&amp;quot;team_id = ?&amp;quot;, team.id]).any?&lt;br /&gt;
      if @has_topics &amp;amp;&amp;amp; team_without_topic&lt;br /&gt;
        next&lt;br /&gt;
      end&lt;br /&gt;
      &lt;br /&gt;
      # Append the hashmap to the list of hashmaps&lt;br /&gt;
      @teams_info.append(team_info)&lt;br /&gt;
    end&lt;br /&gt;
    @teams_info = @teams_info.sort_by {|hashmap| [hashmap[:topic_id] ? 0 :1,hashmap[:topic_id] || 0 ] }&lt;br /&gt;
  &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The final part of this task was to move the corresponding view to the ''views/participants''&lt;br /&gt;
&lt;br /&gt;
'''''views/sign_up_sheet/view_publishing_rights.html.erb'''''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;h1&amp;gt;Publishing rights for &amp;lt;%= @assignment.name %&amp;gt; assignment&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;% if flash[:notice] %&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;flash_note&amp;quot;&amp;gt;&amp;lt;%= flash[:notice] %&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;% if @sign_up_topics.any? %&amp;gt;&lt;br /&gt;
    &amp;lt;table class=&amp;quot;general&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;th width=&amp;quot;5%&amp;quot; rowspan=&amp;quot;2&amp;quot;&amp;gt;Topic #&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th width=&amp;quot;40&amp;quot; rowspan=&amp;quot;2&amp;quot;&amp;gt;Topic name(s)&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th width=&amp;quot;20%&amp;quot; rowspan=&amp;quot;2&amp;quot;&amp;gt;Team name&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th width=&amp;quot;35%&amp;quot; colspan=&amp;quot;4&amp;quot;&amp;gt;Participant&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;Fullname&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;Publish Rights&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;Verified&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
      &amp;lt;% @sign_up_topics.each_with_index do |topic, i| %&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;&amp;lt;%= topic.topic_identifier %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;&amp;lt;%= render :partial =&amp;gt; 'topic_names', :locals =&amp;gt; {:i =&amp;gt; i, :topic =&amp;gt; topic} %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;th colspan=&amp;lt;%= (@assignment.team_assignment? ? &amp;quot;5&amp;quot; : &amp;quot;4&amp;quot;) %&amp;gt;&amp;gt;&amp;amp;nbsp;&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
        &amp;lt;% if (@assignment.participants.size &amp;gt; 0)&lt;br /&gt;
             for signed_up_team in topic.signed_up_teams&lt;br /&gt;
               #ACS Find the user(s) signed up for a topic&lt;br /&gt;
               # removed code that handles team and individual assignments differently&lt;br /&gt;
               # An unknown bug causes teams to disappear. Don't crash if this happens&lt;br /&gt;
               team = Team.find(signed_up_team.team_id)&lt;br /&gt;
               users = []&lt;br /&gt;
               users = team.users if team&lt;br /&gt;
               showed_team = false&lt;br /&gt;
               for user in users&lt;br /&gt;
             %&amp;gt;&lt;br /&gt;
           &amp;lt;tr&amp;gt;&lt;br /&gt;
             &amp;lt;th&amp;gt;&amp;amp;nbsp;&amp;lt;/th&amp;gt;&lt;br /&gt;
             &amp;lt;th&amp;gt;&amp;amp;nbsp;&amp;lt;/th&amp;gt;&lt;br /&gt;
             &amp;lt;%   if !showed_team&lt;br /&gt;
           %&amp;gt;&lt;br /&gt;
         &amp;lt;td align=&amp;quot;center&amp;quot; rowspan=&amp;quot;&amp;lt;%= team.users.size %&amp;gt;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%= team.name %&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;% end %&amp;gt;&lt;br /&gt;
       &amp;lt;% showed_team = true %&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%=user.name%&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%=user.fullname%&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;%&lt;br /&gt;
           permissionGranted = false&lt;br /&gt;
       hasSignature = false&lt;br /&gt;
       signatureValid = false&lt;br /&gt;
       @assignment.participants.each do |participant|&lt;br /&gt;
         if (user.id == participant.user.id)&lt;br /&gt;
           permissionGranted = participant.permission_granted?&lt;br /&gt;
         end&lt;br /&gt;
       end&lt;br /&gt;
     %&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&amp;lt;%= (permissionGranted ? &amp;quot;granted&amp;quot; : &amp;quot;denied&amp;quot;) %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&lt;br /&gt;
     &amp;lt;% if (permissionGranted &amp;amp;&amp;amp; hasSignature &amp;amp;&amp;amp; signatureValid) %&amp;gt;&lt;br /&gt;
       &amp;lt;img src=&amp;quot;/assets/Check-icon.png&amp;quot; title=&amp;quot;verified with digitigal signature&amp;quot; alt=&amp;quot;verified&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;% else %&amp;gt;&lt;br /&gt;
       &amp;lt;img src=&amp;quot;/assets/delete_icon.png&amp;quot; title=&amp;quot;no digitigal signature&amp;quot; alt=&amp;quot;unverified&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;% end %&amp;gt;&lt;br /&gt;
     &amp;amp;nbsp;&lt;br /&gt;
   &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
The above view had a lot of controller related logic in it. Since it is not the best of practices to have such logic in the ''view'' code, the changes shown above in the ''participants_controller.rb'' had to be made, so that the ''view'' code is just responsible for ''displaying'' the information rather than computing it as well.&lt;br /&gt;
&lt;br /&gt;
'''''views/participants/view_publishing_rights.html.erb'''''&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;h1&amp;gt;Publishing rights for &amp;lt;%= @assignment_name %&amp;gt; assignment&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;% if flash[:notice] %&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;flash_note&amp;quot;&amp;gt;&amp;lt;%= flash[:notice] %&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;table class=&amp;quot;general&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
          &amp;lt;% if @has_topics %&amp;gt;&lt;br /&gt;
              &amp;lt;th width=&amp;quot;5%&amp;quot; rowspan=&amp;quot;2&amp;quot;&amp;gt;Topic #&amp;lt;/th&amp;gt;&lt;br /&gt;
              &amp;lt;th width=&amp;quot;40&amp;quot; rowspan=&amp;quot;2&amp;quot;&amp;gt;Topic name(s)&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;% end %&amp;gt;&lt;br /&gt;
          &amp;lt;th width=&amp;quot;20%&amp;quot; rowspan=&amp;quot;2&amp;quot;&amp;gt;Team name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;th width=&amp;quot;35%&amp;quot; colspan=&amp;quot;4&amp;quot;&amp;gt;Participant&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
          &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;th&amp;gt;Fullname&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;th&amp;gt;Publish Rights&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;th&amp;gt;Verified&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
      &amp;lt;% @teams_info.each do |team_info| %&amp;gt;&lt;br /&gt;
          &amp;lt;% &lt;br /&gt;
              users = team_info[:users]&lt;br /&gt;
              num_students = users.size &lt;br /&gt;
          %&amp;gt;        &lt;br /&gt;
          &amp;lt;tr&amp;gt;&lt;br /&gt;
              &amp;lt;% if @has_topics %&amp;gt;&lt;br /&gt;
                  &amp;lt;td rowspan=&amp;quot;&amp;lt;%= num_students %&amp;gt;&amp;quot;&amp;gt;&amp;lt;%= team_info[:topic_id] %&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td rowspan=&amp;quot;&amp;lt;%= num_students %&amp;gt;&amp;quot;&amp;gt;&amp;lt;%= team_info[:topic_name] %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;% end %&amp;gt; &lt;br /&gt;
              &amp;lt;td align=&amp;quot;center&amp;quot; rowspan=&amp;quot;&amp;lt;%= num_students %&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;b&amp;gt;&amp;lt;%= team_info[:name] %&amp;gt;&amp;lt;/b&amp;gt; &lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;% users.each do |user| %&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt; &amp;lt;%=user[:name]%&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt; &amp;lt;%=user[:fullname]%&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt; &amp;lt;%=user[:pub_rights]%&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;% if user[:verfied] %&amp;gt;&lt;br /&gt;
                          &amp;lt;img src=&amp;quot;/assets/Check-icon.png&amp;quot; title=&amp;quot;verified with digitigal signature&amp;quot; alt=&amp;quot;verified&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;% else %&amp;gt;&lt;br /&gt;
                          &amp;lt;img src=&amp;quot;/assets/delete_icon.png&amp;quot; title=&amp;quot;no digitigal signature&amp;quot; alt=&amp;quot;unverified&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;% end %&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
              &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
=== WI-4: ===&lt;br /&gt;
For this work-item the slotAvailable? method was removed from the file ''app/controllers/sign_up_sheet_controller.rb''. This method is already implemented in the model ''app/models/sign_up_topic.rb''. &lt;br /&gt;
&lt;br /&gt;
=== WI-5: ===&lt;br /&gt;
For this work item the file ''app/controllers/sign_up_sheet_controller.rb'' was modified. After performing a code-analysis it was concluded that the method ''other_confirmed_topic_for_user'' was not referenced from any other part of the project. Hence it was safely removed.&lt;br /&gt;
&lt;br /&gt;
=== WI-6: ===&lt;br /&gt;
For this work-item the files that were modified included ''app/helpers/import_topics_helper.rb''. In this file one thing that has been changed is the variable used to represent the row array. This was done in order to remove any confusion. The array represents the individual columns of a particular row. Additionally since the category column is an optional column a check has been added to verify its existence before assigning it to the attributes hash.&lt;br /&gt;
'''''Original Code:'''''&lt;br /&gt;
  def self.define_attributes(row)&lt;br /&gt;
    attributes = {}&lt;br /&gt;
    attributes[&amp;quot;topic_identifier&amp;quot;] = row[0].strip&lt;br /&gt;
    attributes[&amp;quot;topic_name&amp;quot;] = row[1].strip&lt;br /&gt;
    attributes[&amp;quot;max_choosers&amp;quot;] = row[2]&lt;br /&gt;
    attributes[&amp;quot;category&amp;quot;] = row[3].strip&lt;br /&gt;
    attributes&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''''Modified Code:'''''&lt;br /&gt;
  def self.define_attributes(columns)&lt;br /&gt;
    attributes = {}&lt;br /&gt;
    attributes[&amp;quot;topic_identifier&amp;quot;] = columns[0].strip&lt;br /&gt;
    attributes[&amp;quot;topic_name&amp;quot;] = columns[1].strip&lt;br /&gt;
    attributes[&amp;quot;max_choosers&amp;quot;] = columns[2].strip&lt;br /&gt;
    if columns.length &amp;gt; 3&lt;br /&gt;
      attributes[&amp;quot;category&amp;quot;] = columns[3].strip &lt;br /&gt;
    end&lt;br /&gt;
    attributes&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Another file that was modified for this work-item is ''app/models/sign_up_topic.rb''. This was also modified to remove the ambiguity caused by the variable name ''row''. This was changed to ''columns''. Additionally the original check which verifies whether the number of columns in each row is 4 was modified so that it also works if the imported file has only 3 columns.&lt;br /&gt;
&lt;br /&gt;
'''''Original Code:'''''&lt;br /&gt;
  def self.import(row,session,id = nil)&lt;br /&gt;
    if row.length != 4&lt;br /&gt;
      raise ArgumentError, &amp;quot;CSV File expects the format: Topic identifier, Topic name, Max choosers, Topic Category&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    topic = SignUpTopic.where(topic_name: row[1], assignment_id: session[:assignment_id]).first&lt;br /&gt;
    if topic == nil&lt;br /&gt;
      attributes = ImportTopicsHelper::define_attributes(row)&lt;br /&gt;
      ImportTopicsHelper::create_new_sign_up_topic(attributes,session)&lt;br /&gt;
    else&lt;br /&gt;
      topic.max_choosers = row[2]&lt;br /&gt;
      topic.topic_identifier = row[0]&lt;br /&gt;
      #topic.assignment_id = session[:assignment_id]&lt;br /&gt;
      topic.save&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
'''''Modified Code:'''''&lt;br /&gt;
  def self.import(columns,session,id = nil)&lt;br /&gt;
    if columns.length &amp;lt; 3&lt;br /&gt;
      raise ArgumentError, &amp;quot;CSV File expects the format: Topic identifier, Topic name, Max choosers, Topic Category (optional)&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    topic = SignUpTopic.where(topic_name: columns[1], assignment_id: session[:assignment_id]).first&lt;br /&gt;
    if topic == nil&lt;br /&gt;
      attributes = ImportTopicsHelper::define_attributes(columns)&lt;br /&gt;
      ImportTopicsHelper::create_new_sign_up_topic(attributes,session)&lt;br /&gt;
    else&lt;br /&gt;
      topic.max_choosers = columns[2]&lt;br /&gt;
      topic.topic_identifier = columns[0]&lt;br /&gt;
      #topic.assignment_id = session[:assignment_id]&lt;br /&gt;
      topic.save&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
=== WI-7: ===&lt;br /&gt;
We have added Rspec test cases to check functionality of import feature and view_publishing_rights view. These Rspec tests are present in &amp;quot;spec/features/instructor_interface_spec.rb&amp;quot;. The tests use csv files that are present in &amp;quot;spec/features/assignment_topic_csvs/&amp;quot; folder. &lt;br /&gt;
'''View Publishing Rights''': This test case checks whether view_publishing_rights page has column headers &amp;quot;Topic name(s)&amp;quot; and &amp;quot;Topic #&amp;quot;. Since an assignment created without a topic does not have topic name and topic id. The test case will fail if the page contains topic name and topic id.&lt;br /&gt;
  describe &amp;quot;View Publishing Rights&amp;quot; do&lt;br /&gt;
    it 'should display teams for assignment without topic' do&lt;br /&gt;
      login_as(&amp;quot;instructor6&amp;quot;)&lt;br /&gt;
      visit '/participants/view_publishing_rights?id=1'&lt;br /&gt;
      expect(page).to have_content('Team name')&lt;br /&gt;
      expect(page).should_not have_content('Topic name(s)')&lt;br /&gt;
      expect(page).should_not have_content('Topic #')&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''Import tests for assignment topics''': There are 4 tests written under this category.They check the topics import feature. The file which is to be uploaded should contain 3 compulsory fields and the fourth field is optional. The tests perform the following tasks: &lt;br /&gt;
'''Check the import pass when the import file has 3 columns.'''&lt;br /&gt;
  describe &amp;quot;Import tests for assignment topics&amp;quot; do&lt;br /&gt;
    it 'should be valid file with 3 columns' do&lt;br /&gt;
      login_as(&amp;quot;instructor6&amp;quot;)&lt;br /&gt;
      visit '/assignments/1/edit'&lt;br /&gt;
      click_link &amp;quot;Topics&amp;quot;&lt;br /&gt;
      click_link &amp;quot;Import topics&amp;quot;&lt;br /&gt;
      file_path=Rails.root+&amp;quot;spec/features/assignment_topic_csvs/3-col-valid_topics_import.csv&amp;quot;&lt;br /&gt;
      attach_file('file',file_path)&lt;br /&gt;
      click_button &amp;quot;Import&amp;quot;&lt;br /&gt;
      click_link &amp;quot;Topics&amp;quot;&lt;br /&gt;
      expect(page).to have_content('expertiza')&lt;br /&gt;
      expect(page).to have_content('mozilla')&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
'''Check the import pass when the import file has 3 or 4 columns.'''&lt;br /&gt;
    it 'should be a valid file with 3 or more columns' do&lt;br /&gt;
      login_as(&amp;quot;instructor6&amp;quot;)&lt;br /&gt;
      visit '/assignments/1/edit'&lt;br /&gt;
      click_link &amp;quot;Topics&amp;quot;&lt;br /&gt;
      click_link &amp;quot;Import topics&amp;quot;&lt;br /&gt;
      file_path=Rails.root+&amp;quot;spec/features/assignment_topic_csvs/3or4-col-valid_topics_import.csv&amp;quot;&lt;br /&gt;
      attach_file('file',file_path)&lt;br /&gt;
      click_button &amp;quot;Import&amp;quot;&lt;br /&gt;
      click_link &amp;quot;Topics&amp;quot;&lt;br /&gt;
      expect(page).to have_content('capybara')&lt;br /&gt;
      expect(page).to have_content('cucumber')&lt;br /&gt;
    end&lt;br /&gt;
'''Check the import fail when the import file has 2 columns.'''&lt;br /&gt;
  it 'should be a invalid csv file' do&lt;br /&gt;
      login_as(&amp;quot;instructor6&amp;quot;)&lt;br /&gt;
      visit '/assignments/1/edit'&lt;br /&gt;
      click_link &amp;quot;Topics&amp;quot;&lt;br /&gt;
      click_link &amp;quot;Import topics&amp;quot;&lt;br /&gt;
      file_path=Rails.root+&amp;quot;spec/features/assignment_topic_csvs/invalid_topics_import.csv&amp;quot;&lt;br /&gt;
      attach_file('file',file_path)&lt;br /&gt;
      click_button &amp;quot;Import&amp;quot;&lt;br /&gt;
      click_link &amp;quot;Topics&amp;quot;&lt;br /&gt;
      expect(page).should_not have_content('airtable')&lt;br /&gt;
      expect(page).should_not have_content('devise')&lt;br /&gt;
    end&lt;br /&gt;
'''Check the import fail when the import file doesn't have valid data.'''&lt;br /&gt;
  it 'should be an random text file' do&lt;br /&gt;
      login_as(&amp;quot;instructor6&amp;quot;)&lt;br /&gt;
      visit '/assignments/1/edit'&lt;br /&gt;
      click_link &amp;quot;Topics&amp;quot;&lt;br /&gt;
      click_link &amp;quot;Import topics&amp;quot;&lt;br /&gt;
      file_path=Rails.root+&amp;quot;spec/features/assignment_topic_csvs/random.txt&amp;quot;&lt;br /&gt;
      attach_file('file',file_path)&lt;br /&gt;
      click_button &amp;quot;Import&amp;quot;&lt;br /&gt;
      click_link &amp;quot;Topics&amp;quot;&lt;br /&gt;
      expect(page).should_not have_content('this is a random file which should fail')&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
== Testing from the UI ==&lt;br /&gt;
=== UI Testing ===&lt;br /&gt;
Since majority of the tasks for this assignment was code refactoring, only a few of these can be seen and tested through the UI. Follow the instructions below to check the:&lt;br /&gt;
* view_publishing_rights&lt;br /&gt;
# Login as a instructor (better to log in as an instructor that has assignments in the tree_desiplay view. For eg. instructor6)&lt;br /&gt;
# Navigate 'Manage &amp;gt; Assignments'&lt;br /&gt;
# Against each assignment in the table, an icon for 'view_publishing_rights' can be seen&lt;br /&gt;
# Click on the 'view_publishing_rights' icon against any assignment&lt;br /&gt;
# If the assignment has topics (eg. Wikipedia contribution), the table in the view will have 'Topic Name' and 'Topic #' displayed.&lt;br /&gt;
# If the assignment does not have topics, the table will not have the above two columns &lt;br /&gt;
&lt;br /&gt;
* Topics import feature for an assignment&lt;br /&gt;
# In the tree_display view of assignments, click on the edit icon. (Or while creating a new assignment)&lt;br /&gt;
# Click on 'Topics' tab&lt;br /&gt;
# Click on 'Import topics', towards the bottom of the page&lt;br /&gt;
# Select a valid CSV file. The first, second and third columns should be the topic identifier, topic name and number of slots available, respectively. Note that the topic identifier should be more than 10 characters long, else import will fail. The CSV can have an optional 4th column for 'category' but this is displayed in the UI&lt;br /&gt;
# In case of invalid CSV import, an error message will be shown.&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Jitesh&amp;diff=101301</id>
		<title>User:Jitesh</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Jitesh&amp;diff=101301"/>
		<updated>2016-03-24T02:53:21Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CSC/ECE 517 Spring 2016 - Expertiza E1613 =&lt;br /&gt;
This wiki page is for the description of changes made according to the specification of E1613 OSS assignment for Spring 2016.&lt;br /&gt;
&lt;br /&gt;
== Peer Review Information ==&lt;br /&gt;
For testing the changes made, the following credentials are recommended:&lt;br /&gt;
* Instructor Login: '''username:''' ''instructor6'' '''password:''' ''password''&lt;br /&gt;
* Student Login: '''username:''' ''student11'' '''password:''' ''password''&lt;br /&gt;
* Student Login: '''username:''' ''student1862'' '''password:''' ''password''&lt;br /&gt;
The above users are suggested for testing because there are a few users which would lead to exceptions upon login for unknown reasons completely unrelated to our work.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
=== Background ===&lt;br /&gt;
Expertiza is a web portal which can be used to manage assignments related to a course. It provides a platform to view assignments, manage teams, select topics and work improvement through anonymous peer reviews. For the instructor it provides complete control to create assignments, view reviews submitted and provide feedback. The instructors also have an option to publish the students work based on the rights provided by the student.&lt;br /&gt;
&lt;br /&gt;
=== Problem Statement ===&lt;br /&gt;
The following were the tasks identified to accomplish through this project. These tasks are part of the sign_up_sheet_controller.rb and sign_up_topic.rb&lt;br /&gt;
* '''WI-1:''' Method ad_info in the sign_up_sheet_controller.rb users sql query to retrieve the desired objects. This needs to be changed so that action records are used instead and a hash/array of the required object is returned.&lt;br /&gt;
* '''WI-2:''' Delete the method add_default_microtask after confirming that there is no reference to the method.&lt;br /&gt;
* '''WI-3:''' The view_publishing_rights method brings up a webpage to the instructor on whether the course staff has been granted or denied the right to use each submission in the future. The current implementation of the project works only for assignments that have topics assigned to them. This needs to be enhanced to include assignments that do not have associated topics as well. Another change that needs to be brought about is that the view_publishing_rights needs to be refactored and moved to the participants controller. &lt;br /&gt;
* '''WI-4:''' The methods slotAvailable? implemented in the sign_up_sheet_controller.rb needs to be removed from the controller. The methods should only exist in the corresponding model.&lt;br /&gt;
* '''WI-5:''' Method other_confirmed_topic_for_user is only referenced by the method waitlist_teams. The method wait_list_teams is not referenced anywhere. These methods need to be removed if it is confirmed that they are not used anywhere else.&lt;br /&gt;
* '''WI-6:''' Expertiza provides a functionality to import topics from a file(.csv or .txt). This feature is currently not tested. Test the functionality of this feature and fix it if broken. Another change that needs to be brought about is that the current implementation requires that each row of the imported file needs to have four columns. However the fourth column which represents &amp;quot;category&amp;quot; is not mandatory and it should be possible to import a document which does not include values for this column.&lt;br /&gt;
* '''WI-7:''' Add Rspec testcases to test the changes implemented above.&lt;br /&gt;
=== Files Modified in this Project ===&lt;br /&gt;
The following files were modified for this project.&lt;br /&gt;
* app/controllers/participants_controller.rb&lt;br /&gt;
* app/controllers/sign_up_sheet_controller.rb&lt;br /&gt;
* app/models/sign_up_topic.rb&lt;br /&gt;
* app/models/signed_up_team.rb&lt;br /&gt;
* app/models/team.rb&lt;br /&gt;
* app/models/waitlist.rb&lt;br /&gt;
* app/views/participants/view_publishing_rights.html.erb&lt;br /&gt;
* app/views/sign_up_sheet/list.html.erb&lt;br /&gt;
* app/views/sign_up_sheet/show_team.html.erb&lt;br /&gt;
* app/views/sign_up_sheet/view_publishing_rights.html.erb&lt;br /&gt;
* app/views/tree_display/actions/_assignments_actions.html.erb&lt;br /&gt;
* app/helpers/import_topics_helper.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* config/routes.rb&lt;br /&gt;
* spec/features/instructor_interface_spec.rb&lt;br /&gt;
* spec/features/team_creation_spec.rb&lt;br /&gt;
=== Solutions implemented and Delivered ===&lt;br /&gt;
* '''WI-1:''' For this work item the following files were modified:&lt;br /&gt;
&lt;br /&gt;
:'''''app/controllers/sign_up_sheet_controller.rb:''''' &lt;br /&gt;
:In this file the method ad_info is defined. This method was defined using sql query to provide its results. To change this method in such a way that it uses active record associations changes needed to be made to the function as shown below. Additionally since the new implementation returns a list of hashes the way in which this result is accessed in show_team method was also changed to accommodate this change.&lt;br /&gt;
&lt;br /&gt;
:'''''Original Code:'''''&lt;br /&gt;
  def ad_info(assignment_id, topic_id)&lt;br /&gt;
    query = &amp;quot;select t.id as team_id,t.comments_for_advertisement,t.name,su.assignment_id, t.advertise_for_partner from teams t, signed_up_teams s,sign_up_topics su &amp;quot;+&lt;br /&gt;
        &amp;quot;where s.topic_id='&amp;quot;+topic_id.to_s+&amp;quot;' and s.team_id=t.id and s.topic_id = su.id;    &amp;quot;&lt;br /&gt;
    SignUpTopic.find_by_sql(query)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
:'''''Modified Code:'''''&lt;br /&gt;
  def ad_info(assignment_id, topic_id)&lt;br /&gt;
    # List that contains individual result object&lt;br /&gt;
    @result_list = []&lt;br /&gt;
    # Get the results&lt;br /&gt;
    @results = SignedUpTeam.where(&amp;quot;topic_id = ?&amp;quot;, &amp;quot;#{topic_id}&amp;quot;)&lt;br /&gt;
    # Iterate through the results of the query and get the required attributes&lt;br /&gt;
    @results.each do |result| &lt;br /&gt;
      team = result.team&lt;br /&gt;
      topic = result.topic&lt;br /&gt;
      resultMap = {}&lt;br /&gt;
      resultMap[:team_id] = team.id&lt;br /&gt;
      resultMap[:comments_for_advertisement] = team.comments_for_advertisement&lt;br /&gt;
      resultMap[:name] = team.name&lt;br /&gt;
      resultMap[:assignment_id] = topic.assignment_id&lt;br /&gt;
      resultMap[:advertise_for_partner] = team.advertise_for_partner&lt;br /&gt;
      # Append to the list&lt;br /&gt;
      @result_list.append(resultMap)&lt;br /&gt;
    end&lt;br /&gt;
    @result_list&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
:Additionally changes were also required in the models signed_up_team.rb and team.rb. This was because these associations were required to fetch required data using active record associations. The following changes were made to the files:&lt;br /&gt;
&lt;br /&gt;
:'''''app/models/signed_up_team.rb:'''''&lt;br /&gt;
  class SignedUpTeam &amp;lt; ActiveRecord::Base&lt;br /&gt;
    belongs_to :topic, :class_name =&amp;gt; 'SignUpTopic'&lt;br /&gt;
    belongs_to :team, :class_name =&amp;gt; 'Team' #Added this association between SignedUpTeam and Team.&lt;br /&gt;
&lt;br /&gt;
:'''''app/models/team.rb'''''&lt;br /&gt;
  class Team &amp;lt; ActiveRecord::Base&lt;br /&gt;
    has_many :teams_users, :dependent =&amp;gt; :destroy&lt;br /&gt;
    has_many :users, :through =&amp;gt; :teams_users&lt;br /&gt;
    has_many :join_team_requests&lt;br /&gt;
    has_one :team_node,:foreign_key =&amp;gt; :node_object_id,:dependent =&amp;gt; :destroy&lt;br /&gt;
    has_many :bids, :dependent =&amp;gt; :destroy&lt;br /&gt;
    has_many :signed_up_teams #Added this association between Team and SignedUpTeam.&lt;br /&gt;
&lt;br /&gt;
* '''WI-2:''' For this work item the file ''app/controllers/sign_up_sheet_controller.rb'' was modified. After performing a code-analysis it was concluded that the method ''add_default_microtask'' was not referenced from any other part of the project. Hence it was safely removed.&lt;br /&gt;
&lt;br /&gt;
* '''WI-3:''' The first part of this task is it enable the ''view_publishing_rights'' view to all the assignments. When logged in as an instructor, (s)he can go to the list of assignments by navigating through ''Manage &amp;gt; Assignments''. Here, only the assignments which have topics associated with them have the icon to go to the ''view_publishing_rights'' page. This icon should be available to all the assignments. This view of the assignments/courses is known as the ''tree_display''. The part of the code that made sure that only the assignments with topics have this icon is in ''app/assets/javascripts/tree_display.jsx''.&lt;br /&gt;
  if (this.props.is_available) {&lt;br /&gt;
    ...&lt;br /&gt;
    if (this. if (this.props.has_topic) {&lt;br /&gt;
      moreContent.push(&lt;br /&gt;
        &amp;lt;span&amp;gt;&lt;br /&gt;
          &amp;lt;a title=&amp;quot;View publishing rights&amp;quot; href={&amp;quot;/sign_up_sheet/view_publishing_rights?id=&amp;quot;+(parseInt(this.props.id)/2).toString()}&amp;gt;&lt;br /&gt;
            &amp;lt;img src=&amp;quot;/assets/tree_view/view-publish-rights-24.png&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;/span&amp;gt;&lt;br /&gt;
      )&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
:Here we see that the code that adds the icon to the content if two conditions are met. To get the icon for all the assignments, the change to made is pretty simple. Move the code outside of the two ''if'' conditions.&lt;br /&gt;
  if (this.props.is_available) {&lt;br /&gt;
    ...&lt;br /&gt;
    if (this. if (this.props.has_topic) {&lt;br /&gt;
      // Move it outside these ifs&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  moreContent.push(&lt;br /&gt;
    &amp;lt;span&amp;gt;&lt;br /&gt;
      &amp;lt;a title=&amp;quot;View publishing rights&amp;quot; href={&amp;quot;/sign_up_sheet/view_publishing_rights?id=&amp;quot;+(parseInt(this.props.id)/2).toString()}&amp;gt;&lt;br /&gt;
        &amp;lt;img src=&amp;quot;/assets/tree_view/view-publish-rights-24.png&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;/span&amp;gt;&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
:All the business logic that will be used to display content in the ''view_publishing_rights.html.erb'' is in the ''sign_up_sheet_controller.rb''. Logically speaking, this should be in the ''participants_controller.rb'', since we are taking about the publishing rights provided by the ''participants'' of the assignment. The next part of the tasks involves moving the ''view_publishing_rights'' method to the ''participants_controller.rb''. &lt;br /&gt;
&lt;br /&gt;
:'''''sign_up_sheet_controller.rb'''''&lt;br /&gt;
  def view_publishing_rights&lt;br /&gt;
    load_add_signup_topics(params[:id])&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  def load_add_signup_topics(assignment_id)&lt;br /&gt;
    @id = assignment_id&lt;br /&gt;
    @sign_up_topics = SignUpTopic.where( ['assignment_id = ?', assignment_id])&lt;br /&gt;
    @slots_filled = SignUpTopic.find_slots_filled(assignment_id)&lt;br /&gt;
    @slots_waitlisted = SignUpTopic.find_slots_waitlisted(assignment_id)&lt;br /&gt;
  &lt;br /&gt;
    @assignment = Assignment.find(assignment_id)&lt;br /&gt;
    #ACS Removed the if condition (and corresponding else) which differentiate assignments as team and individual assignments&lt;br /&gt;
    # to treat all assignments as team assignments&lt;br /&gt;
    #Though called participants, @participants are actually records in signed_up_teams table, which&lt;br /&gt;
    #is a mapping table between teams and topics (waitlisted recored are also counted)&lt;br /&gt;
    @participants = SignedUpTeam.find_team_participants(assignment_id)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
:''view_publishing_rights'' then calls the ''load_add_signup_topics'' method. In that, a lot of attributes are set to be used in the view. But in reality, the view just made use of the ''@sign_up_topics'' and ''@assignment''. But the ''load_add_signup_topics'' is used in multiple places within this controller, and to cater for the needs of all those views, a lot of extra attributes are set. In other words, the method is doing more than one thing. Also, the two relevant attributes to be used in the ''view_publishing_rights'' views are not set up ideally. Only those assignments that have topics can be shown in the view. This should be changed so that all assignments should show up, because a ''participant'' can be in any type of assignment, and this view is for viewing the publishing rights that the participant has provided. So, by using ''@sign_up_topics&amp;quot;, the scope is limited to just the assignments with topics in them. &lt;br /&gt;
:So, apart from moving the method to the ''participant_controller.rb'', the following code was added so that the participants of any type of assignment can be viewed.&lt;br /&gt;
&lt;br /&gt;
:'''''Original code''''' (what was in place and moved, but did not work as expected)&lt;br /&gt;
  def view_publishing_rights&lt;br /&gt;
    @sign_up_topics = SignUpTopic.where( ['assignment_id = ?', assignment_id])&lt;br /&gt;
    @assignment = Assignment.find(assignment_id)&lt;br /&gt;
  end&lt;br /&gt;
:'''''Modified code'''''&lt;br /&gt;
  def view_publishing_rights&lt;br /&gt;
    # Get the assignment ID from the params&lt;br /&gt;
    assignment_id = params[:id]&lt;br /&gt;
  &lt;br /&gt;
    # Get the assignment object for the above ID and set the @assignment_name object for the view&lt;br /&gt;
    assignment = Assignment.find(assignment_id)&lt;br /&gt;
    @assignment_name = assignment.name&lt;br /&gt;
  &lt;br /&gt;
    # Initially set to false, will be true if the assignment has any topics&lt;br /&gt;
    @has_topics = false&lt;br /&gt;
  &lt;br /&gt;
    # Attribute that contains the list of the teams and their info related to this assignment&lt;br /&gt;
    @teams_info = []&lt;br /&gt;
  &lt;br /&gt;
    # Get all the teams that work on the assignment with ID assignment_id&lt;br /&gt;
    teams = Team.find_by_sql([&amp;quot;select * from teams where parent_id = ?&amp;quot;, assignment_id])&lt;br /&gt;
  &lt;br /&gt;
    # For each of the teams, do&lt;br /&gt;
    teams.each do |team|&lt;br /&gt;
      team_info = {}&lt;br /&gt;
      # Set the team name&lt;br /&gt;
      team_info[:name] = team.name&lt;br /&gt;
      # List that hold the details of the users in the team&lt;br /&gt;
      users = []&lt;br /&gt;
      # For each of the users, do&lt;br /&gt;
      team.users.each do |team_user|       &lt;br /&gt;
        # Append the user info to the users list&lt;br /&gt;
        users.append(get_user_info(team_user, assignment))&lt;br /&gt;
      end&lt;br /&gt;
      # Append the users list to the team_info object&lt;br /&gt;
      team_info[:users] = users  &lt;br /&gt;
  &lt;br /&gt;
      # Get the signup topics for the assignment&lt;br /&gt;
      @has_topics = get_signup_topics_for_assignment(assignment_id, team_info, team.id)   &lt;br /&gt;
  &lt;br /&gt;
      # Choose only those teams that have signed up for topics&lt;br /&gt;
      team_without_topic = !SignedUpTeam.where([&amp;quot;team_id = ?&amp;quot;, team.id]).any?&lt;br /&gt;
      if @has_topics &amp;amp;&amp;amp; team_without_topic&lt;br /&gt;
        next&lt;br /&gt;
      end&lt;br /&gt;
      &lt;br /&gt;
      # Append the hashmap to the list of hashmaps&lt;br /&gt;
      @teams_info.append(team_info)&lt;br /&gt;
    end&lt;br /&gt;
    @teams_info = @teams_info.sort_by {|hashmap| [hashmap[:topic_id] ? 0 :1,hashmap[:topic_id] || 0 ] }&lt;br /&gt;
  &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
:The final part of this task was to move the corresponding view to the ''views/participants''&lt;br /&gt;
&lt;br /&gt;
:'''''views/sign_up_sheet/view_publishing_rights.html.erb'''''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;h1&amp;gt;Publishing rights for &amp;lt;%= @assignment.name %&amp;gt; assignment&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;% if flash[:notice] %&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;flash_note&amp;quot;&amp;gt;&amp;lt;%= flash[:notice] %&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;% if @sign_up_topics.any? %&amp;gt;&lt;br /&gt;
    &amp;lt;table class=&amp;quot;general&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;th width=&amp;quot;5%&amp;quot; rowspan=&amp;quot;2&amp;quot;&amp;gt;Topic #&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th width=&amp;quot;40&amp;quot; rowspan=&amp;quot;2&amp;quot;&amp;gt;Topic name(s)&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th width=&amp;quot;20%&amp;quot; rowspan=&amp;quot;2&amp;quot;&amp;gt;Team name&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th width=&amp;quot;35%&amp;quot; colspan=&amp;quot;4&amp;quot;&amp;gt;Participant&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;Fullname&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;Publish Rights&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;Verified&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
      &amp;lt;% @sign_up_topics.each_with_index do |topic, i| %&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;&amp;lt;%= topic.topic_identifier %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;&amp;lt;%= render :partial =&amp;gt; 'topic_names', :locals =&amp;gt; {:i =&amp;gt; i, :topic =&amp;gt; topic} %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;th colspan=&amp;lt;%= (@assignment.team_assignment? ? &amp;quot;5&amp;quot; : &amp;quot;4&amp;quot;) %&amp;gt;&amp;gt;&amp;amp;nbsp;&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
        &amp;lt;% if (@assignment.participants.size &amp;gt; 0)&lt;br /&gt;
             for signed_up_team in topic.signed_up_teams&lt;br /&gt;
               #ACS Find the user(s) signed up for a topic&lt;br /&gt;
               # removed code that handles team and individual assignments differently&lt;br /&gt;
               # An unknown bug causes teams to disappear. Don't crash if this happens&lt;br /&gt;
               team = Team.find(signed_up_team.team_id)&lt;br /&gt;
               users = []&lt;br /&gt;
               users = team.users if team&lt;br /&gt;
               showed_team = false&lt;br /&gt;
               for user in users&lt;br /&gt;
             %&amp;gt;&lt;br /&gt;
           &amp;lt;tr&amp;gt;&lt;br /&gt;
             &amp;lt;th&amp;gt;&amp;amp;nbsp;&amp;lt;/th&amp;gt;&lt;br /&gt;
             &amp;lt;th&amp;gt;&amp;amp;nbsp;&amp;lt;/th&amp;gt;&lt;br /&gt;
             &amp;lt;%   if !showed_team&lt;br /&gt;
           %&amp;gt;&lt;br /&gt;
         &amp;lt;td align=&amp;quot;center&amp;quot; rowspan=&amp;quot;&amp;lt;%= team.users.size %&amp;gt;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%= team.name %&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;% end %&amp;gt;&lt;br /&gt;
       &amp;lt;% showed_team = true %&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%=user.name%&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;%=user.fullname%&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;%&lt;br /&gt;
           permissionGranted = false&lt;br /&gt;
       hasSignature = false&lt;br /&gt;
       signatureValid = false&lt;br /&gt;
       @assignment.participants.each do |participant|&lt;br /&gt;
         if (user.id == participant.user.id)&lt;br /&gt;
           permissionGranted = participant.permission_granted?&lt;br /&gt;
         end&lt;br /&gt;
       end&lt;br /&gt;
     %&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&amp;lt;%= (permissionGranted ? &amp;quot;granted&amp;quot; : &amp;quot;denied&amp;quot;) %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&lt;br /&gt;
     &amp;lt;% if (permissionGranted &amp;amp;&amp;amp; hasSignature &amp;amp;&amp;amp; signatureValid) %&amp;gt;&lt;br /&gt;
       &amp;lt;img src=&amp;quot;/assets/Check-icon.png&amp;quot; title=&amp;quot;verified with digitigal signature&amp;quot; alt=&amp;quot;verified&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;% else %&amp;gt;&lt;br /&gt;
       &amp;lt;img src=&amp;quot;/assets/delete_icon.png&amp;quot; title=&amp;quot;no digitigal signature&amp;quot; alt=&amp;quot;unverified&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;% end %&amp;gt;&lt;br /&gt;
     &amp;amp;nbsp;&lt;br /&gt;
   &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;% end %&amp;gt;&lt;br /&gt;
        &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
:The above view had a lot of controller related logic in it. Since it is not the best of practices to have such logic in the ''view'' code, the changes shown above in the ''participants_controller.rb'' had to be made, so that the ''view'' code is just responsible for ''displaying'' the information rather than computing it as well.&lt;br /&gt;
&lt;br /&gt;
:'''''views/participants/view_publishing_rights.html.erb'''''&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;h1&amp;gt;Publishing rights for &amp;lt;%= @assignment_name %&amp;gt; assignment&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;% if flash[:notice] %&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;flash_note&amp;quot;&amp;gt;&amp;lt;%= flash[:notice] %&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;table class=&amp;quot;general&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
          &amp;lt;% if @has_topics %&amp;gt;&lt;br /&gt;
              &amp;lt;th width=&amp;quot;5%&amp;quot; rowspan=&amp;quot;2&amp;quot;&amp;gt;Topic #&amp;lt;/th&amp;gt;&lt;br /&gt;
              &amp;lt;th width=&amp;quot;40&amp;quot; rowspan=&amp;quot;2&amp;quot;&amp;gt;Topic name(s)&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;% end %&amp;gt;&lt;br /&gt;
          &amp;lt;th width=&amp;quot;20%&amp;quot; rowspan=&amp;quot;2&amp;quot;&amp;gt;Team name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;th width=&amp;quot;35%&amp;quot; colspan=&amp;quot;4&amp;quot;&amp;gt;Participant&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
          &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;th&amp;gt;Fullname&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;th&amp;gt;Publish Rights&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;th&amp;gt;Verified&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
      &amp;lt;% @teams_info.each do |team_info| %&amp;gt;&lt;br /&gt;
          &amp;lt;% &lt;br /&gt;
              users = team_info[:users]&lt;br /&gt;
              num_students = users.size &lt;br /&gt;
          %&amp;gt;        &lt;br /&gt;
          &amp;lt;tr&amp;gt;&lt;br /&gt;
              &amp;lt;% if @has_topics %&amp;gt;&lt;br /&gt;
                  &amp;lt;td rowspan=&amp;quot;&amp;lt;%= num_students %&amp;gt;&amp;quot;&amp;gt;&amp;lt;%= team_info[:topic_id] %&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td rowspan=&amp;quot;&amp;lt;%= num_students %&amp;gt;&amp;quot;&amp;gt;&amp;lt;%= team_info[:topic_name] %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;% end %&amp;gt; &lt;br /&gt;
              &amp;lt;td align=&amp;quot;center&amp;quot; rowspan=&amp;quot;&amp;lt;%= num_students %&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;b&amp;gt;&amp;lt;%= team_info[:name] %&amp;gt;&amp;lt;/b&amp;gt; &lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;% users.each do |user| %&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt; &amp;lt;%=user[:name]%&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt; &amp;lt;%=user[:fullname]%&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt; &amp;lt;%=user[:pub_rights]%&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;% if user[:verfied] %&amp;gt;&lt;br /&gt;
                          &amp;lt;img src=&amp;quot;/assets/Check-icon.png&amp;quot; title=&amp;quot;verified with digitigal signature&amp;quot; alt=&amp;quot;verified&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;% else %&amp;gt;&lt;br /&gt;
                          &amp;lt;img src=&amp;quot;/assets/delete_icon.png&amp;quot; title=&amp;quot;no digitigal signature&amp;quot; alt=&amp;quot;unverified&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;% end %&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
              &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''WI-4:''' For this work-item the slotAvailable? method was removed from the file ''app/controllers/sign_up_sheet_controller.rb''. This method is already implemented in the model ''app/models/sign_up_topic.rb''. &lt;br /&gt;
&lt;br /&gt;
* '''WI-5:''' For this work item the file ''app/controllers/sign_up_sheet_controller.rb'' was modified. After performing a code-analysis it was concluded that the method ''other_confirmed_topic_for_user'' was not referenced from any other part of the project. Hence it was safely removed.&lt;br /&gt;
&lt;br /&gt;
* '''WI-6:''' For this work-item the files that were modified included ''app/helpers/import_topics_helper.rb''. In this file one thing that has been changed is the variable used to represent the row array. This was done in order to remove any confusion. The array represents the individual columns of a particular row. Additionally since the category column is an optional column a check has been added to verify its existence before assigning it to the attributes hash.&lt;br /&gt;
:'''''Original Code:'''''&lt;br /&gt;
  def self.define_attributes(row)&lt;br /&gt;
    attributes = {}&lt;br /&gt;
    attributes[&amp;quot;topic_identifier&amp;quot;] = row[0].strip&lt;br /&gt;
    attributes[&amp;quot;topic_name&amp;quot;] = row[1].strip&lt;br /&gt;
    attributes[&amp;quot;max_choosers&amp;quot;] = row[2]&lt;br /&gt;
    attributes[&amp;quot;category&amp;quot;] = row[3].strip&lt;br /&gt;
    attributes&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
:'''''Modified Code:'''''&lt;br /&gt;
  def self.define_attributes(columns)&lt;br /&gt;
    attributes = {}&lt;br /&gt;
    attributes[&amp;quot;topic_identifier&amp;quot;] = columns[0].strip&lt;br /&gt;
    attributes[&amp;quot;topic_name&amp;quot;] = columns[1].strip&lt;br /&gt;
    attributes[&amp;quot;max_choosers&amp;quot;] = columns[2].strip&lt;br /&gt;
    if columns.length &amp;gt; 3&lt;br /&gt;
      attributes[&amp;quot;category&amp;quot;] = columns[3].strip &lt;br /&gt;
    end&lt;br /&gt;
    attributes&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
:Another file that was modified for this work-item is ''app/models/sign_up_topic.rb''. This was also modified to remove the ambiguity caused by the variable name ''row''. This was changed to ''columns''. Additionally the original check which verifies whether the number of columns in each row is 4 was modified so that it also works if the imported file has only 3 columns.&lt;br /&gt;
&lt;br /&gt;
:'''''Original Code:'''''&lt;br /&gt;
  def self.import(row,session,id = nil)&lt;br /&gt;
    if row.length != 4&lt;br /&gt;
      raise ArgumentError, &amp;quot;CSV File expects the format: Topic identifier, Topic name, Max choosers, Topic Category&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    topic = SignUpTopic.where(topic_name: row[1], assignment_id: session[:assignment_id]).first&lt;br /&gt;
    if topic == nil&lt;br /&gt;
      attributes = ImportTopicsHelper::define_attributes(row)&lt;br /&gt;
      ImportTopicsHelper::create_new_sign_up_topic(attributes,session)&lt;br /&gt;
    else&lt;br /&gt;
      topic.max_choosers = row[2]&lt;br /&gt;
      topic.topic_identifier = row[0]&lt;br /&gt;
      #topic.assignment_id = session[:assignment_id]&lt;br /&gt;
      topic.save&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
:'''''Modified Code:'''''&lt;br /&gt;
  def self.import(columns,session,id = nil)&lt;br /&gt;
    if columns.length &amp;lt; 3&lt;br /&gt;
      raise ArgumentError, &amp;quot;CSV File expects the format: Topic identifier, Topic name, Max choosers, Topic Category (optional)&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    topic = SignUpTopic.where(topic_name: columns[1], assignment_id: session[:assignment_id]).first&lt;br /&gt;
    if topic == nil&lt;br /&gt;
      attributes = ImportTopicsHelper::define_attributes(columns)&lt;br /&gt;
      ImportTopicsHelper::create_new_sign_up_topic(attributes,session)&lt;br /&gt;
    else&lt;br /&gt;
      topic.max_choosers = columns[2]&lt;br /&gt;
      topic.topic_identifier = columns[0]&lt;br /&gt;
      #topic.assignment_id = session[:assignment_id]&lt;br /&gt;
      topic.save&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
* '''WI-7:'''We have added Rspec test cases to check functionality of import feature and view_publishing_rights view. These Rspec tests are present in &amp;quot;spec/features/instructor_interface_spec.rb&amp;quot;. The tests use csv files that are present in &amp;quot;spec/features/assignment_topic_csvs/&amp;quot; folder. &lt;br /&gt;
:'''View Publishing Rights''': This test case checks whether view_publishing_rights page has column headers &amp;quot;Topic name(s)&amp;quot; and &amp;quot;Topic #&amp;quot;. Since an assignment created without a topic does not have topic name and topic id. The test case will fail if the page contains topic name and topic id.&lt;br /&gt;
  describe &amp;quot;View Publishing Rights&amp;quot; do&lt;br /&gt;
    it 'should display teams for assignment without topic' do&lt;br /&gt;
      login_as(&amp;quot;instructor6&amp;quot;)&lt;br /&gt;
      visit '/participants/view_publishing_rights?id=1'&lt;br /&gt;
      expect(page).to have_content('Team name')&lt;br /&gt;
      expect(page).should_not have_content('Topic name(s)')&lt;br /&gt;
      expect(page).should_not have_content('Topic #')&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
:Import tests for assignment topics: There are 4 tests written under this category.They perform the following tasks: &lt;br /&gt;
:'''Check the import pass when the import file has 3 columns.'''&lt;br /&gt;
  describe &amp;quot;Import tests for assignment topics&amp;quot; do&lt;br /&gt;
    it 'should be valid file with 3 columns' do&lt;br /&gt;
      login_as(&amp;quot;instructor6&amp;quot;)&lt;br /&gt;
      visit '/assignments/1/edit'&lt;br /&gt;
      click_link &amp;quot;Topics&amp;quot;&lt;br /&gt;
      click_link &amp;quot;Import topics&amp;quot;&lt;br /&gt;
      file_path=Rails.root+&amp;quot;spec/features/assignment_topic_csvs/3-col-valid_topics_import.csv&amp;quot;&lt;br /&gt;
      attach_file('file',file_path)&lt;br /&gt;
      click_button &amp;quot;Import&amp;quot;&lt;br /&gt;
      click_link &amp;quot;Topics&amp;quot;&lt;br /&gt;
      expect(page).to have_content('expertiza')&lt;br /&gt;
      expect(page).to have_content('mozilla')&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
:'''Check the import pass when the import file has 3 or 4 columns.'''&lt;br /&gt;
    it 'should be a valid file with 3 or more columns' do&lt;br /&gt;
      login_as(&amp;quot;instructor6&amp;quot;)&lt;br /&gt;
      visit '/assignments/1/edit'&lt;br /&gt;
      click_link &amp;quot;Topics&amp;quot;&lt;br /&gt;
      click_link &amp;quot;Import topics&amp;quot;&lt;br /&gt;
      file_path=Rails.root+&amp;quot;spec/features/assignment_topic_csvs/3or4-col-valid_topics_import.csv&amp;quot;&lt;br /&gt;
      attach_file('file',file_path)&lt;br /&gt;
      click_button &amp;quot;Import&amp;quot;&lt;br /&gt;
      click_link &amp;quot;Topics&amp;quot;&lt;br /&gt;
      expect(page).to have_content('capybara')&lt;br /&gt;
      expect(page).to have_content('cucumber')&lt;br /&gt;
    end&lt;br /&gt;
:'''Check the import fail when the import file has 2 columns.'''&lt;br /&gt;
  it 'should be a invalid csv file' do&lt;br /&gt;
      login_as(&amp;quot;instructor6&amp;quot;)&lt;br /&gt;
      visit '/assignments/1/edit'&lt;br /&gt;
      click_link &amp;quot;Topics&amp;quot;&lt;br /&gt;
      click_link &amp;quot;Import topics&amp;quot;&lt;br /&gt;
      file_path=Rails.root+&amp;quot;spec/features/assignment_topic_csvs/invalid_topics_import.csv&amp;quot;&lt;br /&gt;
      attach_file('file',file_path)&lt;br /&gt;
      click_button &amp;quot;Import&amp;quot;&lt;br /&gt;
      click_link &amp;quot;Topics&amp;quot;&lt;br /&gt;
      expect(page).should_not have_content('airtable')&lt;br /&gt;
      expect(page).should_not have_content('devise')&lt;br /&gt;
    end&lt;br /&gt;
:'''Check the import fail when the import file doesn't have valid data.'''&lt;br /&gt;
  it 'should be an random text file' do&lt;br /&gt;
      login_as(&amp;quot;instructor6&amp;quot;)&lt;br /&gt;
      visit '/assignments/1/edit'&lt;br /&gt;
      click_link &amp;quot;Topics&amp;quot;&lt;br /&gt;
      click_link &amp;quot;Import topics&amp;quot;&lt;br /&gt;
      file_path=Rails.root+&amp;quot;spec/features/assignment_topic_csvs/random.txt&amp;quot;&lt;br /&gt;
      attach_file('file',file_path)&lt;br /&gt;
      click_button &amp;quot;Import&amp;quot;&lt;br /&gt;
      click_link &amp;quot;Topics&amp;quot;&lt;br /&gt;
      expect(page).should_not have_content('this is a random file which should fail')&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Jitesh&amp;diff=101243</id>
		<title>User:Jitesh</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Jitesh&amp;diff=101243"/>
		<updated>2016-03-24T01:32:06Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CSC/ECE 517 Spring 2016 - Expertiza E1613 =&lt;br /&gt;
This wiki page is for the description of changes made according to the specification of E1613 OSS assignment for Spring 2016.&lt;br /&gt;
&lt;br /&gt;
== Peer Review Information ==&lt;br /&gt;
For testing the changes made, the following credentials are recommended:&lt;br /&gt;
* Instructor Login: '''username:''' ''instructor6'' '''password:''' ''password''&lt;br /&gt;
* Student Login: '''username:''' ''student11'' '''password:''' ''password''&lt;br /&gt;
* Student Login: '''username:''' ''student1862'' '''password:''' ''password''&lt;br /&gt;
The above users are suggested for testing because there are a few users which would lead to exceptions upon login for unknown reasons completely unrelated to our work.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
=== Background ===&lt;br /&gt;
Expertiza is a web portal which can be used to manage assignments related to a course. It provides a platform to view assignments, manage teams, select topics and work improvement through anonymous peer reviews. For the instructor it provides complete control to create assignments, view reviews submitted and provide feedback. The instructors also have an option to publish the students work based on the rights provided by the student.&lt;br /&gt;
&lt;br /&gt;
=== Problem Statement ===&lt;br /&gt;
The following were the tasks identified to accomplish through this project. These tasks are part of the sign_up_sheet_controller.rb and sign_up_topic.rb&lt;br /&gt;
* '''WI-1:''' Method ad_info in the sign_up_sheet_controller.rb users sql query to retrieve the desired objects. This needs to be changed so that action records are used instead and a hash/array of the required object is returned.&lt;br /&gt;
* '''WI-2:''' Delete the method add_default_microtask after confirming that there is no reference to the method.&lt;br /&gt;
* '''WI-3:''' The view_publishing_rights method brings up a webpage to the instructor on whether the course staff has been granted or denied the right to use each submission in the future. The current implementation of the project works only for assignments that have topics assigned to them. This needs to be enhanced to include assignments that do not have associated topics as well. Another change that needs to be brought about is that the view_publishing_rights needs to be refactored and moved to the participants controller. &lt;br /&gt;
* '''WI-4:''' The methods slotAvailable? implemented in the sign_up_sheet_controller.rb needs to be removed from the controller. The methods should only exist in the corresponding model.&lt;br /&gt;
* '''WI-5:''' Method other_confirmed_topic_for_user is only referenced by the method waitlist_teams. The method wait_list_teams is not referenced anywhere. These methods need to be removed if it is confirmed that they are not used anywhere else.&lt;br /&gt;
* '''WI-6:''' Expertiza provides a functionality to import topics from a file(.csv or .txt). This feature is currently not tested. Test the functionality of this feature and fix it if broken. Another change that needs to be brought about is that the current implementation requires that each row of the imported file needs to have four columns. However the fourth column which represents &amp;quot;category&amp;quot; is not mandatory and it should be possible to import a document which does not include values for this column.&lt;br /&gt;
* '''WI-7:''' Add Rspec testcases to test the changes implemented above.&lt;br /&gt;
=== Files Modified in this Project ===&lt;br /&gt;
The following files were modified for this project.&lt;br /&gt;
* app/controllers/participants_controller.rb&lt;br /&gt;
* app/controllers/sign_up_sheet_controller.rb&lt;br /&gt;
* app/models/sign_up_topic.rb&lt;br /&gt;
* app/models/signed_up_team.rb&lt;br /&gt;
* app/models/team.rb&lt;br /&gt;
* app/models/waitlist.rb&lt;br /&gt;
* app/views/participants/view_publishing_rights.html.erb&lt;br /&gt;
* app/views/sign_up_sheet/list.html.erb&lt;br /&gt;
* app/views/sign_up_sheet/show_team.html.erb&lt;br /&gt;
* app/views/sign_up_sheet/view_publishing_rights.html.erb&lt;br /&gt;
* app/views/tree_display/actions/_assignments_actions.html.erb&lt;br /&gt;
* app/helpers/import_topics_helper.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* config/routes.rb&lt;br /&gt;
* spec/features/instructor_interface_spec.rb&lt;br /&gt;
* spec/features/team_creation_spec.rb&lt;br /&gt;
=== Solutions implemented and Delivered ===&lt;br /&gt;
* '''WI-1:''' For this work item the following files were modified:&lt;br /&gt;
&lt;br /&gt;
'''''app/controllers/sign_up_sheet_controller.rb:''''' &lt;br /&gt;
In this file the method ad_info is defined. This method was defined using sql query to provide its results. To change this method in such a way that it uses active record associations changes needed to be made to the function as shown below. Additionally since the new implementation returns a list of hashes the way in which this result is accessed in show_team method was also changed to accommodate this change.&lt;br /&gt;
&lt;br /&gt;
'''''Previous Code:'''''&lt;br /&gt;
  def ad_info(assignment_id, topic_id)&lt;br /&gt;
    query = &amp;quot;select t.id as team_id,t.comments_for_advertisement,t.name,su.assignment_id, t.advertise_for_partner from teams t, signed_up_teams s,sign_up_topics su &amp;quot;+&lt;br /&gt;
        &amp;quot;where s.topic_id='&amp;quot;+topic_id.to_s+&amp;quot;' and s.team_id=t.id and s.topic_id = su.id;    &amp;quot;&lt;br /&gt;
    SignUpTopic.find_by_sql(query)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''''Modified Code:'''''&lt;br /&gt;
  def ad_info(assignment_id, topic_id)&lt;br /&gt;
    # List that contains individual result object&lt;br /&gt;
    @result_list = []&lt;br /&gt;
    # Get the results&lt;br /&gt;
    @results = SignedUpTeam.where(&amp;quot;topic_id = ?&amp;quot;, &amp;quot;#{topic_id}&amp;quot;)&lt;br /&gt;
    # Iterate through the results of the query and get the required attributes&lt;br /&gt;
    @results.each do |result| &lt;br /&gt;
      team = result.team&lt;br /&gt;
      topic = result.topic&lt;br /&gt;
      resultMap = {}&lt;br /&gt;
      resultMap[:team_id] = team.id&lt;br /&gt;
      resultMap[:comments_for_advertisement] = team.comments_for_advertisement&lt;br /&gt;
      resultMap[:name] = team.name&lt;br /&gt;
      resultMap[:assignment_id] = topic.assignment_id&lt;br /&gt;
      resultMap[:advertise_for_partner] = team.advertise_for_partner&lt;br /&gt;
      # Append to the list&lt;br /&gt;
      @result_list.append(resultMap)&lt;br /&gt;
    end&lt;br /&gt;
    @result_list&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Additionally changes were also required in the models signed_up_team.rb and team.rb. This was because these associations were required to fetch required data using active record associations. The following changes were made to the files:&lt;br /&gt;
&lt;br /&gt;
'''''app/models/signed_up_team.rb:'''''&lt;br /&gt;
  class SignedUpTeam &amp;lt; ActiveRecord::Base&lt;br /&gt;
    belongs_to :topic, :class_name =&amp;gt; 'SignUpTopic'&lt;br /&gt;
    belongs_to :team, :class_name =&amp;gt; 'Team' #Added this association between SignedUpTeam and Team.&lt;br /&gt;
&lt;br /&gt;
'''''app/models/team.rb'''''&lt;br /&gt;
  class Team &amp;lt; ActiveRecord::Base&lt;br /&gt;
    has_many :teams_users, :dependent =&amp;gt; :destroy&lt;br /&gt;
    has_many :users, :through =&amp;gt; :teams_users&lt;br /&gt;
    has_many :join_team_requests&lt;br /&gt;
    has_one :team_node,:foreign_key =&amp;gt; :node_object_id,:dependent =&amp;gt; :destroy&lt;br /&gt;
    has_many :bids, :dependent =&amp;gt; :destroy&lt;br /&gt;
    has_many :signed_up_teams #Added this association between Team and SignedUpTeam.&lt;br /&gt;
&lt;br /&gt;
* '''WI-2:''' For this work item the file ''app/controllers/sign_up_sheet_controller.rb'' was modified. After performing a code-analysis it was concluded that the method ''add_default_microtask'' was not referenced from any other part of the project. Hence it was safely removed.&lt;br /&gt;
&lt;br /&gt;
* '''WI-3:''' &lt;br /&gt;
&lt;br /&gt;
* '''WI-4:''' For this work-item the slotAvailable? method was removed from the file ''app/controllers/sign_up_sheet_controller.rb''. This method is already implemented in the model ''app/models/sign_up_topic.rb''. &lt;br /&gt;
&lt;br /&gt;
* '''WI-5:''' For this work item the file ''app/controllers/sign_up_sheet_controller.rb'' was modified. After performing a code-analysis it was concluded that the method ''other_confirmed_topic_for_user'' was not referenced from any other part of the project. Hence it was safely removed.&lt;br /&gt;
&lt;br /&gt;
* '''WI-6:''' For this work-item the files that were modified included ''app/helpers/import_topics_helper.rb''. In this file one thing that has been changed is the variable used to represent the row array. This was done in order to remove any confusion. The array represents the individual columns of a particular row. Additionally since the category column is an optional column a check has been added to verify its existence before assigning it to the attributes hash.&lt;br /&gt;
'''''Original Code:'''''&lt;br /&gt;
  def self.define_attributes(row)&lt;br /&gt;
    attributes = {}&lt;br /&gt;
    attributes[&amp;quot;topic_identifier&amp;quot;] = row[0].strip&lt;br /&gt;
    attributes[&amp;quot;topic_name&amp;quot;] = row[1].strip&lt;br /&gt;
    attributes[&amp;quot;max_choosers&amp;quot;] = row[2]&lt;br /&gt;
    attributes[&amp;quot;category&amp;quot;] = row[3].strip&lt;br /&gt;
    attributes&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''''Modified Code:'''''&lt;br /&gt;
  def self.define_attributes(columns)&lt;br /&gt;
    attributes = {}&lt;br /&gt;
    attributes[&amp;quot;topic_identifier&amp;quot;] = columns[0].strip&lt;br /&gt;
    attributes[&amp;quot;topic_name&amp;quot;] = columns[1].strip&lt;br /&gt;
    attributes[&amp;quot;max_choosers&amp;quot;] = columns[2].strip&lt;br /&gt;
    if columns.length &amp;gt; 3&lt;br /&gt;
      attributes[&amp;quot;category&amp;quot;] = columns[3].strip &lt;br /&gt;
    end&lt;br /&gt;
    attributes&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Another file that was modified for this work-item is ''app/models/sign_up_topic.rb''. This was also modified to remove the ambiguity caused by the variable name ''row''. This was changed to ''columns''. Additionally the original check which verifies whether the number of columns in each row is 4 was modified so that it also works if the imported file has only 3 columns.&lt;br /&gt;
&lt;br /&gt;
'''''Original Code:'''''&lt;br /&gt;
  def self.import(row,session,id = nil)&lt;br /&gt;
    if row.length != 4&lt;br /&gt;
      raise ArgumentError, &amp;quot;CSV File expects the format: Topic identifier, Topic name, Max choosers, Topic Category&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    topic = SignUpTopic.where(topic_name: row[1], assignment_id: session[:assignment_id]).first&lt;br /&gt;
    if topic == nil&lt;br /&gt;
      attributes = ImportTopicsHelper::define_attributes(row)&lt;br /&gt;
      ImportTopicsHelper::create_new_sign_up_topic(attributes,session)&lt;br /&gt;
    else&lt;br /&gt;
      topic.max_choosers = row[2]&lt;br /&gt;
      topic.topic_identifier = row[0]&lt;br /&gt;
      #topic.assignment_id = session[:assignment_id]&lt;br /&gt;
      topic.save&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
'''''Modified Code:'''''&lt;br /&gt;
  def self.import(columns,session,id = nil)&lt;br /&gt;
    if columns.length &amp;lt; 3&lt;br /&gt;
      raise ArgumentError, &amp;quot;CSV File expects the format: Topic identifier, Topic name, Max choosers, Topic Category (optional)&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    topic = SignUpTopic.where(topic_name: columns[1], assignment_id: session[:assignment_id]).first&lt;br /&gt;
    if topic == nil&lt;br /&gt;
      attributes = ImportTopicsHelper::define_attributes(columns)&lt;br /&gt;
      ImportTopicsHelper::create_new_sign_up_topic(attributes,session)&lt;br /&gt;
    else&lt;br /&gt;
      topic.max_choosers = columns[2]&lt;br /&gt;
      topic.topic_identifier = columns[0]&lt;br /&gt;
      #topic.assignment_id = session[:assignment_id]&lt;br /&gt;
      topic.save&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
* '''WI-7:'''&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Jitesh&amp;diff=101240</id>
		<title>User:Jitesh</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Jitesh&amp;diff=101240"/>
		<updated>2016-03-24T01:27:33Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CSC/ECE 517 Spring 2016 - Expertiza E1613 =&lt;br /&gt;
This wiki page is for the description of changes made according to the specification of E1613 OSS assignment for Spring 2016.&lt;br /&gt;
&lt;br /&gt;
== Peer Review Information ==&lt;br /&gt;
For testing the changes made, the following credentials are recommended:&lt;br /&gt;
* Instructor Login: '''username:''' ''instructor6'' '''password:''' ''password''&lt;br /&gt;
* Student Login: '''username:''' ''student11'' '''password:''' ''password''&lt;br /&gt;
* Student Login: '''username:''' ''student1862'' '''password:''' ''password''&lt;br /&gt;
The above users are suggested for testing because there are a few users which would lead to exceptions upon login for unknown reasons completely unrelated to our work.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
=== Background ===&lt;br /&gt;
Expertiza is a web portal which can be used to manage assignments related to a course. It provides a platform to view assignments, manage teams, select topics and work improvement through anonymous peer reviews. For the instructor it provides complete control to create assignments, view reviews submitted and provide feedback. The instructors also have an option to publish the students work based on the rights provided by the student.&lt;br /&gt;
&lt;br /&gt;
=== Problem Statement ===&lt;br /&gt;
The following were the tasks identified to accomplish through this project. These tasks are part of the sign_up_sheet_controller.rb and sign_up_topic.rb&lt;br /&gt;
* '''WI-1:''' Method ad_info in the sign_up_sheet_controller.rb users sql query to retrieve the desired objects. This needs to be changed so that action records are used instead and a hash/array of the required object is returned.&lt;br /&gt;
* '''WI-2:''' Delete the method add_default_microtask after confirming that there is no reference to the method.&lt;br /&gt;
* '''WI-3:''' The view_publishing_rights method brings up a webpage to the instructor on whether the course staff has been granted or denied the right to use each submission in the future. The current implementation of the project works only for assignments that have topics assigned to them. This needs to be enhanced to include assignments that do not have associated topics as well. Another change that needs to be brought about is that the view_publishing_rights needs to be refactored and moved to the participants controller. &lt;br /&gt;
* '''WI-4:''' The methods slotAvailable? implemented in the sign_up_sheet_controller.rb needs to be removed from the controller. The methods should only exist in the corresponding model.&lt;br /&gt;
* '''WI-5:''' Method other_confirmed_topic_for_user is only referenced by the method waitlist_teams. The method wait_list_teams is not referenced anywhere. These methods need to be removed if it is confirmed that they are not used anywhere else.&lt;br /&gt;
* '''WI-6:''' Expertiza provides a functionality to import topics from a file(.csv or .txt). This feature is currently not tested. Test the functionality of this feature and fix it if broken. Another change that needs to be brought about is that the current implementation requires that each row of the imported file needs to have four columns. However the fourth column which represents &amp;quot;category&amp;quot; is not mandatory and it should be possible to import a document which does not include values for this column.&lt;br /&gt;
* '''WI-7:''' Add Rspec testcases to test the changes implemented above.&lt;br /&gt;
=== Files Modified in this Project ===&lt;br /&gt;
The following files were modified for this project.&lt;br /&gt;
* app/controllers/participants_controller.rb&lt;br /&gt;
* app/controllers/sign_up_sheet_controller.rb&lt;br /&gt;
* app/models/sign_up_topic.rb&lt;br /&gt;
* app/models/signed_up_team.rb&lt;br /&gt;
* app/models/team.rb&lt;br /&gt;
* app/models/waitlist.rb&lt;br /&gt;
* app/views/participants/view_publishing_rights.html.erb&lt;br /&gt;
* app/views/sign_up_sheet/list.html.erb&lt;br /&gt;
* app/views/sign_up_sheet/show_team.html.erb&lt;br /&gt;
* app/views/sign_up_sheet/view_publishing_rights.html.erb&lt;br /&gt;
* app/views/tree_display/actions/_assignments_actions.html.erb&lt;br /&gt;
* app/helpers/import_topics_helper.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* config/routes.rb&lt;br /&gt;
* spec/features/instructor_interface_spec.rb&lt;br /&gt;
* spec/features/team_creation_spec.rb&lt;br /&gt;
=== Solutions implemented and Delivered ===&lt;br /&gt;
* '''WI-1:''' For this work item the following files were modified:&lt;br /&gt;
&lt;br /&gt;
'''''app/controllers/sign_up_sheet_controller.rb:''''' &lt;br /&gt;
In this file the method ad_info is defined. This method was defined using sql query to provide its results. To change this method in such a way that it uses active record associations changes needed to be made to the function as shown below. Additionally since the new implementation returns a list of hashes the way in which this result is accessed in show_team method was also changed to accommodate this change.&lt;br /&gt;
&lt;br /&gt;
'''''Previous Code:'''''&lt;br /&gt;
  def ad_info(assignment_id, topic_id)&lt;br /&gt;
    query = &amp;quot;select t.id as team_id,t.comments_for_advertisement,t.name,su.assignment_id, t.advertise_for_partner from teams t, signed_up_teams s,sign_up_topics su &amp;quot;+&lt;br /&gt;
        &amp;quot;where s.topic_id='&amp;quot;+topic_id.to_s+&amp;quot;' and s.team_id=t.id and s.topic_id = su.id;    &amp;quot;&lt;br /&gt;
    SignUpTopic.find_by_sql(query)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''''Modified Code:'''''&lt;br /&gt;
  def ad_info(assignment_id, topic_id)&lt;br /&gt;
    # List that contains individual result object&lt;br /&gt;
    @result_list = []&lt;br /&gt;
    # Get the results&lt;br /&gt;
    @results = SignedUpTeam.where(&amp;quot;topic_id = ?&amp;quot;, &amp;quot;#{topic_id}&amp;quot;)&lt;br /&gt;
    # Iterate through the results of the query and get the required attributes&lt;br /&gt;
    @results.each do |result| &lt;br /&gt;
      team = result.team&lt;br /&gt;
      topic = result.topic&lt;br /&gt;
      resultMap = {}&lt;br /&gt;
      resultMap[:team_id] = team.id&lt;br /&gt;
      resultMap[:comments_for_advertisement] = team.comments_for_advertisement&lt;br /&gt;
      resultMap[:name] = team.name&lt;br /&gt;
      resultMap[:assignment_id] = topic.assignment_id&lt;br /&gt;
      resultMap[:advertise_for_partner] = team.advertise_for_partner&lt;br /&gt;
      # Append to the list&lt;br /&gt;
      @result_list.append(resultMap)&lt;br /&gt;
    end&lt;br /&gt;
    @result_list&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Additionally changes were also required in the models signed_up_team.rb and team.rb. This was because these associations were required to fetch required data using active record associations. The following changes were made to the files:&lt;br /&gt;
&lt;br /&gt;
'''''app/models/signed_up_team.rb:'''''&lt;br /&gt;
  class SignedUpTeam &amp;lt; ActiveRecord::Base&lt;br /&gt;
    belongs_to :topic, :class_name =&amp;gt; 'SignUpTopic'&lt;br /&gt;
    belongs_to :team, :class_name =&amp;gt; 'Team' #Added this association between SignedUpTeam and Team.&lt;br /&gt;
&lt;br /&gt;
'''''app/models/team.rb'''''&lt;br /&gt;
  class Team &amp;lt; ActiveRecord::Base&lt;br /&gt;
    has_many :teams_users, :dependent =&amp;gt; :destroy&lt;br /&gt;
    has_many :users, :through =&amp;gt; :teams_users&lt;br /&gt;
    has_many :join_team_requests&lt;br /&gt;
    has_one :team_node,:foreign_key =&amp;gt; :node_object_id,:dependent =&amp;gt; :destroy&lt;br /&gt;
    has_many :bids, :dependent =&amp;gt; :destroy&lt;br /&gt;
    has_many :signed_up_teams #Added this association between Team and SignedUpTeam.&lt;br /&gt;
&lt;br /&gt;
* '''WI-2:''' For this work item the file ''app/controllers/sign_up_sheet_controller.rb'' was modified. After performing a code-analysis it was concluded that the method ''add_default_microtask'' was not referenced from any other part of the project. Hence it was safely removed.&lt;br /&gt;
&lt;br /&gt;
* '''WI-3:''' &lt;br /&gt;
&lt;br /&gt;
* '''WI-4:'''&lt;br /&gt;
&lt;br /&gt;
* '''WI-5:''' For this work item the file ''app/controllers/sign_up_sheet_controller.rb'' was modified. After performing a code-analysis it was concluded that the method ''other_confirmed_topic_for_user'' was not referenced from any other part of the project. Hence it was safely removed.&lt;br /&gt;
&lt;br /&gt;
* '''WI-6:''' For this work-item the files that were modified included ''app/helpers/import_topics_helper.rb''. In this file one thing that has been changed is the variable used to represent the row array. This was done in order to remove any confusion. The array represents the individual columns of a particular row. Additionally since the category column is an optional column a check has been added to verify its existence before assigning it to the attributes hash.&lt;br /&gt;
'''''Original Code:'''''&lt;br /&gt;
  def self.define_attributes(row)&lt;br /&gt;
    attributes = {}&lt;br /&gt;
    attributes[&amp;quot;topic_identifier&amp;quot;] = row[0].strip&lt;br /&gt;
    attributes[&amp;quot;topic_name&amp;quot;] = row[1].strip&lt;br /&gt;
    attributes[&amp;quot;max_choosers&amp;quot;] = row[2]&lt;br /&gt;
    attributes[&amp;quot;category&amp;quot;] = row[3].strip&lt;br /&gt;
    attributes&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''''Modified Code:'''''&lt;br /&gt;
  def self.define_attributes(columns)&lt;br /&gt;
    attributes = {}&lt;br /&gt;
    attributes[&amp;quot;topic_identifier&amp;quot;] = columns[0].strip&lt;br /&gt;
    attributes[&amp;quot;topic_name&amp;quot;] = columns[1].strip&lt;br /&gt;
    attributes[&amp;quot;max_choosers&amp;quot;] = columns[2].strip&lt;br /&gt;
    if columns.length &amp;gt; 3&lt;br /&gt;
      attributes[&amp;quot;category&amp;quot;] = columns[3].strip &lt;br /&gt;
    end&lt;br /&gt;
    attributes&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Another file that was modified for this work-item is ''app/models/sign_up_topic.rb''. This was also modified to remove the ambiguity caused by the variable name ''row''. This was changed to ''columns''. Additionally the original check which verifies whether the number of columns in each row is 4 was modified so that it also works if the imported file has only 3 columns.&lt;br /&gt;
&lt;br /&gt;
'''''Original Code:'''''&lt;br /&gt;
  def self.import(row,session,id = nil)&lt;br /&gt;
    if row.length != 4&lt;br /&gt;
      raise ArgumentError, &amp;quot;CSV File expects the format: Topic identifier, Topic name, Max choosers, Topic Category&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    topic = SignUpTopic.where(topic_name: row[1], assignment_id: session[:assignment_id]).first&lt;br /&gt;
    if topic == nil&lt;br /&gt;
      attributes = ImportTopicsHelper::define_attributes(row)&lt;br /&gt;
      ImportTopicsHelper::create_new_sign_up_topic(attributes,session)&lt;br /&gt;
    else&lt;br /&gt;
      topic.max_choosers = row[2]&lt;br /&gt;
      topic.topic_identifier = row[0]&lt;br /&gt;
      #topic.assignment_id = session[:assignment_id]&lt;br /&gt;
      topic.save&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
'''''Modified Code:'''''&lt;br /&gt;
  def self.import(columns,session,id = nil)&lt;br /&gt;
    if columns.length &amp;lt; 3&lt;br /&gt;
      raise ArgumentError, &amp;quot;CSV File expects the format: Topic identifier, Topic name, Max choosers, Topic Category (optional)&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    topic = SignUpTopic.where(topic_name: columns[1], assignment_id: session[:assignment_id]).first&lt;br /&gt;
    if topic == nil&lt;br /&gt;
      attributes = ImportTopicsHelper::define_attributes(columns)&lt;br /&gt;
      ImportTopicsHelper::create_new_sign_up_topic(attributes,session)&lt;br /&gt;
    else&lt;br /&gt;
      topic.max_choosers = columns[2]&lt;br /&gt;
      topic.topic_identifier = columns[0]&lt;br /&gt;
      #topic.assignment_id = session[:assignment_id]&lt;br /&gt;
      topic.save&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
* '''WI-7:'''&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Jitesh&amp;diff=101237</id>
		<title>User:Jitesh</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Jitesh&amp;diff=101237"/>
		<updated>2016-03-24T01:25:09Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CSC/ECE 517 Spring 2016 - Expertiza E1613 =&lt;br /&gt;
This wiki page is for the description of changes made according to the specification of E1613 OSS assignment for Spring 2016.&lt;br /&gt;
&lt;br /&gt;
== Peer Review Information ==&lt;br /&gt;
For testing the changes made, the following credentials are recommended:&lt;br /&gt;
* Instructor Login: '''username:''' ''instructor6'' '''password:''' ''password''&lt;br /&gt;
* Student Login: '''username:''' ''student11'' '''password:''' ''password''&lt;br /&gt;
* Student Login: '''username:''' ''student1862'' '''password:''' ''password''&lt;br /&gt;
The above users are suggested for testing because there are a few users which would lead to exceptions upon login for unknown reasons completely unrelated to our work.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
=== Background ===&lt;br /&gt;
Expertiza is a web portal which can be used to manage assignments related to a course. It provides a platform to view assignments, manage teams, select topics and work improvement through anonymous peer reviews. For the instructor it provides complete control to create assignments, view reviews submitted and provide feedback. The instructors also have an option to publish the students work based on the rights provided by the student.&lt;br /&gt;
&lt;br /&gt;
=== Problem Statement ===&lt;br /&gt;
The following were the tasks identified to accomplish through this project. These tasks are part of the sign_up_sheet_controller.rb and sign_up_topic.rb&lt;br /&gt;
* '''WI-1:''' Method ad_info in the sign_up_sheet_controller.rb users sql query to retrieve the desired objects. This needs to be changed so that action records are used instead and a hash/array of the required object is returned.&lt;br /&gt;
* '''WI-2:''' Delete the method add_default_microtask after confirming that there is no reference to the method.&lt;br /&gt;
* '''WI-3:''' The view_publishing_rights method brings up a webpage to the instructor on whether the course staff has been granted or denied the right to use each submission in the future. The current implementation of the project works only for assignments that have topics assigned to them. This needs to be enhanced to include assignments that do not have associated topics as well. Another change that needs to be brought about is that the view_publishing_rights needs to be refactored and moved to the participants controller. &lt;br /&gt;
* '''WI-4:''' The methods slotAvailable? implemented in the sign_up_sheet_controller.rb needs to be removed from the controller. The methods should only exist in the corresponding model.&lt;br /&gt;
* '''WI-5:''' Method other_confirmed_topic_for_user is only referenced by the method waitlist_teams. The method wait_list_teams is not referenced anywhere. These methods need to be removed if it is confirmed that they are not used anywhere else.&lt;br /&gt;
* '''WI-6:''' Expertiza provides a functionality to import topics from a file(.csv or .txt). This feature is currently not tested. Test the functionality of this feature and fix it if broken. Another change that needs to be brought about is that the current implementation requires that each row of the imported file needs to have four columns. However the fourth column which represents &amp;quot;category&amp;quot; is not mandatory and it should be possible to import a document which does not include values for this column.&lt;br /&gt;
* '''WI-7:''' Add Rspec testcases to test the changes implemented above.&lt;br /&gt;
=== Files Modified in this Project ===&lt;br /&gt;
The following files were modified for this project.&lt;br /&gt;
* app/controllers/participants_controller.rb&lt;br /&gt;
* app/controllers/sign_up_sheet_controller.rb&lt;br /&gt;
* app/models/sign_up_topic.rb&lt;br /&gt;
* app/models/signed_up_team.rb&lt;br /&gt;
* app/models/team.rb&lt;br /&gt;
* app/models/waitlist.rb&lt;br /&gt;
* app/views/participants/view_publishing_rights.html.erb&lt;br /&gt;
* app/views/sign_up_sheet/list.html.erb&lt;br /&gt;
* app/views/sign_up_sheet/show_team.html.erb&lt;br /&gt;
* app/views/sign_up_sheet/view_publishing_rights.html.erb&lt;br /&gt;
* app/views/tree_display/actions/_assignments_actions.html.erb&lt;br /&gt;
* app/helpers/import_topics_helper.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* config/routes.rb&lt;br /&gt;
* spec/features/instructor_interface_spec.rb&lt;br /&gt;
* spec/features/team_creation_spec.rb&lt;br /&gt;
=== Solutions implemented and Delivered ===&lt;br /&gt;
* '''WI-1:''' For this work item the following files were modified:&lt;br /&gt;
&lt;br /&gt;
'''''app/controllers/sign_up_sheet_controller.rb:''''' &lt;br /&gt;
In this file the method ad_info is defined. This method was defined using sql query to provide its results. To change this method in such a way that it uses active record associations changes needed to be made to the function as shown below. Additionally since the new implementation returns a list of hashes the way in which this result is accessed in show_team method was also changed to accommodate this change.&lt;br /&gt;
&lt;br /&gt;
'''''Previous Code:'''''&lt;br /&gt;
  def ad_info(assignment_id, topic_id)&lt;br /&gt;
    query = &amp;quot;select t.id as team_id,t.comments_for_advertisement,t.name,su.assignment_id, t.advertise_for_partner from teams t, signed_up_teams s,sign_up_topics su &amp;quot;+&lt;br /&gt;
        &amp;quot;where s.topic_id='&amp;quot;+topic_id.to_s+&amp;quot;' and s.team_id=t.id and s.topic_id = su.id;    &amp;quot;&lt;br /&gt;
    SignUpTopic.find_by_sql(query)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''''Modified Code:'''''&lt;br /&gt;
  def ad_info(assignment_id, topic_id)&lt;br /&gt;
    # List that contains individual result object&lt;br /&gt;
    @result_list = []&lt;br /&gt;
    # Get the results&lt;br /&gt;
    @results = SignedUpTeam.where(&amp;quot;topic_id = ?&amp;quot;, &amp;quot;#{topic_id}&amp;quot;)&lt;br /&gt;
    # Iterate through the results of the query and get the required attributes&lt;br /&gt;
    @results.each do |result| &lt;br /&gt;
      team = result.team&lt;br /&gt;
      topic = result.topic&lt;br /&gt;
      resultMap = {}&lt;br /&gt;
      resultMap[:team_id] = team.id&lt;br /&gt;
      resultMap[:comments_for_advertisement] = team.comments_for_advertisement&lt;br /&gt;
      resultMap[:name] = team.name&lt;br /&gt;
      resultMap[:assignment_id] = topic.assignment_id&lt;br /&gt;
      resultMap[:advertise_for_partner] = team.advertise_for_partner&lt;br /&gt;
      # Append to the list&lt;br /&gt;
      @result_list.append(resultMap)&lt;br /&gt;
    end&lt;br /&gt;
    @result_list&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Additionally changes were also required in the models signed_up_team.rb and team.rb. This was because these associations were required to fetch required data using active record associations. The following changes were made to the files:&lt;br /&gt;
&lt;br /&gt;
'''''app/models/signed_up_team.rb:'''''&lt;br /&gt;
  class SignedUpTeam &amp;lt; ActiveRecord::Base&lt;br /&gt;
    belongs_to :topic, :class_name =&amp;gt; 'SignUpTopic'&lt;br /&gt;
    belongs_to :team, :class_name =&amp;gt; 'Team' #Added this association between SignedUpTeam and Team.&lt;br /&gt;
&lt;br /&gt;
'''''app/models/team.rb'''''&lt;br /&gt;
  class Team &amp;lt; ActiveRecord::Base&lt;br /&gt;
    has_many :teams_users, :dependent =&amp;gt; :destroy&lt;br /&gt;
    has_many :users, :through =&amp;gt; :teams_users&lt;br /&gt;
    has_many :join_team_requests&lt;br /&gt;
    has_one :team_node,:foreign_key =&amp;gt; :node_object_id,:dependent =&amp;gt; :destroy&lt;br /&gt;
    has_many :bids, :dependent =&amp;gt; :destroy&lt;br /&gt;
    has_many :signed_up_teams #Added this association between Team and SignedUpTeam.&lt;br /&gt;
&lt;br /&gt;
* '''WI-2:''' For this work item the file ''app/controllers/sign_up_sheet_controller.rb'' was modified. After performing a code-analysis it was concluded that the method ''add_default_microtask'' was not referenced from any other part of the project. Hence it was safely removed.&lt;br /&gt;
&lt;br /&gt;
* '''WI-3:''' &lt;br /&gt;
&lt;br /&gt;
* '''WI-4:'''&lt;br /&gt;
&lt;br /&gt;
* '''WI-5:''' For this work item the file ''app/controllers/sign_up_sheet_controller.rb'' was modified. After performing a code-analysis it was concluded that the method ''other_confirmed_topic_for_user'' was not referenced from any other part of the project. Hence it was safely removed.&lt;br /&gt;
&lt;br /&gt;
* '''WI-6:''' For this work-item the files that were modified included ''app/helpers/import_topics_helper.rb''. In this file one thing that has been changed is the variable used to represent the row array. This was done in order to remove any confusion. The array represents the individual columns of a particular row. Additionally since the category column is an optional column a check has been added to verify its existence before assigning it to the attributes hash.&lt;br /&gt;
'''''Original Code:'''''&lt;br /&gt;
  def self.define_attributes(row)&lt;br /&gt;
    attributes = {}&lt;br /&gt;
    attributes[&amp;quot;topic_identifier&amp;quot;] = row[0].strip&lt;br /&gt;
    attributes[&amp;quot;topic_name&amp;quot;] = row[1].strip&lt;br /&gt;
    attributes[&amp;quot;max_choosers&amp;quot;] = row[2]&lt;br /&gt;
    attributes[&amp;quot;category&amp;quot;] = row[3].strip&lt;br /&gt;
    attributes&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''''Modified Code:'''''&lt;br /&gt;
  def self.define_attributes(columns)&lt;br /&gt;
    attributes = {}&lt;br /&gt;
    attributes[&amp;quot;topic_identifier&amp;quot;] = columns[0].strip&lt;br /&gt;
    attributes[&amp;quot;topic_name&amp;quot;] = columns[1].strip&lt;br /&gt;
    attributes[&amp;quot;max_choosers&amp;quot;] = columns[2].strip&lt;br /&gt;
    if columns.length &amp;gt; 3&lt;br /&gt;
      attributes[&amp;quot;category&amp;quot;] = columns[3].strip &lt;br /&gt;
    end&lt;br /&gt;
    attributes&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Another file that was modified for this work-item is ''app/models/sign_up_topic.rb''. This was also modified to remove the ambiguity caused by the variable name ''row''. This was changed to ''columns''. Additionally the original check which verifies whether the number of columns in each row is 4 was modified so that it also works if the imported file has only 3 columns.&lt;br /&gt;
* '''WI-7:'''&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Jitesh&amp;diff=101224</id>
		<title>User:Jitesh</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Jitesh&amp;diff=101224"/>
		<updated>2016-03-24T01:04:48Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CSC/ECE 517 Spring 2016 - Expertiza E1613 =&lt;br /&gt;
This wiki page is for the description of changes made according to the specification of E1613 OSS assignment for Spring 2016.&lt;br /&gt;
&lt;br /&gt;
== Peer Review Information ==&lt;br /&gt;
For testing the changes made, the following credentials are recommended:&lt;br /&gt;
* Instructor Login: '''username:''' ''instructor6'' '''password:''' ''password''&lt;br /&gt;
* Student Login: '''username:''' ''student11'' '''password:''' ''password''&lt;br /&gt;
* Student Login: '''username:''' ''student1862'' '''password:''' ''password''&lt;br /&gt;
The above users are suggested for testing because there are a few users which would lead to exceptions upon login for unknown reasons completely unrelated to our work.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
=== Background ===&lt;br /&gt;
Expertiza is a web portal which can be used to manage assignments related to a course. It provides a platform to view assignments, manage teams, select topics and work improvement through anonymous peer reviews. For the instructor it provides complete control to create assignments, view reviews submitted and provide feedback. The instructors also have an option to publish the students work based on the rights provided by the student.&lt;br /&gt;
&lt;br /&gt;
=== Problem Statement ===&lt;br /&gt;
The following were the tasks identified to accomplish through this project. These tasks are part of the sign_up_sheet_controller.rb and sign_up_topic.rb&lt;br /&gt;
* '''WI-1:''' Method ad_info in the sign_up_sheet_controller.rb users sql query to retrieve the desired objects. This needs to be changed so that action records are used instead and a hash/array of the required object is returned.&lt;br /&gt;
* '''WI-2:''' Delete the method add_default_microtask after confirming that there is no reference to the method.&lt;br /&gt;
* '''WI-3:''' The view_publishing_rights method brings up a webpage to the instructor on whether the course staff has been granted or denied the right to use each submission in the future. The current implementation of the project works only for assignments that have topics assigned to them. This needs to be enhanced to include assignments that do not have associated topics as well. Another change that needs to be brought about is that the view_publishing_rights needs to be refactored and moved to the participants controller. &lt;br /&gt;
* '''WI-4:''' The methods slotAvailable? implemented in the sign_up_sheet_controller.rb needs to be removed from the controller. The methods should only exist in the corresponding model.&lt;br /&gt;
* '''WI-5:''' Method other_confirmed_topic_for_user is only referenced by the method waitlist_teams. The method wait_list_teams is not referenced anywhere. These methods need to be removed if it is confirmed that they are not used anywhere else.&lt;br /&gt;
* '''WI-6:''' Expertiza provides a functionality to import topics from a file(.csv or .txt). This feature is currently not tested. Test the functionality of this feature and fix it if broken. Another change that needs to be brought about is that the current implementation requires that each row of the imported file needs to have four columns. However the fourth column which represents &amp;quot;category&amp;quot; is not mandatory and it should be possible to import a document which does not include values for this column.&lt;br /&gt;
* '''WI-7:''' Add Rspec testcases to test the changes implemented above.&lt;br /&gt;
=== Files Modified in this Project ===&lt;br /&gt;
The following files were modified for this project.&lt;br /&gt;
* app/controllers/participants_controller.rb&lt;br /&gt;
* app/controllers/sign_up_sheet_controller.rb&lt;br /&gt;
* app/models/sign_up_topic.rb&lt;br /&gt;
* app/models/signed_up_team.rb&lt;br /&gt;
* app/models/team.rb&lt;br /&gt;
* app/models/waitlist.rb&lt;br /&gt;
* app/views/participants/view_publishing_rights.html.erb&lt;br /&gt;
* app/views/sign_up_sheet/list.html.erb&lt;br /&gt;
* app/views/sign_up_sheet/show_team.html.erb&lt;br /&gt;
* app/views/sign_up_sheet/view_publishing_rights.html.erb&lt;br /&gt;
* app/views/tree_display/actions/_assignments_actions.html.erb&lt;br /&gt;
* app/helpers/import_topics_helper.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* config/routes.rb&lt;br /&gt;
* spec/features/instructor_interface_spec.rb&lt;br /&gt;
* spec/features/team_creation_spec.rb&lt;br /&gt;
=== Solutions implemented and Delivered ===&lt;br /&gt;
* '''WI-1:''' For this work item the following files were modified:&lt;br /&gt;
&lt;br /&gt;
'''''app/controllers/sign_up_sheet_controller.rb:''''' &lt;br /&gt;
In this file the method ad_info is defined. This method was defined using sql query to provide its results. To change this method in such a way that it uses active record associations changes needed to be made to the function as shown below. Additionally since the new implementation returns a list of hashes the way in which this result is accessed in show_team method was also changed to accommodate this change.&lt;br /&gt;
&lt;br /&gt;
'''''Previous Code:'''''&lt;br /&gt;
  def ad_info(assignment_id, topic_id)&lt;br /&gt;
    query = &amp;quot;select t.id as team_id,t.comments_for_advertisement,t.name,su.assignment_id, t.advertise_for_partner from teams t, signed_up_teams s,sign_up_topics su &amp;quot;+&lt;br /&gt;
        &amp;quot;where s.topic_id='&amp;quot;+topic_id.to_s+&amp;quot;' and s.team_id=t.id and s.topic_id = su.id;    &amp;quot;&lt;br /&gt;
    SignUpTopic.find_by_sql(query)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''''Modified Code:'''''&lt;br /&gt;
  def ad_info(assignment_id, topic_id)&lt;br /&gt;
    # List that contains individual result object&lt;br /&gt;
    @result_list = []&lt;br /&gt;
    # Get the results&lt;br /&gt;
    @results = SignedUpTeam.where(&amp;quot;topic_id = ?&amp;quot;, &amp;quot;#{topic_id}&amp;quot;)&lt;br /&gt;
    # Iterate through the results of the query and get the required attributes&lt;br /&gt;
    @results.each do |result| &lt;br /&gt;
      team = result.team&lt;br /&gt;
      topic = result.topic&lt;br /&gt;
      resultMap = {}&lt;br /&gt;
      resultMap[:team_id] = team.id&lt;br /&gt;
      resultMap[:comments_for_advertisement] = team.comments_for_advertisement&lt;br /&gt;
      resultMap[:name] = team.name&lt;br /&gt;
      resultMap[:assignment_id] = topic.assignment_id&lt;br /&gt;
      resultMap[:advertise_for_partner] = team.advertise_for_partner&lt;br /&gt;
      # Append to the list&lt;br /&gt;
      @result_list.append(resultMap)&lt;br /&gt;
    end&lt;br /&gt;
    @result_list&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Additionally changes were also required in the models signed_up_team.rb and team.rb. This was because these associations were required to fetch required data using active record associations. The following changes were made to the files:&lt;br /&gt;
&lt;br /&gt;
'''''app/models/signed_up_team.rb:'''''&lt;br /&gt;
  class SignedUpTeam &amp;lt; ActiveRecord::Base&lt;br /&gt;
    belongs_to :topic, :class_name =&amp;gt; 'SignUpTopic'&lt;br /&gt;
    belongs_to :team, :class_name =&amp;gt; 'Team' #Added this association between SignedUpTeam and Team.&lt;br /&gt;
&lt;br /&gt;
'''''app/models/team.rb'''''&lt;br /&gt;
  class Team &amp;lt; ActiveRecord::Base&lt;br /&gt;
    has_many :teams_users, :dependent =&amp;gt; :destroy&lt;br /&gt;
    has_many :users, :through =&amp;gt; :teams_users&lt;br /&gt;
    has_many :join_team_requests&lt;br /&gt;
    has_one :team_node,:foreign_key =&amp;gt; :node_object_id,:dependent =&amp;gt; :destroy&lt;br /&gt;
    has_many :bids, :dependent =&amp;gt; :destroy&lt;br /&gt;
    has_many :signed_up_teams #Added this association between Team and SignedUpTeam.&lt;br /&gt;
&lt;br /&gt;
* '''WI-2:''' For this work item the file ''app/controllers/sign_up_sheet_controller.rb'' was modified. After performing a code-analysis it was concluded that the method ''add_default_microtask'' was not referenced from any other part of the project. Hence it was safely removed.&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Jitesh&amp;diff=101211</id>
		<title>User:Jitesh</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Jitesh&amp;diff=101211"/>
		<updated>2016-03-24T00:53:33Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CSC/ECE 517 Spring 2016 - Expertiza E1613 =&lt;br /&gt;
This wiki page is for the description of changes made according to the specification of E1613 OSS assignment for Spring 2016.&lt;br /&gt;
&lt;br /&gt;
== Peer Review Information ==&lt;br /&gt;
For testing the changes made, the following credentials are recommended:&lt;br /&gt;
* Instructor Login: '''username:''' ''instructor6'' '''password:''' ''password''&lt;br /&gt;
* Student Login: '''username:''' ''student11'' '''password:''' ''password''&lt;br /&gt;
* Student Login: '''username:''' ''student1862'' '''password:''' ''password''&lt;br /&gt;
The above users are suggested for testing because there are a few users which would lead to exceptions upon login for unknown reasons completely unrelated to our work.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
=== Background ===&lt;br /&gt;
Expertiza is a web portal which can be used to manage assignments related to a course. It provides a platform to view assignments, manage teams, select topics and work improvement through anonymous peer reviews. For the instructor it provides complete control to create assignments, view reviews submitted and provide feedback. The instructors also have an option to publish the students work based on the rights provided by the student.&lt;br /&gt;
&lt;br /&gt;
=== Problem Statement ===&lt;br /&gt;
The following were the tasks identified to accomplish through this project. These tasks are part of the sign_up_sheet_controller.rb and sign_up_topic.rb&lt;br /&gt;
* '''WI-1:''' Method ad_info in the sign_up_sheet_controller.rb users sql query to retrieve the desired objects. This needs to be changed so that action records are used instead and a hash/array of the required object is returned.&lt;br /&gt;
* '''WI-2:''' Delete the method add_default_microtask after confirming that there is no reference to the method.&lt;br /&gt;
* '''WI-3:''' The view_publishing_rights method brings up a webpage to the instructor on whether the course staff has been granted or denied the right to use each submission in the future. The current implementation of the project works only for assignments that have topics assigned to them. This needs to be enhanced to include assignments that do not have associated topics as well. Another change that needs to be brought about is that the view_publishing_rights needs to be refactored and moved to the participants controller. &lt;br /&gt;
* '''WI-4:''' The methods slotAvailable? implemented in the sign_up_sheet_controller.rb needs to be removed from the controller. The methods should only exist in the corresponding model.&lt;br /&gt;
* '''WI-5:''' Method other_confirmed_topic_for_user is only referenced by the method waitlist_teams. The method wait_list_teams is not referenced anywhere. These methods need to be removed if it is confirmed that they are not used anywhere else.&lt;br /&gt;
* '''WI-6:''' Expertiza provides a functionality to import topics from a file(.csv or .txt). This feature is currently not tested. Test the functionality of this feature and fix it if broken. Another change that needs to be brought about is that the current implementation requires that each row of the imported file needs to have four columns. However the fourth column which represents &amp;quot;category&amp;quot; is not mandatory and it should be possible to import a document which does not include values for this column.&lt;br /&gt;
* '''WI-7:''' Add Rspec testcases to test the changes implemented above.&lt;br /&gt;
=== Files Modified in this Project ===&lt;br /&gt;
The following files were modified for this project.&lt;br /&gt;
* app/controllers/participants_controller.rb&lt;br /&gt;
* app/controllers/sign_up_sheet_controller.rb&lt;br /&gt;
* app/models/sign_up_topic.rb&lt;br /&gt;
* app/models/signed_up_team.rb&lt;br /&gt;
* app/models/team.rb&lt;br /&gt;
* app/models/waitlist.rb&lt;br /&gt;
* app/views/participants/view_publishing_rights.html.erb&lt;br /&gt;
* app/views/sign_up_sheet/list.html.erb&lt;br /&gt;
* app/views/sign_up_sheet/show_team.html.erb&lt;br /&gt;
* app/views/sign_up_sheet/view_publishing_rights.html.erb&lt;br /&gt;
* app/views/tree_display/actions/_assignments_actions.html.erb&lt;br /&gt;
* app/helpers/import_topics_helper.rb&lt;br /&gt;
* app/assets/javascripts/tree_display.jsx&lt;br /&gt;
* config/routes.rb&lt;br /&gt;
* spec/features/instructor_interface_spec.rb&lt;br /&gt;
* spec/features/team_creation_spec.rb&lt;br /&gt;
=== Solutions implemented and Delivered ===&lt;br /&gt;
* '''WI-1:''' &lt;br /&gt;
For this work item the following files were modified:&lt;br /&gt;
&lt;br /&gt;
'''''app/controllers/sign_up_sheet_controller.rb:''''' &lt;br /&gt;
In this file the method ad_info is defined. This method was defined using sql query to provide its results. To change this method in such a way that it uses active record associations changes needed to be made to the function as shown below. Additionally since the new implementation returns a list of hashes the way in which this result is accessed in show_team method was also changed to accommodate this change.&lt;br /&gt;
&lt;br /&gt;
'''''Previous Code:'''''&lt;br /&gt;
  def ad_info(assignment_id, topic_id)&lt;br /&gt;
    query = &amp;quot;select t.id as team_id,t.comments_for_advertisement,t.name,su.assignment_id, t.advertise_for_partner from teams t, signed_up_teams s,sign_up_topics su &amp;quot;+&lt;br /&gt;
        &amp;quot;where s.topic_id='&amp;quot;+topic_id.to_s+&amp;quot;' and s.team_id=t.id and s.topic_id = su.id;    &amp;quot;&lt;br /&gt;
    SignUpTopic.find_by_sql(query)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''''Modified Code:'''''&lt;br /&gt;
  def ad_info(assignment_id, topic_id)&lt;br /&gt;
    # List that contains individual result object&lt;br /&gt;
    @result_list = []&lt;br /&gt;
    # Get the results&lt;br /&gt;
    @results = SignedUpTeam.where(&amp;quot;topic_id = ?&amp;quot;, &amp;quot;#{topic_id}&amp;quot;)&lt;br /&gt;
    # Iterate through the results of the query and get the required attributes&lt;br /&gt;
    @results.each do |result| &lt;br /&gt;
      team = result.team&lt;br /&gt;
      topic = result.topic&lt;br /&gt;
      resultMap = {}&lt;br /&gt;
      resultMap[:team_id] = team.id&lt;br /&gt;
      resultMap[:comments_for_advertisement] = team.comments_for_advertisement&lt;br /&gt;
      resultMap[:name] = team.name&lt;br /&gt;
      resultMap[:assignment_id] = topic.assignment_id&lt;br /&gt;
      resultMap[:advertise_for_partner] = team.advertise_for_partner&lt;br /&gt;
      # Append to the list&lt;br /&gt;
      @result_list.append(resultMap)&lt;br /&gt;
    end&lt;br /&gt;
    @result_list&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Additionally changes were also required in the models signed_up_team.rb and team.rb. This was because these associations were required to fetch required data using active record associations. The following changes were made to the files:&lt;br /&gt;
&lt;br /&gt;
'''''app/models/signed_up_team.rb:'''''&lt;br /&gt;
  class SignedUpTeam &amp;lt; ActiveRecord::Base&lt;br /&gt;
    belongs_to :topic, :class_name =&amp;gt; 'SignUpTopic'&lt;br /&gt;
    belongs_to :team, :class_name =&amp;gt; 'Team' #Added this association between SignedUpTeam and Team.&lt;br /&gt;
&lt;br /&gt;
'''''app/models/team.rb'''''&lt;br /&gt;
  class Team &amp;lt; ActiveRecord::Base&lt;br /&gt;
    has_many :teams_users, :dependent =&amp;gt; :destroy&lt;br /&gt;
    has_many :users, :through =&amp;gt; :teams_users&lt;br /&gt;
    has_many :join_team_requests&lt;br /&gt;
    has_one :team_node,:foreign_key =&amp;gt; :node_object_id,:dependent =&amp;gt; :destroy&lt;br /&gt;
    has_many :bids, :dependent =&amp;gt; :destroy&lt;br /&gt;
    has_many :signed_up_teams #Added this association between Team and SignedUpTeam.&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Jitesh&amp;diff=101173</id>
		<title>User:Jitesh</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Jitesh&amp;diff=101173"/>
		<updated>2016-03-23T23:45:48Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CSC/ECE 517 Spring 2016 - Expertiza E1613 =&lt;br /&gt;
This wiki page is for the description of changes made according to the specification of E1613 OSS assignment for Spring 2016.&lt;br /&gt;
&lt;br /&gt;
== Peer Review Information ==&lt;br /&gt;
For testing the changes made, the following credentials are recommended:&lt;br /&gt;
* Instructor Login: '''username:''' ''instructor6'' '''password:''' ''password''&lt;br /&gt;
* Student Login: username: ''student11'' password: ''password''&lt;br /&gt;
* Student Login: username: ''student1862'' password: ''password''&lt;br /&gt;
The above users are suggested for testing because there are a few users which would lead to exceptions upon login for unknown reasons completely unrelated to our work.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
=== Background ===&lt;br /&gt;
Expertiza is a web portal which can be used to manage assignments related to a course. It provides a platform to view assignments, manage teams, select topics and work improvement through anonymous peer reviews. For the instructor it provides complete control to create assignments, view reviews submitted and provide feedback. The instructors also have an option to publish the students work based on the rights provided by the student.&lt;br /&gt;
&lt;br /&gt;
=== Problem Statement ===&lt;br /&gt;
The following were the tasks identified to accomplish through this project. These tasks are part of the sign_up_sheet_controller.rb and sign_up_topic.rb&lt;br /&gt;
* Method ad_info in the sign_up_sheet_controller.rb users sql query to retrieve the desired objects. This needs to be changed so that action records are used instead and a hash/array of the required object is returned.&lt;br /&gt;
* Delete the method add_default_microtask after confirming that there is no reference to the method.&lt;br /&gt;
* The view_publishing_rights method brings up a webpage to the instructor on whether the course staff has been granted or denied the right to use each submission in the future. The current implementation of the project works only for assignments that have topics assigned to them. This needs to be enhanced to include assignments that do not have associated topics as well. Another change that needs to be brought about is that the view_publishing_rights needs to be refactored and moved to the participants controller. &lt;br /&gt;
* The methods slotAvailable? implemented in the sign_up_sheet_controller.rb needs to be removed from the controller. The methods should only exist in the corresponding model.&lt;br /&gt;
* Method other_confirmed_topic_for_user is only referenced by the method waitlist_teams. The method wait_list_teams is not referenced anywhere. These methods need to be removed if it is confirmed that they are not used anywhere else.&lt;br /&gt;
* Expertiza provides a functionality to import topics from a file(.csv or .txt). This feature is currently not tested. Test the functionality of this feature and fix it if broken. Another change that needs to be brought about is that the current implementation requires that each row of the imported file needs to have four columns. However the fourth column which represents &amp;quot;category&amp;quot; is not mandatory and it should be possible to import a document which does not include values for this column.&lt;br /&gt;
* Add Rspec testcases to test the changes implemented above.&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Jitesh&amp;diff=101172</id>
		<title>User:Jitesh</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Jitesh&amp;diff=101172"/>
		<updated>2016-03-23T23:39:47Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: /* Problem Statement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CSC/ECE 517 Spring 2016 - Expertiza E1613 =&lt;br /&gt;
This wiki page is for the description of changes made according to the specification of E1613 OSS assignment for Spring 2016.&lt;br /&gt;
&lt;br /&gt;
== Peer Review Information ==&lt;br /&gt;
For testing the changes made, the following credentials are recommended:&lt;br /&gt;
* Instructor Login: username: ''instructor6'' password: ''password''&lt;br /&gt;
* Student Login: username: ''student11'' password: ''password''&lt;br /&gt;
* Student Login: username: ''student1862'' password: ''password''&lt;br /&gt;
The above users are suggested for testing because there are a few users which would lead to exceptions upon login for unknown reasons completely unrelated to our work.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
=== Background ===&lt;br /&gt;
Expertiza is a web portal which can be used to manage assignments related to a course. It provides a platform to view assignments, manage teams, select topics and work improvement through anonymous peer reviews. For the instructor it provides complete control to create assignments, view reviews submitted and provide feedback. The instructors also have an option to publish the students work based on the rights provided by the student.&lt;br /&gt;
&lt;br /&gt;
=== Problem Statement ===&lt;br /&gt;
The following were the tasks identified to accomplish through this project. These tasks are part of the sign_up_sheet_controller.rb and sign_up_topic.rb&lt;br /&gt;
* Method ad_info in the sign_up_sheet_controller.rb users sql query to retrieve the desired objects. This needs to be changed so that action records are used instead and a hash/array of the required object is returned.&lt;br /&gt;
* Delete the method add_default_microtask after confirming that there is no reference to the method.&lt;br /&gt;
* The view_publishing_rights method brings up a webpage to the instructor on whether the course staff has been granted or denied the right to use each submission in the future. The current implementation of the project works only for assignments that have topics assigned to them. This needs to be enhanced to include assignments that do not have associated topics as well. Another change that needs to be brought about is that the view_publishing_rights needs to be refactored and moved to the participants controller. &lt;br /&gt;
* The methods slotAvailable? implemented in the sign_up_sheet_controller.rb needs to be removed from the controller. The methods should only exist in the corresponding model.&lt;br /&gt;
* Method other_confirmed_topic_for_user is only referenced by the method waitlist_teams. The method wait_list_teams is not referenced anywhere. These methods need to be removed if it is confirmed that they are not used anywhere else.&lt;br /&gt;
* Expertiza provides a functionality to import topics from a file(.csv or .txt). This feature is currently not tested. Test the functionality of this feature and fix it if broken. Another change that needs to be brought about is that the current implementation requires that each row of the imported file needs to have four columns. However the fourth column which represents &amp;quot;category&amp;quot; is not mandatory and it should be possible to import a document which does not include values for this column.&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Jitesh&amp;diff=101170</id>
		<title>User:Jitesh</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Jitesh&amp;diff=101170"/>
		<updated>2016-03-23T23:21:59Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CSC/ECE 517 Spring 2016 - Expertiza E1613 =&lt;br /&gt;
This wiki page is for the description of changes made according to the specification of E1613 OSS assignment for Spring 2016.&lt;br /&gt;
&lt;br /&gt;
== Peer Review Information ==&lt;br /&gt;
For testing the changes made, the following credentials are recommended:&lt;br /&gt;
* Instructor Login: username: ''instructor6'' password: ''password''&lt;br /&gt;
* Student Login: username: ''student11'' password: ''password''&lt;br /&gt;
* Student Login: username: ''student1862'' password: ''password''&lt;br /&gt;
The above users are suggested for testing because there are a few users which would lead to exceptions upon login for unknown reasons completely unrelated to our work.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
=== Background ===&lt;br /&gt;
Expertiza is a web portal which can be used to manage assignments related to a course. It provides a platform to view assignments, manage teams, select topics and work improvement through anonymous peer reviews. For the instructor it provides complete control to create assignments, view reviews submitted and provide feedback. The instructors also have an option to publish the students work based on the rights provided by the student.&lt;br /&gt;
&lt;br /&gt;
=== Problem Statement ===&lt;br /&gt;
The following were the tasks identified to accomplish through this project.&lt;br /&gt;
* Method ad_info in the sign_up_sheet_controller.rb users sql query to retrieve the desired objects. This needs to be changed so that action records are used instead and a hash/array of the required object is returned.&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Jitesh&amp;diff=101169</id>
		<title>User:Jitesh</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Jitesh&amp;diff=101169"/>
		<updated>2016-03-23T23:07:54Z</updated>

		<summary type="html">&lt;p&gt;Jitesh: Created page with &amp;quot;= CSC/ECE 517 Spring 2016 - Expertiza E1613 = This wiki page is for the description of changes made according to the specification of E1613 OSS assignment for Spring 2016.  == Pe...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CSC/ECE 517 Spring 2016 - Expertiza E1613 =&lt;br /&gt;
This wiki page is for the description of changes made according to the specification of E1613 OSS assignment for Spring 2016.&lt;br /&gt;
&lt;br /&gt;
== Peer Review Information ==&lt;br /&gt;
For testing the changes made, the following credentials are recommended:&lt;br /&gt;
* Instructor Login: username: ''instructor6'' password: ''password''&lt;br /&gt;
* Student Login: username: ''student11'' password: ''password''&lt;br /&gt;
* Student Login: username: ''student1862'' password: ''password''&lt;br /&gt;
The above users are suggested for testing because there are a few users which would lead to exceptions upon login for unknown reasons completely unrelated to our work.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
=== Background ===&lt;br /&gt;
Expertiza is a web portal which can be used to manage assignments related to a course. It provides a platform to view assignments, manage teams, select topics and work improvement through anonymous peer reviews. For the instructor it provides complete control to create assignments, view reviews submitted and provide feedback. The instructors also have an option to publish the students work based on the rights provided by the student.&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;/div&gt;</summary>
		<author><name>Jitesh</name></author>
	</entry>
</feed>