Changeset 50560 in spip-zone


Ignore:
Timestamp:
Aug 19, 2011, 10:43:31 AM (8 years ago)
Author:
paladin@…
Message:

Correction pour l'import. Si forcer l'abonnement, modifier le format par défaut (celui de spip_auteurs_elargis)

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

Legend:

Unmodified
Added
Removed
  • _plugins_/spip-listes/spip-listes_1_9_3/TO-DO.txt

    r48921 r50560  
    1414+ recuper les erreurs de phpmailer ($this->error) dans les logs de spiplistes
    1515+ ajouter option de maintenance "supprimer les invites sans abonnements"
    16 . ajouter outil de nettoyage de tables ?
    1716. personnaliser les abonnement (s’abonner en « html » a la liste x, « texte » a la liste y, ou « non » a la liste z). Utiliser la table spip_auteurs_liste (completer le format qui est pour l'instant toujours html).
    1817. complement statistiques : liens sur courrier, taux d'ouverture, de clic, liens cliques. etc...
    1918. semble y avoir qq conflits avec autres plug-in. Verifier ! see: http://docs.jquery.com/Core/jQuery.noConflict
    20 . corriger les CSS pour espace public des formulaires (le cache, toujours le cache)
    2119. revoir la doc docs/__installation_*.txt
    2220. permettre l'import direct d'une image dans le courrier (sans lien). Un poil complique, mais faisable.
  • _plugins_/spip-listes/spip-listes_1_9_3/inc/spiplistes_api.php

    r50511 r50560  
    727727
    728728/**
     729 * Ajouter un ou + format de réception par défaut
     730 *
     731 * @version CP-20110819
     732 * @param int|array $ids_auteur
     733 * @param string $format
     734 * @staticvar string $sql_table
     735 * @return bool
     736 */
     737function spiplistes_format_abo_ajouter ($ids_auteur, $format = 'non')
     738{
     739        static $sql_table = 'spip_auteurs_elargis';
     740        $msg = array();
     741       
     742        if (is_int($ids_auteur)) { $ids_auteur = array($ids_auteur); }
     743       
     744        if (is_array($ids_auteur) && count($ids_auteur))
     745        {
     746                $sql_values = array();
     747                $sql_format = sql_quote($format);
     748               
     749                foreach ($ids_auteur as $id)
     750                {
     751                        if ($id > 0)
     752                        {
     753                                $sql_values[] = '('.$id.','.$sql_format.')';
     754                                $msg[] = $id;
     755                        }
     756                }
     757                if (count ($sql_values)) {
     758                        $sql_noms = '(id_auteur,`spip_listes_format`)';
     759                        $sql_values = implode (',', $sql_values);
     760                        if (($result = sql_insert($sql_table, $sql_noms, $sql_values)) === FALSE)
     761                        {
     762                                spiplistes_sqlerror_log('spiplistes_format_abo_ajouter()');
     763                        }
     764                        else {
     765                                $msg = implode (',', $msg);
     766                                if (strlen ($msg) > 30) { $msg = substr ($msg, 0, 30).'...'; }
     767                                spiplistes_log_api('INSERT FORMAT '.$format.' TO '.$msg);
     768                        }
     769                }
     770        }
     771        return ($result);
     772}
     773
     774/**
    729775 * Supprimer le format d'un ou plusieurs id_auteur
    730776 * donné en argument (int ou tableau).
     
    748794                $arg = array($arg);
    749795        }
     796       
    750797        if (is_array($arg) && count($arg))
    751798        {
     
    763810                }
    764811        }
    765         return($result);
    766 }
    767 
    768 /**
    769  * modifier le format abonne
    770  * si id_auteur, celui-ci uniquement
     812        return ($result);
     813}
     814
     815/**
     816 * Modifier le format abonne
     817 *
     818 * si id_auteur est int, la fonctin vérifié si existant.
     819 *      -> le modifie si existe
     820 *      sinon, le crée.
     821 * Si c'est un tableau, il doit contenir les id_auteur
     822 *  L'appel via un INT est plus long que via un array.
     823 *  Si l'appel a déjà vérifié si le compte existe, il vaut mieux
     824 *  passer ce id via un array.
    771825 * sinon, 'tous' pour modifier globalement (uniquement ceux ayant deja un format)
     826 * @version CP-20110819
     827 * @param int|array|string $id_auteur
     828 * @return bool
     829 *
     830 * @todo supprimer cette particularité insert si int ?
     831 * {@link spiplistes_format_abo_ajouter()}
    772832 */
    773833function spiplistes_format_abo_modifier ($id_auteur, $format = 'non') {
    774 
    775         if($format = spiplistes_format_valide($format)) {
    776                 $sql_table = "spip_auteurs_elargis";
     834       
     835        static $sql_table = 'spip_auteurs_elargis';
     836
     837        if($format = spiplistes_format_valide($format))
     838        {
    777839                $sql_champs = array('`spip_listes_format`' => sql_quote($format));
     840               
    778841                if($id_auteur == 'tous') {
    779842                        // appliquer le meme format a tous les abos
    780843                        $sql_result = sql_update($sql_table, $sql_champs, 1);
    781                         $action = "update";
    782                 }
    783                 else if(($id_auteur = intval($id_auteur)) > 0) {
    784                         if(($cur_format = spiplistes_format_abo_demande($id_auteur)) !== false) {
    785                                 // si pas d'erreur sql
     844                        $action = 'UPDATE';
     845                        $log_ids = 'ALL';
     846                }
     847                else if (is_array ($id_auteur) && count ($id_auteur))
     848                {
     849                        $ids = implode(',', $id_auteur);
     850                        $sql_where = 'id_auteur IN ('.$ids.')';
     851                        $sql_result = sql_update($sql_table, $sql_champs, 1);
     852                        $action = 'UPDATE';
     853                        $log_ids = $ids;
     854                        if (strlen ($log_ids) > 30) { $log_ids = substr ($log_ids, 0, 30).'...'; }
     855                        $log_ids = 'ids auteur '.$log_ids;
     856                }
     857                else if(($id_auteur = intval($id_auteur)) > 0)
     858                {
     859                        if(($cur_format = spiplistes_format_abo_demande($id_auteur)) !== FALSE)
     860                        {
    786861                                if(!$cur_format) {
    787862                                        // si inexistant faire un insert
     
    794869                                } else {
    795870                                        // sinon update
    796                                         $sql_where = "id_auteur=".sql_quote($id_auteur)." LIMIT 1";
     871                                        $sql_where = 'id_auteur='.sql_quote($id_auteur).' LIMIT 1';
    797872                                        $sql_result = sql_update($sql_table, $sql_champs, $sql_where);
    798                                         $action = "update";
     873                                        $action = 'UPDATE';
    799874                                }
     875                                $log_ids = 'id_auteur #'.$id_auteur;
    800876                        }
    801877                }
    802                 if($sql_result === false) {
     878               
     879                if($sql_result === FALSE) {
    803880                        spiplistes_sqlerror_log("spiplistes_format_abo_modifier() $action $id_auteur");
    804881                }
    805882                else {
    806                         $id_auteur = ($id_auteur == 'tous') ? "ALL" :  "id_auteur #$id_auteur";
    807                         spiplistes_log_api("$action format to '$format' for $id_auteur");
     883                        spiplistes_log_api("$action FORMAT '$format' FOR $log_ids");
    808884                }
    809885        }
     
    812888
    813889/**
    814  * renvoie le format d'abonnement d'un auteur
    815  * @param int $id_auteur
    816  * @return string
     890 * Renvoie le format de réception par défaut d'un auteur.
     891 * Ou de tous si 'tous' en paramètre.
     892 *
     893 * @version CP-20110817
     894 * @param int|string $id_auteur
     895 * @return string|array le format, ou tableau (id => format) si 'tous' transmis en paramètre.
     896 * @todo à optimiser
    817897 */
    818898function spiplistes_format_abo_demande ($id_auteur) {
    819         $id_auteur = intval($id_auteur);
    820         $result = false;
    821         $sql_where = "id_auteur=".sql_quote($id_auteur);
    822         if($id_auteur > 0) {
    823                 if(!spiplistes_spip_est_inferieur_193()) {
    824                         $result = sql_getfetsel("`spip_listes_format`", "spip_auteurs_elargis", $sql_where, '', '', 1);
    825                 } else {
    826                         /*
    827                         $result = sql_fetsel("`spip_listes_format` AS format", "spip_auteurs_elargis", $sql_where);
    828                         $result = $result['format'];
    829                         */
    830                         if(($sql_result = sql_select("`spip_listes_format` AS format", "spip_auteurs_elargis", $sql_where, '', '', 1)) !== false) {
     899        static $sql_select = "id_auteur as id,`spip_listes_format` AS fmt";
     900        static $sql_from = 'spip_auteurs_elargis';
     901        $result = FALSE;
     902       
     903        if ($id_auteur == 'tous')
     904        {
     905                $sql_where = $sql_limit = '';
     906        }
     907        else if (($id_auteur = intval($id_auteur)) > 0)
     908        {
     909                $sql_where = 'id_auteur='.sql_quote($id_auteur);
     910                $sql_limit = 1;
     911        }
     912        else { $id_auteur = NULL; }
     913       
     914        if ($id_auteur)
     915        {
     916                if(($sql_result = sql_select($sql_select, $sql_from, $sql_where,
     917                                                                         '', '', $sql_limit)) !== FALSE) {
     918                        if (is_int($id_auteur))
     919                        {
    831920                                $row = sql_fetch($sql_result);
    832                                 $result = $row['format'];
    833                                 spiplistes_log_api("current format for id_auteur #$id_auteur = $result ($sql_where)");
     921                                $result = $row['fmt'];
    834922                        }
    835                         else {
    836                                 spiplistes_sqlerror_log("spiplistes_format_abo_demande()");
     923                        else
     924                        {
     925                                while($row = sql_fetch($sql_result)) {
     926                                        $result[$row['id']] = $row['fmt'];
     927                                }
     928                                $r = implode(',', $result);
    837929                        }
    838930                }
    839                 /* Code a valider. Si ok, supprimer ci-dessus.
    840                 $GLOBALS['mysql_rappel_nom_base'] = false;
    841                 $result = sql_getfetsel("spip_listes_format", "spip_auteurs_elargis", "id_auteur=".sql_quote($id_auteur));
    842                 $result = spiplistes_format_valide($result);
    843                 /**/
    844         }
     931                else {
     932                        spiplistes_sqlerror_log('spiplistes_format_abo_demande()');
     933                }
     934        }
     935       
    845936        return($result);
    846937}
  • _plugins_/spip-listes/spip-listes_1_9_3/inc/spiplistes_import.php

    r50496 r50560  
    6969                $statuts_auteurs = array('6forum', '1comite', '0minirezo');
    7070               
    71                 $stack_new_auteurs = array(); // tableau des comptes à créer
    72                
    73                 $stack_new_abonnes = array(); // Tableau des comptes à abonner
     71                $comptes_a_creer = array(); // tableau des comptes à créer
     72               
     73                $comptes_a_abonner = array(); // Tableau des comptes à abonner
    7474               
    7575                $nb_fiches_import = 0; // nb de lignes valides dans le fichier
     
    8989                 */
    9090                $tmp_statut = date('YmdGis'); // statut temporaire
    91                 $s = '6forum';
     91                // les comptes à créer sont en 6newabo
     92                // pour ne pas interférer avec les comtes existants.
     93                $s = '6newabo';
    9294                $current_statuts = array($s => $s.$tmp_statut);
    9395               
     
    111113               
    112114                /**
     115                 * Table des formats de réception par défaut
     116                 * pour les comptes existants.
     117                 */
     118                $current_formats = spiplistes_format_abo_demande ('tous');
     119               
     120                /**
    113121                 * Import du fichier transmis
    114122                 */
     
    126134                for($jj = 0; $jj < $nb_lignes_fichier; $jj++)
    127135                {
    128                         $nouvelle_entree = trim($contenu_fichier[$jj]);
     136                        $ligne_fichier = trim($contenu_fichier[$jj]);
    129137                       
    130                         if(!empty($nouvelle_entree)
     138                        if(!empty($ligne_fichier)
    131139                           // ni une ligne de commentaire
    132140                           && (
    133                                    ($char = substr($nouvelle_entree, 0, 1))
     141                                   ($char = substr($ligne_fichier, 0, 1))
    134142                                   && ($char != '#')
    135143                                   && ($char != '/')
     
    138146                                $nb_fiches_import++;
    139147                               
    140                                 list($email, $login, $nom) = explode($separateur, $nouvelle_entree);
    141                                
    142                                 $email = strtolower(trim($email));
    143 
     148                                list($email, $login, $nom) = explode($separateur, $ligne_fichier);
     149                               
    144150                                $mail_exist = FALSE;
    145151                               
    146                                 $email = email_valide($email);
     152                                $email = email_valide(strtolower(trim($email)));
    147153                               
    148154                                if ($email
     
    189195                                                 * Nouvel abo dans la pile des "a creer"
    190196                                                 */
    191                                                 $stack_new_auteurs[] = array(
     197                                                $comptes_a_creer[] = array(
    192198                                                        'nom' => $nom
    193199                                                        , 'email' => $email
    194200                                                        , 'login' => $login
    195201                                                        , 'pass' => md5($pass)
    196                                                         , 'statut' => $current_statuts['6forum']
     202                                                        , 'statut' => $current_statuts['6newabo']
    197203                                                        , 'htpass' => generer_htpass($pass)
    198204                                                );
     
    205211                                        {
    206212                                                $nb_auteurs_exists++;
    207                                                 $stack_new_abonnes[] = intval($current_auteurs[$email]['id_auteur']);
     213                                                $comptes_a_abonner[] = intval($current_auteurs[$email]['id_auteur']);
    208214                                        }
    209215                                }
     
    213219                                 */
    214220                                if (!$email) {
    215                                         spiplistes_log ('BAD ENTRY @ LINE #'.$jj.': '.$nouvelle_entree);
     221                                        spiplistes_log ('BAD ENTRY @ LINE #'.$jj.': '.$ligne_fichier);
    216222                                }
    217223                        }
    218224                } // end for
    219225                               
    220                 $creer_comptes = count($stack_new_auteurs);
    221                 spiplistes_debug_log ('CREATE '.$creer_comptes.' new accounts');
    222                
    223                 $nb_inscrire_abos = count($stack_new_abonnes);
    224                 spiplistes_debug_log ('SUBSCRIBE '
    225                                                           . ($creer_comptes + $nb_inscrire_abos)
    226                                                           . ' accounts');
    227                
     226                $nb_comptes_a_creer = count($comptes_a_creer);
     227                spiplistes_debug_log ('CREATE '.$nb_comptes_a_creer.' new accounts');
     228               
     229                $nb_comptes_a_abonner = count($comptes_a_abonner);
     230
    228231                /**
    229232                 * Préparer les statuts temporaires :
     
    282285                }
    283286               
    284                 if ($creer_comptes || $nb_inscrire_abos)
    285                 {
    286                         if ($creer_comptes)
     287                if ($nb_comptes_a_creer || $nb_comptes_a_abonner)
     288                {
     289                        if ($nb_comptes_a_creer)
    287290                        {
    288                                 $sql_col_names = '('.implode(',', array_keys($stack_new_auteurs[0])).')';
     291                                $sql_col_names = '('.implode(',', array_keys($comptes_a_creer[0])).')';
    289292                                $sql_col_values = '';
    290293                               
     
    294297                                 * Préparer le paquet des comptes à créer
    295298                                 */
    296                                 foreach($stack_new_auteurs as $auteur)
     299                                foreach($comptes_a_creer as $auteur)
    297300                                {
    298301                                        $values = array_map('sql_quote', $auteur);
     
    310313                                        $sql_select = array('id_auteur');
    311314                                        $sql_from = array('spip_auteurs');
    312                                         $sql_where[] = 'statut='.sql_quote($current_statuts['6forum']);
     315                                        $sql_where[] = 'statut='.sql_quote($current_statuts['6newabo']);
    313316                                       
    314317                                        if ($sql_result = sql_select (
     
    318321                                                )) {
    319322                                                while ($row = sql_fetch($sql_result)) {
    320                                                         $stack_new_abonnes[] = $row['id_auteur'];
     323                                                        $comptes_a_abonner[] = $row['id_auteur'];
    321324                                                }
    322325                                        }
    323326                                }
    324327                        }
    325                         $nb_inscrire_abos = count($stack_new_abonnes);
    326                         spiplistes_debug_log ('SUBSCRIBE '.$nb_inscrire_abos.' accounts');
     328                        $nb_comptes_a_abonner = count($comptes_a_abonner);
     329                        spiplistes_debug_log ('SUBSCRIBE '.$nb_comptes_a_abonner.' accounts '.implode(',', $comptes_a_abonner));
    327330                       
    328331                        //spiplistes_debug_log ('memory_get_usage[6]: ' . memory_get_usage());
     
    331334                         * Inscrire les abonnements
    332335                         */
    333                         if ($nb_inscrire_abos) {
    334                                
    335                                 spiplistes_debug_log ('inscription des abos');
    336                
     336                        if ($nb_comptes_a_abonner)
     337                        {
    337338                                $sql_table = 'spip_auteurs_listes';
    338339                                $sql_update_valeurs = array();
     
    353354                                         * abonner à la liste si pas déjà abonné
    354355                                         */
    355                                         foreach ($stack_new_abonnes as $id_auteur)
     356                                        foreach ($comptes_a_abonner as $id_auteur)
    356357                                        {
    357358                                                $deja_abonne = isset($current_abonnements[$id_liste])
     
    374375                                        } // foreach
    375376                                } // foreach
     377                               
    376378                                /**
    377379                                 * Insertion dans la table des abonnements
     
    387389                                        }
    388390                                }
     391                               
    389392                                /**
    390393                                 * Correction de la table des abonnements
     
    432435                                }
    433436                        } // if
    434                
    435                         /**
    436                          * Appliquer le format de réception
    437                          * @todo A remplacer par la fonction en API
    438                          */
    439                         if(sql_query(
    440                                 'INSERT INTO spip_auteurs_elargis
    441                                                 (id_auteur,`spip_listes_format`) SELECT a.id_auteur,'.sql_quote($format_abo)
    442                                                                 .' FROM spip_auteurs AS a WHERE a.statut='.sql_quote($tmp_statut))
    443                            === FALSE
    444                         )
    445                         {
    446                                 spiplistes_sqlerror_log('import: nouveaux formats dans spip_auteurs_elargis');
    447                         }
    448437                }
    449438               
     
    454443                foreach ($current_statuts as $key => $val)
    455444                {
     445                        // un compte créé devient compte invité
     446                        if ($key == '6newabo') { $key = '6forum'; }
     447                       
    456448                        sql_update(array('spip_auteurs')
    457449                                   , array('statut' => sql_quote($key))
     
    459451                                   );
    460452                }
     453               
     454                /**
     455                 * Si le compte créé ou le compte existant n'a pas de format
     456                 * par défaut (défini dans spip_auteurs_elargis)
     457                 * ou si le format forcé est différent,
     458                 * appliquer ce format par défaut pour ce compte.
     459                 */
     460                $sql_insert = array();
     461                $sql_update = array();
     462                foreach ($comptes_a_abonner as $id_auteur)
     463                {
     464                        if (!isset($current_formats[$id_auteur]))
     465                        {
     466                                $sql_insert[] = $id_auteur;
     467                        }
     468                        else if ($forcer_abo && ($current_formats[$id_auteur] != $format_abo))
     469                        {
     470                                $sql_update[] = $id_auteur;
     471                        }
     472                }
     473                if (count($sql_insert))
     474                {
     475                        spiplistes_format_abo_ajouter ($sql_insert, $format_abo);
     476                }
     477                if (count($sql_update))
     478                {
     479                        spiplistes_format_abo_modifier ($sql_update, $format_abo);
     480                }
     481               
    461482                // fin des req
    462483
    463484                $result_affiche .=
    464                         ($tt = ($ii = count($stack_new_auteurs)) + ($jj = count($stack_new_abonnes)))
     485                        ($tt = ($ii = count($comptes_a_creer)) + ($jj = count($comptes_a_abonner)))
    465486                        ?       '<ul>'.PHP_EOL
    466487                                . '<li class="verdana2">'._T('spiplistes:nb_comptes_importees_en_ms_dont_'
  • _plugins_/spip-listes/spip-listes_1_9_3/plugin.xml

    r50498 r50560  
    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.0221</version>
     10        <version>2.0222</version>
    1111        <version_base>1.98</version_base>
    1212        <etat>test</etat>
Note: See TracChangeset for help on using the changeset viewer.