PageRenderTime 42ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

/modules/socialnetwork/lib/integration/main/uiselector/search.php

https://gitlab.com/alexprowars/bitrix
PHP | 532 lines | 461 code | 65 blank | 6 comment | 75 complexity | 68e6466f6a34ebcfa93f6da7a743f22f MD5 | raw file
  1. <?php
  2. /**
  3. * Bitrix Framework
  4. * @package bitrix
  5. * @subpackage socialnetwork
  6. * @copyright 2001-2017 Bitrix
  7. */
  8. namespace Bitrix\Socialnetwork\Integration\Main\UISelector;
  9. use Bitrix\Main\Localization\Loc;
  10. use Bitrix\Main\Event;
  11. use Bitrix\Main\EventResult;
  12. use Bitrix\Main\Loader;
  13. use Bitrix\Main\ModuleManager;
  14. Loc::loadMessages(__FILE__);
  15. class Search
  16. {
  17. protected static function actionProcessAjaxGetDepartmentData($requestFields = array())
  18. {
  19. return array(
  20. 'USERS' => \CSocNetLogDestination::getUsers(
  21. array(
  22. 'deportament_id' => $requestFields['DEPARTMENT_ID'],
  23. "NAME_TEMPLATE" => Handler::getNameTemplate($requestFields)
  24. )
  25. ),
  26. 'dataOnly' => true
  27. );
  28. }
  29. public static function searchNetworkUsers($params = array())
  30. {
  31. $searchResult = array();
  32. $search = $params['search'];
  33. $nameTemplate = $params['nameTemplate'];
  34. $network = new \Bitrix\Socialservices\Network();
  35. if ($network->isEnabled())
  36. {
  37. $networkResult = $network->searchUser($search);
  38. if ($networkResult)
  39. {
  40. foreach ($networkResult as $user)
  41. {
  42. $user = \CSocNetLogDestination::formatNetworkUser($user, array(
  43. "NAME_TEMPLATE" => $nameTemplate,
  44. ));
  45. $searchResult[$user['id']] = $user;
  46. }
  47. $userList = \Bitrix\Main\UserTable::getList(array(
  48. "select" => array("ID", "XML_ID"),
  49. "filter" => array(
  50. "=EXTERNAL_AUTH_ID" => "replica",
  51. "=XML_ID" => array_keys($searchResult),
  52. ),
  53. ));
  54. while ($user = $userList->fetch())
  55. {
  56. unset($searchResult[$user["XML_ID"]]);
  57. }
  58. }
  59. }
  60. return $searchResult;
  61. }
  62. public static function searchUsers($params = array(), &$searchModified)
  63. {
  64. $search = $params['search'];
  65. $nameTemplate = $params['nameTemplate'];
  66. $requestFields = $params['requestFields'];
  67. $searchResult = \CSocNetLogDestination::searchUsers(
  68. array(
  69. "SEARCH" => $search,
  70. "NAME_TEMPLATE" => $nameTemplate,
  71. "SELF" => (!isset($requestFields['SELF']) || $requestFields['SELF'] != 'N'),
  72. "EMPLOYEES_ONLY" => (isset($requestFields['EXTRANET_SEARCH']) && $requestFields['EXTRANET_SEARCH'] == "I"),
  73. "EXTRANET_ONLY" => (isset($requestFields['EXTRANET_SEARCH']) && $requestFields['EXTRANET_SEARCH'] == "E"),
  74. "DEPARTAMENT_ID" => (
  75. isset($requestFields['DEPARTMENT_ID'])
  76. && intval($requestFields['DEPARTMENT_ID']) > 0
  77. ? intval($requestFields['DEPARTMENT_ID'])
  78. : false
  79. ),
  80. "EMAIL_USERS" => (isset($requestFields['EMAIL_USERS']) && $requestFields['EMAIL_USERS'] == 'Y'),
  81. "CRMEMAIL_USERS" => (isset($requestFields['CRMEMAIL']) && $requestFields['CRMEMAIL'] == 'Y'),
  82. "NETWORK_SEARCH" => $params['useNetwork'],
  83. ),
  84. $searchModified
  85. );
  86. return $searchResult;
  87. }
  88. protected static function searchSonetGroups($params = array())
  89. {
  90. $search = $params['search'];
  91. $features = $params['features'];
  92. return \CSocNetLogDestination::searchSonetGroups(array(
  93. "SEARCH" => $search,
  94. "FEATURES" => $features
  95. ));
  96. }
  97. protected static function searchCrmEmails($params = array(), &$usersList)
  98. {
  99. $search = $params['search'];
  100. $nameTemplate = $params['nameTemplate'];
  101. $searchResult = \CSocNetLogDestination::searchCrmEntities(array(
  102. "SEARCH" => $search,
  103. "NAME_TEMPLATE" => $nameTemplate
  104. ));
  105. return self::filterCrmSearchResult($searchResult, $usersList);
  106. }
  107. protected static function searchCrmEntities($params = array(), &$usersList)
  108. {
  109. $search = $params['search'];
  110. $nameTemplate = $params['nameTemplate'];
  111. $entitiesList = $params['entities'];
  112. $searchByEmailOnly = $params['searchByEmailOnly'];
  113. $searchResult = \CSocNetLogDestination::searchCrmEntities(array(
  114. "SEARCH" => $search,
  115. "NAME_TEMPLATE" => $nameTemplate,
  116. "ENTITIES" => $entitiesList,
  117. "SEARCH_BY_EMAIL_ONLY" => ($searchByEmailOnly ? "Y" : "N")
  118. ));
  119. return self::filterCrmSearchResult($searchResult, $usersList);
  120. }
  121. protected static function filterCrmSearchResult($searchResult, &$usersList)
  122. {
  123. foreach($usersList as $key => $value)
  124. {
  125. if (array_key_exists($value["crmEntity"], $searchResult))
  126. {
  127. unset($searchResult[$value["crmEntity"]]);
  128. }
  129. }
  130. $crmUsersListTmp = $usersListTmp= array();
  131. foreach($usersList as $key => $user)
  132. {
  133. if (!empty($user['crmEntity']))
  134. {
  135. $crmUsersListTmp[$key] = $user;
  136. }
  137. else
  138. {
  139. $usersListTmp[$key] = $user;
  140. }
  141. }
  142. foreach($searchResult as $key => $user)
  143. {
  144. if (!empty($user['crmEntity']))
  145. {
  146. $crmUsersListTmp[$key] = $user;
  147. }
  148. else
  149. {
  150. $usersListTmp[$key] = $user;
  151. }
  152. }
  153. $usersList = $usersListTmp;
  154. return $crmUsersListTmp;
  155. }
  156. protected static function searchCrmContacts($params = array())
  157. {
  158. $searchResult = array();
  159. if (Loader::includeModule('crm'))
  160. {
  161. $search = $params['search'];
  162. $nameTemplate = $params['nameTemplate'];
  163. $res = \CCrmContact::getListEx(
  164. [],
  165. ['%FULL_NAME' => $search, '@CATEGORY_ID' => 0,],
  166. false,
  167. ['nTopCount' => 20],
  168. ['ID', 'NAME', 'SECOND_NAME', 'LAST_NAME', 'COMPANY_TITLE', 'PHOTO']
  169. );
  170. while ($res && ($contact = $res->fetch()))
  171. {
  172. $searchResult['CRMCONTACT'.$contact['ID']] = array(
  173. 'id' => 'CRMCONTACT'.$contact['ID'],
  174. 'entityType' => 'contacts',
  175. 'entityId' => $contact['ID'],
  176. 'name' => htmlspecialcharsbx(\CUser::formatName(
  177. $nameTemplate,
  178. array(
  179. 'LOGIN' => '',
  180. 'NAME' => $contact['NAME'],
  181. 'SECOND_NAME' => $contact['SECOND_NAME'],
  182. 'LAST_NAME' => $contact['LAST_NAME']
  183. ),
  184. false, false
  185. )),
  186. 'desc' => htmlspecialcharsbx($contact['COMPANY_TITLE'])
  187. );
  188. if (!empty($contact['PHOTO']) && intval($contact['PHOTO']) > 0)
  189. {
  190. $image = \CFile::resizeImageGet($contact['PHOTO'], array('width' => 100, 'height' => 100), BX_RESIZE_IMAGE_EXACT);
  191. $searchResult['CRMCONTACT'.$contact['ID']]['avatar'] = $image['src'];
  192. }
  193. }
  194. }
  195. return $searchResult;
  196. }
  197. protected static function searchCrmCompanies($params = array())
  198. {
  199. $searchResult = array();
  200. if (Loader::includeModule('crm'))
  201. {
  202. $search = $params['search'];
  203. $companyTypeList = \CCrmStatus::getStatusListEx('COMPANY_TYPE');
  204. $companyIndustryList = \CCrmStatus::getStatusListEx('INDUSTRY');
  205. $res = \CCrmCompany::getListEx(
  206. [],
  207. ['%TITLE' => $search, '@CATEGORY_ID' => 0,],
  208. false,
  209. ['nTopCount' => 20],
  210. ['ID', 'TITLE', 'COMPANY_TYPE', 'INDUSTRY', 'LOGO']
  211. );
  212. while ($res && ($company = $res->fetch()))
  213. {
  214. $descList = array();
  215. if (isset($companyTypeList[$company['COMPANY_TYPE']]))
  216. {
  217. $descList[] = $companyTypeList[$company['COMPANY_TYPE']];
  218. }
  219. if (isset($companyIndustryList[$company['INDUSTRY']]))
  220. {
  221. $descList[] = $companyIndustryList[$company['INDUSTRY']];
  222. }
  223. $searchResult['CRMCOMPANY'.$company['ID']] = array(
  224. 'id' => 'CRMCOMPANY'.$company['ID'],
  225. 'entityId' => $company['ID'],
  226. 'entityType' => 'companies',
  227. 'name' => htmlspecialcharsbx(str_replace(array(';', ','), ' ', $company['TITLE'])),
  228. 'desc' => htmlspecialcharsbx(implode(', ', $descList))
  229. );
  230. if (!empty($company['LOGO']) && intval($company['LOGO']) > 0)
  231. {
  232. $image = \CFile::resizeImageGet($company['LOGO'], array('width' => 100, 'height' => 100), BX_RESIZE_IMAGE_EXACT);
  233. $searchResult['CRMCOMPANY'.$company['ID']]['avatar'] = $image['src'];
  234. }
  235. }
  236. }
  237. return $searchResult;
  238. }
  239. protected static function searchCrmLeads($params = array())
  240. {
  241. $searchResult = array();
  242. if (Loader::includeModule('crm'))
  243. {
  244. $search = $params['search'];
  245. $nameTemplate = $params['nameTemplate'];
  246. $res = \CCrmLead::getListEx(
  247. $arOrder = array(),
  248. $arFilter = array('LOGIC' => 'OR', '%FULL_NAME' => $search, '%TITLE' => $search),
  249. $arGroupBy = false,
  250. $arNavStartParams = array('nTopCount' => 20),
  251. $arSelectFields = array('ID', 'TITLE', 'NAME', 'SECOND_NAME', 'LAST_NAME', 'STATUS_ID')
  252. );
  253. while ($res && ($lead = $res->fetch()))
  254. {
  255. $searchResult['CRMLEAD'.$lead['ID']] = array(
  256. 'id' => 'CRMLEAD'.$lead['ID'],
  257. 'entityId' => $lead['ID'],
  258. 'entityType' => 'leads',
  259. 'name' => htmlspecialcharsbx($lead['TITLE']),
  260. 'desc' => htmlspecialcharsbx(\CUser::formatName(
  261. $nameTemplate,
  262. array(
  263. 'LOGIN' => '',
  264. 'NAME' => $lead['NAME'],
  265. 'SECOND_NAME' => $lead['SECOND_NAME'],
  266. 'LAST_NAME' => $lead['LAST_NAME']
  267. ),
  268. false, false
  269. ))
  270. );
  271. }
  272. }
  273. return $searchResult;
  274. }
  275. protected static function searchCrmDeals($params = array())
  276. {
  277. $searchResult = array();
  278. if (Loader::includeModule('crm'))
  279. {
  280. $search = $params['search'];
  281. $nameTemplate = $params['nameTemplate'];
  282. $res = \CCrmDeal::getListEx(
  283. $arOrder = array(),
  284. $arFilter = array('%TITLE' => $search),
  285. $arGroupBy = false,
  286. $arNavStartParams = array('nTopCount' => 20),
  287. $arSelectFields = array('ID', 'TITLE', 'COMPANY_TITLE', 'CONTACT_NAME', 'CONTACT_SECOND_NAME', 'CONTACT_LAST_NAME')
  288. );
  289. while ($res && ($deal = $res->fetch()))
  290. {
  291. $descList = array();
  292. if ($deal['COMPANY_TITLE'] != '')
  293. {
  294. $descList[] = $deal['COMPANY_TITLE'];
  295. }
  296. $descList[] = \CUser::formatName(
  297. $nameTemplate,
  298. array(
  299. 'LOGIN' => '',
  300. 'NAME' => $deal['CONTACT_NAME'],
  301. 'SECOND_NAME' => $deal['CONTACT_SECOND_NAME'],
  302. 'LAST_NAME' => $deal['CONTACT_LAST_NAME']
  303. ),
  304. false, false
  305. );
  306. $arDeals['CRMDEAL'.$deal['ID']] = array(
  307. 'id' => 'CRMDEAL'.$deal['ID'],
  308. 'entityId' => $deal['ID'],
  309. 'entityType' => 'deals',
  310. 'name' => htmlspecialcharsbx($deal['TITLE']),
  311. 'desc' => htmlspecialcharsbx(implode(', ', $descList))
  312. );
  313. }
  314. }
  315. return $searchResult;
  316. }
  317. public static function process($requestFields = array())
  318. {
  319. $result = array(
  320. 'dataOnly' => true
  321. );
  322. $search = $requestFields['SEARCH'];
  323. $searchConverted = (!empty($requestFields['SEARCH_CONVERTED']) ? $requestFields['SEARCH_CONVERTED'] : false);
  324. $nameTemplate = Handler::getNameTemplate($requestFields);
  325. if (
  326. isset($requestFields['ADDITIONAL_SEARCH'])
  327. && $requestFields['ADDITIONAL_SEARCH'] == 'Y'
  328. )
  329. {
  330. $result["USERS"] = array();
  331. if (
  332. isset($requestFields['NETWORK_SEARCH'])
  333. && $requestFields['NETWORK_SEARCH'] == 'Y'
  334. && Loader::includeModule('socialservices')
  335. )
  336. {
  337. $result["USERS"] = self::searchNetworkUsers(array(
  338. 'search' => $search,
  339. 'nameTemplate' => $nameTemplate
  340. ));
  341. }
  342. return $result;
  343. }
  344. if (
  345. !isset($requestFields['USER_SEARCH'])
  346. || $requestFields['USER_SEARCH'] != 'N'
  347. )
  348. {
  349. $searchModified = false;
  350. $result["USERS"] = self::searchUsers(array(
  351. 'search' => $search,
  352. 'nameTemplate' => $nameTemplate,
  353. 'useNetwork' => false,
  354. 'requestFields' => $requestFields
  355. ), $searchModified);
  356. if (!empty($searchModified))
  357. {
  358. $result['SEARCH'] = $searchModified;
  359. }
  360. if (
  361. empty($result['USERS'])
  362. && $searchConverted
  363. && $search != $searchConverted
  364. )
  365. {
  366. $result['USERS'] = self::searchUsers(array(
  367. 'search' => $searchConverted,
  368. 'nameTemplate' => $nameTemplate,
  369. 'useNetwork' => false,
  370. 'requestFields' => $requestFields
  371. ), $searchModified);
  372. $result['SEARCH'] = $searchConverted;
  373. }
  374. }
  375. if (
  376. isset($requestFields['SEARCH_SONET_GROUPS'])
  377. && $requestFields['SEARCH_SONET_GROUPS'] == 'Y'
  378. )
  379. {
  380. $result['SONET_GROUPS'] = self::searchSonetGroups(array(
  381. 'search' => $search,
  382. 'features' => (isset($requestFields['SEARCH_SONET_FEATUES']) && is_array($requestFields['SEARCH_SONET_FEATUES']) ? $requestFields['SEARCH_SONET_FEATUES'] : false),
  383. ));
  384. }
  385. if (
  386. isset($requestFields['CRMEMAIL'])
  387. && $requestFields['CRMEMAIL'] == 'Y'
  388. )
  389. {
  390. $result['CRM_EMAILS'] = self::searchCrmEmails(array(
  391. 'search' => $search,
  392. 'nameTemplate' => $nameTemplate
  393. ), $result['USERS']);
  394. }
  395. elseif (
  396. isset($requestFields['CRMCONTACTEMAIL'])
  397. && $requestFields['CRMCONTACTEMAIL'] == 'Y'
  398. )
  399. {
  400. $result['CRM_EMAILS'] = self::searchCrmEntities(array(
  401. 'search' => $search,
  402. 'nameTemplate' => $nameTemplate,
  403. 'entities' => array("CONTACT"),
  404. 'searchByEmailOnly' => true
  405. ), $result['USERS']);
  406. }
  407. if (
  408. isset($requestFields['CRM_SEARCH'])
  409. && $requestFields['CRM_SEARCH'] == 'Y'
  410. )
  411. {
  412. $crmAllowedTypesList = array();
  413. if (
  414. isset($requestFields['CRM_SEARCH_TYPES'])
  415. && is_array($requestFields['CRM_SEARCH_TYPES'])
  416. && !empty($requestFields['CRM_SEARCH_TYPES'])
  417. )
  418. {
  419. $crmAllowedTypesList = $requestFields['CRM_SEARCH_TYPES'];
  420. }
  421. $result['CONTACTS'] = array();
  422. $result['COMPANIES'] = array();
  423. $result['LEADS'] = array();
  424. $result['DEALS'] = array();
  425. if (
  426. empty($crmAllowedTypesList)
  427. || in_array("CRMCONTACT", $crmAllowedTypesList)
  428. )
  429. {
  430. $result['CONTACTS'] = self::searchCrmContacts(array(
  431. 'search' => $search,
  432. 'nameTemplate' => $nameTemplate
  433. ));
  434. }
  435. if (
  436. empty($crmAllowedTypesList)
  437. || in_array("CRMCOMPANY", $crmAllowedTypesList)
  438. )
  439. {
  440. $result['CONTACTS'] = self::searchCrmCompanies(array(
  441. 'search' => $search
  442. ));
  443. }
  444. if (
  445. empty($crmAllowedTypesList)
  446. || in_array("CRMLEAD", $crmAllowedTypesList)
  447. )
  448. {
  449. $result['LEADS'] = self::searchCrmLeads(array(
  450. 'search' => $search,
  451. 'nameTemplate' => $nameTemplate
  452. ));
  453. }
  454. if (
  455. empty($crmAllowedTypesList)
  456. || in_array("CRMDEAL", $crmAllowedTypesList)
  457. )
  458. {
  459. $result['LEADS'] = self::searchCrmDeals(array(
  460. 'search' => $search,
  461. 'nameTemplate' => $nameTemplate
  462. ));
  463. }
  464. }
  465. return $result;
  466. }
  467. }