Exemple #1
0
function reg_diacrit($chaine)
{
    // a priori inutile sauf dans selecteur emprunteur, mais devrait etre changee.
    global $charset;
    global $include_path;
    // preparation d'une chaine pour requete par REGEXP
    global $tdiac;
    if (!$tdiac) {
        $tdiac = new XMLlist("{$include_path}/messages/diacritique{$charset}.xml");
        $tdiac->analyser();
    }
    foreach ($tdiac->table as $wreplace => $wdiacritique) {
        if (pmb_preg_match("/{$wdiacritique}/", $chaine)) {
            $chaine = pmb_preg_replace("/{$wdiacritique}/", $wreplace, $chaine);
        }
    }
    $tab = pmb_split('/\\s/', $chaine);
    // mise en forme de la chaine pour les alternatives
    // on fonctionne avec OU (pour l'instant)
    if (sizeof($tab) > 1) {
        foreach ($tab as $dummykey => $word) {
            if ($word) {
                $this->mots[] = "({$word})";
            }
        }
        return join('|', $this->mots);
    } else {
        return $chaine;
    }
}
}
if ($idemprcaddie) {
    $myCart = new empr_caddie($idemprcaddie);
    print aff_empr_cart_titre($myCart);
    $droit = verif_droit_proc_empr_caddie($id);
    switch ($action) {
        case 'form_proc':
            $hp = new parameters($id, "empr_caddie_procs");
            $hp->gen_form("./circ.php?categ=caddie&sub=gestion&quoi=selection&moyen=selection&action=add_item&idemprcaddie={$idemprcaddie}&id={$id}");
            break;
        case 'add_item':
            if ($droit) {
                $hp = new parameters($id, "empr_caddie_procs");
                $hp->get_final_query();
                echo "<hr />" . $hp->final_query . "<hr />";
                $line = pmb_split("\n", $hp->final_query);
                $nb_element_avant = $myCart->nb_item;
                while (list($cle, $valeur) = each($line)) {
                    if ($valeur != '') {
                        if (pmb_strtolower(pmb_substr($valeur, 0, 6)) == "select" || pmb_strtolower(pmb_substr($valeur, 0, 6)) == "create") {
                        } else {
                            echo pmb_substr($valeur, 0, 6);
                            error_message_history($msg['caddie_action_invalid_query'], $msg['requete_selection'], 1);
                            exit;
                        }
                        $result_selection = mysql_query($valeur, $dbh);
                        if (!$result_selection) {
                            error_message_history($msg['caddie_action_invalid_query'], $msg['requete_echouee'] . mysql_error(), 1);
                            exit;
                        }
                        if (pmb_strtolower(pmb_substr($valeur, 0, 6)) == "select") {
function test_other_query($n_res = 0, $n_gen = 0, $n_tit = 0, $n_mat = 0, $query, $operator = TRUE, $force_regexp = FALSE)
{
    // fonction d'analyse d'une recherche sur titre
    // la fonction retourne un tableau :
    $query_result = array('type' => 0, 'restr' => '', 'order' => '', 'display', 'nbr_rows' => 0);
    // $query_result['type'] = type de la requête :
    // 0 : rien (problème)
    // 1: match/against
    // 2: regexp
    // 3: regexp pure sans traitement
    // $query_result['restr'] = critères de restriction
    // $query_result['order'] = critères de tri
    // $query_result['nbr_rows'] = nombre de lignes qui matchent
    // $query_result['display'] = affichage en clair de la requête utilisateur
    // si operator TRUE La recherche est booléenne AND
    // si operator FALSE La recherche est booléenne OR
    // si force_regexp : la recherche est forcée en mode regexp
    $stopwords = FALSE;
    global $dbh;
    // initialisation opérateur
    $operator ? $dopt = 'AND' : ($dopt = 'OR');
    $query = pmb_strtolower($query);
    // espaces en début et fin
    $query = pmb_preg_replace('/^\\s+|\\s+$/', '', $query);
    // espaces en double
    $query = pmb_preg_replace('/\\s+/', ' ', $query);
    // contrôle de la requete
    if (!$query) {
        return $query_result;
    }
    // déterminer si la requête est une regexp
    // si c'est le cas, on utilise la saisie utilisateur sans modification
    // (on part du principe qu'il sait ce qu'il fait)
    if (pmb_preg_match('/\\^|\\$|\\[|\\]|\\.|\\*|\\{|\\}|\\|/', $query)) {
        // regexp pure : pas de modif de la saisie utilisateur
        $query_result['type'] = 3;
        if ($n_res) {
            $query_result['restr'] = "n_resume REGEXP '{$query}' OR n_contenu REGEXP '{$query}' ";
        } else {
            $query_result['restr'] = "";
        }
        if ($n_gen) {
            if ($query_result['restr']) {
                $query_result['restr'] .= " OR ";
            }
            $query_result['restr'] .= " n_gen REGEXP '{$query}'";
        }
        if ($n_tit) {
            if ($query_result['restr']) {
                $query_result['restr'] .= " OR ";
            }
            $query_result['restr'] .= " tit1 REGEXP '{$query}' OR tit2 REGEXP '{$query}' OR tit3 REGEXP '{$query}' OR tit4 REGEXP '{$query}' OR index_serie REGEXP '{$query}' ";
        }
        if ($n_mat) {
            if ($query_result['restr']) {
                $query_result['restr'] .= " OR ";
            }
            $query_result['restr'] .= " index_l REGEXP '{$query}' ";
        }
        $query_result['order'] = "index_serie ASC, tnvol ASC, index_sew ASC";
        $query_result['display'] = $query;
    } else {
        // nettoyage de la chaîne
        $query = pmb_preg_replace("/[\\(\\)\\,\\;\\'\\!\\-\\+]/", ' ', $query);
        // on supprime les mots vides
        $query = strip_empty_words($query);
        // contrôle de la requete
        if (!$query) {
            return $query_result;
        }
        // la saisie est splitée en un tableau
        $tab = pmb_split('/\\s+/', $query);
        // on cherche à détecter les mots de moins de 4 caractères (stop words)
        // si il y des mots remplissant cette condition, c'est la méthode regexp qui sera employée
        foreach ($tab as $dummykey => $word) {
            if (pmb_strlen($word) < 4) {
                $stopwords = TRUE;
                break;
            }
        }
        if ($stopwords || $force_regexp) {
            // méthode REGEXP
            $query_result['type'] = 2;
            // constitution du membre restricteur
            // premier mot
            if ($n_res) {
                $query_result['restr'] = "( n_resume REGEXP '{$tab[0]}' OR n_contenu REGEXP '{$tab[0]}' ";
            } else {
                $query_result['restr'] = "";
            }
            if ($n_gen) {
                if ($query_result['restr']) {
                    $query_result['restr'] .= " OR  n_gen REGEXP '{$tab[0]}'";
                } else {
                    $query_result['restr'] = "( n_gen REGEXP '{$tab[0]}'";
                }
            }
            if ($n_tit) {
                if ($query_result['restr']) {
                    $query_result['restr'] .= " OR tit1 REGEXP '{$tab[0]}' OR tit2 REGEXP '{$tab[0]}' OR tit3 REGEXP '{$tab[0]}' OR tit4 REGEXP '{$tab[0]}' OR index_serie REGEXP '{$tab[0]}'";
                } else {
                    $query_result['restr'] = "( tit1 REGEXP '{$tab[0]}' OR tit2 REGEXP '{$tab[0]}' OR tit3 REGEXP '{$tab[0]}' OR tit4 REGEXP '{$tab[0]}' OR index_serie REGEXP '{$tab[0]}' ";
                }
            }
            if ($n_mat) {
                if ($query_result['restr']) {
                    $query_result['restr'] .= " OR index_l REGEXP '{$tab[0]}' ";
                } else {
                    $query_result['restr'] = "( index_l REGEXP '{$tab[0]}' ";
                }
            }
            $query_result['restr'] .= ") ";
            //$query_result['restr'] = "(n_resume REGEXP '${tab[0]}'";
            //$query_result['restr'] .= " OR n_contenu REGEXP '$tab[0]')";
            $query_result['display'] = $tab[0];
            for ($i = 1; $i < sizeof($tab); $i++) {
                $query_suite = "";
                if ($n_res) {
                    $query_suite = " ( n_resume REGEXP '{$tab[$i]}' OR n_contenu REGEXP '{$tab[$i]}' ";
                }
                if ($n_gen) {
                    if ($query_suite) {
                        $query_suite .= " OR  n_gen REGEXP '{$tab[$i]}'";
                    } else {
                        $query_suite = "( n_gen REGEXP '{$tab[$i]}'";
                    }
                }
                if ($n_tit) {
                    if ($query_suite) {
                        $query_suite .= " OR tit1 REGEXP '{$tab[$i]}' OR tit2 REGEXP '{$tab[$i]}' OR tit3 REGEXP '{$tab[$i]}' OR tit4 REGEXP '{$tab[$i]}' OR index_serie REGEXP '{$tab[$i]}'";
                    } else {
                        $query_suite = "( tit1 REGEXP '{$tab[$i]}' OR tit2 REGEXP '{$tab[$i]}' OR tit3 REGEXP '{$tab[$i]}' OR tit4 REGEXP '{$tab[$i]}' OR index_serie REGEXP '{$tab[$i]}' ";
                    }
                }
                if ($n_mat) {
                    if ($query_suite) {
                        $query_suite .= " OR index_l REGEXP '{$tab[$i]}' ";
                    } else {
                        $query_suite = "( index_l REGEXP '{$tab[$i]}' ";
                    }
                }
                if ($query_suite) {
                    $query_suite .= " ) ";
                    $query_result['restr'] .= " {$dopt} " . $query_suite;
                }
                //$query_result['restr'] .= " $dopt (n_resume REGEXP '${tab[$i]}'";
                //$query_result['restr'] .= " OR n_contenu REGEXP '${tab[$i]}')";
                $query_result['display'] .= " {$dopt} {$tab[$i]}";
            }
            //echo "<br /><br /><br />".$query_result['restr']."<br /><br /><br />";
            // contitution de la clause de tri
            $query_result['order'] = "index_serie ASC, tnvol ASC, index_sew ASC";
        } else {
            // méthode FULLTEXT
            $query_result['type'] = 1;
            // membre restricteur
            if ($n_res) {
                $query_result['restr'] = "( MATCH (n_resume, n_contenu) AGAINST ('{$tab[0]}') ";
            } else {
                $query_result['restr'] = "";
            }
            if ($n_gen) {
                if ($query_result['restr']) {
                    $query_result['restr'] .= " OR MATCH (n_gen) AGAINST ('{$tab[0]}') ";
                } else {
                    $query_result['restr'] = "( MATCH (n_gen) AGAINST ('{$tab[0]}') ";
                }
            }
            if ($n_tit) {
                if ($query_result['restr']) {
                    $query_result['restr'] .= " OR MATCH (index_wew) AGAINST ('{$tab[0]}') ";
                } else {
                    $query_result['restr'] = "( MATCH (index_wew) AGAINST ('{$tab[0]}')  ";
                }
            }
            if ($n_mat) {
                if ($query_result['restr']) {
                    $query_result['restr'] .= " OR MATCH (index_matieres) AGAINST ('{$tab[0]}') ";
                } else {
                    $query_result['restr'] = "( MATCH (index_matieres) AGAINST ('{$tab[0]}') ";
                }
            }
            $query_result['restr'] .= ") ";
            //$query_result['restr'] = "MATCH (n_resume, n_contenu) AGAINST ('${tab[0]}')";
            $query_result['display'] = $tab[0];
            for ($i = 1; $i < sizeof($tab); $i++) {
                $query_suite = "";
                if ($n_res) {
                    $query_suite = " ( MATCH (n_resume, n_contenu) AGAINST ('{$tab[$i]}') ";
                }
                if ($n_gen) {
                    if ($query_suite) {
                        $query_suite .= " OR MATCH (n_gen) AGAINST ('{$tab[$i]}') ";
                    } else {
                        $query_suite = "( MATCH (n_gen) AGAINST ('{$tab[$i]}')";
                    }
                }
                if ($n_tit) {
                    if ($query_suite) {
                        $query_suite .= " OR MATCH (index_wew) AGAINST ('{$tab[$i]}') ";
                    } else {
                        $query_suite = "( MATCH (index_wew) AGAINST ('{$tab[$i]}') ";
                    }
                }
                if ($n_mat) {
                    if ($query_suite) {
                        $query_suite .= " OR MATCH (index_matieres) AGAINST ('{$tab[$i]}') ";
                    } else {
                        $query_suite = "( MATCH (index_matieres) AGAINST ('{$tab[$i]}') ";
                    }
                }
                if ($query_suite) {
                    $query_suite .= " ) ";
                    $query_result['restr'] .= " {$dopt} " . $query_suite;
                }
                //$query_result['restr'] .= " $dopt MATCH";
                //$query_result['restr'] .= " (n_resume, n_contenu)";
                //$query_result['restr'] .= " AGAINST ('${tab[$i]}')";
                $query_result['display'] .= " {$dopt} {$tab[$i]}";
            }
            // membre de tri
            $query_result['order'] = "index_serie ASC, tnvol ASC, index_sew ASC";
        }
    }
    // récupération du nombre de lignes
    $rws = "SELECT count(1) FROM notices WHERE {$query_result['restr']}";
    $result = @pmb_mysql_query($rws, $dbh);
    $query_result['nbr_rows'] = pmb_mysql_result($result, 0, 0);
    return $query_result;
}