protected function processActionDefault() { if ($this->storage->isEnabledBizProc()) { $documentData = array('DISK' => \Bitrix\Disk\BizProcDocument::generateDocumentComplexType($this->storage->getId()), 'WEBDAV' => \Bitrix\Disk\BizProcDocumentCompatible::generateDocumentComplexType($this->storage->getId())); if (!empty($this->arParams['FILE_ID'])) { $autoExecute = CBPDocumentEventType::Edit; } else { $autoExecute = CBPDocumentEventType::Create; } $this->arParams['BIZPROC_PARAMETERS'] = false; $this->arParams['BIZPROC_PARAMETERS_REQUIRED'] = array(); $workflowTemplateId = ''; foreach ($documentData as $nameModule => $data) { $workflowTemplateObject = CBPWorkflowTemplateLoader::getList(array(), array("DOCUMENT_TYPE" => $data, "AUTO_EXECUTE" => $autoExecute, "ACTIVE" => "Y"), false, false, array("ID", "PARAMETERS")); while ($workflowTemplate = $workflowTemplateObject->getNext()) { if (!empty($workflowTemplate['PARAMETERS'])) { foreach ($workflowTemplate['PARAMETERS'] as $parametersId => $parameters) { if ($parameters['Required']) { $this->arParams['BIZPROC_PARAMETERS_REQUIRED'][] = 'bizproc' . $workflowTemplate['ID'] . '_' . $parametersId; } } $this->arParams['BIZPROC_PARAMETERS'] = true; } $workflowTemplateId = $workflowTemplate['ID']; } } $this->arParams['STATUS_START_BIZPROC'] = !empty($workflowTemplateId); } $this->arParams['STORAGE_ID'] = $this->storage->getId(); $this->includeComponentTemplate(); }
protected function prepareParams() { $this->arParams['STORAGE_ID'] = isset($this->arParams['DOCUMENT_ID']) ? intval(str_replace('STORAGE_', '', $this->arParams['DOCUMENT_ID'])) : $this->arParams['STORAGE_ID']; $this->arParams['SET_TITLE'] = $this->arParams['SET_TITLE'] == 'N' ? 'N' : 'Y'; $this->arParams['NAME_TEMPLATE'] = empty($this->arParams['NAME_TEMPLATE']) ? COption::getOptionString('bizproc', 'name_template', CSite::getNameFormat(false), SITE_ID) : str_replace(array('#NOBR#', '#/NOBR#'), array('', ''), $this->arParams['NAME_TEMPLATE']); if (!isset($this->arParams['MODULE_ID'])) { $this->errorCollection->add(array(new Error(Loc::getMessage('BPATT_NO_MODULE_ID'), self::ERROR_COULD_NOT_FIND_MODULE_ID))); } if (!isset($this->arParams['STORAGE_ID'])) { $this->errorCollection->add(array(new Error(Loc::getMessage('BPATT_NO_DOCUMENT_TYPE'), self::ERROR_COULD_NOT_FIND_STORAGE_ID))); } if ($this->errorCollection->hasErrors()) { $error = array_shift($this->getErrors()); throw new ArgumentException($error->getMessage()); } $this->arParams['DOCUMENT_DATA'] = array('DISK' => array('DOCUMENT_TYPE' => \Bitrix\Disk\BizProcDocument::generateDocumentComplexType($this->arParams['STORAGE_ID'])), 'WEBDAV' => array('DOCUMENT_TYPE' => \Bitrix\Disk\BizProcDocumentCompatible::generateDocumentComplexType($this->arParams['STORAGE_ID']))); $this->arParams['DOCUMENT_TYPE'] = \Bitrix\Disk\BizProcDocument::generateDocumentType($this->arParams['STORAGE_ID']); return $this; }
protected function prepareParams() { $this->arParams['TEMPLATE_ID'] = intval($this->request->getQuery('workflow_template_id')); $this->arParams['SET_TITLE'] = $this->arParams['SET_TITLE'] == 'N' ? 'N' : 'Y'; if (!isset($this->arParams['MODULE_ID'])) { $this->errorCollection->add(array(new Error(Loc::getMessage('BPATT_NO_MODULE_ID'), self::ERROR_COULD_NOT_FIND_MODULE_ID))); } if (!isset($this->arParams['STORAGE_ID'])) { $this->errorCollection->add(array(new Error(Loc::getMessage('BPABS_EMPTY_DOC_TYPE'), self::ERROR_COULD_NOT_FIND_STORAGE_ID))); } if (!isset($this->arParams['DOCUMENT_ID'])) { $this->errorCollection->add(array(new Error(Loc::getMessage('BPABS_EMPTY_DOC_ID'), self::ERROR_COULD_NOT_FIND_DOCUMENT_ID))); } if ($this->errorCollection->hasErrors()) { $error = array_shift($this->getErrors()); throw new ArgumentException($error->getMessage()); } $this->arResult['DOCUMENT_DATA'] = array('DISK' => array('DOCUMENT_TYPE' => \Bitrix\Disk\BizProcDocument::generateDocumentComplexType($this->arParams['STORAGE_ID']), 'DOCUMENT_ID' => \Bitrix\Disk\BizProcDocument::getDocumentComplexId($this->arParams['DOCUMENT_ID'])), 'WEBDAV' => array('DOCUMENT_TYPE' => \Bitrix\Disk\BizProcDocumentCompatible::generateDocumentComplexType($this->arParams['STORAGE_ID']), 'DOCUMENT_ID' => \Bitrix\Disk\BizProcDocumentCompatible::getDocumentComplexId($this->arParams['DOCUMENT_ID']))); return $this; }
protected function getBizProcData(BaseObject $object, SecurityContext $securityContext, array $actions, array $columnsBizProc, array $bizprocIcon, array $exportData) { $documentData = array('DISK' => array('DOCUMENT_TYPE' => \Bitrix\Disk\BizProcDocument::generateDocumentComplexType($this->storage->getId()), 'DOCUMENT_ID' => \Bitrix\Disk\BizProcDocument::getDocumentComplexId($object->getId())), 'WEBDAV' => array('DOCUMENT_TYPE' => \Bitrix\Disk\BizProcDocumentCompatible::generateDocumentComplexType($this->storage->getId()), 'DOCUMENT_ID' => \Bitrix\Disk\BizProcDocumentCompatible::getDocumentComplexId($object->getId()))); $listBpTemplates = array(); foreach ($this->arParams['TEMPLATE_BIZPROC'] as $idTemplate => $valueTemplate) { $url = CComponentEngine::MakePathFromTemplate($valueTemplate['URL'], array("ELEMENT_ID" => $object->getId())); $listBpTemplates[] = array("ICONCLASS" => "", "TEXT" => $valueTemplate['NAME'], "ONCLICK" => "jsUtils.Redirect([], '" . CUtil::JSEscape($url) . "');"); } if ($object->canStartBizProc($securityContext) && !empty($listBpTemplates)) { $actions[] = array("ICONCLASS" => "bizproc_start", "TEXT" => Loc::getMessage("DISK_FOLDER_LIST_ACT_START_BIZPROC"), "MENU" => $listBpTemplates); } $webdavFileId = $object->getXmlId(); if (!empty($webdavFileId)) { if (Loader::includeModule("iblock")) { if ($this->storage->getProxyType() instanceof ProxyType\Group) { $iblock = CIBlockElement::getList(array(), array("ID" => $webdavFileId, 'SHOW_NEW' => 'Y'), false, false, array('ID', 'IBLOCK_ID'))->fetch(); $entity = 'CIBlockDocumentWebdavSocnet'; } else { $iblock = CIBlockElement::getList(array(), array("ID" => $webdavFileId, 'SHOW_NEW' => 'Y'), false, false, array('ID', 'IBLOCK_ID'))->fetch(); $entity = 'CIBlockDocumentWebdav'; } if (!empty($iblock)) { $documentData['OLD_FILE'] = array('DOCUMENT_TYPE' => array('webdav', $entity, "iblock_" . $iblock['IBLOCK_ID']), 'DOCUMENT_ID' => array('webdav', $entity, $iblock['ID'])); } } } foreach ($documentData as $nameModuleId => $data) { $temporary[$nameModuleId] = CBPDocument::getDocumentStates($data['DOCUMENT_TYPE'], $data['DOCUMENT_ID']); } if (isset($temporary['OLD_FILE'])) { $documentStates = array_merge($temporary['DISK'], $temporary['WEBDAV'], $temporary['OLD_FILE']); } else { $documentStates = array_merge($temporary['DISK'], $temporary['WEBDAV']); } foreach ($documentStates as $key => $documentState) { if (empty($documentState['ID'])) { unset($documentStates[$key]); } } $columnsBizProc['BIZPROC'] = ""; $bizprocIcon['BIZPROC'] = ""; if (!empty($documentStates)) { if (count($documentStates) == 1) { $documentState = reset($documentStates); if ($documentState['WORKFLOW_STATUS'] > 0 || empty($documentState['WORKFLOW_STATUS'])) { $tasksWorkflow = CBPDocument::getUserTasksForWorkflow($this->getUser()->GetID(), $documentState["ID"]); $columnsBizProc["BIZPROC"] = '<div class="bizproc-item-title">' . htmlspecialcharsbx($documentState["TEMPLATE_NAME"]) . ': ' . '<span class="bizproc-item-title bizproc-state-title" style="">' . '<a href="' . $exportData["OPEN_URL"] . '#tab-bp">' . (strlen($documentState["STATE_TITLE"]) > 0 ? htmlspecialcharsbx($documentState["STATE_TITLE"]) : htmlspecialcharsbx($documentState["STATE_NAME"])) . '</a>' . '</span>' . '</div>'; $columnsBizProc['BIZPROC'] = str_replace("'", "\"", $columnsBizProc['BIZPROC']); $bizprocIcon["BIZPROC"] = "<div class=\"element-bizproc-status bizproc-statuses " . (!(strlen($documentState["ID"]) <= 0 || strlen($documentState["WORKFLOW_STATUS"]) <= 0) ? 'bizproc-status-' . (empty($tasksWorkflow) ? "inprogress" : "attention") : '') . "\" onmouseover='BX.hint(this, \"" . addslashes($columnsBizProc["BIZPROC"]) . "\")'></div>"; if (!empty($tasksWorkflow)) { $tmp = array(); foreach ($tasksWorkflow as $val) { $url = CComponentEngine::makePathFromTemplate($this->arParams["PATH_TO_DISK_TASK"], array("ID" => $val["ID"])); $url .= "?back_url=" . urlencode($this->getApplication()->getCurPageParam()); $tmp[] = '<a href="' . $url . '">' . $val["NAME"] . '</a>'; } $columnsBizProc["BIZPROC"] .= '<div class="bizproc-tasks">' . implode(", ", $tmp) . '</div>'; return array($actions, $columnsBizProc, $bizprocIcon); } return array($actions, $columnsBizProc, $bizprocIcon); } return array($actions, $columnsBizProc, $bizprocIcon); } else { $tasks = array(); $inprogress = false; foreach ($documentStates as $key => $documentState) { if ($documentState['WORKFLOW_STATUS'] > 0 || empty($documentState['WORKFLOW_STATUS'])) { $tasksWorkflow = CBPDocument::getUserTasksForWorkflow($this->getUser()->GetID(), $documentState["ID"]); if (!$inprogress) { $inprogress = strlen($documentState['ID']) > 0 && strlen($documentState['WORKFLOW_STATUS']) > 0; } if (!empty($tasksWorkflow)) { foreach ($tasksWorkflow as $val) { $tasks[] = $val; } } } } $columnsBizProc["BIZPROC"] = '<span class="bizproc-item-title">' . Loc::getMessage("DISK_FOLDER_LIST_GRID_BIZPROC") . ': <a href="' . $exportData["OPEN_URL"] . '#tab-bp" title="' . Loc::getMessage("DISK_FOLDER_LIST_GRID_BIZPROC_TITLE") . '">' . count($documentStates) . '</a></span>' . (!empty($tasks) ? '<br /><span class="bizproc-item-title">' . Loc::getMessage("DISK_FOLDER_LIST_GRID_BIZPROC_TASKS") . ': <a href="' . $this->arParams["PATH_TO_DISK_TASK_LIST"] . '" title="' . Loc::getMessage("DISK_FOLDER_LIST_GRID_BIZPROC_TASKS_TITLE") . '">' . count($tasks) . '</a></span>' : ''); $bizprocIcon["BIZPROC"] = "<div class=\"element-bizproc-status bizproc-statuses " . ($inprogress ? ' bizproc-status-' . (empty($tasks) ? "inprogress" : "attention") : '') . "\" onmouseover='BX.hint(this, \"" . addslashes($columnsBizProc['BIZPROC']) . "\")'></div>"; return array($actions, $columnsBizProc, $bizprocIcon); } } return array($actions, $columnsBizProc, $bizprocIcon); }
function GetFieldInputControlOptions($documentType, &$arFieldType, $jsFunctionName, &$value) { $iblockId = intval(substr($documentType, strlen("iblock_"))); if ($iblockId > 0 && ($storage = self::needProxyToDiskByDocType($documentType))) { return self::proxyToDisk(__FUNCTION__, array(\Bitrix\Disk\BizProcDocumentCompatible::generateDocumentType($storage->getId()), $arFieldType, $jsFunctionName, $value)); } return parent::GetFieldInputControlOptions($documentType, $arFieldType, $jsFunctionName, $value); }
/***************** STANDART ****************************************/ $arParams["SET_TITLE"] = $arParams["SET_TITLE"] == "N" ? "N" : "Y"; /******************************************************************** Main data ********************************************************************/ $arError = array(); if (strlen($arParams["MODULE_ID"]) <= 0) { $arError[] = array("id" => "empty_module_id", "text" => GetMessage("BPATT_NO_MODULE_ID")); } if (strlen($arParams["STORAGE_ID"]) <= 0) { $arError[] = array("id" => "empty_document_type", "text" => GetMessage("BPABS_EMPTY_DOC_TYPE")); } if (strlen($arParams["DOCUMENT_ID"]) <= 0) { $arError[] = array("id" => "empty_document_id", "text" => GetMessage("BPABS_EMPTY_DOC_ID")); } $documentData = array('DISK' => array('DOCUMENT_TYPE' => \Bitrix\Disk\BizProcDocument::generateDocumentComplexType($arParams['STORAGE_ID']), 'DOCUMENT_ID' => \Bitrix\Disk\BizProcDocument::getDocumentComplexId($arParams["DOCUMENT_ID"])), 'WEBDAV' => array('DOCUMENT_TYPE' => \Bitrix\Disk\BizProcDocumentCompatible::generateDocumentComplexType($arParams['STORAGE_ID']), 'DOCUMENT_ID' => \Bitrix\Disk\BizProcDocumentCompatible::getDocumentComplexId($arParams["DOCUMENT_ID"]))); if (!check_bitrix_sessid()) { $arError[] = array("id" => "access_denied", "text" => GetMessage("BPABS_NO_PERMS")); } if (empty($arError)) { if (!CBPDocument::CanUserOperateDocument(CBPCanUserOperateOperation::StartWorkflow, $GLOBALS["USER"]->GetID(), $documentData['DISK']["DOCUMENT_ID"], array())) { $arError[] = array("id" => "access_denied", "text" => GetMessage("BPABS_NO_PERMS")); } } if (!empty($arError)) { $e = new CAdminException($arError); ShowError($e->GetString()); return false; } elseif (!empty($_REQUEST["cancel"]) && !empty($_REQUEST["back_url"])) { LocalRedirect(str_replace("#WF#", "", $_REQUEST["back_url"])); }
public static function deleteWorkflowsFile($fileId) { $documentData = array('DISK' => \Bitrix\Disk\BizProcDocument::getDocumentComplexId($fileId), 'WEBDAV' => \Bitrix\Disk\BizProcDocumentCompatible::getDocumentComplexId($fileId)); $errors = array(); foreach ($documentData as $nameModule => $data) { \CBPDocument::onDocumentDelete($data, $errors); } }
protected function migrateDataCommonStorages() { if ($this->isStepFinished(__METHOD__)) { return array(0, 0); } $lastId = $this->getLastIblockId(); if ($this->isOracle && $lastId == 0) { //we support 10g : ( $maxId = $this->connection->queryScalar('SELECT MAX(ID) MAX FROM b_disk_object'); $maxId++; $seqId = $this->connection->query('SELECT sq_b_disk_object.NEXTVAL NEXTVAL FROM DUAL')->fetch(); $seqId = $seqId['NEXTVAL']; $diffId = $maxId - $seqId; if ($diffId > 0) { $this->connection->queryExecute("ALTER SEQUENCE sq_b_disk_object INCREMENT BY {$diffId}"); $this->connection->queryExecute("SELECT sq_b_disk_object.NEXTVAL NEXTVAL FROM DUAL"); $this->connection->queryExecute("ALTER SEQUENCE sq_b_disk_object INCREMENT BY 1"); } } foreach ($this->getIblockIdsWithCommonFiles() as $iblock) { if ($lastId > $iblock['ID']) { continue; } $this->abortIfNeeded(); $this->log(array(__METHOD__, 'start', $iblock['ID'])); $iblockId = (int) $iblock['ID']; $sqlHelper = $this->connection->getSqlHelper(); $name = $sqlHelper->forSql($iblock['NAME']); $proxyType = $sqlHelper->forSql(ProxyType\Common::className()); $storageRow = $this->connection->query("SELECT * FROM b_disk_storage WHERE XML_ID = '{$iblockId}' AND ENTITY_TYPE = '{$proxyType}'")->fetch(); if (!$storageRow) { $this->log(array(__METHOD__, 'Error. Could not find storage by XML_ID', $iblock['ID'], "WHERE XML_ID = '{$iblockId}' AND ENTITY_TYPE = '{$proxyType}'")); $this->storeIblockId($iblock['ID']); continue; } $storageId = $storageRow['ID']; $this->connection->queryExecute("\n\t\t\t\tINSERT INTO b_disk_object (NAME, TYPE, CODE, STORAGE_ID, PARENT_ID, CREATE_TIME, UPDATE_TIME, WEBDAV_IBLOCK_ID)\n\t\t\t\tSELECT '{$name}', 2, null, {$storageId}, null, ib.TIMESTAMP_X, ib.TIMESTAMP_X, ib.ID FROM b_iblock ib WHERE ib.ID = {$iblockId}\n\n\t\t\t"); $rootObjectId = null; if ($this->isMysql || $this->isMssql) { $rootObjectId = (int) $this->connection->getInsertedId(); } elseif ($this->isOracle) { $rootObjectId = $this->connection->queryScalar('SELECT MAX(ID) MAX FROM b_disk_object'); } if (!$rootObjectId) { $this->log(array(__METHOD__, 'Error. Could not insert root object', array($name, $storageId, $iblockId))); $this->storeIblockId($iblock['ID']); continue; } if ($this->isMysql) { $sql = "\n\t\t\t\t\tUPDATE b_disk_object do,\n\t\t\t\t\t(\n\t\t\t\t\t\tSELECT NAME, MIN(ID) ID, COUNT(*) C\n\t\t\t\t\t\tFROM b_disk_object\n\t\t\t\t\t\tWHERE STORAGE_ID = {$storageId} AND PARENT_ID IS NULL AND ID <> {$rootObjectId}\n\t\t\t\t\t\tGROUP BY NAME\n\t\t\t\t\t\tHAVING C>1\n\t\t\t\t\t) dbl\n\t\t\t\t\tSET do.NAME = " . $this->getConcatFunction('do.NAME', 'do.ID') . "\n\t\t\t\t\tWHERE do.STORAGE_ID = {$storageId} AND do.PARENT_ID IS NULL AND do.ID <> {$rootObjectId}\n\t\t\t\t\t\tAND do.ID > dbl.ID\n\t\t\t\t\t\tAND do.NAME=dbl.NAME\n\t\t\t\t"; } elseif ($this->isOracle || $this->isMssql) { $sql = "\n\t\t\t\t\tUPDATE b_disk_object\n\t\t\t\t\t\tSET NAME = (\n\t\t\t\t\t\t\tSELECT " . $this->getConcatFunction('do.NAME', 'do.ID') . " FROM b_disk_object do,\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\tSELECT NAME, MIN(ID) ID, COUNT(*) C\n\t\t\t\t\t\t\t\tFROM b_disk_object\n\t\t\t\t\t\t\t\tWHERE STORAGE_ID = {$storageId} AND PARENT_ID IS NULL AND ID <> {$rootObjectId}\n\t\t\t\t\t\t\t\tGROUP BY NAME\n\t\t\t\t\t\t\t\tHAVING COUNT(*)>1\n\t\t\t\t\t\t\t) dbl\n\t\t\t\t\t\t\tWHERE do.STORAGE_ID = {$storageId} AND do.PARENT_ID IS NULL AND do.ID <> {$rootObjectId}\n\t\t\t\t\t\t\t\tAND do.ID > dbl.ID\n\t\t\t\t\t\t\t\tAND do.NAME=dbl.NAME\n\t\t\t\t\t\t\t\tAND b_disk_object.ID = do.ID\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\tWHERE EXISTS (\n\t\t\t\t\t\t\tSELECT " . $this->getConcatFunction('do.NAME', 'do.ID') . " FROM b_disk_object do,\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\tSELECT NAME, MIN(ID) ID, COUNT(*) C\n\t\t\t\t\t\t\t\tFROM b_disk_object\n\t\t\t\t\t\t\t\tWHERE STORAGE_ID = {$storageId} AND PARENT_ID IS NULL AND ID <> {$rootObjectId}\n\t\t\t\t\t\t\t\tGROUP BY NAME\n\t\t\t\t\t\t\t\tHAVING COUNT(*)>1\n\t\t\t\t\t\t\t) dbl\n\t\t\t\t\t\t\tWHERE do.STORAGE_ID = {$storageId} AND do.PARENT_ID IS NULL AND do.ID <> {$rootObjectId}\n\t\t\t\t\t\t\t\tAND do.ID > dbl.ID\n\t\t\t\t\t\t\t\tAND do.NAME=dbl.NAME\n\t\t\t\t\t\t\t\tAND b_disk_object.ID = do.ID\n\t\t\t\t\t\t)\n\t\t\t\t"; } $this->connection->queryExecute($sql); $this->connection->queryExecute("\n\t\t\t\tUPDATE b_disk_object SET PARENT_ID = {$rootObjectId} WHERE STORAGE_ID = {$storageId} AND PARENT_ID IS NULL AND ID <> {$rootObjectId}\n\t\t\t"); $this->connection->queryExecute("\n\t\t\t\tUPDATE b_disk_storage SET ROOT_OBJECT_ID = {$rootObjectId} WHERE ID = {$storageId}\n\t\t\t"); $this->moveCommonElements($storageId, $rootObjectId, $iblock); if ($this->runWorkWithBizproc) { $classDocument = $this->sqlHelper->forSql(\Bitrix\Disk\BizProcDocumentCompatible::className()); if ($this->isMssql || $this->isMysql) { $this->connection->queryExecute("\n\t\t\t\t\t\tINSERT INTO b_bp_workflow_template (MODULE_ID, ENTITY, DOCUMENT_TYPE, AUTO_EXECUTE, NAME, DESCRIPTION, TEMPLATE, PARAMETERS, VARIABLES, MODIFIED, USER_ID, SYSTEM_CODE, ACTIVE)\n\t\t\t\t\t\tSELECT 'disk', '{$classDocument}', 'STORAGE_{$storageId}', AUTO_EXECUTE, NAME, DESCRIPTION, TEMPLATE, PARAMETERS, VARIABLES, MODIFIED, USER_ID, SYSTEM_CODE, ACTIVE\n\t\t\t\t\t\t\tFROM b_bp_workflow_template\n\t\t\t\t\t\t\tWHERE MODULE_ID = 'webdav' AND ENTITY = 'CIBlockDocumentWebdav' AND DOCUMENT_TYPE = 'iblock_{$iblock['ID']}'\n\t\t\t\t\t"); } elseif ($this->isOracle) { $this->connection->queryExecute("\n\t\t\t\t\t\tINSERT INTO b_bp_workflow_template (ID, MODULE_ID, ENTITY, DOCUMENT_TYPE, AUTO_EXECUTE, NAME, DESCRIPTION, TEMPLATE, PARAMETERS, VARIABLES, MODIFIED, USER_ID, SYSTEM_CODE, ACTIVE)\n\t\t\t\t\t\tSELECT SQ_B_BP_WORKFLOW_TEMPLATE.nextval, 'disk', '{$classDocument}', 'STORAGE_{$storageId}', AUTO_EXECUTE, NAME, DESCRIPTION, TEMPLATE, PARAMETERS, VARIABLES, MODIFIED, USER_ID, SYSTEM_CODE, ACTIVE\n\t\t\t\t\t\t\tFROM b_bp_workflow_template\n\t\t\t\t\t\t\tWHERE MODULE_ID = 'webdav' AND ENTITY = 'CIBlockDocumentWebdav' AND DOCUMENT_TYPE = 'iblock_{$iblock['ID']}'\n\t\t\t\t\t"); } } $this->log(array(__METHOD__, 'finish', $iblock['ID'])); $this->storeIblockId($iblock['ID']); } $this->storeIblockId(0); $this->setStepFinished(__METHOD__); }
public function GetAllowableUserGroups($documentType) { if ($storage = self::needProxyToDiskByDocType($documentType)) { return self::proxyToDisk(__FUNCTION__, array(\Bitrix\Disk\BizProcDocumentCompatible::generateDocumentType($storage->getId()))); } $iblockId = intval(substr($documentType, strlen("iblock_"))); if ($iblockId <= 0) { throw new CBPArgumentOutOfRangeException("documentType", $documentType); } $documentType = trim($documentType); if (strlen($documentType) <= 0) { return false; } $iblockId = intval(substr($documentType, strlen("iblock_"))); $arResult = array("Author" => GetMessage("IBD_DOCUMENT_AUTHOR")); $arRes = array(1); if (CIBlock::GetArrayByID($iblockId, "RIGHTS_MODE") === "E") { $obRights = new CIBlockRights($iblockId); foreach ($obRights->GetGroups("element_bizproc_start") as $GROUP_CODE) { if (preg_match("/^G(\\d+)\$/", $GROUP_CODE, $match)) { $arRes[] = $match[1]; } } } else { $arGroups = CIBlock::GetGroupPermissions($iblockId); foreach ($arGroups as $groupId => $perm) { if ($perm >= "R") { $arRes[] = $groupId; } } } //Crutch for Bitrix24 context (user group management is not suppotted) if (IsModuleInstalled('bitrix24')) { $siteID = CAllSite::GetDefSite(); $dbResult = CGroup::GetList($by = '', $order = '', array('STRING_ID' => 'EMPLOYEES_' . $siteID, 'STRING_ID_EXACT_MATCH' => 'Y')); if ($arEmployeeGroup = $dbResult->Fetch()) { $employeeGroupID = intval($arEmployeeGroup['ID']); if (!in_array($employeeGroupID, $arRes, true)) { $arRes[] = $employeeGroupID; } } } $dbGroupsList = CGroup::GetListEx(array("NAME" => "ASC"), array("ID" => $arRes)); while ($arGroup = $dbGroupsList->Fetch()) { $arResult[$arGroup["ID"]] = $arGroup["NAME"]; } return $arResult; }
public function processActionStopBizProc() { $this->checkRequiredPostParams(array('fileId', 'idBizProc')); if (!Loader::includeModule("bizproc")) { $this->errorCollection->addOne(new Error(Loc::getMessage('DISK_FILE_VIEW_BIZPROC_LOAD'))); } if ($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } $fileId = (int) $this->request->getPost('fileId'); /** @var File $file */ $file = File::loadById($fileId); if (!$file) { $this->errorCollection->addOne(new Error(Loc::getMessage('DISK_FILE_VIEW_ERROR_COULD_NOT_FIND_OBJECT'), self::ERROR_COULD_NOT_FIND_OBJECT)); $this->sendJsonErrorResponse(); } $documentData = array('DISK' => array('DOCUMENT_ID' => \Bitrix\Disk\BizProcDocument::getDocumentComplexId($fileId)), 'WEBDAV' => array('DOCUMENT_ID' => \Bitrix\Disk\BizProcDocumentCompatible::getDocumentComplexId($fileId))); $webdavFileId = $file->getXmlId(); if (!empty($webdavFileId)) { $documentData['OLD_FILE_COMMON'] = array('DOCUMENT_ID' => array('webdav', 'CIBlockDocumentWebdav', $webdavFileId)); $documentData['OLD_FILE_GROUP'] = array('DOCUMENT_ID' => array('webdav', 'CIBlockDocumentWebdavSocnet', $webdavFileId)); } $workflowId = $this->request->getPost('idBizProc'); $error = array(); foreach ($documentData as $nameModule => $data) { $availabilityProcess = CBPDocument::GetDocumentState($data['DOCUMENT_ID'], $workflowId); if (!empty($availabilityProcess)) { if (CBPDocument::CanUserOperateDocument(CBPCanUserOperateOperation::StartWorkflow, $this->getUser()->getId(), $data['DOCUMENT_ID'])) { CBPDocument::TerminateWorkflow($workflowId, $data['DOCUMENT_ID'], $error); } } } if ($error) { $this->errorCollection->addOne(new Error(array_shift($error))); $this->sendJsonErrorResponse(); } $this->sendJsonSuccessResponse(); }
protected function processActionShowBp() { $this->getApplication()->setTitle($this->storage->getProxyType()->getTitleForCurrentUser()); $viewFile = CComponentEngine::makePathFromTemplate($this->arParams['PATH_TO_FILE_VIEW'], array('FILE_ID' => $this->file->getId(), 'FILE_PATH' => $this->arParams['RELATIVE_PATH'])); $urlStartBizproc = \CComponentEngine::makePathFromTemplate($this->arParams['PATH_TO_DISK_START_BIZPROC'], array("ELEMENT_ID" => $this->file->getId())); $urlStartBizproc .= "?back_url=" . urlencode($this->getApplication()->getCurPage()); $urlStartBizproc .= (strpos($urlStartBizproc, "?") === false ? "?" : "&") . 'workflow_template_id=0&' . bitrix_sessid_get(); $this->arResult = array('STORAGE' => $this->storage, 'FILE' => array('ID' => $this->file->getId()), 'PATH_TO_FILE_VIEW' => $viewFile, 'PATH_TO_START_BIZPROC' => $urlStartBizproc, 'STORAGE_ID' => 'STORAGE_' . $this->storage->getId()); $this->arParams['STATUS_BIZPROC'] = $this->storage->isEnabledBizProc() && Loader::includeModule("bizproc"); if ($this->arParams['STATUS_BIZPROC']) { $documentData = array('DISK' => array('DOCUMENT_TYPE' => \Bitrix\Disk\BizProcDocument::generateDocumentComplexType($this->storage->getId()), 'DOCUMENT_ID' => \Bitrix\Disk\BizProcDocument::getDocumentComplexId($this->file->getId())), 'WEBDAV' => array('DOCUMENT_TYPE' => \Bitrix\Disk\BizProcDocumentCompatible::generateDocumentComplexType($this->storage->getId()), 'DOCUMENT_ID' => \Bitrix\Disk\BizProcDocumentCompatible::getDocumentComplexId($this->file->getId()))); $webdavFileId = $this->file->getXmlId(); if (!empty($webdavFileId)) { if (Loader::includeModule("iblock")) { if ($this->storage->getProxyType() instanceof ProxyType\Group) { $iblock = CIBlockElement::getList(array(), array("ID" => $webdavFileId, 'SHOW_NEW' => 'Y'), false, false, array('ID', 'IBLOCK_ID'))->fetch(); $entity = 'CIBlockDocumentWebdavSocnet'; } else { $iblock = CIBlockElement::getList(array(), array("ID" => $webdavFileId, 'SHOW_NEW' => 'Y'), false, false, array('ID', 'IBLOCK_ID'))->fetch(); $entity = 'CIBlockDocumentWebdav'; } if (!empty($iblock)) { $documentData['OLD_FILE'] = array('DOCUMENT_TYPE' => array('webdav', $entity, "iblock_" . $iblock['IBLOCK_ID']), 'DOCUMENT_ID' => array('webdav', $entity, $iblock['ID'])); } } } $this->showBizProc($documentData); } $this->includeComponentTemplate('bp'); $this->end(); }
protected function processActionImportTemplate() { if ($this->request->getPost('import_template') == 'Y') { $res = 0; $error = ''; if (is_uploaded_file($_FILES['import_template_file']['tmp_name'])) { $f = fopen($_FILES['import_template_file']['tmp_name'], "rb"); $datum = fread($f, filesize($_FILES['import_template_file']['tmp_name'])); if ($this->request->getPost('old_template')) { $this->arResult['DOCUMENT_COMPLEX_TYPE'] = \Bitrix\Disk\BizProcDocumentCompatible::generateDocumentComplexType($this->arParams['STORAGE_ID']); } fclose($f); try { $res = CBPWorkflowTemplateLoader::importTemplate($this->arResult['ID'], $this->arResult['DOCUMENT_COMPLEX_TYPE'], $this->request->getPost('import_template_autostart'), $this->request->getPost('import_template_name'), $this->request->getPost('import_template_description'), $datum); } catch (Exception $e) { $error = preg_replace("#[\r\n]+#", " ", $e->getMessage()); } } if (intval($res) <= 0) { $response = "\n\t\t\t\t\t<script>\n\t\t\t\t\t\talert('" . Loc::getMessage('BIZPROC_WFEDIT_IMPORT_ERROR') . (strlen($error) > 0 ? ': ' . $error : '') . "');\n\t\t\t\t\t\twindow.location = '" . str_replace('#ID#', $this->arResult['ID'], $this->arResult['EDIT_PAGE_TEMPLATE']) . "';\n\t\t\t\t\t</script>\n\t\t\t\t"; } else { $response = "\n\t\t\t\t\t<script>\n\t\t\t\t\t\twindow.location = '" . str_replace('#ID#', $res, $this->arResult['EDIT_PAGE_TEMPLATE']) . "';\n\t\t\t\t\t</script>\n\t\t\t\t"; } $this->sendResponse($response); } }
if ($arTemplate = $dbTemplatesList->Fetch()) { $canWrite = CBPDocument::CanUserOperateDocumentType(CBPCanUserOperateOperation::CreateWorkflow, $GLOBALS["USER"]->GetID(), $arTemplate["DOCUMENT_TYPE"]); $workflowTemplateName = $arTemplate["NAME"]; $workflowTemplateDescription = $arTemplate["DESCRIPTION"]; $workflowTemplateAutostart = $arTemplate["AUTO_EXECUTE"]; $arWorkflowTemplate = $arTemplate["TEMPLATE"]; $arWorkflowParameters = $arTemplate["PARAMETERS"]; $arWorkflowVariables = $arTemplate["VARIABLES"]; } else { $ID = 0; } if ($arTemplate["ENTITY"] == 'Bitrix\\Disk\\BizProcDocument') { $documentType = \Bitrix\Disk\BizProcDocument::generateDocumentComplexType($arParams['STORAGE_ID']); $arResult['ENTITY'] = $arTemplate["ENTITY"]; } else { $documentType = \Bitrix\Disk\BizProcDocumentCompatible::generateDocumentComplexType($arParams['STORAGE_ID']); $arResult['ENTITY'] = $arTemplate["ENTITY"]; } } if ($ID <= 0) { $arResult['ENTITY'] = $arParams["ENTITY_DISK"]; $documentType = \Bitrix\Disk\BizProcDocument::generateDocumentComplexType($arParams['STORAGE_ID']); if (strlen($storageId) <= 0) { $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED") . " " . GetMessage("BIZPROC_WFEDIT_ERROR_TYPE")); } $canWrite = CBPDocument::CanUserOperateDocumentType(CBPCanUserOperateOperation::CreateWorkflow, $GLOBALS["USER"]->GetID(), $documentType); $workflowTemplateName = GetMessage("BIZPROC_WFEDIT_DEFAULT_TITLE"); $workflowTemplateDescription = ''; $workflowTemplateAutostart = 1; if ($_GET['init'] == 'statemachine') { $arWorkflowTemplate = array(array("Type" => "StateMachineWorkflowActivity", "Name" => "Template", "Properties" => array(), "Children" => array()));