This commit is contained in:
Yaman Qalieh 2016-09-08 17:11:35 -04:00
parent ed8038261f
commit a329b4b08e
5 changed files with 249 additions and 241 deletions

View File

@ -33,3 +33,4 @@ eternicode:bootstrap-datepicker
shell-server@0.2.1 shell-server@0.2.1
http@1.2.9 http@1.2.9
underscore underscore
houston:admin

View File

@ -1,6 +1,7 @@
accounts-base@1.2.11 accounts-base@1.2.11
accounts-google@1.0.10 accounts-google@1.0.10
accounts-oauth@1.1.13 accounts-oauth@1.1.13
accounts-password@1.1.13
accounts-ui@1.1.9 accounts-ui@1.1.9
accounts-ui-unstyled@1.1.12 accounts-ui-unstyled@1.1.12
alanning:roles@1.2.15 alanning:roles@1.2.15
@ -21,6 +22,7 @@ callback-hook@1.0.9
check@1.2.3 check@1.2.3
coffeescript@1.2.4_1 coffeescript@1.2.4_1
dandv:caret-position@2.1.1 dandv:caret-position@2.1.1
dburles:mongo-collection-instances@0.3.4
ddp@1.2.5 ddp@1.2.5
ddp-client@1.3.1 ddp-client@1.3.1
ddp-common@1.2.6 ddp-common@1.2.6
@ -31,6 +33,7 @@ diff-sequence@1.0.6
ecmascript@0.5.8 ecmascript@0.5.8
ecmascript-runtime@0.3.14 ecmascript-runtime@0.3.14
ejson@1.0.12 ejson@1.0.12
email@1.0.16
es5-shim@4.6.14 es5-shim@4.6.14
eternicode:bootstrap-datepicker@1.6.0_3 eternicode:bootstrap-datepicker@1.6.0_3
fastclick@1.0.12 fastclick@1.0.12
@ -38,6 +41,7 @@ fortawesome:fontawesome@4.5.0
geojson-utils@1.0.9 geojson-utils@1.0.9
google@1.1.14 google@1.1.14
hot-code-push@1.0.4 hot-code-push@1.0.4
houston:admin@2.0.7
html-tools@1.0.10 html-tools@1.0.10
htmljs@1.0.10 htmljs@1.0.10
http@1.2.9 http@1.2.9
@ -51,6 +55,7 @@ iron:middleware-stack@1.1.0
iron:router@1.0.13 iron:router@1.0.13
iron:url@1.0.11 iron:url@1.0.11
jquery@1.11.9 jquery@1.11.9
lai:collection-extensions@0.1.4
launch-screen@1.0.12 launch-screen@1.0.12
less@2.7.5 less@2.7.5
livedata@1.0.18 livedata@1.0.18
@ -70,6 +75,7 @@ modules-runtime@0.7.6
momentjs:moment@2.14.4 momentjs:moment@2.14.4
mongo@1.1.12 mongo@1.1.12
mongo-id@1.0.5 mongo-id@1.0.5
npm-bcrypt@0.8.6_3
npm-mongo@1.5.48 npm-mongo@1.5.48
oauth@1.1.11 oauth@1.1.11
oauth2@1.1.10 oauth2@1.1.10
@ -88,13 +94,16 @@ routepolicy@1.0.11
rzymek:fullcalendar@2.7.2 rzymek:fullcalendar@2.7.2
service-configuration@1.0.10 service-configuration@1.0.10
session@1.1.6 session@1.1.6
sha@1.0.8
shell-server@0.2.1 shell-server@0.2.1
spacebars@1.0.12 spacebars@1.0.12
spacebars-compiler@1.0.12 spacebars-compiler@1.0.12
srp@1.0.9
standard-minifier-css@1.2.0 standard-minifier-css@1.2.0
standard-minifier-js@1.2.0 standard-minifier-js@1.2.0
templating@1.2.14 templating@1.2.14
templating-tools@1.0.4 templating-tools@1.0.4
tmeasday:paginated-subscription@0.2.4
tracker@1.1.0 tracker@1.1.0
ui@1.0.11 ui@1.0.11
underscore@1.0.9 underscore@1.0.9

View File

