PageRenderTime 581ms CodeModel.GetById 14ms RepoModel.GetById 2ms app.codeStats 0ms

/modules/statistic/admin/traffic.php

https://gitlab.com/alexprowars/bitrix
PHP | 487 lines | 438 code | 40 blank | 9 comment | 35 complexity | 47d9581991c0d712aa03d8ad9f6d6d03 MD5 | raw file
  1. <?php
  2. require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
  3. require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/statistic/prolog.php");
  4. /** @var CMain $APPLICATION */
  5. $STAT_RIGHT = $APPLICATION->GetGroupRight("statistic");
  6. if($STAT_RIGHT=="D")
  7. $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));
  8. include($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/statistic/colors.php");
  9. IncludeModuleLangFile(__FILE__);
  10. $arrParams = array(
  11. "hour" => array(
  12. GetMessage("STAT_PAGES_HOURS"),
  13. GetMessage("STAT_GRAPH_BY_HOURS"),
  14. GetMessage("STAT_TRAFFIC_HOUR_GRAPH_TITLE"),
  15. GetMessage("STAT_TRAFFIC_HOUR_TABLE_TITLE"),
  16. ),
  17. "date" => array(
  18. GetMessage("STAT_PAGES_DATES"),
  19. GetMessage("STAT_GRAPH_BY_DATES"),
  20. GetMessage("STAT_TRAFFIC_DATE_GRAPH_TITLE"),
  21. GetMessage("STAT_TRAFFIC_DATE_TABLE_TITLE"),
  22. ),
  23. "weekday" => array(
  24. GetMessage("STAT_PAGES_WEEKDAYS"),
  25. GetMessage("STAT_GRAPH_BY_WEEKDAYS"),
  26. GetMessage("STAT_TRAFFIC_WEEKDAY_GRAPH_TITLE"),
  27. GetMessage("STAT_TRAFFIC_WEEKDAY_TABLE_TITLE"),
  28. ),
  29. "month" => array(
  30. GetMessage("STAT_PAGES_MONTHS"),
  31. GetMessage("STAT_GRAPH_BY_MONTHS"),
  32. GetMessage("STAT_TRAFFIC_MONTH_GRAPH_TITLE"),
  33. GetMessage("STAT_TRAFFIC_MONTH_TABLE_TITLE"),
  34. ),
  35. );
  36. if(isset($graph_type))
  37. {
  38. if($graph_type!="date" && $graph_type!="hour" && $graph_type!="weekday" && $graph_type!="month")
  39. $graph_type="date";
  40. $saved_graph_type = $graph_type;
  41. }
  42. else
  43. {
  44. $graph_type=false;//no setting (will be read later from session)
  45. }
  46. $sTableID = "tbl_traf_list";
  47. $oSort = new CAdminSorting($sTableID);
  48. $lAdmin = new CAdminList($sTableID, $oSort);
  49. $ref = $ref_id = array();
  50. $rs = CSite::GetList();
  51. while ($ar = $rs->Fetch())
  52. {
  53. $ref[] = "[".$ar["ID"]."] ".$ar["NAME"];
  54. $ref_id[] = $ar["ID"];
  55. }
  56. $arSiteDropdown = array("reference" => $ref, "reference_id" => $ref_id);
  57. if($lAdmin->IsDefaultFilter())
  58. {
  59. $find_date1_DAYS_TO_BACK=90;
  60. $find_date2 = ConvertTimeStamp(time()-86400, "SHORT");
  61. $find_host = "Y";
  62. $find_session = "Y";
  63. $find_event = "Y";
  64. $find_guest = "Y";
  65. $find_new_guest = "Y";
  66. $set_filter = "Y";
  67. }
  68. $FilterArr1 = array(
  69. "find_hit",
  70. "find_host",
  71. "find_session",
  72. "find_event",
  73. "find_guest",
  74. "find_new_guest",
  75. );
  76. $FilterArr2 = array(
  77. "find_site_id",
  78. "find_date1",
  79. "find_date2",
  80. );
  81. $FilterArr = array_merge($FilterArr1, $FilterArr2);
  82. $lAdmin->InitFilter($FilterArr);
  83. //Restore & Save settings (windows registry like)
  84. $arSettings = array ("saved_graph_type");
  85. InitFilterEx($arSettings, $sTableID."_settings", "get");
  86. if($graph_type===false)//Restore saved setting
  87. $graph_type=$saved_graph_type;
  88. if($graph_type!="date" && $graph_type!="hour" && $graph_type!="weekday" && $graph_type!="month")
  89. $graph_type="date";
  90. if($saved_graph_type!=$graph_type)//Set if changed
  91. $saved_graph_type=$graph_type;
  92. InitFilterEx($arSettings, $sTableID."_settings", "set");
  93. AdminListCheckDate($lAdmin, array("find_date1"=>$find_date1, "find_date2"=>$find_date2));
  94. $arFilter = Array(
  95. "DATE1" => $find_date1,
  96. "DATE2" => $find_date2,
  97. "SITE_ID" => $find_site_id,
  98. );
  99. if(is_array($find_site_id))
  100. {
  101. $site_filtered = count($find_site_id) > 0;
  102. }
  103. else
  104. {
  105. $site_filtered = ($find_site_id <> '' && $find_site_id != "NOT_REF");
  106. }
  107. $lAdmin->BeginPrologContent();
  108. ?>
  109. <?
  110. /***************************************************************************
  111. HTML form
  112. ****************************************************************************/
  113. $days = CTraffic::DynamicDays($arFilter["DATE1"], $arFilter["DATE2"], $arFilter["SITE_ID"]);
  114. //echo "1".$days."1";
  115. if ($days<2) :
  116. CAdminMessage::ShowMessage(GetMessage("STAT_NOT_ENOUGH_DATA"));
  117. elseif (!function_exists("ImageCreate")) :
  118. CAdminMessage::ShowMessage(GetMessage("STAT_GD_NOT_INSTALLED"));
  119. elseif (count($lAdmin->arFilterErrors)==0) :
  120. $width = COption::GetOptionString("statistic", "GRAPH_WEIGHT");
  121. $height = COption::GetOptionString("statistic", "GRAPH_HEIGHT");
  122. ?>
  123. <div class="graph">
  124. <?echo $arrParams[$graph_type][2]?>
  125. <table cellspacing="0" cellpadding="0" class="graph" border="0" align="center">
  126. <tr>
  127. <td valign="center" class="graph">
  128. <img class="graph" src="/bitrix/admin/traffic_graph.php?<?=GetFilterParams($FilterArr1)?>&<?=GetFilterParams($FilterArr2)?>&width=<?=$width?>&height=<?=$height?>&lang=<?=LANG?>&rand=<?=rand()?>&find_graph_type=<?=$graph_type?>" width="<?=$width?>" height="<?=$height?>">
  129. </td>
  130. <td valign="center">
  131. <table cellpadding="2" cellspacing="0" border="0" class="legend">
  132. <?if ($find_hit=="Y"):?>
  133. <tr>
  134. <td valign="center"><img src="/bitrix/admin/graph_legend.php?color=<?=$arrColor["HITS"]?>" width="45" height="2"></td>
  135. <td nowrap><img src="/bitrix/images/1.gif" width="3" height="1"><?=GetMessage("STAT_HITS_2")?></td>
  136. </tr>
  137. <?endif;?>
  138. <?if ($find_host=="Y"):?>
  139. <tr>
  140. <td valign="center"><img src="/bitrix/admin/graph_legend.php?color=<?=$arrColor["HOSTS"]?>" width="45" height="2"></td>
  141. <td nowrap><img src="/bitrix/images/1.gif" width="3" height="1"><?=GetMessage("STAT_HOSTS_2")?></td>
  142. </tr>
  143. <?endif;?>
  144. <?if ($find_session=="Y"):?>
  145. <tr>
  146. <td valign="center"><img src="/bitrix/admin/graph_legend.php?color=<?=$arrColor["SESSIONS"]?>" width="45" height="2"></td>
  147. <td nowrap><img src="/bitrix/images/1.gif" width="3" height="1"><?=GetMessage("STAT_SESSIONS_2")?></td>
  148. </tr>
  149. <?endif;?>
  150. <?if ($find_event=="Y"):?>
  151. <tr>
  152. <td valign="center"><img src="/bitrix/admin/graph_legend.php?color=<?=$arrColor["EVENTS"]?>" width="45" height="2"></td>
  153. <td nowrap><img src="/bitrix/images/1.gif" width="3" height="1"><?=GetMessage("STAT_EVENTS_2")?></td>
  154. </tr>
  155. <?endif;?>
  156. <?if ($find_guest=="Y" && !$site_filtered):?>
  157. <tr>
  158. <td valign="center"><img src="/bitrix/admin/graph_legend.php?color=<?=$arrColor["GUESTS"]?>" width="45" height="2"></td>
  159. <td nowrap><img src="/bitrix/images/1.gif" width="3" height="1"><?=GetMessage("STAT_GUESTS_2")?></td>
  160. </tr>
  161. <?endif;?>
  162. <?if ($find_new_guest=="Y" && !$site_filtered):?>
  163. <tr>
  164. <td valign="center"><img src="/bitrix/admin/graph_legend.php?color=<?=$arrColor["NEW_GUESTS"]?>" width="45" height="2"></td>
  165. <td nowrap><img src="/bitrix/images/1.gif" width="3" height="1"><?=GetMessage("STAT_NEW_GUESTS_2")?></td>
  166. </tr>
  167. <?endif;?>
  168. </table>
  169. </td>
  170. </tr>
  171. </table>
  172. </div>
  173. <?endif;?>
  174. <h2><?echo $arrParams[$graph_type][3]?></h2>
  175. <?
  176. $lAdmin->EndPrologContent();
  177. if($graph_type=="date")
  178. {
  179. $rsData = CTraffic::GetDailyList('', '', $arMaxMin, $arFilter);
  180. }
  181. else
  182. {
  183. $temp_graph_type = $graph_type;
  184. $rs = CTraffic::GetSumList($temp_graph_type, $arFilter);
  185. $ar = $rs->Fetch();
  186. switch ($graph_type)
  187. {
  188. case "hour":
  189. $start = 0; $end = 23; break;
  190. case "weekday":
  191. $start = 0; $end = 6; break;
  192. case "month":
  193. $start = 1; $end = 12; break;
  194. }
  195. $graph_type_upper = ToUpper($graph_type);
  196. $ra=array();
  197. for ($i=$start; $i<=$end; $i++)
  198. {
  199. $ra[] = array (
  200. "ID"=>$i,
  201. "HITS"=>$ar[$graph_type_upper."_HIT_".$i],
  202. "C_HOSTS"=>$ar[$graph_type_upper."_HOST_".$i],
  203. "SESSIONS"=>$ar[$graph_type_upper."_SESSION_".$i],
  204. "C_EVENTS"=>$ar[$graph_type_upper."_EVENT_".$i],
  205. "GUESTS"=>$ar[$graph_type_upper."_GUEST_".$i],
  206. "NEW_GUESTS"=>$ar[$graph_type_upper."_NEW_GUEST_".$i],
  207. );
  208. }
  209. $rsData = new CDBResult;
  210. $rsData->InitFromArray($ra);
  211. }
  212. $rsData = new CAdminResult($rsData, $sTableID);
  213. $rsData->NavStart();
  214. $lAdmin->NavText($rsData->GetNavPrint($arrParams[$graph_type][0]));
  215. $arHeaders = array();
  216. switch($graph_type)
  217. {
  218. case "date":
  219. $arHeaders[]=
  220. array( "id" =>"ID",
  221. "content" =>"ID",
  222. "sort" =>"s_id",
  223. "align" =>"right",
  224. "default" =>true,
  225. );
  226. $arHeaders[]=
  227. array( "id" =>"DATE_STAT",
  228. "content" =>GetMessage("STAT_DATE"),
  229. "sort" =>"s_date",
  230. "default" =>true,
  231. );
  232. $arHeaders[]=
  233. array( "id" =>"WDAY",
  234. "content" =>GetMessage("STAT_WEEKDAY"),
  235. "sort" =>false,
  236. "default" =>true,
  237. );
  238. break;
  239. case "weekday":
  240. $arHeaders[]=
  241. array( "id" =>"ID",
  242. "content" =>GetMessage("STAT_WEEKDAY"),
  243. "sort" =>false,
  244. "default" =>true,
  245. );
  246. break;
  247. case "hour":
  248. $arHeaders[]=
  249. array( "id" =>"ID",
  250. "content" =>GetMessage("STAT_HOUR"),
  251. "sort" =>false,
  252. "align" =>"right",
  253. "default" =>true,
  254. );
  255. break;
  256. case "month":
  257. $arHeaders[]=
  258. array( "id" =>"ID",
  259. "content" =>GetMessage("STAT_MONTH"),
  260. "sort" =>false,
  261. "align" =>"right",
  262. "default" =>true,
  263. );
  264. break;
  265. }
  266. $arHeaders[]=
  267. array( "id" =>"HITS",
  268. "content" =>GetMessage("STAT_HITS"),
  269. "sort" =>"s_hits",
  270. "align" =>"right",
  271. "default" =>true,
  272. );
  273. $arHeaders[]=
  274. array( "id" =>"C_HOSTS",
  275. "content" =>GetMessage("STAT_HOSTS"),
  276. "sort" =>"s_hosts",
  277. "align" =>"right",
  278. "default" =>true,
  279. );
  280. $arHeaders[]=
  281. array( "id" =>"SESSIONS",
  282. "content" =>GetMessage("STAT_SESSIONS"),
  283. "sort" =>"s_sessions",
  284. "align" =>"right",
  285. "default" =>true,
  286. );
  287. $arHeaders[]=
  288. array( "id" =>"C_EVENTS",
  289. "content" =>GetMessage("STAT_EVENTS"),
  290. "sort" =>"s_events",
  291. "align" =>"right",
  292. "default" =>true,
  293. );
  294. if(!$site_filtered):
  295. $arHeaders[]=
  296. array( "id" =>"GUESTS",
  297. "content" =>GetMessage("STAT_GUESTS"),
  298. "sort" =>"s_guests",
  299. "align" =>"right",
  300. "default" =>true,
  301. );
  302. $arHeaders[]=
  303. array( "id" =>"NEW_GUESTS",
  304. "content" =>GetMessage("STAT_NEW_GUESTS_S"),
  305. "sort" =>"s_new_guests",
  306. "align" =>"right",
  307. "default" =>true,
  308. );
  309. endif;
  310. $lAdmin->AddHeaders($arHeaders);
  311. while($arRes = $rsData->NavNext(true, "f_")):
  312. if ($f_WDAY==6) $f_WDAY = 0; else $f_WDAY++;
  313. $row =& $lAdmin->AddRow($f_ID, $arRes);
  314. switch($graph_type)
  315. {
  316. case "date":
  317. case "hour":
  318. case "month":
  319. $strHTML=$f_ID;
  320. break;
  321. case "weekday":
  322. if($f_ID==0)
  323. $strHTML='<span class="required">'.GetMessage("STAT_WEEKDAY_".$f_ID."_S").'</span>';
  324. else
  325. $strHTML=GetMessage("STAT_WEEKDAY_".$f_ID."_S");
  326. break;
  327. }
  328. $row->AddViewField("ID",$strHTML);
  329. if($f_WDAY==0)
  330. $strHTML='<span class="required">'.GetMessage("STAT_WEEKDAY_".$f_WDAY."_S").'</span>';
  331. else
  332. $strHTML=GetMessage("STAT_WEEKDAY_".$f_WDAY."_S");
  333. $row->AddViewField("WDAY",$strHTML);
  334. if($graph_type=="date")
  335. $strHTML='<a href="hit_list.php?lang='.LANG.'&amp;find_date1='.$f_DATE_STAT.'&amp;find_date2='.$f_DATE_STAT.'&amp;set_filter=Y">'.$f_HITS.'</a>';
  336. else
  337. $strHTML=$f_HITS;
  338. $row->AddViewField("HITS",$strHTML);
  339. if($graph_type=="date")
  340. $strHTML='<a href="session_list.php?lang='.LANG.'&amp;find_date1='.$f_DATE_STAT.'&amp;find_date2='.$f_DATE_STAT.'&amp;set_filter=Y">'.$f_SESSIONS.'</a>';
  341. else
  342. $strHTML=$f_SESSIONS;
  343. $row->AddViewField("SESSIONS",$strHTML);
  344. if($graph_type=="date")
  345. $strHTML='<a href="event_list.php?lang='.LANG.'&amp;find_date1='.$f_DATE_STAT.'&amp;find_date2='.$f_DATE_STAT.'&amp;set_filter=Y">'.$f_C_EVENTS.'</a>';
  346. else
  347. $strHTML=$f_C_EVENTS;
  348. $row->AddViewField("C_EVENTS",$strHTML);
  349. if (!$site_filtered)
  350. {
  351. if($graph_type=="date")
  352. $strHTML='<a href="guest_list.php?lang='.LANG.'&amp;find_period_date1='.$f_DATE_STAT.'&amp;find_period_date2='.$f_DATE_STAT.'&amp;set_filter=Y">'.$f_GUESTS.'</a>';
  353. else
  354. $strHTML=$f_GUESTS;
  355. $row->AddViewField("GUESTS",$strHTML);
  356. if($graph_type=="date")
  357. $strHTML='<a href="guest_list.php?lang='.LANG.'&amp;find_period_date1='.$f_DATE_STAT.'&amp;find_period_date2='.$f_DATE_STAT.'&amp;find_sess2=1&amp;set_filter=Y">'.$f_NEW_GUESTS.'</a>';
  358. else
  359. $strHTML=$f_NEW_GUESTS;
  360. $row->AddViewField("NEW_GUESTS",$strHTML);
  361. }
  362. endwhile;
  363. $arFooter = array();
  364. $arFooter[] = array(
  365. "title"=>GetMessage("MAIN_ADMIN_LIST_SELECTED"),
  366. "value"=>$rsData->SelectedRowsCount(),
  367. );
  368. $lAdmin->AddFooter($arFooter);
  369. $aContext = array(
  370. array(
  371. "TEXT"=>GetMessage("STAT_GROUPED")." ".$arrParams[$graph_type][1],
  372. "MENU"=>array(
  373. array(
  374. "TEXT"=>GetMessage("STAT_GROUP_BY")." ".$arrParams["date"][1],
  375. "ACTION"=>$lAdmin->ActionDoGroup(0, "", "graph_type=date"),
  376. "ICON"=>($graph_type=="date"?"checked":""),
  377. ),
  378. array(
  379. "TEXT"=>GetMessage("STAT_GROUP_BY")." ".$arrParams["hour"][1],
  380. "ACTION"=>$lAdmin->ActionDoGroup(0, "", "graph_type=hour"),
  381. "ICON"=>($graph_type=="hour"?"checked":""),
  382. ),
  383. array(
  384. "TEXT"=>GetMessage("STAT_GROUP_BY")." ".$arrParams["weekday"][1],
  385. "ACTION"=>$lAdmin->ActionDoGroup(0, "", "graph_type=weekday"),
  386. "ICON"=>($graph_type=="weekday"?"checked":""),
  387. ),
  388. array(
  389. "TEXT"=>GetMessage("STAT_GROUP_BY")." ".$arrParams["month"][1],
  390. "ACTION"=>$lAdmin->ActionDoGroup(0, "", "graph_type=month"),
  391. "ICON"=>($graph_type=="month"?"checked":""),
  392. ),
  393. ),
  394. ),
  395. );
  396. $lAdmin->AddAdminContextMenu($aContext);
  397. $lAdmin->CheckListMode();
  398. $APPLICATION->SetTitle(GetMessage("STAT_PAGE_TITLE"));
  399. /***************************************************************************
  400. HTML form
  401. ****************************************************************************/
  402. require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");
  403. $oFilter = new CAdminFilter($sTableID."_filter",array(
  404. GetMessage("STAT_SITE"),
  405. GetMessage("STAT_SHOW"),
  406. ));
  407. ?>
  408. <form name="find_form" method="GET" action="<?=$APPLICATION->GetCurPage()?>?">
  409. <?
  410. $oFilter->Begin();
  411. ?>
  412. <tr>
  413. <td><?echo GetMessage("STAT_PERIOD")." (".FORMAT_DATE."):"?></td>
  414. <td><?echo CalendarPeriod("find_date1", $find_date1, "find_date2", $find_date2, "find_form", "Y")?></td>
  415. </tr>
  416. <tr>
  417. <td><?echo GetMessage("STAT_SITE")?>:</td>
  418. <td><?echo SelectBoxMFromArray("find_site_id[]", $arSiteDropdown, $find_site_id, "", "");?></td>
  419. </tr>
  420. <tr valign="top">
  421. <td><?=GetMessage("STAT_SHOW")?>:</td>
  422. <td>
  423. <?echo InputType("checkbox","find_hit","Y",$find_hit,false,false,'id="find_hit"');?>
  424. <label for="find_hit"><?=GetMessage("STAT_HITS_2")?></label><br>
  425. <?echo InputType("checkbox","find_host","Y",$find_host,false,false,'id="find_host"'); ?>
  426. <label for="find_host"><?=GetMessage("STAT_HOSTS_2")?></label><br>
  427. <?echo InputType("checkbox","find_session","Y",$find_session,false,false,'id="find_session"'); ?>
  428. <label for="find_session"><?=GetMessage("STAT_SESSIONS_2")?></label><br>
  429. <?echo InputType("checkbox","find_event","Y",$find_event,false,false,'id="find_event"'); ?>
  430. <label for="find_event"><?=GetMessage("STAT_EVENTS_2")?></label><br>
  431. <?echo InputType("checkbox","find_guest","Y",$find_guest,false,false,'id="find_guest"'); ?>
  432. <label for="find_guest"><?=GetMessage("STAT_GUESTS_2")?></label><br>
  433. <?echo InputType("checkbox","find_new_guest","Y",$find_new_guest,false,false,'id="find_new_guest"'); ?>
  434. <label for="find_new_guest"><?=GetMessage("STAT_NEW_GUESTS_2")?></label><br>
  435. </td>
  436. </tr>
  437. <?
  438. $oFilter->Buttons(array("table_id"=>$sTableID, "url"=>$APPLICATION->GetCurPage(), "form" => "find_form", "report"=>true));
  439. $oFilter->End();
  440. ?>
  441. </form>
  442. <?
  443. if($message)
  444. echo $message->Show();
  445. $lAdmin->DisplayList();
  446. ?>
  447. <?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");