3require_once(
$_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/modules/socialnetwork/classes/general/group.php");
6use Bitrix\Socialnetwork\Item\Workgroup\Type;
12use Bitrix\Socialnetwork\Integration;
33 if(array_key_exists(
"SITE_ID",
$arFields))
58 $db_events =
GetModuleEvents(
"socialnetwork",
"OnBeforeSocNetGroupAdd");
59 while ($arEvent = $db_events->Fetch())
72 !array_key_exists(
"MODULE_ID",
$arFields[
"IMAGE_ID"])
73 ||
$arFields[
"IMAGE_ID"][
"MODULE_ID"] ==
''
77 $arFields[
"IMAGE_ID"][
"MODULE_ID"] =
"socialnetwork";
80 CFile::SaveForDB(
$arFields,
"IMAGE_ID",
"socialnetwork");
82 $arInsert =
$DB->PrepareInsert(
"b_sonet_group",
$arFields);
86 if ($arInsert[0] <>
'')
89 "INSERT INTO b_sonet_group(".$arInsert[0].
") ".
90 "VALUES(".$arInsert[1].
")";
96 while ($arEvent = $events->Fetch())
107 if(!empty($arSiteID))
110 DELETE FROM b_sonet_group_site WHERE GROUP_ID = ".
$ID.
"
114 INSERT INTO b_sonet_group_site(GROUP_ID, SITE_ID)
117 WHERE LID IN ('".implode(
"', '", $arSiteID).
"')
124 'siteId' => $arSiteID
129 if(defined(
"BX_COMP_MANAGED_CACHE"))
138 $tagsList = explode(
',',
$arFields[
"KEYWORDS"]);
141 && is_array($tagsList)
144 $tagsList = array_map(
function(
$a) {
return trim(
$a,
' '); }, $tagsList);
145 $tagsList = array_filter($tagsList,
function(
$a) {
return (
$a <> ''); });
149 && is_array($tagsList)
159 Workgroup::setIndex(
array(
163 $groupItem = Workgroup::getById(
$ID,
false);
164 $groupItem->syncDeptConnection();
166 GroupRegistry::getInstance()->invalidate(
$ID);
173 public static function Update(
$ID,
$arFields, $bAutoSubscribe =
true, $bClearCommonTag =
true, $bSync =
true)
184 $arGroupOld = CSocNetGroup::GetByID(
$ID);
215 foreach($arSiteID as $v)
218 $str_SiteID .=
", '".$DB->ForSql($v).
"'";
222 $db_events =
GetModuleEvents(
"socialnetwork",
"OnBeforeSocNetGroupUpdate");
223 while ($arEvent = $db_events->Fetch())
239 !array_key_exists(
"MODULE_ID",
$arFields[
"IMAGE_ID"])
240 ||
$arFields[
"IMAGE_ID"][
"MODULE_ID"] ==
''
244 $arFields[
"IMAGE_ID"][
"MODULE_ID"] =
"socialnetwork";
247 CFile::SaveForDB(
$arFields,
"IMAGE_ID",
"socialnetwork");
249 $strUpdate =
$DB->PrepareUpdate(
"b_sonet_group",
$arFields);
252 if ($strUpdate <>
'')
255 "UPDATE b_sonet_group SET ".
257 "WHERE ID = ".$ID.
" ";
260 if(!empty($arSiteID))
262 $strSql =
"DELETE FROM b_sonet_group_site WHERE GROUP_ID=".$ID;
266 "INSERT INTO b_sonet_group_site(GROUP_ID, SITE_ID) ".
267 "SELECT ".$ID.
", LID ".
269 "WHERE LID IN (".$str_SiteID.
") ";
284 $DB->Query(
"DELETE FROM b_sonet_log_site WHERE LOG_ID = ".
$arResult[
"ID"].
"");
287 INSERT INTO b_sonet_log_site(LOG_ID, SITE_ID)
290 WHERE LID IN (".$str_SiteID.
")
299 || intval(
$arFields[
"SUBJECT_ID"] ?? 0) > 0
303 $groupSiteList =
array();
305 if (intval(
$arFields[
"SUBJECT_ID"] ?? 0) <= 0)
309 'select' =>
array(
'SUBJECT_ID')
311 if ($workgroupFieldsList =
$res->fetch())
313 $subjectId = intval($workgroupFieldsList[
"SUBJECT_ID"]);
318 $subjectId = intval(
$arFields[
"SUBJECT_ID"]);
321 if (empty($arSiteID))
323 $res = WorkgroupSiteTable::getList(
array(
324 'filter' =>
array(
'=GROUP_ID' =>
$ID),
325 'select' =>
array(
'SITE_ID')
327 while ($workgroupSiteFieldsList =
$res->fetch())
329 $groupSiteList[] = intval($workgroupSiteFieldsList[
"SITE_ID"]);
334 $groupSiteList = $arSiteID;
339 && !empty($groupSiteList)
343 'subjectId' => $subjectId,
344 'siteId' => $groupSiteList
349 $sonetGroupCache = self::getStaticCache();
350 unset($sonetGroupCache[
$ID]);
351 self::setStaticCache($sonetGroupCache);
353 if(defined(
"BX_COMP_MANAGED_CACHE"))
355 if ($bClearCommonTag)
367 while ($arEvent = $events->Fetch())
380 $tagsList = explode(
',',
$arFields[
"KEYWORDS"]);
383 && is_array($tagsList)
386 $tagsList = array_map(
function(
$a) {
return trim(
$a,
' '); }, $tagsList);
387 $tagsList = array_filter($tagsList,
function(
$a) {
return (
$a <> ''); });
396 Workgroup::setIndex(
array(
400 $arGroupNew = CSocNetGroup::GetByID(
$ID);
402 $arGroupNew[
'OPENED'] ===
'Y'
403 && $arGroupOld[
'OPENED'] ===
'N'
409 $isCollab = $arGroupNew[
'TYPE'] === Workgroup\Type::Collab->value;
415 $chatId = $chatData[
$ID] ??
null;
424 if (array_key_exists(
'DESCRIPTION',
$arFields))
428 if (array_key_exists(
'IMAGE_ID',
$arFields))
432 if (array_key_exists(
'OWNER_ID',
$arFields))
456 && !empty($chatData[
$ID])
457 && intval($chatData[
$ID]) > 0
460 $chatId = $chatData[
$ID];
468 Integration\
Im\Chat\Workgroup::buildChatName(
$arFields[
"NAME"], [
469 'project' => $arGroupNew[
"PROJECT"] ===
'Y',
470 'type' => $arGroupNew[
'TYPE'] ??
''
479 $chat->setAvatarId($chatId,
$arFields[
'IMAGE_ID']);
484 $chat->setOwner($chatId,
$arFields[
"OWNER_ID"],
false);
489 $chat->SetDescription($chatId,
$arFields[
"DESCRIPTION"]);
498 if(defined(
"BX_COMP_MANAGED_CACHE"))
500 if ($bClearCommonTag)
515 $groupItem = Workgroup::getById(
$ID,
false);
516 $groupItem->syncDeptConnection();
522 GroupRegistry::getInstance()->invalidate($groupId);
531 public static function GetList($arOrder = Array(
"ID" =>
"DESC"),
$arFilter = Array(), $arGroupBy =
false, $arNavStartParams =
false, $arSelectFields =
array())
535 if (
count($arSelectFields) <= 0)
536 $arSelectFields =
array(
"ID",
"SITE_ID",
"NAME",
"DESCRIPTION",
"DATE_CREATE",
"DATE_UPDATE",
"ACTIVE",
"VISIBLE",
"OPENED",
"CLOSED",
"SUBJECT_ID",
"OWNER_ID",
"KEYWORDS",
"IMAGE_ID",
"NUMBER_OF_MEMBERS",
"INITIATE_PERMS",
"SPAM_PERMS",
"DATE_ACTIVITY",
"SUBJECT_NAME",
"PROJECT");
538 static $arFields1 =
array(
539 "ID" => Array(
"FIELD" =>
"G.ID",
"TYPE" =>
"int"),
540 "NAME" => Array(
"FIELD" =>
"G.NAME",
"TYPE" =>
"string"),
541 "DESCRIPTION" => Array(
"FIELD" =>
"G.DESCRIPTION",
"TYPE" =>
"string"),
542 "DATE_CREATE" => Array(
"FIELD" =>
"G.DATE_CREATE",
"TYPE" =>
"datetime"),
543 "DATE_UPDATE" => Array(
"FIELD" =>
"G.DATE_UPDATE",
"TYPE" =>
"datetime"),
544 "DATE_ACTIVITY" => Array(
"FIELD" =>
"G.DATE_ACTIVITY",
"TYPE" =>
"datetime"),
545 "ACTIVE" => Array(
"FIELD" =>
"G.ACTIVE",
"TYPE" =>
"string"),
546 "VISIBLE" => Array(
"FIELD" =>
"G.VISIBLE",
"TYPE" =>
"string"),
547 "OPENED" => Array(
"FIELD" =>
"G.OPENED",
"TYPE" =>
"string"),
548 "CLOSED" => Array(
"FIELD" =>
"G.CLOSED",
"TYPE" =>
"string"),
549 "SUBJECT_ID" => Array(
"FIELD" =>
"G.SUBJECT_ID",
"TYPE" =>
"int"),
550 "OWNER_ID" => Array(
"FIELD" =>
"G.OWNER_ID",
"TYPE" =>
"int"),
551 "KEYWORDS" => Array(
"FIELD" =>
"G.KEYWORDS",
"TYPE" =>
"string"),
552 "IMAGE_ID" => Array(
"FIELD" =>
"G.IMAGE_ID",
"TYPE" =>
"int"),
553 "NUMBER_OF_MEMBERS" => Array(
"FIELD" =>
"G.NUMBER_OF_MEMBERS",
"TYPE" =>
"int"),
554 "NUMBER_OF_MODERATORS" => Array(
"FIELD" =>
"G.NUMBER_OF_MODERATORS",
"TYPE" =>
"int"),
555 "INITIATE_PERMS" => Array(
"FIELD" =>
"G.INITIATE_PERMS",
"TYPE" =>
"string"),
556 "SPAM_PERMS" => Array(
"FIELD" =>
"G.SPAM_PERMS",
"TYPE" =>
"string"),
557 "SUBJECT_NAME" => Array(
"FIELD" =>
"S.NAME",
"TYPE" =>
"string",
"FROM" =>
"INNER JOIN b_sonet_group_subject S ON (G.SUBJECT_ID = S.ID)"),
558 "OWNER_NAME" => Array(
"FIELD" =>
"U.NAME",
"TYPE" =>
"string",
"FROM" =>
"INNER JOIN b_user U ON (G.OWNER_ID = U.ID)"),
559 "OWNER_LAST_NAME" => Array(
"FIELD" =>
"U.LAST_NAME",
"TYPE" =>
"string",
"FROM" =>
"INNER JOIN b_user U ON (G.OWNER_ID = U.ID)"),
560 "OWNER_LOGIN" => Array(
"FIELD" =>
"U.LOGIN",
"TYPE" =>
"string",
"FROM" =>
"INNER JOIN b_user U ON (G.OWNER_ID = U.ID)"),
561 "OWNER_EMAIL" => Array(
"FIELD" =>
"U.EMAIL",
"TYPE" =>
"string",
"FROM" =>
"INNER JOIN b_user U ON (G.OWNER_ID = U.ID)"),
562 "OWNER_USER" =>
array(
"FIELD" =>
"U.LOGIN,U.NAME,U.LAST_NAME,U.EMAIL,U.ID",
"WHERE_ONLY" =>
"Y",
"TYPE" =>
"string",
"FROM" =>
"INNER JOIN b_user U ON (G.OWNER_ID = U.ID)"),
563 "PROJECT" => Array(
"FIELD" =>
"G.PROJECT",
"TYPE" =>
"string"),
564 "PROJECT_DATE_START" => Array(
"FIELD" =>
"G.PROJECT_DATE_START",
"TYPE" =>
"datetime"),
565 "PROJECT_DATE_FINISH" => Array(
"FIELD" =>
"G.PROJECT_DATE_FINISH",
"TYPE" =>
"datetime"),
566 "LANDING" => Array(
"FIELD" =>
"G.LANDING",
"TYPE" =>
"string"),
567 "SCRUM_OWNER_ID" => [
"FIELD" =>
"G.SCRUM_OWNER_ID",
"TYPE" =>
"int"],
568 "SCRUM_MASTER_ID" => [
"FIELD" =>
"G.SCRUM_MASTER_ID",
"TYPE" =>
"int"],
569 "SCRUM_SPRINT_DURATION" => [
"FIELD" =>
"G.SCRUM_SPRINT_DURATION",
"TYPE" =>
"int"],
570 "SCRUM_TASK_RESPONSIBLE" => [
"FIELD" =>
"G.SCRUM_TASK_RESPONSIBLE",
"TYPE" =>
"string"],
571 'AVATAR_TYPE' => [
'FIELD' =>
'G.AVATAR_TYPE',
'TYPE' =>
'string'],
572 'TYPE' => [
'FIELD' =>
'G.TYPE',
'TYPE' =>
'string']
575 if (array_key_exists(
"SITE_ID",
$arFilter))
577 $arFields[
"SITE_ID"] = Array(
"FIELD" =>
"SGS.SITE_ID",
"TYPE" =>
"string",
"FROM" =>
"LEFT JOIN b_sonet_group_site SGS ON G.ID = SGS.GROUP_ID");
578 $strDistinct =
" DISTINCT ";
579 foreach ($arSelectFields as
$i => $strFieldTmp)
581 if ($strFieldTmp ===
"SITE_ID")
583 unset($arSelectFields[
$i]);
587 foreach ($arOrder as $by =>
$order)
589 if (!in_array($by, $arSelectFields))
591 $arSelectFields[] = $by;
597 $arFields[
"SITE_ID"] = Array(
"FIELD" =>
"G.SITE_ID",
"TYPE" =>
"string");
603 $arSqls[
"SELECT"] = str_replace(
"%%_DISTINCT_%%", $strDistinct, $arSqls[
"SELECT"]);
605 if (is_array($arGroupBy) &&
count($arGroupBy)==0)
608 "SELECT ".$arSqls[
"SELECT"].
" ".
609 "FROM b_sonet_group G ".
610 " ".$arSqls[
"FROM"].
" ";
611 if ($arSqls[
"WHERE"] <>
'')
613 $strSql .=
"WHERE ".$arSqls[
"WHERE"].
" ";
615 if ($arSqls[
"GROUPBY"] <>
'')
617 $strSql .=
"GROUP BY ".$arSqls[
"GROUPBY"].
" ";
629 $checkPermissions = Array_Key_Exists(
"CHECK_PERMISSIONS",
$arFilter);
631 if ($checkPermissions)
634 "SELECT ".$arSqls[
"SELECT"].
" ".
635 "FROM b_sonet_group G ".
636 " ".$arSqls[
"FROM"].
" ".
637 "WHERE G.VISIBLE = 'Y' ";
638 if ($arSqls[
"WHERE"] <>
'')
640 $strSql .=
"AND ".$arSqls[
"WHERE"].
" ";
644 "SELECT ".$arSqls[
"SELECT"].
" ".
645 "FROM b_sonet_group G ".
646 " INNER JOIN b_sonet_user2group UG ON (G.ID = UG.GROUP_ID AND UG.USER_ID = ".intval(
$arFilter[
"CHECK_PERMISSIONS"]).
" AND UG.ROLE <= '".
$DB->ForSql(
SONET_ROLES_USER, 1).
"') ".
647 " ".$arSqls[
"FROM"].
" ".
648 "WHERE G.VISIBLE = 'N' ";
649 if ($arSqls[
"WHERE"] <>
'')
650 $strSql .=
"AND ".$arSqls[
"WHERE"].
" ";
653 if ($arSqls[
"GROUPBY"] <>
'')
655 $strSql .=
"GROUP BY ".$arSqls[
"GROUPBY"].
" ";
658 if ($arSqls[
"ORDERBY"] <>
'')
660 $strSql .=
"ORDER BY ".Str_Replace(
array(
" G.",
" UG.",
" S."),
array(
" ",
" ",
" "),
" ".$arSqls[
"ORDERBY"]).
" ";
666 "SELECT ".$arSqls[
"SELECT"].
" ".
667 "FROM b_sonet_group G ".
668 " ".$arSqls[
"FROM"].
" ";
669 if ($arSqls[
"WHERE"] <>
'')
671 $strSql .=
"WHERE ".$arSqls[
"WHERE"].
" ";
673 if ($arSqls[
"GROUPBY"] <>
'')
675 $strSql .=
"GROUP BY ".$arSqls[
"GROUPBY"].
" ";
677 if ($arSqls[
"ORDERBY"] <>
'')
679 $strSql .=
"ORDER BY ".$arSqls[
"ORDERBY"].
" ";
684 is_array($arNavStartParams)
685 && intval($arNavStartParams[
"nTopCount"] ??
null) <= 0
689 "SELECT COUNT('x') as CNT ".
690 "FROM b_sonet_group G ".
691 " ".$arSqls[
"FROM"].
" ";
693 $arSqls[
"WHERE"] <>
''
697 $strSql_tmp .=
"WHERE ".($checkPermissions ?
"G.VISIBLE = 'Y'" :
"1 = 1").($arSqls[
"WHERE"] <>
'' ?
" AND " :
"").$arSqls[
"WHERE"].
" ";
699 if ($arSqls[
"GROUPBY"] <>
'')
701 $strSql_tmp .=
"GROUP BY ".$arSqls[
"GROUPBY"].
" ";
708 if ($arSqls[
"GROUPBY"] ==
'')
718 $cnt =
$dbRes->SelectedRowsCount();
721 if ($checkPermissions)
724 "SELECT COUNT('x') as CNT ".
725 "FROM b_sonet_group G ".
726 " INNER JOIN b_sonet_user2group UG ON (G.ID = UG.GROUP_ID AND UG.USER_ID = ".intval(
$arFilter[
"CHECK_PERMISSIONS"]).
" AND UG.ROLE <= '".
$DB->ForSql(
SONET_ROLES_USER, 1).
"') ".
727 " ".$arSqls[
"FROM"].
" ".
728 "WHERE G.VISIBLE = 'N' ";
729 if ($arSqls[
"WHERE"] <>
'')
731 $strSql_tmp .=
"AND ".$arSqls[
"WHERE"].
" ";
733 if ($arSqls[
"GROUPBY"] <>
'')
735 $strSql_tmp .=
"GROUP BY ".$arSqls[
"GROUPBY"].
" ";
741 if ($arSqls[
"GROUPBY"] ==
'')
751 $cnt +=
$dbRes->SelectedRowsCount();
760 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
765 is_array($arNavStartParams)
766 && intval($arNavStartParams[
"nTopCount"]) > 0
769 $strSql .=
"LIMIT ".intval($arNavStartParams[
"nTopCount"]);
783 if (($oldFields[
'TYPE'] ??
null) === Type::Collab->value)
788 if (isset(
$fields[
'SCRUM_MASTER_ID']))
795 return $fields[
'PROJECT'] ===
'Y' ? Type::Project : Type::Group;
798 return Type::tryFrom($oldFields[
'TYPE']) ?? Type::getDefault();
static synchronizeCollabChat(int $chatId, array $fields)
static getChatData($params)
const EVENT_WORKGROUP_ADD
const EVENT_WORKGROUP_BEFORE_UPDATE
const EVENT_WORKGROUP_UPDATE
static addEvent(string $type, array $data)
static syncSiteId($params=array())
static processEqualityFieldsToUpdate($fields1, &$update)
static getEqualityFields(&$fields)
static processEqualityFieldsToInsert($fields1, &$insert)
static set($params=array())
static PrepareSql(&$arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields, $arUF=array())
static ConfirmAllRequests($groupId, $bAutoSubscribe=true, $currentUserId=0)
static CheckFields($ACTION, &$arFields, $ID=0)
static SearchIndex($groupId, $arSiteID=array(), $arGroupOld=array())
static Update($ID, $arFields, $bAutoSubscribe=true, $bClearCommonTag=true, $bSync=true)
static GetList($arOrder=Array("ID"=> "DESC"), $arFilter=Array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static GetList($arOrder=Array("ID"=> "DESC"), $arFilter=Array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array(), $arParams=array())
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
global $USER_FIELD_MANAGER
$_SERVER["DOCUMENT_ROOT"]
ExecuteModuleEventEx($arEvent, $arParams=[])
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
GetMessage($name, $aReplace=null)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"