private static function CheckFields($action, &$fields, $ID, $params = null) { global $DB; self::ClearErrors(); if (!(is_array($fields) && count($fields) > 0)) { self::RegisterError(array('text' => 'Fields is not specified.')); return false; } if ($action == 'ADD') { // Validation if (!isset($fields['OWNER_ID'])) { self::RegisterError(array('text' => 'OWNER_ID is not assigned.')); } if (!isset($fields['OWNER_TYPE_ID'])) { self::RegisterError(array('text' => 'OWNER_TYPE_ID is not assigned.')); } if (!isset($fields['TYPE_ID'])) { self::RegisterError(array('text' => 'TYPE_ID is not assigned.')); } elseif (!CCrmActivityType::IsDefined($fields['TYPE_ID'])) { self::RegisterError(array('text' => 'TYPE_ID is not supported.')); } if (!isset($fields['SUBJECT'])) { self::RegisterError(array('text' => 'SUBJECT is not assigned.')); } // if (!isset($fields['START_TIME'])) //is allowed for tasks // { // self::RegisterError(array('text' => 'START_TIME is not assigned.')); // } if (!isset($fields['RESPONSIBLE_ID'])) { self::RegisterError(array('text' => 'RESPONSIBLE_ID is not assigned.')); } if (!isset($fields['NOTIFY_TYPE'])) { $fields['NOTIFY_TYPE'] = CCrmActivityNotifyType::None; } if ($fields['NOTIFY_TYPE'] == CCrmActivityNotifyType::None) { $fields['NOTIFY_VALUE'] = 0; } elseif (!isset($fields['NOTIFY_VALUE'])) { self::RegisterError(array('text' => 'NOTIFY_VALUE is not assigned.')); } if (isset($fields['COMPLETED'])) { $completed = strtoupper(strval($fields['COMPLETED'])); if (!($completed == 'Y' || $completed == 'N')) { $completed = intval($fields['COMPLETED']) > 0 ? 'Y' : 'N'; } $fields['COMPLETED'] = $completed; } else { $fields['COMPLETED'] = 'N'; } if (isset($fields['CREATED'])) { unset($fields['CREATED']); } if (isset($fields['LAST_UPDATED'])) { unset($fields['LAST_UPDATED']); } $fields['~CREATED'] = $fields['~LAST_UPDATED'] = $DB->CurrentTimeFunction(); if (!isset($fields['AUTHOR_ID'])) { $currentUserId = CCrmPerms::GetCurrentUserID(); $fields['AUTHOR_ID'] = $currentUserId > 0 ? $currentUserId : $fields['RESPONSIBLE_ID']; } $fields['EDITOR_ID'] = $fields['AUTHOR_ID']; if (!isset($fields['END_TIME']) && isset($fields['START_TIME'])) { $fields['END_TIME'] = $fields['START_TIME']; } elseif (!isset($fields['START_TIME']) && isset($fields['END_TIME'])) { $fields['START_TIME'] = $fields['END_TIME']; } //DEADLINE --> if (isset($fields['DEADLINE'])) { unset($fields['DEADLINE']); } $typeID = intval($fields['TYPE_ID']); if ($typeID === CCrmActivityType::Task && isset($fields['END_TIME'])) { $fields['DEADLINE'] = $fields['END_TIME']; } elseif ($typeID !== CCrmActivityType::Task && isset($fields['START_TIME'])) { $fields['DEADLINE'] = $fields['START_TIME']; } if (!isset($fields['DEADLINE'])) { $fields['~DEADLINE'] = CCrmDateTimeHelper::GetMaxDatabaseDate(); } //<-- DEADLINE if (!isset($fields['ASSOCIATED_ENTITY_ID'])) { $fields['ASSOCIATED_ENTITY_ID'] = 0; } if (!isset($fields['PRIORITY'])) { $fields['PRIORITY'] = CCrmActivityPriority::Low; } if (!isset($fields['DIRECTION'])) { $fields['DIRECTION'] = CCrmActivityDirection::Undefined; } if (!isset($fields['DESCRIPTION_TYPE'])) { $fields['DESCRIPTION_TYPE'] = CCrmContentType::PlainText; } if (!isset($arFields['STORAGE_TYPE_ID'])) { $arFields['STORAGE_TYPE_ID'] = self::GetDefaultStorageTypeID(); } if (!isset($arFields['PARENT_ID'])) { $arFields['PARENT_ID'] = 0; } } else { $prevFields = is_array($params) && isset($params['PREVIOUS_FIELDS']) && is_array($params['PREVIOUS_FIELDS']) ? $params['PREVIOUS_FIELDS'] : null; if (!is_array($prevFields) && !self::Exists($ID, false)) { self::RegisterError(array('text' => "Could not find CrmActivity(ID = {$ID})")); } if (isset($fields['COMPLETED'])) { $completed = strtoupper(strval($fields['COMPLETED'])); if (!($completed == 'Y' || $completed == 'N')) { $completed = intval($fields['COMPLETED']) > 0 ? 'Y' : 'N'; } $fields['COMPLETED'] = $completed; } // Default settings if (isset($fields['CREATED'])) { unset($fields['CREATED']); } if (isset($fields['LAST_UPDATED'])) { unset($fields['LAST_UPDATED']); } $fields['~LAST_UPDATED'] = $DB->CurrentTimeFunction(); if (!isset($fields['EDITOR_ID'])) { $userID = isset($fields['AUTHOR_ID']) ? $fields['AUTHOR_ID'] : 0; if ($userID <= 0) { $userID = CCrmPerms::GetCurrentUserID(); } $fields['EDITOR_ID'] = $userID > 0 ? $userID : $fields['RESPONSIBLE_ID']; } unset($fields['AUTHOR_ID']); // TYPE_ID --> if (isset($fields['TYPE_ID'])) { unset($fields['TYPE_ID']); } // <-- TYPE_ID //DEADLINE --> if (isset($fields['DEADLINE'])) { unset($fields['DEADLINE']); } $typeID = isset($prevFields['TYPE_ID']) ? intval($prevFields['TYPE_ID']) : CCrmActivityType::Undefined; if ($typeID === CCrmActivityType::Task && isset($fields['END_TIME'])) { $fields['DEADLINE'] = $fields['END_TIME']; } elseif ($typeID !== CCrmActivityType::Task && isset($fields['START_TIME'])) { $fields['DEADLINE'] = $fields['START_TIME']; } //<-- DEADLINE } return self::GetErrorCount() == 0; }
public static function PrepareFilter(&$arFilter, $arFilter2Logic = null) { if (!is_array($arFilter2Logic)) { $arFilter2Logic = array('TITLE', 'NAME', 'LAST_NAME', 'SECOND_NAME', 'POST', 'ADDRESS', 'COMMENTS'); } // converts data from filter if (isset($arFilter['FIND_list']) && !empty($arFilter['FIND'])) { $arFilter[strtoupper($arFilter['FIND_list'])] = $arFilter['FIND']; unset($arFilter['FIND_list'], $arFilter['FIND']); } static $arImmutableFilters = array('FM', 'ID', 'COMPANY_ID', 'ASSIGNED_BY_ID', 'CREATED_BY_ID', 'MODIFY_BY_ID', 'TYPE_ID', 'SOURCE_ID', 'GRID_FILTER_APPLIED', 'GRID_FILTER_ID'); foreach ($arFilter as $k => $v) { if (in_array($k, $arImmutableFilters, true)) { continue; } $arMatch = array(); if ($k === 'ORIGINATOR_ID') { // HACK: build filter by internal entities $arFilter['=ORIGINATOR_ID'] = $v !== '__INTERNAL' ? $v : null; unset($arFilter[$k]); } elseif ($k === 'ADDRESS' || $k === 'ADDRESS_2' || $k === 'ADDRESS_CITY' || $k === 'ADDRESS_REGION' || $k === 'ADDRESS_PROVINCE' || $k === 'ADDRESS_POSTAL_CODE' || $k === 'ADDRESS_COUNTRY') { $arFilter["=%{$k}"] = "{$v}%"; unset($arFilter[$k]); } elseif (preg_match('/(.*)_from$/i' . BX_UTF_PCRE_MODIFIER, $k, $arMatch)) { if (strlen($v) > 0) { $arFilter['>=' . $arMatch[1]] = $v; } unset($arFilter[$k]); } elseif (preg_match('/(.*)_to$/i' . BX_UTF_PCRE_MODIFIER, $k, $arMatch)) { if (strlen($v) > 0) { if (($arMatch[1] == 'DATE_CREATE' || $arMatch[1] == 'DATE_MODIFY') && !preg_match('/\\d{1,2}:\\d{1,2}(:\\d{1,2})?$/' . BX_UTF_PCRE_MODIFIER, $v)) { $v = CCrmDateTimeHelper::SetMaxDayTime($v); } $arFilter['<=' . $arMatch[1]] = $v; } unset($arFilter[$k]); } elseif (in_array($k, $arFilter2Logic)) { // Bugfix #26956 - skip empty values in logical filter $v = trim($v); if ($v !== '') { $arFilter['?' . $k] = $v; } unset($arFilter[$k]); } elseif ($k != 'ID' && $k != 'LOGIC' && $k != '__INNER_FILTER' && strpos($k, 'UF_') !== 0 && preg_match('/^[^\\=\\%\\?\\>\\<]{1}/', $k) === 1) { $arFilter['%' . $k] = $v; unset($arFilter[$k]); } } }
public static function RenderNearestActivity($arParams) { $gridManagerID = isset($arParams['GRID_MANAGER_ID']) ? $arParams['GRID_MANAGER_ID'] : ''; $mgrID = strtolower($gridManagerID); $entityTypeName = isset($arParams['ENTITY_TYPE_NAME']) ? strtolower($arParams['ENTITY_TYPE_NAME']) : ''; $entityID = isset($arParams['ENTITY_ID']) ? $arParams['ENTITY_ID'] : ''; $allowEdit = isset($arParams['ALLOW_EDIT']) ? $arParams['ALLOW_EDIT'] : false; $menuItems = isset($arParams['MENU_ITEMS']) ? $arParams['MENU_ITEMS'] : array(); $menuID = CUtil::JSEscape("bx_{$mgrID}_{$entityTypeName}_{$entityID}_activity_add"); $ID = isset($arParams['ACTIVITY_ID']) ? intval($arParams['ACTIVITY_ID']) : 0; if ($ID > 0) { $subject = isset($arParams['ACTIVITY_SUBJECT']) ? $arParams['ACTIVITY_SUBJECT'] : ''; $time = isset($arParams['ACTIVITY_TIME']) ? $arParams['ACTIVITY_TIME'] : ''; if ($time !== '' && CCrmDateTimeHelper::IsMaxDatabaseDate($time)) { $time = ''; } $timestamp = $time !== '' ? MakeTimeStamp($time) : 0; $timeFormatted = $timestamp > 0 ? CCrmComponentHelper::TrimDateTimeString(FormatDate('FULL', $timestamp)) : GetMessage('CRM_ACTIVITY_TIME_NOT_SPECIFIED'); $isExpired = isset($arParams['ACTIVITY_EXPIRED']) ? $arParams['ACTIVITY_EXPIRED'] : $timestamp <= time() + CTimeZone::GetOffset(); $result = '<div class="crm-nearest-activity-wrapper"><div class="crm-list-deal-date crm-nearest-activity-time' . ($isExpired ? '-expiried' : '') . '"><a class="crm-link" target = "_self" href = "#" onclick="BX.CrmInterfaceGridManager.viewActivity(\'' . CUtil::JSEscape($gridManagerID) . '\', ' . $ID . ', { enableEditButton:' . ($allowEdit ? 'true' : 'false') . ' }); return false;">' . htmlspecialcharsbx($timeFormatted) . '</a></div><div class="crm-nearest-activity-subject">' . htmlspecialcharsbx($subject) . '</div>'; if ($allowEdit && !empty($menuItems)) { $result .= '<div class="crm-nearest-activity-plus" onclick="BX.CrmInterfaceGridManager.showMenu(\'' . $menuID . '\', this);"></div> <script type="text/javascript">BX.CrmInterfaceGridManager.createMenu("' . $menuID . '", ' . CUtil::PhpToJSObject($menuItems) . ');</script>'; } $result .= '</div>'; $responsibleID = isset($arParams['ACTIVITY_RESPONSIBLE_ID']) ? intval($arParams['ACTIVITY_RESPONSIBLE_ID']) : 0; if ($responsibleID > 0) { $nameTemplate = isset($arParams['NAME_TEMPLATE']) ? $arParams['NAME_TEMPLATE'] : ''; if ($nameTemplate === '') { $nameTemplate = CSite::GetNameFormat(false); } $responsibleFullName = CUser::FormatName($nameTemplate, array('LOGIN' => isset($arParams['ACTIVITY_RESPONSIBLE_LOGIN']) ? $arParams['ACTIVITY_RESPONSIBLE_LOGIN'] : '', 'NAME' => isset($arParams['ACTIVITY_RESPONSIBLE_NAME']) ? $arParams['ACTIVITY_RESPONSIBLE_NAME'] : '', 'LAST_NAME' => isset($arParams['ACTIVITY_RESPONSIBLE_LAST_NAME']) ? $arParams['ACTIVITY_RESPONSIBLE_LAST_NAME'] : '', 'SECOND_NAME' => isset($arParams['ACTIVITY_RESPONSIBLE_SECOND_NAME']) ? $arParams['ACTIVITY_RESPONSIBLE_SECOND_NAME'] : ''), true, false); $responsibleShowUrl = ''; $pathToUserProfile = isset($arParams['PATH_TO_USER_PROFILE']) ? $arParams['PATH_TO_USER_PROFILE'] : ''; if ($pathToUserProfile !== '') { $responsibleShowUrl = CComponentEngine::MakePathFromTemplate($pathToUserProfile, array('user_id' => $responsibleID)); } $result .= '<div class="crm-list-deal-responsible"><span class="crm-list-deal-responsible-grey">' . htmlspecialcharsbx(GetMessage('CRM_ENTITY_ACTIVITY_FOR_RESPONSIBLE')) . '</span><a class="crm-list-deal-responsible-name" target="_blank" href="' . htmlspecialcharsbx($responsibleShowUrl) . '">' . htmlspecialcharsbx($responsibleFullName) . '</a></div>'; } return $result; } elseif ($allowEdit && !empty($menuItems)) { return '<span class="crm-activity-add-hint">' . htmlspecialcharsbx(GetMessage('CRM_ENTITY_ADD_ACTIVITY_HINT')) . '</span> <a class="crm-activity-add" onclick="BX.CrmInterfaceGridManager.showMenu(\'' . $menuID . '\', this); return false;">' . htmlspecialcharsbx(GetMessage('CRM_ENTITY_ADD_ACTIVITY')) . '</a> <script type="text/javascript">BX.CrmInterfaceGridManager.createMenu("' . $menuID . '", ' . CUtil::PhpToJSObject($menuItems) . ');</script>'; } return ''; }
$activityFields['CAN_DELETE'] = CCrmActivity::CheckDeletePermission($ownerTypeID, $ownerID, $userPermissions); } else { $activityFields['CAN_EDIT'] = $activityFields['CAN_DELETE'] = true; } } $responsibleID = isset($activityFields['~RESPONSIBLE_ID']) ? intval($activityFields['~RESPONSIBLE_ID']) : 0; $activityFields['~RESPONSIBLE_ID'] = $responsibleID; if ($responsibleID <= 0) { $activityFields['RESPONSIBLE_FULL_NAME'] = ''; $activityFields['PATH_TO_RESPONSIBLE'] = ''; } elseif (!in_array($responsibleID, $responsibleIDs, true)) { $responsibleIDs[] = $responsibleID; } $activityFields['REFERENCE_TITLE'] = $ownerTypeID > 0 && $ownerID > 0 && ($ownerTypeID === CCrmOwnerType::Lead || $ownerTypeID === CCrmOwnerType::Deal) ? CCrmOwnerType::GetCaption($ownerTypeID, $ownerID, false) : ''; $activityFields['CLIENT_TITLE'] = ''; if (isset($activityFields['~DEADLINE']) && CCrmDateTimeHelper::IsMaxDatabaseDate($activityFields['~DEADLINE'])) { $activityFields['~DEADLINE'] = $activityFields['DEADLINE'] = ''; } $activities[$itemID] =& $activityFields; unset($activityFields); } if (!empty($activities)) { $clientInfos = CCrmActivity::PrepareClientInfos(array_keys($activities)); foreach ($clientInfos as $itemID => &$clientInfo) { $ttl = isset($clientInfo['TITLE']) ? $clientInfo['TITLE'] : ''; if ($ttl === '') { $ttl = CCrmOwnerType::GetCaption($clientInfo['ENTITY_TYPE_ID'], $clientInfo['ENTITY_ID']); } $activities[$itemID]['CLIENT_TITLE'] = $ttl; } unset($clientInfo);
$descriptionType = isset($arRes['DESCRIPTION_TYPE']) ? intval($arRes['DESCRIPTION_TYPE']) : CCrmContentType::PlainText; if ($descriptionType === CCrmContentType::BBCode) { $arRes['DESCRIPTION_HTML'] = $bbCodeParser->convertText($description); $arRes['DESCRIPTION_RAW'] = strip_tags(preg_replace('/(<br[^>]*>)+/is' . BX_UTF_PCRE_MODIFIER, "\n", $arRes['DESCRIPTION_HTML'])); $arRes['ENABLE_DESCRIPTION_CUT'] = false; } elseif ($descriptionType === CCrmContentType::Html) { //Already sanitaized $arRes['DESCRIPTION_HTML'] = $description; $arRes['DESCRIPTION_RAW'] = html_entity_decode(strip_tags(preg_replace('/(<br[^>]*>)+/is' . BX_UTF_PCRE_MODIFIER, "\n", $description))); $arRes['ENABLE_DESCRIPTION_CUT'] = false; } else { $arRes['DESCRIPTION_HTML'] = preg_replace("/[\r\n]+/" . BX_UTF_PCRE_MODIFIER, "<br/>", htmlspecialcharsbx($description)); $arRes['DESCRIPTION_RAW'] = $description; $arRes['ENABLE_DESCRIPTION_CUT'] = true; } if (isset($arRes['~DEADLINE']) && CCrmDateTimeHelper::IsMaxDatabaseDate($arRes['~DEADLINE'])) { $arRes['~DEADLINE'] = $arRes['DEADLINE'] = ''; } $items[$itemID] = $arRes; } if ($displayClient && !empty($items)) { $clientInfos = CCrmActivity::PrepareClientInfos(array_keys($items)); foreach ($clientInfos as $itemID => &$clientInfo) { $items[$itemID]['CLIENT_INFO'] = $clientInfo; } unset($clientInfo); } $arResult['ITEMS'] = array_values($items); $responsibleInfos = array(); if (!empty($responsibleIDs)) { $dbUsers = CUser::GetList($by = 'ID', $order = 'ASC', array('ID' => implode('||', $responsibleIDs)), array('FIELDS' => array('ID', 'NAME', 'LAST_NAME', 'SECOND_NAME', 'LOGIN')));
public static function PrepareFilter(&$arFilter, $arFilter2Logic = null) { if (!is_array($arFilter2Logic)) { $arFilter2Logic = array('TITLE', 'COMMENTS'); } static $arImmutableFilters = array('FM', 'ID', 'ASSIGNED_BY_ID', 'CURRENCY_ID', 'CONTACT_ID', 'COMPANY_ID', 'CREATED_BY_ID', 'MODIFY_BY_ID', 'PRODUCT_ROW_PRODUCT_ID', 'GRID_FILTER_APPLIED', 'GRID_FILTER_ID'); foreach ($arFilter as $k => $v) { if (in_array($k, $arImmutableFilters, true)) { continue; } $arMatch = array(); if (in_array($k, array('PRODUCT_ID', 'TYPE_ID', 'STAGE_ID', 'COMPANY_ID', 'CONTACT_ID'))) { // Bugfix #23121 - to suppress comparison by LIKE $arFilter['=' . $k] = $v; unset($arFilter[$k]); } elseif ($k === 'ORIGINATOR_ID') { // HACK: build filter by internal entities $arFilter['=ORIGINATOR_ID'] = $v !== '__INTERNAL' ? $v : null; unset($arFilter[$k]); } elseif (preg_match('/(.*)_from$/i' . BX_UTF_PCRE_MODIFIER, $k, $arMatch)) { if (strlen($v) > 0) { $arFilter['>=' . $arMatch[1]] = $v; } unset($arFilter[$k]); } elseif (preg_match('/(.*)_to$/i' . BX_UTF_PCRE_MODIFIER, $k, $arMatch)) { if (strlen($v) > 0) { if (($arMatch[1] == 'DATE_CREATE' || $arMatch[1] == 'DATE_MODIFY') && !preg_match('/\\d{1,2}:\\d{1,2}(:\\d{1,2})?$/' . BX_UTF_PCRE_MODIFIER, $v)) { $v = CCrmDateTimeHelper::SetMaxDayTime($v); } $arFilter['<=' . $arMatch[1]] = $v; } unset($arFilter[$k]); } elseif (in_array($k, $arFilter2Logic)) { // Bugfix #26956 - skip empty values in logical filter $v = trim($v); if ($v !== '') { $arFilter['?' . $k] = $v; } unset($arFilter[$k]); } elseif ($k != 'ID' && $k != 'LOGIC' && $k != '__INNER_FILTER' && strpos($k, 'UF_') !== 0 && preg_match('/^[^\\=\\%\\?\\>\\<]{1}/', $k) === 1) { $arFilter['%' . $k] = $v; unset($arFilter[$k]); } } }