Subversion Repositories Applications.papyrus

Rev

Rev 1088 | Blame | Last modification | View Log | RSS feed

<?php

// +--------------------------------------------------------------------------------+
// | annuaire_moteur_fonction.php                                                                               |
// +--------------------------------------------------------------------------------+
// | Copyright (c) 2000 - 2003 Tela Botanica                                                                    |
// +--------------------------------------------------------------------------------+
// | Les fonctions de annuaire_moteur.php                                           |
// +--------------------------------------------------------------------------------+
// | Auteur : Alexandre Granier <alexandre@tela-botanica.org>                                   |
// +--------------------------------------------------------------------------------+
//
// $Id: annuaire_backoffice.fonct.php,v 1.8 2007-01-04 16:33:09 alexandre_tb Exp $


/** function mkengine ()
*
*
*
*       @return
*/

include_once PAP_CHEMIN_API_PEAR.'Pager/Pager.php' ;
include_once PAP_CHEMIN_API_PEAR.'HTML/Table.php';
include_once PAP_CHEMIN_API_PEAR.'HTML/QuickForm/select.php';

function mkengine()
  {
    global $nbr_total;
    global $bouton, $HTTP_POST_VARS ;
    
    $requete = mkquery() ;
    $ret = '<div>'. $requete .'</div>';
    // Deux requetes, une avec tous les resultats, l'autre avec les résultats affichés

    $result_final = $GLOBALS['ins_db']->query($requete) ;
    if (DB::isError($result_final)) {
        echo $result_final->getMessage().'<br />'.$requete ;    
    }
    $nbr_final = $result_final->numRows() ;
    
    $_SESSION['requete_mail_tous'] = $requete ;
    
    $donnees = array();
        while ($ligne = $result_final->fetchRow(DB_FETCHMODE_ASSOC)) {
                $donnees[] = $ligne ;   
        }
        
        if (!isset($_REQUEST['setPerPage'])) $_REQUEST['setPerPage'] = 50 ;
        
        $param_pager = array (
                    'mode' => 'Jumping',
                    'delta' => 5,
                    'itemData' => $donnees
             ) ;
    $pager = & Pager::factory($param_pager);
            
    $mes_vars = array ("recherche", "nom", "ville", "mail" ,"dept", "prenom", "cotisant", "pays", "sort", "T_REPONSE", "lettre","statut") ;
    // Deux cas , soit on a cliqué sur rechercher, soit on a cliqué sur un lien
    foreach ($mes_vars as $key=>$value) {
        if (!$bouton) {     // on a cliqué sur un lien
            if (empty($HTTP_POST_VARS[$value])) {
             
            }
        } else {
            // Si on clique sur le bouton rechercher
            if (empty ($HTTP_POST_VARS[$value])) {
                $$value = "" ;
            } else {
                $$value = $HTTP_POST_VARS[$value] ;
            }
        }
    }    

        $ret = '';
        $ret .= '<h1>'.AM_L_TITRE.'</h1>'."\n" ;
  // construction du moteur de str
        $ret .= '<div>';
 
        // Le formulaire de recherche avec QuickForm
        $formulaire = new HTML_QuickForm('formulaire_recherche', 'post', str_replace('&amp;', '&', $GLOBALS['ins_url']->getURL()));
        
        $formulaire->addElement('text', 'recherche', AM_L_RECHERCHER);
        
        $requete = 'select GC_ID, GC_NAME from gen_COUNTRY where GC_LOCALE="fr"';
    $pays = &$GLOBALS['ins_db']->getAssoc ($requete);
    
    $pays = array_merge (array('tous' => 'Tous les pays'), $pays);
    
    if (DB::isError($pays)) {
                return $pays->getMessage().'<br />'.$pays->getDebugInfo();
        }

        $select = new HTML_QuickForm_select ('pays', AM_L_PAYS, $pays, array ('class' => 'projet_asso')) ;
        $formulaire->addElement($select) ;
        $formulaire->addElement('text', 'nom', AM_L_NOM);
        $formulaire->addElement('text', 'prenom', AM_L_PRENOM);
        $formulaire->addElement('text', 'ville', AM_L_VILLE);
        
        if (defined('INS_CHAMPS_NOM_DEPARTEMENT')) {
                $departement = & $GLOBALS['ins_db']->getAssoc('select GFD_ID, CONCAT(GFD_ID,\' - \',GFD_NAME) as GFD_NAME from gen_FRENCH_DPT');
                $departement = array_merge (array ('tous' => 'Tous'), $departement);
                
                $select_dpt = new HTML_QuickForm_select ('departement', AM_L_DEPARTEMENT, $departement, array ('class' => 'projet_asso')) ;
                $formulaire->addElement($select_dpt);
        }
        $formulaire->addElement('text', 'mail', AM_L_MAIL);
        
        $grp = array(20 => 20, 50 => 50, 100 => 100) ;
        $select_grp = new HTML_QuickForm_select ('T_REPONSE', '', $grp, array ('class' => 'projet_asso')) ;
        $formulaire->addElement($select_grp);
        $formulaire->addElement('submit', 'bouton', AM_L_RECHERCHER);
        foreach ($mes_vars as $key=>$value) {
                if (isset($_POST[$value])) {
                        $default[$value] = $_POST[$value] ;
                }
        }
        $formulaire->setDefaults($_POST);

    $ret .= '<br />'.$formulaire->toHTML();

    
    // La liste des lettres de l'alphabet
    for ($i = 65 ; $i <91 ; $i++) {
        $GLOBALS['ins_url']->addQueryString('lettre', chr($i)) ;
        $ret .= "\t<a href=\"".$GLOBALS['ins_url']->getURL();
        $ret .= '">';
        $ret .= chr($i) ;
        $ret .= "</a> \n";
        }
        $GLOBALS['ins_url']->addQueryString ('lettre', 'tous') ;
        $ret .= " <a href=\"".$GLOBALS['ins_url']->getURL().'">'.AM_L_TOUS."</a>\n" ;
    $ret .= "</div>\n" ;
    
    // Comptage du nombre total de données dans la table (hors CACHER = 1)
    $requete_nbre_inscrit = "select count(*) as CPT from ".INS_ANNUAIRE;
    $resultat_nbre_inscrit = $GLOBALS['ins_db']->query($requete_nbre_inscrit) ;
    if ($resultat_nbre_inscrit->numRows() == 1) {
        $tmp_nb = $resultat_nbre_inscrit->fetchRow(DB_FETCHMODE_OBJECT);
        $nbr_total = $tmp_nb->CPT;
        $chaine = " sur $nbr_total entrées";
        if ($nbr_total <= 0) $ret .= "<B>Erreur</B> lors du comptage des structures ($nbr_total trouvées) : $requete_nbre_inscrit";
    }
  else $ret .=  "<B>Erreur</B> lors du comptage des structures : $requete_nbre_inscrit";
  // fin comptage
  
    $ret .= '<p class="zone_info">'.$nbr_final.' résultat(s)'.$chaine.'</p>' ;
    $GLOBALS['ins_url']->removeQueryString('lettre') ;
    
    // Menu Ajouter un inscrit
    $GLOBALS['ins_url']->addQueryString('ajouter', '1') ;
    $ret .= '<div><a href="'.$GLOBALS['ins_url']->getURL().'">'.INS_AJOUT_MEMBRE.'</a></div>'."\n";
        $data  = $pager->getPageData();
        
        $table = new HTML_Table(array ('class' => 'table_bazar')) ;
        if (defined('INS_CHAMPS_VILLE')) {
                $table->addRow(array(
                        '<a href="'.$GLOBALS['ins_url']->getURL().'&amp;sort='.INS_CHAMPS_NOM.'">Identit&eacute;</a>',
                        '<a href="'.$GLOBALS['ins_url']->getURL().'&amp;sort='.INS_CHAMPS_MAIL.'">Adresse mail</a>',
                        '<a href="'.$GLOBALS['ins_url']->getURL().'&amp;sort='.INS_CHAMPS_VILLE.'">'.AM_L_VILLE.'</a>',
                        'Pays ou Dpt (fr)'      
                        ), '', 'TH') ;
        } else {
                $table->addRow(array(
                        '<a href="'.$GLOBALS['ins_url']->getURL().'&amp;sort='.INS_CHAMPS_NOM.'">Identit&eacute;</a>',
                        '<a href="'.$GLOBALS['ins_url']->getURL().'&amp;sort='.INS_CHAMPS_MAIL.'">Adresse mail</a>',                    
                        'Pays ou Dpt (fr)'      
                        ), '', 'TH') ;
        }
        
        $debut = isset($_REQUEST['pageID']) ? $_REQUEST['pageID'] : 1 ; 
        for ($i = ($debut - 1) * $_REQUEST['setPerPage']; 
                                $i < $_REQUEST['setPerPage'] * $debut;
                                $i++) {
                // On teste s'il y une valeur, si oui on ajoute la ligne
                if (isset ($data[$i])) {
                        $urlPop = $GLOBALS['ins_url']->getURL().'&amp;'.INS_CHAMPS_ID.'='.$data[$i][INS_CHAMPS_ID];
                        if (defined('INS_CHAMPS_VILLE')) {
                                $ligne_inscrit = array ("<a href=\"$urlPop\">".$data[$i][INS_CHAMPS_NOM].' '.$data[$i][INS_CHAMPS_PRENOM].
                                                                '</a>', $data[$i][INS_CHAMPS_MAIL], $data[$i][INS_CHAMPS_VILLE]) ;
                        } else {
                                $ligne_inscrit = array ("<a href=\"$urlPop\">".$data[$i][INS_CHAMPS_NOM].' '.$data[$i][INS_CHAMPS_PRENOM].
                                                                '</a>', $data[$i][INS_CHAMPS_MAIL]) ;
                        }
                                                                
                        // Pour la france on met le département, sinon on laisse le nom du pays
                        if ($data[$i][INS_CHAMPS_PAYS] != 'fr') {
                                array_push ($ligne_inscrit, $data[$i][INS_CHAMPS_LABEL_PAYS]);
                        } else {
                                if (defined('INS_CHAMPS_NOM_DEPARTEMENT')) {
                                $req_dpt = 'select '.INS_CHAMPS_NOM_DEPARTEMENT.' from '.INS_TABLE_DPT.",".INS_ANNUAIRE.
                                                                " where ".INS_ANNUAIRE.'.'.INS_CHAMPS_ID.'='.$data[$i][INS_CHAMPS_ID] ;
                                $req_dpt .= " and ".INS_ANNUAIRE.'.'.INS_CHAMPS_DEPARTEMENT.'='.INS_TABLE_DPT.'.'
                                                                        .INS_CHAMPS_ID_DEPARTEMENT ;
                                $resultat_dpt = $GLOBALS['ins_db']->query($req_dpt) ;
                                if (DB::isError($resultat_dpt)) {
                                        echo $resultat_dpt->getMessage().$resultat_dpt->getDebugInfo();                         
                                }
                                $ligne_dpt = $resultat_dpt->fetchRow(DB_FETCHMODE_ASSOC) ;
                                        array_push ($ligne_inscrit, $ligne_dpt[INS_CHAMPS_NOM_DEPARTEMENT]) ;
                                }
                        }
                        
                        $table->addRow($ligne_inscrit) ;
                }
        }
        $ret .= $table->toHTML();
        $links = $pager->getLinks();
        $ret .= $links['all'] ;

    $ret .= '<div><a href="'.$GLOBALS['ins_url']->getURL().'&amp;action='.ANN_MAIL_TOUS
                        .'">'.AM_L_MAIL_SELECTION."</a></div>\n" ;
 
    return $ret;
}


