Commit 7664a6268414df1794cb01f7613d0e2250cc2ecc

Authored by Geoffrey PREUD'HOMME
1 parent 64e664d9

Support de la nuit de l'info

app/models/NinfoModl.js 0 → 100644
... ... @@ -0,0 +1,16 @@
  1 +var mongoose = require('mongoose');
  2 +
  3 +module.exports = mongoose.model('Ninfo', {
  4 + login: {
  5 + type: String,
  6 + default: 'login'
  7 + },
  8 + equipe: {
  9 + type: String,
  10 + default: 'nope'
  11 + },
  12 + comment: {
  13 + type: String,
  14 + default: ''
  15 + }
  16 +});
... ...
app/routes/ApiRtes.js
1 1 var MembresServ = require('../services/MembresServ');
  2 +var NinfoServ = require('../services/NinfoServ');
2 3 var PolyUserServ = require('../services/PolyUserServ');
3 4 var DecryptServ = require('../services/DecryptServ');
4 5 var DosssServ = require('../services/DosssServ');
... ... @@ -60,6 +61,11 @@ giveBack = function (res, status) {
60 61 };
61 62  
62 63 // Authentication
  64 +addLogin = function (req, res, next) {
  65 + req.body.login = req.session.data.login;
  66 + next();
  67 +};
  68 +
