예제 #1
0
 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;
 }
예제 #2
0
 function getRelatedGroup($relationID)
 {
     $arRel = CSocNetUserToGroup::GetByID($relationID);
     if ($arRel) {
         return $arRel["GROUP_NAME"];
     } else {
         return false;
     }
 }
예제 #3
0
 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;
     }
 }
예제 #4
0
 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];
 }
예제 #5
0
 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"]));
             }
         }
     }
 }
예제 #6
0
 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;
 }
예제 #7
0
 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;
 }
예제 #8
0
파일: rest.php 프로젝트: ASDAFF/bxApiDocs
	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;
	}
예제 #9
0
 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;
예제 #10
0
 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;
 }
예제 #11
0
 $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);
예제 #12
0
	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;
	}
예제 #13
0
            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();
예제 #14
0
 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;
 }
예제 #15
0
 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;
 }
예제 #16
0
 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";
         }
     }
예제 #17
0
 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 != '');
 }
예제 #18
0
 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;
 }
예제 #19
0
 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);
     }
 }
예제 #20
0
            }
            // 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)
            {
예제 #21
0
 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"]);
     }
예제 #22
0
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"));
    }
예제 #23
0
 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"));
                 }
             }
         }
     }
 }
예제 #24
0
 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;
 }
예제 #25
0
         $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":
예제 #26
0
 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;
 }
예제 #27
0
             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"];
예제 #28
0
<?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"]);
}
예제 #29
0
    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>';
        }
    }
예제 #30
0
 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;
 }