Changeset 96446 in spip-zone for _plugins_/csv2auteurs


Ignore:
Timestamp:
Apr 4, 2016, 11:09:07 AM (4 years ago)
Author:
cy_altern@…
Message:

Ajout de la possibilite d'utiliser les id_rubrique et id_zone lors de l'importation.
Amelioration du message de retour lors de l'importation afin de preciser les elements non pris en compte et les nombres d'utilisateurs et rubriques crees et/ou mises a jour.
Corrections de nombreuses petouilles (en particulier pour les admins restreints n'ayant pas/plus de rubrique).

Location:
_plugins_/csv2auteurs/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/csv2auteurs/trunk/formulaires/csv2auteurs_exportation.php

    r82832 r96446  
    22if (!defined('_ECRIRE_INC_VERSION')) return;
    33
    4 function formulaires_csv2auteurs_exportation_charger_dist(){
    5     $nom_champs=csv2auteurs_exportation();
    6     $valeurs = array(
    7         "choix_statut"=>"6forum",
    8         "nom_champs" => $nom_champs,
    9     );
     4function formulaires_csv2auteurs_exportation_charger_dist() {
     5    $nom_champs = csv2auteurs_exportation();
     6    $valeurs = array( "choix_statut" => "6forum", "nom_champs" => $nom_champs );
    107    //var_dump($nom_champs);
    118   
    12 return $valeurs;
     9        return $valeurs;
    1310}
    1411
    15 function formulaires_csv2auteurs_exportation_verifier_dist(){
     12function formulaires_csv2auteurs_exportation_verifier_dist() {
    1613    $erreurs = array();
    1714    // seuls les webmestres ont le droit d'utiliser cet outil!
    18     if ($GLOBALS['visiteur_session']['webmestre'] != 'oui') {
     15    if ($GLOBALS['visiteur_session']['webmestre'] != 'oui')
    1916                $erreurs['message_erreur'] = _T('csv2auteurs:non_autorise');
    20         }
     17
    2118    return $erreurs;
    2219}
    2320
    24 function formulaires_csv2auteurs_exportation_traiter_dist(){
     21function formulaires_csv2auteurs_exportation_traiter_dist() {
    2522    $nom_champs   = _request('nom_champs');
    2623    $choix_statut = _request('choix_statut');
    2724    $retour = $login_restreint = array();
     25    $correspondances_statuts = array( "0minirezo" => "administrateur", "1comite" => "redacteur", "6forum" => "visiteur");
    2826   
    2927    // creation du nom du fichier
    3028    $date_du_jour=date(Y_m_d);
    3129    $nom_fichier_csv = $date_du_jour.'_export_table_auteurs.csv';
    32 
    33     $statut = array(
    34         "0minirezo" => "administrateur",
    35         "1comite"   => "redacteur",
    36         "6forum"    => "visiteur",
    37     );
     30   
    3831    // récupération des données dans la tables spip_auteurs que l'on place dans le champ "ss_groupe"
    3932    // Ecriture de la premiere ligne d'entete
    40     foreach ($nom_champs as $entete){
    41         $tableau_csv[0][$entete]=$entete;
    42     }
     33    foreach ($nom_champs as $entete) 
     34        $tableau_csv[0][$entete] = $entete;
     35
    4336    // ajout de l'admin restreint
    44     $tableau_csv[0]["ss_groupe"]="ss_groupe";
     37    $tableau_csv[0]["ss_groupe"] = "ss_groupe";
    4538    // ajout de l'acces restreint s'il existe
    46     if (test_plugin_actif("accesrestreint"))
    47                 $tableau_csv[0]["zone"]="zone";
    48     $i=1;
     39    if (test_plugin_actif ("accesrestreint"))
     40                $tableau_csv[0]["zone"] = "zone";
    4941
    5042    // création d'un array contenant tous les logins des admins restreints
    51     if(in_array("0minirezo",$choix_statut)){
    52         $r = sql_select("DISTINCT auteur.login AS login",array("spip_auteurs AS auteur","spip_auteurs_liens AS liens"),array("auteur.statut='0minirezo'","liens.id_auteur=auteur.id_auteur","liens.objet='rubrique'"));
    53         while($row = sql_fetch($r)){
    54             $login_restreint[]=$row['login'];
    55         }
     43    $i = 1;
     44    if (in_array("0minirezo", $choix_statut)) {
     45        $r = sql_select("DISTINCT auteur.login AS login",
     46                        array("spip_auteurs AS auteur","spip_auteurs_liens AS liens"),
     47                        array("auteur.statut='0minirezo'","liens.id_auteur=auteur.id_auteur","liens.objet='rubrique'")
     48                );
     49        while ($row = sql_fetch($r))
     50            $login_restreint[] = $row['login'];
    5651    }
    5752
    58     if ($res = sql_select('*', 'spip_auteurs AS auteur')){
    59         while ($row = sql_fetch($res)){
     53    if ($res = sql_select('*', 'spip_auteurs AS auteur')) {
     54        while ($row = sql_fetch($res)) {
    6055            // test les statuts demandés
    61             if (in_array($row[statut],$choix_statut)){
     56            if (in_array($row[statut], $choix_statut)) {
    6257                // si c'est un admin, on ne selectionne que les admins restreints !!!
    63                 if ((($row['statut'] == "0minirezo") AND (in_array($row['login'],$login_restreint))) OR $row['statut']=="1comite" OR $row['statut'] == "6forum"){
     58                if ((($row['statut'] == "0minirezo") AND (in_array($row['login'], $login_restreint)))
     59                                        OR $row['statut'] == "1comite"
     60                                        OR $row['statut'] == "6forum") {
    6461                    // Prise en compte de tous les champs selectionnés
    65                     foreach($nom_champs as $nom_champ){
     62                    foreach ($nom_champs as $nom_champ) {
    6663                        // Prise en compte du champ statut
    67                         if ($nom_champ == "statut"){
    68                             $tableau_csv[$i]["statut"] = $statut[$row[statut]];
    69                         }else {
     64                        if ($nom_champ == "statut") {
     65                            $tableau_csv[$i]["statut"] = $correspondances_statuts[$row['statut']];
     66                        }
     67                        else {
    7068                            $tableau_csv[$i][$nom_champ]=$row[$nom_champ];
    7169                        }
    72                     };
     70                    }
    7371                    // on selectionne les noms des rubriques pour les admins restreints
    74                     if($res2 = sql_select(
    75                         array(
    76                             "rub.titre AS titre"),
    77                         array(
    78                             "spip_rubriques AS rub",
     72                    if ($res2 = sql_select(
     73                        array("rub.titre AS titre"),
     74                        array("spip_rubriques AS rub",
    7975                            "spip_auteurs_liens AS lien"),
    80                         array(
    81                             "rub.id_rubrique = lien.id_objet",
    82                             "lien.id_auteur  = $row[id_auteur]",
     76                        array("rub.id_rubrique = lien.id_objet",
     77                            "lien.id_auteur  = ".$row['id_auteur'],
    8378                            "lien.objet      = 'rubrique'")
    8479                        )) {
    85 
    8680                            $j=0;
    8781                            while ($row2 = sql_fetch($res2)) {
    88                                 $input[$row[nom]][$j]=$row2[titre];
     82                                $input[$row['nom']][$j] = $row2['titre'];
    8983                                $j++;
    9084                            }
    91                             if ($input[$row[nom]]){
    92                                 $tableau_csv[$i]["ss_groupe"]=implode('|',$input[$row[nom]]);
     85                            if ($input[$row['nom']]) {
     86                                $tableau_csv[$i]["ss_groupe"] =implode('|',$input[$row['nom']]);
    9387                            }
    9488                                                else
    95                                                         $tableau_csv[$i]["ss_groupe"]= "";
    96                         }
    97                     // Prise en compte des zones restreintes : plugin acces restreint si le plugin est installe
    98                     if (test_plugin_actif("accesrestreint")){
    99                         $k=0;
     89                                                        $tableau_csv[$i]["ss_groupe"] = "";
     90                    }
     91                    // Prise en compte des zones restreintes : si le plugin est installe
     92                    if (test_plugin_actif ("accesrestreint")) {
    10093                        if ($res3 = sql_select(
    101                             array(
    102                                 "rub.titre AS titre"),
    103                             array(
    104                                 "spip_zones_liens AS zone_auteur",
    105                                 "spip_zones_liens AS zone_rubrique",
    106                                 "spip_rubriques AS rub"),
    107                             array(
    108                                 "zone_auteur.id_zone = zone_rubrique.id_zone",
    109                                 "zone_auteur.objet='auteur' AND zone_auteur.id_objet =$row[id_auteur]",
    110                                 "zone_rubrique.objet='rubrique'AND zone_rubrique.id_objet = rub.id_rubrique")
    111                             )) {
    112                                 while ($row3 = sql_fetch($res3)){
    113                                     $zones[$row[nom]][$k]=$row3[titre];
    114                                     $tableau_csv[$i]["zone"]=implode('|',$zones[$row[nom]]);
    115                                     $k++;
    116 
    117                                 }
    118                             }
     94                            array("zones.titre AS titre"),
     95                            array("spip_zones_liens AS liens", "spip_zones AS zones"),
     96                            array("liens.objet = 'auteur'",
     97                                                                "liens.id_objet = ".$row['id_auteur'],
     98                                                                "liens.id_zone = zones.id_zone")
     99                          )) {
     100                                                                while ($row3 = sql_fetch($res3)) {
     101                                                                        $zones[$row['nom']][] = $row3['titre'];
     102                                                                        $tableau_csv[$i]['zone'] = implode('|',$zones[$row['nom']]);
     103                                                                }
     104                                                        }
    119105                    }
    120106
     
    143129    return $retour;
    144130}
    145 function csv2auteurs_exportation(){
    146131
     132// fonction pour récupérer un array avec les noms de schamps de la table spip_auteurs
     133function csv2auteurs_exportation() {
    147134    //récupération des noms des champs
    148135    $nom_champs= array();
     
    150137    $desc = sql_showtable('spip_auteurs',true);
    151138    foreach ($desc[field] as $cle => $valeur)
    152                 $nom_champs[$cle]="-> $cle";
    153     foreach ($champ_supprimer as $cle){
     139                $nom_champs[$cle] = "-> $cle";
     140    foreach ($champ_supprimer as $cle) {
    154141        unset($nom_champs[$cle]);
    155142    }
  • _plugins_/csv2auteurs/trunk/formulaires/csv2auteurs_importation.php

    r81148 r96446  
    1919    );
    2020       
    21 return $valeurs;
     21        return $valeurs;
    2222}
    2323
     
    3535    } else {
    3636    //Transfert réussi
    37         if ($_FILES['fichier_csv']['error'] > 0) $erreurs['fichier_csv'] = _T('csv2auteurs:transfert');
     37        if ($_FILES['fichier_csv']['error'] > 0)
     38                        $erreurs['fichier_csv'] = _T('csv2auteurs:transfert');
    3839    //Taille max du fichier csv < 2Mo
    3940        $maxsize=1000000;
    40         if ($_FILES['fichier_csv']['size'] > $maxsize) $erreurs['fichier_csv'] =_T('csv2auteurs:taille');
     41        if ($_FILES['fichier_csv']['size'] > $maxsize)
     42                        $erreurs['fichier_csv'] =_T('csv2auteurs:taille');
    4143    //Extension csv
    4244        $extensions_valides = array( 'csv','txt' );
    4345        $extension_upload = strtolower(  substr(  strrchr($_FILES['fichier_csv']['name'], '.')  ,1)  );
    44         if (!in_array($extension_upload,$extensions_valides)) $erreurs['fichier_csv'] = _T('csv2auteurs:extension');
     46        if (!in_array($extension_upload,$extensions_valides))
     47                        $erreurs['fichier_csv'] = _T('csv2auteurs:extension');
    4548    }
    4649    //Il y a des erreurs
     
    5255
    5356function formulaires_csv2auteurs_importation_traiter_dist(){
     57    $retour = array();
    5458    $maj_utilisateur = _request('maj_utilisateur');
    5559    $abs_redacs = _request('abs_redac');
     
    6266    $type_maj=_request('type_maj');
    6367
    64     // recuperation de l'id de la rubrique parent des rubriques admins
    65     $id_rubrique_parent_admin = _request('rubrique_parent');
    66     $id_rubrique_parent_admin = explode('|',$id_rubrique_parent_admin[0]);
    67     $id_rubrique_parent_admin = $id_rubrique_parent_admin[1];
     68    // recuperation de l'id de la rubrique parent des rubriques admins
     69    // NB: le sélecteur de rubrique retourne un champ rubrique_parent[] avec une valeur du style "rubrique|17"
     70    if (is_array(_request('rubrique_parent'))) {
     71                $id_rubrique_parent_admin = _request('rubrique_parent');
     72                $id_rubrique_parent_admin = explode('|',$id_rubrique_parent_admin[0]);
     73                $id_rubrique_parent_admin = $id_rubrique_parent_admin[1];
     74        }
     75        else
     76                $id_rubrique_parent_admin = 0;
    6877
    6978    //récupération de l'id de la rubrique parent archive
    70     $id_rubrique_parent_archive = _request('rubrique_parent_archive');
    71     $id_rubrique_parent_archive = explode('|',$id_rubrique_parent_archive[0]);
    72     $id_rubrique_parent_archive = $id_rubrique_parent_archive[1];
    73    
    74     $retour = array();
     79    if (is_array(_request('rubrique_parent_archive'))) {
     80                $id_rubrique_parent_archive = _request('rubrique_parent_archive');
     81                $id_rubrique_parent_archive = explode('|',$id_rubrique_parent_archive[0]);
     82                $id_rubrique_parent_archive = $id_rubrique_parent_archive[1];
     83        }
     84        else
     85                $id_rubrique_parent_archive = 0;
    7586
    7687    include_spip('action/editer_rubrique');
     
    91102    $destination = _DIR_TMP.basename($tmp_name);
    92103    $resultat    = move_uploaded_file($tmp_name,$destination);
    93     if (!$resultat) {
     104    if (!$resultat)
    94105        $retour['message_erreur'] = _T('csv2auteurs:transfert');
    95     } else{
    96         $retour['message_ok'] = _T('csv2auteurs:bravo');
    97     }
     106    else
     107        $retour['message_ok'] = _T('csv2auteurs:chargement_fichier_CSV_OK', array('nom_fichier' => $_FILES['fichier_csv']['name']));
     108       
    98109
    99110    // transformation du fichier csv en 4 array :
     
    105116    $tableau_csv_visiteurs = $tableau_csv_redacs = $tableau_csv_admins = array();
    106117    $tableau_csv_rubriques_admins = array();
    107     $fichiercsv= fopen($destination, "r");
    108     $i=0;
    109    
    110     // correspondance statut spip / statut csv
    111     $Tcorrespondances = array('administrateur'=>'0minirezo', 'redacteur'=>'1comite', 'visiteur'=>'6forum', 'poubelle' => '5poubelle');
     118    $fichiercsv = fopen($destination, "r");
     119   
     120    // correspondance statut spip / statut csv (+ admettre les status spip ou les status abrégés dans le CSV)
     121    $Tcorrespondances = array('administrateur'=>'0minirezo', 'redacteur'=>'1comite', 'rédacteur'=>'1comite', 'visiteur'=>'6forum', 'poubelle' => '5poubelle',
     122                '0minirezo'=>'0minirezo', '1comite'=>'1comite', '6forum'=>'6forum', '5poubelle' => '5poubelle',
     123                'admin'=>'0minirezo', 'redac'=>'1comite', 'visit'=>'6forum', 'poub' => '5poubelle');
    112124       
    113125    // tableau de tous les admins
     
    127139        'login!=""');
    128140    $result = sql_select(array('login'),$from, $where);
    129     while ($r = sql_fetch($result)) {
     141    while ($r = sql_fetch($result))
    130142        $Tadmin_restreint[] = $r['login'];
    131     }
     143   
    132144    // tableau admins complets
    133145    $Tadmin_complet = array_diff($Tadmin_tous, $Tadmin_restreint);
    134     // traiter fichier CSV
     146   
     147   
     148    // traiter le fichier CSV
     149    $i = 0;
    135150    $num_statut = $num_login = -1;
    136     while (($data= fgetcsv($fichiercsv,"$separateur")) !== FALSE){
     151    while (($data = fgetcsv($fichiercsv, "$separateur")) !== FALSE){
    137152       // petit hack car fgetcsv ne reconnait pas le ~ comme séparateur !!!
    138        $data           = implode("$separateur",$data);
    139        $data           = explode("$separateur",$data);
     153       $data           = implode("$separateur", $data);
     154       $data           = explode("$separateur", $data);
    140155       $nombre_elements = count($data);
    141         if ($i==0) {
     156       
     157       // régler le problème des champs CSV avec des espaces qui trainent en début ou fin de chaine
     158       $data = array_map('trim', $data);
     159       
     160       // Récupération de la ligne d'entete
     161       if ($i == 0) {
    142162            for ($j = 0; $j < $nombre_elements; $j++) {
    143                 $en_tete[$j] = strtolower($data[$j]);    //Récupération de la ligne d'entete
     163                $en_tete[$j] = strtolower($data[$j]);   
    144164                if ($en_tete[$j] == 'statut')
    145165                    $num_statut = $j;
     
    153173       }
    154174       else {
     175                        // on ne veut pas les auteurs du CSV ayant un login égal à celui d'un admin complet
     176                        if (in_array($data[$num_login], $Tadmin_complet)) {
     177                                $retour['message_ok'] .= '<br />'._T('csv2auteurs:login_idem_admin_non_traite', array('login_refuse' => $data[$num_login]));
     178                                continue;
     179                        }
    155180            for ($j = 0; $j < $nombre_elements; $j++) {
    156                 // on ne veut pas les auteurs du CSV ayant login égal à celui d'un admin complet
    157181                if (($data[$num_login] AND !in_array($data[$num_login], $Tadmin_complet))) {
    158182                    // creation du tableau contenant l'ensemble des données à importer
    159183                   if ($Tcorrespondances[strtolower($data[$num_statut])] == '6forum')
    160184                        $tableau_csv_visiteurs[$data[$num_login]][$en_tete[$j]] = $en_tete[$j] == "statut" ? "6forum" : $data[$j];
     185                       
    161186                   if ($Tcorrespondances[strtolower($data[$num_statut])] == '1comite')
    162187                        $tableau_csv_redacs[$data[$num_login]][$en_tete[$j]] = $en_tete[$j] == "statut" ? "1comite" : $data[$j];
     188                       
    163189                   if ($Tcorrespondances[strtolower($data[$num_statut])] == '0minirezo') {
    164190                        $tableau_csv_admins[$data[$num_login]][$en_tete[$j]] = $en_tete[$j] == "statut" ? "0minirezo" : $data[$j];
     191                        // récup des rubriques pour les admins restreints
    165192                        if ($en_tete[$j] == 'ss_groupe' AND $data[$j]) {
    166193                            $Trub = explode('|', $data[$j]);
    167                             foreach($Trub as $rub)
     194                            foreach ($Trub as $rub)
    168195                                if (!in_array($rub, $tableau_csv_rubriques_admins))
    169196                                    $tableau_csv_rubriques_admins[] = $rub;
     
    177204    fclose($fichiercsv);
    178205    unlink($destination);
     206    $retour['message_ok'] .= '<br />'._T('csv2auteurs:nbe_auteurs_a_traiter', array('nb_auteurs' => $i - 1));
    179207
    180208    // tableau CSV total
    181209    $tableau_csv_total = $tableau_csv_visiteurs + $tableau_csv_redacs + $tableau_csv_admins;
    182 //    echo "<pre>";
    183 //    print_r($tableau_csv_visiteurs);
    184 //    echo "admi";
    185 //    print_r($tableau_csv_admins);
    186 //    echo "red";
    187 //    print_r($tableau_csv_redacs);
    188 //    print_r($tableau_csv_total);die;
    189210
    190211//spip_log("tableau csv total","csvspip");
     
    198219    // $admin_restreint_bdd
    199220    // la cle de chaque tableau est le login
    200     $poubelle_bdd=$visiteur_bdd=$redacteur_bdd=$admin_restreint_bdd=array();
    201 /*    $poubelle_bdd_req        = sql_allfetsel('*', 'spip_auteurs',array('statut="5poubelle"','(login!="")'));
    202     foreach ($poubelle_bdd_req as $key) {
    203         $poubelle_bdd[$key['login']]=$key;
    204     }   
    205 */
    206     $visiteur_bdd_req        = sql_allfetsel('*', 'spip_auteurs',array('statut="6forum"','(login!="")'));
     221    $poubelle_bdd = $visiteur_bdd = $redacteur_bdd = $admin_restreint_bdd = array();
     222    $visiteur_bdd_req = sql_allfetsel('*', 'spip_auteurs', array('statut="6forum"','(login!="")'));
    207223    foreach ($visiteur_bdd_req as $key) {
    208         $visiteur_bdd[$key['login']]=$key;
    209     }
    210     $redacteur_bdd_req       = sql_allfetsel('*', 'spip_auteurs', array('statut="1comite"','(login!="")'));
     224        $visiteur_bdd[$key['login']] = $key;
     225    }
     226    $redacteur_bdd_req = sql_allfetsel('*', 'spip_auteurs', array('statut="1comite"','(login!="")'));
    211227    foreach ($redacteur_bdd_req as $key) {
    212         $redacteur_bdd[$key['login']]=$key;
     228        $redacteur_bdd[$key['login']] = $key;
    213229    }
    214230    //on récupère seulement les admins restreints !!!
     
    221237        "liens.id_auteur = auteurs.id_auteur",
    222238        '(login!="")');
    223     $admin_restreint_bdd_req       = sql_allfetsel("DISTINCT auteurs.*" ,$from, $where);
     239    $admin_restreint_bdd_req = sql_allfetsel("DISTINCT auteurs.*" ,$from, $where);
    224240    foreach ($admin_restreint_bdd_req as $key) {
    225         $admin_restreint_bdd[$key['login']]=$key;
     241        $admin_restreint_bdd[$key['login']] = $key;
    226242    }
    227243
     
    234250    $tableau_bdd_rubriques_admins = array();
    235251    $result = sql_select(array('id_rubrique', 'titre'), 'spip_rubriques');
    236     while ($row = sql_fetch($result)){
     252    while ($row = sql_fetch($result)) {
    237253        $tableau_bdd_rubriques_admins[$row['id_rubrique']] = strtolower($row['titre']);
    238254    }
     
    241257    // construction du tableau de correspondance nom_zone avec leur id
    242258    $tableau_bdd_zones_admins = array();
    243     if (test_plugin_actif("accesrestreint")){
     259    if (test_plugin_actif("accesrestreint")) {
    244260        $result = sql_select(array('id_zone', 'titre'), 'spip_zones');
    245         while ($row = sql_fetch($result)){
     261        while ($row = sql_fetch($result)) {
    246262            $tableau_bdd_zones_admins[$row['id_zone']] = strtolower($row['titre']);
    247263        }
    248264    }
    249     spip_log($tableau_bdd_zones_admins,"csvspip");
     265//    spip_log($tableau_bdd_zones_admins,"csvspip");
     266   
    250267    // créer les rubriques admins du csv n'existant pas et les indexer
    251     foreach($tableau_csv_rubriques_admins as $id_rub=>$rub){
    252         if (!in_array(strtolower($rub), $tableau_bdd_rubriques_admins)) {
    253             $set = array('titre'=>$rub);
     268    // le champ ss_groupe du fichier CSV peut contenir le titre ou  l'id de la rubrique
     269    // pour la création il faut un titre
     270    $nb_rub_crees = 0;
     271    foreach ($tableau_csv_rubriques_admins as $num_rub => $rub) {
     272        if (!in_array(strtolower($rub), $tableau_bdd_rubriques_admins) AND !is_numeric($rub)) {
     273            $set = array('titre' => $rub);
    254274            $id_rub = rubrique_inserer($id_rubrique_parent_admin);
    255275            rubrique_modifier($id_rub, $set);
    256276            $tableau_bdd_rubriques_admins[$id_rub] = strtolower($rub);
    257         }
    258     }
     277            $nb_rub_crees++;
     278        }
     279    }
     280    if ($nb_rub_crees > 0)
     281                $retour['message_ok'] .= '<br />'._T('csv2auteurs:nbe_rubriques_admin_crees', array('nb_rubriques' => $nb_rub_crees));
    259282
    260283    //Récuperer les champs de la table auteurs
    261     $Tnom_champs_bdd=array();
     284    $Tnom_champs_bdd = array();
    262285    $desc = sql_showtable('spip_auteurs',true);
    263286    foreach ($desc['field'] as $cle => $valeur)
     
    285308        if ($type_maj == 'remplacer' AND test_plugin_actif("accesrestreint")) {
    286309            // suppression des liens des rubriques administrées
    287             objet_dissocier(array("auteur"=>array_values($tableau_maj_auteurs_id)), array("rubrique"=>"*"));   
     310            objet_dissocier(array("auteur" => array_values($tableau_maj_auteurs_id)), array("rubrique" => "*"));   
    288311            // suppression des zones des auteurs
    289312            zone_lier('',"auteur",array_values($tableau_maj_auteurs_id),'del');
    290         }
    291 //spip_log("table zone admin","csvspip");
    292 
    293 //spip_log($tableau_bdd_zones_admins,"csvspip");
     313            $retour['message_ok'] .= '<br />'._T('csv2auteurs:raz_rubriques_admins_zones');
     314        }
    294315
    295316        // maj des données des auteurs
    296         foreach($tableau_maj_auteurs as $login => $Tauteur)
    297             csv2auteurs_ajout_utilisateur($login, $Tauteur, $Tnom_champs_bdd, $Tcorrespondances, $tableau_bdd_rubriques_admins, $tableau_bdd_zones_admins, $tableau_maj_auteurs_id[$login]);
    298 
    299 /*     
    300 echo '<br><pre>';
    301 var_dump($tableau_maj_auteurs_id);
    302 */
    303        
    304     }
    305    
     317        $ret = '';
     318        foreach ($tableau_maj_auteurs as $login => $Tauteur) {
     319            $ret = csv2auteurs_ajout_utilisateur($login, $Tauteur, $Tnom_champs_bdd, $Tcorrespondances, $tableau_bdd_rubriques_admins, $tableau_bdd_zones_admins, $tableau_maj_auteurs_id[$login]);
     320            if ($ret != '')
     321                                $retour['message_ok'] .= $ret;
     322                }
     323                $retour['message_ok'] .= '<br />'._T('csv2auteurs:nb_auteurs_maj', array('nb_auteurs_maj' => count($tableau_maj_auteurs)));
     324    }
    306325   
    307326    // dans tous les cas ajout des nouveaux
    308     foreach($tableau_nouveaux_auteurs as $login => $Tauteur)
    309         csv2auteurs_ajout_utilisateur($login,$Tauteur,$Tnom_champs_bdd,$Tcorrespondances, $tableau_bdd_rubriques_admins, $tableau_bdd_zones_admins);
    310 
    311        
    312    
    313 
    314 
    315 
    316     // PARTIE II : Suppressions des absents (changer le statut des auteurs en 5.poubelle)  avec 3 choix pour la gestion des articles associés
     327    $ret = '';
     328    foreach ($tableau_nouveaux_auteurs as $login => $Tauteur) {
     329        $ret = csv2auteurs_ajout_utilisateur($login,$Tauteur,$Tnom_champs_bdd,$Tcorrespondances, $tableau_bdd_rubriques_admins, $tableau_bdd_zones_admins);
     330        if ($ret != '')
     331                                $retour['message_ok'] .= $ret;
     332        }
     333        $retour['message_ok'] .= '<br />'._T('csv2auteurs:nb_auteurs_crees', array('nb_auteurs_crees' => count($tableau_nouveaux_auteurs)));
     334
     335
     336    // PARTIE II : Suppressions des absents (changer le statut des auteurs en 5poubelle)  avec 3 choix pour la gestion des articles associés
    317337    // 1. ras
    318338    // 2. supprimer les articles
     
    320340
    321341    // Si choix3 : transferer les articles , création de la rubrique d'archive (en tenant compte d'une rubrique parent)
    322     if($traitement_article_efface == "transferer_articles"){
    323         if(!$id_rubrique_archive = sql_fetsel('id_rubrique','spip_rubriques',array('titre ="'.$nom_rubrique_archive.'"',"id_parent=$id_rubrique_parent_archive"))){
     342    if ($traitement_article_efface == "transferer_articles") {
     343        if (!$id_rubrique_archive = sql_fetsel('id_rubrique','spip_rubriques',array('titre ="'.$nom_rubrique_archive.'"',"id_parent=$id_rubrique_parent_archive"))) {
    324344            $objet = 'rubrique';
    325             $set = array('titre'=>$nom_rubrique_archive);
    326             $id_rubrique_archive = objet_inserer($objet,$id_rubrique_parent_archive);
     345            $set = array('titre' => $nom_rubrique_archive);
     346            $id_rubrique_archive = objet_inserer($objet, $id_rubrique_parent_archive);
    327347            objet_modifier($objet, $id_rubrique_archive, $set);
     348            $retour['message_ok'] .= '<br />'._T('csv2auteurs:rubrique_archive_cree', array('titre_rubrique_archive' => $nom_rubrique_archive));
    328349        }
    329350    }   
     
    341362                        $Tnot_in[] = $Tid_auteur['id_auteur'];
    342363                $not_in = sql_in('id_auteur', $Tnot_in, 'NOT');
     364               
    343365                // récupérer les auteurs à la poubelle sans articles
    344366                $Tabs_poubelle = sql_allfetsel('id_auteur', 'spip_auteurs',array('statut="5poubelle"', $not_in));
     
    349371                $in = sql_in('id_auteur', $Ta_suppr);
    350372                sql_delete('spip_auteurs', $in);
     373                if (count($Tabs_poubelle) > 0)
     374                        $retour['message_ok'] .= '<br />'._T('csv2auteurs:nb_auteurs_poubelle_effaces', array('nb_auteurs_poubelle_effaces' => count($Tabs_poubelle)));
    351375        }               
    352 //        $Tid_poubelle = csv2auteurs_diff_absents($poubelle_bdd);
    353 //        csv2auteurs_supprimer_auteurs($Tid_poubelle, '5poubelle', $traitement_article_efface,$id_rubrique_parent_archive);
    354 
     376
     377        // utilitaire pour récupérer un array simple avec les id_auteurs à partir du résultat du sql_allfetsel('id_auteur'...)
     378        function recup_id($Tid_obj) { return $Tid_obj['id_auteur']; }
     379       
    355380    if ($abs_visiteurs) {
    356381        $Tid_visiteurs = csv2auteurs_diff_absents($visiteur_bdd, $tableau_csv_visiteurs);
    357         csv2auteurs_supprimer_auteurs($Tid_visiteurs, '6forum', $traitement_article_efface,$id_rubrique_parent_archive);
     382        // faire le ménage: pour la suppression on récupère aussi les visiteurs sans login
     383        $Tid_visiteurs_nologin = sql_allfetsel('id_auteur', 'spip_auteurs', array('statut="6forum"', 'login = ""'));
     384        $Tid_visiteurs = $Tid_visiteurs + array_map('recup_id', $Tid_visiteurs_nologin);
     385        csv2auteurs_supprimer_auteurs($Tid_visiteurs, '6forum', $traitement_article_efface, $id_rubrique_parent_archive);
     386        if (count($Tid_visiteurs) > 0)
     387                        $retour['message_ok'] .= '<br />'._T('csv2auteurs:nb_visiteurs_effaces', array('nb_visiteurs_effaces' => count($Tid_visiteurs)));
    358388    }
    359389    if ($abs_redacs) {
    360390        $Tid_redacs = csv2auteurs_diff_absents($redacteur_bdd, $tableau_csv_redacs);
     391        // faire le ménage: pour la suppression on récupère aussi les redacteurs sans login
     392        $Tid_redacs_nologin = sql_allfetsel('id_auteur', 'spip_auteurs', array('statut="1comite"', 'login = ""'));
     393        $Tid_redacs = $Tid_redacs + array_map('recup_id', $Tid_redacs_nologin);
    361394        csv2auteurs_supprimer_auteurs($Tid_redacs, '1comite',$traitement_article_efface,$id_rubrique_parent_archive);
     395        if (count($Tid_redacs) > 0)
     396                        $retour['message_ok'] .= '<br />'._T('csv2auteurs:nb_auteurs_effaces', array('nb_auteurs_effaces' => count($Tid_redacs)));
    362397    }
    363398    if ($abs_admins) {
    364399        $Tid_admins = csv2auteurs_diff_absents($admin_restreint_bdd, $tableau_csv_admins);
    365400        csv2auteurs_supprimer_auteurs($Tid_admins, '0minirezo',$traitement_article_efface,$id_rubrique_parent_archive);
    366     }
    367 
    368     // PARTIE III : maj des existants
    369     // 1. ras
    370     // 2. supprimer les articles
    371     // 3. transferer les articles dans une rubrique d'archivage
    372 
    373    
    374 /*
    375 echo '<pre>$visiteur_bdd';
    376 var_dump($visiteur_bdd);
    377 echo '<br>$redacteur_bdd:';
    378 var_dump($redacteur_bdd);
    379 echo '<br>$admin_restreint';
    380 var_dump($admin_restreint);
    381 echo '</pre>';
    382 die;
    383 */
    384 
    385 
    386 //  $retour['redirect'] = 'index.php?exec=csv2auteurs';
     401        if (count($Tid_admins) > 0)
     402                        $retour['message_ok'] .= '<br />'._T('csv2auteurs:nb_admins_restreints_effaces', array('nb_admins_restreints_effaces' => count($Tid_admins)));
     403    }
     404
     405   
    387406    return $retour;
    388407}
     
    394413 * @return l'array des id_auteurs
    395414 */
    396 function csv2auteurs_diff_absents($Tbdd, $Tcsv=array()){
     415function csv2auteurs_diff_absents($Tbdd, $Tcsv=array()) {
    397416    $Tid = array();
    398417    $T = array_diff_key($Tbdd, $Tcsv);
     
    409428 * @param array associatif CSV: Tauteur_csv  nom_champ : valeur
    410429 */
    411 function csv2auteurs_ajout_utilisateur($login,$Tauteur_csv,$Tnom_champs_bdd,$Tcorrespondances, $tableau_bdd_rubriques_admins, $tableau_bdd_zones_admins, $id_auteur=0){
     430function csv2auteurs_ajout_utilisateur($login, $Tauteur_csv, $Tnom_champs_bdd, $Tcorrespondances, $tableau_bdd_rubriques_admins, $tableau_bdd_zones_admins, $id_auteur=0) {
    412431    $set = $Tzones = $Trubadmin = array();
    413     foreach($Tauteur_csv as $champ => $valeur){
    414         if($champ == "ss_groupe"){
     432    $retour = '';
     433   
     434    foreach ($Tauteur_csv as $champ => $valeur) {
     435                // gestion des rubriques administrées par l'utilisateur
     436                // la rubrique peut être désignée par son titre ou son id_rubrique
     437        if ($champ == "ss_groupe") {
    415438            $T = explode('|',$valeur);
    416             foreach($T as $rub){
    417                 $Trubadmin[] = array_search(strtolower($rub),$tableau_bdd_rubriques_admins);
     439            foreach ($T as $rub) {
     440                                if (is_numeric($rub) AND array_key_exists($rub, $tableau_bdd_rubriques_admins))
     441                                        $Trubadmin[] = $rub;
     442                                elseif ($id_r = array_search(strtolower($rub), $tableau_bdd_rubriques_admins))
     443                                        $Trubadmin[] = $id_r;
     444                                // à priori on ne passe ici que si la rubrique est sous forme numérique mais ne correspondant pas à un id_rubrique existant
     445                                elseif ($rub != '')
     446                                        $retour .= '<br />'._T('csv2auteurs:rubrique_admin_pas_trouvee', array('rub_pas_trouvee' => $rub, 'login_auteur' => $login));
    418447            }
    419448        }
    420         if($champ == "zone"){
     449       
     450        // gestion des zones de l'utilisateur
     451        if ($champ == "zone") {
    421452            $T = explode('|',$valeur);
    422             foreach($T as $zone){
    423                 $Tzones[] = array_search(trim(rtrim(strtolower($zone))),$tableau_bdd_zones_admins);
     453            foreach ($T as $zone) {
     454                                // pour la liste des zones on accepte soit le titre de la zone soit son id_zone
     455                                if (intval($zone) == $zone AND array_key_exists($zone, $tableau_bdd_zones_admins))
     456                                        $Tzones[] = $zone;
     457                                elseif ($id_z = array_search(trim(rtrim(strtolower($zone))), $tableau_bdd_zones_admins))
     458                                        $Tzones[] = $id_z;
     459                                elseif ($zone != '')
     460                                        $retour .= '<br />'._T('csv2auteurs:zone_pas_trouvee', array('zone_pas_trouvee' => $zone, 'login_auteur' => $login));
    424461            }
    425 //spip_log("tzone de id_auteur $id_auteur","csvspip");
    426 //spip_log($Tzones,"csvspip");
    427 
    428         }
    429         if(in_array($champ,$Tnom_champs_bdd)){
    430             $set[$champ] = ($champ == "statut" AND array_key_exists($valeur,$Tcorrespondances)) ? $Tcorrespondances[$valeur] : $valeur;
    431         }
    432     }
    433 
    434     //inserer l'auteur si il n'y a pas d'id_auteur transmis
     462        }
     463       
     464        // gestion de tous autres champs (y compris extras)
     465        if (in_array($champ, $Tnom_champs_bdd)) {
     466            $set[$champ] = ($champ == "statut" AND array_key_exists($valeur, $Tcorrespondances)) ? $Tcorrespondances[$valeur] : $valeur;
     467        }
     468    }
     469    // si l'utilisateur est 0minirezo mais qu'il n'a pas de rubrique à administrer, le dégrader en redacteur
     470    if ($set['statut'] == '0minirezo' AND count($Trubadmin) == 0) {
     471                $set['statut'] = '1comite';
     472                $retour .= '<br />'._T('csv2auteurs:admin_sans_rub', array('login_auteur' => $login));
     473        }
     474
     475    //créer l'auteur si il n'y a pas d'id_auteur transmis
    435476    if (!$id_auteur)
    436477        $id_auteur = auteur_inserer();
    437478   
    438479    // remplir les champs ou les maj
    439     auteur_modifier($id_auteur,$set);
     480    auteur_modifier($id_auteur, $set);
    440481
    441482    //liaison des rubriques
    442     if(count($Trubadmin) AND $set["statut"] == "0minirezo")
    443         objet_associer(array("auteur"=>$id_auteur),array("rubrique"=>$Trubadmin));
     483    if (count($Trubadmin) AND $set["statut"] == "0minirezo")
     484        objet_associer(array("auteur" => $id_auteur), array("rubrique" => $Trubadmin));
    444485       
    445486    //liaison des zones
    446     if(count($Tzones) AND test_plugin_actif("accesrestreint") AND test_plugin_actif("accesrestreint"))
    447         zone_lier($Tzones, 'auteur', $id_auteur, 'add');
    448 
     487    if (count($Tzones) AND test_plugin_actif("accesrestreint") AND test_plugin_actif("accesrestreint"))
     488                zone_lier($Tzones, 'auteur', $id_auteur, 'add');
     489       
     490    return $retour;
    449491}
    450492
     
    464506    $objet = 'auteur';
    465507    $set = array('statut'=>'5poubelle');
    466     foreach ($Tid as $id){
     508    foreach ($Tid as $id) {
    467509        $Tarticles = sql_allfetsel('id_objet', 'spip_auteurs_liens', array('id_auteur='.$id, 'objet="article"'));
    468510
     
    479521            // supprimer les articles
    480522            $table_idarticle = array();
    481             if ($traitement == 'supprimer_articles'){
     523            if ($traitement == 'supprimer_articles') {
    482524                objet_dissocier(array('id_auteur'=>$id), array('article'=>$Tarticles));
    483525                foreach ($Tarticles as $idarticle) {
     
    488530            }
    489531            // deplacer les articles dans la rubrique d'archivage
    490             if ($traitement == 'transferer_articles'){
    491                 foreach($Tarticles as $idarticle)
     532            if ($traitement == 'transferer_articles') {
     533                foreach ($Tarticles as $idarticle)
    492534                    objet_modifier('article', $idarticle['id_objet'], array('id_parent'=>$id_rubrique_archive));
    493535            }
    494536        }
    495537           
    496         if (test_plugin_actif("accesrestreint")){
     538        if (test_plugin_actif("accesrestreint")) {
    497539            // suppression des zones de l'auteur
    498540            $Tzones = sql_allfetsel('id_zone', 'spip_zones_liens', array('id_objet='.$id, 'objet="auteur"'));
  • _plugins_/csv2auteurs/trunk/lang/csv2auteurs_fr.php

    r81148 r96446  
    11<?php
    22$GLOBALS[$GLOBALS['idx_lang']] = array(
    3 
     3        // A
    44    'abs_redac' => 'Rédacteurs absents',
    55    'abs_admin' => 'Administrateurs restreints absents',
     
    1111    'auteur_nouveau'=>'supprimer les auteurs et attribuer leurs articles à l\'auteur',
    1212    'avenir_auteurs'=>'Traitement des comptes supprimés pour les auteurs d\'articles :',
    13 
     13    'admin_sans_rub' => '<strong class="erreur">Attention !</strong> l\'administrateur restreint <strong>@login_auteur@</strong> n\'a pas de rubrique associée: son compte est rétrogradé en rédacteur.',
     14       
     15        // B
    1416    'bravo' => 'Bravo !!',
    1517
     18        // C
    1619    'creation_rubrique' => 'Création de rubriques pour les sous-groupes administrateurs:',
    1720    'creer_rubrique' => 'Créer une rubrique par sous-groupe d\'admins:',
     
    2023    'choix_statut'=> 'Choisissez les types de statut que vous désirez exporter',
    2124    'champ_manquant' => 'Les champs : login, statut et email sont obligatoires !!',
     25    'chargement_fichier_CSV_OK' => 'Chargement du fichier <strong>@nom_fichier@</strong>: OK',
    2226
     27        // D
    2328    'delimiteur'=>'Choisissez le type de délimiteur que vous désirer pour créer votre fichier csv',
    2429
     30        // E
    2531    'envoyer'=>'Lancer la moulinette',
    2632    'erreurs' => 'Votre saisie contient des erreurs !',
     
    2834    'exporter'=>'Exporter',
    2935
     36        // F
    3037    'fichier_uploader' => 'Fichier à téléverser',
    3138
     39        // I
    3240    'importer'=>'Importer',
     41   
     42    // L
     43    'login_idem_admin_non_traite' => '<strong class="erreur">Attention!</strong> Le compte ayant pour login <strong>@login_refuse@</strong> n\'a pas été traité car cet identifiant est celui d\'un administrateur complet',
    3344
     45        // M
    3446    'mettre_a_jour_utilisateurs_existants' => 'Mettre à jour les utilisateurs existants :',
    3547    'mise_a_jour_utilisateur' => 'Mise à jour des utilisateurs existant déja dans SPIP :',
     
    3951    'type_maj_label'=>'Gestion des rubriques administrées et des zones d\'accès des utilisateurs existants',
    4052
     53        // N
    4154    'nom_champs'=>'Sélectionnez les champs que vous souhaitez exporter',
    4255    'nom_rubrique_archive'=>'Nom de la rubrique d\'archives :',
     
    4457    'non_autorise' => 'Seuls les webmestres ont le droit d\'utiliser csv2auteurs: veuillez vous reconnecter avec un compte adapté',
    4558    'nouveau_separateur' => 'Le nouveau séparateur de champs est : @separateur@',
    46    
     59    'nbe_auteurs_a_traiter' => 'Nombre de comptes utilisateurs à traiter: @nb_auteurs@',
     60    'nbe_rubriques_admin_crees' => 'Nombre de rubriques créées pour les admins restreints: @nb_rubriques@',
     61    'nb_auteurs_maj' => 'Nombre de comptes utilisateurs mis à jour: @nb_auteurs_maj@',
     62    'nb_auteurs_crees' => 'Nombre de nouveaux utilisateurs  créés: @nb_auteurs_crees@',
     63    'nb_auteurs_poubelle_effaces' => 'Nombre d\'utilisateurs à la poubelle supprimés: @nb_auteurs_poubelle_effaces@',
     64    'nb_visiteurs_effaces' => 'Nombre de visiteurs supprimés: @nb_visiteurs_effaces@',
     65    'nb_auteurs_effaces' => 'Nombre de rédacteurs supprimés: @nb_auteurs_effaces@',
     66    'nb_admins_restreints_effaces' => 'Nombre d\'admins restreints supprimés: @nb_admins_restreints_effaces@',   
     67
     68        // O
    4769    'obligatoire' => 'Ce champs est obligatoire !',
    4870
     71        // P
    4972    'parametres_fichier_csv' => 'Paramètres du fichier CSV',
    5073    'presentation_formulaire' => 'CSV2AUTEURS : gestion des utilisateurs de SPIP à partir de fichiers CSV',
     
    5275    'passage_poubelle' => 'passer à la poubelle',
    5376
     77        // R
    5478    'redacteurs' => 'Rédacteurs',
    5579    'rubrique_defaut' => 'Rubrique par défaut des admins restreints:',
     
    5781    'rubrique_parent'=>'Choisissez la rubrique parente',
    5882    'rien_faire' => 'Ne rien faire',
     83    'rubrique_archive_cree' => 'La rubrique <strong>@titre_rubrique_archive@</strong> a été créée pour archiver les articles auteurs supprimés',
     84    'raz_rubriques_admins_zones' => 'Remise à zéro des rubriques administrées et des zones d\'accès restreint pour les utilisateurs existant',
     85    'rubrique_admin_pas_trouvee' => '<strong class="erreur">Attention !</strong> auteur admin restreint <strong>@login_auteur@</strong>: la rubrique <strong>@rub_pas_trouvee@</strong> n\'existe pas.',
    5986
     87        // S
    6088    'suppression_absents' => 'Suppression des absents:',
    6189    'suppression_article_efface' => 'Traitement des articles des auteurs effacés :',
     
    6492    'separateur' => 'Choix du caractère de séparation de champs',
    6593   
    66 
     94        // T
    6795    'transfert' => 'Erreur lors du transfert !',
    6896    'transferer_articles' => 'Transférer les articles dans une rubrique d\'archives: ',
    6997    'taille' => 'Le fichier est trop gros !',
    7098
     99        // V
    71100    'visiteurs' => 'Visiteurs',
    72101    'virgule'=>'virgule ","',
    73102    'vidage_poubelle' => 'Vider la poubelle',
     103   
     104    // Z
     105    'zone_pas_trouvee' => '<strong class="erreur">Attention !</strong> auteur @login_auteur@: la zone <strong>@zone_pas_trouvee@</strong> n\'existe pas.',
    74106);
    75107?>
Note: See TracChangeset for help on using the changeset viewer.