예제 #1
0
	function Add($arFields)
	{
		global $DB;

		$arFields1 = array();

		foreach ($arFields as $key => $value)
		{
			if (substr($key, 0, 1) == "=")
			{
				$arFields1[substr($key, 1)] = $value;
				unset($arFields[$key]);
			}
		}

		if (!CBlogPost::CheckFields("ADD", $arFields))
			return false;
		elseif(!$GLOBALS["USER_FIELD_MANAGER"]->CheckFields("BLOG_POST", 0, $arFields))
			return false;

		foreach(GetModuleEvents("blog", "OnBeforePostAdd", true) as $arEvent)
		{
			if (ExecuteModuleEventEx($arEvent, Array(&$arFields))===false)
				return false;
		}

		if (
			array_key_exists("ATTACH_IMG", $arFields)
			&& is_array($arFields["ATTACH_IMG"])
			&& (
				!array_key_exists("MODULE_ID", $arFields["ATTACH_IMG"])
				|| strlen($arFields["ATTACH_IMG"]["MODULE_ID"]) <= 0
			)
		)
			$arFields["ATTACH_IMG"]["MODULE_ID"] = "blog";

		$prefix = "blog";
		if(strlen($arFields["URL"]) > 0)
			$prefix .= "/".$arFields["URL"];

		CFile::SaveForDB($arFields, "ATTACH_IMG", $prefix);

		$arInsert = $DB->PrepareInsert("b_blog_post", $arFields);

		foreach ($arFields1 as $key => $value)
		{
			if (strlen($arInsert[0]) > 0)
				$arInsert[0] .= ", ";
			$arInsert[0] .= $key;
			if (strlen($arInsert[1]) > 0)
				$arInsert[1] .= ", ";
			$arInsert[1] .= $value;
		}

		$ID = false;
		if (strlen($arInsert[0]) > 0)
		{
			$strSql =
				"INSERT INTO b_blog_post(".$arInsert[0].") ".
				"VALUES(".$arInsert[1].")";
			$DB->Query($strSql, False, "File: ".__FILE__."<br>Line: ".__LINE__);

			$ID = IntVal($DB->LastID());

			foreach(GetModuleEvents("blog", "OnBeforePostUserFieldUpdate", true) as $arEvent)
				ExecuteModuleEventEx($arEvent, Array("BLOG_POST", $ID, $arFields));

			$GLOBALS["USER_FIELD_MANAGER"]->Update("BLOG_POST", $ID, $arFields);
		}

		if ($ID)
		{
			$arPost = CBlogPost::GetByID($ID);
			CBlog::SetStat($arPost["BLOG_ID"]);

			CBlogPost::SetPostPerms($ID, $arFields["PERMS_POST"], BLOG_PERMS_POST);
			CBlogPost::SetPostPerms($ID, $arFields["PERMS_COMMENT"], BLOG_PERMS_COMMENT);

			$arFields["SC_PERM"] = Array();
			if(array_key_exists("SOCNET_RIGHTS", $arFields))
				$arFields["SC_PERM"] = CBlogPost::AddSocNetPerms($ID, $arFields["SOCNET_RIGHTS"], $arPost);

			foreach(GetModuleEvents("blog", "OnPostAdd", true) as $arEvent)
				ExecuteModuleEventEx($arEvent, Array($ID, &$arFields));

			if (CModule::IncludeModule("search"))
			{
				if ($arPost["DATE_PUBLISHED"] == "Y"
					&& $arPost["PUBLISH_STATUS"] == BLOG_PUBLISH_STATUS_PUBLISH
					&& CBlogUserGroup::GetGroupPerms(1, $arPost["BLOG_ID"], $ID, BLOG_PERMS_POST) >= BLOG_PERMS_READ)
				{
					$tag = "";
					$arBlog = CBlog::GetByID($arPost["BLOG_ID"]);
					if($arBlog["SEARCH_INDEX"] == "Y")
					{
						$arGroup = CBlogGroup::GetByID($arBlog["GROUP_ID"]);

						if(strlen($arFields["PATH"]) > 0)
						{
							$arFields["PATH"] = (
								strlen($arFields["CODE"]) > 0 
									? str_replace("#post_id#", $arFields["CODE"], $arFields["PATH"]) 
									: str_replace("#post_id#", $ID, $arFields["PATH"])
							);

							$arPostSite = array(
								$arGroup["SITE_ID"] => $arFields["PATH"]
							);
						}
						else
						{
							$arPostSite = array(
								$arGroup["SITE_ID"] => CBlogPost::PreparePath(
										$arBlog["URL"],
										$arPost["ID"],
										$arGroup["SITE_ID"],
										false,
										$arBlog["OWNER_ID"],
										$arBlog["SOCNET_GROUP_ID"]
									)
							);
						}

						if (
							$arBlog["USE_SOCNET"] == "Y" 
							&& CModule::IncludeModule("extranet")
						)
						{
							$arPostSiteExt = CExtranet::GetSitesByLogDestinations($arFields["SC_PERM"]);
							foreach($arPostSiteExt as $lid)
							{
								if (!array_key_exists($lid, $arPostSite))
								{
									$arPostSite[$lid] = str_replace(
										array("#user_id#", "#post_id#"), 
										array($arBlog["OWNER_ID"], $arPost["ID"]), 
										COption::GetOptionString("socialnetwork", "userblogpost_page", false, $lid)
									);
								}
							}
						}

						if(strlen($arPost["CATEGORY_ID"])>0)
						{
							$arC = explode(",", $arPost["CATEGORY_ID"]);
							$arTag = Array();
							foreach($arC as $v)
							{
								$arCategory = CBlogCategory::GetByID($v);
								$arTag[] = $arCategory["NAME"];
							}
							$tag =  implode(",", $arTag);
						}

						$searchContent = blogTextParser::killAllTags($arPost["DETAIL_TEXT"]);
						$searchContent .= "\r\n" . $GLOBALS["USER_FIELD_MANAGER"]->OnSearchIndex("BLOG_POST", $arPost["ID"]);

						$authorName = "";
						if(IntVal($arPost["AUTHOR_ID"]) > 0)
						{
							$dbUser = CUser::GetByID($arPost["AUTHOR_ID"]);
							if($arUser = $dbUser->Fetch())
							{
								$arTmpUser = array(
										"NAME" => $arUser["NAME"],
										"LAST_NAME" => $arUser["LAST_NAME"],
										"SECOND_NAME" => $arUser["SECOND_NAME"],
										"LOGIN" => $arUser["LOGIN"],
									);
								$authorName = CUser::FormatName(CSite::GetNameFormat(), $arTmpUser, false, false);
								if(strlen($authorName) > 0)
									$searchContent .= "\r\n".$authorName;
							}
						}

						$arSearchIndex = array(
							"SITE_ID" => $arPostSite,
							"LAST_MODIFIED" => $arPost["DATE_PUBLISH"],
							"PARAM1" => "POST",
							"PARAM2" => $arPost["BLOG_ID"],
							"PARAM3" => $arPost["ID"],
							"PERMISSIONS" => array(2),
							"TITLE" => blogTextParser::killAllTags($arPost["TITLE"]),
							"BODY" => $searchContent,
							"TAGS" => $tag,
							"USER_ID" => $arPost["AUTHOR_ID"],
							"ENTITY_TYPE_ID" => "BLOG_POST",
							"ENTITY_ID" => $arPost["ID"],
						);

						if($arBlog["USE_SOCNET"] == "Y")
						{
							if(is_array($arFields["SC_PERM"]))
							{
								$arSearchIndex["PERMISSIONS"] = $arFields["SC_PERM"];
								if(!in_array("U".$arPost["AUTHOR_ID"], $arSearchIndex["PERMISSIONS"]))
									$arSearchIndex["PERMISSIONS"][] = "U".$arPost["AUTHOR_ID"];

								$sgId = array();
								foreach($arFields["SC_PERM"] as $perm)
								{
									if(strpos($perm, "SG") !== false)
									{
										$sgIdTmp = str_replace("SG", "", substr($perm, 0, strpos($perm, "_")));
										if(!in_array($sgIdTmp, $sgId) && IntVal($sgIdTmp) > 0)
											$sgId[] = $sgIdTmp;
									}
								}

								if(!empty($sgId))
								{
									$arSearchIndex["PARAMS"] = array(
										"socnet_group" => $sgId,
										"entity" => "socnet_group",
									);
								}
							}

							// get mentions and grats
							$arMentionedUserID = CBlogPost::GetMentionedUserID($arPost);
							if (!empty($arMentionedUserID))
							{
								if (!isset($arSearchIndex["PARAMS"]))
								{
									$arSearchIndex["PARAMS"] = array();
								}
								$arSearchIndex["PARAMS"]["mentioned_user_id"] = $arMentionedUserID;
							}
						}

						CSearch::Index("blog", "P".$ID, $arSearchIndex);
					}
				}
			}
		}

		return $ID;
	}
