[plugin] plnPrivatePages : privatiser une partie du site

GariGari Member
février 2016 modifié dans Plugins
Bonjour à tous,

Un petit plugin qui permet de rendre privées des catégories et des pages statiques (au choix de l'administrateur).
Une page statique privée, ou une catégorie privée, ne seront accessibles que si l'utilisateur s'est connecté préalablement & dispose d'un niveau d'authentification (profil) suffisant.

Le plugin s'adosse au plugin (obligatoire) plnExtendedJurisdiction pour la gestion des comptes utilisateur.

Si vous souhaitez le télécharger pour l'essayer, voire pour jeter un œil dans le code, c'est par ici :

télécharger le plugin plnPrivatePages v1.0.2

Edit1: Mise à jour du lien de téléchargement vers la v0.2.
Edit2: Mise à jour du lien de téléchargement vers la v0.3.
Edit3: Modification de la présentation du plugin pour laisser l'essentiel.
Edit4: Changement du préfixe nom du plugin (plx => pln) & version v0.7
Edit5: Correction d'un bug et passage en v1.0
Edit 27/02/2016: Version 1.0.2 - Correction du bug lié au non-affichage des commentaires.
«1

Réponses

  • Un détail pour ceux qui voudraient tester : c'est bien un travail en développement, pas du tout terminé.

    En l'occurrence, la plus grosse faille à mon sens est le fait que je fais les "blocages" au niveau du thème et non dans le code lui-même. Résultat, je suis assez persuadé que les fils RSS permettent de récupérer les articles privés... Mais j'ai une connaissance du code beaucoup trop parcellaire, actuellement, pour m'insérer dedans (si jamais les hooks qui le permettraient existent).
  • Pour comprendre comment pluxml fonctionne, regarde les fichiers placés dans le dossier core/lib. Le code est lisible et facilement compréhensible (et commenté en français en plus).
    Cela te permettra d'écrire convenablement tes hooks et d'utiliser ceux déjà prévus par l'équipe de dev.
  • GariGari Member
    novembre 2014 modifié
    Effectivement ce n'était pas si compliqué, même si j'aurais aimé avoir un schéma d'ensemble au préalable.

    J'ai reconstruit la solution en adhérant beaucoup plus fortement au mode de fonctionnement de pluXml. En l'occurrence, j'effectue les blocages des parties privées aussi tôt que possible (plxMotorDemarrageBegin) et j'arrête d'utiliser les hooks d'arrêt à placer dans le thème (berk). J'utilise également la fonction error404 que je n'avais pas vue dans la première version et qui me sauve bien !

    Je me suis également basé sur le thème par défaut de manière à être aussi proche du fonctionnement normal de pluXml que possible.

    Je suis plutôt content du résultat : fonctionnel, mieux codé, facile à installer et utiliser, et a priori sécurisé. Ce dernier point mérite cependant éventuellement d'être vérifié par un expert pluXml ;)

    J'ai tenté de traiter tous les cas de figure qui peuvent apparaitre :
    - mode static
    - mode categorie
    - mode article
    - mode tags
    - mode archives

    Les modes suivant n'ont pas été traités parce que je n'ai pas trouvé de pertinence à le faire :
    - preview : on considère que l'utilisateur a les droits du fait qu'il a accès au preview
    - telechargement : aucune considération d'article dans ce mode
    - home : utiliser l'option "masquer" sur la catégorie privée dans l'interface d'administration

    J'ai également pris en compte les feed, même si c'est clairement la partie où je suis le moins bon.
    Le test effectué : feed.php?rss/categorie1 renvoit une page sans aucun article alors qu'il y avait 2 articles dans cette catégorie privée. Ca interdit donc bien l'accès. Par contre, impossible de se connecter, ce qui ne semble pas problématique dans le cas d'un feed). J'ai tout simplement ajouté un hook plxFeedDemarrageBegin qui appelle la même fonction que le hook plxMotorDemarrageBegin.

    Pour télécharger la version v0.2 : plxPrivatePages v0.2

    Pour ceux veulent directement un pluXml de test (pluXml 5.3.1, thème par défaut, plxPrivatePages v0.2) : Environnement pluXml de dev. L'administrateur est admin/admin et un utilisateur plxPrivatePages existe : James/007.
  • As-tu regardé les plugins existants qui font à peu prêt la même chose, histoire de ne pas réinventer la roue ?
  • StéphaneStéphane Member, Former PluXml Project Manager
    Salut

    Je te remonte plusieurs message d'erreurs et anomalies rencontrées en testant ton plugn

    1) Pages statiques > Editer
    Warning: Missing argument 1 for plxPrivatePages::__construct(), called in D:\LocalData\p008736\_Mes Documents\UwAmp\www\PluXml\core\admin\statique.php(80) : eval()'d code on line 5 and defined in \www\PluXml\plugins\plxPrivatePages\plxPrivatePages.php on line 50
    
    Notice: Undefined variable: default_lang in \www\PluXml\plugins\plxPrivatePages\plxPrivatePages.php on line 52
    

    Un résidu d'affichage en bas de page
    checked="true"/>
    

    2) Catégories > Options
    Warning: Missing argument 1 for plxPrivatePages::__construct(), called in \www\PluXml\core\admin\categorie.php(72) : eval()'d code on line 5 and defined in \www\PluXml\plugins\plxPrivatePages\plxPrivatePages.php on line 50
    
    Notice: Undefined variable: default_lang in D:\LocalData\p008736\_Mes Documents\UwAmp\www\PluXml\plugins\plxPrivatePages\plxPrivatePages.php on line 52
    

    Un résidu d'affichage en bas de page
    checked="true"/>
    

    3) fichier admin.php

    Le code ci-dessous est affiché dans la partie body alors que ça devrait dans la partie head
    <link type="text/css" rel="stylesheet" href="../../plugins/plxPrivatePages/plxPrivatePages.css" />
    

    Je n'ai pas pu faire + de tests car quand j'essaye de mettre en privé une page statique ou une catégorie, j'ai une page d'erreur avec les messages ci-dessus: aucune donnée ne peut être enregistrée

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • @Stéphane : je n'ai pas réussi à reproduire les erreurs dont tu parles "Pages statiques / Editer" et "Catégories / Options". Chez moi, ça se passe bien et j'arrive à cocher/décocher les checkbox. Tu as essayé en installant le plugin sur un environnement à toi ou bien en récupérant mon environnement de test complet ?
    En ce qui concerne l'appel au css, bien noté, je modifierai ça à la prochaine version.

    @Jerry Wham : Oui j'avais regardé ce qui existait déjà. Certains plugin sont trop peu conviviaux (obligation de mettre des mdp à chaque page privée), d'autres auraient pu me convenir ("adhesion" par exemple, que j'ai un peu étudié) mais comme je ne suis pas un spécialiste web et que je ne connaissais pas du tout pluXml à l'époque, j'ai vite abandonné toute idée de le modifier pour qu'il me convienne. En l'occurrence, la différence majeure avec adhesion est que je n'ai aucune interface d'adhésion côté public et que j'ai une saisie par lot côté privé (cette saisie par lot étant nécessaire, puisque je dois intégrer 120 personnes dans la base et que le faire à la main ne m'emballe pas plus que ça).
    Notons tout de même que j'ai également vu ce petit défi comme une possibilité d'apprendre pluXml ;)

    @Jormun : Je vois bien ce que tu proposes, ça ne m'emballe que moyennement pour les raisons que tu évoques.
  • StéphaneStéphane Member, Former PluXml Project Manager
    Je crois avoir pris le zip à cette adresse: http://azaris.fr/plxPrivatePages_v0.2.zip

    Dans PluXml mets en commentaire la ligne suivante dans le fichier core/lib/config.php
    C'est peut etre pour ça que tu ne vois pas les erreurs

    Remplace
    # Gestion des erreurs PHP
    error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);
    

    par
    # Gestion des erreurs PHP
    //error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);
    

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • J'ai demandé à afficher les erreurs, toutes les erreurs : tout de suite, on voit mieux ce qui se passe. J'ai donc corrigé le code en conséquence.

    Nouvelle version : plxPrivatePages v0.3

    Changelog :
    - Retrait du bug de privatisation d'une page statique
    - Retrait du bug de privatisation d'une catégorie
    - Placement du css dans le <head> et non le <body> dans la page d'administration du plugin
  • Bonjour, ce plugin fonctionne t'il toujours avec la dernière version de PluXml ? Merci :/
  • GariGari Member
    Bonjour,

    Oui il fonctionne avec la version 1.5.3

    Par contre le plugin est en cours de refonte complète et la version 1.0 sera très prochainement publié (cette semaine).
  • Ok, je vais attendre alors, merci Gari :)
  • GariGari Member
    Je viens de publier la version v0.7 (j'ai la flemme de le passer en v1.0, j'avais déjà mon package prêt à la livraison en v0.7 !).

    Attention GROS changements :
    - Changement du nom (préfixe plx supprimé et remplacé par pln). Impacts éventuels : vos configurations précédentes de privatisation ne seront pas conservées.
    - Adossement au plugin désormais obligatoire plnExtendedJurisdiction pour la gestion des comptes. Impacts éventuels : vos configurations précédentes de gestion des comptes sont perdues.
  • joebartjoebart Member
    juin 2015 modifié
    Bon, je viens d'installer le plugin avec l'autre requis (plnExtendedJurisdiction) et je n'accède plus à l'administration... J'arrive sur une page blanche.
    Je supprime via le FTP ces 2 plugins et je peux à nouveau accéder à l'administration.
  • GariGari Member
    Peux-tu me dire quels autres plugins tu as ?
  • GariGari Member
    @Joebart : je crois avoir compris le problème. Il s'agit d'un problème de double dépendance : plnPrivatePages a besoin de plnExtendedJurisdiction, qui a lui-même besoin de plnStaticPages... Il faut donc installer également ce plugin (oui, ça fait 3 plugins à installer...).

    Bien entendu, je suis en parallèle en train de réfléchir à une façon de détecter ce problème de double dépendance afin d'éviter un plantage catastrophique comme celui que tu as eu (je gère bien la détection de dépendance simple, mais je n'avais pas pensé aux dépendances récursives).

    Pour m'aider, ce serait génial si tu pouvais installer les trois plugins et me dire si le problème est bien corrigé !
  • jol5926jol5926 Member
    juin 2015 modifié
    Bonjour,
    j'ai installé le plugin sur un site vierge pluxml version 5.3.1 pour un test.
    Dès que j'installe le plugin, je n'arrive plus à accéder à l'administration du site.
    J'ai eu plusieurs lignes qui se sont affichées à l'écran, ci-dessous les 2 dernières :

    Erreur : plnPrivatePages est chargé 746 fois
    Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes) in /public_html/pluxmltest/core/lib/class.plx.motor.php on line 351


    j'ai bien installé les 2 plugins suivant :
    plnExtendedJurisdiction et plnStaticPages

    Jol5926
  • GariGari Member
    Grumbl... Je n'arrive pas à reproduire l'incident...
    Peux-tu retester l'installation sur un pluXml vierge et me dire s'il y a le moindre message d'erreur sur la page des plugins une fois l'installation effectuée ? Par exemple :
    pluXml_Erreur_Chargement.jpg
  • GariGari Member
    Bon j'ai réussi à voir un soucis. Je regarde et je te tiens au courant. Je suis tout déçu :(
    Comme comme il ne faut pas laisser les tests au développeurs, ça ne marche pas !
  • ok !!
    j'attends de tes nouvelles pour faire de nouveaux tests ;)
  • GariGari Member
    Bon... J'ai trouvé le problème, je ne vois pas du tout comment j'ai pu passer à côté. Je suis déçu ET humilié ;)
    Bref, j'ai mis à jour le lien de téléchargement dans le premier message. Si tu peux me dire si ça va mieux...
  • Nouveau test, ça fonctionne !! :)
    Suggestion : actuellement un article privé doit faire partie obligatoirement d'une catégorie privée.
    Est-il envisageable et possible d'avoir un article privé dans une catégorie non privée ??

    Merci et bravo pour ton travail
  • GariGari Member
    Non ce n'est pas prévu, ce doit être envisageable mais je ne pense pas que je vais me pencher là dessus tout de suite...
  • J'ai voulu modifier un article et j'ai un message d'erreur mais ça fonctionne, bizarre ??
    plnKikan est chargé 2 fois
    Erreur : plnPrivatePages est chargé 2 fois


    img.png
  • GariGari Member
    Ce sont des messages que j'ai mis pour détecter lorsqu'il y a des instanciations indues de plxMotor ou plxAdmin. Là, je suppose que c'est le plugin gérant la "Galerie" qui effectuer un appel anormal à plxMotor::getInstance().
    Peux-tu me dire de quel plugin il s'agit ? Je vais regarder.
  • jol5926jol5926 Member
    juin 2015 modifié
    Que veux-tu dire par plugin gérant la "galerie" ?
    J'ai installé le plugin "ArtGalerie"

    C'est sûr que c'est un plugin car sur le site de test, je n'ai pas ces messages d'erreur.

    Quand l'utilisateur se connecte et il se trompe de mot de passe, y-a-t'il un message lui indiquant par exemple "mot de passe erroné" ?

    Est-il possible d'afficher juste le titre d'un article caché quand on clique sur un mois dans archive ?

    voilà, je demande peut-être beaucoup ?? mais tes plugins sont très intéressants.
  • GariGari Member
    juin 2015 modifié
    C'est bien le plugin artGalerie qui pose problème. En effet, ce plugin instancie la classe plxMotor à tort. Je propose en solution rapide de remplacer, dans le fichier artGalerie.php, à trois endroits différents :
    public function AdminArticleSidebar(){
    $plxMotor = plxMotor::getInstance();
    

    par
    public function AdminArticleSidebar(){
    $plxMotor = plxAdmin::getInstance();
    

    Puis
    public function OnActivate() {
    $plxMotor = plxMotor::getInstance();
    

    par
    public function OnActivate() {
    $plxMotor = plxAdmin::getInstance();
    

    Et finalement
    public function contentFolder() {
    $plxMotor = plxMotor::getInstance();
    

    par
    public function contentFolder() {
    $plxMotor = plxAdmin::getInstance();
    

    Je fais un rapport d'incident sur le fil dédié :)

    Non il n'y a pas de message d'erreur, je n'ai pas encore trouvé de manière pour afficher un message d'erreur de manière sympathique.

    Est-il possible d'afficher juste le titre d'un article caché quand on clique sur un mois dans archive : je ne suis pas certain d'avoir bien compris la demande.
  • jol5926jol5926 Member
    juin 2015 modifié
    Ton plugin permet de rendre des articles privés.
    Dans la sidebar, tu as "Archives". Si un visiteur veut visualiser les articles dans cette archive, il ne voit pas l'article caché. J'aurais aimé que le titre de l'article puisse apparaitre dans la liste des archives sans pour autant le visualiser complètement.
    Est-ce que j'ai était plus clair dans mes explications ?

    Je teste tes modifications et te tiens au courant !!
  • GariGari Member
    Ouep j'ai compris. Je vais regarder.
  • Gari a écrit:
    Ouep j'ai compris. Je vais regarder.

    Merci d'avance.

    Modifications faites et tout est ok !!!
Connectez-vous ou Inscrivez-vous pour répondre.