Pierre-Olivier Mercier
85e9df1fd8
All checks were successful
continuous-integration/drone/push Build is passing
184 lines
6.5 KiB
JavaScript
184 lines
6.5 KiB
JavaScript
angular.module("AdLinApp", ["ngResource", "ngSanitize"])
|
|
.factory("Student", function($resource) {
|
|
return $resource("/api/students/:studentId", { studentId: '@id' }, {
|
|
'update': {method: 'PUT'},
|
|
})
|
|
})
|
|
.factory("Progression", function($resource) {
|
|
return $resource("/api/progress")
|
|
})
|
|
.factory("StudentProgression", function($resource) {
|
|
return $resource("/api/students/:studentId/progress", { studentId: '@id' })
|
|
})
|
|
.factory("Challenge", function($resource) {
|
|
return $resource("/challenge/:challengeId", { challengeId: '@id' })
|
|
});
|
|
|
|
angular.module("AdLinApp")
|
|
.run(function($rootScope, $location) {
|
|
if (window.location.pathname.split("/").length >= 3) {
|
|
$rootScope.tutoid = parseInt(window.location.pathname.split("/")[2], 10);
|
|
if (isNaN($rootScope.tutoid)) {
|
|
$rootScope.onestudent = window.location.pathname.split("/")[2];
|
|
}
|
|
}
|
|
if (!$rootScope.tutoid || isNaN($rootScope.tutoid)) {
|
|
$rootScope.tutoid = 1;
|
|
}
|
|
$rootScope.tutoid--;
|
|
$rootScope.show_dropdown = false;
|
|
$rootScope.toogleDropdown = function() {
|
|
$rootScope.show_dropdown = !$rootScope.show_dropdown;
|
|
}
|
|
})
|
|
.controller("StudentsController", function($scope, $interval, Student) {
|
|
$scope.students = Student.query();
|
|
var refreshStd = function() {
|
|
$scope.students = Student.query();
|
|
}
|
|
var myinterval = $interval(refreshStd, 1600000);
|
|
$scope.$on('$destroy', function () { $interval.cancel(myinterval); });
|
|
})
|
|
.controller("StudentsProgressionController", function($scope, $interval, Progression) {
|
|
$scope.tuto_progress = tuto_progress;
|
|
$scope.stats = {};
|
|
$scope.students = {};
|
|
$scope.filterBadgeState = {};
|
|
|
|
$scope.toogleBadge = function(ch) {
|
|
if ($scope.filterBadgeState["challenge"] && $scope.filterBadgeState["challenge"] == ch) {
|
|
switch ($scope.filterBadgeState["state"]) {
|
|
case "bad":
|
|
$scope.filterBadgeState["state"] = "passed";
|
|
break;
|
|
case "passed":
|
|
$scope.filterBadgeState["state"] = "online";
|
|
break;
|
|
case "online":
|
|
$scope.filterBadgeState["state"] = "offline";
|
|
break;
|
|
default:
|
|
$scope.filterBadgeState = {};
|
|
}
|
|
} else {
|
|
$scope.filterBadgeState["challenge"] = ch;
|
|
$scope.filterBadgeState["state"] = "bad";
|
|
}
|
|
};
|
|
|
|
var refreshStd = function() {
|
|
var students = Progression.get();
|
|
|
|
students.$promise.then(function(response) {
|
|
var recent = new Date(Date.now() - 120000);
|
|
var tmpstats = {total:0};
|
|
|
|
angular.forEach(tuto_progress, function(tuto) {
|
|
angular.forEach(tuto, function(ch, chid) {
|
|
tmpstats[chid] = {"success":0, "warning":0};
|
|
});
|
|
});
|
|
|
|
angular.forEach(response, function(challenges, login) {
|
|
if (login[0] == "$") return;
|
|
tmpstats.total++;
|
|
angular.forEach(challenges, function(ch, chid) {
|
|
if (ch.time && challenges[chid] !== undefined) {
|
|
challenges[chid].time = new Date(ch.time);
|
|
challenges[chid].recent = (Date.now() - ch.time)/1000;
|
|
if (recent < challenges[chid].time && tmpstats[chid] !== undefined)
|
|
tmpstats[chid].success++;
|
|
}
|
|
if (tmpstats[chid] !== undefined)
|
|
tmpstats[chid].warning++;
|
|
});
|
|
challenges["img"] = login;
|
|
$scope.students[login] = challenges;
|
|
});
|
|
$scope.stats = tmpstats;
|
|
|
|
})
|
|
}
|
|
refreshStd();
|
|
var myinterval = $interval(refreshStd, 9750);
|
|
$scope.$on('$destroy', function () { $interval.cancel(myinterval); });
|
|
})
|
|
.controller("StudentProgressionController", function($scope, $interval, $http, Student, StudentProgression) {
|
|
$scope.tuto_progress = tuto_progress;
|
|
var refreshStd = function() {
|
|
var student = Student.get({studentId: $scope.onestudent})
|
|
student.$promise.then(function(stdnt) {
|
|
$scope.student = stdnt
|
|
$http.get("/api/students/" + $scope.student.id + "/ips").then(function(response) {
|
|
$scope.ips = response.data;
|
|
});
|
|
})
|
|
|
|
var mychallenges = StudentProgression.get({studentId: $scope.onestudent})
|
|
mychallenges.$promise.then(function(mychals) {
|
|
angular.forEach(mychals, function(ch, chid) {
|
|
if (ch.time) {
|
|
mychals[chid].time = new Date(ch.time);
|
|
mychals[chid].recent = (Date.now() - mychals[chid].time)/1000;
|
|
}
|
|
});
|
|
$scope.mychallenges = mychals
|
|
})
|
|
|
|
$scope.img = $scope.onestudent;
|
|
}
|
|
$scope.$watch("onestudent", function(onestudent) {
|
|
refreshStd();
|
|
var myinterval = $interval(refreshStd, 15000);
|
|
$scope.$on('$destroy', function () { $interval.cancel(myinterval); });
|
|
})
|
|
})
|
|
.controller("PingController", function($scope, $interval, $http) {
|
|
$scope.PING = false;
|
|
$scope.PING_time = '';
|
|
$scope.PING_ok = false;
|
|
var refreshPing = function() {
|
|
$http.get("/api/students/" + $scope.student.id + "/ping").then(function(response) {
|
|
$scope.PING_ok = response.data.State;
|
|
$scope.PING_time = new Date(response.data.Date);
|
|
$scope.PING = (Date.now() - $scope.PING_time)/1000;
|
|
});
|
|
}
|
|
$scope.$watch("student", function(student) {
|
|
student.$promise.then(function(std) {
|
|
refreshPing();
|
|
var myinterval = $interval(refreshPing, 15000);
|
|
$scope.$on('$destroy', function () { $interval.cancel(myinterval); });
|
|
})
|
|
})
|
|
})
|
|
.controller("SSHController", function($scope, $interval, $http) {
|
|
$scope.SSH = false;
|
|
var refreshSSH = function() {
|
|
$http.get("/api/students/" + $scope.student.id + "/hassshkeys").then(function(response) {
|
|
$scope.SSH = response.data
|
|
});
|
|
}
|
|
refreshSSH();
|
|
var myinterval = $interval(refreshSSH, 15500);
|
|
$scope.$on('$destroy', function () { $interval.cancel(myinterval); });
|
|
})
|
|
.controller("ProgressionController", function($scope, $interval, $http) {
|
|
$scope.tuto_progress = tuto_progress;
|
|
$scope.mychallenges = {};
|
|
var refreshChal = function() {
|
|
$http.get("/api/students/" + $scope.student.id + "/progress").then(function(response) {
|
|
angular.forEach(response.data, function(ch, chid) {
|
|
if (ch.time) {
|
|
response.data[chid].time = new Date(ch.time);
|
|
response.data[chid].recent = (Date.now() - response.data[chid].time)/1000;
|
|
}
|
|
});
|
|
$scope.mychallenges = response.data
|
|
});
|
|
}
|
|
refreshChal();
|
|
var myinterval = $interval(refreshChal, 15750);
|
|
$scope.$on('$destroy', function () { $interval.cancel(myinterval); });
|
|
})
|