pluxml / PluXml

A CMS to create lightweight websites with ease and without database.
http://pluxml.org
GNU General Public License v3.0
212 stars 66 forks source link

Admin paginations : Fix paginated artTitle with '%' + good cursor (1st & last btn) #713

Closed sudwebdesign closed 7 months ago

sudwebdesign commented 7 months ago

a to b for real fake disabled first/prev/next/last buttons theme.css : Fix hidden last element by pagination

Tips : '%1' search all articles with '1' in title (url)

sudwebdesign commented 7 months ago

Il était possible de cliquer sur les boutons (liens) alors que nous sommes sur la première ou dernière page.

Sur la dernière page PluXml permettait lors du clic sur "page suivante" d'aller sur une page inexistante page en cours + 1 (mais affichait la premiere)

Les recherches par titre sont maintenant paginées

sudwebdesign commented 7 months ago

Complémentaire de #714

bazooka07 commented 7 months ago

index.php : Je ne comprends pas l'intérêt de faire une redirection pour $_POST['artTitle']. Privilégier l'utilisation de $artTitle au lieu de $_GET['artTitle'] Le bouton "Filtrer" fait double emploi avec le bouton "Rechercher". Supprimé !

plxUtils::printPagination() : Eviter le test de $_GET['artTitle']. Intégrer sa valeur dans le paramètre $urlTemplate Ok pour les urls des dernières pages

CSS : Utiliser la class hasPagination pour ajuster la hauteur des .scrollable-table

voir PR https://github.com/pluxml/PluXml/pull/719

sudwebdesign commented 7 months ago

Je ne comprends pas l'intérêt de faire une redirection pour $_POST['artTitle'].

C'est lorsque juste après avoir rechercher un titre, on recharge la page et que l'on dit oui au re-postage proposé par le navigateur, PluXml dit erreur de token. Il suffit de re-reposter, dire oui a la boite de dialogue et le message disparaît.

C'est sûrement un abus des F5 lors des essais et ça évite : F5 -> Entrée -> token error -> F5 -> Entrée -> OK Avec la redirection juste un F5 et hop c'est OK, par contre c'est sur que cela oblige PluXml a tout relancer 2x (au post + redir).

sudwebdesign commented 7 months ago

M'en vais tester les modif faites ;)

sudwebdesign commented 7 months ago

@bazooka07 Après quelques essais, la pagination cache toujours le dernier élément, voir même plus sur un très petit écran 480 x 640 émulé par Firefox (Galaxy Note 3 au format paysage) Belle idée corrigé avec padding bottom ds scrollable-table.has-pagination comme cela c'est parfait ;)

Petites retouche pour cacher les 2 premiers ou derniers boutons en première et dernière page Idea : hide 1st,prev on 1st page & next,last on last page car leurs lien sont actif et cliquable (a voir si c'est bien comme ça) C'était pour corriger cela le a to b au départ :)

Correctif lorsque l'on recherche un titre avec le caractère % sa plante au printf Fix URL generation if % in title search : admin index Donc l'astuce du début pour chercher un titre avec %1 fonctionne toujours :cherries:

Je ne comprends pas l'intérêt de faire une redirection pour $_POST['artTitle'].

L'avais oublié, cela permet aussi d'avoir artTitle ds $_GET ;)

sudwebdesign commented 7 months ago

NAMM : peut-être utiliser $_REQUEST['artTitle'] au lieu du get ds plxUtils pour éviter la redir de index.

bazooka07 commented 7 months ago

Pour $_GET['artTitle'], c'est toujours niet ! Sans filtrage de sa valeur dans plxUtils::printPagination() amène une faille de sécurité. Le problème de la touche F5 est commun aux formulaires de l'admin de PluXml. Ce n'est donc pas la bonne manière de résoudre ce problème. Le problème est un peu subtil à comprendre : Pour chaque formulaire le toke est unique. Et les résultats d'une requête sont affichés dans un formulaire avec un nouveau token. Quand on demande à réafficher les résultats, on renvoie le token précèdent. Donc pour éviter l'erreur 'Security error : invalid or expired token', il faut conserver les "vieux token" Pour éviter d'accumuler indéfiniment les tokens, on limite le nombre de tokens conservés à 2. Un seul pourrait suffire.

Autre bug plxGlob::LIFETIME est fixé à 3600. A comparer à la valeur session.gc_maxlifetime dans php.ini de 1440. En clair, les données conservées pour cookie de session en cours meurent avant les token. Modalité pratique : les pauses cafés et autres ne doivent pas dépasser1440 secondes sous peine de devoir s'authentifierà nouveau, LOL !

Voir PR https://github.com/pluxml/PluXml/pull/724

sudwebdesign commented 7 months ago

