source: spip-zone/_plugins_/profils/trunk/inc/importer_csv_profil.php @ 111029

Last change on this file since 111029 was 111029, checked in by rastapopoulos@…, 14 months ago

Nouvelle fonctionnalité : il est possible d'importer un CSV normalisé avec tous les champs d'un profil, donc de plusieurs objets différents à la fois, auteur, orga, coordonnées, etc, et ça crée alors les profils en cascade, et tous les objets de chaque profil ! À priori ça gère aussi quand vous avez des champs extras, comme tout le reste de ce plugin, mais pour l'instant le seul truc que ça ne gère pas, c'est s'il y a des champs extras à valeurs multiples, checkboxes etc, car il faudrait gérer leur liste de valeurs séparées par des virgules dans sa case du CSV par exemple. Mais ça va venir. / En corrolaire, un autre formulaire permet ou plutôt permettra d'exporter tous les profils d'un même type. Pour l'instant ça n'exporte que les colonnes du CSV, ce qui est déjà pas mal car ça permet d'avoir dynamiquement le template de CSV de n'importe quel profil, sans avoir à le créer soi-même !

File size: 1.6 KB
Line 
1<?php
2
3if (!defined('_ECRIRE_INC_VERSION')) {
4        return;
5}
6
7function inc_importer_csv_profil_dist($id_profil, $profil) {
8        // À partir de chaque colonne, on va générer les request nécessaires pour lancer le traitement du formulaire
9        $champs_auteur = array();
10        $champs_organisation = array();
11        $champs_contact = array();
12        $champs_coordonnees = array();
13       
14        foreach ($profil as $champ => $valeur) {
15                // Si c'est bien un objet attendu
16                if (preg_match('%^(auteur|organisation|contact)_%', $champ, $trouver)) {
17                        $objet = $trouver[1];
18                        $champ = str_replace($objet.'_', '', $champ);
19                       
20                        // Si c'est une coordonnée pour cet objet
21                        if (
22                                preg_match('%^(adresses|numeros|emails)_%', $champ, $trouver)
23                                and $coordonnee = $trouver[1]
24                                and $champ = str_replace($coordonnee.'_', '', $champ)
25                                and preg_match('%^([a-zA-Z0-9]+?)_%', $champ, $trouver)
26                                and is_string($type = $trouver[1])
27                                and $champ = str_replace($type.'_', '', $champ)
28                        ) {
29                                if ($type == '0') {
30                                        $type = 0;
31                                }
32                               
33                                $champs_coordonnees[$objet][$coordonnee][$type][$champ] = $valeur;
34                        }
35                        // Sinon on met directement la valeur pour cet objet
36                        else {
37                                ${"champs_$objet"}[$champ] = $valeur;
38                        }
39                }
40        }
41       
42        // On place tout ça en request
43        set_request('auteur', $champs_auteur);
44        set_request('organisation', $champs_organisation);
45        set_request('contact', $champs_contact);
46        set_request('coordonnees', $champs_coordonnees);
47       
48        $traiter = charger_fonction('traiter', 'formulaires/profil');
49        $retours = $traiter('new', $id_profil, '', true); // On force en mode admin pour être sûr, car dans des jobs
50}
Note: See TracBrowser for help on using the repository browser.