Guest User

Untitled

a guest
Apr 2nd, 2020
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const secret = 'confinement';
  2. const isProd = (window.location.host == 'acceslibre.itineraire.evidenceb.com');
  3. const hatierURL = isProd ?
  4.     'https://itineraire.evidenceb.com/francais/premieres/module1'
  5.     : 'https://hatier-staging.netlify.com/francais/premieres/module1';
  6. const tokenGeneratorAPI = isProd ?
  7.     'https://auth1.prod.evidenceb-services.com/generate/token'
  8.     : 'https://auth1.staging.evidenceb-services.com/generate/token';
  9.  
  10. const linkShortenerAPI = 'https://liens.itineraire.evidenceb.com/v1/shorten'; //TODO isProd
  11.  
  12. const studentWarningLink = "Ce lien est votre lien personnel de connexion, conservez-le précieusement : ";
  13. const teacherWarningLink = "Ce lien vous permettra de vous identifier automatiquement sur notre plateforme, gardez le précieusement : ";
  14. const mailType = `Bonjour,
  15.  
  16. Voici le lien de connexion au service itineraireslitteraires.evidenceb.com qui vous permettra de vous inscrire à une banque d'exercices interactifs sur la grammaire de la langue française.
  17. /!\\  collez le lien de votre classe ici /!\\
  18.  
  19. Ces exercices vous prépareront à la question de grammaire de l'oral du Bac.
  20. Ce travail en ligne sera suivi par votre professeur qui pourra avoir accès à votre temps de connexion et votre progression et qui pourrait éventuellement servir à votre évaluation de fin de trimestre.
  21.  
  22. Bon travail  !`;
  23.  
  24. const copyButtonText = "Copier";
  25. var tokenInfo = {};
  26.  
  27. const handleCopyButtonClick = function(content, buttonElement) {
  28.     return function() {
  29.         copyToClipboard(content);
  30.         buttonElement.innerText = "Copié !";
  31.         setTimeout(function(){
  32.             buttonElement.innerText = copyButtonText;
  33.         }, 1500);
  34.     }
  35. }
  36.  
  37. const addLink = async function(link, labelText) {
  38.     console.log("Hi there, link: ", link);
  39.  
  40.     const parent = document.querySelector("#liens");
  41.     const newLink = document.createElement("label");
  42.     const nodeLabel = document.createTextNode(labelText);
  43.     newLink.appendChild(nodeLabel);
  44.     const linkElement = document.createElement("a");
  45.     linkElement.href = link;
  46.     linkElement.classList = "tokenLink";
  47.     linkElement.target = "_blank";
  48.     const linkElementContent = document.createTextNode(link);
  49.     linkElement.appendChild(linkElementContent);
  50.     newLink.appendChild(linkElement);
  51.  
  52.     // Boutton "Copier"
  53.     const buttonElement = document.createElement("div");
  54.     const nodeButton = document.createTextNode(copyButtonText);
  55.     buttonElement.appendChild(nodeButton);
  56.     buttonElement.classList = "button copyButton";
  57.     buttonElement.onclick = handleCopyButtonClick(link, buttonElement);
  58.     newLink.appendChild(buttonElement);
  59.  
  60.     parent.appendChild(newLink);
  61. }
  62.  
  63. const addTitleStudentLinks = function() {
  64.     const parent = document.querySelector("#liens");
  65.     const title = document.createElement("h3");
  66.     const nodeTitle = document.createTextNode("Les liens pour mes élèves");
  67.     title.appendChild(nodeTitle)
  68.     parent.appendChild(title);
  69. }
  70.  
  71. const addMailExample = function() {
  72.     const parent = document.querySelector("#mailType");
  73.     var textAreaBlock = document.createElement("div");
  74.     var textArea = document.createElement("textarea");
  75.     const nodeLabel = document.createTextNode("Message type pour vos élèves :");
  76.     textAreaBlock.appendChild(nodeLabel);
  77.     textArea.rows = "13";
  78.     textArea.readOnly = true;
  79.     const textAreaContent = document.createTextNode(mailType);
  80.     textArea.appendChild(textAreaContent);
  81.     textArea.onclick=function() {
  82.         this.focus();this.select()
  83.     };
  84.     textAreaBlock.appendChild(textArea);
  85.  
  86.     // Boutton "Copier"
  87.     const buttonElement = document.createElement("div");
  88.     const nodeButton = document.createTextNode(copyButtonText);
  89.     buttonElement.appendChild(nodeButton);
  90.     buttonElement.classList = "button copyButton textAreaCopyButton";
  91.     buttonElement.onclick = handleCopyButtonClick(mailType, buttonElement);
  92.     textAreaBlock.appendChild(buttonElement);
  93.  
  94.     parent.appendChild(textAreaBlock);
  95. }
  96.  
  97. const logError = function(errorMsg) {
  98.     select(".errorMsg").html(errorMsg);
  99. }
  100. const eraseErrorMsg = function() {
  101.     select(".errorMsg").html('');
  102. }
  103. const eraseLinks = function() {
  104.     select("#liens").html('');
  105.     select("#mailType").html('');
  106. }
  107. const hideValidate = function() {
  108.     select('.validate').hide();
  109. }
  110. const formatLastName = function(str) {
  111.     return (str.trim().toUpperCase());
  112. }
  113. const isLetter = function(c) {
  114.     return c.toLowerCase() != c.toUpperCase();
  115. }
  116. const formatFirstName = function(str) {
  117.     const cp = String(str);
  118.     return (str.split('').map(function(l, i) {
  119.         if (i == 0) {
  120.             return (l.toUpperCase());
  121.         } else {
  122.             if (!isLetter(cp.charAt(i - 1))) {
  123.                 return (l.toUpperCase());
  124.             }
  125.             return (l.toLowerCase());
  126.         }
  127.     }).join(''));
  128. }
  129.  
  130. const resetValidate = function() {
  131.     eraseErrorMsg();
  132.     eraseLinks();
  133.     select('.validate').show();
  134. }
  135.  
  136. const getClasses = function() {
  137.     var ret = [];
  138.     const nodeArr = select("#classesContainer label input");
  139.  
  140.     for (var i = 0; i < nodeArr.length; i++) {
  141.         ret.push(nodeArr[i].value);
  142.     }
  143.     return ret;
  144. }
  145.  
  146. const registerTeacher = function() {
  147.     const first_name = formatFirstName(document.querySelector("#prenomProf").value);
  148.     const last_name = formatLastName(document.querySelector("#nomProf").value);
  149.     const etablissement = document.querySelector("#etablissement").value;
  150.     const classes = getClasses();
  151.  
  152.     const classesWithoutDuplicates = classes.filter(function(v, i){
  153.         return (classes.indexOf(v) === i);
  154.     });
  155.     if (classesWithoutDuplicates.length !== classes.length) {
  156.         logError("Vous ne pouvez pas avoir deux classes avec le même nom.");
  157.         return;
  158.     }
  159.     eraseErrorMsg();
  160.     hideValidate();
  161.     if (first_name.length > 0
  162.         && last_name.length > 0
  163.         && etablissement.length > 0
  164.         && (classes[0] && classes[0].length > 0))
  165.     {
  166.         eraseLinks();
  167.      
  168.         ajax.get(tokenGeneratorAPI,
  169.         {
  170.             userType: 'teacher',
  171.             first_name: first_name,
  172.             last_name: last_name,
  173.             uaiEtablissement: etablissement,
  174.             secret: secret,
  175.             classes: classes
  176.         },
  177.         function(res) {
  178.             const tokenObject = JSON.parse(res);
  179.             const longTeacherLink = hatierURL + "?token_itineraire=" + tokenObject.token;
  180.             handleTeacherLinks(longTeacherLink, classes, etablissement);
  181.         },
  182.         function(err) {
  183.             console.log("erreur lors de la création du token professeur: ", err);
  184.             logError("Une erreur s'est produite");
  185.         })
  186.     }
  187.     else {
  188.         logError("Il manque des informations");
  189.     }
  190. }
  191.  
  192. const handleTeacherLinks = function(longTeacherLink, classes, etablissement) {
  193.     const requestURL = linkShortenerAPI
  194.         + '?longlink=' + encodeURIComponent(longTeacherLink)
  195.         + '&prefix=prof_';
  196.    
  197.     ajax.post(requestURL,
  198.         {},
  199.         async function(res) {
  200.             const shortLinkObject = JSON.parse(res);
  201.             await addLink(shortLinkObject.shortlink, teacherWarningLink);
  202.             addTitleStudentLinks();
  203.  
  204.             for (var idx = 0; idx < classes.length; idx++) {
  205.                 const currentClass = String(classes[idx]);
  206.                 if (currentClass.length > 0) {
  207.                     await addClassLink(currentClass, etablissement);
  208.                 }
  209.             }
  210.             addMailExample();
  211.         },
  212.         function(err) {
  213.             logError('Une erreur s\'est produite');
  214.             console.log('Error in handleTeacherLinks: ', err);
  215.         }
  216.     )
  217. }
  218.  
  219. const addClassLink = async function(currentClass, etablissement) {
  220.     ajax.get(tokenGeneratorAPI,
  221.     {
  222.         userType: 'student',
  223.         first_name: '',
  224.         last_name: '',
  225.         uaiEtablissement: etablissement,
  226.         classe: currentClass,
  227.         secret: secret,
  228.     },
  229.     function(res) {
  230.         const resObject = JSON.parse(res);
  231.         const longClassLink = window.location + "?token_itineraire=" + resObject.token;
  232.         const requestURL = linkShortenerAPI
  233.             + '?longlink=' + encodeURIComponent(longClassLink)
  234.             + '&prefix=classe_';
  235.    
  236.         ajax.post(
  237.             requestURL,
  238.             {},
  239.             async function(res2) {
  240.                 const shortLinkObject = JSON.parse(res2);
  241.                 const shortlink = shortLinkObject.shortlink;
  242.                 await addLink(shortlink, `Lien pour la classe ${currentClass} : `);
  243.             },
  244.             function(err) {
  245.                 logError('Une erreur s\'est produite URL');
  246.                 console.log('Error in addClassLink: ', err);
  247.             }
  248.         );
  249.     },
  250.     function(err) {
  251.         console.log('Error in addClassLink outer request: ', err);
  252.         logError("Une erreur s'est produite");
  253.     })
  254. }
  255.  
  256. const registerStudent = function() {
  257.     eraseErrorMsg();
  258.     hideValidate();
  259.     const first_name = formatFirstName(document.querySelector("#prenomEleve").value);
  260.     const last_name = formatLastName(document.querySelector("#nomEleve").value);
  261.     if (first_name.length > 0 && last_name.length > 0) {
  262.         eraseLinks()
  263.         ajax.get(tokenGeneratorAPI,
  264.         {
  265.             userType: 'student',
  266.             first_name: first_name,
  267.             last_name: last_name,
  268.             uaiEtablissement: tokenInfo.uaiEtablissement,
  269.             secret: secret,
  270.             classe: tokenInfo.classe,
  271.         },
  272.         async function(res) {
  273.             const tokenObject = JSON.parse(res);
  274.             const link = hatierURL + "?token_itineraire=" + tokenObject.token;
  275.             await addLink(link, studentWarningLink);
  276.         },
  277.         function(err) {
  278.             console.log("erreur: ", err);
  279.             logError("Une erreur s'est produite");
  280.         })
  281.     }
  282.     else {
  283.         logError('Il manque ton nom ou ton prénom');
  284.     }
  285. }
  286.  
  287. const getTokenFromURL = function() {
  288.     const splitArray = window.location.search.slice(1).split('token_itineraire=');
  289.     if (splitArray.length != 2) {
  290.         return null;
  291.     }
  292.     return splitArray[1];
  293. }
  294.  
  295. const removeClass = function() {
  296.     const classesContainer = document.querySelector("#classesContainer");
  297.     if (classesContainer.childElementCount > 1) {
  298.         classesContainer.lastChild.remove();
  299.         if (classesContainer.childElementCount == 1) {
  300.             select('#removeClass').hide();
  301.         }
  302.         resetValidate();
  303.     }
  304. }
  305.  
  306. const addClass = function() {
  307.     const parent = document.querySelector("#classesContainer");
  308.     const newClassNumber = parent.childElementCount + 1;
  309.     const idClass = `classe_${newClassNumber}`;
  310.     var newClassElement = document.createElement("label");
  311.     newClassElement.for = idClass;
  312.  
  313.     var newSpan = document.createElement("span");
  314.     const newSpanNode = document.createTextNode(`Classe ${newClassNumber} :`);
  315.     newSpan.appendChild(newSpanNode);
  316.     newSpan.classList = "labelText";
  317.     var newInput = document.createElement("input");
  318.     newInput.type = "text";
  319.     newInput.id = idClass;
  320.     newInput.oninput = function() {
  321.         resetValidate();
  322.     }
  323.  
  324.     newClassElement.appendChild(newSpan);
  325.     newClassElement.appendChild(newInput);
  326.     parent.appendChild(newClassElement);
  327.     select('#removeClass').show('inline-block');
  328.     resetValidate();
  329. }
  330.  
  331. const initPage = function() {
  332.     const token_itineraire = getTokenFromURL();
  333.     const validate = select('.validate');
  334.     if (token_itineraire) {
  335.         tokenInfo = JSON.parse(Base64.decode(token_itineraire));
  336.         select('#eleve').show();
  337.         validate.on("click", registerStudent);
  338.         validate.changeText("M'inscrire");
  339.     }
  340.     else {
  341.         select('#professeur').show();
  342.         validate.on("click", registerTeacher);
  343.         validate.changeText("Je m'inscris");
  344.     }
  345.     select('input').on('input', function() {
  346.         resetValidate();
  347.     })
  348. }();
Add Comment
Please, Sign In to add comment