userday.php 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. <?php
  2. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/auth.php");
  3. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/languages/" . HTML_LANG . ".php");
  4. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/header.php");
  5. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/idfilter.php");
  6. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datetimefilter.php");
  7. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/oufilter.php");
  8. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/gatefilter.php");
  9. $user=get_record_sql($db_link,'SELECT * FROM user_list WHERE id=?', [ $id ]);
  10. ?>
  11. <div id="cont">
  12. <b><?php print "Трафик пользователя <a href=../users/edituser.php?id=$id>" . $user['login'] . "</a>"; ?></b>
  13. <br>
  14. <form action="<?php print $_SERVER['PHP_SELF']; ?>" method="post">
  15. <input type="hidden" name="id" value=<?php echo $id; ?>>
  16. <?php print_date_fields($date1,$date2,$date_shift); ?>
  17. <?php echo WEB_cell_gateway; ?>:&nbsp<?php print_gateway_select($db_link, 'gateway', $rgateway); ?>
  18. <input type="submit" value="<?php echo WEB_btn_show; ?>">
  19. </form>
  20. <br>
  21. <table class="data" width='100%'>
  22. <tr align="center">
  23. <td class="data"><b><?php print WEB_title_ip; ?></b></td>
  24. <td class="data"><b><?php print WEB_cell_gateway; ?></b></td>
  25. <td class="data"><b><?php print WEB_title_date; ?></b></td>
  26. <td class="data"><b><?php print WEB_title_input; ?></b></td>
  27. <td class="data"><b><?php print WEB_title_output; ?></b></td>
  28. </tr>
  29. <?php
  30. $gateway_list = get_gateways($db_link);
  31. $sSQL = "SELECT id,ip,description FROM user_auth WHERE (user_auth.user_id=?) ORDER BY IP";
  32. $usersip = get_records_sql($db_link, $sSQL, [ $id ]);
  33. $ipcount = 0;
  34. $itog_in = 0;
  35. $itog_out = 0;
  36. // Определяем тип СУБД один раз (лучше вынести выше, но для примера — здесь)
  37. $db_type = $db_link->getAttribute(PDO::ATTR_DRIVER_NAME);
  38. foreach ($usersip as $row) {
  39. $fid = (int)$row["id"];
  40. $fip = $row["ip"];
  41. $fcomm = $row["description"];
  42. $params = [$date1, $date2];
  43. $conditions = ["user_stats.ts >= ?", "user_stats.ts < ?"];
  44. if (!empty($rgateway) && $rgateway > 0) {
  45. $conditions[] = "user_stats.router_id = ?";
  46. $params[] = (int)$rgateway;
  47. }
  48. $conditions[] = "auth_id = ?";
  49. $params[] = $fid;
  50. $whereClause = implode(' AND ', $conditions);
  51. $sSQL = "SELECT SUM(byte_in) + SUM(byte_out) AS t_sum FROM user_stats WHERE $whereClause";
  52. $day_summary = get_record_sql($db_link, $sSQL, $params);
  53. $summ = !empty($day_summary) ? (float)($day_summary['t_sum'] ?? 0) : 0;
  54. if ($summ > 0) {
  55. $ipcount++;
  56. print "<tr align=center class=\"tr1\" onmouseover=\"className='tr2'\" onmouseout=\"className='tr1'\">\n";
  57. print "<td class=\"data\" ><b><a href=/admin/users/editauth.php?id=$fid>$fip</a></b></td>\n";
  58. print "<td class=\"data\" colspan=2>$fcomm</td>\n";
  59. print "<td class=\"data\" ><a href=/admin/reports/userdaydetail.php?id=$fid&date_start=$date1&date_stop=$date2>TOP 10</a></td>\n";
  60. print "<td class=\"data\" ><a href=/admin/reports/userdaydetaillog.php?id=$fid&date_start=$date1&date_stop=$date2>".WEB_report_detail."</a></td>\n";
  61. print "</tr>\n";
  62. // === 2. Формат даты в зависимости от СУБД ===
  63. if ($days_shift <= 1) {
  64. $mysql_format = '%Y-%m-%d %H';
  65. $pg_format = 'YYYY-MM-DD HH24';
  66. } elseif ($days_shift <= 30) {
  67. $mysql_format = '%Y-%m-%d';
  68. $pg_format = 'YYYY-MM-DD';
  69. } elseif ($days_shift <= 730) {
  70. $mysql_format = '%Y-%m';
  71. $pg_format = 'YYYY-MM';
  72. } else {
  73. $mysql_format = '%Y';
  74. $pg_format = 'YYYY';
  75. }
  76. // === 3. Параметры для детального запроса ===
  77. $detail_params = [$date1, $date2, $fid];
  78. $detail_conditions = "user_stats.ts >= ? AND user_stats.ts < ? AND auth_id = ?";
  79. if ($rgateway > 0) {
  80. $detail_conditions .= " AND user_stats.router_id = ?";
  81. $detail_params[] = (int)$rgateway;
  82. }
  83. // === 4. Запрос в зависимости от СУБД ===
  84. if ($db_type === 'mysql') {
  85. $date_expr = "DATE_FORMAT(user_stats.ts, '$mysql_format')";
  86. $sSQL = "
  87. SELECT
  88. user_stats.router_id,
  89. $date_expr AS thour,
  90. SUM(byte_in) AS byte_in_sum,
  91. SUM(byte_out) AS byte_out_sum
  92. FROM user_stats
  93. WHERE $detail_conditions
  94. GROUP BY $date_expr, user_stats.router_id
  95. ORDER BY thour" . ($rgateway > 0 ? '' : ', user_stats.router_id');
  96. } elseif ($db_type === 'pgsql') {
  97. $date_expr = "TO_CHAR(user_stats.ts, '$pg_format')";
  98. $sSQL = "
  99. SELECT
  100. user_stats.router_id,
  101. $date_expr AS thour,
  102. SUM(byte_in) AS byte_in_sum,
  103. SUM(byte_out) AS byte_out_sum
  104. FROM user_stats
  105. WHERE $detail_conditions
  106. GROUP BY $date_expr, user_stats.router_id
  107. ORDER BY thour" . ($rgateway > 0 ? '' : ', user_stats.router_id');
  108. } else {
  109. throw new Exception("Unsupported DB: $db_type");
  110. }
  111. $userdata = get_records_sql($db_link, $sSQL, $detail_params);
  112. $sum_in = 0;
  113. $sum_out = 0;
  114. foreach ($userdata as $userrow) {
  115. print "<tr align=center class=\"tr1\" onmouseover=\"className='tr2'\" onmouseout=\"className='tr1'\">\n";
  116. print "<td class=\"data\"> </td>\n";
  117. print "<td class=\"data\">" . $gateway_list[$userrow['router_id']] . "</td>\n";
  118. print "<td class=\"data\">" . $userrow['thour'] . "</td>\n";
  119. print "<td class=\"data\">" . fbytes($userrow['byte_in_sum']) . "</td>\n";
  120. print "<td class=\"data\">" . fbytes($userrow['byte_out_sum']) . "</td>\n";
  121. print "</tr>\n";
  122. $sum_in += $userrow['byte_in_sum'];
  123. $sum_out += $userrow['byte_out_sum'];
  124. }
  125. print "<tr align=center class=\"tr1\" onmouseover=\"className='tr2'\" onmouseout=\"className='tr1'\">\n";
  126. print "<td class=\"data\"><b>" . WEB_title_sum . "</b></td>\n";
  127. print "<td class=\"data\"><b> </b></td>\n";
  128. print "<td class=\"data\"><b> </b></td>\n";
  129. print "<td class=\"data\"><b>" . fbytes($sum_in) . "</b></td>\n";
  130. print "<td class=\"data\"><b>" . fbytes($sum_out) . "</b></td>\n";
  131. print "</tr>\n";
  132. $itog_in += $sum_in;
  133. $itog_out += $sum_out;
  134. }
  135. }
  136. if ($ipcount > 1) {
  137. print "<tr align=center class=\"tr1\" onmouseover=\"className='tr2'\" onmouseout=\"className='tr1'\">\n";
  138. print "<td class=\"data\"><b>".WEB_title_itog."</b></td>\n";
  139. print "<td class=\"data\"><b> </b></td>\n";
  140. print "<td class=\"data\"><b> </b></td>\n";
  141. print "<td class=\"data\"><b>" . fbytes($itog_in) . "</b></td>\n";
  142. print "<td class=\"data\"><b>" . fbytes($itog_out) . "</b></td>\n";
  143. print "</tr>\n";
  144. }
  145. ?>
  146. </table>
  147. <?php
  148. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/footer.php");
  149. ?>