Esempio n. 1
0
 protected static function InternalizeEnumerationField($entityTypeID, array &$fields, $name)
 {
     if (!isset($fields[$name])) {
         return;
     }
     $entityResult = CUserTypeEntity::GetList(array(), array("ENTITY_ID" => $entityTypeID, "FIELD_NAME" => $name));
     $entity = $entityResult->Fetch();
     if (!is_array($entity)) {
         return;
     }
     $isMultiple = isset($entity['MULTIPLE']) && $entity['MULTIPLE'] === 'Y';
     $enumXMap = array();
     $enumVMap = array();
     $enumResult = CUserTypeEnum::GetList($entity);
     while ($enum = $enumResult->GetNext()) {
         $enumXMap[$enum["XML_ID"]] = $enum["ID"];
         $enumVMap[$enum["VALUE"]] = $enum["ID"];
     }
     $results = array();
     if (is_array($fields[$name])) {
         foreach ($fields[$name] as $value) {
             if (CBPHelper::IsAssociativeArray($value)) {
                 //HACK: For IBlockDocument
                 $value = array_keys($value);
                 if (!$isMultiple) {
                     $value = array_shift($value);
                 }
             }
             if (is_array($value)) {
                 foreach ($value as $v) {
                     if (isset($enumXMap[$v])) {
                         $results[] = $enumXMap[$v];
                     } elseif (isset($enumVMap[$v])) {
                         $results[] = $enumVMap[$v];
                     }
                 }
             } elseif (isset($enumXMap[$value])) {
                 $results[] = $enumXMap[$value];
             } elseif (isset($enumVMap[$value])) {
                 $results[] = $enumVMap[$value];
             }
         }
     } elseif (isset($enumXMap[$fields[$name]])) {
         $results[] = $enumXMap[$fields[$name]];
     } elseif (isset($enumVMap[$fields[$name]])) {
         $results[] = $enumVMap[$fields[$name]];
     }
     if (!empty($results)) {
         $fields[$name] = $isMultiple ? $results : $results[0];
     } else {
         unset($fields[$name]);
     }
 }
Esempio n. 2
0
 public static function UpdateDocument($documentId, $arFields)
 {
     global $DB;
     $arDocumentID = self::GetDocumentInfo($documentId);
     if (empty($arDocumentID)) {
         throw new CBPArgumentNullException('documentId');
     }
     $dbDocumentList = CCrmLead::GetList(array(), array('ID' => $arDocumentID['ID'], "CHECK_PERMISSIONS" => "N"), array('ID'));
     $arResult = $dbDocumentList->Fetch();
     if (!$arResult) {
         throw new Exception(GetMessage('CRM_DOCUMENT_ELEMENT_IS_NOT_FOUND'));
     }
     $arDocumentFields = self::GetDocumentFields($arDocumentID['TYPE']);
     $arKeys = array_keys($arFields);
     foreach ($arKeys as $key) {
         if (!array_key_exists($key, $arDocumentFields)) {
             //Fix for issue #40374
             unset($arFields[$key]);
             continue;
         }
         $fieldType = $arDocumentFields[$key]["Type"];
         if (in_array($fieldType, array("phone", "email", "im", "web"), true)) {
             CCrmDocument::PrepareEntityMultiFields($arFields, strtoupper($fieldType));
             continue;
         }
         $arFields[$key] = is_array($arFields[$key]) && !CBPHelper::IsAssociativeArray($arFields[$key]) ? $arFields[$key] : array($arFields[$key]);
         if ($fieldType == "user") {
             $ar = array();
             foreach ($arFields[$key] as $v1) {
                 if (substr($v1, 0, strlen("user_")) == "user_") {
                     $ar[] = substr($v1, strlen("user_"));
                 } else {
                     $a1 = self::GetUsersFromUserGroup($v1, $documentId);
                     foreach ($a1 as $a11) {
                         $ar[] = $a11;
                     }
                 }
             }
             $arFields[$key] = $ar;
         } elseif ($fieldType == "select" && substr($key, 0, 3) == "UF_") {
             $db = CUserTypeEntity::GetList(array(), array("ENTITY_ID" => "CRM_LEAD", "FIELD_NAME" => $key));
             if ($ar = $db->Fetch()) {
                 $arV = array();
                 $db = CUserTypeEnum::GetList($ar);
                 while ($ar = $db->GetNext()) {
                     $arV[$ar["XML_ID"]] = $ar["ID"];
                 }
                 foreach ($arFields[$key] as &$value) {
                     if (array_key_exists($value, $arV)) {
                         $value = $arV[$value];
                     }
                 }
                 unset($value);
             }
         } elseif ($fieldType == "file") {
             $arFileOptions = array('ENABLE_ID' => true);
             foreach ($arFields[$key] as &$value) {
                 //Issue #40380. Secure URLs and file IDs are allowed.
                 $file = false;
                 CCrmFileProxy::TryResolveFile($value, $file, $arFileOptions);
                 $value = $file;
             }
             unset($value);
         } elseif ($fieldType == "S:HTML") {
             foreach ($arFields[$key] as &$value) {
                 $value = array("VALUE" => $value);
             }
             unset($value);
         }
         if (!$arDocumentFields[$key]["Multiple"] && is_array($arFields[$key])) {
             if (count($arFields[$key]) > 0) {
                 $a = array_values($arFields[$key]);
                 $arFields[$key] = $a[0];
             } else {
                 $arFields[$key] = null;
             }
         }
     }
     if (isset($arFields['COMMENTS']) && $arFields['COMMENTS'] !== '') {
         $arFields['COMMENTS'] = preg_replace("/[\r\n]+/" . BX_UTF_PCRE_MODIFIER, "<br/>", $arFields['COMMENTS']);
     }
     $DB->StartTransaction();
     $CCrmEntity = new CCrmLead(false);
     $res = $CCrmEntity->Update($arDocumentID['ID'], $arFields);
     if (!$res) {
         $DB->Rollback();
         throw new Exception($CCrmEntity->LAST_ERROR);
     }
     if (COption::GetOptionString("crm", "start_bp_within_bp", "N") == "Y") {
         $CCrmBizProc = new CCrmBizProc('LEAD');
         if (false === $CCrmBizProc->CheckFields($arDocumentID['ID'], true)) {
             throw new Exception($CCrmBizProc->LAST_ERROR);
         }
         if ($res && !$CCrmBizProc->StartWorkflow($arDocumentID['ID'])) {
             $DB->Rollback();
             throw new Exception($CCrmBizProc->LAST_ERROR);
         }
     }
     if ($res) {
         $DB->Commit();
     }
 }