Add files via upload

Eure-Normandie-Numérique-branch
Quentin Marchand 7 months ago committed by GitHub
parent dec2bd611d
commit 935fefe492
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 4
      accessibility_tools/accessibility_tools.info.yml
  2. 13
      accessibility_tools/accessibility_tools.libraries.yml
  3. 17
      accessibility_tools/accessibility_tools.module
  4. 3
      accessibility_tools/css/accessibility_tools.css
  5. 238
      accessibility_tools/js/accessibility_tools.js
  6. 74
      accessibility_tools/src/Plugin/Block/AccessibilityToolsBlock.php
  7. 11
      api_humhub_pleiade/api_humhub_pleiade.module
  8. 5
      api_humhub_pleiade/css/api_humhub_pleiade.css
  9. 19
      api_humhub_pleiade/js/api_humhub_pleiade.js
  10. 371
      api_humhub_pleiade/js/api_humhub_pleiade_block.js
  11. 120
      api_humhub_pleiade/src/Controller/humHubController.php
  12. 30
      api_humhub_pleiade/src/Form/HumHubapiFieldsConfig.php
  13. 8
      api_lemon_pleiade/api_lemon_pleiade.routing.yml
  14. 2
      api_lemon_pleiade/js/add_submenu.js
  15. 2
      api_lemon_pleiade/js/api_lemon_pleiade_user_infos_block.js
  16. 6
      api_lemon_pleiade/src/Controller/PleiadeAjaxController.php
  17. 3
      api_pastell_pleiade/api_pastell_pleiade.module
  18. 7
      api_pastell_pleiade/js/api_pastell_menu.js
  19. 159
      api_pastell_pleiade/src/Form/PleiadePastellDocLotsForm.php

@ -0,0 +1,4 @@
name: Module d'accessibilité
description: Ajoute éléments d'accessibilité pour Pléiade, Sites internets, GRU
core_version_requirement: ^10
type: module

@ -0,0 +1,13 @@
accessibility_tools:
version: 1.0
js:
js/accessibility_tools.js: {}
dependencies:
- core/jquery
- core/drupal
- drupal:block
accessibility_tools_css:
version: 1.x
css:
theme:
css/accessibility_tools.css: {}

@ -0,0 +1,17 @@
<?php
/**
* Implements hook_system_info_alter().
*/
function accessibility_tools_system_info_alter(&$info, $file, $type) {
// Ajoute une nouvelle région de mise en page pour les blocs.
$info['regions']['accessibility_tools'] = ('Zone pour l\'Accessibilité');
}
function accessibility_tools_preprocess_page(&$variables){
//Add the JS library
$variables['#attached']['library'][] = 'accessibility_tools/accessibility_tools_js';
//Add the CSS library
$variables['#attached']['library'][] = 'accessibility_tools/accessibility_tools_css';
}

@ -0,0 +1,3 @@
.form-check-input[type=checkbox]{
float: inline-end;
}

