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

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

JSON doit renvoyer un content-type text/javascript (booz)

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