%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/bitrix/www/bitrix/modules/socialnetwork/classes/general/
Upload File :
Create Path :
Current File : //home/bitrix/www/bitrix/modules/socialnetwork/classes/general/messages.php

<?
IncludeModuleLangFile(__FILE__);

class CAllSocNetMessages
{
	/***************************************/
	/********  DATA MODIFICATION  **********/
	/***************************************/
	function CheckFields($ACTION, &$arFields, $ID = 0)
	{
		global $DB;

		if ($ACTION != "ADD" && IntVal($ID) <= 0)
		{
			$GLOBALS["APPLICATION"]->ThrowException("System error 870164", "ERROR");
			return false;
		}

		if ((is_set($arFields, "FROM_USER_ID") || $ACTION=="ADD") && IntVal($arFields["FROM_USER_ID"]) <= 0)
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_M_EMPTY_FROM_USER_ID"), "EMPTY_FROM_USER_ID");
			return false;
		}
		elseif (is_set($arFields, "FROM_USER_ID"))
		{
			$dbResult = CUser::GetByID($arFields["FROM_USER_ID"]);
			if (!$dbResult->Fetch())
			{
				$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_M_ERROR_NO_FROM_USER_ID"), "ERROR_NO_FROM_USER_ID");
				return false;
			}
		}

