//Autres auteurs : *@copyright Outils-reseaux 2006-2040 *@version 05 avril 2006 // +-----------------------------------------------------------------------------------------------+ // // $Id$ // FICHIER : $RCSfile$ // AUTEUR : $Author$ // VERSION : $Revision$ // DATE : $Date$ */ include_once 'inscription.fonct.wiki.php' ; if (INS_UTILISE_SPIP) include_once 'inscription.fonct.spip.php' ; /** function inscription_onglets() Affiche les onglets de présentation de la structure * * * * @return string HTML */ function inscription_onglets() { //on trouve l'id de la fiche en fonction de l'onglet choisi auparavant if (isset($_GET['voir_fiche'])) { $id_fiche=$_GET['voir_fiche']; } elseif (isset($_GET['voir_abonnement'])) { $id_fiche=$_GET['voir_abonnement']; } elseif (isset($_GET['voir_actus'])) { $id_fiche=$_GET['voir_actus']; } elseif (isset($_GET['voir_ressources'])) { $id_fiche=$_GET['voir_ressources']; } elseif (isset($_GET['voir_competences'])) { $id_fiche=$_GET['voir_competences']; } else { $id_fiche = ''; } //preparation de l'affichage des onglets $res=''."\n"; return $res; } /** function affiche_onglet_info() sélectionne le type d'information à montrer pour une fiche * * * * @return string HTML */ function affiche_onglet_info() { include_once INS_CHEMIN_APPLI.'bibliotheque/inscription.fonct.php'; include_once INS_CHEMIN_APPLI.'bibliotheque/inscription.class.php'; if ( isset($_GET['voir_fiche']) ) { $res=info($_GET['voir_fiche'], 'fiche'); } elseif (isset($_GET['voir_abonnement'])) { $res=info($_GET['voir_abonnement'], 'abonnement'); } elseif (isset($_GET['voir_actus'])) { $res=info($_GET['voir_actus'], 'actus'); } elseif (isset($_GET['voir_ressources'])) { $res=info($_GET['voir_ressources'], 'ressources'); } elseif (isset($_GET['voir_competences'])) { $res=info($_GET['voir_competences'], 'competences'); } return $res; } /** function Annuaire_recherche () Moteur de recherche dans l'annuaire des inscrits * * * * @return string HTML */ function Annuaire_recherche() { $res ='

'.INS_RECHERCHE_ANNUAIRE_DES_INSCRITS.'

