%PDF- %PDF-
Direktori : /proc/self/root/home/bitrix/www/bitrix/modules/bizproc/classes/general/ |
Current File : //proc/self/root/home/bitrix/www/bitrix/modules/bizproc/classes/general/documentservice.php |
<? include_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/bizproc/classes/general/runtimeservice.php"); use Bitrix\Bizproc\FieldType; class CBPDocumentService extends CBPRuntimeService { const FEATURE_MARK_MODIFIED_FIELDS = 'FEATURE_MARK_MODIFIED_FIELDS'; const FEATURE_SET_MODIFIED_BY = 'FEATURE_SET_MODIFIED_BY'; private $arDocumentsCache = array(); private $documentTypesCache = array(); private $typesMapCache = array(); public function getEntityName($moduleId, $entity) { if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity) && method_exists($entity, 'getEntityName')) { return call_user_func_array(array($entity, "getEntityName"), array($entity)); } return null; } public function GetDocument($parameterDocumentId, $parameterDocumentType = null) { list($moduleId, $entity, $documentId) = CBPHelper::ParseDocumentId($parameterDocumentId); $documentType = ($parameterDocumentType && is_array($parameterDocumentType)) ? $parameterDocumentType[2] : null; $k = $moduleId."@".$entity."@".$documentId.($documentType ? '@'.$documentType : ''); if (array_key_exists($k, $this->arDocumentsCache)) { return $this->arDocumentsCache[$k]; } if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity)) { $this->arDocumentsCache[$k] = call_user_func_array(array($entity, "GetDocument"), array($documentId, $documentType)); return $this->arDocumentsCache[$k]; } return null; } public function UpdateDocument($parameterDocumentId, $arFields, $modifiedBy = null) { list($moduleId, $entity, $documentId) = CBPHelper::ParseDocumentId($parameterDocumentId); $this->clearCache(); if (strlen($moduleId) > 0) { CModule::IncludeModule($moduleId); } if (class_exists($entity)) { $modifiedById = $modifiedBy ? CBPHelper::ExtractUsers($modifiedBy, $parameterDocumentId, true) : null; return call_user_func_array([$entity, 'UpdateDocument'], [$documentId, $arFields, $modifiedById]); } return false; } public function CreateDocument($parameterDocumentId, $arFields) { list($moduleId, $entity, $documentId) = CBPHelper::ParseDocumentId($parameterDocumentId); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity)) return call_user_func_array(array($entity, "CreateDocument"), array($documentId, $arFields)); return false; } public function PublishDocument($parameterDocumentId) { list($moduleId, $entity, $documentId) = CBPHelper::ParseDocumentId($parameterDocumentId); $this->clearCache(); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity)) { $r = call_user_func_array(array($entity, "PublishDocument"), array($documentId)); if ($r) $r = array($moduleId, $entity, $r); return $r; } return false; } public function UnpublishDocument($parameterDocumentId) { list($moduleId, $entity, $documentId) = CBPHelper::ParseDocumentId($parameterDocumentId); $this->clearCache(); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity)) return call_user_func_array(array($entity, "UnpublishDocument"), array($documentId)); return false; } public function LockDocument($parameterDocumentId, $workflowId) { list($moduleId, $entity, $documentId) = CBPHelper::ParseDocumentId($parameterDocumentId); $this->clearCache(); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity)) return call_user_func_array(array($entity, "LockDocument"), array($documentId, $workflowId)); return false; } public function UnlockDocument($parameterDocumentId, $workflowId) { list($moduleId, $entity, $documentId) = CBPHelper::ParseDocumentId($parameterDocumentId); $this->clearCache(); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity)) return call_user_func_array(array($entity, "UnlockDocument"), array($documentId, $workflowId)); return false; } public function DeleteDocument($parameterDocumentId) { list($moduleId, $entity, $documentId) = CBPHelper::ParseDocumentId($parameterDocumentId); $this->clearCache(); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity)) return call_user_func_array(array($entity, "DeleteDocument"), array($documentId)); return false; } public function IsDocumentLocked($parameterDocumentId, $workflowId) { list($moduleId, $entity, $documentId) = CBPHelper::ParseDocumentId($parameterDocumentId); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity)) return call_user_func_array(array($entity, "IsDocumentLocked"), array($documentId, $workflowId)); return false; } public function SubscribeOnUnlockDocument($parameterDocumentId, $workflowId, $eventName) { list($moduleId, $entity, $documentId) = CBPHelper::ParseDocumentId($parameterDocumentId); RegisterModuleDependences($moduleId, $entity."_OnUnlockDocument", "bizproc", "CBPDocumentService", "OnUnlockDocument", 100, "", array($workflowId, $eventName)); } public function UnsubscribeOnUnlockDocument($parameterDocumentId, $workflowId, $eventName) { list($moduleId, $entity, $documentId) = CBPHelper::ParseDocumentId($parameterDocumentId); UnRegisterModuleDependences($moduleId, $entity."_OnUnlockDocument", "bizproc", "CBPDocumentService", "OnUnlockDocument", "", array($workflowId, $eventName)); } public static function OnUnlockDocument($workflowId, $eventName, $documentId = array()) { CBPRuntime::SendExternalEvent($workflowId, $eventName, array()); } public function GetDocumentType($parameterDocumentId) { list($moduleId, $entity, $documentId) = CBPHelper::ParseDocumentId($parameterDocumentId); $k = $moduleId."@".$entity."@".$documentId; if (isset($this->documentTypesCache[$k])) return $this->documentTypesCache[$k]; if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity) && method_exists($entity, "GetDocumentType")) { $this->documentTypesCache[$k] = array($moduleId, $entity, call_user_func_array(array($entity, "GetDocumentType"), array($documentId))); return $this->documentTypesCache[$k]; } return null; } public function normalizeDocumentId($parameterDocumentId) { $normalized = $parameterDocumentId; list($moduleId, $entity, $documentId) = CBPHelper::ParseDocumentId($parameterDocumentId); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity) && method_exists($entity, "normalizeDocumentId")) { $normalized = array( $moduleId, $entity, call_user_func_array(array($entity, "normalizeDocumentId"), array($documentId)) ); } return $normalized; } public function GetDocumentFields($parameterDocumentType, $importExportMode = false) { list($moduleId, $entity, $documentType) = CBPHelper::ParseDocumentId($parameterDocumentType); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity)) { $ar = call_user_func_array(array($entity, "GetDocumentFields"), array($documentType, $importExportMode)); if (is_array($ar)) { $arKeys = array_keys($ar); if (!array_key_exists("BaseType", $ar[$arKeys[0]]) || strlen($ar[$arKeys[0]]["BaseType"]) <= 0) { foreach ($arKeys as $key) { if ($ar[$key]["Type"] == 'integer') $ar[$key]["Type"] = 'int'; if (in_array($ar[$key]["Type"], array("int", "double", "date", "datetime", "user", "string", "bool", "file", "text", "select"))) $ar[$key]["BaseType"] = $ar[$key]["Type"]; elseif (!(isset($ar[$key]["BaseType"]) && $ar[$key]["BaseType"] !== "")) $ar[$key]["BaseType"] = "string"; } } } return $ar; } return null; } public function GetDocumentFieldTypes($parameterDocumentType) { list($moduleId, $entity, $documentType) = CBPHelper::ParseDocumentId($parameterDocumentType); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity) && method_exists($entity, "GetDocumentFieldTypes")) return call_user_func_array(array($entity, "GetDocumentFieldTypes"), array($documentType)); return CBPHelper::GetDocumentFieldTypes(); } public function AddDocumentField($parameterDocumentType, $arFields) { list($moduleId, $entity, $documentType) = CBPHelper::ParseDocumentId($parameterDocumentType); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity)) return call_user_func_array(array($entity, "AddDocumentField"), array($documentType, $arFields)); return false; } public function UpdateDocumentField($parameterDocumentType, $arFields) { list($moduleId, $entity, $documentType) = CBPHelper::ParseDocumentId($parameterDocumentType); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity) && method_exists($entity, 'UpdateDocumentField')) return call_user_func_array(array($entity, "UpdateDocumentField"), array($documentType, $arFields)); return false; } public function GetJSFunctionsForFields($parameterDocumentType, $objectName, $arDocumentFields = array(), $arDocumentFieldTypes = array()) { if (!is_array($arDocumentFields) || count($arDocumentFields) <= 0) $arDocumentFields = self::GetDocumentFields($parameterDocumentType); if (!is_array($arDocumentFieldTypes) || count($arDocumentFieldTypes) <= 0) $arDocumentFieldTypes = self::GetDocumentFieldTypes($parameterDocumentType); list($moduleId, $entity, $documentType) = CBPHelper::ParseDocumentId($parameterDocumentType); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); $documentFieldsString = ""; foreach ($arDocumentFields as $fieldKey => $arFieldValue) { if (strlen($documentFieldsString) > 0) $documentFieldsString .= ","; $documentFieldsString .= "'".Cutil::JSEscape($fieldKey)."':{"; $documentFieldsString .= "'Name':'".CUtil::JSEscape($arFieldValue["Name"])."',"; $documentFieldsString .= "'Type':'".CUtil::JSEscape($arFieldValue["Type"])."',"; $documentFieldsString .= "'Multiple':'".CUtil::JSEscape($arFieldValue["Multiple"] ? "Y" : "N")."',"; $documentFieldsString .= "'Complex':'".CUtil::JSEscape($arFieldValue["Complex"] ? "Y" : "N")."',"; $documentFieldsString .= "'Options':"; if (array_key_exists("Options", $arFieldValue)) { if (is_array($arFieldValue["Options"])) { $documentFieldsString .= "{"; $flTmp = false; foreach ($arFieldValue["Options"] as $k => $v) { if ($flTmp) $documentFieldsString .= ","; $documentFieldsString .= "'".CUtil::JSEscape($k)."':'".CUtil::JSEscape($v)."'"; $flTmp = true; } $documentFieldsString .= "}"; } else { $documentFieldsString .= "'".CUtil::JSEscape($arFieldValue["Options"])."'"; } } else { $documentFieldsString .= "''"; } if (isset($arFieldValue["Options"]) && CBPHelper::IsAssociativeArray($arFieldValue["Options"])) { $documentFieldsString .= ", 'OptionsSort':"; $documentFieldsString .= CUtil::PhpToJSObject(array_keys($arFieldValue["Options"])); } if(isset($arFieldValue["Settings"]) && is_array($arFieldValue["Settings"])) { $documentFieldsString .= ", 'Settings':"; $documentFieldsString .= CUtil::PhpToJSObject($arFieldValue["Settings"]); } $documentFieldsString .= "}"; } $fieldTypesString = ""; $ind = -1; foreach ($arDocumentFieldTypes as $typeKey => $arTypeValue) { $ind++; if (strlen($fieldTypesString) > 0) $fieldTypesString .= ","; $fieldTypesString .= "'".CUtil::JSEscape($typeKey)."':{"; $fieldTypesString .= "'Name':'".CUtil::JSEscape($arTypeValue["Name"])."',"; $fieldTypesString .= "'BaseType':'".CUtil::JSEscape($arTypeValue["BaseType"])."',"; $fieldTypesString .= "'Complex':'".CUtil::JSEscape($arTypeValue["Complex"] ? "Y" : "N")."',"; $fieldTypesString .= "'Index':".$ind.""; $fieldTypesString .= "}"; } $documentTypeString = CUtil::PhpToJSObject($parameterDocumentType); $bitrixSessId = bitrix_sessid(); $result = <<<EOS <script type="text/javascript"> var $objectName = {}; $objectName.arDocumentFields = { $documentFieldsString }; $objectName.arFieldTypes = { $fieldTypesString }; $objectName.AddField = function(fldCode, fldName, fldType, fldMultiple, fldOptions) { this.arDocumentFields[fldCode] = {}; this.arDocumentFields[fldCode]["Name"] = fldName; this.arDocumentFields[fldCode]["Type"] = fldType; this.arDocumentFields[fldCode]["Multiple"] = fldMultiple; this.arDocumentFields[fldCode]["Options"] = fldOptions; } $objectName._PrepareResponse = function(v) { v = v.replace(/^\s+|\s+$/g, ''); while (v.length > 0 && v.charCodeAt(0) == 65279) v = v.substring(1); if (v.length <= 0) return undefined; eval("v = " + v); return v; } $objectName.GetFieldInputControl4Type = function(type, value, name, subtypeFunctionName, func) { this.GetFieldInputControlInternal( type, value, name, function(v) { var p = v.indexOf('<!--__defaultOptionsValue:'); if (p >= 0) { p = p + '<!--__defaultOptionsValue:'.length; var p1 = v.indexOf('-->', p); type['Options'] = v.substring(p, p1); } var newPromt = ""; p = v.indexOf('<!--__modifyOptionsPromt:'); if (p >= 0) { p = p + '<!--__modifyOptionsPromt:'.length; p1 = v.indexOf('-->', p); newPromt = v.substring(p, p1); } func(v, newPromt); }, false, subtypeFunctionName, 'Type' ); } $objectName.GetFieldInputControl4Subtype = function(type, value, name, func) { $objectName.GetFieldInputControlInternal(type, value, name, func, false, '', ''); } $objectName.GetFieldInputControl = function(type, value, name, func, als) { $objectName.GetFieldInputControlInternal(type, value, name, func, als, '', ''); } $objectName.GetFieldInputControlInternal = function(type, value, name, func, als, subtypeFunctionName, mode) { if (typeof name == "undefined" || name.length <= 0) name = "BPVDDefaultValue"; if (typeof type != "object") type = {'Type' : type, 'Multiple' : 0, 'Required' : 0, 'Options' : null}; if (typeof name != "object") name = {'Field' : name, 'Form' : null}; BX.ajax.post( '/bitrix/tools/bizproc_get_field.php', { 'DocumentType' : $documentTypeString, 'Field' : name, 'Value' : value, 'Type' : type, 'Als' : als ? 1 : 0, 'rnd' : Math.random(), 'Mode' : mode, 'Func' : subtypeFunctionName, 'sessid' : '$bitrixSessId' }, func ); } $objectName.GetFieldValueByTagName = function(tag, name, form) { var fieldValues = {}; var ar; if (form && (form.length > 0)) { var obj = document.getElementById(form); if (!obj) { for (var i in document.forms) { if (document.forms[i].name == form) { obj = document.forms[i]; break; } } } if (!obj) return; ar = obj.getElementsByTagName(tag); } else { ar = document.getElementsByTagName(tag); } for (var i in ar) { if (ar[i] && ar[i].name && (ar[i].name.length >= name.length) && (ar[i].name.substr(0, name.length) == name)) { if (ar[i].type.substr(0, "select".length) == "select") { if (ar[i].multiple) { var newName = ar[i].name.replace(/\[\]/g, ""); for (var j = 0; j < ar[i].options.length; j++) { if (ar[i].options[j].selected) { if ((typeof(fieldValues[newName]) != 'object') || !(fieldValues[newName] instanceof Array)) { if (fieldValues[newName]) fieldValues[newName] = [fieldValues[newName]]; else fieldValues[newName] = []; } fieldValues[newName][fieldValues[newName].length] = ar[i].options[j].value; } } } else { if (ar[i].selectedIndex >= 0) fieldValues[ar[i].name] = ar[i].options[ar[i].selectedIndex].value; } } else { if (ar[i].name.indexOf("[]", 0) >= 0) { var newName = ar[i].name.replace(/\[\]/g, ""); if ((typeof(fieldValues[newName]) != 'object') || !(fieldValues[newName] instanceof Array)) { if (fieldValues[newName]) fieldValues[newName] = [fieldValues[newName]]; else fieldValues[newName] = []; } fieldValues[newName][fieldValues[newName].length] = ar[i].value; } else { fieldValues[ar[i].name] = ar[i].value; } } } } return fieldValues; } $objectName.GetFieldInputValue = function(type, name, func) { if (typeof name == "undefined" || name.length <= 0) name = "BPVDDefaultValue"; if (typeof type != "object") type = {'Type' : type, 'Multiple' : 0, 'Required' : 0, 'Options' : null}; if (typeof name != "object") name = {'Field' : name, 'Form' : null}; var s = { 'DocumentType' : $documentTypeString, 'Field' : name, 'Type' : type, 'rnd' : Math.random(), 'sessid' : '$bitrixSessId' }; if (type != null && type['Type'] != "F") { var ar = this.GetFieldValueByTagName('input', name['Field'], name['Form']); for (var v in ar) s[v] = ar[v]; ar = this.GetFieldValueByTagName('select', name['Field'], name['Form']); for (var v in ar) s[v] = ar[v]; ar = this.GetFieldValueByTagName('textarea', name['Field'], name['Form']); for (var v in ar) s[v] = ar[v]; ar = this.GetFieldValueByTagName('hidden', name['Field'], name['Form']); for (var v in ar) s[v] = ar[v]; } BX.ajax.post('/bitrix/tools/bizproc_set_field.php', s, function(v){v = $objectName._PrepareResponse(v); func(v);}); } $objectName.HtmlSpecialChars = function(string, quote) { string = string.toString(); string = string.replace(/&/g, '&'); string = string.replace(/</g, '<'); string = string.replace(/>/g, '>'); string = string.replace(/"/g, '"'); if (quote) string = string.replace(/'/g, '''); return string; } $objectName.GetGUITypeEdit = function(type) { return ""; } $objectName.SetGUITypeEdit = function(type) { return ""; } function __dump_bx(arr, limitLevel, txt) { if (limitLevel == undefined) limitLevel = 3; if (txt == undefined) txt = ""; else txt += ":\\n"; alert(txt+__dumpInternal_bx(arr, 0, limitLevel)); } function __dumpInternal_bx(arr, level, limitLevel) { var dumped_text = ""; if(!level) level = 0; if (level > limitLevel) return ""; var level_padding = ""; for(var j=0;j<level+1;j++) level_padding += " "; if(typeof(arr) == 'object') { for(var item in arr) { var value = arr[item]; if(typeof(value) == 'object') { dumped_text += level_padding + "'" + item + "' ...\\n"; dumped_text += __dumpInternal_bx(value, level+1, limitLevel); } else { dumped_text += level_padding + "'" + item + "' => '" + value + "'\\n"; } } } else { dumped_text = "===>"+arr+"<===("+typeof(arr)+")"; } return dumped_text; } </script> EOS; if (class_exists($entity) && method_exists($entity, "GetJSFunctionsForFields")) { $result .= call_user_func_array(array($entity, "GetJSFunctionsForFields"), array($documentType, $objectName, $arDocumentFields, $arDocumentFieldTypes)); } else { if (!is_array($arDocumentFields) || count($arDocumentFields) <= 0) $arDocumentFields = $this->GetDocumentFields($parameterDocumentType); if (!is_array($arDocumentFieldTypes) || count($arDocumentFieldTypes) <= 0) $arDocumentFieldTypes = $this->GetDocumentFieldTypes($parameterDocumentType); $result .= CBPHelper::GetJSFunctionsForFields($objectName, $arDocumentFields, $arDocumentFieldTypes); } return $result; } public function GetFieldInputControlOptions($parameterDocumentType, &$fieldType, $jsFunctionName, &$value) { list($moduleId, $entity, $documentType) = CBPHelper::ParseDocumentId($parameterDocumentType); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); $arFieldType = FieldType::normalizeProperty($fieldType); if ((string) $arFieldType["Type"] == "") return ""; $fieldTypeObject = $this->getFieldTypeObject($parameterDocumentType, $arFieldType); if ($fieldTypeObject) { return $fieldTypeObject->renderControlOptions($jsFunctionName, $value); } $fieldType = $arFieldType; if (class_exists($entity) && method_exists($entity, "GetFieldInputControlOptions")) return call_user_func_array(array($entity, "GetFieldInputControlOptions"), array($documentType, &$fieldType, $jsFunctionName, &$value)); return ""; } public function GetFieldInputControl($parameterDocumentType, $fieldType, $fieldName, $fieldValue, $bAllowSelection = false, $publicMode = false) { list($moduleId, $entity, $documentType) = CBPHelper::ParseDocumentId($parameterDocumentType); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); $arFieldType = FieldType::normalizeProperty($fieldType); if ((string) $arFieldType["Type"] == "") return ""; if (is_array($fieldName)) { $arFieldName = array( 'Form' => null, 'Field' => null, ); foreach ($fieldName as $key => $val) { switch (strtoupper($key)) { case "FORM": case "0": $arFieldName["Form"] = $val; break; case "FIELD": case "1": $arFieldName["Field"] = $val; break; } } } else { $arFieldName = array("Form" => null, "Field" => $fieldName); } if ((string) $arFieldName["Field"] == "" || preg_match("#[^a-z0-9_]#i", $arFieldName["Field"])) return ""; if ((string) $arFieldName["Form"] != "" && preg_match("#[^a-z0-9_]#i", $arFieldName["Form"])) return ""; if ($publicMode && !array_key_exists("BP_AddShowParameterInit_".$moduleId."_".$entity."_".$documentType, $GLOBALS)) { $GLOBALS["BP_AddShowParameterInit_".$moduleId."_".$entity."_".$documentType] = 1; CBPDocument::AddShowParameterInit($moduleId, "only_users", $documentType, $entity); } $fieldTypeObject = $this->getFieldTypeObject($parameterDocumentType, $arFieldType); if ($fieldTypeObject) { $renderMode = $publicMode ? FieldType::RENDER_MODE_PUBLIC : FieldType::RENDER_MODE_DESIGNER; if (defined('ADMIN_SECTION') && ADMIN_SECTION) { $renderMode |= FieldType::RENDER_MODE_ADMIN; } if (defined('BX_MOBILE') && BX_MOBILE) { $renderMode |= FieldType::RENDER_MODE_MOBILE; } if ($renderMode & FieldType::RENDER_MODE_PUBLIC) { CUtil::InitJSCore(['bp_field_type']); } return $fieldTypeObject->renderControl($arFieldName, $fieldValue, $bAllowSelection, $renderMode); } if (class_exists($entity)) { if (method_exists($entity, "GetFieldInputControl")) return call_user_func_array(array($entity, "GetFieldInputControl"), array($documentType, $arFieldType, $arFieldName, $fieldValue, $bAllowSelection, $publicMode)); if (method_exists($entity, "GetGUIFieldEdit")) return call_user_func_array(array($entity, "GetGUIFieldEdit"), array($documentType, $arFieldName["Form"], $arFieldName["Field"], $fieldValue, $arFieldType, $bAllowSelection)); } return CBPHelper::GetFieldInputControl($parameterDocumentType, $arFieldType, $arFieldName, $fieldValue, $bAllowSelection); } public function GetFieldInputValue($parameterDocumentType, $fieldType, $fieldName, $arRequest, &$arErrors) { list($moduleId, $entity, $documentType) = CBPHelper::ParseDocumentId($parameterDocumentType); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); $arFieldType = FieldType::normalizeProperty($fieldType); if ((string) $arFieldType["Type"] == "") return ""; if (is_array($fieldName)) { $arFieldName = array("Form" => null, "Field" => null); foreach ($fieldName as $key => $val) { switch (strtoupper($key)) { case "FORM": case "0": $arFieldName["Form"] = $val; break; case "FIELD": case "1": $arFieldName["Field"] = $val; break; } } } else { $arFieldName = array("Form" => null, "Field" => $fieldName); } if ((string) $arFieldName["Field"] == "" || preg_match("#[^a-z0-9_]#i", $arFieldName["Field"])) return ""; if ((string) $arFieldName["Form"] != "" && preg_match("#[^a-z0-9_]#i", $arFieldName["Form"])) return ""; $fieldTypeObject = $this->getFieldTypeObject($parameterDocumentType, $arFieldType); if ($fieldTypeObject) { return $fieldTypeObject->extractValue($arFieldName, $arRequest, $arErrors); } if (class_exists($entity)) { if (method_exists($entity, "GetFieldInputValue")) return call_user_func_array(array($entity, "GetFieldInputValue"), array($documentType, $arFieldType, $arFieldName, $arRequest, &$arErrors)); if (method_exists($entity, "SetGUIFieldEdit")) return call_user_func_array(array($entity, "SetGUIFieldEdit"), array($documentType, $arFieldName["Field"], $arRequest, &$arErrors, $arFieldType)); } return CBPHelper::GetFieldInputValue($parameterDocumentType, $arFieldType, $arFieldName, $arRequest, $arErrors); } public function GetFieldInputValuePrintable($parameterDocumentType, $fieldType, $fieldValue) { list($moduleId, $entity, $documentType) = CBPHelper::ParseDocumentId($parameterDocumentType); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); $arFieldType = FieldType::normalizeProperty($fieldType); if ((string) $arFieldType["Type"] == "") return ""; $fieldTypeObject = $this->getFieldTypeObject($parameterDocumentType, $arFieldType); if ($fieldTypeObject) { return $fieldTypeObject->formatValue($fieldValue, 'printable'); } if (class_exists($entity)) { if (method_exists($entity, "GetFieldInputValuePrintable")) return call_user_func_array(array($entity, "GetFieldInputValuePrintable"), array($documentType, $arFieldType, $fieldValue)); if (method_exists($entity, "GetFieldValuePrintable")) return call_user_func_array(array($entity, "GetFieldValuePrintable"), array(null, "", $arFieldType["Type"], $fieldValue, $arFieldType)); } return CBPHelper::GetFieldInputValuePrintable($parameterDocumentType, $arFieldType, $fieldValue); } public function GetFieldValuePrintable($parameterDocumentId, $fieldName, $fieldType, $fieldValue, $arFieldType = null) { list($moduleId, $entity, $documentId) = CBPHelper::ParseDocumentId($parameterDocumentId); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity) && method_exists($entity, "GetFieldValuePrintable")) return call_user_func_array(array($entity, "GetFieldValuePrintable"), array($documentId, $fieldName, $fieldType, $fieldValue, $arFieldType)); return CBPHelper::GetFieldValuePrintable($fieldName, $fieldType, $fieldValue, $arFieldType); } /** * @param array $parameterDocumentType * @return array */ public function getTypesMap(array $parameterDocumentType) { $k = implode('@', $parameterDocumentType); if (isset($this->typesMapCache[$k])) return $this->typesMapCache[$k]; $result = FieldType::getBaseTypesMap(); $documentFieldTypes = $this->GetDocumentFieldTypes($parameterDocumentType); foreach ($documentFieldTypes as $name => $field) { if (isset($field['typeClass'])) $result[strtolower($name)] = $field['typeClass']; } $this->typesMapCache[$k] = $result; return $result; } public function getTypesConversionMap(array $parameterDocumentType) { $typesMap = $this->getTypesMap($parameterDocumentType); $typesConversionMap = array(); /** @var \Bitrix\Bizproc\BaseType\Base $typeClass */ foreach ($typesMap as $documentTypeName => $typeClass) { if (!isset($typesConversionMap[$documentTypeName])) $typesConversionMap[$documentTypeName] = array(); $typeMap = $typeClass::getConversionMap(); if (!empty($typeMap[0])) { $typesConversionMap[$documentTypeName] = array_merge($typesConversionMap[$documentTypeName], $typeMap[0]); } if (!empty($typeMap[1])) { foreach ($typeMap[1] as $from) { if (!isset($typesConversionMap[$from])) $typesConversionMap[$from] = array(); $typesConversionMap[$from][] = $documentTypeName; } } } return $typesConversionMap; } /** * @param array $parameterDocumentType * @param string $type * @return null|string */ public function getTypeClass(array $parameterDocumentType, $type) { $typeClass = null; $map = $this->getTypesMap($parameterDocumentType); $type = strtolower($type); if (isset($map[$type])) $typeClass = $map[$type]; return $typeClass; } /** * @param array $parameterDocumentType * @param array $property * @return null|FieldType */ public function getFieldTypeObject(array $parameterDocumentType, array $property) { $typeClass = $this->getTypeClass($parameterDocumentType, $property['Type']); if ($typeClass && class_exists($typeClass)) { return new FieldType($property, $parameterDocumentType, $typeClass); } return null; } /** * @deprecated * @param $parameterDocumentType * @param $formName * @param $fieldName * @param $fieldValue * @param array $arDocumentField * @param bool $bAllowSelection * @return mixed|string * @throws CBPArgumentNullException */ public function GetGUIFieldEdit($parameterDocumentType, $formName, $fieldName, $fieldValue, $arDocumentField = array(), $bAllowSelection = false) { list($moduleId, $entity, $documentType) = CBPHelper::ParseDocumentId($parameterDocumentType); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (!is_array($arDocumentField) || count($arDocumentField) <= 0) { $arDocumentFields = $this->GetDocumentFields($parameterDocumentType); $arDocumentField = $arDocumentFields[$fieldName]; } if (!array_key_exists("BP_AddShowParameterInit_".$moduleId."_".$entity."_".$documentType, $GLOBALS)) { $GLOBALS["BP_AddShowParameterInit_".$moduleId."_".$entity."_".$documentType] = 1; CBPDocument::AddShowParameterInit($moduleId, "only_users", $documentType, $entity); } if (class_exists($entity) && method_exists($entity, "GetGUIFieldEdit")) return call_user_func_array(array($entity, "GetGUIFieldEdit"), array($documentType, $formName, $fieldName, $fieldValue, $arDocumentField, $bAllowSelection)); return CBPHelper::GetGUIFieldEdit($parameterDocumentType, $formName, $fieldName, $fieldValue, $arDocumentField, $bAllowSelection); } /** * @deprecated * @param $parameterDocumentType * @param $fieldName * @param $arRequest * @param $arErrors * @param array $arDocumentField * @return array|mixed|null * @throws CBPArgumentNullException */ public function SetGUIFieldEdit($parameterDocumentType, $fieldName, $arRequest, &$arErrors, $arDocumentField = array()) { list($moduleId, $entity, $documentType) = CBPHelper::ParseDocumentId($parameterDocumentType); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (!is_array($arDocumentField) || count($arDocumentField) <= 0) { $arDocumentFields = $this->GetDocumentFields($parameterDocumentType); $arDocumentField = $arDocumentFields[$fieldName]; } if (class_exists($entity) && method_exists($entity, "SetGUIFieldEdit")) return call_user_func_array(array($entity, "SetGUIFieldEdit"), array($documentType, $fieldName, $arRequest, &$arErrors, $arDocumentField)); return CBPHelper::SetGUIFieldEdit($parameterDocumentType, $fieldName, $arRequest, $arErrors, $arDocumentField); } public function GetDocumentAdminPage($parameterDocumentId) { list($moduleId, $entity, $documentId) = CBPHelper::ParseDocumentId($parameterDocumentId); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity)) return call_user_func_array(array($entity, "GetDocumentAdminPage"), array($documentId)); return ""; } public function getDocumentName($parameterDocumentId) { list($moduleId, $entity, $documentId) = CBPHelper::ParseDocumentId($parameterDocumentId); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity) && method_exists($entity, "getDocumentName")) return call_user_func_array(array($entity, "getDocumentName"), array($documentId)); return ""; } public function getDocumentTypeName($parameterDocumentType) { list($moduleId, $entity, $documentType) = CBPHelper::ParseDocumentId($parameterDocumentType); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity)) { if (method_exists($entity, "getDocumentTypeName")) return call_user_func_array(array($entity, "getDocumentTypeName"), array($documentType)); if (method_exists($entity, "getEntityName")) return call_user_func_array(array($entity, "getEntityName"), array($entity)); } return null; } public function getDocumentIcon($parameterDocumentId) { list($moduleId, $entity, $documentId) = CBPHelper::ParseDocumentId($parameterDocumentId); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity) && method_exists($entity, 'getDocumentIcon')) return call_user_func_array(array($entity, 'getDocumentIcon'), array($documentId)); return null; } public function GetDocumentForHistory($parameterDocumentId, $historyIndex) { list($moduleId, $entity, $documentId) = CBPHelper::ParseDocumentId($parameterDocumentId); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity)) return call_user_func_array(array($entity, "GetDocumentForHistory"), array($documentId, $historyIndex)); return null; } public function RecoverDocumentFromHistory($parameterDocumentId, $arDocument) { list($moduleId, $entity, $documentId) = CBPHelper::ParseDocumentId($parameterDocumentId); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity)) return call_user_func_array(array($entity, "RecoverDocumentFromHistory"), array($documentId, $arDocument)); return false; } public function GetUsersFromUserGroup($group, $parameterDocumentId) { list($moduleId, $entity, $documentId) = CBPHelper::ParseDocumentId($parameterDocumentId); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity)) return call_user_func_array(array($entity, "GetUsersFromUserGroup"), array($group, $documentId)); return array(); } public function GetAllowableUserGroups($parameterDocumentId, $withExtended = false) { list($moduleId, $entity, $documentId) = CBPHelper::ParseDocumentId($parameterDocumentId); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity)) { $result = call_user_func_array(array($entity, "GetAllowableUserGroups"), array($documentId, $withExtended)); $result1 = array(); foreach ($result as $key => $value) $result1[strtolower($key)] = $value; return $result1; } return array(); } public function GetAllowableOperations($parameterDocumentType) { list($moduleId, $entity, $documentType) = CBPHelper::ParseDocumentId($parameterDocumentType); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity)) return call_user_func_array(array($entity, "GetAllowableOperations"), array($documentType)); return array(); } public function SetPermissions($parameterDocumentId, $workflowId, $arPermissions, $bRewrite = true) { list($moduleId, $entity, $documentId) = CBPHelper::ParseDocumentId($parameterDocumentId); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity) && method_exists($entity, "SetPermissions")) return call_user_func_array(array($entity, "SetPermissions"), array($documentId, $workflowId, $arPermissions, $bRewrite)); return false; } public function isFeatureEnabled($parameterDocumentType, $feature) { list($moduleId, $entity, $documentType) = CBPHelper::ParseDocumentId($parameterDocumentType); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity) && method_exists($entity, 'isFeatureEnabled')) return call_user_func_array(array($entity, 'isFeatureEnabled'), array($documentType, $feature)); return false; } public function isExtendedPermsSupported($parameterDocumentType) { list($moduleId, $entity, $documentType) = CBPHelper::ParseDocumentId($parameterDocumentType); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity) && method_exists($entity, "isExtendedPermsSupported")) return call_user_func_array(array($entity, "isExtendedPermsSupported"), array($documentType)); return false; } public function toInternalOperations($parameterDocumentType, $permissions) { list($moduleId, $entity, $documentType) = CBPHelper::ParseDocumentId($parameterDocumentType); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity) && method_exists($entity, "toInternalOperations")) return call_user_func_array(array($entity, "toInternalOperations"), array($documentType, $permissions)); return $permissions; } public function toExternalOperations($parameterDocumentType, $permissions) { list($moduleId, $entity, $documentType) = CBPHelper::ParseDocumentId($parameterDocumentType); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity) && method_exists($entity, "toExternalOperations")) return call_user_func_array(array($entity, "toExternalOperations"), array($documentType, $permissions)); return $permissions; } public function onTaskChange($parameterDocumentId, $taskId, $taskData, $status) { list($moduleId, $entity, $documentId) = CBPHelper::ParseDocumentId($parameterDocumentId); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity) && method_exists($entity, "onTaskChange")) return call_user_func_array(array($entity, "onTaskChange"), array($documentId, $taskId, $taskData, $status)); return false; } public function onWorkflowStatusChange($parameterDocumentId, $workflowId, $status, $rootActivity = null) { list($moduleId, $entity, $documentId) = CBPHelper::ParseDocumentId($parameterDocumentId); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity) && method_exists($entity, "onWorkflowStatusChange")) return call_user_func_array(array($entity, "onWorkflowStatusChange"), array($documentId, $workflowId, $status, $rootActivity)); return false; } public function createAutomationTarget($parameterDocumentType) { list($moduleId, $entity, $documentType) = CBPHelper::ParseDocumentId($parameterDocumentType); if (strlen($moduleId) > 0) CModule::IncludeModule($moduleId); if (class_exists($entity) && method_exists($entity, "createAutomationTarget")) { /** @var \Bitrix\Bizproc\Automation\Target\BaseTarget $target */ $target = call_user_func_array(array($entity, "createAutomationTarget"), array($documentType)); return $target; } return null; } private function clearCache() { $this->arDocumentsCache = []; } }