source: spip-zone/_plugins_/csv2auteurs/trunk/formulaires/csv2auteurs_importation.php @ 96446

Last change on this file since 96446 was 96446, checked in by cy_altern@…, 4 years ago

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).

  • Property svn:executable set to *
File size: 24.8 KB
Line 
1<?php
2if (!defined('_ECRIRE_INC_VERSION')) return;
3
4function formulaires_csv2auteurs_importation_charger_dist(){
5    $annee=date("Y");
6    $valeurs = array(
7        "fichier_csv"                => "",
8        "maj_utilisateur"            => "",
9        "type_maj"                   => "ajouter",
10        "abs_redac"                  => "",
11        "abs_admin"                  => "",
12        "abs_poubelle"               => "supprimer",
13        "abs_visiteur"               => "",
14        "traitement_article_efface"  => "rien_faire",
15        "transfere_article"          => "",
16        "id_rubrique_parent_archive"    => "0",
17        "nom_rubrique_archive"       => "archive_$annee",
18        "id_rubrique_parent"            => "0",
19    );
20       
21        return $valeurs;
22}
23
24function formulaires_csv2auteurs_importation_verifier_dist(){
25    $erreurs = array();
26    // seuls les webmestres ont le droit d'utiliser cet outil!
27    if ($GLOBALS['visiteur_session']['webmestre'] != 'oui') {
28        $erreurs['message_erreur'] = _T('csv2auteurs:non_autorise');
29        return $erreurs;
30    }
31       
32    //champs obligatoire
33    if (!($_FILES['fichier_csv']['name'])) {
34        $erreurs['fichier_csv'] = _T('csv2auteurs:obligatoire');
35    } else {
36    //Transfert réussi
37        if ($_FILES['fichier_csv']['error'] > 0) 
38                        $erreurs['fichier_csv'] = _T('csv2auteurs:transfert');
39    //Taille max du fichier csv < 2Mo
40        $maxsize=1000000;
41        if ($_FILES['fichier_csv']['size'] > $maxsize) 
42                        $erreurs['fichier_csv'] =_T('csv2auteurs:taille');
43    //Extension csv
44        $extensions_valides = array( 'csv','txt' );
45        $extension_upload = strtolower(  substr(  strrchr($_FILES['fichier_csv']['name'], '.')  ,1)  );
46        if (!in_array($extension_upload,$extensions_valides)) 
47                        $erreurs['fichier_csv'] = _T('csv2auteurs:extension');
48    }
49    //Il y a des erreurs
50    if (count($erreurs)) 
51        $erreurs['message_erreur'] = _T('csv2auteurs:erreurs');
52
53    return $erreurs;
54}
55
56function formulaires_csv2auteurs_importation_traiter_dist(){
57    $retour = array();
58    $maj_utilisateur = _request('maj_utilisateur');
59    $abs_redacs = _request('abs_redac');
60    $abs_admins = _request('abs_admin');
61    $abs_visiteurs = _request('abs_visiteur');
62    $abs_poubelle = _request('abs_poubelle');
63    $suppression_article_efface = _request('suppression_article_efface');
64    $traitement_article_efface = _request('traitement_article_efface');
65    $nom_rubrique_archive = _request('nom_rubrique_archive');
66    $type_maj=_request('type_maj');
67
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;
77
78    //récupération de l'id de la rubrique parent archive
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;
86
87    include_spip('action/editer_rubrique');
88    if (test_plugin_actif("accesrestreint"))
89        include_spip('action/editer_zone');
90    include_spip('action/editer_auteur');
91   
92    if ($abs_redacs OR $abs_admins OR $abs_visiteurs OR $abs_poubelle == 'supprimer'){
93        include_spip('action/editer_objet');
94        include_spip('action/editer_liens');
95        include_spip('action/editer_zone');
96    }
97
98    // récupération du fichier csv
99    include_spip('inc/config');
100    $separateur  = lire_config("csv2auteurs_separateur");
101    $tmp_name    = $_FILES['fichier_csv']['tmp_name'];
102    $destination = _DIR_TMP.basename($tmp_name);
103    $resultat    = move_uploaded_file($tmp_name,$destination);
104    if (!$resultat) 
105        $retour['message_erreur'] = _T('csv2auteurs:transfert');
106    else 
107        $retour['message_ok'] = _T('csv2auteurs:chargement_fichier_CSV_OK', array('nom_fichier' => $_FILES['fichier_csv']['name']));
108       
109
110    // transformation du fichier csv en 4 array :
111    // $en_tete = ligne entete
112    // pour les 3 tableaux suivant, la cle est soit le login et s'il n'existe pas on prend le mail
113    // $tableau_csv_visiteurs
114    // $tableau_csv_redacs
115    // $tableau_csv_admins
116    $tableau_csv_visiteurs = $tableau_csv_redacs = $tableau_csv_admins = array();
117    $tableau_csv_rubriques_admins = array();
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');
124       
125    // tableau de tous les admins
126    $result = sql_select(array('login'), 'spip_auteurs', array('statut = "0minirezo"'));
127    while ($r = sql_fetch($result)) {
128        $Tadmin_tous[] = $r['login'];
129    }
130    // tableau des admins restreints
131    $Tadmin_restreint=array();
132    $from = array( 
133        "spip_auteurs AS auteurs",
134        "spip_auteurs_liens AS liens");
135    $where = array(
136        "auteurs.statut = '0minirezo'",
137        "liens.objet = 'rubrique'",
138        "liens.id_auteur = auteurs.id_auteur",
139        'login!=""');
140    $result = sql_select(array('login'),$from, $where);
141    while ($r = sql_fetch($result)) 
142        $Tadmin_restreint[] = $r['login'];
143   
144    // tableau admins complets
145    $Tadmin_complet = array_diff($Tadmin_tous, $Tadmin_restreint);
146   
147   
148    // traiter le fichier CSV
149    $i = 0;
150    $num_statut = $num_login = -1;
151    while (($data = fgetcsv($fichiercsv, "$separateur")) !== FALSE){
152       // petit hack car fgetcsv ne reconnait pas le ~ comme séparateur !!!
153       $data           = implode("$separateur", $data);
154       $data           = explode("$separateur", $data);
155       $nombre_elements = count($data);
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) {
162            for ($j = 0; $j < $nombre_elements; $j++) {
163                $en_tete[$j] = strtolower($data[$j]);   
164                if ($en_tete[$j] == 'statut')
165                    $num_statut = $j;
166                if ($en_tete[$j] == 'login')
167                    $num_login = $j;
168           }
169            if ($num_statut < 0 OR $num_login < 0){
170                $retour['message_erreur'] = _T('csv2auteurs:champ_manquant').' login:'.$num_login.' statut'.$num_statut;
171                return  $retour;
172            }
173       } 
174       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                        }
180            for ($j = 0; $j < $nombre_elements; $j++) {
181                if (($data[$num_login] AND !in_array($data[$num_login], $Tadmin_complet))) {
182                    // creation du tableau contenant l'ensemble des données à importer
183                   if ($Tcorrespondances[strtolower($data[$num_statut])] == '6forum')
184                        $tableau_csv_visiteurs[$data[$num_login]][$en_tete[$j]] = $en_tete[$j] == "statut" ? "6forum" : $data[$j];
185                       
186                   if ($Tcorrespondances[strtolower($data[$num_statut])] == '1comite')
187                        $tableau_csv_redacs[$data[$num_login]][$en_tete[$j]] = $en_tete[$j] == "statut" ? "1comite" : $data[$j];
188                       
189                   if ($Tcorrespondances[strtolower($data[$num_statut])] == '0minirezo') {
190                        $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
192                        if ($en_tete[$j] == 'ss_groupe' AND $data[$j]) {
193                            $Trub = explode('|', $data[$j]);
194                            foreach ($Trub as $rub) 
195                                if (!in_array($rub, $tableau_csv_rubriques_admins))
196                                    $tableau_csv_rubriques_admins[] = $rub;
197                        }
198                    }
199                }
200            }
201        }
202        $i++;
203    }
204    fclose($fichiercsv);
205    unlink($destination);
206    $retour['message_ok'] .= '<br />'._T('csv2auteurs:nbe_auteurs_a_traiter', array('nb_auteurs' => $i - 1));
207
208    // tableau CSV total
209    $tableau_csv_total = $tableau_csv_visiteurs + $tableau_csv_redacs + $tableau_csv_admins;
210
211//spip_log("tableau csv total","csvspip");
212//spip_log($tableau_csv_total,"csvspip");
213
214    //récupération des auteurs de la bdd en 4 array
215    // on ne prend pas les auteurs sans login
216    // $poubelle_bdd = les auteurs à la poubelle
217    // $visiteur_bdd = les visiteurs
218    // $redacteur_bdd
219    // $admin_restreint_bdd
220    // la cle de chaque tableau est le login
221    $poubelle_bdd = $visiteur_bdd = $redacteur_bdd = $admin_restreint_bdd = array();
222    $visiteur_bdd_req = sql_allfetsel('*', 'spip_auteurs', array('statut="6forum"','(login!="")'));
223    foreach ($visiteur_bdd_req as $key) {
224        $visiteur_bdd[$key['login']] = $key;
225    }
226    $redacteur_bdd_req = sql_allfetsel('*', 'spip_auteurs', array('statut="1comite"','(login!="")'));
227    foreach ($redacteur_bdd_req as $key) {
228        $redacteur_bdd[$key['login']] = $key;
229    }
230    //on récupère seulement les admins restreints !!!
231    $from = array( 
232        "spip_auteurs AS auteurs",
233        "spip_auteurs_liens AS liens");
234    $where = array(
235        "auteurs.statut = '0minirezo'",
236        "liens.objet = 'rubrique'",
237        "liens.id_auteur = auteurs.id_auteur",
238        '(login!="")');
239    $admin_restreint_bdd_req = sql_allfetsel("DISTINCT auteurs.*" ,$from, $where);
240    foreach ($admin_restreint_bdd_req as $key) {
241        $admin_restreint_bdd[$key['login']] = $key;
242    }
243
244    // tableau BDD total
245    $tableau_bdd_total = $poubelle_bdd + $visiteur_bdd +  $redacteur_bdd + $admin_restreint_bdd;
246
247    // traitement rubriques admin
248    // construction du tableau de correspondance nom_rubrique avec leur id
249    // création des rubriques n'existant pas
250    $tableau_bdd_rubriques_admins = array();
251    $result = sql_select(array('id_rubrique', 'titre'), 'spip_rubriques');
252    while ($row = sql_fetch($result)) {
253        $tableau_bdd_rubriques_admins[$row['id_rubrique']] = strtolower($row['titre']);
254    }
255
256    // traitement zones
257    // construction du tableau de correspondance nom_zone avec leur id
258    $tableau_bdd_zones_admins = array();
259    if (test_plugin_actif("accesrestreint")) {
260        $result = sql_select(array('id_zone', 'titre'), 'spip_zones');
261        while ($row = sql_fetch($result)) {
262            $tableau_bdd_zones_admins[$row['id_zone']] = strtolower($row['titre']);
263        }
264    }
265//    spip_log($tableau_bdd_zones_admins,"csvspip");
266   
267    // créer les rubriques admins du csv n'existant pas et les indexer
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);
274            $id_rub = rubrique_inserer($id_rubrique_parent_admin);
275            rubrique_modifier($id_rub, $set);
276            $tableau_bdd_rubriques_admins[$id_rub] = strtolower($rub);
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));
282
283    //Récuperer les champs de la table auteurs
284    $Tnom_champs_bdd = array();
285    $desc = sql_showtable('spip_auteurs',true);
286    foreach ($desc['field'] as $cle => $valeur)
287        $Tnom_champs_bdd[] = $cle;
288
289   
290    // PARTIE I : maj ou ajout des auteurs
291    $tableau_nouveaux_auteurs = array_diff_key($tableau_csv_total, $tableau_bdd_total);
292    // si maj demandée
293    if ($maj_utilisateur) {
294        // construire le tableau des utilisateurs à mettre à jour, indexé sur le login
295        $tableau_maj_auteurs = array_diff_key($tableau_csv_total, $tableau_nouveaux_auteurs);
296       
297        // construire le tableau de correspondance login csv => id_auteur bdd
298        $tableau_maj_auteurs_id = array();
299        $Tlogins = array_keys($tableau_maj_auteurs);
300        $chaine_in = implode('","', $Tlogins);
301        $chaine_in = '"'.$chaine_in.'"';
302        $res = sql_select('id_auteur, login', 'spip_auteurs', array('login IN ('.$chaine_in.')'));
303        while ($row = sql_fetch($res)) {
304            $tableau_maj_auteurs_id[$row['login']] = $row['id_auteur'];
305        }
306
307        // si remplacer les données zones et rubriques administrées: supprimer les liens existant
308        if ($type_maj == 'remplacer' AND test_plugin_actif("accesrestreint")) {
309            // suppression des liens des rubriques administrées
310            objet_dissocier(array("auteur" => array_values($tableau_maj_auteurs_id)), array("rubrique" => "*"));   
311            // suppression des zones des auteurs
312            zone_lier('',"auteur",array_values($tableau_maj_auteurs_id),'del');
313            $retour['message_ok'] .= '<br />'._T('csv2auteurs:raz_rubriques_admins_zones');
314        }
315
316        // maj des données des auteurs
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    }
325   
326    // dans tous les cas ajout des nouveaux
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
337    // 1. ras
338    // 2. supprimer les articles
339    // 3. transferer les articles dans une rubrique d'archivage
340
341    // Si choix3 : transferer les articles , création de la rubrique d'archive (en tenant compte d'une rubrique parent)
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"))) {
344            $objet = 'rubrique';
345            $set = array('titre' => $nom_rubrique_archive);
346            $id_rubrique_archive = objet_inserer($objet, $id_rubrique_parent_archive);
347            objet_modifier($objet, $id_rubrique_archive, $set);
348            $retour['message_ok'] .= '<br />'._T('csv2auteurs:rubrique_archive_cree', array('titre_rubrique_archive' => $nom_rubrique_archive));
349        }
350    }   
351   
352    // si l'option auteurs sans articles = suppression complète
353    // alors on supprime aussi tous les auteurs à la poubelle (sans articles)
354    if ($abs_poubelle == 'supprimer') {
355                // récupérer les auteurs à la poubelle avec articles
356                $not_in = sql_allfetsel('auteurs.id_auteur', 
357                        array('spip_auteurs_liens AS liens','spip_auteurs AS auteurs'), 
358                        array('liens.id_auteur = auteurs.id_auteur', 'liens.objet="article"', 'auteurs.statut="5poubelle"'),
359                        array('liens.id_auteur'));             
360                $Tnot_in =      array();
361                foreach ($not_in as $index => $Tid_auteur) 
362                        $Tnot_in[] = $Tid_auteur['id_auteur'];
363                $not_in = sql_in('id_auteur', $Tnot_in, 'NOT');
364               
365                // récupérer les auteurs à la poubelle sans articles
366                $Tabs_poubelle = sql_allfetsel('id_auteur', 'spip_auteurs',array('statut="5poubelle"', $not_in));
367                $Ta_suppr = array();
368                foreach ($Tabs_poubelle as $index => $Tid_auteur) 
369                        $Ta_suppr[] = $Tid_auteur['id_auteur'];
370                // effacer définitevement ces auteurs
371                $in = sql_in('id_auteur', $Ta_suppr);
372                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)));
375        }               
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       
380    if ($abs_visiteurs) {
381        $Tid_visiteurs = csv2auteurs_diff_absents($visiteur_bdd, $tableau_csv_visiteurs);
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)));
388    }
389    if ($abs_redacs) {
390        $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);
394        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)));
397    }
398    if ($abs_admins) {
399        $Tid_admins = csv2auteurs_diff_absents($admin_restreint_bdd, $tableau_csv_admins);
400        csv2auteurs_supprimer_auteurs($Tid_admins, '0minirezo',$traitement_article_efface,$id_rubrique_parent_archive);
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   
406    return $retour;
407}
408
409/*
410 * générer l"array des id auteurs absents à supprimer
411 * @param $Tbdd: l'array indexé login/mail extrait de la base
412 * @param $Tcsv: l'array indexé login/mail extrait du csv
413 * @return l'array des id_auteurs
414 */
415function csv2auteurs_diff_absents($Tbdd, $Tcsv=array()) {
416    $Tid = array();
417    $T = array_diff_key($Tbdd, $Tcsv);
418    foreach ($T as $val)
419        $Tid[] = $val['id_auteur'];
420
421    return $Tid;
422}
423
424
425/*
426 * ajout d'un utilisateur
427 * @param login de l'auteur
428 * @param array associatif CSV: Tauteur_csv  nom_champ : valeur
429 */
430function csv2auteurs_ajout_utilisateur($login, $Tauteur_csv, $Tnom_champs_bdd, $Tcorrespondances, $tableau_bdd_rubriques_admins, $tableau_bdd_zones_admins, $id_auteur=0) {
431    $set = $Tzones = $Trubadmin = array();
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") {
438            $T = explode('|',$valeur);
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));
447            }
448        }
449       
450        // gestion des zones de l'utilisateur
451        if ($champ == "zone") {
452            $T = explode('|',$valeur);
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));
461            }
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
476    if (!$id_auteur)
477        $id_auteur = auteur_inserer();
478   
479    // remplir les champs ou les maj
480    auteur_modifier($id_auteur, $set);
481
482    //liaison des rubriques
483    if (count($Trubadmin) AND $set["statut"] == "0minirezo")
484        objet_associer(array("auteur" => $id_auteur), array("rubrique" => $Trubadmin));
485       
486    //liaison des zones
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;
491}
492
493
494/*
495 * Suppression propre des auteurs
496 * changement de statut à la poubelle + traitement des liaisons spip_auteurs_liens et spip_zones_liens
497 * gestion des articles des auteurs supprimés
498 * @param $Tid array des id_auteurs à traiter
499 * @param $statut des auteurs passent dans $Tid
500 * $param $traitement : choix 2 (suppresion) ou 3 (transfere)
501 * $param $id_rubrique_archive
502 *
503 */
504function csv2auteurs_supprimer_auteurs($Tid, $statut,$traitement="supprimer_articles",$id_rubrique_archive=1) {
505    // passage à la poubelle
506    $objet = 'auteur';
507    $set = array('statut'=>'5poubelle');
508    foreach ($Tid as $id) {
509        $Tarticles = sql_allfetsel('id_objet', 'spip_auteurs_liens', array('id_auteur='.$id, 'objet="article"'));
510
511        // auteur sans article et demande de suppression: suppression complète
512        if (count($Tarticles) == 0 AND _request('abs_poubelle') == 'supprimer')
513            sql_delete('spip_auteurs', "id_auteur=$id");
514        // passage à la poubelle
515        else
516            objet_modifier($objet, $id, $set);
517
518        // traitement des articles de l'auteur
519        if (count($Tarticles) != 0) {
520
521            // supprimer les articles
522            $table_idarticle = array();
523            if ($traitement == 'supprimer_articles') {
524                objet_dissocier(array('id_auteur'=>$id), array('article'=>$Tarticles));
525                foreach ($Tarticles as $idarticle) {
526                    $table_idarticle[]=$idarticle['id_objet'];
527                }
528                $inarticle = join(',',$table_idarticle);
529                sql_delete('spip_articles', "id_article IN ($inarticle)");
530            }
531            // deplacer les articles dans la rubrique d'archivage
532            if ($traitement == 'transferer_articles') {
533                foreach ($Tarticles as $idarticle)
534                    objet_modifier('article', $idarticle['id_objet'], array('id_parent'=>$id_rubrique_archive));
535            }
536        }
537           
538        if (test_plugin_actif("accesrestreint")) {
539            // suppression des zones de l'auteur
540            $Tzones = sql_allfetsel('id_zone', 'spip_zones_liens', array('id_objet='.$id, 'objet="auteur"'));
541            foreach ($Tzones as $id_zone)
542                zone_lier($id_zone, 'auteur', $id, 'del');
543        }   
544        // suppression des rubriques des admins restreints
545        if ($statut == '0minirezo') {
546            $Trubriques = sql_allfetsel('id_objet', 'spip_auteurs_liens', array('id_auteur='.$id, 'objet="rubrique"'));
547            objet_dissocier(array('id_auteur'=>$id), array('rubrique'=>$Trubriques));
548        }
549    }
550}
551
552?>
Note: See TracBrowser for help on using the repository browser.