Example #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 (!CBlogImage::CheckFields("ADD", $arFields)) {
         return false;
     }
     if (is_array($arFields['FILE_ID'])) {
         if (array_key_exists("FILE_ID", $arFields) && is_array($arFields["FILE_ID"]) && (!array_key_exists("MODULE_ID", $arFields["FILE_ID"]) || strlen($arFields["FILE_ID"]["MODULE_ID"]) <= 0)) {
             $arFields["FILE_ID"]["MODULE_ID"] = "blog";
         }
         $prefix = "blog";
         if (strlen($arFields["URL"]) > 0) {
             $prefix .= "/" . $arFields["URL"];
         }
         CFile::SaveForDB($arFields, "FILE_ID", $prefix);
     }
     if (isset($arFields['FILE_ID']) && intval($arFields['FILE_ID']) == $arFields['FILE_ID']) {
         $arInsert = $DB->PrepareInsert("b_blog_image", $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;
         }
         if (strlen($arInsert[0]) > 0) {
             $strSql = "INSERT INTO b_blog_image(" . $arInsert[0] . ") " . "VALUES(" . $arInsert[1] . ")";
             $DB->Query($strSql, False, "File: " . __FILE__ . "<br>Line: " . __LINE__);
             $ID = IntVal($DB->LastID());
             return $ID;
         }
     } else {
         $GLOBALS["APPLICATION"]->ThrowException("Error Adding file by CFile::SaveForDB");
     }
     return False;
 }