@ -0,0 +1,238 @@
(function ($, Drupal, drupalSettings) {
"use strict";
Drupal.behaviors.AccessibilityBehavior = {
attach: function (context, settings) {
setTimeout(function () {
function increaseFontSize() {
var elements = $('#menuLemon .sidebar-link, .sidebar-nav ul .nav-small-cap, .sidebar-nav ul .sidebar-item .sidebar-link, #mes_applications .sidebar-link', context);
elements.each(function () {
var computedFontSize = window.getComputedStyle(this).fontSize;
var currentFontSize = parseInt(computedFontSize) || 16;
var newFontSize = currentFontSize + 2;
this.style.fontSize = newFontSize + 'px';
});
var currentBodyFontSize = parseInt(document.body.style.fontSize) || 16;
var newBodyFontSize = currentBodyFontSize + 2;
document.body.style.fontSize = newBodyFontSize + 'px';
}
function decreaseFontSize() {
var elements = $('#menuLemon .sidebar-link, .sidebar-nav ul .nav-small-cap, .sidebar-nav ul .sidebar-item .sidebar-link, #mes_applications .sidebar-link', context);
elements.each(function () {
var computedFontSize = window.getComputedStyle(this).fontSize;
var currentFontSize = parseInt(computedFontSize) || 16;
var newFontSize = currentFontSize - 2;
this.style.fontSize = newFontSize + 'px';
});
var currentBodyFontSize = parseInt(document.body.style.fontSize) || 16;
var newBodyFontSize = currentBodyFontSize - 2;
document.body.style.fontSize = newBodyFontSize + 'px';
}
function resetFontSize() {
var elements = $('#menuLemon .sidebar-link, .sidebar-nav ul .nav-small-cap, .sidebar-nav ul .sidebar-item .sidebar-link, #mes_applications .sidebar-link', context);
elements.each(function () {
this.style.fontSize = '18px'; // Réinitialiser à la taille par défaut
});
document.body.style.fontSize = '16px';
}
// Variable pour stocker l'espacement courant
let currentSpacing = 0;
function increaseSpaces() {
currentSpacing += 1;
document.body.style.letterSpacing = `${currentSpacing}px`;
}
function decreaseSpaces() {
currentSpacing -= 1;
if (currentSpacing < 0) {
currentSpacing = 0;
}
document.body.style.letterSpacing = `${currentSpacing}px`;
}
function resetSpaces() {
currentSpacing = 0;
document.body.style.letterSpacing = 'normal';
}
// Gestionnaire d'événements pour le bouton d'augmentation de l'espacement
$('#increaseSpaces', context).on('click', increaseSpaces);
// Gestionnaire d'événements pour le bouton de diminution de l'espacement
$('#decreaseSpaces', context).on('click', decreaseSpaces);
// Gestionnaire d'événements pour le bouton de réinitialisation de l'espacement
$('#resetSpaces', context).on('click', resetSpaces);
var checkbox = document.getElementById('mode-loupe');
// Fonction pour gérer le changement d'état de la case à cocher
// Fonction pour créer la div d'info sur la souris
function createMouseInfoDiv() {
// Crée une nouvelle div
var mouseInfoDiv = document.createElement('div');
// Applique les styles CSS
mouseInfoDiv.style.position = 'fixed';
mouseInfoDiv.style.padding = '5px 10px';
mouseInfoDiv.style.fontSize = '2rem';
mouseInfoDiv.style.borderRadius = '5px';
mouseInfoDiv.style.backgroundColor = 'rgba(0,0,0,.8)';
mouseInfoDiv.style.border = '1px solid rgba(0,0,0,.8)';
mouseInfoDiv.style.color = '#fff';
mouseInfoDiv.style.display = 'none';
mouseInfoDiv.style.zIndex = '9999999999999';
mouseInfoDiv.style.lineHeight = '1.2';
mouseInfoDiv.style.pointerEvents = 'none';
mouseInfoDiv.style.userSelect = 'none';
// Ajoute la div au document
document.body.appendChild(mouseInfoDiv);
return mouseInfoDiv;
}
// Crée la div pour les informations sur la souris
var mouseInfoDiv = createMouseInfoDiv();
function handleCheckboxChange() {
if (checkbox.checked) {
console.log("La case à cocher est cochée :", checkbox.checked);
var body = document.body;
body.addEventListener('mousemove', handleMouseMove);
} else {
// Cache la div lorsque la case à cocher est désactivée
mouseInfoDiv.style.display = 'none';
// Supprime l'écouteur d'événements 'mousemove'
var body = document.body;
body.removeEventListener('mousemove', handleMouseMove);
}
}
function handleMouseMove(event) {
const element = event.target;
if (element.tagName === 'SPAN' || element.tagName === 'A' || element.tagName === 'TD' || element.tagName === 'TH' || element.tagName === 'BUTTON' || element.tagName === 'P' || (element.tagName >= 'H1' && element.tagName <= 'H6')) {
const posX = event.clientX + 50;
const posY = event.clientY + 50;
// Met à jour la position de la div
mouseInfoDiv.style.left = posX + 'px';
mouseInfoDiv.style.top = posY + 'px';
// Met à jour le contenu de la div avec les coordonnées de la souris
mouseInfoDiv.textContent = element.textContent;
// Affiche la div
mouseInfoDiv.style.display = 'block';
}
}
// Ajouter un écouteur d'événement sur le changement de la case à cocher
checkbox.addEventListener('change', handleCheckboxChange);
const contrastCheckbox = document.getElementById('contraste');
const bwCheckbox = document.getElementById('black_and_white');
function updateFilter() {
let filter = '';
if (contrastCheckbox.checked) {
filter += 'contrast(200%) ';
}
if (bwCheckbox.checked) {
filter += 'grayscale(100%) ';
}
document.body.style.filter = filter.trim();
}
contrastCheckbox.addEventListener('change', updateFilter);
bwCheckbox.addEventListener('change', updateFilter);
// Assurez-vous que les gestionnaires d'événements sont attachés aux éléments corrects.
$('.btn-group button', context).on('click', function () {
if ($(this).is('#increaseFontSize')) {
increaseFontSize();
} else if ($(this).is('#decreaseFontSize')) {
decreaseFontSize();
} else if ($(this).is('#resetFontSize')) {
resetFontSize();
}
// Ajoutez d'autres conditions pour d'autres boutons si nécessaire.
});
// Gestionnaire d'événements pour le bouton du thème sombre
$('#theme-view', context).on('change', function () {
if ($(this).is(':checked')) {
// Logique pour activer le thème sombre
// Sauvegardez l'état de la case à cocher dans le stockage local
localStorage.setItem('themeViewChecked', 'true');
} else {
// Logique pour désactiver le thème sombre
// Supprimez l'état de la case à cocher du stockage local
localStorage.removeItem('themeViewChecked');
}
});
// Vérifiez si l'état de la case à cocher est sauvegardé dans le stockage local
var themeViewChecked = localStorage.getItem('themeViewChecked');
if (themeViewChecked === 'true') {
// Si oui, cochez la case à cocher et déclenchez le gestionnaire d'événements 'change'
$('#theme-view', context).prop('checked', true).trigger('change');
}
$('#contraste', context).on('change', function () {
if ($(this).is(':checked')) {
// Logique pour activer le thème sombre
// Sauvegardez l'état de la case à cocher dans le stockage local
localStorage.setItem('contrasteChange', 'true');
} else {
// Logique pour désactiver le thème sombre
// Supprimez l'état de la case à cocher du stockage local
localStorage.removeItem('contrasteChange');
}
});
// Vérifiez si l'état de la case à cocher est sauvegardé dans le stockage local
var themeViewChecked = localStorage.getItem('contrasteChange');
if (themeViewChecked === 'true') {
// Si oui, cochez la case à cocher et déclenchez le gestionnaire d'événements 'change'
$('#contraste', context).prop('checked', true);
updateFilter();
}
$('#black_and_white', context).on('change', function () {
if ($(this).is(':checked')) {
// Logique pour activer le thème sombre
// Sauvegardez l'état de la case à cocher dans le stockage local
localStorage.setItem('black_and_whiteChange', 'true');
} else {
// Logique pour désactiver le thème sombre
// Supprimez l'état de la case à cocher du stockage local
localStorage.removeItem('black_and_whiteChange');
}
});
// Vérifiez si l'état de la case à cocher est sauvegardé dans le stockage local
var themeViewChecked = localStorage.getItem('black_and_whiteChange');
if (themeViewChecked === 'true') {
// Si oui, cochez la case à cocher et déclenchez le gestionnaire d'événements 'change'
$('#black_and_white', context).prop('checked', true);
updateFilter();
}
}, 2000); // 1000 millisecondes = 1 seconde
}
};
})(jQuery, Drupal, drupalSettings);

