source: spip-zone/_plugins_/telepathe/trunk/telepathe_fonctions.php @ 49028

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

permettre de renvoyer plusieurs objets dans une meme idee

File size: 2.0 KB
Line 
1<?php
2
3function telepathe($contenu=null, $type=null) {
4        static $id = ' ';
5        static $t = array();
6
7        // id = initialisation
8        if ($type == 'id') {
9                $id = $contenu;
10                $t[$id] = array();
11        }
12
13        // autre, remplir
14        if (!is_null($type)
15        AND is_array($t[$id])) {
16
17                # un pipeline qui permet de traiter tout le contenu a envoyer,
18                # par exemple pour recoder les URLs des liens
19                $contenu = pipeline('telepathe', $contenu);
20
21                // si type finit par *, c'est un array
22                // si type finit par +, c'est une concatenation
23                preg_match(',^(.*?)([\*\+])?$,S', $type, $r);
24                switch($r[2]) {
25                        case '':
26                                $t[$id][$r[1]] = $contenu;
27                                break;
28                        case '*':
29                                $t[$id][$r[1]][] = $contenu;
30                                break;
31                        case '+':
32                                $t[$id][$r[1]] .= $contenu;
33                                break;
34                }
35                return "<dt>$type</dt>\n<dd>".safehtml(filtre_print($contenu))."</dd>";
36        }
37
38        // rien, renvoyer le tableau
39        if (is_null($type))
40                return $t;
41}
42
43
44function telepathe_formater($html) {
45
46        $r = telepathe();
47
48        switch (_request('format')) {
49                case 'json':
50                        return pretty_json_encode($r, _request('callback'));
51                case 'yaml':
52                        if (include_spip('inc/yaml'))
53                                return yaml_encode($r);
54                #case 'xml':
55                #       return xml($r);
56                default:
57                        return $html;
58        }
59
60
61}
62
63## essai (ratŽ) de faire du joli json affichable dans le nav ; mais
64## avec yaml c'est plus propre
65function pretty_json_encode($x, $callback=null) {
66        $x = json_encode($x);
67
68        if ($callback)
69                $x = htmlspecialchars($callback)."(\n"
70                        . $x . "\n);\n";
71
72        return $x;
73
74/*
75        if (is_array($x)) {
76                $a = array();
77                foreach ($x as $k=>$v)
78                        $a[] = " ".json_encode($k).":\n\t".pretty_json_encode($v);
79                return "{\n".join(",\n", $a)."\n}\n";
80        }
81
82        return json_encode($x);
83*/
84}
85
86function telepathe_http_header($format, $callback=null) {
87        switch($format) {
88                case 'json':
89                        if ($callback)
90                                $f = 'text/javascript'; # JSONP
91                        else
92                                $f = 'text/plain';
93                        break;
94                case 'yaml':
95                        $f = 'text/plain';
96                        break;
97                case 'xml':
98                        $f = 'text/xml';
99                        break;
100        }
101
102        if (isset($f))
103                return '<'.'?php header("Content-Type: '.$f.'; charset='.$GLOBALS['meta']['charset'].'"); ?'.'>';
104}
Note: See TracBrowser for help on using the repository browser.