/application/datamapper/json.php
https://github.com/busaway/FoOlSlide · PHP · 220 lines · 148 code · 15 blank · 57 comment · 18 complexity · 900316682217d090fd1410bec9ac7495 MD5 · raw file
- <?php
- /**
- * Json Extension for DataMapper classes.
- *
- * Quickly convert DataMapper models to-and-from JSON syntax.
- *
- * @license MIT License
- * @package DMZ-Included-Extensions
- * @category DMZ
- * @author Phil DeJarnett
- * @link http://www.overzealous.com/dmz/pages/extensions/json.html
- * @version 1.1
- */
- // --------------------------------------------------------------------------
- /**
- * DMZ_Json Class
- *
- * @package DMZ-Included-Extensions
- */
- class DMZ_Json {
-
- /**
- * Convert a DataMapper model into JSON code.
- *
- * @param DataMapper $object The DataMapper Object to convert
- * @param array $fields Array of fields to include. If empty, includes all database columns.
- * @param boolean $pretty_print Format the JSON code for legibility.
- * @return string A JSON formatted String, or FALSE if an error occurs.
- */
- public function to_json($object, $fields = '', $pretty_print = FALSE)
- {
- if(empty($fields))
- {
- $fields = $object->fields;
- }
- $result = array();
- foreach($fields as $f)
- {
- $result[$f] = $object->{$f};
- }
- $json = json_encode($result);
- if($json === FALSE)
- {
- return FALSE;
- }
- if($pretty_print)
- {
- $json = $this->_json_format($json);
- }
- return $json;
- }
-
- /**
- * Convert the entire $object->all array result set into JSON code.
- *
- * @param DataMapper $object The DataMapper Object to convert
- * @param array $fields Array of fields to include. If empty, includes all database columns.
- * @param boolean $pretty_print Format the JSON code for legibility.
- * @return string A JSON formatted String, or FALSE if an error occurs.
- */
- public function all_to_json($object, $fields = '', $pretty_print = FALSE)
- {
- if(empty($fields))
- {
- $fields = $object->fields;
- }
- $result = array();
- foreach($object as $o)
- {
- $temp = array();
- foreach($fields as $f)
- {
- $temp[$f] = $o->{$f};
- }
- $result[] = $temp;
- }
- $json = json_encode($result);
- if($json === FALSE)
- {
- return FALSE;
- }
- if($pretty_print)
- {
- $json = $this->_json_format($json);
- }
- return $json;
- }
-
- /**
- * Convert a JSON object back into a DataMapper model.
- *
- * @param DataMapper $object The DataMapper Object to save to.
- * @param string $json_code A string that contains JSON code.
- * @param array $fields Array of 'safe' fields. If empty, only include the database columns.
- * @return bool TRUE or FALSE on success or failure of converting the JSON string.
- */
- public function from_json($object, $json_code, $fields = '')
- {
- if(empty($fields))
- {
- $fields = $object->fields;
- }
- $data = json_decode($json_code);
- if($data === FALSE)
- {
- return FALSE;
- }
- foreach($data as $k => $v) {
- if(in_array($k, $fields))
- {
- $object->{$k} = $v;
- }
- }
- return TRUE;
- }
-
- /**
- * Sets the HTTP Content-Type header to application/json
- *
- * @param DataMapper $object
- */
- public function set_json_content_type($object)
- {
- $CI =& get_instance();
- $CI->output->set_header('Content-Type: application/json');
- }
-
- /**
- * Formats a JSON string for readability.
- *
- * From @link http://php.net/manual/en/function.json-encode.php
- *
- * @param string $json Unformatted JSON
- * @return string Formatted JSON
- */
- private function _json_format($json)
- {
- $tab = " ";
- $new_json = "";
- $indent_level = 0;
- $in_string = false;
-
- $json_obj = json_decode($json);
-
- if($json_obj === false)
- return false;
-
- $json = json_encode($json_obj);
- $len = strlen($json);
-
- for($c = 0; $c < $len; $c++)
- {
- $char = $json[$c];
- switch($char)
- {
- case '{':
- case '[':
- if(!$in_string)
- {
- $new_json .= $char . "\n" . str_repeat($tab, $indent_level+1);
- $indent_level++;
- }
- else
- {
- $new_json .= $char;
- }
- break;
- case '}':
- case ']':
- if(!$in_string)
- {
- $indent_level--;
- $new_json .= "\n" . str_repeat($tab, $indent_level) . $char;
- }
- else
- {
- $new_json .= $char;
- }
- break;
- case ',':
- if(!$in_string)
- {
- $new_json .= ",\n" . str_repeat($tab, $indent_level);
- }
- else
- {
- $new_json .= $char;
- }
- break;
- case ':':
- if(!$in_string)
- {
- $new_json .= ": ";
- }
- else
- {
- $new_json .= $char;
- }
- break;
- case '"':
- if($c > 0 && $json[$c-1] != '\\')
- {
- $in_string = !$in_string;
- }
- default:
- $new_json .= $char;
- break;
- }
- }
-
- return $new_json;
- }
-
- }
- /* End of file json.php */
- /* Location: ./application/datamapper/json.php */