function mkquery()
{
    
        // Requete sur l'annuaire pour extraire le nom, prénom, ville, nom du département (jointure),
        // l'état de la cotisation (jointure) 
        
        // le tableau suivant contient tous les champs de la table annuaire_tela sur lesquels on peut effectuer une recherche
        if (defined('INS_CHAMPS_DEPARTEMENT')) {
                $fields_annu = array("nom" => INS_CHAMPS_NOM, "prenom" => INS_CHAMPS_PRENOM , "mail" => INS_CHAMPS_MAIL ,
                "dept" => INS_CHAMPS_DEPARTEMENT, "pays" => INS_CHAMPS_PAYS ) ;
        }
        else {
                $fields_annu = array("nom" => INS_CHAMPS_NOM, "prenom" => INS_CHAMPS_PRENOM , "mail" => INS_CHAMPS_MAIL ,
                 "pays" => INS_CHAMPS_PAYS ) ;
        }
        if (defined('INS_CHAMPS_VILLE')) $fields_annu["ville"]=INS_CHAMPS_VILLE;
    $mes_vars = array ("recherche", "nom", "ville", "mail" ,"dept", "prenom", "pays", "sort", "T_REPONSE", "lettre", "statut") ;

        $queries = "SELECT ".INS_ANNUAIRE.".*" ;
    $queries .= ", ".INS_TABLE_PAYS.'.'.INS_CHAMPS_LABEL_PAYS ;
        $queries .= " FROM ".INS_ANNUAIRE ;
    $queries .= ",".INS_TABLE_PAYS ;
 
        // Construction en fonction des champs saisies
 
        // juste le champs "rechercher", on regarde partout
        
        $where = ' WHERE ' ;
    if (isset ($_REQUEST['recherche']) && $_REQUEST['recherche'] != "") {
        $where .= '('.INS_CHAMPS_NOM.' like "%'.$_REQUEST['recherche'].'%"' ; // le premier
        foreach($fields_annu as $key=>$value) {
                        if ($key == "nom" || $key == 'dept') continue ;
            $where .= ($key == "pays" ? 
                $_REQUEST['pays'] == "tous" ? ")" :
                ") and $value = '".$_REQUEST['pays']."'" : ' or '.$value.' like "%'.$_REQUEST['recherche'].'%"') ;      // les autres
        }
        if (isset ($_REQUEST['dept']) && $_REQUEST['dept'] != 'tous') {
                $where .= 'and '.INS_CHAMPS_DEPARTEMENT.'="'.$_REQUEST['dept'].'"' ;    
        }       
        } else {

                // si un ou plusieurs autres champs ont été indiqué, on les rajoute ici

                $or_flag = false ;
                foreach($fields_annu as $key=>$valeur) {
            if ($key != "") {
                if ($key == "pays") {
                    if (!isset($_REQUEST[$key]) || $_REQUEST[$key] == "tous") {
                        $where .= ' '.INS_CHAMPS_PAYS." like '%'"." and ";
                    } else {
                        $where .= " $valeur like \"%".$_REQUEST[$key]."%\""." and " ;
                    }
                } else {
                    if ($key == "dept") {
                        if (isset($_REQUEST[$key]) && $_REQUEST[$key] != "tous") {
                            $where .= " and ".INS_CHAMPS_DEPARTEMENT."=".$_REQUEST[$key] ;
                            if ($fields_annu["pays"] != "fr") $where .= " and ".INS_CHAMPS_PAYS."=\"fr\"" ;
                        }
                        
                    } else {
                        if (isset ($_REQUEST[$key]) && $or_flag) {
                                $where .= "$valeur like \"%".$_REQUEST[$key]."%\" and " ; ;
                        } else {
                                $where .= "$valeur like \"%%\" and " ; ;
                        }                        
                    }
                }
                $or_flag = true ;
            }
                }
                $where = substr($where, 0, strlen($where)-5);
                // ici le cas ou rien n'a été saisie du tout, on affiche tout
                if (!$or_flag) {
                                $where .= INS_CHAMPS_NOM." like '%')" ;
                }
        }

    if (isset($_REQUEST['lettre'])) {
        if ($_REQUEST['lettre'] == 'tous') $_REQUEST['lettre'] = '';
        $where = ' WHERE '.INS_CHAMPS_NOM.' LIKE "'.$_REQUEST['lettre'].'%"' ;
    }
    $where .= " and ".INS_ANNUAIRE.".".INS_CHAMPS_PAYS."=".INS_TABLE_PAYS.".".INS_CHAMPS_ID_PAYS."" ;

    if (isset($nom) && $nom != "") $where .= " and ".INS_CHAMPS_NOM." like \"%$nom%\"" ;
    if (isset($_REQUEST['prenom']) && $_REQUEST['prenom'] != "") 
                                $where .= " and ".INS_CHAMPS_PRENOM.' like "%'.$_REQUEST['prenom'].'%"' ;
    if (isset($ville) && $ville != "") $where .= " and ".INS_CHAMPS_VILLE." like \"%$ville%\"" ;
    if (isset($mail) && $mail != "") $where .= " and ".INS_CHAMPS_MAIL." like \"%$mail%\"" ;
    $where .= ' and  gip_id_i18n like "%'.$GLOBALS['lang'].'%"' ;

        if (isset ($_REQUEST['lettre']) && $_REQUEST['lettre'] == "tous") $_REQUEST['lettre'] = "" ;
    if (!isset ($_REQUEST['lettre'])) $_REQUEST['lettre'] = '' ;
        

    $queries .= $where.' AND '.INS_CHAMPS_ID.'!=0';
    
  if (isset($_REQUEST['sort']) && $_REQUEST['sort'] != "") $queries .= ' order by '.$_REQUEST['sort'] ;
  return $queries;
}
  

