Wikini

DiscussionsActionNewTextSearch

PagePrincipale :: DerniersChangements :: DerniersCommentaires :: ParametresUtilisateur :: Vous êtes ec2-3-235-229-251.compute-1.amazonaws.com
L'action NewTextSearch à pour but de complétrer voir de remplacer l'action TextSearch
par Nicephore17


Présentation



J'ai fait une action qui, basée directement sur une requête SQL, permet l'utilisation de paramètres de recherche spéciaux:
Info sur ContributionsClesEnMain et chez moi.


Mise en place



En complément

Copiez newtextsearch.php dans /actions et appelez la fonction avec NewTextSearch

En substitution

Renommez newtextsearch.php en textsearch.php et copiez le dans /actions


Code source v1.6



<?php
/*
Copyright  2004  Nicolas FORGEARD-GRIGNON
nicephore17 **at** adminrezo.net
REMERCIEMENT à toute l'équipe de WikiNi.net pour son aide

15/12/2004 - V1.6 Passage à la méthode GET
12/12/2004 - v1.5 Optimisation de la sécurité et des performances
09/12/2004 - v1.4 Optimisation SQL utilisation des classes WikiNi
07/12/2004 - v1.3 Sécurisation au lancement de l'action hors WikiNi
                  Amélioration du SQL: ne liste pas les pages non accessibles
                  Activation de toutes les fonctionnalités de {{textsearch}}
06/12/2004 - v1.2 modification des caractères spéciaux
06/12/2004 - v1.1 correction du bug des recherches successives
04/12/2004 - v1.0 initial release

All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products
derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


INFORMATION D'UTILISATION
Copiez le dans /action et appelez le avec {{newtextsearch}}
Vous pouvez renommer ce fichier en textsearch.php pour remplacer l'ancien.
*/
// Empéche l'execution php en direct
if (!defined('WIKINI_VERSION')) {die ('accès direct interdit');};


// Initialisations de base
if (!defined('NTS_VERSION')) {define('NTS_VERSION' '1.6');};
if (!
defined('AFFICHER_COMMENTAIRES')) {define('AFFICHER_COMMENTAIRES' FALSE);};
$prefixe $this->config['table_prefix'] ;
$user $this->GetUser();
$AfficherFormulaire TRUE;

// On récupére ou initialise toutes le varible comme pour textsearch
// label à afficher devant la zone de saisie
$label $this->GetParameter('label''Ce que vous souhaitez chercher&nbsp;: ');
// largeur de la zone de saisie
$size $this->GetParameter('size''40');
// texte du bouton
$button $this->GetParameter('button''Chercher');
// texte à chercher
$phrase $this->GetParameter('phrase');
// séparateur entre les éléments trouvés
$separator $this->GetParameter('separator');

// Récupération de la chaine de recherche
if ($_GET['phrase']) { $phrase =  $_GET['phrase']; };
if (
$separator) { $AfficherFormulaire FALSE; };

// Affichade de la version en commentaire HTML
echo ("<!-- Action New Text Search version ".NTS_VERSION." -->\n\n");

