TransactionHelper.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <?php
  2. /**
  3. * usage:
  4. * $actionId = $apiTransactionHelper->createAction($transactionKey, $actionType, $tblName, $requestBodyXml);
  5. * ...
  6. * $apiTransactionHelper->setActionObject($actionId, $item);
  7. * ...
  8. * $newItemId = $dataSource->createItem($item);
  9. * ...
  10. * $apiTransactionHelper->setActionResult($actionId, $newItemId);
  11. */
  12. class Api_TransactionHelper {
  13. public function createAction($transactionKey, $actionType, $tblName, $requestBodyXml) {
  14. $userLogin = User::getLogin();
  15. $db = DB::getDB();
  16. if ($db->has_errors()) {
  17. throw new HttpException("DB Errors: " . implode("\n", $db->get_errors()), 500);
  18. }
  19. $sqlCreateAction = "insert into `_API_XML_TASKS` (
  20. `A_RECORD_CREATE_DATE`
  21. , `A_RECORD_CREATE_AUTHOR`
  22. , `TRANSACTION_ID`
  23. , `TASK`
  24. , `DB_TABLE`
  25. , `XML_OBJ`
  26. )
  27. values (
  28. NOW()
  29. , '{$userLogin}'
  30. , '{$transactionKey}'
  31. , '{$actionType}'
  32. , '{$tblName}'
  33. , '{$requestBodyXml}'
  34. )
  35. ";
  36. IF(V::get('DBG','',$_GET)){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">$sqlCreateAction (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sqlCreateAction);echo'</pre>';}
  37. $db->query($sqlCreateAction);
  38. if ($db->has_errors()) {
  39. throw new HttpException("DB Errors: " . implode("\n", $db->get_errors()), 500);
  40. }
  41. $actionId = $db->insert_id();
  42. IF(V::get('DBG','',$_GET)){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">$actionId (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($actionId);echo'</pre>';}
  43. return $actionId;
  44. }
  45. public function setActionObject($actionId, $item) {
  46. $userLogin = User::getLogin();
  47. $db = DB::getDB();
  48. if ($db->has_errors()) {
  49. throw new HttpException("DB Errors: " . implode("\n", $db->get_errors()), 500);
  50. }
  51. $itemJson = json_encode($item);
  52. $sqlUpdate = "update `_API_XML_TASKS` set
  53. `A_RECORD_UPDATE_DATE`=NOW()
  54. , `A_RECORD_UPDATE_AUTHOR`='{$userLogin}'
  55. , `ITEM_OBJ`='{$itemJson}'
  56. where `ID`={$actionId}
  57. ";
  58. IF(V::get('DBG','',$_GET)){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">$sqlUpdate (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sqlUpdate);echo'</pre>';}
  59. $db->query($sqlUpdate);
  60. if ($db->has_errors()) {
  61. throw new HttpException("DB Errors: " . implode("\n", $db->get_errors()), 500);
  62. }
  63. }
  64. public function setActionResult($actionId, $newItemId) {
  65. $userLogin = User::getLogin();
  66. $db = DB::getDB();
  67. if ($db->has_errors()) {
  68. throw new HttpException("DB Errors: " . implode("\n", $db->get_errors()), 500);
  69. }
  70. $sqlUpdate = "update `_API_XML_TASKS` set
  71. `A_RECORD_UPDATE_DATE`=NOW()
  72. , `A_RECORD_UPDATE_AUTHOR`='{$userLogin}'
  73. , `RESULT_ID`='{$newItemId}'
  74. where `ID`={$actionId}
  75. ";
  76. IF(V::get('DBG','',$_GET)){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">$sqlUpdate (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sqlUpdate);echo'</pre>';}
  77. $db->query($sqlUpdate);
  78. if ($db->has_errors()) {
  79. throw new HttpException("DB Errors: " . implode("\n", $db->get_errors()), 500);
  80. }
  81. }
  82. public function getLastActionInfo($transactionKey) {
  83. $db = DB::getDB();
  84. if ($db->has_errors()) {
  85. throw new HttpException("DB Errors: " . implode("\n", $db->get_errors()), 500);
  86. }
  87. $sqlSelect = "select *
  88. from `_API_XML_TASKS`
  89. where `TRANSACTION_ID`='{$transactionKey}'
  90. order by `ID` desc
  91. limit 1
  92. ";
  93. IF(V::get('DBG','',$_GET)){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">$sqlSelect (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sqlSelect);echo'</pre>';}
  94. $res = $db->query($sqlSelect);
  95. if (!$res || $db->has_errors()) {
  96. throw new HttpException("DB Errors: " . implode("\n", $db->get_errors()), 500);
  97. }
  98. $item = $db->fetch_assoc($res);
  99. if (!$item) {
  100. throw new HttpException("Item not found", 404);
  101. }
  102. return $item;
  103. }
  104. private function _installTable() {
  105. $sqlCreateTable = "
  106. CREATE TABLE IF NOT EXISTS `_API_XML_TASKS` (
  107. `ID` int(11) NOT NULL AUTO_INCREMENT,
  108. `A_RECORD_CREATE_DATE` varchar(30) NOT NULL,
  109. `A_RECORD_CREATE_AUTHOR` varchar(40) NOT NULL,
  110. `A_RECORD_UPDATE_DATE` varchar(30) NOT NULL,
  111. `A_RECORD_UPDATE_AUTHOR` varchar(40) NOT NULL,
  112. `TRANSACTION_ID` varchar(255) NOT NULL,
  113. `TASK` varchar(32) NOT NULL,
  114. `DB_TABLE` varchar(255) NOT NULL,
  115. `XML_OBJ` text NOT NULL,
  116. `ITEM_OBJ` text NOT NULL,
  117. `PARAMS` text NOT NULL,
  118. `RESULT_ID` int(11) NOT NULL DEFAULT '0',
  119. `TASK_DONE` int(11) NOT NULL DEFAULT '0',
  120. PRIMARY KEY (`ID`)
  121. ) ENGINE=MyISAM DEFAULT CHARSET=latin2 ;
  122. ";
  123. }
  124. }