Search:

# CWIS Developers Documentation

- Main Page
- Classes
- Files

- File List
- File Members

# JsonHelper.php

Go to the documentation of this file.

    00001 <?PHP
    00002
    00003 class JsonHelper
    00004 {
    00005
    00006     private $Data;
    00007     private $Warnings;
    00008
    00009     public function __construct()
    00010     {
    00011         $this->Data = array();
    00012         $this->Warnings = array();
    00013     }
    00014
    00015     public function AddDatum($Key, $Value)
    00016     {
    00017         $this->Data[$Key] = $Value;
    00018     }
    00019
    00020     public function AddWarning($Message)
    00021     {
    00022         $this->Warnings[] = strval($Message);
    00023     }
    00024
    00025     public function Error($Message)
    00026     {
    00027         $this->SendResult($this->GenerateResult("ERROR", $Message));
    00028     }
    00029
    00030     public function Success($Message="")
    00031     {
    00032         $this->SendResult($this->GenerateResult("OK", $Message));
    00033     }
    00034
    00035     private function SendResult(array $Result)
    00036     {
    00037         global $SysConfig;
    00038         header("Content-Type: application/json; charset="
    00039             .$SysConfig->DefaultCharacterSet(), TRUE);
    00040         $this->PrintArrayToJson($Result);
    00041     }
    00042
    00043     private function GenerateResult($State, $Message)
    00044     {
    00045         return array(
    00046             "data" => $this->Data,
    00047             "status" => array(
    00048                 "state" => strval($State),
    00049                 "message" => strval($Message),
    00050                 "numWarnings" => count($this->Warnings),
    00051                 "warnings" => $this->Warnings));
    00052     }
    00053
    00054     private function PrintArrayToJson(array $Array)
    00055     {
    00056         # variables needed for printing commas if necessary
    00057         $Offset = 0;
    00058         $Count = count($Array);
    00059
    00060         # determine whether or not we have a true array or a hash map
    00061         $TrueArray = TRUE;
    00062         for ($i = 0, reset($Array); $i < count($Array); $i++, next($Array))
    00063         {
    00064             if (key($Array) !== $i)
    00065             {
    00066                 $TrueArray = FALSE;
    00067                 break;
    00068             }
    00069         }
    00070
    00071         # opening bracket
    00072         print ($TrueArray) ? "[" : "{";
    00073
    00074         # print each member
    00075         foreach ($Array as $key => $value)
    00076         {
    00077             # replacements so we can escape strings and replace smart quotes
    00078             static $Replace = array(
    00079                 array("\\", "/", "\n", "\t", "\r", "\b", "\f", '"', "", "", "", "", ""),
    00080                 array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"', "'", "'", '\"', '\"', '-'));
    00081
    00082             # print key if a hash map
    00083             if (!$TrueArray)
    00084             {
    00085                 # escape, remove smart quotes, and print the key
    00086                 print '"'.str_replace($Replace[0], $Replace[1], $key).'":';
    00087             }
    00088
    00089             # scalar values (int, float, string, or boolean)
    00090             if (is_scalar($value))
    00091             {
    00092                 # numeric (i.e., float, int, or float/int string)
    00093                 if (is_numeric($value))
    00094                 {
    00095                     print $value;
    00096                 }
    00097
    00098                 # string
    00099                 else if (is_string($value))
    00100                 {
    00101                     # escape, remove smart quotes, and print the value
    00102                     print '"'.str_replace($Replace[0], $Replace[1], $value).'"';
    00103                 }
    00104
    00105                 # boolean true
    00106                 else if ($value === TRUE)
    00107                 {
    00108                     print "true";
    00109                 }
    00110
    00111                 # boolean false
    00112                 else if ($value === FALSE)
    00113                 {
    00114                     print "false";
    00115                 }
    00116             }
    00117
    00118             # recur if the value is an array
    00119             else if (is_array($value))
    00120             {
    00121                 $this->PrintArrayToJson($value);
    00122             }
    00123
    00124             # null
    00125             else if (is_null($value))
    00126             {
    00127                 print "null";
    00128             }
    00129
    00130             # object, just print the name and don't possibly expose secret details
    00131             else if (is_object($value))
    00132             {
    00133                 print '"object('.get_class($value).')"';
    00134             }
    00135
    00136             # resource, just print the name and don't possibly expose secret details
    00137             else
    00138             {
    00139                 print '"resource('.get_resource_type($value).')"';
    00140             }
    00141
    00142             # print comma if necessary
    00143             if (++$Offset < $Count) {  print ",";  }
    00144         }
    00145
    00146         # closing bracket
    00147         print ($TrueArray) ? "]" : "}";
    00148     }
    00149
    00150 }
    00151
    00152 ?>