// Affichage du formulaire de saisie
if ($AfficherFormulaire) {
  
// Hack pour la compatibilité XHTML      
  
$URL htmlSpecialChars($_SERVER['REQUEST_URI']);      
  
// Code de la méthode GET
  
echo ("<form action='$URL' method='get'>
        <input type='hidden' name='wiki' value='"
.$this->GetPageTag()."' />
        <strong>
$label</strong><input type='text' name='phrase' value='' size='$size' />
        <input type='submit' value='
$button'/></form>
        <small>Un caract&eacute;re inconnu peut &ecirc;tre remplac&eacute; par \"?\" plusieurs par \"*\"
        </small><br />\n\n"
);
};
// Lancement de la recherche
if ($phrase) {

  
// Modification de caractère sépciaux
  
$phrasestr_replace(array('*','?'), array('%','_'),$phrase);
  
$phrase addslashes($phrase);

  
// Blablabla SQL
  
$requestfull 'SELECT tag FROM '.$prefixe.'pages
                  LEFT JOIN '
.$prefixe.'acls ON tag = page_tag AND privilege = "read"
                  WHERE latest = "Y"
                  AND ( list IS NULL OR list ="*" '
.
                  (
$user 'OR owner = "'.$user['name'].'" OR list = "+" OR (list NOT LIKE "%!'.$user['name'].'%" AND list LIKE "%'.$user['name'].'")':'').')'.
                  (
AFFICHER_COMMENTAIRES '':'AND tag NOT LIKE "comment%"').
                  
' AND body LIKE "%' $phrase '%"
                  ORDER BY tag'
;
                  
  
// Exécution de la requete
  
  
if ($resultat $this->LoadAll($requestfull)) {   
          
  
// Affichage des resultats
    // Restauration de la chaine de base
    
$phrase str_replace(array('%','_'), array('*','?'),$phrase);
    
// Affichage des résultats en liste
    
if (empty($separator)) {
      echo 
$this->Format('---- --- **Résultats de la recherche [""'.$phrase.'""] :---**');
      echo (
'<ul>');
      foreach (
$resultat as $line) { echo ("<li>".$this->ComposeLinkToPage($line['tag'])."</li>\n");};
      echo (
'</ul>');
    
// Affichage des r?sultats en ligne
    
} else {
      echo (
'<br />');      
      foreach (
$resultat as $line) { echo ($this->ComposeLinkToPage($line['tag']).' ');};     
    };
  } else {
    echo 
$this->Format('---- --- **Désolé mais il n\'y a aucun de résultat pour votre recherche.**');
  };
};
?>



Discussion



INSEREZ ICI LES COMMENTAIRES D'ORDRE GÉNÉRAL
(Indépendents des versions)


version 1.4 out



Avant d'ajouter des fonctionnalités (si si j'ai des idées) il faudrait vérifier la qualité du code. De plus on pourrait peut-être optimiser la gestion du formulaire en utilisant des classes de WikiNi plutôt que du code HTML.
Merci à toi LordFarquaad -- De rien, c'est avec plaisir :-) -- LordFarquaad

Je n'ai pas le temps de suivre mais je sens qu'il va en sortir quelque chose de chouette :) N'hésitez pas à jardiner la page quand vous aurez des choses montrables ;) -- CharlesNepote

