示例#1
0
 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();
 }
示例#2
0
 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;
 }
示例#3
0
 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;
 }
示例#4
0
 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);
 }
示例#6
0
/***************** 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"]));
}
示例#7
0
 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__);
 }
示例#9
0
 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;
 }
示例#10
0
 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();
 }
示例#11
0
 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();
 }
示例#12
0
 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);
     }
 }
示例#13
0
    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()));