[PLUGINS] +crayons
[lhc/web/clavette_www.git] / www / plugins / crayons / inc / crayons-json.php
1 <?php
2 /**
3 * Crayons
4 * plugin for spip
5 * (c) Fil, toggg 2006-2013
6 * licence GPL
7 */
8
9 if (!defined("_ECRIRE_INC_VERSION")) return;
10
11 // Les fonctions de toggg pour faire du JSON
12
13 /**
14 * Transform a variable into its javascript equivalent (recursive)
15 *
16 * @access private
17 * @param mixed the variable
18 * @return string|boolean
19 * - string : js script
20 * - false if error
21 */
22 function crayons_var2js($var) {
23 $asso = false;
24 switch (true) {
25 case is_null($var) :
26 return 'null';
27 case is_string($var) :
28 return '"' .addcslashes($var, "\"\\\n\r\t/") . '"';
29 case is_bool($var) :
30 return $var ? 'true' : 'false';
31 case is_scalar($var) :
32 return (string)$var;
33 case is_object( $var) :
34 $var = get_object_vars($var);
35 $asso = true;
36 case is_array($var) :
37 $keys = array_keys($var);
38 $ikey = count($keys);
39 while (!$asso && $ikey--) {
40 $asso = $ikey !== $keys[$ikey];
41 }
42 $sep = '';
43 if ($asso) {
44 $ret = '{';
45 foreach ($var as $key => $elt) {
46 $ret .= $sep . '"' . $key . '":' . crayons_var2js($elt);
47 $sep = ',';
48 }
49 return $ret ."}";
50 } else {
51 $ret = '[';
52 foreach ($var as $elt) {
53 $ret .= $sep . crayons_var2js($elt);
54 $sep = ',';
55 }
56 return $ret ."]";
57 }
58 }
59 return false;
60 }
61
62 // Un json_encode qui marche en iso (la spec JSON exige utf-8)
63 function crayons_json_encode($v) {
64 if ($GLOBALS['meta']['charset'] == 'utf-8'
65 AND function_exists('json_encode'))
66 return json_encode($v);
67
68 $v = crayons_var2js($v);
69
70 if ($GLOBALS['meta']['charset'] != 'utf-8') {
71 include_spip('inc/charsets');
72 $v = charset2unicode($v);
73 }
74
75 return $v;
76 }
77
78 // http://doc.spip.org/@json_export
79 function crayons_json_export($var) {
80 return crayons_json_encode($var);
81
82 /// Il semble que ce hack n'ait plus lieu d'etre avec jquery 1.5
83 /*
84 // flag indiquant qu'on est en iframe et qu'il faut proteger nos
85 // donnees dans un <textarea> ; attention $_FILES a ete vide par array_pop
86 if (defined('FILE_UPLOAD'))
87 return "<textarea>".htmlspecialchars($var)."</textarea>";
88 else
89 return $var;
90 */
91 }
92
93 ?>