source: spip-zone/_plugins_/_dev_/extras2/exec/objet.php @ 21300

Last change on this file since 21300 was 21300, checked in by fil@…, 13 years ago

extras2 devrait permettre a (court?) terme de gerer tous les champs de toutes les tables depuis l'espace prive ; il y a du boulot avant integration au core... mais on sait deja lister tous les champs de toutes les tables, eliminer ceux que SPIP connait, proposer les nconnus a activer, et les editer ; reste a faire l'edition dans les pages normales (pour les champs de spip_articles, sspip_auteurs etc), la pagination, etc

File size: 4.1 KB
Line 
1<?php
2
3// Affiche un objet connu de extras_actifs
4function exec_objet_dist() {
5        $actifs = @unserialize($GLOBALS['meta']['extras_actifs']);
6
7        // la connexion
8        if (!$connect = _request('connect'))
9                $connect = 'connect';
10
11        // l'objet
12        $table = _request('table');
13        $id = _request('id');
14        $edit = _request('edit');
15
16        // quels champs sont gerables pour cet objet ?
17        foreach ($actifs as $champ => $ignore) {
18                if (strpos($champ, $connect.'/'.$table.'/') === 0)
19                        $champs[] = preg_replace(',.*/,', '', $champ);
20        }
21
22        if (!$champs) {
23                include_spip('inc/presentation');
24
25                $commencer_page = charger_fonction('commencer_page', 'inc');
26                echo $commencer_page();
27                echo debut_gauche('objet',true);
28                echo creer_colonne_droite('', true) . debut_droite('',true);
29
30
31                $connects = $tables = array();
32                foreach ($actifs as $champ => $ignore) {
33                        list($connect, $table) = explode('/', $champ);
34                        $tables[$connect][$table]++;
35                }
36
37                foreach ($tables as $connect => $vals) {
38                        echo "<h2>$connect</h2>\n";
39                        echo "<ul>";
40                        foreach ($vals as $table => $ignore) {
41                                $url = parametre_url(self(), 'connect', $connect);
42                                $url = parametre_url($url, 'table', $table);
43                                echo "<li><a href='".$url."'>".$table."</a></li>\n";
44                        }
45                        echo "</ul>\n";
46                }
47
48                echo fin_gauche(),fin_page();
49                exit;
50        }
51
52        // Aller chercher les donnees avec la primary key id
53        $desc = sql_showtable($table, null, $connect);
54        $id_primary = $desc['key']['PRIMARY KEY'];
55        $t = sql_fetsel($champs, $table, $id_primary.'='.sql_quote($id, $connect), null, null, null, null, $connect);
56
57        if ($id
58        AND !autoriser($table, 'modifier', $id)) {
59                include_spip('inc/minipres');
60                echo minipres();
61        }
62
63        // des modifs envoyees ?
64        include_spip('inc/securiser_action');
65        if (is_array($_POST['val'])) {
66                $modifs = array();
67                foreach($t as $key => $val) {
68                        $cle = md5(secret_du_site()."modifier $connect $table $key");
69                        if (isset($_POST[$cle]))
70                                $modifs[$key] = $_POST[$cle];
71                }
72                if ($modifs) {
73                        include_spip('inc/modifier');
74                        modifier_contenu($table, $id, array(), $modifs, $connect);
75                        $t = sql_fetsel($champs, $table, $id_primary.'='.sql_quote($id, $connect), null, null, null, null, $connect);
76                }
77        }
78
79
80        include_spip('inc/presentation');
81
82        $commencer_page = charger_fonction('commencer_page', 'inc');
83        echo $commencer_page();
84        echo debut_gauche('objet',true);
85        echo creer_colonne_droite('', true) . debut_droite('',true);
86
87        echo "<h1>".$table." ".$id."</h1>\n";
88
89
90        include_spip('inc/texte');
91
92        if ($t) {
93
94                if ($edit) {
95                        $url = parametre_url(self(), 'edit', '');
96                        echo "<form action='".$url."' method='post'>\n",
97                                form_hidden($url);
98                }
99
100                foreach ($t as $key => $val) {
101                        echo "<h2>$key</h2>\n";
102                        $ligne = !preg_match(',TEXT,i', $desc['field'][$key])
103                                AND !preg_match(",[\r\n],", $val);
104
105                        if (!$edit)
106                                echo $ligne
107                                        ? typo($val)
108                                        : propre($val);
109
110                        if ($edit) {
111                                $cle = md5(secret_du_site()."modifier $connect $table $key");
112                                echo 
113                                        "<input type='hidden' name='val[]' value='$cle' />\n"
114                                        , $ligne
115                                                ? "<input type='text' name='$cle' value=\""
116                                                        .entites_html($val)
117                                                        ."\" />\n"
118                                                : "<textarea name='$cle'>"
119                                                        .entites_html($val)
120                                                        ."</textarea>\n";
121                        }
122                }
123
124                if (!$edit) {
125                        $url = parametre_url(self(), 'edit', 1);
126                        echo "<hr /><a href='".$url."'>"._L('Editer cet objet')."</a>";
127                }
128
129                if ($edit) {
130                        echo "<input type='submit' />\n";
131                        echo "</form>\n";
132                        $url = parametre_url(self(), 'edit', '');
133                        echo "<hr /><a href='".$url."'>"._L('Retour &#224; l\'objet')."</a>";
134                }
135
136                $url = parametre_url(parametre_url(self(), 'edit', ''), 'id', '');
137                echo "<br /><a href='".$url."'>"._L('Liste des objets')."</a>";
138
139        }
140        else {
141                // ici une liste d'objets
142                $s = sql_query("SELECT $id_primary,"
143                        .join(', ', $champs)." FROM $table LIMIT 0,50", $connect);
144                if (sql_count($s)) {
145                        echo "<ul>\n";
146                        while ($t = sql_fetch($s)) {
147                                $url = parametre_url(self(), 'id', $t[$id_primary]);
148                                echo "<li><a href='".$url."'>".$t[$id_primary]."</a> ";
149                                foreach ($champs as $champ)
150                                        echo ' &mdash; ' .couper(typo($t[$champ]))
151                                                ."</li>\n";
152                        }
153                        echo "</ul>\n";
154                } else {
155                        echo "table vide";
156                }
157        }
158
159        echo fin_gauche(),fin_page();
160
161}
Note: See TracBrowser for help on using the repository browser.