63 69 reqAuth = function (req, res, next) {
64 70 if (req.session.data && req.session.data.login) {
65 71 next();
... ... @@ -134,6 +140,7 @@ sessionData = function (session, cb) {
134 140 session.section = res[0].section;
135 141 session.membre = res[1];
136 142 session.bureau = res[2];
  143 + // TODO session.personnel
137 144 cb(null, session);
138 145 }
139 146 });
... ... @@ -198,9 +205,7 @@ assertSubject = function (serv) {
198 205  
199 206 addSubject = function (serv) {
200 207 return function (req, res) {
201   -
202 208 serv.add(req.body, ensureExists(res, 404, function (membre) {
203   -
204 209 serv.simpleData(membre, giveBack(res, 201));
205 210 }));
206 211 };
... ... @@ -236,6 +241,28 @@ api.post('/membres', reqBureau, assertSubject(MembresServ), function (req, res)
236 241 api.delete('/membres/:_id', reqBureau, getSubject(MembresServ), delSubject(MembresServ));
237 242  
238 243  
  244 +// Nuit de l'Info
  245 +
  246 +// Obtenir les préférences
  247 +api.get('/profile/ninfo', reqAuth, addLogin, function(req, res) {
  248 + NinfoServ.getLogin(req.body.login, function(err, ninfo) {
  249 + console.log(err);
  250 + if (err) { // TODO Tester si on peut pas créer un objet directement et
  251 + // récupérer les valeurs par défaut de la BDD
  252 + ninfo = {
  253 + equipe: 'nope',
  254 + comment: ''
  255 + };
  256 + }
  257 + console.log(ninfo);
  258 + NinfoServ.simpleData(ninfo, giveBack(res, 200));
  259 + });
  260 +});
  261 +
  262 +// Mettre à jour les préférences
  263 +api.put('/profile/ninfo', reqAuth, addLogin, assertSubject(NinfoServ), addSubject(NinfoServ));
  264 +
  265 +
239 266 // Dossiers
240 267  
241 268 parentId = function (req, res, next) {
... ... @@ -269,11 +296,6 @@ api.post('/convs', reqMembre, parentId, assertSubject(ConvsServ), addSubject(Con
269 296 // Supression d'une conversation
270 297 api.delete('/convs/:_id', reqBureau, getSubject(ConvsServ), delSubject(ConvsServ));
271 298  
272   -addLogin = function (req, res, next) {
273   - req.body.login = req.session.data.login;
274   - next();
275   -};
276   -
277 299 // Messages
278 300  
279 301 // Liste des messs
... ...
app/services/NinfoServ.js 0 → 100644
... ... @@ -0,0 +1,47 @@
  1 +var NinfoModl = require('../models/NinfoModl');
  2 +var PolyUserServ = require('../services/PolyUserServ');
  3 +var async = require('async');
  4 +
  5 +var NinfoServ = module.exports = {
  6 +
  7 + equipes: ['nope', 'gis', 'ima', 'ci'],
  8 +
  9 + simple: ['equipe', 'comment'],
  10 +
  11 + simpleData: function (ninfoD, cb) {
  12 + var ninfo = {};
  13 + for (var prop of NinfoServ.simple) {
  14 + ninfo[prop] = ninfoD[prop];
  15 + }
  16 + cb(null, ninfo);
  17 + },
  18 +
  19 +
  20 + getLogin: function (login, cb) {
  21 + NinfoModl.findOne({
  22 + login: login
  23 + }, function createIfNotExist(err, ninfo) {
  24 + if (ninfo) {
  25 + cb(err, ninfo);
  26 + } else {
  27 + NinfoModl.create({login: login}, cb);
  28 + }
  29 + });
  30 + },
  31 +
  32 + assert: function(data, cb) {
  33 + cb(null, data.login && NinfoServ.equipes.indexOf(data.equipe) != -1);
  34 + },
  35 +
  36 + add: function (data, cb) { // Ajouter les préférences, ou les mettre
  37 + // à jour (vu qu'il n'y a pas de sujet add fait les deux)
  38 + // Pas de vérification car tout est fait dans assert (et login n'est pas modifié
  39 + // par l'utilisateur)
  40 + NinfoServ.getLogin(data.login, function(err, ninfo) {
  41 + ninfo.equipe = data.equipe;
  42 + ninfo.comment = data.comment;
  43 + ninfo.save(cb);
  44 + });
  45 + }
  46 +
  47 +};
... ...
public/js/app.js
1   -angular.module('ciApp', ['ngAnimate', 'ngRoute', 'ConnectCtrl', 'MembreCtrl', 'ForumDirCtrl', 'ForumConvCtrl', 'SessionsCtrl', 'ProfileCtrl']).config(function ($routeProvider, $locationProvider) {
  1 +angular.module('ciApp', ['ngAnimate', 'ngRoute', 'ConnectCtrl', 'MembreCtrl', 'NinfoCtrl', 'ForumDirCtrl', 'ForumConvCtrl', 'SessionsCtrl', 'ProfileCtrl']).config(function ($routeProvider, $locationProvider) {
2 2 $routeProvider
3 3 .when('/', {
4 4 templateUrl: 'views/home.html'
... ... @@ -10,6 +10,10 @@ angular.module('ciApp', ['ngAnimate', 'ngRoute', 'ConnectCtrl', 'MembreCtrl', 'F
10 10 .when('/forum', {
11 11 redirectTo: 'forum/dir/root'
12 12 })
  13 + .when('/ninfo', {
  14 + templateUrl: 'views/ninfo.html',
  15 + controller: 'NinfoCtrl'
  16 + })
13 17 .when('/forum/dir/:doss_id', {
14 18 templateUrl: 'views/forumDir.html',
15 19 controller: 'ForumDirCtrl'
... ...
public/js/controllers/NinfoCtrl.js 0 → 100644
... ... @@ -0,0 +1,27 @@
  1 +angular.module('NinfoCtrl', ['SessionsServ', 'ApiServ', 'NotifyServ'])
  2 + .controller('NinfoCtrl', function ($scope, SessionServ, ApiServ, NotifyServ) {
  3 + $scope.ninfo = {}
  4 + $scope.saving = false;
  5 +
  6 + $scope.session = SessionServ.cur;
  7 + SessionServ.onChange(function () {
  8 + $scope.session = SessionServ.cur;
  9 + });
  10 +
  11 + if ($scope.session) {
  12 + ApiServ("récupération des préférence Nuit de l'Info", 'get', 'profile/ninfo', null, function (err, ninfo) {
  13 + if (!err)
  14 + $scope.ninfo = ninfo;
  15 + });
  16 + }
  17 +
  18 + $scope.save = function () {
  19 + var not = NotifyServ.promise("Sauvegarde...");
  20 + $scope.saving = true;
  21 + ApiServ("sauvegarde des préférences Nuit de l'Info", 'put', 'profile/ninfo', $scope.ninfo, function (err, membre) {
  22 + if (!err)
  23 + not.success("Sauvegardé !");
  24 + $scope.saving = false;
  25 + });
  26 + };
  27 + });
... ...
public/views/index.html
... ... @@ -31,6 +31,7 @@
31 31 <script src="js/controllers/NavbarCtrl.js"></script>
32 32 <script src="js/controllers/ConnectCtrl.js"></script>
33 33 <script src="js/controllers/MembreCtrl.js"></script>
  34 + <script src="js/controllers/NinfoCtrl.js"></script>
34 35 <script src="js/controllers/ProfileCtrl.js"></script>
35 36 <script src="js/controllers/ForumDirCtrl.js"></script>
36 37 <script src="js/controllers/ForumConvCtrl.js"></script>
... ... @@ -53,6 +54,7 @@
53 54 <ul class="nav navbar-nav">
54 55 <li><a href="/membres">Membres</a></li>
55 56 <li ng-show="session"><a href="/forum">Forum</a></li>
  57 + <li><a href="/ninfo">Nuit de l'info</a></li>
56 58 </ul>
57 59 <ul class="nav navbar-nav navbar-right" id="SessionIndc">
58 60 <li>
... ... @@ -70,4 +72,4 @@
70 72 </div>
71 73 </body>
72 74  
73   -</html>
74 75 \ No newline at end of file
  76 +</html>
... ...
public/views/ninfo.html 0 → 100644
... ... @@ -0,0 +1,51 @@
  1 +<div class="container">
  2 + <h1>Participer à la nuit de l'info !</h1>
  3 + <p>
  4 + À partir d'une problématique donnée, développer une application y répondant le tout en équipe et en une nuit, c'est possible, et c'est la Nuit de l'Info !
  5 + </p>
  6 +
  7 + <h2>À qui cela s'adresse-t-il ?</h2>
  8 + <p>
  9 + Tout étudiant possédant des compétences utiles pour développer une application informatique est le bienvenu ! Que tu sois programmeur à tes heures libres, que tu suive juste tes cours d'informatique, mais aussi que tu sois graphiste, comunity manager en herbe, administrateur système ou même de créateurs de musique, tu y trouveras ton compte !
  10 + </p>
  11 +
  12 + <h2>Où et quand cela se déroule-t-il ?</h2>
  13 + <p>
  14 + Cela se passe du 3 décembre à 16h40 jusqu'au 4 à 8h02, au bâtiment M3 sur Lille1.
  15 + </p>
  16 +
  17 + <h2>J'ai d'autres questions, où puis-je trouver des informations en plus ?</h2>
  18 + <p>
  19 + Tu les trouvera peut-être sur <a href="http://www.nuitdelinfo.com/">le site officiel de la Nuit de l'Info</a>.<br/>
  20 + Sinon, n'hésite pas à envoyer <a href="mailto:cinforma@polytech-lille.net">un mail au Club Info</a> qui se fera un plaisir de te répondre !
  21 + <p>
  22 +
  23 + <div ng-hide="session">
  24 + <h2>Ça a l'air cool, où est-ce qu'on s'inscrit ?</h2>
  25 + <p>
  26 + Si tu es Polytech Lillois, conncte-toi avec ton identifiant en haut à droite de cette page ! À tout de suite !<br/>
  27 + Si tu n'es pas Polytech Lillois (auquel cas je ne sais pas comment tu es arrivé ici), je te renvoie <a href="http://www.nuitdelinfo.com/">le site officiel de la Nuit de l'Info</a>.
  28 + </p>
  29 + </div>
  30 +
  31 + <div ng-show="session">
  32 + <h2>Je souhaite participer à la nuit de l'info</h2>
  33 + <p>Ça c'est cool ! On a juste deux petites questions à te poser.</p>
  34 + <form>
  35 + <div class="form-group">
  36 + <label for="equipe">Dans quelle équipe souhaites-tu participer ?</label><br/>
  37 + <input type="radio" name="equipe" ng-model="ninfo.equipe" value="nope" checked> Je ne souhaite pas participer</input><br/>
  38 + <input type="radio" name="equipe" ng-model="ninfo.equipe" value="ci"> Avec le Club Info</input><br/>
  39 + <input type="radio" name="equipe" ng-model="ninfo.equipe" value="ima"> Avec les IMA</input><br/>
  40 + <input type="radio" name="equipe" ng-model="ninfo.equipe" value="gis"> Avec les GIS</input><br/>
  41 + </div>
  42 + <div class="form-group">
  43 + <label for="comment">Un petit commentaire ? (facultatif)</label>
  44 + <p>Tu pourrais nous dire quelles capacités tu possède, ou nous dire quel est ton engouement pour cette nuit de folie !</p>
  45 + <textarea ng-model="ninfo.comment" rows="4" cols="50" placeholder="Une fois quand j'avais 10 ans j'ai codé un mini-site en PHP qui donnait ton âge à partir de ta date de naissance et de l'année actuelle. J'aimerais trop mettre à profit mes capacités pour cette nuit de folie !"></textarea>
  46 + </div>
  47 + <button type="submit" ladda="saving" class="btn btn-primary" ng-click="save()">Enregistrer les préférences</button>
  48 + </form>
  49 + </div>
  50 + <br/>
  51 +</div>
... ...