Xataface  2.0alpha2
Xataface Application Framework
 All Data Structures Namespaces Files Functions Variables Groups Pages
commit.php
Go to the documentation of this file.
1 <?php
3  function handle($params){
5  if ( !$_POST ){
6  throw new Exception("Commit requires post");
7  }
8  $data = @$_POST['--data'];
9  if ( !$data ){
10  throw new Exception("No data provided");
11  }
12 
13  $data = json_decode($data, true);
14 
15  $updates = array();
16  $inserts = array();
17  $deletes = array();
18 
19  if ( isset($data['inserts']) ){
20  $inserts =& $data['inserts'];
21  }
22 
23  if ( isset($data['updates']) ){
24  $updates =& $data['updates'];
25  }
26 
27  if ( isset($data['deletes']) ){
28  $deletes =& $data['deletes'];
29  }
30 
31  $numFailures = 0;
32  $numSuccesses = 0;
33 
34  $deleteResponses = array();
35 
36  // Let's do the deletes first
37  foreach ( $deletes as $deleteInfo ){
38  $response = array();
39  $deleteResponses[] =& $response;
40  $record = df_get_record_by_id($deleteInfo['id']);
41  if ( !$record ){
42  $response['message'] = 'Record '.$deleteInfo['id'].' could not be found.';
43  $response['code'] = 404;
44  $numFailures++;
45  } else {
46  $res = $response->delete(true);
47  if ( PEAR::isError($res) ){
48  $response['message'] = $res->getMessage();
49  $response['code'] = $res->getCode();
50  $numFailures++;
51  } else {
52  $response['message'] = 'Deleted record '.$deleteInfo['id'].'.';
53  $response['code'] = 200;
54  $response['recordId'] = $deleteInfo['id'];
55  $numSuccesses++;
56  }
57  }
58  }
59 
60  $insertResponses = array();
61  foreach ($inserts as $insertInfo){
62  $response = array();
63  $insertResponses[] =& $response;
64  $record = new Dataface_Record($insertInfo['table'], array());
65  $record->setValues($insertInfo['data']);
66  $res = $record->save(null, true);
67  if ( PEAR::isError($res) ){
68  $response['message'] = $res->getMessage();
69  $response['code'] = $res->getCode();
70  $numFailures++;
71  } else {
72  $response['message'] = 'Inserted record';
73  $response['code'] = $res->getCode();
74  $response['recordId'] = $record->getId();
75  $response['version'] = $record->getVersion();
76  $numSuccesses++;
77  }
78  }
79 
80  $updateResponses = array();
81  foreach ($updates as $updateInfo ){
82  $response = array();
83  $insertResponses[] =& $response;
84  $record = df_get_record_by_id($updateInfo['id']);
85  if ( !$record ){
86  $response['message'] = 'Record '.$updateInfo['id'].' could not be found.';
87  $response['code'] = 404;
88  $numFailures++;
89  } else {
90  $record->setValues($updateInfo['data']);
91  $res = $record->save(null, true);
92  if ( PEAR::isError($res) ){
93  $response['message'] = $res->getMessage(),
94  $response['code'] = $res->getCode();
95  $numFailures++;
96  } else {
97  $response['message'] = 'Updated record';
98  $response['code'] = 200;
99  $response['recordId'] = $record->getId();
100  $response['version'] = $record->getVersion();
101  $numSuccesses++;
102  }
103 
104  }
105  }
106 
107 
108  header('Content-type: text/json; charset="'.$app->_conf['oe'].'"');
109 
110  $out = array(
111  'code' => ($numFailures == 0 and $numSuccesses > 0) ? 200 :
112  ($numSuccesses > 0) ? 201 : 202,
113  'message' => $numSuccesses . ' successes. '. $numFailures.' failures.',
114  'numSuccesses' => $numSuccesses,
115  'numFailures' => $numFailures,
116  'responses' => array(
117  'updates' => $updateResponses,
118  'inserts' => $insertResponses,
119  'deletes' => $deleteResponses
120  )
121  );
122  echo json_encode($out);
123 
124 
125 
126 
127  }
128 }