@ -0,0 +1,74 @@
<?php
namespace Drupal\accessibility_tools\Plugin\Block;
use Drupal\Core\Block\BlockBase;
/**
* Provides a 'Custom HTML Block' block.
*
* @Block(
* id = "accessibility_tools",
* admin_label = "Bloc Accessibilité",
* )
*/
class AccessibilityToolsBlock extends BlockBase {
/**
* {@inheritdoc}
*/
public function build() {
$build = [
'#type' => 'inline_template',
'#template' => '
<div>
<div class="p-3 border-bottom">
<div class="mt-2">
</div>
<span>Taille de la police : </span>
<!-- Utilisation de Bootstrap pour créer les boutons -->
<div class="btn-group" role="group" aria-label="Taille de la police">
<button type="button" class="btn" id="increaseFontSize"><i class="fa-solid fa-arrow-up"></i></button>
<button type="button" class="btn" id="decreaseFontSize"><i class="fa-solid fa-arrow-down"></i></button>
<button type="button" class="btn" id="resetFontSize"><i class="fa-solid fa-rotate-right"></i></button>
</div>
<label class="form-check-label" for="space_letters">Espace entre les caractères : </label>
<div class="btn-group" role="group" aria-label="Espace entre les caractères">
<button type="button" class="btn" id="increaseSpaces"><i class="fa-solid fa-arrow-up"></i></button>
<button type="button" class="btn" id="decreaseSpaces"><i class="fa-solid fa-arrow-down"></i></button>
<button type="button" class="btn" id="resetSpaces"><i class="fa-solid fa-rotate-right"></i></button>
</div>
<label class="form-check-label" for="mode-loupe">Mode loupe : </label>
<input type="checkbox" class="form-check-input" id="mode-loupe">
<label class="form-check-label" for="theme-view">
<span>Thème Sombre : </span>
</label>
<input
type="checkbox"
name="theme-view"
class="form-check-input"
id="theme-view"
/>
<label class="form-check-label" for="contraste">Contraste élevé : </label>
<input type="checkbox" class="form-check-input" id="contraste">
<label class="form-check-label" for="black_and_white">Mode noir et blanc : </label>
<input type="checkbox" class="form-check-input" id="black_and_white">
</div>
</div>',
'#attached' => [
'library' => [
'accessibility_tools/accessibility_tools',
],
],
];
return $build;
}
}

@ -8,8 +8,17 @@ function api_humhub_pleiade_preprocess_page(&$variables){
$config = \Drupal::config('api_humhub_pleiade.settings');
$humhub_url = $config->get('humhub_url');
$sql_server = $config->get('sql_server');
$sql_user = $config->get('sql_user');
$sql_password = $config->get('sql_password');
$sql_database = $config->get('sql_database');
$variables['#attached']['drupalSettings']['api_humhub_pleiade']['humhub_url'] = $humhub_url;
$variables['#attached']['drupalSettings']['api_humhub_pleiade']['sql_server'] = $sql_server;
$variables['#attached']['drupalSettings']['api_humhub_pleiade']['sql_user'] = $sql_user;
$variables['#attached']['drupalSettings']['api_humhub_pleiade']['sql_password'] = $sql_password;
$variables['#attached']['drupalSettings']['api_humhub_pleiade']['sql_database'] = $sql_database;
$variables['#attached']['library'][] = 'api_humhub_pleiade/api_humhub_pleiade_js';
$variables['#attached']['library'][] = 'api_humhub_pleiade/api_humhub_pleiade_css';

@ -17,4 +17,9 @@
}
.pastille_collab .pastille, #echangersurlerseausocial .pastille, .fa-users .badge{
background-color: #fbbd52!important;
}
#main-wrapper.mini-sidebar #menuLemon .badge{display: none;}
#humhub_block hr{
margin: 0.3rem 0!important;
}

