Skip to content

Commit

Permalink
added admin and user main page
Browse files Browse the repository at this point in the history
  • Loading branch information
danielcjacobs committed Apr 25, 2020
1 parent 90015f2 commit 6784150
Show file tree
Hide file tree
Showing 11 changed files with 256 additions and 102 deletions.
5 changes: 5 additions & 0 deletions app/assets/stylesheets/project4.css
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,11 @@ table div, .dataTables_scrollHead, .dataTables_scrollHeadInner, .dataTables_scro
color: green;
}

#upperPanel {
text-align: center;
flex-direction: column;
}

#trash{
font-size: 64px;
}
6 changes: 5 additions & 1 deletion app/controllers/plans_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,11 @@ class PlansController < ApplicationController
# GET /plans
# GET /plans.json
def index
@plans = Plan.where(user_id: current_user.id)
if current_user.role == "admin"
@plans = Plan.all
else
@plans = Plan.where(user_id: current_user.id)
end
end

# GET /plans/1
Expand Down
182 changes: 123 additions & 59 deletions app/javascript/packs/myjs.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
var currPlan = false;
var plan = false;
var currPlan = null;
var plan = null;
var selectedMajor = "Comp. Sci.";
var selectedCatalogYear = 2017;
var catalogLoaded = false;
var draggedCourse = false;
var draggedReqOrigin = false;
var draggedPlanOrigin = false;

$(getPlans);
var planTableLoaded = false;
var draggedCourse = null;
var draggedReqOrigin = null;
var draggedPlanOrigin = null;
var draggedCatOrigin = null;

