Changeset 76558 in spip-zone


Ignore:
Timestamp:
Sep 27, 2013, 8:03:01 PM (6 years ago)
Author:
cy_altern@…
Message:

Gestion des auteurs a mettre a jour.
En principe toutes les fonctionnalites sont operationnelles: il reste une tripotee de tests avant de pouvoir dire que cette version est finie mais on en est pas loin...

Location:
_plugins_/csv2spip/dev_spip3
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/csv2spip/dev_spip3/formulaires/csv2spip_importation.php

    r75986 r76558  
    104104           
    105105        // tableau de tous les admins
    106         $result = sql_select(array('login', 'email'), 'spip_auteurs', array('statut = "0minirezo"'));
     106        $result = sql_select(array('login'), 'spip_auteurs', array('statut = "0minirezo"'));
    107107        while ($r = sql_fetch($result)) {
    108108                $Tadmin_tous[] = $r['login'];
    109                 if ($r['email'] AND $r['email'] != '')
    110                         $Tadmin_tous[] = $r['email'];
    111109        }
    112110        // tableau des admins restreints
     
    119117                "liens.objet = 'rubrique'",
    120118                "liens.id_auteur = auteurs.id_auteur",
    121                 '(login!="" OR email!="")');
    122         $result = sql_select(array('login', 'email'),$from, $where);
     119                'login!=""');
     120        $result = sql_select(array('login'),$from, $where);
    123121        while ($r = sql_fetch($result)) {
    124122                $Tadmin_restreint[] = $r['login'];
    125                 if ($r['email'] AND $r['email'] != '')
    126                         $Tadmin_restreint[] = $r['email'];
    127123        }
    128124        // tableau admins complets
    129125        $Tadmin_complet = array_diff($Tadmin_tous, $Tadmin_restreint);
    130 
    131126        // traiter fichier CSV
     127        $num_statut = $num_login = -1;
    132128    while (($data= fgetcsv($fichiercsv,"~")) !== FALSE){
    133129       // petit hack car fgetcsv ne reconnait pas le ~ comme séparateur !!!
     
    135131       $data           = explode("~",$data);
    136132       $nombre_elements = count($data);
    137 
    138133                if ($i==0) {
    139134                        for ($j = 0; $j < $nombre_elements; $j++) {
    140                                 $en_tete[$j]=$data[$j];    //Récupération de la ligne d'entete
     135                                $en_tete[$j] = strtolower($data[$j]);    //Récupération de la ligne d'entete
    141136                                if ($en_tete[$j] == 'statut')
    142137                                        $num_statut = $j;
    143138                                if ($en_tete[$j] == 'login')
    144139                                        $num_login = $j;
    145                                 if ($en_tete[$j] == 'email')
    146                                         $num_email = $j;
    147140                   }
    148                         if (!$num_statut OR !$num_login OR !$num_email){
    149                                 $retour['message_erreur'] = _T('csv2spip:champ_manquant').'email:'.$num_email.' login:'.$num_login.' statut'.$num_statut;
     141                        if ($num_statut < 0 OR $num_login < 0){
     142                                $retour['message_erreur'] = _T('csv2spip:champ_manquant').' login:'.$num_login.' statut'.$num_statut;
    150143                                return  $retour;
    151144                        }
    152            } else {
     145           }
     146           else {
    153147                        for ($j = 0; $j < $nombre_elements; $j++) {
    154                                 // on ne veut pas les auteurs du CSV ayant login ou mail égal à celui d'un admin complet
    155                                 if (($data[$num_login] AND !in_array($data[$num_login], $Tadmin_complet))
    156                                         OR ($data[$num_email] AND !in_array($data[$num_email], $Tadmin_complet))
    157                                 ) {     // creation du tableau contenant l'ensemble des données à importer
    158                                    if ($Tcorrespondances[$data[$num_statut]] == '6forum')
    159                                                 $tableau_csv_visiteurs[$data[$num_login]?$data[$num_login]:$data[$num_email]][$en_tete[$j]] = $data[$j];
    160                                    if ($Tcorrespondances[$data[$num_statut]] == '1comite')
    161                                                 $tableau_csv_redacs[$data[$num_login]?$data[$num_login]:$data[$num_email]][$en_tete[$j]] = $data[$j];
    162                                    if ($Tcorrespondances[$data[$num_statut]] == '0minirezo') {
    163                                                 $tableau_csv_admins[$data[$num_login]?$data[$num_login]:$data[$num_email]][$en_tete[$j]] = $data[$j];
     148                                // on ne veut pas les auteurs du CSV ayant login égal à celui d'un admin complet
     149                                if (($data[$num_login] AND !in_array($data[$num_login], $Tadmin_complet))) {
     150                                        // creation du tableau contenant l'ensemble des données à importer
     151                                   if ($Tcorrespondances[strtolower($data[$num_statut])] == '6forum')
     152                                                $tableau_csv_visiteurs[$data[$num_login]][$en_tete[$j]] = $en_tete[$j] == "statut" ? "6forum" : $data[$j];
     153                                   if ($Tcorrespondances[strtolower($data[$num_statut])] == '1comite')
     154                                                $tableau_csv_redacs[$data[$num_login]][$en_tete[$j]] = $en_tete[$j] == "statut" ? "1comite" : $data[$j];
     155                                   if ($Tcorrespondances[strtolower($data[$num_statut])] == '0minirezo') {
     156                                                $tableau_csv_admins[$data[$num_login]][$en_tete[$j]] = $en_tete[$j] == "statut" ? "0minirezo" : $data[$j];
    164157                                                if ($en_tete[$j] == 'ss_groupe' AND $data[$j]) {
    165158                                                        $Trub = explode('|', $data[$j]);
     
    179172    // tableau CSV total
    180173    $tableau_csv_total = array_merge($tableau_csv_visiteurs, $tableau_csv_redacs, $tableau_csv_admins);
    181 
     174spip_log("tableau csv total","csvspip");
     175//spip_log($tableau_csv_total,"csvspip");
    182176
    183177    //récupération des auteurs de la bdd en 4 array
     178    // on ne prend pas les auteurs sans login
    184179    // $poubelle_bdd = les auteurs à la poubelle
    185180    // $visiteur_bdd = les visiteurs
    186181    // $redacteur_bdd
    187182    // $admin_restreint_bdd
    188     // la cle de chaque tableau est le login et s'il n'existe pas le mail
     183    // la cle de chaque tableau est le login
    189184    $poubelle_bdd=$visiteur_bdd=$redacteur_bdd=$admin_restreint_bdd=array();
    190     $poubelle_bdd_req        = sql_allfetsel('*', 'spip_auteurs',array('statut="5poubelle"','(login!="" OR email!="")'));   
     185    $poubelle_bdd_req        = sql_allfetsel('*', 'spip_auteurs',array('statut="5poubelle"','(login!="")'));   
    191186    foreach ($poubelle_bdd_req as $key) {
    192         $poubelle_bdd[$key['login']?$key['login']:$key['email']]=$key;
     187        $poubelle_bdd[$key['login']]=$key;
    193188    }   
    194     $visiteur_bdd_req        = sql_allfetsel('*', 'spip_auteurs',array('statut="6forum"','(login!="" OR email!="")'));   
     189    $visiteur_bdd_req        = sql_allfetsel('*', 'spip_auteurs',array('statut="6forum"','(login!="")'));   
    195190    foreach ($visiteur_bdd_req as $key) {
    196         $visiteur_bdd[$key['login']?$key['login']:$key['email']]=$key;
    197     }
    198     $redacteur_bdd_req       = sql_allfetsel('*', 'spip_auteurs', array('statut="1comite"','(login!="" OR email!="")'));
     191        $visiteur_bdd[$key['login']]=$key;
     192    }
     193    $redacteur_bdd_req       = sql_allfetsel('*', 'spip_auteurs', array('statut="1comite"','(login!="")'));
    199194    foreach ($redacteur_bdd_req as $key) {
    200         $redacteur_bdd[$key['login']?$key['login']:$key['email']]=$key;
     195        $redacteur_bdd[$key['login']]=$key;
    201196    }
    202197    //on récupère seulement les admins restreints !!!
     
    208203        "liens.objet = 'rubrique'",
    209204        "liens.id_auteur = auteurs.id_auteur",
    210         '(login!="" OR email!="")');
     205        '(login!="")');
    211206    $admin_restreint_bdd_req       = sql_allfetsel("DISTINCT auteurs.*" ,$from, $where);
    212207    foreach ($admin_restreint_bdd_req as $key) {
    213         $admin_restreint_bdd[$key['login']?$key['login']:$key['email']]=$key;
     208        $admin_restreint_bdd[$key['login']]=$key;
    214209    }
    215210
     
    235230                }
    236231        }
    237 
     232        spip_log($tableau_bdd_zones_admins,"csvspip");
    238233        // créer les rubriques admins du csv n'existant pas et les indexer
    239234        foreach($tableau_csv_rubriques_admins as $id_rub=>$rub){
     
    254249       
    255250        // PARTIE I : maj ou ajout des auteurs
    256         // cas 1 : ajout
    257         if (!$maj_utilisateur) {
    258                 $tableau_nouveaux_auteurs = csv2spip_diff_nouveaux($tableau_csv_total, $tableau_bdd_total);
    259                 foreach($tableau_nouveaux_auteurs as $login => $Tauteur)
    260                         csv2spip_ajout_utilisateur($login,$Tauteur,$Tnom_champs_bdd,$Tcorrespondances, $tableau_bdd_rubriques_admins, $tableau_bdd_zones_admins);
    261         }
    262 
    263 
    264        
     251        $tableau_nouveaux_auteurs = array_diff_key($tableau_csv_total, $tableau_bdd_total);
     252        // si maj demandée
     253        if ($maj_utilisateur) {
     254                // construire le tableau des utilisateurs à mettre à jour, indexé sur le login
     255                $tableau_maj_auteurs = array_diff_key($tableau_csv_total, $tableau_nouveaux_auteurs);
     256               
     257                // construire le tableau de correspondance login csv => id_auteur bdd
     258                $tableau_maj_auteurs_id = array();
     259                $Tlogins = array_keys($tableau_maj_auteurs);
     260                $chaine_in = implode('","', $Tlogins);
     261                $chaine_in = '"'.$chaine_in.'"';
     262                $res = sql_select('id_auteur, login', 'spip_auteurs', array('login IN ('.$chaine_in.')'));
     263                while ($row = sql_fetch($res)) {
     264                        $tableau_maj_auteurs_id[$row['login']] = $row['id_auteur'];
     265                }
     266
     267                // si remplacer les données zones et rubriques administrées: supprimer les liens existant
     268                if ($type_maj == 'remplacer') {
     269                        // suppression des liens des rubriques administrées
     270                        objet_dissocier(array("auteur"=>array_values($tableau_maj_auteurs_id)), array("rubrique"=>"*"));       
     271                        // suppression des zones des auteurs
     272                        zone_lier('',"auteur",array_values($tableau_maj_auteurs_id),'del');
     273                }
     274//spip_log("table zone admin","csvspip");
     275
     276//spip_log($tableau_bdd_zones_admins,"csvspip");
     277
     278                // maj des données des auteurs
     279                foreach($tableau_maj_auteurs as $login => $Tauteur)
     280                        csv2spip_ajout_utilisateur($login, $Tauteur, $Tnom_champs_bdd, $Tcorrespondances, $tableau_bdd_rubriques_admins, $tableau_bdd_zones_admins, $tableau_maj_auteurs_id[$login]);
     281
     282/*             
     283echo '<br><pre>';
     284var_dump($tableau_maj_auteurs_id);
     285*/
     286               
     287        }
     288       
     289       
     290        // dans tous les cas ajout des nouveaux
     291        foreach($tableau_nouveaux_auteurs as $login => $Tauteur)
     292                csv2spip_ajout_utilisateur($login,$Tauteur,$Tnom_champs_bdd,$Tcorrespondances, $tableau_bdd_rubriques_admins, $tableau_bdd_zones_admins);
     293
     294               
     295       
     296
     297
    265298
    266299    // PARTIE II : Suppressions des absents (changer le statut des auteurs en 5.poubelle)  avec 3 choix pour la gestion des articles associés
     
    333366}
    334367
    335 /*
    336  * générer l"array des logins ou mails n'existant pas encore dans la base
    337  * @param $Tbdd: l'array indexé login/mail extrait de la base
    338  * @param $Tcsv: l'array indexé login/mail extrait du csv
    339  * @return l'array des logins ou mails
    340  */
    341 function csv2spip_diff_nouveaux($Tcsv, $Tbdd){
    342         $Tid = array();
    343         $T = array_diff_key($Tcsv, $Tbdd);
    344         return $T;
    345 }
    346 
    347368
    348369/*
     
    351372 * @param array associatif CSV: Tauteur_csv  nom_champ : valeur
    352373 */
    353 function csv2spip_ajout_utilisateur($login,$Tauteur_csv,$Tnom_champs_bdd,$Tcorrespondances, $tableau_bdd_rubriques_admins, $tableau_bdd_zones_admins){
    354 echo '<br>login: '.$login;
     374function csv2spip_ajout_utilisateur($login,$Tauteur_csv,$Tnom_champs_bdd,$Tcorrespondances, $tableau_bdd_rubriques_admins, $tableau_bdd_zones_admins, $id_auteur=0){
    355375        $set = $Tzones = $Trubadmin = array();
    356376        foreach($Tauteur_csv as $champ => $valeur){
     
    364384                        $T = explode('|',$valeur);
    365385                        foreach($T as $zone){
    366                                 $Tzones[] = array_search(strtolower($zone),$tableau_bdd_zones_admins);
    367                         }
     386spip_log("zone","csvspip");
     387spip_log("|".$zone."|","csvspip");
     388                                $Tzones[] = array_search(trim(rtrim(strtolower($zone))),$tableau_bdd_zones_admins);
     389                        }
     390spip_log("tzone de id_auteur $id_auteur","csvspip");
     391spip_log($tableau_bdd_zones_admins,"csvspip");
     392spip_log($Tzones,"csvspip");
    368393
    369394                }
     
    372397                }
    373398        }
    374         if ($set["login"] == "")
    375                 $set["login"]=$login;
    376 
    377 
    378         //inserer l'auteur
    379         $id_auteur=auteur_inserer();
     399
     400        //inserer l'auteur si il n'y a pas d'id_auteur transmis
     401        if (!$id_auteur)
     402                $id_auteur = auteur_inserer();
     403       
     404        // remplir les champs ou les maj
    380405        auteur_modifier($id_auteur,$set);
    381406
  • _plugins_/csv2spip/dev_spip3/lang/csv2spip_fr.php

    r75986 r76558  
    3737    'type_maj_remplacer'=>'Remplacer',
    3838    'type_maj_ajouter'=>'Ajouter',
    39     'type_maj_label'=>'Gestion des rubriques administrées et des zones d\'accès des utilisateurs',
     39    'type_maj_label'=>'Gestion des rubriques administrées et des zones d\'accès des utilisateurs existants',
    4040
    4141    'nom_champs'=>'Sélectionnez les champs que vous souhaitez exporter',
  • _plugins_/csv2spip/dev_spip3/paquet.xml

    r73799 r76558  
    22        prefix="csv2spip"
    33        categorie="outil"
    4         version="5.0.0"
     4        version="5.0.1"
    55        etat="dev"
    66        compatibilite="[3.0.0;3.0.*]"
Note: See TracChangeset for help on using the changeset viewer.