/** * @return string|boolean */ protected function preparePermissionSql() { if ($this->permissionSql !== null) { return $this->permissionSql; } if (\CCrmPerms::IsAdmin($this->userID)) { $this->permissionSql = ''; } else { $this->permissionSql = \CCrmPerms::BuildSql(\CCrmOwnerType::DealName, '', 'READ', array('RAW_QUERY' => true, 'PERMS' => \CCrmPerms::GetUserPermissions($this->userID))); } return $this->permissionSql; }
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 function setUserID($userID) { if (!is_integer($userID)) { $userID = intval($userID); } $userID = max($userID, 0); if ($this->userID === $userID) { return; } $this->userID = $userID; $this->userPermissions = null; $this->userName = null; $this->userIsAdmin = \CCrmPerms::IsAdmin($userID); }
$filterFieldInfo = array('typeName' => 'USER', 'id' => $filterID, 'params' => array('data' => array('paramName' => "{$filterID}", 'elementId' => "{$prefix}_{$filterID}"), 'search' => array('paramName' => "{$filterID}_name", 'elementId' => "{$prefix}_{$filterID}_NAME"))); $gridManagerCfg['filterFields'][] = $filterFieldInfo; } } $arResult['GRID_DATA'] = array(); foreach ($arResult['EVENT'] as $arEvent) { $arEvent['FILE_HTML'] = ""; if (!empty($arEvent['FILES'])) { $arEvent['FILE_HTML'] = '<div class="event-detail-files"><label class="event-detail-files-title">' . GetMessage('CRM_EVENT_TABLE_FILES') . ':</label><div class="event-detail-files-list">'; foreach ($arEvent['FILES'] as $key => $value) { $arEvent['FILE_HTML'] .= '<div class="event-detail-file"><span class="event-detail-file-number">' . $key . '.</span><span class="event-detail-file-info"><a href="' . htmlspecialcharsbx($value['PATH']) . '" target="_blank" class="event-detail-file-link">' . htmlspecialcharsbx($value['NAME']) . '</a><span class="event-detail-file-size">(' . htmlspecialcharsbx($value['SIZE']) . ')</span></span></div>'; } $arEvent['FILE_HTML'] .= '</div></div>'; } $arActions = array(); if (CCrmPerms::IsAdmin() || $arEvent['CREATED_BY_ID'] == CCrmPerms::GetCurrentUserID() && $arEvent['EVENT_TYPE'] == 0) { $arActions[] = array('ICONCLASS' => 'delete', 'TITLE' => GetMessage('CRM_EVENT_DELETE_TITLE'), 'TEXT' => GetMessage('CRM_EVENT_DELETE'), 'ONCLICK' => "BX.CrmEventListManager.items[\"{$managerID}\"].deleteItem(\"{$arEvent['ID']}\")"); } $eventColor = ''; if ($arEvent['EVENT_TYPE'] == '0') { $eventColor = 'color: #208c0b'; } elseif ($arEvent['EVENT_TYPE'] == '2') { $eventColor = 'color: #9c8000'; } $arColumns = array('CREATED_BY_FULL_NAME' => $arEvent['CREATED_BY_FULL_NAME'] == '' ? '' : '<a href="' . $arEvent['CREATED_BY_LINK'] . '" id="balloon_' . $arResult['GRID_ID'] . '_' . $arEvent['ID'] . '">' . $arEvent['CREATED_BY_FULL_NAME'] . '</a>' . '<script type="text/javascript">BX.tooltip(' . $arEvent['CREATED_BY_ID'] . ', "balloon_' . $arResult['GRID_ID'] . '_' . $arEvent['ID'] . '", "");</script>', 'EVENT_NAME' => '<span style="' . $eventColor . '">' . $arEvent['EVENT_NAME'] . '</span>', 'EVENT_DESC' => $arEvent['EVENT_DESC'] . $arEvent['FILE_HTML'], 'DATE_CREATE' => FormatDate('x', MakeTimeStamp($arEvent['DATE_CREATE']), time() + CTimeZone::GetOffset())); if ($arResult['EVENT_ENTITY_LINK'] == 'Y') { $arColumns['ENTITY_TYPE'] = !empty($arEvent['ENTITY_TYPE']) ? GetMessage('CRM_EVENT_ENTITY_TYPE_' . $arEvent['ENTITY_TYPE']) : ''; $arColumns['ENTITY_TITLE'] = !empty($arEvent['ENTITY_TITLE']) ? '<a href="' . $arEvent['ENTITY_LINK'] . '" id="balloon_' . $arResult['GRID_ID'] . '_I_' . $arEvent['ID'] . '">' . $arEvent['ENTITY_TITLE'] . '</a>' . '<script type="text/javascript">BX.tooltip("' . $arEvent['ENTITY_TYPE'] . '_' . $arEvent['ENTITY_ID'] . '", "balloon_' . $arResult['GRID_ID'] . '_I_' . $arEvent['ID'] . '", "/bitrix/components/bitrix/crm.' . strtolower($arEvent['ENTITY_TYPE']) . '.show/card.ajax.php", "crm_balloon' . ($arEvent['ENTITY_TYPE'] == 'LEAD' || $arEvent['ENTITY_TYPE'] == 'DEAL' || $arEvent['ENTITY_TYPE'] == 'QUOTE' ? '_no_photo' : '_' . strtolower($arEvent['ENTITY_TYPE'])) . '", true);</script>' : ''; } else { unset($arEvent['ENTITY_TYPE']); unset($arEvent['ENTITY_TITLE']);
$arBP['PATH_TO_BIZPROC_START'] = CHTTP::urlAddParams(CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_QUOTE_SHOW'], array( 'quote_id' => $arResult['QUOTE'][$iQuoteId]['ID'] )), array( 'workflow_template_id' => $arBP['ID'], 'bizproc_start' => 1, 'sessid' => bitrix_sessid(), 'CRM_QUOTE_SHOW_V12_active_tab' => 'tab_bizproc', 'backurl' => $arParams['PATH_TO_QUOTE_LIST']) ); $arResult['QUOTE'][$iQuoteId]['BIZPROC_LIST'][] = $arBP; }*/ } } if (!$isInExportMode) { $arResult['NEED_FOR_REBUILD_QUOTE_ATTRS'] = false; if (!$bInternal && CCrmPerms::IsAdmin() && COption::GetOptionString('crm', '~CRM_REBUILD_QUOTE_ATTR', 'N') === 'Y') { $arResult['PATH_TO_PRM_LIST'] = CComponentEngine::MakePathFromTemplate(COption::GetOptionString('crm', 'path_to_perm_list')); $arResult['NEED_FOR_REBUILD_QUOTE_ATTRS'] = true; } $this->IncludeComponentTemplate(); include_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/components/bitrix/crm.quote/include/nav.php'; return $arResult['ROWS_COUNT']; } else { $APPLICATION->RestartBuffer(); // hack. any '.default' customized template should contain 'excel' page $this->__templateName = '.default'; if ($sExportType === 'carddav') { Header('Content-Type: text/vcard'); } elseif ($sExportType === 'csv') { Header('Content-Type: text/csv'); Header('Content-Disposition: attachment;filename=quotes.csv');
} if ($err_msg == "" && !CModule::IncludeModule('crm')) { $err_msg = "failure\n" . GetMessage('CRM_MODULE_NOT_INSTALLED'); } if ($err_msg == "" && !CModule::IncludeModule('catalog')) { $err_msg = "failure\n" . GetMessage('CATALOG_MODULE_NOT_INSTALLED'); } if ($err_msg == "" && !CModule::IncludeModule('sale')) { $err_msg = "failure\n" . GetMessage('SALE_MODULE_NOT_INSTALLED'); } $userPerms = CCrmPerms::GetCurrentUserPermissions(); if ($err_msg == "" && !CCrmPerms::IsAuthorized()) { $err_msg = "failure.\n" . GetMessage('CRM_EXCH1C_AUTH_ERROR'); } $crmPerms = new CCrmPerms($GLOBALS["USER"]->GetID()); if ($err_msg == "" && !CCrmPerms::IsAdmin() && !$crmPerms->HavePerm('CONFIG', BX_CRM_PERM_CONFIG, 'WRITE')) { $err_msg = "failure.\n" . GetMessage('CRM_EXCH1C_PERMISSION_DENIED'); } $type = isset($_REQUEST["type"]) ? $_REQUEST["type"] : ""; if ($err_msg == "" && !in_array($type, array("sale", "catalog", "get_catalog"), true)) { $err_msg = "failure.\n" . GetMessage('CRM_EXCH1C_UNKNOWN_COMMAND_TYPE'); } if ($err_msg != "") { $APPLICATION->RestartBuffer(); echo $err_msg; return; } function OnCrmIblockXmlIdMiss(&$arFields) { global $APPLICATION; $APPLICATION->throwException(GetMessage('CRM_EXCH1C_UNKNOWN_XML_ID'));
public static function WriteFileToResponse($ownerTypeID, $ownerID, $fieldName, $fileID, &$errors, $options = array()) { $ownerTypeID = intval($ownerTypeID); $ownerTypeName = CCrmOwnerType::ResolveName($ownerTypeID); $ownerID = intval($ownerID); $fieldName = strval($fieldName); $fileID = intval($fileID); $options = is_array($options) ? $options : array(); if (!CCrmOwnerType::IsDefined($ownerTypeID) || $ownerID <= 0 || $fieldName === '' || $fileID <= 0) { $errors[] = 'File not found'; return false; } $authToken = isset($options['oauth_token']) ? strval($options['oauth_token']) : ''; if ($authToken !== '') { $authData = array(); if (!(CModule::IncludeModule('rest') && CRestUtil::checkAuth($authToken, CCrmRestService::SCOPE_NAME, $authData) && CRestUtil::makeAuth($authData))) { $errors[] = 'Access denied.'; return false; } } if (!CCrmPerms::IsAdmin()) { $userPermissions = CCrmPerms::GetCurrentUserPermissions(); $attrs = $userPermissions->GetEntityAttr($ownerTypeName, $ownerID); if ($userPermissions->HavePerm($ownerTypeName, BX_CRM_PERM_NONE, 'READ') || !$userPermissions->CheckEnityAccess($ownerTypeName, 'READ', isset($attrs[$ownerID]) ? $attrs[$ownerID] : array())) { $errors[] = 'Access denied.'; return false; } } $isDynamic = isset($options['is_dynamic']) ? (bool) $options['is_dynamic'] : true; if ($isDynamic) { $userFields = $GLOBALS['USER_FIELD_MANAGER']->GetUserFields(CCrmOwnerType::ResolveUserFieldEntityID($ownerTypeID), $ownerID, LANGUAGE_ID); $field = is_array($userFields) && isset($userFields[$fieldName]) ? $userFields[$fieldName] : null; if (!(is_array($field) && $field['USER_TYPE_ID'] === 'file')) { $errors[] = 'File not found'; return false; } $fileIDs = isset($field['VALUE']) ? is_array($field['VALUE']) ? $field['VALUE'] : array($field['VALUE']) : array(); //The 'strict' flag must be 'false'. In MULTIPLE mode value is an array of integers. In SIGLE mode value is a string. if (!in_array($fileID, $fileIDs, false)) { $errors[] = 'File not found'; return false; } return self::InnerWriteFileToResponse($fileID, $errors, $options); } else { $fieldsInfo = isset($options['fields_info']) ? $options['fields_info'] : null; if (!is_array($fieldsInfo)) { $fieldsInfo = CCrmOwnerType::GetFieldsInfo($ownerTypeID); } $fieldInfo = is_array($fieldsInfo) && isset($fieldsInfo[$fieldName]) ? $fieldsInfo[$fieldName] : array(); $fieldInfoType = isset($fieldInfo['TYPE']) ? $fieldInfo['TYPE'] : ''; if ($fieldInfoType !== 'file') { $errors[] = 'File not found'; return false; } if ($fileID !== CCrmOwnerType::GetFieldIntValue($ownerTypeID, $ownerID, $fieldName)) { $errors[] = 'File not found'; return false; } return self::InnerWriteFileToResponse($fileID, $errors, $options); } }
public function Prepare($arOrder = array(), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array(), $arOptions = array()) { global $DB; if (!is_array($arOrder)) { $arOrder = array(); } if (!is_array($arFilter)) { $arFilter = array(); } // ID must present in select (If select is empty it will be filled by CSqlUtil::PrepareSql) if (!is_array($arSelectFields)) { $arSelectFields = array(); } if (count($arSelectFields) > 0 && !in_array('*', $arSelectFields, true) && !in_array('ID', $arSelectFields, true)) { $arSelectFields[] = 'ID'; } if (!is_array($arOptions)) { $arOptions = array(); } $arOptions['DB_TYPE'] = $this->dbType; $isExternalContext = isset($arOptions['IS_EXTERNAL_CONTEXT']) && ($arOptions['IS_EXTERNAL_CONTEXT'] === true || $arOptions['IS_EXTERNAL_CONTEXT'] === 'Y'); if ($isExternalContext) { // Sanitizing of filter data if (isset($arFilter['__JOINS'])) { unset($arFilter['__JOINS']); } if (isset($arFilter['CHECK_PERMISSIONS'])) { unset($arFilter['CHECK_PERMISSIONS']); } } // Processing of special fields if ($this->fmEntityID !== '' && isset($arFilter['FM'])) { CCrmFieldMulti::PrepareExternalFilter($arFilter, array('ENTITY_ID' => $this->fmEntityID, 'MASTER_ALIAS' => $this->tableAlias, 'MASTER_IDENTITY' => 'ID')); } // Processing user fields $ufSelectSql = null; $ufFilterSql = null; if ($this->ufEntityID !== '') { $ufSelectSql = new CUserTypeSQL(); $ufSelectSql->SetEntity($this->ufEntityID, $this->tableAlias . '.ID'); $ufSelectSql->SetSelect($arSelectFields); $ufSelectSql->SetOrder($arOrder); $ufFilterSql = new CUserTypeSQL(); $ufFilterSql->SetEntity($this->ufEntityID, $this->tableAlias . '.ID'); $ufFilterSql->SetFilter($arFilter); $userType = new CCrmUserType($GLOBALS['USER_FIELD_MANAGER'], $this->ufEntityID); $userType->ListPrepareFilter($arFilter); } $this->sqlData = CSqlUtil::PrepareSql($this->fields, $arOrder, $arFilter, $arGroupBy, $arSelectFields, $arOptions); $this->sqlData['SELECT'] = str_replace('%%_DISTINCT_%% ', '', $this->sqlData['SELECT']); // 'Joins' implement custom filter logic $joins = array(); if (isset($arFilter['__JOINS'])) { if (is_array($arFilter['__JOINS'])) { $joins = $arFilter['__JOINS']; } unset($arFilter['__JOINS']); } if (count($joins) > 0) { foreach ($joins as &$join) { // INNER JOINs will be added tostart $this->Add2SqlData($join['SQL'], 'FROM', !isset($join['TYPE']) || $join['TYPE'] === 'INNER', isset($join['REPLACE']) ? $join['REPLACE'] : ''); } unset($join); } // Apply user permission logic if (count($this->permissionCallback) > 0) { if ((!array_key_exists('CHECK_PERMISSIONS', $arFilter) || $arFilter['CHECK_PERMISSIONS'] !== 'N') && !CCrmPerms::IsAdmin()) { $arPermType = !isset($arFilter['PERMISSION']) ? 'READ' : (is_array($arFilter['PERMISSION']) ? $arFilter['PERMISSION'] : array($arFilter['PERMISSION'])); $permissionSql = call_user_func_array($this->permissionCallback, array($this->tableAlias, $arPermType, $arOptions)); if (is_bool($permissionSql) && !$permissionSql) { $CDBResult = new CDBResult(); $CDBResult->InitFromArray(array()); return $CDBResult; } if ($permissionSql !== '') { $sqlType = isset($arOptions['PERMISSION_SQL_TYPE']) && $arOptions['PERMISSION_SQL_TYPE'] === 'FROM' ? 'FROM' : 'WHERE'; $this->Add2SqlData($permissionSql, $sqlType, $sqlType === 'FROM'); } } } // Apply custom SQL logic if (count($this->afterPrepareSqlCallback) > 0) { $arUserSql = call_user_func_array($this->afterPrepareSqlCallback, array($this, $arOrder, $arFilter, $arGroupBy, $arSelectFields)); if (is_array($arUserSql)) { if (isset($arUserSql['FROM'])) { $this->Add2SqlData($arUserSql['FROM'], 'FROM'); } if (isset($arUserSql['WHERE'])) { $this->Add2SqlData($arUserSql['WHERE'], 'WHERE'); } } } if ($ufSelectSql) { // Adding user fields to SELECT $this->Add2SqlData($ufSelectSql->GetSelect(), 'SELECT'); // Adding user fields to ORDER BY if (is_array($arOrder)) { foreach ($arOrder as $orderKey => $order) { $orderSql = $ufSelectSql->GetOrder($orderKey); if (!is_string($orderSql) || $orderSql === '') { continue; } $order = strtoupper($order); if ($order !== 'ASC' && $order !== 'DESC') { $order = 'ASC'; } $this->Add2SqlData("{$orderSql} {$order}", 'ORDERBY'); } } // Adding user fields to joins $this->Add2SqlData($ufSelectSql->GetJoin($this->tableAlias . '.ID'), 'FROM'); } if ($ufFilterSql) { // Adding user fields to WHERE $ufWhere = $ufFilterSql->GetFilter(); if ($ufWhere !== '') { $ufSql = $this->tableAlias . '.ID IN (SELECT ' . $this->tableAlias . '.ID FROM ' . $this->tableName . ' ' . $this->tableAlias . ' ' . $ufFilterSql->GetJoin($this->tableAlias . '.ID') . ' WHERE ' . $ufWhere . ')'; // Adding user fields to joins $this->Add2SqlData($ufSql, 'WHERE'); } } //Get count only if (is_array($arGroupBy) && count($arGroupBy) == 0) { return $this->GetRowCount(RestrictionManager::getSqlRestriction()->getRowCountThreshold()); } $sql = 'SELECT ' . $this->sqlData['SELECT'] . ' FROM ' . $this->tableName . ' ' . $this->tableAlias; if (isset($this->sqlData['FROM'][0])) { $sql .= ' ' . $this->sqlData['FROM']; } if (isset($this->sqlData['WHERE'][0])) { $sql .= ' WHERE ' . $this->sqlData['WHERE']; } if (isset($this->sqlData['GROUPBY'][0])) { $sql .= ' GROUP BY ' . $this->sqlData['GROUPBY']; } if (isset($this->sqlData['ORDERBY'][0])) { $sql .= ' ORDER BY ' . $this->sqlData['ORDERBY']; } $enableNavigation = is_array($arNavStartParams); $top = $enableNavigation && isset($arNavStartParams['nTopCount']) ? intval($arNavStartParams['nTopCount']) : 0; if ($enableNavigation && $top <= 0) { $dbRes = new CDBResult(); if ($this->ufEntityID !== '') { $dbRes->SetUserFields($GLOBALS['USER_FIELD_MANAGER']->GetUserFields($this->ufEntityID)); } elseif (!empty($this->userFields)) { $dbRes->SetUserFields($this->userFields); } //Trace('CCrmEntityListBuilder::Prepare, SQL', $sql, 1); $cnt = $this->GetRowCount(RestrictionManager::getSqlRestriction()->getRowCountThreshold()); $dbRes->NavQuery($sql, $cnt, $arNavStartParams); } else { $limit = $top; $offset = 0; if (isset($arOptions['QUERY_OPTIONS']) && is_array($arOptions['QUERY_OPTIONS'])) { $queryOptions = $arOptions['QUERY_OPTIONS']; $limit = isset($queryOptions['LIMIT']) ? (int) $queryOptions['LIMIT'] : 0; $offset = isset($queryOptions['OFFSET']) ? (int) $queryOptions['OFFSET'] : 0; } $threshold = RestrictionManager::getSqlRestriction()->getRowCountThreshold(); if ($threshold > 0 && $threshold < $limit + $offset) { $delta = $threshold - $offset; if ($delta <= 0) { $obRes = new CDBResult(); $obRes->InitFromArray(array()); return $obRes; } $limit = $delta; } if ($limit > 0) { $sql = Main\Application::getConnection()->getSqlHelper()->getTopSql($sql, $limit, $offset); } //Trace('CCrmEntityListBuilder::Prepare, SQL', $sql, 1); $dbRes = $DB->Query($sql, false, 'File: ' . __FILE__ . '<br/>Line: ' . __LINE__); if ($this->ufEntityID !== '') { $dbRes->SetUserFields($GLOBALS['USER_FIELD_MANAGER']->GetUserFields($this->ufEntityID)); } elseif (!empty($this->userFields)) { $dbRes->SetUserFields($this->userFields); } } return $dbRes; }
public static function BuildPermSql($aliasPrefix = 'A', $permType = 'READ', $arOptions = array()) { if (!is_array($arOptions)) { $arOptions = array(); } $userPermissions = isset($arOptions['PERMS']) ? $arOptions['PERMS'] : null; $userID = $userPermissions !== null && is_object($userPermissions) ? $userPermissions->GetUserID() : 0; if (CCrmPerms::IsAdmin($userID)) { return ''; } if (!CCrmPerms::IsAccessEnabled($userPermissions)) { // User does not have permissions at all. return false; } $entitiesSql = array(); $permOptions = array_merge(array('IDENTITY_COLUMN' => 'OWNER_ID'), $arOptions); $entitiesSql[strval(CCrmOwnerType::Lead)] = CCrmLead::BuildPermSql($aliasPrefix, $permType, $permOptions); $entitiesSql[strval(CCrmOwnerType::Deal)] = CCrmDeal::BuildPermSql($aliasPrefix, $permType, $permOptions); $entitiesSql[strval(CCrmOwnerType::Contact)] = CCrmContact::BuildPermSql($aliasPrefix, $permType, $permOptions); $entitiesSql[strval(CCrmOwnerType::Company)] = CCrmCompany::BuildPermSql($aliasPrefix, $permType, $permOptions); $entitiesSql[strval(CCrmOwnerType::Invoice)] = CCrmInvoice::BuildPermSql($aliasPrefix, $permType, $permOptions); foreach ($entitiesSql as $entityTypeID => $entitySql) { if (!is_string($entitySql)) { //If $entityPermSql is not string - acces denied. Clear permission SQL and related records will be ignored. unset($entitiesSql[$entityTypeID]); continue; } if ($entitySql !== '') { $entitiesSql[$entityTypeID] = '(' . $aliasPrefix . '.OWNER_TYPE_ID = ' . $entityTypeID . ' AND (' . $entitySql . ') )'; } else { // No permissions check - fetch all related records $entitiesSql[$entityTypeID] = '(' . $aliasPrefix . '.OWNER_TYPE_ID = ' . $entityTypeID . ')'; } } //If $entitiesSql is empty - user does not have permissions at all. if (empty($entitiesSql)) { return false; } $userID = CCrmSecurityHelper::GetCurrentUserID(); if ($userID > 0) { //Allow responsible user to view activity without permissions check. return $aliasPrefix . '.RESPONSIBLE_ID = ' . $userID . ' OR ' . implode(' OR ', $entitiesSql); } else { return implode(' OR ', $entitiesSql); } }
<?php if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) { die; } global $APPLICATION; use Bitrix\Crm\BirthdayReminder; if (!CModule::IncludeModule('crm')) { ShowError(GetMessage('CRM_MODULE_NOT_INSTALLED')); return; } $userID = CCrmSecurityHelper::GetCurrentUserID(); $isAdminUser = CCrmPerms::IsAdmin($userID); $userPermissions = CCrmPerms::GetUserPermissions($userID); $canReadLead = CCrmLead::CheckReadPermission(0, $userPermissions); $canReadContact = CCrmContact::CheckReadPermission(0, $userPermissions); if (!$canReadLead && !$canReadContact) { ShowError(GetMessage('CRM_PERMISSION_DENIED')); return; } $arResult['USER_ID'] = $userID; $listID = isset($arParams['LIST_ID']) ? $arParams['LIST_ID'] : ''; if ($listID === '') { $listID = uniqid('birthdays_'); } $arResult['LIST_ID'] = $listID; $arResult['ERRORS'] = array(); $arResult['MESSAGES'] = array(); $arParams['NAME_FORMAT'] = isset($arParams['NAME_FORMAT']) ? $arParams['NAME_FORMAT'] : ''; $arResult['NAME_FORMAT'] = $arParams['NAME_FORMAT'] !== '' ? $arParams['NAME_FORMAT'] : \Bitrix\Crm\Format\PersonNameFormatter::getFormat(); $utils = new CComponentUtil();
$navigationIndex = CUserOptions::GetOption('crm.navigation', 'index'); if (is_array($navigationIndex)) { foreach ($navigationIndex as $k => $v) { $pageKey = 'PATH_TO_' . strtoupper("{$k}_{$v}"); $arParams['PATH_TO_' . strtoupper($k) . '_INDEX'] = $arParams['PATH_TO_' . strtoupper("{$k}_{$v}")]; } } //<-- Preparing of URL templates $arResult['ACTIVE_ITEM_ID'] = isset($arParams['ACTIVE_ITEM_ID']) ? $arParams['ACTIVE_ITEM_ID'] : ''; $arResult['ENABLE_SEARCH'] = isset($arParams['ENABLE_SEARCH']) && is_bool($arParams['ENABLE_SEARCH']) ? $arParams['ENABLE_SEARCH'] : true; $arResult['SEARCH_PAGE_URL'] = CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_SEARCH_PAGE']); $arResult['ID'] = isset($arParams['ID']) ? $arParams['ID'] : ''; if ($arResult['ID'] === '') { $arResult['ID'] = 'DEFAULT'; } $isAdmin = CCrmPerms::IsAdmin(); $userPermissions = CCrmPerms::GetCurrentUserPermissions(); // Prepere standard items --> $counter = new CCrmUserCounter(CCrmPerms::GetCurrentUserID(), CCrmUserCounter::CurrentActivies); $stdItems = array('STREAM' => array('ID' => 'STREAM', 'NAME' => GetMessage('CRM_CTRL_PANEL_ITEM_STREAM'), 'TITLE' => GetMessage('CRM_CTRL_PANEL_ITEM_STREAM_TITLE'), 'URL' => CComponentEngine::MakePathFromTemplate(isset($arParams['PATH_TO_STREAM']) ? $arParams['PATH_TO_STREAM'] : '#SITE_DIR#crm/stream/'), 'ICON' => 'feed'), 'MY_ACTIVITY' => array('ID' => 'MY_ACTIVITY', 'NAME' => GetMessage('CRM_CTRL_PANEL_ITEM_MY_ACTIVITY'), 'TITLE' => GetMessage('CRM_CTRL_PANEL_ITEM_MY_ACTIVITY_TITLE'), 'URL' => CComponentEngine::MakePathFromTemplate(isset($arParams['PATH_TO_ACTIVITY_LIST']) ? $arParams['PATH_TO_ACTIVITY_LIST'] : '#SITE_DIR#crm/activity/'), 'COUNTER' => $counter->GetValue(), 'ICON' => 'activity')); if ($isAdmin || !$userPermissions->HavePerm('CONTACT', BX_CRM_PERM_NONE, 'READ')) { $counter = new CCrmUserCounter(CCrmPerms::GetCurrentUserID(), CCrmUserCounter::CurrentContactActivies); $stdItems['CONTACT'] = array('ID' => 'CONTACT', 'NAME' => GetMessage('CRM_CTRL_PANEL_ITEM_CONTACT'), 'TITLE' => GetMessage('CRM_CTRL_PANEL_ITEM_CONTACT_TITLE'), 'URL' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_CONTACT_LIST']), 'ICON' => 'contact', 'COUNTER' => $counter->GetValue($arResult['ACTIVE_ITEM_ID'] === 'CONTACT'), 'ACTIONS' => array(array('ID' => 'CREATE', 'URL' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_CONTACT_EDIT'], array('contact_id' => 0))))); } if ($isAdmin || !$userPermissions->HavePerm('COMPANY', BX_CRM_PERM_NONE, 'READ')) { $counter = new CCrmUserCounter(CCrmPerms::GetCurrentUserID(), CCrmUserCounter::CurrentCompanyActivies); $stdItems['COMPANY'] = array('ID' => 'COMPANY', 'NAME' => GetMessage('CRM_CTRL_PANEL_ITEM_COMPANY'), 'TITLE' => GetMessage('CRM_CTRL_PANEL_ITEM_COMPANY_TITLE'), 'URL' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_COMPANY_LIST']), 'ICON' => 'company', 'COUNTER' => $counter->GetValue($arResult['ACTIVE_ITEM_ID'] === 'COMPANY'), 'ACTIONS' => array(array('ID' => 'CREATE', 'URL' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_COMPANY_EDIT'], array('company_id' => 0))))); } if ($isAdmin || !$userPermissions->HavePerm('DEAL', BX_CRM_PERM_NONE, 'READ')) { $counter = new CCrmUserCounter(CCrmPerms::GetCurrentUserID(), CCrmUserCounter::CurrentDealActivies); $stdItems['DEAL'] = array('ID' => 'DEAL', 'NAME' => GetMessage('CRM_CTRL_PANEL_ITEM_DEAL'), 'TITLE' => GetMessage('CRM_CTRL_PANEL_ITEM_DEAL_TITLE'), 'URL' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_DEAL_INDEX'] !== '' ? $arParams['PATH_TO_DEAL_INDEX'] : $arParams['PATH_TO_DEAL_LIST']), 'ICON' => 'deal', 'COUNTER' => $counter->GetValue($arResult['ACTIVE_ITEM_ID'] === 'DEAL'), 'ACTIONS' => array(array('ID' => 'CREATE', 'URL' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_DEAL_EDIT'], array('deal_id' => 0)))));
$fields['~OWNER_FORMATTED_NAME'] = CUser::FormatName($arParams['NAME_TEMPLATE'], array('LOGIN' => $fields['~OWNER_LOGIN'], 'NAME' => $fields['~OWNER_NAME'], 'SECOND_NAME' => $fields['~OWNER_SECOND_NAME'], 'LAST_NAME' => $fields['~OWNER_LAST_NAME']), true, false); $fields['OWNER_FORMATTED_NAME'] = htmlspecialcharsbx($fields['~OWNER_FORMATTED_NAME']); $fields['~ENTITY_TYPE_NAME'] = isset($fields['~ENTITY_TYPE_ID']) ? CCrmOwnerType::GetDescription($fields['~ENTITY_TYPE_ID']) : ''; $fields['ENTITY_TYPE_NAME'] = htmlspecialcharsbx($fields['~ENTITY_TYPE_NAME']); $fields['~SCOPE_NAME'] = isset($fields['~SCOPE']) ? CCrmMailTemplateScope::GetDescription($fields['~SCOPE']) : ''; $fields['SCOPE_NAME'] = htmlspecialcharsbx($fields['~SCOPE_NAME']); $fields['CAN_EDIT'] = $fields['CAN_DELETE'] = $userID === intval($fields['~OWNER_ID']); $fields['PATH_TO_EDIT'] = $fields['PATH_TO_DELETE'] = ''; if ($fields['CAN_EDIT']) { $fields['PATH_TO_EDIT'] = CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_MAIL_TEMPLATE_EDIT'], array('element_id' => $ID)); } if ($fields['CAN_DELETE']) { $fields['PATH_TO_DELETE'] = CHTTP::urlAddParams(CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_MAIL_TEMPLATE_LIST'], array('element_id' => $ID)), array('action_' . $arResult['GRID_ID'] => 'delete', 'ID' => $ID, 'sessid' => bitrix_sessid())); } $items[] = $fields; $count++; } $arResult['ROWS_COUNT'] = $count; $arResult['ITEMS'] =& $items; $arResult['NEED_FOR_CONVERTING'] = false; if (CCrmPerms::IsAdmin()) { $curPage = $APPLICATION->GetCurPage(); if (COption::GetOptionString('crm', '~CRM_MAIL_TEMPLATE_LIST_CONVERTING', 'N') !== 'Y' && COption::GetOptionString('crm', 'email_from') !== '') { $arResult['NEED_FOR_CONVERTING'] = true; $sessid = bitrix_sessid(); $arResult['CONV_EXEC_URL'] = CHTTP::urlAddParams($curPage, array('conv' => 'exec', 'sessid' => $sessid)); $arResult['CONV_SKIP_URL'] = CHTTP::urlAddParams($curPage, array('conv' => 'skip', 'sessid' => $sessid)); } } $arResult['MESSAGE_VIEW_ID'] = isset($arParams['MESSAGE_VIEW_ID']) ? $arParams['MESSAGE_VIEW_ID'] : ''; $this->IncludeComponentTemplate();
public static function WriteDiskFileToResponse($ownerTypeID, $ownerID, $fileID, &$errors, $options = array()) { $ownerTypeID = (int) $ownerTypeID; $ownerTypeName = CCrmOwnerType::ResolveName($ownerTypeID); $ownerID = (int) $ownerID; $fileID = (int) $fileID; $options = is_array($options) ? $options : array(); if (!CCrmOwnerType::IsDefined($ownerTypeID) || $ownerID <= 0 || $fileID <= 0) { $errors[] = 'Invalid data ownerTypeID = ' . $ownerTypeID . ', ownerID = ' . $ownerID . ', fileID = ' . $fileID; return false; } if ($ownerTypeID !== CCrmOwnerType::Activity) { $errors[] = "The owner type '{$ownerTypeName}' is not supported in current context"; return false; } $authToken = isset($options['oauth_token']) ? $options['oauth_token'] : ''; if ($authToken !== '') { $authData = array(); if (!(CModule::IncludeModule('rest') && CRestUtil::checkAuth($authToken, CCrmRestService::SCOPE_NAME, $authData) && CRestUtil::makeAuth($authData))) { $errors[] = 'Access denied.'; return false; } } if (!CCrmActivity::CheckStorageElementExists($ownerID, CCrmActivityStorageType::Disk, $fileID)) { $errors[] = 'File not found'; return false; } $isPermitted = false; if (CCrmPerms::IsAdmin()) { $isPermitted = true; } else { $userPermissions = CCrmPerms::GetCurrentUserPermissions(); $bindings = CCrmActivity::GetBindings($ownerID); foreach ($bindings as $binding) { if (CCrmAuthorizationHelper::CheckReadPermission($binding['OWNER_TYPE_ID'], $binding['OWNER_ID'], $userPermissions)) { $isPermitted = true; break; } } } if (!$isPermitted) { $errors[] = 'Access denied.'; return false; } Bitrix\Crm\Integration\DiskManager::writeFileToResponse($fileID); return true; }
break; } } $curPage = $APPLICATION->GetCurPage(); $arResult = array('FOLDER' => '', 'URL_TEMPLATES' => array('entity_list' => $curPage, 'role_edit' => $curPage . '?' . $arVariableAliases['mode'] . '=edit' . '&' . $arVariableAliases['role_id'] . '=#role_id#'), 'VARIABLES' => $arVariables, 'ALIASES' => $arVariableAliases); } $arResult['NEED_FOR_REBUILD_COMPANY_ATTRS'] = false; if (CCrmPerms::IsAdmin() && COption::GetOptionString('crm', '~CRM_REBUILD_COMPANY_ATTR', 'N') === 'Y') { $arResult['NEED_FOR_REBUILD_COMPANY_ATTRS'] = true; } $arResult['NEED_FOR_REBUILD_CONTACT_ATTRS'] = false; if (CCrmPerms::IsAdmin() && COption::GetOptionString('crm', '~CRM_REBUILD_CONTACT_ATTR', 'N') === 'Y') { $arResult['NEED_FOR_REBUILD_CONTACT_ATTRS'] = true; } $arResult['NEED_FOR_REBUILD_DEAL_ATTRS'] = false; if (CCrmPerms::IsAdmin() && COption::GetOptionString('crm', '~CRM_REBUILD_DEAL_ATTR', 'N') === 'Y') { $arResult['NEED_FOR_REBUILD_DEAL_ATTRS'] = true; } $arResult['NEED_FOR_REBUILD_LEAD_ATTRS'] = false; if (CCrmPerms::IsAdmin() && COption::GetOptionString('crm', '~CRM_REBUILD_LEAD_ATTR', 'N') === 'Y') { $arResult['NEED_FOR_REBUILD_LEAD_ATTRS'] = true; } $arResult['NEED_FOR_REBUILD_QUOTE_ATTRS'] = false; if (CCrmPerms::IsAdmin() && COption::GetOptionString('crm', '~CRM_REBUILD_QUOTE_ATTR', 'N') === 'Y') { $arResult['NEED_FOR_REBUILD_QUOTE_ATTRS'] = true; } $arResult['NEED_FOR_REBUILD_INVOICE_ATTRS'] = false; if (CCrmPerms::IsAdmin() && COption::GetOptionString('crm', '~CRM_REBUILD_INVOICE_ATTR', 'N') === 'Y') { $arResult['NEED_FOR_REBUILD_INVOICE_ATTRS'] = true; } $this->IncludeComponentTemplate($componentPage);
if ($itemID > 0) { $arResult['OPEN_VIEW_ITEM_ID'] = $itemID; } } elseif (isset($_GET['open_edit'])) { $itemID = intval($_GET['open_edit']); if ($itemID > 0) { $arResult['OPEN_EDIT_ITEM_ID'] = $itemID; } $disableStorageEdit = isset($_GET['disable_storage_edit']) && strtoupper($_GET['disable_storage_edit']) === 'Y'; if ($disableStorageEdit) { $arResult['DISABLE_STORAGE_EDIT'] = true; } } } $arResult['NEED_FOR_CONVERTING_OF_CALENDAR_EVENTS'] = $arResult['NEED_FOR_CONVERTING_OF_TASKS'] = false; if ($arResult['TAB_ID'] === '' && CCrmPerms::IsAdmin()) { $curPage = $APPLICATION->GetCurPage(); //Converting existing calendar events if (COption::GetOptionString('crm', '~CRM_ACTIVITY_LIST_CONVERTING_CALENDAR_EVENTS', 'N') !== 'Y') { if (CCrmActivityConverter::IsCalEventConvertigRequired()) { $arResult['NEED_FOR_CONVERTING_OF_CALENDAR_EVENTS'] = true; $arResult['CAL_EVENT_CONV_EXEC_URL'] = CHTTP::urlAddParams($curPage, array('conv' => 'exec_cal')); $arResult['CAL_EVENT_CONV_SKIP_URL'] = CHTTP::urlAddParams($curPage, array('conv' => 'skip_cal')); } else { COption::SetOptionString('crm', '~CRM_ACTIVITY_LIST_CONVERTING_CALENDAR_EVENTS', 'Y'); } } //Converting existing tasks if (COption::GetOptionString('crm', '~CRM_ACTIVITY_LIST_CONVERTING_OF_TASKS', 'N') !== 'Y') { if (CCrmActivityConverter::IsTaskConvertigRequired()) { $arResult['NEED_FOR_CONVERTING_OF_TASKS'] = true;
$arResult['ACTIVE_TAB'] = $_POST['ACTIVE_TAB']; } $ar = CCrmStatus::GetEntityTypes(); foreach ($ar as $entityId => $arEntityType) { $arResult['HEADERS'][$entityId] = $arEntityType['NAME']; $arResult['ROWS'][$entityId] = array(); } $res = CCrmStatus::GetList(array('SORT' => 'ASC')); while ($ar = $res->Fetch()) { $arResult['ROWS'][$ar['ENTITY_ID']][$ar['ID']] = $ar; } /* * We can add here some elements to status list of own type(s) * TODO: transfer to GetList */ $events = GetModuleEvents("crm", "OnCrmStatusGetList"); while ($arEvent = $events->Fetch()) { $arStatuses = ExecuteModuleEventEx($arEvent); foreach ($arStatuses as $key => $arStatus) { $arResult['ROWS'][$arStatus['ENTITY_ID']][$arStatus['ID']] = $arStatus; } } /**/ $arResult['NEED_FOR_FIX_STATUSES'] = false; if (CCrmPerms::IsAdmin() && COption::GetOptionString('crm', '~CRM_FIX_STATUSES', 'N') === 'Y') { $arResult['NEED_FOR_FIX_STATUSES'] = true; } CUtil::InitJSCore(); $arResult['ENABLE_CONTROL_PANEL'] = isset($arParams['ENABLE_CONTROL_PANEL']) ? $arParams['ENABLE_CONTROL_PANEL'] : true; $this->IncludeComponentTemplate(); $APPLICATION->AddChainItem(GetMessage('CRM_FIELDS_ENTITY_LIST'), $arResult['~ENTITY_LIST_URL']);
/** * @param array $arOrder * @param array $arFilter * @param array $arSelect * @return CDBResult * Obsolete. Always select all record from database. Please use GetListEx instead. */ public static function GetList($arOrder = array('DATE_CREATE' => 'DESC'), $arFilter = array(), $arSelect = array(), $nPageTop = false) { global $DB, $USER_FIELD_MANAGER; // fields $arFields = array('ID' => 'L.ID', 'COMMENTS' => 'L.COMMENTS', 'ADDITIONAL_INFO' => 'L.ADDITIONAL_INFO', 'LOCATION_ID' => 'L.LOCATION_ID', 'TITLE' => 'L.TITLE', 'LEAD_ID' => 'L.LEAD_ID', 'COMPANY_ID' => 'L.COMPANY_ID', 'COMPANY_TITLE' => 'C.TITLE', 'CONTACT_ID' => 'L.CONTACT_ID', 'CONTACT_FULL_NAME' => 'CT.FULL_NAME', 'STAGE_ID' => 'L.STAGE_ID', 'CLOSED' => 'L.CLOSED', 'TYPE_ID' => 'L.TYPE_ID', 'PRODUCT_ID' => 'L.PRODUCT_ID', 'PROBABILITY' => 'L.PROBABILITY', 'OPPORTUNITY' => 'L.OPPORTUNITY', 'TAX_VALUE' => 'L.TAX_VALUE', 'CURRENCY_ID' => 'L.CURRENCY_ID', 'OPPORTUNITY_ACCOUNT' => 'L.OPPORTUNITY_ACCOUNT', 'TAX_VALUE_ACCOUNT' => 'L.TAX_VALUE_ACCOUNT', 'ACCOUNT_CURRENCY_ID' => 'L.ACCOUNT_CURRENCY_ID', 'BEGINDATE' => $DB->DateToCharFunction('L.BEGINDATE'), 'CLOSEDATE' => $DB->DateToCharFunction('L.CLOSEDATE'), 'EVENT_ID' => 'L.EVENT_ID', 'EVENT_DATE' => $DB->DateToCharFunction('L.EVENT_DATE'), 'EVENT_DESCRIPTION' => 'L.EVENT_DESCRIPTION', 'ASSIGNED_BY' => 'L.ASSIGNED_BY_ID', 'ASSIGNED_BY_ID' => 'L.ASSIGNED_BY_ID', 'CREATED_BY' => 'L.CREATED_BY_ID', 'CREATED_BY_ID' => 'L.CREATED_BY_ID', 'MODIFY_BY' => 'L.MODIFY_BY_ID', 'MODIFY_BY_ID' => 'L.MODIFY_BY_ID', 'DATE_CREATE' => $DB->DateToCharFunction('L.DATE_CREATE'), 'DATE_MODIFY' => $DB->DateToCharFunction('L.DATE_MODIFY'), 'OPENED' => 'L.OPENED', 'EXCH_RATE' => 'L.EXCH_RATE', 'ORIGINATOR_ID' => 'L.ORIGINATOR_ID', 'ORIGIN_ID' => 'L.ORIGIN_ID', 'ASSIGNED_BY_LOGIN' => 'U.LOGIN', 'ASSIGNED_BY_NAME' => 'U.NAME', 'ASSIGNED_BY_LAST_NAME' => 'U.LAST_NAME', 'ASSIGNED_BY_SECOND_NAME' => 'U.SECOND_NAME', 'CREATED_BY_LOGIN' => 'U2.LOGIN', 'CREATED_BY_NAME' => 'U2.NAME', 'CREATED_BY_LAST_NAME' => 'U2.LAST_NAME', 'CREATED_BY_SECOND_NAME' => 'U2.SECOND_NAME', 'MODIFY_BY_LOGIN' => 'U3.LOGIN', 'MODIFY_BY_NAME' => 'U3.NAME', 'MODIFY_BY_LAST_NAME' => 'U3.LAST_NAME', 'MODIFY_BY_SECOND_NAME' => 'U3.SECOND_NAME'); $arSqlSelect = array(); $sSqlJoin = ''; if (count($arSelect) == 0) { $arSelect = array_merge(array_keys($arFields), array('UF_*')); } $obQueryWhere = new CSQLWhere(); $arFilterField = $arSelect; foreach ($arFilter as $sKey => $sValue) { $arField = $obQueryWhere->MakeOperation($sKey); $arFilterField[] = $arField['FIELD']; } if (in_array('ASSIGNED_BY_LOGIN', $arFilterField) || in_array('ASSIGNED_BY', $arFilterField)) { $arSelect[] = 'ASSIGNED_BY_LOGIN'; $arSelect[] = 'ASSIGNED_BY_NAME'; $arSelect[] = 'ASSIGNED_BY_LAST_NAME'; $arSelect[] = 'ASSIGNED_BY_SECOND_NAME'; $sSqlJoin .= ' LEFT JOIN b_user U ON L.ASSIGNED_BY_ID = U.ID '; } if (in_array('CREATED_BY_LOGIN', $arFilterField)) { $arSelect[] = 'CREATED_BY'; $arSelect[] = 'CREATED_BY_LOGIN'; $arSelect[] = 'CREATED_BY_NAME'; $arSelect[] = 'CREATED_BY_LAST_NAME'; $arSelect[] = 'CREATED_BY_SECOND_NAME'; $sSqlJoin .= ' LEFT JOIN b_user U2 ON L.CREATED_BY_ID = U2.ID '; } if (in_array('MODIFY_BY_LOGIN', $arFilterField)) { $arSelect[] = 'MODIFY_BY'; $arSelect[] = 'MODIFY_BY_LOGIN'; $arSelect[] = 'MODIFY_BY_NAME'; $arSelect[] = 'MODIFY_BY_LAST_NAME'; $arSelect[] = 'MODIFY_BY_SECOND_NAME'; $sSqlJoin .= ' LEFT JOIN b_user U3 ON L.MODIFY_BY_ID = U3.ID '; } if (in_array('COMPANY_ID', $arFilterField) || in_array('COMPANY_TITLE', $arFilterField)) { $arSelect[] = 'COMPANY_ID'; $arSelect[] = 'COMPANY_TITLE'; $sSqlJoin .= ' LEFT JOIN b_crm_company C ON L.COMPANY_ID = C.ID '; } if (in_array('CONTACT_ID', $arFilterField) || in_array('CONTACT_FULL_NAME', $arFilterField)) { $arSelect[] = 'CONTACT_ID'; $arSelect[] = 'CONTACT_FULL_NAME'; $sSqlJoin .= ' LEFT JOIN b_crm_contact CT ON L.CONTACT_ID = CT.ID '; } foreach ($arSelect as $field) { $field = strtoupper($field); if (array_key_exists($field, $arFields)) { $arSqlSelect[$field] = $arFields[$field] . ($field != '*' ? ' AS ' . $field : ''); } } if (!isset($arSqlSelect['ID'])) { $arSqlSelect['ID'] = $arFields['ID']; } $sSqlSelect = implode(",\n", $arSqlSelect); $obUserFieldsSql = new CUserTypeSQL(); $obUserFieldsSql->SetEntity(self::$sUFEntityID, 'L.ID'); $obUserFieldsSql->SetSelect($arSelect); $obUserFieldsSql->SetFilter($arFilter); $obUserFieldsSql->SetOrder($arOrder); $arSqlSearch = array(); // check permissions $sSqlPerm = ''; if (!CCrmPerms::IsAdmin() && (!array_key_exists('CHECK_PERMISSIONS', $arFilter) || $arFilter['CHECK_PERMISSIONS'] !== 'N')) { $arPermType = array(); if (!isset($arFilter['PERMISSION'])) { $arPermType[] = 'READ'; } else { $arPermType = is_array($arFilter['PERMISSION']) ? $arFilter['PERMISSION'] : array($arFilter['PERMISSION']); } $sSqlPerm = self::BuildPermSql('L', $arPermType); if ($sSqlPerm === false) { $CDBResult = new CDBResult(); $CDBResult->InitFromArray(array()); return $CDBResult; } if (strlen($sSqlPerm) > 0) { $sSqlPerm = ' AND ' . $sSqlPerm; } } // where $arWhereFields = array('ID' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.ID', 'FIELD_TYPE' => 'int', 'JOIN' => false), 'LEAD_ID' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.LEAD_ID', 'FIELD_TYPE' => 'int', 'JOIN' => false), 'CONTACT_ID' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.CONTACT_ID', 'FIELD_TYPE' => 'int', 'JOIN' => false), 'CONTACT_FULL_NAME' => array('TABLE_ALIAS' => 'CT', 'FIELD_NAME' => 'CT.FULL_NAME', 'FIELD_TYPE' => 'string', 'JOIN' => false), 'COMPANY_ID' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.COMPANY_ID', 'FIELD_TYPE' => 'int', 'JOIN' => false), 'COMPANY_TITLE' => array('TABLE_ALIAS' => 'C', 'FIELD_NAME' => 'C.TITLE', 'FIELD_TYPE' => 'string', 'JOIN' => false), 'STATE_ID' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.STATE_ID', 'FIELD_TYPE' => 'string', 'JOIN' => false), 'STAGE_ID' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.STAGE_ID', 'FIELD_TYPE' => 'string', 'JOIN' => false), 'TYPE_ID' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.TYPE_ID', 'FIELD_TYPE' => 'string', 'JOIN' => false), 'PRODUCT_ID' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.PRODUCT_ID', 'FIELD_TYPE' => 'string', 'JOIN' => false), 'CURRENCY_ID' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.CURRENCY_ID', 'FIELD_TYPE' => 'string', 'JOIN' => false), 'OPPORTUNITY' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.OPPORTUNITY', 'FIELD_TYPE' => 'int', 'JOIN' => false), 'TAX_VALUE' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.TAX_VALUE', 'FIELD_TYPE' => 'int', 'JOIN' => false), 'ACCOUNT_CURRENCY_ID' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.ACCOUNT_CURRENCY_ID', 'FIELD_TYPE' => 'string', 'JOIN' => false), 'OPPORTUNITY_ACCOUNT' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.OPPORTUNITY_ACCOUNT', 'FIELD_TYPE' => 'int', 'JOIN' => false), 'TAX_VALUE_ACCOUNT' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.TAX_VALUE_ACCOUNT', 'FIELD_TYPE' => 'int', 'JOIN' => false), 'TITLE' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.TITLE', 'FIELD_TYPE' => 'string', 'JOIN' => false), 'CLOSED' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.CLOSED', 'FIELD_TYPE' => 'string', 'JOIN' => false), 'COMMENTS' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.COMMENTS', 'FIELD_TYPE' => 'string', 'JOIN' => false), 'ADDITIONAL_INFO' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.ADDITIONAL_INFO', 'FIELD_TYPE' => 'string', 'JOIN' => false), 'LOCATION_ID' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.LOCATION_ID', 'FIELD_TYPE' => 'string', 'JOIN' => false), 'DATE_CREATE' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.DATE_CREATE', 'FIELD_TYPE' => 'datetime', 'JOIN' => false), 'BEGINDATE' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.BEGINDATE', 'FIELD_TYPE' => 'datetime', 'JOIN' => false), 'CLOSEDATE' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.CLOSEDATE', 'FIELD_TYPE' => 'datetime', 'JOIN' => false), 'EVENT_DATE' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.EVENT_DATE', 'FIELD_TYPE' => 'datetime', 'JOIN' => false), 'DATE_MODIFY' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.DATE_MODIFY', 'FIELD_TYPE' => 'datetime', 'JOIN' => false), 'PROBABILITY' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.PROBABILITY', 'FIELD_TYPE' => 'int', 'JOIN' => false), 'EVENT_ID' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.EVENT_ID', 'FIELD_TYPE' => 'string', 'JOIN' => false), 'CREATED_BY_ID' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.CREATED_BY_ID', 'FIELD_TYPE' => 'int', 'JOIN' => false), 'ASSIGNED_BY_ID' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.ASSIGNED_BY_ID', 'FIELD_TYPE' => 'int', 'JOIN' => false), 'OPENED' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.OPENED', 'FIELD_TYPE' => 'string', 'JOIN' => false), 'MODIFY_BY_ID' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.MODIFY_BY_ID', 'FIELD_TYPE' => 'int', 'JOIN' => false), 'EXCH_RATE' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.EXCH_RATE', 'FIELD_TYPE' => 'int', 'JOIN' => false), 'ORIGINATOR_ID' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.ORIGINATOR_ID', 'FIELD_TYPE' => 'string', 'JOIN' => false), 'ORIGIN_ID' => array('TABLE_ALIAS' => 'L', 'FIELD_NAME' => 'L.ORIGIN_ID', 'FIELD_TYPE' => 'string', 'JOIN' => false)); $obQueryWhere->SetFields($arWhereFields); if (!is_array($arFilter)) { $arFilter = array(); } $sQueryWhereFields = $obQueryWhere->GetQuery($arFilter); $sSqlSearch = ''; foreach ($arSqlSearch as $r) { if (strlen($r) > 0) { $sSqlSearch .= "\n\t\t\t\tAND ({$r}) "; } } $CCrmUserType = new CCrmUserType($GLOBALS['USER_FIELD_MANAGER'], self::$sUFEntityID); $CCrmUserType->ListPrepareFilter($arFilter); $r = $obUserFieldsSql->GetFilter(); if (strlen($r) > 0) { $sSqlSearch .= "\n\t\t\t\tAND ({$r}) "; } if (!empty($sQueryWhereFields)) { $sSqlSearch .= "\n\t\t\t\tAND ({$sQueryWhereFields}) "; } $arFieldsOrder = array('ASSIGNED_BY' => 'L.ASSIGNED_BY_ID', 'CREATED_BY' => 'L.CREATED_BY_ID', 'MODIFY_BY' => 'L.MODIFY_BY_ID', 'DATE_CREATE' => 'L.DATE_CREATE', 'DATE_MODIFY' => 'L.DATE_MODIFY'); // order $arSqlOrder = array(); if (!is_array($arOrder)) { $arOrder = array('DATE_CREATE' => 'DESC'); } foreach ($arOrder as $by => $order) { $by = strtoupper($by); $order = strtolower($order); if ($order != 'asc') { $order = 'desc'; } if (isset($arFieldsOrder[$by])) { $arSqlOrder[$by] = " {$arFieldsOrder[$by]} {$order} "; } else { if (isset($arFields[$by]) && $by != 'ADDRESS') { $arSqlOrder[$by] = " L.{$by} {$order} "; } else { if ($s = $obUserFieldsSql->GetOrder($by)) { $arSqlOrder[$by] = " {$s} {$order} "; } else { $by = 'date_create'; $arSqlOrder[$by] = " L.DATE_CREATE {$order} "; } } } } if (count($arSqlOrder) > 0) { $sSqlOrder = "\n\t\t\t\tORDER BY " . implode(', ', $arSqlOrder); } else { $sSqlOrder = ''; } $sSql = "\n\t\t\tSELECT\n\t\t\t\t{$sSqlSelect}\n\t\t\t\t{$obUserFieldsSql->GetSelect()}\n\t\t\tFROM\n\t\t\t\tb_crm_deal L {$sSqlJoin}\n\t\t\t\t{$obUserFieldsSql->GetJoin('L.ID')}\n\t\t\tWHERE\n\t\t\t\t1=1 {$sSqlSearch}\n\t\t\t\t{$sSqlPerm}\n\t\t\t{$sSqlOrder}"; if ($nPageTop !== false) { $nPageTop = (int) $nPageTop; $sSql = $DB->TopSql($sSql, $nPageTop); } $obRes = $DB->Query($sSql, false, 'FILE: ' . __FILE__ . '<br /> LINE: ' . __LINE__); $obRes->SetUserFields($USER_FIELD_MANAGER->GetUserFields(self::$sUFEntityID)); return $obRes; }
public function Delete($ID) { global $USER; $err_mess = self::err_mess() . '<br>Function: Delete<br>Line: '; $ID = IntVal($ID); $db_events = GetModuleEvents('crm', 'OnBeforeCrmEventDelete'); while ($arEvent = $db_events->Fetch()) { ExecuteModuleEventEx($arEvent, array($ID)); } $sqlWhere = ''; // if not admin - delete only self items if (!CCrmPerms::IsAdmin()) { $sql = "SELECT CER.ID\n\t\t\t\t\tFROM\n\t\t\t\t\t\tb_crm_event_relations CER,\n\t\t\t\t\t\tb_crm_event CE\n\t\t\t\t\tWHERE\n\t\t\t\t\t\tCE.ID = CER.EVENT_ID\n\t\t\t\t\tAND CER.ID = '{$ID}'\n\t\t\t\t\tAND CER.ASSIGNED_BY_ID = '" . $USER->GetId() . "' AND CE.EVENT_TYPE = 0"; $res = $this->cdb->Query($sql, false, $err_mess . __LINE__); if (!$res->Fetch()) { return false; } } // check unrelated events $sql = "SELECT EVENT_ID, COUNT(ID) as CNT\n\t\t\t\tFROM b_crm_event_relations\n\t\t\t\tWHERE EVENT_ID = (SELECT EVENT_ID FROM b_crm_event_relations WHERE ID = '{$ID}')\n\t\t\t\tGROUP BY EVENT_ID"; $res = $this->cdb->Query($sql, false, $err_mess . __LINE__); if ($row = $res->Fetch()) { // delete event if ($row['CNT'] == 1) { $obRes = $this->cdb->Query("SELECT ID, FILES FROM b_crm_event WHERE ID = '{$row['EVENT_ID']}'", false, $err_mess . __LINE__); if (($aRow = $obRes->Fetch()) !== false) { if (($arFiles = unserialize($aRow['FILES'])) !== false) { foreach ($arFiles as $iFileId) { CFile::Delete((int) $iFileId); } } $this->cdb->Query("DELETE FROM b_crm_event WHERE ID = '{$row['EVENT_ID']}'", false, $err_mess . __LINE__); } } } // delete event relation $res = $this->cdb->Query("DELETE FROM b_crm_event_relations WHERE ID = '{$ID}'", false, $err_mess . __LINE__); return $res; }
$filterFieldInfo = array('typeName' => 'USER', 'id' => $filterID, 'params' => array('data' => array('paramName' => "{$filterID}", 'elementId' => "{$prefix}_{$filterID}"), 'search' => array('paramName' => "{$filterID}_name", 'elementId' => "{$prefix}_{$filterID}_NAME"))); $gridManagerCfg['filterFields'][] = $filterFieldInfo; } } $arResult['GRID_DATA'] = array(); foreach ($arResult['EVENT'] as $arEvent) { $arEvent['FILE_HTML'] = ""; if (!empty($arEvent['FILES'])) { $arEvent['FILE_HTML'] = '<div class="event-detail-files"><label class="event-detail-files-title">' . GetMessage('CRM_EVENT_TABLE_FILES') . ':</label><div class="event-detail-files-list">'; foreach ($arEvent['FILES'] as $key => $value) { $arEvent['FILE_HTML'] .= '<div class="event-detail-file"><span class="event-detail-file-number">' . $key . '.</span><span class="event-detail-file-info"><a href="' . htmlspecialcharsbx($value['PATH']) . '" target="_blank" class="event-detail-file-link">' . htmlspecialcharsbx($value['NAME']) . '</a><span class="event-detail-file-size">(' . htmlspecialcharsbx($value['SIZE']) . ')</span></span></div>'; } $arEvent['FILE_HTML'] .= '</div></div>'; } $arActions = array(); if (CCrmPerms::IsAdmin() || $arEvent['USER_ID'] == CCrmPerms::GetCurrentUserID()) { $arActions[] = array('ICONCLASS' => 'delete', 'TITLE' => GetMessage('CRM_EVENT_DELETE_TITLE'), 'TEXT' => GetMessage('CRM_EVENT_DELETE'), 'ONCLICK' => "crm_event_delete_grid('" . GetMessage('CRM_EVENT_DELETE_TITLE') . "', '" . GetMessage('CRM_EVENT_DELETE_CONFIRM') . "', '" . GetMessage('CRM_EVENT_DELETE') . "', '" . $arEvent['PATH_TO_EVENT_DELETE'] . "')"); } $eventColor = ''; if ($arEvent['TYPE'] == '0') { $eventColor = 'color: #208c0b'; } elseif ($arEvent['TYPE'] == '2') { $eventColor = 'color: #9c8000'; } $arColumns = array('CREATED_BY_FULL_NAME' => $arEvent['CREATED_BY_FULL_NAME'] == '' ? '' : '<a href="' . $arEvent['CREATED_BY_LINK'] . '" id="balloon_' . $arResult['GRID_ID'] . '_' . $arEvent['ID'] . '">' . $arEvent['CREATED_BY_FULL_NAME'] . '</a>' . '<script type="text/javascript">BX.tooltip(' . $arEvent['USER_ID'] . ', "balloon_' . $arResult['GRID_ID'] . '_' . $arEvent['ID'] . '", "");</script>', 'EVENT_NAME' => '<span style="' . $eventColor . '">' . $arEvent['EVENT_NAME'] . '</span>', 'EVENT_DESC' => $arEvent['EVENT_DESC'] . $arEvent['FILE_HTML'], 'DATE_CREATE' => FormatDate('x', MakeTimeStamp($arEvent['DATE_CREATE']), time() + CTimeZone::GetOffset())); // if ($arResult['EVENT_ENTITY_LINK'] == 'Y') // { // $arColumns['ENTITY_TYPE'] = !empty($arEvent['ENTITY_TYPE'])? GetMessage('CRM_EVENT_ENTITY_TYPE_'.$arEvent['ENTITY_TYPE']): ''; // $arColumns['ENTITY_TITLE'] = !empty($arEvent['ENTITY_TITLE'])? // '<a href="'.$arEvent['ENTITY_LINK'].'" id="balloon_'.$arResult['GRID_ID'].'_I_'.$arEvent['ID'].'">'.$arEvent['ENTITY_TITLE'].'</a>'. // '<script type="text/javascript">BX.tooltip("'.$arEvent['ENTITY_TYPE'].'_'.$arEvent['ENTITY_ID'].'", "balloon_'.$arResult['GRID_ID'].'_I_'.$arEvent['ID'].'", "/bitrix/components/bitrix/crm.'.strtolower($arEvent['ENTITY_TYPE']).'.show/card.ajax.php", "crm_balloon'.($arEvent['ENTITY_TYPE'] == 'LEAD' || $arEvent['ENTITY_TYPE'] == 'DEAL' || $arEvent['ENTITY_TYPE'] == 'QUOTE' ? '_no_photo': '_'.strtolower($arEvent['ENTITY_TYPE'])).'", true);</script>'
public static function findByPhoneNumber($number, $params = array()) { if (!is_string($number)) { throw new \Bitrix\Main\ArgumentTypeException('number', 'string'); } if ($number === '') { throw new \Bitrix\Main\ArgumentException('Is empty', 'number'); } if (!is_array($params)) { $params = array(); } $userID = isset($params['USER_ID']) ? intval($params['USER_ID']) : 0; if ($userID <= 0) { $userID = CCrmPerms::GetCurrentUserID(); } $isAdmin = CCrmPerms::IsAdmin($userID); $userPermissions = CCrmPerms::GetUserPermissions($userID); $enableExtendedMode = isset($params['ENABLE_EXTENDED_MODE']) ? (bool) $params['ENABLE_EXTENDED_MODE'] : true; $contactFormID = isset($params['CONTACT_FORM_ID']) ? intval($params['CONTACT_FORM_ID']) : ''; if ($contactFormID === '') { $contactFormID = CCrmContact::DEFAULT_FORM_ID; } $dups = array(); $criterion = new \Bitrix\Crm\Integrity\DuplicateCommunicationCriterion('PHONE', $number); $entityTypes = array(CCrmOwnerType::Contact, CCrmOwnerType::Company, CCrmOwnerType::Lead); foreach ($entityTypes as $entityType) { $duplicate = $criterion->find($entityType, 1); if ($duplicate !== null) { $dups[] = $duplicate; } } $entityByType = array(); foreach ($dups as &$dup) { /** @var \Bitrix\Crm\Integrity\Duplicate $dup */ $entities = $dup->getEntities(); if (!(is_array($entities) && !empty($entities))) { continue; } //Each entity type limited by 50 items foreach ($entities as &$entity) { /** @var \Bitrix\Crm\Integrity\DuplicateEntity $entity */ $entityTypeID = $entity->getEntityTypeID(); $entityID = $entity->getEntityID(); $fields = null; if ($entityTypeID === CCrmOwnerType::Contact) { $dbEntity = CCrmContact::GetListEx(array(), array('=ID' => $entityID, 'CHECK_PERMISSIONS' => 'N'), false, false, array('ID', 'HONORIFIC', 'NAME', 'SECOND_NAME', 'LAST_NAME', 'PHOTO', 'POST', 'COMPANY_ID', 'COMPANY_TITLE', 'ASSIGNED_BY_ID')); $entityFields = is_object($dbEntity) ? $dbEntity->Fetch() : null; if (is_array($entityFields)) { $formattedName = CCrmContact::PrepareFormattedName(array('HONORIFIC' => isset($entityFields['HONORIFIC']) ? $entityFields['HONORIFIC'] : '', 'NAME' => isset($entityFields['NAME']) ? $entityFields['NAME'] : '', 'SECOND_NAME' => isset($entityFields['SECOND_NAME']) ? $entityFields['SECOND_NAME'] : '', 'LAST_NAME' => isset($entityFields['LAST_NAME']) ? $entityFields['LAST_NAME'] : '')); $fields = array('ID' => intval($entityFields['ID']), 'FORMATTED_NAME' => $formattedName, 'PHOTO' => isset($entityFields['PHOTO']) ? intval($entityFields['PHOTO']) : 0, 'COMPANY_ID' => isset($entityFields['COMPANY_ID']) ? intval($entityFields['COMPANY_ID']) : 0, 'COMPANY_TITLE' => isset($entityFields['COMPANY_TITLE']) ? $entityFields['COMPANY_TITLE'] : '', 'POST' => isset($entityFields['POST']) ? $entityFields['POST'] : '', 'ASSIGNED_BY_ID' => isset($entityFields['ASSIGNED_BY_ID']) ? intval($entityFields['ASSIGNED_BY_ID']) : 0, 'CAN_READ' => CCrmContact::CheckReadPermission($entityID, $userPermissions)); if ($fields['CAN_READ'] && $enableExtendedMode) { $deals = array(); $dbDeal = CCrmDeal::GetListEx(array('BEGINDATE' => 'ASC'), array('=CONTACT_ID' => $entityID, 'CLOSED' => 'N', 'CHECK_PERMISSIONS' => $isAdmin ? 'N' : 'Y'), false, array('nTopCount' => 2), array('ID', 'TITLE', 'STAGE_ID'), array('PERMS' => $userPermissions)); if (is_object($dbDeal)) { while ($dealFields = $dbDeal->Fetch()) { $dealID = intval($dealFields['ID']); //$dealFields['CAN_READ'] = CCrmDeal::CheckReadPermission($dealID, $userPermissions); $dealFields['SHOW_URL'] = CCrmOwnerType::GetShowUrl(CCrmOwnerType::Deal, $dealID); $deals[] = $dealFields; } } $fields['DEALS'] =& $deals; unset($deals); } } } elseif ($entityTypeID === CCrmOwnerType::Company) { $dbEntity = CCrmCompany::GetListEx(array(), array('=ID' => $entityID, 'CHECK_PERMISSIONS' => 'N'), false, false, array('ID', 'TITLE', 'LOGO', 'ASSIGNED_BY_ID')); $entityFields = is_object($dbEntity) ? $dbEntity->Fetch() : null; if (is_array($entityFields)) { $fields = array('ID' => intval($entityFields['ID']), 'TITLE' => isset($entityFields['TITLE']) ? $entityFields['TITLE'] : '', 'LOGO' => isset($entityFields['LOGO']) ? intval($entityFields['LOGO']) : 0, 'ASSIGNED_BY_ID' => isset($entityFields['ASSIGNED_BY_ID']) ? intval($entityFields['ASSIGNED_BY_ID']) : 0, 'CAN_READ' => CCrmCompany::CheckReadPermission($entityID, $userPermissions)); if ($fields['CAN_READ'] && $enableExtendedMode) { $deals = array(); $dbDeal = CCrmDeal::GetListEx(array('BEGINDATE' => 'ASC'), array('=COMPANY_ID' => $entityID, 'CLOSED' => 'N', 'CHECK_PERMISSIONS' => $isAdmin ? 'N' : 'Y'), false, array('nTopCount' => 2), array('ID', 'TITLE', 'STAGE_ID'), array('PERMS' => $userPermissions)); if (is_object($dbDeal)) { while ($dealFields = $dbDeal->Fetch()) { $dealID = intval($dealFields['ID']); //$dealFields['CAN_READ'] = CCrmDeal::CheckReadPermission($dealID, $userPermissions); $dealFields['SHOW_URL'] = CCrmOwnerType::GetShowUrl(CCrmOwnerType::Deal, $dealID); $deals[] = $dealFields; } } $fields['DEALS'] =& $deals; unset($deals); } } } elseif ($entityTypeID === CCrmOwnerType::Lead) { $dbEntity = CCrmLead::GetListEx(array(), array('=ID' => $entityID, 'CHECK_PERMISSIONS' => 'N'), false, false, array('ID', 'TITLE', 'HONORIFIC', 'NAME', 'SECOND_NAME', 'LAST_NAME', 'POST', 'COMPANY_TITLE', 'ASSIGNED_BY_ID')); $entityFields = is_object($dbEntity) ? $dbEntity->Fetch() : null; if (is_array($entityFields)) { $formattedName = ''; if (!empty($entityFields['NAME']) || !empty($entityFields['SECOND_NAME']) || !empty($entityFields['LAST_NAME'])) { $formattedName = CCrmLead::PrepareFormattedName(array('HONORIFIC' => isset($entityFields['HONORIFIC']) ? $entityFields['HONORIFIC'] : '', 'NAME' => isset($entityFields['NAME']) ? $entityFields['NAME'] : '', 'SECOND_NAME' => isset($entityFields['SECOND_NAME']) ? $entityFields['SECOND_NAME'] : '', 'LAST_NAME' => isset($entityFields['LAST_NAME']) ? $entityFields['LAST_NAME'] : '')); } $fields = array('ID' => intval($entityFields['ID']), 'TITLE' => isset($entityFields['TITLE']) ? $entityFields['TITLE'] : '', 'FORMATTED_NAME' => $formattedName, 'COMPANY_TITLE' => isset($entityFields['COMPANY_TITLE']) ? $entityFields['COMPANY_TITLE'] : '', 'POST' => isset($entityFields['POST']) ? $entityFields['POST'] : '', 'ASSIGNED_BY_ID' => isset($entityFields['ASSIGNED_BY_ID']) ? intval($entityFields['ASSIGNED_BY_ID']) : 0, 'CAN_READ' => CCrmLead::CheckReadPermission($entityID, $userPermissions)); } } if (!is_array($fields)) { continue; } if ($fields['CAN_READ'] && $enableExtendedMode) { $showUrl = $fields['SHOW_URL'] = CCrmOwnerType::GetShowUrl($entityTypeID, $entityID); if ($showUrl !== '') { $fields['ACTIVITY_LIST_URL'] = CCrmUrlUtil::AddUrlParams($showUrl, array("{$contactFormID}_active_tab" => 'tab_activity')); $fields['INVOICE_LIST_URL'] = CCrmUrlUtil::AddUrlParams($showUrl, array("{$contactFormID}_active_tab" => 'tab_invoice')); if ($entityTypeID === CCrmOwnerType::Contact || $entityTypeID === CCrmOwnerType::Company) { $fields['DEAL_LIST_URL'] = CCrmUrlUtil::AddUrlParams($showUrl, array("{$contactFormID}_active_tab" => 'tab_deal')); } } $activities = array(); $dbActivity = CCrmActivity::GetList(array('DEADLINE' => 'ASC'), array('COMPLETED' => 'N', 'BINDINGS' => array(array('OWNER_TYPE_ID' => $entityTypeID, 'OWNER_ID' => $entityID)), 'CHECK_PERMISSIONS' => $isAdmin ? 'N' : 'Y'), false, array('nTopCount' => 4), array('ID', 'SUBJECT', 'START_TIME', 'END_TIME', 'DEADLINE'), array('PERMS' => $userPermissions)); if (is_object($dbActivity)) { while ($activityFields = $dbActivity->Fetch()) { $activityFields['SHOW_URL'] = CCrmOwnerType::GetShowUrl(CCrmOwnerType::Activity, $activityFields['ID']); $activities[] =& $activityFields; unset($activityFields); } } $fields['ACTIVITIES'] =& $activities; unset($activities); } $entityTypeName = CCrmOwnerType::ResolveName($entityTypeID); if (!isset($entityByType[$entityTypeName])) { $entityByType[$entityTypeName] = array($fields); } elseif (!in_array($entityID, $entityByType[$entityTypeName], true)) { $entityByType[$entityTypeName][] = $fields; } } } unset($dup); return $entityByType; }
public function Delete($ID, $arEntityAttr) { if (!CModule::IncludeModule('bizproc')) { return true; } $userID = CCrmSecurityHelper::GetCurrentUserID(); $bDeleteError = !CBPDocument::CanUserOperateDocument(CBPCanUserOperateOperation::WriteDocument, $userID, array('crm', $this->sDocument, $this->sEntityType . '_' . $ID), array('UserGroups' => $this->arCurrentUserGroups, 'UserIsAdmin' => CCrmPerms::IsAdmin($userID), 'CRMEntityAttr' => $arEntityAttr)); if (!$bDeleteError) { return $this->ProcessDeletion($ID); } return true; }
if ($entityTypeID !== CCrmOwnerType::Lead && $entityTypeID !== CCrmOwnerType::Contact && $entityTypeID !== CCrmOwnerType::Company) { __CrmDedupeListEndResonse(array('ERROR' => "Entity type '{$entityTypeName}' is not supported in current context.")); } $leftEntityID = isset($_POST['LEFT_ENTITY_ID']) ? (int) $_POST['LEFT_ENTITY_ID'] : 0; if ($leftEntityID <= 0) { __CrmDedupeListEndResonse(array('ERROR' => 'Left entity ID is not is not specified.')); } $rightEntityID = isset($_POST['RIGHT_ENTITY_ID']) ? (int) $_POST['RIGHT_ENTITY_ID'] : 0; if ($rightEntityID <= 0) { __CrmDedupeListEndResonse(array('ERROR' => 'Right entity ID is not is not specified.')); } $typeID = isset($_POST['INDEX_TYPE_NAME']) ? Integrity\DuplicateIndexType::resolveID($_POST['INDEX_TYPE_NAME']) : Integrity\DuplicateIndexType::UNDEFINED; if (!Integrity\DuplicateIndexType::isDefined($typeID)) { __CrmDedupeListEndResonse(array('ERROR' => 'Index type ID is not specified or invalid.')); } $enablePermissionCheck = !CCrmPerms::IsAdmin($currentUserID); $merger = Merger\EntityMerger::create($entityTypeID, $currentUserID, $enablePermissionCheck); $leftEntityMatches = isset($_POST['LEFT_ENTITY_INDEX_MATCHES']) && is_array($_POST['LEFT_ENTITY_INDEX_MATCHES']) ? $_POST['LEFT_ENTITY_INDEX_MATCHES'] : array(); $leftEntityCriterion = Integrity\DuplicateManager::createCriterion($typeID, $leftEntityMatches); $rightEntityMatches = isset($_POST['RIGHT_ENTITY_INDEX_MATCHES']) && is_array($_POST['RIGHT_ENTITY_INDEX_MATCHES']) ? $_POST['RIGHT_ENTITY_INDEX_MATCHES'] : array(); if (empty($rightEntityMatches)) { $rightEntityMatches = $leftEntityMatches; } $rightEntityCriterion = Integrity\DuplicateManager::createCriterion($typeID, $rightEntityMatches); try { $merger->registerCriterionMismatch($rightEntityCriterion, $leftEntityID, $rightEntityID); $builder = Integrity\DuplicateManager::createIndexBuilder($typeID, $entityTypeID, $currentUserID, $enablePermissionCheck); $builder->processMismatchRegistration($leftEntityCriterion, $leftEntityID); } catch (Merger\EntityMergerException $e) { __CrmDedupeListEndResonse(array('ERROR' => __CrmDedupeListErrorText($e))); } catch (Exception $e) {
$arResult['CONTACT'][$iContactId]['EDIT'] = $CCrmPerms->CheckEnityAccess('CONTACT', 'WRITE', $arContactAttr[$iContactId]); $arResult['CONTACT'][$iContactId]['DELETE'] = $CCrmPerms->CheckEnityAccess('CONTACT', 'DELETE', $arContactAttr[$iContactId]); $arResult['CONTACT'][$iContactId]['BIZPROC_LIST'] = array(); foreach ($arBPData as $arBP) { if (!CBPDocument::CanUserOperateDocument(CBPCanUserOperateOperation::StartWorkflow, $userID, array('crm', 'CCrmDocumentContact', 'CONTACT_' . $arResult['CONTACT'][$iContactId]['ID']), array('UserGroups' => $CCrmBizProc->arCurrentUserGroups, 'DocumentStates' => $arDocumentStates, 'WorkflowTemplateId' => $arBP['ID'], 'CreatedBy' => $arResult['CONTACT'][$iContactId]['ASSIGNED_BY'], 'UserIsAdmin' => $isAdmin, 'CRMEntityAttr' => $arContactAttr[$iContactId]))) { continue; } $arBP['PATH_TO_BIZPROC_START'] = CHTTP::urlAddParams(CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_CONTACT_SHOW'], array('contact_id' => $arResult['CONTACT'][$iContactId]['ID'])), array('workflow_template_id' => $arBP['ID'], 'bizproc_start' => 1, 'sessid' => $arResult['SESSION_ID'], 'CRM_CONTACT_SHOW_V12_active_tab' => 'tab_bizproc', 'back_url' => $arParams['PATH_TO_CONTACT_LIST'])); $arResult['CONTACT'][$iContactId]['BIZPROC_LIST'][] = $arBP; } } } if (!$isInExportMode) { $arResult['NEED_FOR_REBUILD_DUP_INDEX'] = false; $arResult['NEED_FOR_REBUILD_CONTACT_ATTRS'] = false; if (!$bInternal && CCrmPerms::IsAdmin()) { if (COption::GetOptionString('crm', '~CRM_REBUILD_CONTACT_DUP_INDEX', 'N') === 'Y') { $arResult['NEED_FOR_REBUILD_DUP_INDEX'] = true; } if (COption::GetOptionString('crm', '~CRM_REBUILD_CONTACT_ATTR', 'N') === 'Y') { $arResult['PATH_TO_PRM_LIST'] = CComponentEngine::MakePathFromTemplate(COption::GetOptionString('crm', 'path_to_perm_list')); $arResult['NEED_FOR_REBUILD_CONTACT_ATTRS'] = true; } } $this->IncludeComponentTemplate(); include_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/components/bitrix/crm.contact/include/nav.php'; return $arResult['ROWS_COUNT']; } else { $APPLICATION->RestartBuffer(); // hack. any '.default' customized template should contain 'excel' page $this->__templateName = '.default';
$subscriptionID = 'lead_sl_subscribe'; $arResult['SONET_SUBSCRIBE'] = array('ID' => $subscriptionID, 'SERVICE_URL' => CComponentEngine::makePathFromTemplate('#SITE_DIR#bitrix/components/bitrix/crm.lead.edit/ajax.php?site_id=#SITE#&sessid=#SID#', array('SID' => bitrix_sessid())), 'ACTION_NAME' => 'ENABLE_SONET_SUBSCRIPTION', 'RELOAD' => true); $isObserver = in_array(CCrmSonetSubscriptionType::Observation, $subscrTypes, true); $arResult['BUTTONS'][] = array('CODE' => 'sl_unsubscribe', 'TEXT' => GetMessage('CRM_LEAD_SL_UNSUBSCRIBE'), 'TITLE' => GetMessage('CRM_LEAD_SL_UNSUBSCRIBE_TITLE'), 'ONCLICK' => "BX.CrmSonetSubscription.items['{$subscriptionID}'].unsubscribe({$arParams['ELEMENT_ID']}, function(){ var tb = BX.InterfaceToolBar.items['{$toolbarID}']; tb.setButtonVisible('sl_unsubscribe', false); tb.setButtonVisible('sl_subscribe', true); })", 'ICON' => 'btn-nofollow', 'VISIBLE' => $isObserver); $arResult['BUTTONS'][] = array('CODE' => 'sl_subscribe', 'TEXT' => GetMessage('CRM_LEAD_SL_SUBSCRIBE'), 'TITLE' => GetMessage('CRM_LEAD_SL_SUBSCRIBE_TITLE'), 'ONCLICK' => "BX.CrmSonetSubscription.items['{$subscriptionID}'].subscribe({$arParams['ELEMENT_ID']}, function(){ var tb = BX.InterfaceToolBar.items['{$toolbarID}']; tb.setButtonVisible('sl_subscribe', false); tb.setButtonVisible('sl_unsubscribe', true); })", 'ICON' => 'btn-follow', 'VISIBLE' => !$isObserver); } } if (($arParams['TYPE'] == 'show' || $arParams['TYPE'] == 'convert') && $bWrite && !empty($arParams['ELEMENT_ID']) && $arFields['STATUS_ID'] != 'CONVERTED') { $arResult['BUTTONS'][] = array('TEXT' => GetMessage('LEAD_EDIT'), 'TITLE' => GetMessage('LEAD_EDIT_TITLE'), 'LINK' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_LEAD_EDIT'], array('lead_id' => $arParams['ELEMENT_ID'])), 'ICON' => 'btn-edit'); } if (($arParams['TYPE'] == 'edit' || $arParams['TYPE'] == 'convert') && $bRead && !empty($arParams['ELEMENT_ID'])) { $arResult['BUTTONS'][] = array('TEXT' => GetMessage('LEAD_SHOW'), 'TITLE' => GetMessage('LEAD_SHOW_TITLE'), 'LINK' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_LEAD_SHOW'], array('lead_id' => $arParams['ELEMENT_ID'])), 'ICON' => 'btn-view'); } $qty = count($arResult['BUTTONS']); if (!empty($arResult['BUTTONS']) && ($arParams['TYPE'] == 'list' || $arParams['TYPE'] == 'edit' && empty($arParams['ELEMENT_ID']))) { $arResult['BUTTONS'][] = array('SEPARATOR' => true); } elseif ($arParams['TYPE'] == 'show' && $qty > 1) { $arResult['BUTTONS'][] = array('NEWBAR' => true); } elseif ($qty >= 3 || $arFields['STATUS_ID'] == 'CONVERTED' && $qty >= 2) { $arResult['BUTTONS'][] = array('NEWBAR' => true); } if ($bAdd && ($arParams['TYPE'] == 'edit' || $arParams['TYPE'] == 'show' || $arParams['TYPE'] == 'convert') && !empty($arParams['ELEMENT_ID']) && !isset($_REQUEST['copy'])) { $arResult['BUTTONS'][] = array('TEXT' => GetMessage('LEAD_COPY'), 'TITLE' => GetMessage('LEAD_COPY_TITLE'), 'LINK' => CHTTP::urlAddParams(CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_LEAD_EDIT'], array('lead_id' => $arParams['ELEMENT_ID'])), array('copy' => 1)), 'ICON' => 'btn-copy'); } if (($arParams['TYPE'] == 'edit' || $arParams['TYPE'] == 'show' || $arParams['TYPE'] == 'convert') && $bDelete && !empty($arParams['ELEMENT_ID']) && ($arFields['STATUS_ID'] != 'CONVERTED' || CCrmPerms::IsAdmin())) { $arResult['BUTTONS'][] = array('TEXT' => GetMessage('LEAD_DELETE'), 'TITLE' => GetMessage('LEAD_DELETE_TITLE'), 'LINK' => "javascript:lead_delete('" . GetMessage('LEAD_DELETE_DLG_TITLE') . "', '" . GetMessage('LEAD_DELETE_DLG_MESSAGE') . "', '" . GetMessage('LEAD_DELETE_DLG_BTNTITLE') . "', '" . CHTTP::urlAddParams(CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_LEAD_EDIT'], array('lead_id' => $arParams['ELEMENT_ID'])), array('delete' => '', 'sessid' => bitrix_sessid())) . "')", 'ICON' => 'btn-delete'); } if ($bAdd && $arParams['TYPE'] != 'list') { $arResult['BUTTONS'][] = array('TEXT' => GetMessage('LEAD_ADD'), 'TITLE' => GetMessage('LEAD_ADD_TITLE'), 'LINK' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_LEAD_EDIT'], array('lead_id' => 0)), 'TARGET' => '_blank', 'ICON' => 'btn-new'); } $this->IncludeComponentTemplate();