admin: Double check before doing dangerous actions in settings panel

Suggested-by: Nicolas Ribeyrolle <nicolas.ribeyrolle@epita.fr>
This commit is contained in:
nemunaire 2019-09-05 10:28:45 +02:00
parent 8e618565ad
commit 846f2ce8a4
2 changed files with 34 additions and 10 deletions

View file

@ -440,6 +440,7 @@ angular.module("FICApp")
}) })
.controller("SettingsController", function($scope, $rootScope, Settings, ROSettings, $location, $http, $interval) { .controller("SettingsController", function($scope, $rootScope, Settings, ROSettings, $location, $http, $interval) {
$scope.displayDangerousActions = false;
$scope.config = Settings.get(); $scope.config = Settings.get();
$scope.config.$promise.then(function(response) { $scope.config.$promise.then(function(response) {
response.enableExerciceDepend = response.unlockedChallengeDepth >= 0; response.enableExerciceDepend = response.unlockedChallengeDepth >= 0;
@ -521,16 +522,25 @@ angular.module("FICApp")
var d = new Date(ts + 120000); var d = new Date(ts + 120000);
this.config.activateTime = d.toISOString(); this.config.activateTime = d.toISOString();
} }
$scope.reset = function(type) { $scope.reset = function(type) {
if (confirm("Êtes-vous sûr ?")) { var txts = {
$http.post("/api/reset", {"type": type}).then(function(time) { "challenges": "En validant, vous retirerez toutes les données statiques des challenges.",
$rootScope.newBox('success', type + 'reseted'); "teams": "En validant, vous supprimerez l'ensemble des équipes enregistreées.",
$location.url("/"); "game": "En validant, vous supprimerez toutes les tentatives, les validations, ... faites par les équipes.",
}, function(response) {
$rootScope.newBox('danger', 'An error occurs when reseting ' + type + ':', response.data.errmsg);
});
} }
}; $rootScope.newYesNoBox('warning', txts[type], 'Êtes-vous sûr de vouloir continuer ?',
function() {
if (confirm("Êtes-vous vraiment sûr ?\n" + txts[type])) {
$http.post("/api/reset", {"type": type}).then(function(time) {
$rootScope.newBox('success', type + 'reseted');
$location.url("/");
}, function(response) {
$rootScope.newBox('danger', 'An error occurs when reseting ' + type + ':', response.data.errmsg);
});
}
});
};
$scope.deepSyncInProgress = false; $scope.deepSyncInProgress = false;
$scope.deepSync = function(type) { $scope.deepSync = function(type) {
$rootScope.newYesNoBox('warning', 'Faire une synchronisation intégrale ?', '', $rootScope.newYesNoBox('warning', 'Faire une synchronisation intégrale ?', '',

View file

@ -175,7 +175,21 @@
</div> </div>
</form> </form>
<div class="row mb-5"> <div class="card mb-5" ng-show="timeProgression && !displayDangerousActions">
<div class="card-header bg-secondary text-light">
Synchronisation et suppressions de masse
</div>
<div class="card-body">
<div class="form-check">
<label class="custom-control custom-checkbox">
<input class="custom-control-input" type="checkbox" ng-model="displayDangerousActions">
<strong class="custom-control-label">Je sais ce que le challenge a démarré ET <span style="text-decoration: underline red;">j'ai réalisé une sauvegarde de la base de données il y a moins d'une minute</span> ET je sais que c'est <span style="text-decoration: underline yellow;">une très mauvaise idée de cocher cette case</span>, mais j'y suis obligé pour de bonnes raisons.</strong>
</label>
</div>
</div>
</div>
<div class="row mb-5" ng-show="!timeProgression || displayDangerousActions">
<div class="col-8 card text-light bg-dark"> <div class="col-8 card text-light bg-dark">
<div class="card-body"> <div class="card-body">
<dl class="row"> <dl class="row">