RefParams.php 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. <?php
  2. /**
  3. * Usage:
  4. * - RefParams::setParam(124, 11, 22, 'key', 'value');
  5. * - RefParams::getLastParam(124, 11, 22, 'key'); // return last inserted value
  6. * - RefParams::getParams(124, 11, 22, 'key'); // return all values
  7. * - RefParams::getAllParams(124, 11, 22); // return all key and values
  8. * - RefParams::removeAllParams(124, 11, 22); // return all key and values
  9. *
  10. * Storage operations:
  11. * - only insert into `CRM_REF_PARAMS`
  12. * - only insert into `CRM_REF_PARAMS__REMOVED_LOG`
  13. * - delete on `CRM_REF_PARAMS` triggers insert into `CRM_REF_PARAMS__REMOVED_LOG`
  14. */
  15. class RefParams {
  16. static function prepareTable() {
  17. DB::getPDO()->execSql("
  18. CREATE TABLE IF NOT EXISTS `CRM_REF_PARAMS` (
  19. `ID_REF` int(11) NOT NULL,
  20. `PRIMARY_KEY` int(11) NOT NULL,
  21. `REMOTE_PRIMARY_KEY` int(11) NOT NULL,
  22. `PARAM_NAME` varchar(32) NOT NULL DEFAULT '',
  23. `PARAM_VALUE` varchar(1024) NOT NULL DEFAULT '',
  24. `A_RECORD_CREATE_DATE` datetime DEFAULT NULL,
  25. `A_RECORD_CREATE_AUTHOR` varchar(20) NOT NULL DEFAULT '',
  26. KEY `ID_REF` (`ID_REF`),
  27. KEY `PRIMARY_KEY` (`PRIMARY_KEY`),
  28. KEY `REMOTE_PRIMARY_KEY` (`REMOTE_PRIMARY_KEY`),
  29. KEY `PARAM_NAME` (`PARAM_NAME`)
  30. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  31. ");
  32. DB::getPDO()->execSql("
  33. CREATE TABLE IF NOT EXISTS `CRM_REF_PARAMS__REMOVED_LOG` (
  34. `ID` int(11) NOT NULL AUTO_INCREMENT,
  35. `A_RECORD_REMOVE_DATE` datetime DEFAULT NULL,
  36. `A_RECORD_REMOVE_AUTHOR` varchar(20) NOT NULL DEFAULT '',
  37. `ID_REF` int(11) NOT NULL,
  38. `PRIMARY_KEY` int(11) NOT NULL,
  39. `REMOTE_PRIMARY_KEY` int(11) NOT NULL,
  40. `PARAM_NAME` varchar(32) NOT NULL DEFAULT '',
  41. `PARAM_VALUE` varchar(1024) NOT NULL DEFAULT '',
  42. `A_RECORD_CREATE_DATE` datetime DEFAULT NULL,
  43. `A_RECORD_CREATE_AUTHOR` varchar(20) NOT NULL DEFAULT '',
  44. PRIMARY KEY (`ID`),
  45. KEY `ID_REF` (`ID_REF`),
  46. KEY `PRIMARY_KEY` (`PRIMARY_KEY`),
  47. KEY `REMOTE_PRIMARY_KEY` (`REMOTE_PRIMARY_KEY`),
  48. KEY `PARAM_NAME` (`PARAM_NAME`)
  49. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  50. ");
  51. }
  52. static function setParam($idRef, $pk, $remotePk, $name, $value) {
  53. self::validateBaseArgs($idRef, $pk, $remotePk);
  54. if (!$name) throw new Exception("Wrong ref param name");
  55. DB::getPDO()->insert("CRM_REF_PARAMS", [
  56. 'ID_REF' => $idRef,
  57. 'PRIMARY_KEY' => $pk,
  58. 'REMOTE_PRIMARY_KEY' => $remotePk,
  59. 'PARAM_NAME' => $name,
  60. 'PARAM_VALUE' => $value,
  61. 'A_RECORD_CREATE_DATE' => "NOW()",
  62. 'A_RECORD_CREATE_AUTHOR' => User::getLogin(),
  63. ]);
  64. }
  65. static function getLastParam($idRef, $pk, $remotePk, $name) { // @return value
  66. self::validateBaseArgs($idRef, $pk, $remotePk);
  67. return DB::getPDO()->fetchValue("
  68. select rp.PARAM_VALUE
  69. from `CRM_REF_PARAMS` rp
  70. where rp.ID_REF = :id_ref
  71. and rp.PRIMARY_KEY = :pk
  72. and rp.REMOTE_PRIMARY_KEY = :remote_pk
  73. and rp.PARAM_NAME = :name
  74. order by rp.A_RECORD_CREATE_DATE DESC
  75. limit 1
  76. ", [
  77. ':id_ref' => $idRef,
  78. ':pk' => $pk,
  79. ':remote_pk' => $remotePk,
  80. ':name' => $name,
  81. ]);
  82. }
  83. static function getParams($idRef, $pk, $remotePk, $name) { // @return array of values
  84. self::validateBaseArgs($idRef, $pk, $remotePk);
  85. if (!$name) throw new Exception("Wrong ref param name");
  86. return DB::getPDO()->fetchAll("
  87. select rp.*
  88. from `CRM_REF_PARAMS` rp
  89. where rp.ID_REF = :id_ref
  90. and rp.PRIMARY_KEY = :pk
  91. and rp.REMOTE_PRIMARY_KEY = :remote_pk
  92. order by rp.A_RECORD_CREATE_DATE DESC
  93. -- limit 1
  94. ", [
  95. ':id_ref' => $idRef,
  96. ':pk' => $pk,
  97. ':remote_pk' => $remotePk,
  98. ]);
  99. }
  100. static function getAllParams($idRef, $pk, $remotePk) { // @return array
  101. self::validateBaseArgs($idRef, $pk, $remotePk);
  102. return DB::getPDO()->fetchAll("
  103. select rp.*
  104. from `CRM_REF_PARAMS` rp
  105. where rp.ID_REF = :id_ref
  106. and rp.PRIMARY_KEY = :pk
  107. and rp.REMOTE_PRIMARY_KEY = :remote_pk
  108. order by rp.A_RECORD_CREATE_DATE DESC
  109. ", [
  110. ':id_ref' => $idRef,
  111. ':pk' => $pk,
  112. ':remote_pk' => $remotePk,
  113. ]);
  114. }
  115. static function removeParams($idRef, $pk, $remotePk, $name) {
  116. self::validateBaseArgs($idRef, $pk, $remotePk);
  117. if (!$name) throw new Exception("Wrong ref param name");
  118. DB::getPDO()->execSql("
  119. insert into `CRM_REF_PARAMS__REMOVED_LOG` (
  120. `A_RECORD_REMOVE_DATE`,
  121. `A_RECORD_REMOVE_AUTHOR`,
  122. `ID_REF`,
  123. `PRIMARY_KEY`,
  124. `REMOTE_PRIMARY_KEY`,
  125. `PARAM_NAME`,
  126. `PARAM_VALUE`,
  127. `A_RECORD_CREATE_DATE`,
  128. `A_RECORD_CREATE_AUTHOR`
  129. )
  130. select
  131. NOW() as `A_RECORD_REMOVE_DATE`,
  132. :user as `A_RECORD_REMOVE_AUTHOR`,
  133. rp.`ID_REF`,
  134. rp.`PRIMARY_KEY`,
  135. rp.`REMOTE_PRIMARY_KEY`,
  136. rp.`PARAM_NAME`,
  137. rp.`PARAM_VALUE`,
  138. rp.`A_RECORD_CREATE_DATE`,
  139. rp.`A_RECORD_CREATE_AUTHOR`
  140. from `CRM_REF_PARAMS` rp
  141. where rp.`ID_REF` = :id_ref
  142. and rp.`PRIMARY_KEY` = :pk
  143. and rp.`REMOTE_PRIMARY_KEY` = :remote_pk
  144. and rp.`PARAM_NAME` = :name
  145. ", [
  146. ':user' => User::getLogin(),
  147. ':id_ref' => $idRef,
  148. ':pk' => $pk,
  149. ':remote_pk' => $remotePk,
  150. ':name' => $name,
  151. ]);
  152. DB::getPDO()->execSql("
  153. DELETE FROM `CRM_REF_PARAMS`
  154. where `ID_REF` = :id_ref
  155. and `PRIMARY_KEY` = :pk
  156. and `REMOTE_PRIMARY_KEY` = :remote_pk
  157. and `PARAM_NAME` = :name
  158. ", [
  159. ':id_ref' => $idRef,
  160. ':pk' => $pk,
  161. ':remote_pk' => $remotePk,
  162. ':name' => $name,
  163. ]);
  164. }
  165. static function removeAllParams($idRef, $pk, $remotePk) {
  166. self::validateBaseArgs($idRef, $pk, $remotePk);
  167. DB::getPDO()->execSql("
  168. insert into `CRM_REF_PARAMS__REMOVED_LOG` (
  169. `A_RECORD_REMOVE_DATE`,
  170. `A_RECORD_REMOVE_AUTHOR`,
  171. `ID_REF`,
  172. `PRIMARY_KEY`,
  173. `REMOTE_PRIMARY_KEY`,
  174. `PARAM_NAME`,
  175. `PARAM_VALUE`,
  176. `A_RECORD_CREATE_DATE`,
  177. `A_RECORD_CREATE_AUTHOR`
  178. )
  179. select
  180. NOW() as `A_RECORD_REMOVE_DATE`,
  181. :user as `A_RECORD_REMOVE_AUTHOR`,
  182. rp.`ID_REF`,
  183. rp.`PRIMARY_KEY`,
  184. rp.`REMOTE_PRIMARY_KEY`,
  185. rp.`PARAM_NAME`,
  186. rp.`PARAM_VALUE`,
  187. rp.`A_RECORD_CREATE_DATE`,
  188. rp.`A_RECORD_CREATE_AUTHOR`
  189. from `CRM_REF_PARAMS` rp
  190. where rp.`ID_REF` = :id_ref
  191. and rp.`PRIMARY_KEY` = :pk
  192. and rp.`REMOTE_PRIMARY_KEY` = :remote_pk
  193. ", [
  194. ':user' => User::getLogin(),
  195. ':id_ref' => $idRef,
  196. ':pk' => $pk,
  197. ':remote_pk' => $remotePk,
  198. ]);
  199. DB::getPDO()->execSql("
  200. DELETE FROM `CRM_REF_PARAMS`
  201. where `ID_REF` = :id_ref
  202. and `PRIMARY_KEY` = :pk
  203. and `REMOTE_PRIMARY_KEY` = :remote_pk
  204. ", [
  205. ':id_ref' => $idRef,
  206. ':pk' => $pk,
  207. ':remote_pk' => $remotePk,
  208. ]);
  209. }
  210. static function validateBaseArgs($idRef, $pk, $remotePk) {
  211. if ((int)$idRef <= 0) throw new Exception("Wrong ID Ref");
  212. if ((int)$pk <= 0) throw new Exception("Wrong Primary Key");
  213. if ((int)$remotePk <= 0) throw new Exception("Wrong Remote Primary Key");
  214. }
  215. }