Ejemplo n.º 1
0
 public function AddFields(&$arFilterFields, $ID, $sFormName = 'form1', $bVarsFromForm = false, $bShow = false, $bParentComponent = false, $arOptions = array())
 {
     global $APPLICATION;
     $arOptions = is_array($arOptions) ? $arOptions : array();
     $fileUrlTemplate = isset($arOptions['FILE_URL_TEMPLATE']) ? $arOptions['FILE_URL_TEMPLATE'] : '';
     $skipRendering = isset($arOptions['SKIP_RENDERING']) ? $arOptions['SKIP_RENDERING'] : array();
     $isTactile = isset($arOptions['IS_TACTILE']) ? $arOptions['IS_TACTILE'] : false;
     try {
         $arUserFields = $this->GetUserFields($this->sEntityID, $ID, LANGUAGE_ID);
     } catch (\Bitrix\Main\ObjectException $e) {
         $arUserFields = array();
     }
     $count = 0;
     foreach ($arUserFields as $FIELD_NAME => &$arUserField) {
         if (!isset($arUserField['ENTITY_VALUE_ID'])) {
             $arUserField['ENTITY_VALUE_ID'] = intval($ID);
         }
         $viewMode = $bShow;
         if (!$viewMode && $arUserField['EDIT_IN_LIST'] === 'N') {
             //Editing is not allowed for this field
             $viewMode = true;
         }
         $userTypeID = $arUserField['USER_TYPE']['USER_TYPE_ID'];
         if (in_array($userTypeID, $skipRendering, true)) {
             $value = isset($arUserField['VALUE']) ? $arUserField['VALUE'] : '';
             if ($userTypeID === 'string' || $userTypeID === 'double') {
                 $fieldType = 'text';
             } elseif ($userTypeID === 'boolean') {
                 $fieldType = 'checkbox';
                 $value = intval($value) > 0 ? 'Y' : 'N';
             } elseif ($userTypeID === 'datetime') {
                 $fieldType = 'date';
             } else {
                 $fieldType = $userTypeID;
             }
             $arFilterFields[] = array('id' => $FIELD_NAME, 'name' => '' != $arUserField['EDIT_FORM_LABEL'] ? $arUserField['EDIT_FORM_LABEL'] : $arUserField['FIELD_NAME'], 'type' => $fieldType, 'value' => $value, 'required' => !$viewMode && $arUserField['MANDATORY'] == 'Y' ? true : false, 'isTactile' => $isTactile);
         } else {
             if ($userTypeID === 'employee') {
                 if ($viewMode) {
                     if (!is_array($arUserField['VALUE'])) {
                         $arUserField['VALUE'] = array($arUserField['VALUE']);
                     }
                     ob_start();
                     foreach ($arUserField['VALUE'] as $k) {
                         $APPLICATION->IncludeComponent('bitrix:main.user.link', '', array('ID' => $k, 'HTML_ID' => 'crm_' . $FIELD_NAME, 'USE_THUMBNAIL_LIST' => 'Y', 'SHOW_YEAR' => 'M', 'CACHE_TYPE' => 'A', 'CACHE_TIME' => '3600', 'NAME_TEMPLATE' => '', 'SHOW_LOGIN' => 'Y'), false, array('HIDE_ICONS' => 'Y', 'ACTIVE_COMPONENT' => 'Y'));
                     }
                     $sVal = ob_get_contents();
                     ob_end_clean();
                 } else {
                     $val = !$bVarsFromForm ? $arUserField['VALUE'] : (isset($_REQUEST[$FIELD_NAME]) ? $_REQUEST[$FIELD_NAME] : '');
                     $val_string = '';
                     if (is_array($val)) {
                         foreach ($val as $_val) {
                             if (empty($_val)) {
                                 continue;
                             }
                             $rsUser = CUser::GetByID($_val);
                             $val_string .= CUser::FormatName(CSite::GetNameFormat(false) . ' [#ID#], ', $rsUser->Fetch(), true, false);
                         }
                     } else {
                         if (!empty($val)) {
                             $rsUser = CUser::GetByID($val);
                             $val_string .= CUser::FormatName(CSite::GetNameFormat(false) . ' [#ID#], ', $rsUser->Fetch(), true, false);
                         }
                     }
                     ob_start();
                     $GLOBALS['APPLICATION']->IncludeComponent('bitrix:intranet.user.selector', '', array('INPUT_NAME' => $FIELD_NAME, 'INPUT_VALUE' => $val, 'INPUT_VALUE_STRING' => $val_string, 'MULTIPLE' => $arUserField['MULTIPLE']), false, array('HIDE_ICONS' => 'Y'));
                     $sVal = ob_get_contents();
                     ob_end_clean();
                 }
             } else {
                 if ($viewMode && $userTypeID === 'file' && $fileUrlTemplate !== '') {
                     // In view mode we have to use custom rendering for hide real file URL's ('bitrix:system.field.view' can't do it)
                     $fileIDs = isset($arUserField['VALUE']) ? is_array($arUserField['VALUE']) ? $arUserField['VALUE'] : array($arUserField['VALUE']) : array();
                     ob_start();
                     CCrmViewHelper::RenderFiles($fileIDs, CComponentEngine::MakePathFromTemplate($fileUrlTemplate, array('owner_id' => $ID, 'field_name' => $FIELD_NAME)), 480, 480);
                     $sVal = ob_get_contents();
                     ob_end_clean();
                 } else {
                     ob_start();
                     $APPLICATION->IncludeComponent('bitrix:system.field.' . ($viewMode ? 'view' : 'edit'), $userTypeID, array('arUserField' => $arUserField, 'bVarsFromForm' => $bVarsFromForm, 'form_name' => 'form_' . $sFormName, 'FILE_MAX_HEIGHT' => 480, 'FILE_MAX_WIDTH' => 480, 'FILE_SHOW_POPUP' => true, 'SHOW_FILE_PATH' => false, 'SHOW_NO_VALUE' => true, 'FILE_URL_TEMPLATE' => CComponentEngine::MakePathFromTemplate($fileUrlTemplate, array('owner_id' => $ID, 'field_name' => $FIELD_NAME))), false, array('HIDE_ICONS' => 'Y'));
                     $sVal = ob_get_contents();
                     ob_end_clean();
                 }
             }
             $arFilterFields[] = array('id' => $FIELD_NAME, 'name' => '' != $arUserField['EDIT_FORM_LABEL'] ? $arUserField['EDIT_FORM_LABEL'] : $arUserField['FIELD_NAME'], 'type' => 'custom', 'value' => $sVal, 'required' => !$viewMode && $arUserField['MANDATORY'] == 'Y' ? true : false, 'isTactile' => $isTactile);
         }
         $count++;
     }
     unset($arUserField);
     return $count;
 }