Pour $_GET['artTitle'], c'est toujours niet !

Ne voyant pas de faille de sécu car url encodé (ou alors elle était là depuis longtemps...) Peut-être que cette solution est mieux?

En tout cas maintenant lorsque l'on cherche avec un % ça bogue pas ;)

Vu que le F5 reposte la recherche, me tâte de remettre les 1er et derniers boutons apparent (mais avec disabled) au moins pour recharger la recherche il suffit d'appuyer sur un des deux premier boutons, à voir...

bazooka07 commented 7 months ago

Pour éviter le problème du caractère % dans $artTitle, on peut utiliser les expressions régulières :

$artTitle = urlencode('Bonjour %1');
$urlTemplate = 'index.php?page=%d&artTitle='. $artTitle;
$page = 3;
if(preg_match('#^(.*\bpage=%d)(.*)#', $urlTemplate, $matches)) {
   echo sprintf($matches[1], $page) . $matches[2]; 
} else {
   echo $urlTemplate;
}

D'autre part si $artTitle contient lecaractère %, il est"urlencoder" avant d'appeler plxUtils::printPagination() :


$artTitle = 'Bonjour %1';
echo urlencode($artTitle);
# réponse "Bonjour+%251" !
``

Donc pas de % pour sprintf()

Donc, pas de problème !
sudwebdesign commented 7 months ago

Encore quelques correctifs, lorsque l'on choisit 0 pour l'affichage du nombre de page admin, erreur de division / 0 ds printPagination (index) J'attendais bien avoir zéro ou tous les articles mais pas une erreur fatale venant de plxUtils.

la conf bypage_admin est non prise en compte (du moins au départ) par getArticles() mais a la pagination si puisque l'erreur est la car $itemsPerPage est égal a zéro, on peut voir l'effet avec les commentaires réglés a zéro ou -1 la pagination apparaît (les 4 boutons << < > >>) Ici c'est corrigé

réponse "Bonjour+%251" ! Donc pas de % pour sprintf() Donc, pas de problème !

Bizarre, car il est %251 et avec mes 310 articles (merci pour les fables de la Fontaines au passage) ça cloche toujours...

Pour tester régler a 1 le nombre d'articles à afficher en admin, avoir au moins 2 articles avec un titre qui contient un a, Chercher %a et paf le bogue.

ps : en mettant -1 (ou moins) tout roule et affiche bien tous les articles (j'aime bien l'idée) et plus de problème de pagination puis-quelle devrait-être absente (ici c'est le cas).

ps² : Ici et maintenant .has-pagination est comme la source + une piste section.has-pagination:after{content:'';display:block:padding-bottom:5rem;} et preg_match est utilisé, merci c'est plus simple et gagne 1 ligne de code :+1:

@bazooka07 : Une question hors-sujet et si tu sait : Est il possible avec git de fusionner une branche mais sans son historique? Au cas ou les nombreux commits dérange, ou pour simplifier l'histoire avec 1 simple commit.

bazooka07 commented 7 months ago

Oups ! Au temps pour moi. printf va prendre en compte %251. Un peu pénible la fonction printf et consoeurs Le mieux est de lui tourner le dos comme ceci :

$artTitle = urlencode('Bonjour %1');
$urlTemplate = 'index.php?page=%d&artTitle='. $artTitle;
$page = 3;
echo preg_replace('#\bpage=%d\b#', 'page='.$page, $urlTemplate);

Pour git, git -i rebase HEAD~5 ouvre un éditeur pour pouvoir fusionner parmi les 5 derniers commits en utilisant la commande squash. S'il faut juste faire une modif sur le dernier commit, faire git commit -a --amend. On peut modifier le message du dernier commit dans la foulée. On fait cela avant de publier sa branche avec un git push .... Sinon il faut supprimer la branche distante avant avec git push origin mabranche -d. Pour intégrer les derniers modifs de la branche par défaut master dans une branche, faire git rebase master. Je ne suis pas un expert de git Demander à Google pour plus d'infos.

bazooka07 commented 7 months ago

la conf bypage_admin est prise en compte par plxAdmin::prechauffage. Et donc par getArticles()

Voir PR https://github.com/pluxml/PluXml/pull/730 pour le % ( exit printf etc... dans plxUtils::printPagination() )

sudwebdesign commented 7 months ago

Merci de la réactivité, de ton cours sur git, et bien sûr de faire de meilleurs codes que ceux que je trouve. On apprend des maîtres qui croient ne pas en être :) En train de peaufiner #728 pour aller jusqu'au bout du concept qu'en css

sudwebdesign commented 7 months ago

Tant pis pour les curseurs 'disabled', de toute façon qui utilise un ordinateur pour surfer de nos jours.