Skip to content

Commit

Permalink
Merge pull request #58 from InseeFr/impl-general-faq-business
Browse files Browse the repository at this point in the history
Impl general faq business
  • Loading branch information
EricThuaud authored Jun 11, 2024
2 parents f30d576 + 6d59db7 commit 2769fc0
Show file tree
Hide file tree
Showing 8 changed files with 22,205 additions and 20 deletions.
21,988 changes: 21,988 additions & 0 deletions package-lock.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "colempub",
"version": "1.0.3",
"version": "1.0.4",
"dependencies": {
"axios": "^0.19.2",
"bootstrap": "^3.3.7",
Expand Down
10 changes: 8 additions & 2 deletions src/components/auth/component.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@ import { getSurveyVerifMailById } from 'utils/read-content';
import { getQuestionnaireUrl } from 'utils/api';
import useAuth from 'utils/hook/auth';
import NoSurveyPage from 'components/content/ineligible';
import UnauthorizedPage from 'components/content/unauthorized';

const Auth = ({ urlBackEnd, id, history, keycloakAuth }) => {
const { loading, authenticated, authError } = useAuth(keycloakAuth);
const [error, setError] = useState(null);
const [ineligible, setIneligible] = useState(false);
const [unauthorized, setUnauthorized] = useState(false);

const redirectToUrl = url => {
window.location = url;
Expand All @@ -35,8 +37,11 @@ const Auth = ({ urlBackEnd, id, history, keycloakAuth }) => {
setIneligible(true);
}
} catch (e) {
// including 410 status - no habilitation found
setError('technique');
if (e.response.status === 401 || e.response.status === 403 || e.response.status === 404) {
setUnauthorized(true);
} else {
setError('technique');
}
}
}, [history, id, urlBackEnd, keycloakAuth]);

