%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/components/bitrix/photogallery.detail.list/ |
| Current File : /home/bitrix/www/bitrix/components/bitrix/photogallery.detail.list/component.php |
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
if (!CModule::IncludeModule("photogallery")): // !important
ShowError(GetMessage("P_MODULE_IS_NOT_INSTALLED"));
return 0;
elseif (!IsModuleInstalled("iblock")): // !important
ShowError(GetMessage("IBLOCK_MODULE_NOT_INSTALLED"));
return 0;
endif;
//CUtil::InitJSCore(array('window', 'ajax'));
/********************************************************************
For custom components
********************************************************************/
$arParams["PROPERTY_CODE"] = (!is_array($arParams["PROPERTY_CODE"]) ? array() : $arParams["PROPERTY_CODE"]);
$arParams["ELEMENT_SORT_FIELD"] = strtoupper($arParams["ELEMENT_SORT_FIELD"]);
$arParams["ELEMENT_SORT_FIELD1"] = strtoupper($arParams["ELEMENT_SORT_FIELD1"]);
$arParams["COMMENTS_TYPE"] = strtoupper($arParams["COMMENTS_TYPE"]);
//if ($arParams["SHOW_RATING"] == "Y")
{
$arParams["PROPERTY_CODE"][] = "PROPERTY_vote_count";
$arParams["PROPERTY_CODE"][] = "PROPERTY_vote_sum";
$arParams["PROPERTY_CODE"][] = "PROPERTY_rating";
}
//if ($arParams["SHOW_COMMENTS"] == "Y")
{
if ($arParams["COMMENTS_TYPE"] == "FORUM")
$arParams["PROPERTY_CODE"][] = "PROPERTY_FORUM_MESSAGE_CNT";
elseif ($arParams["COMMENTS_TYPE"] == "BLOG")
$arParams["PROPERTY_CODE"][] = "PROPERTY_BLOG_COMMENTS_CNT";
}
if (!empty($arParams["ELEMENT_SORT_FIELD"]))
{
if ($arParams["ELEMENT_SORT_FIELD"] == "SHOWS"):
$arParams["ELEMENT_SORT_FIELD"] = "SHOW_COUNTER";
elseif ($arParams["ELEMENT_SORT_FIELD"] == "RATING"):
$arParams["ELEMENT_SORT_FIELD"] = "PROPERTY_rating";
elseif ($arParams["ELEMENT_SORT_FIELD"] == "COMMENTS" && $arParams["COMMENTS_TYPE"] == "FORUM"):
$arParams["ELEMENT_SORT_FIELD"] = "PROPERTY_FORUM_MESSAGE_CNT";
elseif ($arParams["ELEMENT_SORT_FIELD"] == "COMMENTS" && $arParams["COMMENTS_TYPE"] == "BLOG"):
$arParams["ELEMENT_SORT_FIELD"] = "PROPERTY_BLOG_COMMENTS_CNT";
endif;
}
if (!empty($arParams["ELEMENT_SORT_FIELD1"]))
{
if ($arParams["ELEMENT_SORT_FIELD1"] == "SHOWS"):
$arParams["ELEMENT_SORT_FIELD1"] = "SHOW_COUNTER";
elseif ($arParams["ELEMENT_SORT_FIELD1"] == "RATING"):
$arParams["ELEMENT_SORT_FIELD1"] = "PROPERTY_rating";
elseif ($arParams["ELEMENT_SORT_FIELD1"] == "COMMENTS" && $arParams["COMMENTS_TYPE"] == "FORUM"):
$arParams["ELEMENT_SORT_FIELD1"] = "PROPERTY_FORUM_MESSAGE_CNT";
elseif ($arParams["ELEMENT_SORT_FIELD1"] == "COMMENTS" && $arParams["COMMENTS_TYPE"] == "BLOG"):
$arParams["ELEMENT_SORT_FIELD1"] = "PROPERTY_BLOG_COMMENTS_CNT";
endif;
}
/********************************************************************
/For custom components
********************************************************************/
/********************************************************************
Input params
********************************************************************/
//***************** BASE *******************************************/
$arParams["IBLOCK_TYPE"] = trim($arParams["IBLOCK_TYPE"]);
$arParams["IBLOCK_ID"] = intVal($arParams["IBLOCK_ID"]);
$arParams["BEHAVIOUR"] = ($arParams["BEHAVIOUR"] == "USER" ? "USER" : "SIMPLE");
$arParams["USER_ALIAS"] = preg_replace("/[^a-z0-9\_]+/is" , "", $arParams["USER_ALIAS"]);
$arParams["PERMISSION_EXTERNAL"] = trim($arParams["PERMISSION"]);
$arParams["SECTION_ID"] = intVal($arParams["SECTION_ID"] > 0 ? $arParams["SECTION_ID"] : $_REQUEST["SECTION_ID"]);
$arParams["ELEMENT_ID"] = intVal($_REQUEST["ELEMENT_ID"] > 0 ? $_REQUEST["ELEMENT_ID"] : $arParams["ELEMENT_ID"]);
$arParams["SELECT_SURROUNDING"] = ($arParams["SELECT_SURROUNDING"] === "Y" ? "Y" : "N");
$arParams["ELEMENTS_LAST_COUNT"] = intVal($arParams["ELEMENTS_LAST_COUNT"]);
$arParams["ELEMENTS_LAST_TIME"] = intVal($arParams["ELEMENT_LAST_TIME"]);
$arParams["ELEMENTS_LAST_TIME_FROM"] = trim($arParams["ELEMENTS_LAST_TIME_FROM"]);
$arParams["ELEMENTS_LAST_TIME_TO"] = trim($arParams["ELEMENTS_LAST_TIME_TO"]);
$arParams["ELEMENT_SORT_FIELD"] = (empty($arParams["ELEMENT_SORT_FIELD"]) ? false : strToUpper($arParams["ELEMENT_SORT_FIELD"]));
$arParams["ELEMENT_SORT_ORDER"] = (strToUpper($arParams["ELEMENT_SORT_ORDER"]) != "DESC" ? "ASC" : "DESC");
$arParams["ELEMENT_SORT_FIELD1"] = (empty($arParams["ELEMENT_SORT_FIELD1"]) ? false : strToUpper($arParams["ELEMENT_SORT_FIELD1"]));
$arParams["ELEMENT_SORT_ORDER1"] = (strToUpper($arParams["ELEMENT_SORT_ORDER1"]) != "DESC" ? "ASC" : "DESC");
$arParams["ELEMENT_FILTER"] = (is_array($arParams["ELEMENT_FILTER"]) ? $arParams["ELEMENT_FILTER"] : array()); // hidden params
$arParams["ELEMENT_SELECT_FIELDS"] = (is_array($arParams["ELEMENT_SELECT_FIELDS"]) ? $arParams["ELEMENT_SELECT_FIELDS"] : array());
$arParams["PROPERTY_CODE"] = (!is_array($arParams["PROPERTY_CODE"]) ? array() : $arParams["PROPERTY_CODE"]);
foreach($arParams["PROPERTY_CODE"] as $key => $val)
if($val==="")
unset($arParams["PROPERTY_CODE"][$key]);
//***************** URL ********************************************/
$URL_NAME_DEFAULT = array(
"gallery" => "PAGE_NAME=gallery&USER_ALIAS=#USER_ALIAS#",
"detail" => "PAGE_NAME=detail".($arParams["BEHAVIOUR"] == "USER" ? "&USER_ALIAS=#USER_ALIAS#" : "" ).
"&SECTION_ID=#SECTION_ID#&ELEMENT_ID=#ELEMENT_ID#",
"detail_slide_show" => "PAGE_NAME=detail_slide_show".($arParams["BEHAVIOUR"] == "USER" ? "&USER_ALIAS=#USER_ALIAS#" : "" ).
"&SECTION_ID=#SECTION_ID#&ELEMENT_ID=#ELEMENT_ID#",
"search" => "PAGE_NAME=search");
foreach ($URL_NAME_DEFAULT as $URL => $URL_VALUE)
{
$arParams[strToUpper($URL)."_URL"] = trim($arParams[strToUpper($URL)."_URL"]);
if (empty($arParams[strToUpper($URL)."_URL"]))
$arParams[strToUpper($URL)."_URL"] = $APPLICATION->GetCurPage()."?".$URL_VALUE;
$arParams["~".strToUpper($URL)."_URL"] = $arParams[strToUpper($URL)."_URL"];
$arParams[strToUpper($URL)."_URL"] = htmlspecialcharsbx($arParams["~".strToUpper($URL)."_URL"]);
}
//***************** ADDITTIONAL ************************************/
$arParams["USE_PERMISSIONS"] = ($arParams["USE_PERMISSIONS"] == "Y" ? "Y" : "N");
if(!is_array($arParams["GROUP_PERMISSIONS"]))
$arParams["GROUP_PERMISSIONS"] = array(1);
$arParams["USE_DESC_PAGE"] = ($arParams["USE_DESC_PAGE"] == "N" ? "N" : "Y");
$arParams["PAGE_ELEMENTS"] = intVal($arParams["PAGE_ELEMENTS"]);
//$arParams["PAGE_ELEMENTS"] = ($arParams["PAGE_ELEMENTS"] > 0 ? $arParams["PAGE_ELEMENTS"] : 10);
$arParams["PAGE_NAVIGATION_TEMPLATE"] = trim($arParams["PAGE_NAVIGATION_TEMPLATE"]);
$arParams["PAGE_NAVIGATION_TEMPLATE"] = (empty($arParams["PAGE_NAVIGATION_TEMPLATE"]) ? "modern" : $arParams["PAGE_NAVIGATION_TEMPLATE"]);
$arParams["PAGE_NAVIGATION_WINDOW"] = intVal(intVal($arParams["PAGE_NAVIGATION_WINDOW"]) > 0 ? $arParams["PAGE_NAVIGATION_WINDOW"] : 5);
if (!empty($_REQUEST["direction"]))
$arParams["PAGE_NAVIGATE"] = $_REQUEST["direction"];
$arParams["PAGE_NAVIGATE"] = strtolower(in_array(strtolower($arParams["PAGE_NAVIGATE"]), array("next", "prev")) ? $arParams["PAGE_NAVIGATE"] : "current");
$arParams["DATE_TIME_FORMAT"] = trim(!empty($arParams["DATE_TIME_FORMAT"]) ? $arParams["DATE_TIME_FORMAT"] :
$DB->DateFormatToPHP(CSite::GetDateFormat("FULL")));
$arParams["SET_STATUS_404"] = ($arParams["SET_STATUS_404"] == "Y" ? "Y" : "N");
// Additional sights
$arParams["PICTURES"] = array();
$arParams["ADDITIONAL_SIGHTS"] = (is_array($arParams["ADDITIONAL_SIGHTS"]) ? $arParams["ADDITIONAL_SIGHTS"] : array()); // sights list from component params
$arParams["PICTURES_SIGHT"] = strToLower(is_array($arParams["PICTURES_SIGHT"]) ? '' : $arParams["PICTURES_SIGHT"]); // current sight
$arParams["GALLERY_SIZE"] = intVal($arParams["GALLERY_SIZE"]);
// Socnet Hidden Params
$arParams["SHOW_PHOTO_USER"] = ($arParams["SHOW_PHOTO_USER"] == "Y" ? "Y" : "N");
$arParams["GALLERY_AVATAR_SIZE"] = intVal(intVal($arParams["GALLERY_AVATAR_SIZE"]) > 0 ? $arParams["GALLERY_AVATAR_SIZE"] : 50);
$arParams["PASSWORD_CHECKED"] = true;
//***************** STANDART ***************************************/
if(!isset($arParams["CACHE_TIME"]))
$arParams["CACHE_TIME"] = 3600;
if ($arParams["CACHE_TYPE"] == "Y" || ($arParams["CACHE_TYPE"] == "A" && COption::GetOptionString("main", "component_cache_on", "Y") == "Y"))
$arParams["CACHE_TIME"] = intval($arParams["CACHE_TIME"]);
else
$arParams["CACHE_TIME"] = 0;
$arParams["SET_TITLE"] = ($arParams["SET_TITLE"] == "N" ? "N" : "Y"); //Turn on by default
/********************************************************************
/Input params
********************************************************************/
$oPhoto = new CPGalleryInterface(
array(
"IBlockID" => $arParams["IBLOCK_ID"],
"GalleryID" => $arParams["USER_ALIAS"],
"Permission" => $arParams["PERMISSION_EXTERNAL"]),
array(
"cache_time" => $arParams["CACHE_TIME"],
"set_404" => $arParams["SET_STATUS_404"]
)
);
if (!$oPhoto)
return false;
$arResult["GALLERY"] = $oPhoto->Gallery;
$arParams["PERMISSION"] = $oPhoto->User["Permission"];
$arResult["SECTION"] = array();
if ($arParams["SECTION_ID"] > 0)
{
$res = $oPhoto->GetSection($arParams["SECTION_ID"], $arResult["SECTION"]);
if ($res > 400)
{
return false;
}
elseif ($res == 301)
{
$url = CComponentEngine::MakePathFromTemplate(
$arParams["~SECTION_URL"],
array(
"USER_ALIAS" => $arGallery["CODE"],
"SECTION_ID" => $arParams["SECTION_ID"]));
LocalRedirect($url, false, "301 Moved Permanently");
return false;
}
elseif (!$oPhoto->CheckPermission($arParams["PERMISSION"], $arResult["SECTION"]))
{
return false;
}
}
/********************************************************************
Main values
********************************************************************/
$arResult["ELEMENTS_LIST"] = array();
$cache = new CPHPCache;
/********************************************************************
/Main values
********************************************************************/
/********************************************************************
Actions
********************************************************************/
include_once(str_replace(array("\\", "//"), "/", dirname(__FILE__)."/action.php"));
/********************************************************************
/Actions
********************************************************************/
/********************************************************************
Data
********************************************************************/
/************** ELEMENTS LIST **************************************/
if (!empty($arParams["ADDITIONAL_SIGHTS"]))
{
$_REQUEST["PICTURES_SIGHT"] = (empty($_REQUEST["PICTURES_SIGHT"]) && !empty($_REQUEST["picture_sight"]) ? $_REQUEST["picture_sight"] : $_REQUEST["PICTURES_SIGHT"]);
$arParams["PICTURES_INFO"] = @unserialize(COption::GetOptionString("photogallery", "pictures"));
$arParams["PICTURES_INFO"] = (is_array($arParams["PICTURES_INFO"]) ? $arParams["PICTURES_INFO"] : array());
foreach ($arParams["PICTURES_INFO"] as $key => $val):
if (in_array(str_pad($key, 5, "_").$val["code"], $arParams["ADDITIONAL_SIGHTS"]))
$arParams["PICTURES"][$val["code"]] = array(
"size" => $arParams["PICTURES_INFO"][$key]["size"],
"quality" => $arParams["PICTURES_INFO"][$key]["quality"],
"title" => $arParams["PICTURES_INFO"][$key]["title"]);
endforeach;
if (empty($arParams["PICTURES_SIGHT"]) && !empty($arParams["PICTURES"])):
if ($GLOBALS["USER"]->IsAuthorized())
{
require_once($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/classes/".strToLower($GLOBALS["DB"]->type)."/favorites.php");
$arTemplateParams = CUserOptions::GetOption('photogallery', 'template');
$arTemplateParams = (!is_array($arTemplateParams) ? array() : $arTemplateParams);
$arParams["PICTURES_SIGHT"] = $arTemplateParams['sight'];
if ($_REQUEST["PICTURES_SIGHT"] && check_bitrix_sessid() && $arTemplateParams["sight"] != $_REQUEST["PICTURES_SIGHT"]):
$arTemplateParams['sight'] = $arParams["PICTURES_SIGHT"] = $_REQUEST["PICTURES_SIGHT"];
CUserOptions::SetOption('photogallery', 'template', $arTemplateParams);
endif;
}
else
{
if (!empty($_SESSION['photogallery']['sight']))
$arParams["PICTURES_SIGHT"] = $_SESSION['photogallery']['sight'];
if (!empty($_REQUEST["PICTURES_SIGHT"]))
$_SESSION['photogallery']['sight'] = $arParams["PICTURES_SIGHT"] = $_REQUEST["PICTURES_SIGHT"];
}
elseif ($arParams["PICTURES_SIGHT"] != "real" && $arParams["PICTURES_SIGHT"] != "detail"):
$arParams["PICTURES_SIGHT"] = substr($arParams["PICTURES_SIGHT"], 5);
endif;
}
if ($arParams["PICTURES_SIGHT"] != "real" && $arParams["PICTURES_SIGHT"] != "detail")
$arParams["PICTURES_SIGHT"] = (in_array($arParams["PICTURES_SIGHT"], array_keys($arParams["PICTURES"])) ? $arParams["PICTURES_SIGHT"] : "standart");
if ($arParams["THUMBNAIL_SIZE"] > 0)
$arParams["PICTURES"]["standart"] = array("size" => $arParams["THUMBNAIL_SIZE"]);
//PROPERTIES
if (!in_array(strToUpper($arParams["PICTURES_SIGHT"]), array("DETAIL", "PREVIEW", "STANDART"))):
$arParams["PROPERTY_CODE"][] = "PROPERTY_".strToUpper($arParams["PICTURES_SIGHT"])."_PICTURE";
endif;
//PAGENAVIGATION
$arNavParams = false; $arNavigation = false;
if ($arParams["PAGE_ELEMENTS"] > 0)
{
CPageOption::SetOptionString("main", "nav_page_in_session", "N");
$arNavParams = array("nPageSize"=>$arParams["PAGE_ELEMENTS"], "bDescPageNumbering"=>($arParams["USE_DESC_PAGE"] == "N" ? false : true), "bShowAll" => false);
$arNavigation = CDBResult::GetNavParams($arNavParams);
}
// ACCESS
$arResult["USER_HAVE_ACCESS"] = "Y";
if ($arParams["PERMISSION"] < "U" && $arParams["USE_PERMISSIONS"] == "Y")
{
$res = array_intersect($GLOBALS["USER"]->GetUserGroupArray(), $arParams["GROUP_PERMISSIONS"]);
$arResult["USER_HAVE_ACCESS"] = (empty($res) ? "N" : "Y");
}
//SORT
$arSort = array();
foreach (array($arParams["ELEMENT_SORT_FIELD"] => $arParams["ELEMENT_SORT_ORDER"],
$arParams["ELEMENT_SORT_FIELD1"] => $arParams["ELEMENT_SORT_ORDER1"]) as $key => $val):
if (empty($key))
continue;
$arSort[$key] = $val;
$arParams["ELEMENT_SELECT_FIELDS"][] = $key;
endforeach;
if (!array_key_exists("ID", $arSort))
$arSort["ID"] = "ASC";
//SELECT
$arSelect = array(
"ID",
"CODE",
"IBLOCK_ID",
"IBLOCK_SECTION_ID",
//"SECTION_PAGE_URL",
"NAME",
"ACTIVE",
"DETAIL_PICTURE",
"PREVIEW_PICTURE",
//"PREVIEW_TEXT",
//"DETAIL_TEXT",
//"DETAIL_PAGE_URL",
"PREVIEW_TEXT",
//"PREVIEW_TEXT_TYPE",
//"DETAIL_TEXT_TYPE",
"TAGS",
"DATE_CREATE",
"CREATED_BY",
"SHOW_COUNTER",
"PROPERTY_*");
foreach ($arParams["ELEMENT_SELECT_FIELDS"] as $val)
{
$val = strtoupper($val);
if (strpos($val, "PROPERTY_") !== false && !in_array($val, $arParams["PROPERTY_CODE"])):
$arParams["PROPERTY_CODE"][] = $val;
elseif (strpos($val, "PROPERTY_") === false && !in_array($val, $arSelect)):
$arSelect[] = $val;
endif;
}
//$arSelect = array_keys(array_flip(array_diff($arSelect, array_keys($arSort))));
//WHERE
$arFilter = array(
"IBLOCK_ID" => $arParams["IBLOCK_ID"],
"CHECK_PERMISSIONS" => "Y");
if ($arParams["PERMISSION"] < "U"):
$arFilter["ACTIVE"] = "Y";
endif;
$maxWidth = 1; $maxHeight = 1; $arElements = array(); $arElementsJS = array();
// PASSWORDS
if ($arParams["SECTION_ID"] > 0)
$arFilter["SECTION_ID"] = intVal($arParams["SECTION_ID"]);
else
{
$arMargin = array();
$arrFilter = $arFilter;
$res = $GLOBALS["USER_FIELD_MANAGER"]->GetUserFields("IBLOCK_".$arParams["IBLOCK_ID"]."_SECTION");
if (is_array($res) && !empty($res["UF_PASSWORD"]))
{
CModule::IncludeModule("iblock");
$arrFilter["!=UF_PASSWORD"] = "";
$db_res = CIBlockSection::GetList(Array(), $arrFilter);
if ($db_res && $res = $db_res->Fetch())
{
do
{
$arMargin[] = array($res["LEFT_MARGIN"], $res["RIGHT_MARGIN"]);
}while ($res = $db_res->Fetch());
}
if (count($arMargin) > 0)
$arFilter["!SUBSECTION"] = $arMargin;
}
}
// ADDITIONAL FILTERS
if ($arParams["ELEMENT_LAST_TYPE"] == "count" && $arParams["ELEMENTS_LAST_COUNT"] > 0)
{
CModule::IncludeModule("iblock");
$db_res = CIBlockElement::GetList(array("ID" => "DESC"), $arFilter, false, array("nTopCount" => $arParams["ELEMENTS_LAST_COUNT"]), array("ID"));
$iLastID = 0;
while ($res = $db_res->Fetch())
$arFilter[">=ID"] = intVal($res["ID"]);
}
elseif ($arParams["ELEMENT_LAST_TYPE"] == "time" && $arParams["ELEMENTS_LAST_TIME"] > 0)
{
$arFilter[">=DATE_CREATE"] = date(CDatabase::DateFormatToPHP(CLang::GetDateFormat("FULL", LANG)), (time()-($arParams["ELEMENTS_LAST_TIME"]*3600*24)+CTimeZone::GetOffset()));
}
elseif ($arParams["ELEMENT_LAST_TYPE"] == "period" && (strLen($arParams["ELEMENTS_LAST_TIME_FROM"]) > 0 || strLen($arParams["ELEMENTS_LAST_TIME_TO"]) > 0))
{
if (strLen($arParams["ELEMENTS_LAST_TIME_FROM"]) > 0)
$arFilter[">=DATE_CREATE"] = date(CDatabase::DateFormatToPHP(CLang::GetDateFormat("FULL", LANG)), MakeTimeStamp($arParams["ELEMENTS_LAST_TIME_FROM"]));
if (strLen($arParams["ELEMENTS_LAST_TIME_TO"]) > 0)
$arFilter["<=DATE_CREATE"] = date(CDatabase::DateFormatToPHP(CLang::GetDateFormat("FULL", LANG)), MakeTimeStamp($arParams["ELEMENTS_LAST_TIME_TO"]));
}
if (!empty($arParams["ELEMENT_FILTER"]))
$arFilter = array_merge($arParams["ELEMENT_FILTER"], $arFilter);
if ($arNavParams && $arParams["ELEMENT_ID"] > 0)
{
CModule::IncludeModule("iblock");
$db_res = CIBlockElement::GetList($arSort, $arFilter, false, array("nElementID" => $arParams["ELEMENT_ID"]), array("ID", "NAME"));
if ($db_res && $res = $db_res->Fetch())
{
$number = $res["RANK"];
if ($arParams["PAGE_NAVIGATE"] == "next")
$number++;
elseif ($arParams["PAGE_NAVIGATE"] == "prev")
$number--;
if (!$arNavParams["bDescPageNumbering"])
{
$arNavParams["iNumPage"] = ceil($number / $arNavParams["nPageSize"]);
}
else
{
$count = CIBlockElement::GetList($arSort, $arFilter, array());
if ($number >= $count)
$arNavParams["iNumPage"] = 1;
elseif ($number <= ($count % $arNavParams["nPageSize"]))
$arNavParams["iNumPage"] = ceil($count / $arNavParams["nPageSize"]);
else
$arNavParams["iNumPage"] = ceil(($count - $number + 1) / $arNavParams["nPageSize"]);
}
}
}
$arParams["FILTER"] = $arFilter;
$arParams["SORTING"] = $arSort;
// EXECUTE
$cache_id = "detail_list_".serialize(array(
"IBLOCK_ID" => $arParams["IBLOCK_ID"],
"SECTION_ID" => $arParams["SECTION_ID"],
"SELECT_SURROUNDING" => $arParams["SELECT_SURROUNDING"],
"PERMISSION" => $arParams["PERMISSION"],
"PAGE_ELEMENTS" => $arParams["PAGE_ELEMENTS"],
"FILTER" => $arFilter,
"SELECT" => $arSelect,
"PICTURES_SIGHT" => $arParams["PICTURES_SIGHT"],
"ORDER" => $arOrder,
"NAV1" => $arNavParams,
"NAV2" => $arNavigation,
"BEHAVIOUR" => $arParams["BEHAVIOUR"],
"USER_ALIAS" => $arParams["USER_ALIAS"]
));
if(($tzOffset = CTimeZone::GetOffset()) <> 0)
$cache_id .= "_".$tzOffset;
$cache_path = "/".SITE_ID."/photogallery/".$arParams["IBLOCK_ID"]."/section".$arParams["SECTION_ID"];
if ($arParams["CACHE_TIME"] > 0 && $cache->InitCache($arParams["CACHE_TIME"], $cache_id, $cache_path))
{
$res = $cache->GetVars();
$arResult = array_merge($arResult, $res);
$arResult["ELEMENTS"]["MAX_WIDTH"] = $res["MAX_WIDTH"];
$arResult["ELEMENTS"]["MAX_HEIGHT"] = $res["MAX_HEIGHT"];
$arResult["ELEMENTS_CNT"] = $res["ELEMENTS_CNT"];
}
if (!is_array($arResult["ELEMENTS_LIST"]) || empty($arResult["ELEMENTS_LIST"]))
{
CModule::IncludeModule("iblock"); CModule::IncludeModule("photogallery");
$bParseTags = CModule::IncludeModule("search");
if ($arParams["SELECT_SURROUNDING"] == "Y")
{
$arResult["ELEMENTS_CNT"] = CIBlockElement::GetList($arSort, $arFilter, array());
$rsElements = CIBlockElement::GetList($arSort, $arFilter, false, array("nElementID" => $arParams["ELEMENT_ID"], "nPageSize" => $arParams["PAGE_ELEMENTS"]), $arSelect);
}
else
{
$rsElements = CIBlockElement::GetList($arSort, $arFilter, false, $arNavParams, $arSelect);
}
$rsElements->nPageWindow = $arParams["PAGE_NAVIGATION_WINDOW"];
if ($rsElements)
{
$arResult["NAV_STRING"] = $rsElements->GetPageNavStringEx($navComponentObject, GetMessage("P_PHOTOS"), $arParams["PAGE_NAVIGATION_TEMPLATE"]);
$arResult["NAV_RESULT"] = $rsElements;
$arGalleries = array();
$arSections = array();
$strFileId = "";
$arFileIndex = array();
$arRealPicIndex = array();
while ($obElement = $rsElements->GetNextElement())
{
$arElement = $obElement->GetFields();
// PROPERIES
$props = $obElement->GetProperties();
$arElement["PROPERTIES"] = array();
foreach ($props as $key => $value)
$arElement["PROPERTIES"][$key] = array("VALUE" =>$value["VALUE"]);
$arElement["DISPLAY_PROPERTIES"] = array();
foreach ($arParams["PROPERTY_CODE"] as $pid)
{
$prop = &$arElement["PROPERTIES"][$pid];
if ((is_array($prop["VALUE"]) && count($prop["VALUE"]) > 0) || (!is_array($prop["VALUE"]) && strlen($prop["VALUE"]) > 0))
$arElement["DISPLAY_PROPERTIES"][$pid] = CIBlockFormatProperties::GetDisplayValue($arElement, $prop, "news_out");
}
// GALLERY INFO IF NEED
$arGallery = array();
if ($arParams["BEHAVIOUR"] != "USER")
{
// empty block
}
elseif (!empty($arParams["USER_ALIAS"]))
{
$arGallery = $arResult["GALLERY"];
}
else
{
if (empty($arSections[$arElement["IBLOCK_SECTION_ID"]])) // Get Section Info
{
$db_res = CIBlockSection::GetList(array(), array("ID" => $arElement["IBLOCK_SECTION_ID"]), false,
array("ID", "LEFT_MARGIN", "RIGHT_MARGIN"));
if ($db_res && $res = $db_res->Fetch())
$arSections[$arElement["IBLOCK_SECTION_ID"]] = $res;
}
if (empty($arGalleries[$arElement["IBLOCK_SECTION_ID"]])) // Get Gallery Info
{
$db_res = CIBlockSection::GetList(array(), array("IBLOCK_ID" => $arParams["IBLOCK_ID"], "SECTION_ID" => 0,
"!LEFT_MARGIN" => $arSections[$arElement["IBLOCK_SECTION_ID"]]["LEFT_MARGIN"],
"!RIGHT_MARGIN" => $arSections[$arElement["IBLOCK_SECTION_ID"]]["RIGHT_MARGIN"],
"!ID" => $arElement["IBLOCK_SECTION_ID"]));
if ($db_res && $res = $db_res->Fetch())
{
if (intVal($res["PICTURE"]) > 0)
{
$res["~PICTURE"] = $res["PICTURE"];
}
elseif ($arParams["SHOW_PHOTO_USER"] == "Y")
{
if (empty($arResult["USERS"][$res["CREATED_BY"]]))
{
$db_user = CUser::GetByID($res["CREATED_BY"]);
$res_user = $db_user->Fetch();
$arResult["USER"][$res_user["ID"]] = $res_user;
}
$res["~PICTURE"] = intVal($arResult["USER"][$res["CREATED_BY"]]["PERSONAL_PHOTO"]);
}
$res["PICTURE"] = CFile::GetFileArray($res["~PICTURE"]);
if (!empty($res["PICTURE"]))
{
$image_resize = CFile::ResizeImageGet($res["PICTURE"], array(
"width" => $arParams["GALLERY_AVATAR_SIZE"], "height" => $arParams["GALLERY_AVATAR_SIZE"]));
$res["PICTURE"]["SRC"] = $image_resize["src"];
}
$res["~URL"] = CComponentEngine::MakePathFromTemplate($arParams["~GALLERY_URL"],
array("USER_ALIAS" => $res["CODE"], "USER_ID" => $res["CREATED_BY"], "GROUP_ID" => $res["SOCNET_GROUP_ID"]));
$res["URL"] = htmlspecialcharsbx($res["~URL"]);
$arGalleries[$arElement["IBLOCK_SECTION_ID"]] = $res;
}
}
$arGallery = $arElement["GALLERY"] = $arGalleries[$arElement["IBLOCK_SECTION_ID"]];
}
//PICTURE
if (strToUpper($arParams["PICTURES_SIGHT"]) == "DETAIL" && !empty($arElement["DETAIL_PICTURE"]))
$arElement["~PICTURE"] = $arElement["DETAIL_PICTURE"];
elseif (!empty($arElement["PROPERTIES"][strToUpper($arParams["PICTURES_SIGHT"])."_PICTURE"]["VALUE"]))
$arElement["~PICTURE"] = $arElement["PROPERTIES"][strToUpper($arParams["PICTURES_SIGHT"])."_PICTURE"]["VALUE"];
else
$arElement["~PICTURE"] = $arElement["PREVIEW_PICTURE"];
$strFileId .= ','.intVal($arElement["~PICTURE"]);
$arFileIndex[$arElement["~PICTURE"]] = $arElement["ID"];
if (strToUpper($arParams["PICTURES_SIGHT"]) != "REAL" && !empty($arElement["PROPERTIES"]["REAL_PICTURE"]["VALUE"]))
{
$strFileId .= ','.intVal($arElement["PROPERTIES"]["REAL_PICTURE"]["VALUE"]);
$arRealPicIndex[$arElement["PROPERTIES"]["REAL_PICTURE"]["VALUE"]] = $arElement["ID"];
}
//URL
$arElement["~URL"] = CComponentEngine::MakePathFromTemplate($arParams["~DETAIL_URL"],
array("USER_ALIAS" => $arGallery["CODE"], "SECTION_ID" => $arElement["IBLOCK_SECTION_ID"], "ELEMENT_ID" => $arElement["ID"],
"USER_ID" => $arGallery["CREATED_BY"], "GROUP_ID" => $arGallery["SOCNET_GROUP_ID"]));
$arElement["URL"] = htmlspecialcharsbx($arElement["~URL"]);
$arElement["~SLIDE_SHOW_URL"] = CComponentEngine::MakePathFromTemplate($arParams["~DETAIL_SLIDE_SHOW_URL"],
array("USER_ALIAS" => $arGallery["CODE"], "SECTION_ID" => $arElement["IBLOCK_SECTION_ID"], "ELEMENT_ID" => $arElement["ID"],
"USER_ID" => $arElement["GALLERY"]["CREATED_BY"], "GROUP_ID" => $arElement["GALLERY"]["SOCNET_GROUP_ID"]));
$arElement["SLIDE_SHOW_URL"] = htmlspecialcharsbx($arElement["~SLIDE_SHOW_URL"]);
//TAGS
$arElement["TAGS_LIST"] = array();
if (!empty($arElement["TAGS"]) && $bParseTags)
{
$ar = tags_prepare($arElement["TAGS"], SITE_ID);
if (!empty($ar))
{
foreach ($ar as $name => $tags)
{
$arr = array(
"TAG_NAME" => $tags,
"~TAGS_URL" => CComponentEngine::MakePathFromTemplate($arParams["~SEARCH_URL"], array()));
$arr["~TAGS_URL"] .= (strpos($arParams["~SEARCH_URL"], "?") === false ? "?" : "&")."tags=".$tags;
$arr["TAGS_URL"] = htmlspecialcharsbx($arr["~TAGS_URL"]);
$arr["TAGS_NAME"] = $tags;
$arElement["TAGS_LIST"][] = $arr;
}
}
}
$arElement["DATE_CREATE"] = PhotoDateFormat($arParams["DATE_TIME_FORMAT"], MakeTimeStamp($arElement["DATE_CREATE"], CSite::GetDateFormat()));
$arElements[$arElement["ID"]] = $arElement;
$arElementsJS[$arElement["ID"]] = array(
"id" => intVal($arElement["ID"]),
"title" => $arElement["NAME"],
"description" => $arElement["PREVIEW_TEXT"],
"shows" => $arElement["SHOW_COUNTER"],
"url" => $arElement["~URL"]
);
}
if (strLen($strFileId) > 0)
{
$rsFile = CFile::GetList(array(), array("@ID" => $strFileId));
while ($obFile = $rsFile->Fetch())
{
$fileId = $obFile['ID'];
$obFile["SRC"] = CFile::GetFileSRC($obFile);
$io = CBXVirtualIo::GetInstance();
$fName = $io->ExtractNameFromPath($obFile["SRC"]);
$fPath = $io->ExtractPathFromPath($obFile["SRC"]);
$obFile["SRC"] = $fPath.'/'.urlencode($fName);
if ($ind = $arFileIndex[$fileId])
{
$arElements[$ind]["PICTURE"] = $obFile;
if (!empty($arParams["PICTURES_SIGHT"]) && $obFile[$arParams["PICTURES_SIGHT"]])
{
$size = intVal($arParams["PICTURES"][$arParams["PICTURES_SIGHT"]]["size"]);
$w = $arElements[$ind]["PICTURE"]["WIDTH"];
$h = $arElements[$ind]["PICTURE"]["HEIGHT"];
if ($size > 0 && ($w > $size || $h > $size))
{
$koeff = min($size / $w, $size / $h);
$arElements[$ind]["PICTURE"]["WIDTH"] = intVal($w * $koeff);
$arElements[$ind]["PICTURE"]["HEIGHT"] = intVal($h * $koeff);
}
}
if (empty($arElements[$ind]['REAL_PICTURE']))
$arElements[$ind]['REAL_PICTURE'] = $obFile;
// Update js array
$arElementsJS[$ind]["src"] = $arElements[$ind]["PICTURE"]["SRC"];
$arElementsJS[$ind]["width"] = $arElements[$ind]["PICTURE"]["WIDTH"];
$arElementsJS[$ind]["height"] = $arElements[$ind]["PICTURE"]["HEIGHT"];
// Update max width and max height
$maxWidth = max($maxWidth, $arElements[$ind]["PICTURE"]["WIDTH"]);
$maxHeight = max($maxHeight, $arElements[$ind]["PICTURE"]["HEIGHT"]);
}
elseif ($ind = $arRealPicIndex[$fileId])
{
$arElements[$ind]["REAL_PICTURE"] = $obFile;
}
}
}
}
$arResult["ELEMENTS_LIST"] = $arElements;
$arResult["ELEMENTS_LIST_JS"] = $arElementsJS;
$arResult["ELEMENTS"]["MAX_WIDTH"] = $maxWidth;
$arResult["ELEMENTS"]["MAX_HEIGHT"] = $maxHeight;
$arResult["ELEMENTS_CNT"] = $arResult["ELEMENTS_CNT"];
if ($arParams["CACHE_TIME"] > 0)
{
$cache->StartDataCache($arParams["CACHE_TIME"], $cache_id, $cache_path);
$cache->EndDataCache(
array(
"ELEMENTS_CNT" => $arResult["ELEMENTS_CNT"],
"ELEMENTS_LIST" => $arResult["ELEMENTS_LIST"],
"ELEMENTS_LIST_JS" => $arResult["ELEMENTS_LIST_JS"],
"MAX_WIDTH" => $arResult["ELEMENTS"]["MAX_WIDTH"],
"MAX_HEIGHT" => $arResult["ELEMENTS"]["MAX_HEIGHT"],
"NAV_STRING" => $arResult["NAV_STRING"],
"NAV_RESULT" => $arResult["NAV_RESULT"]
)
);
}
}
else
{
$GLOBALS['NavNum'] = intVal($GLOBALS['NavNum']) + 1;
}
/************** URL ************************************************/
$arResult["~SLIDE_SHOW"] = CComponentEngine::MakePathFromTemplate($arParams["~DETAIL_SLIDE_SHOW_URL"], array(
"USER_ALIAS" => $arParams["USER_ALIAS"], "SECTION_ID" => $arParams["SECTION_ID"], "ELEMENT_ID" => 0,
"USER_ID" => $arResult["GALLERY"]["CREATED_BY"], "GROUP_ID" => $arResult["GALLERY"]["SOCNET_GROUP_ID"])).
(strpos($arParams["~DETAIL_SLIDE_SHOW_URL"], "?") === false ? "?" : "&").
"BACK_URL=".urlencode($GLOBALS['APPLICATION']->GetCurPageParam());
$arResult["SLIDE_SHOW"] = htmlspecialcharsbx($arResult["~SLIDE_SHOW"]);
/********************************************************************
/Data
********************************************************************/
CUtil::InitJSCore(array('window', 'ajax'));
unset($arParams["PICTURES"]["standart"]);
// for custom templates
if (in_array($this->getTemplateName(), array("table", "ascetic")) &&
(!($this->__parent && is_dir($_SERVER['DOCUMENT_ROOT'].$this->__parent->__template->__folder."/bitrix/photogallery.detail.list/".$this->getTemplateName()))))
{
$arParams["TEMPLATE"] = $this->getTemplateName();
$this->setTemplateName(".default");
$this->IncludeComponentTemplate();
}
else
{
$this->IncludeComponentTemplate();
}
/********************************************************************
Standart
********************************************************************/
/************** Title **********************************************/
if ($arParams["SET_TITLE"] == "Y"):
$APPLICATION->SetTitle(GetMessage("P_LIST_PHOTO"));
endif;
/************** Returns ********************************************/
if ($arParams["RETURN_FORMAT"] == "LIST"):
return $arResult["ELEMENTS_LIST"];
else:
$res = reset($arResult["ELEMENTS_LIST"]);
return $res["ID"];
endif;
/********************************************************************
/Standart
********************************************************************/
?>