Your IP : 172.28.240.42


Current Path : /var/www/html/clients/wodo.e-nk.ru/bitrix/modules/photogallery_old/tools/
Upload File :
Current File : /var/www/html/clients/wodo.e-nk.ru/bitrix/modules/photogallery_old/tools/components_lib.php

<?
IncludeModuleLangFile(__FILE__); 
class CPGalleryInterface
{
	var $IBlockID = 0;
	
	var $Gallery = false;
	
	var $User = array("Permission" => "D"); // current user
	
	var $arCache = array();
	var $arError = array();
	
	function CPGalleryInterface($main_params = array(), $additional_params = array())
	{
		$additional_params["cache_time"] = intval(!empty($additional_params["cache_time"]) ? 
			$additional_params["cache_time"] : $additional_params["CACHE_TIME"]);
		$additional_params["cache_path"] = trim(!empty($additional_params["cache_path"]) ? 
			$additional_params["cache_path"] : $additional_params["CACHE_PATH"]); 
		$this->arCache = array(
			"time" => $additional_params["cache_time"], 
			"path" => str_replace("//", "/", $additional_params["cache_path"]."/"));

		$additional_params["show_error"] = (!empty($additional_params["show_error"]) ? $additional_params["show_error"] : $additional_params["SHOW_ERROR"]);
		$additional_params["set_404"] = (!empty($additional_params["set_404"]) ? $additional_params["set_404"] : $additional_params["SET_404"]);
		$this->arError = array(
			"show_error" => ($additional_params["show_error"] == "N" ? "N" : "Y"), 
			"set_404" => ($arParams["set_404"] == "Y" ? "Y" : "N")); 
		
		// check id iblock
		if (intval($main_params["IBlockID"]) <= 0)
		{
			ShowError(GetMessage("P_IBLOCK_ID_EMPTY"));
			return false;
		}
		
		$this->IBlockID = intval($main_params["IBlockID"]);
		
		if (!empty($main_params["GalleryID"]))
		{
			$this->Gallery = $this->GetGallery($main_params["GalleryID"]);
			if (!$this->Gallery)
				return false;
		}
		
		$this->User["Permission"] = (!empty($main_params["Permission"]) ? $main_params["Permission"] : $this->GetPermission());
		if (!$this->CheckPermission("view"))
			return false;
	}
	
	function GetGallery($gallery_id)
	{
		static $arResult = array();
		$arCache = array(
			"id" => serialize(array(
				"iblock_id" => $this->IBlockID,
				"user_alias" => $gallery_id)), 
			"path" => $this->arCache["path"]."gallery".$gallery_id, 
			"time" => $this->arCache["time"]);
		
		if (empty($arResult[$arCache["id"]]))
		{
			$cache = new CPHPCache;
			if ($arCache["time"] > 0 && $cache->InitCache($arCache["time"], $arCache["id"], $arCache["path"]))
			{
				$arResult[$arCache["id"]] = $cache->GetVars();
			}
			else
			{
				CModule::IncludeModule("iblock");
				$arFilter = array(
					"IBLOCK_ACTIVE" => "Y",
					"IBLOCK_ID" => $this->IBlockID, 
					"SECTION_ID" => 0, 
					"CODE" => $gallery_id);
				$db_res = CIBlockSection::GetList(
					array(), 
					$arFilter, 
					false, 
					array("ID", "ACTIVE", "CODE", "NAME", "DESCRIPTION", "CREATED_BY", "RIGHT_MARGIN", "LEFT_MARGIN"));

				if ($db_res && $res = $db_res->GetNext())
				{
					$arResult[$arCache["id"]] = $res;
					if ($arCache["time"] > 0)
					{
						$cache->StartDataCache($arCache["time"], $arCache["id"], $arCache["path"]);
						$cache->EndDataCache($res);
					}
				}
			}
		}
		if (empty($arResult[$arCache["id"]]))
		{
			if ($this->arError["show_error"] == "Y")
				ShowError(GetMessage("P_GALLERY_NOT_FOUND"));
			if ($this->arError["set_404"] == "Y")
				CHTTP::SetStatus("404 Not Found");
			return false;
		}
		elseif ($arResult[$arCache["id"]]["ACTIVE"] != "Y")
		{
			if ($this->arError["show_error"] == "Y")
				ShowError(GetMessage("P_GALLERY_IS_BLOCKED"));
			return false;
		}
		
		return $arResult[$arCache["id"]];
	}
	