Je fatigue un peu là... il faut que je respire alors je passe un peu à ActionMailToUser... :D dès que j'aurais avancé sur le mail je reviens avec comme projet minimum d'utiliser les classes Wikini pour la gestion du formulaire. Une fois que tout marchera et que le code sera propre, j'étudierais la possibilité d'ajouter un champ de recherche (Contenu de la page, Nom de l'auteur ou Titre de la page).
Votre aide m'est précieuse... Merci beaucoup... Désolé pour les pages que je génère, se sait que ce n'est pas un forum mais je suis tellement fébrile...
-- Nicephore17

Bon je vais voir ce que je peux faire quand (calendrier plein) je dois le faire... Tes explications sont claires ça derait aller vite vers la version 1.5 (il se trouve que WikiNi est aussi un bout outil pédagogique poru mon apprentissage de PHP)
-- Nicephore17


Version 1.5 out



Ca y est, j'ai suivi tes instructions pas à pas, cependant...
NOTA: Les fichiers seront sur mon serveur dans kk minutes
J'ai vérifié dans mon php.ini, la fonction error_reporting = E_ALL est conforme à ce que tu me disais.
-- Nicephore17

N'hésite pas à publier ton code ici même.

Je n'ai pas regardé le code mais j'ai déjà quelques remarques :
Et à part ça les variables sont dans $_GET au lieu de $_POST et c'est tout? Tu ne serais pas sur MSN par hasard?


Nicephore17 rajoute: Hihihi on croirait m'entendre quand je parle d'OpenOffice.... Bon je promet que je vais faire un effort pour Jabber... j'ai eu des souci avec la dernière fois et je n'arrive pas à faire suivre les collègues/amis/famille là dedans... ceci dit je ne suis pas complètement pourri: je tourne avec aMSN.
Pour la méthode GET j'y cours de suite... et je publie la 1.6 dans la foulée... j'attendais ton avis.
PAR CONTRE (si j'ai bien compris) la méthode GET à un énorme inconvénient... la pages RechercheTexte doit absolument exister... Ceci me semble une contrainte inutile... De plus, TextSearch et elle souvent utilisée dans les pages, est il vraiement nécessaire de conserver le code du séparateur... je pense ouvrir un vote pour le passage de la 1.6 à 1.7, je laisse certains morceaux de code au cas où... J'aimerais qu'on se mette d'accord là dessus après quoi je pourrais attaquer le suite (ex: Mots clef OU et ET, recherche dans les titres ou dans les noms d'utilisateurs etc)


Exemple :
<ul>
<li> <a href="http://www.adminrezo.net/wakka.php?wiki=ActionTrail">ActionTrail</a><br /></li>
</ul>

alors qu'il suffirait de :
<li><a href="http://www.adminrezo.net/wakka.php?wiki=ActionTrail">ActionTrail</a></li>
-- CharlesNepote
Nicephore17 ajoute: je verrais ça se soir.

Note à effacer : une raison pour laquelle j'apprécie tout particulièrement cette action, c'est la possibilité de faire des recherches sur des mots de 3 lettres (voir moins). Pour moi, cette raison justifie à elle seule l'intégration à WikiNi. -- CharlesNepote


Version 1.6b out


Méthode GET


Bon je met à dispo la 1.6b et je vais me coucher.
Comme je ne suis pas tout à fait sûr de moi je le met en béta j'ai laissé une grande partie de l'ancien code (entre /* ... */) et pas mal d'autres commentaires dedans. Inutile de les répéter ici. Si vous voulez y jeter un oeil téléchargez làici.
OBJECTIFS: J'aimerais qu'on valide ça vite fait (le passage POST -> GET) que j'applique quelques correctifs: ($request -> $phrase pour la cohérence) et qu'on puisse se concentrer sur les objectifs vers la 2.0 (à savoir pas de fonction en plus mais un code presqueparfait...).
PETITE PROPOSITION: j'ai pris l'habitude d'afficher la version en haut, je propose de ne l'afficher que si le mode debug est activé.
Et encore merci de votre aide.

Bonne nuit (je suis fatigué mais qu'est ce que je m'éclate...)
Je pense que je vais faire un peu de ménage sur cette page demain, ça commence à être long et plus ou moins illisible...
-- Nicephore17

Mes commentaires sur ta 1.6b :
echo '<form action="' . $_SERVER['PHP_SELF'] . '" method="get">

echo "<ul>\n";


Bon bon bon...
La 1.6 finale sera online ce soir avec les petites modifs énoncées ci-dessus.
Je fais quoi pour l'affichage de la version en dessous du formulaire?
-- Nicephore17


Version 1.6 out



Bon j'ai mis tout ça à jour avec:

Merci encore et toujours.
Maintenant je vais peut-être laisser courir un peu avant de passer à la 1.7
C'est bien beau de coder pour la communauté mais j'ai pas grand monde pour s'occuper de mon site or j'ai du travail à faire sur son contenu.

Je me suis permis de supprimer les commentaires antérieur à la version 1.4 pour "nettoyer" un peu la page j'espère que vous ne m'en voudrez pas.

-- Nicephore17

-> Il semblerait qu'il ai une confusion entre caractères accentués ou non, j'y regarderais. -- Nicephore17
-> A priori, cela vient d'une limitation de MySQL au niveau de la gestion des accents, je ne vois pas de solution pour le moment -- Nicephore17

j'ai vérifié... Ceci dit REGEXP permet une plus grand flexibilité, il pourrait être intéressant de l'utiliser. -- Nicephore17


Misc.



Problème de download déplacé sur la page ActionAttachBug. -- Nicephore17
Il n'y a pas de commentaire sur cette page. [Afficher commentaires/formulaire]