'."\n"; $form =& new HTML_QuickForm('form_recherche_annuaire', 'post', str_replace('&', '&', $GLOBALS['ins_url']->getURL())); $squelette =& $form->defaultRenderer(); $squelette->setFormTemplate("\n".''."\n".''."\n".'{content}'."\n".'
'."\n".''."\n"); $squelette->setElementTemplate( ''."\n". '{label}'. '*'."\n". '{error}'."\n". ' : '."\n". '{element}'."\n". ''."\n" ); $squelette->setElementTemplate( ''."\n".'{label}{element}'."\n".''."\n", 'bouton_rechercher'); $option_type=array ('0' => INS_PERSONNES_OU_STRUCTURES, '1' => INS_PERSONNES, '2' => INS_STRUCTURES); $form->addElement('select', 'nom_type', INS_JE_RECHERCHE, $option_type); //requete pour recuperer la liste des pays $requete = 'SELECT '.INS_CHAMPS_ID_PAYS.', '.INS_CHAMPS_LABEL_PAYS.' FROM '.INS_TABLE_PAYS.' WHERE '.INS_CHAMPS_I18N_PAYS.'="fr-FR"'; $resultat = $GLOBALS['ins_db']->query($requete) ; if (DB::isError($resultat)) { die ("Echec de la requete : $requete
".$resultat->getMessage()) ; } $option_pays = array('zz' => INS_TOUS_PAYS) ; while ($ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC)) { $option_pays[$ligne[INS_CHAMPS_ID_PAYS]] = $ligne[INS_CHAMPS_LABEL_PAYS] ; } $form->addElement('select', 'nom_pays', INS_PAYS, $option_pays); //requete pour recuperer la liste des départements $requete = 'SELECT '.INS_CHAMPS_ID_DEPARTEMENT.', '.INS_CHAMPS_NOM_DEPARTEMENT.' FROM '.INS_TABLE_DPT; $resultat = $GLOBALS['ins_db']->query($requete) ; if (DB::isError($resultat)) { die ("Echec de la requete : $requete
".$resultat->getMessage()) ; } $option_departements = array('0' => INS_TOUS_DEPARTEMENTS) ; while ($ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC)) { $option_departements[$ligne[INS_CHAMPS_ID_DEPARTEMENT]] = $ligne[INS_CHAMPS_NOM_DEPARTEMENT] ; } $form->addElement('select', 'nom_departement', INS_DEPARTEMENT_POUR_LA_FRANCE, $option_departements); $form->addElement('text', 'nom_annuaire', INS_NOM_ANNUAIRE); $form->addElement('submit', 'bouton_rechercher', INS_RECHERCHER); //valeurs par defaut $defauts=array('nom_pays'=>'fr','nom_departement'=>'0'); $form->setDefaults($defauts); //affichage du formulaire $res .=$form->toHtml(); //on teste si l'on affiche le resultat de la recherche ou if (isset($_POST['nom_type'])) { $requete = 'SELECT '.INS_CHAMPS_ID.', '.INS_CHAMPS_NOM.', '.INS_CHAMPS_PRENOM.', '.INS_CHAMPS_VILLE.', '.INS_CHAMPS_CODE_POSTAL; $requete .= ' FROM '.INS_ANNUAIRE.' WHERE '; $req_where=0; if ($_POST['nom_type']==1) { $requete .= INS_CHAMPS_EST_STRUCTURE.'=0 '; $req_where=1; } elseif ($_POST['nom_type']==2) { $requete .= INS_CHAMPS_EST_STRUCTURE.'=1 '; $req_where=1; } if ($_POST['nom_pays']!='0'and$_POST['nom_pays']!='zz') { if ($req_where) { $requete .= 'AND '; } else { $req_where=1; } $requete .= INS_CHAMPS_PAYS.'="'.$_POST['nom_pays'].'" '; } if ($_POST['nom_departement']!='0') { if ($req_where) { $requete .= 'AND '; } else { $req_where=1; } $requete .= INS_CHAMPS_DEPARTEMENT.'="'.$_POST['nom_departement'].'" '; } if ($_POST['nom_annuaire']!='') { if ($req_where) { $requete .= 'AND '; } else { $req_where=1; } $requete .= '('.INS_CHAMPS_NOM.' LIKE "%'.$_POST['nom_annuaire'].'%"'. ' OR '.INS_CHAMPS_PRENOM.' LIKE "%'.$_POST['nom_annuaire'].'%"'. ' OR '.INS_CHAMPS_SIGLE_STRUCTURE.' LIKE "%'.$_POST['nom_annuaire'].'%"'. ' OR '.INS_CHAMPS_DESCRIPTION.' LIKE "%'.$_POST['nom_annuaire'].'%") '; } if (!$req_where) $requete .= '1'; $requete .=' ORDER BY '.INS_CHAMPS_NOM; $resultat = $GLOBALS['ins_db']->query($requete); if ($resultat->numRows()>0) { $res .='

'.INS_RESULTATS_RECHERCHE.' ('.$resultat->numRows().' '.INS_ENTREES.')

'."\n"; $res .='

'.INS_CLIQUER_ELEMENT_LISTE.'

'."\n"; $i=0; while ($ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC)) { $donnees_membres[$i++]=$ligne; } $res .= listes_inscrit($donnees_membres); } else { $res .='

'.INS_RESULTATS_RECHERCHE.'

'."\n"; $res .= '

'.INS_PAS_DE_RESULTATS.'

