PageRenderTime 55ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/modules/photogallery/classes/general/element.php

https://gitlab.com/alexprowars/bitrix
PHP | 216 lines | 198 code | 15 blank | 3 comment | 31 complexity | 409e99fbb73b2fedc14e5b110bd2921c MD5 | raw file
  1. <?php
  2. $GLOBALS["UF_GALLERY_SIZE"] = array();
  3. if (!is_array($GLOBALS["PHOTOGALLERY_VARS"]))
  4. {
  5. $GLOBALS["PHOTOGALLERY_VARS"] = array(
  6. "arSections" => array(),
  7. "arGalleriesID" => array(),
  8. "arGalleries" => array(),
  9. "arIBlock" => array());
  10. }
  11. class CPhotogalleryElement
  12. {
  13. // static $arSections = array();
  14. // static $arGalleries = array();
  15. // static $arIBlock = array();
  16. public static function CheckElement($ID, &$arElement, &$arSection, &$arGallery)
  17. {
  18. $ID = doubleval($ID);
  19. if ($ID <= 0)
  20. return false;
  21. $arSelect = array(
  22. "ID",
  23. "IBLOCK_ID",
  24. "IBLOCK_SECTION_ID");
  25. $db_res = CIBlockElement::GetList(array(), array("ID" => $ID), false, false, $arSelect);
  26. if (!($db_res && $arElement = $db_res->Fetch()))
  27. {
  28. return false;
  29. }
  30. elseif (doubleval($arElement["IBLOCK_SECTION_ID"]) <= 0)
  31. {
  32. return false;
  33. }
  34. $tmp_db_res = CIBlockElement::GetProperty($arElement["IBLOCK_ID"], $ID, $by = "sort", $order = "asc", array("CODE" => "REAL_PICTURE"));
  35. if ($tmp_db_res && $tmp_res = $tmp_db_res->Fetch())
  36. {
  37. $arElement["PROPERTY_REAL_PICTURE_VALUE"] = $tmp_res["VALUE"];
  38. $arElement["PROPERTY_REAL_PICTURE_VALUE_ID"] = $tmp_res["PROPERTY_VALUE_ID"];
  39. }
  40. if (!is_set($GLOBALS["PHOTOGALLERY_VARS"]["arIBlock"], $arElement["IBLOCK_ID"]))
  41. {
  42. $GLOBALS["PHOTOGALLERY_VARS"]["arIBlock"][$arElement["IBLOCK_ID"]] = false;
  43. $db_res = CUserTypeEntity::GetList(array($by=>$order), array("ENTITY_ID" => "IBLOCK_".$arElement["IBLOCK_ID"]."_SECTION", "FIELD_NAME" => "UF_GALLERY_SIZE"));
  44. if ($db_res && $res = $db_res->Fetch())
  45. $GLOBALS["PHOTOGALLERY_VARS"]["arIBlock"][$arElement["IBLOCK_ID"]] = true;
  46. }
  47. if ($GLOBALS["PHOTOGALLERY_VARS"]["arIBlock"][$arElement["IBLOCK_ID"]] === false)
  48. {
  49. return false;
  50. }
  51. $arElement["FILE"] = CFile::GetFileArray($arElement["PROPERTY_REAL_PICTURE_VALUE"]);
  52. if ($arElement["FILE"])
  53. $arElement["FILE"]["FILE_SIZE"] = doubleval($arElement["FILE"]["FILE_SIZE"]);
  54. else
  55. return false;
  56. if (empty($GLOBALS["PHOTOGALLERY_VARS"]["arSections"][$arElement["IBLOCK_SECTION_ID"]]))
  57. {
  58. $db_res = CIBlockSection::GetList(
  59. array(),
  60. array("ID" => $arElement["IBLOCK_SECTION_ID"]),
  61. false,
  62. array("ID", "NAME", "CREATED_BY", "IBLOCK_SECTION_ID", "RIGHT_MARGIN", "LEFT_MARGIN"));
  63. $GLOBALS["PHOTOGALLERY_VARS"]["arSections"][$arElement["IBLOCK_SECTION_ID"]] = $db_res->Fetch();
  64. }
  65. $arSection = $GLOBALS["PHOTOGALLERY_VARS"]["arSections"][$arElement["IBLOCK_SECTION_ID"]];
  66. $iGalleryID = 0;
  67. if (!empty($GLOBALS["PHOTOGALLERY_VARS"]["arGalleriesID"][$arSection["ID"]]))
  68. {
  69. $iGalleryID = $GLOBALS["PHOTOGALLERY_VARS"]["arGalleriesID"][$arSection["ID"]];
  70. }
  71. elseif (!empty($GLOBALS["PHOTOGALLERY_VARS"]["arGalleries"]))
  72. {
  73. foreach ($GLOBALS["PHOTOGALLERY_VARS"]["arGalleries"] as $id => $val)
  74. {
  75. if (doubleval($val["RIGHT_MARGIN"]) > doubleval($arSection["RIGHT_MARGIN"]) &&
  76. doubleval($val["LEFT_MARGIN"]) < doubleval($arSection["LEFT_MARGIN"]))
  77. {
  78. $iGalleryID = $GLOBALS["PHOTOGALLERY_VARS"]["arGalleriesID"][$arSection["ID"]] = $id;
  79. break;
  80. }
  81. }
  82. }
  83. if ($iGalleryID <= 0)
  84. {
  85. $arFilter = array(
  86. "IBLOCK_ID" => $arElement["IBLOCK_ID"],
  87. "SECTION_ID" => 0);
  88. if (doubleval($arSection["IBLOCK_SECTION_ID"]) > 0)
  89. {
  90. $arFilter += array(
  91. "!LEFT_MARGIN" => $arSection["LEFT_MARGIN"],
  92. "!RIGHT_MARGIN" => $arSection["RIGHT_MARGIN"],
  93. "!ID" => $arSection["ID"]);
  94. }
  95. else
  96. {
  97. $arFilter["ID"] = $arSection["ID"];
  98. }
  99. $db_res = CIBlockSection::GetList(
  100. array(),
  101. $arFilter,
  102. false,
  103. array("ID", "NAME", "CREATED_BY", "RIGHT_MARGIN", "LEFT_MARGIN", "UF_GALLERY_SIZE", "UF_GALLERY_RECALC"));
  104. if ($db_res && $res = $db_res->Fetch())
  105. {
  106. $GLOBALS["PHOTOGALLERY_VARS"]["arGalleries"][$res["ID"]] = $res;
  107. $iGalleryID = $GLOBALS["PHOTOGALLERY_VARS"]["arGalleriesID"][$arSection["ID"]] = intval($res["ID"]);
  108. }
  109. }
  110. $arGallery = array();
  111. $iGalleryID = intval($iGalleryID);
  112. if ($iGalleryID > 0)
  113. {
  114. if (empty($GLOBALS["PHOTOGALLERY_VARS"]["arGalleries"][$iGalleryID]))
  115. {
  116. $db_res = CIBlockSection::GetList(array(), array("ID" => $iGalleryID), false,
  117. array("ID", "NAME", "CREATED_BY", "RIGHT_MARGIN", "LEFT_MARGIN", "UF_GALLERY_SIZE", "UF_GALLERY_RECALC"));
  118. $GLOBALS["PHOTOGALLERY_VARS"]["arGalleries"][$iGalleryID] = $db_res->Fetch();
  119. }
  120. $arGallery = $GLOBALS["PHOTOGALLERY_VARS"]["arGalleries"][$iGalleryID];
  121. }
  122. return true;
  123. }
  124. public static function OnBeforeIBlockElementDelete($ID)
  125. {
  126. $ID = doubleval($ID);
  127. if (CPhotogalleryElement::CheckElement($ID, $arElement, $arSection, $arGallery))
  128. {
  129. $arGallery["UF_GALLERY_SIZE"] = (doubleval($arGallery["UF_GALLERY_SIZE"]) - $arElement["FILE"]["FILE_SIZE"]);
  130. $GLOBALS["UF_GALLERY_SIZE"] = ($arGallery["UF_GALLERY_SIZE"] <= 0 ? 0 : $arGallery["UF_GALLERY_SIZE"]);
  131. $GLOBALS["PHOTOGALLERY_VARS"]["arGalleries"][$arGallery["ID"]]["UF_GALLERY_SIZE"] = $GLOBALS["UF_GALLERY_SIZE"];
  132. $arFields = array(
  133. "IBLOCK_ID" => $arElement["IBLOCK_ID"],
  134. "UF_GALLERY_SIZE" => $GLOBALS["UF_GALLERY_SIZE"]);
  135. $bs = new CIBlockSection;
  136. $GLOBALS["USER_FIELD_MANAGER"]->EditFormAddFields("IBLOCK_".$arElement["IBLOCK_ID"]."_SECTION", $arFields);
  137. $res = $bs->Update($arGallery["ID"], $arFields, false, false);
  138. }
  139. return true;
  140. }
  141. public static function OnRecalcGalleries($ID, $INDEX)
  142. {
  143. $ID = doubleval($ID);
  144. if (CPhotogalleryElement::CheckElement($ID, $arElement, $arSection, $arGallery))
  145. {
  146. $arFields = array(
  147. "IBLOCK_ID" => $arElement["IBLOCK_ID"],
  148. "UF_GALLERY_SIZE" => $arGallery["UF_GALLERY_SIZE"]);
  149. if (doubleval($arGallery["UF_GALLERY_SIZE"]) > 0 && $arGallery["UF_GALLERY_RECALC"] != $INDEX)
  150. {
  151. $arGallery["UF_GALLERY_SIZE"] = 0;
  152. $GLOBALS["UF_GALLERY_RECALC"] = $arFields["UF_GALLERY_RECALC"] = $INDEX;
  153. }
  154. $arFields["UF_GALLERY_SIZE"] = $GLOBALS["UF_GALLERY_SIZE"] = $GLOBALS["PHOTOGALLERY_VARS"]["arGalleries"][$arGallery["ID"]]["UF_GALLERY_SIZE"] =(doubleval($arGallery["UF_GALLERY_SIZE"]) + $arElement["FILE"]["FILE_SIZE"]);
  155. $bs = new CIBlockSection;
  156. $GLOBALS["USER_FIELD_MANAGER"]->EditFormAddFields("IBLOCK_".$arElement["IBLOCK_ID"]."_SECTION", $arFields);
  157. $res = $bs->Update($arGallery["ID"], $arFields, false, false);
  158. }
  159. return true;
  160. }
  161. public static function OnAfterRecalcGalleries($IBLOCK_ID, $INDEX)
  162. {
  163. if ($IBLOCK_ID <= 0)
  164. return false;
  165. $arFilters = array(
  166. array("IBLOCK_ID" => $IBLOCK_ID, "SECTION_ID" => 0, ">UF_GALLERY_SIZE" => 0, "!UF_GALLERY_RECALC" => $INDEX.""),
  167. array("IBLOCK_ID" => $IBLOCK_ID, "SECTION_ID" => 0, ">UF_GALLERY_SIZE" => 0, "UF_GALLERY_RECALC" => false));
  168. $bs = new CIBlockSection;
  169. foreach ($arFilters as $arFilter)
  170. {
  171. $db_res = CIBlockSection::GetList(array("ID" => "ASC"), $arFilter);
  172. if ($db_res && $res = $db_res->Fetch())
  173. {
  174. do
  175. {
  176. $arFields = array(
  177. "IBLOCK_ID" => $IBLOCK_ID,
  178. "UF_GALLERY_SIZE" => 0);
  179. $GLOBALS["UF_GALLERY_SIZE"] = 0;
  180. $GLOBALS["USER_FIELD_MANAGER"]->EditFormAddFields("IBLOCK_".$IBLOCK_ID."_SECTION", $arFields);
  181. $bs->Update($res["ID"], $arFields, false, false);
  182. } while ($res = $db_res->Fetch());
  183. }
  184. }
  185. }
  186. public static function OnAfterIBlockElementAdd($res)
  187. {
  188. $ID = doubleval($res["ID"]);
  189. if (CPhotogalleryElement::CheckElement($ID, $arElement, $arSection, $arGallery))
  190. {
  191. $GLOBALS["UF_GALLERY_SIZE"] = $GLOBALS["PHOTOGALLERY_VARS"]["arGalleries"][$arGallery["ID"]]["UF_GALLERY_SIZE"] = (doubleval($arGallery["UF_GALLERY_SIZE"]) + $arElement["FILE"]["FILE_SIZE"]);
  192. $arFields = array(
  193. "IBLOCK_ID" => $arElement["IBLOCK_ID"],
  194. "UF_GALLERY_SIZE" => $GLOBALS["UF_GALLERY_SIZE"]);
  195. $bs = new CIBlockSection;
  196. $GLOBALS["USER_FIELD_MANAGER"]->EditFormAddFields("IBLOCK_".$arElement["IBLOCK_ID"]."_SECTION", $arFields);
  197. $res = $bs->Update($arGallery["ID"], $arFields, false, false);
  198. }
  199. return true;
  200. }
  201. }