PageRenderTime 53ms CodeModel.GetById 27ms RepoModel.GetById 1ms app.codeStats 0ms

/components/bitrix/rest.crm.selector/component.php

https://gitlab.com/alexprowars/bitrix
PHP | 557 lines | 491 code | 53 blank | 13 comment | 52 complexity | 785f60c71d2d1600b07f20d9aa1e1d4c MD5 | raw file
  1. <?php
  2. /**
  3. * @deprecated
  4. *
  5. * use bitrix:crm.entity.selector.ajax
  6. */
  7. if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true)
  8. {
  9. die();
  10. }
  11. /**
  12. * Bitrix vars
  13. *
  14. * @var array $arParams
  15. * @var array $arResult
  16. * @var CBitrixComponent $this
  17. * @global CMain $APPLICATION
  18. */
  19. if(!\Bitrix\Main\Loader::includeModule('crm'))
  20. {
  21. return;
  22. }
  23. $preloadItemsCnt = 10;
  24. $allowedEntityTypes = array('lead', 'contact', 'company', 'deal', 'quote');
  25. $entityPrefix = array('lead' => 'L', 'contact' => 'C', 'company' => 'CO', 'deal' => 'D', 'quote' => 'Q');
  26. $arParams['MULTIPLE'] = $arParams['MULTIPLE'] == 'Y' ? 'Y' : 'N';
  27. $arParams['ENTITY_TYPE'] = is_array($arParams['ENTITY_TYPE'])
  28. ? array_intersect(
  29. array_values($arParams['ENTITY_TYPE']),
  30. $allowedEntityTypes
  31. )
  32. : array();
  33. if(count($arParams['ENTITY_TYPE']) <= 0)
  34. {
  35. $arParams['ENTITY_TYPE'] = array('lead', 'contact', 'company');
  36. }
  37. $arParams['NAME'] = trim($arParams['NAME']);
  38. if($arParams['NAME'] == '')
  39. {
  40. $arParams['NAME'] = 'restCrmSelector';
  41. }
  42. $selectedList = array();
  43. if(is_array($arParams['VALUE']))
  44. {
  45. foreach($arParams['VALUE'] as $key => $valueList)
  46. {
  47. if(in_array($key, $allowedEntityTypes) && is_array($valueList))
  48. {
  49. foreach($valueList as $item)
  50. {
  51. if(intval($item) > 0)
  52. {
  53. $value = $entityPrefix[$key].'_'.intval($item);
  54. $selectedList[$value] = $value;
  55. }
  56. }
  57. }
  58. elseif(
  59. !is_array($valueList)
  60. && preg_match('/^('.implode('|', $entityPrefix).')_\d+$/i', $valueList)
  61. )
  62. {
  63. $selectedList[$valueList] = $valueList;
  64. }
  65. }
  66. }
  67. $selectedList = array_unique($selectedList);
  68. if($arParams['MULTIPLE'] == 'N' && count($selectedList) > 1)
  69. {
  70. $item = array_shift($selectedList);
  71. $selectedList = array($item => $item);
  72. }
  73. $arResult['ELEMENT'] = array();
  74. if(in_array('lead', $arParams['ENTITY_TYPE']))
  75. {
  76. $obRes = \CCrmLead::GetListEx(
  77. array('ID' => 'DESC'),
  78. array(),
  79. false,
  80. array('nTopCount' => $preloadItemsCnt),
  81. array('ID', 'TITLE', 'HONORIFIC', 'NAME', 'SECOND_NAME', 'LAST_NAME')
  82. );
  83. while($arRes = $obRes->Fetch())
  84. {
  85. $arRes['SID'] = $entityPrefix['lead'].'_'.$arRes['ID'];
  86. if(isset($selectedList[$arRes['SID']]))
  87. {
  88. unset($selectedList[$arRes['SID']]);
  89. $selected = 'Y';
  90. }
  91. else
  92. {
  93. $selected = 'N';
  94. }
  95. $description = \CCrmLead::PrepareFormattedName(
  96. array(
  97. 'HONORIFIC' => isset($arRes['HONORIFIC']) ? $arRes['HONORIFIC'] : '',
  98. 'NAME' => isset($arRes['NAME']) ? $arRes['NAME'] : '',
  99. 'SECOND_NAME' => isset($arRes['SECOND_NAME']) ? $arRes['SECOND_NAME'] : '',
  100. 'LAST_NAME' => isset($arRes['LAST_NAME']) ? $arRes['LAST_NAME'] : ''
  101. )
  102. );
  103. $arResult['ELEMENT'][] = array(
  104. 'title' => (str_replace(array(';', ','), ' ', $arRes['TITLE'])),
  105. 'desc' => $description,
  106. 'id' => $arRes['SID'],
  107. 'url' => \CComponentEngine::MakePathFromTemplate(
  108. \Bitrix\Main\Config\Option::get('crm', 'path_to_lead_show'),
  109. array(
  110. 'lead_id' => $arRes['ID']
  111. )
  112. ),
  113. 'type' => 'lead',
  114. 'selected' => $selected
  115. );
  116. }
  117. }
  118. if(in_array('contact', $arParams['ENTITY_TYPE']))
  119. {
  120. $obRes = \CCrmContact::GetListEx(
  121. array('ID' => 'DESC'),
  122. array(),
  123. false,
  124. array('nTopCount' => $preloadItemsCnt),
  125. array('ID', 'HONORIFIC', 'NAME', 'SECOND_NAME', 'LAST_NAME', 'COMPANY_TITLE', 'PHOTO')
  126. );
  127. while($arRes = $obRes->Fetch())
  128. {
  129. $arImg = array();
  130. if(!empty($arRes['PHOTO'])&& intval($arRes['PHOTO']) > 0)
  131. {
  132. $arImg = \CFile::ResizeImageGet($arRes['PHOTO'], array('width' => 25, 'height' => 25), BX_RESIZE_IMAGE_EXACT);
  133. }
  134. $arRes['SID'] = $entityPrefix['contact'].'_'.$arRes['ID'];
  135. if(isset($selectedList[$arRes['SID']]))
  136. {
  137. unset($selectedList[$arRes['SID']]);
  138. $selected = 'Y';
  139. }
  140. else
  141. {
  142. $selected = 'N';
  143. }
  144. $title = \CCrmContact::PrepareFormattedName(
  145. array(
  146. 'HONORIFIC' => isset($arRes['HONORIFIC']) ? $arRes['HONORIFIC'] : '',
  147. 'NAME' => isset($arRes['NAME']) ? $arRes['NAME'] : '',
  148. 'SECOND_NAME' => isset($arRes['SECOND_NAME']) ? $arRes['SECOND_NAME'] : '',
  149. 'LAST_NAME' => isset($arRes['LAST_NAME']) ? $arRes['LAST_NAME'] : ''
  150. )
  151. );
  152. $arResult['ELEMENT'][] = array(
  153. 'title' => $title,
  154. 'desc' => empty($arRes['COMPANY_TITLE']) ? '' : $arRes['COMPANY_TITLE'],
  155. 'id' => $arRes['SID'],
  156. 'url' => \CComponentEngine::MakePathFromTemplate(
  157. \Bitrix\Main\Config\Option::get('crm', 'path_to_contact_show'),
  158. array('contact_id' => $arRes['ID'])
  159. ),
  160. 'image' => $arImg['src'],
  161. 'type' => 'contact',
  162. 'selected' => $selected
  163. );
  164. }
  165. }
  166. if(in_array('company', $arParams['ENTITY_TYPE']))
  167. {
  168. $arCompanyTypeList = CCrmStatus::GetStatusListEx('COMPANY_TYPE');
  169. $arCompanyIndustryList = CCrmStatus::GetStatusListEx('INDUSTRY');
  170. $obRes = \CCrmCompany::GetListEx(
  171. array('ID' => 'DESC'),
  172. array(),
  173. false,
  174. array('nTopCount' => $preloadItemsCnt),
  175. array('ID', 'TITLE', 'COMPANY_TYPE', 'INDUSTRY', 'LOGO')
  176. );
  177. while($arRes = $obRes->Fetch())
  178. {
  179. $arImg = array();
  180. if(!empty($arRes['LOGO']) && intval($arRes['LOGO']) > 0)
  181. {
  182. $arImg = \CFile::ResizeImageGet($arRes['LOGO'], array('width' => 25, 'height' => 25), BX_RESIZE_IMAGE_EXACT);
  183. }
  184. $arRes['SID'] = $entityPrefix['company'].'_'.$arRes['ID'];
  185. if(isset($selectedList[$arRes['SID']]))
  186. {
  187. unset($selectedList[$arRes['SID']]);
  188. $selected = 'Y';
  189. }
  190. else
  191. {
  192. $selected = 'N';
  193. }
  194. $arDesc = array();
  195. if(isset($arCompanyTypeList[$arRes['COMPANY_TYPE']]))
  196. {
  197. $arDesc[] = $arCompanyTypeList[$arRes['COMPANY_TYPE']];
  198. }
  199. if(isset($arCompanyIndustryList[$arRes['INDUSTRY']]))
  200. {
  201. $arDesc[] = $arCompanyIndustryList[$arRes['INDUSTRY']];
  202. }
  203. $arResult['ELEMENT'][] = array(
  204. 'title' => (str_replace(array(';', ','), ' ', $arRes['TITLE'])),
  205. 'desc' => implode(', ', $arDesc),
  206. 'id' => $arRes['SID'],
  207. 'url' => \CComponentEngine::MakePathFromTemplate(
  208. \Bitrix\Main\Config\Option::get('crm', 'path_to_company_show'),
  209. array(
  210. 'company_id' => $arRes['ID']
  211. )
  212. ),
  213. 'image' => $arImg['src'],
  214. 'type' => 'company',
  215. 'selected' => $selected
  216. );
  217. }
  218. }
  219. if(in_array('deal', $arParams['ENTITY_TYPE']))
  220. {
  221. $obRes = \CCrmDeal::GetListEx(
  222. array('ID' => 'DESC'),
  223. array(),
  224. false,
  225. array('nTopCount' => $preloadItemsCnt),
  226. array('ID', 'TITLE', 'STAGE_ID', 'COMPANY_TITLE', 'CONTACT_FULL_NAME')
  227. );
  228. while($arRes = $obRes->Fetch())
  229. {
  230. $arRes['SID'] = $entityPrefix['deal'].'_'.$arRes['ID'];
  231. if(isset($selectedList[$arRes['SID']]))
  232. {
  233. unset($selectedList[$arRes['SID']]);
  234. $selected = 'Y';
  235. }
  236. else
  237. {
  238. $selected = 'N';
  239. }
  240. $clientTitle = (!empty($arRes['COMPANY_TITLE'])) ? $arRes['COMPANY_TITLE'] : '';
  241. $clientTitle .= (($clientTitle !== '' && !empty($arRes['CONTACT_FULL_NAME'])) ? ', ' : '').$arRes['CONTACT_FULL_NAME'];
  242. $arResult['ELEMENT'][] = array(
  243. 'title' => (str_replace(array(';', ','), ' ', $arRes['TITLE'])),
  244. 'desc' => $clientTitle,
  245. 'id' => $arRes['SID'],
  246. 'url' => \CComponentEngine::MakePathFromTemplate(
  247. \Bitrix\Main\Config\Option::get('crm', 'path_to_deal_show'),
  248. array(
  249. 'deal_id' => $arRes['ID']
  250. )
  251. ),
  252. 'type' => 'deal',
  253. 'selected' => $selected
  254. );
  255. }
  256. }
  257. if(in_array('quote', $arParams['ENTITY_TYPE']))
  258. {
  259. $arQuoteStageList = CCrmStatus::GetStatusListEx('QUOTE_STAGE');
  260. $obRes = \CCrmQuote::GetList(
  261. array('ID' => 'DESC'),
  262. array(),
  263. false,
  264. array('nTopCount' => $preloadItemsCnt),
  265. array('ID', 'TITLE', 'STAGE_ID', 'COMPANY_TITLE', 'CONTACT_FULL_NAME')
  266. );
  267. while($arRes = $obRes->Fetch())
  268. {
  269. $arRes['SID'] = $entityPrefix['quote'].'_'.$arRes['ID'];
  270. if(isset($selectedList[$arRes['SID']]))
  271. {
  272. unset($selectedList[$arRes['SID']]);
  273. $selected = 'Y';
  274. }
  275. else
  276. {
  277. $selected = 'N';
  278. }
  279. $clientTitle = (!empty($arRes['COMPANY_TITLE'])) ? $arRes['COMPANY_TITLE'] : '';
  280. $clientTitle .= (($clientTitle !== '' && !empty($arRes['CONTACT_FULL_NAME'])) ? ', ' : '').$arRes['CONTACT_FULL_NAME'];
  281. $arResult['ELEMENT'][] = array(
  282. 'title' => (str_replace(array(';', ','), ' ', $arRes['TITLE'])),
  283. 'desc' => $clientTitle,
  284. 'id' => $arRes['SID'],
  285. 'url' => \CComponentEngine::MakePathFromTemplate(
  286. \Bitrix\Main\Config\Option::get('crm', 'path_to_quote_show'),
  287. array(
  288. 'quote_id' => $arRes['ID']
  289. )
  290. ),
  291. 'type' => 'quote',
  292. 'selected' => $selected
  293. );
  294. }
  295. }
  296. if(count($selectedList) > 0)
  297. {
  298. $additionalSelect = array();
  299. foreach($selectedList as $item)
  300. {
  301. list($type, $id) = explode('_', $item);
  302. if(!isset($additionalSelect[$type]))
  303. {
  304. $additionalSelect[$type] = array($id);
  305. }
  306. else
  307. {
  308. $additionalSelect[$type][] = $id;
  309. }
  310. }
  311. if(array_key_exists($entityPrefix['lead'], $additionalSelect) && in_array('lead', $arParams['ENTITY_TYPE']))
  312. {
  313. $obRes = \CCrmLead::GetListEx(
  314. array('ID' => 'DESC'),
  315. array('=ID' => $additionalSelect[$entityPrefix['lead']]),
  316. false,
  317. false,
  318. array('ID', 'TITLE', 'HONORIFIC', 'NAME', 'SECOND_NAME', 'LAST_NAME')
  319. );
  320. while($arRes = $obRes->Fetch())
  321. {
  322. $arRes['SID'] = $entityPrefix['lead'].'_'.$arRes['ID'];
  323. $description = \CCrmLead::PrepareFormattedName(
  324. array(
  325. 'HONORIFIC' => isset($arRes['HONORIFIC']) ? $arRes['HONORIFIC'] : '',
  326. 'NAME' => isset($arRes['NAME']) ? $arRes['NAME'] : '',
  327. 'SECOND_NAME' => isset($arRes['SECOND_NAME']) ? $arRes['SECOND_NAME'] : '',
  328. 'LAST_NAME' => isset($arRes['LAST_NAME']) ? $arRes['LAST_NAME'] : ''
  329. )
  330. );
  331. $arResult['ELEMENT'][] = array(
  332. 'title' => (str_replace(array(';', ','), ' ', $arRes['TITLE'])),
  333. 'desc' => $description,
  334. 'id' => $arRes['SID'],
  335. 'url' => \CComponentEngine::MakePathFromTemplate(
  336. \Bitrix\Main\Config\Option::get('crm', 'path_to_lead_show'),
  337. array(
  338. 'lead_id' => $arRes['ID']
  339. )
  340. ),
  341. 'type' => 'lead',
  342. 'selected' => 'Y',
  343. );
  344. }
  345. }
  346. if(array_key_exists($entityPrefix['contact'], $additionalSelect) && in_array('contact', $arParams['ENTITY_TYPE']))
  347. {
  348. $obRes = \CCrmContact::GetListEx(
  349. array('ID' => 'DESC'),
  350. array('=ID' => $additionalSelect[$entityPrefix['contact']]),
  351. false,
  352. false,
  353. array('ID', 'HONORIFIC', 'NAME', 'SECOND_NAME', 'LAST_NAME', 'COMPANY_TITLE', 'PHOTO')
  354. );
  355. while($arRes = $obRes->Fetch())
  356. {
  357. $arImg = array();
  358. if(!empty($arRes['PHOTO']) && intval($arRes['PHOTO']) > 0)
  359. {
  360. $arImg = \CFile::ResizeImageGet($arRes['PHOTO'], array('width' => 25, 'height' => 25), BX_RESIZE_IMAGE_EXACT);
  361. }
  362. $arRes['SID'] = $entityPrefix['lead'].'_'.$arRes['ID'];
  363. $title = \CCrmContact::PrepareFormattedName(
  364. array(
  365. 'HONORIFIC' => isset($arRes['HONORIFIC']) ? $arRes['HONORIFIC'] : '',
  366. 'NAME' => isset($arRes['NAME']) ? $arRes['NAME'] : '',
  367. 'SECOND_NAME' => isset($arRes['SECOND_NAME']) ? $arRes['SECOND_NAME'] : '',
  368. 'LAST_NAME' => isset($arRes['LAST_NAME']) ? $arRes['LAST_NAME'] : ''
  369. )
  370. );
  371. $arResult['ELEMENT'][] = array(
  372. 'title' => $title,
  373. 'desc' => empty($arRes['COMPANY_TITLE']) ? '' : $arRes['COMPANY_TITLE'],
  374. 'id' => $arRes['SID'],
  375. 'url' => \CComponentEngine::MakePathFromTemplate(
  376. \Bitrix\Main\Config\Option::get('crm', 'path_to_contact_show'),
  377. array(
  378. 'contact_id' => $arRes['ID']
  379. )
  380. ),
  381. 'image' => $arImg['src'],
  382. 'type' => 'contact',
  383. 'selected' => 'Y'
  384. );
  385. }
  386. }
  387. if(array_key_exists($entityPrefix['company'], $additionalSelect) && in_array('company', $arParams['ENTITY_TYPE']))
  388. {
  389. $arCompanyTypeList = CCrmStatus::GetStatusListEx('COMPANY_TYPE');
  390. $arCompanyIndustryList = CCrmStatus::GetStatusListEx('INDUSTRY');
  391. $obRes = \CCrmCompany::GetListEx(
  392. array('ID' => 'DESC'),
  393. array('=ID' => $additionalSelect[$entityPrefix['company']]),
  394. false,
  395. false,
  396. array('ID', 'TITLE', 'COMPANY_TYPE', 'INDUSTRY', 'LOGO')
  397. );
  398. while($arRes = $obRes->Fetch())
  399. {
  400. $arImg = array();
  401. if(!empty($arRes['LOGO']) && intval($arRes['LOGO']) > 0)
  402. {
  403. $arImg = \CFile::ResizeImageGet($arRes['LOGO'], array('width' => 25, 'height' => 25), BX_RESIZE_IMAGE_EXACT);
  404. }
  405. $arRes['SID'] = $entityPrefix['company'].'_'.$arRes['ID'];
  406. $arDesc = array();
  407. if(isset($arCompanyTypeList[$arRes['COMPANY_TYPE']]))
  408. {
  409. $arDesc[] = $arCompanyTypeList[$arRes['COMPANY_TYPE']];
  410. }
  411. if(isset($arCompanyIndustryList[$arRes['INDUSTRY']]))
  412. {
  413. $arDesc[] = $arCompanyIndustryList[$arRes['INDUSTRY']];
  414. }
  415. $arResult['ELEMENT'][] = array(
  416. 'title' => (str_replace(array(';', ','), ' ', $arRes['TITLE'])),
  417. 'desc' => implode(', ', $arDesc),
  418. 'id' => $arRes['SID'],
  419. 'url' => \CComponentEngine::MakePathFromTemplate(
  420. \Bitrix\Main\Config\Option::get('crm', 'path_to_company_show'),
  421. array(
  422. 'company_id' => $arRes['ID']
  423. )
  424. ),
  425. 'image' => $arImg['src'],
  426. 'type' => 'company',
  427. 'selected' => 'Y'
  428. );
  429. }
  430. }
  431. if(array_key_exists($entityPrefix['deal'], $additionalSelect) && in_array('deal', $arParams['ENTITY_TYPE']))
  432. {
  433. $obRes = \CCrmDeal::GetListEx(
  434. array('ID' => 'DESC'),
  435. array('=ID' => $additionalSelect[$entityPrefix['deal']]),
  436. false,
  437. false,
  438. array('ID', 'TITLE', 'STAGE_ID', 'COMPANY_TITLE', 'CONTACT_FULL_NAME')
  439. );
  440. $obRes = \CCrmDeal::GetListEx(
  441. array('ID' => 'DESC'),
  442. array('=ID' => $additionalSelect[$entityPrefix['deal']]),
  443. false,
  444. false,
  445. array('ID', 'TITLE', 'STAGE_ID', 'COMPANY_TITLE', 'CONTACT_FULL_NAME')
  446. );
  447. while($arRes = $obRes->Fetch())
  448. {
  449. $arRes['SID'] = $entityPrefix['deal'].'_'.$arRes['ID'];
  450. $clientTitle = (!empty($arRes['COMPANY_TITLE'])) ? $arRes['COMPANY_TITLE'] : '';
  451. $clientTitle .= (($clientTitle !== '' && !empty($arRes['CONTACT_FULL_NAME'])) ? ', ' : '').$arRes['CONTACT_FULL_NAME'];
  452. $arResult['ELEMENT'][] = array(
  453. 'title' => (str_replace(array(';', ','), ' ', $arRes['TITLE'])),
  454. 'desc' => $clientTitle,
  455. 'id' => $arRes['SID'],
  456. 'url' => \CComponentEngine::MakePathFromTemplate(
  457. \Bitrix\Main\Config\Option::get('crm', 'path_to_deal_show'),
  458. array(
  459. 'deal_id' => $arRes['ID']
  460. )
  461. ),
  462. 'type' => 'deal',
  463. 'selected' => 'Y'
  464. );
  465. }
  466. }
  467. if(array_key_exists($entityPrefix['quote'], $additionalSelect) && in_array('quote', $arParams['ENTITY_TYPE']))
  468. {
  469. $arQuoteStageList = CCrmStatus::GetStatusListEx('QUOTE_STAGE');
  470. $obRes = \CCrmQuote::GetList(
  471. array('ID' => 'DESC'),
  472. array('=ID' => $additionalSelect[$entityPrefix['quote']]),
  473. false,
  474. false,
  475. array('ID', 'TITLE', 'STAGE_ID', 'COMPANY_TITLE', 'CONTACT_FULL_NAME')
  476. );
  477. while($arRes = $obRes->Fetch())
  478. {
  479. $arRes['SID'] = $entityPrefix['quote'].'_'.$arRes['ID'];
  480. $clientTitle = (!empty($arRes['COMPANY_TITLE'])) ? $arRes['COMPANY_TITLE'] : '';
  481. $clientTitle .= (($clientTitle !== '' && !empty($arRes['CONTACT_FULL_NAME'])) ? ', ' : '').$arRes['CONTACT_FULL_NAME'];
  482. $arResult['ELEMENT'][] = array(
  483. 'title' => (str_replace(array(';', ','), ' ', $arRes['TITLE'])),
  484. 'desc' => $clientTitle,
  485. 'id' => $arRes['SID'],
  486. 'url' => \CComponentEngine::MakePathFromTemplate(
  487. \Bitrix\Main\Config\Option::get('crm', 'path_to_quote_show'),
  488. array(
  489. 'quote_id' => $arRes['ID']
  490. )
  491. ),
  492. 'type' => 'quote',
  493. 'selected' => 'Y'
  494. );
  495. }
  496. }
  497. }
  498. $APPLICATION->RestartBuffer();
  499. $APPLICATION->ShowAjaxHead();
  500. \Bitrix\Main\Page\Asset::getInstance()->addCss('/bitrix/js/crm/css/crm.css');
  501. \Bitrix\Main\Page\Asset::getInstance()->addJs('/bitrix/js/crm/crm.js');
  502. $this->includeComponentTemplate();
  503. CMain::FinalActions();
  504. die();