Ajout contrôleur + route pour obtenir liste paginée des questionnaires des questionnaires auxquels un utilisateur a eu accès.
This commit is contained in:
parent
e27a26d022
commit
89829c784c
@ -4,7 +4,7 @@ module.exports =
|
||||
questionnaireRoutes: "/questionnaire",// la base à laquelle s'ajoute les routes suivantes
|
||||
getListNextQuestionnaires: "/getlistnextquestionnaires/",
|
||||
getQuestionnaireRoutes: "/get",
|
||||
getRandomQuestionnairesRoute : "/getrandom",
|
||||
getRandomQuestionnairesRoute : "/getrandom",
|
||||
getStatsQuestionnaires : "/stats/",
|
||||
previewQuestionnaireRoutes: "/preview",
|
||||
publishedQuestionnaireRoutes: "/quiz/",
|
||||
@ -23,7 +23,6 @@ module.exports =
|
||||
// -- answers :
|
||||
getAdminStats: "/getadminstats/",
|
||||
getPreviousAnswers: "/user/answers/",
|
||||
/// getQuestionnairesWithoutAnswer: "/withoutanswer/user/", -> ne sert plus ! à remplacer pour liste derniers quizs
|
||||
getStatsAnswers : "/user/anwswers/stats/",// fonctionne aussi pour les groupes
|
||||
saveAnswersRoute: "/answer/",// idem
|
||||
// forms : à compléter avec valeurs par défaut, etc. cf modèle
|
||||
|
@ -16,6 +16,7 @@ module.exports =
|
||||
getLoginLinkRoute: "/getloginlink",
|
||||
getPayments: "/payment/getforoneuser/",
|
||||
getUserInfos: "/get/",
|
||||
getUsersQuestionnairesRoute: "/getusersquestionnaires/",// les questionnaires auxquels l'utilisateur a déjà eu accès via son abonnement
|
||||
searchUserRoute: "/search/",
|
||||
signupCompletionRoute: "/signupcompletion/",
|
||||
subscribeRoute: "/signup",
|
||||
|
@ -21,7 +21,7 @@ exports.create = async (req, res, next) =>
|
||||
const db = require("../models/index");
|
||||
req.body.UserId=req.connectedUser.User.id;
|
||||
await saveAnswerToQuestionnaire(req.body);
|
||||
// J'en profite pour remettre les pendules à l'heure !
|
||||
// J'en profite pour remettre les pendules à l'heure ! (revoir pour appeler un contrôleur des users)
|
||||
db["User"].update({ timeDifference: req.body.timeDifference }, { where: { id : req.connectedUser.User.id }, limit:1 });
|
||||
res.status(201).json({ message: txtAnswers.responseSavedMessage });
|
||||
next();
|
||||
@ -101,12 +101,12 @@ exports.getStatsByUser = async(req, res, next) =>
|
||||
|
||||
// FONCTIONS UTILITAIRES
|
||||
|
||||
// Enregistre la réponse à un questionnaire
|
||||
// Enregistre la réponse à un questionnaire autonome
|
||||
const saveAnswerToQuestionnaire = async (req) =>
|
||||
{
|
||||
const db = require("../models/index");
|
||||
const checkQuestionnaireAccess=await subscriptionCtrl.checkQuestionnaireAccess(req.UserId, req.QuestionnaireId);
|
||||
if(checkQuestionnaireAccess) // L'utilisateur a déjà accès à ce questionnaire, j'enregistre juste sa réponse
|
||||
if(checkQuestionnaireAccess) // Si l'utilisateur a déjà accès à ce questionnaire, j'enregistre juste sa réponse
|
||||
await db["Answer"].create({ ...req }, { fields: ["nbQuestions", "nbCorrectAnswers", "duration", "QuestionnaireId", "UserId"] });
|
||||
else
|
||||
{
|
||||
@ -126,6 +126,7 @@ const saveAnswerToGroup = async (req) =>
|
||||
{
|
||||
const db = require("../models/index");
|
||||
const answer = await db["Answer"].create({ ...req }, { fields: ["nbQuestions", "nbCorrectAnswers", "duration", "GroupId", "UserId"] });
|
||||
// Si il a répondu à un quiz groupé, l'utilisateur est considéré comme ayant lu tous les éléments du groupe
|
||||
const group = await groupCtrl.searchGroupById(req.GroupId);
|
||||
for(let i in group.Questionnaires)
|
||||
{
|
||||
@ -142,7 +143,7 @@ const saveAnswerToGroup = async (req) =>
|
||||
exports.saveAnswerToGroup = saveAnswerToGroup;
|
||||
|
||||
// Créer la liste des réponses d'un utilisateur
|
||||
// !! à surveiller car fichier pouvant devenir gros ! mais utile pour future SVG côté client
|
||||
// !! à surveiller car fichier pouvant devenir gros ! mais utile pour future SVG côté client ?
|
||||
const creaUserAnswersJson = async (UserId) =>
|
||||
{
|
||||
const db = require("../models/index");
|
||||
@ -170,7 +171,7 @@ const getUserAnswersByQuestionnaire = async (UserId, QuestionnaireId) =>
|
||||
{
|
||||
if(userAnswers[i].QuestionnaireId == QuestionnaireId) // pas "===", car type de données pouvant être différents
|
||||
answers.push(userAnswers[i]);
|
||||
else if(answers.length !== 0) // les réponses étant classées par QuestionnaireId, je peux sortir de la boucle
|
||||
else if(answers.length !== 0) // les réponses étant groupées par QuestionnaireId, je peux sortir de la boucle
|
||||
break;
|
||||
}
|
||||
return answers;
|
||||
@ -189,7 +190,7 @@ const getUserAnswersByGroup = async (UserId, GroupId) =>
|
||||
{
|
||||
if(userAnswers[i].GroupId == GroupId)// pas "===" car type de données pouvant être différents
|
||||
answers.push(userAnswers[i]);
|
||||
else if(answers.length !== 0) // les réponses étant classées par GroupId, je peux sortir de la boucle
|
||||
else if(answers.length !== 0) // les réponses étant groupées par GroupId, je peux sortir de la boucle
|
||||
break;
|
||||
}
|
||||
return answers;
|
||||
|
@ -39,6 +39,56 @@ exports.unsubscribeLink = async (req, res, next) =>
|
||||
}
|
||||
}
|
||||
|
||||
// Retourne la liste des questionnaires auxquels un utilisateur a eu accès, listés par ordre de fraîcheur.
|
||||
// Un questionnaire de début et un nombre de questionnaires à retourner doivent être fournis (pagination).
|
||||
exports.getQuestionnairesForUser = async(req, res, next) =>
|
||||
{
|
||||
try
|
||||
{
|
||||
if(req.params.id === undefined || req.params.begin === undefined || req.params.nb === undefined)
|
||||
{
|
||||
const err=new Error;
|
||||
err.message=txtGeneral.neededParams;
|
||||
throw err;
|
||||
}
|
||||
const questionnaires = await db.sequelize.query("SELECT `Questionnaires`.`id` FROM `Questionnaires` INNER JOIN `QuestionnaireAccesses` ON `QuestionnaireAccesses`.`QuestionnaireId`=`Questionnaires`.`id` AND `QuestionnaireAccesses`.`UserId`=:id ORDER BY `QuestionnaireAccesses`.`createdAt` DESC LIMIT :begin,:nb", { replacements: { id:req.params.id, begin:req.params.begin, nb:req.params.nb }, type: QueryTypes.SELECT });
|
||||
// je vais chercher les infos dans les json car ma vue a besoin des infos présentées de cette manière
|
||||
const datas=[];
|
||||
for(let i in questionnaires)
|
||||
datas.push(await questionnaireCtrl.searchQuestionnaireById(questionnaires[i].id, true));
|
||||
if(req.params.output !== undefined && req.params.output == "html")
|
||||
{
|
||||
if(datas.length !== 0)
|
||||
{
|
||||
const pug = require("pug");
|
||||
const striptags = require("striptags");
|
||||
const txtIllustration= require("../lang/"+config.adminLang+"/illustration");
|
||||
const compiledFunction = pug.compileFile("./views/"+config.theme+"/includes/listing-questionnaires.pug");
|
||||
const pageDatas=
|
||||
{
|
||||
tool: tool,
|
||||
striptags: striptags,
|
||||
txtGeneral: txtGeneral,
|
||||
txtIllustration: txtIllustration,
|
||||
questionnaires: datas,
|
||||
nbQuestionnairesList:configTpl.nbQuestionnairesUserHomePage
|
||||
}
|
||||
datas.html=await compiledFunction(pageDatas);
|
||||
}
|
||||
else
|
||||
datas.html="";
|
||||
res.status(200).json(datas);
|
||||
}
|
||||
else// on retourne seulement les données
|
||||
res.status(200).json(datas);
|
||||
next();
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
next(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// CRONS
|
||||
|
||||
|
@ -25,6 +25,5 @@ router.get("/preview/:id/:token", questionnaireCtrl.showOneQuestionnaireById);//
|
||||
router.post("/answer/", auth, answerCtrl.create);
|
||||
router.get("/user/anwswers/stats/:userId", auth, answerCtrl.getStatsByUser);
|
||||
router.get("/user/answers/:userId/:questionnaireId", auth, answerCtrl.getAnswersByQuestionnaire);
|
||||
//router.get("/withoutanswer/user/:id/:begin/:nb/:output", auth, answerCtrl.getQuestionnairesWithouAnswerByUser);
|
||||
|
||||
module.exports = router;
|
@ -34,5 +34,6 @@ router.get("/getgodchilds/:id", authAdmin, userCtrl.getOneUserGodChilds);
|
||||
router.get("/get/:id", auth, userCtrl.getOneUserById);
|
||||
router.post("/search", authAdmin, userCtrl.searchUsers);
|
||||
router.get("/getadminstats", authAdmin, userCtrl.getStats);
|
||||
router.get("/getusersquestionnaires/:id/:begin/:nb/:output", auth, subscriptionCtrl.getQuestionnairesForUser);
|
||||
|
||||
module.exports = router;
|
@ -15,7 +15,7 @@ div(id="triple-column")
|
||||
{
|
||||
questionnaires_col[col].push(questionnaires[i]);
|
||||
tot++;
|
||||
if((col===0 && tot >= (nbMaxQuestionnairesCol/3)) || (col===1 && tot >= (nbMaxQuestionnairesCol/3*2)))
|
||||
if((col === 0 && tot >= (nbMaxQuestionnairesCol/3)) || (col === 1 && tot >= (nbMaxQuestionnairesCol/3*2)))
|
||||
col++;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user