'."\n"; } } else { $res .='

'.INS_DIX_DERNIERES_INSCRIPTIONS.'

'."\n"; $requete = 'SELECT '.INS_CHAMPS_ID.', '.INS_CHAMPS_NOM.', '.INS_CHAMPS_PRENOM.', '.INS_CHAMPS_VILLE.', '.INS_CHAMPS_CODE_POSTAL; $requete .= ' FROM '.INS_ANNUAIRE.' ORDER BY '.INS_CHAMPS_DATE.' DESC LIMIT 0 , 10'; $resultat = $GLOBALS['ins_db']->query($requete); if ($resultat->numRows()>0) { $i=0; while ($ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC)) { $donnees_membres[$i++]=$ligne; } $res .= listes_inscrit($donnees_membres, 0); } else { $res .= '

'.INS_PAS_DE_RESULTATS.'

'."\n"; } } return $res ; } /** * Renvoie le code HTML de la liste des inscrits * en fonction de la requete passé en parametre * * @return Renvoie le code HTML de la liste des inscrits */ function listes_inscrit(& $donnees_membres, $affiche_form_mail=1) { $res = ''; if ($GLOBALS['AUTH']->getAuth()&&$affiche_form_mail) {$res .= '
'."\n";} $res .= '
'."\n"; if ($id==$GLOBALS['AUTH']->getAuthData(INS_CHAMPS_ID)) { $res .= ''."\n"; $res .= ''."\n"; $res .= ''."\n"; //div fiche } //voir les abonnements presents dans les applis clientes } elseif ($type_info=='abonnement') { $res = '

'.$ligne[INS_CHAMPS_PRENOM].' '.$ligne[INS_CHAMPS_NOM].'

'."\n"; $res .= '

'.INS_GESTION_DES_ABONNEMENTS.'

'."\n" ; // Appel des actions d'abonnement des applications clientes $d = dir(GEN_CHEMIN_CLIENT); $abonnement=''; $abonnements=''; while (false !== ($repertoire = $d->read())) { if (file_exists(GEN_CHEMIN_CLIENT.$repertoire.GEN_SEP.'bibliotheque'.GEN_SEP.$repertoire.'.abonnement.inc.php')) { require_once GEN_CHEMIN_CLIENT.$repertoire.GEN_SEP.'bibliotheque'.GEN_SEP.$repertoire.'.abonnement.inc.php' ; $abonnements .= $abonnement; } } $d->close(); $res .= $abonnements; //voir les actus } elseif ($type_info=='actus') { $res = '

'.$ligne[INS_CHAMPS_PRENOM].' '.$ligne[INS_CHAMPS_NOM].'

'."\n"; $res .= '

'.INS_ACTUALITES_DEPOSEES.'

'."\n" ; require_once GEN_CHEMIN_CLIENT.'bazar'.GEN_SEP.'configuration'.GEN_SEP.'baz_config.inc.php'; require_once GEN_CHEMIN_CLIENT.'bazar'.GEN_SEP.'bibliotheque'.GEN_SEP.'bazar.fonct.rss.php'; $_GET['action']=1; $res .= RSSversHTML(gen_RSS('', '', $id, 1, ''), 0, 'jma', 0); //voir les ressources } elseif ($type_info=='ressources') { $res = '

'.$ligne[INS_CHAMPS_PRENOM].' '.$ligne[INS_CHAMPS_NOM].'

'."\n"; $res .= '

'.INS_RESSOURCES_ASSOCIEES.'

'."\n" ; $requete = 'SELECT bf_id_fiche, bf_titre FROM bazar_fiche, bazar_appropriation WHERE ba_ce_id_fiche=bf_id_fiche AND ba_ce_id_structure='.$id ; $resultat = $GLOBALS['ins_db'] -> query($requete) ; $res .= '
'."\n"; //voir les competences } elseif ($type_info=='competences') { $res = '

