Modifications apportées dans la version 1.3

Pré-requis :

  • PHP 7.4 ou supérsieur est nécessaire
  • SQLite 3.25 ou supérieur est nécessaire
  • l'extension JSON1 de SQLite est nécessaire

Pour des raisons de simplicité du développement, cette version 1.3 ne peut ouvrir que les bases de données de Paheko 1.1.19 et supérieur.

Attention : si vous avez encore une vieille version (avant 1.1.19), il est nécessaire de faire en premier la mise à jour vers une version 1.2 ou supérieure avant de pouvoir mettre à jour vers la version 1.3 !

Nouveautés

Présentation visuelle des nouveautés sur Paheko.cloud

Documents

  • Refonte de l'interface de gestion des documents
  • Affichage des fichiers en galerie ou en liste
  • Tri des fichiers par nom, taille, ou date de modification
  • Sélection et téléchargement de répertoires au format ZIP
  • Édition de documents LibreOffice/MS Office directement depuis l'interface (via Collabora Online)
  • On peut maintenant faire une recherche dans le contenu des documents LibreOffice (formats ODT/ODS/ODP), MS Office (XLSX/DOCX/PPTX), ainsi que PDF
  • Ajout d'une corbeille : les fichiers supprimés y sont déplacés, et pendant 30 jours un membre administrateur peut les restaurer ou les supprimer définitivement
  • Versionnement des fichiers : possibilité de conserver plusieurs anciennes versions d'un fichier, pour pouvoir revenir en arrière en cas d'erreur
  • Prévisualisation des documents texte/Markdown/PDF/LibreOffice/MS Office sous forme de miniature dans la liste des documents
  • Envoi de fichiers directement en faisant glisser et déposer le fichier vers la liste des fichiers, ou par copier-coller dans les documents
  • Support du protocole standard WebDAV pour pouvoir gérer les fichiers de l'association depuis un ordinateur ou smartphone
  • Support des applications de bureau et mobile NextCloud et ownCloud (en beta) :
    • accéder aux fichiers de l'association depuis un mobile (sauf iOS)
    • synchroniser les fichiers entre un ordinateur et l'instance de l'association

Modernisation de la gestion des membres

