Changeset 48001 in spip-zone


Ignore:
Timestamp:
May 22, 2011, 2:26:14 PM (10 years ago)
Author:
jeannolapin@…
Message:

Associaspip Interface avec le plugin Coordonnées pour gérer les adresses, mails (autre que celui de la table spip_auteurs) et télephones.
Au moment de l'upgrade, la fonction de MaJ demande a l'administrateur ce qu'il veut faire de ses données(éliminer ou transferer vers les tables de coordonnées). Il est tout de meme recommandé de faire une sauvegarde de la base avant d'effectuer cette mise a jour.

Location:
_plugins_/Association/Associaspip
Files:
1 added
11 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/Association/Associaspip/action/modifier_relances.php

    r47177 r48001  
    2828        $envoyer_mail = charger_fonction('envoyer_mail', 'inc');
    2929       
    30         /* on recupere les adresses emails de tous les auteurs selectionnes, a reprendre quand on pourra interfacer avec Coordonnees */
    31         $id_auteurs_list = sql_in('id_auteur', array_keys($statut_tab));
    32         $auteurs_info = sql_select('id_auteur, email', 'spip_auteurs', $id_auteurs_list);
    33        
    34         /* boucle sur tous les auteurs selectionnés */
    35         while ($auteur_info = sql_fetch($auteurs_info)) {
    36                 $id_auteur = $auteur_info['id_auteur'];
    37                 $email = $auteur_info['email'];
    38                 if (!$envoyer_mail($email, $sujet, $message, $exp)) {
    39                         spip_log("non envoi du mail a ".$email);
    40                 } elseif ($statut_tab[$id_auteur]=="echu") {
     30        /* on recupere les adresses emails de tous les auteurs selectionnes */
     31        include_spip('inc/association_coordonnees');
     32        $emails_auteurs = association_recuperer_emails(array_keys($statut_tab)); /* cette fonction renvoie un tableau auteur_id => array(emails) */
     33
     34        foreach ($emails_auteurs as $id_auteur => $emails) {
     35                foreach ($emails as $email) {
     36                        if (!$envoyer_mail($email, $sujet, $message, $exp)) {
     37                                spip_log("non envoi du mail a ".$email);
     38                        } elseif ($statut_tab[$id]=="echu") {
    4139                                sql_updateq('spip_asso_membres',
    4240                                        array("statut_interne"=> 'relance'),
    43                                             "id_auteur=$id_auteur");
     41                                        "id_auteur=$id_auteur");
    4442                        }
     43                }
    4544        }
    4645}
  • _plugins_/Association/Associaspip/association.css

    r47731 r48001  
    55td.pair { background:#DCF3F4; }
    66td.impair { background:#F0DCF4; }
     7tr.pair { background:#DCF3F4; }
     8tr.impair { background:#F0DCF4; }
    79td.valide { background:#A0FFA0; }
    810td.sortie { background:#E6EAC9; }
  • _plugins_/Association/Associaspip/association_options.php

    r47477 r48001  
    1111
    1212if (!defined("_ECRIRE_INC_VERSION")) return;
     13
     14/* tester si un plugin est actif, utilise pour l'interface optionnelle avec Coordonnees */
     15function plugin_actif($prefixe) {
     16        include_spip('inc/plugin');
     17        $liste_plugins = liste_plugin_actifs();
     18        return isset($liste_plugins[$prefixe]);
     19}
    1320
    1421// Le premier element indique un ancien membre
  • _plugins_/Association/Associaspip/base/association.php

    r47731 r48001  
    228228  "sexe" => "tinytext NOT NULL",
    229229  "fonction" => "text",
    230   "email" => "tinytext NOT NULL",
    231   "adresse" => "text NOT NULL",
    232   "code_postal" => "tinytext NOT NULL",
    233   "ville" => "text NOT NULL",
    234   "telephone" => "tinytext",
    235   "mobile" => "tinytext",
    236230  "categorie" => "text NOT NULL",
    237231  "statut_interne" => "text NOT NULL",
  • _plugins_/Association/Associaspip/base/association_gestion.php

    r47844 r48001  
    4141  // Compatibilite: le nom de la meta donnant le numero de version
    4242  // n'etait pas std puis est parti dans une autre table puis encore une autre
    43 
    4443        if (!isset($GLOBALS['association_metas']['base_version'])) {
    4544                lire_metas('asso_metas');
     
    283282
    284283$GLOBALS['association_maj'][47731] = array(array('association_maj_47731'));
     284
     285/* mise a jour integrant l'utilisation du plugin Coordonnees */
     286function association_maj_48001()
     287{
     288        global $association_tables_principales;
     289
     290        $effectuer_maj = false;
     291
     292        /* cette partie du code s'execute au premier chargement, on n'a pas encore interroge l'utilisateur sur ce qu'il veut faire de ses donnees si il en a  ou il n'a pas voulu faire la maj */
     293        if (!_request('valider_association_maj_coordonnees')) {
     294                /* on commence par verifier si des informations de la table spip_asso_membres sont potentiellement transferable vers les tables de coordonnees */
     295                $presence_donnees = sql_countsel('spip_asso_membres', "adresse <> '' OR mobile <> '' OR code_postal <> '' OR ville <> '' OR telephone <> ''");
     296
     297                /* si on n'a pas de donnees a sauvegarder, on fait la mise a jour sans poser de question */
     298                if (!$presence_donnees) {
     299                        $effectuer_maj = true;
     300                } else { /* on a des donnees, demander a l'utilisateur ce qu'il veut en faire */
     301                        echo '<fieldset><p>'._T('asso:maj_coordonnees_intro').'</p>';
     302                        echo '<form method="post">';
     303                        /* on commence par determiner si le plugin Coordonnees est installe */
     304                        include_spip('inc/plugin');
     305                        $liste_plugins = liste_plugin_actifs();
     306                        $plugin_coordonnees_actif = isset($liste_plugins['COORDONNEES']);
     307
     308                        if (!$plugin_coordonnees_actif) {/* Le plugin coordonnees n'est pas actif */
     309                                echo '<p>'._T('asso:maj_coordonnees_plugin_inactif').'</p>';
     310                        } else { /* le plugin coordonnees est actif */
     311                                echo '<input type="radio" name="association_maj_coordonnees_traitement_data" value="ignorer">'._T('asso:maj_coordonnees_ignorer').'</input><br/>';
     312                                echo '<input type="radio" name="association_maj_coordonnees_traitement_data" value="merge" checked="checked">'._T('asso:maj_coordonnees_merge').'</input>';
     313                        }
     314                        echo '<p><input type="submit" name="valider_association_maj_coordonnees" value="'._T('asso:effectuer_la_maj').'"/></p>';
     315                        echo '</form>';
     316                        echo '<p>'._T('asso:maj_coordonnees_notes').'</p></fieldset>';
     317                }
     318        } else { /* l'utilisateur veut effectuer la maj, on controlle si il y a des precision quand a l'ecrasement de donnees existentes */
     319                        $choix_donnees = _request('association_maj_coordonnees_traitement_data');
     320                        if ($choix_donnees == "merge") { /* on integre les donnees d'association dans Coordonnees */
     321                                include_spip('action/editer_numero');
     322                                include_spip('action/editer_adresse');
     323                                $nbr_adresses = 0;
     324                                $nbr_numeros = 0;
     325
     326                                set_request("objet", "auteur"); /* parceque les fonction insert_numero et insert_adresse de Coordonnees recupere par un request cette valeur pour l'insertion dans la table de liens */
     327                               
     328                                /* On recupere toutes les coordonnees */
     329                                $coordonnees_membres = sql_select('id_auteur, adresse, code_postal, ville, telephone, mobile', 'spip_asso_membres', "adresse <> '' OR mobile <> '' OR code_postal <> '' OR ville <> '' OR telephone <> ''");
     330                                while ($data = sql_fetch($coordonnees_membres)) {
     331                                        set_request("id_objet", $data['id_auteur']); /* parceque les fonction insert_numero et insert_adresse de Coordonnees recupere par un request cette valeur pour l'insertion dans la table de liens */
     332
     333                                        /* si on a une adresse, meme partielle */
     334                                        if (($data['adresse'] != '') or ($data['code_postal'] != '') or ($data['ville'] != '')) {
     335                                                $id_adresse = insert_adresse();
     336                                                if ($id_adresse) revisions_adresses($id_adresse, array("voie" => $data['adresse'], "code_postal" => $data['code_postal'], "ville" => $data['ville']));
     337                                                $nbr_adresses++;
     338                                               
     339                                        }
     340
     341                                        /* si on a un numero de telephone */
     342                                        if ($data['telephone'] != '') {
     343                                                $id_numero = insert_numero();
     344                                                if ($id_numero) revisions_numeros($id_numero, array("titre" => "telephone", "numero" => $data['telephone']));
     345                                                $nbr_numeros++;
     346                                        }
     347
     348                                        /* si on a un numero de mobile */
     349                                        if ($data['mobile'] != '') {
     350                                                $id_numero = insert_numero();
     351                                                if ($id_numero) revisions_numeros($id_numero, array("titre" => "mobile", "numero" => $data['mobile']));
     352                                                $nbr_numeros++;
     353                                        }
     354                                }
     355                                echo "<fieldset><p>".$nbr_adresses._T('asso:maj_coordonnees_adresses_inserees').'<br/>'.$nbr_numeros._T('asso:maj_coordonnees_numeros_inseres')."</p></fieldset>";
     356                        }
     357
     358                        $effectuer_maj = true;
     359        }
     360
     361        /* on effectue si besoin la mise a jour */
     362        if ($effectuer_maj) {
     363                /* on supprime les champs de la table spip_asso_membres, ils ont deja ete sauvegarde dans les tables de Coordonnees si besoin */
     364                sql_alter("TABLE spip_asso_membres DROP telephone");
     365                sql_alter("TABLE spip_asso_membres DROP mobile");
     366                sql_alter("TABLE spip_asso_membres DROP adresse");
     367                sql_alter("TABLE spip_asso_membres DROP code_postal");
     368                sql_alter("TABLE spip_asso_membres DROP ville");
     369                sql_alter("TABLE spip_asso_membres DROP email");
     370        } else { /* la mise a jour n'est pas effectuee : on le signale dans les maj_erreur pour y revenir au prochain chargement de la page de gestion des plugins */
     371                if (!$GLOBALS['association_maj_erreur']) $GLOBALS['association_maj_erreur'] = 48001;
     372        }
     373}
     374
     375$GLOBALS['association_maj'][48001] = array(array('association_maj_48001'));
    285376?>
  • _plugins_/Association/Associaspip/exec/action_relances.php

    r47144 r48001  
    2929                $url_retour=$_POST['url_retour'];
    3030               
    31                 //On récupère les données globales
     31                //On recupere les donnees globales
    3232
    33                 $sujet=$_POST['sujet'];
    34                 $message=$_POST['message'] ;
     33                $sujet = _request('sujet');
     34                $message = _request('message') ;
    3535                $id_tab=(isset($_POST["id"])) ? $_POST["id"]:array();
    3636                $statut_tab=(isset($_POST["statut"])) ? $_POST["statut"]:array();
  • _plugins_/Association/Associaspip/exec/adherents.php

    r47991 r48001  
    1313if (!defined("_ECRIRE_INC_VERSION")) return;
    1414       
     15
    1516include_spip('inc/navigation_modules');
    16 include_spip ('inc/voir_adherent'); // pour voir_adherent_infos
    1717       
    1818function exec_adherents() {
     
    146146                $critere .= " AND upper( substring( nom_famille, 1, 1 ) ) like '$lettre' ";
    147147        $chercher_logo = charger_fonction('chercher_logo', 'inc');
    148         $query = voir_adherent_infos("*", '', $critere, '', "nom_famille ", "$debut,$max_par_page" );
     148        $query = sql_select('a.id_auteur AS id_auteur, b.email AS email, a.sexe, a.nom_famille, a.prenom, a.id_asso, b.statut AS statut, a.validite, a.statut_interne, a.categorie, b.bio AS bio','spip_asso_membres' .  " a LEFT JOIN spip_auteurs b ON a.id_auteur=b.id_auteur", $critere, '', "nom_famille ", "$debut,$max_par_page" );
    149149        $auteurs = '';
    150150        while ($data = sql_fetch($query)) {     
     
    270270function adherents_table()
    271271{
    272   $champs = $GLOBALS['association_tables_principales']['spip_asso_membres']['field'];
    273   $res = '';
    274   foreach ($champs as $k => $v) {
    275     $libelle = 'adherent_libelle_' . $k;
    276     $trad = _T('asso:' . $libelle);
    277     if ($libelle != str_replace(' ', '_', $trad)) {
    278       $res .= "<input type='checkbox' name='champs[$k]' />$trad<br />";
    279     }
    280   }
    281   return  generer_form_ecrire('pdf_adherents', $res, '', _T('asso:bouton_impression'));
    282 }
    283 
     272        $champs = $GLOBALS['association_tables_principales']['spip_asso_membres']['field'];
     273        $res = '';
     274        foreach ($champs as $k => $v) {
     275                if (!(($GLOBALS['association_metas']['civilite']!="on" && $k == 'sexe') OR ($GLOBALS['association_metas']['prenom']!="on" && $k == 'prenom') OR ($GLOBALS['association_metas']['id_asso']!="on" && $k == 'id_asso'))) {
     276                        $libelle = 'adherent_libelle_' . $k;
     277                        $trad = _T('asso:' . $libelle);
     278                        if ($libelle != str_replace(' ', '_', $trad)) {
     279                                $res .= "<input type='checkbox' name='champs[$k]' />$trad<br />";
     280                        }
     281                }
     282        }
     283        /* on ajoute aussi le mail */
     284        $res .= "<input type='checkbox' name='champs[email]' />"._T('asso:email')."<br />";
     285
     286        /* si le plugin coordonnees est actif, on ajoute l'adresse et le telephone */
     287/*      if (plugin_actif('COORDONNEES')) {
     288                $res .= "<input type='checkbox' name='champs[adresse]' />"._T('asso:adresse')."<br />";
     289                $res .= "<input type='checkbox' name='champs[telephone]' />"._T('asso:telephone')."<br />";
     290        }
     291*/
     292        /* on fait suivre le statut interne */
     293        $res .= "<input type='hidden' name='statut_interne' value='"._request('statut_interne')."'/>";
     294
     295        return  generer_form_ecrire('pdf_adherents', $res, '', _T('asso:bouton_impression'));
     296}
    284297?>
  • _plugins_/Association/Associaspip/exec/pdf_adherents.php

    r47177 r48001  
    3838          }
    3939        }
     40        // ainsi que les colonnes pour les champs hors table spip_asso_membres
     41        if ($sent['email']=='on') $pdf->AddCol('email',45 ,_T('asso:adherent_libelle_email'), 'C');
     42//      if ($sent['adresse']=='on') $pdf->AddCol('adresse',45 ,_T('asso:adherent_libelle_adresse'), 'L');
     43//      if ($sent['telephone']=='on') $pdf->AddCol('telephone',20 ,_T('asso:adherent_libelle_telephone'), 'C');
     44
    4045        $prop=array(
    4146                'HeaderColor'=>array(255,150,100),
     
    4449                'padding'=>2
    4550        );
    46         $order = 'id_auteur';
     51        $order = 'm.id_auteur';
    4752        if ($sent['nom_famille']=='on')
    48           $order = 'nom_famille' . ",$order";
    49         $pdf->Query(sql_select('*','spip_asso_membres', request_statut_interne(), '', $order), $prop);
     53          $order = 'm.nom_famille' . ",$order";
     54//* A FAIRE : AJOUTER LE MAIL, ADRESSE, TELEPHONE DANS LA QUERY ou trouver un autre moyen
     55        $pdf->Query(sql_select('*','spip_asso_membres as m INNER JOIN spip_auteurs as a ON m.id_auteur=a.id_auteur', request_statut_interne(), '', $order), $prop);
    5056        $pdf->Output();
    5157        }
  • _plugins_/Association/Associaspip/inc/voir_adherent.php

    r47991 r48001  
    118118}
    119119
    120 /* Cette fonction permet entre autres de recuperer tous les membres qui ont un email dans la table spip_auteurs, a reprendre lors de l'interfacage avec Coordonnees car les emails peuvent alors etre uniquement dans spip_emails
    121  et ils peuvent etre plusieurs, il faudrait peut etre laisser la possibilite de choisir ou prendre la/les adresses email qui sont de toute facon recuperes dans action/modifier_relances.php, le JOIN sur la
    122 table spip_auteurs permet d'afficher uniquement les membres qui ont un email dans cette table */
    123 
    124 function voir_adherent_infos($sel='*', $from='', $where='', $group='', $order='', $limit='')
    125 {
    126   return sql_select($sel,"spip_asso_membres AS A  LEFT JOIN spip_auteurs AS B ON A.id_auteur=B.id_auteur $from",  $where, $group, $order, $limit);
    127 }
    128120?>
  • _plugins_/Association/Associaspip/lang/asso_fr.php

    r47501 r48001  
    493493                        'erreur_operation_non_permise_sur_ce_compte' => 'Ce compte n\'accepte qu\'un seul type d\'op&eacute;rations (recette ou d&eacute;pense) et ne correspond pas a celle que vous avez rentr&eacute;',
    494494                        'erreur_montant' => 'Les valeurs n&eacute;gatives ne sont pas autoris&eacute;es',
     495
     496        # MaJ integration de coodonnees
     497                        'effectuer_la_maj' => 'Effectuer la mise &agrave; jour maintenant',
     498                        'maj_coordonnees_notes' => 'Notes&nbsp;:<ul><li>Si vous choissisez de ne pas effectuer la mise &agrave; jour, ce choix vous sera propos&eacute; &agrave; chaque chargement de la page de gestion des plugins.</li><li>Ne pas tenir compte du message Echec au bas de ce cadre.</li><li>Vous pouvez ignorer ce message et g&eacute;rer les autres plugins normalement, la mise &agrave; jour ne sera alors pas effectu&eacute;e(et ce message continuera donc &agrave; apparaitre).</li><li>Le champ email de la table spip_asso_membres est normalement vide - cette information &eacute;tant contenue dans la table spip_auteurs - il sera &eacute;limin&eacute; sans sauvegarde.</li>',
     499                        'maj_coordonnees_intro' => 'Vous vous appretez &agrave; effectuer une mise &agrave; jour du plugin Association basculant la gestion des adresses et t&eacute;l&eacute;phones vers le plugin Coordonn&eacute;es. A l\'issu de cette M&agrave;j, les champs correspondants &agrave; ces donn&eacute;es seront supprim&eacute;s des tables du plugin Association.<br/><strong>Ca pourrait etre une bonne id&eacute;e de faire une sauvegarde de votre base de donn&eacute;es avant de continuer (au minimum des tables spip_asso_membres ainsi que spip_adresses, spip_adresses_liens, spip_numeros et spip_numeros_liens si elles sont pr&eacute;sentes)</strong>',
     500                        'maj_coordonnees_plugin_inactif' => 'Le plugin Coordonn&eacute;es n\'est pas actif sur votre installation, les donn&eacute;es d\'adresses et t&eacute;l&eacute;phones pr&eacute;sentes dans les tables du plugin Association seront perdues si vous effectuez la mise &agrave; jour maintenant. Pour les conserver, veuillez installer et activer le plugin Coordonn&eacute;es.',
     501                        'maj_coordonnees_ignorer' => 'Ignorer les donn&eacute;es contenues dans les tables du plugin Association',
     502                        'maj_coordonnees_merge' => 'Combiner les donn&eacute;es d\'Association et Coordonn&eacute;es. Les donn&eacute;es pr&eacute;sentes dans Association sont ajout&eacute;es aux tables de Coordonn&eacute;es(ce qui peut provoquer des doublons ! )',
     503                        'maj_coordonnees_adresses_inserees' => ' adresse(s) ins&eacute;r&eacute;e(s) dans la base de Coordonn&eacute;es.',
     504                        'maj_coordonnees_numeros_inseres' => ' num&eacute;ro(s) ins&eacute;r&eacute;(s) dans la base de Coordonn&eacute;es.',
    495505                        // chaines collectee automatiquement
    496506
  • _plugins_/Association/Associaspip/plugin.xml

    r47731 r48001  
    66        </auteur>
    77        <version>2.1.0</version>
    8         <version_base>47731</version_base>
     8        <version_base>48001</version_base>
    99        <meta>association_metas</meta>
    1010        <etat>dev</etat>
Note: See TracChangeset for help on using the changeset viewer.