1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
network.php
См. документацию.
1<?php
8
9namespace Bitrix\Socialservices;
10
11use Bitrix\Main\Error;
12use Bitrix\Main\ErrorCollection;
13use Bitrix\Main\Loader;
14use Bitrix\Main\Localization\Loc;
15use Bitrix\Main\Config\Option;
16use Bitrix\Main\Event;
17
18Loc::loadMessages(__FILE__);
19
26{
27 const ERROR_SEARCH_STRING_TO_SHORT = 'ERROR_SEARCH_STRING_TO_SHORT';
28 const ERROR_SEARCH_USER_NOT_FOUND = 'ERROR_SEARCH_USER_NOT_FOUND';
29 const ERROR_REGISTER_USER = 'ERROR_REGISTER_USER';
30 const ERROR_SOCSERV_TRANSPORT = 'ERROR_SOCSERV_TRANSPORT';
31 const ERROR_NETWORK_IN_NOT_ENABLED = 'ERROR_NETWORK_IN_NOT_ENABLED';
32 const ERROR_INCORRECT_PARAMS = 'ERROR_INCORRECT_PARAMS';
33
34 const EXTERNAL_AUTH_ID = 'replica';
35
36 const ADMIN_SESSION_KEY = "SS_B24NET_STATE";
37
39 public $errorCollection = null;
40
41 protected static $lastUserStatus = null;
42
43 function __construct()
44 {
45 $this->errorCollection = new ErrorCollection();
46 }
47
54 public function isOptionEnabled()
55 {
56 return false;
57 }
58
65 public function isEnabled()
66 {
67 return false;
68 }
69
77 public function setEnable($enable = true)
78 {
79 if ($this->isOptionEnabled() && $enable)
80 return true;
81
82 if (!$this->isOptionEnabled() && !$enable)
83 return true;
84
85 $this->errorCollection[] = new Error(Loc::getMessage('B24NET_NETWORK_IN_NOT_ENABLED_MSGVER_1'), self::ERROR_NETWORK_IN_NOT_ENABLED);
86
87 return false;
88 }
89
99 public function searchUser($search)
100 {
101 $this->errorCollection[] = new Error(Loc::getMessage('B24NET_NETWORK_IN_NOT_ENABLED_MSGVER_1'), self::ERROR_NETWORK_IN_NOT_ENABLED);
102 return null;
103 }
104
111 public function getUser($networkId, $lastSearch = '')
112 {
113 $result = $this->getUsers(Array($networkId), $lastSearch);
114
115 return $result && isset($result[$networkId])? $result[$networkId]: null;
116 }
117
124 public function getUsers($networkIds, $lastSearch = '')
125 {
126 if (!$this->isEnabled())
127 {
128 $this->errorCollection[] = new Error(Loc::getMessage('B24NET_NETWORK_IN_NOT_ENABLED_MSGVER_1'), self::ERROR_NETWORK_IN_NOT_ENABLED);
129 return null;
130 }
131
133 if (!$query)
134 {
135 $this->errorCollection[] = new Error(Loc::getMessage('B24NET_SOCSERV_TRANSPORT_ERROR_MSGVER_1'), self::ERROR_SOCSERV_TRANSPORT);
136 return null;
137 }
138
139 if (!is_array($networkIds) || empty($networkIds))
140 {
141 $this->errorCollection[] = new Error(Loc::getMessage('B24NET_ERROR_INCORRECT_PARAMS'), self::ERROR_INCORRECT_PARAMS);
142 return null;
143 }
144
145 $queryResult = $query->call('profile.search', array(
146 'ID' => array_values($networkIds),
147 'QUERY' => trim($lastSearch)
148 ));
149
150 $result = null;
151 foreach ($queryResult['result'] as $user)
152 {
153 if (!$user = self::formatUserParam($user))
154 {
155 continue;
156 }
157 $result[$user['NETWORK_ID']] = $user;
158 }
159
160 if (!$result)
161 {
162 $this->errorCollection[] = new Error(Loc::getMessage('B24NET_SEARCH_USER_NOT_FOUND'), self::ERROR_SEARCH_USER_NOT_FOUND);
163 return null;
164 }
165
166 return $result;
167 }
168
175 public function addUserById($networkId, $lastSearch = '')
176 {
177 $userId = $this->getUserId($networkId);
178 if ($userId)
179 {
180 return $userId;
181 }
182
183 $user = $this->getUser($networkId, $lastSearch);
184 if (!$user)
185 {
186 return false;
187 }
188
189 return $this->addUser($user);
190 }
191
198 public function addUsersById($networkIds, $lastSearch = '')
199 {
200 $result = Array();
201
202 $users = $this->getUsersId($networkIds);
203 if ($users)
204 {
205 foreach ($users as $networkId => $userId)
206 {
207 $result[$networkId] = $userId;
208 }
209 $networkIds = array_diff($networkIds, array_keys($users));
210 }
211 if (!empty($networkIds))
212 {
213 $users = $this->getUsers($networkIds, $lastSearch);
214 if (!$users)
215 {
216 return false;
217 }
218
219 foreach ($users as $networkId => $userParams)
220 {
221 $userId = $this->addUser($userParams);
222 if ($userId)
223 {
224 $result[$networkId] = $userId;
225 }
226 }
227 }
228
229 return $result;
230 }
231
240 public function addUser($params)
241 {
242 $password = md5($params['XML_ID'].'|'.$params['CLIENT_DOMAIN'].'|'.rand(1000,9999).'|'.time().'|'.uniqid());
243 $photo = \CFile::MakeFileArray($params['PERSONAL_PHOTO_ORIGINAL']);
244 $groups = Array();
245
246 if(Loader::includeModule('extranet'))
247 {
248 $groups[] = \CExtranet::GetExtranetUserGroupID();
249 }
250
251 $addParams = Array(
252 'LOGIN' => $params['NETWORK_USER_ID'].'@'.$params['CLIENT_DOMAIN'],
253 'NAME' => $params['NAME'],
254 'EMAIL' => $params['EMAIL'],
255 'LAST_NAME' => $params['LAST_NAME'],
256 'SECOND_NAME' => $params['SECOND_NAME'],
257 'PERSONAL_GENDER' => $params['PERSONAL_GENDER'],
258 'PERSONAL_PHOTO' => $photo,
259 'WORK_POSITION' => $params['CLIENT_DOMAIN'],
260 'XML_ID' => $params['XML_ID'],
261 'EXTERNAL_AUTH_ID' => self::EXTERNAL_AUTH_ID,
262 "ACTIVE" => "Y",
263 "PASSWORD" => $password,
264 "CONFIRM_PASSWORD" => $password,
265 "GROUP_ID" => $groups
266 );
267 if (isset($params['EMAIL']))
268 {
269 $addParams['EMAIL'] = $params['EMAIL'];
270 }
271
272 $user = new \CUser;
273 $userId = $user->Add($addParams);
274 if (intval($userId) <= 0)
275 {
276 $this->errorCollection[] = new Error($user->LAST_ERROR, self::ERROR_REGISTER_USER);
277 return false;
278 }
279
280 $event = new Event("socialservices", "OnAfterRegisterUserByNetwork", array($userId, $params['NETWORK_USER_ID'], $params['CLIENT_DOMAIN']));
281 $event->send();
282
283 return $userId;
284 }
285
291 public static function getNetworkId($userId)
292 {
294 $user = $result->fetch();
295 if (!$user || $user['EXTERNAL_AUTH_ID'] != self::EXTERNAL_AUTH_ID)
296 {
297 return null;
298 }
299
300 list($networkId, ) = explode('|', $user['XML_ID']);
301
302 return $networkId;
303 }
304
310 public static function getUserId($networkId)
311 {
312 $result = self::getUsersId(Array($networkId));
313
314 return $result && isset($result[$networkId])? $result[$networkId]: null;
315 }
316
322 public static function getUsersId($networkIds)
323 {
324 if (!is_array($networkIds))
325 return null;
326
327 $searchArray = Array();
328 foreach ($networkIds as $networkId)
329 {
330 $searchArray[] = mb_substr($networkId, 0, 1).intval(mb_substr($networkId, 1))."|%";
331 }
332
334 'select' => Array('ID', 'WORK_PHONE', 'PERSONAL_PHONE', 'PERSONAL_MOBILE', 'UF_PHONE_INNER', 'XML_ID'),
335 'filter' => Array('=%XML_ID' => $searchArray, '=EXTERNAL_AUTH_ID' => self::EXTERNAL_AUTH_ID),
336 'order' => 'ID'
337 ));
338
339 $users = Array();
340 while($user = $result->fetch())
341 {
342 list($networkId, ) = explode("|", $user['XML_ID']);
343 $users[$networkId] = $user['ID'];
344 }
345
346 if (empty($users))
347 {
348 $users = null;
349 }
350
351 return $users;
352 }
353
359 public static function formatUserParam($params)
360 {
361 if (empty($params['NAME']))
362 {
363 if (!empty($params['PUBLIC_NAME']))
364 {
365 $params['NAME'] = $params['PUBLIC_NAME'];
366 }
367 else if (!empty($params['EMAIL']))
368 {
369 $params['NAME'] = $params['EMAIL'];
370 }
371 else
372 {
373 return false;
374 }
375 }
376
377 $result = Array(
378 'LOGIN' => $params['LOGIN'],
379 'EMAIL' => $params['EMAIL'],
380 'NAME' => $params['NAME'],
381 'LAST_NAME' => $params['LAST_NAME'],
382 'SECOND_NAME' => $params['SECOND_NAME'],
383 'PUBLIC_NAME' => $params['PUBLIC_NAME'],
384 'PERSONAL_GENDER' => $params['PERSONAL_GENDER'],
385 'PERSONAL_PHOTO' => $params['PERSONAL_PHOTO_RESIZE'],
386 'PERSONAL_PHOTO_ORIGINAL' => $params['PERSONAL_PHOTO'],
387 'XML_ID' => $params['ID'].'|'.$params['USER_ID'],
388 'NETWORK_ID' => $params['ID'],
389 'NETWORK_USER_ID' => $params['USER_ID'],
390 'REMOTE_USER_ID' => $params['PROFILE_ID'],
391 'CLIENT_DOMAIN' => $params['CLIENT_DOMAIN'],
392 );
393
394 return $result;
395 }
396
397 public static function getAuthUrl($mode = "page", $addScope = null)
398 {
399 if(Option::get("socialservices", "bitrix24net_id", "") != "")
400 {
401 $o = new \CSocServBitrix24Net();
402
403 if($addScope !== null)
404 {
405 $o->addScope($addScope);
406 }
407
408 return $o->getUrl($mode);
409 }
410
411 return false;
412 }
413
414 public static function setAdminPopupSession()
415 {
416 global $USER;
417 $_SESSION[static::ADMIN_SESSION_KEY] = $USER->GetID();
418 }
419
420 public static function clearAdminPopupSession($userId)
421 {
422 global $USER, $CACHE_MANAGER;
423
424 $CACHE_MANAGER->Clean("sso_portal_list_".$userId);
425 if($userId == $USER->GetID())
426 {
427 unset($_SESSION[static::ADMIN_SESSION_KEY]);
428 }
429 }
430
431 protected static function getShowOptions()
432 {
433 return \CUserOptions::GetOption("socialservices", "networkPopup", array("dontshow" => "N", "showcount" => 0));
434 }
435
436 public static function getAdminPopupSession()
437 {
438 global $USER;
439
440 $result = !isset($_SESSION[static::ADMIN_SESSION_KEY]) || $_SESSION[static::ADMIN_SESSION_KEY] !== $USER->GetID();
441 if($result)
442 {
443 $option = static::getShowOptions();
444 $result = !isset($option["dontshow"]) || $option["dontshow"] !== "Y";
445 if(!$result)
446 {
447 static::setAdminPopupSession();
448 }
449 }
450
451 return $result;
452 }
453
454 public static function setLastUserStatus($status)
455 {
456 static::$lastUserStatus = $status;
457 }
458
459 public static function getLastUserStatus()
460 {
461 return static::$lastUserStatus;
462 }
463}
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
Определения check_mail.php:18
Определения error.php:15
Определения event.php:5
static getById($id)
Определения datamanager.php:364
static getList(array $parameters=array())
Определения datamanager.php:431
addUserById($networkId, $lastSearch='')
Определения network.php:175
setEnable($enable=true)
Определения network.php:77
static getUsersId($networkIds)
Определения network.php:322
const ERROR_REGISTER_USER
Определения network.php:29
static getAdminPopupSession()
Определения network.php:436
isOptionEnabled()
Определения network.php:54
const ERROR_NETWORK_IN_NOT_ENABLED
Определения network.php:31
addUsersById($networkIds, $lastSearch='')
Определения network.php:198
static getAuthUrl($mode="page", $addScope=null)
Определения network.php:397
static getUserId($networkId)
Определения network.php:310
static formatUserParam($params)
Определения network.php:359
static getLastUserStatus()
Определения network.php:459
const ERROR_SOCSERV_TRANSPORT
Определения network.php:30
const EXTERNAL_AUTH_ID
Определения network.php:34
const ADMIN_SESSION_KEY
Определения network.php:36
getUsers($networkIds, $lastSearch='')
Определения network.php:124
const ERROR_SEARCH_STRING_TO_SHORT
Определения network.php:27
static setAdminPopupSession()
Определения network.php:414
const ERROR_INCORRECT_PARAMS
Определения network.php:32
static clearAdminPopupSession($userId)
Определения network.php:420
static getNetworkId($userId)
Определения network.php:291
static getShowOptions()
Определения network.php:431
const ERROR_SEARCH_USER_NOT_FOUND
Определения network.php:28
getUser($networkId, $lastSearch='')
Определения network.php:111
static $lastUserStatus
Определения network.php:41
addUser($params)
Определения network.php:240
searchUser($search)
Определения network.php:99
static setLastUserStatus($status)
Определения network.php:454
static init($networkNode=null)
Определения bitrix24net.php:1102
global $CACHE_MANAGER
Определения clear_component_cache.php:7
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$result
Определения get_property_values.php:14
$query
Определения get_search.php:11
global $USER
Определения csv_new_run.php:40
$groups
Определения options.php:30
$status
Определения session.php:10
$user
Определения mysql_to_pgsql.php:33
$password
Определения mysql_to_pgsql.php:34
$event
Определения prolog_after.php:141
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения template.php:799
$option
Определения options.php:1711