@ -13,13 +13,14 @@
if (xhr.status === 200) {
var donnees = (xhr.response);
if (donnees) {
if (donnees['messages'] && donnees['notifs']) {
var total = donnees['notifs'].total + donnees['messages'].total
}
else if (donnees['notifs']) {
var total = donnees['notifs'].total
console.log(donnees['messages']['results'][0]['isUnread'])
if (donnees['messages'] && donnees['notifs'] && donnees['messages']['results'] != ['']) {
var total = parseInt(donnees['notifs'].total) + parseInt(donnees['messages']['results'][0]['isUnread'])
} else if (donnees['notifs']) {
var total = parseInt(donnees['notifs'].total);
}
var addBadges = document.querySelector(".fa-users");
var echangersurlerseausocial = document.querySelector("#echangersurlerseausocial");
var Notifs = createErrorBadge("all_notifs", total);
@ -33,10 +34,6 @@
echangersurlerseausocial.appendChild(Notifs1);
}
function createErrorBadge(label, count) {
var errorDiv = document.createElement("div");
errorDiv.classList.add("pastille");
@ -45,8 +42,6 @@
return errorDiv;
}
}
else{
console.error('Erreur lors de la récupération des notifications Humhub, veuillez rentrer votre token, ou contacter à défaut un administrateur')

@ -1,143 +1,242 @@
// (function ($, Drupal, drupalSettings, once) {
// "use strict";
// Drupal.behaviors.HumhubBlockBehavior = {
// attach: function (context, settings) {
// // only on frontpage (desktop)
// if (drupalSettings.path.isFront) {
// setTimeout(function () {
// once("HumhubBlockBehavior", "body", context).forEach(
// function () {
// // make ajax call
// var xhr = new XMLHttpRequest();
// xhr.open("GET", Drupal.url("v1/api_humhub_pleiade/humhub_query"));
// xhr.responseType = "json";
// xhr.onload = function () {
// var bloc_humhub
// if (xhr.status === 200) {
// var donnees = (xhr.response);
// if (donnees) {
// var donnees_spaces = donnees['spaces']
// var donnees_notif = donnees['notifs']
// var donnees_messages = donnees['messages']
(function ($, Drupal, drupalSettings, once) {
"use strict";
Drupal.behaviors.HumhubBlockBehavior = {
attach: function (context, settings) {
// only on frontpage (desktop)
if (drupalSettings.path.isFront) {
setTimeout(function () {
once("HumhubBlockBehavior", "body", context).forEach(
function () {
// make ajax call
var xhr = new XMLHttpRequest();
xhr.open("GET", Drupal.url("v1/api_humhub_pleiade/humhub_query"));
xhr.responseType = "json";
xhr.onload = function () {
var bloc_humhub
if (xhr.status === 200) {
var donnees = (xhr.response);
if (donnees) {
var donnees_spaces = donnees['spaces']
var donnees_notif = donnees['notifs']
var donnees_messages = donnees['messages']
if (donnees_spaces && donnees_spaces.length > 6) {
var overflow = 'overflow-y:scroll;'
}
function getContrastColor(hexcolor) {
var r = parseInt(hexcolor.substr(0,2),16);
var g = parseInt(hexcolor.substr(2,2),16);
var b = parseInt(hexcolor.substr(4,2),16);
var yiq = ((r*299)+(g*587)+(b*114))/1000;
return (yiq >= 128) ? 'black' : 'white';
}
bloc_humhub = '\
<div class="mb-2">\
<div class="card">\
<div class="card-header rounded-top bg-white rounded-top">\
<h4 class="card-title text-dark py-2">\
Réseau social des agents territoriaux</h4>\
</div>\
<div class="card-body pt-0 d-flex justify-content-between">\
'
bloc_humhub += '<div class="col-md-5 d-flex align-content-start row" id="col1">\
<h4 class="text-dark py-2">\
Mes espaces</h4><div style="height:256px; '+ overflow + '" class="d-flex flex-wrap align-items-center justify-content-center">'
if (donnees_spaces){
if (donnees_spaces.length > 0) {
// if (donnees_spaces.results.length > 6) {
// var overflow = 'overflow-y:scroll;'
// }
// bloc_humhub = '\
// <div class="mb-2">\
// <div class="card">\
// <div class="card-header rounded-top bg-white rounded-top">\
// <h4 class="card-title text-dark py-2">\
// Réseau Social Pléiade</h4>\
// </div>\
// <div class="card-body pt-0 d-flex justify-content-between">\
// '
// bloc_humhub += '<div class="col-md-5 d-flex align-content-start row" id="col1">\
// <h5 class="card-title text-dark py-2">\
// Mes espaces</h5><div style="height:256px; '+ overflow + '" class="d-flex flex-wrap align-items-center justify-content-center">'
// if (donnees['spaces'].results.length > 0) {
// for (var i = 0; i < donnees_spaces.results.length; i++) {
// var text = donnees_spaces.results[i].name;
// var url = donnees_spaces.results[i].url;
// bloc_humhub += '\
// <a href="'+ url + '" target="_blank" class="pb-2 px-2">\
// <div class="square d-flex align-items-center justify-content-center">\
// <span class="px-2 fs-4 text-uppercase text-align-center">'+ text + '</span>\
// </div>\
// </a>'
// }
// }
// else {
// bloc_humhub += '<h6 class="col-md-2">Aucun espace disponible ou erreur avec lors de la connexion à Humhub</h6>'
// }
// bloc_humhub += '</div></div>'
// bloc_humhub += '<div class="col-md-7" id="col1">\
// <h5 class="card-title text-dark py-2">\
// Mes notifications</h5><div class="d-flex flex-column" style="height:256px; overflow-y:scroll;">'
// if (donnees['notifs'] && donnees['notifs'].results.length > 0) {
// console.log('1')
// for (var i = 0; i < donnees_notif.results.length; i++) {
// var text = donnees_notif.results[i].output;
// var date = donnees_notif.results[i].createdAt;
// var formattedDate = new Date(date); // Créer un objet de date
// var day = formattedDate.getDate();
// var month = formattedDate.getMonth() + 1; // Les mois sont indexés à partir de 0, donc ajouter 1
// var year = formattedDate.getFullYear();
// var hours = formattedDate.getHours();
// var minutes = formattedDate.getMinutes();
// // Formater la date et l'heure
// var formattedString = day + '/' + (month < 10 ? '0' : '') + month + '/' + year + ' ' + hours + ':' + (minutes < 10 ? '0' : '') + minutes;
// bloc_humhub += '\
// <div class="">\
// <div class="d-flex justify-content-start align-items-center">\
// <span class="col-md-2 fs-2">'+ formattedString + '</span>\
// <span>'+ text + '</span>\
// </div>\
// </div><hr>\
// '
// }
for (var i = 0; i < donnees_spaces.length; i++) {
var color = donnees_spaces[i].color;
var text = donnees_spaces[i].name;
var url = donnees_spaces[i].url;
var imgUrl = drupalSettings.api_humhub_pleiade.humhub_url + donnees_spaces[i].imgUrl;
if (donnees_spaces[i].imgUrl !== "/static/img/default_space.jpg") {
bloc_humhub += '\
<a href="'+ url + '" target="_blank" class="pb-2 px-2">\
<div style="background-image: url('+ imgUrl +'); background-size: cover; opacity: 0.9;" class="square d-flex align-items-center justify-content-center">\
<span style="width: 100%; background-color: #00000080; color: white;font-weight: 500;" class="px-2 fs-3 text-uppercase text-align-center">'+ text + '</span>\
</div>\
</a>'
} else {
var textColor = getContrastColor(color);
bloc_humhub += '\
<a href="'+ url + '" target="_blank" class="pb-2 px-2">\
<div style="background-color: '+ color +'" class="square d-flex align-items-center justify-content-center">\
<span style="width: 100%; background-color: #00000080; color: '+ textColor +';font-weight: 500;" class="px-2 fs-3 text-uppercase text-align-center">'+ text + '</span>\
</div>\
</a>'
}
}
}
else {
bloc_humhub += '<h4 class="">Vous n\'avez rejoint aucun espace</h6><br><a href="'+ drupalSettings.api_humhub_pleiade.humhub_url + '/spaces">Rejoindre un espace</a>'
}
}
else{
bloc_humhub += '<h4 class="">Vous n\'avez rejoint aucun espace. <a href="'+ drupalSettings.api_humhub_pleiade.humhub_url + '/spaces">Je rejoins un espace</a></h6>'
}
// }
// else if (donnees['messages'] && donnees['messages'].results.length > 0) {
// console.log('1')
// for (var i = 0; i < donnees_messages.results.length; i++) {
// var text = donnees_messages.results[i].title;
// var date = donnees_messages.results[i].created_at;
// var href = drupalSettings.api_humhub_pleiade.humhub_url + '/mail/mail/index?id=' + donnees_messages.results[i].id;
// var formattedDate = new Date(date); // Créer un objet de date
// var day = formattedDate.getDate();
// var month = formattedDate.getMonth() + 1; // Les mois sont indexés à partir de 0, donc ajouter 1
// var year = formattedDate.getFullYear();
// var hours = formattedDate.getHours();
// var minutes = formattedDate.getMinutes();
// // Formater la date et l'heure
// var formattedString = day + '/' + (month < 10 ? '0' : '') + month + '/' + year + ' ' + hours + ':' + (minutes < 10 ? '0' : '') + minutes;
// if (donnees_messages.results[i].created_by == donnees_messages.results[i].updated_by) {
// bloc_humhub += '\
// <div class="">\
// <div class="d-flex justify-content-start align-items-center">\
// <span class="col-md-2 fs-2">'+ formattedString + '</span>\
// <a href="'+ href + '" target="_blank">Vous avez un nouveau message sur la conversation "' + text + '"</a>\
// </div>\
// </div><hr>\
// '
// }
// }
bloc_humhub += '</div></div>'
bloc_humhub += '<div class="col-md-7" id="col1">\
<h4 class="text-dark py-2">\
Mes notifications</h4><div class="d-flex flex-column" style="height:256px; overflow-y:scroll;">'
if (donnees['notifs'] && donnees['notifs'].results.length > 0) {
for (var i = 0; i < donnees_notif.results.length; i++) {
var text = donnees_notif.results[i].output;
if (donnees_notif.results[i].output.includes("You were added to Space")) {
// Remplace "You were added to Space" par "Vous avez été ajouté à l'espace"
text = donnees_notif.results[i].output.replace("You were added to Space", "Vous avez été ajouté à l'espace");
}
if (donnees_notif.results[i].output.includes("created post")) {
// Remplace "You were added to Space" par "Vous avez été ajouté à l'espace"
text = donnees_notif.results[i].output.replace("created post", "a publié");
}
if (donnees_notif.results[i].output.includes(" and ")) {
// Remplace "You were added to Space" par "Vous avez été ajouté à l'espace"
text = donnees_notif.results[i].output.replace(" and ", " et ");
}
if (donnees_notif.results[i].output.includes("likes post")) {
// Remplace "You were added to Space" par "Vous avez été ajouté à l'espace"
text = donnees_notif.results[i].output.replace("likes post", "aime");
}
if (donnees_notif.results[i].output.includes("commented post")) {
// Remplace "You were added to Space" par "Vous avez été ajouté à l'espace"
text = donnees_notif.results[i].output.replace("commented post", "a commenté");
}
if (donnees_notif.results[i].output.includes("is now following you")) {
// Remplace "You were added to Space" par "Vous avez été ajouté à l'espace"
text = donnees_notif.results[i].output.replace("is now following you", "vous suit");
}
if (donnees_notif.results[i].output.includes("sent you a friend request")) {
// Remplace "You were added to Space" par "Vous avez été ajouté à l'espace"
text = donnees_notif.results[i].output.replace("sent you a friend request", "vous a envoyé une demande d'amis");
}
if (donnees_notif.results[i].output.includes("invited you to the space")) {
// Remplace "You were added to Space" par "Vous avez été ajouté à l'espace"
text = donnees_notif.results[i].output.replace("invited you to the space", "vous a invité à rejoindre");
}
if (donnees_notif.results[i].output.includes("accepted your invite for the space")) {
// Remplace "You were added to Space" par "Vous avez été ajouté à l'espace"
text = donnees_notif.results[i].output.replace("accepted your invite for the space", "a accepté de rejoindre");
}
if (donnees_notif.results[i].output.includes("mentioned you in comment")) {
// Remplace "You were added to Space" par "Vous avez été ajouté à l'espace"
text = donnees_notif.results[i].output.replace("mentioned you in comment", "vous a mentionné : ");
}
var date = donnees_notif.results[i].createdAt;
var formattedDate = new Date(date); // Créer un objet de date
var day = formattedDate.getDate();
var month = formattedDate.getMonth() + 1; // Les mois sont indexés à partir de 0, donc ajouter 1
var year = formattedDate.getFullYear();
var hours = formattedDate.getHours();
var minutes = formattedDate.getMinutes();
// Formater la date et l'heure
var formattedString = day + '/' + (month < 10 ? '0' : '') + month + '/' + year + ' ' + hours + ':' + (minutes < 10 ? '0' : '') + minutes;
bloc_humhub += '\
<a target="_blank" href="'+ drupalSettings.api_humhub_pleiade.humhub_url +'/notification/overview" class="">\
<div class="d-flex justify-content-start align-items-start">\
<span class="pt-1 col-md-2 fs-2">'+ formattedString + '</span>\
<span>'+ text + '</span>\
</div>\
</a><hr>\
'
}
// }
// else {
// bloc_humhub += '<h6 class="col-md-2">Aucune notification</h6>'
}
if (donnees['messages'] && donnees['messages'].results.length > 0) {
var number_notif = donnees_messages.results[0].isUnread;
var href = drupalSettings.api_humhub_pleiade.humhub_url + '/mail/mail/index';
// }
// bloc_humhub += '</div></div>'
// bloc_humhub += ''
// "\
// </div>\
// </div>\
// </div>\
// ";
// }
if (donnees_messages.results[0].isUnread == 1) {
bloc_humhub += '\
<div class="">\
<div class="d-flex justify-content-start align-items-start">\
<span class="pt-1 col-md-2 fs-2"></span>\
<a href="'+ href + '" target="_blank">Vous avez '+ number_notif +' nouveau message privé</a>\
</div>\
</div><hr>\
'
}
else if (donnees_messages.results[0].isUnread > 1) {
bloc_humhub += '\
<div class="">\
<div class="d-flex justify-content-start align-items-start">\
<span class="pt-1 col-md-2 fs-2"></span>\
<a href="'+ href + '" target="_blank">Vous avez '+ number_notif +' nouveaux messages privés</a>\
</div>\
</div><hr>\
'
}
else
{
bloc_humhub += '\
<div class="">\
<div class="d-flex justify-content-start align-items-center">\
<span class="col-md-2 fs-2"></span>\
<a href="'+ href + '" target="_blank">Vous n\'avez pas de nouveau message privé</a>\
</div>\
</div><hr>'
}
}
else if((donnees['messages'].results.length = 0) && (donnees['notifs'].results.length = 0)) {
bloc_humhub += '<h6 class="col-md-2">Aucune notification</h6>'
// document.getElementById("humhub_block").innerHTML = bloc_humhub;
}
bloc_humhub += '</div></div>'
bloc_humhub += ''
"\
</div>\
</div>\
</div>\
";
}
else
{
bloc_humhub = '\
<div class="mb-2">\
<div class="card">\
<div class="card-header rounded-top bg-white rounded-top">\
<h4 class="card-title text-dark py-2">\
Réseau Social des agents territoriaux</h4>\
</div>\
<div class="card-body pt-0 d-flex justify-content-between">\
'+ donnees +'\
</div>\
</div>\
</div>\
'
}
// };
// xhr.onerror = function () {
// console.log("Error making AJAX call");
// };
// xhr.onabort = function () {
// console.log("AJAX call aborted");
// };
// xhr.ontimeout = function () {
// console.log("AJAX call timed out");
// };
// xhr.onloadend = function () {
// }
// };
// xhr.send();
// }); // end once
// }, 2000); // 1000 millisecondes = 1 seconde
// }
// },
// };
// })(jQuery, Drupal, drupalSettings, once);
document.getElementById("humhub_block").innerHTML = bloc_humhub;
};
xhr.onerror = function () {
console.log("Error making AJAX call");
};
xhr.onabort = function () {
console.log("AJAX call aborted");
};
xhr.ontimeout = function () {
console.log("AJAX call timed out");
};
xhr.onloadend = function () {
}
};
xhr.send();
}); // end once
}, 2000); // 1000 millisecondes = 1 seconde
}
},
};
})(jQuery, Drupal, drupalSettings, once);

@ -7,66 +7,80 @@ use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Drupal\module_api_pleiade\ApiPleiadeManager;
use Drupal\Core\Database\Database;
class humHubController extends ControllerBase
{
public function humhub_query(Request $request)
{
// $serveur = "192.168.1.18"; // Adresse du serveur MySQL
// $utilisateur = "humhub_user"; // Nom d'utilisateur MySQL
// $motdepasse = "HSDt8WdGLKa2M*4+@=Z"; // Mot de passe MySQL
// $basededonnees = "humhub"; // Nom de la base de données MySQL
// $user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
$configHumhub = \Drupal::config('api_humhub_pleiade.settings');
$serveur = $configHumhub->get('sql_server');
$utilisateur = $configHumhub->get('sql_user');
$motdepasse = $configHumhub->get('sql_password');
$basededonnees = $configHumhub->get('sql_database');
$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
// Vérifie si l'objet utilisateur est valide
if ($user) {
// Récupère l'adresse e-mail de l'utilisateur connecté
$username = $user->getDisplayName();
}
else{
$username = '';
}
// Connexion à la base de données
// Créer une connexion à la base de données
$conn = mysqli_connect($serveur, $utilisateur, $motdepasse, $basededonnees);
// Vérifier la connexion
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// Requête SQL pour sélectionner tous les utilisateurs de la table "user"
$sql = "SELECT ID FROM user WHERE username = '$username'";
$result = mysqli_query($conn, $sql);
// Vérifier si la requête a réussi
if (mysqli_num_rows($result) > 0) {
$ID_user = mysqli_fetch_assoc($result)["ID"];
if($ID_user !== NULL){
$sql1 = "SELECT token FROM rest_user_bearer_tokens WHERE user_id = '$ID_user'";
$result1 = mysqli_query($conn, $sql1);
$token = mysqli_fetch_assoc($result1);
if($token !== null){
$return = []; //our variable to fill with data returned by Pastell
$apiGeneral = new ApiPleiadeManager();
if($apiGeneral->get_notif_humhub($token) != 'undefined'){
$return['notifs'] = $apiGeneral->get_notif_humhub($token);
}
if($apiGeneral->get_messages_humhub($token) != 'undefined'){
$return['messages'] = $apiGeneral->get_messages_humhub($token);
}
if($apiGeneral->get_spaces($token) != 'undefined'){
$spaces = $apiGeneral->get_spaces($token)["results"];
foreach($spaces as $space){
if (in_array($ID_user, $space['users'])) {
$return['spaces'][] = $space;
}
}
}
}
else {
$return = "Compte RSE trouvé mais aucun token de connexion trouvé";
}
}
}
else {
$return = "Aucun utilisateur trouvé sur le RSE correspondant au nom d'utilisateur ". $username;
}
mysqli_close($conn);
// // Vérifie si l'objet utilisateur est valide
// if ($user) {
// // Récupère l'adresse e-mail de l'utilisateur connecté
// $email = $user->getEmail();
// }
// else{
// $email = '';
// }
return new JsonResponse(json_encode($return), 200, [], true);
// try {
// // Paramètres de connexion à la base de données externe
// $connection_info = array(
// 'driver' => 'mysql',
// 'host' => '192.16.1.11',
// 'database' => 'humhub',
// 'username' => 'humhub_user',
// 'password' => 'HSDt8WdGLKa2M*4+@=Z',
// 'port' => '3306', // Optionnel, par défaut 3306
// 'prefix' => '', // Optionnel, préfixe de table si nécessaire
// 'collation' => 'utf8mb4_general_ci', // Optionnel, collation de la base de données
// );
// // Créer une nouvelle connexion à la base de données externe
// $external_db = Database::openConnection($connection_info, 'default');
// // Requête SQL pour récupérer des informations
// $query = $external_db->select('humhub', 't')
// ->fields('t', ['id']) // Remplacez 'id' par les colonnes que vous souhaitez récupérer
// ->condition('email', $email);
// $result = $query->execute();
// // Vérifier si la requête a renvoyé des résultats
// if ($result->rowCount() > 0) {
// foreach ($result as $record) {
// echo "ID: " . $record->id . "<br>";
// }
// } else {
// echo "Aucun résultat trouvé.";
// }
// } catch (\Exception $e) {
// // Gérer les erreurs de connexion
// echo "Erreur lors de la connexion à la base de données externe : " . $e->getMessage();
// }
// return new JsonResponse(json_encode($resultat), 200, [], true);
}
}

@ -24,13 +24,41 @@ class HumHubapiFieldsConfig extends ConfigFormBase {
'#title' => $this->t('HumHub url'),
'#default_value' => $config->get('humhub_url'),
'#description' => $this->t('Enter the full HumHub url with /api/v1 at the end'),
];
];
$form['sql_server'] = [
'#type' => 'textfield',
'#title' => $this->t('Ip du serveur sql Humhub'),
'#default_value' => $config->get('sql_server'),
'#description' => $this->t('Ip du serveur sql Humhub'),
];
$form['sql_user'] = [
'#type' => 'textfield',
'#title' => $this->t('User du serveur sql Humhub'),
'#default_value' => $config->get('sql_user'),
'#description' => $this->t('User du serveur sql Humhub'),
];
$form['sql_password'] = [
'#type' => 'password',
'#title' => $this->t('Mot de passe du serveur sql Humhub'),
'#default_value' => $config->get('sql_password'),
'#description' => $this->t('Mot de passe du serveur sql Humhub'),
];
$form['sql_database'] = [
'#type' => 'textfield',
'#title' => $this->t('Datatable du serveur sql Humhub'),
'#default_value' => $config->get('sql_database'),
'#description' => $this->t('Datatable du serveur sql Humhub'),
];
return parent::buildForm($form, $form_state);
}
public function submitForm(array &$form, FormStateInterface $form_state) {
$config = $this->config('api_humhub_pleiade.settings');
$config->set('humhub_url', $form_state->getValue('humhub_url'));
$config->set('sql_server', $form_state->getValue('sql_server'));
$config->set('sql_user', $form_state->getValue('sql_user'));
$config->set('sql_password', $form_state->getValue('sql_password'));
$config->set('sql_database', $form_state->getValue('sql_database'));
$config->save();
parent::submitForm($form, $form_state);

@ -24,11 +24,11 @@ api_lemon_pleiade.lemon_session_query:
requirements:
_access: 'TRUE'
api_lemon_pleiade.my_history:
path: '/history'
api_lemon_pleiade.reset_password:
path: '/v1/api_lemon_pleiade/reset_password'
defaults:
_controller: '\Drupal\api_lemon_pleiade\Controller\PleiadeAjaxController::myHistory'
_title: 'Historique de connexion'
_controller: '\Drupal\api_lemon_pleiade\Controller\PleiadeAjaxController::reset_password'
_title: 'Reinitialiser le mot de passe'
requirements:
_permission: 'access content'

@ -98,7 +98,7 @@
}
if (userGroupsTempstore.includes('admin-chatbot')) {
liens += '\
<a class="waves-effect waves-dark" title="Gérer l\'assistant virtuel" target="_blank" href="#" aria-expanded="false">\
<a class="waves-effect waves-dark" title="Gérer l\'assistant virtuel" target="_blank" href="https://chatbot.ecollectivites.fr/" aria-expanded="false">\
<span class="hide-menu px-2">Gérer l\'assistant virtuel</span></a>'
}
if (userGroupsTempstore.includes('democratie-participative')) {

@ -40,7 +40,7 @@
'" alt="user" class="rounded-circle" width="60" height="60" style="object-fit: cover;"/>\
</div>\
<div class="ms-2">\
<h4 class="mb-0 text-white">' +
<h4 id="drupal-username" class="mb-0 text-white">' +
cn +
'</h4>\
<p class="mb-0">' +

@ -47,7 +47,7 @@ class PleiadeAjaxController extends ControllerBase
if($dpt[1] != null){
$return['groupes'] .= ' dpt-'.$dpt[1].',';
setcookie('departement', $dpt[1], time() + 3600, '/');
setcookie('departement', $dpt[1], time() + 36000, '/');
}
}
$return['groups'] = $return['groupes'];
@ -55,7 +55,7 @@ class PleiadeAjaxController extends ControllerBase
// Store groups in Drupal private tempstore to serve to other modules later
$tempstore = \Drupal::service('tempstore.private')->get('api_lemon_pleiade');
$tempstore->set('groups', $return["groupes"]);
setcookie('groups', $return['groups'], time() + 3600, '/');
setcookie('groups', $return['groups'], time() + 36000, '/');
$email = $return["mail"];
// Recherchez l'utilisateur par son adresse e-mail.
@ -119,7 +119,7 @@ class PleiadeAjaxController extends ControllerBase
* @return array
* A simple renderable array.
*/
public function myHistory()
public function reset_password()
{
return [
'#markup' => '

@ -184,8 +184,9 @@ function ecv_sendparaph($id_e, $id_d)
}
function _ecv_docs_lots($id_e, $nomfic, $urlfic, $year, $month, $day, $ged, $sstype, $data){
$id_d = ecv_creadoc($id_e);
\Drupal::logger('api_pastell_pleiade')->info('Envoi en Lot, id_d dreation: @api', ['@api' => $id_d]);
$data = array(
'id_e' => $id_e,
'id_d' => $id_d->id_d,

@ -171,6 +171,7 @@
break;
case 'Document à faire signer':
menu_a_remplir = ''
var nouvelElement = document.createElement('div');
nouvelElement.classList.add('sub_menu_eadmin');
nouvelElement.classList.add('collapse');
@ -227,10 +228,10 @@
<a id="voir_docs" href="/node?goToDatatable=true&type=parapheur" class="waves-effect waves-dark" title=Voir les documents à faire signer" aria-expanded="false">\
<span class="hide-menu px-2">Voir les documents à faire signer</span></a>';
}
console.log(menu_a_remplir)
nouvelElement.innerHTML = menu_a_remplir
if (menu_doc_a_signer) {
nouvelElement.innerHTML = menu_a_remplir
if (menu_doc_a_signer ) {
menu_doc_a_signer.insertAdjacentElement('afterend', nouvelElement);
}

@ -33,84 +33,86 @@ class PleiadePastellDocLotsForm extends ConfigFormBase
// https://pastell.ecollectivites.fr/api/external-data.php?id_e=24&id_d=R3Mmu1m&page=0&field=iparapheur_sous_type
// on cree un doc bidon
$id_d = ecv_creadoc($id_e);
$data = array(
'id_e' => $id_e,
'id_d' => $id_d->id_d,
'field' => 'iparapheur_sous_type',
);
$sstypes = ecv_getsoustype($data);
if($sstypes == null || $sstypes['status'] == 'error'){
if($id_d){
$data = array(
'id_e' => $id_e,
'id_d' => $id_d->id_d,
'field' => 'iparapheur_sous_type',
);
$sstypes = ecv_getsoustype($data);
if($sstypes == null || $sstypes['status'] == 'error'){
$suppr = ecv_suppr($id_e, $id_d->id_d);
\Drupal::messenger()->addError($this->t('Veuillez selectionner une collectivité qui possède des sous-types i-parapheur'));
return $form;
}
$form['#prefix'] = '';
$form['#suffix'] = '
<div id="previsu">
<h3>Pré-visualisation</h3>En attente de fichiers PDF...
</div>
';
$form['#attributes']['enctype'] = 'multipart/form-data';
// SS TYPE DOCS
$form['soustype'] = array(
'#type' => 'select',
'#title' => t('Circuits iParapheur :'),
'#default_value' => $sstypes['Courrier'],
'#options' => $sstypes,
'#required' => TRUE,
);
$form['soustype']['#prefix'] = '<div class="expli"><span class="explinum">1</span>Choisissez un circuit et une date limite.</div>';
$suppr = ecv_suppr($id_e, $id_d->id_d);
\Drupal::messenger()->addError($this->t('Veuillez selectionner une collectivité qui possède des sous-types i-parapheur'));
$current_date = new DrupalDateTime();
$form['datelimite'] = array(
'#title' => t('Date limite de signature :'),
'#type' => 'date',
'#description' => t('Par défaut, fixé au jour même.'),
'#default_value' => $current_date->format('Y-m-d'),
);
// GED ?
$form['ged'] = array(
'#type' => 'checkbox',
'#title' => t('Transmission à la GED ?'),
'#default_value' => 1,
'#description' => t('Cochez cette case si vous souhaitez transmettre à la GED.'),
);
$form['id_e_lot'] = array(
'#type' => 'textfield',
'#title' => t('Création de documents en lots pour entité n° :'),
'#default_value' => $id_e,
'#attributes' => array('readonly' => 'readonly'),
);
// ****** FORM FICHIERS ************//
$form['actions'] = array();
//$form['actions']['#prefix'] = '<div class="expli"><span class="explinum">2</span>Cliquez sur parcourir, puis la touche CTRL + clic pour sélectionner les fichiers.</div>';
$form['actions']['content_upload']['file'] = array(
'#type' => 'file',
'#name' => 'files[]',
'#title' => t('Fichiers locaux (PDF)'),
'#value' => t('Choisir un fichier'),
'#attributes' => array('multiple' => 'multiple'),
'#required' => TRUE,
'#field_prefix' => '<div class="expli"><span class="explinum">2</span>Cliquez sur Select. fichiers, puis la touche CTRL + clic pour sélectionner les fichiers.</div>',
'#field_suffix' => '<div class="expli"><span class="explinum">3</span>Cliquez sur "envoyer les documents à la signature"</div>',
);
$form['#attached']['library'][] = 'api_pastell_pleiade/docLots.js';
$form['actions']['content_upload']['content_upload_button'] = array(
'#type' => 'submit',
'#name' => 'content_upload_action',
'#value' => t('Envoyer les documents à la signature'),
);
return $form;
}
$form['#prefix'] = '';
$form['#suffix'] = '
<div id="previsu">
<h3>Pré-visualisation</h3>En attente de fichiers PDF...
</div>
';
$form['#attributes']['enctype'] = 'multipart/form-data';
// SS TYPE DOCS
$form['soustype'] = array(
'#type' => 'select',
'#title' => t('Circuits iParapheur :'),
'#default_value' => $sstypes['Courrier'],
'#options' => $sstypes,
'#required' => TRUE,
);
$form['soustype']['#prefix'] = '<div class="expli"><span class="explinum">1</span>Choisissez un circuit et une date limite.</div>';
$suppr = ecv_suppr($id_e, $id_d->id_d);
$current_date = new DrupalDateTime();
$form['datelimite'] = array(
'#title' => t('Date limite de signature :'),
'#type' => 'date',
'#description' => t('Par défaut, fixé au jour même.'),
'#default_value' => $current_date->format('Y-m-d'),
);
// GED ?
$form['ged'] = array(
'#type' => 'checkbox',
'#title' => t('Transmission à la GED ?'),
'#default_value' => 1,
'#description' => t('Cochez cette case si vous souhaitez transmettre à la GED.'),
);
$form['id_e_lot'] = array(
'#type' => 'textfield',
'#title' => t('Création de documents en lots pour entité n° :'),
'#default_value' => $id_e,
'#attributes' => array('readonly' => 'readonly'),
);
// ****** FORM FICHIERS ************//
$form['actions'] = array();
//$form['actions']['#prefix'] = '<div class="expli"><span class="explinum">2</span>Cliquez sur parcourir, puis la touche CTRL + clic pour sélectionner les fichiers.</div>';
$form['actions']['content_upload']['file'] = array(
'#type' => 'file',
'#name' => 'files[]',
'#title' => t('Fichiers locaux (PDF)'),
'#value' => t('Choisir un fichier'),
'#attributes' => array('multiple' => 'multiple'),
'#required' => TRUE,
'#field_prefix' => '<div class="expli"><span class="explinum">2</span>Cliquez sur Select. fichiers, puis la touche CTRL + clic pour sélectionner les fichiers.</div>',
'#field_suffix' => '<div class="expli"><span class="explinum">3</span>Cliquez sur "envoyer les documents à la signature"</div>',
);
$form['#attached']['library'][] = 'api_pastell_pleiade/docLots.js';
$form['actions']['content_upload']['content_upload_button'] = array(
'#type' => 'submit',
'#name' => 'content_upload_action',
'#value' => t('Envoyer les documents à la signature'),
);
return $form;
} else {
\Drupal::messenger()->addError($this->t('Veuillez séléctionner une collectivité avant d\'envoyer des documents en lots'));
return $form;
@ -127,9 +129,12 @@ class PleiadePastellDocLotsForm extends ConfigFormBase
);
$id_e = $form['id_e_lot']['#value'];
$sstype = $form['soustype']['#options'][0];
$sstype_index = $form_state->getValue('soustype');
$options = $form['soustype']['#options'];
$sstype = $options[$sstype_index];
\Drupal::logger('api_pastell_pleiade')->info('Sous-type pârapheur: @cookie', ['@cookie' => $sstype]);
$num_files = count($_FILES['files']['name']);
\Drupal::logger('api_pastell_pleiade')->info('Nombre de docs transmis : @cookie', ['@cookie' => $num_files]);
for ($i = 0; $i < $num_files; $i++) {
$file = file_save_upload($i, array('file_validate_extensions' => array('pdf'), ));
if ($file) {

Loading…
Cancel
Save