Évolution de la couche modèle pour permettre le regroupement de quizs.
This commit is contained in:
parent
50f53a969b
commit
5d93a41a45
14
lang/fr/group.js
Normal file
14
lang/fr/group.js
Normal file
@ -0,0 +1,14 @@
|
||||
module.exports =
|
||||
{
|
||||
needCorrectPublishingDate: "La date de publication fournie n'a pas un format valide.",
|
||||
needLanguage: "Vous devez sélectionner la langue de ce quiz.",
|
||||
needNotTooLongTitle: "Le titre du quiz ne doit pas compter plus de 255 caractères.",
|
||||
needTitle: "Merci de fournir un titre à votre quiz.",
|
||||
needUniqueUrl: "L'url du quiz doit être unique.",
|
||||
needUrl: "Merci de fournir l'url à votre quiz.",
|
||||
/*
|
||||
questionnairesName: "quiz",
|
||||
questionnaireNeedBeCompleted: "Quiz incomplet",
|
||||
publishedAt: ", le",
|
||||
publishedBy: "Quiz publié par"*/
|
||||
};
|
@ -23,6 +23,7 @@ module.exports =
|
||||
needKnowIfIsPublished: "Il faut savoir si ce quiz est publié.",
|
||||
needLanguage: "Vous devez sélectionner la langue de ce quiz.",
|
||||
needNotTooLongTitle: "Le titre du quiz ne doit pas compter plus de 255 caractères.",
|
||||
needNumberForRank: "Vous devez saisir un nombre entier pour le rang de ce questionnaire dans son groupe.",
|
||||
needTitle: "Merci de fournir un titre à votre quiz.",
|
||||
needUniqueUrl: "L'url du quiz doit être unique.",
|
||||
needUrl: "Merci de fournir l'url à votre quiz.",
|
||||
|
94
models/Group.js
Normal file
94
models/Group.js
Normal file
@ -0,0 +1,94 @@
|
||||
"use strict";
|
||||
|
||||
// revoir les requires pour ne prendre que ce j'ai besoin ?
|
||||
const striptags = require("striptags");
|
||||
|
||||
const slugify = require("slugify");
|
||||
const tool = require("../tools/main");
|
||||
|
||||
const config = require("../config/main.js");
|
||||
const txt = require("../lang/"+config.adminLang+"/group");
|
||||
const txtGeneral = require("../lang/"+config.adminLang+"/general");
|
||||
|
||||
module.exports = (sequelize, DataTypes) =>
|
||||
{
|
||||
const Group = sequelize.define("Groupe",
|
||||
{
|
||||
title:
|
||||
{
|
||||
type: DataTypes.STRING(255), allowNull: false,
|
||||
set(value)
|
||||
{
|
||||
this.setDataValue("title", tool.trimIfNotNull(striptags(value)));
|
||||
},
|
||||
validate:
|
||||
{
|
||||
notNull: { msg: txt.needTitle },
|
||||
len:
|
||||
{
|
||||
args: [1, 255],
|
||||
msg: txt.needNotTooLongTitle
|
||||
}
|
||||
}
|
||||
},
|
||||
slug:
|
||||
{
|
||||
type: DataTypes.STRING(150), allowNull: false,
|
||||
unique:
|
||||
{
|
||||
args: true,
|
||||
msg: txt.needUniqueUrl
|
||||
},
|
||||
set(value)
|
||||
{
|
||||
value=tool.trimIfNotNull(striptags(value));
|
||||
if(value!==null)
|
||||
this.setDataValue("slug", slugify(value.substring(0,150), { lower:true, strict:true }));
|
||||
else if(this.title!==null)
|
||||
this.setDataValue("slug", slugify(this.title.substring(0,150), { lower:true, strict:true }));
|
||||
},
|
||||
validate:
|
||||
{
|
||||
notNull: { msg: txt.needUrl }
|
||||
}
|
||||
},
|
||||
introduction:
|
||||
{
|
||||
type: DataTypes.TEXT, allowNull: true,
|
||||
set(value) { this.setDataValue("introduction", tool.trimIfNotNull(striptags(value,"<p><b><i><em><strong><ul><li><div><a><br>"))); }
|
||||
},
|
||||
publishingAt:
|
||||
{
|
||||
type: DataTypes.DATE, comment: "If null, the questionnaire with the questions for each element of the group is not published, but its elements may be.",
|
||||
set(value) { this.setDataValue("publishingAt", tool.trimIfNotNull(value)); },
|
||||
validate:
|
||||
{
|
||||
isDate: { msg: txt.needCorrectPublishingDate }
|
||||
}
|
||||
},
|
||||
language:
|
||||
{
|
||||
type: DataTypes.STRING(4), allowNull: false, defaultValue: "fr",
|
||||
validate:
|
||||
{
|
||||
notNull: { msg: txt.needLanguage },
|
||||
len:
|
||||
{
|
||||
args: [2, 4],
|
||||
msg: txt.needLanguage+" "+txtGeneral.notValidFormat
|
||||
} // en fait, il faudra vérifier l'existence du fichier de la langue choisie.
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
charset: "utf8mb4",
|
||||
collate: "utf8mb4_unicode_ci"
|
||||
}
|
||||
);
|
||||
Questionnaire.associate = function(models)
|
||||
{
|
||||
Questionnaire.hasMany(models.Questionnaire);
|
||||
Questionnaire.belongsTo(models.User, { as: "Creator", foreignKey: { name: "CreatorId", allowNull: false } });
|
||||
};
|
||||
return Questionnaire;
|
||||
};
|
@ -115,6 +115,20 @@ module.exports = (sequelize, DataTypes) =>
|
||||
msg: txt.needEstimatedTime+" "+txtGeneral.notValidFormat
|
||||
}
|
||||
}
|
||||
},
|
||||
rankInGroup:
|
||||
{
|
||||
type: DataTypes.INTEGER(2).UNSIGNED, allowNull: true,
|
||||
comment: "Allows you to classify the questionnaire if it belongs to a group.",
|
||||
validate:
|
||||
{
|
||||
isInt: { msg: txt.needNumberForRank },
|
||||
min:
|
||||
{
|
||||
args: [1],
|
||||
msg: txt.needNumberForRank
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -129,6 +143,7 @@ module.exports = (sequelize, DataTypes) =>
|
||||
Questionnaire.hasMany(models.Link);
|
||||
Questionnaire.hasMany(models.Answer);
|
||||
Questionnaire.belongsTo(models.User, { as: "Creator", foreignKey: { name: "CreatorId", allowNull: false } });
|
||||
Questionnaire.belongsTo(models.Group, { foreignKey: { name: "GroupId", allowNull: true }, onDelete: 'RESTRICT', onUpdate: 'RESTRICT' });
|
||||
Questionnaire.belongsToMany(models.Tag, { through: models.QuestionnaireClassification });
|
||||
Questionnaire.belongsToMany(models.User, { through: models.QuestionnaireAccess });
|
||||
};
|
||||
|
@ -3,7 +3,7 @@
|
||||
-- https://www.phpmyadmin.net/
|
||||
--
|
||||
-- Client : localhost:3306
|
||||
-- Généré le : Mer 26 Août 2020 à 12:22
|
||||
-- Généré le : Mer 07 Octobre 2020 à 18:42
|
||||
-- Version du serveur : 5.7.31-0ubuntu0.18.04.1
|
||||
-- Version de PHP : 7.2.24-0ubuntu0.18.04.6
|
||||
|
||||
@ -53,6 +53,24 @@ CREATE TABLE `Choices` (
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Structure de la table `Groups`
|
||||
--
|
||||
|
||||
CREATE TABLE `Groups` (
|
||||
`id` int(11) NOT NULL,
|
||||
`title` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`slug` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`introduction` text COLLATE utf8mb4_unicode_ci,
|
||||
`publishingAt` datetime DEFAULT NULL COMMENT 'If null, the questionnaire with the questions for each element of the group is not published, but its elements may be.',
|
||||
`language` varchar(4) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'fr',
|
||||
`createdAt` datetime NOT NULL,
|
||||
`updatedAt` datetime NOT NULL,
|
||||
`CreatorId` int(11) NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Structure de la table `Illustrations`
|
||||
--
|
||||
@ -156,9 +174,11 @@ CREATE TABLE `Questionnaires` (
|
||||
`isPublished` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'May depend on factors other than the date of publication.',
|
||||
`language` varchar(4) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'fr',
|
||||
`estimatedTime` enum('short','medium','long') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'medium' COMMENT 'Provides an estimate of the time required to complete this questionnaire.',
|
||||
`rankInGroup` int(2) UNSIGNED DEFAULT NULL COMMENT 'Allows you to classify the questionnaire if it belongs to a group.',
|
||||
`createdAt` datetime NOT NULL,
|
||||
`updatedAt` datetime NOT NULL,
|
||||
`CreatorId` int(11) NOT NULL
|
||||
`CreatorId` int(11) NOT NULL,
|
||||
`GroupId` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
@ -264,6 +284,14 @@ ALTER TABLE `Choices`
|
||||
ADD PRIMARY KEY (`id`),
|
||||
ADD KEY `QuestionId` (`QuestionId`);
|
||||
|
||||
--
|
||||
-- Index pour la table `Groups`
|
||||
--
|
||||
ALTER TABLE `Groups`
|
||||
ADD PRIMARY KEY (`id`),
|
||||
ADD UNIQUE KEY `Questionnaires_slug_unique` (`slug`),
|
||||
ADD KEY `CreatorId` (`CreatorId`);
|
||||
|
||||
--
|
||||
-- Index pour la table `Illustrations`
|
||||
--
|
||||
@ -314,7 +342,8 @@ ALTER TABLE `Questionnaires`
|
||||
ADD PRIMARY KEY (`id`),
|
||||
ADD UNIQUE KEY `Questionnaires_slug_unique` (`slug`),
|
||||
ADD KEY `isPublished` (`isPublished`),
|
||||
ADD KEY `CreatorId` (`CreatorId`);
|
||||
ADD KEY `CreatorId` (`CreatorId`),
|
||||
ADD KEY `GroupId` (`GroupId`);
|
||||
|
||||
--
|
||||
-- Index pour la table `Questions`
|
||||
@ -360,17 +389,22 @@ ALTER TABLE `Users`
|
||||
-- AUTO_INCREMENT pour la table `Answers`
|
||||
--
|
||||
ALTER TABLE `Answers`
|
||||
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=29;
|
||||
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=36;
|
||||
--
|
||||
-- AUTO_INCREMENT pour la table `Choices`
|
||||
--
|
||||
ALTER TABLE `Choices`
|
||||
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1007;
|
||||
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1016;
|
||||
--
|
||||
-- AUTO_INCREMENT pour la table `Groups`
|
||||
--
|
||||
ALTER TABLE `Groups`
|
||||
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
|
||||
--
|
||||
-- AUTO_INCREMENT pour la table `Illustrations`
|
||||
--
|
||||
ALTER TABLE `Illustrations`
|
||||
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=37;
|
||||
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=39;
|
||||
--
|
||||
-- AUTO_INCREMENT pour la table `Links`
|
||||
--
|
||||
@ -385,22 +419,22 @@ ALTER TABLE `Pauses`
|
||||
-- AUTO_INCREMENT pour la table `Payments`
|
||||
--
|
||||
ALTER TABLE `Payments`
|
||||
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
|
||||
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
|
||||
--
|
||||
-- AUTO_INCREMENT pour la table `Questionnaires`
|
||||
--
|
||||
ALTER TABLE `Questionnaires`
|
||||
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=50;
|
||||
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=51;
|
||||
--
|
||||
-- AUTO_INCREMENT pour la table `Questions`
|
||||
--
|
||||
ALTER TABLE `Questions`
|
||||
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=322;
|
||||
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=327;
|
||||
--
|
||||
-- AUTO_INCREMENT pour la table `Subscriptions`
|
||||
--
|
||||
ALTER TABLE `Subscriptions`
|
||||
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=21;
|
||||
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=19;
|
||||
--
|
||||
-- AUTO_INCREMENT pour la table `Tags`
|
||||
--
|
||||
@ -410,12 +444,12 @@ ALTER TABLE `Tags`
|
||||
-- AUTO_INCREMENT pour la table `UserDeleteds`
|
||||
--
|
||||
ALTER TABLE `UserDeleteds`
|
||||
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
|
||||
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6;
|
||||
--
|
||||
-- AUTO_INCREMENT pour la table `Users`
|
||||
--
|
||||
ALTER TABLE `Users`
|
||||
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=29;
|
||||
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=27;
|
||||
--
|
||||
-- Contraintes pour les tables exportées
|
||||
--
|
||||
@ -475,7 +509,8 @@ ALTER TABLE `QuestionnaireClassifications`
|
||||
-- Contraintes pour la table `Questionnaires`
|
||||
--
|
||||
ALTER TABLE `Questionnaires`
|
||||
ADD CONSTRAINT `Questionnaires_ibfk_1` FOREIGN KEY (`CreatorId`) REFERENCES `Users` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE;
|
||||
ADD CONSTRAINT `Questionnaires_ibfk_1` FOREIGN KEY (`CreatorId`) REFERENCES `Users` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE,
|
||||
ADD CONSTRAINT `Questionnaires_ibfk_2` FOREIGN KEY (`GroupId`) REFERENCES `Groups` (`id`);
|
||||
|
||||
--
|
||||
-- Contraintes pour la table `Questions`
|
||||
|
Loading…
Reference in New Issue
Block a user