		if ((is_set($arFields, "TO_USER_ID") || $ACTION=="ADD") && IntVal($arFields["TO_USER_ID"]) <= 0)
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_M_EMPTY_TO_USER_ID"), "EMPTY_TO_USER_ID");
			return false;
		}
		elseif (is_set($arFields, "TO_USER_ID"))
		{
			$dbResult = CUser::GetByID($arFields["TO_USER_ID"]);
			if (!$dbResult->Fetch())
			{
				$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_M_ERROR_NO_TO_USER_ID"), "ERROR_NO_TO_USER_ID");
				return false;
			}
		}

		if (is_set($arFields, "DATE_CREATE") && (!$DB->IsDate($arFields["DATE_CREATE"], false, LANG, "FULL")))
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_GB_EMPTY_DATE_CREATE"), "EMPTY_DATE_CREATE");
			return false;
		}

		if (is_set($arFields, "DATE_VIEW") && $arFields["DATE_VIEW"] !== false && (!$DB->IsDate($arFields["DATE_VIEW"], false, LANG, "FULL")))
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_MM_EMPTY_DATE_VIEW"), "EMPTY_DATE_UPDATE");
			return false;
		}

		if ((is_set($arFields, "MESSAGE_TYPE") || $ACTION=="ADD") && $arFields["MESSAGE_TYPE"] != SONET_MESSAGE_PRIVATE && $arFields["MESSAGE_TYPE"] != SONET_MESSAGE_SYSTEM)
			$arFields["MESSAGE_TYPE"] = SONET_MESSAGE_PRIVATE;

		if ((is_set($arFields, "FROM_DELETED") || $ACTION=="ADD") && $arFields["FROM_DELETED"] != "Y" && $arFields["FROM_DELETED"] != "N")
			$arFields["FROM_DELETED"] = "N";

		if ((is_set($arFields, "TO_DELETED") || $ACTION=="ADD") && $arFields["TO_DELETED"] != "Y" && $arFields["TO_DELETED"] != "N")
			$arFields["TO_DELETED"] = "N";

		if ((is_set($arFields, "SEND_MAIL") || $ACTION=="ADD") && $arFields["SEND_MAIL"] != "Y" && $arFields["SEND_MAIL"] != "N")
			$arFields["SEND_MAIL"] = "N";

		if ((is_set($arFields, "IS_LOG") || $ACTION=="ADD") && $arFields["IS_LOG"] != "Y" && $arFields["SEND_MAIL"] != "N")
			$arFields["SEND_MAIL"] = "N";

		return True;
	}

	function Delete($ID)
	{
		global $DB;

		if (!CSocNetGroup::__ValidateID($ID))
			return false;

		$ID = IntVal($ID);
		$bSuccess = True;

		$db_events = GetModuleEvents("socialnetwork", "OnBeforeSocNetMessagesDelete");
		while ($arEvent = $db_events->Fetch())
			if (ExecuteModuleEventEx($arEvent, array($ID))===false)
				return false;

		$events = GetModuleEvents("socialnetwork", "OnSocNetMessagesDelete");
		while ($arEvent = $events->Fetch())
			ExecuteModuleEventEx($arEvent, array($ID));

		if ($bSuccess)
			$bSuccess = $DB->Query("DELETE FROM b_sonet_messages WHERE ID = ".$ID."", true);

		return $bSuccess;
	}

	function DeleteMessage($ID, $userID, $bCheckMessages = true)
	{
		global $DB;

		$ID = IntVal($ID);
		if ($ID <= 0)
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_UR_EMPTY_MESSAGE_ID"), "ERROR_MESSAGE_ID");
			return false;
		}

		$userID = IntVal($userID);
		if ($userID <= 0)
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_UR_EMPTY_SENDER_USER_ID"), "ERROR_SENDER_USER_ID");
			return false;
		}

		$arMessage = CSocNetMessages::GetByID($ID);
		if (!$arMessage || !is_array($arMessage))
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_UR_NO_MESSAGE"), "ERROR_NO_MESSAGE");
			return false;
		}

		if (($arMessage["FROM_USER_ID"] == $userID) && ($arMessage["TO_USER_ID"] == $userID))
		{
			if (!CSocNetMessages::Delete($arMessage["ID"]))
			{
				$errorMessage = "";
				if ($e = $GLOBALS["APPLICATION"]->GetException())
					$errorMessage = $e->GetString();
				if (StrLen($errorMessage) <= 0)
					$errorMessage = GetMessage("SONET_M_ERROR_DELETE_MESSAGE");
					$GLOBALS["APPLICATION"]->ThrowException($errorMessage, "ERROR_DELETE_MESSAGE");
				return false;
			}			
		}
		elseif ($arMessage["FROM_USER_ID"] == $userID)
		{
			if ($arMessage["TO_DELETED"] == "Y")
			{
				if (!CSocNetMessages::Delete($arMessage["ID"]))
				{
					$errorMessage = "";
					if ($e = $GLOBALS["APPLICATION"]->GetException())
						$errorMessage = $e->GetString();
					if (StrLen($errorMessage) <= 0)
						$errorMessage = GetMessage("SONET_M_ERROR_DELETE_MESSAGE");

					$GLOBALS["APPLICATION"]->ThrowException($errorMessage, "ERROR_DELETE_MESSAGE");
					return false;
				}
			}
			else
			{
				if (!CSocNetMessages::Update($arMessage["ID"], array("FROM_DELETED" => "Y")))
				{
					$errorMessage = "";
					if ($e = $GLOBALS["APPLICATION"]->GetException())
						$errorMessage = $e->GetString();
					if (StrLen($errorMessage) <= 0)
						$errorMessage = GetMessage("SONET_UR_ERROR_UPDATE_MESSAGE");

					$GLOBALS["APPLICATION"]->ThrowException($errorMessage, "ERROR_UPDATE_MESSAGE");
					return false;
				}
			}
		}
		elseif ($arMessage["TO_USER_ID"] == $userID)
		{
			if ($arMessage["FROM_DELETED"] == "Y")
			{
				if (!CSocNetMessages::Delete($arMessage["ID"]))
				{
					$errorMessage = "";
					if ($e = $GLOBALS["APPLICATION"]->GetException())
						$errorMessage = $e->GetString();
					if (StrLen($errorMessage) <= 0)
						$errorMessage = GetMessage("SONET_M_ERROR_DELETE_MESSAGE");

					$GLOBALS["APPLICATION"]->ThrowException($errorMessage, "ERROR_DELETE_MESSAGE");
					return false;
				}
			}
			else
			{
				if (!CSocNetMessages::Update($arMessage["ID"], array("TO_DELETED" => "Y")))
				{
					$errorMessage = "";
					if ($e = $GLOBALS["APPLICATION"]->GetException())
						$errorMessage = $e->GetString();
					if (StrLen($errorMessage) <= 0)
						$errorMessage = GetMessage("SONET_UR_ERROR_UPDATE_MESSAGE");

					$GLOBALS["APPLICATION"]->ThrowException($errorMessage, "ERROR_UPDATE_MESSAGE");
					return false;
				}
			}

			if ($bCheckMessages)
				CSocNetMessages::__SpeedFileCheckMessages($userID);
		}
		else
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_UR_NO_MESSAGE"), "ERROR_NO_MESSAGE");
			return false;
		}

		return true;
	}

	public static function DeleteNoDemand($userID)
	{
		global $DB;

		if (!CSocNetGroup::__ValidateID($userID))
			return false;

		$userID = IntVal($userID);
		$bSuccess = True;

		if ($bSuccess)
			$bSuccess = $DB->Query("DELETE FROM b_sonet_messages WHERE FROM_USER_ID = ".$userID." OR TO_USER_ID = ".$userID."", true);

		CSocNetMessages::__SpeedFileDelete($userID);

		return $bSuccess;
	}

	/***************************************/
	/**********  DATA SELECTION  ***********/
	/***************************************/
	function GetByID($ID)
	{
		global $DB;

		if (!CSocNetGroup::__ValidateID($ID))
			return false;

		$ID = IntVal($ID);

		$dbResult = CSocNetMessages::GetList(Array(), Array("ID" => $ID, "IS_LOG_ALL" => "Y"));
		if ($arResult = $dbResult->GetNext())
		{
			return $arResult;
		}

		return False;
	}
	
	/***************************************/
	/**********  SEND EVENTS  **************/
	/***************************************/
	function SendEvent($messageID, $mailTemplate = "SONET_NEW_MESSAGE")
	{
		$messageID = IntVal($messageID);
		if ($messageID <= 0)
			return false;

		$dbMessage = CSocNetMessages::GetList(
			array(),
			array("ID" => $messageID, "IS_LOG_ALL" => "Y"),
			false,
			false,
			array("ID", "FROM_USER_ID", "TO_USER_ID", "TITLE", "MESSAGE", "DATE_CREATE", "FROM_USER_NAME", "FROM_USER_LAST_NAME", "FROM_USER_LOGIN", "TO_USER_NAME", "TO_USER_LAST_NAME", "TO_USER_LOGIN", "TO_USER_EMAIL", "TO_USER_LID")
		);
		$arMessage = $dbMessage->Fetch();
		if (!$arMessage)
			return false;

		$defSiteID = (Defined("SITE_ID") ? SITE_ID : $arMessage["TO_USER_LID"]);

		$siteID = CSocNetUserEvents::GetEventSite($arMessage["TO_USER_ID"], $mailTemplate, $defSiteID);
		if ($siteID == false || StrLen($siteID) <= 0)
			return false;

		$arFields = array(
			"MESSAGE_ID" => $messageID,
			"USER_ID" => $arMessage["TO_USER_ID"],
			"USER_NAME" => $arMessage["TO_USER_NAME"],
			"USER_LAST_NAME" => $arMessage["TO_USER_LAST_NAME"],
			"SENDER_ID" => $arMessage["FROM_USER_ID"],
			"SENDER_NAME" => $arMessage["FROM_USER_NAME"],
			"SENDER_LAST_NAME" => $arMessage["FROM_USER_LAST_NAME"],
			"EMAIL_TO" => $arMessage["TO_USER_EMAIL"],
			"TITLE" => $arMessage["TITLE"],
			"MESSAGE" => $arMessage["MESSAGE"]
		);

		$event = new CEvent;
		$event->Send($mailTemplate, $siteID, $arFields, "N");

		return true;
	}


	/***************************************/
	/************  ACTIONS  ****************/
	/***************************************/
	function MarkMessageRead($senderUserID, $messageID, $bRead = true)
	{
		global $APPLICATION;

		$senderUserID = IntVal($senderUserID);
		if ($senderUserID <= 0)
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_UR_EMPTY_SENDER_USER_ID"), "ERROR_SENDER_USER_ID");
			return false;
		}

		$messageID = IntVal($messageID);
		if ($messageID <= 0)
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_UR_EMPTY_MESSAGE_ID"), "ERROR_MESSAGE_ID");
			return false;
		}

		$arFilter = array(
				"ID" => $messageID,
				"TO_USER_ID" => $senderUserID,
				"IS_LOG_ALL" => "Y"
			);
		if ($bRead)
			$arFilter["DATE_VIEW"] = "";

		$dbResult = CSocNetMessages::GetList(
			array(),
			$arFilter,
			false,
			false,
			array("ID", "DATE_CREATE")
		);

		if ($arResult = $dbResult->Fetch())
		{
			if ($bRead)
				$arFields = array("=DATE_VIEW" => $GLOBALS["DB"]->CurrentTimeFunction());
			else
				$arFields = array("DATE_VIEW" => false);

			if (!CSocNetMessages::Update($arResult["ID"], $arFields))
			{
				$errorMessage = "";
				if ($e = $GLOBALS["APPLICATION"]->GetException())
					$errorMessage = $e->GetString();
				if (StrLen($errorMessage) <= 0)
					$errorMessage = GetMessage("SONET_UR_ERROR_UPDATE_MESSAGE");

				$GLOBALS["APPLICATION"]->ThrowException($errorMessage, "ERROR_UPDATE_MESSAGE");
				return false;
			}
			else
			{
				CSocNetMessages::__SpeedFileCheckMessages($senderUserID);
			}
		}
		else
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_UR_NO_MESSAGE"), "ERROR_NO_MESSAGE");
			return false;
		}

		return true;
	}

	function CreateMessage($senderUserID, $targetUserID, $message, $title = false)
	{
		global $APPLICATION;

		$senderUserID = IntVal($senderUserID);
		if ($senderUserID <= 0)
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_UR_EMPTY_SENDER_USER_ID"), "ERROR_SENDER_USER_ID");
			return false;
		}

		$targetUserID = IntVal($targetUserID);
		if ($targetUserID <= 0)
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_UR_EMPTY_TARGET_USER_ID"), "ERROR_TARGET_USER_ID");
			return false;
		}

		$message = Trim($message);
		if (StrLen($message) <= 0)
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_UR_EMPTY_MESSAGE"), "ERROR_MESSAGE");
			return false;
		}

		$arFields = array(
			"FROM_USER_ID" => $senderUserID,
			"TO_USER_ID" => $targetUserID,
			"TITLE" => $title,
			"MESSAGE" => $message,
			"=DATE_CREATE" => $GLOBALS["DB"]->CurrentTimeFunction(),
			"DATE_VIEW" => false,
			"MESSAGE_TYPE" => SONET_MESSAGE_PRIVATE,
			"FROM_DELETED" => "N",
			"TO_DELETED" => "N",
			"SEND_MAIL" => "N",
		);
		if (!CSocNetMessages::Add($arFields))
		{
			$errorMessage = "";
			if ($e = $GLOBALS["APPLICATION"]->GetException())
				$errorMessage = $e->GetString();
			if (StrLen($errorMessage) <= 0)
				$errorMessage = GetMessage("SONET_UR_ERROR_CREATE_MESSAGE");

			$GLOBALS["APPLICATION"]->ThrowException($errorMessage, "ERROR_CREATE_MESSAGE");
			return false;
		}

		CSocNetMessages::__SpeedFileCreate($targetUserID);

		return true;
	}

	function MarkMessageReadMultiple($userID, $arIDs)
	{
		global $APPLICATION, $DB;

		$userID = IntVal($userID);
		if ($userID <= 0)
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_UR_EMPTY_SENDER_USER_ID"), "ERROR_USER_ID");
			return false;
		}

		if (!is_array($arIDs))
			return true;

		foreach ($arIDs as $ID)
			CSocNetMessages::MarkMessageRead($userID, $ID);

		return true;
	}

	function DeleteMessageMultiple($userID, $arIDs)
	{
		global $APPLICATION, $DB;

		$userID = IntVal($userID);
		if ($userID <= 0)
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_UR_EMPTY_SENDER_USER_ID"), "ERROR_USER_ID");
			return false;
		}

		if (!is_array($arIDs))
			return true;

		foreach ($arIDs as $ID)
			CSocNetMessages::DeleteMessage($ID, $userID);

		return true;
	}

	function DeleteConversation($CurrentUserID, $PartnerUserID)
	{
		global $APPLICATION, $DB;

		$CurrentUserID = IntVal($CurrentUserID);
		$PartnerUserID = IntVal($PartnerUserID);
		
		if ($CurrentUserID <= 0)
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_UR_EMPTY_SENDER_USER_ID"), "ERROR_USER_ID");
			return false;
		}

		if ($PartnerUserID <= 0)
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_UR_EMPTY_TARGET_USER_ID"), "ERROR_USER_ID");
			return false;
		}
		
		$dbMessages = CSocNetMessages::GetMessagesForChat($CurrentUserID, $PartnerUserID);
		while ($arMessages = $dbMessages->GetNext())
		{
			CSocNetMessages::DeleteMessage($arMessages["ID"], $CurrentUserID, false);		
		}
		
		CSocNetMessages::__SpeedFileCheckMessages($CurrentUserID);

		return true;
	}

	function __SpeedFileCheckMessages($userID)
	{
		$userID = IntVal($userID);
		if ($userID <= 0)
			return;

		$cnt = 0;
		$dbResult = $GLOBALS["DB"]->Query(
			"SELECT COUNT(ID) as CNT ".
			"FROM b_sonet_messages ".
			"WHERE TO_USER_ID = ".$userID." ".
			"	AND DATE_VIEW IS NULL ".
			"	AND TO_DELETED = 'N' "
		);
		if ($arResult = $dbResult->Fetch())
			$cnt = IntVal($arResult["CNT"]);

		if ($cnt > 0)
			CSocNetMessages::__SpeedFileCreate($userID);
		else
			CSocNetMessages::__SpeedFileDelete($userID);
	}

	function __SpeedFileCreate($userID)
	{
		global $CACHE_MANAGER;

		$userID = IntVal($userID);
		if ($userID <= 0)
			return;

		if ($CACHE_MANAGER->Read(86400*30, "socnet_cm_".$userID))
			$CACHE_MANAGER->Clean("socnet_cm_".$userID);
			
/*
			
		$filePath = $_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/managed_flags/socnet/c/".IntVal($userID / 1000)."/";
		$fileName = $userID."_m";

		if (!file_exists($filePath.$fileName))
		{
			CheckDirPath($filePath);
			@fclose(@fopen($filePath.$fileName, "w"));
		}
*/
	}

	function __SpeedFileDelete($userID)
	{
		global $CACHE_MANAGER;

		$userID = IntVal($userID);
		if ($userID <= 0)
			return;

		if (!$CACHE_MANAGER->Read(86400*30, "socnet_cm_".$userID))
			$CACHE_MANAGER->Set("socnet_cm_".$userID, true);
/*
		$fileName = $_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/managed_flags/socnet/c/".IntVal($userID / 1000)."/".$userID."_m";
		if (file_exists($fileName))
			@unlink($fileName);
*/
	}

	function SpeedFileExists($userID)
	{
		global $CACHE_MANAGER;

		$userID = IntVal($userID);
		if ($userID <= 0)
			return;

		return (!$CACHE_MANAGER->Read(86400*30, "socnet_cm_".$userID));
/*
		$fileName = $_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/managed_flags/socnet/c/".IntVal($userID / 1000)."/".$userID."_m";
		return file_exists($fileName);
*/
	}

	function SendEventAgent()
	{
		global $DB;

		if (IsModuleInstalled("im"))
			return "CSocNetMessages::SendEventAgent();";	

		$dbMessage = CSocNetMessages::GetList(
			array(),
			array(
				"DATE_VIEW" => "", 
				"TO_DELETED" => "N", 
				"SEND_MAIL" => "N",
				"!IS_LOG" => "Y"
			),
			false,
			false,
			array("ID", "FROM_USER_ID", "TO_USER_ID", "TITLE", "MESSAGE", "DATE_CREATE", "FROM_USER_NAME", "FROM_USER_LAST_NAME", "FROM_USER_LOGIN", "TO_USER_NAME", "TO_USER_LAST_NAME", "TO_USER_LOGIN", "TO_USER_EMAIL", "TO_USER_LID", "EMAIL_TEMPLATE", "IS_LOG")
		);

		while ($arMessage = $dbMessage->Fetch())
		{
			if (isset($arMessage["EMAIL_TEMPLATE"]) && strlen($arMessage["EMAIL_TEMPLATE"]) > 0)
				$mailTemplate = $arMessage["EMAIL_TEMPLATE"];
			else
				$mailTemplate = "SONET_NEW_MESSAGE";
		
			$defSiteID = $arMessage["TO_USER_LID"];
			$siteID = CSocNetUserEvents::GetEventSite($arMessage["TO_USER_ID"], $mailTemplate, $defSiteID);
			if ($siteID == false || StrLen($siteID) <= 0)
				$siteID = CSite::GetDefSite();

			if ($siteID == false || StrLen($siteID) <= 0)
				continue;
				
			$arFields = array(
				"MESSAGE_ID" => $arMessage["ID"],
				"USER_ID" => $arMessage["TO_USER_ID"],
				"USER_NAME" => $arMessage["TO_USER_NAME"],
				"USER_LAST_NAME" => $arMessage["TO_USER_LAST_NAME"],
				"SENDER_ID" => $arMessage["FROM_USER_ID"],
				"SENDER_NAME" => $arMessage["FROM_USER_NAME"],
				"SENDER_LAST_NAME" => $arMessage["FROM_USER_LAST_NAME"],
				"EMAIL_TO" => $arMessage["TO_USER_EMAIL"],
				"TITLE" => $arMessage["TITLE"],
				"MESSAGE" => CSocNetTextParser::convert4mail($arMessage["MESSAGE"]),
			);

			$event = new CEvent;
			$event->Send($mailTemplate, $siteID, $arFields, "N");

			CSocNetMessages::Update($arMessage["ID"], array("SEND_MAIL" => "Y"));
		}

		return "CSocNetMessages::SendEventAgent();";
	}
}
?>

Zerion Mini Shell 1.0