public function Execute() { if (!CModule::IncludeModule("socialnetwork")) { return CBPActivityExecutionStatus::Closed; } $rootActivity = $this->GetRootActivity(); $documentId = $rootActivity->GetDocumentId(); $ownerId = CBPHelper::ExtractUsers($this->OwnerId, $documentId, true); $users = array_unique(CBPHelper::ExtractUsers($this->Users, $documentId, false)); $dbSubjects = CSocNetGroupSubject::GetList(array("SORT" => "ASC", "NAME" => "ASC"), array("SITE_ID" => SITE_ID), false, false, array("ID")); $row = $dbSubjects->fetch(); if (!$row) { $this->WriteToTrackingService(GetMessage("BPCWG_ERROR_SUBJECT_ID")); return CBPActivityExecutionStatus::Closed; } $subjectId = $row['ID']; unset($dbSubjects, $row); $options = array("SITE_ID" => SITE_ID, "NAME" => $this->GroupName, "VISIBLE" => "Y", "OPENED" => "N", "CLOSED" => "N", "SUBJECT_ID" => $subjectId, "INITIATE_PERMS" => SONET_ROLES_OWNER, "SPAM_PERMS" => SONET_ROLES_USER); $groupId = CSocNetGroup::CreateGroup($ownerId, $options); if (!$groupId) { $this->WriteToTrackingService(GetMessage("BPCWG_ERROR_CREATE_GROUP")); return CBPActivityExecutionStatus::Closed; } $this->GroupId = $groupId; foreach ($users as $user) { if ($user == $ownerId) { continue; } CSocNetUserToGroup::Add(array("USER_ID" => $user, "GROUP_ID" => $groupId, "ROLE" => SONET_ROLES_USER, "=DATE_CREATE" => $GLOBALS["DB"]->CurrentTimeFunction(), "=DATE_UPDATE" => $GLOBALS["DB"]->CurrentTimeFunction(), "INITIATED_BY_TYPE" => SONET_INITIATED_BY_GROUP, "INITIATED_BY_USER_ID" => $ownerId, "MESSAGE" => false)); } return CBPActivityExecutionStatus::Closed; }
function getRelatedGroup($relationID) { $arRel = CSocNetUserToGroup::GetByID($relationID); if ($arRel) { return $arRel["GROUP_NAME"]; } else { return false; } }
protected static function _socnet_type_check($USER, $iblock_type_id, $socnet_group_id) { if ($iblock_type_id === COption::GetOptionString("lists", "socnet_iblock_type_id")) { $socnet_role = CSocNetUserToGroup::GetUserRole($USER->GetID(), $socnet_group_id); if ($socnet_role == "A") { return CListPermissions::IS_ADMIN; } else { return CListPermissions::CAN_READ; } } else { return CListPermissions::WRONG_IBLOCK_TYPE; } }
public static function getUserGroups($userId, $force = false) { static $cache = array(); if (!$force && isset($cache[$userId])) { return $cache[$userId]; } $cache[$userId] = array(); if (!CModule::IncludeModule('socialnetwork')) { return $cache[$userId]; } $userGroupFilter = array('USER_ID' => (int) $userId, '<=ROLE' => SONET_ROLES_USER); $dbUserGroups = CSocNetUserToGroup::GetList(array('GROUP_NAME' => 'ASC'), $userGroupFilter, false, false, array('GROUP_NAME', 'GROUP_ID')); while ($row = $dbUserGroups->GetNext()) { $cache[$userId][] = $row; } return $cache[$userId]; }
function OnUserInitialize($user_id, $arFields = array()) { if (intval($user_id) <= 0) { return false; } if (CModule::IncludeModule("im")) { $bIM = true; } $dbRelation = CSocNetUserToGroup::GetList(array(), array("USER_ID" => $user_id, "ROLE" => SONET_ROLES_REQUEST, "INITIATED_BY_TYPE" => SONET_INITIATED_BY_GROUP), false, false, array("ID", "GROUP_ID")); while ($arRelation = $dbRelation->Fetch()) { if (CSocNetUserToGroup::UserConfirmRequestToBeMember($user_id, $arRelation["ID"], false) && defined("BX_COMP_MANAGED_CACHE")) { $GLOBALS["CACHE_MANAGER"]->ClearByTag("sonet_user2group_G" . $arRelation["GROUP_ID"]); $GLOBALS["CACHE_MANAGER"]->ClearByTag("sonet_user2group_U" . $user_id); if ($bIM) { CIMNotify::DeleteByTag("SOCNET|INVITE_GROUP|" . $user_id . "|" . intval($arRelation["ID"])); } } } }
protected function getUserGroupWithStorage() { if (!\CBXFeatures::isFeatureEnabled("Workgroups")) { return array(); } if (!Loader::includeModule('socialnetwork')) { return array(); } $userId = $this->getUser()->getId(); $currentPossibleUserGroups = $currentUserGroups = array(); $cache = Cache::createInstance(); $cacheTtl = defined('BX_COMP_MANAGED_CACHE') ? 3153600 : 3600 * 4; $cachePath = "/disk/uf/{$userId}"; if ($cache->initCache($cacheTtl, 'group_storage_list_' . SITE_ID . '_' . $userId, $cachePath)) { list($currentUserGroups) = $cache->getVars(); } else { $cache->startDataCache(); $taggedCache = Application::getInstance()->getTaggedCache(); $taggedCache->startTagCache($cachePath); $diskSecurityContext = new DiskSecurityContext($userId); $storages = Storage::getReadableList($diskSecurityContext, array('filter' => array('STORAGE.ENTITY_TYPE' => ProxyType\Group::className()))); foreach ($storages as $storage) { $currentPossibleUserGroups[$storage->getEntityId()] = $storage; } unset($storage); $query = \CSocNetUserToGroup::getList(array('GROUP_NAME' => 'ASC'), array('USER_ID' => $userId, 'GROUP_ID' => array_keys($currentPossibleUserGroups)), false, false, array('GROUP_ID', 'GROUP_NAME', 'GROUP_ACTIVE', 'GROUP_CLOSED', 'ROLE')); while ($row = $query->getNext()) { if ($row['GROUP_ACTIVE'] == 'Y' && $row['GROUP_CLOSED'] == 'N' && $row['ROLE'] != SONET_ROLES_BAN && $row['ROLE'] != SONET_ROLES_REQUEST && isset($currentPossibleUserGroups[$row['GROUP_ID']])) { $taggedCache->registerTag("sonet_features_G_{$row['GROUP_ID']}"); $taggedCache->registerTag("sonet_group_{$row['GROUP_ID']}"); $currentUserGroups[$row['GROUP_ID']] = array('STORAGE' => $currentPossibleUserGroups[$row['GROUP_ID']], 'NAME' => $row['GROUP_NAME']); } } $taggedCache->registerTag("sonet_user2group_U{$userId}"); $taggedCache->endTagCache(); $cache->endDataCache(array($currentUserGroups)); } return $currentUserGroups; }
protected function getUserGroupWithStorage() { if (!\CBXFeatures::isFeatureEnabled("Workgroups")) { return array(); } if (!Loader::includeModule('socialnetwork')) { return array(); } $userId = $this->getUser()->getId(); $currentPossibleUserGroups = $currentUserGroups = array(); $diskSecurityContext = new DiskSecurityContext($this->getUser()->getId()); $storages = Storage::getReadableList($diskSecurityContext, array('filter' => array('STORAGE.ENTITY_TYPE' => ProxyType\Group::className()))); foreach ($storages as $storage) { $currentPossibleUserGroups[$storage->getEntityId()] = $storage; } unset($storage); $query = \CSocNetUserToGroup::getList(array('GROUP_NAME' => 'ASC'), array('USER_ID' => $userId, 'GROUP_ID' => array_keys($currentPossibleUserGroups)), false, false, array('GROUP_ID', 'GROUP_NAME', 'GROUP_ACTIVE', 'GROUP_CLOSED', 'ROLE')); while ($row = $query->getNext()) { if ($row['GROUP_ACTIVE'] == 'Y' && $row['GROUP_CLOSED'] == 'N' && $row['ROLE'] != SONET_ROLES_BAN && $row['ROLE'] != SONET_ROLES_REQUEST && isset($currentPossibleUserGroups[$row['GROUP_ID']])) { $currentUserGroups[$row['GROUP_ID']] = array('STORAGE' => $currentPossibleUserGroups[$row['GROUP_ID']], 'NAME' => $row['GROUP_NAME']); } } return $currentUserGroups; }
public static function getUserGroups($arFields, $n, $server) { global $USER; $dbRes = CSocNetUserToGroup::GetList( array('ID' => 'ASC'), array( 'USER_ID' => $USER->GetID(), '<=ROLE' => SONET_ROLES_USER ), false, false, array('GROUP_ID', 'GROUP_NAME', 'ROLE') ); $res = array(); while ($arRes = $dbRes->Fetch()) { $res[] = $arRes; } return $res; }
if (CModule::IncludeModule('extranet') && CExtranet::IsExtranetSite()) { $arFilter["SITE_ID"] = SITE_ID; } else { $arFilter["SITE_ID"] = array(SITE_ID, false); } $cnt = 0; $dbEvents = CSocNetLog::GetList(array("LOG_DATE" => "DESC"), $arFilter, false, false, array("MIN_ID_JOIN" => true)); while ($arEvents = $dbEvents->GetNext()) { if (intval($arParams["LOG_CNT"]) > 0 && $cnt >= $arParams["LOG_CNT"]) { break; } if ($arResult["Events"] == false) { $arResult["Events"] = array(); } if ($arEvents["ENTITY_TYPE"] == SONET_ENTITY_GROUP) { $arCurrentUserPerms = CSocNetUserToGroup::InitUserPerms($GLOBALS["USER"]->GetID(), array("ID" => $arEvents["ENTITY_ID"], "OWNER_ID" => $arEvents["GROUP_OWNER_ID"], "INITIATE_PERMS" => $arEvents["GROUP_INITIATE_PERMS"], "VISIBLE" => $arEvents["GROUP_VISIBLE"], "OPENED" => $arEvents["GROUP_OPENED"]), $bCurrentUserIsAdmin); if ($arEvents["EVENT_ID"] == "system") { if (!$arCurrentUserPerms["UserIsMember"]) { continue; } } elseif ($arEvents["EVENT_ID"] == "blog_post") { if (!array_key_exists("blog", $arSocNetFeaturesSettings) || !CSocNetFeaturesPerms::CanPerformOperation($GLOBALS["USER"]->GetID(), SONET_ENTITY_GROUP, $arEvents["ENTITY_ID"], "blog", "view_post", $bCurrentUserIsAdmin)) { continue; } } elseif ($arEvents["EVENT_ID"] == "blog_post_micro") { if (!array_key_exists("microblog", $arSocNetFeaturesSettings) || !CSocNetFeaturesPerms::CanPerformOperation($GLOBALS["USER"]->GetID(), SONET_ENTITY_GROUP, $arEvents["ENTITY_ID"], "blog", "view_post", $bCurrentUserIsAdmin)) { continue; } } elseif ($arEvents["EVENT_ID"] == "blog_comment") { if (!array_key_exists("blog", $arSocNetFeaturesSettings) || !CSocNetFeaturesPerms::CanPerformOperation($GLOBALS["USER"]->GetID(), SONET_ENTITY_GROUP, $arEvents["ENTITY_ID"], "blog", "view_comment", $bCurrentUserIsAdmin)) { continue;
function OnSearchCheckPermissions($FIELD) { global $DB, $USER; $user_id = intval($USER->GetID()); $arResult = array(); if ($user_id > 0) { $arResult[] = "SU" . $user_id . "_Z"; $rsFriends = CSocNetUserRelations::GetList(array(), array("USER_ID" => $user_id, "RELATION" => SONET_RELATIONS_FRIEND), false, false, array("ID", "FIRST_USER_ID", "SECOND_USER_ID", "DATE_CREATE", "DATE_UPDATE", "INITIATED_BY")); while ($arFriend = $rsFriends->Fetch()) { if ($arFriend["FIRST_USER_ID"] != $user_id) { $arResult[] = "SU" . $arFriend["FIRST_USER_ID"] . "_M"; } if ($arFriend["SECOND_USER_ID"] != $user_id) { $arResult[] = "SU" . $arFriend["SECOND_USER_ID"] . "_M"; } } } $rsGroups = CSocNetUserToGroup::GetList(array(), array("USER_ID" => $user_id), false, false, array("GROUP_ID", "ROLE")); while ($arGroup = $rsGroups->Fetch()) { $arResult[] = "SG" . $arGroup["GROUP_ID"] . "_" . $arGroup["ROLE"]; } return $arResult; }
$arResult["Group"] = $arGroup; $arResult["CurrentUserPerms"] = CSocNetUserToGroup::InitUserPerms($GLOBALS["USER"]->GetID(), $arResult["Group"], CSocNetUser::IsCurrentUserModuleAdmin()); if (!$arResult["CurrentUserPerms"] || !$arResult["CurrentUserPerms"]["UserCanViewGroup"] || !$arResult["CurrentUserPerms"]["UserCanSpamGroup"]) { $arResult["FatalError"] = GetMessage("SONET_CHAT_GROUP_ACESS"); } else { $arResult["Urls"]["Group"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_GROUP"], array("group_id" => $arResult["Group"]["ID"])); if ($arParams["SET_TITLE"] == "Y") { $APPLICATION->SetTitle($arResult["Group"]["NAME"] . ": " . GetMessage("SONET_CHAT_GROUP_TITLE")); } if (intval($arResult["Group"]["IMAGE_ID"]) <= 0) { $arResult["Group"]["IMAGE_ID"] = COption::GetOptionInt("socialnetwork", "default_group_picture", false, SITE_ID); } $arImage = CSocNetTools::InitImage($arResult["Group"]["IMAGE_ID"], 50, "/bitrix/images/socialnetwork/nopic_group_50.gif", 50, $arResult["Urls"]["Group"], true, 'target="_blank"'); $arResult["Group"]["IMAGE_ID_FILE"] = $arImage["FILE"]; $arResult["Group"]["IMAGE_ID_IMG"] = $arImage["IMG"]; $dbRequests = CSocNetUserToGroup::GetList(array("USER_LAST_NAME" => "ASC", "USER_NAME" => "ASC"), array("GROUP_ID" => $arResult["Group"]["ID"], "<=ROLE" => SONET_ROLES_USER), false, false, array("ID", "USER_ID", "ROLE", "DATE_CREATE", "DATE_UPDATE", "USER_NAME", "USER_LAST_NAME", "USER_SECOND_NAME", "USER_LOGIN", "USER_PERSONAL_PHOTO", "USER_PERSONAL_GENDER", "USER_IS_ONLINE")); if ($dbRequests) { $arResult["Users"] = array(); $arResult["Users"]["List"] = false; while ($arRequests = $dbRequests->GetNext()) { if ($arResult["UserSelf"]["ID"] == $arRequests["USER_ID"]) { continue; } if ($arResult["Users"]["List"] == false) { $arResult["Users"]["List"] = array(); } $pu = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_USER"], array("user_id" => $arRequests["USER_ID"])); $canViewProfile = CSocNetUserPerms::CanPerformOperation($GLOBALS["USER"]->GetID(), $arRequests["USER_ID"], "viewprofile", CSocNetUser::IsCurrentUserModuleAdmin()); $arTmpUser = array("NAME" => htmlspecialcharsback($arRequests["USER_NAME"]), "LAST_NAME" => htmlspecialcharsback($arRequests["USER_LAST_NAME"]), "SECOND_NAME" => htmlspecialcharsback($arRequests["USER_SECOND_NAME"]), "LOGIN" => htmlspecialcharsback($arRequests["USER_LOGIN"])); $strNameFormatted = CUser::FormatName($arParams['NAME_TEMPLATE'], $arTmpUser, $bUseLogin); $arResult["Users"]["List"][] = array("ID" => $arRequests["ID"], "USER_ID" => $arRequests["USER_ID"], "USER_NAME" => $arRequests["USER_NAME"], "USER_LAST_NAME" => $arRequests["USER_LAST_NAME"], "USER_SECOND_NAME" => $arRequests["USER_SECOND_NAME"], "USER_LOGIN" => $arRequests["USER_LOGIN"], "USER_NAME_FORMATTED" => $strNameFormatted, "USER_PROFILE_URL" => $pu, "SHOW_PROFILE_LINK" => $canViewProfile, "PATH_TO_MESSAGES_CHAT" => str_replace("#user_id#", $arRequests["USER_ID"], $arParams["PATH_TO_MESSAGES_CHAT"]), "IS_ONLINE" => $arRequests["USER_IS_ONLINE"] == "Y", "IS_MODERATOR" => $arRequests["ROLE"] != SONET_ROLES_USER);
public static function AllowToSend($arParams) { $bResult = false; if (isset($arParams['TO_USER_ID'])) { $toUserId = intval($arParams['TO_USER_ID']); $bResult = true; if(IsModuleInstalled('intranet') && CModule::IncludeModule('extranet') && !CExtranet::IsIntranetUser()) { $bResult = false; if (CModule::IncludeModule("socialnetwork")) { global $USER, $CACHE_MANAGER; if(defined("BX_COMP_MANAGED_CACHE")) $ttl = 2592000; else $ttl = 600; $cache_id = 'im_user_sg_'.$USER->GetID(); $obSGCache = new CPHPCache; $cache_dir = '/bx/imc/sonet'; if($obSGCache->InitCache($ttl, $cache_id, $cache_dir)) { $tmpVal = $obSGCache->GetVars(); $bResult = in_array($toUserId, $tmpVal['EXTRANET_USERS']); } else { if(defined("BX_COMP_MANAGED_CACHE")) $CACHE_MANAGER->StartTagCache($cache_dir); $dbUsersInGroup = CSocNetUserToGroup::GetList( array(), array( "USER_ID" => $USER->GetID(), "<=ROLE" => SONET_ROLES_USER, "GROUP_SITE_ID" => CExtranet::GetExtranetSiteID(), "GROUP_ACTIVE" => "Y", "GROUP_CLOSED" => "N" ), false, false, array("ID", "GROUP_ID", "GROUP_NAME") ); $arUserSocNetGroups = Array(); $arUserSG = Array(); while ($ar = $dbUsersInGroup->GetNext(true, false)) { $arUserSocNetGroups[] = $ar["GROUP_ID"]; $arUserSG['SG'.$ar['GROUP_ID']] = array( 'id' => 'SG'.$ar['GROUP_ID'], 'status' => 'close', 'name' => GetMessage('IM_CL_GROUP_SG').$ar['GROUP_NAME'] ); if(defined("BX_COMP_MANAGED_CACHE")) { $CACHE_MANAGER->RegisterTag('sonet_group_'.$ar['GROUP_ID']); $CACHE_MANAGER->RegisterTag('sonet_user2group_G'.$ar['GROUP_ID']); } } $arExtranetUsers = Array(); $arUserInGroup = Array(); $arWoUserInGroup = Array(); if (count($arUserSocNetGroups) > 0) { $dbUsersInGroup = CSocNetUserToGroup::GetList( array(), array( "GROUP_ID" => $arUserSocNetGroups, "<=ROLE" => SONET_ROLES_USER, "USER_ACTIVE" => "Y" ), false, false, array("ID", "USER_ID", "GROUP_ID") ); while ($ar = $dbUsersInGroup->GetNext(true, false)) { if($USER->GetID() != $ar["USER_ID"]) { $arExtranetUsers[$ar["USER_ID"]] = $ar["USER_ID"]; if (isset($arUserInGroup["SG".$ar["GROUP_ID"]])) $arUserInGroup["SG".$ar["GROUP_ID"]]['users'][] = $ar["USER_ID"]; else $arUserInGroup["SG".$ar["GROUP_ID"]] = Array('id' => "SG".$ar["GROUP_ID"], 'users' => Array($ar["USER_ID"])); if (isset($arWoUserInGroup["extranet"])) $arWoUserInGroup["extranet"]['users'][] = $ar["USER_ID"]; else $arWoUserInGroup["extranet"] = Array('id' => "extranet", 'users' => Array($ar["USER_ID"])); } } if (isset($arWoUserInGroup['extranet']) && isset($arWoUserInGroup['extranet']['users'])) $arWoUserInGroup['extranet']['users'] = array_values(array_unique($arWoUserInGroup['extranet']['users'])); } if(defined("BX_COMP_MANAGED_CACHE")) $CACHE_MANAGER->EndTagCache(); if($obSGCache->StartDataCache()) { $obSGCache->EndDataCache(array( 'USER_SG' => $arUserSG, 'EXTRANET_USERS' => $arExtranetUsers, 'USER_IN_GROUP' => $arUserInGroup, 'WO_USER_IN_GROUP' => $arWoUserInGroup ) ); } $bResult = in_array($toUserId, $arExtranetUsers); } unset($obSGCache); } } } else if (isset($arParams['TO_CHAT_ID'])) { global $DB, $USER; $toChatId = intval($arParams['TO_CHAT_ID']); $fromUserId = intval($USER->GetID()); $strSql = " SELECT R.CHAT_ID FROM b_im_relation R WHERE R.USER_ID = ".$fromUserId." AND R.MESSAGE_TYPE = '".IM_MESSAGE_GROUP."' AND R.CHAT_ID = ".$toChatId.""; $dbRes = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__); if ($arRes = $dbRes->Fetch()) $bResult = true; else $bResult = false; } return $bResult; }
if ($arParams["SET_NAV_CHAIN"] != "N") { $APPLICATION->AddChainItem($arResult["Group"]["NAME"], $arResult["Urls"]["Group"]); $APPLICATION->AddChainItem(GetMessage("SONET_C37_PAGE_TITLE")); } if ($arResult["CurrentUserPerms"]["UserIsOwner"]) { $arResult["FatalError"] = GetMessage("SONET_C37_IS_OWNER") . ". "; } elseif (!$arResult["CurrentUserPerms"]["UserIsMember"]) { $arResult["FatalError"] = GetMessage("SONET_C37_NOT_MEMBER") . ". "; } else { if ($arParams["SET_TITLE"] == "Y") { $APPLICATION->SetTitle($arResult["Group"]["NAME"] . ": " . GetMessage("SONET_C37_PAGE_TITLE")); } $arResult["ShowForm"] = "Input"; if ($_SERVER["REQUEST_METHOD"] == "POST" && strlen($_POST["save"]) > 0 && check_bitrix_sessid()) { $errorMessage = ""; if (strlen($errorMessage) <= 0) { if (!CSocNetUserToGroup::DeleteRelation($GLOBALS["USER"]->GetID(), $arResult["Group"]["ID"]) && ($e = $APPLICATION->GetException())) { $errorMessage .= $e->GetString(); } } if (strlen($errorMessage) > 0) { $arResult["ErrorMessage"] = $errorMessage; } else { $arResult["ShowForm"] = "Confirm"; } } } } } } $this->IncludeComponentTemplate();
public static function GetSocnetGroup($arParams = array()) { global $USER; $userId = intval($USER->GetID()); $arSocnetGroups = array(); $arSelect = array(); if (isset($arParams['id'])) { if (empty($arParams['id'])) { return $arSocnetGroups; } else { foreach ($arParams['id'] as $value) { $arSelect[] = intval($value); } } } if (isset($arParams['site_id']) && strlen($arParams['site_id']) > 0) { $siteId = $arParams['site_id']; } else { $siteId = SITE_ID; } $arFilter = array("USER_ID" => $userId, "ID" => $arSelect, "<=ROLE" => SONET_ROLES_USER, "GROUP_SITE_ID" => $siteId, "GROUP_ACTIVE" => "Y"); if (isset($arParams['GROUP_CLOSED'])) { $arFilter['GROUP_CLOSED'] = $arParams['GROUP_CLOSED']; } $arSocnetGroupsTmp = array(); $rsGroups = CSocNetUserToGroup::GetList(array("GROUP_NAME" => "ASC"), $arFilter, false, array("nTopCount" => 500), array("ID", "GROUP_ID", "GROUP_NAME", "GROUP_DESCRIPTION", "GROUP_IMAGE_ID")); while ($arGroup = $rsGroups->Fetch()) { $arGroupTmp = array("id" => $arGroup["GROUP_ID"], "entityId" => $arGroup["GROUP_ID"], "name" => htmlspecialcharsbx($arGroup["GROUP_NAME"]), "desc" => htmlspecialcharsbx($arGroup["GROUP_DESCRIPTION"])); if ($arGroup["GROUP_IMAGE_ID"]) { $imageFile = CFile::GetFileArray($arGroup["GROUP_IMAGE_ID"]); if ($imageFile !== false) { $arFileTmp = CFile::ResizeImageGet($imageFile, array("width" => intval($arParams["THUMBNAIL_SIZE_WIDTH"]) > 0 ? $arParams["THUMBNAIL_SIZE_WIDTH"] : 30, "height" => intval($arParams["THUMBNAIL_SIZE_HEIGHT"]) > 0 ? $arParams["THUMBNAIL_SIZE_HEIGHT"] : 30), BX_RESIZE_IMAGE_PROPORTIONAL, false); $arGroupTmp["avatar"] = $arFileTmp["src"]; } } $arSocnetGroupsTmp[$arGroupTmp['id']] = $arGroupTmp; } if (isset($arParams['features']) && !empty($arParams['features'])) { self::GetSocnetGroupFilteredByFeaturePerms($arSocnetGroupsTmp, $arParams['features']); } foreach ($arSocnetGroupsTmp as $value) { $value['id'] = 'SG' . $value['id']; $arSocnetGroups[$value['id']] = $value; } return $arSocnetGroups; }
function CreateGroup($ownerID, $arFields, $bAutoSubscribe = true) { global $APPLICATION, $DB; $ownerID = IntVal($ownerID); if ($ownerID <= 0) { $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_UR_EMPTY_OWNERID") . ". ", "ERROR_OWNERID"); return false; } if (!isset($arFields) || !is_array($arFields)) { $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_UR_EMPTY_FIELDS") . ". ", "ERROR_FIELDS"); return false; } $DB->StartTransaction(); $arFields["=DATE_CREATE"] = $GLOBALS["DB"]->CurrentTimeFunction(); $arFields["=DATE_UPDATE"] = $GLOBALS["DB"]->CurrentTimeFunction(); $arFields["=DATE_ACTIVITY"] = $GLOBALS["DB"]->CurrentTimeFunction(); $arFields["ACTIVE"] = "Y"; $arFields["OWNER_ID"] = $ownerID; if (!is_set($arFields, "SPAM_PERMS") || strlen($arFields["SPAM_PERMS"]) <= 0) { $arFields["SPAM_PERMS"] = SONET_ROLES_OWNER; } $groupID = CSocNetGroup::Add($arFields); if (!$groupID || IntVal($groupID) <= 0) { $errorMessage = ""; if ($e = $APPLICATION->GetException()) { $errorMessage = $e->GetString(); $errorID = $e->GetID(); if (StrLen($errorID) <= 0 && isset($e->messages) && is_array($e->messages) && is_array($e->messages[0]) && array_key_exists("id", $e->messages[0])) { $errorID = $e->messages[0]["id"]; } } if (StrLen($errorMessage) <= 0) { $errorMessage = GetMessage("SONET_UR_ERROR_CREATE_GROUP") . ". "; } if (StrLen($errorID) <= 0) { $errorID = "ERROR_CREATE_GROUP"; } $GLOBALS["APPLICATION"]->ThrowException($errorMessage, $errorID); $DB->Rollback(); return false; } $arFields1 = array("USER_ID" => $ownerID, "GROUP_ID" => $groupID, "ROLE" => SONET_ROLES_OWNER, "=DATE_CREATE" => $GLOBALS["DB"]->CurrentTimeFunction(), "=DATE_UPDATE" => $GLOBALS["DB"]->CurrentTimeFunction(), "INITIATED_BY_TYPE" => SONET_INITIATED_BY_USER, "INITIATED_BY_USER_ID" => $ownerID, "MESSAGE" => false); if (!CSocNetUserToGroup::Add($arFields1)) { $errorMessage = ""; if ($e = $APPLICATION->GetException()) { $errorMessage = $e->GetString(); } if (StrLen($errorMessage) <= 0) { $errorMessage = GetMessage("SONET_UR_ERROR_CREATE_U_GROUP") . ". "; } $GLOBALS["APPLICATION"]->ThrowException($errorMessage, "ERROR_CREATE_GROUP"); $DB->Rollback(); return false; } if ($bAutoSubscribe) { CSocNetLogEvents::AutoSubscribe($ownerID, SONET_ENTITY_GROUP, $groupID); } CSocNetSubscription::Set($ownerID, "SG" . $groupID, "Y"); $DB->Commit(); return $groupID; }
while ($arGroup = $dbGroup->GetNext()) { if ($arCacheResult["Groups"]["List"] == false) { $arCacheResult["Groups"]["List"] = array(); } $pu = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_GROUP"], array("group_id" => $arGroup["ID"])); if (intval($arGroup["IMAGE_ID"]) <= 0) { $arGroup["IMAGE_ID"] = COption::GetOptionInt("socialnetwork", "default_group_picture", false, SITE_ID); } $arImageResized = false; $imageFile = CFile::GetFileArray($arGroup["IMAGE_ID"]); if ($imageFile !== false) { $arImageResized = CFile::ResizeImageGet($imageFile, array("width" => $arParams["THUMBNAIL_SIZE"], "height" => $arParams["THUMBNAIL_SIZE"]), BX_RESIZE_IMAGE_EXACT); } $arImage = CSocNetTools::InitImage($arGroup["IMAGE_ID"], 150, "/bitrix/images/socialnetwork/nopic_group_150.gif", 150, $pu, true); if ($arParams["PAGE"] == "group_request_group_search") { $arCurrentUserPerms4Group = CSocNetUserToGroup::InitUserPerms($arResult["User"]["ID"], array("ID" => $arGroup["ID"], "OWNER_ID" => $arGroup["OWNER_ID"], "INITIATE_PERMS" => $arGroup["INITIATE_PERMS"], "VISIBLE" => $arGroup["VISIBLE"], "OPENED" => $arGroup["OPENED"]), CSocNetUser::IsCurrentUserModuleAdmin()); } $arCacheResult["Groups"]["List"][] = array("GROUP_ID" => $arGroup["ID"], "GROUP_NAME" => $arGroup["NAME"], "GROUP_DESCRIPTION" => strlen($arGroup["DESCRIPTION"]) > 50 ? substr($arGroup["DESCRIPTION"], 0, 50) . "..." : $arGroup["DESCRIPTION"], "GROUP_PHOTO" => $arGroup["IMAGE_ID"], "GROUP_PHOTO_FILE" => $arImage["FILE"], "GROUP_PHOTO_IMG" => $arImage["IMG"], "GROUP_PHOTO_RESIZED" => $arImageResized, "GROUP_URL" => $pu, "GROUP_REQUEST_USER_URL" => CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_GROUP_REQUEST_USER"], array("group_id" => $arGroup["ID"], "user_id" => $arResult["UserRequest"]["ID"])), "CAN_INVITE2GROUP" => $arParams["PAGE"] != "user_groups" ? $arCurrentUserPerms4Group && $arCurrentUserPerms4Group["UserCanInitiate"] : false, "FULL" => array("DATE_CREATE_FORMATTED" => date($arParams["DATE_TIME_FORMAT"], MakeTimeStamp($arGroup["DATE_CREATE"], CSite::GetDateFormat("FULL"))), "DATE_UPDATE_FORMATTED" => date($arParams["DATE_TIME_FORMAT"], MakeTimeStamp($arGroup["DATE_UPDATE"], CSite::GetDateFormat("FULL"))), "DATE_ACTIVITY_FORMATTED" => date($arParams["DATE_TIME_FORMAT"], MakeTimeStamp($arGroup["DATE_ACTIVITY"], CSite::GetDateFormat("FULL"))))); $arGroupID[] = $arGroup["ID"]; } if (CModule::IncludeModule("extranet") && !CExtranet::IsExtranetSite()) { $arExtranetGroupID = array(); $dbGroupTmp = CSocNetGroup::GetList(array(), array("ID" => $arGroupID, "SITE_ID" => CExtranet::GetExtranetSiteID()), false, false, array("ID")); while ($arGroupTmp = $dbGroupTmp->Fetch()) { $arExtranetGroupID[] = $arGroupTmp["ID"]; } if (count($arExtranetGroupID) > 0 && is_array($arCacheResult["Groups"]["List"])) { foreach ($arCacheResult["Groups"]["List"] as $key => $arGroupTmp) { $arCacheResult["Groups"]["List"][$key]["IS_EXTRANET"] = in_array($arGroupTmp["GROUP_ID"], $arExtranetGroupID) ? "Y" : "N"; } }
public function GetFormHtml($arParams = false) { global $USER; if (is_array($arParams["socnetgroups"]) && $arParams["socnetgroups"]["disabled"] == "true") { return false; } $currElements = ''; if (is_array($arParams[$this->id]) && ($group_id = intval($arParams[$this->id]["group_id"])) > 0) { $arFinderParams = array("PROVIDER" => $this->id, "TYPE" => 4); $arFilter = array("ID" => $group_id, "ACTIVE" => "Y"); if (!CSocNetUser::IsCurrentUserModuleAdmin($arParams["SITE_ID"])) { $arFilter["CHECK_PERMISSIONS"] = $USER->GetID(); } $rsGroups = CSocNetGroup::GetList(array(), $arFilter); if ($arGroup = $rsGroups->Fetch()) { $arItem = array("ID" => "SG" . $arGroup['ID'], "AVATAR" => '/bitrix/js/main/core/images/access/avatar-user-everyone.png', "NAME" => $arGroup['NAME'], "DESC" => $arGroup['DESCRIPTION'], "OPEN" => "Y", "CHECKBOX" => array("#ID#_A" => GetMessage("authprov_sg_a"), "#ID#_E" => GetMessage("authprov_sg_e"), "#ID#_K" => GetMessage("authprov_sg_k"))); if ($arGroup["IMAGE_ID"]) { $imageFile = CFile::GetFileArray($arGroup["IMAGE_ID"]); if ($imageFile !== false) { $arFileTmp = CFile::ResizeImageGet($imageFile, array("width" => 30, "height" => 30), BX_RESIZE_IMAGE_PROPORTIONAL, false); $arItem["AVATAR"] = $arFileTmp["src"]; } } $currElements .= CFinder::GetFinderItem($arFinderParams, $arItem); } } $elements = ""; $arFinderParams = array("PROVIDER" => $this->id, "TYPE" => 3); $arLRU = CAccess::GetLastRecentlyUsed($this->id); if (!empty($arLRU)) { $arLast = array(); $arLastID = array(); $arElements = array(); foreach ($arLRU as $val) { if (preg_match('/^SG([0-9]+)_([A-Z])/', $val, $match)) { $arLast[$match[2]][$match[1]] = $match[1]; $arLastID[$match[1]] = $match[1]; } } if (!empty($arLastID)) { $arFilter = array("ID" => $arLastID, "ACTIVE" => "Y"); if ($arParams["SITE_ID"] != '') { $arFilter["SITE_ID"] = $arParams["SITE_ID"]; } if (!CSocNetUser::IsCurrentUserModuleAdmin($arParams["SITE_ID"])) { $arFilter["CHECK_PERMISSIONS"] = $USER->GetID(); } $rsGroups = CSocNetGroup::GetList(array("NAME" => "ASC"), $arFilter); while ($arGroup = $rsGroups->Fetch()) { $arItem = array("ID" => $arGroup['ID'], "AVATAR" => '/bitrix/js/main/core/images/access/avatar-user-everyone.png', "NAME" => $arGroup['NAME'], "DESC" => $arGroup['DESCRIPTION']); if ($arGroup["IMAGE_ID"]) { $imageFile = CFile::GetFileArray($arGroup["IMAGE_ID"]); if ($imageFile !== false) { $arFileTmp = CFile::ResizeImageGet($imageFile, array("width" => 30, "height" => 30), BX_RESIZE_IMAGE_PROPORTIONAL, false); $arItem["AVATAR"] = $arFileTmp["src"]; } } $arElements[$arItem['ID']] = $arItem; } foreach ($arLRU as $val) { if (preg_match('/^SG([0-9]+)_([A-Z])/', $val, $match)) { $arItem = $arElements[$match[1]]; if ($match[2] == 'K') { $arItem['ID'] = 'SG' . $arElements[$match[1]]['ID'] . '_K'; $arItem['NAME'] = $arElements[$match[1]]['NAME'] . ': ' . GetMessage("authprov_sg_k"); } else { if ($match[2] == 'E') { $arItem['ID'] = 'SG' . $arElements[$match[1]]['ID'] . '_E'; $arItem['NAME'] = $arElements[$match[1]]['NAME'] . ': ' . GetMessage("authprov_sg_e"); } else { if ($match[2] == 'A') { $arItem['ID'] = 'SG' . $arElements[$match[1]]['ID'] . '_A'; $arItem['NAME'] = $arElements[$match[1]]['NAME'] . ': ' . GetMessage("authprov_sg_a"); } } } $elements .= CFinder::GetFinderItem($arFinderParams, $arItem); } } } } $arFinderParams = array("PROVIDER" => $this->id, "TYPE" => 4); $arFilter = array("USER_ID" => $USER->GetID(), "<=ROLE" => SONET_ROLES_USER, "GROUP_ACTIVE" => "Y"); if ($arParams["SITE_ID"] != '') { $arFilter["GROUP_SITE_ID"] = $arParams["SITE_ID"]; } $rsGroups = CSocNetUserToGroup::GetList(array("GROUP_NAME" => "ASC"), $arFilter, false, array(), array("ID", "GROUP_ID", "GROUP_NAME", "GROUP_DESCRIPTION", "GROUP_IMAGE_ID")); $myElements = ''; while ($arGroup = $rsGroups->Fetch()) { $arItem = array("ID" => "SG" . $arGroup['GROUP_ID'], "AVATAR" => $arGroup['GROUP_IMAGE_ID'], "NAME" => $arGroup['GROUP_NAME'], "DESC" => $arGroup['GROUP_DESCRIPTION'], "CHECKBOX" => array("#ID#_A" => GetMessage("authprov_sg_a"), "#ID#_E" => GetMessage("authprov_sg_e"), "#ID#_K" => GetMessage("authprov_sg_k"))); if ($arGroup["GROUP_IMAGE_ID"]) { $imageFile = CFile::GetFileArray($arGroup["GROUP_IMAGE_ID"]); if ($imageFile !== false) { $arFileTmp = CFile::ResizeImageGet($imageFile, array("width" => 30, "height" => 30), BX_RESIZE_IMAGE_PROPORTIONAL, false); $arItem["AVATAR"] = $arFileTmp["src"]; } } $myElements .= CFinder::GetFinderItem($arFinderParams, $arItem); } $arPanels = array(); if ($currElements != '') { $arPanels[] = array("NAME" => GetMessage("authprov_sg_current"), "ELEMENTS" => $currElements); } $arPanels[] = array("NAME" => GetMessage("authprov_sg_panel_last"), "ELEMENTS" => $elements); $arPanels[] = array("NAME" => GetMessage("authprov_sg_panel_my_group"), "ELEMENTS" => $myElements); $arPanels[] = array("NAME" => GetMessage("authprov_sg_panel_search"), "ELEMENTS" => CFinder::GetFinderItem(array("TYPE" => "text"), array("TEXT" => GetMessage("authprov_sg_panel_search_text"))), "SEARCH" => "Y"); $html = CFinder::GetFinderAppearance($arFinderParams, $arPanels); return array("HTML" => $html, "SELECTED" => $currElements != ''); }
public static function GetGroupMembers($groupId) { $dbMembers = CSocNetUserToGroup::GetList(array("RAND" => "ASC"), array("GROUP_ID" => $groupId, "<=ROLE" => SONET_ROLES_USER, "USER_ACTIVE" => "Y"), false, false, array("USER_ID", "USER_NAME", "USER_LAST_NAME", "USER_SECOND_NAME", "USER_LOGIN")); $arMembers = array(); if ($dbMembers) { while ($Member = $dbMembers->GetNext()) { $name = trim($Member['USER_NAME'] . ' ' . $Member['USER_LAST_NAME']); if ($name == '') { $name = trim($Member['USER_LOGIN']); } $arMembers[] = array('id' => $Member["USER_ID"], 'name' => $name); } } return $arMembers; }
function NotifyImToModerators($arNotifyParams) { if (!CModule::IncludeModule("im")) { return; } if (!is_array($arNotifyParams) || !array_key_exists("TYPE", $arNotifyParams) || !in_array($arNotifyParams["TYPE"], array("join", "unjoin", "exclude", "moderate", "unmoderate", "owner")) || !array_key_exists("USER_ID", $arNotifyParams) || intval($arNotifyParams["USER_ID"]) <= 0 || !array_key_exists("GROUP_ID", $arNotifyParams) || intval($arNotifyParams["GROUP_ID"]) <= 0 || !array_key_exists("RELATION_ID", $arNotifyParams) || intval($arNotifyParams["RELATION_ID"]) <= 0 || !array_key_exists("GROUP_NAME", $arNotifyParams) || strlen($arNotifyParams["GROUP_NAME"]) <= 0) { return; } switch ($arNotifyParams["TYPE"]) { case "join": $from_user_id = $arNotifyParams["USER_ID"]; $message_code = "SONET_UG_IM_JOIN"; $schema_code = "inout_group"; $notify_tag = "INOUT_GROUP"; break; case "unjoin": $from_user_id = $arNotifyParams["USER_ID"]; $message_code = "SONET_UG_IM_UNJOIN"; $schema_code = "inout_group"; $notify_tag = "INOUT_GROUP"; break; case "exclude": $from_user_id = $arNotifyParams["USER_ID"]; $message_code = "SONET_UG_IM_EXCLUDE"; $schema_code = "inout_group"; $notify_tag = "INOUT_GROUP"; break; case "moderate": $from_user_id = $arNotifyParams["USER_ID"]; $message_code = "SONET_UG_IM_MODERATE"; $schema_code = "moderators_group"; $notify_tag = "MOD_GROUP"; break; case "unmoderate": $from_user_id = $arNotifyParams["USER_ID"]; $message_code = "SONET_UG_IM_UNMODERATE"; $schema_code = "moderators_group"; $notify_tag = "MOD_GROUP"; break; case "owner": $from_user_id = $arNotifyParams["USER_ID"]; $message_code = "SONET_UG_IM_OWNER"; $schema_code = "owner_group"; $notify_tag = "OWNER_GROUP"; break; default: } $rsUser = CUser::GetByID($arNotifyParams["USER_ID"]); if ($arUser = $rsUser->Fetch()) { switch ($arUser["PERSONAL_GENDER"]) { case "M": $gender_suffix = "_M"; break; case "F": $gender_suffix = "_F"; break; default: $gender_suffix = ""; } } $arToUserID = array(); $rsUserToGroup = CSocNetUserToGroup::GetList(array(), array("GROUP_ID" => $arNotifyParams["GROUP_ID"], "USER_ACTIVE" => "Y", "<=ROLE" => SONET_ROLES_MODERATOR), false, false, array("USER_ID")); while ($arUserToGroup = $rsUserToGroup->Fetch()) { $arToUserID[] = $arUserToGroup["USER_ID"]; } $arMessageFields = array("MESSAGE_TYPE" => IM_MESSAGE_SYSTEM, "FROM_USER_ID" => $from_user_id, "NOTIFY_TYPE" => IM_NOTIFY_FROM, "NOTIFY_MODULE" => "socialnetwork", "NOTIFY_EVENT" => $schema_code, "LOG_ID" => $arEntry["LOG_ID"], "NOTIFY_TAG" => "SOCNET|" . $notify_tag . "|" . intval($arNotifyParams["USER_ID"]) . "|" . intval($arNotifyParams["GROUP_ID"]) . "|" . intval($arNotifyParams["RELATION_ID"])); $groups_path = COption::GetOptionString("socialnetwork", "workgroups_page", SITE_DIR . "workgroups/"); $group_url_template = str_replace($groups_path, "#GROUPS_PATH#", COption::GetOptionString("socialnetwork", "group_path_template", SITE_DIR . "workgroups/group/#group_id#/")); $groupUrl = str_replace("#group_id#", $arNotifyParams["GROUP_ID"], $group_url_template); foreach ($arToUserID as $to_user_id) { if (is_array($arNotifyParams["EXCLUDE_USERS"]) && in_array($to_user_id, $arNotifyParams["EXCLUDE_USERS"]) || $to_user_id == $from_user_id) { continue; } $arMessageFields["TO_USER_ID"] = $to_user_id; $arTmp = CSocNetLogTools::ProcessPath(array("GROUP_PAGE" => $groupUrl), $to_user_id, SITE_ID); $arMessageFields["NOTIFY_MESSAGE"] = GetMessage($message_code . $gender_suffix, array("#group_name#" => "<a href=\"" . $arTmp["URLS"]["GROUP_PAGE"] . "\" class=\"bx-notifier-item-action\">" . $arNotifyParams["GROUP_NAME"] . "</a>")); $arMessageFields["NOTIFY_MESSAGE_OUT"] = GetMessage($message_code . $gender_suffix, array("#group_name#" => $arNotifyParams["GROUP_NAME"])) . " (" . $arTmp["SERVER_NAME"] . $arTmp["URLS"]["GROUP_PAGE"] . ")"; CIMNotify::Add($arMessageFields); } }
} // get all groups from current site (if not extranet) if (SITE_ID != CExtranet::GetExtranetSiteID()) { $arGroupForCheck = array(); $dbGroups = CSocNetGroup::GetList(array(), array("SITE_ID" => SITE_ID), false, false, array('ID')); while ($arGroups = $dbGroups->GetNext()) { $arGroupForCheck[] = $arGroups["ID"]; } } if (!is_array($arGroupForCheck) || count($arGroupForCheck) > 0) { $arGroupFilterMy = array("USER_ID" => $USER_ID, "<=ROLE" => SONET_ROLES_USER, "GROUP_ACTIVE" => "Y", "!GROUP_CLOSED" => "Y", "GROUP_SITE_ID" => CExtranet::GetExtranetSiteID()); if (count($arGroupForCheck) > 0) { $arGroupFilterMy["GROUP_ID"] = $arGroupForCheck; } // Socialnetwork $dbGroups = CSocNetUserToGroup::GetList(array("GROUP_NAME" => "ASC"), $arGroupFilterMy, false, false, array('ID', 'GROUP_ID', 'GROUP_NAME')); while ($arGroups = $dbGroups->GetNext()) { $arExSGGroup[] = array($arGroups["GROUP_NAME"], str_replace("#group_id#", $arGroups["GROUP_ID"], $strGroupLinkTemplate), array(), array(), ""); if (defined("BX_COMP_MANAGED_CACHE")) { $CACHE_MANAGER->RegisterTag('sonet_group_' . $arGroups["ID"]); } } } } $aMenuLinks = $arExSGGroup; } } else { if (CModule::IncludeModule("socialnetwork")) { if (!function_exists("__CheckPath4Template")) { function __CheckPath4Template($pageTemplate, $currentPageUrl, &$arVariables) {
if (CModule::IncludeModule('extranet') && CExtranet::IsExtranetSite()) { if (!$GLOBALS["USER"]->IsAdmin() && !CSocNetUser::IsCurrentUserModuleAdmin()) { $arGroupFilterMy = array("USER_ID" => $GLOBALS["USER"]->GetID(), "<=ROLE" => SONET_ROLES_USER, "GROUP_SITE_ID" => SITE_ID, "GROUP_ACTIVE" => "Y"); $dbGroups = CSocNetUserToGroup::GetList(array(), $arGroupFilterMy, false, false, array("GROUP_ID")); $arMyGroups = array(); while ($arGroups = $dbGroups->GetNext()) { $arMyGroups[] = $arGroups["GROUP_ID"]; } $arGroupFilter["GROUP_ID"] = $arMyGroups; } } else { if ($arResult["User"]["ID"] != $USER->GetID() && !CSocNetUser::IsCurrentUserModuleAdmin()) { $arGroupFilter["GROUP_VISIBLE"] = "Y"; } } $dbGroups = CSocNetUserToGroup::GetList(array("GROUP_DATE_ACTIVITY" => "DESC", "GROUP_NAME" => "ASC"), $arGroupFilter, false, false, array("ID", "GROUP_ID", "GROUP_NAME")); if ($dbGroups) { $arResult["Groups"] = array(); $arResult["Groups"]["Count"] = 0; $arResult["Groups"]["List"] = false; $arResult["Groups"]["ListFull"] = false; while ($arGroups = $dbGroups->GetNext()) { if ($arResult["Groups"]["ListFull"] == false) { $arResult["Groups"]["ListFull"] = array(); } $arResult["Groups"]["Count"]++; $arResult["Groups"]["ListFull"][] = array("ID" => $arGroups["ID"], "GROUP_ID" => $arGroups["GROUP_ID"], "GROUP_NAME" => $arGroups["GROUP_NAME"], "GROUP_URL" => CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_GROUP"], array("group_id" => $arGroups["GROUP_ID"]))); } if (is_array($arResult["Groups"]["ListFull"])) { $arResult["Groups"]["List"] = array_slice($arResult["Groups"]["ListFull"], 0, $arParams["ITEMS_COUNT"]); }
if (!CModule::IncludeModule("socialnetwork")) { echo CUtil::PhpToJsObject(array('ERROR' => 'SONET_MODULE_NOT_INSTALLED')); die; } if (!$GLOBALS["USER"]->IsAuthorized()) { echo CUtil::PhpToJsObject(array("ERROR" => "CURRENT_USER_NOT_AUTH")); die; } $groupID = intval($_POST["groupID"]); if ($groupID <= 0) { echo CUtil::PhpToJsObject(array("ERROR" => "EMPTY_GROUP_ID")); die; } if (check_bitrix_sessid()) { if (in_array($_POST["action"], array("set", "unset"))) { $userRole = CSocNetUserToGroup::GetUserRole($GLOBALS["USER"]->GetID(), $groupID); if (!in_array($userRole, array(SONET_ROLES_OWNER, SONET_ROLES_MODERATOR, SONET_ROLES_USER))) { echo CUtil::PhpToJsObject(array("ERROR" => "INCORRECT_USER_ROLE")); die; } if (CSocNetSubscription::Set($GLOBALS["USER"]->GetID(), "SG" . $groupID, $_POST["action"] == "set" ? "Y" : "N")) { $rsSubscription = CSocNetSubscription::GetList(array(), array("USER_ID" => $GLOBALS["USER"]->GetID(), "CODE" => "SG" . $groupID)); if ($arSubscription = $rsSubscription->Fetch()) { echo CUtil::PhpToJsObject(array("SUCCESS" => "Y", "RESULT" => "Y")); } else { echo CUtil::PhpToJsObject(array("SUCCESS" => "Y", "RESULT" => "N")); } } } else { echo CUtil::PhpToJsObject(array("ERROR" => "UNKNOWN_ACTION")); }
function SetForSonet($logID, $entity_type, $entity_id, $feature, $operation, $bNew = false) { $bFlag = true; if (!$bNew) { $rsRights = CSocNetLogRights::GetList(array(), array("LOG_ID" => $logID)); if ($arRights = $rsRights->Fetch()) { $bFlag = false; } } if ($bFlag) { $bExtranet = false; $perm = CSocNetFeaturesPerms::GetOperationPerm($entity_type, $entity_id, $feature, $operation); if ($perm) { if (CModule::IncludeModule("extranet") && ($extranet_site_id = CExtranet::GetExtranetSiteID())) { $arLogSites = array(); $rsLogSite = CSocNetLog::GetSite($logID); while ($arLogSite = $rsLogSite->Fetch()) { $arLogSites[] = $arLogSite["LID"]; } if (in_array($extranet_site_id, $arLogSites)) { $bExtranet = true; } } if ($bExtranet) { if ($entity_type == SONET_ENTITY_GROUP && $perm == SONET_ROLES_OWNER) { CSocNetLogRights::Add($logID, array("SA", "S" . SONET_ENTITY_GROUP . $entity_id, "S" . SONET_ENTITY_GROUP . $entity_id . "_" . SONET_ROLES_OWNER)); } elseif ($entity_type == SONET_ENTITY_GROUP && $perm == SONET_ROLES_MODERATOR) { CSocNetLogRights::Add($logID, array("SA", "S" . SONET_ENTITY_GROUP . $entity_id, "S" . SONET_ENTITY_GROUP . $entity_id . "_" . SONET_ROLES_OWNER, "S" . SONET_ENTITY_GROUP . $entity_id . "_" . SONET_ROLES_MODERATOR)); } elseif ($entity_type == SONET_ENTITY_GROUP && in_array($perm, array(SONET_ROLES_USER, SONET_ROLES_AUTHORIZED, SONET_ROLES_ALL))) { CSocNetLogRights::Add($logID, array("SA", "S" . SONET_ENTITY_GROUP . $entity_id, "S" . SONET_ENTITY_GROUP . $entity_id . "_" . SONET_ROLES_OWNER, "S" . SONET_ENTITY_GROUP . $entity_id . "_" . SONET_ROLES_MODERATOR, "S" . SONET_ENTITY_GROUP . $entity_id . "_" . SONET_ROLES_USER)); } elseif ($entity_type == SONET_ENTITY_USER && $perm == SONET_RELATIONS_TYPE_NONE) { CSocNetLogRights::Add($logID, array("SA", "U" . $entity_id)); } elseif ($entity_type == SONET_ENTITY_USER && in_array($perm, array(SONET_RELATIONS_TYPE_FRIENDS, SONET_RELATIONS_TYPE_FRIENDS2, SONET_RELATIONS_TYPE_AUTHORIZED, SONET_RELATIONS_TYPE_ALL))) { $arCode = array("SA"); $arLog = CSocNetLog::GetByID($logID); if ($arLog) { $dbUsersInGroup = CSocNetUserToGroup::GetList(array(), array("USER_ID" => $arLog["USER_ID"], "<=ROLE" => SONET_ROLES_USER, "GROUP_SITE_ID" => $extranet_site_id, "GROUP_ACTIVE" => "Y"), false, false, array("ID", "GROUP_ID")); while ($arUsersInGroup = $dbUsersInGroup->Fetch()) { if (!in_array("S" . SONET_ENTITY_GROUP . $arUsersInGroup["GROUP_ID"] . "_" . SONET_ROLES_USER, $arCode)) { $arCode = array_merge($arCode, array("S" . SONET_ENTITY_GROUP . $arUsersInGroup["GROUP_ID"] . "_" . SONET_ROLES_OWNER, "S" . SONET_ENTITY_GROUP . $arUsersInGroup["GROUP_ID"] . "_" . SONET_ROLES_MODERATOR, "S" . SONET_ENTITY_GROUP . $arUsersInGroup["GROUP_ID"] . "_" . SONET_ROLES_USER)); } } CSocNetLogRights::Add($logID, $arCode); } } } else { if ($entity_type == SONET_ENTITY_GROUP && $perm == SONET_ROLES_OWNER) { CSocNetLogRights::Add($logID, array("SA", "S" . SONET_ENTITY_GROUP . $entity_id, "S" . SONET_ENTITY_GROUP . $entity_id . "_" . SONET_ROLES_OWNER)); } elseif ($entity_type == SONET_ENTITY_GROUP && $perm == SONET_ROLES_MODERATOR) { CSocNetLogRights::Add($logID, array("SA", "S" . SONET_ENTITY_GROUP . $entity_id, "S" . SONET_ENTITY_GROUP . $entity_id . "_" . SONET_ROLES_OWNER, "S" . SONET_ENTITY_GROUP . $entity_id . "_" . SONET_ROLES_MODERATOR)); } elseif ($entity_type == SONET_ENTITY_GROUP && $perm == SONET_ROLES_USER) { CSocNetLogRights::Add($logID, array("SA", "S" . SONET_ENTITY_GROUP . $entity_id, "S" . SONET_ENTITY_GROUP . $entity_id . "_" . SONET_ROLES_OWNER, "S" . SONET_ENTITY_GROUP . $entity_id . "_" . SONET_ROLES_MODERATOR, "S" . SONET_ENTITY_GROUP . $entity_id . "_" . SONET_ROLES_USER)); } elseif ($entity_type == SONET_ENTITY_USER && in_array($perm, array(SONET_RELATIONS_TYPE_FRIENDS, SONET_RELATIONS_TYPE_FRIENDS2))) { $arCodes = array("SA", "U" . $entity_id, "S" . $entity_type . $entity_id . "_" . SONET_RELATIONS_TYPE_FRIENDS); if ($perm == SONET_RELATIONS_TYPE_FRIENDS2) { $arCodes[] = "S" . $entity_type . $entity_id . "_" . SONET_RELATIONS_TYPE_FRIENDS2; } CSocNetLogRights::Add($logID, $arCodes); } elseif ($entity_type == SONET_ENTITY_USER && $perm == SONET_RELATIONS_TYPE_NONE) { CSocNetLogRights::Add($logID, array("SA", "U" . $entity_id)); } elseif ($entity_type == SONET_ENTITY_GROUP && $perm == SONET_ROLES_AUTHORIZED) { CSocNetLogRights::Add($logID, array("SA", "S" . $entity_type . $entity_id, "AU")); } elseif ($entity_type == SONET_ENTITY_USER && $perm == SONET_RELATIONS_TYPE_AUTHORIZED) { CSocNetLogRights::Add($logID, array("SA", "AU")); } elseif ($entity_type == SONET_ENTITY_GROUP && $perm == SONET_ROLES_ALL) { CSocNetLogRights::Add($logID, array("SA", "S" . $entity_type . $entity_id, "G2")); } elseif ($entity_type == SONET_ENTITY_USER && $perm == SONET_RELATIONS_TYPE_ALL) { CSocNetLogRights::Add($logID, array("SA", "G2")); } } } } }
function Update($ID, $arFields) { global $DB; if (!CSocNetGroup::__ValidateID($ID)) { return false; } $ID = IntVal($ID); $arUser2GroupOld = CSocNetUserToGroup::GetByID($ID); if (!$arUser2GroupOld) { $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_NO_USER2GROUP"), "ERROR_NO_USER2GROUP"); return false; } $arFields1 = array(); foreach ($arFields as $key => $value) { if (substr($key, 0, 1) == "=") { $arFields1[substr($key, 1)] = $value; unset($arFields[$key]); } } if (!CSocNetUserToGroup::CheckFields("UPDATE", $arFields, $ID)) { return false; } $db_events = GetModuleEvents("socialnetwork", "OnBeforeSocNetUserToGroupUpdate"); while ($arEvent = $db_events->Fetch()) { if (ExecuteModuleEventEx($arEvent, array($ID, $arFields)) === false) { return false; } } $strUpdate = $DB->PrepareUpdate("b_sonet_user2group", $arFields); foreach ($arFields1 as $key => $value) { if (strlen($strUpdate) > 0) { $strUpdate .= ", "; } $strUpdate .= $key . "=" . $value . " "; } if (strlen($strUpdate) > 0) { $strSql = "UPDATE b_sonet_user2group SET " . "\t" . $strUpdate . " " . "WHERE ID = " . $ID . " "; $DB->Query($strSql, False, "File: " . __FILE__ . "<br>Line: " . __LINE__); CSocNetGroup::SetStat($arUser2GroupOld["GROUP_ID"]); CSocNetSearch::OnUserRelationsChange($arUser2GroupOld["USER_ID"]); if (array_key_exists("GROUP_ID", $arFields) && $arUser2GroupOld["GROUP_ID"] != $arFields["GROUP_ID"]) { CSocNetGroup::SetStat($arFields["GROUP_ID"]); } $events = GetModuleEvents("socialnetwork", "OnSocNetUserToGroupUpdate"); while ($arEvent = $events->Fetch()) { ExecuteModuleEventEx($arEvent, array($ID, $arFields)); } global $arSocNetUserInRoleCache; if (!isset($arSocNetUserInRoleCache) || !is_array($arSocNetUserInRoleCache)) { $arSocNetUserInRoleCache = array(); } if (array_key_exists($arUser2GroupOld["USER_ID"] . "_" . $arUser2GroupOld["GROUP_ID"], $arSocNetUserInRoleCache)) { unset($arSocNetUserInRoleCache[$arUser2GroupOld["USER_ID"] . "_" . $arUser2GroupOld["GROUP_ID"]]); } if (defined("BX_COMP_MANAGED_CACHE")) { $GLOBALS["CACHE_MANAGER"]->ClearByTag("sonet_user2group_G" . $arUser2GroupOld["GROUP_ID"]); $GLOBALS["CACHE_MANAGER"]->ClearByTag("sonet_user2group_U" . $arUser2GroupOld["USER_ID"]); $GLOBALS["CACHE_MANAGER"]->ClearByTag("sonet_user2group"); } } else { $ID = False; } return $ID; }
$arResult["ErrorMessage"] = $errorMessage; } } elseif (CModule::IncludeModule('extranet') && CExtranet::IsExtranetSite() && intval($_REQUEST["invite_user_id"]) > 0) { $rsInvitedUser = CUser::GetByID(intval($_REQUEST["invite_user_id"])); if (($arInvitedUser = $rsInvitedUser->Fetch()) && (!is_array($arInvitedUser["UF_DEPARTMENT"]) || intval($arInvitedUser["UF_DEPARTMENT"][0]) <= 0)) { if (strlen($arInvitedUser["LAST_LOGIN"]) <= 0 && strlen($arInvitedUser["LAST_ACTIVITY_DATE"]) <= 0) { $event = new CEvent(); $arFields = array("USER_ID" => $arInvitedUser["ID"], "CHECKWORD" => $arInvitedUser["CONFIRM_CODE"], "EMAIL" => $arInvitedUser["EMAIL"]); $event->Send("EXTRANET_INVITATION", SITE_ID, $arFields); LocalRedirect($APPLICATION->GetCurPageParam("invite_sent=Y", array("invite_user_id", "employee"))); } } } $parser = new CSocNetTextParser(LANGUAGE_ID, $arParams["PATH_TO_SMILE"]); $arResult["Requests"] = false; $dbRequests = CSocNetUserToGroup::GetList(array("DATE_CREATE" => "ASC"), array("GROUP_ID" => $arResult["Group"]["ID"], "ROLE" => SONET_ROLES_REQUEST, "INITIATED_BY_TYPE" => SONET_INITIATED_BY_GROUP), false, $arNavParams, array("ID", "USER_ID", "DATE_CREATE", "DATE_UPDATE", "MESSAGE", "USER_NAME", "USER_LAST_NAME", "USER_SECOND_NAME", "USER_LOGIN", "USER_PERSONAL_PHOTO", "USER_PERSONAL_GENDER")); if ($dbRequests) { $arResult["Requests"] = array(); $arResult["Requests"]["List"] = false; while ($arRequests = $dbRequests->GetNext()) { if ($arResult["Requests"]["List"] == false) { $arResult["Requests"]["List"] = array(); } $pu = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_USER"], array("user_id" => $arRequests["USER_ID"])); $canViewProfile = CSocNetUserPerms::CanPerformOperation($USER->GetID(), $arRequests["USER_ID"], "viewprofile", CSocNetUser::IsCurrentUserModuleAdmin()); if (intval($arRequests["USER_PERSONAL_PHOTO"]) <= 0) { switch ($arRequests["USER_PERSONAL_GENDER"]) { case "M": $suffix = "male"; break; case "F":
function MkFilter($arFilter, &$arJoinProps, &$arAddWhereFields, $level = 0, $bPropertyLeftJoin = false) { global $DB, $USER; $arSqlSearch = array(); $permSQL = ""; $arSectionFilter = array("LOGIC" => "", "BE" => array(), "BS" => array()); $strSqlSearch = ""; if (!is_array($arFilter)) { $arFilter = array(); } foreach ($arFilter as $key => $val) { $key = strtoupper($key); $p = strpos($key, "PROPERTY_"); if ($p !== false && $p < 4) { $arFilter[substr($key, 0, $p) . "PROPERTY"][substr($key, $p + 9)] = $val; unset($arFilter[$key]); } } if (array_key_exists("LOGIC", $arFilter) && $arFilter["LOGIC"] == "OR") { $Logic = "OR"; unset($arFilter["LOGIC"]); $bPropertyLeftJoin = true; } else { $Logic = "AND"; } if ($Logic === "AND" && $level === 0) { $f = new \Bitrix\Iblock\PropertyIndex\QueryBuilder($arFilter["IBLOCK_ID"]); if ($f->isValid()) { $arJoinProps["FC"] = $f->getFilterSql($arFilter, $arSqlSearch); $arJoinProps["FC_DISTINCT"] = $f->getDistinct(); } } foreach ($arFilter as $orig_key => $val) { $res = CIBlock::MkOperationFilter($orig_key); $key = $res["FIELD"]; $cOperationType = $res["OPERATION"]; //it was done before $key = strtoupper($key); switch ($key . "") { case "ACTIVE": case "DETAIL_TEXT_TYPE": case "PREVIEW_TEXT_TYPE": $arSqlSearch[] = CIBlock::FilterCreateEx("BE." . $key, $val, "string_equal", $bFullJoinTmp, $cOperationType); break; case "NAME": case "XML_ID": case "TMP_ID": case "DETAIL_TEXT": case "SEARCHABLE_CONTENT": case "PREVIEW_TEXT": case "CODE": case "TAGS": case "WF_COMMENTS": $arSqlSearch[] = CIBlock::FilterCreateEx("BE." . $key, $val, "string", $bFullJoinTmp, $cOperationType); break; case "ID": if (is_object($val)) { $arSqlSearch[] = $val->_sql_in("BE." . $key, $cOperationType); } else { $arSqlSearch[] = CIBlock::FilterCreateEx("BE." . $key, $val, "number", $bFullJoinTmp, $cOperationType); } break; case "SHOW_COUNTER": case "WF_PARENT_ELEMENT_ID": case "WF_STATUS_ID": case "SORT": case "CREATED_BY": case "PREVIEW_PICTURE": case "DETAIL_PICTURE": $arSqlSearch[] = CIBlock::FilterCreateEx("BE." . $key, $val, "number", $bFullJoinTmp, $cOperationType); break; case "IBLOCK_ID": $arSqlSearch[] = CIBlock::FilterCreateEx("BE." . $key, $val, "number", $bFullJoinTmp, $cOperationType); break; case "TIMESTAMP_X": case "DATE_CREATE": case "SHOW_COUNTER_START": $arSqlSearch[] = CIBlock::FilterCreateEx("BE." . $key, $val, "date", $bFullJoinTmp, $cOperationType); break; case "EXTERNAL_ID": $arSqlSearch[] = CIBlock::FilterCreateEx("BE.XML_ID", $val, "string", $bFullJoinTmp, $cOperationType); break; case "IBLOCK_TYPE": $flt = CIBlock::FilterCreateEx("B.IBLOCK_TYPE_ID", $val, "string", $bFullJoinTmp, $cOperationType); $arSqlSearch[] = $flt; break; case "CHECK_PERMISSIONS": if ($val == "Y" && (!is_object($USER) || !$USER->IsAdmin())) { $permSQL = CIBlockElement::_check_rights_sql($arFilter["MIN_PERMISSION"]); } break; case "CHECK_BP_PERMISSIONS": if (IsModuleInstalled('bizproc') && (!is_object($USER) || !$USER->IsAdmin())) { if (is_array($val)) { $MODULE_ID = $DB->ForSQL($val["MODULE_ID"]); $ENTITY = $DB->ForSQL($val["ENTITY"]); $PERMISSION = $DB->ForSQL($val["PERMISSION"]); $arUserGroups = array(); if (is_array($val["GROUPS"])) { $USER_ID = intval($val["USER_ID"]); foreach ($val["GROUPS"] as $GROUP_ID) { $GROUP_ID = intval($GROUP_ID); if ($GROUP_ID) { $arUserGroups[$GROUP_ID] = $GROUP_ID; } } } else { $USER_ID = 0; } } else { $MODULE_ID = "iblock"; $ENTITY = "CIBlockDocument"; $PERMISSION = $val; $arUserGroups = false; $USER_ID = 0; } if ($PERMISSION == "read" || $PERMISSION == "write") { if (!is_array($arUserGroups) && is_object($USER)) { $USER_ID = intval($USER->GetID()); $arUserGroups = $USER->GetUserGroupArray(); } if (!is_array($arUserGroups) || count($arUserGroups) <= 0) { $arUserGroups = array(2); } $arSqlSearch[] = "EXISTS (\n\t\t\t\t\t\t\tSELECT S.DOCUMENT_ID_INT\n\t\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\tb_bp_workflow_state S\n\t\t\t\t\t\t\tINNER JOIN b_bp_workflow_permissions P ON S.ID = P.WORKFLOW_ID\n\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\tS.DOCUMENT_ID_INT = BE.ID\n\t\t\t\t\t\t\t\tAND S.MODULE_ID = '{$MODULE_ID}'\n\t\t\t\t\t\t\t\tAND S.ENTITY = '{$ENTITY}'\n\t\t\t\t\t\t\t\tAND P.PERMISSION = '{$PERMISSION}'\n\t\t\t\t\t\t\t\tAND (\n\t\t\t\t\t\t\t\t\tP.OBJECT_ID IN ('" . implode("', '", $arUserGroups) . "')\n\t\t\t\t\t\t\t\t\tOR (P.OBJECT_ID = 'Author' AND BE.CREATED_BY = {$USER_ID})\n\t\t\t\t\t\t\t\t\tOR (P.OBJECT_ID = " . $DB->Concat("'USER_'", "'{$USER_ID}'") . ")\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)"; } } break; case "CHECK_BP_TASKS_PERMISSIONS": if (IsModuleInstalled('bizproc') && CModule::IncludeModule("socialnetwork") && (!is_object($USER) || !$USER->IsAdmin())) { $val = explode("_", $val); $taskType = $val[0]; if (!in_array($taskType, array("user", "group"))) { $taskType = "user"; } $ownerId = intval($val[1]); $val = $val[2]; if (!in_array($val, array("read", "write", "comment"))) { $val = "write"; } $userId = is_object($USER) ? intval($USER->GetID()) : 0; $arUserGroups = array(); if ($taskType == "group") { $r = CSocNetFeaturesPerms::CanPerformOperation($userId, SONET_ENTITY_GROUP, $ownerId, "tasks", $val == "write" ? "edit_tasks" : "view_all"); if ($r) { break; } $arUserGroups[] = SONET_ROLES_ALL; $r = CSocNetUserToGroup::GetUserRole($userId, $ownerId); if (strlen($r) > 0) { $arUserGroups[] = $r; } } else { // $arUserGroups[] = SONET_RELATIONS_TYPE_ALL; // if (CSocNetUserRelations::IsFriends($userId, $ownerId)) // $arUserGroups[] = SONET_RELATIONS_TYPE_FRIENDS; // elseif (CSocNetUserRelations::IsFriends2($userId, $ownerId)) // $arUserGroups[] = SONET_RELATIONS_TYPE_FRIENDS2; } $arSqlSearch[] = "EXISTS (\n\t\t\t\t\t\tSELECT S.DOCUMENT_ID_INT\n\t\t\t\t\t\tFROM\n\t\t\t\t\t\tb_bp_workflow_state S\n\t\t\t\t\t\tINNER JOIN b_bp_workflow_permissions P ON S.ID = P.WORKFLOW_ID\n\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\tS.DOCUMENT_ID_INT = BE.ID\n\t\t\t\t\t\t\tAND S.MODULE_ID = 'intranet'\n\t\t\t\t\t\t\tAND S.ENTITY = 'CIntranetTasksDocument'\n\t\t\t\t\t\t\tAND P.PERMISSION = '" . $val . "'\n\t\t\t\t\t\t\tAND (\n\t\t\t\t\t\t\t\t" . ($taskType == "group" ? "P.OBJECT_ID IN ('" . implode("', '", $arUserGroups) . "') OR" : "") . "\n\t\t\t\t\t\t\t\t(P.OBJECT_ID = 'author' AND BE.CREATED_BY = " . $userId . ")\n\t\t\t\t\t\t\t\tOR (P.OBJECT_ID = 'responsible' AND " . $userId . " IN (\n\t\t\t\t\t\t\t\t\tSELECT SFPV0.VALUE_NUM\n\t\t\t\t\t\t\t\t\tFROM b_iblock_element_property SFPV0\n\t\t\t\t\t\t\t\t\t\tINNER JOIN b_iblock_property SFP0 ON (SFPV0.IBLOCK_PROPERTY_ID = SFP0.ID)\n\t\t\t\t\t\t\t\t\tWHERE " . CIBlock::_Upper("SFP0.CODE") . "='TASKASSIGNEDTO'\n\t\t\t\t\t\t\t\t\t\tAND SFP0.IBLOCK_ID = BE.IBLOCK_ID\n\t\t\t\t\t\t\t\t\t\tAND SFPV0.IBLOCK_ELEMENT_ID = BE.ID\n\t\t\t\t\t\t\t\t))\n\t\t\t\t\t\t\t\tOR (P.OBJECT_ID = 'trackers' AND " . $userId . " IN (\n\t\t\t\t\t\t\t\t\tSELECT SFPV0.VALUE_NUM\n\t\t\t\t\t\t\t\t\tFROM b_iblock_element_property SFPV0\n\t\t\t\t\t\t\t\t\t\tINNER JOIN b_iblock_property SFP0 ON (SFPV0.IBLOCK_PROPERTY_ID = SFP0.ID)\n\t\t\t\t\t\t\t\t\tWHERE " . CIBlock::_Upper("SFP0.CODE") . "='TASKTRACKERS'\n\t\t\t\t\t\t\t\t\t\tAND SFP0.IBLOCK_ID = BE.IBLOCK_ID\n\t\t\t\t\t\t\t\t\t\tAND SFPV0.IBLOCK_ELEMENT_ID = BE.ID\n\t\t\t\t\t\t\t\t))\n\t\t\t\t\t\t\t\tOR (P.OBJECT_ID = '" . ("USER_" . $userId) . "')\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)"; } break; case "CHECK_BP_VIRTUAL_PERMISSIONS": if (IsModuleInstalled('bizproc') && (!is_object($USER) || !$USER->IsAdmin())) { if (!in_array($val, array("read", "create", "admin"))) { $val = "admin"; } $userId = is_object($USER) ? intval($USER->GetID()) : 0; if (is_object($USER)) { $arUserGroups = $USER->GetUserGroupArray(); } if (!is_array($arUserGroups) || count($arUserGroups) <= 0) { $arUserGroups = array(2); } $arSqlSearch[] = "EXISTS (\n\t\t\t\t\t\tSELECT S.DOCUMENT_ID_INT\n\t\t\t\t\t\tFROM b_bp_workflow_state S\n\t\t\t\t\t\t\tINNER JOIN b_bp_workflow_permissions P ON S.ID = P.WORKFLOW_ID\n\t\t\t\t\t\tWHERE S.DOCUMENT_ID_INT = BE.ID\n\t\t\t\t\t\t\tAND S.MODULE_ID = 'bizproc'\n\t\t\t\t\t\t\tAND S.ENTITY = 'CBPVirtualDocument'\n\t\t\t\t\t\t\tAND\n\t\t\t\t\t\t\t\t(P.PERMISSION = '" . $val . "'\n\t\t\t\t\t\t\t\tAND (\n\t\t\t\t\t\t\t\t\tP.OBJECT_ID IN ('" . implode("', '", $arUserGroups) . "')\n\t\t\t\t\t\t\t\t\tOR (P.OBJECT_ID = 'Author' AND BE.CREATED_BY = " . $userId . ")\n\t\t\t\t\t\t\t\t\tOR (P.OBJECT_ID = " . $DB->Concat("'USER_'", "'" . $userId . "'") . ")\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)"; } break; case "TASKSTATUS": if (IsModuleInstalled('bizproc')) { $arSqlSearch[] = ($cOperationType == "N" ? "NOT " : "") . "EXISTS (\n\t\t\t\t\t\tSELECT S.DOCUMENT_ID_INT\n\t\t\t\t\t\tFROM\n\t\t\t\t\t\tb_bp_workflow_state S\n\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\tS.DOCUMENT_ID_INT = BE.ID\n\t\t\t\t\t\t\tAND S.MODULE_ID = 'intranet'\n\t\t\t\t\t\t\tAND S.ENTITY = 'CIntranetTasksDocument'\n\t\t\t\t\t\t\tAND S.STATE = '" . $DB->ForSql($val) . "'\n\t\t\t\t\t)"; } break; case "LID": case "SITE_ID": case "IBLOCK_LID": case "IBLOCK_SITE_ID": $flt = CIBlock::FilterCreateEx("SITE_ID", $val, "string_equal", $bFullJoinTmp, $cOperationType); if (strlen($flt)) { $arSqlSearch[] = ($cOperationType == "N" ? "NOT " : "") . "EXISTS (\n\t\t\t\t\t\tSELECT IBLOCK_ID FROM b_iblock_site WHERE IBLOCK_ID = B.ID\n\t\t\t\t\t\tAND " . $flt . "\n\t\t\t\t\t)"; } break; case "DATE_ACTIVE_FROM": $arSqlSearch[] = CIBlock::FilterCreateEx("BE.ACTIVE_FROM", $val, "date", $bFullJoinTmp, $cOperationType); break; case "DATE_ACTIVE_TO": $arSqlSearch[] = CIBlock::FilterCreateEx("BE.ACTIVE_TO", $val, "date", $bFullJoinTmp, $cOperationType); break; case "IBLOCK_ACTIVE": $flt = CIBlock::FilterCreateEx("B.ACTIVE", $val, "string_equal", $bFullJoinTmp, $cOperationType); $arSqlSearch[] = $flt; break; case "IBLOCK_CODE": $flt = CIBlock::FilterCreateEx("B.CODE", $val, "string", $bFullJoinTmp, $cOperationType); $arSqlSearch[] = $flt; break; case "ID_ABOVE": $arSqlSearch[] = CIBlock::FilterCreateEx("BE.ID", $val, "number_above", $bFullJoinTmp, $cOperationType); break; case "ID_LESS": $arSqlSearch[] = CIBlock::FilterCreateEx("BE.ID", $val, "number_less", $bFullJoinTmp, $cOperationType); break; case "ACTIVE_FROM": if (strlen($val) > 0) { $arSqlSearch[] = "(BE.ACTIVE_FROM " . ($cOperationType == "N" ? "<" : ">=") . $DB->CharToDateFunction($DB->ForSql($val), "FULL") . ($cOperationType == "N" ? "" : " OR BE.ACTIVE_FROM IS NULL") . ")"; } break; case "ACTIVE_TO": if (strlen($val) > 0) { $arSqlSearch[] = "(BE.ACTIVE_TO " . ($cOperationType == "N" ? ">" : "<=") . $DB->CharToDateFunction($DB->ForSql($val), "FULL") . ($cOperationType == "N" ? "" : " OR BE.ACTIVE_TO IS NULL") . ")"; } break; case "ACTIVE_DATE": if (strlen($val) > 0) { $arSqlSearch[] = ($cOperationType == "N" ? " NOT" : "") . "((BE.ACTIVE_TO >= " . $DB->GetNowFunction() . " OR BE.ACTIVE_TO IS NULL) AND (BE.ACTIVE_FROM <= " . $DB->GetNowFunction() . " OR BE.ACTIVE_FROM IS NULL))"; } break; case "DATE_MODIFY_FROM": if (strlen($val) > 0) { $arSqlSearch[] = "(BE.TIMESTAMP_X " . ($cOperationType == "N" ? "<" : ">=") . $DB->CharToDateFunction($DB->ForSql($val), "FULL") . ($cOperationType == "N" ? "" : " OR BE.TIMESTAMP_X IS NULL") . ")"; } break; case "DATE_MODIFY_TO": if (strlen($val) > 0) { $arSqlSearch[] = "(BE.TIMESTAMP_X " . ($cOperationType == "N" ? ">" : "<=") . $DB->CharToDateFunction($DB->ForSql($val), "FULL") . ($cOperationType == "N" ? "" : " OR BE.TIMESTAMP_X IS NULL") . ")"; } break; case "WF_NEW": if ($val == "Y" || $val == "N") { $arSqlSearch[] = CIBlock::FilterCreateEx("BE.WF_NEW", "Y", "string_equal", $bFullJoinTmp, $val == "Y" ? false : true, false); } break; case "MODIFIED_USER_ID": case "MODIFIED_BY": $arSqlSearch[] = CIBlock::FilterCreateEx("BE.MODIFIED_BY", $val, "number", $bFullJoinTmp, $cOperationType); break; case "CREATED_USER_ID": case "CREATED_BY": $arSqlSearch[] = CIBlock::FilterCreateEx("BE.CREATED_BY", $val, "number", $bFullJoinTmp, $cOperationType); break; case "RATING_USER_ID": $arSqlSearch[] = CIBlock::FilterCreateEx("RVV.USER_ID", $val, "number", $bFullJoinTmp, $cOperationType); $arJoinProps["RVV"] = array("bFullJoin" => $bFullJoinTmp); break; case "WF_STATUS": $arSqlSearch[] = CIBlock::FilterCreateEx("BE.WF_STATUS_ID", $val, "number", $bFullJoinTmp, $cOperationType); break; case "WF_LOCK_STATUS": if (strlen($val) > 0) { $USER_ID = is_object($USER) ? intval($USER->GetID()) : 0; $arSqlSearch[] = " if(BE.WF_DATE_LOCK is null, 'green', if(DATE_ADD(BE.WF_DATE_LOCK, interval " . COption::GetOptionInt("workflow", "MAX_LOCK_TIME", 60) . " MINUTE)<now(), 'green', if(BE.WF_LOCKED_BY=" . $USER_ID . ", 'yellow', 'red'))) = '" . $DB->ForSql($val) . "'"; } break; case "WF_LAST_STATUS_ID": $arSqlSearch[] = "exists (\n\t\t\t\t\tselect\n\t\t\t\t\t\thistory.ID\n\t\t\t\t\tfrom\n\t\t\t\t\t\tb_iblock_element history\n\t\t\t\t\twhere\n\t\t\t\t\t\thistory.WF_PARENT_ELEMENT_ID = BE.ID\n\t\t\t\t\t\tand history.WF_STATUS_ID = " . intval($val) . "\n\t\t\t\t\t\tand history.ID = (\n\t\t\t\t\t\t\tselect max(history0.ID) LAST_ID\n\t\t\t\t\t\t\tfrom b_iblock_element history0\n\t\t\t\t\t\t\twhere history0.WF_PARENT_ELEMENT_ID = BE.ID\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t"; break; case "SECTION_ACTIVE": if ($arFilter["INCLUDE_SUBSECTIONS"] === "Y") { $arSectionFilter["BS"][] = "BSubS.ACTIVE = 'Y'"; } else { $arSectionFilter["BS"][] = "BS.ACTIVE = 'Y'"; } break; case "SECTION_GLOBAL_ACTIVE": if ($arFilter["INCLUDE_SUBSECTIONS"] === "Y") { $arSectionFilter["BS"][] = "BSubS.GLOBAL_ACTIVE = 'Y'"; } else { $arSectionFilter["BS"][] = "BS.GLOBAL_ACTIVE = 'Y'"; } break; case "SUBSECTION": if (!is_array($val)) { $val = array($val); } //Find out margins of sections $arUnknownMargins = array(); foreach ($val as $i => $section) { if (!is_array($section)) { $arUnknownMargins[intval($section)] = intval($section); } } if (count($arUnknownMargins) > 0) { $rs = $DB->Query("SELECT ID, LEFT_MARGIN, RIGHT_MARGIN FROM b_iblock_section WHERE ID in (" . implode(", ", $arUnknownMargins) . ")"); while ($ar = $rs->Fetch()) { $arUnknownMargins[intval($ar["ID"])] = array(intval($ar["LEFT_MARGIN"]), intval($ar["RIGHT_MARGIN"])); } foreach ($val as $i => $section) { if (!is_array($section)) { $val[$i] = $arUnknownMargins[intval($section)]; } } } //Now sort them out $arMargins = array(); foreach ($val as $i => $section) { if (is_array($section) && count($section) == 2) { $left = intval($section[0]); $right = intval($section[1]); if ($left > 0 && $right > 0) { $arMargins[$left] = $right; } } } ksort($arMargins); //Remove subsubsections of the sections $prev_right = 0; foreach ($arMargins as $left => $right) { if ($right <= $prev_right) { unset($arMargins[$left]); } else { $prev_right = $right; } } if (isset($arFilter["INCLUDE_SUBSECTIONS"]) && $arFilter["INCLUDE_SUBSECTIONS"] === "Y") { $bsAlias = "BSubS"; } else { $bsAlias = "BS"; } $res = ""; foreach ($arMargins as $left => $right) { if ($res != "") { $res .= $cOperationType == "N" ? " AND " : " OR "; } $res .= ($cOperationType == "N" ? " NOT " : " ") . "({$bsAlias}.LEFT_MARGIN >= " . $left . " AND {$bsAlias}.RIGHT_MARGIN <= " . $right . ")\n"; } if ($res != "") { $arSectionFilter["BS"][] = "(" . $res . ")"; } break; case "SECTION_ID": if (!is_array($val)) { $val = array($val); } $arSections = array(); foreach ($val as $section_id) { $section_id = intval($section_id); $arSections[$section_id] = $section_id; } if ($cOperationType == "N") { if (array_key_exists(0, $arSections)) { $arSectionFilter["BE"][] = "BE.IN_SECTIONS<>'N'"; $arSectionFilter["LOGIC"] = "AND"; unset($arSections[0]); if (count($arSections) > 0) { $arSectionFilter["BS"][] = "BS.ID NOT IN (" . implode(", ", $arSections) . ")"; } } elseif (count($arSections) > 0) { $arSectionFilter["BE"][] = "BE.IN_SECTIONS='N'"; $arSectionFilter["LOGIC"] = "OR"; $arSectionFilter["BS"][] = "BS.ID NOT IN (" . implode(", ", $arSections) . ")"; } } else { if (array_key_exists(0, $arSections)) { $arSectionFilter["BE"][] = "BE.IN_SECTIONS='N'"; $arSectionFilter["LOGIC"] = "OR"; unset($arSections[0]); } if (count($arSections) > 0) { $arSectionFilter["BS"][] = "BS.ID IN (" . implode(", ", $arSections) . ")"; } } break; case "SECTION_CODE": if (!is_array($val)) { $val = array($val); } $arSections = array(); foreach ($val as $section_code) { $section_code = $DB->ForSql($section_code); $arSections[$section_code] = $section_code; } if ($cOperationType == "N") { if (array_key_exists("", $arSections)) { $arSectionFilter["BE"][] = "BE.IN_SECTIONS<>'N'"; $arSectionFilter["LOGIC"] = "AND"; unset($arSections[""]); if (count($arSections) > 0) { $arSectionFilter["BS"][] = "BS.CODE NOT IN ('" . implode("', '", $arSections) . "')"; } } elseif (count($arSections) > 0) { $arSectionFilter["BE"][] = "BE.IN_SECTIONS='N'"; $arSectionFilter["LOGIC"] = "OR"; $arSectionFilter["BS"][] = "BS.CODE NOT IN ('" . implode("', '", $arSections) . "')"; } } else { if (array_key_exists("", $arSections)) { $arSectionFilter["BE"][] = "BE.IN_SECTIONS='N'"; $arSectionFilter["LOGIC"] = "OR"; unset($arSections[""]); } if (count($arSections) > "") { $arSectionFilter["BS"][] = "BS.CODE IN ('" . implode("', '", $arSections) . "')"; } } break; case "PROPERTY": foreach ($val as $propID => $propVAL) { $res = CIBlock::MkOperationFilter($propID); $res["LOGIC"] = $Logic; $res["LEFT_JOIN"] = $bPropertyLeftJoin; if (preg_match("/^([^.]+)\\.([^.]+)\$/", $res["FIELD"], $arMatch)) { $db_prop = CIBlockProperty::GetPropertyArray($arMatch[1], CIBlock::_MergeIBArrays($arFilter["IBLOCK_ID"], $arFilter["IBLOCK_CODE"], $arFilter["~IBLOCK_ID"], $arFilter["~IBLOCK_CODE"])); if (is_array($db_prop) && $db_prop["PROPERTY_TYPE"] == "E") { $res["FIELD"] = $arMatch; CIBlockElement::MkPropertyFilter($res, $cOperationType, $propVAL, $db_prop, $arJoinProps, $arSqlSearch); } } else { if ($db_prop = CIBlockProperty::GetPropertyArray($res["FIELD"], CIBlock::_MergeIBArrays($arFilter["IBLOCK_ID"], $arFilter["IBLOCK_CODE"], $arFilter["~IBLOCK_ID"], $arFilter["~IBLOCK_CODE"]))) { CIBlockElement::MkPropertyFilter($res, $cOperationType, $propVAL, $db_prop, $arJoinProps, $arSqlSearch); } } } break; default: if (is_numeric($orig_key)) { //Here is hint for better property resolution: if (!is_array($val) || !array_key_exists("~IBLOCK_ID", $val)) { if (array_key_exists("IBLOCK_ID", $arFilter)) { $val["~IBLOCK_ID"] = $arFilter["IBLOCK_ID"]; } elseif (array_key_exists("~IBLOCK_ID", $arFilter)) { $val["~IBLOCK_ID"] = $arFilter["~IBLOCK_ID"]; } } if (!is_array($val) || !array_key_exists("~IBLOCK_CODE", $val)) { if (array_key_exists("IBLOCK_CODE", $arFilter)) { $val["~IBLOCK_CODE"] = $arFilter["IBLOCK_CODE"]; } elseif (array_key_exists("~IBLOCK_CODE", $arFilter)) { $val["~IBLOCK_CODE"] = $arFilter["~IBLOCK_CODE"]; } } //Subfilter process $arSubSqlSearch = CIBlockElement::MkFilter($val, $arJoinProps, $arAddWhereFields, $level + 1, $bPropertyLeftJoin); if (strlen(trim($arSubSqlSearch[0], "\n\t"))) { $arSqlSearch[] = str_replace("\n\t\t\t", "\n\t\t\t\t", $arSubSqlSearch[0]); } } elseif (strtoupper(substr($key, 0, 8)) == "CATALOG_" && CModule::IncludeModule("catalog")) { $res_catalog = CCatalogProduct::GetQueryBuildArrays(array(), array($orig_key => $val), array()); if (strlen($res_catalog["WHERE"])) { $arSqlSearch[] = substr($res_catalog["WHERE"], 5); // " AND ".$res $arAddWhereFields[$orig_key] = $val; } } break; } } //SECTION sub filter $sWhere = ""; foreach ($arSectionFilter["BS"] as $strFilter) { if (strlen($strFilter)) { if (strlen($sWhere)) { $sWhere .= " " . $Logic . " "; } $sWhere .= "(" . $strFilter . ")"; } } $bINCLUDE_SUBSECTIONS = isset($arFilter["INCLUDE_SUBSECTIONS"]) && $arFilter["INCLUDE_SUBSECTIONS"] === "Y"; if (strlen($sWhere)) { $sectionScope = ""; if (isset($arFilter["SECTION_SCOPE"])) { if ($arFilter["SECTION_SCOPE"] == "IBLOCK") { $sectionScope = "AND BSE.ADDITIONAL_PROPERTY_ID IS NULL"; } elseif ($arFilter["SECTION_SCOPE"] == "PROPERTY") { $sectionScope = "AND BSE.ADDITIONAL_PROPERTY_ID IS NOT NULL"; } elseif (preg_match("/^PROPERTY_(\\d+)\$/", $arFilter["SECTION_SCOPE"], $match)) { $sectionScope = "AND BSE.ADDITIONAL_PROPERTY_ID = " . $match[1]; } } //Try to convert correlated subquery to join subquery if ($level == 0 && $Logic == "AND" && !count($arSectionFilter["BE"])) { $arJoinProps["BES"] .= " INNER JOIN (\n\t\t\t\t\tSELECT DISTINCT BSE.IBLOCK_ELEMENT_ID\n\t\t\t\t\tFROM b_iblock_section_element BSE\n\t\t\t\t\t" . ($bINCLUDE_SUBSECTIONS ? "\n\t\t\t\t\tINNER JOIN b_iblock_section BSubS ON BSE.IBLOCK_SECTION_ID = BSubS.ID\n\t\t\t\t\tINNER JOIN b_iblock_section BS ON (BSubS.IBLOCK_ID=BS.IBLOCK_ID\n\t\t\t\t\t\tAND BSubS.LEFT_MARGIN>=BS.LEFT_MARGIN\n\t\t\t\t\t\tAND BSubS.RIGHT_MARGIN<=BS.RIGHT_MARGIN)\n\t\t\t\t\t" : "\n\t\t\t\t\tINNER JOIN b_iblock_section BS ON BSE.IBLOCK_SECTION_ID = BS.ID\n\t\t\t\t\t") . "\n\t\t\t\t\tWHERE (" . $sWhere . "){$sectionScope}\n\t\t\t\t\t) BES ON BES.IBLOCK_ELEMENT_ID = BE.ID\n"; } else { $arSqlSearch[] = "(" . (count($arSectionFilter["BE"]) ? implode(" " . $arSectionFilter["LOGIC"] . " ", $arSectionFilter["BE"]) . " " . $arSectionFilter["LOGIC"] : "") . " EXISTS (\n\t\t\t\t\tSELECT BSE.IBLOCK_ELEMENT_ID\n\t\t\t\t\tFROM b_iblock_section_element BSE\n\t\t\t\t\t" . ($bINCLUDE_SUBSECTIONS ? "\n\t\t\t\t\tINNER JOIN b_iblock_section BSubS ON BSE.IBLOCK_SECTION_ID = BSubS.ID\n\t\t\t\t\tINNER JOIN b_iblock_section BS ON (BSubS.IBLOCK_ID=BS.IBLOCK_ID\n\t\t\t\t\t\tAND BSubS.LEFT_MARGIN>=BS.LEFT_MARGIN\n\t\t\t\t\t\tAND BSubS.RIGHT_MARGIN<=BS.RIGHT_MARGIN)\n\t\t\t\t\t" : "\n\t\t\t\t\tINNER JOIN b_iblock_section BS ON BSE.IBLOCK_SECTION_ID = BS.ID\n\t\t\t\t\t") . "\n\t\t\t\t\tWHERE BSE.IBLOCK_ELEMENT_ID = BE.ID\n\t\t\t\t\tAND (" . $sWhere . "){$sectionScope}\n\t\t\t\t\t))"; } } elseif (count($arSectionFilter["BE"])) { foreach ($arSectionFilter["BE"] as $strFilter) { $arSqlSearch[] = $strFilter; } } $sWhere = ""; foreach ($arSqlSearch as $strFilter) { if (strlen(trim($strFilter, "\n\t"))) { if (strlen($sWhere)) { $sWhere .= "\n\t\t\t\t" . $Logic . " "; } else { $sWhere .= "\n\t\t\t\t"; } $sWhere .= "(" . $strFilter . ")"; } } $arSqlSearch = array("\n\t\t\t" . $sWhere . "\n\t\t\t"); $SHOW_BP_NEW = ""; $SHOW_NEW = isset($arFilter["SHOW_NEW"]) && $arFilter["SHOW_NEW"] == "Y" ? "Y" : "N"; if ($SHOW_NEW == "Y" && isset($arFilter["SHOW_BP_NEW"]) && is_array($arFilter["SHOW_BP_NEW"]) && IsModuleInstalled('bizproc') && (!is_object($USER) || !$USER->IsAdmin())) { $MODULE_ID = $DB->ForSQL($arFilter["SHOW_BP_NEW"]["MODULE_ID"]); $ENTITY = $DB->ForSQL($arFilter["SHOW_BP_NEW"]["ENTITY"]); $PERMISSION = $DB->ForSQL($arFilter["SHOW_BP_NEW"]["PERMISSION"]); $arUserGroups = array(); if (is_array($arFilter["SHOW_BP_NEW"]["GROUPS"])) { $USER_ID = intval($arFilter["SHOW_BP_NEW"]["USER_ID"]); foreach ($arFilter["SHOW_BP_NEW"]["GROUPS"] as $GROUP_ID) { $GROUP_ID = intval($GROUP_ID); if ($GROUP_ID) { $arUserGroups[$GROUP_ID] = $GROUP_ID; } } } else { $USER_ID = false; $arUserGroups = false; } if ($PERMISSION == "read" || $PERMISSION == "write") { if (!is_array($arUserGroups)) { $USER_ID = is_object($USER) ? intval($USER->GetID()) : 0; if (is_object($USER)) { $arUserGroups = $USER->GetUserGroupArray(); } } if (!is_array($arUserGroups) || count($arUserGroups) <= 0) { $arUserGroups = array(2); } $SHOW_BP_NEW = " AND EXISTS (\n\t\t\t\t\tSELECT S.DOCUMENT_ID_INT\n\t\t\t\t\tFROM\n\t\t\t\t\tb_bp_workflow_state S\n\t\t\t\t\tINNER JOIN b_bp_workflow_permissions P ON S.ID = P.WORKFLOW_ID\n\t\t\t\t\tWHERE\n\t\t\t\t\t\tS.DOCUMENT_ID_INT = BE.ID\n\t\t\t\t\t\tAND S.MODULE_ID = '{$MODULE_ID}'\n\t\t\t\t\t\tAND S.ENTITY = '{$ENTITY}'\n\t\t\t\t\t\tAND P.PERMISSION = '{$PERMISSION}'\n\t\t\t\t\t\tAND (\n\t\t\t\t\t\t\tP.OBJECT_ID IN ('" . implode("', '", $arUserGroups) . "')\n\t\t\t\t\t\t\tOR (P.OBJECT_ID = 'Author' AND BE.CREATED_BY = {$USER_ID})\n\t\t\t\t\t\t\tOR (P.OBJECT_ID = " . $DB->Concat("'USER_'", "'{$USER_ID}'") . ")\n\t\t\t\t\t\t)\n\t\t\t\t)"; } } if (!isset($arFilter["SHOW_HISTORY"]) || $arFilter["SHOW_HISTORY"] != "Y") { $arSqlSearch[] = "((BE.WF_STATUS_ID=1 AND BE.WF_PARENT_ELEMENT_ID IS NULL)" . ($SHOW_NEW == "Y" ? " OR (BE.WF_NEW='Y'" . $SHOW_BP_NEW . ")" : "") . ")"; } if ($permSQL) { $arSqlSearch[] = $permSQL; } if (isset($this) && is_object($this) && isset($this->subQueryProp)) { //Subquery list value should not be null $this->MkPropertyFilter(CIBlock::MkOperationFilter("!" . substr($this->strField, 9)), "NE", false, $this->subQueryProp, $arJoinProps, $arSqlSearch); } return $arSqlSearch; }
if ($idTmp) { if (CModule::IncludeModule("disk")) { \Bitrix\Disk\Driver::getInstance()->addGroupStorage($idTmp); } $arGroupsId[$ind] = IntVal($idTmp); } else { if ($e = $GLOBALS["APPLICATION"]->GetException()) { $errorMessage .= $e->GetString(); } } } } } if (StrLen($errorMessage) <= 0) { foreach ($arGroupsId as $ind => $val) { CSocNetUserToGroup::Add(array("USER_ID" => 1, "GROUP_ID" => $val, "ROLE" => "A", "=DATE_CREATE" => $GLOBALS["DB"]->CurrentTimeFunction(), "=DATE_UPDATE" => $GLOBALS["DB"]->CurrentTimeFunction(), "INITIATED_BY_TYPE" => SONET_INITIATED_BY_USER, "INITIATED_BY_USER_ID" => 1, "MESSAGE" => false)); } } if (StrLen($errorMessage) <= 0) { // set EUV vor news $dbResult = CSocNetEventUserView::GetList(array("ENTITY_ID" => "ASC"), array("ENTITY_TYPE" => "N")); $arResult = $dbResult->Fetch(); if (!$arResult) { CSocNetEventUserView::Add(array("ENTITY_TYPE" => "N", "ENTITY_ID" => 0, "EVENT_ID" => "news", "USER_ID" => 0, "USER_ANONYMOUS" => "N")); CSocNetEventUserView::Add(array("ENTITY_TYPE" => "N", "ENTITY_ID" => 0, "EVENT_ID" => "news_comment", "USER_ID" => 0, "USER_ANONYMOUS" => "N")); } $blogGroupID = 0; if (CModule::IncludeModule("blog")) { $dbRes = CBlogGroup::GetList(array("ID" => "DESC"), array("SITE_ID" => WIZARD_SITE_ID)); if ($arRes = $dbRes->Fetch()) { $blogGroupID = $arRes["ID"];
<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die; } $arResult["ITEMS_TOTAL"] = 0; $arResult["ITEMS_MESSAGES"] = 0; $arResult["ITEMS_REQUESTS_USER"] = 0; $arResult["ITEMS_REQUESTS_GROUP"] = 0; /* friends requests */ $arFilter = array("SECOND_USER_ID" => $GLOBALS["USER"]->GetID(), "RELATION" => SONET_RELATIONS_REQUEST); $dbUserRequests = CSocNetUserRelations::GetList(array(), $arFilter, array("SECOND_USER_ID"), false, array("COUNT" => "ID")); if ($arUserRequests = $dbUserRequests->Fetch()) { $arResult["ITEMS_TOTAL"] += intval($arUserRequests["CNT"]); $arResult["ITEMS_REQUESTS_USER"] += intval($arUserRequests["CNT"]); } /* group requests */ $arFilter = array("USER_ID" => $GLOBALS["USER"]->GetID(), "ROLE" => SONET_ROLES_REQUEST, "INITIATED_BY_TYPE" => SONET_INITIATED_BY_GROUP); $dbUserRequests = CSocNetUserToGroup::GetList(array(), $arFilter, array("USER_ID"), false, array("COUNT" => "ID")); if ($arUserRequests = $dbUserRequests->Fetch()) { $arResult["ITEMS_TOTAL"] += intval($arUserRequests["CNT"]); $arResult["ITEMS_REQUESTS_GROUP"] += intval($arUserRequests["CNT"]); } /* messages */ $arFilter = array("TO_USER_ID" => $GLOBALS["USER"]->GetID(), "DATE_VIEW" => "", "TO_DELETED" => "N", "IS_LOG_ALL" => "Y"); $dbUserRequests = CSocNetMessages::GetList(array(), $arFilter, array("TO_USER_ID"), false, array("COUNT" => "ID")); if ($arUserRequests = $dbUserRequests->Fetch()) { $arResult["ITEMS_TOTAL"] += intval($arUserRequests["CNT"]); $arResult["ITEMS_MESSAGES"] += intval($arUserRequests["CNT"]); }
function GetUsersBlogs($params, $arPath) { global $USER; $blog = CBlogMetaWeblog::DecodeParams($params[0]["#"]["value"][0]["#"]); $user = CBlogMetaWeblog::DecodeParams($params[1]["#"]["value"][0]["#"]); $password = CBlogMetaWeblog::DecodeParams($params[2]["#"]["value"][0]["#"]); if (CBlogMetaWeblog::Authorize($user, $password)) { $result = ''; $userId = $USER->GetID(); $dbBlog = CBlog::GetList(array(), array("OWNER_ID" => $userId, "GROUP_SITE_ID" => SITE_ID, "ACTIVE" => "Y"), false, false, array("ID", "URL", "NAME", "OWNER_ID")); while ($arBlog = $dbBlog->GetNext()) { if (strlen($arPath["PATH_TO_BLOG"]) > 0) { if (defined("SITE_SERVER_NAME") && strlen(SITE_SERVER_NAME) > 0) { $serverName = SITE_SERVER_NAME; } else { $serverName = COption::GetOptionString("main", "server_name", ""); } if (strlen($serverName) <= 0) { $serverName = $_SERVER["SERVER_NAME"]; } $path2Blog = "http://" . $serverName . CComponentEngine::MakePathFromTemplate($arPath["PATH_TO_BLOG"], array("blog" => $arBlog["URL"], "user_id" => $arBlog["OWNER_ID"])); } else { $path2Blog = $arBlog["URL"]; } $result .= ' <value> <struct> <member> <name>url</name> <value>' . $path2Blog . '</value> </member> <member> <name>blogid</name> <value>' . $arBlog["ID"] . '</value> </member> <member> <name>blogName</name> <value>' . $arBlog["NAME"] . '</value> </member> </struct> </value> '; } if (CModule::IncludeModule("socialnetwork")) { $arGroupFilter = array("USER_ID" => $userId, "<=ROLE" => SONET_ROLES_USER, "GROUP_SITE_ID" => SITE_ID, "GROUP_ACTIVE" => "Y"); $dbGroups = CSocNetUserToGroup::GetList(array("GROUP_NAME" => "ASC"), $arGroupFilter, false, false, array("ID", "GROUP_ID", "GROUP_OWNER_ID", "GROUP_NAME", "GROUP_SITE_ID")); while ($arGroups = $dbGroups->GetNext()) { $perms = BLOG_PERMS_DENY; if (CSocNetFeaturesPerms::CanPerformOperation($userId, SONET_ENTITY_GROUP, $arGroups["GROUP_ID"], "blog", "write_post", CSocNetUser::IsCurrentUserModuleAdmin($arGroups["GROUP_SITE_ID"]))) { $perms = BLOG_PERMS_WRITE; } elseif (CSocNetFeaturesPerms::CanPerformOperation($userId, SONET_ENTITY_GROUP, $arGroups["GROUP_ID"], "blog", "full_post")) { $perms = BLOG_PERMS_FULL; } if ($perms >= BLOG_PERMS_WRITE) { $dbBlog = CBlog::GetList(array(), array("SOCNET_GROUP_ID" => $arGroups["GROUP_ID"], "GROUP_SITE_ID" => SITE_ID, "ACTIVE" => "Y"), false, false, array("ID", "URL", "NAME")); if ($arBlog = $dbBlog->GetNext()) { $result .= ' <value> <struct> <member> <name>url</name> <value>' . $arBlog["URL"] . '</value> </member> <member> <name>blogid</name> <value>' . $arBlog["ID"] . '</value> </member> <member> <name>blogName</name> <value>' . $arBlog["NAME"] . '</value> </member> </struct> </value> '; } } } } if (strlen($result) > 0) { return '<params> <param> <value> <array> <data>' . $result . '</data> </array> </value> </param> </params>'; } else { return '<fault> <value> <struct> <member> <name>faultCode</name> <value><int>4</int></value> </member> <member> <name>faultString</name> <value><string>User hasn\'t blog.</string></value> </member> </struct> </value> </fault>'; } } else { return '<fault> <value> <struct> <member> <name>faultCode</name> <value><int>3</int></value> </member> <member> <name>faultString</name> <value><string>' . $arAuthResult["MESSAGE"] . '</string></value> </member> </struct> </value> </fault>'; } }
static function GetUserGroups($userID = 0, $bGetFolders = true) { static $oCache = null; static $CACHE_PATH = "/webdav/sonet_user_groups/"; if (!CBXFeatures::IsFeatureEnabled("Workgroups")) { return array(); } $userID = intval($userID); if (intval($userID) <= 0) { $userID = $GLOBALS['USER']->GetID(); } //$currentUserGroups = CWebDavBase::CustomDataCache($CACHE_PATH, $userID); //if (!$currentUserGroups) //{ $currentUserGroups = array(); $db_res = CSocNetUserToGroup::GetList(array("GROUP_NAME" => "ASC"), array("USER_ID" => $userID), false, false, array("GROUP_ID", "GROUP_NAME", "GROUP_ACTIVE", "GROUP_CLOSED", "ROLE")); while ($res = $db_res->GetNext()) { if ($res['GROUP_ACTIVE'] == 'Y' && $res['GROUP_CLOSED'] == 'N' && $res['ROLE'] != SONET_ROLES_BAN && $res['ROLE'] != SONET_ROLES_REQUEST) { $currentUserGroups[$res["GROUP_ID"]] = $res; } } $arGroupID = array_keys($currentUserGroups); if (is_array($arGroupID) && sizeof($arGroupID) > 0) { $arFeatures = CSocNetFeatures::IsActiveFeature(SONET_ENTITY_GROUP, $arGroupID, 'files'); foreach ($arFeatures as $groupID => $enabled) { if (!$enabled) { unset($currentUserGroups[$groupID]); } } } if ($bGetFolders) { $groupIBlock = CWebDavIblock::LibOptions('group_files', false, SITE_ID); if ($groupIBlock && isset($groupIBlock['id']) && intval($groupIBlock['id']) > 0) { $arFilter = array("IBLOCK_ID" => intval($groupIBlock['id']), "SECTION_ID" => 0, "CHECK_PERMISSIONS" => "N"); $dbSection = CIBlockSection::GetList(array(), $arFilter, false, array('ID', 'SOCNET_GROUP_ID')); while ($arGroupSection = $dbSection->Fetch()) { if (isset($currentUserGroups[$arGroupSection['SOCNET_GROUP_ID']])) { $currentUserGroups[$arGroupSection['SOCNET_GROUP_ID']]['SECTION_ID'] = $arGroupSection['ID']; } } //CWebDavBase::CustomDataCache($CACHE_PATH, $userID, $currentUserGroups, 'wd_socnet, iblock_id_'.intval($groupIBlock['id'])); // do not save to cache if LibOptions('group_files') is empty } } //} return $currentUserGroups; }