garbage commit

This commit is contained in:
Aran Zaiger 2015-06-21 22:22:13 +03:00
parent 7bb9bb9bfb
commit 3f272dc304
16 changed files with 712 additions and 184 deletions

View file

@ -79,7 +79,6 @@ def create_campus(token):
except Exception:
return bad_request()
send_create_campus_request(user.email, user.name, campus.title)
notify_se_hub_campus_request(campus, campus.title)
return ok()
@ -87,7 +86,6 @@ def create_campus(token):
@campus_routes.route('/api/campuses/getAll/<string:token>', methods=['GET'])
@auto.doc()
def get_campuses(token):
@ -125,7 +123,11 @@ def get_campuses(token):
query = Campus.all()
for c in query.run():
arr.append(dict(json.loads(c.to_JSON())))
print "ARR:"
print arr
for c in arr:
print"c:"
print c
if len(arr) != 0:
return Response(response=json.dumps(arr),
status=200,
@ -138,6 +140,63 @@ def get_campuses(token):
return forbidden("Invalid Token")
@campus_routes.route('/api/campuses/deleteCampus/<string:token>/<string:campusName>', methods=['DELETE'])
@auto.doc()
def deleteCampus(token,campusName):
"""
<span class="card-title">This Call will delete a specific campus</span>
<br>
<b>Route Parameters</b><br>
- seToken: 'seToken'
- title: 'campusName'
<br>
<br>
<b>Payload</b><br>
- NONE <br>
<br>
<br>
<b>Response</b>
<br>
202 - Deleted campus
<br>
204 - No Matching Campus Found
<br>
....<br>
{<br>
...<br>
}req<br>
]<br>
400 - Bad Request
<br>
403 - Invalid token or not a lecturer!<br>
"""
if not is_lecturer(token): #todo: change to lecturer id
return forbidden("Invalid token or not a lecturer!")
user = get_user_by_token(token)
query = Campus.all()
query.filter('master_user_id =',user.key().id())
try:
query.filter('title =', campusName)
except Exception as e:
print e
return bad_request("invalid campus title attribute")
for c in query.run():
db.delete(c)
db.save
return accepted("campus deleted")
return bad_request("no such campus found")
@campus_routes.route('/api/campuses/help')
def documentation():

View file

@ -41,7 +41,7 @@ def create_project(token):
{<br>
'projectName': 'Advance Math',<br>
'courseName': 'JCE',<br>
'logo_url': 'http://location.domain.com/image.jpg'<br>
'logo_url': 'http://location.domain.com/image.jpg',<br>
'gitRepository': 'http://location.git.com/somthing'<br>
}<br>
<br>
@ -57,10 +57,12 @@ def create_project(token):
if not request.data:
return bad_request()
payload = json.loads(request.data)
if not is_lecturer(token): #todo: change to lecturer id
return forbidden("Invalid token or not a lecturer!")
#if not is_lecturer(token): #todo: change to lecturer id
# return forbidden("Invalid token or not a lecturer!")
user = get_user_by_token(token)
if user is None:
return bad_request("Wrong user Token")
#todo: check legality

View file

@ -25,7 +25,7 @@ from SE_API.Respones_Utils import *
user_routes = Blueprint("user_routes", __name__)
auto = Autodoc()
@user_routes.route('/api/users/getUserByToken/', defaults={'token': None})
@user_routes.route('/api/users/getUserByToken/<string:token>', methods=["GET"])
@auto.doc()
def getUserByToken(token):
@ -59,6 +59,9 @@ def getUserByToken(token):
<br>
403 - No User Found
"""
if token is None:
return no_content("Token Is Empty, No User Found")
query = User.all()
query.filter("seToken =", token)

View file

@ -12,7 +12,7 @@ class User(db.Model):
seToken = db.StringProperty(required=True)
avatar_url = db.StringProperty(required=True)
isFirstLogin = db.BooleanProperty(default=True)
campusName = db.StringProperty(default="")
campusName = db.StringProperty(required=True, default=" ")
campuses_id_list = db.StringListProperty(default=[])
classes_id_list = db.StringListProperty(default=[])

View file

@ -2,10 +2,10 @@
body{
font-family: "Alef Hebrew",
Helvetica Neue,
Helvetica,
Arial,
sans-serif;
Helvetica Neue,
Helvetica,
Arial,
sans-serif;
}
.menuBtn {
@ -114,34 +114,36 @@ body.noscroll
.campusAvatar img
{
/*
margin-top: 1em;
margin-right: 1em;
position: center;
*/
margin-top: 1em;
margin-right: 1em;
position: center;
*/
border-radius: 40px;
position:center;
width: 80px;
height: 80px;
margin: 6px;
-webkit-box-shadow: 2px 2px 5px 0px rgba(0,0,0,0.75);
-moz-box-shadow: 2px 2px 5px 0px rgba(0,0,0,0.75);
box-shadow: 2px 2px 5px 0px rgba(0,0,0,0.75);
}
border-radius: 40px;
position:center;
width: 80px;
height: 80px;
margin: 6px;
-webkit-box-shadow: 2px 2px 5px 0px rgba(0,0,0,0.75);
-moz-box-shadow: 2px 2px 5px 0px rgba(0,0,0,0.75);
box-shadow: 2px 2px 5px 0px rgba(0,0,0,0.75);
}
.spacer{
margin-right: auto;
margin-left: auto;
}
.spacer{
margin-right: auto;
margin-left: auto;
}
.port_spacer{
margin-top: auto;
margin-bottom: auto;
}
.port_spacer
{
margin-top: auto;
margin-bottom: auto;
}
.mail_suffix{
margin-top: auto;
}
.mail_suffix
{
margin-top: auto;
}
.createCampus
@ -149,13 +151,41 @@ body.noscroll
position:relative;
}
/*div.img campusAvatar
.listdemoBasicUsage md-divider
{
border: 1px solid #0000ff;
padding-right: 10px;
float:right;
}*/
margin-top: 10px;
margin-bottom: 10px;
}
.md-avatar img
{
/*TODO*/
}
.feedContent
{
padding-left: 6%;
font-size: 15px;
display:table;
}
.md-no-sticky
{
background-color: blue;
}
.roundUserAvatar
{
width: 6%;
height: auto;
border-radius: 150px;
-webkit-border-radius: 150px;
-moz-border-radius: 150px;
/*background: url(http://i61.tinypic.com/v86f7.png) no-repeat;*/
box-shadow: 0 0 8px rgba(0, 0, 0, .8);
-webkit-box-shadow: 0 0 8px rgba(0, 0, 0, .8);
-moz-box-shadow: 0 0 8px rgba(0, 0, 0, .8);
}
/*.dropDown /* TODO *
{
@ -166,10 +196,47 @@ body.noscroll
border-radius: 1px black solid;
}*/
.gray-font{
.gray-font
{
color: #7f7f7f;
font-size: 300%;
text-shadow:#e0e0e0 1px 1px 0;
opacity: 0;
-webkit-animation-duration: 8s;
animation-duration: 8s;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
overflow: hidden;
height: 100%;
}
@-webkit-keyframes fadeOutUp {
0% {
opacity: 1;
-webkit-transform: translateY(0);
}
100% {
opacity: 0;
-webkit-transform: translateY(-200px);
/*-webkit-transform: scale(0,0); */
height: 0px;
}
}
@keyframes fadeOutUp {
0% {
opacity: 1;
transform: translateY(0);
}
100% {
opacity: 0;
transform: translateY(-200px);
/*transform: scale(0,0); */
height: 0px;
}
}
.fadeOutUp {
-webkit-animation-name: fadeOutUp;
animation-name: fadeOutUp;
}
.user-pane-menu{
@ -213,6 +280,7 @@ body.noscroll
.se-menu li:hover{
background-color: #E2E2E2;
font-weight: bold;
cursor: pointer;
}
.se-menu li .selected{
background-color: #E2E2E2;
@ -238,3 +306,62 @@ body.noscroll
text-decoration: none !important;
color: #7f7f7f;
}
/*Settings Style*/
.settingList .settingListItem:hover{
background-color: #E2E2E2;
font-weight: bold;
}
.settingList .settingListItemRoot{
list-style: none;
padding: 0;
padding-left: 0;
}
.settingList .settingListItem{
width: 100%;
padding: 15px 0px auto 15px;
}
/*End Settings*/
/*md Effects*/
.md-avatar{
width: 40px;
height: 40px;
margin-top: 8px;
margin-bottom: 8px;
margin-right: 16px;
border-radius: 50%;
box-sizing: content-box;
}
/* md-list-item .md-no-style.md-button, md-list-item.md-no-proxy.md-button {
font-size: inherit;
height: inherit;
text-align: left;
text-transform: none;
width: 100%;
white-space: normal;
}
md-list-item, md-list-item .md-list-item-inner {
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-justify-content: flex-start;
-ms-flex-pack: start;
justify-content: flex-start;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
min-height: 48px;
}*/
/*End Effects for MD*/

View file

@ -37,6 +37,10 @@ app.config(['$routeProvider', '$locationProvider',
.when('/home', {
templateUrl: 'templates/views/home.html',
controller: 'homeController'
})
.when('/Settings', {
templateUrl: 'templates/views/settings.html',
controller: 'settingsController'
});
}

View file

@ -1,9 +1,71 @@
/**
* Created by sagi on 6/16/15.
*/
angular.module('SeHub')
.controller('homeController', ['$scope', '$cookies', '$cookieStore', '$window', '$location', '$mdToast', '$mdDialog', 'apiService', '$rootScope', function ($scope, $cookies, $cookieStore, $window, $location, $mdToast, $mdDialog, apiService ,$rootScope)
{
var imagePath = $scope.user.avatar_url;
$scope.phones = [
{ type: 'Home', number: '(972) 865-82861' },
{ type: 'Cell', number: '(972) 5251-32309' },
];
$scope.messages = [
{
face : imagePath,
what: 'I need to go to luna-park',
who: 'Matan Bar Yosef',
when: '3:08PM',
notes: " Lets do something"
},
{
face : imagePath,
what: 'Lets Lets Lets',
who: 'Matan Bar Yosef',
when: '4:33PM',
notes: " Lets go drink something"
},
{
face : imagePath,
what: 'Let me tell you a secret',
who: 'Sagi Dayan',
when: '4:15PM',
notes: " I am S'ein"
},
{
face : imagePath,
what: 'Listen to this!',
who: 'Aran Zaiger',
when: '6:15PM',
notes: " I am gaylord ultima!!"
},
{
face : imagePath,
what: 'Hi?',
who: 'Etye Meyer',
when: '7:45AM',
notes: " I am mega gaylord ultima"
}
];
$scope.tasks = [
{
ExNum: '1',
dueDate: '23/06/15',
notes: " Build A Game: Scrabble"
},
{
ExNum: '3',
dueDate: '30/06/15',
notes: " Static Array"
},
{
ExNum: '4',
dueDate: '07/07/15',
notes: " Dynamic Array"
},
];
// animation
$scope.isEnterd = top.setIsEnterd;
}]);

View file

@ -1,76 +1,90 @@
angular.module('SeHub')
.controller('mainController', ['$scope', '$rootScope', 'apiService', '$cookies', '$location', function($scope, $rootScope, apiService, $cookies, $location) {
.controller('mainController', ['$scope', '$rootScope', 'dataService','apiService', '$cookies', '$cookieStore', '$location', '$window',
var token = $cookies['com.sehub.www'];
function($scope, $rootScope, dataService, apiService, $cookies, $cookieStore, $location, $window) {
top.setIsEnterd = true;
var token = $cookies['com.sehub.www'];
$scope.loadingData = true;
$scope.isInRegisterMode = false;
$scope.loadingData = true;
$scope.isInRegisterMode = false;
apiService.getUserByToken(token).success(function(data) {
if (data.message == 'No User Found') {
console.error("No User Found!");
}
$scope.user = data;
if ($scope.user.isFirstLogin) {
$scope.menuObj = {};
$scope.isInRegisterMode = true;
apiService.getUserByToken(token).success(function(data) {
if (data.message == 'No User Found') {
console.error("No User Found!");
}
$scope.loadingData = false;
$location.path('/register')
} else {
$location.path('/home')
}
})
apiService.getUserByToken(token).success(function(data) // Get user token
{
$scope.user = data;
$scope.loadingData = false;
dataService.initService($scope); //Start Data Sync Service (For User)
console.log(data);
if ($scope.user.isFirstLogin) {
$scope.menuObj = {};
$scope.isInRegisterMode = true;
$scope.loadingData = false;
$location.path('/register')
} else {
$location.path('/home')
}
apiService.getAllCampuses($scope.user.seToken).success(function(data) // Get all the campuses
{
$scope.campuses = data;
}).error(function() {
});
});
$scope.menuItems = [{
"title": "Home",
"icon": "fa fa-home",
"style": "selected",
"route": "/home"
}, {
"title": "My Campuses",
"icon": "fa fa-university",
"style": "selected",
"route": "/campuses"
}, {
"title": "My Classes",
"icon": "fa fa-graduation-cap",
"style": "selected",
"route": "/campuses"
}, {
"title": "My Projects",
"icon": "fa fa-cube",
"style": "selected",
"route": "/campuses"
}, {
"title": "Tasks",
"icon": "fa fa-clipboard",
"style": "selected",
"route": "/campuses"
}, {
"title": "Settings",
"icon": "fa fa-cogs",
"style": "selected",
"route": "/campuses"
}, {
"title": "Log Out",
"icon": "fa fa-power-off",
"style": "selected",
"route": "/campuses"
}];
}]);
$scope.menuItems = [{
"title": "Dash Board",
"icon": "fa fa-tachometer",
"style": "selected",
"route": "/home"
}, {
"title": "My Campuses",
"icon": "fa fa-university",
"style": "",
"route": "/campuses"
}, {
"title": "My Classes",
"icon": "fa fa-graduation-cap",
"style": "",
"route": "/campuses"
}, {
"title": "My Projects",
"icon": "fa fa-cube",
"style": "",
"route": "/campuses"
}, {
"title": "Tasks",
"icon": "fa fa-clipboard",
"style": "",
"route": "/campuses"
}, {
"title": "Settings",
"icon": "fa fa-cogs",
"style": "",
"route": "/Settings"
}, {
"title": "Log Out",
"icon": "fa fa-power-off",
"style": "",
"route": "/logout"
}];
$scope.menuClicked = function(item) {
var route = ""
if (item.title == "Log Out") {
console.info('Logging Out!');
$cookieStore.remove('com.sehub.www');
$window.location.href = 'http://se-hub.appspot.com'; // Reference to 'welcome' page
}
for (var i = $scope.menuItems.length - 1; i >= 0; i--) {
if ($scope.menuItems[i].title === item.title) {
$scope.menuItems[i].style = "selected";
route = $scope.menuItems[i].route;
} else {
$scope.menuItems[i].style = "";
}
};
top.setIsEnterd = false;
$location.path(route);
}
}
]);

View file

@ -6,11 +6,11 @@ angular.module('SeHub')
$scope.createCampusClicked = false;
$scope.isEmpty = true; // if the academic email line is empty
$scope.jsonCreateCampus =
{
"title": "Create Campus",
"email": "email_ending",
"avatar": "self.avatar.url"
}
{
"title": "Create Campus",
"email": "email_ending",
"avatar": "self.avatar.url"
}
$rootScope.seToken = $cookies['com.sehub.www'];
var token = $rootScope.seToken;
@ -56,9 +56,28 @@ angular.module('SeHub')
$scope.submitClicked = function(ev)
{
var emailValid = false;
var jsonUpdateUser =
{
"lecturerStat": "$scope.user.isLecturer",
"campName": "$scope.campusName"
}
if($scope.user.AcMail != null)
{
var fullMail = $scope.user.AcMail + $scope.campusObj.email_ending; // Holds the full academic email of the user
apiService.updateUser($scope.user.seToken, jsonUpdateUser).success(function(data)
{
}).error(function()
{
// TODO Error
console.log("Error occured on updateUser");
});
console.log("Mail: " + fullMail);
apiService.sendValidationMail($scope.user.seToken, fullMail).success(function(data)
{
console.log("DONE - 200");
@ -72,36 +91,38 @@ angular.module('SeHub')
$mdDialog.show($mdDialog.alert().title('Error - E-mail Verification').content('An error has occured in your e-mail address.')
.ariaLabel('Email verification error alert dialog').ok('Got it!').targetEvent(ev));
});
}
else // TODO Fix when success to show mdDialog until 'Got it' clicked
{
$mdDialog.show($mdDialog.alert().title('Error - E-mail Verification').content('An error has occured in your e-mail address.')
.ariaLabel('Email verification error alert dialog').ok('Got it!').targetEvent(ev));
};
};
$scope.createCampus = function(ev)
{
$scope.createCampusClicked = true;
if(!$scope.isLecturer) // "!isLecturer" Means => I Am Lecturer; if i am a lecturer (when pressing -> getting last data value before pressing)
{
if($scope.user.campusSuffixMail != null)
if($scope.user.campusMail != null)
{
validateEmail($scope.user.campusSuffixMail);
validateEmail($scope.user.campusMail); // Verify the email according to "xxx@name.suffix"
}
}
}
validateEmail = function(email) // TODO ADD IT
validateEmail = function(email)
{
var result = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
console.log("Email: " + email);
if (!result.test(email))
if (!result.test(email)) // TODO Fix when success to show mdDialog until 'Got it' clicked
{
console.log(email + ", Error in email, should alert");
alert('Please provide a valid e-mail address');
// alert('Please provide a valid e-mail address');
$mdDialog.show($mdDialog.alert().title('Error - E-mail Verification').content('An error has occured in your e-mail address.')
.ariaLabel('Email verification error alert dialog').ok('Got it!').targetEvent(email));
}
if(result.test(email))
if(result.test(email)) // TODO Fix when success to show mdDialog until 'Got it' clicked
{
console.log("Im good");
apiService.sendValidationMail($scope.user.seToken, email).success(function(data)
@ -119,26 +140,4 @@ angular.module('SeHub')
});
}
}
// TODO FOR LATER - toast
// TODO FOR LATER
// $scope.getPopWindowPosition = function()
// {
// return Object.keys($scope.toastPosition).filter(function(pos)
// {
// return $scope.toastPosition[pos];
// }).join(' ');
// };
// $scope.toastPosition =
// {
// bottom: false,
// top: true,
// left: false,
// right: true
// };
// TODO FOR LATER
// TODO FOR LATER
}]);

View file

@ -0,0 +1,78 @@
angular.module('SeHub')
.controller('settingsController', ['$scope', '$rootScope', 'dataService', 'apiService', '$cookies', '$location',
function($scope, $rootScope, dataService, apiService, $cookies, $location) {
var token = $cookies['com.sehub.www'];
$scope.loadingData = true;
$scope.isInRegisterMode = false;
$scope.title = "Settings"
apiService.getUserByToken(token).success(function(data) {
if (data.message == 'No User Found') {
console.error("No User Found!");
}
$scope.loadingData = false;
$scope.user = data;
console.log(data);
if ($scope.user.isFirstLogin) {
$scope.menuObj = {};
$scope.isInRegisterMode = true;
$scope.loadingData = false;
$location.path('/register')
}
});
$scope.isEditMode = false;
$scope.profileMode = "Edit Profile";
$scope.profileModeIcon = "fa fa-pencil";
$scope.changeProfileMode = function() {
$scope.isEditMode = !$scope.isEditMode;
if ($scope.isEditMode) {
$scope.profileMode = "Save Profile";
$scope.profileModeIcon = "fa fa-floppy-o";
} else {
dataService.userBrodcast($scope.user);
$scope.profileMode = "Edit Profile";
$scope.profileModeIcon = "fa fa-pencil";
}
}
/**
* DEBUG DATA
*/
$scope.courses = [{
"courseName": "Advance Math",
"campusName": "JCE",
"startDate": {
"year": 2015,
"month": 4,
"day": 3
},
"endDate": {
"year": 2016,
"month": 5,
"day": 14
},
"taskFlag": false,
"campus_avatar": "https://yt3.ggpht.com/--ZkWxybWGOM/AAAAAAAAAAI/AAAAAAAAAAA/_nAICC_kzzI/s88-c-k-no/photo.jpg"
}];
$scope.campuses = [{
'title': 'JCE',
'email_ending': '@post.jce.ac.il',
'master_user_id': 123453433341,
'avatar_url': 'https://yt3.ggpht.com/--ZkWxybWGOM/AAAAAAAAAAI/AAAAAAAAAAA/_nAICC_kzzI/s88-c-k-no/photo.jpg'
}, {
'title': 'Stanford',
'email_ending': '@post.jce.ac.il',
'master_user_id': 123453433341,
'avatar_url': 'https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcR9M4uQgaJP1zyiCGw-dK31hU8buWqeuOi9vTXBd4Y8hQcFTZqA'
}];
}
]);

View file

@ -3,15 +3,12 @@ var DEBUG = true;
var service = angular.module('seHub.services', []);
service.factory('apiService', ['$http', function($http) {
return {
getUserByToken: function(token){
var url = (DEBUG ? "http://localhost:8080" : "http://se-hub.appspot.com") + "/api/users/getUserByToken/" + token;
req = {
method : "GET",
url : url
};
return $http(req);
},
@ -36,9 +33,17 @@ service.factory('apiService', ['$http', function($http) {
data: payload
};
return $http(req);
},
updateUser: function(token, payLoad){
var url = (DEBUG ? "http://localhost:8080" : "http://se-hub.appspot.com") + "/api/users/updateUser/" + token;
req = {
method: "POST",
url: url,
data: payLoad
};
return $http(req);
}
};
}]);

View file

@ -0,0 +1,21 @@
var DEBUG = true;
angular.module('seHub.services').
factory('dataService', ['$http', function($http) {
var scope = null;
return {
initService: function(mainScope) {
// this.token = user.seToken;
// this.user = user;
scope = mainScope;
},
userBrodcast: function(user) {
scope.user = JSON.parse(JSON.stringify(user));
}
};
}]);

View file

@ -3,7 +3,7 @@
<md-progress-circular md-mode="indeterminate"></md-progress-circular>
</div>
<md-content layout-padding>
<md-card class="gray-font">
<md-card class="gray-font fadeOutUp" ng-if="isEnterd">
<div layout="row">
<div class="spacer"></div>
<div>
@ -15,12 +15,54 @@
<div class="spacer"></div>
<div>
<h1>Welcome To SE-Hub</h1>
<p>
This Is your Home Page
</p>
<P>Software Engineering Course Made Easy</P>
v1.0
</div>
<div class="spacer"></div>
</div>
</md-card>
</md-content>
<md-content layout-padding>
<md-card>
<div class = "feed" ><!-- layout-align="center center"> -->
<div>
<md-subheader class="md-no-sticky" style = "background-color:aliceblue; margin-right:0;">Messages</md-subheader>
<md-list-item class="md-3-line" ng-repeat="item in messages">
<div class="md-list-item-text" style="border: 1px solid black;">
<img ng-src="{{user.avatar_url}}" class="roundUserAvatar" alt="{{item.who}}" style="margin:8px"/>
<!-- Instead of "user.avatar.url" suppose to be "postedUserAvatarUrl" -->
<div class="spacer"></div>
<br></br>
<md-divider class = "feedContent">
<h4>{{ item.who }}</h4>
<h5>{{ item.what }}</h5>
<h5><b>{{ item.notes }}</b></h5>
<h6>{{ item.when }}</h6>
</md-divider>
</div>
</md-list-item>
</div>
</md-card>
</md-content>
<div class="port_spacer"></div>
<div>
<md-content>
<md-card style="margin:0">
<!-- <md-list> -->
<md-subheader class="md-no-sticky" style = "background-color:aliceblue; margin-right:0;">Tasks</md-subheader>
<md-list-item class="md-3-line" ng-repeat="item in tasks">
<!-- <img ng-src="{{item.face}}?{{$index}}" class="md-avatar" alt="{{item.who}}" /> -->
<div class="md-list-item-text" style="border: 1px solid black;">
<md-divider class = "feedContent">
<h6><u><em>Ex: {{ item.ExNum }}</em></u></h6>
<h5>Task Title: {{ item.notes }}</h5>
<h6>Due Date: {{ item.dueDate }}</h6>
</md-divider>
</div>
</md-list-item>
</md-card>
</md-content>
</div>
<!-- </md-card> -->
</div>

View file

@ -21,32 +21,28 @@
</md-toolbar>
<div layout="row" flex>
<md-sidenav layout="column" class="md-sidenav-left md-whiteframe-z2" md-component-id="left" md-is-locked-open="$mdMedia('gt-sm')">
<!-- <div class="user-pane-menu">
<img ng-src="{{user.avatar_url}}" alt="">
</div> -->
<md-content class="se-menu">
<div class="user-box" layout="row" layout-padding>
<div flex="30"> <!-- Avatar -->
<img ng-src="{{user.avatar_url}}" alt="">
</div>
<div class="user-data" layout="column" flex>
<div>
{{user.name}}
<div ng-if="!isInRegisterMode">
<div class="user-box" layout="row" layout-padding>
<div flex="30"> <!-- Avatar -->
<img ng-src="{{user.avatar_url}}" alt="">
</div>
<div>
{{user.email}}
<div class="user-data" layout="column" flex>
<div>
{{user.name}}
</div>
<div>
{{user.email}}
</div>
</div>
</div>
</div>
<ul>
<a ng-repeat="item in menuItems" href="#">
<li><i ng-class="item.icon"></i> {{item.title}}</li>
<md-divider ng-if="!$last"></md-divider>
</a>
</ul>
<div ng-if="loadingData">
<md-progress-circular></md-progress-circular>
<ul>
<a ng-repeat="item in menuItems" ng-click="menuClicked(item)">
<li ng-class="[item.style]"><i ng-class="item.icon"></i> {{item.title}}</li>
<md-divider ng-if="!$last"></md-divider>
</a>
</ul>
</div>
<div ng-if="isInRegisterMode"> <!-- User Needs To Register -->
<md-card layout-padding>
@ -85,10 +81,12 @@
<!-- Services -->
<script src="templates/js/services/apiService.js"></script>
<script src="templates/js/services/dataService.js"></script>
<!-- Controllers -->
<script src="templates/js/controllers/mainController.js"></script>
<script src="templates/js/controllers/homeController.js"></script>
<script src="templates/js/controllers/settingsController.js"></script>
<script src="templates/js/controllers/registerController.js"></script>
</body>

View file

@ -12,7 +12,7 @@
<div>
<md-input-container ng-if="userHasNoName">
<label>Full Name: </label>
<input ng-model="user.name" required>
<input ng-model="user.name" ng-minlength="1" required>
</md-input-container>
</div>
<br></br>
@ -29,7 +29,7 @@
<div class = "createCampus" ng-if="createCampusClicked">
<md-input-container>
<label>Academic Suffix Email</label>
<input type="text" ng-model="user.campusSuffixMail" ng-minlength="1" required/>
<input type="text" ng-model="user.campusMail" ng-minlength="1" required/>
</md-input-container>
<md-input-container>
<label>Campus Name</label>
@ -65,7 +65,7 @@
<div>
<md-input-container>
<label>Academic Email</label>
<input type="text" ng-model="user.AcMail" required/>
<input type="text" ng-model="user.AcMail" ng-length="1" required/>
</md-input-container>
</div>
</div>

View file

@ -0,0 +1,114 @@
<div>
<div class="loader" ng-if="loadingData">
<md-progress-circular md-mode="indeterminate"></md-progress-circular>
</div>
<md-content layout-padding>
<md-card layout-padding>
<h1><i class="fa fa-cogs"></i> {{title}}</h1>
<div layout="row">
<div>
<md-card layout-padding>
<div id="profile" layout="column">
<!-- User Profile Box -->
<div class="user-box" layout="row">
<div>
<img ng-src="{{user.avatar_url}}" alt="" style="width:20%">
</div>
<div flex="70%">
<md-button class="md-raised" ng-click="changeProfileMode()">
<i ng-class="profileModeIcon"></i> {{profileMode}}
</md-button>
</div>
</div>
</div>
<!-- Start View Profile -->
<div layout="column" ng-if="!isEditMode">
<div>
<h2>{{user.name}}</h2>
</div>
<div>
Email: {{user.email}}
</div>
<div>
I Am a: {{(user.isLecturer) ? "Lecturer" : "Student"}}
</div>
</div>
<!-- End View Profile -->
<!-- Starting Edit Mode Div -->
<div layout="column" ng-if="isEditMode">
<div>
<md-input-container>
<label>Full Name</label>
<input ng-model="user.name">
</md-input-container>
</div>
<div>
<md-input-container>
<label>Email</label>
<input ng-model="user.email">
</md-input-container>
</div>
<div>
<md-switch ng-model="user.isLecturer" aria-label="Switch 1">
I Am a: {{(user.isLecturer) ? "Lecturer" : "Student"}}
</md-switch>
</div>
</div>
<!-- End Edit Div -->
</md-card>
</div>
<!-- Campuses & Classes Div -->
<div flex>
<md-card layout-padding>
<h3><i class="fa fa-graduation-cap"></i> My Classes</h3>
<div class="settingList">
<div class="settingListRoot">
<div ng-repeat="course in courses" class="settingListItem" layout="row">
<div>
<img alt="{{ person.name }}" ng-src="{{ course.campus_avatar }}" class="md-avatar" />
</div>
<div class="port_spacer">
{{ course.courseName }} - <strong>IN</strong> {{course.campusName}}
</div>
<div class="spacer"></div>
<div>
<md-button class="">
X
</md-button>
</div>
<md-divider ng-if="!$last"></md-divider>
</div>
</div>
</div>
<h3><i class="fa fa-university"></i> My Campuses</h3>
<div class="settingList">
<div class="settingListRoot">
<div ng-repeat="campus in campuses" class="settingListItem" layout="row">
<div>
<img alt="{{ person.name }}" ng-src="{{ campus.avatar_url }}" class="md-avatar" />
</div>
<div class="port_spacer">
{{ campus.title }} -
</div>
<div class="spacer"></div>
<div>
<md-button class="">
X
</md-button>
</div>
<md-divider ng-if="!$last"></md-divider>
</div>
</div>
</div>
</md-card>
</div>
<!-- End Campuses & Classes Div -->
</div>
</md-card>
</md-content>
</div>