PageRenderTime 46ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 1ms

/components/bitrix/blog.calendar/component.php

https://gitlab.com/alexprowars/bitrix
PHP | 230 lines | 198 code | 32 blank | 0 comment | 86 complexity | 2b54ebe0870240946480ce380e80d6f0 MD5 | raw file
  1. <?
  2. if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
  3. if (!CModule::IncludeModule("blog"))
  4. {
  5. ShowError(GetMessage("BLOG_MODULE_NOT_INSTALL"));
  6. return;
  7. }
  8. $arParams["BLOG_URL"] = preg_replace("/[^a-zA-Z0-9_-]/is", "", Trim($arParams["BLOG_URL"]));
  9. $arParams["YEAR"] = (intval($arParams["YEAR"])>0 ? intval($arParams["YEAR"]) : false);
  10. $arParams["MONTH"] = (intval($arParams["MONTH"])>0 ? intval($arParams["MONTH"]) : false);
  11. $arParams["DAY"] = (intval($arParams["DAY"])>0 ? intval($arParams["DAY"]) : false);
  12. if ($arParams["CACHE_TYPE"] == "Y" || ($arParams["CACHE_TYPE"] == "A" && COption::GetOptionString("main", "component_cache_on", "Y") == "Y"))
  13. $arParams["CACHE_TIME"] = intval($arParams["CACHE_TIME"]);
  14. else
  15. $arParams["CACHE_TIME"] = 0;
  16. if(!is_array($arParams["GROUP_ID"]))
  17. $arParams["GROUP_ID"] = array($arParams["GROUP_ID"]);
  18. foreach($arParams["GROUP_ID"] as $k=>$v)
  19. if(intval($v) <= 0)
  20. unset($arParams["GROUP_ID"][$k]);
  21. if($arParams["BLOG_VAR"] == '')
  22. $arParams["BLOG_VAR"] = "blog";
  23. if($arParams["PAGE_VAR"] == '')
  24. $arParams["PAGE_VAR"] = "page";
  25. $arParams["PATH_TO_BLOG"] = trim($arParams["PATH_TO_BLOG"]);
  26. if($arParams["PATH_TO_BLOG"] == '')
  27. $arParams["PATH_TO_BLOG"] = htmlspecialcharsbx($APPLICATION->GetCurPage()."?".$arParams["PAGE_VAR"]."=blog&".$arParams["BLOG_VAR"]."=#blog#");
  28. if(mb_strpos($arParams["PATH_TO_BLOG"], "?") === false)
  29. {
  30. $arParams["PATH_TO_BLOG"] .= "?";
  31. }
  32. else
  33. {
  34. $arParams["PATH_TO_BLOG"] .= "&amp;";
  35. }
  36. $today = time();
  37. $todayYear = intval(date("Y", $today));
  38. $todayMonth = intval(date("n", $today));
  39. $todayDay = intval(date("j", $today));
  40. $arParams["MONTH"] = intval($arParams["MONTH"]);
  41. if ($arParams["MONTH"] < 1 || $arParams["MONTH"] > 12)
  42. $arParams["MONTH"] = $todayMonth;
  43. $arParams["YEAR"] = intval($arParams["YEAR"]);
  44. if ($arParams["YEAR"] < 1990 || $arParams["YEAR"] > 2020)
  45. $arParams["YEAR"] = $todayYear;
  46. $arParams["DAY"] = intval($arParams["DAY"]);
  47. $bSelectDay = (($arParams["DAY"] > 0) ? True : False);
  48. if ($arParams["DAY"] < 1 || $arParams["DAY"] > 31)
  49. $arParams["DAY"] = $todayDay;
  50. if ($arParams["YEAR"] > $todayYear || $arParams["YEAR"] == $todayYear && $arParams["MONTH"] > $todayMonth)
  51. {
  52. $arParams["MONTH"] = $todayMonth;
  53. $arParams["YEAR"] = $todayYear;
  54. }
  55. $arResult["CALENDAR"] = Array();
  56. if ($arParams["BLOG_URL"] <> '')
  57. {
  58. if($GLOBALS["USER"]->IsAuthorized())
  59. $arUserGroups = CBlogUser::GetUserGroups($USER->GetID(), $arBlog["ID"], "Y", BLOG_BY_USER_ID);
  60. else
  61. $arUserGroups = Array(1);
  62. $numUserGroups = count($arUserGroups);
  63. for ($i = 0; $i < $numUserGroups - 1; $i++)
  64. {
  65. for ($j = $i + 1; $j < $numUserGroups; $j++)
  66. {
  67. if ($arUserGroups[$i] > $arUserGroups[$j])
  68. {
  69. $tmpGroup = $arUserGroups[$i];
  70. $arUserGroups[$i] = $arUserGroups[$j];
  71. $arUserGroups[$j] = $tmpGroup;
  72. }
  73. }
  74. }
  75. $strUserGroups = "";
  76. for ($i = 0; $i < $numUserGroups; $i++)
  77. $strUserGroups .= "_".$arUserGroups[$i];
  78. $cache = new CPHPCache;
  79. $cache_id = "blog_calendar_".serialize($arParams).$strUserGroups;
  80. $cache_path = "/".SITE_ID."/blog/".$arParams["BLOG_URL"]."/calendar/";
  81. if ($arParams["CACHE_TIME"] > 0 && $cache->InitCache($arParams["CACHE_TIME"], $cache_id, $cache_path))
  82. {
  83. $Vars = $cache->GetVars();
  84. foreach($Vars["arResult"] as $k=>$v)
  85. $arResult[$k] = $v;
  86. $template = new CBitrixComponentTemplate();
  87. $template->ApplyCachedData($Vars["templateCachedData"]);
  88. $cache->Output();
  89. }
  90. else
  91. {
  92. if ($arParams["CACHE_TIME"] > 0)
  93. $cache->StartDataCache($arParams["CACHE_TIME"], $cache_id, $cache_path);
  94. if ($arBlog = CBlog::GetByUrl($arParams["BLOG_URL"], $arParams["GROUP_ID"]))
  95. {
  96. if($arBlog["ACTIVE"] == "Y")
  97. {
  98. $arGroup = CBlogGroup::GetByID($arBlog["GROUP_ID"]);
  99. if($arGroup["SITE_ID"] == SITE_ID)
  100. {
  101. $dbMinPost = CBlogPost::GetList(Array("DATE_PUBLISH" => "ASC"), Array("BLOG_ID" => $arBlog["ID"], "PUBLISH_STATUS" => BLOG_PUBLISH_STATUS_PUBLISH), false, Array("nTopCount" => 1), Array("DATE_PUBLISH", "ID"));
  102. if($arMinPost = $dbMinPost->Fetch())
  103. {
  104. $minYear = date("Y", MakeTimeStamp($arMinPost["DATE_PUBLISH"]));
  105. $minMonth = date("n", MakeTimeStamp($arMinPost["DATE_PUBLISH"]));
  106. }
  107. else
  108. {
  109. $minYear = date("Y");
  110. $minMonth = date("n");
  111. }
  112. $arResult["urlToBlog"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_BLOG"], array("blog" => $arBlog["URL"]));
  113. $arDates = CBlogPost::GetListCalendar($arBlog["ID"], $arParams["YEAR"], $arParams["MONTH"], false);
  114. $arDays = array();
  115. $datesCount = count($arDates);
  116. for ($i = 0; $i < $datesCount; $i++)
  117. {
  118. $arDays[intval($arDates[$i]["DAY"])] = true;
  119. }
  120. $currentYear = $arParams["YEAR"];
  121. $currentMonth = $arParams["MONTH"];
  122. $lastMonthYear = $arParams["YEAR"];
  123. $lastMonth = $arParams["MONTH"] - 1;
  124. if ($lastMonth < 1)
  125. {
  126. $lastMonth = 12;
  127. $lastMonthYear = $lastMonthYear - 1;
  128. }
  129. $nextMonthYear = $arParams["YEAR"];
  130. $nextMonth = $arParams["MONTH"] + 1;
  131. if ($nextMonth > 12)
  132. {
  133. $nextMonth = 1;
  134. $nextMonthYear = $nextMonthYear + 1;
  135. }
  136. if (($lastMonthYear > $minYear) || ($lastMonthYear == $minYear && $lastMonth >= $minMonth))
  137. {
  138. $arResult["urlToPrevYear"] = $arResult["urlToBlog"]."year=".$lastMonthYear."&amp;month=".$lastMonth;
  139. }
  140. $arResult["PrevYear"] = $lastMonthYear;
  141. $arResult["PrevMonth"] = $lastMonth;
  142. $arResult["CurrentYear"] = $currentYear;
  143. $arResult["CurrentMonth"] = $currentMonth;
  144. $arResult["NextYear"] = $nextMonthYear;
  145. $arResult["NextMonth"] = $nextMonth;
  146. $arResult["TodayYear"] = $todayYear;
  147. $arResult["TodayMonth"] = $todayMonth;
  148. $arResult["TodayDay"] = $todayDay;
  149. if ($currentYear < $todayYear || $currentYear == $todayYear && $currentMonth < $todayMonth)
  150. {
  151. $arResult["urlToNextYear"] = $arResult["urlToBlog"]."year=".$nextMonthYear."&amp;month=".$nextMonth;
  152. }
  153. $firstDate = mktime(0, 0, 0, $currentMonth, 1, $currentYear);
  154. $firstDay = intval(date("w", $firstDate) - 1);
  155. if ($firstDay == -1)
  156. $firstDay = 6;
  157. $bBreak = false;
  158. $arResult["CALENDAR"] = Array();
  159. for ($i = 0; $i < 6; $i++)
  160. {
  161. $arResult["CALENDAR"][$i] = Array();
  162. $row = $i * 7;
  163. for ($j = 0; $j < 7; $j++)
  164. {
  165. $arResult["CALENDAR"][$i][$j] = Array();
  166. $date = mktime(0, 0, 0, $currentMonth, 1 - $firstDay + $row + $j, $currentYear);
  167. $y = intval(date("Y", $date));
  168. $m = intval(date("n", $date));
  169. $d = intval(date("j", $date));
  170. $arResult["CALENDAR"][$i][$j]["day"] = $d;
  171. if ($i > 0 && $d == 1)
  172. $bBreak = true;
  173. if ($bSelectDay && $d == $arParams["DAY"] && $m == $arParams["MONTH"] && $y == $arParams["YEAR"] && ($row + $j + 1) > $firstDay && !$bBreak)
  174. $arResult["CALENDAR"][$i][$j]["type"] = "selected";
  175. elseif ($d == $todayDay && $m == $todayMonth && $y == $todayYear && ($row + $j + 1) > $firstDay && !$bBreak)
  176. $arResult["CALENDAR"][$i][$j]["type"] = "today";
  177. elseif ($j == 5 || $j == 6)
  178. $arResult["CALENDAR"][$i][$j]["type"] = "weekend";
  179. if ($row + $j + 1 > $firstDay && !$bBreak)
  180. {
  181. if($arDays[$d] == true)
  182. $arResult["CALENDAR"][$i][$j]["link"] = $arResult["urlToBlog"]."year=".$y."&amp;month=".$m."&amp;day=".$d;
  183. }
  184. else
  185. $arResult["CALENDAR"][$i][$j]["day"] = "&nbsp;";
  186. }
  187. if ($bBreak)
  188. break;
  189. }
  190. }
  191. }
  192. }
  193. if ($arParams["CACHE_TIME"] > 0)
  194. $cache->EndDataCache(array("templateCachedData" => $this->GetTemplateCachedData(), "arResult" => $arResult));
  195. }
  196. }
  197. $this->IncludeComponentTemplate();
  198. ?>