	function GetSection($id, &$arSection, $params = array())
	{
		static $arResult = array();
		$params = (is_array($params) ? $params : array($params));
		$id = intval($id);
		if ($id <= 0)
			return 200;

		$arCache = array(
			"id" => serialize(array(
					"iblock_id" => $this->IBlockID,
					"section_id" => $id, 
//					"get_elements_count" => ($params["get_elements_count"] == "N" ? "N" : "Y"), 
//					"get_sections_count" => ($params["get_sections_count"] == "N" ? "N" : "Y")
				)
			), 
			"path" => $this->arCache["path"]."section".$id, 
			"time" => $this->arCache["time"]);
		
		if (empty($arResult[$arCache["id"]]))
		{
			$cache = new CPHPCache;
			if ($arCache["time"] > 0 && $cache->InitCache($arCache["time"], $arCache["id"], $arCache["path"]))
			{
				$arResult[$arCache["id"]] = $cache->GetVars();
			}
			else 
			{
				CModule::IncludeModule("iblock");
				$arFilter = array(
					"IBLOCK_ACTIVE" => "Y", 
					"IBLOCK_ID" => $this->IBlockID, 
					"ID" => $id);

				$db_res = CIBlockSection::GetList(
					array(), 
					$arFilter, 
					false, 
					array("ID", "CODE", "NAME", "DESCRIPTION", "ACTIVE", "SECTION_ID", "RIGHT_MARGIN", "LEFT_MARGIN"));
				if (!($db_res && $arSection = $db_res->GetNext()))
				{
					if ($this->arError["show_error"] == "Y")
						ShowError(GetMessage("P_SECTION_NOT_FOUND"));
					if ($this->arError["set_404"] == "Y")
						CHTTP::SetStatus("404 Not Found");
					return 404;
				}
				elseif ($arSection["ACTIVE"] != "Y" && $this->User["Permission"] < "U")
				{
					if ($this->arError["show_error"] == "Y")
						ShowError(GetMessage("P_ALBUM_IS_BLOCKED"));
					return 405;
				}
				elseif ($this->Gallery && ($arSection["LEFT_MARGIN"] < $this->Gallery["LEFT_MARGIN"] || 
					$this->Gallery["RIGHT_MARGIN"] < $arSection["RIGHT_MARGIN"]))
				{
					return 301;
				}
				else
				{
					$arSection["SECTIONS_CNT"] = 0;
					if (($arSection["RIGHT_MARGIN"] - $arSection["LEFT_MARGIN"]) > 1)
						$arSection["SECTIONS_CNT"] = intVal(CIBlockSection::GetCount(array("SECTION_ID" => $arSection["ID"])));

					$arSection["SECTION_ELEMENTS_CNT"] = $arSection["SECTION_ELEMENTS_CNT_ALL"] = $arSection["ELEMENTS_CNT"] = 0;
					$arSection["ELEMENTS_CNT_ALL"] = intVal(CIBlockSection::GetSectionElementsCount(
							$arSection["ID"], array("CNT_ALL" => "Y")));

					// if section not empty
					if ($arSection["ELEMENTS_CNT_ALL"] > 0)
					{
						if ($arSection["SECTIONS_CNT"] > 0)
						{
							$arSection["SECTION_ELEMENTS_CNT_ALL"] = intval(CIBlockElement::GetList(
								array(), 
								array("SECTION_ID" => $arSection["ID"]), 
								array(), 
								false, 
								array("ID")));
						}
						else
						{
							$arSection["SECTION_ELEMENTS_CNT_ALL"] = $arSection["ELEMENTS_CNT_ALL"];
						}
						if ($this->User["Permission"] < "U")
						{
							$arSection["ELEMENTS_CNT"] = intVal(CIBlockSection::GetSectionElementsCount($arSection["ID"], array("CNT_ACTIVE" => "Y")));
						}
						else
						{
							$arSection["ELEMENTS_CNT"] = $arSection["ELEMENTS_CNT_ALL"]; 
						}
						// if not exists active elements
						if ($arSection["ELEMENTS_CNT"] <= 0)
							$arSection["SECTION_ELEMENTS_CNT"] = 0; 
						// if not exists unactive elements
						elseif ($arSection["ELEMENTS_CNT_ALL"] == $arSection["ELEMENTS_CNT"])
							$arSection["SECTION_ELEMENTS_CNT"] = $arSection["SECTION_ELEMENTS_CNT_ALL"]; 
						elseif ($arSection["SECTIONS_CNT"] <= 0)
							$arSection["SECTION_ELEMENTS_CNT"] = $arSection["ELEMENTS_CNT"]; 
						else
						{
							$arSection["SECTION_ELEMENTS_CNT"] = intval(CIBlockElement::GetList(
								array(), 
								array("SECTION_ID" => $arSection["ID"], "ACTIVE" => "Y"), 
								array(), 
								false, 
								array("ID")));
						}
					}
					
					
					$arUserFields = $GLOBALS["USER_FIELD_MANAGER"]->GetUserFields("IBLOCK_".$this->IBlockID."_SECTION", $arSection["ID"], LANGUAGE_ID);
					$arSection["USER_FIELDS"] = $arUserFields;
					$arSection["DATE"] = $arSection["~DATE"] = $arUserFields["UF_DATE"];
					$arSection["~PASSWORD"] = $arUserFields["UF_PASSWORD"];
					if (is_array($arSection["~PASSWORD"]))
						$arSection["PASSWORD"] = $arSection["~PASSWORD"]["VALUE"];
						
					$arSection["PICTURE"] = CFile::GetFileArray($arSection["PICTURE"]);
					$arSection["DETAIL_PICTURE"] = CFile::GetFileArray($arSection["DETAIL_PICTURE"]);
						

					$arSection["PATH"] = array();
					$db_res = GetIBlockSectionPath($this->IBlockID, $arSection["ID"]);
					while ($res = $db_res->GetNext())
					{
						$arUserFields = $GLOBALS["USER_FIELD_MANAGER"]->GetUserFields("IBLOCK_".$this->IBlockID."_SECTION", $res["ID"], LANGUAGE_ID);
						$res["~PASSWORD"] = $arUserFields["UF_PASSWORD"];
						if (is_array($res["~PASSWORD"]))
							$res["PASSWORD"] = $res["~PASSWORD"]["VALUE"];
						$arSection["PATH"][$res["ID"]] = $res;
					}

					$arResult[$arCache["id"]] = $arSection;
					if ($arCache["time"] > 0)
					{
						$cache->StartDataCache($arCache["time"], $arCache["id"], $arCache["path"]);
						$cache->EndDataCache($arSection);
					}
				}
			}
		}
		$arSection = $arResult[$arCache["id"]];
		return 200;
	}
	
