9 $this->useGZipCompression = \CBPWorkflowTemplateLoader::useGZipCompression();
15 $updateMode = ($id > 0);
16 $addMode = !$updateMode;
23 $arDocumentId = CBPHelper::ParseDocumentId(
$arFields[
"DOCUMENT_ID"]);
24 $arFields[
"MODULE_ID"] = $arDocumentId[0];
28 $arFields[
"DOCUMENT_ID"] = $arDocumentId[2];
63 if ($this->useGZipCompression)
80 private static function generateFilePath($documentId)
82 $arDocumentId = CBPHelper::ParseDocumentId($documentId);
85 if ($arDocumentId[0] <>
'')
86 $dest .= preg_replace(
"/[^a-zA-Z0-9._]/i",
"_", $arDocumentId[0]);
89 $documentIdMD5 = md5($arDocumentId[2]);
90 $dest .=
"/".preg_replace(
"/[^a-zA-Z0-9_]/i",
"_", $arDocumentId[1]).
"/".mb_substr($documentIdMD5, 0, 3).
"/".$documentIdMD5;
101 throw new Exception(
"id");
104 if ($documentId !=
null)
112 array(
"ID",
"MODULE_ID",
"ENTITY",
"DOCUMENT_ID")
114 if (
$ar = $db->Fetch())
128 $dest = self::GenerateFilePath(
$ar[
"DOCUMENT_ID"]);
130 if(CModule::IncludeModule(
'clouds'))
134 $DB->Query(
"DELETE FROM b_bp_history WHERE ID = ".intval($id).
" ",
true);
138 public static function delete($id, $documentId =
null)
141 $h->DeleteHistory($id, $documentId);
148 $arDocumentId = CBPHelper::ParseDocumentId($documentId);
150 $dest = self::GenerateFilePath($documentId);
152 if(CModule::IncludeModule(
'clouds'))
156 "DELETE FROM b_bp_history ".
157 "WHERE DOCUMENT_ID = '".
$DB->ForSql($arDocumentId[2]).
"' ".
158 " AND ENTITY = '".$DB->ForSql($arDocumentId[1]).
"' ".
159 " AND MODULE_ID ".(($arDocumentId[0] <>
'') ?
"= '".$DB->ForSql($arDocumentId[0]).
"'" :
"IS NULL").
" ",
167 $h->DeleteHistoryByDocument($documentId);
177 $db = $h->GetHistoryList(
array(),
array(
"ID" => $id));
178 return $db->GetNext();
184 return $h->GetHistoryList($arOrder,
$arFilter, $arGroupBy, $arNavStartParams, $arSelectFields);
189 $arHistory = self::GetById($id);
191 throw new Exception(str_replace(
"#ID#", intval($id),
GetMessage(
"BPCGHIST_INVALID_ID")));
193 list(
$moduleId,
$entity, $documentId) = CBPHelper::ParseDocumentId($arHistory[
"DOCUMENT_ID"]);
199 return call_user_func_array(
array(
$entity,
"RecoverDocumentFromHistory"),
array($documentId, $arHistory[
"DOCUMENT"]));
206 $dest = self::GenerateFilePath($documentId);
208 $fileParameterIsArray =
true;
209 if (!is_array($arFileId))
211 $arFileId =
array($arFileId);
212 $fileParameterIsArray =
false;
217 foreach ($arFileId as $fileId)
219 if(
$ar = CFile::GetFileArray($fileId))
221 $newFilePath = CFile::CopyFile($fileId,
false,
$dest.
"/".$historyIndex.
"/".
$ar[
"FILE_NAME"]);
227 if (!$fileParameterIsArray)
238 public static function mergeHistory($firstDocumentId, $secondDocumentId)
242 $arFirstDocumentId = CBPHelper::ParseDocumentId($firstDocumentId);
243 $arSecondDocumentId = CBPHelper::ParseDocumentId($secondDocumentId);
246 "UPDATE b_bp_history SET ".
247 " DOCUMENT_ID = '".
$DB->ForSql($arFirstDocumentId[2]).
"', ".
248 " ENTITY = '".$DB->ForSql($arFirstDocumentId[1]).
"', ".
249 " MODULE_ID = '".$DB->ForSql($arFirstDocumentId[0]).
"' ".
250 "WHERE DOCUMENT_ID = '".$DB->ForSql($arSecondDocumentId[2]).
"' ".
251 " AND ENTITY = '".$DB->ForSql($arSecondDocumentId[1]).
"' ".
252 " AND MODULE_ID = '".$DB->ForSql($arSecondDocumentId[0]).
"' "
260 $arOldType = CBPHelper::ParseDocumentId($oldType);
261 $arNewType = CBPHelper::ParseDocumentId($newType);
264 "UPDATE b_bp_history SET ".
265 " ENTITY = '".
$DB->ForSql($arNewType[1]).
"', ".
266 " MODULE_ID = '".$DB->ForSql($arNewType[0]).
"' ".
267 "WHERE ENTITY = '".$DB->ForSql($arOldType[1]).
"' ".
268 " AND MODULE_ID = '".$DB->ForSql($arOldType[0]).
"' ".
269 " AND DOCUMENT_ID IN (SELECT t.DOCUMENT_ID FROM b_bp_workflow_state t WHERE t.WORKFLOW_TEMPLATE_ID in (".implode(
",", $workflowTemplateIds).
") and t.MODULE_ID='".
$DB->ForSql($arOldType[0]).
"' and t.ENTITY='".
$DB->ForSql($arOldType[1]).
"') "
279 $arInsert =
$DB->PrepareInsert(
"b_bp_history",
$arFields);
282 "INSERT INTO b_bp_history (".$arInsert[0].
", MODIFIED) ".
283 "VALUES(".$arInsert[1].
", ".
$DB->CurrentTimeFunction().
")";
286 $ID = intval(
$DB->LastID());
288 $arEventParams =
array(
292 foreach (
GetModuleEvents(
'bizproc',
'OnAddToHistory',
true) as $arEvent)
308 $strUpdate =
$DB->PrepareUpdate(
"b_bp_history",
$arFields);
311 "UPDATE b_bp_history SET ".
313 " MODIFIED = ".$DB->CurrentTimeFunction().
" ".
314 "WHERE ID = ".intval($id).
" ";
324 if (
count($arSelectFields) <= 0)
325 $arSelectFields =
array(
"ID",
"MODULE_ID",
"ENTITY",
"DOCUMENT_ID",
"NAME",
"DOCUMENT",
"MODIFIED",
"USER_ID");
327 if (
count(array_intersect($arSelectFields,
array(
"MODULE_ID",
"ENTITY",
"DOCUMENT_ID"))) > 0)
329 if (!in_array(
"MODULE_ID", $arSelectFields))
330 $arSelectFields[] =
"MODULE_ID";
331 if (!in_array(
"ENTITY", $arSelectFields))
332 $arSelectFields[] =
"ENTITY";
333 if (!in_array(
"DOCUMENT_ID", $arSelectFields))
334 $arSelectFields[] =
"DOCUMENT_ID";
337 if (array_key_exists(
"DOCUMENT_ID",
$arFilter))
339 $d = CBPHelper::ParseDocumentId(
$arFilter[
"DOCUMENT_ID"]);
346 "ID" => Array(
"FIELD" =>
"H.ID",
"TYPE" =>
"int"),
347 "MODULE_ID" => Array(
"FIELD" =>
"H.MODULE_ID",
"TYPE" =>
"string"),
348 "ENTITY" => Array(
"FIELD" =>
"H.ENTITY",
"TYPE" =>
"string"),
349 "DOCUMENT_ID" => Array(
"FIELD" =>
"H.DOCUMENT_ID",
"TYPE" =>
"string"),
350 "NAME" => Array(
"FIELD" =>
"H.NAME",
"TYPE" =>
"string"),
351 "DOCUMENT" => Array(
"FIELD" =>
"H.DOCUMENT",
"TYPE" =>
"string"),
352 "MODIFIED" => Array(
"FIELD" =>
"H.MODIFIED",
"TYPE" =>
"datetime"),
353 "USER_ID" => Array(
"FIELD" =>
"H.USER_ID",
"TYPE" =>
"int"),
355 "USER_NAME" => Array(
"FIELD" =>
"U.NAME",
"TYPE" =>
"string",
"FROM" =>
"INNER JOIN b_user U ON (H.USER_ID = U.ID)"),
356 "USER_LAST_NAME" => Array(
"FIELD" =>
"U.LAST_NAME",
"TYPE" =>
"string",
"FROM" =>
"INNER JOIN b_user U ON (H.USER_ID = U.ID)"),
357 "USER_SECOND_NAME" => Array(
"FIELD" =>
"U.SECOND_NAME",
"TYPE" =>
"string",
"FROM" =>
"INNER JOIN b_user U ON (H.USER_ID = U.ID)"),
358 "USER_LOGIN" => Array(
"FIELD" =>
"U.LOGIN",
"TYPE" =>
"string",
"FROM" =>
"INNER JOIN b_user U ON (H.USER_ID = U.ID)"),
361 $arSqls = CBPHelper::PrepareSql(
$arFields, $arOrder,
$arFilter, $arGroupBy, $arSelectFields);
363 $arSqls[
"SELECT"] = str_replace(
"%%_DISTINCT_%%",
"", $arSqls[
"SELECT"]);
365 if (is_array($arGroupBy) &&
count($arGroupBy)==0)
368 "SELECT ".$arSqls[
"SELECT"].
" ".
369 "FROM b_bp_history H ".
370 " ".$arSqls[
"FROM"].
" ";
371 if ($arSqls[
"WHERE"] <>
'')
372 $strSql .=
"WHERE ".$arSqls[
"WHERE"].
" ";
373 if ($arSqls[
"GROUPBY"] <>
'')
374 $strSql .=
"GROUP BY ".$arSqls[
"GROUPBY"].
" ";
384 "SELECT ".$arSqls[
"SELECT"].
" ".
385 "FROM b_bp_history H ".
386 " ".$arSqls[
"FROM"].
" ";
387 if ($arSqls[
"WHERE"] <>
'')
388 $strSql .=
"WHERE ".$arSqls[
"WHERE"].
" ";
389 if ($arSqls[
"GROUPBY"] <>
'')
390 $strSql .=
"GROUP BY ".$arSqls[
"GROUPBY"].
" ";
391 if ($arSqls[
"ORDERBY"] <>
'')
392 $strSql .=
"ORDER BY ".$arSqls[
"ORDERBY"].
" ";
394 if (is_array($arNavStartParams) && intval($arNavStartParams[
"nTopCount"]) <= 0)
397 "SELECT COUNT('x') as CNT ".
398 "FROM b_bp_history H ".
399 " ".$arSqls[
"FROM"].
" ";
400 if ($arSqls[
"WHERE"] <>
'')
401 $strSql_tmp .=
"WHERE ".$arSqls[
"WHERE"].
" ";
402 if ($arSqls[
"GROUPBY"] <>
'')
403 $strSql_tmp .=
"GROUP BY ".$arSqls[
"GROUPBY"].
" ";
407 if ($arSqls[
"GROUPBY"] ==
'')
415 $cnt =
$dbRes->SelectedRowsCount();
419 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
423 if (is_array($arNavStartParams) && intval($arNavStartParams[
"nTopCount"]) > 0)
424 $strSql .=
"LIMIT ".intval($arNavStartParams[
"nTopCount"]);
436 private $useGZipCompression =
false;
440 $this->useGZipCompression = $useGZipCompression;
441 parent::__construct(
$res);
444 private function getFromSerializedForm($value)
448 if ($this->useGZipCompression)
449 $value = gzuncompress($value);
451 $value = unserialize($value, [
'allowed_classes' =>
false]);
452 if (!is_array($value))
464 $res = parent::Fetch();
468 if (array_key_exists(
"DOCUMENT_ID",
$res))
470 if (array_key_exists(
"DOCUMENT",
$res))
471 $res[
"DOCUMENT"] = $this->GetFromSerializedForm(
$res[
"DOCUMENT"]);
__construct($res, $useGZipCompression)
static migrateDocumentType($oldType, $newType, $workflowTemplateIds)
static recoverDocumentFromHistory($id)
deleteHistoryByDocument($documentId)
static update($id, $arFields)
parseFields(&$arFields, $id=0)
GetHistoryList($arOrder=array("ID"=> "DESC"), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static prepareFileForHistory($documentId, $arFileId, $historyIndex)
static deleteByDocument($documentId)
static getList($arOrder=array("ID"=> "DESC"), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
updateHistory($id, $arFields)
deleteHistory($id, $documentId=null)
static mergeHistory($firstDocumentId, $secondDocumentId)
getHistoryList($arOrder=array("ID"=> "DESC"), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static DeleteDirFilesEx($path)
if(!defined("ADMIN_AJAX_MODE") &&(($_REQUEST["mode"] ?? '') !='excel')) $buffer
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
ExecuteModuleEventEx($arEvent, $arParams=[])
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
DeleteDirFilesEx($path, $root=null)
GetMessage($name, $aReplace=null)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
if(!empty($sellerData)) $dest