C:/lib/adodb/contrib/toxmlrpc.inc.php Quellcode

toxmlrpc.inc.php
gehe zur Dokumentation dieser Datei
1 <?php
20  require_once('xmlrpc.inc');
21  if (!defined('ADODB_DIR')) require_once('adodb.inc.php');
22 
26  function rs2xmlrpcval(&$adodbrs) {
27 
28  $header = rs2xmlrpcval_header($adodbrs);
29  $body = rs2xmlrpcval_body($adodbrs);
30 
31  // put it all together and build final xmlrpc struct
32  $xmlrpcrs = new xmlrpcval ( array(
33  "header" => $header,
34  "body" => $body,
35  ), "struct");
36 
37  return $xmlrpcrs;
38 
39  }
40 
44  function rs2xmlrpcval_header($adodbrs)
45  {
46  $numfields = $adodbrs->FieldCount();
47  $numrecords = $adodbrs->RecordCount();
48 
49  // build structure holding recordset information
50  $fieldstruct = array();
51  for ($i = 0; $i < $numfields; $i++) {
52  $fld = $adodbrs->FetchField($i);
53  $fieldarray = array();
54  if (isset($fld->name))
55  $fieldarray["name"] = new xmlrpcval ($fld->name);
56  if (isset($fld->type))
57  $fieldarray["type"] = new xmlrpcval ($fld->type);
58  if (isset($fld->max_length))
59  $fieldarray["max_length"] = new xmlrpcval ($fld->max_length, "int");
60  if (isset($fld->not_null))
61  $fieldarray["not_null"] = new xmlrpcval ($fld->not_null, "boolean");
62  if (isset($fld->has_default))
63  $fieldarray["has_default"] = new xmlrpcval ($fld->has_default, "boolean");
64  if (isset($fld->default_value))
65  $fieldarray["default_value"] = new xmlrpcval ($fld->default_value);
66  $fieldstruct[$i] = new xmlrpcval ($fieldarray, "struct");
67  }
68  $fieldcount = new xmlrpcval ($numfields, "int");
69  $recordcount = new xmlrpcval ($numrecords, "int");
70  $sql = new xmlrpcval ($adodbrs->sql);
71  $fieldinfo = new xmlrpcval ($fieldstruct, "array");
72 
73  $header = new xmlrpcval ( array(
74  "fieldcount" => $fieldcount,
75  "recordcount" => $recordcount,
76  "sql" => $sql,
77  "fieldinfo" => $fieldinfo
78  ), "struct");
79 
80  return $header;
81  }
82 
87  function rs2xmlrpcval_body($adodbrs)
88  {
89  $numfields = $adodbrs->FieldCount();
90 
91  // build structure containing recordset data
92  $adodbrs->MoveFirst();
93  $rows = array();
94  while (!$adodbrs->EOF) {
95  $columns = array();
96  // This should work on all cases of fetch mode: assoc, num, both or default
97  if ($adodbrs->fetchMode == 'ADODB_FETCH_BOTH' || count($adodbrs->fields) == 2 * $adodbrs->FieldCount())
98  for ($i = 0; $i < $numfields; $i++)
99  if ($adodbrs->fields[$i] === null)
100  $columns[$i] = new xmlrpcval ('');
101  else
102  $columns[$i] = xmlrpc_encode ($adodbrs->fields[$i]);
103  else
104  foreach ($adodbrs->fields as $val)
105  if ($val === null)
106  $columns[] = new xmlrpcval ('');
107  else
108  $columns[] = xmlrpc_encode ($val);
109 
110  $rows[] = new xmlrpcval ($columns, "array");
111 
112  $adodbrs->MoveNext();
113  }
114  $body = new xmlrpcval ($rows, "array");
115 
116  return $body;
117  }
118 
122  function rs2xmlrpcstring (&$adodbrs) {
123  $xmlrpc = rs2xmlrpcval ($adodbrs);
124  if ($xmlrpc)
125  return $xmlrpc->serialize();
126  else
127  return null;
128  }
129 
135  function xmlrpcval2rs (&$xmlrpcval) {
136 
137  $fields_array = array();
138  $data_array = array();
139 
140  // rebuild column information
141  $header = $xmlrpcval->structmem('header');
142 
143  $numfields = $header->structmem('fieldcount');
144  $numfields = $numfields->scalarval();
145  $numrecords = $header->structmem('recordcount');
146  $numrecords = $numrecords->scalarval();
147  $sqlstring = $header->structmem('sql');
148  $sqlstring = $sqlstring->scalarval();
149 
150  $fieldinfo = $header->structmem('fieldinfo');
151  for ($i = 0; $i < $numfields; $i++) {
152  $temp = $fieldinfo->arraymem($i);
153  $fld = new ADOFieldObject();
154  while (list($key,$value) = $temp->structeach()) {
155  if ($key == "name") $fld->name = $value->scalarval();
156  if ($key == "type") $fld->type = $value->scalarval();
157  if ($key == "max_length") $fld->max_length = $value->scalarval();
158  if ($key == "not_null") $fld->not_null = $value->scalarval();
159  if ($key == "has_default") $fld->has_default = $value->scalarval();
160  if ($key == "default_value") $fld->default_value = $value->scalarval();
161  } // while
162  $fields_array[] = $fld;
163  } // for
164 
165  // fetch recordset information into php array
166  $body = $xmlrpcval->structmem('body');
167  for ($i = 0; $i < $numrecords; $i++) {
168  $data_array[$i]= array();
169  $xmlrpcrs_row = $body->arraymem($i);
170  for ($j = 0; $j < $numfields; $j++) {
171  $temp = $xmlrpcrs_row->arraymem($j);
172  $data_array[$i][$j] = $temp->scalarval();
173  } // for j
174  } // for i
175 
176  // finally build in-memory recordset object and return it
177  $rs = new ADORecordSet_array();
178  $rs->InitArrayFields($data_array,$fields_array);
179  return $rs;
180 
181  }
182 
183 ?>




Korrekturen, Hinweise und Ergänzungen

Bitte scheuen Sie sich nicht und melden Sie, was auf dieser Seite sachlich falsch oder irreführend ist, was ergänzt werden sollte, was fehlt usw. Dazu bitte oben aus dem Menü Seite den Eintrag Support Forum wählen. Es ist eine kostenlose Anmeldung erforderlich, um Anmerkungen zu posten. Unpassende Postings, Spam usw. werden kommentarlos entfernt.