Commit 7664a6268414df1794cb01f7613d0e2250cc2ecc
1 parent
64e664d9
Support de la nuit de l'info
Showing
7 changed files
with
178 additions
and
9 deletions
Show diff stats
... | ... | @@ -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 | ... | ... |
... | ... | @@ -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' | ... | ... |
... | ... | @@ -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> | ... | ... |
... | ... | @@ -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> | ... | ... |