Expand All @@ -50,6 +55,7 @@ const Auth = ({ urlBackEnd, id, history, keycloakAuth }) => {
{loading && <Loading id={id} />}
{error && <ErrorComponent error={error} />}
{ineligible && <NoSurveyPage id={id} />}
{unauthorized && <UnauthorizedPage id={id} />}
</>
);
};
Expand Down
6 changes: 4 additions & 2 deletions src/components/content/faq/component.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,11 @@ class Faq extends Component {
const { itemDisplayed } = this.state;
return (
<section>
<h2>{`Questions générales`}</h2>
{faqData.filter(f => f.type === 'general' && f.body !== undefined).length > 0 && (
<h2>{`Questions générales`}</h2>
)}
{faqData.map(({ id, title, body, type }) =>
type === 'general' ? (
type === 'general' && body !== undefined ? (
<FaqItem
id={id}
key={`faq-item-${id}`}
Expand Down
26 changes: 26 additions & 0 deletions src/components/content/unauthorized.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import React from 'react';
import ReactMarkdown from 'react-markdown';
import { getUnauthorizedText } from 'utils/read-content';
import PropTypes from 'prop-types';
import { Link } from 'react-router-dom';

const UnauthorizedPage = ({ id }) => {
return (
<>
<div className="no-survey">
<section>
<p>
<ReactMarkdown source={getUnauthorizedText()} linkTarget="_blank" />
{` En cas de difficultés, vous pouvez `}
<Link to={`/${id}/contacter-assistance`}>{`contacter l'assistance`}</Link>
</p>
</section>
</div>
</>
);
};

export default UnauthorizedPage;
UnauthorizedPage.propTypes = {
id: PropTypes.string.isRequired,
};
2 changes: 1 addition & 1 deletion src/components/home.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import SurveyItem from 'components/template/survey-item';

const Home = () => (
<div id="main">
<Banner title={`Portail de réponse aux enquêtes de la statistique publique`} />
<Banner title={`Portail de réponse\r\n aux enquêtes de la statistique publique`} />

<div className="row">
<div className="col-md-12 text-justify">
Expand Down
148 changes: 148 additions & 0 deletions src/resources/content.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@
],
"ineligible": {
"body": "Vous n'êtes pas éligible pour répondre à une enquête."
},
"unauthorized": {
"body": "Vous n'êtes pas concerné par une enquête de la statistique publique."
}
}
},
Expand Down Expand Up @@ -239,6 +242,151 @@
{ "auth": false, "value": "autre", "displayValue": "Autre" }
]
}
},
{
"id": "bus",
"isSurveyOnline": true,
"messageSurveyOffline": "L'enquête est terminée",
"messageInfoSurveyOffline": "L'accés au questionnaire est actuellement impossible",
"title": "Survey about Armadillos",
"titleShort": "Armadillo Survey",
"verifmail": false,
"content": {
"description": {
"title": "Survey about Armadillos 2023",
"body": "Présentation des objectifs de l'enquête."
},
"resultats": {
"title": "Résultats de l'enquête 2019",
"menu-title": "Résultats de l'enquête 2019",
"picture-url": "img/arm_resultats.png",
"legende": "L'enquête donne lieu à de nombreuses publications.",
"link-url": "https://en.wikipedia.org/wiki/Armadillo"
},
"enquete-en-detail": {
"menu-link": "https://en.wikipedia.org/wiki/Armadillo"
},

"donnees-personnelles": {
"cartouche": "Vos réponses seront conservées pendant cinq ans à compter de la fin de la collecte pour les besoins de l’enquête.",
"context": ""
},
"a-quoi-servent-vos-reponses": {
"body": "Vos réponses nous sont fort utiles."
},
"faq-data": [
{
"title": "Comment va se dérouler l'enquête ?",
"body": "La période de collecte dure trois semaines. Deux modes de réponse sont proposés : soit Internet sur un site sécurisé, soit le téléphone avec un enquêteur.\n\n* Vous pouvez répondre par Internet en vous connectant au questionnaire en ligne, à l’aide de l’identifiant et du mot de passe figurant sur la lettre de lancement de l'enquête. Le temps moyen de réponse est de moins de 10 minutes par questionnaire individuel. Vous pourrez éventuellement interrompre la saisie du questionnaire et la reprendre là où vous l’aurez arrêtée.\n\n* Si vous n'avez pas répondu sur Internet au bout de quelques jours, un enquêteur de l'Insee vous appellera pour vous proposer de réaliser l'enquête par téléphone. Vous pourrez cependant encore répondre par Internet si vous le préférez."
},
{
"title": "Impossibilité d'accéder au questionnaire - message « Identifiant ou mot de passe erroné »",
"body": "L'identifiant et le mot de passe vous permettant d'accéder pour la première fois au questionnaire de l'enquête sont inscrits sur le courriel que vous avez reçu de l'Insee. À la saisie du mot de passe, il faut respecter les minuscules, majuscules et caractères spéciaux.\n\nLors de la première connexion, on vous demandera de changer votre mot de passe. "
},
{
"title": "J'ai fermé le questionnaire Internet en cours de remplissage, que faire ?",
"body": "Si le questionnaire s'est fermé alors que vous n'aviez pas terminé de le remplir, les données que vous avez saisies restent accessibles et vous pouvez continuer de répondre à ce questionnaire. Pour cela, connectez-vous à nouveau sur le site de l'enquête avec votre identifiant et votre mot de passe. Vous pourrez retrouver le questionnaire là où vous vous étiez arrêté.\n\nVos données sont automatiquement sauvegardées à chaque fois que vous cliquez sur le bouton « Suivant ».\n\nEn cas d'inactivité prolongée et pour des raisons de sécurité, le questionnaire se ferme automatiquement au bout de 15 minutes. Vous pouvez de nouveau y accéder en vous reconnectant sur le site de l'enquête avec vos identifiants de connexion."
},
{
"title": "Est-ce que je peux remplir le questionnaire en plusieurs fois ?",
"body": "Oui. Pour cela, il vous suffit de commencer à remplir le questionnaire, d'enregistrer les données en cliquant sur le bouton « Quitter et revenir plus tard » et de fermer le questionnaire.\n\nVous pourrez ensuite vous reconnecter sur ce questionnaire et continuer à compléter le questionnaire, à partir de l'endroit où vous vous étiez interrompu."
}
],
"faq-data-general": [
{
"title": "Puis je mettre du contenu genérique mais spécifique?",
"body": "Oui. Pour cela, il vous suffit de rajouter un vecteur faq-data-general dans le json spécifique de l'enquête"
}
]
},
"configuration": {
"listOptionsObjetMailAssistance": [
{
"auth": true,
"value": "affichageQuestionnaire",
"displayValue": "Affichage du questionnaire"
},
{
"auth": true,
"value": "comprehensionQuestionnaire",
"displayValue": "Compréhension du questionnaire"
},
{ "auth": true, "value": "autre", "displayValue": "Autre" },
{ "auth": false, "value": "perteMotDePasse", "displayValue": "Mot de passe oublié" },
{ "auth": false, "value": "perteIdentifiant", "displayValue": "Identifiant oublié" },
{ "auth": false, "value": "autre", "displayValue": "Autre" }
]
}
},
{
"id": "nes",
"isSurveyOnline": true,
"messageSurveyOffline": "L'enquête est terminée",
"messageInfoSurveyOffline": "L'accés au questionnaire est actuellement impossible",
"title": "Survey about Armadillos",
"titleShort": "Armadillo Survey",
"verifmail": false,
"content": {
"description": {
"title": "Survey about Armadillos 2023",
"body": "Présentation des objectifs de l'enquête."
},
"resultats": {
"title": "Résultats de l'enquête 2019",
"menu-title": "Résultats de l'enquête 2019",
"picture-url": "img/arm_resultats.png",
"legende": "L'enquête donne lieu à de nombreuses publications.",
"link-url": "https://en.wikipedia.org/wiki/Armadillo"
},
"enquete-en-detail": {
"menu-link": "https://en.wikipedia.org/wiki/Armadillo"
},

"donnees-personnelles": {
"cartouche": "Vos réponses seront conservées pendant cinq ans à compter de la fin de la collecte pour les besoins de l’enquête.",
"context": ""
},
"a-quoi-servent-vos-reponses": {
"body": "Vos réponses nous sont fort utiles."
},
"faq-data": [
{
"title": "Comment va se dérouler l'enquête ?",
"body": "La période de collecte dure trois semaines. Deux modes de réponse sont proposés : soit Internet sur un site sécurisé, soit le téléphone avec un enquêteur.\n\n* Vous pouvez répondre par Internet en vous connectant au questionnaire en ligne, à l’aide de l’identifiant et du mot de passe figurant sur la lettre de lancement de l'enquête. Le temps moyen de réponse est de moins de 10 minutes par questionnaire individuel. Vous pourrez éventuellement interrompre la saisie du questionnaire et la reprendre là où vous l’aurez arrêtée.\n\n* Si vous n'avez pas répondu sur Internet au bout de quelques jours, un enquêteur de l'Insee vous appellera pour vous proposer de réaliser l'enquête par téléphone. Vous pourrez cependant encore répondre par Internet si vous le préférez."
},
{
"title": "Impossibilité d'accéder au questionnaire - message « Identifiant ou mot de passe erroné »",
"body": "L'identifiant et le mot de passe vous permettant d'accéder pour la première fois au questionnaire de l'enquête sont inscrits sur le courriel que vous avez reçu de l'Insee. À la saisie du mot de passe, il faut respecter les minuscules, majuscules et caractères spéciaux.\n\nLors de la première connexion, on vous demandera de changer votre mot de passe. "
},
{
"title": "J'ai fermé le questionnaire Internet en cours de remplissage, que faire ?",
"body": "Si le questionnaire s'est fermé alors que vous n'aviez pas terminé de le remplir, les données que vous avez saisies restent accessibles et vous pouvez continuer de répondre à ce questionnaire. Pour cela, connectez-vous à nouveau sur le site de l'enquête avec votre identifiant et votre mot de passe. Vous pourrez retrouver le questionnaire là où vous vous étiez arrêté.\n\nVos données sont automatiquement sauvegardées à chaque fois que vous cliquez sur le bouton « Suivant ».\n\nEn cas d'inactivité prolongée et pour des raisons de sécurité, le questionnaire se ferme automatiquement au bout de 15 minutes. Vous pouvez de nouveau y accéder en vous reconnectant sur le site de l'enquête avec vos identifiants de connexion."
},
{
"title": "Est-ce que je peux remplir le questionnaire en plusieurs fois ?",
"body": "Oui. Pour cela, il vous suffit de commencer à remplir le questionnaire, d'enregistrer les données en cliquant sur le bouton « Quitter et revenir plus tard » et de fermer le questionnaire.\n\nVous pourrez ensuite vous reconnecter sur ce questionnaire et continuer à compléter le questionnaire, à partir de l'endroit où vous vous étiez interrompu."
}
],
"faq-data-general": [{}]
},
"configuration": {
"listOptionsObjetMailAssistance": [
{
"auth": true,
"value": "affichageQuestionnaire",
"displayValue": "Affichage du questionnaire"
},
{
"auth": true,
"value": "comprehensionQuestionnaire",
"displayValue": "Compréhension du questionnaire"
},
{ "auth": true, "value": "autre", "displayValue": "Autre" },
{ "auth": false, "value": "perteMotDePasse", "displayValue": "Mot de passe oublié" },
{ "auth": false, "value": "perteIdentifiant", "displayValue": "Identifiant oublié" },
{ "auth": false, "value": "autre", "displayValue": "Autre" }
]
}
}
]
}
43 changes: 29 additions & 14 deletions src/utils/read-content.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ export const getA11yTitle = () => getGenericContent().accessibilite.title;