	function GetSectionGallery($arSection = array())
	{
		$arGallery = $this->GetGallery;
		if (!empty($arSection) && ($arSection["LEFT_MARGIN"] < $arGallery["LEFT_MARGIN"] || $arGallery["RIGHT_MARGIN"] < $arSection["RIGHT_MARGIN"]))
		{
			CModule::IncludeModule("iblock");
			$db_res = CIBlockSection::GetList(
				array(), 
				array(
					"IBLOCK_ID" => $arSection["IBLOCK_ID"], 
					"SECTION_ID" => 0, 
					"!LEFT_MARGIN" => $arSection["LEFT_MARGIN"], 
					"!RIGHT_MARGIN" => $arSection["RIGHT_MARGIN"], 
					"!ID" => $arSection["ID"]), 
				false, 
				array("ID", "CODE", "NAME", "DESCRIPTION", "CREATED_BY", "RIGHT_MARGIN", "LEFT_MARGIN"));

			if (!($db_res && $res = $db_res->GetNext()))
			{
				if ($this->arError["show_error"] == "Y")
					ShowError(GetMessage("P_GALLERY_NOT_FOUND"));
				if ($this->arError["set_404"] == "Y")
					CHTTP::SetStatus("404 Not Found");
				return 0;
			}
			else
			{
				return $res;
			}
		}
		return $arGallery;
	}
	
