PageRenderTime 47ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/modules/bizproc/classes/mysql/historyservice.php

https://gitlab.com/alexprowars/bitrix
PHP | 173 lines | 141 code | 31 blank | 1 comment | 23 complexity | 23c78b5a11aec3adf6199c9fd4b69aff MD5 | raw file
  1. <?
  2. include_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/bizproc/classes/general/historyservice.php");
  3. class CBPHistoryService
  4. extends CBPAllHistoryService
  5. {
  6. public function __construct()
  7. {
  8. parent::__construct();
  9. }
  10. public function AddHistory($arFields)
  11. {
  12. global $DB;
  13. self::ParseFields($arFields, 0);
  14. $arInsert = $DB->PrepareInsert("b_bp_history", $arFields);
  15. $strSql =
  16. "INSERT INTO b_bp_history (".$arInsert[0].", MODIFIED) ".
  17. "VALUES(".$arInsert[1].", ".$DB->CurrentTimeFunction().")";
  18. $DB->Query($strSql, False, "File: ".__FILE__."<br>Line: ".__LINE__);
  19. $ID = intval($DB->LastID());
  20. $arEventParams = array(
  21. "ID" => $ID,
  22. "DOCUMENT_ID" => array($arFields['MODULE_ID'], $arFields['ENTITY'], $arFields['DOCUMENT_ID']),
  23. );
  24. foreach (GetModuleEvents('bizproc', 'OnAddToHistory', true) as $arEvent)
  25. $result = ExecuteModuleEventEx($arEvent, array($arEventParams));
  26. return $ID;
  27. }
  28. public function UpdateHistory($id, $arFields)
  29. {
  30. global $DB;
  31. $id = intval($id);
  32. if ($id <= 0)
  33. throw new CBPArgumentNullException("id");
  34. self::ParseFields($arFields, $id);
  35. $strUpdate = $DB->PrepareUpdate("b_bp_history", $arFields);
  36. $strSql =
  37. "UPDATE b_bp_history SET ".
  38. " ".$strUpdate.", ".
  39. " MODIFIED = ".$DB->CurrentTimeFunction()." ".
  40. "WHERE ID = ".intval($id)." ";
  41. $DB->Query($strSql, False, "File: ".__FILE__."<br>Line: ".__LINE__);
  42. return $id;
  43. }
  44. public function GetHistoryList($arOrder = array("ID" => "DESC"), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array())
  45. {
  46. global $DB;
  47. if (count($arSelectFields) <= 0)
  48. $arSelectFields = array("ID", "MODULE_ID", "ENTITY", "DOCUMENT_ID", "NAME", "DOCUMENT", "MODIFIED", "USER_ID");
  49. if (count(array_intersect($arSelectFields, array("MODULE_ID", "ENTITY", "DOCUMENT_ID"))) > 0)
  50. {
  51. if (!in_array("MODULE_ID", $arSelectFields))
  52. $arSelectFields[] = "MODULE_ID";
  53. if (!in_array("ENTITY", $arSelectFields))
  54. $arSelectFields[] = "ENTITY";
  55. if (!in_array("DOCUMENT_ID", $arSelectFields))
  56. $arSelectFields[] = "DOCUMENT_ID";
  57. }
  58. if (array_key_exists("DOCUMENT_ID", $arFilter))
  59. {
  60. $d = CBPHelper::ParseDocumentId($arFilter["DOCUMENT_ID"]);
  61. $arFilter["MODULE_ID"] = $d[0];
  62. $arFilter["ENTITY"] = $d[1];
  63. $arFilter["DOCUMENT_ID"] = $d[2];
  64. }
  65. static $arFields = array(
  66. "ID" => Array("FIELD" => "H.ID", "TYPE" => "int"),
  67. "MODULE_ID" => Array("FIELD" => "H.MODULE_ID", "TYPE" => "string"),
  68. "ENTITY" => Array("FIELD" => "H.ENTITY", "TYPE" => "string"),
  69. "DOCUMENT_ID" => Array("FIELD" => "H.DOCUMENT_ID", "TYPE" => "string"),
  70. "NAME" => Array("FIELD" => "H.NAME", "TYPE" => "string"),
  71. "DOCUMENT" => Array("FIELD" => "H.DOCUMENT", "TYPE" => "string"),
  72. "MODIFIED" => Array("FIELD" => "H.MODIFIED", "TYPE" => "datetime"),
  73. "USER_ID" => Array("FIELD" => "H.USER_ID", "TYPE" => "int"),
  74. "USER_NAME" => Array("FIELD" => "U.NAME", "TYPE" => "string", "FROM" => "INNER JOIN b_user U ON (H.USER_ID = U.ID)"),
  75. "USER_LAST_NAME" => Array("FIELD" => "U.LAST_NAME", "TYPE" => "string", "FROM" => "INNER JOIN b_user U ON (H.USER_ID = U.ID)"),
  76. "USER_SECOND_NAME" => Array("FIELD" => "U.SECOND_NAME", "TYPE" => "string", "FROM" => "INNER JOIN b_user U ON (H.USER_ID = U.ID)"),
  77. "USER_LOGIN" => Array("FIELD" => "U.LOGIN", "TYPE" => "string", "FROM" => "INNER JOIN b_user U ON (H.USER_ID = U.ID)"),
  78. );
  79. $arSqls = CBPHelper::PrepareSql($arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields);
  80. $arSqls["SELECT"] = str_replace("%%_DISTINCT_%%", "", $arSqls["SELECT"]);
  81. if (is_array($arGroupBy) && count($arGroupBy)==0)
  82. {
  83. $strSql =
  84. "SELECT ".$arSqls["SELECT"]." ".
  85. "FROM b_bp_history H ".
  86. " ".$arSqls["FROM"]." ";
  87. if (strlen($arSqls["WHERE"]) > 0)
  88. $strSql .= "WHERE ".$arSqls["WHERE"]." ";
  89. if (strlen($arSqls["GROUPBY"]) > 0)
  90. $strSql .= "GROUP BY ".$arSqls["GROUPBY"]." ";
  91. $dbRes = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  92. if ($arRes = $dbRes->Fetch())
  93. return $arRes["CNT"];
  94. else
  95. return False;
  96. }
  97. $strSql =
  98. "SELECT ".$arSqls["SELECT"]." ".
  99. "FROM b_bp_history H ".
  100. " ".$arSqls["FROM"]." ";
  101. if (strlen($arSqls["WHERE"]) > 0)
  102. $strSql .= "WHERE ".$arSqls["WHERE"]." ";
  103. if (strlen($arSqls["GROUPBY"]) > 0)
  104. $strSql .= "GROUP BY ".$arSqls["GROUPBY"]." ";
  105. if (strlen($arSqls["ORDERBY"]) > 0)
  106. $strSql .= "ORDER BY ".$arSqls["ORDERBY"]." ";
  107. if (is_array($arNavStartParams) && IntVal($arNavStartParams["nTopCount"]) <= 0)
  108. {
  109. $strSql_tmp =
  110. "SELECT COUNT('x') as CNT ".
  111. "FROM b_bp_history H ".
  112. " ".$arSqls["FROM"]." ";
  113. if (strlen($arSqls["WHERE"]) > 0)
  114. $strSql_tmp .= "WHERE ".$arSqls["WHERE"]." ";
  115. if (strlen($arSqls["GROUPBY"]) > 0)
  116. $strSql_tmp .= "GROUP BY ".$arSqls["GROUPBY"]." ";
  117. $dbRes = $DB->Query($strSql_tmp, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  118. $cnt = 0;
  119. if (strlen($arSqls["GROUPBY"]) <= 0)
  120. {
  121. if ($arRes = $dbRes->Fetch())
  122. $cnt = $arRes["CNT"];
  123. }
  124. else
  125. {
  126. // only for MySQL
  127. $cnt = $dbRes->SelectedRowsCount();
  128. }
  129. $dbRes = new CDBResult();
  130. $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
  131. }
  132. else
  133. {
  134. if (is_array($arNavStartParams) && IntVal($arNavStartParams["nTopCount"]) > 0)
  135. $strSql .= "LIMIT ".intval($arNavStartParams["nTopCount"]);
  136. $dbRes = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  137. }
  138. $dbRes = new CBPHistoryResult($dbRes, $this->useGZipCompression);
  139. return $dbRes;
  140. }
  141. }
  142. ?>