export const getIneligibleText = () => getGenericContent().ineligible.body;

export const getUnauthorizedText = () => getGenericContent().unauthorized.body;

export const getImportantInfo = () => getGeneric().importantInfo;

export const getSurveys = () =>
Expand Down Expand Up @@ -75,21 +77,34 @@ export const getListOptionsSurvey = id =>
};
});

// site enquête non accessible
// site enquête non accessible

export const getAccessibleContentById = id => content.specifique.find(e => e.id === id).accessible;
export const getAccessibleContentById = id => content.specifique.find(e => e.id === id).accessible;

// faq
export const getFaqData = id =>
getContentById(id)
['faq-data'].map(element => {
return { ...element, type: 'specific' };
})
.concat(
getGenericContent()['faq-data'].map(element => {
return { ...element, type: 'general' };
})
)
.map((element, index) => {
return { ...element, id: index + 1 };
});
getContentById(id)['faq-data-general'] === undefined
? getContentById(id)
['faq-data'].map(element => {
return { ...element, type: 'specific' };
})
.concat(
getGenericContent()['faq-data'].map(element => {
return { ...element, type: 'general' };
})
)
.map((element, index) => {
return { ...element, id: index + 1 };
})
: getContentById(id)
['faq-data'].map(element => {
return { ...element, type: 'specific' };
})
.concat(
getContentById(id)['faq-data-general'].map(element => {
return { ...element, type: 'general' };
})
)
.map((element, index) => {
return { ...element, id: index + 1 };
});

0 comments on commit 2769fc0

Please sign in to comment.