// changes plan, triggered on selection of new plan in dropdown
$(document).on('change', '#planSelect', function (){
Expand All @@ -19,15 +19,46 @@ $(document).on('change', '#planSelect', function (){
selectedCatalogYear = parseInt(selected[1]);

// send request to load new plan
getPlans();
getPlan();

});

function getPlans(){
$.get("plans.json", function(plans){
// For loading the table of plans
window.getAllPlans = function(){
$.get("/plans.json", function(plans){
//console.log(plans);
plan = false;
let buttons = [];
let colObjects = [];
for (let p in plans){
let openHtml = "<a href='/plans/" + plans[p].id + "'>Open</a>";
colObjects.push({"plan": plans[p], "open": openHtml });
}
if (!planTableLoaded){
$("#plansTable").DataTable( {
"dom": '<"top"if>t',
"data": colObjects,
"columns": [
{ "data": "plan.user.login" },
{ "data": "plan.plan_name" },
{ "data": "plan.major" },
{ "data": "plan.catalog.year"},
{ "data": "open" }
],
"paging": false,
"scrollCollapse": false
});
$('.dataTables_scrollHeadInner').css('padding', '0');
planTableLoaded = true;
}
});
}

// For loading a single plan
window.getPlan = function(){
$.get("/plans.json", function(plans){
plan = null;
$(".dropdown").html("<option selected disabled>Change Plan</option>");
// set current plan
for (let i in plans){
if (plans[i].major === selectedMajor && plans[i].catalog.year === selectedCatalogYear){
plan = plans[i];
Expand All @@ -37,10 +68,11 @@ function getPlans(){
$(".dropdown").append("<option>" + plans[i].major + ", " + plans[i].catalog.year + "</option>");
}
}
if (plan === false){
if (plan == null){
console.log("Error: did not find selected plan");
}

// dynamically generate years, terms, semesters on page
currPlan = new Plan(plan.user.login, plan.plan_name, plan.major, plan.curr_year, plan.curr_term, plan.courses, plan.catalog.year);
currPlan.sortCourses();
currPlan.generateHTML();
Expand All @@ -52,6 +84,7 @@ function getPlans(){
$("#hrsFuture").html("Remaining Hours: " + currPlan.hrsFuture);
$("#hrsTotal").html("Total Hours Planned: " + currPlan.hrsTotal);

// load catalog table
let courses = [];
for (let c in plan.catalog.courses){
courses.push(plan.catalog.courses[c]);
Expand Down Expand Up @@ -79,12 +112,11 @@ function getPlans(){
}


// load accordion with requirements
var requirements = plan.requirements;

$( function() {
$( "#accordion" ).accordion({collapsible: true, active: false});
});

$('#accordion').empty();
for (let i in requirements){
let reqCourses = requirements[i].courses;
Expand All @@ -102,87 +134,118 @@ function getPlans(){
});
}

// check if course is already in the plan
function courseInPlan(designator){
let c = plan.courses[designator];
let c = currPlan.courses[designator];
return c !== undefined;
}

// check if course is already in the semester being dropped on
function courseInSemester(designator, droppedTerm){
for (let i=0; i < droppedTerm.children.length; i++){
if (droppedTerm.children[i].innerText.includes(designator)){
return true;
}
}
return false;
}

// set source course when dragging from requiremetns accordion
window.dragFromReq = function(event){
let desig = event.target.innerText.split(": ")[0];
draggedCourse = plan.catalog.courses[desig];
draggedPlanOrigin = null;
draggedCatOrigin = null;
draggedReqOrigin = event.target;
}

// set source course when dragging from catalog table
window.dragFromCat = function(event){
let desig = event.target.children[0].innerText
draggedCourse = plan.catalog.courses[desig];
draggedPlanOrigin = null;
draggedReqOrigin = null;
draggedCatOrigin = event.target;
}

// set source course when dragging from plan
window.dragFromPlan = function(event){
let desig = event.target.innerText.split(": ")[0];
draggedCourse = plan.catalog.courses[desig];
draggedReqOrigin = null;
draggedCatOrigin = null;
draggedPlanOrigin = event.target;
}

// indicate valid drop when hovering over plan
window.hoverOverPlan = function(event){
event.preventDefault();
}

// update db when dropping course on plan
window.dropOnPlan = function(event){
event.preventDefault();
event.target.children[1].innerHTML += "<li draggable='true' ondragstart='dragFromPlan(event)'>" + draggedCourse.designator + ": " + draggedCourse.name + "</li>";
if (event.target.classList.contains('current')){
currPlan.hrsCurrent += draggedCourse.credits;
}
else if (event.target.classList.contains('notStarted')){
currPlan.hrsFuture += draggedCourse.credits;
}
else{
currPlan.hrsCompleted += draggedCourse.credits;
}
let hours = parseInt(event.target.children[0].children[1].innerText.split(": ")[1]);
event.target.children[0].children[1].innerText = "Hours: " + (hours + draggedCourse.credits);
if (draggedReqOrigin !== null){
// From requirements accordion
currPlan.hrsTotal += draggedCourse.credits;
draggedReqOrigin.hidden = true;
draggedReqOrigin = null;
}
else if (draggedPlanOrigin !== null){
// From another term
if (draggedPlanOrigin.parentElement.parentElement.classList.contains('current')){
currPlan.hrsCurrent -= draggedCourse.credits;
if (!(courseInSemester(draggedCourse.designator, event.target.children[1]) || (courseInPlan(draggedCourse.designator) && draggedCatOrigin != null))) {
event.target.children[1].innerHTML += "<li draggable='true' ondragstart='dragFromPlan(event)'>" + draggedCourse.designator + ": " + draggedCourse.name + "</li>";
if (event.target.classList.contains('current')){
currPlan.hrsCurrent += draggedCourse.credits;
}
else if (draggedPlanOrigin.parentElement.parentElement.classList.contains('notStarted')){
currPlan.hrsFuture -= draggedCourse.credits;
else if (event.target.classList.contains('notStarted')){
currPlan.hrsFuture += draggedCourse.credits;
}
else{
currPlan.hrsCompleted -= draggedCourse.credits;
currPlan.hrsCompleted += draggedCourse.credits;
}
let originHours = parseInt(draggedPlanOrigin.parentElement.previousSibling.children[1].innerText.split(": ")[1]);
draggedPlanOrigin.parentElement.previousSibling.children[1].innerText = "Hours: " + (originHours - draggedCourse.credits);
draggedPlanOrigin.remove();
draggedPlanOrigin = null;
}
else{
// From catalog table
currPlan.hrsTotal += draggedCourse.credits;
let hours = parseInt(event.target.children[0].children[1].innerText.split(": ")[1]);
event.target.children[0].children[1].innerText = "Hours: " + (hours + draggedCourse.credits);
if (draggedReqOrigin !== null){
// From requirements accordion
currPlan.hrsTotal += draggedCourse.credits;
draggedReqOrigin.hidden = true;
draggedReqOrigin = null;
}
else if (draggedPlanOrigin !== null){
// From another term
if (draggedPlanOrigin.parentElement.parentElement.classList.contains('current')){
currPlan.hrsCurrent -= draggedCourse.credits;
}
else if (draggedPlanOrigin.parentElement.parentElement.classList.contains('notStarted')){
currPlan.hrsFuture -= draggedCourse.credits;
}
else{
currPlan.hrsCompleted -= draggedCourse.credits;
}
let originHours = parseInt(draggedPlanOrigin.parentElement.previousSibling.children[1].innerText.split(": ")[1]);
draggedPlanOrigin.parentElement.previousSibling.children[1].innerText = "Hours: " + (originHours - draggedCourse.credits);
draggedPlanOrigin.remove();
draggedPlanOrigin = null;
}
else{
// From catalog table
currPlan.hrsTotal += draggedCourse.credits;
}
// add to javascript plan object
let destTerm = event.target.children[0].children[0].innerText.split(" ")[0];
let destYear = parseInt(event.target.children[0].children[0].innerText.split(" ")[1]);
let newCourse = {
"designator": draggedCourse.designator,
"term": destTerm,
"year": destYear
};
currPlan.courses[draggedCourse.designator] = newCourse;
//update db
$.post("/plan_courses", {
plan: plan.plan_name,
user: plan.user.id,
designator: draggedCourse.designator,
term: destTerm,
year: destYear
});
$("#hrsCompleted").html("Hours Completed: " + currPlan.hrsCompleted);
$("#hrsCurrent").html("Current Hours: " + currPlan.hrsCurrent);
$("#hrsFuture").html("Remaining Hours: " + currPlan.hrsFuture);
$("#hrsTotal").html("Total Hours Planned: " + currPlan.hrsTotal);
}
$.post("/plan_courses", {
plan: plan.plan_name,
user: plan.user.id,
designator: draggedCourse.designator,
term: event.target.children[0].children[0].innerText.split(" ")[0],
year: parseInt(event.target.children[0].children[0].innerText.split(" ")[1]),
});
$("#hrsCompleted").html("Hours Completed: " + currPlan.hrsCompleted);
$("#hrsCurrent").html("Current Hours: " + currPlan.hrsCurrent);
$("#hrsFuture").html("Remaining Hours: " + currPlan.hrsFuture);
$("#hrsTotal").html("Total Hours Planned: " + currPlan.hrsTotal);
draggedCourse = null;
}

Expand All @@ -206,6 +269,7 @@ window.dropInTrash = function(event){
let originHours = parseInt(draggedPlanOrigin.parentElement.previousSibling.children[1].innerText.split(": ")[1]);
draggedPlanOrigin.parentElement.previousSibling.children[1].innerText = "Hours: " + (originHours - draggedCourse.credits);
draggedPlanOrigin.remove();
delete currPlan.courses[draggedCourse.designator];
draggedPlanOrigin = null;

$.get("/plan_courses", {
Expand Down
2 changes: 1 addition & 1 deletion app/models/user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@ class User < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
has_many :plans
belongs_to :major
belongs_to :major, optional: true
end
1 change: 1 addition & 0 deletions app/views/plans/_plan.json.jbuilder
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ json.user do
json.login plan.user.login
json.role plan.user.role
end
json.id plan.id
json.plan_name plan.name
json.major plan.major.name
json.curr_year plan.curr_year
Expand Down
70 changes: 41 additions & 29 deletions app/views/plans/index.html.erb
Original file line number Diff line number Diff line change
@@ -1,4 +1,44 @@
<nav id="header">
<div>
<% if user_signed_in?%>
<h1>Welcome, <%= current_user.login %></h1>
<h1 id="major"></h1>
<h1 id="catYear"></h1>
<% else %>
<%= link_to "Sign In", new_user_session_path, :method => :get %>
<%= link_to "Sign up", new_user_registration_path, :method => :get %>
<% end %>

</div>
<div>
<% if user_signed_in?%>
<%= link_to "Sign Out", destroy_user_session_path, :method => :delete %>
<% else %>
<% end %>
<a href="http://judah.cedarville.edu/peopleschoice/index.php"><i class="fa fa-home"></i>Home</a>
</div>
</nav>

<div class="main">
<div id="upperPanel" class="upper panel">
<header class="panelHeader">Plans</header>
<div class="container">
<table id="plansTable">
<thead>
<tr>
<th>User</th>
<th>Plan Name</th>
<th>Major</th>
<th>Catalog Year</th>
<th>Open</th>
</tr>
</thead>
</table>
</div>
</div>
</div>
<script>getAllPlans()</script>
<!--<nav id="header">
<div>
<% if user_signed_in?%>
<h1>Welcome, <%= current_user.login %></h1>
Expand Down Expand Up @@ -73,32 +113,4 @@
</div>
</div>
<div id='testDiv'></div>
</div>

<!--<p id="notice"><%= notice %></p>

<h1>Plans</h1>

<table>
<thead>
<tr>
<th>Name</th>
<th colspan="3"></th>
</tr>
</thead>

<tbody>
<% @plans.each do |plan| %>
<tr>
<td><%= plan.name %></td>
<td><%= link_to 'Show', plan %></td>
<td><%= link_to 'Edit', edit_plan_path(plan) %></td>
<td><%= link_to 'Destroy', plan, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
</table>

<br>

<%= link_to 'New Plan', new_plan_path %>
</div>
Loading

0 comments on commit 6784150

Please sign in to comment.