PageRenderTime 52ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/components/bitrix/socialnetwork.landing.livefeed.selector/class.php

https://gitlab.com/alexprowars/bitrix
PHP | 281 lines | 242 code | 30 blank | 9 comment | 38 complexity | 2648c2f59d00dd659f0beabe2630b799 MD5 | raw file
  1. <?php
  2. use Bitrix\Main,
  3. Bitrix\Main\Loader,
  4. Bitrix\Main\Localization\Loc,
  5. Bitrix\Socialnetwork\Component;
  6. if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();
  7. Loc::loadMessages(__FILE__);
  8. class LivefeedSelector extends Component\EntitySelector
  9. {
  10. protected $workgroupsList = [];
  11. public function __construct($component = null)
  12. {
  13. parent::__construct($component);
  14. }
  15. /**
  16. * @return void
  17. */
  18. protected function setWorkgroupsList($value = [])
  19. {
  20. $this->workgroupsList = $value;
  21. }
  22. protected function getWorkgroupsList()
  23. {
  24. return $this->workgroupsList;
  25. }
  26. /**
  27. * @return void
  28. */
  29. protected function getData()
  30. {
  31. }
  32. /**
  33. * @return void
  34. */
  35. protected function prepareRequest()
  36. {
  37. $this->requestData = [
  38. 'useBXMainFilter' => $this->request->get('useBXMainFilter'),
  39. 'filter' => $this->request->get('filter')
  40. ];
  41. }
  42. private function setFilter(array $filterFields)
  43. {
  44. $defaultFilter = [];
  45. foreach($filterFields as $fieldName => $params)
  46. {
  47. $code = (isset($params['code']) ? $params['code'] : false);
  48. $name = (isset($params['name']) ? $params['name'] : false);
  49. if (
  50. $code == ''
  51. || $name == ''
  52. )
  53. {
  54. continue;
  55. }
  56. if (
  57. $fieldName == 'GROUP_ID'
  58. && ($workGroupData = $this->getWorkgroupDataByCode($code))
  59. )
  60. {
  61. $defaultFilter['GROUP_ID'] = $code;
  62. $defaultFilter['GROUP_ID_label'] = $workGroupData['NAME'];
  63. }
  64. elseif ($fieldName == 'AUTHOR_ID')
  65. {
  66. $defaultFilter['AUTHOR_ID'] = $code;
  67. $defaultFilter['AUTHOR_ID_label'] = $name;
  68. }
  69. }
  70. if (empty($defaultFilter['GROUP_ID']))
  71. {
  72. return;
  73. }
  74. $this->setDefaultFilter($defaultFilter);
  75. $this->arResult['FILTER_VALUE'] = [ $defaultFilter['GROUP_ID'] ];
  76. $this->arResult['FILTER_AUTHOR_VALUE'] = (!empty($defaultFilter['AUTHOR_ID']) ? $defaultFilter['AUTHOR_ID'] : false);
  77. $this->arResult['FILTER_INIT_VALUE'] = [
  78. [
  79. 'name' => $defaultFilter['GROUP_ID_label'],
  80. 'value' => $defaultFilter['GROUP_ID'],
  81. 'key' => 'GROUP_ID'
  82. ]
  83. ];
  84. if (!empty($defaultFilter['AUTHOR_ID']))
  85. {
  86. $this->arResult['FILTER_INIT_VALUE'][] = [
  87. 'name' => $defaultFilter['AUTHOR_ID_label'],
  88. 'value' => $defaultFilter['AUTHOR_ID'],
  89. 'key' => 'AUTHOR_ID'
  90. ];
  91. }
  92. }
  93. public function prepareResult()
  94. {
  95. $this->setFilterId('landing_livefeed_list');
  96. $this->setFilterPresets([]);
  97. parent::prepareResult();
  98. $filterFromRequest = false;
  99. if (
  100. !empty($this->requestData['filter'])
  101. && is_array($this->requestData['filter'])
  102. )
  103. {
  104. $groupFilterField = $authorFilterField = false;
  105. foreach($this->requestData['filter'] as $filterField)
  106. {
  107. if (!empty($filterField['key']))
  108. {
  109. if (
  110. $filterField['key'] == 'GROUP_ID'
  111. && ($workGroupData = $this->getWorkgroupDataByCode($filterField['value']))
  112. )
  113. {
  114. $groupFilterField = [
  115. 'code' => $filterField['value'],
  116. 'name' => $workGroupData['NAME']
  117. ];
  118. }
  119. elseif ($filterField['key'] == 'AUTHOR_ID')
  120. {
  121. $authorFilterField = [
  122. 'code' => $filterField['value'],
  123. 'name' => $filterField['name']
  124. ];
  125. }
  126. }
  127. }
  128. if (
  129. !empty($groupFilterField)
  130. || !empty($authorFilterField)
  131. )
  132. {
  133. $filterFromRequest = true;
  134. $this->setFilter([
  135. 'GROUP_ID' => $groupFilterField,
  136. 'AUTHOR_ID' => $authorFilterField
  137. ]);
  138. }
  139. }
  140. if (!$filterFromRequest)
  141. {
  142. if ($this->requestData['useBXMainFilter'] != 'Y')
  143. {
  144. $workgroupsList = $this->getWorkgroups();
  145. if (count($workgroupsList) == 0)
  146. {
  147. $this->arResult['EMPTY_NOWORKGROUPS'] = 'Y';
  148. }
  149. elseif (count($workgroupsList) == 1)
  150. {
  151. $defaultWorkgroup = array_pop($workgroupsList);
  152. $this->setFilter([
  153. 'GROUP_ID' => [
  154. 'code' => $defaultWorkgroup['CODE'],
  155. 'name' => $defaultWorkgroup['NAME']
  156. ]
  157. ]);
  158. }
  159. else
  160. {
  161. $res = Main\FinderDestTable::getList([
  162. 'order' => [
  163. 'LAST_USE_DATE' => 'DESC'
  164. ],
  165. 'filter' => [
  166. '=USER_ID' => $this->arResult["CURRENT_USER_ID"],
  167. '=CONTEXT' => 'SONET_LANDING_ENTITY_SELECTOR_GROUP'
  168. ],
  169. 'select' => [ 'CODE' ],
  170. 'limit' => 1
  171. ]);
  172. if (
  173. ($destData = $res->fetch())
  174. && !empty($destData['CODE'])
  175. && ($workGroupData = $this->getWorkgroupDataByCode($filterField['value']))
  176. )
  177. {
  178. $this->setFilter([
  179. 'GROUP_ID' => [
  180. 'code' => $destData['CODE'],
  181. 'name' => $workGroupData['NAME']
  182. ]
  183. ]);
  184. }
  185. if (empty($this->arResult['FILTER_VALUE']))
  186. {
  187. $this->arResult['EMPTY_EXPLICIT'] = 'Y';
  188. }
  189. }
  190. }
  191. else
  192. {
  193. $filterOption = new \Bitrix\Main\UI\Filter\Options($this->getFilterId());
  194. $filterData = $filterOption->getFilter();
  195. if (
  196. empty($filterData)
  197. || empty($filterData['GROUP_ID'])
  198. )
  199. {
  200. $this->arResult['EMPTY_EXPLICIT'] = 'Y';
  201. }
  202. else
  203. {
  204. $this->arResult['FILTER_VALUE'] = [ $filterData['GROUP_ID'] ];
  205. $this->arResult['FILTER_AUTHOR_VALUE'] = (!empty($filterData['AUTHOR_ID']) ? $filterData['AUTHOR_ID'] : false);
  206. }
  207. }
  208. }
  209. $this->arResult["URL_GROUP_CREATE"] = '';
  210. $createPageSiteId = (\Bitrix\Main\Application::getInstance()->getContext()->getRequest()->isAdminSection() ? \CSite::getDefSite() : $this->arParams["SITE_ID"]);
  211. $userPage = \Bitrix\Main\Config\Option::get('socialnetwork', 'user_page', '', $createPageSiteId);
  212. if (!empty($userPage))
  213. {
  214. $uri = new Main\Web\Uri(\CComponentEngine::makePathFromTemplate(
  215. $userPage.'user/#user_id#/groups/create/',
  216. [
  217. "user_id" => $this->arResult["CURRENT_USER_ID"]
  218. ]
  219. ));
  220. $uri->addParams([
  221. 'preset' => 'group-landing',
  222. 'refresh' => 'N',
  223. 'lid' => $this->arParams["SITE_ID"]
  224. ]);
  225. $this->arResult["URL_GROUP_CREATE"] = $uri->getUri();
  226. }
  227. }
  228. protected function getWorkgroupDataByCode($code = '')
  229. {
  230. $result = false;
  231. if (preg_match('/^SG(\d+)$/', $code, $matches))
  232. {
  233. $groupId = intval($matches[1]);
  234. if (
  235. $groupId > 0
  236. && ($res = \Bitrix\Socialnetwork\WorkgroupTable::getList([
  237. 'filter' => [
  238. '=ID' => $groupId,
  239. '=LANDING' => 'Y'
  240. ],
  241. 'select' => [ 'ID', 'NAME']
  242. ]))
  243. && ($workGroupData = $res->fetch())
  244. )
  245. {
  246. $result = $workGroupData;
  247. }
  248. }
  249. return $result;
  250. }
  251. }