source: spip-zone/_plugins_/autocompletion/inc/autocompletion.php @ 63290

Last change on this file since 63290 was 63290, checked in by dexbrayat@…, 9 years ago

Correctif divers

+ petit ménage ...

File size: 3.7 KB
Line 
1<?php
2
3/*  Charger un SPIP minimum => Pour utiliser les foncitons spip (sql_, include_spip(), etc.)
4  ----------------------------------------------- */
5if (!defined('_ECRIRE_INC_VERSION')) {
6    // recherche du loader SPIP.
7    $deep = 2;
8    $lanceur = 'ecrire/inc_version.php';
9    $include = '../../' . $lanceur;
10
11    while (!defined('_ECRIRE_INC_VERSION') && $deep++ < 6) {
12        // attention a pas descendre trop loin tout de meme !
13        // plugins/zone/stable/nom/version/tests/ maximum cherche
14        $include = '../' . $include;
15        if (file_exists($include)) {
16            chdir(dirname(dirname($include)));
17            require $lanceur;
18        }
19    }
20}
21if (!defined('_ECRIRE_INC_VERSION')) {
22    return 'SPIP NON CHARGE';
23}
24
25include_spip('base/abstract_sql');
26
27$ville      = (_request('ville'))?      trim(_request('ville'))      : '' ;
28$cp         = (_request('codePostal'))? trim(_request('codePostal')) : '' ;
29$cpRef      = (_request('cpRef'))?      trim(_request('cpRef'))      : '' ;
30$maxRows    = (_request('maxRows'))?    trim(_request('maxRows'))    : '' ;
31$delim      = ",- "; // Les differents separateurs possible
32$message    = '';
33$infos      = array(); 
34 
35if (!empty($cp) || !empty($ville)) {
36
37    $liste   = array();
38
39    $where   = '';
40    $groupby = array();
41    $orderby = array(); 
42   
43    $champs  = array('code_postal CodePostal', 'lib_commune Ville', 'latitude Latitude', 'longitude Longitude');
44    $from    = array('spip_communes');
45   
46   
47    if($ville){
48        // On coupe la chaine en segments
49        $tok = strtok($ville, $delim);       
50        // Boucle pour rechercher sur chaque segments
51        while ($tok !== false) {
52            // Au minimum 2 characters
53            if(strlen($tok) > 1){
54                $whereVille[] = "lib_commune LIKE '%".trim($tok)."%'";
55            }
56            $tok = strtok($delim);
57        }
58
59        if($cpRef){
60            $whereVille[]   = "code_postal LIKE '".sql_quote($cpRef)."%'";
61            $whereCpRef[]   = "code_postal LIKE '".sql_quote($cpRef)."%'";
62            $orderby[]      = "CASE WHEN "."(". join("\n\tAND ", $whereVille) .") "." THEN 1 ELSE 2 END";
63            $message       .= str_replace("%cp", $cpRef, _T('autocompletion:message_pas_resultat_commune_cp') ) ;
64        }
65        else{
66            $orderby[] = "CASE WHEN "."(". "lib_commune LIKE '".sql_quote($ville)."%'" .") "." THEN 1 ELSE 2 END";
67        }
68        // Ce champ 'type résult' permet de controler s'il y a un résultat en correspondance à la recherche
69        $champs[] =  "(". "CASE WHEN "."(". join("\n\tAND ", $whereVille) .") "." THEN 1 ELSE 2 END" .") as type_result";
70       
71        $where .= "(". join("\n\tAND ", $whereVille) .") ";
72        $where .= (!empty($whereCpRef))? "OR (". join("\n\tAND ", $whereCpRef) .") " : '';
73   
74        $orderby[] = "lib_commune, code_postal";
75    }
76   
77    if($cp){
78        $where[] = "code_postal LIKE '".sql_quote($cp)."%'";
79        $orderby[] = "code_postal, lib_commune";
80        $champs[] =  "(". "CASE WHEN "."(". "code_postal LIKE '".sql_quote($cp)."%'" .") "." THEN 1 ELSE 2 END" .") as type_result";
81        $message .= _T('autocompletion:message_pas_resultat_cp');
82    }
83
84    $limit   = (!empty($maxRows))? $maxRows : '';
85   
86    if ($liste_des_communes = sql_select($champs, $from, $where, $groupby, $orderby, $limit)) {
87        $resultat = false;
88        while( $row=sql_fetch($liste_des_communes) ){
89            if( $resultat == false && $row['type_result'] == '1') $resultat = true ;
90            $liste[] = $row;
91        }
92    }
93    if(!empty($message)) $infos [] = array("message" => $message);
94    if($resultat === true) echo json_encode($liste);
95    else echo json_encode(array_merge ($infos, $liste));
96}
Note: See TracBrowser for help on using the repository browser.