<?php # JSON interface # Copyright (C) 2007-2009, AllWorldIT # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. class json_response { private $_fields = array(); private $_id; private $_results; private $_datasetSize; private $_status = RES_OK; ## @method setID($id) # Set ID column # # @param id ID column name public function setID($id) { $this->_id = $id; } ## @method setStatus($status) # Set response status # # @param status Either RES_OK (default) or RES_ERROR public function setStatus($status) { $this->_status = $status; } ## @method addField($name,$type) # Add a field to our return results # # @param name Field name # @param type Field type, 'int', 'string', 'float', 'boolean', 'date' public function addField($name,$type) { # Build field $field = array( 'name' => $name, 'type' => $type ); # Set ISO date format if ($field['type'] == "date") { $field['dateFormat'] = "Y-m-d"; } # Add field to list array_push($this->_fields,$field); } ## @method setDatasetSize($size) # Set how many records are returned in the dataset # # @param size Dataset size public function setDatasetSize($size) { $this->_datasetSize = $size; } ## @method parseArrayRef($array) # Parse in the array of results and fix it up # # @param arrayref Array ref containing the results public function parseArray($array) { $this->_results = array(); # Loop with array items foreach ($array as $aitem) { $item = array(); # Loop with fields we want foreach ($this->_fields as $field) { # FIXME - typecast? $item[$field['name']] = $aitem[$field['name']]; } array_push($this->_results,$item); } } ## @method parseHash($hashref) # Parse in the hash of results and fix it up # # @param hashref Hash ref containing the results public function parseHash($hash) { $this->_results = array(); foreach ($this->_fields as $field) { # FIXME - typecast? $this->_results[$field['name']] = $hash[$field['name']]; } } ## @method export # Export response into something we return # # @return JSON hash # @li result - Result code/status # @li data - Ref containing results # @li metaData - Metadata containing info about the results being returned # Metadata contains properties.. # - root: root element, which is always 'data' # - fields: Optional field description, arrayref of hash refs, name = 'name', type 'type' and 'dateFormat' = 'Y-m-d' # - id: Optional ID field name # - totalProperty: Optional property name containing the number of records, always 'datasetSize' # @li datasetSize Optional, number of records we're rturning public function export() { # Build result $ret = array( 'result' => $this->_status, # Additional stuff for other things to make life easier 'success' => $this->_status == RES_OK ? 1 : 0, 'metaData' => array( 'successProperty' => 'success' ) ); # If we have results, add them if (isset($this->_results)) { $ret['data'] = $this->_results; $ret['metaData']['root'] = 'data'; # If we have fields, set them up if (isset($this->_fields)) { $ret['metaData']['fields'] = $this->_fields; } } # Check if we have an ID set if (isset($this->_id)) { $ret['metaData']['totalProperty'] = 'datasetSize'; $ret['datasetSize'] = $this->_datasetSize; } return $ret; } } # vim: ts=4