'.$ligne[INS_CHAMPS_PRENOM].' '.$ligne[INS_CHAMPS_NOM].'

'."\n"; $res .= '

'.INS_COMPETENCES_ASSOCIEES.'

'."\n" ; } return $res ; } /** inscription_ligne() - Renvoie une ligne avec label et valeur * * @param string label Le label * @param string valeur * @return string HTML */ function inscription_ligne($label, $valeur) { if ($valeur == '') { return; } if (($label == '')or($label == ' ')) { return '
'.$valeur.'
'."\n"; } else { return '
'."\n".$label.' : '.$valeur.'
'."\n"; } } /** Renvoie vrai si l'email passé en paramètre n'est pas déjà dans l'annuaire * ou si, en cas de modification d'inscription, l'inscrit ne modifie pas son email * * @return boolean */ function inscription_verif_doublonMail($mail, $id = '') { if ($id == '') { if (isset ($GLOBALS['AUTH'])) { $id = $GLOBALS['AUTH']->getAuthData(INS_CHAMPS_ID) ; } } if (isset ($id) && $id != '') { $requete_mail = "select ".INS_CHAMPS_MAIL." from ".INS_ANNUAIRE." where ". INS_CHAMPS_ID."=".$id ; $resultat_mail = $GLOBALS['ins_db']->query ($requete_mail) ; if (DB::isError ($resultat_mail)) { die ("Echec de la requete : $requete_mail
".$resultat_mail->getMessage()) ; } $ligne_mail = $resultat_mail->fetchRow(DB_FETCHMODE_ASSOC) ; if ($mail == $ligne_mail[INS_CHAMPS_MAIL]) { return true ; } } $requete = "select ".INS_CHAMPS_MAIL." from ".INS_ANNUAIRE." where ".INS_CHAMPS_MAIL."= \"$mail\"" ; $resultat = $GLOBALS['ins_db']->query ($requete) ; if (DB::isError ($resultat)) { die ($resultat->getMessage().'
'.$resultat->getDebugInfo()) ; } if ($resultat->numRows() == 0) return true ; return false ; } function inscription_envoie_passe() { $res=''; $requete = 'SELECT '.INS_CHAMPS_MAIL.' FROM '.INS_ANNUAIRE.' WHERE '.INS_CHAMPS_MAIL.'="'.$_POST['mail'].'"' ; $resultat = $GLOBALS['ins_db']->query($requete) ; if (DB::isError($resultat)) { die ("Echec de la requete
".$resultat->getMessage()."
".$resultat->getDebugInfo()) ; } if ($resultat->numRows() == 0) { $res .= '

'.INS_MAIL_INCONNU_DANS_ANNUAIRE.'

'."\n" ; } else { include_once PAP_CHEMIN_RACINE.'api/pear/Mail.php' ; $mail = & Mail::factory('smtp') ; $headers ['Return-Path'] = "<".INS_MAIL_ADMIN_APRES_INSCRIPTION.">" ; $headers ['From'] = "<".INS_MAIL_ADMIN_APRES_INSCRIPTION.">" ; $headers ['Subject'] = INS_MOT_DE_PASSE_CHANGE ; $headers ['Reply-To'] = "<".INS_MAIL_ADMIN_APRES_INSCRIPTION.">" ; $headers ['To'] = "<".$_POST['mail'].">" ; $nouveau_passe = create_new_random(6) ; // modification du mot de passe dans la base $requete = 'UPDATE '.INS_ANNUAIRE.' SET '.INS_CHAMPS_PASSE.'=MD5("'.$nouveau_passe.'") WHERE '.INS_CHAMPS_MAIL.'="'.$_POST['mail'].'"' ; $resultat = $GLOBALS['ins_db']->query($requete) ; if (DB::isError($resultat)) { die ("Echec de la requete
".$resultat->getMessage()."
".$resultat->getDebugInfo()) ; } $body = INS_NOUVEAU_MOT_DE_PASSE_2.$nouveau_passe ; $body .= INS_NOUVEAU_MOT_DE_PASSE_LAIUS ; $mail->send($_POST['mail'], $headers, $body) ; if (PEAR::isError($mail)) { $res .= '

'.INS_PROBLEME_ENVOI_MAIL.'

'."\n" ; return $res ; } $res .= '

'.INS_NOUVEAU_MOT_DE_PASSE_ENVOYE.'

'."\n" ; } return $res ; } /** * Inscrit un adhérent à la lettre d'actualité par l'envoie d'un email subscribe / unsubscribe * à la liste * * @global AUTH Un objet PEAR::Auth * @return boolean true en cas de succès */ function inscription_lettre($action) { include_once PAP_CHEMIN_RACINE.'api/pear/Mail.php' ; $mail = & Mail::factory ('smtp') ; $email = $GLOBALS['AUTH']->getUsername() ; $headers ['Return-Path'] = $email ; $headers ['From'] = "<".$email.">" ; $headers ['Subject'] = $action ; $headers ['Reply-To'] = $email ; $mail -> send ($action, $headers, "") ; if (PEAR::isError ($mail)) { echo '

Le mail n\'est pas parti...

' ; return false ; } return true ; } /** * * @global ins_db Un pointeur vers un objet PEAR::DB connecté * @return */ function inscription_envoie_mail() //A COMPLETER!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! { include_once PAP_CHEMIN_RACINE.'api/pear/Mail/mime.php' ; include_once PAP_CHEMIN_RACINE.'api/pear/Mail.php' ; $crlf="\n"; $headers ['From'] = INS_MAIL_ADMIN_APRES_INSCRIPTION ; $headers ['Subject'] = INS_MAIL_COORD_SUJET ; $headers ['Reply-To'] = INS_MAIL_ADMIN_APRES_INSCRIPTION ; $mime = new Mail_mime($crlf); $requete = "select *, ".INS_CHAMPS_LABEL_PAYS." from ".INS_ANNUAIRE.",".INS_TABLE_PAYS. " where ".INS_CHAMPS_MAIL."=\"".$GLOBALS['AUTH']->getUsername()."\"". " and ".INS_CHAMPS_ID_PAYS."=".INS_CHAMPS_PAYS; $resultat = $GLOBALS['ins_db']->query($requete) ; if (DB::isError ($resultat)) { die ("Echec de la requete : $requete
".$resultat->getMessage()) ; } $ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC) ; $body_entete = INS_MAIL_COORD_CORPS."\n" ; $body = "mail : ".$ligne[INS_CHAMPS_MAIL]."\n" ; $body .= "------------------------------------------\n"; $body .= INS_NOM.": ".unhtmlentities($ligne[INS_CHAMPS_NOM])." \n" ; $body .= INS_PRENOM.' : '.unhtmlentities($ligne[INS_CHAMPS_PRENOM])." \n" ; $body .= INS_PAYS." : ".unhtmlentities($ligne[INS_CHAMPS_LABEL_PAYS])." \n" ; $body .= "-------------------------------------------\n" ; $mime->setTXTBody($body); $mime->setHTMLBody(info()) ; $body = $mime->get(); $headers = $mime->headers($headers); $mail = & Mail::factory('mail') ; $mail -> send ($ligne[INS_CHAMPS_MAIL], $headers, $body) ; // Envoi du mail aux administrateur du site foreach ($GLOBALS['mail_admin'] as $administrateur) { $mail -> send ($administrateur, $headers, $body) ; } if (PEAR::isError($mail)) { echo 'erreur d\'envoi' ; return false ; } return true ; } /** * Génère un nom wiki valide à partir des données saisies par l'utilisateur * fait une requete dans la base * * @return string un nom wiki valide */ function inscription_genere_nom_wiki($prenom, $nom) { // 1. suppression des espaces $nom = trim ($nom) ; $prenom = trim ($prenom) ; // 2. suppression des caractères non ascii et ajout de la première lettre en majuscule $nom = inscription_trim_non_ascii ($nom) ; $prenom = inscription_trim_non_ascii ($prenom) ; // Vérification $nom_wiki = $prenom.$nom ; if (!preg_match('/^[A-Z][a-z]+[A-Z,0-9][A-Z,a-z,0-9]*$/', $nom_wiki)) { $nom_wiki = chr(rand(65, 90)).$nom_wiki.chr(rand(65, 90)) ; } return $nom_wiki ; } /** * Cette fonction supprime les caractères autres que asccii et les chiffres * * @return string la chaine épurée */ function inscription_trim_non_ascii ($nom) { $premiere_lettre = true ; for ($i = 0; $i < strlen ($nom); $i++) { if (!preg_match ('/[a-zA-Z0-9]/', $nom[$i])) { $nom[$i] = '_' ; } // remplacement de la première lettre en majuscule if (preg_match ('/[a-zA-Z]/', $nom[$i]) && $premiere_lettre) { $nom[$i] = strtoupper ($nom[$i]) ; $premiere_lettre = false ; } else { if (preg_match ('/[a-zA-Z]/', $nom[$i])) { $nom[$i] = strtolower ($nom[$i]) ; } } } $nom = preg_replace ('/_/', '', $nom) ; return $nom ; } // For users prior to PHP 4.3.0 you may do this: //function unhtmlentities($string) //{ // $trans_tbl = array_flip ($trans_tbl); // return strtr ($string, $trans_tbl); //} //============================================================================== /** function create_new_random($n,$type) permet de générer un nombre de caractères aléatoires. * * * * ENTREE : * - $n : créer un 'mot' de $n caractères * - $type : permet de définir la liste des caractères disponibles * * SORTIE : chaine de $n caractères pris dans une liste $type */ function create_new_random($n,$type="") { $str = ""; switch ($type){ default:{ $chaine = "abcdefghkmnpqrstuvwxyzABCDEFGHKLMNPQRSTUVWXYZ23456789"; } break; } srand((double)microtime()*1000000); for($i = 0; $i < $n; $i++){ $str .= $chaine[rand()%strlen($chaine)]; } return "$str"; } //============================================================================== /** function nextId () Renvoie le prochain identifiant numérique libre d'une table * * On passe en paramètre le nom de la table et l'identifiant de la base selon PEAR DB * * @param mixed handler de connexion * @param string Nom de la table * return interger l'identifiant */ function inscription_nextId($table, $colonne_identifiant) { $requete = 'select MAX('.$colonne_identifiant.') as maxi from '.$table ; $resultat = $GLOBALS['ins_db']->query($requete) ; if (DB::isError($resultat)) { die (__FILE__ . __LINE__ . $resultat->getMessage() . $requete); return $GLOBALS['ins_db']->raiseError($resultat) ; } if ($resultat->numRows() > 1) { return $GLOBALS['ins_db']->raiseError("
La table $table a un identifiant non unique
") ; } $ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ; return $ligne->maxi + 1 ; } //-- Fin du code source ------------------------------------------------------------ /* * $Log$ * Revision 1.8 2006/12/01 13:23:15 florian * integration annuaire backoffice * * Revision 1.7 2006/10/05 13:53:54 florian * amélioration des fichiers sql * * Revision 1.6 2006/09/13 12:31:18 florian * ménage: fichier de config Papyrus, fichiers temporaires * * Revision 1.5 2006/04/28 12:44:05 florian * integration bazar * * Revision 1.4 2006/04/11 08:39:52 alexandre_tb * correction de l'envoie de mail par la carto * * Revision 1.3 2006/04/10 14:21:51 florian * correction bug affichage formulaire de mail en double * * Revision 1.2 2006/04/10 14:15:10 florian * les cases à cocher apparaissent à nouveau * * Revision 1.1 2006/04/10 14:01:36 florian * uniformisation de l'appli bottin: plus qu'un fichier de fonctions * * */ ?>