• Модуль: socialservices
  • Путь к файлу: ~/bitrix/modules/socialservices/classes/general/authmanager.php
  • Класс: CSocServAuth
  • Вызов: CSocServAuth::PostIntoBuzzAsBlog
static function PostIntoBuzzAsBlog($userTwit, $arSiteId=array(), $userLogin = '')
{
	global $DB;
	if(!CModule::IncludeModule("blog") || !CModule::IncludeModule("socialnetwork"))
		return;
	$arParams = array();
	if((IsModuleInstalled('bitrix24') && defined('BX24_HOST_NAME')) && $userLogin != '')
	{
		if($arUserTwit = unserialize(base64_decode($userTwit), ["allowed_classes" => false]))
			$userTwit = $arUserTwit;
		if($arSiteIdCheck = unserialize(base64_decode($arSiteId), ["allowed_classes" => false]))
			$arSiteId = $arSiteIdCheck;
		$dbUser = CUser::GetByLogin($userLogin);
		if($arUser = $dbUser->Fetch())
			$arParams["USER_ID"] = $arUser["ID"];
	}
	else
		$arParams["USER_ID"] = $userTwit['kp_user_id'];
	$siteId = null;
	if(isset($arSiteId[$userTwit['kp_user_id']]))
		$siteId = $arSiteId[$userTwit['kp_user_id']];
	if($siteId == '')
		$siteId = SITE_ID;
	if(isset($userTwit['text']))
	{
		$arParams["GROUP_ID"] = COption::GetOptionString("socialnetwork", "userbloggroup_id", false, $siteId);
		$arParams["PATH_TO_BLOG"] = COption::GetOptionString("socialnetwork", "userblogpost_page", false, $siteId);
		$arParams["PATH_TO_SMILE"] = COption::GetOptionString("socialnetwork", "smile_page", false, $siteId);
		$arParams["NAME_TEMPLATE"] = COption::GetOptionString("main", "TOOLTIP_NAME_TEMPLATE", false, $siteId);
		$arParams["SHOW_LOGIN"] = 'Y';
		$arParams["PATH_TO_POST"] = $arParams["PATH_TO_BLOG"];

		$arFilterblg = Array(
			"ACTIVE" => "Y",
			"USE_SOCNET" => "Y",
			"GROUP_ID" => $arParams["GROUP_ID"],
			"GROUP_SITE_ID" => $siteId,
			"OWNER_ID" => $arParams["USER_ID"],
		);
		$groupId = (is_array($arParams["GROUP_ID"]) ? intval($arParams["GROUP_ID"][0]) : intval($arParams["GROUP_ID"]));
		if (isset($GLOBALS["BLOG_POST"]["BLOG_P_".$groupId."_".$arParams["USER_ID"]]) && !empty($GLOBALS["BLOG_POST"]["BLOG_P_".$groupId."_".$arParams["USER_ID"]]))
		{
			$arBlog = $GLOBALS["BLOG_POST"]["BLOG_P_".$groupId."_".$arParams["USER_ID"]];
		}
		else
		{
			$dbBl = CBlog::GetList(Array(), $arFilterblg);
			$arBlog = $dbBl ->Fetch();
			if (!$arBlog && IsModuleInstalled("intranet"))
				$arBlog = CBlog::GetByOwnerID($arParams["USER_ID"]);

			$GLOBALS["BLOG_POST"]["BLOG_P_".$groupId."_".$arParams["USER_ID"]] = $arBlog;
		}

		$arResult["Blog"] = $arBlog;

		if(empty($arBlog))
		{
			if(!empty($arParams["GROUP_ID"]))
			{
				$arFields = array(
					"=DATE_UPDATE" => $DB->CurrentTimeFunction(),
					"GROUP_ID" => (is_array($arParams["GROUP_ID"])) ? intval($arParams["GROUP_ID"][0]) : intval($arParams["GROUP_ID"]),
					"ACTIVE" => "Y",
					"ENABLE_COMMENTS" => "Y",
					"ENABLE_IMG_VERIF" => "Y",
					"EMAIL_NOTIFY" => "Y",
					"ENABLE_RSS" => "Y",
					"ALLOW_HTML" => "N",
					"ENABLE_TRACKBACK" => "N",
					"SEARCH_INDEX" => "Y",
					"USE_SOCNET" => "Y",
					"=DATE_CREATE" => $DB->CurrentTimeFunction(),
					"PERMS_POST" => Array(
						1 => "I",
						2 => "I" ),
					"PERMS_COMMENT" => Array(
						1 => "P",
						2 => "P" ),
				);

				$bRights = false;
				$rsUser = CUser::GetByID($arParams["USER_ID"]);
				$arUser = $rsUser->Fetch();
				if($arUser["NAME"]."".$arUser["LAST_NAME"] == '')
					$arFields["NAME"] = GetMessage("BLG_NAME")." ".$arUser["LOGIN"];
				else
					$arFields["NAME"] = GetMessage("BLG_NAME")." ".$arUser["NAME"]." ".$arUser["LAST_NAME"];

				$arFields["URL"] = str_replace(" ", "_", $arUser["LOGIN"])."-blog-".SITE_ID;
				$arFields["OWNER_ID"] = $arParams["USER_ID"];

				$urlCheck = preg_replace("/[^a-zA-Z0-9_-]/is", "", $arFields["URL"]);
				if ($urlCheck != $arFields["URL"])
				{
					$arFields["URL"] = "u".$arParams["USER_ID"]."-blog-".SITE_ID;
				}
				if(CBlog::GetByUrl($arFields["URL"]))
				{
					$uind = 0;
					do
					{
						$uind++;
						$arFields["URL"] = $arFields["URL"].$uind;
					}
					while (CBlog::GetByUrl($arFields["URL"]));
				}

				$featureOperationPerms = CSocNetFeaturesPerms::GetOperationPerm(SONET_ENTITY_USER, $arFields["OWNER_ID"], "blog", "view_post");
				if ($featureOperationPerms == SONET_RELATIONS_TYPE_ALL)
					$bRights = true;

				$arFields["PATH"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_BLOG"], array("blog" => $arFields["URL"], "user_id" => $arFields["OWNER_ID"], "group_id" => $arFields["SOCNET_GROUP_ID"]));

				$blogID = CBlog::Add($arFields);
				if($bRights)
					CBlog::AddSocnetRead($blogID);
				$arBlog = CBlog::GetByID($blogID, $arParams["GROUP_ID"]);
			}
		}

		//	$DATE_PUBLISH = "";
		//	if(strlen($_POST["DATE_PUBLISH_DEF"]) > 0)
		//		$DATE_PUBLISH = $_POST["DATE_PUBLISH_DEF"];
		//	elseif (strlen($_POST["DATE_PUBLISH"])<=0)

		$DATE_PUBLISH = ConvertTimeStamp(time() + CTimeZone::GetOffset(), "FULL");

		//	else
		//		$DATE_PUBLISH = $_POST["DATE_PUBLISH"];

		$arFields=array(
			"DETAIL_TEXT"       => $userTwit['text'],
			"DETAIL_TEXT_TYPE"	=> "text",
			"DATE_PUBLISH"		=> $DATE_PUBLISH,
			"PUBLISH_STATUS"	=> BLOG_PUBLISH_STATUS_PUBLISH,
			"PATH" 				=> CComponentEngine::MakePathFromTemplate(htmlspecialcharsBack($arParams["PATH_TO_POST"]), array("post_id" => "#post_id#", "user_id" => $arBlog["OWNER_ID"])),
			"URL" 				=> $arBlog["URL"],
			"SOURCE_TYPE"       => "twitter",
		);

		$arFields["PERMS_POST"] = array();
		$arFields["PERMS_COMMENT"] = array();
		$arFields["MICRO"] = "N";
		if($arFields["TITLE"] == '')
		{
			$arFields["MICRO"] = "Y";
			$arFields["TITLE"] = trim(blogTextParser::killAllTags($arFields["DETAIL_TEXT"]));
			if($arFields["TITLE"] == '')
				$arFields["TITLE"] = GetMessage("BLOG_EMPTY_TITLE_PLACEHOLDER");
		}

		$arFields["SOCNET_RIGHTS"] = Array();
		if(!empty($userTwit['user_perms']))
		{
			$bOne = true;
			foreach($userTwit['user_perms'] as $v => $k)
			{
				if($v <> '' && is_array($k) && !empty($k))
				{
					foreach($k as $vv)
					{
						if($vv <> '')
						{
							$arFields["SOCNET_RIGHTS"][] = $vv;
							if($v != "SG")
								$bOne = false;

						}
					}
				}
			}

			if($bOne && !empty($userTwit['user_perms']["SG"]))
			{
				$bOnesg = false;
				$bFirst = true;
				$oGrId = 0;
				foreach($userTwit['user_perms']["SG"] as $v)
				{
					if($v <> '')
					{
						if($bFirst)
						{
							$bOnesg = true;
							$bFirst = false;
							$v = str_replace("SG", "", $v);
							$oGrId = intval($v);
						}
						else
						{
							$bOnesg = false;
						}
					}
				}
				if($bOnesg)
				{
					if (!CSocNetFeaturesPerms::CanPerformOperation($arParams["USER_ID"], SONET_ENTITY_GROUP, $oGrId, "blog", "write_post") && !CSocNetFeaturesPerms::CanPerformOperation($arParams["USER_ID"], SONET_ENTITY_GROUP, $oGrId, "blog", "moderate_post") && !CSocNetFeaturesPerms::CanPerformOperation($arParams["USER_ID"], SONET_ENTITY_GROUP, $oGrId, "blog", "full_post"))
						$arFields["PUBLISH_STATUS"] = BLOG_PUBLISH_STATUS_READY;
				}
			}
		}
		$bError = false;
		/*	if (CModule::IncludeModule('extranet') && !CExtranet::IsIntranetUser())
			{
				if(empty($arFields["SOCNET_RIGHTS"]) || in_array("UA", $arFields["SOCNET_RIGHTS"]))
				{
					$bError = true;
					$arResult["ERROR_MESSAGE"] = GetMessage("BLOG_BPE_EXTRANET_ERROR");
				}
			}*/

		$newID = null;
		$socnetRightsOld = Array("U" => Array());
		if(!$bError)
		{
			preg_match_all("/\[user\s*=\s*([^\]]*)\](.+?)\[\/user\]/ies".BX_UTF_PCRE_MODIFIER, $userTwit['text'], $arMention);

			$arFields["=DATE_CREATE"] = $DB->GetNowFunction();
			$arFields["AUTHOR_ID"] = $arParams["USER_ID"];
			$arFields["BLOG_ID"] = $arBlog["ID"];

			$newID = CBlogPost::Add($arFields);

			if($newID)
			{
				$arFields["ID"] = $newID;
				$arParamsNotify = Array(
					"bSoNet" => true,
					"UserID" => $arParams["USER_ID"],
					"allowVideo" => $arResult["allowVideo"],
					//"bGroupMode" => $arResult["bGroupMode"],
					"PATH_TO_SMILE" => $arParams["PATH_TO_SMILE"],
					"PATH_TO_POST" => $arParams["PATH_TO_POST"],
					"SOCNET_GROUP_ID" => $arParams["GROUP_ID"],
					"user_id" => $arParams["USER_ID"],
					"NAME_TEMPLATE" => $arParams["NAME_TEMPLATE"],
					"SHOW_LOGIN" => $arParams["SHOW_LOGIN"],
				);
				CBlogPost::Notify($arFields, $arBlog, $arParamsNotify);
			}
		}
		if ($newID > 0 && $arResult["ERROR_MESSAGE"] == '' && $arFields["PUBLISH_STATUS"] == BLOG_PUBLISH_STATUS_PUBLISH) // Record saved successfully
		{
			BXClearCache(true, "/".SITE_ID."/blog/last_messages_list/");

			$arFieldsIM = Array(
				"TYPE" => "POST",
				"TITLE" => $arFields["TITLE"],
				"URL" => CComponentEngine::MakePathFromTemplate(htmlspecialcharsBack($arParams["PATH_TO_POST"]), array("post_id" => $newID, "user_id" => $arBlog["OWNER_ID"])),
				"ID" => $newID,
				"FROM_USER_ID" => $arParams["USER_ID"],
				"TO_USER_ID" => array(),
				"TO_SOCNET_RIGHTS" => $arFields["SOCNET_RIGHTS"],
				"TO_SOCNET_RIGHTS_OLD" => $socnetRightsOld["U"],
			);
			if(!empty($arMentionOld))
				$arFieldsIM["MENTION_ID_OLD"] = $arMentionOld[1];
			if(!empty($arMention))
				$arFieldsIM["MENTION_ID"] = $arMention[1];

			CBlogPost::NotifyIm($arFieldsIM);

			$arParams["ID"] = $newID;
			if(!empty($_POST["SPERM"]["SG"]))
			{
				foreach($_POST["SPERM"]["SG"] as $v)
				{
					$group_id_tmp = mb_substr($v, 2);
					if(intval($group_id_tmp) > 0)
						CSocNetGroup::SetLastActivity(intval($group_id_tmp));
				}
			}
		}
	}
}