[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / ecrire / inc / json.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2017 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 if (!defined('_ECRIRE_INC_VERSION')) {
14 return;
15 }
16
17 // Les fonctions de toggg pour faire du JSON
18
19 /**
20 * Transform a variable into its javascript equivalent (recursive)
21 *
22 * @access private
23 * @param mixed the variable
24 * @return string js script | boolean false if error
25 */
26
27 // http://code.spip.net/@var2js
28 function var2js($var) {
29 $asso = false;
30 switch (true) {
31 case is_null($var):
32 return 'null';
33 case is_string($var):
34 return '"' . addcslashes($var, "\"\\\n\r/") . '"';
35 case is_bool($var):
36 return $var ? 'true' : 'false';
37 case is_scalar($var):
38 return (string)$var;
39 case is_object($var):// blam
40 $var = get_object_vars($var);
41 $asso = true;
42 // $var devient un array, on continue
43 case is_array($var):
44 $keys = array_keys($var);
45 $ikey = count($keys);
46 while (!$asso && $ikey--) {
47 $asso = $ikey !== $keys[$ikey];
48 }
49 $sep = '';
50 if ($asso) {
51 $ret = '{';
52 foreach ($var as $key => $elt) {
53 $ret .= $sep . '"' . $key . '":' . var2js($elt);
54 $sep = ',';
55 }
56
57 return $ret . '}';
58 } else {
59 $ret = '[';
60 foreach ($var as $elt) {
61 $ret .= $sep . var2js($elt);
62 $sep = ',';
63 }
64
65 return $ret . ']';
66 }
67 }
68
69 return false;
70 }
71
72 if (!function_exists('json_encode')) {
73 function json_encode($v) {
74 return var2js($v);
75 }
76 }
77
78 // http://code.spip.net/@json_export
79 function json_export($var) {
80 $var = json_encode($var);
81
82 // flag indiquant qu'on est en iframe et qu'il faut proteger nos
83 // donnees dans un <textarea> ; attention $_FILES a ete vide par array_pop
84 if (defined('FILE_UPLOAD')) {
85 return '<textarea>' . spip_htmlspecialchars($var) . '</textarea>';
86 } else {
87 return $var;
88 }
89 }