	function GetPermission()
	{
		static $arResult = array();
		$user_id = intVal($GLOBALS["USER"]->GetID());
		$user_groups = $GLOBALS["USER"]->GetGroups();
		
		if (!$this->IBlockID)
			return false;

		$arCache = array(
			"id" => serialize(array(
				"iblock_id" => $this->IBlockID, 
				"permission" => $user_groups)), 
			"path" => $this->arCache["path"]."pemission", 
			"time" => $this->arCache["time"]);
		
		if (empty($arResult[$arCache["id"]]))
		{
			$cache = new CPHPCache;
			if ($arCache["time"] > 0 && $cache->InitCache($arCache["time"], $arCache["id"], $arCache["path"])):
				$arResult[$arCache["id"]] = $cache->GetVars();
			else:
				CModule::IncludeModule("iblock");
				$arResult[$arCache["id"]] = CIBlock::GetPermission($this->IBlockID);
				if ($arCache["time"] > 0):
					$cache->StartDataCache($arCache["time"], $arCache["id"], $arCache["path"]);
					$cache->EndDataCache($arResult[$arCache["id"]]);
				endif;
			endif;
		}
		
		if (!empty($arResult[$arCache["id"]]))
		{
			if (!empty($this->Gallery) && 
				("R" <= $arResult[$arCache["id"]] && $arResult[$arCache["id"]] < "W") && 
				$this->Gallery["CREATED_BY"] == $user_id)
			{
				return "W"; 
			}
			return $arResult[$arCache["id"]];
		}
		return "D";
	}
	
	function CheckPermission($permission = "D", $arSection = array())
	{
		$arSection = (!is_array($arSection) ? array() : $arSection);
		if ($permission < "R"):
			ShowError(GetMessage("P_DENIED_ACCESS"));
			return false;
		elseif ($permission < "U" && !empty($arSection) && $arSection["ELEMENTS_CNT"] <= 0):
			ShowNote($arSection["ELEMENTS_CNT_ALL"] > 0 ? 
				GetMessage("P_SECTION_IS_NOT_APPROVED") : GetMessage("P_SECTION_IS_EMPTY"));
			return false;
		elseif ($permission < "U" && !empty($arSection["PATH"])):
			$password_checked = true;
			
			foreach ($arSection["PATH"] as $key => $res) 
			{
				if (empty($res["PASSWORD"]))
					continue;

				if (check_bitrix_sessid() && $arSection["PASSWORD"] == md5($_REQUEST["password_".$arSection["ID"]]))
					$_SESSION['PHOTOGALLERY']['SECTION'][$arSection["ID"]] = $arSection["PASSWORD"];
					
			}
			foreach ($arSection["PATH"] as $key => $res) 
			{
				if (empty($res["PASSWORD"]))
					continue;
				if ($res["PASSWORD"] != $_SESSION['PHOTOGALLERY']['SECTION'][$res["ID"]])
				{
					
					$password_checked = false;
					?>
					<div class="photo-info-box photo-album-password">
						<div class="photo-info-box-inner">
							<?ShowError(GetMessage("P_DENIED_ACCESS"));?>
							<p><?
							if ($res["ID"] != $arSection["ID"]): 
								?><?=GetMessage("P_PARENT_ALBUM_IS_PASSWORDED")?><?
							else:
								?><?=GetMessage("P_ALBUM_IS_PASSWORDED")?><?
							endif;
							?><?=str_replace("#NAME#", $res["NAME"], GetMessage("P_ALBUM_IS_PASSWORDED_TITLE"))
							?></p>
							<form method="post" action="<?=POST_FORM_ACTION_URI?>" class="photo-form">
								<?=bitrix_sessid_post()?>
								<label for="password_<?=$res["ID"]?>"><?=GetMessage("P_PASSWORD")?>: </label>
								<input type="password" class="password" name="password_<?=$res["ID"]?>" <?
									?>id="password_<?=$res["ID"]?>" value="" />
								<input type="submit" class="submit" name="supply_password" value="<?=GetMessage("P_ENTER")?>" />
							</form>
						</div>
					</div>
					<?
				break; 
				}
			}
			
			return $password_checked;
		endif;

		return true;
	}
}

?>