%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/socialnetwork/lib/integration/main/uiselector/ |
| Current File : //home/bitrix/www/bitrix/modules/socialnetwork/lib/integration/main/uiselector/search.php |
<?php
/**
* Bitrix Framework
* @package bitrix
* @subpackage socialnetwork
* @copyright 2001-2017 Bitrix
*/
namespace Bitrix\Socialnetwork\Integration\Main\UISelector;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\Event;
use Bitrix\Main\EventResult;
use Bitrix\Main\Loader;
use Bitrix\Main\ModuleManager;
Loc::loadMessages(__FILE__);
class Search
{
protected static function actionProcessAjaxGetDepartmentData($requestFields = array())
{
return array(
'USERS' => \CSocNetLogDestination::getUsers(
array(
'deportament_id' => $requestFields['DEPARTMENT_ID'],
"NAME_TEMPLATE" => Handler::getNameTemplate($requestFields)
)
),
'dataOnly' => true
);
}
protected static function searchNetworkUsers($params = array())
{
$searchResult = array();
$search = $params['search'];
$nameTemplate = $params['nameTemplate'];
$network = new \Bitrix\Socialservices\Network();
if ($network->isEnabled())
{
$networkResult = $network->searchUser($search);
if ($networkResult)
{
foreach ($networkResult as $user)
{
$user = \CSocNetLogDestination::formatNetworkUser($user, array(
"NAME_TEMPLATE" => $nameTemplate,
));
$searchResult[$user['id']] = $user;
}
$userList = \Bitrix\Main\UserTable::getList(array(
"select" => array("ID", "XML_ID"),
"filter" => array(
"=EXTERNAL_AUTH_ID" => "replica",
"=XML_ID" => array_keys($searchResult),
),
));
while ($user = $userList->fetch())
{
unset($searchResult[$user["XML_ID"]]);
}
}
}
return $searchResult;
}
protected static function searchUsers($params = array(), &$searchModified)
{
$search = $params['search'];
$nameTemplate = $params['nameTemplate'];
$requestFields = $params['requestFields'];
$searchResult = \CSocNetLogDestination::searchUsers(
array(
"SEARCH" => $search,
"NAME_TEMPLATE" => $nameTemplate,
"SELF" => (!isset($requestFields['SELF']) || $requestFields['SELF'] != 'N'),
"EMPLOYEES_ONLY" => (isset($requestFields['EXTRANET_SEARCH']) && $requestFields['EXTRANET_SEARCH'] == "I"),
"EXTRANET_ONLY" => (isset($requestFields['EXTRANET_SEARCH']) && $requestFields['EXTRANET_SEARCH'] == "E"),
"DEPARTAMENT_ID" => (
isset($requestFields['DEPARTMENT_ID'])
&& intval($requestFields['DEPARTMENT_ID']) > 0
? intval($requestFields['DEPARTMENT_ID'])
: false
),
"EMAIL_USERS" => (isset($requestFields['EMAIL_USERS']) && $requestFields['EMAIL_USERS'] == 'Y'),
"CRMEMAIL_USERS" => (isset($requestFields['CRMEMAIL']) && $requestFields['CRMEMAIL'] == 'Y'),
"NETWORK_SEARCH" => $params['useNetwork'],
),
$searchModified
);
return $searchResult;
}
protected static function searchSonetGroups($params = array())
{
$search = $params['search'];
$features = $params['features'];
return \CSocNetLogDestination::searchSonetGroups(array(
"SEARCH" => $search,
"FEATURES" => $features
));
}
protected static function searchCrmEmails($params = array(), &$usersList)
{
$search = $params['search'];
$nameTemplate = $params['nameTemplate'];
$searchResult = \CSocNetLogDestination::searchCrmEntities(array(
"SEARCH" => $search,
"NAME_TEMPLATE" => $nameTemplate
));
return self::filterCrmSearchResult($searchResult, $usersList);
}
protected static function searchCrmEntities($params = array(), &$usersList)
{
$search = $params['search'];
$nameTemplate = $params['nameTemplate'];
$entitiesList = $params['entities'];
$searchByEmailOnly = $params['searchByEmailOnly'];
$searchResult = \CSocNetLogDestination::searchCrmEntities(array(
"SEARCH" => $search,
"NAME_TEMPLATE" => $nameTemplate,
"ENTITIES" => $entitiesList,
"SEARCH_BY_EMAIL_ONLY" => ($searchByEmailOnly ? "Y" : "N")
));
return self::filterCrmSearchResult($searchResult, $usersList);
}
protected static function filterCrmSearchResult($searchResult, &$usersList)
{
foreach($usersList as $key => $value)
{
if (array_key_exists($value["crmEntity"], $searchResult))
{
unset($searchResult[$value["crmEntity"]]);
}
}
$crmUsersListTmp = $usersListTmp= array();
foreach($usersList as $key => $user)
{
if (!empty($user['crmEntity']))
{
$crmUsersListTmp[$key] = $user;
}
else
{
$usersListTmp[$key] = $user;
}
}
foreach($searchResult as $key => $user)
{
if (!empty($user['crmEntity']))
{
$crmUsersListTmp[$key] = $user;
}
else
{
$usersListTmp[$key] = $user;
}
}
$usersList = $usersListTmp;
return $crmUsersListTmp;
}
protected static function searchCrmContacts($params = array())
{
$searchResult = array();
if (Loader::includeModule('crm'))
{
$search = $params['search'];
$nameTemplate = $params['nameTemplate'];
$res = \CCrmContact::getListEx(
$arOrder = array(),
$arFilter = array('%FULL_NAME' => $search),
$arGroupBy = false,
$arNavStartParams = array('nTopCount' => 20),
$arSelectFields = array('ID', 'NAME', 'SECOND_NAME', 'LAST_NAME', 'COMPANY_TITLE', 'PHOTO')
);
while ($res && ($contact = $res->fetch()))
{
$searchResult['CRMCONTACT'.$contact['ID']] = array(
'id' => 'CRMCONTACT'.$contact['ID'],
'entityType' => 'contacts',
'entityId' => $contact['ID'],
'name' => htmlspecialcharsbx(\CUser::formatName(
$nameTemplate,
array(
'LOGIN' => '',
'NAME' => $contact['NAME'],
'SECOND_NAME' => $contact['SECOND_NAME'],
'LAST_NAME' => $contact['LAST_NAME']
),
false, false
)),
'desc' => htmlspecialcharsbx($contact['COMPANY_TITLE'])
);
if (!empty($contact['PHOTO']) && intval($contact['PHOTO']) > 0)
{
$image = \CFile::resizeImageGet($contact['PHOTO'], array('width' => 100, 'height' => 100), BX_RESIZE_IMAGE_EXACT);
$searchResult['CRMCONTACT'.$contact['ID']]['avatar'] = $image['src'];
}
}
}
return $searchResult;
}
protected static function searchCrmCompanies($params = array())
{
$searchResult = array();
if (Loader::includeModule('crm'))
{
$search = $params['search'];
$companyTypeList = \CCrmStatus::getStatusListEx('COMPANY_TYPE');
$companyIndustryList = \CCrmStatus::getStatusListEx('INDUSTRY');
$res = \CCrmCompany::getListEx(
$arOrder = array(),
$arFilter = array('%TITLE' => $search),
$arGroupBy = false,
$arNavStartParams = array('nTopCount' => 20),
$arSelectFields = array('ID', 'TITLE', 'COMPANY_TYPE', 'INDUSTRY', 'LOGO')
);
while ($res && ($company = $res->fetch()))
{
$descList = array();
if (isset($companyTypeList[$company['COMPANY_TYPE']]))
{
$descList[] = $companyTypeList[$company['COMPANY_TYPE']];
}
if (isset($companyIndustryList[$company['INDUSTRY']]))
{
$descList[] = $companyIndustryList[$company['INDUSTRY']];
}
$searchResult['CRMCOMPANY'.$company['ID']] = array(
'id' => 'CRMCOMPANY'.$company['ID'],
'entityId' => $company['ID'],
'entityType' => 'companies',
'name' => htmlspecialcharsbx(str_replace(array(';', ','), ' ', $company['TITLE'])),
'desc' => htmlspecialcharsbx(implode(', ', $descList))
);
if (!empty($company['LOGO']) && intval($company['LOGO']) > 0)
{
$image = \CFile::resizeImageGet($company['LOGO'], array('width' => 100, 'height' => 100), BX_RESIZE_IMAGE_EXACT);
$searchResult['CRMCOMPANY'.$company['ID']]['avatar'] = $image['src'];
}
}
}
return $searchResult;
}
protected static function searchCrmLeads($params = array())
{
$searchResult = array();
if (Loader::includeModule('crm'))
{
$search = $params['search'];
$nameTemplate = $params['nameTemplate'];
$res = \CCrmLead::getListEx(
$arOrder = array(),
$arFilter = array('LOGIC' => 'OR', '%FULL_NAME' => $search, '%TITLE' => $search),
$arGroupBy = false,
$arNavStartParams = array('nTopCount' => 20),
$arSelectFields = array('ID', 'TITLE', 'NAME', 'SECOND_NAME', 'LAST_NAME', 'STATUS_ID')
);
while ($res && ($lead = $res->fetch()))
{
$searchResult['CRMLEAD'.$lead['ID']] = array(
'id' => 'CRMLEAD'.$lead['ID'],
'entityId' => $lead['ID'],
'entityType' => 'leads',
'name' => htmlspecialcharsbx($lead['TITLE']),
'desc' => htmlspecialcharsbx(\CUser::formatName(
$nameTemplate,
array(
'LOGIN' => '',
'NAME' => $lead['NAME'],
'SECOND_NAME' => $lead['SECOND_NAME'],
'LAST_NAME' => $lead['LAST_NAME']
),
false, false
))
);
}
}
return $searchResult;
}
protected static function searchCrmDeals($params = array())
{
$searchResult = array();
if (Loader::includeModule('crm'))
{
$search = $params['search'];
$nameTemplate = $params['nameTemplate'];
$res = \CCrmDeal::getListEx(
$arOrder = array(),
$arFilter = array('%TITLE' => $search),
$arGroupBy = false,
$arNavStartParams = array('nTopCount' => 20),
$arSelectFields = array('ID', 'TITLE', 'COMPANY_TITLE', 'CONTACT_NAME', 'CONTACT_SECOND_NAME', 'CONTACT_LAST_NAME')
);
while ($res && ($deal = $res->fetch()))
{
$descList = array();
if ($deal['COMPANY_TITLE'] != '')
{
$descList[] = $deal['COMPANY_TITLE'];
}
$descList[] = \CUser::formatName(
$nameTemplate,
array(
'LOGIN' => '',
'NAME' => $deal['CONTACT_NAME'],
'SECOND_NAME' => $deal['CONTACT_SECOND_NAME'],
'LAST_NAME' => $deal['CONTACT_LAST_NAME']
),
false, false
);
$arDeals['CRMDEAL'.$deal['ID']] = array(
'id' => 'CRMDEAL'.$deal['ID'],
'entityId' => $deal['ID'],
'entityType' => 'deals',
'name' => htmlspecialcharsbx($deal['TITLE']),
'desc' => htmlspecialcharsbx(implode(', ', $descList))
);
}
}
return $searchResult;
}
public static function process($requestFields = array())
{
$result = array(
'dataOnly' => true
);
$search = $requestFields['SEARCH'];
$searchConverted = (!empty($requestFields['SEARCH_CONVERTED']) ? $requestFields['SEARCH_CONVERTED'] : false);
$nameTemplate = Handler::getNameTemplate($requestFields);
if (
isset($requestFields['ADDITIONAL_SEARCH'])
&& $requestFields['ADDITIONAL_SEARCH'] == 'Y'
)
{
$result["USERS"] = array();
if (
isset($requestFields['NETWORK_SEARCH'])
&& $requestFields['NETWORK_SEARCH'] == 'Y'
&& Loader::includeModule('socialservices')
)
{
$result["USERS"] = self::searchNetworkUsers(array(
'search' => $search,
'nameTemplate' => $nameTemplate
));
}
return $result;
}
if (
!isset($requestFields['USER_SEARCH'])
|| $requestFields['USER_SEARCH'] != 'N'
)
{
$searchModified = false;
$result["USERS"] = self::searchUsers(array(
'search' => $search,
'nameTemplate' => $nameTemplate,
'useNetwork' => false,
'requestFields' => $requestFields
), $searchModified);
if (!empty($searchModified))
{
$result['SEARCH'] = $searchModified;
}
if (
empty($result['USERS'])
&& $searchConverted
&& $search != $searchConverted
)
{
$result['USERS'] = self::searchUsers(array(
'search' => $searchConverted,
'nameTemplate' => $nameTemplate,
'useNetwork' => false,
'requestFields' => $requestFields
), $searchModified);
$result['SEARCH'] = $searchConverted;
}
}
if (
isset($requestFields['SEARCH_SONET_GROUPS'])
&& $requestFields['SEARCH_SONET_GROUPS'] == 'Y'
)
{
$result['SONET_GROUPS'] = self::searchSonetGroups(array(
'search' => $search,
'features' => (isset($requestFields['SEARCH_SONET_FEATUES']) && is_array($requestFields['SEARCH_SONET_FEATUES']) ? $requestFields['SEARCH_SONET_FEATUES'] : false),
));
}
if (
isset($requestFields['CRMEMAIL'])
&& $requestFields['CRMEMAIL'] == 'Y'
)
{
$result['CRM_EMAILS'] = self::searchCrmEmails(array(
'search' => $search,
'nameTemplate' => $nameTemplate
), $result['USERS']);
}
elseif (
isset($requestFields['CRMCONTACTEMAIL'])
&& $requestFields['CRMCONTACTEMAIL'] == 'Y'
)
{
$result['CRM_EMAILS'] = self::searchCrmEntities(array(
'search' => $search,
'nameTemplate' => $nameTemplate,
'entities' => array("CONTACT"),
'searchByEmailOnly' => true
), $result['USERS']);
}
if (
isset($requestFields['CRM_SEARCH'])
&& $requestFields['CRM_SEARCH'] == 'Y'
)
{
$crmAllowedTypesList = array();
if (
isset($requestFields['CRM_SEARCH_TYPES'])
&& is_array($requestFields['CRM_SEARCH_TYPES'])
&& !empty($requestFields['CRM_SEARCH_TYPES'])
)
{
$crmAllowedTypesList = $requestFields['CRM_SEARCH_TYPES'];
}
$result['CONTACTS'] = array();
$result['COMPANIES'] = array();
$result['LEADS'] = array();
$result['DEALS'] = array();
if (
empty($crmAllowedTypesList)
|| in_array("CRMCONTACT", $crmAllowedTypesList)
)
{
$result['CONTACTS'] = self::searchCrmContacts(array(
'search' => $search,
'nameTemplate' => $nameTemplate
));
}
if (
empty($crmAllowedTypesList)
|| in_array("CRMCOMPANY", $crmAllowedTypesList)
)
{
$result['CONTACTS'] = self::searchCrmCompanies(array(
'search' => $search
));
}
if (
empty($crmAllowedTypesList)
|| in_array("CRMLEAD", $crmAllowedTypesList)
)
{
$result['LEADS'] = self::searchCrmLeads(array(
'search' => $search,
'nameTemplate' => $nameTemplate
));
}
if (
empty($crmAllowedTypesList)
|| in_array("CRMDEAL", $crmAllowedTypesList)
)
{
$result['LEADS'] = self::searchCrmDeals(array(
'search' => $search,
'nameTemplate' => $nameTemplate
));
}
}
return $result;
}
}