/lib/FileMaker/Implementation/Parser/FMResultSet.php
PHP | 281 lines | 281 code | 0 blank | 0 comment | 65 complexity | 4461efd3fad406916986e5d00759cae9 MD5 | raw file
- <?php
- require_once dirname(__FILE__) . '/../../Layout.php';
- require_once dirname(__FILE__) . '/../../RelatedSet.php';
- require_once dirname(__FILE__) . '/../../Record.php';
- require_once dirname(__FILE__) . '/../../Field.php';
- class FileMaker_Parser_FMResultSet
- {
- var $Vcb5e100e;
- var $Vf5bf48aa;
- var $V1ea7e575;
- var $V9f81f3c0 = array();
- var $Vaae0d98d;
- var $Vae581270 = array();
- var $V6e52c40b = array();
- var $Ve13f1c92;
- var $V43432a31;
- var $V51bc3e3b;
- var $V26005321;
- var $V6468d939;
- var $_fm;
- var $V5431b8d4;
- var $V6de51026 = false;
- var $_result;
- var $_layout;
- function FileMaker_Parser_FMResultSet(&$V0ab34ca9)
- {
- $this->_fm =& $V0ab34ca9;
- }
- function parse($V0f635d0e)
- {
- if (empty($V0f635d0e)) {
- return new FileMaker_Error($this->_fm, 'Did not receive an XML document from the server.');
- }
- $this->V5431b8d4= xml_parser_create('UTF-8');
- xml_set_object($this->V5431b8d4, $this);
- xml_parser_set_option($this->V5431b8d4, XML_OPTION_CASE_FOLDING, false);
- xml_parser_set_option($this->V5431b8d4, XML_OPTION_TARGET_ENCODING, 'UTF-8');
- xml_set_element_handler($this->V5431b8d4, '_start', '_end');
- xml_set_character_data_handler($this->V5431b8d4, '_cdata');
- if (!@xml_parse($this->V5431b8d4, $V0f635d0e)) {
- return new FileMaker_Error($this->_fm,
- sprintf('XML error: %s at line %d',
- xml_error_string(xml_get_error_code($this->V5431b8d4)),
- xml_get_current_line_number($this->V5431b8d4)));
- }
- xml_parser_free($this->V5431b8d4);
- if (!empty($this->Vcb5e100e)) {
- return new FileMaker_Error($this->_fm, null, $this->Vcb5e100e);
- }
- if (version_compare($this->Vf5bf48aa['version'], FileMaker::getMinServerVersion(), '<')) {
- return new FileMaker_Error($this->_fm, 'This API requires at least version ' . FileMaker::getMinServerVersion() . ' of FileMaker Server to run (detected ' . $this->Vf5bf48aa['version'] . ').');
- }
- $this->V6de51026= true;
- return true;
- }
- function setResult(&$Vb4a88417, $V561b2299 = 'FileMaker_Record')
- {
- if (!$this->V6de51026) {
- return new FileMaker_Error($this->_fm, 'Attempt to get a result object before parsing data.');
- }
- if ($this->_result) {
- $Vb4a88417 =& $this->_result;
- return true;
- }
- $Vb4a88417->_impl->_layout =& new FileMaker_Layout($this->_fm);
- $this->setLayout($Vb4a88417->_impl->_layout);
- $Vb4a88417->_impl->_tableCount = $this->V1ea7e575['total-count'];
- $Vb4a88417->_impl->_foundSetCount = $this->Vaae0d98d['count'];
- $Vb4a88417->_impl->_fetchCount = $this->Vaae0d98d['fetch-size'];
- $V6e52c40b = array();
- foreach ($this->V6e52c40b as $Vde17f0f2) {
- $V4b43b0ae =& new $V561b2299($Vb4a88417->_impl->_layout);
- $V4b43b0ae->_impl->_fields = $Vde17f0f2['fields'];
- $V4b43b0ae->_impl->_recordId = $Vde17f0f2['record-id'];
- $V4b43b0ae->_impl->_modificationId = $Vde17f0f2['mod-id'];
- if ($Vde17f0f2['children']) {
- foreach ($Vde17f0f2['children'] as $Vaca007a7 => $V268184c1) {
- $V4b43b0ae->_impl->_relatedSets[$Vaca007a7] = array();
- foreach ($V268184c1 as $V1b7d5726) {
- $V4a8a08f0 =& new $V561b2299($Vb4a88417->_impl->_layout->getRelatedSet($Vaca007a7));
- $V4a8a08f0->_impl->_fields = $V1b7d5726['fields'];
- $V4a8a08f0->_impl->_recordId = $V1b7d5726['record-id'];
- $V4a8a08f0->_impl->_modificationId = $V1b7d5726['mod-id'];
- $V4a8a08f0->_impl->_parent =& $V4b43b0ae;
- $V4b43b0ae->_impl->_relatedSets[$Vaca007a7][] =& $V4a8a08f0;
- }
- }
- }
- $V6e52c40b[] =& $V4b43b0ae;
- }
- $Vb4a88417->_impl->_records =& $V6e52c40b;
- $this->_result =& $Vb4a88417;
- true;
- }
- function setLayout(&$Vc6140495)
- {
- if (!$this->V6de51026) {
- return new FileMaker_Error($this->_fm, 'Attempt to get a layout object before parsing data.');
- }
- if ($this->_layout) {
- $Vc6140495 =& $this->_layout;
- return true;
- }
- $Vc6140495->_impl->_name = $this->V1ea7e575['layout'];
- $Vc6140495->_impl->_database = $this->V1ea7e575['database'];
- foreach ($this->V9f81f3c0 as $V06e3d36f) {
- $V8fa14cdd =& new FileMaker_Field($Vc6140495);
- $V8fa14cdd->_impl->_name = $V06e3d36f['name'];
- $V8fa14cdd->_impl->_autoEntered = (bool)($V06e3d36f['auto-enter'] == 'yes');
- $V8fa14cdd->_impl->_global = (bool)($V06e3d36f['global'] == 'yes');
- $V8fa14cdd->_impl->_maxRepeat = (int)$V06e3d36f['max-repeat'];
- $V8fa14cdd->_impl->_result = $V06e3d36f['result'];
- $V8fa14cdd->_impl->_type = $V06e3d36f['type'];
- if ($V06e3d36f['not-empty'] == 'yes') {
- $V8fa14cdd->_impl->_validationRules[FILEMAKER_RULE_NOTEMPTY] = true;
- $V8fa14cdd->_impl->_validationMask |= FILEMAKER_RULE_NOTEMPTY;
- }
- if ($V06e3d36f['numeric-only'] == 'yes') {
- $V8fa14cdd->_impl->_validationRules[FILEMAKER_RULE_NUMERICONLY] = true;
- $V8fa14cdd->_impl->_validationMask |= FILEMAKER_RULE_NUMERICONLY;
- }
- if (array_key_exists('max-characters', $V06e3d36f)) {
- $V8fa14cdd->_impl->_maxCharacters = (int) $V06e3d36f['max-characters'];
- $V8fa14cdd->_impl->_validationRules[FILEMAKER_RULE_MAXCHARACTERS] = true;
- $V8fa14cdd->_impl->_validationMask |= FILEMAKER_RULE_MAXCHARACTERS;
- }
- if ($V06e3d36f['four-digit-year'] == 'yes') {
- $V8fa14cdd->_impl->_validationRules[FILEMAKER_RULE_FOURDIGITYEAR] = true;
- $V8fa14cdd->_impl->_validationMask |= FILEMAKER_RULE_FOURDIGITYEAR;
- }
- if ($V06e3d36f['time-of-day'] == 'yes' || $V06e3d36f['result'] == 'time') {
- $V8fa14cdd->_impl->_validationRules[FILEMAKER_RULE_TIMEOFDAY] = true;
- $V8fa14cdd->_impl->_validationMask |= FILEMAKER_RULE_TIMEOFDAY;
- }
- if ($V06e3d36f['four-digit-year'] == 'no' && $V06e3d36f['result'] == 'timestamp') {
- $V8fa14cdd->_impl->_validationRules[FILEMAKER_RULE_TIMESTAMP_FIELD] = true;
- $V8fa14cdd->_impl->_validationMask |= FILEMAKER_RULE_TIMESTAMP_FIELD;
- }
- if ($V06e3d36f['four-digit-year'] == 'no' && $V06e3d36f['result'] == 'date') {
- $V8fa14cdd->_impl->_validationRules[FILEMAKER_RULE_DATE_FIELD] = true;
- $V8fa14cdd->_impl->_validationMask |= FILEMAKER_RULE_DATE_FIELD;
- }
- if ($V06e3d36f['time-of-day'] == 'no' && $V06e3d36f['result'] == 'time') {
- $V8fa14cdd->_impl->_validationRules[FILEMAKER_RULE_TIME_FIELD] = true;
- $V8fa14cdd->_impl->_validationMask |= FILEMAKER_RULE_TIME_FIELD;
- }
- $Vc6140495->_impl->_fields[$V8fa14cdd->getName()] =& $V8fa14cdd;
- }
- foreach ($this->Vae581270 as $Vaca007a7 => $V53256610) {
- $V4b43b0ae =& new FileMaker_RelatedSet($Vc6140495);
- $V4b43b0ae->_impl->_name = $Vaca007a7;
- foreach ($V53256610 as $V06e3d36f) {
- $V8fa14cdd =& new FileMaker_Field($V4b43b0ae);
- $V8fa14cdd->_impl->_name = $V06e3d36f['name'];
- $V8fa14cdd->_impl->_autoEntered = (bool)($V06e3d36f['auto-enter'] == 'yes');
- $V8fa14cdd->_impl->_global = (bool)($V06e3d36f['global'] == 'yes');
- $V8fa14cdd->_impl->_maxRepeat = (int)$V06e3d36f['max-repeat'];
- $V8fa14cdd->_impl->_result = $V06e3d36f['result'];
- $V8fa14cdd->_impl->_type = $V06e3d36f['type'];
- if ($V06e3d36f['not-empty'] == 'yes') {
- $V8fa14cdd->_impl->_validationRules[FILEMAKER_RULE_NOTEMPTY] = true;
- $V8fa14cdd->_impl->_validationMask |= FILEMAKER_RULE_NOTEMPTY;
- }
- if ($V06e3d36f['numeric-only'] == 'yes') {
- $V8fa14cdd->_impl->_validationRules[FILEMAKER_RULE_NUMERICONLY] = true;
- $V8fa14cdd->_impl->_validationMask |= FILEMAKER_RULE_NUMERICONLY;
- }
- if (array_key_exists('max-characters', $V06e3d36f)) {
- $V8fa14cdd->_impl->_maxCharacters = (int) $V06e3d36f['max-characters'];
- $V8fa14cdd->_impl->_validationRules[FILEMAKER_RULE_MAXCHARACTERS] = true;
- $V8fa14cdd->_impl->_validationMask |= FILEMAKER_RULE_MAXCHARACTERS;
- }
- if ($V06e3d36f['four-digit-year'] == 'yes') {
- $V8fa14cdd->_impl->_validationRules[FILEMAKER_RULE_FOURDIGITYEAR] = true;
- $V8fa14cdd->_impl->_validationMask |= FILEMAKER_RULE_FOURDIGITYEAR;
- }
- if ($V06e3d36f['time-of-day'] == 'yes' || $V06e3d36f['result'] == 'time') {
- $V8fa14cdd->_impl->_validationRules[FILEMAKER_RULE_TIMEOFDAY] = true;
- $V8fa14cdd->_impl->_validationMask |= FILEMAKER_RULE_TIMEOFDAY;
- }
- if ($V06e3d36f['four-digit-year'] == 'no' && $V06e3d36f['result'] == 'timestamp') {
- $V8fa14cdd->_impl->_validationRules[FILEMAKER_RULE_TIMESTAMP_FIELD] = true;
- $V8fa14cdd->_impl->_validationMask |= FILEMAKER_RULE_TIMESTAMP_FIELD;
- }
- if ($V06e3d36f['four-digit-year'] == 'no' && $V06e3d36f['result'] == 'date') {
- $V8fa14cdd->_impl->_validationRules[FILEMAKER_RULE_DATE_FIELD] = true;
- $V8fa14cdd->_impl->_validationMask |= FILEMAKER_RULE_DATE_FIELD;
- }
- if ($V06e3d36f['time-of-day'] == 'no' && $V06e3d36f['result'] == 'time') {
- $V8fa14cdd->_impl->_validationRules[FILEMAKER_RULE_TIME_FIELD] = true;
- $V8fa14cdd->_impl->_validationMask |= FILEMAKER_RULE_TIME_FIELD;
- }
- $V4b43b0ae->_impl->_fields[$V8fa14cdd->getName()] =& $V8fa14cdd;
- }
- $Vc6140495->_impl->_relatedSets[$V4b43b0ae->getName()] =& $V4b43b0ae;
- }
- $this->_layout =& $Vc6140495;
- return true;
- }
- function _start($V3643b863, $Vb068931c, $V5d06e8a3)
- {
- $V5d06e8a3 = $this->_fm->toOutputCharset($V5d06e8a3);
- switch ($Vb068931c) {
- case 'error':
- $this->Vcb5e100e= $V5d06e8a3['code'];
- break;
- case 'product':
- $this->Vf5bf48aa= $V5d06e8a3;
- break;
- case 'datasource':
- $this->V1ea7e575= $V5d06e8a3;
- break;
- case 'relatedset-definition':
- $this->Vae581270[$V5d06e8a3['table']] = array();
- $this->Ve13f1c92= $V5d06e8a3['table'];
- break;
- case 'field-definition':
- if ($this->Ve13f1c92) {
- $this->Vae581270[$this->Ve13f1c92][] = $V5d06e8a3;
- } else {
- $this->V9f81f3c0[] = $V5d06e8a3;
- }
- break;
- case 'resultset':
- $this->Vaae0d98d= $V5d06e8a3;
- break;
- case 'relatedset':
- $this->Ve13f1c92= $V5d06e8a3['table'];
- $this->V51bc3e3b= $this->V43432a31;
- $this->V51bc3e3b['children'][$this->Ve13f1c92] = array();
- $this->V43432a31= null;
- break;
- case 'record':
- $this->V43432a31=
- array('record-id' => $V5d06e8a3['record-id'],
- 'mod-id' => $V5d06e8a3['mod-id'],
- 'fields' => array(),
- 'children' => array());
- break;
- case 'field':
- $this->V26005321= $V5d06e8a3['name'];
- $this->V43432a31['fields'][$this->V26005321] = array();
- break;
- case 'data':
- $this->V6468d939= '';
- break;
- }
- }
- function _end($V3643b863, $Vb068931c)
- {
- switch ($Vb068931c) {
- case 'relatedset-definition':
- $this->Ve13f1c92= null;
- break;
- case 'relatedset':
- $this->Ve13f1c92= null;
- $this->V43432a31= $this->V51bc3e3b;
- $this->V51bc3e3b= null;
- break;
- case 'record':
- if ($this->Ve13f1c92) {
- $this->V51bc3e3b['children'][$this->Ve13f1c92][] = $this->V43432a31;
- } else {
- $this->V6e52c40b[] = $this->V43432a31;
- }
- $this->V43432a31= null;
- break;
- case 'field':
- $this->V26005321= null;
- break;
- case 'data':
- $this->V43432a31['fields'][$this->V26005321][] = trim($this->V6468d939);
- $this->V6468d939= null;
- break;
- }
- }
- function _cdata($V3643b863, $V8d777f38)
- {
- $this->V6468d939.= $this->_fm->toOutputCharset($V8d777f38);
- }
- }