Changeset 41728 in spip-zone


Ignore:
Timestamp:
Oct 13, 2010, 4:20:13 PM (9 years ago)
Author:
paladin@…
Message:

refonte import. INSERT par paquet. Idem pour UPDATE des formats.

Location:
_plugins_/spip-listes/spip-listes_1_9_3
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/spip-listes/spip-listes_1_9_3/exec/spiplistes_import_export.php

    r41722 r41728  
    4848        }
    4949
    50         $separateur = (($separateur == 'tab') ? "\t" : ";");
     50        $separateur = (($separateur == 'tab') ? "\t" : ';');
    5151       
    5252        $flag_admin = ($connect_statut == "0minirezo") && $connect_toutes_rubriques;
     
    186186                . "<p class='verdana2'>"._T('spiplistes:_aide_import')."</p>\n"
    187187                ;
     188       
    188189        if($flag_import_fichier_ok)
    189190        {
     191                //syslog(LOG_NOTICE, 'memory_limit: ' . get_cfg_var('memory_limit'));
     192                //syslog(LOG_NOTICE, 'memory_get_usage[1]: ' . memory_get_usage());
     193                //syslog(LOG_NOTICE, 'memory_get_peak_usage[1]: ' . memory_get_peak_usage());
     194                //syslog(LOG_NOTICE, 'filesize: ' . filesize($fichier_import['tmp_name']));
     195                   
    190196                if($abos_liste && is_array($abos_liste) && count($abos_liste))
    191197                {
     
    277283                        //
    278284                        // Sélection du format de réception
    279                         . debut_cadre_relief("", true, "", _T('spiplistes:Format_de_reception'))
     285                        . debut_cadre_relief("", true, "", _T('spiplistes:format_de_reception_'))
    280286                        . "<ul class='liste-listes verdana2'>\n"
    281287                        . "<li>"
  • _plugins_/spip-listes/spip-listes_1_9_3/inc/spiplistes_import.php

    r41722 r41728  
    11<?php
     2
    23// From SPIP-Listes-V :: import_export.php,v 1.19 paladin@quesaco.org  http://www.quesaco.org/
    34// $LastChangedRevision$
     
    2324        $result_affiche = '';
    2425       
    25         $ajouter_format = $ajouter_abonnements = false;
    26        
    2726        if(is_readable($filename))
    2827        {
     28                // abonner les adresses importees
     29                // aux listes...
    2930                if(!is_array($abos_liste))
    3031                {
     
    5859                }
    5960                //
     61                spiplistes_log('import fichier '.$filename);
    6062                $new_entries = file($filename);
    61                 $nb_entries = count($new_entries);
     63               
     64                $nb_new_entries = count($new_entries);
     65               
    6266                $bad_dupli = $bad_email = 0;
    6367                $statuts_auteurs = array('6forum', '1comite', '0minirezo');
    6468               
    65                 $flag_ajout = _T('spiplistes:ajout');
    66                 $flag_creation = _T('spiplistes:creation');
    67                
    6869                // charger la table des abonnements en ram afin d'eviter les petites requettes
    6970                $abonnements = array();
    70                 if(($sql_result = sql_select("id_auteur,id_liste"
    71                                                                         , "spip_auteurs_listes")) !== false) {
     71                if(($sql_result = sql_select('id_auteur,id_liste'
     72                                                                        , 'spip_auteurs_listes')
     73                        ) !== false)
     74                {
    7275                        while($row = sql_fetch($sql_result)) {
    7376                                if(!isset($abonnements[$row['id_liste']])) {
     
    7881                }
    7982                else {
    80                         spiplistes_sqlerror_log("module import (abonnements)");
    81                 }
    82                
    83                 if($forcer_abo) {
    84                         $formats = array();
     83                        spiplistes_sqlerror_log('module import (abonnements)');
     84                }
     85               
     86                if($forcer_abo)
     87                {
     88                        $auteurs_format = array();
    8589                        // charger la table des formats afin d'eviter les petites requettes
    8690                        if(($sql_result = sql_select("id_auteur,`spip_listes_format` AS format"
    87                                                                                 , "spip_auteurs_elargis")) !== false) {
     91                                                                                , 'spip_auteurs_elargis')) !== false)
     92                        {
    8893                                while($row = sql_fetch($sql_result)) {
    89                                         $formats[$row['id_auteur']] = $row['format'];
    90                                 }
    91                         }
    92                         else {
     94                                        $auteurs_format[$row['id_auteur']] = $row['format'];
     95                                }
     96                        }
     97                        else
     98                        {
    9399                                spiplistes_sqlerror_log("module import (format)");
    94100                        }
    95101                }
    96102               
    97                 // tableau des VALUES pour LA requete de fin d'import
    98                 // les abonnements
    99                 $ajouter_abonnements = array();
    100103                // les formats
    101                 $ajouter_format = array();             
    102                
    103                 for($jj = 0; $jj < $nb_entries; $jj++) {
    104                        
     104                $modifier_format = array();
     105               
     106                $err_import = _T('spiplistes:erreur_import_base');
     107               
     108                //syslog(LOG_NOTICE, 'memory_get_usage[2]: ' . memory_get_usage());
     109                //syslog(LOG_NOTICE, 'memory_get_peak_usage[2]: ' . memory_get_peak_usage());
     110               
     111                $start_time = microtime(1);
     112               
     113                $stack_new_auteurs = array();
     114               
     115                // statut temporaire
     116                $tmp_statut = '6abo'.date('YmdGis');
     117               
     118                for($jj = 0; $jj < $nb_new_entries; $jj++)
     119                {
    105120                        $nouvelle_entree = trim($new_entries[$jj]);
    106121                       
    107                         if(!empty($nouvelle_entree) && !ereg("^[/#]", $nouvelle_entree))
    108                         {
    109                                 list($email, $login, $nom, $statut) = explode($separateur, $nouvelle_entree);
     122                        if(!empty($nouvelle_entree)
     123                           // ni une ligne de commentaire
     124                           && !ereg("^[/#]", $nouvelle_entree))
     125                        {
     126                                list($email, $login, $nom) = explode($separateur, $nouvelle_entree);
    110127                               
    111128                                $email = strtolower(trim($email));
    112                                
    113                                 if(
    114                                         !in_array($statut, $statuts_auteurs)
    115                                 ) {
    116                                         $statut = "6forum";
    117                                 }
    118129                               
    119130                                $mail_exist = false;
     
    124135                                                || $forcer_abo
    125136                                                )
    126                                 ) {
    127                                         if(!$mail_exist) {
     137                                )
     138                                {
     139                                        if(!$mail_exist)
     140                                        {
    128141                                                // si le compte n'existe pas, le creer
    129142                                               
    130143                                                // commencer par calculer le login
    131                                                 $login = strtolower(trim($login));
    132                                                 if(empty($login)) {
     144                                                $login = trim($login);
     145                                                if(empty($login))
     146                                                {
    133147                                                        $login = spiplistes_login_from_email($email);
    134148                                                }
     149                                                else
     150                                                {
     151                                                        $login = strtolower($login);
     152                                                }
    135153                                                // puis le nom
    136                                                 if(empty($nom)) {
     154                                                $nom = trim($nom);
     155                                                if(empty($nom))
     156                                                {
    137157                                                        $nom = ucfirst($login);
    138158                                                }
     
    141161                                                $pass = creer_pass_aleatoire(8, $email);
    142162                                       
    143                                                 // on ne peut pas empiler les req car il nous manque id_auteur
    144                                                 if($id_auteur = sql_insertq(
    145                                                                 "spip_auteurs"
    146                                                                 , array(
    147                                                                           'nom' => $nom
    148                                                                         , 'email' => $email
    149                                                                         , 'login' => $login
    150                                                                         , 'pass' => md5($pass)
    151                                                                         , 'statut' => $statut
    152                                                                         , 'htpass' => generer_htpass($pass)
    153                                                                         //, 'cookie_oubli' => creer_uniqid()
    154                                                                 )
    155                                                         )
    156                                                 ) {
    157                                                         // le format de reception
    158                                                         //spiplistes_format_abo_modifier($id_auteur, $format_abo);
    159                                                         // empiler le tout pour une seule req
    160                                                         $ajouter_format[] = "(" . sql_quote($id_auteur) . "," . sql_quote($format_abo) . ")";
    161                                                 }
    162                                                 else {
    163                                                         static $err;
    164                                                         $nb_err = 1;
    165                                                         if(!$err) { $err = _T('spiplistes:erreur_import_base'); }
    166                                                         if($message_erreur != $err) {
    167                                                                 $message_erreur = $err;
    168                                                         }
    169                                                         else {
    170                                                                 $nb_err++;
    171                                                         }
    172                                                 }
    173                                                 if($nb_err > 1) {
    174                                                         $message_erreur .= " " . _T('spiplistes:erreur_n_fois', array('n', $nb_err));
    175                                                 }
    176                                                 if(!empty($message_erreur)) {
    177                                                         spiplistes_log($message_erreur);
    178                                                         $message_erreur = "";
    179                                                 }
    180                                         }
     163                                                // nouvel abo dans la pile des "a creer"
     164                                                $stack_new_auteurs[] = array(
     165                                                        'nom' => $nom
     166                                                        , 'email' => $email
     167                                                        , 'login' => $login
     168                                                        , 'pass' => md5($pass)
     169                                                        , 'statut' => $tmp_statut
     170                                                        , 'htpass' => generer_htpass($pass)
     171                                                );
     172                                        } // end if(!$mail_exist)
     173                                       
    181174                                        // adresse mail existe dans la base
    182175                                        // si on passe par ici, c'est sous-entendu $forcer_abo (abonne' un compte existant)
    183                                         else {
     176                                        else
     177                                        {
    184178                                                $id_auteur = intval($current_entries[$email]['id_auteur']);
    185                                                 $login = $current_entries[$email]['login'];
    186                                                 $nom = $current_entries[$email]['nom'];
    187179                                               
    188180                                                // forcer le format dans la foulee
    189                                                 if(!isset($formats[$id_auteur])) {
    190                                                         $ajouter_format[] = "(" . sql_quote($id_auteur) . "," . sql_quote($format_abo) . ")";
     181                                                if(!isset($auteurs_format[$id_auteur]))
     182                                                {
     183                                                        $modifier_format[] = '(' . sql_quote($id_auteur) . ',' . sql_quote($format_abo) . ')';
    191184                                                }
    192185                                        }
    193                                        
    194                                         $acte = ($mail_exist ? $flag_ajout : $flag_creation);
    195                                        
    196                                         // abonner le compte a(ux) liste(s)
    197                                         $id_auteur_q = sql_quote($id_auteur);
    198                                         $aux_listes = array();
    199                                         foreach($abos_liste as $id_liste) {
    200                                                 //spiplistes_log("chercher si id_auteur #$id_auteur deja abonne a id_liste #$id_liste");
    201                                                 if(
    202                                                    (!isset($abonnements[$id_liste]))
    203                                                    || !in_array($id_auteur, $abonnements[$id_liste])
    204                                                 ) {
    205                                                         $ajouter_abonnements[] = "($id_auteur_q,".sql_quote($id_liste).",NOW())";
    206                                                         $aux_listes[] = $id_liste;
    207                                                 }
    208                                         }
    209                                         $ii = count($aux_listes) ? "#" . implode(",#", $aux_listes) : "";
    210                                         if(!empty($ii)) {
    211                                                 $result_affiche .= ""
    212                                                                 . "<li class='verdana2'><a href='mailto:$email'>$login</a> $email ($nom)"
    213                                                                 . " <small>[$acte #$id_auteur -> $ii ]</small></li>\n"
    214                                                                 ;
    215                                         }
    216                                 } else {
     186                                        // est-ce vraiment utile (voir plus bas)
     187                                }
     188                                else
     189                                {
    217190                                        if($mail_exist) {
    218191                                                $bad_dupli++;
    219                                                 spiplistes_log("import dupli: $mail");
     192                                                spiplistes_log('import dupli: '.$mail);
    220193                                        }
    221194                                        else {
    222195                                                $bad_email++;
    223                                                 spiplistes_log("import bad: $mail");
     196                                                spiplistes_log('import bad: '.$mail);
    224197                                        }
    225198                                }
    226199                        }
    227                 } // end for
    228                
    229                 if(count($ajouter_abonnements)) {
    230                         $sql_values = implode(",", $ajouter_abonnements);
    231                         if(!empty($sql_values))
    232                         {
    233                                 spiplistes_log("ajout abonnements: " . $sql_values);
    234                                 if(sql_insert('spip_auteurs_listes'
    235                                                           , "(id_auteur,id_liste,date_inscription)", $sql_values) === false) {
    236                                         spiplistes_sqlerror_log("module import ajout abonnements");
    237                                 }
    238                         }                       
    239                 }
    240                
    241                 // inserer les formats des abos manquants
    242                 if(count($ajouter_format)) {
    243                         $sql_values = implode(",", $ajouter_format);
    244                         if(!empty($sql_values))
    245                         {
    246                                 spiplistes_log("ajout format: " . $sql_values);
    247                                 if(sql_insert('spip_auteurs_elargis'
    248                                                           , "(id_auteur,`spip_listes_format`)", $sql_values) === false) {
    249                                         spiplistes_sqlerror_log("module import ajout formats");
    250                                 }
    251                         }
    252                 }
    253                
    254                 if(!empty($result_affiche)) {
    255                         $result_affiche = "<ul>\n".$result_affiche."</ul>\n";
    256                 }
    257                 else {
    258                         $result_affiche = "<br />" . _T('spiplistes:pas_dimport') . "\n";
    259                 }
     200                } // end for($jj = 0; $jj < $nb_new_entries; $jj++)
     201                               
     202                // importer les nouveaux abonnés
     203                if(count($stack_new_auteurs))
     204                {
     205                        $sql_col_names = '('.implode(',', array_keys($stack_new_auteurs[0])).')';
     206                        $sql_col_values = '';
     207                       
     208                        foreach($stack_new_auteurs as $auteur)
     209                        {
     210                                $values = array_map('sql_quote', $auteur);
     211                                $sql_col_values .= '('.implode(',', $values).'),';
     212                        }
     213                        $sql_col_values = rtrim($sql_col_values,',');
     214                        //syslog(LOG_NOTICE, $sql_col_values);
     215                       
     216                        $r = sql_insert('spip_auteurs', $sql_col_names, $sql_col_values);
     217                        //syslog(LOG_NOTICE, 'rr:'.(is_bool($r) ? ($r?'ok':'ko') : $r));
     218                       
     219                        // nouveaux abonnements
     220                        foreach($abos_liste as $id_liste)
     221                        {
     222                                // un INSERT sans VALUES
     223                                // @todo: vérifier compatibilite sqlite et pg
     224                                if(sql_query(
     225                                        'INSERT INTO spip_auteurs_listes
     226                                                                (id_auteur,id_liste) SELECT a.id_auteur,'.$id_liste
     227                                                                        .' FROM spip_auteurs AS a WHERE a.statut='.sql_quote($tmp_statut))
     228                                   === false
     229                                )
     230                                {
     231                                        spiplistes_sqlerror_log('import nouveaux abos dans spip_auteurs_listes');
     232                                }
     233                        }
     234                       
     235                        // format pour les nouveaux auteurs
     236                                // un INSERT sans VALUES
     237                                // @todo: vérifier compatibilite sqlite et pg
     238                        if(sql_query(
     239                                'INSERT INTO spip_auteurs_elargis
     240                                                (id_auteur,`spip_listes_format`) SELECT a.id_auteur,'.sql_quote($format_abo)
     241                                                                .' FROM spip_auteurs AS a WHERE a.statut='.sql_quote($tmp_statut))
     242                           === false
     243                        )
     244                        {
     245                                spiplistes_sqlerror_log('import nouveauxformats dans spip_auteurs_elargis');
     246                        }
     247               
     248                }
     249               
     250                // Comptes deja existants, inclus dans le fichier import
     251                // - changer son format de réception ?
     252                // - l'ajouter aux listes sélectionnées ?
     253                // - ou ignorer ?
     254                if(count($modifier_format))
     255                {
     256                        // pour l'instant: ignorer !
     257                        //
     258                }
     259               
     260                // redonner le bon statut visiteur aux nouveaux
     261                sql_update(array('spip_auteurs'), array('statut' => sql_quote('6forum')), array('statut='.sql_quote($tmp_statut)));
     262
     263                // fin des req
     264
     265                $result_affiche .=
     266                        ($tt = ($ii = count($stack_new_auteurs)) + ($jj = count($modifier_format)))
     267                        ?       '<ul>'.PHP_EOL
     268                                . '<li class="verdana2">'._T('spiplistes:nb_comptes_importees_en_ms_dont_'
     269                                                                                 , array('nb' => $tt, 'ms' => (microtime(1) - $start_time)))
     270                                . '<ul>'.PHP_EOL
     271                                        . '<li>'._T('spiplistes:nb_fiches_crees', array('nb' => $ii)).'</li>'.PHP_EOL
     272                                        //. '<li>'._T('spiplistes:nb_comptes_modifies', array('nb' => $jj)).'</li>'.PHP_EOL
     273                                        . '<li>'._T('spiplistes:nb_comptes_ignores', array('nb' => $jj)).'</li>'.PHP_EOL
     274                                . '</ul>'.PHP_EOL
     275                                . '</li>'.PHP_EOL
     276                                . '</ul>'.PHP_EOL
     277                        : '<br />'._T('spiplistes:pas_dimport').PHP_EOL
     278                        ;
     279
     280               
    260281                if($bad_dupli) {
    261                         $result_affiche .= "<br />"._T('pass_erreur')." email: "._T('spiplistes:n_duplicata_mail', array('n' => $bad_dupli))."\n";
     282                        $result_affiche .= '<br />'._T('pass_erreur').' email: '._T('spiplistes:n_duplicata_mail', array('n' => $bad_dupli)).PHP_EOL;
    262283                }
    263284                if($bad_email) {
    264                         $result_affiche .= "<br />"._T('pass_erreur')." email: "._T('spiplistes:n_incorrect_mail', array('n' => $bad_email))."\n";
    265                 }
    266                 $result_affiche = _T('spiplistes:fichier_') . " : <strong>$realname</strong><br />\n"
     285                        $result_affiche .= '<br />'._T('pass_erreur').' email: '._T('spiplistes:n_incorrect_mail', array('n' => $bad_email)).PHP_EOL;
     286                }
     287                $result_affiche = _T('spiplistes:fichier_') . ' : <strong>$realname</strong><br />'.PHP_EOL
    267288                        . _T('spiplistes:' . ((count($abos_liste) > 1) ? 'Listes_de_destination_s' : 'Liste_de_destination_s')
    268                                  , array('s' => "#" . implode(",#", $abos_liste))) ."<br />\n"
     289                                 , array('s' => '#' . implode(',#', $abos_liste))) .'<br />'.PHP_EOL
    269290                        . $result_affiche
    270291                        ;
     
    272293        return($result_affiche);
    273294}
    274 //
    275 ?>
  • _plugins_/spip-listes/spip-listes_1_9_3/lang/spiplistes_fr.php

    r38222 r41728  
    288288, 'Listes_de_destination_s' => 'Listes de destination : @s@'
    289289, 'pas_dimport' => 'Pas d&#8217;import. Soit le fichier est vide, soit toutes les adresses sont d&#233;j&#224; abonn&#233;es.'
     290, 'nb_comptes_importees_en_ms_dont_' => '@nb@ fiches import&#233;es en @ms@ ms. dont : '
     291, 'nb_fiches_crees' => '@nb@ comptes cr&#233;&#233;s'
     292, 'nb_comptes_modifies' => '@nb@ comptes modifi&#233;s'
     293, 'nb_comptes_ignores' => '@nb@ comptes ignor&#233;s (d&#233;j&#224; dans la base)'
     294, 'format_de_reception_' => 'Format de r&#233;ception : '
    290295
    291296// exec/spiplistes_liste_edit.php
  • _plugins_/spip-listes/spip-listes_1_9_3/plugin.xml

    r40091 r41728  
    88        <nom><multi>[fr]SPIP-Listes[en]SPIP-Lists[ar]&#1604;&#1608;&#1575;&#1574;&#1581; SPIP[es]SPIP-Listes</multi></nom>
    99        <auteur>BoOz@rezo.net</auteur>
    10         <version>2.0148</version>
     10        <version>2.0149</version>
    1111        <version_base>1.98</version_base>
    1212        <etat>test</etat>
Note: See TracChangeset for help on using the changeset viewer.