diff --git a/hourglass/client/main/main.css b/hourglass/client/main/main.css index 82e6f71..1e10e74 100644 --- a/hourglass/client/main/main.css +++ b/hourglass/client/main/main.css @@ -1208,7 +1208,8 @@ textarea.clickModify { background-color: rgba(0,0,0,0.1); position: relative; - cursor: default; + cursor: default !important; + display: table; -webkit-transition: background-color 0.4s ease; -moz-transition: background-color 0.4s ease; @@ -1221,13 +1222,20 @@ textarea.clickModify { } .doneUser div { + display: inline-block; text-align: center; + display: table-cell; +} + +.doneUser div:first-child { + width: 15%; + vertical-align: middle; } .doneUser img { - display: inline-block; - vertical-align: middle; - line-height: normal; + width: 4vh; + height: 4vh; + line-height: 4vh; -moz-border-radius: 50%; -webkit-border-radius: 50%; @@ -1235,11 +1243,8 @@ textarea.clickModify { } .doneUser span { - margin-bottom: 0.3vw; - - display: inline-block; + text-align: center; vertical-align: middle; - line-height: normal; } #toggleButtons { @@ -1320,7 +1325,7 @@ textarea.clickModify { #userDropdownAvatar { width: 100%; - height: 10vw; + height: 10.5vw; position: relative; } @@ -1340,7 +1345,7 @@ textarea.clickModify { #userDropdownAvatar p { font-size: 1.2vw; - width: 12vw; + width: 11vw; margin: 0 auto 0 auto; padding-top: 7.5vw; text-align: center; diff --git a/hourglass/client/main/main.html b/hourglass/client/main/main.html index 9277585..fab825e 100644 --- a/hourglass/client/main/main.html +++ b/hourglass/client/main/main.html @@ -118,10 +118,10 @@
{{work 'reports'}}
**School:
- +Hour:
diff --git a/hourglass/client/profile/profile.js b/hourglass/client/profile/profile.js index 6c3122c..0719fa4 100644 --- a/hourglass/client/profile/profile.js +++ b/hourglass/client/profile/profile.js @@ -50,7 +50,7 @@ Template.profile.helpers({ for (var i = 0; i < array.length; i++) { array[i].join = true; array[i].subscribers = array[i].subscribers.length; - array[i].teachershort = array[i].teacher.split(" ").slice(1).reduce(function(a, b) { + array[i].teachershort = (array[i].teacher === undefined) ? "" : array[i].teacher.split(" ").slice(1).reduce(function(a, b) { return a + " " + b; }); } @@ -133,6 +133,9 @@ Template.profile.helpers({ return {name:a.name,_id:(Math.floor(Math.random()*1000)).toString(),x:true}; })); return array; + }, + school() { + return Session.get("profile").school; } }); @@ -187,26 +190,51 @@ Template.profile.events({ } values.privacy = (values.privacy === "Public") ? false : true; values.status = false; - values.category.toLowerCase(); + values.category = values.category.toLowerCase(); values.code = ""; + var newClasses = Session.get("newClasses"); var duplicate = false; for(var i = 0; i < newClasses.length; i++) { if(JSON.stringify(newClasses[i]) === JSON.stringify(values)) duplicate = true; + if(newClasses[i].school === values.school && newClasses[i].teacher === values.teacher && newClasses[i].hour === values.hour) { + sAlert.error("This teacher is already teaching a class elsewhere!", { + effect: 'stackslide', + position: 'bottom-right', + timeout: 3000 + }); + return; + } } if(!duplicate && newClasses.length < 8) newClasses.push(values); - if(duplicate) sAlert.error("You already created this class!", { - effect: 'stackslide', - position: 'bottom-right', - timeout: 3000 - }); - if(newClasses.length === 8) sAlert.error("You already created 8 classes!", { - effect: 'stackslide', - position: 'bottom-right', - timeout: 3000 - }); + if(duplicate) { + sAlert.error("You already created this class!", { + effect: 'stackslide', + position: 'bottom-right', + timeout: 3000 + }); + } + if(newClasses.length === 8) { + sAlert.error("You already created 8 classes!", { + effect: 'stackslide', + position: 'bottom-right', + timeout: 3000 + }); + return; + } + if(classes.findOne({school: values.school, teacher: values.teacher, status: true, privacy: false, hour: values.hour}) || (values.teacher === "" && values.hour === "")) { + sAlert.error("This teacher is already teaching a class elsewhere!", { + effect: 'stackslide', + position: 'bottom-right', + timeout: 3000 + }); + return; + } + Session.set("newClasses", newClasses); $(".creInput").each(function(){$(this).val('');}); + $(".creInput")[0].value = Session.get("profile").school; + slideToField(Session.get("sections")[1]-1); }, 'click #backArrow' () { @@ -283,12 +311,15 @@ Template.profile.events({ document.getElementById(modifyingInput).value = option; toggleOptionMenu(false, modifyingInput); $(".selectedOption").removeClass("selectedOption"); - if(option !== Session.get("profile").school) { - newSetting = Session.get("profile"); - newSetting["classes"] = []; + var newSetting = Session.get("profile"); + if(modifyingInput === "school") { + if(option !== Session.get("profile").school) newSetting["classes"] = []; newSetting.school = option; - Session.set("profile", newSetting); + } else if(modifyingInput === "grade") { + newSetting = Session.get("profile"); + newSetting.grade = option; } + Session.set("profile", newSetting); }, 'input #classSearch' (event) { // Auto-complete updater if (event.target.value.length === 0) { @@ -381,18 +412,10 @@ Template.profile.events({ return; } - _.each(myClasses, function(myClass) { - Meteor.call("joinClass", [myClass, ""], function(err, result) { - if(err !== undefined) { - sAlert.error(message, { - effect: 'stackslide', - position: 'top' - }); - } - }) - }); + joinClass(0); + _.each(newClasses, function(newClass) { - if (!teachers.findOne({ + if(!teachers.findOne({ name: newClass.teacher })) { Meteor.call("createTeacher", newClass.teacher, newClass.school, function(error, result) { @@ -401,28 +424,13 @@ Template.profile.events({ effect: 'stackslide', position: 'top' }); - } else { - Meteor.call("createClass", newClass, function(error, result) { - if(error !== undefined) { - sAlert.error(message, { - effect: 'stackslide', - position: 'top' - }); - } - }); - } - }); - } else { - Meteor.call("createClass", newClass, function(error, result) { - if(error !== undefined) { - sAlert.error(message, { - effect: 'stackslide', - position: 'top' - }); } }); } }); + + createClass(0); + var profile = Session.get("profile"); profile.complete = true; profile.preferences = Meteor.user().profile.preferences; @@ -462,3 +470,38 @@ function slideToField(field) { } }); } + +var joined = 0; +var created = 0; + +function joinClass(num) { + var joining = Session.get("profile").classes; + Meteor.call("joinClass", [joining[num], ""], function(err, result) { + if(err !== undefined) { + sAlert.error(err.message, { + effect: 'stackslide', + position: 'top' + }); + } + joined++; + if(joined !== joining.length) { + joinClass(joined); + } + }); +} + +function createClass(num) { + var creating = Session.get("newClasses"); + Meteor.call("createClass", creating[num], function(error, result) { + if(error !== undefined) { + sAlert.error(error.message, { + effect: 'stackslide', + position: 'top' + }); + } + created++; + if(created !== creating.length) { + createClass(created); + } + }); +} diff --git a/hourglass/server/main.js b/hourglass/server/main.js index 9abcd3b..d5863a5 100644 --- a/hourglass/server/main.js +++ b/hourglass/server/main.js @@ -318,9 +318,13 @@ function securityCheck(checklist, input) { results.push(error); } error = results.find(function(result){return result !== 0;}); - if (checklist[checklist.length - 1] && error !== undefined) return error; - else if (results.find(function(result){return result === 0;}) === undefined) return results[0]; - else return 0; + if (checklist[checklist.length - 1] && error !== undefined) { + return error; + } else if (results.find(function(result){return result === 0;}) === undefined) { + return results[0]; + } else { + return 0; + } } Meteor.methods({ @@ -524,8 +528,9 @@ Meteor.methods({ _id: currentwork.class }); if(change.description) change.description = change.description.trim(); - var security = securityCheck([[1, 16, 13, 5, false], 11, 12, 10, 20, true], + var security = securityCheck([[1,16, 13, 14, 5, false], 11, 12, 10, 20, true], Object.assign({}, currentclass || {}, currentwork, {description: change.description, name: change.name, dueDate: change.dueDate, type: change.type})); + if (!security) { work.update({ _id: change._id @@ -706,8 +711,8 @@ Meteor.methods({ subscribers: foundsubs.concat(Meteor.userId()) } }); - var current = Meteor.user().profile; - current.classes = current.classes.concat(change); + var current = Meteor.users.findOne({_id: Meteor.userId()}).profile; + current.classes.push(change); Meteor.users.update({ _id: Meteor.userId() }, {