broncowdd / SnippetVamp

Store, share & manage your snippets easily
45 stars 12 forks source link

Erreur dans la gestion des tags #36

Closed Phyks closed 11 years ago

Phyks commented 11 years ago

Salut,

Il y a une petite erreur dans la gestion des tags. En effet, j'ai rajouté un tag "C" et j'ai mis 3 snippets à l'intérieur (2 publics, 1 privé). Lorsque je demande d'afficher tous les snippets taggés "C", SnippetVamp me retourne tous les snippets ajoutés dans l'instance (quelque soit le tag).

Je n'ai pas encore trouvé d'où vient le problème, j'updaterai l'issue si j'arrive à l'isoler.

Ce bug est visible ici par exemple : https://snippet.phyks.me/snippetvamp.php?tag=C

Phyks commented 11 years ago

Le problème vient de ce test (ligne 430) :

if (!$cle && are_values_in_string($chaine,implode(' ',$snippet))!==false || $cle!==false && isset($snippet[$cle]) && are_values_in_string($chaine,$snippet[$cle])!==false)

Quand on fait une recherche par tags, !$cle est true. Donc on ne recherche pas le tag dans la liste des tags mais le tag dans le implode(' ', $snippet). Avec un tag long, ça passe relativement inaperçu, mais avec un tag d'une lettre, tous les tags matchent (car il y a forcément une fois la lettre C dans le contenu d'un tag :).

broncowdd commented 11 years ago

Ce qui est curieux c'est que ça liste aussi python et bash qui ne contiennent pas de c ... AAARGH !

Phyks commented 11 years ago

Si, tous contiennent un C. Regarde le code en question, tu fais un implode du snippet. Donc tu cherches un "C" dans le titre, dans la description ou dans les tags.

Sur les snippets de mon exemple :

broncowdd commented 11 years ago

oui, je viens de percuter au moment où tu as posté ^^

broncowdd commented 11 years ago

mais normalement, dans une recherche par tag, il ne devrait chercher que dans le tag...

broncowdd commented 11 years ago

Je viens de perdre 10 minutes avec un piège de noobs: Je fais des tests qui ne changent jamais rien à la page... j'ai oublié le cache !!!! ( :@)

Phyks commented 11 years ago

Pas cool @cache... :/ C'est un vicieux celui-là :)

D'après mes tests, cela vient de la première partie de la condition :

if (!$cle && are_values_in_string($chaine,implode(' ',$snippet))!==false)

Quand on fait une recherche par tags, $cle == '#tags' et donc !$cle == true donc il teste are_values_in_string, qui renvoie true également (car on cherche un C dans tout le contenu du snippet).

Je n'ai pas regardé beaucoup plus en détails pour l'instant.

broncowdd commented 11 years ago

non, j'ai trouvé je pense, encore une erreur de noob tu vas voir ^^

function search($chaine,$cle=false, $from=0){global $snippets,$template,$config;if ($cle=false){ t'as vu ? non ?! ^^ ben en fait, avec if ($cle=false), $cle est toujours à false ! ^^ je corrige et je teste ;)

Phyks commented 11 years ago

@broncowdd : bien vu ! Une astuce pour éviter ce genre de désagréments est de prendre l'habitude de le noter à l'envers :)

if($truc == false) et if(false == $truc) ont le même sens et fonctionnent de la même façon. Par contre, if($truc = false) est toujours vrai alors que if(false = $truc) n'a aucun sens et renvoie une erreur :)

broncowdd commented 11 years ago

ha oui, pas con ça ^^ bon, je continue parce que ça ne suffit pas encore ;)

broncowdd commented 11 years ago

Là il cherche bien dans les tags et seulement celui cliqué (si c'est "c", il cherche " c "...)

Phyks commented 11 years ago

:+1: c'est corrigé :)