Ignore:
Timestamp:
May 25, 2011, 5:22:29 PM (10 years ago)
Author:
esj@…
Message:

Associaspip Réécriture de la mise à jour qui interface Associaspip à Coordonnées, car c'était trop lent.
Pour accélerer un peu, on pré-alloue des tableaux qu'on modifie a minima à chaque itération, plutôt que de les ré-allouer à chaque fois, notamment en pasant à travers set_request.
On demande aussi à SQL de calculer le nombre de transferts à faire plutôt que d'incrémenter des compteurs en PHP (l'information finale n'est pas tout à fait juste du coup, mais c'était déjà le cas avant faute de vérifier que l'insertion a réussi).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/Association/Associaspip/base/association_gestion.php

    r48001 r48106  
    293293        if (!_request('valider_association_maj_coordonnees')) {
    294294                /* 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 <> ''");
     295                $adresse = sql_countsel('spip_asso_membres', "adresse <> '' OR code_postal <> '' OR ville <> ''");
     296                $telephone = sql_countsel('spip_asso_membres', "telephone <> '' OR mobile <> ''");
    296297
    297298                /* si on n'a pas de donnees a sauvegarder, on fait la mise a jour sans poser de question */
    298                 if (!$presence_donnees) {
     299                if (! ($adresse AND $telephone)) {
    299300                        $effectuer_maj = true;
    300301                } else { /* on a des donnees, demander a l'utilisateur ce qu'il veut en faire */
     302                        echo '<form method="post" action="">';
    301303                        echo '<fieldset><p>'._T('asso:maj_coordonnees_intro').'</p>';
    302                         echo '<form method="post">';
    303304                        /* on commence par determiner si le plugin Coordonnees est installe */
    304305                        include_spip('inc/plugin');
     
    311312                                echo '<input type="radio" name="association_maj_coordonnees_traitement_data" value="ignorer">'._T('asso:maj_coordonnees_ignorer').'</input><br/>';
    312313                                echo '<input type="radio" name="association_maj_coordonnees_traitement_data" value="merge" checked="checked">'._T('asso:maj_coordonnees_merge').'</input>';
     314                                echo "\n<input type='hidden' name='association_maj_adresses' value='$adresse' />";
     315                                echo "\n<input type='hidden' name='association_maj_telephones' value='$telephone' />";
    313316                        }
    314317                        echo '<p><input type="submit" name="valider_association_maj_coordonnees" value="'._T('asso:effectuer_la_maj').'"/></p>';
     318                        echo '<p>'._T('asso:maj_coordonnees_notes').'</p></fieldset>';
    315319                        echo '</form>';
    316                         echo '<p>'._T('asso:maj_coordonnees_notes').'</p></fieldset>';
    317320                }
    318         } else { /* l'utilisateur veut effectuer la maj, on controlle si il y a des precision quand a l'ecrasement de donnees existentes */
     321        } else { /* l'utilisateur veut effectuer la maj, on controle si il y a des precision quand a l'ecrasement de donnees existentes */
    319322                        $choix_donnees = _request('association_maj_coordonnees_traitement_data');
    320323                        if ($choix_donnees == "merge") { /* on integre les donnees d'association dans Coordonnees */
    321324                                include_spip('action/editer_numero');
    322325                                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 <> ''");
     326
     327                                /* pre-remplissage pour les fonctions insert_numero et insert_adresse de Coordonnees */
     328                                $liens = array('objet' => 'auteur');
     329                                $telephone = array('titre' => 'telephone');
     330                                $mobile = array('titre' => 'mobile');
     331
     332                                /* On recupere les coordonnees utiles */
     333                                $coordonnees_membres = sql_select('id_auteur, adresse AS voie, code_postal, ville, telephone, mobile', 'spip_asso_membres', "adresse <> '' OR mobile <> '' OR code_postal <> '' OR ville <> '' OR telephone <> ''");
    330334                                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 */
     335                                        $liens['id_objet'] = $data['id_auteur'];
     336                                        unset($data['id_auteur']);
     337
     338                                        /* si on a un numero de telephone */
     339                                        if ($telephone['numero'] = $data['telephone']) {
     340                                                if ($id_numero =  insert_numero($liens)) revisions_numeros($id_numero, $telephone);
     341                                        }
     342                                        unset($data['telephone']);
     343
     344                                        /* si on a un numero de mobile */
     345                                        if ($mobile['numero'] = $data['mobile']) {
     346                                                if ($id_numero = insert_numero($liens)) revisions_numeros($id_numero, $mobile);
     347                                        }
     348                                        unset($data['mobile']);
    332349
    333350                                        /* 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++;
     351                                        if ($data['voie'] OR $data['code_postal'] OR $data['ville']) {
     352                                                if ($id_adresse = insert_adresse($liens)) revisions_adresses($id_adresse, $data);
    353353                                        }
    354354                                }
    355                                 echo "<fieldset><p>".$nbr_adresses._T('asso:maj_coordonnees_adresses_inserees').'<br/>'.$nbr_numeros._T('asso:maj_coordonnees_numeros_inseres')."</p></fieldset>";
     355                                echo "\n<fieldset>", intval(_request('association_maj_adresses')), _T('asso:maj_coordonnees_adresses_inserees'),
     356                                  '<br/>', intval(_request('association_maj_telephones')), _T('asso:maj_coordonnees_numeros_inseres'), "\n</fieldset>";
    356357                        }
    357358
Note: See TracChangeset for help on using the changeset viewer.