Example #2
0
 function Update($ID, $arFields)
 {
     global $DB;
     $ID = IntVal($ID);
     if (strlen($arFields["PATH"]) > 0) {
         $path = $arFields["PATH"];
         unset($arFields["PATH"]);
     }
     $arFields1 = array();
     foreach ($arFields as $key => $value) {
         if (substr($key, 0, 1) == "=") {
             $arFields1[substr($key, 1)] = $value;
             unset($arFields[$key]);
         }
     }
     if (!CBlogUser::CheckFields("UPDATE", $arFields, $ID)) {
         return false;
     }
     if (array_key_exists("AVATAR", $arFields) && is_array($arFields["AVATAR"]) && (!array_key_exists("MODULE_ID", $arFields["AVATAR"]) || strlen($arFields["AVATAR"]["MODULE_ID"]) <= 0)) {
         $arFields["AVATAR"]["MODULE_ID"] = "blog";
     }
     CFile::SaveForDB($arFields, "AVATAR", "blog/avatar");
     $strUpdate = $DB->PrepareUpdate("b_blog_user", $arFields);
     foreach ($arFields1 as $key => $value) {
         if (strlen($strUpdate) > 0) {
             $strUpdate .= ", ";
         }
         $strUpdate .= $key . "=" . $value . " ";
     }
     if (strlen($strUpdate) > 0) {
         $arUser = CBlogUser::GetByID($ID, BLOG_BY_BLOG_USER_ID);
         $strSql = "UPDATE b_blog_user SET " . "\t" . $strUpdate . " " . "WHERE ID = " . $ID . " ";
         $DB->Query($strSql, False, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         unset($GLOBALS["BLOG_USER"]["BLOG_USER_CACHE_" . $ID]);
         unset($GLOBALS["BLOG_USER"]["BLOG_USER1_CACHE_" . $arUser["USER_ID"]]);
     } else {
         $ID = false;
     }
     if ($ID && !(count($arFields1) == 1 && strlen($arFields1["LAST_VISIT"]) > 0)) {
         if (CModule::IncludeModule("search")) {
             $arBlogUser = CBlogUser::GetByID($ID);
             $dbUser = CUser::GetByID($arBlogUser["USER_ID"]);
             $arUser = $dbUser->Fetch();
             $arBlog = CBlog::GetByOwnerID($arBlogUser["USER_ID"]);
             if ($arBlog) {
                 $arGroup = CBlogGroup::GetByID($arBlog["GROUP_ID"]);
                 if (strlen($path) > 0) {
                     $arPostSite = array($arGroup["SITE_ID"] => $path);
                 } else {
                     $arPostSite = array($arGroup["SITE_ID"] => CBlogUser::PreparePath($arBlogUser["USER_ID"], $arGroup["SITE_ID"]));
                 }
             } else {
                 if (strlen($arUser["LID"]) <= 0) {
                     $arUser["LID"] = SITE_ID;
                 }
                 if (strlen($path) > 0) {
                     $arPostSite = array($arUser["LID"] => $path);
                 } else {
                     $arPostSite = array($arUser["LID"] => CBlogUser::PreparePath($arBlogUser["USER_ID"], $arUser["LID"]));
                 }
             }
             if (strlen($arBlogUser["LAST_VISIT"]) <= 0) {
                 $arBlogUser["LAST_VISIT"] = ConvertTimeStamp(false, "FULL", false);
             }
             $arSearchIndex = array("SITE_ID" => $arPostSite, "LAST_MODIFIED" => $arBlogUser["LAST_VISIT"], "PARAM1" => "USER", "PARAM2" => $arBlogUser["USER_ID"], "PERMISSIONS" => array(2), "TITLE" => CBlogUser::GetUserName($arBlogUser["ALIAS"], $arUser["NAME"], $arUser["LAST_NAME"], $arUser["LOGIN"], $arUser["SECOND_NAME"]), "BODY" => blogTextParser::killAllTags($arBlogUser["INTERESTS"] . " " . $arBlogUser["DESCRIPTION"]));
             CSearch::Index("blog", "U" . $ID, $arSearchIndex);
         }
     }
     return $ID;
 }
Example #3
0
 /**
  * @return integer id of file in table b_file
  */
 protected static function _UploadFile($fieldNameInDB, $arData)
 {
     if (!is_array($arData)) {
         throw new LearnException('EA_PARAMS: ' . var_export($arData, true), LearnException::EXC_ERR_GN_CHECK_PARAMS);
     }
     // Check for fields needed by CFile::SaveForDB
     $fieldsMustBe = array('name', 'size', 'tmp_name', 'type', 'del', 'MODULE_ID');
     if (count(array_diff($fieldsMustBe, array_keys($arData))) !== 0) {
         throw new LearnException('EA_PARAMS: some fields not found', LearnException::EXC_ERR_GN_CHECK_PARAMS);
     }
     if ($arData['del'] !== 'Y') {
         $arData['del'] = '';
     }
     // we can't use N' due to bug in CFile::SaveToDB();
     $arFileData = array($fieldNameInDB => $arData);
     $rc = CFile::SaveForDB($arFileData, $fieldNameInDB, 'learning');
     // learning - is folder in /upload
     // This is workaround caused by bug in CFile::SaveToDB();
     if ($rc === false && $arData['name'] == '' && $arData['del'] !== 'Y') {
         // We are not deleting file and not uploading new, so return FALSE, what means no image's ID updates occured
         return false;
     }
     if ($rc === false || !isset($arFileData[$fieldNameInDB]) || $arData['del'] !== 'Y' && $arFileData[$fieldNameInDB] === false) {
         throw new LearnException('EA_OTHER: file uploading error: ' . var_export($rc, true) . '; ' . var_export($arFileData, true) . '; ' . var_export($arData, true), LearnException::EXC_ERR_GN_FILE_UPLOAD);
     }
     // If file removed - return NULL
     if ($arFileData[$fieldNameInDB] === false) {
         $fileId = NULL;
     } else {
         $fileId = intval($arFileData[$fieldNameInDB]);
     }
     return $fileId;
 }
Example #4
0
	function Update($ID, $arFields, $bSearchIndex = true)
	{
		global $DB;

		$ID = IntVal($ID);
		if(strlen($arFields["PATH"]) > 0)
			$arFields["PATH"] = str_replace("#post_id#", $ID, $arFields["PATH"]);

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

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

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

		$arOldPost = CBlogPost::GetByID($ID);

		if(is_array($arFields["ATTACH_IMG"]))
		{
			if (
				!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);
		}

		$strUpdate = $DB->PrepareUpdate("b_blog_post", $arFields);

		foreach ($arFields1 as $key => $value)
		{
			if (strlen($strUpdate) > 0)
				$strUpdate .= ", ";
			$strUpdate .= $key."=".$value." ";
		}

		if (strlen($strUpdate) > 0)
		{
			$oldPostPerms = CBlogUserGroup::GetGroupPerms(1, $arOldPost["BLOG_ID"], $ID, BLOG_PERMS_POST);

			$strSql =
				"UPDATE b_blog_post SET ".
				"	".$strUpdate." ".
				"WHERE ID = ".$ID." ";
			$DB->Query($strSql, False, "File: ".__FILE__."<br>Line: ".__LINE__);

			unset($GLOBALS["BLOG_POST"]["BLOG_POST_CACHE_".$ID]);

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

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

		if ($ID)
		{
			$arNewPost = CBlogPost::GetByID($ID);
			if($arNewPost["PUBLISH_STATUS"] != $arOldPost["PUBLISH_STATUS"]  || $arNewPost["BLOG_ID"] != $arOldPost["BLOG_ID"])
				CBlog::SetStat($arNewPost["BLOG_ID"]);

			if ($arNewPost["BLOG_ID"] != $arOldPost["BLOG_ID"])
				CBlog::SetStat($arOldPost["BLOG_ID"]);

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

			if(array_key_exists("SOCNET_RIGHTS", $arFields))
			{
				$arFields["SC_PERM_OLD"] = CBlogPost::GetSocNetPermsCode($ID);
				$arFields["SC_PERM"] = CBlogPost::UpdateSocNetPerms($ID, $arFields["SOCNET_RIGHTS"], $arNewPost);
			}

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

			if ($bSearchIndex && CModule::IncludeModule("search"))
			{
				$newPostPerms = CBlogUserGroup::GetGroupPerms(1, $arNewPost["BLOG_ID"], $ID, BLOG_PERMS_POST);
				$arBlog = CBlog::GetByID($arNewPost["BLOG_ID"]);

				if (
					$arOldPost["PUBLISH_STATUS"] == BLOG_PUBLISH_STATUS_PUBLISH &&
					$oldPostPerms >= BLOG_PERMS_READ
					&& (
						$arNewPost["PUBLISH_STATUS"] != BLOG_PUBLISH_STATUS_PUBLISH ||
						$newPostPerms < BLOG_PERMS_READ
						)
					|| $arBlog["SEARCH_INDEX"] != "Y"
					)
				{
					CSearch::Index("blog", "P".$ID,
						array(
							"TITLE" => "",
							"BODY" => ""
						)
					);
					CSearch::DeleteIndex("blog", false, "COMMENT", $arBlog["ID"]."|".$ID);
				}
				elseif (
					$arNewPost["DATE_PUBLISHED"] == "Y"
					&& $arNewPost["PUBLISH_STATUS"] == BLOG_PUBLISH_STATUS_PUBLISH
					&& $newPostPerms >= BLOG_PERMS_READ
					&& $arBlog["SEARCH_INDEX"] == "Y"
					)
				{
					$tag = "";
					$arGroup = CBlogGroup::GetByID($arBlog["GROUP_ID"]);
					if(strlen($arFields["PATH"]) > 0)
					{
						$arPostSite = array($arGroup["SITE_ID"] => $arFields["PATH"]);
					}
					elseif(strlen($arNewPost["PATH"]) > 0)
					{
						$arNewPost["PATH"] = (
							strlen($arNewPost["CODE"]) > 0 
								? str_replace("#post_id#", $arNewPost["CODE"], $arNewPost["PATH"]) 
								: str_replace("#post_id#", $ID, $arNewPost["PATH"])
						);
						$arPostSite = array($arGroup["SITE_ID"] => $arNewPost["PATH"]);
					}
					else
					{
						$arPostSite = array(
							$arGroup["SITE_ID"] => CBlogPost::PreparePath(
									$arBlog["URL"],
									$arNewPost["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"], $arNewPost["ID"]), 
									COption::GetOptionString("socialnetwork", "userblogpost_page", false, $lid)
								);
							}
						}
					}

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

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

					$authorName = "";
					if(IntVal($arNewPost["AUTHOR_ID"]) > 0)
					{
						$dbUser = CUser::GetByID($arNewPost["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" => $arNewPost["DATE_PUBLISH"],
						"PARAM1" => "POST",
						"PARAM2" => $arNewPost["BLOG_ID"],
						"PARAM3" => $arNewPost["ID"],
						"PERMISSIONS" => array(2),
						"TITLE" => $arNewPost["TITLE"],
						"BODY" => $searchContent,
						"TAGS" => $tag,
						"USER_ID" => $arNewPost["AUTHOR_ID"],
						"ENTITY_TYPE_ID" => "BLOG_POST",
						"ENTITY_ID" => $arNewPost["ID"],
					);

					$bIndexComment = false;
					if($arBlog["USE_SOCNET"] == "Y")
					{
						if(!empty($arFields["SC_PERM"]))
						{
							$arSearchIndex["PERMISSIONS"] = $arFields["SC_PERM"];
							if($arFields["SC_PERM"] != $arFields["SC_PERM_OLD"])
								$bIndexComment = true;
						}
						else
							$arSearchIndex["PERMISSIONS"] = CBlogPost::GetSocnetPermsCode($ID);

						if(!in_array("U".$arNewPost["AUTHOR_ID"], $arSearchIndex["PERMISSIONS"]))
							$arSearchIndex["PERMISSIONS"][] = "U".$arNewPost["AUTHOR_ID"];

						if(is_array($arSearchIndex["PERMISSIONS"]))
						{
							$sgId = array();
							foreach($arSearchIndex["PERMISSIONS"] 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($arNewPost);
						if (!empty($arMentionedUserID))
						{
							if (!isset($arSearchIndex["PARAMS"]))
							{
								$arSearchIndex["PARAMS"] = array();
							}
							$arSearchIndex["PARAMS"]["mentioned_user_id"] = $arMentionedUserID;
						}
					}

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

					if(($arOldPost["PUBLISH_STATUS"] != BLOG_PUBLISH_STATUS_PUBLISH && $arNewPost["PUBLISH_STATUS"] == BLOG_PUBLISH_STATUS_PUBLISH) || $bIndexComment) //index comments
					{
						$arParamsComment = Array(
							"BLOG_ID" => $arBlog["ID"],
							"POST_ID" => $ID,
							"SITE_ID" => $arGroup["SITE_ID"],
							"PATH" => $arPostSite[$arGroup["SITE_ID"]]."?commentId=#comment_id###comment_id#",
							"BLOG_URL" => $arBlog["URL"],
							"OWNER_ID" => $arBlog["OWNER_ID"],
							"SOCNET_GROUP_ID" => $arBlog["SOCNET_GROUP_ID"],
							"USE_SOCNET" => $arBlog["USE_SOCNET"],
						);

						CBlogComment::_IndexPostComments($arParamsComment);
					}
				}
			}
		}

		BXClearCache(true, '/blog/socnet_post/gen/'.$ID);

		return $ID;
	}
Example #5
0
	function Update($ID, $arFields, $arOptions = array())
	{
		global $DB;

		$ID = intval($ID);

		if ($ID <= 0 || !CSaleDelivery::CheckFields("UPDATE", $arFields))
			return false;

		if (array_key_exists("LOGOTIP", $arFields) && is_array($arFields["LOGOTIP"]))
			$arFields["LOGOTIP"]["MODULE_ID"] = "sale";

		CFile::SaveForDB($arFields, "LOGOTIP", "sale/delivery/logotip");

		$strUpdate = $DB->PrepareUpdate("b_sale_delivery", $arFields);

		$strSql = "UPDATE b_sale_delivery SET ".$strUpdate." WHERE ID = ".$ID."";
		$DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);

		if (is_set($arFields, "LOCATIONS"))
		{
			if(CSaleLocation::isLocationProMigrated())
			{
				Helper::resetLocationsForEntity($ID, $arFields['LOCATIONS'], self::CONN_ENTITY_NAME, !!$arOptions['EXPECT_LOCATION_CODES']);
			}
			else
			{
				$DB->Query("DELETE FROM b_sale_delivery2location WHERE DELIVERY_ID = ".$ID."");

				$countarFieldLoc = count($arFields["LOCATIONS"]);
				for ($i = 0; $i < $countarFieldLoc; $i++)
				{
					// change location id to location code
					$arFields["LOCATIONS"][$i]['LOCATION_CODE'] = $arFields["LOCATIONS"][$i]['LOCATION_ID'];
					unset($arFields["LOCATIONS"][$i]['LOCATION_ID']);
					
					$arInsert = $DB->PrepareInsert("b_sale_delivery2location", $arFields["LOCATIONS"][$i]);

					$strSql =
						"INSERT INTO b_sale_delivery2location(DELIVERY_ID, ".$arInsert[0].") ".
						"VALUES(".$ID.", ".$arInsert[1].")";
					$DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
				}
			}
		}

		if (is_set($arFields, "PAY_SYSTEM"))
		{
			CSaleDelivery::UpdateDeliveryPay($ID, $arFields["PAY_SYSTEM"]);
		}

		return $ID;
	}
Example #6
0
 function Update($ID, $arFields)
 {
     global $DB, $USER_FIELD_MANAGER;
     $ID = intval($ID);
     if (!$this->CheckFields($arFields, $ID)) {
         $Result = false;
         $arFields["RESULT_MESSAGE"] =& $this->LAST_ERROR;
     } else {
         unset($arFields["ID"]);
         if (is_set($arFields, "ACTIVE") && $arFields["ACTIVE"] != "Y") {
             $arFields["ACTIVE"] = "N";
         }
         if (is_set($arFields, "PERSONAL_GENDER") && ($arFields["PERSONAL_GENDER"] != "M" && $arFields["PERSONAL_GENDER"] != "F")) {
             $arFields["PERSONAL_GENDER"] = "";
         }
         if (is_set($arFields, "PASSWORD")) {
             $original_pass = $arFields["PASSWORD"];
             $salt = randString(8, array("abcdefghijklnmopqrstuvwxyz", "ABCDEFGHIJKLNMOPQRSTUVWXYZ", "0123456789", ",.<>/?;:[]{}\\|~!@#\$%^&*()-_+="));
             $arFields["PASSWORD"] = $salt . md5($salt . $arFields["PASSWORD"]);
             $rUser = CUser::GetByID($ID);
             if ($arUser = $rUser->Fetch()) {
                 if ($arUser["PASSWORD"] != $arFields["PASSWORD"]) {
                     $DB->Query("DELETE FROM b_user_stored_auth WHERE USER_ID=" . $ID);
                 }
             }
             if (COption::GetOptionString("main", "event_log_password_change", "N") === "Y") {
                 CEventLog::Log("SECURITY", "USER_PASSWORD_CHANGED", "main", $ID);
             }
             //$arFields["STORED_HASH"] = CUser::GetPasswordHash($arFields["PASSWORD"]);
         }
         unset($arFields["STORED_HASH"]);
         $checkword = '';
         if (!is_set($arFields, "CHECKWORD")) {
             if (is_set($arFields, "PASSWORD") || is_set($arFields, "EMAIL") || is_set($arFields, "LOGIN") || is_set($arFields, "ACTIVE")) {
                 $salt = randString(8);
                 $checkword = md5(CMain::GetServerUniqID() . uniqid());
                 $arFields["CHECKWORD"] = $salt . md5($salt . $checkword);
             }
         } else {
             $salt = randString(8);
             $checkword = $arFields["CHECKWORD"];
             $arFields["CHECKWORD"] = $salt . md5($salt . $checkword);
         }
         if (is_set($arFields, "CHECKWORD") && !is_set($arFields, "CHECKWORD_TIME")) {
             $arFields["~CHECKWORD_TIME"] = $DB->CurrentTimeFunction();
         }
         if (is_set($arFields, "WORK_COUNTRY")) {
             $arFields["WORK_COUNTRY"] = IntVal($arFields["WORK_COUNTRY"]);
         }
         if (is_set($arFields, "PERSONAL_COUNTRY")) {
             $arFields["PERSONAL_COUNTRY"] = IntVal($arFields["PERSONAL_COUNTRY"]);
         }
         if (array_key_exists("PERSONAL_PHOTO", $arFields) && is_array($arFields["PERSONAL_PHOTO"]) && (!array_key_exists("MODULE_ID", $arFields["PERSONAL_PHOTO"]) || strlen($arFields["PERSONAL_PHOTO"]["MODULE_ID"]) <= 0)) {
             $arFields["PERSONAL_PHOTO"]["MODULE_ID"] = "main";
         }
         CFile::SaveForDB($arFields, "PERSONAL_PHOTO", "main");
         if (array_key_exists("WORK_LOGO", $arFields) && is_array($arFields["WORK_LOGO"]) && (!array_key_exists("MODULE_ID", $arFields["WORK_LOGO"]) || strlen($arFields["WORK_LOGO"]["MODULE_ID"]) <= 0)) {
             $arFields["WORK_LOGO"]["MODULE_ID"] = "main";
         }
         CFile::SaveForDB($arFields, "WORK_LOGO", "main");
         $strUpdate = $DB->PrepareUpdate("b_user", $arFields);
         if (!is_set($arFields, "TIMESTAMP_X")) {
             $strUpdate .= ($strUpdate != "" ? "," : "") . " TIMESTAMP_X = " . $DB->GetNowFunction();
         }
         $strSql = "UPDATE b_user SET " . $strUpdate . " WHERE ID=" . $ID;
         $DB->Query($strSql, false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__);
         $USER_FIELD_MANAGER->Update("USER", $ID, $arFields);
         if (COption::GetOptionString("main", "event_log_user_edit", "N") === "Y") {
             $res_log["user"] = $arFields["NAME"] != "" || $arFields["LAST_NAME"] != "" ? trim($arFields["NAME"] . " " . $arFields["LAST_NAME"]) : $arFields["LOGIN"];
             CEventLog::Log("SECURITY", "USER_EDIT", "main", $ID, serialize($res_log));
         }
         if (is_set($arFields, "GROUP_ID")) {
             CUser::SetUserGroup($ID, $arFields["GROUP_ID"]);
         }
         //update digest hash for http digest authorization
         if (is_set($arFields, "PASSWORD") && COption::GetOptionString('main', 'use_digest_auth', 'N') == 'Y') {
             CUser::UpdateDigest($arUser["ID"], $original_pass);
         }
         $Result = true;
         $arFields["CHECKWORD"] = $checkword;
         //update session information and cache for current user
         global $USER;
         if (is_object($USER) && $USER->GetID() == $ID) {
             static $arSessFields = array('LOGIN' => 'LOGIN', 'EMAIL' => 'EMAIL', 'FIRST_NAME' => 'NAME', 'SECOND_NAME' => 'SECOND_NAME', 'LAST_NAME' => 'LAST_NAME', 'AUTO_TIME_ZONE' => 'AUTO_TIME_ZONE', 'TIME_ZONE' => 'TIME_ZONE');
             foreach ($arSessFields as $key => $val) {
                 if (isset($arFields[$val])) {
                     $USER->SetParam($key, $arFields[$val]);
                 }
             }
             $name = $USER->GetParam("FIRST_NAME");
             $last_name = $USER->GetParam("LAST_NAME");
             $USER->SetParam("NAME", $name . ($name == '' || $last_name == '' ? "" : " ") . $last_name);
             //cache for GetByID()
             self::$CURRENT_USER = false;
         }
     }
     $arFields["ID"] = $ID;
     $arFields["RESULT"] =& $Result;
     $events = GetModuleEvents("main", "OnAfterUserUpdate");
     while ($arEvent = $events->Fetch()) {
         ExecuteModuleEventEx($arEvent, array(&$arFields));
     }
     if (defined("BX_COMP_MANAGED_CACHE")) {
         $GLOBALS["CACHE_MANAGER"]->ClearByTag("USER_CARD_" . intval($ID / 100));
         $GLOBALS["CACHE_MANAGER"]->ClearByTag("USER_CARD");
     }
     return $Result;
 }
Example #7
0
 function Update($ID, $arFields, $bResort = true, $bUpdateSearch = true, $bResizePictures = false)
 {
     global $USER, $DB, $APPLICATION;
     $ID = intval($ID);
     $db_record = CIBlockSection::GetList(array(), array("ID" => $ID, "CHECK_PERMISSIONS" => "N"));
     if (!($db_record = $db_record->Fetch())) {
         return false;
     }
     if (is_set($arFields, "EXTERNAL_ID")) {
         $arFields["XML_ID"] = $arFields["EXTERNAL_ID"];
     }
     unset($arFields["GLOBAL_ACTIVE"]);
     unset($arFields["DEPTH_LEVEL"]);
     unset($arFields["LEFT_MARGIN"]);
     unset($arFields["RIGHT_MARGIN"]);
     unset($arFields["IBLOCK_ID"]);
     unset($arFields["DATE_CREATE"]);
     unset($arFields["CREATED_BY"]);
     $arIBlock = CIBlock::GetArrayByID($db_record["IBLOCK_ID"]);
     if ($bResizePictures) {
         $arDef = $arIBlock["FIELDS"]["SECTION_PICTURE"]["DEFAULT_VALUE"];
         if ($arDef["DELETE_WITH_DETAIL"] === "Y" && $arFields["DETAIL_PICTURE"]["del"] === "Y") {
             $arFields["PICTURE"]["del"] = "Y";
         }
         if ($arDef["FROM_DETAIL"] === "Y" && ($arFields["PICTURE"]["size"] <= 0 || $arDef["UPDATE_WITH_DETAIL"] === "Y") && is_array($arFields["DETAIL_PICTURE"]) && $arFields["DETAIL_PICTURE"]["size"] > 0) {
             if ($arFields["PICTURE"]["del"] !== "Y" && $arDef["UPDATE_WITH_DETAIL"] !== "Y") {
                 $arOldSection = $db_record;
             } else {
                 $arOldSection = false;
             }
             if (!$arOldSection || !$arOldSection["PICTURE"]) {
                 $arNewPreview = $arFields["DETAIL_PICTURE"];
                 $arNewPreview["COPY_FILE"] = "Y";
                 $arNewPreview["description"] = $arFields["PICTURE"]["description"];
                 $arFields["PICTURE"] = $arNewPreview;
             }
         }
         if (array_key_exists("PICTURE", $arFields) && is_array($arFields["PICTURE"]) && $arFields["PICTURE"]["size"] > 0 && $arDef["SCALE"] === "Y") {
             $arNewPicture = CIBlock::ResizePicture($arFields["PICTURE"], $arDef);
             if (is_array($arNewPicture)) {
                 $arNewPicture["description"] = $arFields["PICTURE"]["description"];
                 $arFields["PICTURE"] = $arNewPicture;
             } elseif ($arDef["IGNORE_ERRORS"] !== "Y") {
                 unset($arFields["PICTURE"]);
                 $strWarning .= GetMessage("IBLOCK_FIELD_PREVIEW_PICTURE") . ": " . $arNewPicture . "<br>";
             }
         }
         if (array_key_exists("PICTURE", $arFields) && is_array($arFields["PICTURE"]) && $arDef["USE_WATERMARK_FILE"] === "Y") {
             if (strlen($arFields["PICTURE"]["tmp_name"]) > 0 && $arFields["PICTURE"]["tmp_name"] === $arFields["DETAIL_PICTURE"]["tmp_name"]) {
                 $arFields["PICTURE"]["tmp_name"] = CTempFile::GetFileName(basename($arFields["PICTURE"]["tmp_name"]));
                 CheckDirPath($arFields["PICTURE"]["tmp_name"]);
                 copy($arFields["DETAIL_PICTURE"]["tmp_name"], $arFields["PICTURE"]["tmp_name"]);
             }
             CIBLock::FilterPicture($arFields["PICTURE"]["tmp_name"], array("name" => "watermark", "position" => $arDef["WATERMARK_FILE_POSITION"], "type" => "file", "size" => "real", "alpha_level" => 100 - min(max($arDef["WATERMARK_FILE_ALPHA"], 0), 100), "file" => $_SERVER["DOCUMENT_ROOT"] . Rel2Abs("/", $arDef["WATERMARK_FILE"])));
         }
         if (array_key_exists("PICTURE", $arFields) && is_array($arFields["PICTURE"]) && $arDef["USE_WATERMARK_TEXT"] === "Y") {
             if (strlen($arFields["PICTURE"]["tmp_name"]) > 0 && $arFields["PICTURE"]["tmp_name"] === $arFields["DETAIL_PICTURE"]["tmp_name"]) {
                 $arFields["PICTURE"]["tmp_name"] = CTempFile::GetFileName(basename($arFields["PICTURE"]["tmp_name"]));
                 CheckDirPath($arFields["PICTURE"]["tmp_name"]);
                 copy($arFields["DETAIL_PICTURE"]["tmp_name"], $arFields["PICTURE"]["tmp_name"]);
             }
             CIBLock::FilterPicture($arFields["PICTURE"]["tmp_name"], array("name" => "watermark", "position" => $arDef["WATERMARK_TEXT_POSITION"], "type" => "text", "coefficient" => $arDef["WATERMARK_TEXT_SIZE"], "text" => $arDef["WATERMARK_TEXT"], "font" => $_SERVER["DOCUMENT_ROOT"] . Rel2Abs("/", $arDef["WATERMARK_TEXT_FONT"]), "color" => $arDef["WATERMARK_TEXT_COLOR"]));
         }
         $arDef = $arIBlock["FIELDS"]["SECTION_DETAIL_PICTURE"]["DEFAULT_VALUE"];
         if (array_key_exists("DETAIL_PICTURE", $arFields) && is_array($arFields["DETAIL_PICTURE"]) && $arDef["SCALE"] === "Y") {
             $arNewPicture = CIBlock::ResizePicture($arFields["DETAIL_PICTURE"], $arDef);
             if (is_array($arNewPicture)) {
                 $arNewPicture["description"] = $arFields["DETAIL_PICTURE"]["description"];
                 $arFields["DETAIL_PICTURE"] = $arNewPicture;
             } elseif ($arDef["IGNORE_ERRORS"] !== "Y") {
                 unset($arFields["DETAIL_PICTURE"]);
                 $strWarning .= GetMessage("IBLOCK_FIELD_DETAIL_PICTURE") . ": " . $arNewPicture . "<br>";
             }
         }
         if (array_key_exists("DETAIL_PICTURE", $arFields) && is_array($arFields["DETAIL_PICTURE"]) && $arDef["USE_WATERMARK_FILE"] === "Y") {
             if (strlen($arFields["DETAIL_PICTURE"]["tmp_name"]) > 0 && $arFields["DETAIL_PICTURE"]["tmp_name"] === $arFields["PICTURE"]["tmp_name"]) {
                 $arFields["DETAIL_PICTURE"]["tmp_name"] = CTempFile::GetFileName(basename($arFields["DETAIL_PICTURE"]["tmp_name"]));
                 CheckDirPath($arFields["DETAIL_PICTURE"]["tmp_name"]);
                 copy($arFields["PICTURE"]["tmp_name"], $arFields["DETAIL_PICTURE"]["tmp_name"]);
             }
             CIBLock::FilterPicture($arFields["DETAIL_PICTURE"]["tmp_name"], array("name" => "watermark", "position" => $arDef["WATERMARK_FILE_POSITION"], "type" => "file", "size" => "real", "alpha_level" => 100 - min(max($arDef["WATERMARK_FILE_ALPHA"], 0), 100), "file" => $_SERVER["DOCUMENT_ROOT"] . Rel2Abs("/", $arDef["WATERMARK_FILE"]), "fill" => "resize"));
         }
         if (array_key_exists("DETAIL_PICTURE", $arFields) && is_array($arFields["DETAIL_PICTURE"]) && $arDef["USE_WATERMARK_TEXT"] === "Y") {
             if (strlen($arFields["DETAIL_PICTURE"]["tmp_name"]) > 0 && $arFields["DETAIL_PICTURE"]["tmp_name"] === $arFields["PICTURE"]["tmp_name"]) {
                 $arFields["DETAIL_PICTURE"]["tmp_name"] = CTempFile::GetFileName(basename($arFields["DETAIL_PICTURE"]["tmp_name"]));
                 CheckDirPath($arFields["DETAIL_PICTURE"]["tmp_name"]);
                 copy($arFields["PICTURE"]["tmp_name"], $arFields["DETAIL_PICTURE"]["tmp_name"]);
             }
             CIBLock::FilterPicture($arFields["DETAIL_PICTURE"]["tmp_name"], array("name" => "watermark", "position" => $arDef["WATERMARK_TEXT_POSITION"], "type" => "text", "coefficient" => $arDef["WATERMARK_TEXT_SIZE"], "text" => $arDef["WATERMARK_TEXT"], "font" => $_SERVER["DOCUMENT_ROOT"] . Rel2Abs("/", $arDef["WATERMARK_TEXT_FONT"]), "color" => $arDef["WATERMARK_TEXT_COLOR"]));
         }
     }
     if (is_set($arFields, "PICTURE")) {
         if (strlen($arFields["PICTURE"]["name"]) <= 0 && strlen($arFields["PICTURE"]["del"]) <= 0) {
             unset($arFields["PICTURE"]);
         } else {
             $arFields["PICTURE"]["old_file"] = $db_record["PICTURE"];
             $arFields["PICTURE"]["MODULE_ID"] = "iblock";
         }
     }
     if (is_set($arFields, "DETAIL_PICTURE")) {
         if (strlen($arFields["DETAIL_PICTURE"]["name"]) <= 0 && strlen($arFields["DETAIL_PICTURE"]["del"]) <= 0) {
             unset($arFields["DETAIL_PICTURE"]);
         } else {
             $arFields["DETAIL_PICTURE"]["old_file"] = $db_record["DETAIL_PICTURE"];
             $arFields["DETAIL_PICTURE"]["MODULE_ID"] = "iblock";
         }
     }
     if (is_set($arFields, "ACTIVE") && $arFields["ACTIVE"] != "Y") {
         $arFields["ACTIVE"] = "N";
     }
     if (is_set($arFields, "DESCRIPTION_TYPE") && $arFields["DESCRIPTION_TYPE"] != "html") {
         $arFields["DESCRIPTION_TYPE"] = "text";
     }
     if (isset($arFields["IBLOCK_SECTION_ID"])) {
         $arFields["IBLOCK_SECTION_ID"] = intval($arFields["IBLOCK_SECTION_ID"]);
         if ($arFields["IBLOCK_SECTION_ID"] <= 0) {
             $arFields["IBLOCK_SECTION_ID"] = false;
         }
     }
     $DESC_tmp = is_set($arFields, "DESCRIPTION") ? $arFields["DESCRIPTION"] : $db_record["DESCRIPTION"];
     $DESC_TYPE_tmp = is_set($arFields, "DESCRIPTION_TYPE") ? $arFields["DESCRIPTION_TYPE"] : $db_record["DESCRIPTION_TYPE"];
     $arFields["SEARCHABLE_CONTENT"] = ToUpper((is_set($arFields, "NAME") ? $arFields["NAME"] : $db_record["NAME"]) . "\r\n" . ($DESC_TYPE_tmp == "html" ? HTMLToTxt($DESC_tmp) : $DESC_tmp));
     if (is_object($USER)) {
         if (!isset($arFields["MODIFIED_BY"]) || intval($arFields["MODIFIED_BY"]) <= 0) {
             $arFields["MODIFIED_BY"] = intval($USER->GetID());
         }
     }
     if (!$this->CheckFields($arFields, $ID)) {
         $Result = false;
         $arFields["RESULT_MESSAGE"] =& $this->LAST_ERROR;
     } elseif (!$GLOBALS["USER_FIELD_MANAGER"]->CheckFields("IBLOCK_" . $db_record["IBLOCK_ID"] . "_SECTION", $ID, $arFields)) {
         $Result = false;
         $err = $APPLICATION->GetException();
         if (is_object($err)) {
             $this->LAST_ERROR .= str_replace("<br><br>", "<br>", $err->GetString() . "<br>");
         }
         $arFields["RESULT_MESSAGE"] =& $this->LAST_ERROR;
     } else {
         if (array_key_exists("PICTURE", $arFields)) {
             $SAVED_PICTURE = $arFields["PICTURE"];
             CFile::SaveForDB($arFields, "PICTURE", "iblock");
         }
         if (array_key_exists("DETAIL_PICTURE", $arFields)) {
             $SAVED_DETAIL_PICTURE = $arFields["DETAIL_PICTURE"];
             CFile::SaveForDB($arFields, "DETAIL_PICTURE", "iblock");
         }
         unset($arFields["ID"]);
         $strUpdate = $DB->PrepareUpdate("b_iblock_section", $arFields, "iblock");
         if (array_key_exists("PICTURE", $arFields)) {
             $arFields["PICTURE"] = $SAVED_PICTURE;
         }
         if (array_key_exists("DETAIL_PICTURE", $arFields)) {
             $arFields["DETAIL_PICTURE"] = $SAVED_DETAIL_PICTURE;
         }
         CIBlock::_transaction_lock($db_record["IBLOCK_ID"]);
         if (strlen($strUpdate) > 0) {
             $strSql = "UPDATE b_iblock_section SET " . $strUpdate . " WHERE ID = " . $ID;
             $arBinds = array();
             if (array_key_exists("DESCRIPTION", $arFields)) {
                 $arBinds["DESCRIPTION"] = $arFields["DESCRIPTION"];
             }
             if (array_key_exists("SEARCHABLE_CONTENT", $arFields)) {
                 $arBinds["SEARCHABLE_CONTENT"] = $arFields["SEARCHABLE_CONTENT"];
             }
             $DB->QueryBind($strSql, $arBinds);
         }
         if ($bResort) {
             //Move inside the tree
             if (isset($arFields["SORT"]) && $arFields["SORT"] != $db_record["SORT"] || isset($arFields["NAME"]) && $arFields["NAME"] != $db_record["NAME"] || isset($arFields["IBLOCK_SECTION_ID"]) && $arFields["IBLOCK_SECTION_ID"] != $db_record["IBLOCK_SECTION_ID"]) {
                 //First "delete" from the tree
                 $distance = intval($db_record["RIGHT_MARGIN"]) - intval($db_record["LEFT_MARGIN"]) + 1;
                 $DB->Query("\n\t\t\t\t\t\tUPDATE b_iblock_section SET\n\t\t\t\t\t\t\tTIMESTAMP_X=" . ($DB->type == "ORACLE" ? "NULL" : "TIMESTAMP_X") . "\n\t\t\t\t\t\t\t,LEFT_MARGIN = -LEFT_MARGIN\n\t\t\t\t\t\t\t,RIGHT_MARGIN = -RIGHT_MARGIN\n\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\tIBLOCK_ID = " . $db_record["IBLOCK_ID"] . "\n\t\t\t\t\t\t\tAND LEFT_MARGIN >= " . intval($db_record["LEFT_MARGIN"]) . "\n\t\t\t\t\t\t\tAND LEFT_MARGIN <= " . intval($db_record["RIGHT_MARGIN"]) . "\n\t\t\t\t\t");
                 $DB->Query("\n\t\t\t\t\t\tUPDATE b_iblock_section SET\n\t\t\t\t\t\t\tTIMESTAMP_X=" . ($DB->type == "ORACLE" ? "NULL" : "TIMESTAMP_X") . "\n\t\t\t\t\t\t\t,RIGHT_MARGIN = RIGHT_MARGIN - " . $distance . "\n\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\tIBLOCK_ID = " . $db_record["IBLOCK_ID"] . "\n\t\t\t\t\t\t\tAND RIGHT_MARGIN > " . $db_record["RIGHT_MARGIN"] . "\n\t\t\t\t\t");
                 $DB->Query("\n\t\t\t\t\t\tUPDATE b_iblock_section SET\n\t\t\t\t\t\t\tTIMESTAMP_X=" . ($DB->type == "ORACLE" ? "NULL" : "TIMESTAMP_X") . "\n\t\t\t\t\t\t\t,LEFT_MARGIN = LEFT_MARGIN - " . $distance . "\n\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\tIBLOCK_ID = " . $db_record["IBLOCK_ID"] . "\n\t\t\t\t\t\t\tAND LEFT_MARGIN > " . $db_record["LEFT_MARGIN"] . "\n\t\t\t\t\t");
                 //Next insert into the the tree almost as we do when inserting the new one
                 $PARENT_ID = isset($arFields["IBLOCK_SECTION_ID"]) ? intval($arFields["IBLOCK_SECTION_ID"]) : intval($db_record["IBLOCK_SECTION_ID"]);
                 $NAME = isset($arFields["NAME"]) ? $arFields["NAME"] : $db_record["NAME"];
                 $SORT = isset($arFields["SORT"]) ? intval($arFields["SORT"]) : intval($db_record["SORT"]);
                 $arParents = array();
                 $strSql = "\n\t\t\t\t\t\tSELECT BS.ID, BS.ACTIVE, BS.GLOBAL_ACTIVE, BS.DEPTH_LEVEL, BS.LEFT_MARGIN, BS.RIGHT_MARGIN\n\t\t\t\t\t\tFROM b_iblock_section BS\n\t\t\t\t\t\tWHERE BS.IBLOCK_ID = " . $db_record["IBLOCK_ID"] . "\n\t\t\t\t\t\tAND BS.ID in (" . intval($db_record["IBLOCK_SECTION_ID"]) . ", " . $PARENT_ID . ")\n\t\t\t\t\t";
                 $rsParents = $DB->Query($strSql);
                 while ($arParent = $rsParents->Fetch()) {
                     $arParents[$arParent["ID"]] = $arParent;
                 }
                 //Find rightmost child of the parent
                 $strSql = "\n\t\t\t\t\t\tSELECT BS.ID, BS.RIGHT_MARGIN, BS.DEPTH_LEVEL\n\t\t\t\t\t\tFROM b_iblock_section BS\n\t\t\t\t\t\tWHERE BS.IBLOCK_ID = " . $db_record["IBLOCK_ID"] . "\n\t\t\t\t\t\tAND " . ($PARENT_ID > 0 ? "BS.IBLOCK_SECTION_ID=" . $PARENT_ID : "BS.IBLOCK_SECTION_ID IS NULL") . "\n\t\t\t\t\t\tAND (\n\t\t\t\t\t\t\t(BS.SORT < " . $SORT . ")\n\t\t\t\t\t\t\tOR (BS.SORT = " . $SORT . " AND BS.NAME < '" . $DB->ForSQL($NAME) . "')\n\t\t\t\t\t\t)\n\t\t\t\t\t\tAND BS.ID <> " . $ID . "\n\t\t\t\t\t\tORDER BY BS.SORT DESC, BS.NAME DESC\n\t\t\t\t\t";
                 $rsChild = $DB->Query($strSql);
                 if ($arChild = $rsChild->Fetch()) {
                     //We found the left neighbour
                     $arUpdate = array("LEFT_MARGIN" => intval($arChild["RIGHT_MARGIN"]) + 1, "DEPTH_LEVEL" => intval($arChild["DEPTH_LEVEL"]));
                 } else {
                     //If we have parent, when take its left_margin
                     if (isset($arParents[$PARENT_ID]) && $arParents[$PARENT_ID]) {
                         $arUpdate = array("LEFT_MARGIN" => intval($arParents[$PARENT_ID]["LEFT_MARGIN"]) + 1, "DEPTH_LEVEL" => intval($arParents[$PARENT_ID]["DEPTH_LEVEL"]) + 1);
                     } else {
                         //We are only one/leftmost section in the iblock.
                         $arUpdate = array("LEFT_MARGIN" => 1, "DEPTH_LEVEL" => 1);
                     }
                 }
                 $move_distance = intval($db_record["LEFT_MARGIN"]) - $arUpdate["LEFT_MARGIN"];
                 $DB->Query("\n\t\t\t\t\t\tUPDATE b_iblock_section SET\n\t\t\t\t\t\t\tTIMESTAMP_X=" . ($DB->type == "ORACLE" ? "NULL" : "TIMESTAMP_X") . "\n\t\t\t\t\t\t\t,LEFT_MARGIN = LEFT_MARGIN + " . $distance . "\n\t\t\t\t\t\t\t,RIGHT_MARGIN = RIGHT_MARGIN + " . $distance . "\n\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\tIBLOCK_ID = " . $db_record["IBLOCK_ID"] . "\n\t\t\t\t\t\t\tAND LEFT_MARGIN >= " . $arUpdate["LEFT_MARGIN"] . "\n\t\t\t\t\t");
                 $DB->Query("\n\t\t\t\t\t\tUPDATE b_iblock_section SET\n\t\t\t\t\t\t\tTIMESTAMP_X=" . ($DB->type == "ORACLE" ? "NULL" : "TIMESTAMP_X") . "\n\t\t\t\t\t\t\t,LEFT_MARGIN = -LEFT_MARGIN - " . $move_distance . "\n\t\t\t\t\t\t\t,RIGHT_MARGIN = -RIGHT_MARGIN - " . $move_distance . "\n\t\t\t\t\t\t\t" . ($arUpdate["DEPTH_LEVEL"] != intval($db_record["DEPTH_LEVEL"]) ? ",DEPTH_LEVEL = DEPTH_LEVEL - " . ($db_record["DEPTH_LEVEL"] - $arUpdate["DEPTH_LEVEL"]) : "") . "\n\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\tIBLOCK_ID = " . $db_record["IBLOCK_ID"] . "\n\t\t\t\t\t\t\tAND LEFT_MARGIN <= " . -intval($db_record["LEFT_MARGIN"]) . "\n\t\t\t\t\t\t\tAND LEFT_MARGIN >= " . -intval($db_record["RIGHT_MARGIN"]) . "\n\t\t\t\t\t");
                 if (isset($arParents[$PARENT_ID])) {
                     $DB->Query("\n\t\t\t\t\t\t\tUPDATE b_iblock_section SET\n\t\t\t\t\t\t\t\tTIMESTAMP_X=" . ($DB->type == "ORACLE" ? "NULL" : "TIMESTAMP_X") . "\n\t\t\t\t\t\t\t\t,RIGHT_MARGIN = RIGHT_MARGIN + " . $distance . "\n\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\tIBLOCK_ID = " . $db_record["IBLOCK_ID"] . "\n\t\t\t\t\t\t\t\tAND LEFT_MARGIN <= " . $arParents[$PARENT_ID]["LEFT_MARGIN"] . "\n\t\t\t\t\t\t\t\tAND RIGHT_MARGIN >= " . $arParents[$PARENT_ID]["RIGHT_MARGIN"] . "\n\t\t\t\t\t\t");
                 }
             }
             //Check if parent was changed
             if (isset($arFields["IBLOCK_SECTION_ID"]) && $arFields["IBLOCK_SECTION_ID"] != $db_record["IBLOCK_SECTION_ID"]) {
                 $rsSection = CIBlockSection::GetByID($ID);
                 $arSection = $rsSection->Fetch();
                 $strSql = "\n\t\t\t\t\t\tSELECT ID, GLOBAL_ACTIVE\n\t\t\t\t\t\tFROM b_iblock_section\n\t\t\t\t\t\tWHERE IBLOCK_ID = " . $arSection["IBLOCK_ID"] . "\n\t\t\t\t\t\tAND ID = " . intval($arFields["IBLOCK_SECTION_ID"]) . "\n\t\t\t\t\t";
                 $rsParent = $DB->Query($strSql);
                 $arParent = $rsParent->Fetch();
                 //If new parent is not globally active
                 //or we are not active either
                 //we must be not globally active too
                 if ($arParent && $arParent["GLOBAL_ACTIVE"] == "N" || $arFields["ACTIVE"] == "N") {
                     $DB->Query("\n\t\t\t\t\t\t\tUPDATE b_iblock_section SET\n\t\t\t\t\t\t\t\tTIMESTAMP_X=" . ($DB->type == "ORACLE" ? "NULL" : "TIMESTAMP_X") . "\n\t\t\t\t\t\t\t\t,GLOBAL_ACTIVE = 'N'\n\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\tIBLOCK_ID = " . $arSection["IBLOCK_ID"] . "\n\t\t\t\t\t\t\t\tAND LEFT_MARGIN >= " . intval($arSection["LEFT_MARGIN"]) . "\n\t\t\t\t\t\t\t\tAND RIGHT_MARGIN <= " . intval($arSection["RIGHT_MARGIN"]) . "\n\t\t\t\t\t\t");
                 } elseif ($arSection["ACTIVE"] == "N" && $arFields["ACTIVE"] == "Y") {
                     $this->RecalcGlobalActiveFlag($arSection);
                 } elseif ((!$arParent || $arParent["GLOBAL_ACTIVE"] == "Y") && $arSection["GLOBAL_ACTIVE"] == "N" && ($arSection["ACTIVE"] == "Y" || $arFields["ACTIVE"] == "Y")) {
                     $this->RecalcGlobalActiveFlag($arSection);
                 }
                 //Otherwise we may not to change anything
             } elseif (isset($arFields["ACTIVE"]) && $arFields["ACTIVE"] != $db_record["ACTIVE"]) {
                 //Make all children globally inactive
                 if ($arFields["ACTIVE"] == "N") {
                     $DB->Query("\n\t\t\t\t\t\t\tUPDATE b_iblock_section SET\n\t\t\t\t\t\t\t\tTIMESTAMP_X=" . ($DB->type == "ORACLE" ? "NULL" : "TIMESTAMP_X") . "\n\t\t\t\t\t\t\t\t,GLOBAL_ACTIVE = 'N'\n\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\tIBLOCK_ID = " . $db_record["IBLOCK_ID"] . "\n\t\t\t\t\t\t\t\tAND LEFT_MARGIN >= " . intval($db_record["LEFT_MARGIN"]) . "\n\t\t\t\t\t\t\t\tAND RIGHT_MARGIN <= " . intval($db_record["RIGHT_MARGIN"]) . "\n\t\t\t\t\t\t");
                 } else {
                     //Check for parent activity
                     $strSql = "\n\t\t\t\t\t\t\tSELECT ID, GLOBAL_ACTIVE\n\t\t\t\t\t\t\tFROM b_iblock_section\n\t\t\t\t\t\t\tWHERE IBLOCK_ID = " . $db_record["IBLOCK_ID"] . "\n\t\t\t\t\t\t\tAND ID = " . intval($db_record["IBLOCK_SECTION_ID"]) . "\n\t\t\t\t\t\t";
                     $rsParent = $DB->Query($strSql);
                     $arParent = $rsParent->Fetch();
                     //Parent is active
                     //and we changed
                     //so need to recalc
                     if (!$arParent || $arParent["GLOBAL_ACTIVE"] == "Y") {
                         $this->RecalcGlobalActiveFlag($db_record);
                     }
                 }
             }
         }
         if ($arIBlock["RIGHTS_MODE"] === "E") {
             $obSectionRights = new CIBlockSectionRights($arIBlock["ID"], $ID);
             //Check if parent changed with extended rights mode
             if (isset($arFields["IBLOCK_SECTION_ID"]) && $arFields["IBLOCK_SECTION_ID"] != $db_record["IBLOCK_SECTION_ID"]) {
                 $obSectionRights->ChangeParents(array($db_record["IBLOCK_SECTION_ID"]), array($arFields["IBLOCK_SECTION_ID"]));
             }
             if (array_key_exists("RIGHTS", $arFields) && is_array($arFields["RIGHTS"])) {
                 $obSectionRights->SetRights($arFields["RIGHTS"]);
             }
         }
         $uf_updated = $GLOBALS["USER_FIELD_MANAGER"]->Update("IBLOCK_" . $db_record["IBLOCK_ID"] . "_SECTION", $ID, $arFields);
         if ($uf_updated) {
             $DB->Query("UPDATE b_iblock_section SET TIMESTAMP_X = " . $DB->CurrentTimeFunction() . " WHERE ID = " . $ID);
         }
         if (CIBlock::GetArrayByID($db_record["IBLOCK_ID"], "SECTION_PROPERTY") === "Y" && array_key_exists("SECTION_PROPERTY", $arFields) && is_array($arFields["SECTION_PROPERTY"])) {
             CIBlockSectionPropertyLink::DeleteBySection($ID);
             foreach ($arFields["SECTION_PROPERTY"] as $PROPERTY_ID => $arLink) {
                 CIBlockSectionPropertyLink::Add($ID, $PROPERTY_ID, $arLink);
             }
         }
         if ($bUpdateSearch) {
             CIBlockSection::UpdateSearch($ID);
         }
         if ($arIBlock["FIELDS"]["LOG_SECTION_EDIT"]["IS_REQUIRED"] == "Y") {
             $USER_ID = is_object($USER) ? intval($USER->GetID()) : 0;
             $db_events = GetModuleEvents("main", "OnBeforeEventLog");
             $arEvent = $db_events->Fetch();
             if (!$arEvent || ExecuteModuleEventEx($arEvent, array($USER_ID)) === false) {
                 $rsSection = CIBlockSection::GetList(array(), array("=ID" => $ID), false, array("LIST_PAGE_URL", "NAME", "CODE"));
                 $arSection = $rsSection->GetNext();
                 $res = array("ID" => $ID, "CODE" => $arSection["CODE"], "NAME" => $arSection["NAME"], "SECTION_NAME" => $arIBlock["SECTION_NAME"], "USER_ID" => $USER_ID, "IBLOCK_PAGE_URL" => $arSection["LIST_PAGE_URL"]);
                 CEventLog::Log("IBLOCK", "IBLOCK_SECTION_EDIT", "iblock", $arIBlock["ID"], serialize($res));
             }
         }
         $Result = true;
         /*********** QUOTA ***************/
         $_SESSION["SESS_RECOUNT_DB"] = "Y";
         /*********** QUOTA ***************/
     }
     $arFields["ID"] = $ID;
     $arFields["IBLOCK_ID"] = $db_record["IBLOCK_ID"];
     $arFields["RESULT"] =& $Result;
     $events = GetModuleEvents("iblock", "OnAfterIBlockSectionUpdate");
     while ($arEvent = $events->Fetch()) {
         ExecuteModuleEventEx($arEvent, array(&$arFields));
     }
     if (defined("BX_COMP_MANAGED_CACHE")) {
         $GLOBALS["CACHE_MANAGER"]->ClearByTag("iblock_id_" . $arIBlock["ID"]);
     }
     return $Result;
 }
Example #8
0
 /**
  * <p>Метод изменяет параметры вопроса с идентификатором ID.</p>
  *
  *
  * @param int $ID  Идентификатор вопроса.
  *
  * @param array $arFields  Массив <b>Array("поле"=&gt;"значение", ...)</b>. Содержит значения <a
  * href="http://dev.1c-bitrix.ru/api_help/learning/fields.php#question">всех полей</a> вопроса.
  * Обязательные поля должны быть заполнены. <br>
  *
  * @return bool <p>Метод возвращает <i>true</i>, если изменение прошло успешно, при
  * возникновении ошибки метод вернёт <i>false</i>. При возникновении
  * ошибки в исключениях будет содержаться текст ошибки.</p>
  *
  * <h4>Example</h4> 
  * <pre>
  * &lt;?
  * if (CModule::IncludeModule("learning"))
  * {
  *     $QUESTION_ID = 600;
  * 
  *     $arFields = Array(
  *         "ACTIVE" =&gt; "N",
  *         "NAME" =&gt; "New name of question",
  *         "SORT" =&gt; "555",
  *     );
  * 
  *     $question = new CLQuestion;
  *     $success = $question-&gt;Update($QUESTION_ID, $arFields);
  * 
  *     if($success)
  *     {
  *         echo "Ok!";
  *     }
  *     else
  *     {
  *         if($e = $APPLICATION-&gt;GetException())
  *             echo "Error: ".$e-&gt;GetString();
  *     }
  * 
  * }
  * ?&gt;
  * </pre>
  *
  *
  * <h4>See Also</h4> 
  * <ul> <li> <a href="http://dev.1c-bitrix.ru/api_help/learning/fields.php#question">Поля вопроса</a> </li> <li>
  * <a href="http://dev.1c-bitrix.ru/api_help/learning/classes/clquestion/index.php">CLQuestion</a>::<a
  * href="http://dev.1c-bitrix.ru/api_help/learning/classes/clquestion/add.php">Add</a> </li> </ul> <a name="examples"></a>
  *
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/learning/classes/clquestion/update.php
  * @author Bitrix
  */
 public function Update($ID, $arFields)
 {
     global $DB, $USER_FIELD_MANAGER;
     $ID = intval($ID);
     if ($ID < 1) {
         return false;
     }
     if (is_set($arFields, "FILE_ID")) {
         if (strlen($arFields["FILE_ID"]["name"]) <= 0 && strlen($arFields["FILE_ID"]["del"]) <= 0 && strlen($arFields["FILE_ID"]["description"]) <= 0) {
             unset($arFields["FILE_ID"]);
         } else {
             $pic_res = $DB->Query("SELECT FILE_ID FROM b_learn_question WHERE ID=" . $ID);
             if ($pic_res = $pic_res->Fetch()) {
                 $arFields["FILE_ID"]["old_file"] = $pic_res["FILE_ID"];
             }
         }
     }
     if ($this->CheckFields($arFields, $ID) && $USER_FIELD_MANAGER->CheckFields('LEARNING_QUESTIONS', $ID, $arFields)) {
         unset($arFields["ID"]);
         $arBinds = array("DESCRIPTION" => $arFields["DESCRIPTION"], 'COMMENT_TEXT' => $arFields['COMMENT_TEXT'], 'INCORRECT_MESSAGE' => $arFields['INCORRECT_MESSAGE']);
         if (array_key_exists("FILE_ID", $arFields) && is_array($arFields["FILE_ID"]) && (!array_key_exists("MODULE_ID", $arFields["FILE_ID"]) || strlen($arFields["FILE_ID"]["MODULE_ID"]) <= 0)) {
             $arFields["FILE_ID"]["MODULE_ID"] = "learning";
         }
         CFile::SaveForDB($arFields, "FILE_ID", "learning");
         $USER_FIELD_MANAGER->Update('LEARNING_QUESTIONS', $ID, $arFields);
         $strUpdate = $DB->PrepareUpdate("b_learn_question", $arFields);
         if ($strUpdate !== '') {
             $strSql = "UPDATE b_learn_question SET " . $strUpdate . " WHERE ID=" . $ID;
             $DB->QueryBind($strSql, $arBinds, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         }
         foreach (GetModuleEvents('learning', 'OnAfterQuestionUpdate', true) as $arEvent) {
             ExecuteModuleEventEx($arEvent, array($ID, $arFields));
         }
         return true;
     }
     return false;
 }
Example #9
0
 /**
  * <p>Метод изменяет параметры группы с заданным идентификатором.</p> <p><b>Примечание</b>: при работе метода вызываются события <a href="http://dev.1c-bitrix.ru/api_help/socialnetwork/events/OnBeforeSocNetGroupUpdate.php">OnBeforeSocNetGroupUpdate</a> и <a href="http://dev.1c-bitrix.ru/api_help/socialnetwork/events/OnSocNetGroupUpdate.php">OnSocNetGroupUpdate</a>.</p>
  *
  *
  *
  *
  * @param int $ID  Идентификатор группы </htm
  *
  *
  *
  * @param array $arFields  Массив параметров группы, которые должны быть изменены. Ключами в
  * массиве являются названия параметров, а значениями - новые
  * значения. Допустимые ключи: <b>SITE_ID</b> - код сайта,<br><b>NAME</b> - название
  * группы,<br><b>DESCRIPTION</b> - описание группы,<br><b>VISIBLE</b> - флаг Y/N - видна ли
  * группа в списке групп,<br><b>OPENED</b> - флаг Y/N - открыта ли группа для
  * свободного вступления,<br><b>SUBJECT_ID</b> - код темы,<br><b>KEYWORDS</b> - ключевые
  * слова,<br><b>IMAGE_ID</b> - иконка группы,<br><b>INITIATE_PERMS</b> - кто имеет право на
  * приглашение пользователей в группу: SONET_ROLES_OWNER - только владелец
  * группы, SONET_ROLES_MODERATOR - владелец группы и модераторы группы,
  * SONET_ROLES_USER - все члены группы,<br><b>CLOSED</b> - флаг Y/N - является ли группа
  * архивной,<br><b>SPAM_PERMS</b> - кто имеет право на отправку сообщений в
  * группу: SONET_ROLES_OWNER - только владелец группы, SONET_ROLES_MODERATOR - владелец
  * группы и модераторы группы, SONET_ROLES_USER - все члены группы.
  *
  *
  *
  * @param bool $bAutoSubscribe = true Флаг автоподписки на уведомления. Необязательный. По умолчанию
  * равен true.
  *
  *
  *
  * @param bool $bClearCommonTag = true Необязательный. По умолчанию равен true.
  *
  *
  *
  * @return int <p>Метод возвращает код изменяемой группы или false в случае
  * ошибки.</p> <a name="examples"></a>
  *
  *
  * <h4>Example</h4> 
  * <pre>
  * &lt;?
  * $arFields = array(
  * 	"NAME" =&gt; $_POST["GROUP_NAME"],
  * 	"DESCRIPTION" =&gt; $_POST["GROUP_DESCRIPTION"],
  * );
  * if (!CSocNetGroup::Update($ID, $arFields))
  * {
  * 	if ($e = $GLOBALS["APPLICATION"]-&gt;GetException())
  * 		$errorMessage .= $e-&gt;GetString();
  * }
  * ?&gt;
  * </pre>
  *
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/socialnetwork/classes/CSocNetGroup/update.php
  * @author Bitrix
  */
 public static function Update($ID, $arFields, $bAutoSubscribe = true, $bClearCommonTag = true)
 {
     global $DB;
     if (!CSocNetGroup::__ValidateID($ID)) {
         return false;
     }
     $ID = IntVal($ID);
     $arGroupOld = CSocNetGroup::GetByID($ID);
     if (!$arGroupOld) {
         $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_NO_GROUP"), "ERROR_NO_GROUP");
         return false;
     }
     $arFields1 = array();
     foreach ($arFields as $key => $value) {
         if (substr($key, 0, 1) == "=") {
             $arFields1[substr($key, 1)] = $value;
             unset($arFields[$key]);
         }
     }
     if (!CSocNetGroup::CheckFields("UPDATE", $arFields, $ID)) {
         return false;
     } else {
         $arSiteID = array();
         if (is_set($arFields, "SITE_ID")) {
             if (is_array($arFields["SITE_ID"])) {
                 $arSiteID = $arFields["SITE_ID"];
             } else {
                 $arSiteID[] = $arFields["SITE_ID"];
             }
             $arFields["SITE_ID"] = false;
             $str_SiteID = "''";
             foreach ($arSiteID as $v) {
                 $arFields["SITE_ID"] = $v;
                 $str_SiteID .= ", '" . $DB->ForSql($v) . "'";
             }
         }
     }
     $db_events = GetModuleEvents("socialnetwork", "OnBeforeSocNetGroupUpdate");
     while ($arEvent = $db_events->Fetch()) {
         if (ExecuteModuleEventEx($arEvent, array($ID, &$arFields)) === false) {
             return false;
         }
     }
     if (array_key_exists("IMAGE_ID", $arFields) && is_array($arFields["IMAGE_ID"]) && (!array_key_exists("MODULE_ID", $arFields["IMAGE_ID"]) || strlen($arFields["IMAGE_ID"]["MODULE_ID"]) <= 0)) {
         $arFields["IMAGE_ID"]["MODULE_ID"] = "socialnetwork";
     }
     CFile::SaveForDB($arFields, "IMAGE_ID", "socialnetwork");
     $strUpdate = $DB->PrepareUpdate("b_sonet_group", $arFields);
     foreach ($arFields1 as $key => $value) {
         if (strlen($strUpdate) > 0) {
             $strUpdate .= ", ";
         }
         $strUpdate .= $key . "=" . $value . " ";
     }
     if (strlen($strUpdate) > 0) {
         $strSql = "UPDATE b_sonet_group SET " . "\t" . $strUpdate . " " . "WHERE ID = " . $ID . " ";
         $DB->Query($strSql, False, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         if (count($arSiteID) > 0) {
             $strSql = "DELETE FROM b_sonet_group_site WHERE GROUP_ID=" . $ID;
             $DB->Query($strSql, false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__);
             $strSql = "INSERT INTO b_sonet_group_site(GROUP_ID, SITE_ID) " . "SELECT " . $ID . ", LID " . "FROM b_lang " . "WHERE LID IN (" . $str_SiteID . ") ";
             $DB->Query($strSql, false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__);
             $arLogID = array();
             $dbResult = CSocNetLog::GetList(array(), array("LOG_RIGHTS" => "SG" . $ID), false, false, array("ID"));
             while ($arResult = $dbResult->Fetch()) {
                 $DB->Query("DELETE FROM b_sonet_log_site WHERE LOG_ID = " . $arResult["ID"] . "", false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__);
                 $DB->Query("\n\t\t\t\t\t\tINSERT INTO b_sonet_log_site(LOG_ID, SITE_ID)\n\t\t\t\t\t\tSELECT " . $arResult["ID"] . ", LID\n\t\t\t\t\t\tFROM b_lang\n\t\t\t\t\t\tWHERE LID IN (" . $str_SiteID . ")\n\t\t\t\t\t", false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__);
                 $arLogID[] = $arResult["ID"];
             }
             $dbResult = CSocNetLog::GetList(array(), array("!ID" => $arLogID, "ENTITY_ID" => $ID, "ENTITY_TYPE" => SONET_ENTITY_GROUP), false, false, array("ID"));
             while ($arResult = $dbResult->Fetch()) {
                 $DB->Query("DELETE FROM b_sonet_log_site WHERE LOG_ID = " . $arResult["ID"] . "", false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__);
                 $DB->Query("\n\t\t\t\t\t\tINSERT INTO b_sonet_log_site(LOG_ID, SITE_ID)\n\t\t\t\t\t\tSELECT " . $arResult["ID"] . ", LID\n\t\t\t\t\t\tFROM b_lang\n\t\t\t\t\t\tWHERE LID IN (" . $str_SiteID . ")\n\t\t\t\t\t", false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__);
             }
         }
         unset($GLOBALS["SONET_GROUP_CACHE"][$ID]);
         if (defined("BX_COMP_MANAGED_CACHE")) {
             if ($bClearCommonTag) {
                 $GLOBALS["CACHE_MANAGER"]->ClearByTag("sonet_group");
             }
             $GLOBALS["CACHE_MANAGER"]->ClearByTag("sonet_group_" . $ID);
             $GLOBALS["CACHE_MANAGER"]->ClearByTag("sonet_user2group_G" . $ID);
             $GLOBALS["CACHE_MANAGER"]->ClearByTag("sonet_user2group");
         }
         $GLOBALS["USER_FIELD_MANAGER"]->Update("SONET_GROUP", $ID, $arFields);
         $events = GetModuleEvents("socialnetwork", "OnSocNetGroupUpdate");
         while ($arEvent = $events->Fetch()) {
             ExecuteModuleEventEx($arEvent, array($ID, &$arFields));
         }
         if (CModule::IncludeModule("search")) {
             $arGroupNew = CSocNetGroup::GetByID($ID);
             if ($arGroupNew) {
                 if ($arGroupNew["ACTIVE"] == "N" && $arGroupOld["ACTIVE"] == "Y") {
                     CSearch::DeleteIndex("socialnetwork", "G" . $ID);
                 } elseif ($arGroupNew["ACTIVE"] == "Y") {
                     $BODY = CSocNetTextParser::killAllTags($arGroupNew["~DESCRIPTION"]);
                     $BODY .= $GLOBALS["USER_FIELD_MANAGER"]->OnSearchIndex("SONET_GROUP", $ID);
                     $arSearchIndexSiteID = array();
                     $rsGroupSite = CSocNetGroup::GetSite($ID);
                     while ($arGroupSite = $rsGroupSite->Fetch()) {
                         $arSearchIndexSiteID[$arGroupSite["LID"]] = str_replace("#group_id#", $ID, COption::GetOptionString("socialnetwork", "group_path_template", "/workgroups/group/#group_id#/", $arGroupSite["LID"]));
                     }
                     $arSearchIndex = array("SITE_ID" => $arSearchIndexSiteID, "LAST_MODIFIED" => $arGroupNew["DATE_ACTIVITY"], "PARAM1" => $arGroupNew["SUBJECT_ID"], "PARAM2" => $ID, "PARAM3" => "GROUP", "PERMISSIONS" => $arGroupNew["VISIBLE"] == "Y" ? array('G2') : array('SG' . $ID . '_A', 'SG' . $ID . '_E', 'SG' . $ID . '_K'), "PARAMS" => array("socnet_group" => $ID, "entity" => "socnet_group"), "TITLE" => $arGroupNew["~NAME"], "BODY" => $BODY, "TAGS" => $arGroupNew["~KEYWORDS"]);
                     CSearch::Index("socialnetwork", "G" . $ID, $arSearchIndex, True);
                 }
                 if ($arGroupNew["OPENED"] == "Y" && $arGroupOld["OPENED"] == "N") {
                     $dbRequests = CSocNetUserToGroup::GetList(array(), array("GROUP_ID" => $ID, "ROLE" => SONET_ROLES_REQUEST, "INITIATED_BY_TYPE" => SONET_INITIATED_BY_USER), false, false, array("ID"));
                     if ($dbRequests) {
                         $arIDs = array();
                         while ($arRequests = $dbRequests->GetNext()) {
                             $arIDs[] = $arRequests["ID"];
                         }
                         CSocNetUserToGroup::ConfirmRequestToBeMember($GLOBALS["USER"]->GetID(), $ID, $arIDs, $bAutoSubscribe);
                     }
                 }
             }
         }
     } elseif (!$GLOBALS["USER_FIELD_MANAGER"]->Update("SONET_GROUP", $ID, $arFields)) {
         $ID = False;
     }
     return $ID;
 }
 function Update($ID, $arFields)
 {
     global $DB;
     $ID = IntVal($ID);
     if (!CSalePaySystemAction::CheckFields("UPDATE", $arFields)) {
         return false;
     }
     if (array_key_exists("LOGOTIP", $arFields) && is_array($arFields["LOGOTIP"])) {
         $arFields["LOGOTIP"]["MODULE_ID"] = "sale";
     }
     CFile::SaveForDB($arFields, "LOGOTIP", "sale/paysystem/logotip");
     $strUpdate = $DB->PrepareUpdate("b_sale_pay_system_action", $arFields);
     $strSql = "UPDATE b_sale_pay_system_action SET " . $strUpdate . " WHERE ID = " . $ID . "";
     $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     return $ID;
 }
Example #11
0
	/**
	 * <p>Метод изменяет параметры вопроса с идентификатором ID.</p>
	 *
	 *
	 *
	 *
	 * @param int $ID  Идентификатор вопроса.
	 *
	 *
	 *
	 * @param array $arFields  Массив <b>Array("поле"=&gt;"значение", ...)</b>. Содержит значения <a
	 * href="http://dev.1c-bitrix.ru/api_help/learning/fields.php#question">всех полей</a> вопроса.
	 * Обязательные поля должны быть заполнены. <br>
	 *
	 *
	 *
	 * @return bool <p>Метод возвращает <i>true</i>, если изменение прошло успешно, при
	 * возникновении ошибки функция вернёт <i>false</i>. При возникновении
	 * ошибки в исключениях будет содержаться текст ошибки.</p>
	 *
	 *
	 * <h4>Example</h4> 
	 * <pre>
	 * &lt;?
	 * if (CModule::IncludeModule("learning"))
	 * {
	 *     $QUESTION_ID = 600;
	 * 
	 *     $arFields = Array(
	 *         "ACTIVE" =&gt; "N",
	 *         "NAME" =&gt; "New name of question",
	 *         "SORT" =&gt; "555",
	 *     );
	 * 
	 *     $question = new CLQuestion;
	 *     $success = $question-&gt;Update($QUESTION_ID, $arFields);
	 * 
	 *     if($success)
	 *     {
	 *         echo "Ok!";
	 *     }
	 *     else
	 *     {
	 *         if($e = $APPLICATION-&gt;GetException())
	 *             echo "Error: ".$e-&gt;GetString();
	 *     }
	 * 
	 * }
	 * ?&gt;
	 * </pre>
	 *
	 *
	 *
	 * <h4>See Also</h4> 
	 * <ul> <li> <a href="http://dev.1c-bitrix.ru/api_help/learning/fields.php#question">Поля вопроса</a> </li> <li>
	 * <a href="http://dev.1c-bitrix.ru/api_help/learning/classes/clquestion/index.php">CLQuestion</a>::<a
	 * href="http://dev.1c-bitrix.ru/api_help/learning/classes/clquestion/add.php">Add</a> </li> </ul><a name="examples"></a>
	 *
	 *
	 * @link http://dev.1c-bitrix.ru/api_help/learning/classes/clquestion/update.php
	 * @author Bitrix
	 */
	public function Update($ID, $arFields)
	{
		global $DB;

		$ID = intval($ID);
		if ($ID < 1) return false;

		if (is_set($arFields, "FILE_ID"))
		{
			if(strlen($arFields["FILE_ID"]["name"])<=0 && strlen($arFields["FILE_ID"]["del"])<=0 && strlen($arFields["FILE_ID"]["description"])<=0)
				unset($arFields["FILE_ID"]);
			else
			{
				$pic_res = $DB->Query("SELECT FILE_ID FROM b_learn_question WHERE ID=".$ID);
				if($pic_res = $pic_res->Fetch())
					$arFields["FILE_ID"]["old_file"]=$pic_res["FILE_ID"];
			}
		}

		if ($this->CheckFields($arFields, $ID))
		{
			unset($arFields["ID"]);

			$arBinds=Array(
				"DESCRIPTION"       => $arFields["DESCRIPTION"],
				'COMMENT_TEXT'      => $arFields['COMMENT_TEXT'],
				'INCORRECT_MESSAGE' => $arFields['INCORRECT_MESSAGE']
			);

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

			CFile::SaveForDB($arFields, "FILE_ID", "learning");

			$strUpdate = $DB->PrepareUpdate("b_learn_question", $arFields);
			$strSql = "UPDATE b_learn_question SET ".$strUpdate." WHERE ID=".$ID;
			$DB->QueryBind($strSql, $arBinds, false, "File: ".__FILE__."<br>Line: ".__LINE__);

			return true;
		}
		return false;
	}
Example #12
0
 protected function CheckFields($action, &$arFields)
 {
     global $USER;
     if ($action === 'ADD') {
         if (isset($arFields["EXTERNAL_AUTH_ID"]) && strlen($arFields["EXTERNAL_AUTH_ID"]) <= 0) {
             return false;
         }
         if (isset($arFields["SITE_ID"]) && strlen($arFields["SITE_ID"]) <= 0) {
             $arFields["SITE_ID"] = SITE_ID;
         }
         if (!isset($arFields["USER_ID"])) {
             $arFields["USER_ID"] = $USER->GetID();
         }
         $dbCheck = CSocServAuthDB::GetList(array(), array("USER_ID" => $arFields["USER_ID"], "EXTERNAL_AUTH_ID" => $arFields["EXTERNAL_AUTH_ID"]), false, false, array("ID"));
         if ($dbCheck->Fetch()) {
             return false;
         }
     }
     if (is_set($arFields, "PERSONAL_PHOTO")) {
         $res = CFile::CheckImageFile($arFields["PERSONAL_PHOTO"]);
         if (strlen($res) > 0) {
             unset($arFields["PERSONAL_PHOTO"]);
         } else {
             $arFields["PERSONAL_PHOTO"]["MODULE_ID"] = "socialservices";
             CFile::SaveForDB($arFields, "PERSONAL_PHOTO", "socialservices");
         }
     }
     return true;
 }
Example #13
0
 function Update($ID, $arFields)
 {
     global $DB;
     $ID = IntVal($ID);
     if (strlen($arFields["PATH"]) > 0) {
         $arFields["PATH"] = str_replace("#post_id#", $ID, $arFields["PATH"]);
     }
     $arFields1 = array();
     foreach ($arFields as $key => $value) {
         if (substr($key, 0, 1) == "=") {
             $arFields1[substr($key, 1)] = $value;
             unset($arFields[$key]);
         }
     }
     if (!CBlogPost::CheckFields("UPDATE", $arFields, $ID)) {
         return false;
     } elseif (!$GLOBALS["USER_FIELD_MANAGER"]->CheckFields("BLOG_POST", $ID, $arFields)) {
         return false;
     }
     $db_events = GetModuleEvents("blog", "OnBeforePostUpdate");
     while ($arEvent = $db_events->Fetch()) {
         if (ExecuteModuleEventEx($arEvent, array($ID, &$arFields)) === false) {
             return false;
         }
     }
     $arOldPost = CBlogPost::GetByID($ID);
     if (is_array($arFields["ATTACH_IMG"])) {
         if (!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);
     }
     $strUpdate = $DB->PrepareUpdate("b_blog_post", $arFields);
     foreach ($arFields1 as $key => $value) {
         if (strlen($strUpdate) > 0) {
             $strUpdate .= ", ";
         }
         $strUpdate .= $key . "=" . $value . " ";
     }
     if (strlen($strUpdate) > 0) {
         $oldPostPerms = CBlogUserGroup::GetGroupPerms(1, $arOldPost["BLOG_ID"], $ID, BLOG_PERMS_POST);
         $strSql = "UPDATE b_blog_post SET " . "\t" . $strUpdate . " " . "WHERE ID = " . $ID . " ";
         $DB->Query($strSql, False, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         unset($GLOBALS["BLOG_POST"]["BLOG_POST_CACHE_" . $ID]);
         $GLOBALS["USER_FIELD_MANAGER"]->Update("BLOG_POST", $ID, $arFields);
     } else {
         $ID = False;
     }
     if ($ID) {
         $arNewPost = CBlogPost::GetByID($ID);
         if ($arNewPost["PUBLISH_STATUS"] != $arOldPost["PUBLISH_STATUS"] || $arNewPost["BLOG_ID"] != $arOldPost["BLOG_ID"]) {
             CBlog::SetStat($arNewPost["BLOG_ID"]);
         }
         if ($arNewPost["BLOG_ID"] != $arOldPost["BLOG_ID"]) {
             CBlog::SetStat($arOldPost["BLOG_ID"]);
         }
         if (is_set($arFields, "PERMS_POST")) {
             CBlogPost::SetPostPerms($ID, $arFields["PERMS_POST"], BLOG_PERMS_POST);
         }
         if (is_set($arFields, "PERMS_COMMENT")) {
             CBlogPost::SetPostPerms($ID, $arFields["PERMS_COMMENT"], BLOG_PERMS_COMMENT);
         }
         if (array_key_exists("SOCNET_RIGHTS", $arFields)) {
             $arFields["SC_PERM_OLD"] = CBlogPost::GetSocNetPermsCode($ID);
             $arFields["SC_PERM"] = CBlogPost::UpdateSocNetPerms($ID, $arFields["SOCNET_RIGHTS"], $arNewPost);
         }
         $db_events = GetModuleEvents("blog", "OnPostUpdate");
         while ($arEvent = $db_events->Fetch()) {
             ExecuteModuleEventEx($arEvent, array($ID, &$arFields));
         }
         if (CModule::IncludeModule("search")) {
             $newPostPerms = CBlogUserGroup::GetGroupPerms(1, $arNewPost["BLOG_ID"], $ID, BLOG_PERMS_POST);
             $arBlog = CBlog::GetByID($arNewPost["BLOG_ID"]);
             if ($arOldPost["PUBLISH_STATUS"] == BLOG_PUBLISH_STATUS_PUBLISH && $oldPostPerms >= BLOG_PERMS_READ && ($arNewPost["PUBLISH_STATUS"] != BLOG_PUBLISH_STATUS_PUBLISH || $newPostPerms < BLOG_PERMS_READ) || $arBlog["SEARCH_INDEX"] != "Y") {
                 CSearch::Index("blog", "P" . $ID, array("TITLE" => "", "BODY" => ""));
                 CSearch::DeleteIndex("blog", false, "COMMENT", $arBlog["ID"] . "|" . $ID);
             } elseif ($arNewPost["DATE_PUBLISHED"] == "Y" && $arNewPost["PUBLISH_STATUS"] == BLOG_PUBLISH_STATUS_PUBLISH && $newPostPerms >= BLOG_PERMS_READ && $arBlog["SEARCH_INDEX"] == "Y") {
                 $tag = "";
                 $arGroup = CBlogGroup::GetByID($arBlog["GROUP_ID"]);
                 if (strlen($arFields["PATH"]) > 0) {
                     $arPostSite = array($arGroup["SITE_ID"] => $arFields["PATH"]);
                 } elseif (strlen($arNewPost["PATH"]) > 0) {
                     if (strlen($arNewPost["CODE"]) > 0) {
                         $arNewPost["PATH"] = str_replace("#post_id#", $arNewPost["CODE"], $arNewPost["PATH"]);
                     } else {
                         $arNewPost["PATH"] = str_replace("#post_id#", $ID, $arNewPost["PATH"]);
                     }
                     $arPostSite = array($arGroup["SITE_ID"] => $arNewPost["PATH"]);
                 } else {
                     $arPostSite = array($arGroup["SITE_ID"] => CBlogPost::PreparePath($arBlog["URL"], $arNewPost["ID"], $arGroup["SITE_ID"], false, $arBlog["OWNER_ID"], $arBlog["SOCNET_GROUP_ID"]));
                 }
                 if (strlen($arNewPost["CATEGORY_ID"]) > 0) {
                     $arC = explode(",", $arNewPost["CATEGORY_ID"]);
                     $arTag = array();
                     foreach ($arC as $v) {
                         $arCategory = CBlogCategory::GetByID($v);
                         $arTag[] = $arCategory["NAME"];
                     }
                     $tag = implode(",", $arTag);
                 }
                 $arSearchIndex = array("SITE_ID" => $arPostSite, "LAST_MODIFIED" => $arNewPost["DATE_PUBLISH"], "PARAM1" => "POST", "PARAM2" => $arNewPost["BLOG_ID"], "PARAM3" => $arNewPost["ID"], "PERMISSIONS" => array(2), "TITLE" => $arNewPost["TITLE"], "BODY" => blogTextParser::killAllTags($arNewPost["DETAIL_TEXT"]), "TAGS" => $tag, "USER_ID" => $arNewPost["AUTHOR_ID"], "ENTITY_TYPE_ID" => "BLOG_POST", "ENTITY_ID" => $arNewPost["ID"]);
                 $bIndexComment = false;
                 if ($arBlog["USE_SOCNET"] == "Y") {
                     if (!empty($arFields["SC_PERM"])) {
                         $arSearchIndex["PERMISSIONS"] = $arFields["SC_PERM"];
                         if ($arFields["SC_PERM"] != $arFields["SC_PERM_OLD"]) {
                             $bIndexComment = true;
                         }
                     } else {
                         $arSearchIndex["PERMISSIONS"] = CBlogPost::GetSocnetPermsCode($ID);
                     }
                 }
                 CSearch::Index("blog", "P" . $ID, $arSearchIndex, True);
                 if ($arOldPost["PUBLISH_STATUS"] != BLOG_PUBLISH_STATUS_PUBLISH && $arNewPost["PUBLISH_STATUS"] == BLOG_PUBLISH_STATUS_PUBLISH || $bIndexComment) {
                     $arParamsComment = array("BLOG_ID" => $arBlog["ID"], "POST_ID" => $ID, "SITE_ID" => $arGroup["SITE_ID"], "PATH" => $arPostSite[$arGroup["SITE_ID"]] . "?commentId=#comment_id###comment_id#", "BLOG_URL" => $arBlog["URL"], "OWNER_ID" => $arBlog["OWNER_ID"], "SOCNET_GROUP_ID" => $arBlog["SOCNET_GROUP_ID"], "USE_SOCNET" => $arBlog["USE_SOCNET"]);
                     CBlogComment::_IndexPostComments($arParamsComment);
                 }
             }
         }
     }
     return $ID;
 }
 function Update($id, $fields)
 {
     if (\Bitrix\Main\Config\Option::get('main', '~sale_paysystem_converted') == 'Y') {
         $id = (int) $id;
         if (isset($fields['ACTION_FILE'])) {
             $map = self::getOldToNewHandlersMap();
             if (isset($map[$fields['ACTION_FILE']])) {
                 $fields['ACTION_FILE'] = $map[$fields['ACTION_FILE']];
             }
         }
         if (!CSalePaySystemAction::CheckFields("UPDATE", $fields)) {
             return false;
         }
         if (array_key_exists("LOGOTIP", $fields) && is_array($fields["LOGOTIP"])) {
             $fields["LOGOTIP"]["MODULE_ID"] = "sale";
         }
         CFile::SaveForDB($fields, "LOGOTIP", "sale/paysystem/logotip");
         if (isset($fields['PARAMS'])) {
             $params = unserialize($fields['PARAMS']);
             if (!isset($params['BX_PAY_SYSTEM_ID'])) {
                 $params['BX_PAY_SYSTEM_ID'] = array('TYPE' => '', 'VALUE' => $id);
             }
             $fields['PARAMS'] = serialize($params);
         }
         $result = PaySystemActionTable::update($id, $fields);
         if ($result->isSuccess()) {
             if (array_key_exists('PARAMS', $fields)) {
                 $params = self::prepareParamsForBusVal($id, $fields);
                 foreach ($params as $item) {
                     \Bitrix\Sale\BusinessValue::setMapping($item['CODE'], $item['CONSUMER'], $item['PERSON_TYPE_ID'], $item['MAP']);
                 }
             }
             if ($fields['PERSON_TYPE_ID']) {
                 $params = array('filter' => array("SERVICE_ID" => $id, "SERVICE_TYPE" => \Bitrix\Sale\Services\PaySystem\Restrictions\Manager::SERVICE_TYPE_PAYMENT, "=CLASS_NAME" => '\\Bitrix\\Sale\\Services\\PaySystem\\Restrictions\\PersonType'));
                 $dbRes = \Bitrix\Sale\Internals\ServiceRestrictionTable::getList($params);
                 if ($data = $dbRes->fetch()) {
                     $restrictionId = $data['ID'];
                 } else {
                     $restrictionId = 0;
                 }
                 $fields = array("SERVICE_ID" => $id, "SERVICE_TYPE" => \Bitrix\Sale\Services\PaySystem\Restrictions\Manager::SERVICE_TYPE_PAYMENT, "SORT" => 100, "PARAMS" => array('PERSON_TYPE_ID' => array($fields['PERSON_TYPE_ID'])));
                 \Bitrix\Sale\Services\PaySystem\Restrictions\PersonType::save($fields, $restrictionId);
             }
             return $id;
         }
         return false;
     } else {
         global $DB;
         $arFields = $fields;
         $ID = IntVal($id);
         if (!CSalePaySystemAction::CheckFields("UPDATE", $arFields)) {
             return false;
         }
         if (array_key_exists("LOGOTIP", $arFields) && is_array($arFields["LOGOTIP"])) {
             $arFields["LOGOTIP"]["MODULE_ID"] = "sale";
         }
         CFile::SaveForDB($arFields, "LOGOTIP", "sale/paysystem/logotip");
         $strUpdate = $DB->PrepareUpdate("b_sale_pay_system_action", $arFields);
         $strSql = "UPDATE b_sale_pay_system_action SET " . $strUpdate . " WHERE ID = " . $ID . "";
         $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         return $ID;
     }
 }
Example #15
0
 /**
  * @param $arFields
  * @param array $arOptions
  * @return bool|int
  * @throws Exception
  * @deprecated
  */
 static function Add($arFields, $arOptions = array())
 {
     $fields = array_intersect_key($arFields, Bitrix\Sale\Delivery\Services\Table::getMap());
     if (array_key_exists("LOGOTIP", $arFields) && is_array($arFields["LOGOTIP"])) {
         $arFields["LOGOTIP"]["MODULE_ID"] = "sale";
         CFile::SaveForDB($arFields, "LOGOTIP", "sale/delivery/logotip");
         $fields["LOGOTIP"] = $arFields["LOGOTIP"];
     }
     $fields["CODE"] = isset($arFields["CODE"]) ? $arFields["CODE"] : strval(mktime());
     $fields["PARENT_ID"] = 0;
     $fields["CLASS_NAME"] = '\\Bitrix\\Sale\\Delivery\\Services\\Configurable';
     $fields["CONFIG"] = array("MAIN" => array("PRICE" => $arFields["PRICE"], "PERIOD" => array("FROM" => $arFields["PERIOD_FROM"], "TO" => $arFields["PERIOD_TO"], "TYPE" => $arFields["PERIOD_TYPE"])));
     $res = \Bitrix\Sale\Delivery\Services\Table::add($fields);
     if (!$res->isSuccess()) {
         return false;
     }
     $newId = $res->getId();
     $res = \Bitrix\Sale\Delivery\Restrictions\Table::add(array("DELIVERY_ID" => $newId, "CLASS_NAME" => '\\Bitrix\\Sale\\Delivery\\Restrictions\\BySite', "PARAMS" => array("SITE_ID" => array($arFields["LID"]))));
     if (intval($arFields["WEIGHT_FROM"]) > 0 || intval($arFields["WEIGHT_TO"]) > 0) {
         $res = \Bitrix\Sale\Delivery\Restrictions\Table::add(array("DELIVERY_ID" => $newId, "CLASS_NAME" => '\\Bitrix\\Sale\\Delivery\\Restrictions\\ByWeight', "PARAMS" => array("MIN_WEIGHT" => $arFields["WEIGHT_FROM"], "MAX_WEIGHT" => $arFields["WEIGHT_TO"])));
     }
     if (intval($arFields["ORDER_PRICE_FROM"]) > 0 || intval($arFields["ORDER_PRICE_TO"]) > 0) {
         $res = \Bitrix\Sale\Delivery\Restrictions\Table::add(array("DELIVERY_ID" => $newId, "CLASS_NAME" => '\\Bitrix\\Sale\\Delivery\\Restrictions\\ByPrice', "PARAMS" => array("MIN_PRICE" => $arFields["ORDER_PRICE_FROM"], "MAX_PRICE" => $arFields["ORDER_PRICE_TO"], "CURRENCY" => $arFields["ORDER_CURRENCY"])));
     }
     if (isset($arFields["LOCATIONS"]) && is_array($arFields["LOCATIONS"])) {
         Helper::resetLocationsForEntity($newId, $arFields['LOCATIONS'], self::CONN_ENTITY_NAME, !!$arOptions['EXPECT_LOCATION_CODES']);
     }
     if (isset($arFields["PAY_SYSTEM"])) {
         CSaleDelivery::UpdateDeliveryPay($newId, $arFields["PAY_SYSTEM"]);
     }
     if (isset($arFields["STORE"])) {
         $stores = unserialize($arFields["STORE"]);
         if ($stores) {
             \Bitrix\Sale\Delivery\ExtraServices\Manager::saveStores($newId, $stores);
         }
     }
     return $newId;
 }
Example #16
0
	function Set($SID, $arData, $SITE_ID = false)
	{
		if(!self::CheckFields($arData))
			return false;

		if ($SITE_ID == 'ALL')
			$SITE_ID = false;

		if (!defined('SALE_DH_INITIALIZED'))
			CSaleDeliveryHandler::Initialize();

		global $APPLICATION, $DB;

		$rsHandlerDataFull = CSaleDeliveryHandler::GetBySID($SID, $SITE_ID);

		if ($arHandlerDataFull = $rsHandlerDataFull->Fetch())
		{
			$bInstalled = $arHandlerDataFull["INSTALLED"] == "Y";

			$DB->StartTransaction();

			$arQueryFields = array();

			if ($SITE_ID)
				$arQueryFields["LID"] = "'".($SITE_ID == "ALL" ? "" : $DB->ForSql($SITE_ID))."'";
			else
				$arQueryFields["LID"] = "''";

			if (is_set($arData, "ACTIVE"))
				$arQueryFields["ACTIVE"] = $arData["ACTIVE"] == 'Y' ? "'Y'" : "'N'";
			elseif ($bInstalled)
				$arQueryFields["ACTIVE"] = "'N'";

			if (!$bInstalled)
			{
				$arQueryFields["HID"] = "'".$DB->ForSql($SID)."'";
			}

			if (is_set($arData, "SORT"))
				$arQueryFields["SORT"] = "'".intval($arData["SORT"])."'";
			elseif (!$bInstalled)
				$arQueryFields["SORT"] = '100';

			if (is_set($arData, "NAME"))
				$arQueryFields["NAME"] = "'".$DB->ForSql($arData["NAME"])."'";
			elseif (!$bInstalled)
				$arQueryFields["NAME"] = "'".$DB->ForSql($arHandlerDataFull['NAME'])."'";

			if (is_set($arData, "DESCRIPTION"))
				$arQueryFields["DESCRIPTION"] = "'".$DB->ForSql($arData["DESCRIPTION"])."'";
			elseif (!$bInstalled)
				$arQueryFields["DESCRIPTION"] = "'".$DB->ForSql($arHandlerDataFull['DESCRIPTION'])."'";

			if (is_set($arData, "HANDLER"))
				$arQueryFields["HANDLER"] = "'".$DB->ForSql($arData["HANDLER"])."'";
			elseif (!$bInstalled)
				$arQueryFields["HANDLER"] = "'".$DB->ForSql($arHandlerDataFull['HANDLER'])."'";

			if (is_set($arData, "TAX_RATE"))
				$arQueryFields["TAX_RATE"] = "'".doubleval($arData["TAX_RATE"])."'";
			elseif (!$bInstalled)
				$arQueryFields["TAX_RATE"] = 0;

			if (is_set($arData, "BASE_CURRENCY"))
				$arQueryFields["BASE_CURRENCY"] = "'".$DB->ForSql($arData["BASE_CURRENCY"])."'";
			elseif (!$bInstalled)
				$arQueryFields["BASE_CURRENCY"] = '';

			//save logotip
			if (!$bInstalled && (!isset($arData["LOGOTIP"]) || count($arData["LOGOTIP"]) <= 1))
			{
				$logo = "";
				if (is_set($arData, "HANDLER"))
					$arPath = pathinfo($arData["HANDLER"]);
				elseif (!$bInstalled)
					$arPath = pathinfo($arHandlerDataFull["HANDLER"]);

				if (!strpos($arPath["dirname"], ":"))
					$arPath["dirname"] = $_SERVER["DOCUMENT_ROOT"].$arPath["dirname"];

				if (file_exists($arPath["dirname"]."/".$SID."_logo.png"))
					$logo = $arPath["dirname"]."/".$SID."_logo.png";
				elseif (file_exists($arPath["dirname"]."/".$SID."_logo.jpg"))
					$logo = $arPath["dirname"]."/".$SID."_logo.jpg";
				elseif (file_exists($arPath["dirname"]."/".$SID."_logo.gif"))
					$logo = $arPath["dirname"]."/".$SID."_logo.gif";

				if(strlen($logo) > 0)
				{
					$arData["LOGOTIP"] = CFile::MakeFileArray($logo);
					$arData["LOGOTIP"]["MODULE_ID"] = "sale";
				}
			}

			$bDelLogotip = false;
			if ($arData["LOGOTIP"]["del"] == "Y")
				$bDelLogotip = true;

			CFile::SaveForDB($arData, "LOGOTIP", "sale/delivery/logotip");

			if (is_set($arData, 'LOGOTIP') && intval($arData["LOGOTIP"]) > 0)
				$arQueryFields["LOGOTIP"] = $arData["LOGOTIP"];

			if ($bDelLogotip)
				$arQueryFields["LOGOTIP"] = 'NULL';

			if (is_set($arData, "CONFIG"))
			{
				if (is_callable($arHandlerDataFull["DBSETSETTINGS"]))
				{
					if (!$strSettings = call_user_func($arHandlerDataFull["DBSETSETTINGS"], $arData["CONFIG"]))
					{
						$DB->Rollback();
						return false;
					}
				}
				else
				{
					$strSettings = serialize($arData["CONFIG"]);
				}
				$arQueryFields["SETTINGS"] = "'".$DB->ForSql($strSettings)."'";
			}
			/*
			if (is_set($arData, "PROFILE_USE_DEFAULT") && $arData["PROFILE_USE_DEFAULT"] == 'Y')
				$arQueryFields["PROFILES"] = "''";
			else
			{*/
				if (is_array($arData["PROFILES"]) && count($arData["PROFILES"]) > 0)
					$arQueryFields["PROFILES"] = "'".$DB->ForSql(serialize($arData["PROFILES"]))."'";
				elseif (!$bInstalled)
					$arQueryFields["PROFILES"] = "''";
			/*}*/


			if ($bInstalled)
			{
				if ($rsHandlerDataFull->SelectedRowsCount() > 1 && $SITE_ID === false)
				{
					$DB->Query("DELETE FROM b_sale_delivery_handler WHERE HID='".$DB->ForSql($SID)."' AND LID<>'".$DB->ForSql($arHandlerDataFull['LID'])."'");
					$SITE_ID = $arHandlerDataFull['LID'];
				}
				elseif ($arHandlerDataFull["LID"] == '' && $SITE_ID !== false)
				{
					CSaleDeliveryHandler::__spreadHandlerData($SID);
				}

				$strWhere = "WHERE HID='".$DB->ForSql($SID)."'";
				if ($SITE_ID) $strWhere .= " AND LID='".$DB->ForSql($SITE_ID)."'";

				$DB->Update("b_sale_delivery_handler", $arQueryFields, $strWhere);
			}
			else
			{
				$DB->Insert("b_sale_delivery_handler", $arQueryFields);
			}

			$DB->Commit();
		}
		else
		{
			$APPLICATION->ThrowException('SALE_DH_ERROR_WRONG_HANDLER_FILE');
			return false;
		}
	}
Example #17
0
 /** @deprecated */
 public static function Set($code, $arData, $siteId = false)
 {
     global $APPLICATION;
     $serviceParams = self::getServiceParams($code, $siteId);
     $id = isset($serviceParams["ID"]) ? $serviceParams["ID"] : false;
     $update = intval($id) > 0;
     $fields = array_intersect_key($arData, Bitrix\Sale\Delivery\Services\Table::getMap());
     if (!$update) {
         $fields["CODE"] = $code;
         if (!isset($arData["CLASS_NAME"])) {
             $fields["CLASS_NAME"] = '\\Bitrix\\Sale\\Delivery\\Services\\Automatic';
         } else {
             $fields["CLASS_NAME"] = $arData["CLASS_NAME"];
         }
     }
     if (isset($arData["PARENT_ID"])) {
         $fields["PARENT_ID"] = $arData["PARENT_ID"];
     } elseif (!$update) {
         $fields["PARENT_ID"] = 0;
     }
     if (!defined('SALE_DH_INITIALIZED')) {
         CSaleDeliveryHandler::Initialize();
     }
     $handlers = self::__getRegisteredHandlers();
     if (isset($serviceParams["CONFIG"])) {
         $fields["CONFIG"] = $serviceParams["CONFIG"];
     } else {
         $fields["CONFIG"] = array();
     }
     if (isset($arData["CONFIG"])) {
         if (isset($handlers[$code]["DBSETSETTINGS"]) && is_callable($handlers[$code]["DBSETSETTINGS"])) {
             if (!($strOldSettings = call_user_func($handlers[$code]["DBSETSETTINGS"], $arData["CONFIG"]))) {
                 $APPLICATION->ThrowException("Can't save delivery services's old settings");
                 return false;
             }
         } else {
             $strOldSettings = $arData["CONFIG"];
         }
         $strOldSettings = serialize($strOldSettings);
         $fields["CONFIG"]["MAIN"]["OLD_SETTINGS"] = $strOldSettings;
     }
     if (!empty($arData["BASE_CURRENCY"])) {
         $fields["CURRENCY"] = $arData["BASE_CURRENCY"];
     } elseif (!empty($serviceParams["CURRENCY"])) {
         $fields["CURRENCY"] = $serviceParams["CURRENCY"];
     } elseif (!empty($handlers[$code]["BASE_CURRENCY"])) {
         $fields["CURRENCY"] = $handlers[$code]["BASE_CURRENCY"];
     } else {
         $fields["CURRENCY"] = COption::GetOptionString('sale', 'default_currency', 'RUB');
     }
     if (isset($arData["SID"])) {
         $fields["CONFIG"]["MAIN"]["SID"] = $arData["SID"];
     } else {
         $fields["CONFIG"]["MAIN"]["SID"] = "";
     }
     if (isset($arData["TAX_RATE"]) && floatval($arData["TAX_RATE"]) > 0) {
         $fields["CONFIG"]["MAIN"]["MARGIN_VALUE"] = $arData["TAX_RATE"];
         $fields["CONFIG"]["MAIN"]["MARGIN_TYPE"] = "%";
     } elseif (!$update) {
         $fields["CONFIG"]["MAIN"]["MARGIN"] = 0;
     }
     if (isset($arData["PROFILE_ID"])) {
         $fields["CONFIG"]["MAIN"]["PROFILE_ID"] = $arData["PROFILE_ID"];
     } else {
         $fields["CONFIG"]["MAIN"]["PROFILE_ID"] = "";
     }
     if (isset($arData["LOGOTIP"]) && is_array($arData["LOGOTIP"])) {
         $fields["LOGOTIP"] = $arData["LOGOTIP"];
         $fields["LOGOTIP"]["MODULE_ID"] = "sale";
         CFile::SaveForDB($fields, "LOGOTIP", "sale/delivery/logotip");
     }
     if ($update) {
         $res = \Bitrix\Sale\Delivery\Services\Table::update($id, $fields);
     } else {
         $res = \Bitrix\Sale\Delivery\Services\Table::add($fields);
     }
     if (!$res->isSuccess()) {
         throw new \Bitrix\Main\SystemException(implode("\n", $res->getErrorMessages()));
     }
     if (!$update) {
         $id = $res->getId();
     }
     if (is_array($arData["PROFILES"])) {
         foreach ($arData["PROFILES"] as $profileCode => $profileData) {
             self::Set($code . ":" . $profileCode, array("NAME" => strlen($profileData["TITLE"]) > 0 ? $profileData["TITLE"] : $handlers[$code]['PROFILES'][$profileCode]['TITLE'], "DESCRIPTION" => isset($profileData["DESCRIPTION"]) ? $profileData["DESCRIPTION"] : '', "ACTIVE" => isset($profileData["ACTIVE"]) ? $profileData["ACTIVE"] : "N", "TAX_RATE" => isset($profileData["TAX_RATE"]) ? $profileData["TAX_RATE"] : 0, "PARENT_ID" => isset($profileData["PARENT_ID"]) ? $profileData["PARENT_ID"] : $id, "SORT" => isset($arData["SORT"]) ? $arData["SORT"] : 100, "RESTRICTIONS_WEIGHT" => isset($profileData["RESTRICTIONS_WEIGHT"]) ? $profileData["RESTRICTIONS_WEIGHT"] : false, "RESTRICTIONS_SUM" => isset($profileData["RESTRICTIONS_SUM"]) ? $profileData["RESTRICTIONS_SUM"] : false, "RESTRICTIONS_DIMENSIONS" => isset($profileData["RESTRICTIONS_DIMENSIONS"]) ? $profileData["RESTRICTIONS_DIMENSIONS"] : false, "RESTRICTIONS_MAX_SIZE" => isset($profileData["RESTRICTIONS_MAX_SIZE"]) ? $profileData["RESTRICTIONS_MAX_SIZE"] : 0, "RESTRICTIONS_DIMENSIONS_SUM" => isset($profileData["RESTRICTIONS_DIMENSIONS_SUM"]) ? $profileData["RESTRICTIONS_DIMENSIONS_SUM"] : 0, "CLASS_NAME" => '\\Bitrix\\Sale\\Delivery\\Services\\AutomaticProfile', "PROFILE_ID" => $profileCode), strlen($siteId) > 0 ? $siteId : "");
         }
     }
     if (strlen($siteId) > 0) {
         if (!self::saveRestrictionBySiteId($id, $siteId, $update)) {
             $APPLICATION->ThrowException("Can't save delivery restriction by site", "SITE_ID");
             return false;
         }
     } elseif ($update) {
         \Bitrix\Sale\Delivery\Restrictions\Table::deleteByDeliveryIdClassName($id, '\\Bitrix\\Sale\\Delivery\\Restrictions\\BySite');
     }
     if (is_array($arData["RESTRICTIONS_WEIGHT"]) && (floatval($arData["RESTRICTIONS_WEIGHT"][0]) > 0 || floatval($arData["RESTRICTIONS_WEIGHT"][1]) > 0)) {
         if (!self::saveRestrictionByWeight($id, $arData["RESTRICTIONS_WEIGHT"], $update)) {
             $APPLICATION->ThrowException("Can't save delivery restriction by weight", "RESTRICTIONS_WEIGHT");
             return false;
         }
     } elseif ($update) {
         \Bitrix\Sale\Delivery\Restrictions\Table::deleteByDeliveryIdClassName($id, '\\Bitrix\\Sale\\Delivery\\Restrictions\\ByWeight');
     }
     if (is_array($arData["RESTRICTIONS_SUM"]) && (floatval($arData["RESTRICTIONS_SUM"][0]) > 0 || floatval($arData["RESTRICTIONS_SUM"][1]) > 0)) {
         if (!self::saveRestrictionByPrice($id, $arData["RESTRICTIONS_SUM"], $fields["CURRENCY"], $update)) {
             $APPLICATION->ThrowException("Can't save delivery restriction by sum", "RESTRICTIONS_SUM");
             return false;
         }
     } elseif ($update) {
         \Bitrix\Sale\Delivery\Restrictions\Table::deleteByDeliveryIdClassName($id, '\\Bitrix\\Sale\\Delivery\\Restrictions\\ByPrice');
     }
     if (is_array($arData["RESTRICTIONS_DIMENSIONS"]) && (floatval($arData["RESTRICTIONS_DIMENSIONS"][0]) > 0 || floatval($arData["RESTRICTIONS_DIMENSIONS"][1]) > 0 || floatval($arData["RESTRICTIONS_DIMENSIONS"][3]) > 0)) {
         if (!self::saveRestrictionByDimensions($id, array("LENGTH" => count($arData["RESTRICTIONS_DIMENSIONS"][0]) > 0 ? $arData["RESTRICTIONS_DIMENSIONS"][0] : 0, "WIDTH" => isset($arData["RESTRICTIONS_DIMENSIONS"][1]) ? $arData["RESTRICTIONS_DIMENSIONS"][1] : 0, "HEIGHT" => isset($arData["RESTRICTIONS_DIMENSIONS"][2]) ? $arData["RESTRICTIONS_DIMENSIONS"][2] : 0), $update)) {
             $APPLICATION->ThrowException("Can't save delivery restriction by dimensions");
             return false;
         }
     } elseif ($update) {
         \Bitrix\Sale\Delivery\Restrictions\Table::deleteByDeliveryIdClassName($id, '\\Bitrix\\Sale\\Delivery\\Restrictions\\ByDimensions');
     }
     if (floatval($arData["RESTRICTIONS_MAX_SIZE"]) > 0) {
         if (!self::saveRestrictionByMaxSize($id, $arData["RESTRICTIONS_MAX_SIZE"], $update)) {
             $APPLICATION->ThrowException("Can't save delivery restriction by maxx size", "RESTRICTIONS_MAX_SIZE");
             return false;
         }
     } elseif ($update) {
         \Bitrix\Sale\Delivery\Restrictions\Table::deleteByDeliveryIdClassName($id, '\\Bitrix\\Sale\\Delivery\\Restrictions\\ByMaxSize');
     }
     return $id;
 }
     $changedFields = $_POST["CHANGED_FIELDS"];
 } else {
     $changedFields = array();
 }
 if (isset($_POST["ACTIVE"]) && $_POST["ACTIVE"] == "Y") {
     $fields["ACTIVE"] = "Y";
 } else {
     $fields["ACTIVE"] = "N";
 }
 if (array_key_exists("LOGOTIP", $_FILES) && $_FILES["LOGOTIP"]["error"] == 0) {
     $imageFileError = CFile::CheckImageFile($_FILES["LOGOTIP"]);
     if (is_null($imageFileError)) {
         $fields["LOGOTIP"] = $_FILES["LOGOTIP"];
         $fields["LOGOTIP"]["del"] = trim($_POST["LOGOTIP_del"]);
         $fields["LOGOTIP"]["MODULE_ID"] = "sale";
         CFile::SaveForDB($fields, "LOGOTIP", "sale/delivery/logotip");
     } else {
         $strError .= $imageFileError . ".<br>";
     }
 } elseif (isset($_POST["LOGOTIP_FILE_ID"]) && intval($_POST["LOGOTIP_FILE_ID"])) {
     $fields["LOGOTIP"] = intval($_POST["LOGOTIP_FILE_ID"]);
 }
 if ($isItSavingProcess) {
     if (strlen($fields["NAME"]) <= 0) {
         $strError .= Loc::getMessage("SALE_DSE_ERROR_NO_NAME") . "<br>";
     }
     if (strlen($fields["CLASS_NAME"]) <= 0) {
         $strError .= Loc::getMessage("SALE_DSE_ERROR_NO_CLASS_NAME") . "<br>";
     }
     if ($strError == '') {
         try {
Example #19
0
 /**
  * <p>Функция изменяет параметры информационного блока с кодом <i>ID</i>. Модифицировать поля, а также отменить изменение параметров можно добавив обработчик события <a href="http://dev.1c-bitrix.ru/api_help/iblock/events/onbeforeiblockupdate.php">OnBeforeIBlockUpdate</a>. После успешного добавления инфоблока вызываются обработчики события <a href="http://dev.1c-bitrix.ru/api_help/iblock/events/onafteriblockupdate.php">OnAfterIBlockUpdate</a>.</p>
  *
  *
  *
  *
  * @param int $ID  ID изменяемого информационного блока.
  *
  *
  *
  * @param array $arFields  Массив Array("поле"=&gt;"значение", ...). Содержит значения <a
  * href="http://dev.1c-bitrix.ru/api_help/iblock/fields.php#fiblock">всех полей</a> информационного
  * блока. <br> Дополнительно в поле SITE_ID должен находиться массив
  * идентификаторов сайтов, к которым привязан изменяемый
  * информационный блок. <br> Кроме того, с помощью поля "GROUP_ID",
  * значением которого должен быть массив соответствий кодов групп
  * правам доступа, можно установить права для разных групп на доступ
  * к информационному блоку(см. <a
  * href="http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblock/index.php">CIBlock</a>::<a
  * href="http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblock/setpermission.php">SetPermission()</a>). <br> Если
  * задано поле "FIELDS", то будут выполнены настройки полей инфоблока
  * (см. <a href="http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblock/SetFields.php">CIBlock::SetFields</a>). <br>
  *
  *
  *
  * @return bool 
  *
  *
  * <h4>Example</h4> 
  * <pre>
  * &lt;?<br>$arPICTURE = $_FILES["PICTURE"];<br>$ib = new CIBlock;<br>$arFields = Array(<br>  "ACTIVE" =&gt; $ACTIVE,<br>  "NAME" =&gt; $NAME,<br>  "CODE" =&gt; $CODE,<br>  "LIST_PAGE_URL" =&gt; $LIST_PAGE_URL,<br>  "DETAIL_PAGE_URL" =&gt; $DETAIL_PAGE_URL,<br>  "IBLOCK_TYPE_ID" =&gt; $type,<br>  "SITE_ID" =&gt; Array("en", "de"),<br>  "SORT" =&gt; $SORT,<br>  "PICTURE" =&gt; $arPICTURE,<br>  "DESCRIPTION" =&gt; $DESCRIPTION,<br>  "DESCRIPTION_TYPE" =&gt; $DESCRIPTION_TYPE,<br>  "GROUP_ID" =&gt; Array("2"=&gt;"D", "3"=&gt;"R")<br>  );<br>if ($ID &gt; 0)<br>  $res = $ib-&gt;Update($ID, $arFields);<br>else<br>{<br>  $ID = $ib-&gt;Add($arFields);<br>  $res = ($ID&gt;0);<br>}<br>?&gt;
  * </pre>
  *
  *
  *
  * <h4>See Also</h4> 
  * <ul> <li> <a href="http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblock/add.php">CIBlock::Add</a> </li> <li> <a
  * href="http://dev.1c-bitrix.ru/api_help/iblock/fields.php#fiblock">Поля информационного блока</a>
  * </li> <li> <a href="http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblock/SetFields.php">CIBlock::SetFields</a> </li>
  * <li> <a href="http://dev.1c-bitrix.ru/api_help/iblock/events/onbeforeiblockupdate.php">OnBeforeIBlockUpdate</a> </li>
  * <li> <a href="http://dev.1c-bitrix.ru/api_help/iblock/events/onafteriblockupdate.php">OnAfterIBlockUpdate</a> </li>
  * </ul><a name="examples"></a>
  *
  *
  * @link http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblock/update.php
  * @author Bitrix
  */
 public function Update($ID, $arFields)
 {
     /** @global CCacheManager $CACHE_MANAGER */
     global $CACHE_MANAGER;
     /** @global CDatabase $DB */
     global $DB;
     $ID = intval($ID);
     $SAVED_PICTURE = null;
     if (is_set($arFields, "EXTERNAL_ID")) {
         $arFields["XML_ID"] = $arFields["EXTERNAL_ID"];
     }
     if (is_set($arFields, "PICTURE")) {
         if (strlen($arFields["PICTURE"]["name"]) <= 0 && strlen($arFields["PICTURE"]["del"]) <= 0) {
             unset($arFields["PICTURE"]);
         } else {
             $pic_res = $DB->Query("SELECT PICTURE FROM b_iblock WHERE ID=" . $ID);
             if ($pic_res = $pic_res->Fetch()) {
                 $arFields["PICTURE"]["old_file"] = $pic_res["PICTURE"];
             }
             $arFields["PICTURE"]["MODULE_ID"] = "iblock";
         }
     }
     if (is_set($arFields, "ACTIVE") && $arFields["ACTIVE"] != "Y") {
         $arFields["ACTIVE"] = "N";
     }
     if (is_set($arFields, "WORKFLOW") && $arFields["WORKFLOW"] != "N") {
         $arFields["WORKFLOW"] = "Y";
     }
     if (is_set($arFields, "BIZPROC") && $arFields["BIZPROC"] != "Y") {
         $arFields["BIZPROC"] = "N";
     }
     if (is_set($arFields, "SECTION_CHOOSER") && $arFields["SECTION_CHOOSER"] != "D" && $arFields["SECTION_CHOOSER"] != "P") {
         $arFields["SECTION_CHOOSER"] = "L";
     }
     if (is_set($arFields, "INDEX_SECTION") && $arFields["INDEX_SECTION"] != "Y") {
         $arFields["INDEX_SECTION"] = "N";
     }
     if (is_set($arFields, "INDEX_ELEMENT") && $arFields["INDEX_ELEMENT"] != "Y") {
         $arFields["INDEX_ELEMENT"] = "N";
     }
     if (is_set($arFields, "DESCRIPTION_TYPE") && $arFields["DESCRIPTION_TYPE"] != "html") {
         $arFields["DESCRIPTION_TYPE"] = "text";
     }
     if (is_set($arFields, "SITE_ID")) {
         $arFields["LID"] = $arFields["SITE_ID"];
     }
     if (is_set($arFields, "SECTION_PROPERTY")) {
         $arFields["SECTION_PROPERTY"] = "Y";
     }
     $RIGHTS_MODE = CIBlock::GetArrayByID($ID, "RIGHTS_MODE");
     if (!$this->CheckFields($arFields, $ID)) {
         $Result = false;
         $arFields["RESULT_MESSAGE"] =& $this->LAST_ERROR;
     } else {
         $arLID = array();
         $str_LID = "";
         if (is_set($arFields, "LID")) {
             if (is_array($arFields["LID"])) {
                 $arLID = $arFields["LID"];
             } else {
                 $arLID[] = $arFields["LID"];
             }
             $arFields["LID"] = false;
             $str_LID = "''";
             foreach ($arLID as $v) {
                 $arFields["LID"] = $v;
                 $str_LID .= ", '" . $DB->ForSql($v) . "'";
             }
         }
         unset($arFields["ID"]);
         unset($arFields["VERSION"]);
         if (array_key_exists("PICTURE", $arFields)) {
             $SAVED_PICTURE = $arFields["PICTURE"];
             CFile::SaveForDB($arFields, "PICTURE", "iblock");
         }
         $strUpdate = $DB->PrepareUpdate("b_iblock", $arFields, "iblock");
         if (array_key_exists("PICTURE", $arFields)) {
             $arFields["PICTURE"] = $SAVED_PICTURE;
         }
         $arBinds = array();
         if (is_set($arFields, "DESCRIPTION")) {
             $arBinds["DESCRIPTION"] = $arFields["DESCRIPTION"];
         }
         if (strlen($strUpdate) > 0) {
             $strSql = "UPDATE b_iblock SET " . $strUpdate . " WHERE ID=" . $ID;
             $DB->QueryBind($strSql, $arBinds);
         }
         $this->SetMessages($ID, $arFields);
         if (isset($arFields["FIELDS"]) && is_array($arFields["FIELDS"])) {
             $this->SetFields($ID, $arFields["FIELDS"]);
         }
         if (array_key_exists("RIGHTS_MODE", $arFields)) {
             if ($arFields["RIGHTS_MODE"] === "E" && $RIGHTS_MODE !== "E") {
                 CIBlock::SetPermission($ID, array());
             } elseif ($arFields["RIGHTS_MODE"] !== "E" && $RIGHTS_MODE === "E") {
                 $obIBlockRights = new CIBlockRights($ID);
                 $obIBlockRights->DeleteAllRights();
             }
             if ($arFields["RIGHTS_MODE"] === "E") {
                 $RIGHTS_MODE = "E";
             }
         }
         if ($RIGHTS_MODE === "E") {
             if (!array_key_exists("RIGHTS", $arFields) && array_key_exists("GROUP_ID", $arFields) && is_array($arFields["GROUP_ID"])) {
                 $obIBlockRights = new CIBlockRights($ID);
                 $obIBlockRights->SetRights($obIBlockRights->ConvertGroups($arFields["GROUP_ID"]));
             } elseif (array_key_exists("RIGHTS", $arFields) && is_array($arFields["RIGHTS"])) {
                 $obIBlockRights = new CIBlockRights($ID);
                 $obIBlockRights->SetRights($arFields["RIGHTS"]);
             }
         } else {
             if (array_key_exists("GROUP_ID", $arFields) && is_array($arFields["GROUP_ID"])) {
                 CIBlock::SetPermission($ID, $arFields["GROUP_ID"]);
             }
         }
         if (!empty($arLID)) {
             $strSql = "DELETE FROM b_iblock_site WHERE IBLOCK_ID=" . $ID;
             $DB->Query($strSql, false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__);
             $strSql = "INSERT INTO b_iblock_site(IBLOCK_ID, SITE_ID) " . "SELECT " . $ID . ", LID " . "FROM b_lang " . "WHERE LID IN (" . $str_LID . ") ";
             $DB->Query($strSql, false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__);
         }
         if (CModule::IncludeModule("search")) {
             $dbAfter = $DB->Query("SELECT ACTIVE FROM b_iblock WHERE ID=" . $ID);
             $arAfter = $dbAfter->Fetch();
             if ($arAfter["ACTIVE"] != "Y") {
                 CSearch::DeleteIndex("iblock", false, false, $ID);
             }
         }
         $_SESSION["SESS_RECOUNT_DB"] = "Y";
         $Result = true;
     }
     $this->CleanCache($ID);
     $arFields["ID"] = $ID;
     $arFields["RESULT"] =& $Result;
     foreach (GetModuleEvents("iblock", "OnAfterIBlockUpdate", true) as $arEvent) {
         ExecuteModuleEventEx($arEvent, array(&$arFields));
     }
     if (defined("BX_COMP_MANAGED_CACHE")) {
         $CACHE_MANAGER->ClearByTag("iblock_id_" . $ID);
     }
     return $Result;
 }
Example #20
0
             if (trim($_POST[$fieldName . "_del"]) == 'Y') {
                 if (intval($arPSActionParams[$val]['VALUE']) == 0) {
                     continue;
                 }
                 $valueTmp['old_file'] = $arPSActionParams[$val]['VALUE'];
                 $valueTmp['del'] = trim($_POST[$fieldName . "_del"]);
             }
             if (empty($valueTmp)) {
                 $typeTmp = $arPSActionParams[$val]['TYPE'];
                 $valueTmp = $arPSActionParams[$val]['VALUE'];
             }
         }
         $arParams[$val] = array("TYPE" => $typeTmp, "VALUE" => $valueTmp);
         if ($arParams[$val]['TYPE'] == 'FILE' && is_array($arParams[$val]['VALUE'])) {
             $arParams[$val]['VALUE']['MODULE_ID'] = 'sale';
             CFile::SaveForDB($arParams[$val], 'VALUE', 'sale/paysystem/field');
         }
     }
 }
 if (isset($_POST["TARIF_" . $arPersonType["ID"]])) {
     $arTarif = $_POST["TARIF_" . $arPersonType["ID"]];
 } else {
     $arTarif = array();
 }
 //add logotip
 $arPicture = array();
 if (array_key_exists("LOGOTIP_" . $arPersonType["ID"], $_FILES) && $_FILES["LOGOTIP_" . $arPersonType["ID"]]["error"] == 0) {
     $arPicture = $_FILES["LOGOTIP_" . $arPersonType["ID"]];
 } elseif ($actionID <= 0) {
     $logo = "";
     if (file_exists($_SERVER["DOCUMENT_ROOT"] . ${"ACTION_FILE_" . $arPersonType["ID"]} . "/logo.png")) {
Example #21
0
 protected function CheckFields($action, &$arFields)
 {
     if (isset($arFields["EXTERNAL_AUTH_ID"]) && strlen($arFields["EXTERNAL_AUTH_ID"]) <= 0) {
         return false;
     }
     if (isset($arFields["SITE_ID"]) && strlen($arFields["SITE_ID"]) <= 0) {
         $arFields["SITE_ID"] = SITE_ID;
     }
     if (!isset($arFields["USER_ID"])) {
         $arFields["USER_ID"] = $GLOBALS["USER"]->GetID();
     }
     if (is_set($arFields, "PERSONAL_PHOTO")) {
         $res = CFile::CheckImageFile($arFields["PERSONAL_PHOTO"]);
         if (strlen($res) > 0) {
             unset($arFields["PERSONAL_PHOTO"]);
         } else {
             $arFields["PERSONAL_PHOTO"]["MODULE_ID"] = "socialservices";
             CFile::SaveForDB($arFields, "PERSONAL_PHOTO", "socialservices");
         }
     }
     return true;
 }
Example #22
0
 public static function Update($ID, $arFields, $strUploadDir = false, $UpdateByUserId = false)
 {
     global $DB;
     $ID = intVal($ID);
     if ($ID <= 0) {
         return false;
     }
     $strUploadDir = $strUploadDir === false ? "forum/avatar" : $strUploadDir;
     $arFields1 = array();
     foreach ($arFields as $key => $value) {
         if (substr($key, 0, 1) == "=") {
             $arFields1[substr($key, 1)] = $value;
             unset($arFields[$key]);
         }
     }
     if (!CForumUser::CheckFields("UPDATE", $arFields)) {
         return false;
     }
     if (array_key_exists("AVATAR", $arFields) && is_array($arFields["AVATAR"]) && (!array_key_exists("MODULE_ID", $arFields["AVATAR"]) || strlen($arFields["AVATAR"]["MODULE_ID"]) <= 0)) {
         $arFields["AVATAR"]["MODULE_ID"] = "forum";
     }
     CFile::SaveForDB($arFields, "AVATAR", $strUploadDir);
     /***************** Event onBeforeUserUpdate ************************/
     $profileID = null;
     foreach (GetModuleEvents("forum", "onBeforeUserUpdate", true) as $arEvent) {
         if ($UpdateByUserId) {
             if ($profileID == null) {
                 $arProfile = CForumUser::GetByIDEx($ID);
                 $profileID = $arProfile['ID'];
             }
         } else {
             $profileID = $ID;
         }
         ExecuteModuleEventEx($arEvent, array($profileID, &$arFields));
     }
     /***************** /Event ******************************************/
     if (empty($arFields) && empty($arFields1)) {
         return false;
     }
     /***************** Cleaning cache **********************************/
     if (is_set($arFields, "ALLOW_POST")) {
         unset($GLOBALS["FORUM_CACHE"]["LOCKED_USERS"]);
         if (CACHED_b_forum_user !== false) {
             $GLOBALS["CACHE_MANAGER"]->CleanDir("b_forum_user");
         }
     }
     /***************** Cleaning cache/**********************************/
     $strUpdate = $DB->PrepareUpdate("b_forum_user", $arFields);
     foreach ($arFields1 as $key => $value) {
         if (strLen($strUpdate) > 0) {
             $strUpdate .= ", ";
         }
         $strUpdate .= $key . "=" . $value . " ";
     }
     if (!$UpdateByUserId) {
         $strSql = "UPDATE b_forum_user SET " . $strUpdate . " WHERE ID = " . $ID;
     } else {
         $strSql = "UPDATE b_forum_user SET " . $strUpdate . " WHERE USER_ID = " . $ID;
     }
     $arBinds = array();
     if (is_set($arFields, "INTERESTS")) {
         $arBinds["INTERESTS"] = $arFields["INTERESTS"];
     }
     $DB->QueryBind($strSql, $arBinds);
     /***************** Event onAfterUserUpdate *************************/
     foreach (GetModuleEvents("forum", "onAfterUserUpdate", true) as $arEvent) {
         if ($UpdateByUserId) {
             if ($profileID == null) {
                 $arProfile = CForumUser::GetByIDEx($ID);
                 $profileID = $arProfile['ID'];
             }
         } else {
             $profileID = $ID;
         }
         ExecuteModuleEventEx($arEvent, array($profileID, $arFields));
     }
     /***************** /Event ******************************************/
     unset($GLOBALS["FORUM_CACHE"]["USER"]);
     unset($GLOBALS["FORUM_CACHE"]["USER_ID"]);
     return $ID;
 }
Example #23
0
 function Add($arFields, $bWorkFlow = false, $bUpdateSearch = true, $bResizePictures = false)
 {
     global $DB, $USER;
     $arIBlock = CIBlock::GetArrayByID($arFields["IBLOCK_ID"]);
     $bWorkFlow = $bWorkFlow && is_array($arIBlock) && $arIBlock["WORKFLOW"] != "N" && CModule::IncludeModule("workflow");
     $bBizProc = is_array($arIBlock) && $arIBlock["BIZPROC"] == "Y" && IsModuleInstalled("bizproc");
     if (array_key_exists("BP_PUBLISHED", $arFields)) {
         if ($bBizProc) {
             if ($arFields["BP_PUBLISHED"] == "Y") {
                 $arFields["WF_STATUS_ID"] = 1;
                 $arFields["WF_NEW"] = false;
             } else {
                 $arFields["WF_STATUS_ID"] = 2;
                 $arFields["WF_NEW"] = "Y";
                 $arFields["BP_PUBLISHED"] = "N";
             }
         } else {
             unset($arFields["BP_PUBLISHED"]);
         }
     }
     if (array_key_exists("IBLOCK_SECTION_ID", $arFields)) {
         if (!array_key_exists("IBLOCK_SECTION", $arFields)) {
             $arFields["IBLOCK_SECTION"] = array($arFields["IBLOCK_SECTION_ID"]);
         } elseif (is_array($arFields["IBLOCK_SECTION"]) && !in_array($arFields["IBLOCK_SECTION_ID"], $arFields["IBLOCK_SECTION"])) {
             unset($arFields["IBLOCK_SECTION_ID"]);
         }
     }
     $strWarning = "";
     if ($bResizePictures) {
         $arDef = $arIBlock["FIELDS"]["PREVIEW_PICTURE"]["DEFAULT_VALUE"];
         if ($arDef["FROM_DETAIL"] === "Y" && is_array($arFields["DETAIL_PICTURE"]) && $arFields["DETAIL_PICTURE"]["size"] > 0 && ($arDef["UPDATE_WITH_DETAIL"] === "Y" || $arFields["PREVIEW_PICTURE"]["size"] <= 0)) {
             $arNewPreview = $arFields["DETAIL_PICTURE"];
             $arNewPreview["COPY_FILE"] = "Y";
             if (isset($arFields["PREVIEW_PICTURE"]) && is_array($arFields["PREVIEW_PICTURE"]) && isset($arFields["PREVIEW_PICTURE"]["description"])) {
                 $arNewPreview["description"] = $arFields["PREVIEW_PICTURE"]["description"];
             }
             $arFields["PREVIEW_PICTURE"] = $arNewPreview;
         }
         if (array_key_exists("PREVIEW_PICTURE", $arFields) && is_array($arFields["PREVIEW_PICTURE"]) && $arDef["SCALE"] === "Y") {
             $arNewPicture = CIBlock::ResizePicture($arFields["PREVIEW_PICTURE"], $arDef);
             if (is_array($arNewPicture)) {
                 $arNewPicture["description"] = $arFields["PREVIEW_PICTURE"]["description"];
                 $arFields["PREVIEW_PICTURE"] = $arNewPicture;
             } elseif ($arDef["IGNORE_ERRORS"] !== "Y") {
                 unset($arFields["PREVIEW_PICTURE"]);
                 $strWarning .= GetMessage("IBLOCK_FIELD_PREVIEW_PICTURE") . ": " . $arNewPicture . "<br>";
             }
         }
         if (array_key_exists("PREVIEW_PICTURE", $arFields) && is_array($arFields["PREVIEW_PICTURE"]) && $arDef["USE_WATERMARK_FILE"] === "Y") {
             if (strlen($arFields["PREVIEW_PICTURE"]["tmp_name"]) > 0 && ($arFields["PREVIEW_PICTURE"]["tmp_name"] === $arFields["DETAIL_PICTURE"]["tmp_name"] || $arFields["PREVIEW_PICTURE"]["COPY_FILE"] == "Y" && !$arFields["PREVIEW_PICTURE"]["copy"])) {
                 $tmp_name = CTempFile::GetFileName(basename($arFields["PREVIEW_PICTURE"]["tmp_name"]));
                 CheckDirPath($tmp_name);
                 copy($arFields["PREVIEW_PICTURE"]["tmp_name"], $tmp_name);
                 $arFields["PREVIEW_PICTURE"]["copy"] = true;
                 $arFields["PREVIEW_PICTURE"]["tmp_name"] = $tmp_name;
             }
             CIBLock::FilterPicture($arFields["PREVIEW_PICTURE"]["tmp_name"], array("name" => "watermark", "position" => $arDef["WATERMARK_FILE_POSITION"], "type" => "file", "size" => "real", "alpha_level" => 100 - min(max($arDef["WATERMARK_FILE_ALPHA"], 0), 100), "file" => $_SERVER["DOCUMENT_ROOT"] . Rel2Abs("/", $arDef["WATERMARK_FILE"])));
         }
         if (array_key_exists("PREVIEW_PICTURE", $arFields) && is_array($arFields["PREVIEW_PICTURE"]) && $arDef["USE_WATERMARK_TEXT"] === "Y") {
             if (strlen($arFields["PREVIEW_PICTURE"]["tmp_name"]) > 0 && ($arFields["PREVIEW_PICTURE"]["tmp_name"] === $arFields["DETAIL_PICTURE"]["tmp_name"] || $arFields["PREVIEW_PICTURE"]["COPY_FILE"] == "Y" && !$arFields["PREVIEW_PICTURE"]["copy"])) {
                 $tmp_name = CTempFile::GetFileName(basename($arFields["PREVIEW_PICTURE"]["tmp_name"]));
                 CheckDirPath($tmp_name);
                 copy($arFields["PREVIEW_PICTURE"]["tmp_name"], $tmp_name);
                 $arFields["PREVIEW_PICTURE"]["copy"] = true;
                 $arFields["PREVIEW_PICTURE"]["tmp_name"] = $tmp_name;
             }
             CIBLock::FilterPicture($arFields["PREVIEW_PICTURE"]["tmp_name"], array("name" => "watermark", "position" => $arDef["WATERMARK_TEXT_POSITION"], "type" => "text", "coefficient" => $arDef["WATERMARK_TEXT_SIZE"], "text" => $arDef["WATERMARK_TEXT"], "font" => $_SERVER["DOCUMENT_ROOT"] . Rel2Abs("/", $arDef["WATERMARK_TEXT_FONT"]), "color" => $arDef["WATERMARK_TEXT_COLOR"]));
         }
         $arDef = $arIBlock["FIELDS"]["DETAIL_PICTURE"]["DEFAULT_VALUE"];
         if (array_key_exists("DETAIL_PICTURE", $arFields) && is_array($arFields["DETAIL_PICTURE"]) && $arDef["SCALE"] === "Y") {
             $arNewPicture = CIBlock::ResizePicture($arFields["DETAIL_PICTURE"], $arDef);
             if (is_array($arNewPicture)) {
                 $arNewPicture["description"] = $arFields["DETAIL_PICTURE"]["description"];
                 $arFields["DETAIL_PICTURE"] = $arNewPicture;
             } elseif ($arDef["IGNORE_ERRORS"] !== "Y") {
                 unset($arFields["DETAIL_PICTURE"]);
                 $strWarning .= GetMessage("IBLOCK_FIELD_DETAIL_PICTURE") . ": " . $arNewPicture . "<br>";
             }
         }
         if (array_key_exists("DETAIL_PICTURE", $arFields) && is_array($arFields["DETAIL_PICTURE"]) && $arDef["USE_WATERMARK_FILE"] === "Y") {
             if (strlen($arFields["DETAIL_PICTURE"]["tmp_name"]) > 0 && ($arFields["DETAIL_PICTURE"]["tmp_name"] === $arFields["PREVIEW_PICTURE"]["tmp_name"] || $arFields["DETAIL_PICTURE"]["COPY_FILE"] == "Y" && !$arFields["DETAIL_PICTURE"]["copy"])) {
                 $tmp_name = CTempFile::GetFileName(basename($arFields["DETAIL_PICTURE"]["tmp_name"]));
                 CheckDirPath($tmp_name);
                 copy($arFields["DETAIL_PICTURE"]["tmp_name"], $tmp_name);
                 $arFields["DETAIL_PICTURE"]["copy"] = true;
                 $arFields["DETAIL_PICTURE"]["tmp_name"] = $tmp_name;
             }
             CIBLock::FilterPicture($arFields["DETAIL_PICTURE"]["tmp_name"], array("name" => "watermark", "position" => $arDef["WATERMARK_FILE_POSITION"], "type" => "file", "size" => "real", "alpha_level" => 100 - min(max($arDef["WATERMARK_FILE_ALPHA"], 0), 100), "file" => $_SERVER["DOCUMENT_ROOT"] . Rel2Abs("/", $arDef["WATERMARK_FILE"])));
         }
         if (array_key_exists("DETAIL_PICTURE", $arFields) && is_array($arFields["DETAIL_PICTURE"]) && $arDef["USE_WATERMARK_TEXT"] === "Y") {
             if (strlen($arFields["DETAIL_PICTURE"]["tmp_name"]) > 0 && ($arFields["DETAIL_PICTURE"]["tmp_name"] === $arFields["PREVIEW_PICTURE"]["tmp_name"] || $arFields["DETAIL_PICTURE"]["COPY_FILE"] == "Y" && !$arFields["DETAIL_PICTURE"]["copy"])) {
                 $tmp_name = CTempFile::GetFileName(basename($arFields["DETAIL_PICTURE"]["tmp_name"]));
                 CheckDirPath($tmp_name);
                 copy($arFields["DETAIL_PICTURE"]["tmp_name"], $tmp_name);
                 $arFields["DETAIL_PICTURE"]["copy"] = true;
                 $arFields["DETAIL_PICTURE"]["tmp_name"] = $tmp_name;
             }
             CIBLock::FilterPicture($arFields["DETAIL_PICTURE"]["tmp_name"], array("name" => "watermark", "position" => $arDef["WATERMARK_TEXT_POSITION"], "type" => "text", "coefficient" => $arDef["WATERMARK_TEXT_SIZE"], "text" => $arDef["WATERMARK_TEXT"], "font" => $_SERVER["DOCUMENT_ROOT"] . Rel2Abs("/", $arDef["WATERMARK_TEXT_FONT"]), "color" => $arDef["WATERMARK_TEXT_COLOR"]));
         }
     }
     $ipropTemplates = new \Bitrix\Iblock\InheritedProperty\ElementTemplates($arFields["IBLOCK_ID"], 0);
     if (is_set($arFields, "PREVIEW_PICTURE")) {
         if (is_array($arFields["PREVIEW_PICTURE"])) {
             if (strlen($arFields["PREVIEW_PICTURE"]["name"]) <= 0 && strlen($arFields["PREVIEW_PICTURE"]["del"]) <= 0) {
                 unset($arFields["PREVIEW_PICTURE"]);
             } else {
                 $arFields["PREVIEW_PICTURE"]["MODULE_ID"] = "iblock";
                 $arFields["PREVIEW_PICTURE"]["name"] = \Bitrix\Iblock\Template\Helper::makeFileName($ipropTemplates, "ELEMENT_PREVIEW_PICTURE_FILE_NAME", $arFields, $arFields["PREVIEW_PICTURE"]);
             }
         } else {
             if (intval($arFields["PREVIEW_PICTURE"]) <= 0) {
                 unset($arFields["PREVIEW_PICTURE"]);
             }
         }
     }
     if (is_set($arFields, "DETAIL_PICTURE")) {
         if (is_array($arFields["DETAIL_PICTURE"])) {
             if (strlen($arFields["DETAIL_PICTURE"]["name"]) <= 0 && strlen($arFields["DETAIL_PICTURE"]["del"]) <= 0) {
                 unset($arFields["DETAIL_PICTURE"]);
             } else {
                 $arFields["DETAIL_PICTURE"]["MODULE_ID"] = "iblock";
                 $arFields["DETAIL_PICTURE"]["name"] = \Bitrix\Iblock\Template\Helper::makeFileName($ipropTemplates, "ELEMENT_DETAIL_PICTURE_FILE_NAME", $arFields, $arFields["DETAIL_PICTURE"]);
             }
         } else {
             if (intval($arFields["DETAIL_PICTURE"]) <= 0) {
                 unset($arFields["DETAIL_PICTURE"]);
             }
         }
     }
     if (is_set($arFields, "ACTIVE") && $arFields["ACTIVE"] != "Y") {
         $arFields["ACTIVE"] = "N";
     }
     if (is_set($arFields, "PREVIEW_TEXT_TYPE") && $arFields["PREVIEW_TEXT_TYPE"] != "html") {
         $arFields["PREVIEW_TEXT_TYPE"] = "text";
     }
     if (is_set($arFields, "DETAIL_TEXT_TYPE") && $arFields["DETAIL_TEXT_TYPE"] != "html") {
         $arFields["DETAIL_TEXT_TYPE"] = "text";
     }
     if (is_set($arFields, "DATE_ACTIVE_FROM")) {
         $arFields["ACTIVE_FROM"] = $arFields["DATE_ACTIVE_FROM"];
     }
     if (is_set($arFields, "DATE_ACTIVE_TO")) {
         $arFields["ACTIVE_TO"] = $arFields["DATE_ACTIVE_TO"];
     }
     if (is_set($arFields, "EXTERNAL_ID")) {
         $arFields["XML_ID"] = $arFields["EXTERNAL_ID"];
     }
     if ($bWorkFlow) {
         $arFields["WF"] = "Y";
         if ($arFields["WF_STATUS_ID"] != 1) {
             $arFields["WF_NEW"] = "Y";
         } else {
             $arFields["WF_NEW"] = "";
         }
     }
     $arFields["SEARCHABLE_CONTENT"] = $arFields["NAME"];
     if (isset($arFields["PREVIEW_TEXT"])) {
         if (isset($arFields["PREVIEW_TEXT_TYPE"]) && $arFields["PREVIEW_TEXT_TYPE"] == "html") {
             $arFields["SEARCHABLE_CONTENT"] .= "\r\n" . HTMLToTxt($arFields["PREVIEW_TEXT"]);
         } else {
             $arFields["SEARCHABLE_CONTENT"] .= "\r\n" . $arFields["PREVIEW_TEXT"];
         }
     }
     if (isset($arFields["DETAIL_TEXT"])) {
         if (isset($arFields["DETAIL_TEXT_TYPE"]) && $arFields["DETAIL_TEXT_TYPE"] == "html") {
             $arFields["SEARCHABLE_CONTENT"] .= "\r\n" . HTMLToTxt($arFields["DETAIL_TEXT"]);
         } else {
             $arFields["SEARCHABLE_CONTENT"] .= "\r\n" . $arFields["DETAIL_TEXT"];
         }
     }
     $arFields["SEARCHABLE_CONTENT"] = ToUpper($arFields["SEARCHABLE_CONTENT"]);
     if (!$this->CheckFields($arFields) || strlen($strWarning)) {
         $this->LAST_ERROR .= $strWarning;
         $Result = false;
         $arFields["RESULT_MESSAGE"] =& $this->LAST_ERROR;
     } else {
         if (array_key_exists("PREVIEW_PICTURE", $arFields)) {
             $SAVED_PREVIEW_PICTURE = $arFields["PREVIEW_PICTURE"];
             if (is_array($arFields["PREVIEW_PICTURE"])) {
                 CFile::SaveForDB($arFields, "PREVIEW_PICTURE", "iblock");
             }
             if ($bWorkFlow) {
                 $COPY_PREVIEW_PICTURE = $arFields["PREVIEW_PICTURE"];
             }
         }
         if (array_key_exists("DETAIL_PICTURE", $arFields)) {
             $SAVED_DETAIL_PICTURE = $arFields["DETAIL_PICTURE"];
             if (is_array($arFields["DETAIL_PICTURE"])) {
                 CFile::SaveForDB($arFields, "DETAIL_PICTURE", "iblock");
             }
             if ($bWorkFlow) {
                 $COPY_DETAIL_PICTURE = $arFields["DETAIL_PICTURE"];
             }
         }
         unset($arFields["ID"]);
         if (is_object($USER)) {
             if (!isset($arFields["CREATED_BY"]) || intval($arFields["CREATED_BY"]) <= 0) {
                 $arFields["CREATED_BY"] = intval($USER->GetID());
             }
             if (!isset($arFields["MODIFIED_BY"]) || intval($arFields["MODIFIED_BY"]) <= 0) {
                 $arFields["MODIFIED_BY"] = intval($USER->GetID());
             }
         }
         $arFields["~TIMESTAMP_X"] = $arFields["~DATE_CREATE"] = $DB->CurrentTimeFunction();
         foreach (GetModuleEvents("iblock", "OnIBlockElementAdd", true) as $arEvent) {
             ExecuteModuleEventEx($arEvent, array($arFields));
         }
         $IBLOCK_SECTION_ID = $arFields["IBLOCK_SECTION_ID"];
         unset($arFields["IBLOCK_SECTION_ID"]);
         $ID = $DB->Add("b_iblock_element", $arFields, array("DETAIL_TEXT", "SEARCHABLE_CONTENT"), "iblock");
         if (array_key_exists("PREVIEW_PICTURE", $arFields)) {
             $arFields["PREVIEW_PICTURE_ID"] = $arFields["PREVIEW_PICTURE"];
             $arFields["PREVIEW_PICTURE"] = $SAVED_PREVIEW_PICTURE;
         }
         if (array_key_exists("DETAIL_PICTURE", $arFields)) {
             $arFields["DETAIL_PICTURE_ID"] = $arFields["DETAIL_PICTURE"];
             $arFields["DETAIL_PICTURE"] = $SAVED_DETAIL_PICTURE;
         }
         if (CIBlockElement::GetIBVersion($arFields["IBLOCK_ID"]) == 2) {
             $DB->Query("INSERT INTO b_iblock_element_prop_s" . $arFields["IBLOCK_ID"] . "(IBLOCK_ELEMENT_ID)VALUES(" . $ID . ")");
         }
         if (!isset($arFields["XML_ID"]) || strlen($arFields["XML_ID"]) <= 0) {
             $arFields["XML_ID"] = $ID;
             $DB->Query("UPDATE b_iblock_element SET XML_ID = " . $ID . " WHERE ID = " . $ID);
         }
         if (is_set($arFields, "PROPERTY_VALUES")) {
             CIBlockElement::SetPropertyValues($ID, $arFields["IBLOCK_ID"], $arFields["PROPERTY_VALUES"]);
         }
         if (is_set($arFields, "IBLOCK_SECTION")) {
             CIBlockElement::SetElementSection($ID, $arFields["IBLOCK_SECTION"], true, $arIBlock["RIGHTS_MODE"] === "E" ? $arIBlock["ID"] : 0, $IBLOCK_SECTION_ID);
         }
         if ($arIBlock["RIGHTS_MODE"] === "E") {
             $obElementRights = new CIBlockElementRights($arIBlock["ID"], $ID);
             if (!is_set($arFields, "IBLOCK_SECTION") || empty($arFields["IBLOCK_SECTION"])) {
                 $obElementRights->ChangeParents(array(), array(0));
             }
             if (array_key_exists("RIGHTS", $arFields) && is_array($arFields["RIGHTS"])) {
                 $obElementRights->SetRights($arFields["RIGHTS"]);
             }
         }
         if (array_key_exists("IPROPERTY_TEMPLATES", $arFields)) {
             $ipropTemplates = new \Bitrix\Iblock\InheritedProperty\ElementTemplates($arIBlock["ID"], $ID);
             $ipropTemplates->set($arFields["IPROPERTY_TEMPLATES"]);
         }
         if ($bUpdateSearch) {
             CIBlockElement::UpdateSearch($ID);
         }
         \Bitrix\Iblock\PropertyIndex\Manager::updateElementIndex($arIBlock["ID"], $ID);
         if (!isset($arFields["WF_PARENT_ELEMENT_ID"]) && $arIBlock["FIELDS"]["LOG_ELEMENT_ADD"]["IS_REQUIRED"] == "Y") {
             $USER_ID = is_object($USER) ? intval($USER->GetID()) : 0;
             $arEvents = GetModuleEvents("main", "OnBeforeEventLog", true);
             if (empty($arEvents) || ExecuteModuleEventEx($arEvents[0], array($USER_ID)) === false) {
                 $rsElement = CIBlockElement::GetList(array(), array("=ID" => $ID), false, false, array("LIST_PAGE_URL", "NAME", "CODE"));
                 $arElement = $rsElement->GetNext();
                 $res = array("ID" => $ID, "CODE" => $arElement["CODE"], "NAME" => $arElement["NAME"], "ELEMENT_NAME" => $arIBlock["ELEMENT_NAME"], "USER_ID" => $USER_ID, "IBLOCK_PAGE_URL" => $arElement["LIST_PAGE_URL"]);
                 CEventLog::Log("IBLOCK", "IBLOCK_ELEMENT_ADD", "iblock", $arIBlock["ID"], serialize($res));
             }
         }
         if ($bWorkFlow && intval($arFields["WF_PARENT_ELEMENT_ID"]) <= 0) {
             // It is completly new element - so make it copy
             unset($arFields["WF_NEW"]);
             $arFields["WF_PARENT_ELEMENT_ID"] = $ID;
             $arNewFields = $arFields;
             $arNewFields["PREVIEW_PICTURE"] = $COPY_PREVIEW_PICTURE;
             $arNewFields["DETAIL_PICTURE"] = $COPY_DETAIL_PICTURE;
             if (is_array($arNewFields["PROPERTY_VALUES"])) {
                 $i = 0;
                 $db_prop = CIBlockProperty::GetList(array(), array("IBLOCK_ID" => $arFields["IBLOCK_ID"], "CHECK_PERMISSIONS" => "N", "PROPERTY_TYPE" => "F"));
                 while ($arProp = $db_prop->Fetch()) {
                     $i++;
                     unset($arNewFields["PROPERTY_VALUES"][$arProp["CODE"]]);
                     unset($arNewFields["PROPERTY_VALUES"][$arProp["ID"]]);
                     $arNewFields["PROPERTY_VALUES"][$arProp["ID"]] = array();
                 }
                 if ($i > 0) {
                     $props = CIBlockElement::GetProperty($arFields["IBLOCK_ID"], $ID, "sort", "asc", array("PROPERTY_TYPE" => "F", "EMPTY" => "N"));
                     while ($arProp = $props->Fetch()) {
                         $arNewFields["PROPERTY_VALUES"][$arProp["ID"]][$arProp['PROPERTY_VALUE_ID']] = array("VALUE" => $arProp["VALUE"], "DESCRIPTION" => $arProp["DESCRIPTION"]);
                     }
                 }
             }
             $WF_ID = $this->Add($arNewFields);
             if ($this->bWF_SetMove) {
                 CIBlockElement::WF_SetMove($WF_ID);
             }
         }
         $Result = $ID;
         $arFields["ID"] =& $ID;
         $_SESSION["SESS_RECOUNT_DB"] = "Y";
         self::$elementIblock[$ID] = $arIBlock['ID'];
     }
     if (isset($arFields["PREVIEW_PICTURE"]) && is_array($arFields["PREVIEW_PICTURE"]) && isset($arFields["PREVIEW_PICTURE"]["COPY_FILE"]) && $arFields["PREVIEW_PICTURE"]["COPY_FILE"] == "Y" && $arFields["PREVIEW_PICTURE"]["copy"]) {
         @unlink($arFields["PREVIEW_PICTURE"]["tmp_name"]);
         @rmdir(dirname($arFields["PREVIEW_PICTURE"]["tmp_name"]));
     }
     if (isset($arFields["DETAIL_PICTURE"]) && is_array($arFields["DETAIL_PICTURE"]) && isset($arFields["DETAIL_PICTURE"]["COPY_FILE"]) && $arFields["DETAIL_PICTURE"]["COPY_FILE"] == "Y" && $arFields["DETAIL_PICTURE"]["copy"]) {
         @unlink($arFields["DETAIL_PICTURE"]["tmp_name"]);
         @rmdir(dirname($arFields["DETAIL_PICTURE"]["tmp_name"]));
     }
     $arFields["RESULT"] =& $Result;
     foreach (GetModuleEvents("iblock", "OnAfterIBlockElementAdd", true) as $arEvent) {
         ExecuteModuleEventEx($arEvent, array(&$arFields));
     }
     CIBlock::clearIblockTagCache($arIBlock['ID']);
     return $Result;
 }
Example #24
0
	/**
	 * <p>Функция добавляет новый способ (службу) доставки с параметрами из массива arFields.</p>
	 *
	 *
	 *
	 *
	 * @param array $arFields  Ассоциативный массив параметров доставки, ключами в котором
	 * являются названия параметров доставки, а значениями - значения
	 * параметров. <br><br> Допустимые ключи: <br><ul> <li> <b>NAME</b> - название
	 * доставки (обязательное, задается на языке сайта, к которому
	 * привязана эта доставка);</li> <li> <b>LID</b> - код сайта, к которому
	 * привязана эта доставка;</li> <li> <b>PERIOD_FROM</b> - минимальный срок
	 * доставки;</li> <li> <b>PERIOD_TO</b> - максимальный срок доставки;</li> <li>
	 * <b>PERIOD_TYPE</b> - единица измерения срока: D - дни, H - часы, M - месяцы;</li> <li>
	 * <b>WEIGHT_FROM</b> - минимальный вес заказа, для которого возможна эта
	 * доставка (единица измерения должна быть едина на сайте);</li> <li>
	 * <b>WEIGHT_TO</b> - максимальный вес заказа, для которого возможна эта
	 * доставка (единица измерения должна быть едина на сайте);</li> <li>
	 * <b>ORDER_PRICE_FROM</b> - минимальная стоимость заказа, для которой возможна
	 * эта доставка;</li> <li> <b>ORDER_PRICE_TO</b> - максимальная стоимость заказа,
	 * для которой возможна эта доставка;</li> <li> <b>ORDER_CURRENCY</b> - валюта
	 * ограничений по стоимости;</li> <li> <b>ACTIVE</b> - флаг (Y/N) активности
	 * доставки;</li> <li> <b>PRICE</b> - стоимость доставки;</li> <li> <b>CURRENCY</b> - валюта
	 * стоимости доставки;</li> <li> <b>SORT</b> - индекс сортировки;</li> <li>
	 * <b>DESCRIPTION</b> - описание доставки;</li> <li> <b>LOCATIONS</b> - массив массивов
	 * вида: <pre class="syntax">array("LOCATION_ID" =&gt; "код местоположения или <br> группы
	 * местоположений",<br> "LOCATION_TYPE"=&gt;"L - для местоположения, <br> G - для
	 * группы")</pre> содержащий местоположения и группы местоположений,
	 * для которых работает эта доставка</li> </ul>
	 *
	 *
	 *
	 * @return int <p>Возвращает код добавленной записи или <i>false</i> в случае
	 * ошибки.</p><a name="examples"></a>
	 *
	 *
	 * <h4>Example</h4> 
	 * <pre>
	 * &lt;?<br>$arFields = array(<br>   "NAME" =&gt; "Доставка курьером",<br>   "LID" =&gt; "ru",<br>   "PERIOD_FROM" =&gt; 1,<br>   "PERIOD_TO" =&gt; 3,<br>   "PERIOD_TYPE" =&gt; "D",<br>   "WEIGHT_FROM" =&gt; 0,<br>   "WEIGHT_TO" =&gt; 2500,<br>   "ORDER_PRICE_FROM" =&gt; 0,<br>   "ORDER_PRICE_TO" =&gt; 10000,<br>   "ORDER_CURRENCY" =&gt; "RUB",<br>   "ACTIVE" =&gt; "Y",<br>   "PRICE" =&gt; 58,<br>   "CURRENCY" =&gt; "RUB",<br>   "SORT" =&gt; 100,<br>   "DESCRIPTION" =&gt; "Заказ будет доставлен Вам в течение 3 - 10 рабочих дней после передачи его в курьерскую службу.",<br>   "LOCATIONS" =&gt; array(<br>      array("LOCATION_ID"=&gt;1, "LOCATION_TYPE"=&gt;"L"),<br>      array("LOCATION_ID"=&gt;3, "LOCATION_TYPE"=&gt;"G")<br>      )<br>);<br><br>$ID = CSaleDelivery::Add($arFields);<br>if ($ID&lt;=0)<br>   echo "Ошибка добавления доставки";<br>?&gt;<br>
	 * </pre>
	 *
	 *
	 * @static
	 * @link http://dev.1c-bitrix.ru/api_help/sale/classes/csaledelivery/csaledelivery__add.564001a4.php
	 * @author Bitrix
	 */
	public static function Add($arFields)
	{
		global $DB;

		if (!CSaleDelivery::CheckFields("ADD", $arFields))
			return false;

		if (array_key_exists("LOGOTIP", $arFields) && is_array($arFields["LOGOTIP"]))
			$arFields["LOGOTIP"]["MODULE_ID"] = "sale";

		CFile::SaveForDB($arFields, "LOGOTIP", "sale/delivery/logotip");

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

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

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

		foreach($arFields["LOCATIONS"] as $location)
		{
			$arInsert = $DB->PrepareInsert("b_sale_delivery2location", $location);

			$strSql =
				"INSERT INTO b_sale_delivery2location(DELIVERY_ID, ".$arInsert[0].") ".
				"VALUES(".$ID.", ".$arInsert[1].")";
			$DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
		}

		if (is_set($arFields, "PAY_SYSTEM"))
		{
			CSaleDelivery::UpdateDeliveryPay($ID, $arFields["PAY_SYSTEM"]);
		}
		
		return $ID;
	}
Example #25
0
 public static function Update($ID, $arFields, $strUploadDir = false)
 {
     global $DB;
     $arBinds = array();
     $strUploadDir = $strUploadDir === false ? "vote" : $strUploadDir;
     $ID = intVal($ID);
     if ($ID <= 0 || !CVote::CheckFields("UPDATE", $arFields, $ID)) {
         return false;
     }
     /***************** Event onBeforeVoteUpdate ************************/
     foreach (GetModuleEvents("vote", "onBeforeVoteUpdate", true) as $arEvent) {
         if (ExecuteModuleEventEx($arEvent, array(&$ID, &$arFields)) === false) {
             return false;
         }
     }
     /***************** /Event ******************************************/
     if (empty($arFields)) {
         return false;
     }
     $arFields["~TIMESTAMP_X"] = $DB->GetNowFunction();
     if (is_set($arFields, "DESCRIPTION")) {
         $arBinds["DESCRIPTION"] = $arFields["DESCRIPTION"];
     }
     if (array_key_exists("IMAGE_ID", $arFields) && is_array($arFields["IMAGE_ID"]) && (!array_key_exists("MODULE_ID", $arFields["IMAGE_ID"]) || strlen($arFields["IMAGE_ID"]["MODULE_ID"]) <= 0)) {
         $arFields["IMAGE_ID"]["MODULE_ID"] = "vote";
     }
     CFile::SaveForDB($arFields, "IMAGE_ID", $strUploadDir);
     $strUpdate = $DB->PrepareUpdateBind("b_vote", $arFields, $strUploadDir, false, $arBinds);
     if (!empty($strUpdate)) {
         $strSql = "UPDATE b_vote SET " . $strUpdate . " WHERE ID=" . $ID;
         $DB->QueryBind($strSql, $arBinds);
     }
     /***************** Event onAfterVoteUpdate *************************/
     foreach (GetModuleEvents("vote", "onAfterVoteUpdate", true) as $arEvent) {
         ExecuteModuleEventEx($arEvent, array($ID, $arFields));
     }
     /***************** /Event ******************************************/
     return $ID;
 }
     if ($imageFileError === null) {
         $fields['LOGOTIP'] = $file;
         $fields['LOGOTIP']['del'] = trim($request->get("LOGOTIP_del"));
         $fields['LOGOTIP']['MODULE_ID'] = "sale";
         CFile::SaveForDB($fields, 'LOGOTIP', 'sale/paysystem/logotip');
     } else {
         $errorMessage .= $imageFileError . '.<br>';
     }
 } elseif ($request->get("LOGOTIP_del") !== null && $request->get("LOGOTIP_del") == 'Y') {
     $fields['LOGOTIP'] = 0;
 } elseif ($id <= 0) {
     $image = '/bitrix/images/sale/sale_payments/' . $request->get('ACTION_FILE') . '.png';
     if (\Bitrix\Main\IO\File::isFileExists($documentRoot . $image)) {
         $fields['LOGOTIP'] = CFile::MakeFileArray($image);
         $fields['LOGOTIP']['MODULE_ID'] = "sale";
         CFile::SaveForDB($fields, 'LOGOTIP', 'sale/paysystem/logotip');
     }
 }
 $data = PaySystem\Manager::getHandlerDescription($request->get('ACTION_FILE'));
 if ($id > 0) {
     $result = PaySystemActionTable::update($id, $fields);
     if (!$result->isSuccess()) {
         $errorMessage .= join(',', $result->getErrorMessages()) . ".<br>";
     }
 } else {
     $result = PaySystemActionTable::add($fields);
     if (!$result->isSuccess()) {
         $errorMessage .= join(',', $result->getErrorMessages());
     } else {
         $id = $result->getId();
         if ($id > 0) {
Example #27
0
 function Update($ID, $arFields, $bWorkFlow = false, $bUpdateSearch = true, $bResizePictures = false, $bCheckDiskQuota = true)
 {
     global $DB, $USER;
     $ID = intval($ID);
     $db_element = CIBlockElement::GetList(array(), array("ID" => $ID, "SHOW_HISTORY" => "Y"), false, false, array("ID", "TIMESTAMP_X", "MODIFIED_BY", "DATE_CREATE", "CREATED_BY", "IBLOCK_ID", "ACTIVE", "ACTIVE_FROM", "ACTIVE_TO", "SORT", "NAME", "PREVIEW_PICTURE", "PREVIEW_TEXT", "PREVIEW_TEXT_TYPE", "DETAIL_PICTURE", "DETAIL_TEXT", "DETAIL_TEXT_TYPE", "WF_STATUS_ID", "WF_PARENT_ELEMENT_ID", "WF_NEW", "WF_COMMENTS", "IN_SECTIONS", "CODE", "TAGS", "XML_ID", "TMP_ID"));
     if (!($ar_element = $db_element->Fetch())) {
         return false;
     }
     $arIBlock = CIBlock::GetArrayByID($ar_element["IBLOCK_ID"]);
     $bWorkFlow = $bWorkFlow && is_array($arIBlock) && $arIBlock["WORKFLOW"] != "N" && CModule::IncludeModule("workflow");
     $ar_wf_element = $ar_element;
     $LAST_ID = 0;
     if ($bWorkFlow) {
         $LAST_ID = CIBlockElement::WF_GetLast($ID);
         if ($LAST_ID != $ID) {
             $db_element = CIBlockElement::GetByID($LAST_ID);
             if (!($ar_wf_element = $db_element->Fetch())) {
                 return false;
             }
         }
         $arFields["WF_PARENT_ELEMENT_ID"] = $ID;
         if (!array_key_exists("PROPERTY_VALUES", $arFields) || !is_array($arFields["PROPERTY_VALUES"])) {
             $arFields["PROPERTY_VALUES"] = array();
         }
         $bFieldProps = array();
         foreach ($arFields["PROPERTY_VALUES"] as $k => $v) {
             $bFieldProps[$k] = true;
         }
         $arFieldProps =& $arFields['PROPERTY_VALUES'];
         $props = CIBlockElement::GetProperty($ar_element["IBLOCK_ID"], $ar_wf_element["ID"]);
         while ($arProp = $props->Fetch()) {
             $pr_val_id = $arProp['PROPERTY_VALUE_ID'];
             if ($arProp['PROPERTY_TYPE'] == 'F' && strlen($pr_val_id) > 0) {
                 if (strlen($arProp["CODE"]) > 0 && is_set($arFieldProps, $arProp["CODE"])) {
                     $pr_id = $arProp["CODE"];
                 } else {
                     $pr_id = $arProp['ID'];
                 }
                 if (array_key_exists($pr_id, $arFieldProps) && array_key_exists($pr_val_id, $arFieldProps[$pr_id]) && is_array($arFieldProps[$pr_id][$pr_val_id])) {
                     $new_value = $arFieldProps[$pr_id][$pr_val_id];
                     if (strlen($new_value['name']) <= 0 && $new_value['del'] != "Y" && strlen($new_value['VALUE']['name']) <= 0 && $new_value['VALUE']['del'] != "Y") {
                         if (array_key_exists('DESCRIPTION', $new_value) && $new_value['DESCRIPTION'] != $arProp['DESCRIPTION']) {
                             $p = array("VALUE" => CFile::MakeFileArray($arProp['VALUE']));
                             $p["DESCRIPTION"] = $new_value["DESCRIPTION"];
                             $p["MODULE_ID"] = "iblock";
                             $arFieldProps[$pr_id][$pr_val_id] = $p;
                         } elseif ($arProp['VALUE'] > 0) {
                             $arFieldProps[$pr_id][$pr_val_id] = array("VALUE" => $arProp['VALUE'], "DESCRIPTION" => $arProp["DESCRIPTION"]);
                         }
                     }
                 } else {
                     $arFieldProps[$pr_id][$pr_val_id] = array("VALUE" => $arProp['VALUE'], "DESCRIPTION" => $arProp["DESCRIPTION"]);
                 }
                 continue;
             }
             if (strlen($pr_val_id) <= 0 || array_key_exists($arProp["ID"], $bFieldProps) || strlen($arProp["CODE"]) > 0 && array_key_exists($arProp["CODE"], $bFieldProps)) {
                 continue;
             }
             $arFieldProps[$arProp["ID"]][$pr_val_id] = array("VALUE" => $arProp['VALUE'], "DESCRIPTION" => $arProp["DESCRIPTION"]);
         }
         if ($ar_wf_element["IN_SECTIONS"] == "Y") {
             $ar_wf_element["IBLOCK_SECTION"] = array();
             $rsSections = CIBlockElement::GetElementGroups($ar_element["ID"], true, array('ID', 'IBLOCK_ELEMENT_ID'));
             while ($arSection = $rsSections->Fetch()) {
                 $ar_wf_element["IBLOCK_SECTION"][] = $arSection["ID"];
             }
         }
         unset($ar_wf_element["DATE_ACTIVE_FROM"]);
         unset($ar_wf_element["DATE_ACTIVE_TO"]);
         unset($ar_wf_element["EXTERNAL_ID"]);
         unset($ar_wf_element["TIMESTAMP_X"]);
         unset($ar_wf_element["ID"]);
         $arFields = $arFields + $ar_wf_element;
     }
     $arFields["WF"] = $bWorkFlow ? "Y" : "N";
     $bBizProc = is_array($arIBlock) && $arIBlock["BIZPROC"] == "Y" && IsModuleInstalled("bizproc");
     if (array_key_exists("BP_PUBLISHED", $arFields)) {
         if ($bBizProc) {
             if ($arFields["BP_PUBLISHED"] == "Y") {
                 $arFields["WF_STATUS_ID"] = 1;
                 $arFields["WF_NEW"] = false;
             } else {
                 $arFields["WF_STATUS_ID"] = 2;
                 $arFields["WF_NEW"] = "Y";
                 $arFields["BP_PUBLISHED"] = "N";
             }
         } else {
             $arFields["WF_NEW"] = false;
             unset($arFields["BP_PUBLISHED"]);
         }
     } else {
         $arFields["WF_NEW"] = false;
     }
     if (is_set($arFields, "ACTIVE") && $arFields["ACTIVE"] != "Y") {
         $arFields["ACTIVE"] = "N";
     }
     if (is_set($arFields, "PREVIEW_TEXT_TYPE") && $arFields["PREVIEW_TEXT_TYPE"] != "html") {
         $arFields["PREVIEW_TEXT_TYPE"] = "text";
     }
     if (is_set($arFields, "DETAIL_TEXT_TYPE") && $arFields["DETAIL_TEXT_TYPE"] != "html") {
         $arFields["DETAIL_TEXT_TYPE"] = "text";
     }
     $strWarning = "";
     if ($bResizePictures) {
         $arDef = $arIBlock["FIELDS"]["PREVIEW_PICTURE"]["DEFAULT_VALUE"];
         if ($arDef["DELETE_WITH_DETAIL"] === "Y" && $arFields["DETAIL_PICTURE"]["del"] === "Y") {
             $arFields["PREVIEW_PICTURE"]["del"] = "Y";
         }
         if ($arDef["FROM_DETAIL"] === "Y" && ($arFields["PREVIEW_PICTURE"]["size"] <= 0 || $arDef["UPDATE_WITH_DETAIL"] === "Y") && is_array($arFields["DETAIL_PICTURE"]) && $arFields["DETAIL_PICTURE"]["size"] > 0) {
             if ($arFields["PREVIEW_PICTURE"]["del"] !== "Y" && $arDef["UPDATE_WITH_DETAIL"] !== "Y") {
                 $rsElement = CIBlockElement::GetList(array("ID" => "DESC"), array("ID" => $ar_wf_element["ID"], "IBLOCK_ID" => $ar_wf_element["IBLOCK_ID"], "SHOW_HISTORY" => "Y"), false, false, array("ID", "PREVIEW_PICTURE"));
                 $arOldElement = $rsElement->Fetch();
             } else {
                 $arOldElement = false;
             }
             if (!$arOldElement || !$arOldElement["PREVIEW_PICTURE"]) {
                 $arNewPreview = $arFields["DETAIL_PICTURE"];
                 $arNewPreview["COPY_FILE"] = "Y";
                 $arNewPreview["description"] = $arFields["PREVIEW_PICTURE"]["description"];
                 $arFields["PREVIEW_PICTURE"] = $arNewPreview;
             }
         }
         if (array_key_exists("PREVIEW_PICTURE", $arFields) && is_array($arFields["PREVIEW_PICTURE"]) && $arFields["PREVIEW_PICTURE"]["size"] > 0 && $arDef["SCALE"] === "Y") {
             $arNewPicture = CIBlock::ResizePicture($arFields["PREVIEW_PICTURE"], $arDef);
             if (is_array($arNewPicture)) {
                 $arNewPicture["description"] = $arFields["PREVIEW_PICTURE"]["description"];
                 $arFields["PREVIEW_PICTURE"] = $arNewPicture;
             } elseif ($arDef["IGNORE_ERRORS"] !== "Y") {
                 unset($arFields["PREVIEW_PICTURE"]);
                 $strWarning .= GetMessage("IBLOCK_FIELD_PREVIEW_PICTURE") . ": " . $arNewPicture . "<br>";
             }
         }
         if (array_key_exists("PREVIEW_PICTURE", $arFields) && is_array($arFields["PREVIEW_PICTURE"]) && $arDef["USE_WATERMARK_FILE"] === "Y") {
             if (strlen($arFields["PREVIEW_PICTURE"]["tmp_name"]) > 0 && ($arFields["PREVIEW_PICTURE"]["tmp_name"] === $arFields["DETAIL_PICTURE"]["tmp_name"] || $arFields["PREVIEW_PICTURE"]["COPY_FILE"] == "Y" && !$arFields["PREVIEW_PICTURE"]["copy"])) {
                 $tmp_name = CTempFile::GetFileName(basename($arFields["PREVIEW_PICTURE"]["tmp_name"]));
                 CheckDirPath($tmp_name);
                 copy($arFields["PREVIEW_PICTURE"]["tmp_name"], $tmp_name);
                 $arFields["PREVIEW_PICTURE"]["copy"] = true;
                 $arFields["PREVIEW_PICTURE"]["tmp_name"] = $tmp_name;
             }
             CIBLock::FilterPicture($arFields["PREVIEW_PICTURE"]["tmp_name"], array("name" => "watermark", "position" => $arDef["WATERMARK_FILE_POSITION"], "type" => "file", "size" => "real", "alpha_level" => 100 - min(max($arDef["WATERMARK_FILE_ALPHA"], 0), 100), "file" => $_SERVER["DOCUMENT_ROOT"] . Rel2Abs("/", $arDef["WATERMARK_FILE"])));
         }
         if (array_key_exists("PREVIEW_PICTURE", $arFields) && is_array($arFields["PREVIEW_PICTURE"]) && $arDef["USE_WATERMARK_TEXT"] === "Y") {
             if (strlen($arFields["PREVIEW_PICTURE"]["tmp_name"]) > 0 && ($arFields["PREVIEW_PICTURE"]["tmp_name"] === $arFields["DETAIL_PICTURE"]["tmp_name"] || $arFields["PREVIEW_PICTURE"]["COPY_FILE"] == "Y" && !$arFields["PREVIEW_PICTURE"]["copy"])) {
                 $tmp_name = CTempFile::GetFileName(basename($arFields["PREVIEW_PICTURE"]["tmp_name"]));
                 CheckDirPath($tmp_name);
                 copy($arFields["PREVIEW_PICTURE"]["tmp_name"], $tmp_name);
                 $arFields["PREVIEW_PICTURE"]["copy"] = true;
                 $arFields["PREVIEW_PICTURE"]["tmp_name"] = $tmp_name;
             }
             CIBLock::FilterPicture($arFields["PREVIEW_PICTURE"]["tmp_name"], array("name" => "watermark", "position" => $arDef["WATERMARK_TEXT_POSITION"], "type" => "text", "coefficient" => $arDef["WATERMARK_TEXT_SIZE"], "text" => $arDef["WATERMARK_TEXT"], "font" => $_SERVER["DOCUMENT_ROOT"] . Rel2Abs("/", $arDef["WATERMARK_TEXT_FONT"]), "color" => $arDef["WATERMARK_TEXT_COLOR"]));
         }
         $arDef = $arIBlock["FIELDS"]["DETAIL_PICTURE"]["DEFAULT_VALUE"];
         if (array_key_exists("DETAIL_PICTURE", $arFields) && is_array($arFields["DETAIL_PICTURE"]) && $arDef["SCALE"] === "Y") {
             $arNewPicture = CIBlock::ResizePicture($arFields["DETAIL_PICTURE"], $arDef);
             if (is_array($arNewPicture)) {
                 $arNewPicture["description"] = $arFields["DETAIL_PICTURE"]["description"];
                 $arFields["DETAIL_PICTURE"] = $arNewPicture;
             } elseif ($arDef["IGNORE_ERRORS"] !== "Y") {
                 unset($arFields["DETAIL_PICTURE"]);
                 $strWarning .= GetMessage("IBLOCK_FIELD_DETAIL_PICTURE") . ": " . $arNewPicture . "<br>";
             }
         }
         if (array_key_exists("DETAIL_PICTURE", $arFields) && is_array($arFields["DETAIL_PICTURE"]) && $arDef["USE_WATERMARK_FILE"] === "Y") {
             if (strlen($arFields["DETAIL_PICTURE"]["tmp_name"]) > 0 && ($arFields["DETAIL_PICTURE"]["tmp_name"] === $arFields["PREVIEW_PICTURE"]["tmp_name"] || $arFields["DETAIL_PICTURE"]["COPY_FILE"] == "Y" && !$arFields["DETAIL_PICTURE"]["copy"])) {
                 $tmp_name = CTempFile::GetFileName(basename($arFields["DETAIL_PICTURE"]["tmp_name"]));
                 CheckDirPath($tmp_name);
                 copy($arFields["DETAIL_PICTURE"]["tmp_name"], $tmp_name);
                 $arFields["DETAIL_PICTURE"]["copy"] = true;
                 $arFields["DETAIL_PICTURE"]["tmp_name"] = $tmp_name;
             }
             CIBLock::FilterPicture($arFields["DETAIL_PICTURE"]["tmp_name"], array("name" => "watermark", "position" => $arDef["WATERMARK_FILE_POSITION"], "type" => "file", "size" => "real", "alpha_level" => 100 - min(max($arDef["WATERMARK_FILE_ALPHA"], 0), 100), "file" => $_SERVER["DOCUMENT_ROOT"] . Rel2Abs("/", $arDef["WATERMARK_FILE"])));
         }
         if (array_key_exists("DETAIL_PICTURE", $arFields) && is_array($arFields["DETAIL_PICTURE"]) && $arDef["USE_WATERMARK_TEXT"] === "Y") {
             if (strlen($arFields["DETAIL_PICTURE"]["tmp_name"]) > 0 && ($arFields["DETAIL_PICTURE"]["tmp_name"] === $arFields["PREVIEW_PICTURE"]["tmp_name"] || $arFields["DETAIL_PICTURE"]["COPY_FILE"] == "Y" && !$arFields["DETAIL_PICTURE"]["copy"])) {
                 $tmp_name = CTempFile::GetFileName(basename($arFields["DETAIL_PICTURE"]["tmp_name"]));
                 CheckDirPath($tmp_name);
                 copy($arFields["DETAIL_PICTURE"]["tmp_name"], $tmp_name);
                 $arFields["DETAIL_PICTURE"]["copy"] = true;
                 $arFields["DETAIL_PICTURE"]["tmp_name"] = $tmp_name;
             }
             CIBLock::FilterPicture($arFields["DETAIL_PICTURE"]["tmp_name"], array("name" => "watermark", "position" => $arDef["WATERMARK_TEXT_POSITION"], "type" => "text", "coefficient" => $arDef["WATERMARK_TEXT_SIZE"], "text" => $arDef["WATERMARK_TEXT"], "font" => $_SERVER["DOCUMENT_ROOT"] . Rel2Abs("/", $arDef["WATERMARK_TEXT_FONT"]), "color" => $arDef["WATERMARK_TEXT_COLOR"]));
         }
     }
     $ipropTemplates = new \Bitrix\Iblock\InheritedProperty\ElementTemplates($ar_element["IBLOCK_ID"], $ar_element["ID"]);
     if (array_key_exists("PREVIEW_PICTURE", $arFields) && is_array($arFields["PREVIEW_PICTURE"])) {
         if (strlen($arFields["PREVIEW_PICTURE"]["name"]) <= 0 && strlen($arFields["PREVIEW_PICTURE"]["del"]) <= 0 && !is_set($arFields["PREVIEW_PICTURE"], "description")) {
             unset($arFields["PREVIEW_PICTURE"]);
         } else {
             $arFields["PREVIEW_PICTURE"]["MODULE_ID"] = "iblock";
             $arFields["PREVIEW_PICTURE"]["old_file"] = $ar_wf_element["PREVIEW_PICTURE"];
             $arFields["PREVIEW_PICTURE"]["name"] = \Bitrix\Iblock\Template\Helper::makeFileName($ipropTemplates, "ELEMENT_PREVIEW_PICTURE_FILE_NAME", array_merge($ar_element, $arFields), $arFields["PREVIEW_PICTURE"]);
         }
     }
     if (array_key_exists("DETAIL_PICTURE", $arFields) && is_array($arFields["DETAIL_PICTURE"])) {
         if (strlen($arFields["DETAIL_PICTURE"]["name"]) <= 0 && strlen($arFields["DETAIL_PICTURE"]["del"]) <= 0 && !is_set($arFields["DETAIL_PICTURE"], "description")) {
             unset($arFields["DETAIL_PICTURE"]);
         } else {
             $arFields["DETAIL_PICTURE"]["MODULE_ID"] = "iblock";
             $arFields["DETAIL_PICTURE"]["old_file"] = $ar_wf_element["DETAIL_PICTURE"];
             $arFields["DETAIL_PICTURE"]["name"] = \Bitrix\Iblock\Template\Helper::makeFileName($ipropTemplates, "ELEMENT_DETAIL_PICTURE_FILE_NAME", array_merge($ar_element, $arFields), $arFields["DETAIL_PICTURE"]);
         }
     }
     if (is_set($arFields, "DATE_ACTIVE_FROM")) {
         $arFields["ACTIVE_FROM"] = $arFields["DATE_ACTIVE_FROM"];
     }
     if (is_set($arFields, "DATE_ACTIVE_TO")) {
         $arFields["ACTIVE_TO"] = $arFields["DATE_ACTIVE_TO"];
     }
     if (is_set($arFields, "EXTERNAL_ID")) {
         $arFields["XML_ID"] = $arFields["EXTERNAL_ID"];
     }
     $PREVIEW_tmp = is_set($arFields, "PREVIEW_TEXT") ? $arFields["PREVIEW_TEXT"] : $ar_wf_element["PREVIEW_TEXT"];
     $PREVIEW_TYPE_tmp = is_set($arFields, "PREVIEW_TEXT_TYPE") ? $arFields["PREVIEW_TEXT_TYPE"] : $ar_wf_element["PREVIEW_TEXT_TYPE"];
     $DETAIL_tmp = is_set($arFields, "DETAIL_TEXT") ? $arFields["DETAIL_TEXT"] : $ar_wf_element["DETAIL_TEXT"];
     $DETAIL_TYPE_tmp = is_set($arFields, "DETAIL_TEXT_TYPE") ? $arFields["DETAIL_TEXT_TYPE"] : $ar_wf_element["DETAIL_TEXT_TYPE"];
     $arFields["SEARCHABLE_CONTENT"] = ToUpper((is_set($arFields, "NAME") ? $arFields["NAME"] : $ar_wf_element["NAME"]) . "\r\n" . ($PREVIEW_TYPE_tmp == "html" ? HTMLToTxt($PREVIEW_tmp) : $PREVIEW_tmp) . "\r\n" . ($DETAIL_TYPE_tmp == "html" ? HTMLToTxt($DETAIL_tmp) : $DETAIL_tmp));
     if (is_set($arFields["IBLOCK_SECTION_ID"]) && !is_set($arFields, "IBLOCK_SECTION")) {
         $arFields["IBLOCK_SECTION"] = array($arFields["IBLOCK_SECTION_ID"]);
     }
     $arFields["IBLOCK_ID"] = $ar_element["IBLOCK_ID"];
     if (!$this->CheckFields($arFields, $ID, $bCheckDiskQuota) || strlen($strWarning)) {
         $this->LAST_ERROR .= $strWarning;
         $Result = false;
         $arFields["RESULT_MESSAGE"] =& $this->LAST_ERROR;
     } else {
         unset($arFields["ID"]);
         if (array_key_exists("PREVIEW_PICTURE", $arFields)) {
             $SAVED_PREVIEW_PICTURE = $arFields["PREVIEW_PICTURE"];
         } else {
             $SAVED_PREVIEW_PICTURE = false;
         }
         if (array_key_exists("DETAIL_PICTURE", $arFields)) {
             $SAVED_DETAIL_PICTURE = $arFields["DETAIL_PICTURE"];
         } else {
             $SAVED_DETAIL_PICTURE = false;
         }
         // edit was done in workflow mode
         if ($bWorkFlow) {
             $arFields["WF_PARENT_ELEMENT_ID"] = $ID;
             if (array_key_exists("PREVIEW_PICTURE", $arFields)) {
                 if (is_array($arFields["PREVIEW_PICTURE"])) {
                     if (strlen($arFields["PREVIEW_PICTURE"]["name"]) <= 0 && strlen($arFields["PREVIEW_PICTURE"]["del"]) <= 0) {
                         if (array_key_exists("description", $arFields["PREVIEW_PICTURE"])) {
                             $arFile = CFile::GetFileArray($ar_wf_element["PREVIEW_PICTURE"]);
                             if ($arFields["PREVIEW_PICTURE"]["description"] != $arFile["DESCRIPTION"]) {
                                 //Description updated, so it's new file
                                 $arNewFile = CFile::MakeFileArray($ar_wf_element["PREVIEW_PICTURE"]);
                                 $arNewFile["description"] = $arFields["PREVIEW_PICTURE"]["description"];
                                 $arNewFile["MODULE_ID"] = "iblock";
                                 $arFields["PREVIEW_PICTURE"] = $arNewFile;
                             } else {
                                 $arFields["PREVIEW_PICTURE"] = $ar_wf_element["PREVIEW_PICTURE"];
                             }
                         } else {
                             //File was not changed at all
                             $arFields["PREVIEW_PICTURE"] = $ar_wf_element["PREVIEW_PICTURE"];
                         }
                     } else {
                         unset($arFields["PREVIEW_PICTURE"]["old_file"]);
                     }
                 }
             } else {
                 $arFields["PREVIEW_PICTURE"] = $ar_wf_element["PREVIEW_PICTURE"];
             }
             if (array_key_exists("DETAIL_PICTURE", $arFields)) {
                 if (is_array($arFields["DETAIL_PICTURE"])) {
                     if (strlen($arFields["DETAIL_PICTURE"]["name"]) <= 0 && strlen($arFields["DETAIL_PICTURE"]["del"]) <= 0) {
                         if (array_key_exists("description", $arFields["DETAIL_PICTURE"])) {
                             $arFile = CFile::GetFileArray($ar_wf_element["DETAIL_PICTURE"]);
                             if ($arFields["DETAIL_PICTURE"]["description"] != $arFile["DESCRIPTION"]) {
                                 //Description updated, so it's new file
                                 $arNewFile = CFile::MakeFileArray($ar_wf_element["DETAIL_PICTURE"]);
                                 $arNewFile["description"] = $arFields["DETAIL_PICTURE"]["description"];
                                 $arNewFile["MODULE_ID"] = "iblock";
                                 $arFields["DETAIL_PICTURE"] = $arNewFile;
                             } else {
                                 $arFields["DETAIL_PICTURE"] = $ar_wf_element["DETAIL_PICTURE"];
                             }
                         } else {
                             //File was not changed at all
                             $arFields["DETAIL_PICTURE"] = $ar_wf_element["DETAIL_PICTURE"];
                         }
                     } else {
                         unset($arFields["DETAIL_PICTURE"]["old_file"]);
                     }
                 }
             } else {
                 $arFields["DETAIL_PICTURE"] = $ar_wf_element["DETAIL_PICTURE"];
             }
             $NID = $this->Add($arFields);
             if ($NID > 0) {
                 if ($arFields["WF_STATUS_ID"] == 1) {
                     $DB->Query("UPDATE b_iblock_element SET TIMESTAMP_X=TIMESTAMP_X, WF_NEW=null WHERE ID=" . $ID);
                     $DB->Query("UPDATE b_iblock_element SET TIMESTAMP_X=TIMESTAMP_X, WF_NEW=null WHERE WF_PARENT_ELEMENT_ID=" . $ID);
                     $ar_wf_element["WF_NEW"] = false;
                 }
                 if ($this->bWF_SetMove) {
                     CIBlockElement::WF_SetMove($NID, $LAST_ID);
                 }
                 if ($ar_element["WF_STATUS_ID"] != 1 && $ar_wf_element["WF_STATUS_ID"] != $arFields["WF_STATUS_ID"] && $arFields["WF_STATUS_ID"] != 1) {
                     $DB->Query("UPDATE b_iblock_element SET TIMESTAMP_X=TIMESTAMP_X, WF_STATUS_ID=" . $arFields["WF_STATUS_ID"] . " WHERE ID=" . $ID);
                 }
             }
             //element was not published, so keep original
             if (is_set($arFields, "WF_STATUS_ID") && $arFields["WF_STATUS_ID"] != 1 && $ar_element["WF_STATUS_ID"] == 1 || !is_set($arFields, "WF_STATUS_ID") && $ar_wf_element["WF_STATUS_ID"] != 1) {
                 CIBlockElement::WF_CleanUpHistoryCopies($ID);
                 return true;
             }
             $arFields['WF_PARENT_ELEMENT_ID'] = false;
             $rs = $DB->Query("SELECT PREVIEW_PICTURE, DETAIL_PICTURE from b_iblock_element WHERE ID = " . $NID);
             $ar_new_element = $rs->Fetch();
         } else {
             $ar_new_element = false;
         }
         if ($ar_new_element) {
             if (!intval($ar_new_element["PREVIEW_PICTURE"])) {
                 $arFields["PREVIEW_PICTURE"] = false;
             } else {
                 $arFields["PREVIEW_PICTURE"] = $ar_new_element["PREVIEW_PICTURE"];
             }
             if (!intval($ar_new_element["DETAIL_PICTURE"])) {
                 $arFields["DETAIL_PICTURE"] = false;
             } else {
                 $arFields["DETAIL_PICTURE"] = $ar_new_element["DETAIL_PICTURE"];
             }
             if (is_array($arFields["PROPERTY_VALUES"]) && count($arFields["PROPERTY_VALUES"]) > 0) {
                 $i = 0;
                 $db_prop = CIBlockProperty::GetList(array(), array("IBLOCK_ID" => $arFields["IBLOCK_ID"], "CHECK_PERMISSIONS" => "N", "PROPERTY_TYPE" => "F"));
                 while ($arProp = $db_prop->Fetch()) {
                     $i++;
                     unset($arFields["PROPERTY_VALUES"][$arProp["CODE"]]);
                     unset($arFields["PROPERTY_VALUES"][$arProp["ID"]]);
                     $arFields["PROPERTY_VALUES"][$arProp["ID"]] = array();
                 }
                 if ($i > 0) {
                     //Delete previous files
                     $props = CIBlockElement::GetProperty($arFields["IBLOCK_ID"], $ID, "sort", "asc", array("PROPERTY_TYPE" => "F", "EMPTY" => "N"));
                     while ($arProp = $props->Fetch()) {
                         $arFields["PROPERTY_VALUES"][$arProp["ID"]][$arProp['PROPERTY_VALUE_ID']] = array("VALUE" => array("del" => "Y"), "DESCRIPTION" => false);
                     }
                     //Add copy from history
                     $arDup = array();
                     //This is cure for files duplication bug (just save element one more time)
                     $props = CIBlockElement::GetProperty($arFields["IBLOCK_ID"], $NID, "sort", "asc", array("PROPERTY_TYPE" => "F", "EMPTY" => "N"));
                     while ($arProp = $props->Fetch()) {
                         if (!array_key_exists($arProp["VALUE"], $arDup)) {
                             $arFields["PROPERTY_VALUES"][$arProp["ID"]][$arProp['PROPERTY_VALUE_ID']] = array("VALUE" => $arProp["VALUE"], "DESCRIPTION" => $arProp["DESCRIPTION"]);
                             $arDup[$arProp["VALUE"]] = true;
                             //This is cure for files duplication bug
                         }
                     }
                 }
             }
         } else {
             if (array_key_exists("PREVIEW_PICTURE", $arFields)) {
                 CFile::SaveForDB($arFields, "PREVIEW_PICTURE", "iblock");
             }
             if (array_key_exists("DETAIL_PICTURE", $arFields)) {
                 CFile::SaveForDB($arFields, "DETAIL_PICTURE", "iblock");
             }
         }
         unset($arFields["IBLOCK_ID"]);
         unset($arFields["WF_NEW"]);
         unset($arFields["IBLOCK_SECTION_ID"]);
         $bTimeStampNA = false;
         if (is_set($arFields, "TIMESTAMP_X") && ($arFields["TIMESTAMP_X"] === NULL || $arFields["TIMESTAMP_X"] === false)) {
             $bTimeStampNA = true;
             unset($arFields["TIMESTAMP_X"]);
         }
         $strUpdate = $DB->PrepareUpdate("b_iblock_element", $arFields, "iblock");
         if (strlen($strUpdate) > 0) {
             $strUpdate .= ", ";
         }
         $strSql = "UPDATE b_iblock_element SET " . $strUpdate . ($bTimeStampNA ? "TIMESTAMP_X=TIMESTAMP_X" : "TIMESTAMP_X=now()") . " WHERE ID=" . $ID;
         $DB->Query($strSql, false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__);
         if (array_key_exists("PROPERTY_VALUES", $arFields) && is_array($arFields["PROPERTY_VALUES"]) && count($arFields["PROPERTY_VALUES"]) > 0) {
             CIBlockElement::SetPropertyValues($ID, $ar_element["IBLOCK_ID"], $arFields["PROPERTY_VALUES"]);
         }
         if (is_set($arFields, "IBLOCK_SECTION")) {
             CIBlockElement::SetElementSection($ID, $arFields["IBLOCK_SECTION"], false, $arIBlock["RIGHTS_MODE"] === "E" ? $arIBlock["ID"] : 0);
         }
         if ($arIBlock["RIGHTS_MODE"] === "E") {
             $obElementRights = new CIBlockElementRights($arIBlock["ID"], $ID);
             if (array_key_exists("RIGHTS", $arFields) && is_array($arFields["RIGHTS"])) {
                 $obElementRights->SetRights($arFields["RIGHTS"]);
             }
         }
         if (array_key_exists("IPROPERTY_TEMPLATES", $arFields)) {
             $ipropTemplates = new \Bitrix\Iblock\InheritedProperty\ElementTemplates($arIBlock["ID"], $ID);
             $ipropTemplates->set($arFields["IPROPERTY_TEMPLATES"]);
         }
         if ($bUpdateSearch) {
             CIBlockElement::UpdateSearch($ID, true);
         }
         if ($bWorkFlow) {
             CIBlockElement::WF_CleanUpHistoryCopies($ID);
         }
         //Restore saved values
         if ($SAVED_PREVIEW_PICTURE !== false) {
             $arFields["PREVIEW_PICTURE_ID"] = $arFields["PREVIEW_PICTURE"];
             $arFields["PREVIEW_PICTURE"] = $SAVED_PREVIEW_PICTURE;
         } else {
             unset($arFields["PREVIEW_PICTURE"]);
         }
         if ($SAVED_DETAIL_PICTURE !== false) {
             $arFields["DETAIL_PICTURE_ID"] = $arFields["DETAIL_PICTURE"];
             $arFields["DETAIL_PICTURE"] = $SAVED_DETAIL_PICTURE;
         } else {
             unset($arFields["DETAIL_PICTURE"]);
         }
         if ($arIBlock["FIELDS"]["LOG_ELEMENT_EDIT"]["IS_REQUIRED"] == "Y") {
             $USER_ID = is_object($USER) ? intval($USER->GetID()) : 0;
             $arEvents = GetModuleEvents("main", "OnBeforeEventLog", true);
             if (empty($arEvents) || ExecuteModuleEventEx($arEvents[0], array($USER_ID)) === false) {
                 $rsElement = CIBlockElement::GetList(array(), array("=ID" => $ID, "CHECK_PERMISSIONS" => "N", "SHOW_NEW" => "Y"), false, false, array("ID", "NAME", "LIST_PAGE_URL", "CODE"));
                 $arElement = $rsElement->GetNext();
                 $res = array("ID" => $ID, "CODE" => $arElement["CODE"], "NAME" => $arElement["NAME"], "ELEMENT_NAME" => $arIBlock["ELEMENT_NAME"], "USER_ID" => $USER_ID, "IBLOCK_PAGE_URL" => $arElement["LIST_PAGE_URL"]);
                 CEventLog::Log("IBLOCK", "IBLOCK_ELEMENT_EDIT", "iblock", $arIBlock["ID"], serialize($res));
             }
         }
         $Result = true;
         /************* QUOTA *************/
         $_SESSION["SESS_RECOUNT_DB"] = "Y";
         /************* QUOTA *************/
     }
     $arFields["ID"] = $ID;
     $arFields["IBLOCK_ID"] = $ar_element["IBLOCK_ID"];
     $arFields["RESULT"] =& $Result;
     if (isset($arFields["PREVIEW_PICTURE"]) && $arFields["PREVIEW_PICTURE"]["COPY_FILE"] == "Y" && $arFields["PREVIEW_PICTURE"]["copy"]) {
         @unlink($arFields["PREVIEW_PICTURE"]["tmp_name"]);
         @rmdir(dirname($arFields["PREVIEW_PICTURE"]["tmp_name"]));
     }
     if (isset($arFields["DETAIL_PICTURE"]) && $arFields["DETAIL_PICTURE"]["COPY_FILE"] == "Y" && $arFields["DETAIL_PICTURE"]["copy"]) {
         @unlink($arFields["DETAIL_PICTURE"]["tmp_name"]);
         @rmdir(dirname($arFields["DETAIL_PICTURE"]["tmp_name"]));
     }
     foreach (GetModuleEvents("iblock", "OnAfterIBlockElementUpdate", true) as $arEvent) {
         ExecuteModuleEventEx($arEvent, array(&$arFields));
     }
     if (defined("BX_COMP_MANAGED_CACHE")) {
         $GLOBALS["CACHE_MANAGER"]->ClearByTag("iblock_id_" . $arIBlock["ID"]);
     }
     return $Result;
 }
Example #28
0
 public static function Update($ID, $arFields, $strUploadDir = false)
 {
     global $DB;
     $arBinds = array();
     $err_mess = CAllVoteQuestion::err_mess() . "<br>Function: Update<br>Line: ";
     $strUploadDir = $strUploadDir === false ? "vote" : $strUploadDir;
     $ID = intVal($ID);
     if ($ID <= 0 || !CVoteQuestion::CheckFields("UPDATE", $arFields, $ID)) {
         return false;
     }
     /***************** Event onBeforeVoteQuestionUpdate ****************/
     foreach (GetModuleEvents("vote", "onBeforeVoteQuestionUpdate", true) as $arEvent) {
         if (ExecuteModuleEventEx($arEvent, array(&$ID, &$arFields)) === false) {
             return false;
         }
     }
     /***************** /Event ******************************************/
     if (empty($arFields)) {
         return false;
     }
     if (array_key_exists("IMAGE_ID", $arFields) && is_array($arFields["IMAGE_ID"]) && (!array_key_exists("MODULE_ID", $arFields["IMAGE_ID"]) || strlen($arFields["IMAGE_ID"]["MODULE_ID"]) <= 0)) {
         $arFields["IMAGE_ID"]["MODULE_ID"] = "vote";
     }
     CFile::SaveForDB($arFields, "IMAGE_ID", $strUploadDir);
     $arFields["~TIMESTAMP_X"] = $DB->GetNowFunction();
     $strUpdate = $DB->PrepareUpdate("b_vote_question", $arFields);
     if (is_set($arFields, "QUESTION")) {
         $arBinds["QUESTION"] = $arFields["QUESTION"];
     }
     if (!empty($strUpdate)) {
         $DB->QueryBind("UPDATE b_vote_question SET " . $strUpdate . " WHERE ID=" . $ID, $arBinds, false, $err_mess);
     }
     unset($GLOBALS["VOTE_CACHE"]["QUESTION"][$ID]);
     /***************** Event onAfterVoteQuestionUpdate *****************/
     foreach (GetModuleEvents("vote", "onAfterVoteQuestionUpdate", true) as $arEvent) {
         ExecuteModuleEventEx($arEvent, array($ID, $arFields));
     }
     /***************** /Event ******************************************/
     return $ID;
 }
Example #29
0
 /**
  * <p>Функция добавляет нового пользователя. При успешном выполнении возвращает ID нового пользователя, в противном случае - вернет "false", а в свойстве LAST_ERROR объекта будет содержаться текст ошибки. <br><br><b>CUser::Add()</b> можно вызывать только как метод инициализированного объекта, а не как статический метод класса CUser. </p>
  *
  *
  *
  *
  * @param array $fields  Массив значений полей, в качестве ключей данного массива
  * допустимо использовать: <ul> <li> <b>LOGIN</b><font color="red">*</font> - логин (имя
  * входа) </li> <li> <b>NAME</b> - имя пользователя </li> <li> <b>LAST_NAME</b> - фамилия
  * пользователя </li> <li> <b>SECOND_NAME</b> - отчество пользователя </li> <li>
  * <b>EMAIL</b><font color="red">*</font> - E-Mail адрес пользователя </li> <li> <b>PASSWORD</b><font
  * color="red">*</font> - пароль пользователя </li> <li> <b>CONFIRM_PASSWORD</b><font
  * color="red">*</font> - подтверждение пароля (должно быть равным <b>PASSWORD</b>)
  * </li> <li> <b>GROUP_ID</b> - массив ID групп к которым будет приписан
  * пользователь </li> <li> <b>ACTIVE</b> - флаг активности пользователя [Y|N] </li>
  * <li> <b>LID</b> - ID сайта по умолчанию для уведомлений </li> <li> <b>ADMIN_NOTES</b> -
  * заметки администратора </li> <li> <b>XML_ID</b> - ID пользователя для связи с
  * внешними источниками (например, ID пользователя в какой-либо
  * внешний базе) </li> <li> <b>EXTERNAL_AUTH_ID</b> - код источника [link=89611]внешней
  * авторизации[/link] </li> <li> <b>PERSONAL_PROFESSION</b> - наименование профессии </li>
  * <li> <b>PERSONAL_WWW</b> - персональная WWW-страница </li> <li> <b>PERSONAL_ICQ</b> - ICQ </li> <li>
  * <b>PERSONAL_GENDER</b> - пол ["M" - мужчина; "F" - женщина] </li> <li> <b>PERSONAL_BIRTHDAY</b> -
  * дата рождения в формате текущего сайта (или текущего языка для
  * административной части) </li> <li> <b>PERSONAL_PHOTO</b> - массив описывающий
  * фотографию, допустимы следующие ключи этого массива: <ul> <li> <b>name</b>
  * - имя файла </li> <li> <b>size</b> - размер файла </li> <li> <b>tmp_name</b> - временный
  * путь на сервере </li> <li> <b>type</b> - тип загружаемого файла </li> <li> <b>del</b> -
  * если значение равно "Y", то изображение будет удалено </li> <li>
  * <b>MODULE_ID</b> - идентификатор главного модуля - "main" </li> </ul> </li> <li>
  * <b>PERSONAL_PHONE</b> - телефон </li> <li> <b>PERSONAL_FAX</b> - факс </li> <li> <b>PERSONAL_MOBILE</b> -
  * мобильный телефон </li> <li> <b>PERSONAL_PAGER</b> - пэйджер </li> <li> <b>PERSONAL_STREET</b> -
  * улица, дом </li> <li> <b>PERSONAL_MAILBOX</b> - почтовый ящик </li> <li> <b>PERSONAL_CITY</b> -
  * город </li> <li> <b>PERSONAL_STATE</b> - область / край </li> <li> <b>PERSONAL_ZIP</b> - индекс
  * </li> <li> <b>PERSONAL_COUNTRY</b> - страна </li> <li> <b>PERSONAL_NOTES</b> - личные заметки </li>
  * <li> <b>WORK_COMPANY</b> - наименование компании </li> <li> <b>WORK_DEPARTMENT</b> -
  * департамент / отдел </li> <li> <b>WORK_POSITION</b> - должность </li> <li> <b>WORK_WWW</b> -
  * WWW-страница компании </li> <li> <b>WORK_PHONE</b> - рабочий телефон </li> <li>
  * <b>WORK_FAX</b> - рабочий факс </li> <li> <b>WORK_PAGER</b> - рабочий пэйджер </li> <li>
  * <b>WORK_STREET</b> - улица, дом компании </li> <li> <b>WORK_MAILBOX</b> - почтовый ящик
  * компании </li> <li> <b>WORK_CITY</b> - город компании </li> <li> <b>WORK_STATE</b> - область
  * / край компании </li> <li> <b>WORK_ZIP</b> - индекс компании </li> <li> <b>WORK_COUNTRY</b> -
  * страна компании </li> <li> <b>WORK_PROFILE</b> - направления деятельности
  * компании </li> <li> <b>WORK_LOGO</b> - массив описывающий логотип компании,
  * допустимы следующие ключи этого массива: <ul> <li> <b>name</b> - имя файла
  * </li> <li> <b>size</b> - размер файла </li> <li> <b>tmp_name</b> - временный путь на
  * сервере </li> <li> <b>type</b> - тип загружаемого файла </li> <li> <b>del</b> - если
  * значение равно "Y", то изображение будет удалено </li> <li> <b>MODULE_ID</b> -
  * идентификатор главного модуля - "main" </li> </ul> </li> <li> <b>WORK_NOTES</b> -
  * заметки касаемо работы пользователя </li> </ul> <font color="red">*</font> -
  * обязательные поля.
  *
  *
  *
  * @return mixed 
  *
  *
  * <h4>Example</h4> 
  * <pre>
  * &lt;?
  * // создадим массив описывающий изображение 
  * // находящееся в файле на сервере
  * $arIMAGE = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"]."/images/photo.gif");
  * $arIMAGE["MODULE_ID"] = "main";
  * 
  * $user = new CUser;
  * $arFields = Array(
  *   "NAME"              =&gt; "Сергей",
  *   "LAST_NAME"         =&gt; "Иванов",
  *   "EMAIL"             =&gt; "*****@*****.**",
  *   "LOGIN"             =&gt; "ivan",
  *   "LID"               =&gt; "ru",
  *   "ACTIVE"            =&gt; "Y",
  *   "GROUP_ID"          =&gt; array(10,11),
  *   "PASSWORD"          =&gt; "123456",
  *   "CONFIRM_PASSWORD"  =&gt; "123456",
  *   "PERSONAL_PHOTO"    =&gt; $arIMAGE
  * );
  * 
  * $ID = <b>$user-&gt;Add</b>($arFields);
  * if (intval($ID) &gt; 0)
  *     echo "Пользователь успешно добавлен.";
  * else
  *     echo $user-&gt;LAST_ERROR;
  * ?&gt;
  * </pre>
  *
  *
  *
  * <h4>See Also</h4> 
  * <ul> <li> <a href="http://dev.1c-bitrix.ru/api_help/main/reference/cuser/index.php#flds">Поля CUser</a> </li> <li>
  * <a href="http://dev.1c-bitrix.ru/api_help/main/reference/cuser/update.php">CUser::Update</a> </li> <li> <a
  * href="http://dev.1c-bitrix.ru/api_help/main/reference/cuser/delete.php">CUser::Delete</a> </li> </ul></b<a
  * name="examples"></a>
  *
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/main/reference/cuser/add.php
  * @author Bitrix
  */
 public function Add($arFields)
 {
     /** @global CUserTypeManager $USER_FIELD_MANAGER */
     global $DB, $USER_FIELD_MANAGER, $CACHE_MANAGER;
     $ID = 0;
     if (!$this->CheckFields($arFields)) {
         $Result = false;
         $arFields["RESULT_MESSAGE"] =& $this->LAST_ERROR;
     } else {
         unset($arFields["ID"]);
         if (is_set($arFields, "ACTIVE") && $arFields["ACTIVE"] != "Y") {
             $arFields["ACTIVE"] = "N";
         }
         if ($arFields["PERSONAL_GENDER"] == "NOT_REF" || $arFields["PERSONAL_GENDER"] != "M" && $arFields["PERSONAL_GENDER"] != "F") {
             $arFields["PERSONAL_GENDER"] = "";
         }
         $original_pass = $arFields["PASSWORD"];
         $salt = randString(8);
         $arFields["PASSWORD"] = $salt . md5($salt . $arFields["PASSWORD"]);
         unset($arFields["STORED_HASH"]);
         $salt = randString(8);
         $checkword = $arFields["CHECKWORD"] == '' ? md5(CMain::GetServerUniqID() . uniqid()) : $arFields["CHECKWORD"];
         $arFields["CHECKWORD"] = $salt . md5($salt . $checkword);
         $arFields["~CHECKWORD_TIME"] = $DB->CurrentTimeFunction();
         if (is_set($arFields, "EMAIL")) {
             $arFields["EMAIL"] = strtolower($arFields["EMAIL"]);
         }
         if (is_set($arFields, "WORK_COUNTRY")) {
             $arFields["WORK_COUNTRY"] = intval($arFields["WORK_COUNTRY"]);
         }
         if (is_set($arFields, "PERSONAL_COUNTRY")) {
             $arFields["PERSONAL_COUNTRY"] = intval($arFields["PERSONAL_COUNTRY"]);
         }
         if (array_key_exists("PERSONAL_PHOTO", $arFields) && is_array($arFields["PERSONAL_PHOTO"]) && (!array_key_exists("MODULE_ID", $arFields["PERSONAL_PHOTO"]) || strlen($arFields["PERSONAL_PHOTO"]["MODULE_ID"]) <= 0)) {
             $arFields["PERSONAL_PHOTO"]["MODULE_ID"] = "main";
         }
         CFile::SaveForDB($arFields, "PERSONAL_PHOTO", "main");
         if (array_key_exists("WORK_LOGO", $arFields) && is_array($arFields["WORK_LOGO"]) && (!array_key_exists("MODULE_ID", $arFields["WORK_LOGO"]) || strlen($arFields["WORK_LOGO"]["MODULE_ID"]) <= 0)) {
             $arFields["WORK_LOGO"]["MODULE_ID"] = "main";
         }
         CFile::SaveForDB($arFields, "WORK_LOGO", "main");
         $arInsert = $DB->PrepareInsert("b_user", $arFields);
         if (!is_set($arFields, "DATE_REGISTER")) {
             $arInsert[0] .= ", DATE_REGISTER";
             $arInsert[1] .= ", " . $DB->GetNowFunction();
         }
         $strSql = "\n\t\t\t\tINSERT INTO b_user (\n\t\t\t\t\t" . $arInsert[0] . "\n\t\t\t\t) VALUES (\n\t\t\t\t\t" . $arInsert[1] . "\n\t\t\t\t)\n\t\t\t";
         $DB->Query($strSql);
         $ID = $DB->LastID();
         $USER_FIELD_MANAGER->Update("USER", $ID, $arFields);
         if (is_set($arFields, "GROUP_ID")) {
             CUser::SetUserGroup($ID, $arFields["GROUP_ID"]);
         }
         //update digest hash for http digest authorization
         if (COption::GetOptionString('main', 'use_digest_auth', 'N') == 'Y') {
             CUser::UpdateDigest($ID, $original_pass);
         }
         $Result = $ID;
         $arFields["ID"] =& $ID;
         $arFields["CHECKWORD"] = $checkword;
     }
     $arFields["RESULT"] =& $Result;
     foreach (GetModuleEvents("main", "OnAfterUserAdd", true) as $arEvent) {
         ExecuteModuleEventEx($arEvent, array(&$arFields));
     }
     if ($ID > 0 && defined("BX_COMP_MANAGED_CACHE")) {
         $CACHE_MANAGER->ClearByTag("USER_CARD_" . intval($ID / TAGGED_user_card_size));
         $CACHE_MANAGER->ClearByTag("USER_CARD");
         $CACHE_MANAGER->ClearByTag("USER_NAME_" . $ID);
         $CACHE_MANAGER->ClearByTag("USER_NAME");
     }
     return $Result;
 }
Example #30
0
	/**
	 * <p>Функция изменяет параметры доставки с кодом ID на новые значения из массива arFields</p>
	 *
	 *
	 *
	 *
	 * @param int $ID  Код доставки.
	 *
	 *
	 *
	 * @param array $arFields  Ассоциативный массив новых параметров доставки, ключами в
	 * котором являются названия параметров доставки, а значениями -
	 * значения параметров. <br> Допустимые ключи: <br><ul> <li> <b>NAME</b> -
	 * название доставки (обязательное, задается на языке сайта, к
	 * которому привязана эта доставка);</li> <li> <b>LID</b> - код сайта, к
	 * которому привязана эта доставка;</li> <li> <b>PERIOD_FROM</b> - минимальный
	 * срок доставки;</li> <li> <b>PERIOD_TO</b> - максимальный срок доставки;</li> <li>
	 * <b>PERIOD_TYPE</b> - единица измерения срока: D - дни, H - часы, M - месяцы;</li> <li>
	 * <b>WEIGHT_FROM</b> - минимальный вес заказа, для которого возможна эта
	 * доставка (единица измерения должна быть едина на сайте);</li> <li>
	 * <b>WEIGHT_TO</b> - максимальный вес заказа, для которого возможна эта
	 * доставка (единица измерения должна быть едина на сайте);</li> <li>
	 * <b>ORDER_PRICE_FROM</b> - минимальная стоимость заказа, для которой возможна
	 * эта доставка;</li> <li> <b>ORDER_PRICE_TO</b> - максимальная стоимость заказа,
	 * для которой возможна эта доставка;</li> <li> <b>ORDER_CURRENCY</b> - валюта
	 * ограничений по стоимости;</li> <li> <b>ACTIVE</b> - флаг (Y/N) активности
	 * доставки;</li> <li> <b>PRICE</b> - стоимость доставки;</li> <li> <b>CURRENCY</b> - валюта
	 * стоимости доставки;</li> <li> <b>SORT</b> - индекс сортировки;</li> <li>
	 * <b>DESCRIPTION</b> - описание доставки;</li> <li> <b>LOCATIONS</b> - массив массивов
	 * вида: <pre class="syntax">array("LOCATION_ID" =&gt; "код местоположения или <br> группы
	 * местоположений",<br> "LOCATION_TYPE"=&gt;"L - для местоположения, <br> G - для
	 * группы")</pre> содержащий местоположения и группы местоположений,
	 * для которых работает эта доставка</li> </ul>
	 *
	 *
	 *
	 * @return int <p>Возвращает код изменяемой записи или <i>false</i> в случае ошибки.</p><a
	 * name="examples"></a>
	 *
	 *
	 * <h4>Example</h4> 
	 * <pre>
	 * &lt;?<br>$arFields = array(<br>   "NAME" =&gt; "Доставка курьером",<br>   "LID" =&gt; "ru",<br>   "PERIOD_FROM" =&gt; 1,<br>   "PERIOD_TO" =&gt; 3,<br>   "PERIOD_TYPE" =&gt; "D",<br>   "WEIGHT_FROM" =&gt; 0,<br>   "WEIGHT_TO" =&gt; 2500,<br>   "ORDER_PRICE_FROM" =&gt; 0,<br>   "ORDER_PRICE_TO" =&gt; 10000,<br>   "ORDER_CURRENCY" =&gt; "RUB",<br>   "ACTIVE" =&gt; "Y",<br>   "PRICE" =&gt; 58,<br>   "CURRENCY" =&gt; "RUB",<br>   "SORT" =&gt; 100,<br>   "DESCRIPTION" =&gt; "Заказ будет доставлен Вам в течение 3 - 10 рабочих дней после передачи его в курьерскую службу.",<br>   "LOCATIONS" =&gt; array(<br>      array("LOCATION_ID"=&gt;1, "LOCATION_TYPE"=&gt;"L"),<br>      array("LOCATION_ID"=&gt;3, "LOCATION_TYPE"=&gt;"G")<br>      )<br>);<br><br>if (!CSaleDelivery::Update($ID, $arFields))<br>   echo "Ошибка изменения доставки";<br>?&gt;
	 * </pre>
	 *
	 *
	 * @static
	 * @link http://dev.1c-bitrix.ru/api_help/sale/classes/csaledelivery/csaledelivery__update.dcec3766.php
	 * @author Bitrix
	 */
	public static function Update($ID, $arFields)
	{
		global $DB;

		$ID = intval($ID);
		
		if ($ID <= 0 || !CSaleDelivery::CheckFields("UPDATE", $arFields)) 
			return false;

		if (array_key_exists("LOGOTIP", $arFields) && is_array($arFields["LOGOTIP"]))
			$arFields["LOGOTIP"]["MODULE_ID"] = "sale";

		CFile::SaveForDB($arFields, "LOGOTIP", "sale/delivery/logotip");

		$strUpdate = $DB->PrepareUpdate("b_sale_delivery", $arFields);

		$strSql = "UPDATE b_sale_delivery SET ".$strUpdate." WHERE ID = ".$ID."";
		$DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);

		if (is_set($arFields, "LOCATIONS"))
		{
			$DB->Query("DELETE FROM b_sale_delivery2location WHERE DELIVERY_ID = ".$ID."");

			$countarFieldLoc = count($arFields["LOCATIONS"]);
			for ($i = 0; $i < $countarFieldLoc; $i++)
			{
				$arInsert = $DB->PrepareInsert("b_sale_delivery2location", $arFields["LOCATIONS"][$i]);

				$strSql =
					"INSERT INTO b_sale_delivery2location(DELIVERY_ID, ".$arInsert[0].") ".
					"VALUES(".$ID.", ".$arInsert[1].")";
				$DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
			}
		}

		if (is_set($arFields, "PAY_SYSTEM"))
		{
			CSaleDelivery::UpdateDeliveryPay($ID, $arFields["PAY_SYSTEM"]);
		}

		return $ID;
	}