function ajouterInscrit() {
        $res = '';
        $GLOBALS['ins_url']->addQueryString ('ajouter', '1');
        $GLOBALS['ins_url']->addQueryString ('ajouter_v', '1');
        $formulaire = new HTML_formulaireInscription('inscription',  '', 
                                                str_replace ('&amp;', '&', $GLOBALS['ins_url']->getURL()), '', '') ;
        $formulaire->construitFormulaire(str_replace ('&amp;', '&', $GLOBALS['ins_url']->getURL())) ;
        
        if (isset($_REQUEST['ajouter_v'])) {
                if ($formulaire->validate()) {
                        $id_utilisateur = insertion($formulaire->getSubmitValues()) ;
                        
                        // Appel des actions desinscriptions des applications clientes
                        $d = dir(GEN_CHEMIN_CLIENT);
                                while (false !== ($repertoire = $d->read())) {
                                        if (file_exists(GEN_CHEMIN_CLIENT.$repertoire.GEN_SEP.$repertoire.'.inscription.inc.php'))
                                        include_once GEN_CHEMIN_CLIENT.$repertoire.GEN_SEP.$repertoire.'.inscription.inc.php' ;   
                                }
                                        $d->close();
                        if (INS_CHAMPS_LETTRE != '' && isset ($valeurs['lettre'])) {
                                inscription_lettre(INS_MAIL_INSCRIPTION_LISTE) ;
                        }
                    return mkengine();
        } 
        }
        return $formulaire->toHTML();   
}
?>