protected static function save() { $ary = array(); foreach (self::$items as $entityTypeID => $time) { $ary[\CCrmOwnerType::ResolveName($entityTypeID)] = $time->format(\DateTime::ISO8601); } Main\Config\Option::set('crm', 'crm_uf_history', serialize($ary), ''); }
public static function GetDocumentNames($ownerTypeID, $ownerID) { if (!(IsModuleInstalled('bizproc') && CModule::IncludeModule('bizproc'))) { return false; } $ownerTypeID = intval($ownerTypeID); $ownerID = intval($ownerID); $docName = self::ResolveDocumentName($ownerTypeID); if ($docName === '') { return array(); } $ownerTypeName = CCrmOwnerType::ResolveName($ownerTypeID); if ($ownerTypeName === '') { return array(); } /*$arDocumentStates = CBPDocument::GetDocumentStates( array('crm', $docName, $ownerTypeName), array('crm', $docName, $ownerTypeName.'_'.$ownerID) );*/ $arDocumentStates = CBPStateService::GetDocumentStates(array('crm', $docName, $ownerTypeName . '_' . $ownerID)); $result = array(); foreach ($arDocumentStates as $arDocumentState) { if ($arDocumentState['ID'] !== '' && $arDocumentState['TEMPLATE_NAME'] !== '') { $result[] = $arDocumentState['TEMPLATE_NAME']; } } return $result; }
public function __construct($dstEntityTypeID, $srcEntityTypeID, $srcEntityID) { parent::__construct($dstEntityTypeID); $this->srcEntityTypeID = $srcEntityTypeID; $this->srcEntityTypeName = \CCrmOwnerType::ResolveName($srcEntityTypeID); $this->srcEntityID = $srcEntityID; }
public static function CheckImportPermission($enitityType, $userPermissions = null) { $enitityTypeName = is_numeric($enitityType) ? CCrmOwnerType::ResolveName($enitityType) : strtoupper(strval($enitityType)); if (!$userPermissions) { $userPermissions = self::GetUserPermissions(); } return !$userPermissions->HavePerm($enitityTypeName, BX_CRM_PERM_NONE, 'IMPORT'); }
public function externalize() { $results = array(); foreach ($this->items as $k => $v) { $results[\CCrmOwnerType::ResolveName($k)] = $v->externalize(); } return $results; }
/** * Create conversion map for destination entity type * @static * @param int $entityTypeID Destination Entity Type ID * @return EntityConversionMap */ public static function createMap($entityTypeID) { if (!is_int($entityTypeID)) { $entityTypeID = (int) $entityTypeID; } if (!\CCrmOwnerType::IsDefined($entityTypeID)) { throw new Main\ArgumentOutOfRangeException('dstEntityTypeID', \CCrmOwnerType::FirstOwnerType, \CCrmOwnerType::LastOwnerType); } if ($entityTypeID !== \CCrmOwnerType::Deal && $entityTypeID !== \CCrmOwnerType::Invoice) { $dstEntityTypeName = \CCrmOwnerType::ResolveName($entityTypeID); throw new Main\NotSupportedException("Entity type: '{$dstEntityTypeName}' is not supported in current context"); } $map = new EntityConversionMap(\CCrmOwnerType::Quote, $entityTypeID); if ($entityTypeID === \CCrmOwnerType::Deal) { //region Deal Map Static Field Bindings $map->createItem('TITLE'); $map->createItem('COMMENTS'); $map->createItem('ASSIGNED_BY_ID'); $map->createItem('OPENED'); $map->createItem('OPPORTUNITY'); $map->createItem('CURRENCY_ID'); $map->createItem('TAX_VALUE'); $map->createItem('EXCH_RATE'); $map->createItem('LOCATION_ID'); $map->createItem('LEAD_ID'); $map->createItem('COMPANY_ID'); $map->createItem('CONTACT_ID'); $map->createItem('PRODUCT_ROWS'); //endregion //region Invoice Map User Field Bindings $intersections = UserFieldSynchronizer::getIntersection(\CCrmOwnerType::Quote, \CCrmOwnerType::Deal); foreach ($intersections as $intersection) { $map->createItem($intersection['SRC_FIELD_NAME'], $intersection['DST_FIELD_NAME']); } //endregion } if ($entityTypeID === \CCrmOwnerType::Invoice) { //region Invoice Map Static Field Bindings $map->createItem('TITLE', 'ORDER_TOPIC'); $map->createItem('COMPANY_ID', 'UF_COMPANY_ID'); $map->createItem('CONTACT_ID', 'UF_CONTACT_ID'); $map->createItem('DEAL_ID', 'UF_DEAL_ID'); $map->createItem('ASSIGNED_BY_ID', 'RESPONSIBLE_ID'); $map->createItem('COMMENTS'); $map->createItem('PRODUCT_ROWS'); //endregion //region Invoice Map User Field Bindings $intersections = UserFieldSynchronizer::getIntersection(\CCrmOwnerType::Quote, \CCrmOwnerType::Invoice); foreach ($intersections as $intersection) { $map->createItem($intersection['SRC_FIELD_NAME'], $intersection['DST_FIELD_NAME']); } //endregion } return $map; }
protected static function getEntityMultifieldValues($entityTypeID, $entityID, $typeID) { $results = array(); $dbResult = \CCrmFieldMulti::GetList(array('ID' => 'asc'), array('TYPE_ID' => $typeID, 'ENTITY_ID' => \CCrmOwnerType::ResolveName($entityTypeID), 'ELEMENT_ID' => $entityID)); if (is_object($dbResult)) { while ($fields = $dbResult->Fetch()) { $results[] = $fields['VALUE']; } } return $results; }
/** * @return Duplicate */ public function createDuplicate($entityTypeID, $rootEntityID, $userID, $enablePermissionCheck, $enableRanking, $limit = 0) { if ($entityTypeID !== \CCrmOwnerType::Lead && $entityTypeID !== \CCrmOwnerType::Contact && $entityTypeID !== \CCrmOwnerType::Company) { throw new Main\NotSupportedException("Entity type: '" . \CCrmOwnerType::ResolveName($entityTypeID) . "' is not supported in current context"); } /** @var Duplicate $dup **/ $dup = new Duplicate($this, array()); $query = static::createQuery(); $query->addSelect('ENTITY_ID'); $query->addFilter('=ENTITY_TYPE_ID', $entityTypeID); static::setQueryFilter($query, $this->getMatches()); if ($enablePermissionCheck) { $permissions = isset($params['PERMISSIONS']) ? $params['PERMISSIONS'] : null; if ($permissions === null) { $permissions = \CCrmPerms::GetUserPermissions($userID); } $permissionSql = \CCrmPerms::BuildSql(\CCrmOwnerType::ResolveName($entityTypeID), '', 'READ', array('RAW_QUERY' => true, 'PERMS' => $permissions)); if ($permissionSql === false) { //Access denied; return null; } if ($permissionSql !== '') { $query->addFilter('@ENTITY_ID', new Main\DB\SqlExpression($permissionSql)); } } if ($limit > 0) { $query->setLimit($limit); } if ($rootEntityID > 0) { $dup->setRootEntityID($rootEntityID); $query->addFilter('!ENTITY_ID', $rootEntityID); $query->addFilter('!@ENTITY_ID', DuplicateIndexMismatch::prepareQueryField($this, $entityTypeID, $rootEntityID, $userID)); } $dbResult = $query->exec(); $rankings = array(); while ($fields = $dbResult->fetch()) { $entityID = isset($fields['ENTITY_ID']) ? intval($fields['ENTITY_ID']) : 0; if ($entityID <= 0) { continue; } $entity = new DuplicateEntity($entityTypeID, $entityID); if ($enableRanking) { $rankings[] = $entity->getRanking(); } $dup->addEntity($entity); } $this->onAfterDuplicateCreated($dup, $entityTypeID, $userID, $enablePermissionCheck, $enableRanking, $rankings); if ($enableRanking) { DuplicateEntityRanking::initializeBulk($rankings, array('CHECK_PERMISSIONS' => $enablePermissionCheck, 'USER_ID' => $userID)); } return $dup; }
public static function ParseEntityKey($key, &$entityInfo) { if (preg_match(self::$ENTITY_KEY, strval($key), $match) !== 1) { $entityInfo = array(); return false; } $entityTypeAbbr = strtoupper($match[1]); $entityID = intval($match[2]); $entityTypeID = CCrmOwnerType::ResolveID($entityTypeAbbr); $entityTypeName = CCrmOwnerType::ResolveName($entityTypeID); $entityInfo = array('ENTITY_TYPE_ABBR' => $entityTypeAbbr, 'ENTITY_TYPE_ID' => $entityTypeID, 'ENTITY_TYPE_NAME' => $entityTypeName, 'ENTITY_ID' => $entityID); return true; }
protected function preparePermissionSql() { if ($this->permissionSql !== null) { return $this->permissionSql; } $userID = $this->getUserID(); if (\CCrmPerms::IsAdmin($userID)) { $this->permissionSql = ''; } else { $this->permissionSql = \CCrmPerms::BuildSql(\CCrmOwnerType::ResolveName($this->getEntityTypeID()), '', 'READ', array('RAW_QUERY' => true, 'PERMS' => \CCrmPerms::GetUserPermissions($userID))); } return $this->permissionSql; }
public static function EnsureResponsibilityImported($entityTypeID, $userID, $reset = false) { if (!CCrmOwnerType::IsDefined($entityTypeID)) { return false; } $userID = intval($userID); if ($userID <= 0) { $userID = CCrmSecurityHelper::GetCurrentUser(); } $reset = (bool) $reset; $optionName = strtolower(CCrmOwnerType::ResolveName($entityTypeID)) . '_sl_subscr_import'; if ($reset || CUserOptions::GetOption('crm', $optionName, 'N', $userID) !== 'Y') { self::GetCurrent()->ImportResponsibility($entityTypeID, $userID, 5000); CUserOptions::SetOption('crm', $optionName, 'Y', false, $userID); } return true; }
/** Create new entity merger by specified entity type ID * @static * @param int $entityTypeID * @param int $currentUserID * @param bool $enablePermissionCheck * @return EntityMerger */ public static function create($entityTypeID, $currentUserID, $enablePermissionCheck = false) { if (!is_int($entityTypeID)) { $entityTypeID = (int) $entityTypeID; } if (!\CCrmOwnerType::IsDefined($entityTypeID)) { throw new Main\ArgumentException('Is not defined', 'entityTypeID'); } if ($entityTypeID === \CCrmOwnerType::Lead) { return new LeadMerger($currentUserID, $enablePermissionCheck); } elseif ($entityTypeID === \CCrmOwnerType::Contact) { return new ContactMerger($currentUserID, $enablePermissionCheck); } elseif ($entityTypeID === \CCrmOwnerType::Company) { return new CompanyMerger($currentUserID, $enablePermissionCheck); } else { throw new Main\NotSupportedException("Entity type: '" . \CCrmOwnerType::ResolveName($entityTypeID) . "' is not supported in current context"); } }
public function enabledFor($entityTypeID, $enable) { if (!is_int($entityTypeID)) { throw new Main\ArgumentTypeException('entityTypeID', 'integer'); } if (!\CCrmOwnerType::IsDefined($entityTypeID)) { throw new Main\NotSupportedException("Entity ID: '{$entityTypeID}' is not supported in current context"); } if (!is_bool($enable)) { if (is_numeric($enable)) { $enable = $enable > 0; } elseif (is_string($enable)) { $enable = strtoupper($enable) === 'Y'; } else { $enable = false; } } $this->settings['enableFor'][\CCrmOwnerType::ResolveName($entityTypeID)] = $enable ? 'Y' : 'N'; }
public static function PrepareTemplate($template, $entityTypeID, $entityID, $contentTypeID = 0) { $template = strval($template); if ($template === '') { return ''; } $entityTypeName = CCrmOwnerType::ResolveName($entityTypeID); $entityID = intval($entityID); if ($entityTypeName === '' || $entityID <= 0) { return $template; } $matches = null; $result = preg_match_all('/#' . $entityTypeName . '\\.[^#]+#/i', $template, $matches, PREG_OFFSET_CAPTURE); if (!(is_int($result) && $result > 0)) { return $template; } $mapper = self::ResolveMapper($entityTypeID, $entityID); if ($mapper === null) { return $template; } $contentTypeID = intval($contentTypeID); if (!CCrmContentType::IsDefined($contentTypeID)) { $contentTypeID = CCrmContentType::PlainText; } $mapper->SetContentType($contentTypeID); $replaceKeys = array(); $replaceValues = array(); foreach ($matches[0] as &$match) { $key = $match[0]; if (isset($replacements[$key])) { continue; } $path = substr($key, 1, strlen($key) - 2); $replaceKeys[] = $key; $replaceValues[] = $mapper->MapPath($path); } unset($match); return !empty($replaceKeys) ? str_replace($replaceKeys, $replaceValues, $template) : $template; }
public function GetTypeMap($typeID) { $typeID = intval($typeID); if (!CCrmOwnerType::IsDefined($typeID)) { return null; } if (!isset(self::$MAP_BY_LANG[LANGUAGE_ID])) { self::$MAP_BY_LANG[LANGUAGE_ID] = array(); } if (isset(self::$MAP_BY_LANG[LANGUAGE_ID][$typeID])) { return self::$MAP_BY_LANG[LANGUAGE_ID][$typeID]; } IncludeModuleLangFile(__FILE__); if ($typeID === CCrmOwnerType::Lead) { return self::$MAP_BY_LANG[LANGUAGE_ID][CCrmOwnerType::Lead] = array('typeId' => CCrmOwnerType::Lead, 'typeName' => CCrmOwnerType::ResolveName(CCrmOwnerType::Lead), 'fields' => array(array('id' => 'ID', 'name' => 'ID'), array('id' => 'TITLE', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_TITLE')), array('id' => 'LAST_NAME', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_LAST_NAME')), array('id' => 'NAME', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_NAME')), array('id' => 'SECOND_NAME', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_SECOND_NAME')), array('id' => 'FORMATTED_NAME', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_FORMATTED_NAME')), array('id' => 'COMPANY_TITLE', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_COMPANY_TITLE')), array('id' => 'SOURCE', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_SOURCE')), array('id' => 'SOURCE_DESCRIPTION', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_SOURCE_DESCRIPTION')), array('id' => 'STATUS', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_STATUS')), array('id' => 'STATUS_DESCRIPTION', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_STATUS_DESCRIPTION')), array('id' => 'POST', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_POST')), array('id' => 'ADDRESS', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_ADDRESS')), array('id' => 'CURRENCY', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_CURRENCY')), array('id' => 'OPPORTUNITY', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_OPPORTUNITY')), array('id' => 'OPPORTUNITY_FORMATTED', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_OPPORTUNITY_FORMATTED')), array('id' => 'ASSIGNED_BY_FULL_NAME', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_ASSIGNED_BY_FULL_NAME')), array('id' => 'ASSIGNED_BY_WORK_POSITION', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_ASSIGNED_BY_POST')), array('id' => 'CREATED_BY_FULL_NAME', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_CREATED_BY_FULL_NAME')), array('id' => 'MODIFY_BY_FULL_NAME', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_MODIFY_BY_FULL_NAME')), array('id' => 'DATE_CREATE', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_DATE_CREATE')), array('id' => 'DATE_MODIFY', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_DATE_MODIFY')), array('id' => 'COMMENTS', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_COMMENTS')))); } elseif ($typeID === CCrmOwnerType::Deal) { return self::$MAP_BY_LANG[LANGUAGE_ID][CCrmOwnerType::Deal] = array('typeId' => CCrmOwnerType::Deal, 'typeName' => CCrmOwnerType::ResolveName(CCrmOwnerType::Deal), 'fields' => array(array('id' => 'ID', 'name' => 'ID'), array('id' => 'TITLE', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_TITLE')), array('id' => 'TYPE', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_TYPE')), array('id' => 'STAGE', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_STAGE')), array('id' => 'PROBABILITY', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_PROBABILITY')), array('id' => 'CURRENCY', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_CURRENCY')), array('id' => 'OPPORTUNITY', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_OPPORTUNITY')), array('id' => 'OPPORTUNITY_FORMATTED', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_OPPORTUNITY_FORMATTED')), array('id' => 'COMPANY', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_COMPANY'), 'typeId' => CCrmOwnerType::Company), array('id' => 'CONTACT', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_CONTACT'), 'typeId' => CCrmOwnerType::Contact), array('id' => 'BEGINDATE', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_BEGINDATE')), array('id' => 'CLOSEDATE', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_CLOSEDATE')), array('id' => 'ASSIGNED_BY_FULL_NAME', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_ASSIGNED_BY_FULL_NAME')), array('id' => 'ASSIGNED_BY_WORK_POSITION', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_ASSIGNED_BY_POST')), array('id' => 'CREATED_BY_FULL_NAME', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_CREATED_BY_FULL_NAME')), array('id' => 'MODIFY_BY_FULL_NAME', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_MODIFY_BY_FULL_NAME')), array('id' => 'DATE_CREATE', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_DATE_CREATE')), array('id' => 'DATE_MODIFY', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_DATE_MODIFY')), array('id' => 'COMMENTS', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_COMMENTS')))); } elseif ($typeID === CCrmOwnerType::Contact) { return self::$MAP_BY_LANG[LANGUAGE_ID][CCrmOwnerType::Contact] = array('typeId' => CCrmOwnerType::Contact, 'typeName' => CCrmOwnerType::ResolveName(CCrmOwnerType::Contact), 'fields' => array(array('id' => 'ID', 'name' => 'ID'), array('id' => 'LAST_NAME', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_LAST_NAME')), array('id' => 'NAME', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_NAME')), array('id' => 'SECOND_NAME', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_SECOND_NAME')), array('id' => 'FORMATTED_NAME', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_FORMATTED_NAME')), array('id' => 'POST', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_POST')), array('id' => 'ADDRESS', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_ADDRESS')), array('id' => 'TYPE', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_TYPE')), array('id' => 'SOURCE', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_SOURCE')), array('id' => 'SOURCE_DESCRIPTION', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_STATUS_DESCRIPTION')), array('id' => 'COMPANY', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_COMPANY'), 'typeId' => CCrmOwnerType::Company), array('id' => 'ASSIGNED_BY_FULL_NAME', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_ASSIGNED_BY_FULL_NAME')), array('id' => 'ASSIGNED_BY_WORK_POSITION', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_ASSIGNED_BY_POST')), array('id' => 'CREATED_BY_FULL_NAME', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_CREATED_BY_FULL_NAME')), array('id' => 'MODIFY_BY_FULL_NAME', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_MODIFY_BY_FULL_NAME')), array('id' => 'DATE_CREATE', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_DATE_CREATE')), array('id' => 'DATE_MODIFY', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_DATE_MODIFY')), array('id' => 'COMMENTS', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_COMMENTS')))); } elseif ($typeID === CCrmOwnerType::Company) { return self::$MAP_BY_LANG[LANGUAGE_ID][CCrmOwnerType::Company] = array('typeId' => CCrmOwnerType::Company, 'typeName' => CCrmOwnerType::ResolveName(CCrmOwnerType::Company), 'fields' => array(array('id' => 'ID', 'name' => 'ID'), array('id' => 'TITLE', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_TITLE')), array('id' => 'TYPE', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_COMPANY_TYPE')), array('id' => 'ADDRESS', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_ACTUAL_ADDRESS')), array('id' => 'ADDRESS_LEGAL', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_ADDRESS_LEGAL')), array('id' => 'BANKING_DETAILS', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_BANKING_DETAILS')), array('id' => 'INDUSTRY', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_INDUSTRY')), array('id' => 'EMPLOYEES', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_EMPLOYEES')), array('id' => 'CURRENCY', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_CURRENCY')), array('id' => 'REVENUE', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_REVENUE')), array('id' => 'REVENUE_FORMATTED', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_REVENUE_FORMATTED')), array('id' => 'ASSIGNED_BY_FULL_NAME', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_ASSIGNED_BY_FULL_NAME')), array('id' => 'ASSIGNED_BY_WORK_POSITION', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_ASSIGNED_BY_POST')), array('id' => 'CREATED_BY_FULL_NAME', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_CREATED_BY_FULL_NAME')), array('id' => 'MODIFY_BY_FULL_NAME', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_MODIFY_BY_FULL_NAME')), array('id' => 'DATE_CREATE', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_DATE_CREATE')), array('id' => 'DATE_MODIFY', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_DATE_MODIFY')), array('id' => 'COMMENTS', 'name' => GetMessage('CRM_TEMPLATE_ADAPTER_COMMENTS')))); } return null; }
if (!is_array($item['advancedInfo']['multiFields'])) { $item['advancedInfo']['multiFields'] = array(); } $item['advancedInfo']['multiFields'][] = array('ID' => $arRes['ID'], 'TYPE_ID' => $arRes['TYPE_ID'], 'VALUE_TYPE' => $arRes['VALUE_TYPE'], 'VALUE' => $arRes['VALUE']); unset($item); } } unset($leadIndex); Header('Content-Type: application/x-javascript; charset=' . LANG_CHARSET); echo CUtil::PhpToJsObject($arData); die; } elseif ($action === 'SAVE_PROGRESS') { $ID = isset($_REQUEST['ID']) ? intval($_REQUEST['ID']) : 0; $typeName = isset($_REQUEST['TYPE']) ? $_REQUEST['TYPE'] : ''; $statusID = isset($_REQUEST['VALUE']) ? $_REQUEST['VALUE'] : ''; $targetTypeName = CCrmOwnerType::ResolveName(CCrmOwnerType::Lead); if ($statusID === '' || $ID <= 0 || $typeName !== $targetTypeName) { $APPLICATION->RestartBuffer(); echo CUtil::PhpToJSObject(array('ERROR' => 'Invalid data!')); die; } $entityAttrs = $userPerms->GetEntityAttr($targetTypeName, array($ID)); if (!$userPerms->CheckEnityAccess($targetTypeName, 'WRITE', $entityAttrs[$ID])) { $APPLICATION->RestartBuffer(); echo CUtil::PhpToJSObject(array('ERROR' => 'Access denied!')); die; } $arFields = CCrmLead::GetByID($ID, false); if (!is_array($arFields)) { $APPLICATION->RestartBuffer(); echo CUtil::PhpToJSObject(array('ERROR' => 'Not found!'));
} CCrmEntityHelper::PrepareMultiFieldFilter($arFilter); $arImmutableFilters = array('FM', 'ID', 'ASSIGNED_BY_ID', 'CURRENCY_ID', 'CONTACT_ID', 'COMPANY_ID', 'LEAD_ID', 'DEAL_ID', 'CREATED_BY_ID', 'MODIFY_BY_ID', 'PRODUCT_ROW_PRODUCT_ID'); foreach ($arFilter as $k => $v) { if (in_array($k, $arImmutableFilters, true)) { continue; } $arMatch = array(); if (in_array($k, array('PRODUCT_ID', 'STATUS_ID', 'COMPANY_ID', 'LEAD_ID', 'DEAL_ID', 'CONTACT_ID'))) { // Bugfix #23121 - to suppress comparison by LIKE $arFilter['=' . $k] = $v; unset($arFilter[$k]); } elseif ($k === 'ENTITIES_LINKS') { $ownerData = explode('_', $v); if (count($ownerData) > 1) { $ownerTypeName = CCrmOwnerType::ResolveName(CCrmOwnerType::ResolveID($ownerData[0])); $ownerID = intval($ownerData[1]); if (!empty($ownerTypeName) && $ownerID > 0) { $arFilter[$ownerTypeName . '_ID'] = $ownerID; } } 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 .= ' 23:59:59';
public static function TrySendEmail($ID, &$arFields, &$arErrors) { global $APPLICATION; if (!CModule::IncludeModule('subscribe')) { $arErrors[] = array('CODE' => self::ERR_CANT_LOAD_SUBSCRIBE); return false; } $ID = intval($ID); if ($ID <= 0 && isset($arFields['ID'])) { $ID = intval($arFields['ID']); } if ($ID <= 0 || !is_array($arFields)) { $arErrors[] = array('CODE' => self::ERR_INVALID_DATA); return false; } $typeID = isset($arFields['TYPE_ID']) ? intval($arFields['TYPE_ID']) : CCrmActivityType::Undefined; if ($typeID !== CCrmActivityType::Email) { $arErrors[] = array('CODE' => self::ERR_INVALID_DATA); return false; } $urn = CCrmActivity::PrepareUrn($arFields); if (!($urn !== '' && CCrmActivity::Update($ID, array('URN' => $urn), false, false))) { $arErrors[] = array('CODE' => self::ERR_CANT_UPDATE_ACTIVITY); return false; } $settings = isset($arFields['SETTINGS']) && is_array($arFields['SETTINGS']) ? $arFields['SETTINGS'] : array(); // Creating Email --> $crmEmail = CCrmMailHelper::ExtractEmail(COption::GetOptionString('crm', 'mail', '')); $from = isset($settings['MESSAGE_FROM']) ? trim(strval($settings['MESSAGE_FROM'])) : ''; if ($from === '') { if ($crmEmail !== '') { $from = $crmEmail; } else { $arErrors[] = array('CODE' => self::ERR_CANT_FIND_EMAIL_FROM); } } elseif (!check_email($from)) { $arErrors[] = array('CODE' => self::ERR_INVALID_EMAIL, 'DATA' => array('EMAIL' => $from)); } //Save user email in settings --> if ($from !== CUserOptions::GetOption('crm', 'activity_email_addresser', '')) { CUserOptions::SetOption('crm', 'activity_email_addresser', $from); } //<-- Save user email in settings $to = array(); $commData = isset($arFields['COMMUNICATIONS']) ? $arFields['COMMUNICATIONS'] : array(); foreach ($commData as &$commDatum) { $commType = isset($commDatum['TYPE']) ? strtoupper(strval($commDatum['TYPE'])) : ''; $commValue = isset($commDatum['VALUE']) ? strval($commDatum['VALUE']) : ''; if ($commType !== 'EMAIL' || $commValue === '') { continue; } if (!check_email($commValue)) { $arErrors[] = array('CODE' => self::ERR_INVALID_EMAIL, 'DATA' => array('EMAIL' => $commValue)); continue; } $to[] = strtolower(trim($commValue)); } unset($commDatum); if (count($to) == 0) { $arErrors[] = array('CODE' => self::ERR_CANT_FIND_EMAIL_TO); } if (!empty($arErrors)) { return false; } // Try to resolve posting charset --> $postingCharset = ''; $siteCharset = defined('LANG_CHARSET') ? LANG_CHARSET : (defined('SITE_CHARSET') ? SITE_CHARSET : 'windows-1251'); $arSupportedCharset = explode(',', COption::GetOptionString('subscribe', 'posting_charset')); if (count($arSupportedCharset) === 0) { $postingCharset = $siteCharset; } else { foreach ($arSupportedCharset as $curCharset) { if (strcasecmp($curCharset, $siteCharset) === 0) { $postingCharset = $curCharset; break; } } if ($postingCharset === '') { $postingCharset = $arSupportedCharset[0]; } } //<-- Try to resolve posting charset $subject = isset($arFields['SUBJECT']) ? $arFields['SUBJECT'] : ''; $description = isset($arFields['DESCRIPTION']) ? $arFields['DESCRIPTION'] : ''; $descriptionType = isset($arFields['DESCRIPTION_TYPE']) ? intval($arFields['DESCRIPTION_TYPE']) : CCrmContentType::PlainText; $descriptionHtml = ''; if ($descriptionType === CCrmContentType::Html) { $descriptionHtml = $description; } elseif ($descriptionType === CCrmContentType::BBCode) { $parser = new CTextParser(); $descriptionHtml = $parser->convertText($description); } elseif ($descriptionType === CCrmContentType::PlainText) { $descriptionHtml = htmlspecialcharsbx($description); } $postingData = array('STATUS' => 'D', 'FROM_FIELD' => $from, 'TO_FIELD' => $from, 'BCC_FIELD' => implode(',', $to), 'SUBJECT' => $subject, 'BODY_TYPE' => 'html', 'BODY' => $descriptionHtml, 'DIRECT_SEND' => 'Y', 'SUBSCR_FORMAT' => 'html', 'CHARSET' => $postingCharset); CCrmActivity::InjectUrnInMessage($postingData, $urn, CCrmEMailCodeAllocation::GetCurrent()); $posting = new CPosting(); $postingID = $posting->Add($postingData); if ($postingID === false) { $arErrors[] = array('CODE' => self::ERR_CANT_ADD_POSTING, 'MESSAGE' => $posting->LAST_ERROR); return false; } $arUpdateFields = array('COMPLETED' => 'Y', 'ASSOCIATED_ENTITY_ID' => $postingID, 'SETTINGS' => $settings); $fromEmail = strtolower(trim(CCrmMailHelper::ExtractEmail($from))); if ($crmEmail !== '' && $fromEmail !== $crmEmail) { $arUpdateFields['SETTINGS']['MESSAGE_HEADERS'] = array('Reply-To' => "<{$fromEmail}>, <{$crmEmail}>"); } $arUpdateFields['SETTINGS']['IS_MESSAGE_SENT'] = true; if (!CCrmActivity::Update($ID, $arUpdateFields, false, false)) { $arErrors[] = array('CODE' => self::ERR_CANT_UPDATE_ACTIVITY); return false; } // <-- Creating Email // Attaching files --> $storageTypeID = isset($arFields['STORAGE_TYPE_ID']) ? intval($arFields['STORAGE_TYPE_ID']) : StorageType::Undefined; $storageElementsID = isset($arFields['STORAGE_ELEMENT_IDS']) && is_array($arFields['STORAGE_ELEMENT_IDS']) ? $arFields['STORAGE_ELEMENT_IDS'] : array(); $arRawFiles = StorageManager::makeFileArray($storageElementsID, $storageTypeID); foreach ($arRawFiles as &$arRawFile) { if (!$posting->SaveFile($postingID, $arRawFile)) { $arErrors[] = array('CODE' => self::ERR_CANT_SAVE_POSTING_FILE, 'MESSAGE' => $posting->LAST_ERROR); return false; } } unset($arRawFile); // <-- Attaching files // Sending Email --> if ($posting->ChangeStatus($postingID, 'P')) { $rsAgents = CAgent::GetList(array('ID' => 'DESC'), array('MODULE_ID' => 'subscribe', 'NAME' => 'CPosting::AutoSend(' . $postingID . ',%')); if (!$rsAgents->Fetch()) { CAgent::AddAgent('CPosting::AutoSend(' . $postingID . ',true);', 'subscribe', 'N', 0); } } // Try add event to entity $CCrmEvent = new CCrmEvent(); $ownerID = isset($arFields['OWNER_ID']) ? intval($arFields['OWNER_ID']) : 0; $ownerTypeID = isset($arFields['OWNER_TYPE_ID']) ? intval($arFields['OWNER_TYPE_ID']) : 0; if ($ownerID > 0 && $ownerTypeID > 0) { $eventText = ''; $eventText .= GetMessage('CRM_ACTIVITY_EMAIL_SUBJECT') . ': ' . $subject . "\n\r"; $eventText .= GetMessage('CRM_ACTIVITY_EMAIL_FROM') . ': ' . $from . "\n\r"; $eventText .= GetMessage('CRM_ACTIVITY_EMAIL_TO') . ': ' . implode(',', $to) . "\n\r\n\r"; $eventText .= $description; // Register event only for owner $CCrmEvent->Add(array('ENTITY' => array($ownerID => array('ENTITY_TYPE' => CCrmOwnerType::ResolveName($ownerTypeID), 'ENTITY_ID' => $ownerID)), 'EVENT_ID' => 'MESSAGE', 'EVENT_TEXT_1' => $eventText, 'FILES' => $arRawFiles)); } // <-- Sending Email return true; }
public static function registerEntityStatistics($entityTypeID, $entityID, array $entityFields) { $lastChanged = 0; $completeness = 0; if ($entityTypeID === \CCrmOwnerType::Contact) { if (isset($entityFields['DATE_MODIFY']) && $entityFields['DATE_MODIFY'] !== '') { $lastChanged = MakeTimeStamp($entityFields['DATE_MODIFY']); } if (isset($entityFields['NAME']) && $entityFields['NAME'] !== '') { $completeness++; } if (isset($entityFields['SECOND_NAME']) && $entityFields['SECOND_NAME'] !== '') { $completeness++; } if (isset($entityFields['LAST_NAME']) && $entityFields['LAST_NAME'] !== '') { $completeness++; } } elseif ($entityTypeID === \CCrmOwnerType::Company) { if (isset($entityFields['DATE_MODIFY']) && $entityFields['DATE_MODIFY'] !== '') { $lastChanged = MakeTimeStamp($entityFields['DATE_MODIFY']); } if (isset($entityFields['TITLE']) && $entityFields['TITLE'] !== '') { $completeness++; } if (isset($entityFields['ADDRESS']) && $entityFields['ADDRESS'] !== '') { $completeness++; } if (isset($entityFields['ADDRESS_LEGAL']) && $entityFields['ADDRESS_LEGAL'] !== '') { $completeness++; } } elseif ($entityTypeID === \CCrmOwnerType::Lead) { if (isset($entityFields['DATE_MODIFY']) && $entityFields['DATE_MODIFY'] !== '') { $lastChanged = MakeTimeStamp($entityFields['DATE_MODIFY']); } if (isset($entityFields['TITLE']) && $entityFields['TITLE'] !== '') { $completeness++; } if (isset($entityFields['COMPANY_TITLE']) && $entityFields['COMPANY_TITLE'] !== '') { $completeness++; } if (isset($entityFields['NAME']) && $entityFields['NAME'] !== '') { $completeness++; } if (isset($entityFields['SECOND_NAME']) && $entityFields['SECOND_NAME'] !== '') { $completeness++; } if (isset($entityFields['LAST_NAME']) && $entityFields['LAST_NAME'] !== '') { $completeness++; } if (isset($entityFields['ADDRESS']) && $entityFields['ADDRESS'] !== '') { $completeness++; } } else { throw new Main\NotSupportedException('Entity type: ' . \CCrmOwnerType::ResolveName($entityTypeID) . ' is not supported in current context'); } if ($lastChanged <= 0) { $lastChanged = time() + \CTimeZone::GetOffset(); } $completeness += count(DuplicateCommunicationCriterion::getRegisteredTypes($entityTypeID, $entityID)); Entity\DuplicateEntityStatisticsTable::upsert(array('ENTITY_TYPE_ID' => $entityTypeID, 'ENTITY_ID' => $entityID, 'RANKING_DATA' => serialize(array('LAST_CHANGED' => $lastChanged, 'COMPLETENESS' => $completeness)))); }
public static function ProcessLogEventEditPOST($arPOST, $entityTypeID, $entityID, &$arResult) { $arEntityData = array(); $errors = array(); $enableTitle = isset($arPOST['ENABLE_POST_TITLE']) && strtoupper($arPOST['ENABLE_POST_TITLE']) === 'Y'; $title = $enableTitle && isset($arPOST['POST_TITLE']) ? $arPOST['POST_TITLE'] : ''; $message = isset($arPOST['MESSAGE']) ? htmlspecialcharsback($arPOST['MESSAGE']) : ''; $arResult['EVENT']['MESSAGE'] = $message; $arResult['EVENT']['TITLE'] = $title; $arResult['ENABLE_TITLE'] = $enableTitle; $attachedFiles = array(); $webDavFileFieldName = $arResult['WEB_DAV_FILE_FIELD_NAME']; if ($webDavFileFieldName !== '' && isset($GLOBALS[$webDavFileFieldName]) && is_array($GLOBALS[$webDavFileFieldName])) { foreach ($GLOBALS[$webDavFileFieldName] as $fileID) { if ($fileID === '') { continue; } //fileID: "888|165|16" $attachedFiles[] = $fileID; } if (!empty($attachedFiles) && is_array($arResult['WEB_DAV_FILE_FIELD'])) { $arResult['WEB_DAV_FILE_FIELD']['VALUE'] = $attachedFiles; } } $allowToAll = COption::GetOptionString('socialnetwork', 'allow_livefeed_toall', 'Y') === 'Y'; if ($allowToAll) { $arToAllRights = unserialize(COption::GetOptionString("socialnetwork", "livefeed_toall_rights", 'a:1:{i:0;s:2:"AU";}')); if (!$arToAllRights) { $arToAllRights = array('AU'); } $arUserGroupCode = array_merge(array('AU'), CAccess::GetUserCodesArray($arResult['USER_ID'])); if (count(array_intersect($arToAllRights, $arUserGroupCode)) <= 0) { $allowToAll = false; } } $arSocnetRights = array(); if (!empty($arPOST['SPERM'])) { foreach ($arPOST['SPERM'] as $v => $k) { if (strlen($v) > 0 && is_array($k) && !empty($k)) { foreach ($k as $vv) { if (strlen($vv) > 0) { $arSocnetRights[] = $vv; } } } } } if (in_array('UA', $arSocnetRights) && !$allowToAll) { foreach ($arSocnetRights as $key => $value) { if ($value == 'UA') { unset($arSocnetRights[$key]); break; } } } foreach ($arSocnetRights as $key => $value) { if ($value == 'UA') { $arSocnetRights[] = 'AU'; unset($arSocnetRights[$key]); break; } } $arSocnetRights = array_unique($arSocnetRights); $allFeedEtityTypes = CCrmLiveFeedEntity::GetAll(); $userPerms = CCrmPerms::GetCurrentUserPermissions(); foreach ($arSocnetRights as $key => $value) { $groupCodeData = array(); if (CCrmLiveFeed::TryParseGroupCode($value, $groupCodeData) && in_array($groupCodeData['ENTITY_TYPE'], $allFeedEtityTypes, true)) { $groupCodeEntityType = $groupCodeData['ENTITY_TYPE']; $groupCodeEntityID = $groupCodeData['ENTITY_ID']; if (!CCrmLiveFeed::CheckCreatePermission($groupCodeEntityType, $groupCodeEntityID, $userPerms)) { $canonicalEntityTypeID = CCrmLiveFeedEntity::ResolveEntityTypeID($groupCodeEntityType); $errors[] = GetMessage('CRM_SL_EVENT_EDIT_PERMISSION_DENIED', array('#TITLE#' => CCrmOwnerType::GetCaption($canonicalEntityTypeID, $groupCodeEntityID, false))); } else { $arEntityData[] = array('ENTITY_TYPE' => $groupCodeEntityType, 'ENTITY_ID' => $groupCodeEntityID); } } } if (!(CCrmOwnerType::IsDefined($entityTypeID) && $entityID > 0) && !empty($arEntityData)) { $entityData = $arEntityData[0]; $entityTypeID = CCrmLiveFeedEntity::ResolveEntityTypeID($entityData['ENTITY_TYPE']); $entityID = $entityData['ENTITY_ID']; } if (!empty($arEntityData)) { $arResult['ENTITY_DATA'] = $arEntityData; } if (!(CCrmOwnerType::IsDefined($entityTypeID) && $entityID > 0)) { $errors[] = GetMessage('CRM_SL_EVENT_EDIT_ENTITY_NOT_DEFINED'); } if ($message === '') { $errors[] = GetMessage('CRM_SL_EVENT_EDIT_EMPTY_MESSAGE'); } if (empty($errors)) { $fields = array('ENTITY_TYPE_ID' => $entityTypeID, 'ENTITY_ID' => $entityID, 'USER_ID' => $arResult['USER_ID'], 'TITLE' => $title, 'MESSAGE' => $message, 'RIGHTS' => $arSocnetRights); $parents = array(); CCrmOwnerType::TryGetOwnerInfos($entityTypeID, $entityID, $parents, array('ENABLE_MAPPING' => true)); foreach ($arEntityData as $entityData) { $curEntityTypeID = CCrmLiveFeedEntity::ResolveEntityTypeID($entityData['ENTITY_TYPE']); $curEntityID = $entityData['ENTITY_ID']; $entityKey = "{$curEntityTypeID}_{$curEntityID}"; if (!isset($parents[$entityKey]) && !($curEntityTypeID === $entityTypeID && $curEntityID === $entityID)) { $parents[$entityKey] = array('ENTITY_TYPE_ID' => $curEntityTypeID, 'ENTITY_ID' => $curEntityID); } } if (!empty($parents)) { $fields['PARENTS'] = array_values($parents); } if (!empty($attachedFiles)) { $fields['WEB_DAV_FILES'] = array($webDavFileFieldName => $attachedFiles); } $messageID = CCrmLiveFeed::CreateLogMessage($fields); if (!(is_int($messageID) && $messageID > 0)) { $errors[] = isset($fields['ERROR']) ? $fields['ERROR'] : 'UNKNOWN ERROR'; } else { preg_match_all("/\\[user\\s*=\\s*([^\\]]*)\\](.+?)\\[\\/user\\]/is" . BX_UTF_PCRE_MODIFIER, $message, $arMention); if (!empty($arMention) && !empty($arMention[1]) && CModule::IncludeModule("im")) { $arMention = $arMention[1]; $arMention = array_unique($arMention); $arMessageFields = array("MESSAGE_TYPE" => IM_MESSAGE_SYSTEM, "TO_USER_ID" => "", "FROM_USER_ID" => $arResult['USER_ID'], "NOTIFY_TYPE" => IM_NOTIFY_FROM, "NOTIFY_MODULE" => "crm", "NOTIFY_EVENT" => "mention"); $genderSuffix = ""; $dbUser = CUser::GetByID($arResult['USER_ID']); if ($arUser = $dbUser->Fetch()) { switch ($arUser["PERSONAL_GENDER"]) { case "M": $genderSuffix = "_M"; break; case "F": $genderSuffix = "_F"; break; default: $genderSuffix = ""; } } $strIMMessageTitle = str_replace(array("\r\n", "\n"), " ", strlen($title) > 0 ? $title : $message); if (CModule::IncludeModule("blog")) { $strIMMessageTitle = trim(blogTextParser::killAllTags($strIMMessageTitle)); } $strIMMessageTitle = TruncateText($strIMMessageTitle, 100); $strIMMessageTitleOut = TruncateText($strIMMessageTitle, 255); $strLogEntryURL = COption::GetOptionString("socialnetwork", "log_entry_page", SITE_DIR . "company/personal/log/#log_id#/", SITE_ID); $strLogEntryURL = CComponentEngine::MakePathFromTemplate($strLogEntryURL, array("log_id" => $messageID)); $strLogEntryCrmURL = CComponentEngine::MakePathFromTemplate(SITE_DIR . "crm/stream/?log_id=#log_id#", array("log_id" => $messageID)); $serverName = (CMain::IsHTTPS() ? "https" : "http") . "://" . (defined("SITE_SERVER_NAME") && strlen(SITE_SERVER_NAME) > 0 ? SITE_SERVER_NAME : COption::GetOptionString("main", "server_name", "")); foreach ($arMention as $val) { $val = IntVal($val); if ($val > 0 && $val != $arResult['USER_ID']) { $bHasAccess = false; if (in_array('U' . $val, $arSocnetRights)) { $url = $strLogEntryURL; $bHasAccess = true; } if (!$bHasAccess) { $arAccessCodes = array(); $dbAccess = CAccess::GetUserCodes($val); while ($arAccess = $dbAccess->Fetch()) { $arAccessCodes[] = $arAccess["ACCESS_CODE"]; } $arTmp = array_intersect($arAccess, $arSocnetRights); if (!empty($arTmp)) { $url = $strLogEntryURL; $bHasAccess = true; } } if (!$bHasAccess) { $userPermissions = CCrmPerms::GetUserPermissions($val); foreach ($arEntityData as $arEntity) { if (CCrmAuthorizationHelper::CheckReadPermission(CCrmOwnerType::ResolveName(CCrmLiveFeedEntity::ResolveEntityTypeID($arEntity['ENTITY_TYPE'])), $arEntity['ENTITY_ID'], $userPermissions)) { $url = $strLogEntryCrmURL; $bHasAccess = true; break; } } } if ($bHasAccess) { $arMessageFields["TO_USER_ID"] = $val; $arMessageFields["NOTIFY_TAG"] = "CRM|MESSAGE_MENTION|" . $messageID; $arMessageFields["NOTIFY_MESSAGE"] = GetMessage("CRM_SL_EVENT_IM_MENTION_POST" . $genderSuffix, array("#title#" => "<a href=\"" . $url . "\" class=\"bx-notifier-item-action\">" . htmlspecialcharsbx($strIMMessageTitle) . "</a>")); $arMessageFields["NOTIFY_MESSAGE_OUT"] = GetMessage("CRM_SL_EVENT_IM_MENTION_POST" . $genderSuffix, array("#title#" => htmlspecialcharsbx($strIMMessageTitleOut))) . " (" . $serverName . $url . ")"; CIMNotify::Add($arMessageFields); } } } } return $messageID; } } return $errors; }
private static function ResolveEntityInfo($typeID, $ID) { $typeID = intval($typeID); $ID = intval($ID); if (!(CCrmOwnerType::IsDefined($typeID) && $ID > 0)) { return array('TYPE_ID' => $typeID, 'TYPE_NAME' => CCrmOwnerType::ResolveName($typeID), 'ID' => $ID); } $fields = null; if ($typeID === CCrmOwnerType::Lead) { $fields = CCrmLead::GetByID($ID, false); } elseif ($typeID === CCrmOwnerType::Contact) { $fields = CCrmContact::GetByID($ID, false); } elseif ($typeID === CCrmOwnerType::Company) { $fields = CCrmCompany::GetByID($ID, false); } elseif ($typeID === CCrmOwnerType::Deal) { $fields = CCrmDeal::GetByID($ID, false); } return array('TYPE_ID' => $typeID, 'TYPE_NAME' => CCrmOwnerType::ResolveName($typeID), 'ID' => $ID, 'FIELDS' => $fields); }
$navigation = CDBResult::GetNavParams($navParams); $CGridOptions = new CCrmGridOptions($arResult['UID']); $navParams = $CGridOptions->GetNavParams($navParams); $navParams['bShowAll'] = false; $filter = $CGridOptions->GetFilter($arResult['FILTER']); $arResult['GRID_FILTER_APPLIED'] = isset($filter['GRID_FILTER_APPLIED']) && $filter['GRID_FILTER_APPLIED']; if ($arResult['GRID_FILTER_APPLIED']) { $filterID = $arResult['GRID_FILTER_ID'] = isset($filter['GRID_FILTER_ID']) ? $filter['GRID_FILTER_ID'] : ''; $arResult['GRID_FILTER_NAME'] = isset($arResult['FILTER_PRESETS'][$filterID]) ? $arResult['FILTER_PRESETS'][$filterID]['name'] : ''; } else { $arResult['GRID_FILTER_ID'] = ''; $arResult['GRID_FILTER_NAME'] = ''; } if ($entityTypeID > 0 && $entityID > 0) { $arResult['RUBRIC']['ENABLED'] = true; $filter['ENTITY_TYPE'] = CCrmOwnerType::ResolveName($entityTypeID); $filter['ENTITY_ID'] = $entityID; $arResult['RUBRIC']['TITLE'] = CCrmOwnerType::GetCaption($entityTypeID, $entityID); $arResult['RUBRIC']['FILTER_PRESETS'] = array('clear_filter', 'filter_custom'); } $arResult['ITEMS'] = array(); $dbRes = CCrmEvent::GetListEx($sort, $filter, false, $arNavParams, $select, array()); $dbRes->NavStart($navParams['nPageSize'], false); $arResult['PAGE_NAVNUM'] = intval($dbRes->NavNum); // pager index $arResult['PAGE_NUMBER'] = intval($dbRes->NavPageNomer); // current page index $arResult['PAGE_NAVCOUNT'] = intval($dbRes->NavPageCount); // page count $arResult['PAGER_PARAM'] = "PAGEN_{$arResult['PAGE_NAVNUM']}"; $arResult['PAGE_NEXT_NUMBER'] = $arResult['PAGE_NUMBER'] + 1;
foreach ($supportedTypes as $typeID) { $typeLayoutID = CCrmOwnerType::Undefined; if ($typeID === Integrity\DuplicateIndexType::ORGANIZATION) { $typeLayoutID = CCrmOwnerType::Company; } elseif ($typeID === Integrity\DuplicateIndexType::PERSON) { $typeLayoutID = CCrmOwnerType::Contact; } $groupName = ''; if ($typeID === Integrity\DuplicateIndexType::PERSON || $typeID === Integrity\DuplicateIndexType::ORGANIZATION) { $groupName = 'denomination'; } elseif ($typeID === Integrity\DuplicateIndexType::COMMUNICATION_PHONE || $typeID === Integrity\DuplicateIndexType::COMMUNICATION_EMAIL) { $groupName = 'communication'; } $description = isset($typeDescriptions[$typeID]) ? $typeDescriptions[$typeID] : $typeID; $isIndexed = in_array($typeID, $indexedTypes, true); $typeInfos[$typeID] = array('ID' => $typeID, 'NAME' => Integrity\DuplicateIndexType::resolveName($typeID), 'DESCRIPTION' => $description, 'IS_INDEXED' => $isIndexed, 'IS_SELECTED' => false, 'IS_UNDERSTATED' => false, 'LAYOUT_NAME' => CCrmOwnerType::ResolveName($typeLayoutID), 'GROUP_NAME' => $groupName); if ($filterTypeID === Integrity\DuplicateIndexType::UNDEFINED || ($filterTypeID & $typeID) === $typeID) { if (!$isIndexed && $filterTypeID !== Integrity\DuplicateIndexType::UNDEFINED) { $skippedTypeIDs[] = $typeID; } if ($isIndexed && $filterTypeID === Integrity\DuplicateIndexType::UNDEFINED || ($filterTypeID & $typeID) === $typeID) { $selectedTypes[$typeID] = $typeID; $typeInfos[$typeID]['IS_SELECTED'] = true; } } } if (!empty($skippedTypeIDs)) { $skippedTypeDescriptions = array(); foreach ($skippedTypeIDs as $typeID) { $skippedTypeDescriptions[] = "'{$typeDescriptions[$typeID]}'"; }
", { userId: <?php echo $arResult['USER_ID']; ?> , entityTypeName: "<?php echo CCrmOwnerType::ResolveName($entityTypeID); ?> ", typeData: <?php echo CUtil::PhpToJSObject($arResult['TYPE_INFOS']); ?> , layoutName: "<?php echo CUtil::JSEscape(CCrmOwnerType::ResolveName($layoutID)); ?> ", enableLayout: <?php echo $enableLayout ? 'true' : 'false'; ?> , tableId: "<?php echo CUtil::JSEscape($listID); ?> ", serviceUrl: "<?php echo '/bitrix/components/bitrix/crm.dedupe.list/ajax.php?' . bitrix_sessid_get(); ?> ", itemData: <?php
public function getEntityTypeName() { return \CCrmOwnerType::ResolveName($this->entityTypeID); }
public static function prepareRecoveryData($entityTypeID, $entityID, array $options = null) { if (!is_int($entityTypeID)) { $entityTypeID = intval($entityTypeID); } if (!\CCrmOwnerType::IsDefined($entityTypeID)) { throw new Main\ArgumentException('Is not defined', 'entityTypeID'); } if (!is_int($entityID)) { $entityID = intval($entityID); } if ($entityID <= 0) { throw new Main\ArgumentException('Must be greater than zero', 'entityID'); } if (!is_array($options)) { $options = array(); } $item = new EntityRecoveryData(); $item->setEntityTypeID($entityTypeID); $item->setEntityID($entityID); $userID = isset($options['USER_ID']) ? intval($options['USER_ID']) : 0; if ($userID > 0) { $item->setUserID($userID); } if ($entityTypeID === \CCrmOwnerType::Lead) { $result = \CCrmLead::GetListEx(array(), array('=ID' => $entityID, 'CHECK_PERMISSIONS' => 'N'), false, false, array('*', 'UF_*')); $fields = is_object($result) ? $result->Fetch() : null; if (!is_array($fields)) { throw new Main\ObjectNotFoundException("The lead with ID '{$entityTypeID}' is not found"); } $item->setDataItem('FIELDS', $fields); if (isset($fields['TITLE'])) { $item->setTitle($fields['TITLE']); } if (isset($fields['ASSIGNED_BY_ID'])) { $item->setResponsibleID(intval($fields['ASSIGNED_BY_ID'])); } } elseif ($entityTypeID === \CCrmOwnerType::Contact) { $result = \CCrmContact::GetListEx(array(), array('=ID' => $entityID, 'CHECK_PERMISSIONS' => 'N'), false, false, array('*', 'UF_*')); $fields = is_object($result) ? $result->Fetch() : null; if (!is_array($fields)) { throw new Main\ObjectNotFoundException("The contact with ID '{$entityTypeID}' is not found"); } $item->setDataItem('FIELDS', $fields); $item->setTitle(\CCrmContact::GetFullName($fields, true)); if (isset($fields['ASSIGNED_BY_ID'])) { $item->setResponsibleID(intval($fields['ASSIGNED_BY_ID'])); } } elseif ($entityTypeID === \CCrmOwnerType::Company) { $result = \CCrmCompany::GetListEx(array(), array('=ID' => $entityID, 'CHECK_PERMISSIONS' => 'N'), false, false, array('*', 'UF_*')); $fields = is_object($result) ? $result->Fetch() : null; if (!is_array($fields)) { throw new Main\ObjectNotFoundException("The company with ID '{$entityTypeID}' is not found"); } $item->setDataItem('FIELDS', $fields); if (isset($fields['TITLE'])) { $item->setTitle($fields['TITLE']); } if (isset($fields['ASSIGNED_BY_ID'])) { $item->setResponsibleID(intval($fields['ASSIGNED_BY_ID'])); } } else { throw new Main\NotSupportedException("The entity type '" . \CCrmOwnerType::ResolveName($entityTypeID) . "' is not supported in current context"); } $entityTypeName = \CCrmOwnerType::ResolveName($entityTypeID); //MULTI FIELDS --> $multiFieldData = array(); $multiFieldTypes = array(\CCrmFieldMulti::PHONE, \CCrmFieldMulti::EMAIL, \CCrmFieldMulti::WEB, \CCrmFieldMulti::IM); foreach ($multiFieldTypes as $multiFieldType) { $result = \CCrmFieldMulti::GetListEx(array('ID' => 'ASC'), array('TYPE_ID' => $multiFieldType, 'ENTITY_ID' => $entityTypeName, 'ELEMENT_ID' => $entityID, 'CHECK_PERMISSIONS' => 'N'), false, array('nTopCount' => 50), array('VALUE_TYPE', 'VALUE')); if (!is_object($result)) { continue; } while ($multiFields = $result->Fetch()) { $valueType = isset($multiFields['VALUE_TYPE']) ? $multiFields['VALUE_TYPE'] : ''; $value = isset($multiFields['VALUE']) ? $multiFields['VALUE'] : ''; if ($value === '') { continue; } if (!isset($multiFieldData[$multiFieldType])) { $multiFieldData[$multiFieldType] = array(); } $multiFieldData[$multiFieldType][] = array('VALUE_TYPE' => $valueType, 'VALUE' => $value); } } if (!empty($multiFieldData)) { $item->setDataItem('MULTI_FIELDS', $multiFieldData); } //<-- MULTI FIELDS //ACTIVITIES --> $activityIDs = \CCrmActivity::GetBoundIDs($entityTypeID, $entityID); if (!empty($activityIDs)) { $item->setDataItem('ACTIVITY_IDS', $activityIDs); } //<-- ACTIVITIES //EVENTS --> $eventIDs = array(); $result = \CCrmEvent::GetListEx(array('EVENT_REL_ID' => 'ASC'), array('ENTITY_TYPE' => $entityTypeName, 'ENTITY_ID' => $entityID, 'EVENT_TYPE' => 0, 'CHECK_PERMISSIONS' => 'N'), false, false, array('EVENT_REL_ID')); if (is_object($result)) { while ($eventFields = $result->Fetch()) { $eventIDs[] = intval($eventFields['EVENT_REL_ID']); } } if (!empty($eventIDs)) { $item->setDataItem('EVENT_IDS', $eventIDs); } //<-- EVENTS return $item; }
<?php if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) { die; } define('NO_KEEP_STATISTIC', 'Y'); define('NO_AGENT_STATISTIC', 'Y'); define('NO_AGENT_CHECK', true); define('DisableEventsCheck', true); $GLOBALS['APPLICATION']->RestartBuffer(); Header('Content-Type: application/x-javascript; charset=' . LANG_CHARSET); $models = array(); foreach ($arResult['ITEMS'] as &$item) { $model = array('OWNER_ID' => $item['OWNER_ID'], 'OWNER_TYPE_NAME' => CCrmOwnerType::ResolveName($item['OWNER_TYPE_ID']), 'TITLE' => $item['TITLE'], 'DESCRIPTION' => $item['DESCRIPTION'], 'IMAGE_URL' => $item['IMAGE_URL'], 'COMMUNICATIONS' => $item['COMMUNICATIONS']); $model['ID'] = $model['OWNER_TYPE_NAME'] . '_' . $model['OWNER_ID']; $models[] = $model; unset($model); } unset($item); echo CUtil::PhpToJSObject(array('DATA' => array('MODELS' => $models, 'SHOW_SEARCH_PANEL' => $arResult['SHOW_SEARCH_PANEL'], 'SEARCH_PLACEHOLDER' => $arResult['SEARCH_PLACEHOLDER'], 'SEARCH_PAGE_URL' => $arResult["SEARCH_PAGE_URL"]))); die;
public function isMergable($entityID, $roleID) { if (!$this->enablePermissionCheck) { return true; } if (!is_int($entityID)) { $entityID = (int) $entityID; } if ($entityID <= 0) { throw new Main\ArgumentException('Must be greater than zero', 'entityID'); } if (!is_int($roleID)) { $roleID = (int) $roleID; } if (!self::isRoleDefined($roleID)) { throw new Main\ArgumentException('Merge role is not defined', 'roleID'); } $entityTypeID = $this->entityTypeID; $entityTypeName = \CCrmOwnerType::ResolveName($entityTypeID); $permissions = $this->getUserPermissions(); if ($roleID === self::ROLE_SEED) { return \CCrmAuthorizationHelper::CheckReadPermission($entityTypeName, $entityID, $permissions) && \CCrmAuthorizationHelper::CheckDeletePermission($entityTypeName, $entityID, $permissions); } else { return \CCrmAuthorizationHelper::CheckReadPermission($entityTypeName, $entityID, $permissions) && \CCrmAuthorizationHelper::CheckUpdatePermission($entityTypeName, $entityID, $permissions); } }
$entityID = $arParams['ENTITY_ID'] = intval($_GET['entity_id']); } $arResult['ENTITY_ID'] = $entityID; if ($entityTypeID <= CCrmOwnerType::Undefined) { ShowError(GetMessage('CRM_PRODUCT_LIST_OWNER_TYPE_NOT_DEFINED')); return; } if ($entityTypeID !== CCrmOwnerType::Deal && $entityTypeID !== CCrmOwnerType::Lead && $entityTypeID !== CCrmOwnerType::Invoice) { ShowError(GetMessage('CRM_PRODUCT_LIST_OWNER_TYPE_NOT_SUPPORTED')); return; } if ($entityID <= 0) { ShowError(GetMessage('CRM_PRODUCT_LIST_OWNER_ID_NOT_DEFINED')); return; } $entityTypeName = CCrmOwnerType::ResolveName($entityTypeID); $userPerms = CCrmPerms::GetCurrentUserPermissions(); if (!CCrmAuthorizationHelper::CheckReadPermission($entityTypeName, $entityID, $userPerms)) { ShowError(GetMessage('CRM_PERMISSION_DENIED')); return; } $arParams['UID'] = isset($arParams['UID']) ? $arParams['UID'] : ''; if (!isset($arParams['UID']) || $arParams['UID'] === '') { $arParams['UID'] = 'mobile_crm_product_row_list'; } $arResult['UID'] = $arParams['UID']; $arResult['ITEMS'] = array(); $arResult['TAX_MODE'] = 'NONE'; if ($entityTypeID === CCrmOwnerType::Deal) { $dbRes = CCrmDeal::GetListEx(array(), array('ID' => $entityID, 'CHECK_PERMISSIONS' => 'N'), false, false, array('TITLE', 'CURRENCY_ID', 'OPPORTUNITY')); $arOwner = $dbRes ? $dbRes->Fetch() : null;
$resultItem = array('id' => $arLead['ID'], 'actions' => $arActions, 'data' => $arLead, 'editable' => !$arLead['EDIT'] ? $arColumns : true, 'columns' => array('LEAD_SUMMARY' => CCrmViewHelper::RenderInfo($arLead['PATH_TO_LEAD_SHOW'], isset($arLead['TITLE']) ? $arLead['TITLE'] : '[' . $arLead['ID'] . ']', $arLead['LEAD_SOURCE_NAME'], '_self'), 'ACTIVITY_ID' => CCrmViewHelper::RenderNearestActivity(array('ENTITY_TYPE_NAME' => CCrmOwnerType::ResolveName(CCrmOwnerType::Lead), 'ENTITY_ID' => $arLead['ID'], 'GRID_MANAGER_ID' => $gridManagerID, 'ACTIVITY_ID' => isset($arLead['~ACTIVITY_ID']) ? intval($arLead['~ACTIVITY_ID']) : 0, 'ACTIVITY_SUBJECT' => isset($arLead['~ACTIVITY_SUBJECT']) ? $arLead['~ACTIVITY_SUBJECT'] : '', 'ACTIVITY_TIME' => isset($arLead['~ACTIVITY_TIME']) ? $arLead['~ACTIVITY_TIME'] : '', 'ACTIVITY_EXPIRED' => isset($arLead['~ACTIVITY_EXPIRED']) ? $arLead['~ACTIVITY_EXPIRED'] : false, 'MENU_ITEMS' => $arActivityMenuItems)), 'COMMENTS' => htmlspecialcharsback($arLead['COMMENTS']), 'ADDRESS' => nl2br($arLead['ADDRESS']), 'ASSIGNED_BY' => $arLead['~ASSIGNED_BY'] > 0 ? '<a href="' . $arLead['PATH_TO_USER_PROFILE'] . '" id="balloon_' . $arResult['GRID_ID'] . '_' . $arLead['ID'] . '">' . $arLead['ASSIGNED_BY'] . '</a>' . '<script type="text/javascript">BX.tooltip(' . $arLead['~ASSIGNED_BY'] . ', "balloon_' . $arResult['GRID_ID'] . '_' . $arLead['ID'] . '", "");</script>' : '', 'STATUS_DESCRIPTION' => nl2br($arLead['STATUS_DESCRIPTION']), 'SOURCE_DESCRIPTION' => nl2br($arLead['SOURCE_DESCRIPTION']), 'DATE_CREATE' => '<nobr>' . FormatDate('SHORT', MakeTimeStamp($arLead['DATE_CREATE'])) . '</nobr>', 'DATE_MODIFY' => '<nobr>' . FormatDate('SHORT', MakeTimeStamp($arLead['DATE_MODIFY'])) . '</nobr>', 'SUM' => '<nobr>' . $arLead['FORMATTED_OPPORTUNITY'] . '</nobr>', 'OPPORTUNITY' => '<nobr>' . $arLead['~OPPORTUNITY'] . '</nobr>', 'CURRENCY_ID' => CCrmCurrency::GetCurrencyName($arLead['~CURRENCY_ID']), 'PRODUCT_ID' => isset($arLead['PRODUCT_ROWS']) ? htmlspecialcharsbx(CCrmProductRow::RowsToString($arLead['PRODUCT_ROWS'])) : '', 'STATUS_ID' => CCrmViewHelper::RenderLeadStatusControl(array('PREFIX' => "{$arResult['GRID_ID']}_PROGRESS_BAR_", 'ENTITY_ID' => $arLead['~ID'], 'CURRENT_ID' => $arLead['~STATUS_ID'], 'SERVICE_URL' => '/bitrix/components/bitrix/crm.lead.list/list.ajax.php', 'LEAD_CONVERT_URL' => $arLead['PATH_TO_LEAD_CONVERT'], 'READ_ONLY' => !(isset($arLead['EDIT']) && $arLead['EDIT'] === true))), 'SOURCE_ID' => $arLead['LEAD_SOURCE_NAME'], 'CREATED_BY' => $arLead['~CREATED_BY'] > 0 ? '<a href="' . $arLead['PATH_TO_USER_CREATOR'] . '" id="balloon_' . $arResult['GRID_ID'] . '_' . $arLead['ID'] . '">' . $arLead['CREATED_BY_FORMATTED_NAME'] . '</a>' . '<script type="text/javascript">BX.tooltip(' . $arLead['~CREATED_BY'] . ', "balloon_' . $arResult['GRID_ID'] . '_' . $arLead['ID'] . '", "");</script>' : '', 'MODIFY_BY' => $arLead['~MODIFY_BY'] > 0 ? '<a href="' . $arLead['PATH_TO_USER_MODIFIER'] . '" id="balloon_' . $arResult['GRID_ID'] . '_' . $arLead['ID'] . '">' . $arLead['MODIFY_BY_FORMATTED_NAME'] . '</a>' . '<script type="text/javascript">BX.tooltip(' . $arLead['~MODIFY_BY'] . ', "balloon_' . $arResult['GRID_ID'] . '_' . $arLead['ID'] . '", "");</script>' : '') + CCrmViewHelper::RenderListMultiFields($arLead, "LEAD_{$arLead['ID']}_", array('ENABLE_SIP' => true, 'SIP_PARAMS' => array('ENTITY_TYPE' => 'CRM_' . CCrmOwnerType::LeadName, 'ENTITY_ID' => $arLead['ID']))) + $arResult['LEAD_UF'][$sKey]); if (isset($arLead['~BIRTHDATE'])) { $resultItem['columns']['BIRTHDATE'] = '<nobr>' . FormatDate('SHORT', MakeTimeStamp($arLead['~BIRTHDATE'])) . '</nobr>'; } $userActivityID = isset($arLead['~ACTIVITY_ID']) ? intval($arLead['~ACTIVITY_ID']) : 0; $commonActivityID = isset($arLead['~C_ACTIVITY_ID']) ? intval($arLead['~C_ACTIVITY_ID']) : 0; if ($userActivityID > 0) { $resultItem['columns']['ACTIVITY_ID'] = CCrmViewHelper::RenderNearestActivity(array('ENTITY_TYPE_NAME' => CCrmOwnerType::ResolveName(CCrmOwnerType::Lead), 'ENTITY_ID' => $arLead['~ID'], 'ENTITY_RESPONSIBLE_ID' => $arLead['~ASSIGNED_BY'], 'GRID_MANAGER_ID' => $gridManagerID, 'ACTIVITY_ID' => $userActivityID, 'ACTIVITY_SUBJECT' => isset($arLead['~ACTIVITY_SUBJECT']) ? $arLead['~ACTIVITY_SUBJECT'] : '', 'ACTIVITY_TIME' => isset($arLead['~ACTIVITY_TIME']) ? $arLead['~ACTIVITY_TIME'] : '', 'ACTIVITY_EXPIRED' => isset($arLead['~ACTIVITY_EXPIRED']) ? $arLead['~ACTIVITY_EXPIRED'] : '', 'ALLOW_EDIT' => $arLead['EDIT'], 'MENU_ITEMS' => $arActivityMenuItems)); $counterData = array('CURRENT_USER_ID' => $currentUserID, 'ENTITY' => $arLead, 'ACTIVITY' => array('RESPONSIBLE_ID' => $currentUserID, 'TIME' => isset($arLead['~ACTIVITY_TIME']) ? $arLead['~ACTIVITY_TIME'] : '', 'IS_CURRENT_DAY' => isset($arLead['~ACTIVITY_IS_CURRENT_DAY']) ? $arLead['~ACTIVITY_IS_CURRENT_DAY'] : false)); if (CCrmUserCounter::IsReckoned(CCrmUserCounter::CurrentLeadActivies, $counterData)) { $resultItem['columnClasses'] = array('ACTIVITY_ID' => 'crm-list-deal-today'); } } elseif ($commonActivityID > 0) { $resultItem['columns']['ACTIVITY_ID'] = CCrmViewHelper::RenderNearestActivity(array('ENTITY_TYPE_NAME' => CCrmOwnerType::ResolveName(CCrmOwnerType::Lead), 'ENTITY_ID' => $arLead['~ID'], 'ENTITY_RESPONSIBLE_ID' => $arLead['~ASSIGNED_BY'], 'GRID_MANAGER_ID' => $gridManagerID, 'ACTIVITY_ID' => $commonActivityID, 'ACTIVITY_SUBJECT' => isset($arLead['~C_ACTIVITY_SUBJECT']) ? $arLead['~C_ACTIVITY_SUBJECT'] : '', 'ACTIVITY_TIME' => isset($arLead['~C_ACTIVITY_TIME']) ? $arLead['~C_ACTIVITY_TIME'] : '', 'ACTIVITY_RESPONSIBLE_ID' => isset($arLead['~C_ACTIVITY_RESP_ID']) ? intval($arLead['~C_ACTIVITY_RESP_ID']) : 0, 'ACTIVITY_RESPONSIBLE_LOGIN' => isset($arLead['~C_ACTIVITY_RESP_LOGIN']) ? $arLead['~C_ACTIVITY_RESP_LOGIN'] : '', 'ACTIVITY_RESPONSIBLE_NAME' => isset($arLead['~C_ACTIVITY_RESP_NAME']) ? $arLead['~C_ACTIVITY_RESP_NAME'] : '', 'ACTIVITY_RESPONSIBLE_LAST_NAME' => isset($arLead['~C_ACTIVITY_RESP_LAST_NAME']) ? $arLead['~C_ACTIVITY_RESP_LAST_NAME'] : '', 'ACTIVITY_RESPONSIBLE_SECOND_NAME' => isset($arLead['~C_ACTIVITY_RESP_SECOND_NAME']) ? $arLead['~C_ACTIVITY_RESP_SECOND_NAME'] : '', 'NAME_TEMPLATE' => $arParams['NAME_TEMPLATE'], 'PATH_TO_USER_PROFILE' => $arParams['PATH_TO_USER_PROFILE'], 'ALLOW_EDIT' => $arLead['EDIT'], 'MENU_ITEMS' => $arActivityMenuItems)); } else { $resultItem['columns']['ACTIVITY_ID'] = CCrmViewHelper::RenderNearestActivity(array('ENTITY_TYPE_NAME' => CCrmOwnerType::ResolveName(CCrmOwnerType::Lead), 'ENTITY_ID' => $arLead['~ID'], 'ENTITY_RESPONSIBLE_ID' => $arLead['~ASSIGNED_BY'], 'GRID_MANAGER_ID' => $gridManagerID, 'ALLOW_EDIT' => $arLead['EDIT'], 'MENU_ITEMS' => $arActivityMenuItems)); $counterData = array('CURRENT_USER_ID' => $currentUserID, 'ENTITY' => $arLead); if (CCrmUserCounter::IsReckoned(CCrmUserCounter::CurrentLeadActivies, $counterData)) { $resultItem['columnClasses'] = array('ACTIVITY_ID' => 'crm-list-enitity-action-need'); } } $arResult['GRID_DATA'][] =& $resultItem; unset($resultItem); } $APPLICATION->IncludeComponent('bitrix:main.user.link', '', array('AJAX_ONLY' => 'Y'), false, array('HIDE_ICONS' => 'Y')); $isEditable = $arResult['PERMS']['WRITE'] && !$arResult['INTERNAL']; $actionHtml = ''; if ($isEditable) { // Setup STATUS_ID --> $statuses = '<div id="ACTION_STATUS_WRAPPER" style="display:none;"><select name="ACTION_STATUS_ID" size="1">'; $statuses .= '<option value="" title="' . GetMessage('CRM_STATUS_INIT') . '" selected="selected">' . GetMessage('CRM_STATUS_INIT') . '</option>';