diff --git a/app/models/NinfoModl.js b/app/models/NinfoModl.js new file mode 100644 index 0000000..1430d2c --- /dev/null +++ b/app/models/NinfoModl.js @@ -0,0 +1,16 @@ +var mongoose = require('mongoose'); + +module.exports = mongoose.model('Ninfo', { + login: { + type: String, + default: 'login' + }, + equipe: { + type: String, + default: 'nope' + }, + comment: { + type: String, + default: '' + } +}); diff --git a/app/routes/ApiRtes.js b/app/routes/ApiRtes.js index ee14753..e73ad54 100644 --- a/app/routes/ApiRtes.js +++ b/app/routes/ApiRtes.js @@ -1,4 +1,5 @@ var MembresServ = require('../services/MembresServ'); +var NinfoServ = require('../services/NinfoServ'); var PolyUserServ = require('../services/PolyUserServ'); var DecryptServ = require('../services/DecryptServ'); var DosssServ = require('../services/DosssServ'); @@ -60,6 +61,11 @@ giveBack = function (res, status) { }; // Authentication +addLogin = function (req, res, next) { + req.body.login = req.session.data.login; + next(); +}; + reqAuth = function (req, res, next) { if (req.session.data && req.session.data.login) { next(); @@ -134,6 +140,7 @@ sessionData = function (session, cb) { session.section = res[0].section; session.membre = res[1]; session.bureau = res[2]; + // TODO session.personnel cb(null, session); } }); @@ -198,9 +205,7 @@ assertSubject = function (serv) { addSubject = function (serv) { return function (req, res) { - serv.add(req.body, ensureExists(res, 404, function (membre) { - serv.simpleData(membre, giveBack(res, 201)); })); }; @@ -236,6 +241,28 @@ api.post('/membres', reqBureau, assertSubject(MembresServ), function (req, res) api.delete('/membres/:_id', reqBureau, getSubject(MembresServ), delSubject(MembresServ)); +// Nuit de l'Info + +// Obtenir les préférences +api.get('/profile/ninfo', reqAuth, addLogin, function(req, res) { + NinfoServ.getLogin(req.body.login, function(err, ninfo) { + console.log(err); + if (err) { // TODO Tester si on peut pas créer un objet directement et + // récupérer les valeurs par défaut de la BDD + ninfo = { + equipe: 'nope', + comment: '' + }; + } + console.log(ninfo); + NinfoServ.simpleData(ninfo, giveBack(res, 200)); + }); +}); + +// Mettre à jour les préférences +api.put('/profile/ninfo', reqAuth, addLogin, assertSubject(NinfoServ), addSubject(NinfoServ)); + + // Dossiers parentId = function (req, res, next) { @@ -269,11 +296,6 @@ api.post('/convs', reqMembre, parentId, assertSubject(ConvsServ), addSubject(Con // Supression d'une conversation api.delete('/convs/:_id', reqBureau, getSubject(ConvsServ), delSubject(ConvsServ)); -addLogin = function (req, res, next) { - req.body.login = req.session.data.login; - next(); -}; - // Messages // Liste des messs diff --git a/app/services/NinfoServ.js b/app/services/NinfoServ.js new file mode 100644 index 0000000..5145645 --- /dev/null +++ b/app/services/NinfoServ.js @@ -0,0 +1,47 @@ +var NinfoModl = require('../models/NinfoModl'); +var PolyUserServ = require('../services/PolyUserServ'); +var async = require('async'); + +var NinfoServ = module.exports = { + + equipes: ['nope', 'gis', 'ima', 'ci'], + + simple: ['equipe', 'comment'], + + simpleData: function (ninfoD, cb) { + var ninfo = {}; + for (var prop of NinfoServ.simple) { + ninfo[prop] = ninfoD[prop]; + } + cb(null, ninfo); + }, + + + getLogin: function (login, cb) { + NinfoModl.findOne({ + login: login + }, function createIfNotExist(err, ninfo) { + if (ninfo) { + cb(err, ninfo); + } else { + NinfoModl.create({login: login}, cb); + } + }); + }, + + assert: function(data, cb) { + cb(null, data.login && NinfoServ.equipes.indexOf(data.equipe) != -1); + }, + + add: function (data, cb) { // Ajouter les préférences, ou les mettre + // à jour (vu qu'il n'y a pas de sujet add fait les deux) + // Pas de vérification car tout est fait dans assert (et login n'est pas modifié + // par l'utilisateur) + NinfoServ.getLogin(data.login, function(err, ninfo) { + ninfo.equipe = data.equipe; + ninfo.comment = data.comment; + ninfo.save(cb); + }); + } + +}; diff --git a/public/js/app.js b/public/js/app.js index ddda9d9..87f3ee7 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -1,4 +1,4 @@ -angular.module('ciApp', ['ngAnimate', 'ngRoute', 'ConnectCtrl', 'MembreCtrl', 'ForumDirCtrl', 'ForumConvCtrl', 'SessionsCtrl', 'ProfileCtrl']).config(function ($routeProvider, $locationProvider) { +angular.module('ciApp', ['ngAnimate', 'ngRoute', 'ConnectCtrl', 'MembreCtrl', 'NinfoCtrl', 'ForumDirCtrl', 'ForumConvCtrl', 'SessionsCtrl', 'ProfileCtrl']).config(function ($routeProvider, $locationProvider) { $routeProvider .when('/', { templateUrl: 'views/home.html' @@ -10,6 +10,10 @@ angular.module('ciApp', ['ngAnimate', 'ngRoute', 'ConnectCtrl', 'MembreCtrl', 'F .when('/forum', { redirectTo: 'forum/dir/root' }) + .when('/ninfo', { + templateUrl: 'views/ninfo.html', + controller: 'NinfoCtrl' + }) .when('/forum/dir/:doss_id', { templateUrl: 'views/forumDir.html', controller: 'ForumDirCtrl' diff --git a/public/js/controllers/NinfoCtrl.js b/public/js/controllers/NinfoCtrl.js new file mode 100644 index 0000000..15d81b7 --- /dev/null +++ b/public/js/controllers/NinfoCtrl.js @@ -0,0 +1,27 @@ +angular.module('NinfoCtrl', ['SessionsServ', 'ApiServ', 'NotifyServ']) + .controller('NinfoCtrl', function ($scope, SessionServ, ApiServ, NotifyServ) { + $scope.ninfo = {} + $scope.saving = false; + + $scope.session = SessionServ.cur; + SessionServ.onChange(function () { + $scope.session = SessionServ.cur; + }); + + if ($scope.session) { + ApiServ("récupération des préférence Nuit de l'Info", 'get', 'profile/ninfo', null, function (err, ninfo) { + if (!err) + $scope.ninfo = ninfo; + }); + } + + $scope.save = function () { + var not = NotifyServ.promise("Sauvegarde..."); + $scope.saving = true; + ApiServ("sauvegarde des préférences Nuit de l'Info", 'put', 'profile/ninfo', $scope.ninfo, function (err, membre) { + if (!err) + not.success("Sauvegardé !"); + $scope.saving = false; + }); + }; + }); diff --git a/public/views/index.html b/public/views/index.html index e4be1e4..d4c9c77 100644 --- a/public/views/index.html +++ b/public/views/index.html @@ -31,6 +31,7 @@ + @@ -53,6 +54,7 @@