Sous le capot, la gestion des membres a été entièrement ré-écrite :-)

  • On peut désormais avoir plusieurs adresses email par fiche membre [97c2d18bbc], chaque adresse recevra les messages envoyés
  • Possibilité de rattacher des membres à d'autres membres, cela permet notamment de créer des "familles" de membres, ou autre structures similaires.
  • Avertissement si on essaye d'ajouter un membre dont le nom existe déjà.
  • Un e-mail est envoyé automatiquement au membre quand on modifie son identifiant de connexion (s'il a un mot de passe).
  • Les administrateurs peuvent désormais modifier leur fiche membre et leur mot de passe directement
  • Les actions de modification / création ou suppression (de membre, d'écriture, etc.) peuvent être enregistrées dans un journal (loguées) pour suivre qui a fait quoi (accessible dans Configuration -> Fonctions avancées -> Journal d'audit)
  • On peut se connecter à la place d'un membre pour voir l'interface à laquelle il a accès
  • Il n'y a plus qu'un seul format d'import de membres
  • Ajout de la prévisualisation d'un import de membres : affichage des modifications qui seront apportées avant validation
  • Affichage de toutes les erreurs d'import en une seule fois, évitant de renvoyer le fichier après chaque correction d'erreur
  • Ajout de la date de modification d'une fiche membre
  • On peut maintenant supprimer les fichiers de plusieurs membres en les cochant, dans la liste des membres, une recherche, etc.
  • Affichage du nombre de membres dans le sélecteur de catégorie de membre (en haut de la liste des membres)
  • Il est maintenant possible de désinscrire manuellement une adresse e-mail de tous les messages envoyés
  • On peut inscrire des membres à une activité en les cochant dans une recherche, ou dans la liste des membres

  • Refonte de la modification des fiches de membre :

    • possibilité de ré-ordonner les champs dans les fiches par drag-and-drop
    • on peut définir la valeur par défaut d'un champ membre [725e75351d4de624245b2ff80b49544f548604db]
    • simplification : champ privé / champ caché deviennent modification / visibilité par administrateurs ou par le membre
    • nouveau types de champs : mois+année, et année seule
    • nouveaux champs prédéfinis : année de naissance, date d'inscription
    • on peut utiliser plusieurs champs pour définir l'identité d'un membre, par exemple "nom" et "prénom" si on utilise des champs séparés
  • Améliorations de la recherche :

    • On peut désormais faire une recherche avancée en utilisant l'inscription à une activité [97c2d18bbc]
    • affichage du nombre de résultats
    • tri simplifié, par colonne
    • pagination
    • possibilité de sélectionner des colonnes à afficher dans le résultat de la recherche (sans rechercher dans ces colonnes)
    • export de la recherche (CSV/ODS/XLSX)
    • affichage du nom de la catégorie du membre dans la colonne de la recherche avancée
    • choix de l'opérateur "OU" ou "ET" pour chaque groupe de critères dans la recherche avancée
  • Refonte de la gestion des messages collectifs :

    • Possibilité d'envoyer un message collectif aux membres inscrits à une activité
    • Possibilité d'envoyer un message collectif aux membres trouvés par une recherche enregistrée
    • Export de la liste des destinataires d'un message collectif
    • Édition assistée du contenu des messages (formattage, prévisualisation)
    • L'historique des messages envoyés est enregistré, la liste des destinataires est anonymisée automatiquement après 6 mois
    • Export des adresses e-mail rejetées
    • Prévisualisation d'un message collectif pour chaque destinataire
    • La composition de message se fait maintenant uniquement au format MarkDown
    • Choix du nom et de l'adresse de l'expéditeur du message collectif
  • Rappels automatiques :

    • Le rappel sera envoyé à toutes les adresses mail renseignées dans la fiche du membre
    • Le corps du rappel peut maintenant contenir du code Brindille, comme sur les messages collectifs, et utiliser l'intégralité des champs de la fiche membre, et le montant calculé pour le tarif de l'activité
    • Les variables de type #IDENTITE, #DATE_RAPPEL etc. dans le corps des messages de rappel sont désormais des variables Brindille : {{$identity}}, {{$reminder_date}}, etc. Les variables existantes ont été remplacées.
  • On peut maintenant inscrire un membre à la même activité dans la même journée, si le tarif est différent

  • Il est possible d'inscrire une catégorie de membres à une activité en une seule fois (merci à @Maxime Paquatte)

  • Les membres peuvent choisir leurs préférences personnelles : thème sombre, nombre d'éléments dans les listes, affichage expert de la comptabilité, ou utiliser le thème pour tablette même sur grand écran

  • On peut désormais afficher la photo dans la liste des membres

Sécurité

  • Refonte et simplification de la page "Mes informations de connexion et de sécurité"
  • Ajout d'un bouton permettant de déconnecter toutes les sessions actives dans la page "mes informations de sécurité"
  • Désormais si une clé PGP a été fournie par le membre, tous les mails envoyés au membre seront chiffrés (y compris les pièces jointes)
  • Ajout d'une limite au nombre de connexions infructueuses (maximum 10 en 20 minutes)
  • Ajout d'un captcha accessible sur la page de connexion après 3 tentatives de connexion infructueuses
  • Ajout d'un journal de connexion pour chaque membre, permettant de voir les dates et heures de connexion
  • Ajout d'un journal d'audit des actions des membres, permettant de voir ce qui a été effectué par qui et quand (création/suppression de membre/écriture/etc.)
  • Configuration de la durée de rétention des journaux
  • Seuls les administrateurs peuvent désormais créer des fichiers HTML et JS dans les documents
  • On peut désormais configurer un délai après lequel un membre est automatiquement déconnecté (sauf s'il a choisi l'option "Rester connecté" à la connexion), pour éviter de laisser une session ouverte sur un ordinateur partagé.

Modules

Grâce aux modules, on peut désormais générer, configurer, et même modifier ou créer des formulaires ou modèles de documents personnalisés. On peut ainsi même créer de petites applications dans l'administration de l'association, pour s'adapter à ses besoins.

Ces module utilisent la syntaxe Brindille, comme le site web.

Voir la documentation des modules pour plus de détails.

Paheko fournit plusieurs modules par défaut, seuls certains sont activés par défaut. Pour activer les autres il faut se rendre dans le menu Configuration, onglet Extensions.

  • Reçu de don simple (non fiscal) - activé par défaut
  • Reçu de paiement
  • Bordereau de remise de chèque
  • Cartes de membres
  • Modèles d'écritures comptables
  • Reçus fiscaux
  • Horaires d'ouvertures : permet d'afficher les horaires d'ouverture et périodes de fermeture du local de l'association sur le site
  • Réservations de créneaux et d'événements

Reçus fiscaux

  • Création de reçus fiscaux à partir d'une écriture, d'un membre, ou manuellement
  • Recherche dans les reçus
  • Filtre des reçus par année
  • Récapitulatif annuel de la somme et du nombre de reçus délivrés, pour déclaration à l'administration fiscale
  • Impression en PDF
  • Possibilité d'annuler un reçu erroné

Réservations de créneaux et d'événements

  • Création d'événements et de créneaux, définition du nombre de places disponibles par créneau
  • Confirmation d'inscription par e-mail
  • Possibilité d'annuler une réservation
  • On peut maintenant définir plusieurs champs / informations à demander à l'inscription
  • Synchronisation possible avec le module Horaires d'ouverture pour ne pas avoir à re-saisir les informations deux fois
  • Affichage automatique du bouton pour réserver un créneau sur le site quand le module est activé

Note pour les utilisateurs de l'ancien plugin "Réservations" : ce module remplace l'ancien plugin. Les événements et réservations existantes sont conservées, mais les anciens créneaux sont perdus, il faudra les re-créer manuellement après la mise à jour.

Comptabilité

  • Possibilité de verrouiller les écritures, pour empêcher leur modification ou suppression
  • Possibilité d'importer des fichiers d'export au format "complet"
  • Ajout de deux colonnes dans les journaux de compte : nombre de fichiers joints, et verrouillage de l'écriture
  • Le statut de rapprochement n'est plus effacé lors de la modification d'une écriture, sauf si on modifie le montant ou le compte de banque

Site web

  • Refonte de l'interface de gestion du site web
  • Ajout d'un historique d'édition des pages
  • L'activation / désactivation du site web se fait désormais dans la configuration générale
  • La modification du code du site web passe désormais par l'extension modifiable "Site web" dans Configuration -> Extensions
  • Ajout de galerie et diaporama dans le Markdown
  • Ajout du support de vidéos intégrées dans le Markdown
  • Ajout d'un cache statique avec Apache, pour que les pages du site soient super-rapides

Extensions

  • Nouvelle extension : Notifications. Permet de recevoir un e-mail lors de certains événements (à configurer) : suppression, ajout ou modification d'un membre, ajout ou suppression d'un fichier, modification de page du site web, envoi d'un rappel automatique, etc.

Les extensions officielles suivantes ne sont plus supportées et ne fonctionneront pas avec Paheko 1.3, elles seront supprimées lors de la mise à jour :

  • Horaires d'ouvertures (ouvertures) : remplacé par un module fourni par défaut, la configuration est perdue et doit être re-saisie
  • Réservations (reservations) : remplacé par un module fourni par défaut, la configuration et les réservations existantes sont conservées, mais les créneaux devront être re-saisis

Divers

  • Ajout d'une image de signature dans Configuration > Personnalisation
  • Amélioration visualisation des droits des membres (icônes + changement des couleurs)
  • Refonte de la page Fonctions avancées dans Configuration
  • Refonte des pages de sauvegarde et restauration dans Configuration
  • Ajout d'une page permettant de visualiser le détail de l'espace disque utilisé dans Configuration

Administrateurs système et hébergeurs

  • Possibilité de contourner le système d'authentification de Paheko pour utiliser un système de SSO, par exemple avec LDAP
  • Ajout de boutons permettant de vérifier l'intégrité de la base de données et la reconstruire, dans Configuration -> Avancé -> SQL
  • Ajout d'un script scripts/storage.php permettant de gérer la migration entre stockage externe et stockage dans la base de données, ainsi que le re-scan des fichiers du stockage externe

Extensions officielles

Les extensions officielles suivantes sont désormais inclues à l'installation, il n'est plus nécessaire de les télécharger ni les mettre à jour séparément :

  • Statistiques du site web
  • Caisse informatisée
  • Taima - suivi du temps bénévole

Brindille

  • Nouvelle section load permettant de récupérer des données liées à un module
  • Nouvelle fonction save pour enregistrer les données d'un module
  • Ajout des fonctions :
    • input
    • link
    • linkbutton
    • icon
    • button
    • error
    • read
    • admin_header
    • admin_footer
    • signature
  • Ajout des filtres :
    • money_raw
    • spell_out_number
    • parse_date
    • math
    • money_int
    • strpos
    • substr
    • strrpos
    • boolval
    • intval
    • floatval
  • Ajout des sections :
    • users
    • transactions
    • transactions_users
  • Ajout du support de having dans les sections sql
  • Amélioration des fonctionnalités de assign

Voir la référence de Brindille pour les détails.

API

  • L'import de membre peut maintenant se faire avec un fichier ODS/XLS/XLSX (si la constante CALC_CONVERT_COMMAND est configurée)
  • La route user/import peut désormais être appelée en POST
  • Ajout d'une route user/import/preview qui renvoie les changements qui seraient apportés par un import de membres.

Changements qui pourraient affecter webmasters et développeurs

  • Un cache statique a été ajouté pour le site web. Normalement avec Apache cela fonctionne tout seul. Si vous utilisez un autre serveur web, le cache statique ne peut pas fonctionner (seul Apache permet cette fonctionnalité). Le cache est automatiquement désactivé dans ce cas.
  • Pour connecter Paheko à un serveur Collabora ou OnlyOffice, il faut configurer la constante WOPI_DISCOVERY_URL, voir la documentation de configuration pour les détails.
  • La constante de configuration PREFER_HTTPS a été supprimée, la définir n'a plus d'effet. Si vous n'êtes pas encore 100% en HTTPS, utilisez une redirection d'URL via le serveur web.
  • Une nouvelle constante de configuration LEGAL_HOSTING_DETAILS a été ajoutée, permettant de modifier la mention de l'hébergeur dans les mentions légales
  • Une nouvelle constante PDFTOTEXT_COMMAND permet de spécifier le nom de la commande à utiliser pour transformer un PDF en texte brut (pour la recherche dans les fichiers), voir config.dist.php pour les détails.
  • Ajout d'une constante DOCUMENT_THUMBNAIL_COMMANDS qui permet de spécifier les outils pour générer les miniatures des PDF, documents LibreOffice, etc. (supporte mupdf, Collabora, et unoconv)
  • Une nouvelle constante DISABLE_EMAIL permet de désactiver toute fonctionnalité d'envoi d'e-mail (utile pour Windows qui ne dispose pas de serveur de mail)
  • Une nouvelle constante ALERT_MESSAGE permet d'afficher un message en haut de l'administration, par exemple pour prévenir d'une maintenance.

Fichiers

  • Les métadonnées des fichiers (taille, type, nom, etc.) sont désormais toujours stockées dans la base de données, même si le contenu des fichiers est stocké sur le système de fichiers.
  • Le texte des pages et catégories du site web ne sont plus stockés dans des fichiers, mais uniquement dans la base de données.

Extensions

Les extensions et les modules disposent d'une interface commune.

Désormais on "active" une extension au lieu de "l'installer". Ensuite on peut la désactiver (ou réactiver). Une fois désactivée on peut effacer ses données (anciemment "désinstaller").

  • Le fichier garradin_plugin.ini est renommé plugin.ini
  • Important : dans le fichier plugin.ini de chaque plugin, renommer nom en name et auteur en author
  • les pages publiques d'un plugin doivent maintenant être dans le sous-répertoire public, les pages privées dans le sous-répertoire admin
  • les directives menu_condition et config dans plugin.ini sont supprimés.
  • nouvelles directives dans plugin.ini : home_buttons, restrict_section, restrict_level
  • le répertoire www/admin doit désormais être admin
  • le répertoire www/public doit désormais être public
  • l'adresse des plugins dans l'admin devient /admin/p/nom_du_plugin/ (précédemment : /admin/plugin/nom_du_plugin/)
  • la constante PLUGIN_URL (et la variable Smartyer $plugin_url) renvoie désormais l'adresse publique du plugin, au lieu de l'adresse privée (admin), utiliser PLUGIN_ADMIN_URL (ou $plugin_admin_url) pour avoir l'adresse privée du plugin
  • Signaux :
    • un plugin peut maintenant enregistrer un signal menu.item et assigner une clé au tableau passé dans l'argument return avec le code HTML de l'élément du menu (voir plugin de test pour exemple) pour afficher un élément dans le menu
    • il est possible pour un plugin d'afficher un bouton sur la page d'accueil, via le signal home.button, fonctionnement similaire à menu.item
    • les signaux files.* ont été renommés file.*
    • ajout des signaux file.overwrite, file.create, file.trash et file.restore
    • suppression du signal membre.nouveau, utiliser entity.Users\User.create.after à la place
    • suppression du signal membre.suppression utiliser entity.Users\User.delete.after à la place
    • le signal motdepasse.compromis est renommé password.check
    • nouveau signal web.page.version.new quand le contenu d'une page est modifiée et qu'une nouvelle version est enregistrée
    • nouveaux signaux : entity.NAME.create.(after|before), entity.NAME.modify.(after|before), user.login.after, user.login.otp.after, user.change.password.after, user.change.login.after

Squelettes du site web

  • Les squelettes par défaut du site web ont été déplacés : ils ne sont plus dans www/skel-dist mais dans modules/web (ce changement ne devrait avoir aucun impact)
  • Les squelettes utilisateur du site web qui étaient dans skel ont été déplacés dans data/files/modules/web
  • L'inclusion de squelette ({{:include file="fichier.html"}}) étant absolue à la racine modules par défaut, les anciens appels include des squelettes du site web ont été modifiés pour être relatifs au répertoire courant pour continuer à fonctionner.
  • Si vous utilisiez path ou parent dans des sections pages, articles ou documents, notamment dans des clauses where ou order, il faudra modifier votre code, car ces colonnes n'existent plus. parent et path sont toujours pris en compte comme paramètres des sections.

Développeurs⋅ses

  • Toutes les fonctions contenant garradin ont été renommées pour utiliser paheko
  • Tous les namespaces contenant Garradin ont été renommés pour utiliser Paheko
  • La classe Sauvegarde a été renommée Backup. Ses méthodes ont aussi été renommées en anglais.
  • La classe Membres disparaît et est remplacée dans ses fonctionnalités par Users\Users
  • La classe Recherche est séparée en plusieurs : une entité Search représentant les recherches enregistrées, et des classes AdvancedSearch pour le formulaire de recherche avancée
  • La classe Membres\Champs disparaît, ses fonctionnalités sont dans la classe Users\DynamicFields
  • La classe Membres\Session est renommée Users\Session
  • Une entité Users\User a été créée pour représenter un membre
  • Les propriétés de la classe Config ont été renommées en anglais, notamment nom_asso, email_asso, etc. qui deviennent org_name, org_email etc. couleur1 et couleur2 sont devenus color1 et color2.
  • Les propriétés champ_identite et champ_identifiant de la classe Config ont été supprimées, utiliser les méthodes DynamicFields::getLoginField() et DynamicFields::getNameFields() à la place.
  • La fonction utilitaire qv a été supprimée
  • Les méthodes validate et check de la classe Form ont été supprimées
  • La fonction Smarty form_field a été supprimée, utiliser input à la place
  • La méthode Files::createAndStore a été supprimée, utiliser Files::createFromPath, Files::createFromPointer, Files::createFromString

SQL :

  • La table membres a été renommée users
    • Les recherches SQL enregistrées faisant référence à la table membres ont été modifiées pour utiliser la table users quand c'est possible, mais il peut y avoir des erreurs, vérifiez vos requêtes SQL et corrigez-les si besoin.
  • Une table config_users_fields a été créée, elle contient la liste des champs d'une fiche membre, et remplace la variable de configuration champs_membres dans l'objet Config
  • La table recherches a été renommée searches et ses colonnes ont aussi été renommées en anglais
  • La table plugins_signaux a été renommée plugins_signals et ses colonnes ont aussi été renommées en anglais
  • Une table logs contenant un journal des actions utilisateur a été créée
  • La table files a maintenant une colonne md5
  • La table files est toujours renseignée, même quand les fichiers sont stockés sur le système de fichiers
  • Table web_pages :
    • Les colonnes path et parent ont été supprimées
    • Une colonne id_parent a été rajoutée

Diff du code