@ -1,161 +1,163 @@
<template name="admin"> <template name="admin">
<div id="{{userProfile}}adminBanner" style="{{banner}}{{textColor}}">
<ul id="adminTabs"> <div id="mainpage{{userProfile}}" onclick="window.location='/'"><h2>Main Page</h2></div>
<li id="aClasses" style="background-color:{{adminTabColor 'aClasses'}};margin-left:0">Classes</li> <div id="{{userProfile}}adminBanner" style="{{banner}}{{textColor}}">
<li id="aUsers" style="background-color:{{adminTabColor 'aUsers'}}">Users</li> <ul id="adminTabs">
<li id="aWork" style="background-color:{{adminTabColor 'aWork'}}">Work</li> <li id="aClasses" style="background-color:{{adminTabColor 'aClasses'}};margin-left:0">Classes</li>
<li id="aSchools" style="background-color:{{adminTabColor 'aSchools'}}">Schools</li> <li id="aUsers" style="background-color:{{adminTabColor 'aUsers'}}">Users</li>
<li id="aReports" style="background-color:{{adminTabColor 'aReports'}}">Reports</li> <li id="aWork" style="background-color:{{adminTabColor 'aWork'}}">Work</li>
</ul> <li id="aSchools" style="background-color:{{adminTabColor 'aSchools'}}">Schools</li>
</div> <li id="aReports" style="background-color:{{adminTabColor 'aReports'}}">Reports</li>
<div id="aContainer"> </ul>
<div id="adminSide" style="background-color:{{divColor 'sidebar'}}"> </div>
<div id="adminFilters"> <div id="aContainer">
<div class="sectionTop"> <div id="adminSide" style="background-color:{{divColor 'sidebar'}}">
<i class="fa fa-server" aria-hidden="true"></i> <div id="adminFilters">
<p>Filters</p> <div class="sectionTop">
</div> <i class="fa fa-server" aria-hidden="true"></i>
{{#each filters}} <p>Filters</p>
<p class="aFilter">{{filter}}</p> </div>
{{/each}} {{#each filters}}
</div> <p class="aFilter">{{filter}}</p>
<div id="adminFunctions"> {{/each}}
<div class="sectionTop"> </div>
<i class="fa fa-sliders" aria-hidden="true"></i> <div id="adminFunctions">
<p>Functions</p> <div class="sectionTop">
</div> <i class="fa fa-sliders" aria-hidden="true"></i>
<div class="aFunction"> <p>Functions</p>
<p>Add Item</p> </div>
<i class="fa fa-plus" aria-hidden="true"></i> <div class="aFunction">
</div> <p>Add Item</p>
<div class="aFunction"> <i class="fa fa-plus" aria-hidden="true"></i>
<p>Search</p> </div>
<i class="fa fa-search" aria-hidden="true"></i> <div class="aFunction">
</div> <p>Search</p>
</div> <i class="fa fa-search" aria-hidden="true"></i>
</div> </div>
<div id="adminContent" style="background-color:{{divColor 'header'}}"> </div>
{{#if adminTab 'aClasses'}} </div>
{{#each collection 'classes'}} <div id="adminContent" style="background-color:{{divColor 'header'}}">
<div class="classItem" style="background-color:{{divColor 'classes'}}"> {{#if adminTab 'aClasses'}}
<h2>Basic Info</h2> {{#each collection 'classes'}}
<div class="basicInfo"> <div class="classItem" style="background-color:{{divColor 'classes'}}">
<div class="keyContainer"> <h2>Basic Info</h2>
<span class="key">Name: </span> <div class="basicInfo">
<span class="modify name">{{name}}</span> <div class="keyContainer">
<i class="fa fa-files-o" aria-hidden="true"></i> <span class="key">Name: </span>
<i class="fa fa-pencil-square-o" aria-hidden="true"></i> <span class="modify name">{{name}}</span>
</div> <i class="fa fa-files-o" aria-hidden="true"></i>
<div class="keyContainer"> <i class="fa fa-pencil-square-o" aria-hidden="true"></i>
<span class="key">Hour: </span> </div>
<span class="modify hour">{{hour}}</span> <div class="keyContainer">
<i class="fa fa-files-o" aria-hidden="true"></i> <span class="key">Hour: </span>
<i class="fa fa-pencil-square-o" aria-hidden="true"></i> <span class="modify hour">{{hour}}</span>
</div> <i class="fa fa-files-o" aria-hidden="true"></i>
<div class="keyContainer"> <i class="fa fa-pencil-square-o" aria-hidden="true"></i>
<span class="key">Teacher: </span> </div>
<span class="modify teacher">{{teacher}}</span> <div class="keyContainer">
<i class="fa fa-files-o" aria-hidden="true"></i> <span class="key">Teacher: </span>
<i class="fa fa-pencil-square-o" aria-hidden="true"></i> <span class="modify teacher">{{teacher}}</span>
</div> <i class="fa fa-files-o" aria-hidden="true"></i>
<div class="keyContainer"> <i class="fa fa-pencil-square-o" aria-hidden="true"></i>
<span class="key">School: </span> </div>
<span class="modify school">{{school}}</span> <div class="keyContainer">
<i class="fa fa-files-o" aria-hidden="true"></i> <span class="key">School: </span>
<i class="fa fa-pencil-square-o" aria-hidden="true"></i> <span class="modify school">{{school}}</span>
</div> <i class="fa fa-files-o" aria-hidden="true"></i>
<div class="keyContainer"> <i class="fa fa-pencil-square-o" aria-hidden="true"></i>
<span class="key">Category: </span> </div>
<span class="modify category">{{category}}</span> <div class="keyContainer">
<i class="fa fa-files-o" aria-hidden="true"></i> <span class="key">Category: </span>
<i class="fa fa-pencil-square-o" aria-hidden="true"></i> <span class="modify category">{{category}}</span>
</div> <i class="fa fa-files-o" aria-hidden="true"></i>
<div class="keyContainer"> <i class="fa fa-pencil-square-o" aria-hidden="true"></i>
<span class="key">Privacy: </span> </div>
<span class="modify privacy">{{privacy}}</span> <div class="keyContainer">
<i class="fa fa-files-o" aria-hidden="true"></i> <span class="key">Privacy: </span>
<i class="fa fa-pencil-square-o" aria-hidden="true"></i> <span class="modify privacy">{{privacy}}</span>
</div> <i class="fa fa-files-o" aria-hidden="true"></i>
<div class="keyContainer"> <i class="fa fa-pencil-square-o" aria-hidden="true"></i>
<span class="key">Code: </span> </div>
<span class="modify code">{{code}}</span> <div class="keyContainer">
<i class="fa fa-files-o" aria-hidden="true"></i> <span class="key">Code: </span>
<i class="fa fa-pencil-square-o" aria-hidden="true"></i> <span class="modify code">{{code}}</span>
</div> <i class="fa fa-files-o" aria-hidden="true"></i>
</div> <i class="fa fa-pencil-square-o" aria-hidden="true"></i>
<h2>User Info</h2> </div>
<div class="userInfo"> </div>
<div class="keyContainer"> <h2>User Info</h2>
<span class="key">Creator: </span> <div class="userInfo">
<span class="modify admin">{{admin}}</span> <div class="keyContainer">
<i class="fa fa-files-o" aria-hidden="true"></i> <span class="key">Creator: </span>
<i class="fa fa-pencil-square-o" aria-hidden="true"></i> <span class="modify admin">{{admin}}</span>
</div> <i class="fa fa-files-o" aria-hidden="true"></i>
<div class="keyContainer"> <i class="fa fa-pencil-square-o" aria-hidden="true"></i>
<span class="key">Subscribers: </span> </div>
<i class="fa fa-plus" aria-hidden="true"></i><br> <div class="keyContainer">
<div class="aUserContainer"> <span class="key">Subscribers: </span>
{{#each subscribers}} <i class="fa fa-plus" aria-hidden="true"></i><br>
{{> adminUserBox}} <div class="aUserContainer">
{{/each}} {{#each subscribers}}
</div> {{> adminUserBox}}
</div> {{/each}}
<div class="keyContainer"> </div>
<span class="key">Moderators: </span> </div>
<i class="fa fa-plus" aria-hidden="true"></i><br> <div class="keyContainer">
<div class="aUserContainer"> <span class="key">Moderators: </span>
{{#each moderators}} <i class="fa fa-plus" aria-hidden="true"></i><br>
{{> adminUserBox}} <div class="aUserContainer">
{{/each}} {{#each moderators}}
</div> {{> adminUserBox}}
</div> {{/each}}
<div class="keyContainer"> </div>
<span class="key">Banned: </span> </div>
<i class="fa fa-plus" aria-hidden="true"></i><br> <div class="keyContainer">
<div class="aUserContainer"> <span class="key">Banned: </span>
{{#each banned}} <i class="fa fa-plus" aria-hidden="true"></i><br>
{{> adminUserBox}} <div class="aUserContainer">
{{/each}} {{#each banned}}
</div> {{> adminUserBox}}
</div> {{/each}}
</div> </div>
</div> </div>
{{/each}} </div>
{{/if}} </div>
{{#if adminTab 'aUsers'}} {{/each}}
{{#each collection 'users'}} {{/if}}
{{/each}} {{#if adminTab 'aUsers'}}
{{/if}} {{#each collection 'users'}}
{{#if adminTab 'aWork'}} {{/each}}
{{#each collection 'work'}} {{/if}}
{{/each}} {{#if adminTab 'aWork'}}
{{/if}} {{#each collection 'work'}}
{{#if adminTab 'aSchools'}} {{/each}}
{{#each collection 'schools'}} {{/if}}
{{/each}} {{#if adminTab 'aSchools'}}
{{/if}} {{#each collection 'schools'}}
{{#if adminTab 'aReports'}} {{/each}}
{{#each collection 'requests'}} {{/if}}
{{/each}} {{#if adminTab 'aReports'}}
{{/if}} {{#each collection 'requests'}}
</div> {{/each}}
</div> {{/if}}
<div class="overlay"> </div>
<div id="editValue" style="background-color:{{divColor 'header'}} "> </div>
<p>New Value</p> <div class="overlay">
<input id="valueArea"> <div id="editValue" style="background-color:{{divColor 'header'}} ">
<div> <p>New Value</p>
<i class="fa fa-check-circle-o" aria-hidden="true"></i> <input id="valueArea">
<i class="fa fa-times-circle-o" aria-hidden="true"></i> <div>
</div> <i class="fa fa-check-circle-o" aria-hidden="true"></i>
</div> <i class="fa fa-times-circle-o" aria-hidden="true"></i>
</div> </div>
<input id="copyArea"> </div>
</div>
<input id="copyArea">
</template> </template>
<template name="adminUserBox"> <template name="adminUserBox">
<span>{{email}}</span> <span>{{email}}</span>
{{#if none}} {{#if none}}
<i class="fa fa-times" aria-hidden="true"></i> <i class="fa fa-times" aria-hidden="true"></i>
{{/if}} {{/if}}
</template> </template>

View File

@ -1,78 +1,74 @@
/* jshint esversion: 6 */
Session.set("adminTab","aClasses"); Session.set("adminTab","aClasses");
Template.admin.helpers({ Template.admin.helpers({
banner() { banner() {
return "background-image:url(" + Session.get("user").banner + ")"; return "background-image:url(" + Session.get("user").banner + ")";
}, },
filters() { filters() {
return [{filter:"Lol"}]; return [{filter:"Lol"}];
}, },
adminTab(val) { adminTab(val) {
return Session.equals("adminTab",val); return Session.equals("adminTab",val);
}, },
adminTabColor(val) { adminTabColor(val) {
var value = {true:"header",false:"adminButtons"}; var value = {true:"header",false:"adminButtons"};
return themeColors[Session.get("user").preferences.theme][value[Session.equals("adminTab",val)]]; return themeColors[Session.get("user").preferences.theme][value[Session.equals("adminTab",val)]];
}, },
collection(val) { collection(val) {
switch(val) { switch(val) {
case "classes": case "classes":
var userClasses = classes.find().fetch(); var userClasses = classes.find().fetch();
for(var i = 0; i < userClasses.length; i++) { for(var i = 0; i < userClasses.length; i++) {
if(userClasses[i].privacy) { userClasses[i].privacy = userClasses[i].privacy.toString();
userClasses[i].privacy = "True";
} else {
userClasses[i].privacy = "False";
}
if(userClasses[i].code === "") { if(userClasses[i].code === "") {
userClasses[i].code = "None"; userClasses[i].code = "None";
} }
userClasses[i].category = userClasses[i].category.charAt(0).toUpperCase() + userClasses[i].category.slice(1); userClasses[i].category = userClasses[i].category;
userClasses[i].admin = getEmail(userClasses[i].admin); userClasses[i].admin = getEmail(userClasses[i].admin);
var types = ["subscribers","moderators","banned"]; var types = ["subscribers","moderators","banned"];
for(var j = 0; j < types.length; j++) { for(var j = 0; j < types.length; j++) {
if(userClasses[i][types[j]].length === 0) { if(userClasses[i][types[j]].length === 0) {
userClasses[i][types[j]][k] = {"email":"None","none":false}; userClasses[i][types[j]][k] = {"email":"None","none":false};
continue; continue;
} }
for(var k = 0; k < userClasses[i][types[j]].length; k++) { for(var k = 0; k < userClasses[i][types[j]].length; k++) {
userClasses[i][types[j]][k] = { userClasses[i][types[j]][k] = {
"email": getEmail(userClasses[i][types[j]][k]), "email": getEmail(userClasses[i][types[j]][k]),
"none":true "none":true
}; };
} }
} }
} }
return userClasses; return userClasses;
break; case "users":
case "users": break;
break; case "work":
case "work": break;
break; case "schools":
case "schools": break;
break; case "requests":
case "requests": break;
break; }
} }
}
}); });
Template.admin.events({ Template.admin.events({
'click #adminTabs li' (event) { 'click #adminTabs li' (event) {
Session.set("adminTab",event.target.id); Session.set("adminTab",event.target.id);
}, },
'click .fa-files-o' (event) { 'click .fa-files-o' (event) {
document.getElementById("copyArea").value = event.target.parentNode.childNodes[3].childNodes[0].nodeValue; document.getElementById("copyArea").value = event.target.parentNode.childNodes[3].childNodes[0].nodeValue;
document.getElementById("copyArea").select(); document.getElementById("copyArea").select();
document.execCommand("copy"); document.execCommand("copy");
}, },
'click .fa-pencil-square-o' (event) { 'click .fa-pencil-square-o' (event) {
var value = event.target.parentNode.childNodes[3].className.replace("modify ",""); var value = event.target.parentNode.childNodes[3].className.replace("modify ","");
openDivFade(document.getElementsByClassName("overlay")[0]); openDivFade(document.getElementsByClassName("overlay")[0]);
} }
}); });
function openDivFade(div) { function openDivFade(div) {
@ -91,5 +87,5 @@ function closeDivFade(div) {
} }
function getEmail(id) { function getEmail(id) {
return Meteor.users.findOne({_id:id}).services.google.email; return Meteor.users.findOne({_id:id}).services.google.email;
} }

View File

@ -58,24 +58,24 @@ Router.route('/user/:email', {
} }
}); });
Router.route('/admin', { // Router.route('/admin', {
waitOn: function() { // waitOn: function() {
return [ // return [
Meteor.subscribe('classes', this.params._id), // Meteor.subscribe('classes', this.params._id),
Meteor.subscribe('schools', this.params._id), // Meteor.subscribe('schools', this.params._id),
Meteor.subscribe('work', this.params._id), // Meteor.subscribe('work', this.params._id),
Meteor.subscribe('requests', this.params._id), // Meteor.subscribe('requests', this.params._id),
Meteor.subscribe('users', this.params._id) // Meteor.subscribe('users', this.params._id)
]; // ];
}, // },
action: function() { // action: function() {
if (!Roles.userIsInRole(Meteor.userId(), ['admin', 'superadmin'])) { // if (!Roles.userIsInRole(Meteor.userId(), ['admin', 'superadmin'])) {
this.render("NotFound"); // this.render("NotFound");
} else { // } else {
this.render("admin"); // this.render("admin");
} // }
} // }
}); // });
Router.configure({ Router.configure({
notFoundTemplate: "NotFound" notFoundTemplate: "NotFound"