예제 #2
0
 function UpdateSocNetPerms($ID, $perms = false, $arPost = array())
 {
     global $DB;
     $ID = IntVal($ID);
     if ($ID <= 0) {
         return false;
     }
     $strSql = "DELETE FROM b_blog_socnet_rights WHERE POST_ID=" . $ID;
     $dbRes = $DB->Query($strSql);
     return CBlogPost::AddSocNetPerms($ID, $perms, $arPost);
 }
예제 #3
0
 function Add($arFields)
 {
     global $DB;
     $arFields1 = array();
     foreach ($arFields as $key => $value) {
         if (substr($key, 0, 1) == "=") {
             $arFields1[substr($key, 1)] = $value;
             unset($arFields[$key]);
         }
     }
     if (!CBlogPost::CheckFields("ADD", $arFields)) {
         return false;
     } elseif (!$GLOBALS["USER_FIELD_MANAGER"]->CheckFields("BLOG_POST", 0, $arFields)) {
         return false;
     }
     $db_events = GetModuleEvents("blog", "OnBeforePostAdd");
     while ($arEvent = $db_events->Fetch()) {
         if (ExecuteModuleEventEx($arEvent, array(&$arFields)) === false) {
             return false;
         }
     }
     if (array_key_exists("ATTACH_IMG", $arFields) && is_array($arFields["ATTACH_IMG"]) && (!array_key_exists("MODULE_ID", $arFields["ATTACH_IMG"]) || strlen($arFields["ATTACH_IMG"]["MODULE_ID"]) <= 0)) {
         $arFields["ATTACH_IMG"]["MODULE_ID"] = "blog";
     }
     $prefix = "blog";
     if (strlen($arFields["URL"]) > 0) {
         $prefix .= "/" . $arFields["URL"];
     }
     CFile::SaveForDB($arFields, "ATTACH_IMG", $prefix);
     $arInsert = $DB->PrepareInsert("b_blog_post", $arFields);
     foreach ($arFields1 as $key => $value) {
         if (strlen($arInsert[0]) > 0) {
             $arInsert[0] .= ", ";
         }
         $arInsert[0] .= $key;
         if (strlen($arInsert[1]) > 0) {
             $arInsert[1] .= ", ";
         }
         $arInsert[1] .= $value;
     }
     $ID = false;
     if (strlen($arInsert[0]) > 0) {
         $strSql = "INSERT INTO b_blog_post(" . $arInsert[0] . ") " . "VALUES(" . $arInsert[1] . ")";
         $DB->Query($strSql, False, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         $ID = IntVal($DB->LastID());
         $GLOBALS["USER_FIELD_MANAGER"]->Update("BLOG_POST", $ID, $arFields);
     }
     if ($ID) {
         $arPost = CBlogPost::GetByID($ID);
         CBlog::SetStat($arPost["BLOG_ID"]);
         CBlogPost::SetPostPerms($ID, $arFields["PERMS_POST"], BLOG_PERMS_POST);
         CBlogPost::SetPostPerms($ID, $arFields["PERMS_COMMENT"], BLOG_PERMS_COMMENT);
         $arFields["SC_PERM"] = array();
         if (array_key_exists("SOCNET_RIGHTS", $arFields)) {
             $arFields["SC_PERM"] = CBlogPost::AddSocNetPerms($ID, $arFields["SOCNET_RIGHTS"], $arPost);
         }
         $db_events = GetModuleEvents("blog", "OnPostAdd");
         while ($arEvent = $db_events->Fetch()) {
             ExecuteModuleEventEx($arEvent, array($ID, &$arFields));
         }
         if (CModule::IncludeModule("search")) {
             if ($arPost["DATE_PUBLISHED"] == "Y" && $arPost["PUBLISH_STATUS"] == BLOG_PUBLISH_STATUS_PUBLISH && CBlogUserGroup::GetGroupPerms(1, $arPost["BLOG_ID"], $ID, BLOG_PERMS_POST) >= BLOG_PERMS_READ) {
                 $tag = "";
                 $arBlog = CBlog::GetByID($arPost["BLOG_ID"]);
                 if ($arBlog["SEARCH_INDEX"] == "Y") {
                     $arGroup = CBlogGroup::GetByID($arBlog["GROUP_ID"]);
                     if (strlen($arFields["PATH"]) > 0) {
                         if (strlen($arFields["CODE"]) > 0) {
                             $arFields["PATH"] = str_replace("#post_id#", $arFields["CODE"], $arFields["PATH"]);
                         } else {
                             $arFields["PATH"] = str_replace("#post_id#", $ID, $arFields["PATH"]);
                         }
                         $arPostSite = array($arGroup["SITE_ID"] => $arFields["PATH"]);
                     } else {
                         $arPostSite = array($arGroup["SITE_ID"] => CBlogPost::PreparePath($arBlog["URL"], $arPost["ID"], $arGroup["SITE_ID"], false, $arBlog["OWNER_ID"], $arBlog["SOCNET_GROUP_ID"]));
                     }
                     if (strlen($arPost["CATEGORY_ID"]) > 0) {
                         $arC = explode(",", $arPost["CATEGORY_ID"]);
                         $arTag = array();
                         foreach ($arC as $v) {
                             $arCategory = CBlogCategory::GetByID($v);
                             $arTag[] = $arCategory["NAME"];
                         }
                         $tag = implode(",", $arTag);
                     }
                     $searchContent = blogTextParser::killAllTags($arPost["DETAIL_TEXT"]);
                     $searchContent .= "\r\n" . $GLOBALS["USER_FIELD_MANAGER"]->OnSearchIndex("BLOG_POST", $arPost["ID"]);
                     $arSearchIndex = array("SITE_ID" => $arPostSite, "LAST_MODIFIED" => $arPost["DATE_PUBLISH"], "PARAM1" => "POST", "PARAM2" => $arPost["BLOG_ID"], "PARAM3" => $arPost["ID"], "PERMISSIONS" => array(2), "TITLE" => blogTextParser::killAllTags($arPost["TITLE"]), "BODY" => $searchContent, "TAGS" => $tag, "USER_ID" => $arPost["AUTHOR_ID"], "ENTITY_TYPE_ID" => "BLOG_POST", "ENTITY_ID" => $arPost["ID"]);
                     if ($arBlog["USE_SOCNET"] == "Y") {
                         $arSearchIndex["PERMISSIONS"] = $arFields["SC_PERM"];
                     }
                     CSearch::Index("blog", "P" . $ID, $arSearchIndex);
                 }
             }
         }
     }
     return $ID;
 }