Bladeren bron

set default timeshift to 1 hour

root 8 maanden geleden
bovenliggende
commit
c7608ea850

+ 7 - 0
CHANGELOG.md

@@ -1,3 +1,10 @@
+# Changelog 2.8.2 - release
+- html: The default interval is 1 hour for displaying logs and reports.
+- bugfix: devices with control disabled were configured anyway.
+- bugfix: for router-type devices, the flag for processing user policies and shapers has been removed.
+- api: The get=user function has been added to the api to get user information.
+- utils: added a script for configuring openvpn ccd files based on data from user addresses
+
 # Changelog 2.8.1 - release
 
 - html: set autofocus for login page

+ 1 - 1
html/admin/iplist/index.php

@@ -45,7 +45,7 @@ if ($dhcp_enabled>0) {
     if ($dhcp_enabled ==2) { $dhcp_filter = ' and User_auth.dhcp=0'; }
     }
 
-if (isset($_POST['ip'])) { $f_ip = $_POST['ip']; }
+if (isset($_POST['ip'])) { $f_ip = normalizeIpAddress(substr(trim($_POST["ip"]), 0, 18)); }
 if (!isset($f_ip) and isset($_SESSION[$page_url]['ip'])) { $f_ip=$_SESSION[$page_url]['ip']; }
 if (!isset($f_ip)) { $f_ip=''; }
 $_SESSION[$page_url]['ip']=$f_ip;

+ 2 - 4
html/admin/logs/authlog.php

@@ -2,8 +2,7 @@
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/auth.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/languages/" . HTML_LANG . ".php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/header.php");
-$default_date_shift='m';
-require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datefilter.php");
+require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datetimefilter.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/loglevelfilter.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/logfilter.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/authidfilter.php");
@@ -13,8 +12,7 @@ if (!isset($auth_id)) { header('Location: /admin/logs/index.php', true, 301); ex
 <br>
 <form action="<?=$_SERVER['PHP_SELF']?>" method="post">
 <input name="auth_id" value="<?php print $auth_id; ?>" hidden=true>
-<?php echo WEB_log_start_date; ?>:<input type="date" name="date_start" value="<?php echo $date1; ?>" />
-<?php echo WEB_log_stop_date; ?>:<input type="date" name="date_stop" value="<?php echo $date2; ?>" />
+<?php print_date_fields($date1,$date2,$date_shift); ?>
 <?php echo WEB_log_level_display; ?>:<?php print_loglevel_select('display_log_level',$display_log_level); ?>
 <?php print WEB_rows_at_page."&nbsp"; print_row_at_pages('rows',$displayed); ?>
 <input type="submit" value="<?php echo WEB_btn_show; ?>"><br><br>

+ 1 - 3
html/admin/logs/detaillog.php

@@ -2,7 +2,6 @@
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/auth.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/languages/" . HTML_LANG . ".php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/header.php");
-$default_date_shift='h';
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datetimefilter.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/gatefilter.php");
 $default_sort='id';
@@ -41,8 +40,7 @@ print_log_submenu($page_url);
 
 <form action="<?php print $page_url; ?>" method="post">
 <input type="hidden" name="id" value="<?php echo $id; ?>">
-<?php echo WEB_log_start_date; ?>:&nbsp<input type="datetime-local" name="date_start" value="<?php echo $date1; ?>" />
-<?php echo WEB_log_stop_date; ?>:&nbsp<input type="datetime-local" name="date_stop" value="<?php echo $date2; ?>" />
+<?php print_date_fields($date1,$date2,$date_shift); ?>
 <?php echo WEB_cell_gateway; ?>:&nbsp <?php print_gateway_select($db_link, 'gateway', $rgateway); ?>
 DNS:&nbsp <input type=checkbox name=dns value="1" <?php print $dns_checked; ?>>
 <?php print WEB_rows_at_page."&nbsp"; print_row_at_pages('rows',$displayed); ?>

+ 3 - 5
html/admin/logs/dhcp.php

@@ -2,8 +2,7 @@
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/auth.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/languages/" . HTML_LANG . ".php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/header.php");
-$default_date_shift='d';
-require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datefilter.php");
+require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datetimefilter.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/cidrfilter.php");
 
 if (isset($_POST['dhcp_show'])) { $f_dhcp = $_POST['dhcp_show']; }
@@ -46,9 +45,8 @@ print_log_submenu($page_url);
 <div id="cont">
 <br>
 <form action="<?=$_SERVER['PHP_SELF']?>" method="post">
-  <?php echo WEB_log_start_date; ?>:&nbsp<input type="date" name="date_start" value="<?php echo $date1; ?>" />
-  <?php echo WEB_log_stop_date; ?>:&nbsp<input type="date" name="date_stop" value="<?php echo $date2; ?>" />
-  <?php print WEB_rows_at_page."&nbsp"; print_row_at_pages('rows',$displayed); ?>
+<?php print_date_fields($date1,$date2,$date_shift); ?>
+<?php print WEB_rows_at_page."&nbsp"; print_row_at_pages('rows',$displayed); ?>
 <div><br>
   <?php echo WEB_network_subnet; ?>:&nbsp<?php print_subnet_select_office_splitted($db_link, 'cidr', $rcidr); ?>
   <?php echo WEB_log_event_type; ?>:&nbsp<?php print_dhcp_select('dhcp_show', $f_dhcp); ?>

+ 2 - 4
html/admin/logs/index.php

@@ -2,8 +2,7 @@
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/auth.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/languages/" . HTML_LANG . ".php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/header.php");
-$default_date_shift='d';
-require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datefilter.php");
+require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datetimefilter.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/loglevelfilter.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/logfilter.php");
 
@@ -18,8 +17,7 @@ print_log_submenu($page_url);
 <div id="cont">
 <br>
 <form action="<?=$_SERVER['PHP_SELF']?>" method="post">
-<?php echo WEB_log_start_date; ?>:<input type="date" name="date_start" value="<?php echo $date1; ?>" />
-<?php echo WEB_log_stop_date; ?>:<input type="date" name="date_stop" value="<?php echo $date2; ?>" />
+<?php print_date_fields($date1,$date2,$date_shift); ?>
 <?php echo WEB_log_level_display; ?>:<?php print_loglevel_select('display_log_level',$display_log_level); ?>
 <?php print WEB_rows_at_page."&nbsp"; print_row_at_pages('rows',$displayed); ?>
 <input type="submit" value="<?php echo WEB_btn_show; ?>"><br><br>

+ 2 - 4
html/admin/logs/ip.php

@@ -2,8 +2,7 @@
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/auth.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/languages/" . HTML_LANG . ".php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/header.php");
-$default_date_shift='m';
-require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datefilter.php");
+require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datetimefilter.php");
 
 if (isset($_POST['ip'])) { $f_ip = $_POST['ip']; }
 if (isset($_GET['ip'])) { $f_ip = $_GET['ip']; }
@@ -25,8 +24,7 @@ if (!empty($f_ip)) {
 <br>
 <?php echo WEB_log_mac_history_hint; ?>
 <form action="<?=$_SERVER['PHP_SELF']?>" method="post">
-<?php echo WEB_log_start_date; ?>:&nbsp<input type="date" name="date_start" value="<?php echo $date1; ?>" />
-<?php echo WEB_log_stop_date; ?>:&nbsp<input type="date"	name="date_stop" value="<?php echo $date2; ?>" />
+<?php print_date_fields($date1,$date2,$date_shift); ?>
 <?php echo WEB_log_select_ip_mac; ?>:&nbsp<input type="text" name="ip" value="<?php echo $f_ip; ?>" pattern="^((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])|([0-9A-Fa-f]{2}[:-]){5}[0-9A-Fa-f]{2}|([0-9a-fA-F]{4}[\\.-][0-9a-fA-F]{4}[\\.-][0-9a-fA-F]{4})|[0-9A-Fa-f]{12})$"/>
 <?php print WEB_rows_at_page."&nbsp"; print_row_at_pages('rows',$displayed); ?>
 <input type="submit" value="<?php echo WEB_btn_show; ?>">

+ 2 - 4
html/admin/logs/mac.php

@@ -3,8 +3,7 @@ require_once ($_SERVER['DOCUMENT_ROOT']."/inc/auth.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/languages/" . HTML_LANG . ".php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/header.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/cidrfilter.php");
-$default_date_shift='m';
-require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datefilter.php");
+require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datetimefilter.php");
 
 if (isset($_POST['mac'])) { $f_mac = mac_simplify($_POST['mac']); }
 if (isset($_GET['mac'])) { $f_mac = mac_simplify($_GET['mac']); }
@@ -21,8 +20,7 @@ print_log_submenu($page_url);
 <div id="cont">
 <br>
 <form action="<?=$_SERVER['PHP_SELF']?>" method="post">
-<?php echo WEB_log_start_date; ?>:&nbsp<input type="date" name="date_start" value="<?php echo $date1; ?>" />
-<?php echo WEB_log_stop_date; ?>:&nbsp<input type="date"	name="date_stop" value="<?php echo $date2; ?>" />
+<?php print_date_fields($date1,$date2,$date_shift); ?>
 <?php echo WEB_cell_mac; ?>:&nbsp<input type="text" name="mac" value="<?php echo mac_dotted($f_mac); ?>" pattern="^([0-9A-Fa-f]{2}[:-]){5}[0-9A-Fa-f]{2}|([0-9a-fA-F]{4}[\\.-][0-9a-fA-F]{4}[\\.-][0-9a-fA-F]{4})|[0-9A-Fa-f]{12}$" />
 <?php print WEB_rows_at_page."&nbsp"; print_row_at_pages('rows',$displayed); ?>
 <input type="submit" value="<?php echo WEB_btn_show; ?>">

+ 2 - 4
html/admin/logs/syslog.php

@@ -2,8 +2,7 @@
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/auth.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/languages/" . HTML_LANG . ".php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/header.php");
-$default_date_shift='d';
-require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datefilter.php");
+require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datetimefilter.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/logfilter.php");
 
 if (isset($_POST['device_show'])) { $f_id = $_POST['device_show']*1; }
@@ -32,8 +31,7 @@ if ($f_id>0) {
 <div id="cont">
 <br>
 <form action="<?=$_SERVER['PHP_SELF']?>" method="post">
-<?php echo WEB_log_start_date; ?>:&nbsp<input type="date" name="date_start" value="<?php echo $date1; ?>" />
-<?php echo WEB_log_stop_date; ?>:&nbsp<input type="date" name="date_stop" value="<?php echo $date2; ?>" />
+<?php print_date_fields($date1,$date2,$date_shift); ?>
 <?php echo WEB_log_report_by_device; ?>&nbsp <?php print_device_select($db_link, "device_show", $f_id); ?>
 <?php print WEB_rows_at_page."&nbsp"; print_row_at_pages('rows',$displayed); ?>
 <input type="submit" value="<?php echo WEB_btn_show; ?>"><br><br>

+ 6 - 8
html/admin/logs/unknown.php

@@ -2,8 +2,7 @@
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/auth.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/languages/" . HTML_LANG . ".php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/header.php");
-$default_date_shift='m';
-require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datefilter.php");
+require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datetimefilter.php");
 
 if (isset($_POST['device_show'])) { $f_id = $_POST['device_show'] * 1; }
 if (isset($_GET['device_show'])) { $f_id = $_GET['device_show'] * 1; }
@@ -18,12 +17,11 @@ if ($f_id > 0) { $where_dev = " and D.id=$f_id "; }
 
 <div id="cont">
 <br>
-	<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
-  <?php echo WEB_log_report_by_device; ?>&nbsp<?php print_netdevice_select($db_link, "device_show", $f_id); ?>
-  <?php echo WEB_log_start_date; ?>:&nbsp<input type="date" name="date_start" value="<?php echo $date1; ?>" />
-  <?php echo WEB_log_stop_date; ?>:&nbsp<input type="date" name="date_stop" value="<?php echo $date2; ?>" />
-  <?php print WEB_rows_at_page."&nbsp"; print_row_at_pages('rows',$displayed); ?>
-  <input type="submit" value="<?php echo WEB_btn_show; ?>">
+<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
+<?php echo WEB_log_report_by_device; ?>&nbsp<?php print_netdevice_select($db_link, "device_show", $f_id); ?>
+<?php print_date_fields($date1,$date2,$date_shift); ?>
+<?php print WEB_rows_at_page."&nbsp"; print_row_at_pages('rows',$displayed); ?>
+<input type="submit" value="<?php echo WEB_btn_show; ?>">
 </form>
 
 <?php

+ 2 - 4
html/admin/reports/authday.php

@@ -3,8 +3,7 @@ require_once ($_SERVER['DOCUMENT_ROOT']."/inc/auth.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/languages/" . HTML_LANG . ".php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/header.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/idfilter.php");
-$default_date_shift='d';
-require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datefilter.php");
+require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datetimefilter.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/oufilter.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/gatefilter.php");
 $auth=get_record_sql($db_link,'SELECT * FROM User_auth WHERE id='.$id);
@@ -21,8 +20,7 @@ print WEB_report_traffic_for_ip."&nbsp<a href=../users/editauth.php?id=$id>".$au
 <br>
 <form action="<?php print $_SERVER['PHP_SELF']; ?>" method="post">
 <input type="hidden" name="id" value=<?php echo $id; ?>>
-<?php echo WEB_log_start_date; ?>:&nbsp<input type="date" name="date_start" value="<?php print $date1; ?>" />
-<?php echo WEB_log_stop_date; ?>:&nbsp<input type="date" name="date_stop" value="<?php print $date2; ?>" />
+<?php print_date_fields($date1,$date2,$date_shift); ?>
 <?php echo WEB_cell_gateway; ?>:&nbsp <?php print_gateway_select($db_link, 'gateway', $rgateway); ?>
 <input type="submit" value="<?php echo WEB_btn_show; ?>">
 </form>

+ 2 - 4
html/admin/reports/index-full.php

@@ -3,8 +3,7 @@ $default_displayed=100;
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/auth.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/languages/" . HTML_LANG . ".php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/header.php");
-$default_date_shift='d';
-require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datefilter.php");
+require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datetimefilter.php");
 $default_sort='tin';
 $default_order='DESC';
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/oufilter.php");
@@ -17,8 +16,7 @@ print_reports_submenu($page_url);
 <div id="cont">
 <form action="index-full.php" method="post">
 <?php echo WEB_cell_ou; ?>:&nbsp<?php print_ou_select($db_link,'ou',$rou); ?>
-<?php echo WEB_log_start_date; ?>:&nbsp<input type="date" name="date_start" value="<?php echo $date1; ?>" />
-<?php echo WEB_log_stop_date; ?>:&nbsp<input type="date" name="date_stop" value="<?php echo $date2; ?>" />
+<?php print_date_fields($date1,$date2,$date_shift); ?>
 <?php echo WEB_cell_gateway; ?>:&nbsp<?php print_gateway_select($db_link, 'gateway', $rgateway); ?>
 <?php print WEB_rows_at_page."&nbsp"; print_row_at_pages('rows',$displayed); ?>
 <input id='btn_filter' name='btn_filter' type="submit" value="<?php echo WEB_btn_show; ?>">

+ 2 - 4
html/admin/reports/index.php

@@ -2,8 +2,7 @@
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/auth.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/languages/" . HTML_LANG . ".php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/header.php");
-$default_date_shift='d';
-require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datefilter.php");
+require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datetimefilter.php");
 $default_sort='tin';
 $default_order='DESC';
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/oufilter.php");
@@ -17,8 +16,7 @@ print_reports_submenu($page_url);
 
 <form action="index.php" method="post">
 <?php echo WEB_cell_ou; ?>:&nbsp<?php print_ou_select($db_link,'ou',$rou); ?>
-<?php echo WEB_log_start_date; ?>:&nbsp<input type="date" name="date_start" value="<?php echo $date1; ?>" />
-<?php echo WEB_log_stop_date; ?>:&nbsp<input type="date" name="date_stop" value="<?php echo $date2; ?>" />
+<?php print_date_fields($date1,$date2,$date_shift); ?>
 <?php echo WEB_cell_gateway; ?>:&nbsp<?php print_gateway_select($db_link, 'gateway', $rgateway); ?>
 <?php print WEB_rows_at_page."&nbsp"; print_row_at_pages('rows',$displayed); ?>
 <input type="submit" value="<?php echo WEB_btn_show; ?>">

+ 2 - 4
html/admin/reports/userday.php

@@ -3,8 +3,7 @@ require_once ($_SERVER['DOCUMENT_ROOT']."/inc/auth.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/languages/" . HTML_LANG . ".php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/header.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/idfilter.php");
-$default_date_shift='d';
-require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datefilter.php");
+require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datetimefilter.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/oufilter.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/gatefilter.php");
 
@@ -17,8 +16,7 @@ $user=get_record_sql($db_link,'SELECT * FROM User_list WHERE id='.$id);
 <br>
 <form action="<?php print $_SERVER['PHP_SELF']; ?>" method="post">
 <input type="hidden" name="id" value=<?php echo $id; ?>>
-<?php echo WEB_log_start_date; ?>:&nbsp<input type="date" name="date_start" value="<?php echo $date1; ?>" />
-<?php echo WEB_log_stop_date; ?>:&nbsp<input type="date" name="date_stop" value="<?php echo $date2; ?>" />
+<?php print_date_fields($date1,$date2,$date_shift); ?>
 <?php echo WEB_cell_gateway; ?>:&nbsp<?php print_gateway_select($db_link, 'gateway', $rgateway); ?>
 <input type="submit" value="<?php echo WEB_btn_show; ?>">
 </form>

+ 2 - 4
html/admin/reports/userdaydetail.php

@@ -3,8 +3,7 @@ require_once ($_SERVER['DOCUMENT_ROOT']."/inc/auth.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/languages/" . HTML_LANG . ".php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/header.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/idfilter.php");
-$default_date_shift='d';
-require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datefilter.php");
+require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datetimefilter.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/gatefilter.php");
 
 $usersip = mysqli_query($db_link, "SELECT ip,user_id,comments FROM User_auth WHERE User_auth.id=$id");
@@ -23,8 +22,7 @@ print_trafdetail_submenu($page_url,"id=$id&date_start='$date1'&date_stop='$date2
 
 <form action="<?=$_SERVER['PHP_SELF']?>" method="post">
 <input type="hidden" name="id" value=<?php echo $id; ?>>
-<?php echo WEB_log_start_date; ?>:&nbsp<input type="date" name="date_start" value="<?php echo $date1; ?>" />
-<?php echo WEB_log_stop_date; ?>:&nbsp<input type="date" name="date_stop" value="<?php echo $date2; ?>" />
+<?php print_date_fields($date1,$date2,$date_shift); ?>
 <?php echo WEB_cell_gateway; ?>:&nbsp<?php print_gateway_select($db_link, 'gateway', $rgateway); ?>
 DNS:&nbsp <input type=checkbox name=dns value="1" <?php print $dns_checked; ?>>
 <input type="submit" value="<?php echo WEB_btn_show; ?>">

+ 1 - 3
html/admin/reports/userdaydetaillog.php

@@ -3,7 +3,6 @@ require_once ($_SERVER['DOCUMENT_ROOT']."/inc/auth.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/languages/" . HTML_LANG . ".php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/header.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/idfilter.php");
-$default_date_shift='h';
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datetimefilter.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/gatefilter.php");
 $default_sort='id';
@@ -28,8 +27,7 @@ print_trafdetail_submenu($page_url,"id=$id&date_start='$date1'&date_stop='$date2
 
 <form action="<?php print $page_url; ?>" method="post">
 <input type="hidden" name="id" value=<?php echo $id; ?>>
-<?php echo WEB_log_start_date; ?>:&nbsp<input type="datetime-local" name="date_start" value="<?php echo $date1; ?>" />
-<?php echo WEB_log_stop_date; ?>:&nbsp<input type="datetime-local" name="date_stop" value="<?php echo $date2; ?>" />
+<?php print_date_fields($date1,$date2,$date_shift); ?>
 <?php echo WEB_cell_gateway; ?>:&nbsp <?php print_gateway_select($db_link, 'gateway', $rgateway); ?>
 DNS:&nbsp <input type=checkbox name=dns value="1" <?php print $dns_checked; ?>>
 <?php echo WEB_search; ?>:&nbsp<input type="text" minlength="7" maxlength="15" size="15" pattern="^(?>(\d|[1-9]\d{2}|1\d\d|2[0-4]\d|25[0-5])\.){3}(?1)$"  name="search" value="<?php echo $search; ?>" />

+ 2 - 4
html/admin/reports/wan.php

@@ -2,8 +2,7 @@
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/auth.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/languages/" . HTML_LANG . ".php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/header.php");
-$default_date_shift='d';
-require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datefilter.php");
+require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datetimefilter.php");
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/gatefilter.php");
 
 print_reports_submenu($page_url);
@@ -99,8 +98,7 @@ print "</tr>\n";
 <div id="cont">
 
 <form action="wan.php" method="post">
-<?php echo WEB_log_start_date; ?>:&nbsp<input type="date" name="date_start" value="<?php echo $date1; ?>" />
-<?php echo WEB_log_stop_date; ?>:&nbsp<input type="date" name="date_stop" value="<?php echo $date2; ?>" />
+<?php print_date_fields($date1,$date2,$date_shift); ?>
 <?php echo WEB_cell_gateway; ?>:&nbsp<?php print_gateway_select($db_link, 'gateway', $rgateway); ?>
 <input type="submit" value="<?php echo WEB_btn_show; ?>">
 </form>

+ 3 - 3
html/admin/users/editauth.php

@@ -17,8 +17,8 @@ $parent_ou_id = $user_info['ou_id'];
 $user_enabled = $user_info['enabled'];
 
 if (isset($_POST["editauth"]) and !$old_auth_info['deleted']) {
-    $ip = trim($_POST["f_ip"]);
-    if (checkValidIp($ip)) {
+    $ip = normalizeIpAddress(substr(trim($_POST["f_ip"]), 0, 18));
+    if (!empty($ip)) {
         $ip_aton = ip2long($ip);
         $mac = mac_dotted($_POST["f_mac"]);
         //search mac
@@ -350,7 +350,7 @@ if (empty($auth_info['eof']) or $auth_info['eof'] == '0000-00-00 00:00:00') {
                 <td><?php print WEB_cell_option_set; ?></td>
                 <td></td>
             <tr>
-                <td><input type="text" name="f_ip" value="<?php echo $auth_info['ip']; ?>" pattern="^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"></td>
+                <td><input type="text" name="f_ip" value="<?php echo $auth_info['ip']; ?>" pattern="^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])[\.ю]){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"></td>
                 <td><input type="text" name="f_mac" value="<?php echo $auth_info['mac']; ?>" pattern="^(([0-9A-Fa-f]{2}[\.\:\-]){5}[0-9A-Fa-f]{2}|([0-9a-fA-F]{4}[\.\-][0-9a-fA-F]{4}[\.\-][0-9a-fA-F]{4})|[0-9A-Fa-f]{12})$"></td>
                 <td><?php print_qa_select('f_dhcp', $auth_info['dhcp']); ?></td>
                 <td><?php print_dhcp_acl_list($db_link,"f_acl",$auth_info['dhcp_acl']); ?></td>

+ 10 - 10
html/admin/users/edituser.php

@@ -120,17 +120,18 @@ if (isset($_POST["showDevice"])) {
 }
 
 if (isset($_POST["addauth"])) {
-    $fip = substr(trim($_POST["newip"]), 0, 18);
+    $fip = normalizeIpAddress(substr(trim($_POST["newip"]), 0, 18));
     $fcomment = NULL;
-    if (!empty(trim($_POST["newmac"]))) {
-        $fmac = mac_dotted(substr(trim($_POST["newmac"]), 0, 17));
-        if (!checkValidMac($fmac)) { 
+    $fmac = trim($_POST["newmac"]);
+    if (!empty($fmac)) {
+        if (!checkValidMac($fmac)) {
+                $fcomment = $fmac;
                 $fmac=NULL;
-                $fcomment = trim($_POST["newmac"]); 
+            } else {
+            $fmac = mac_dotted($fmac);
             }
         }
-    if ($fip) {
-        if (checkValidIp($fip)) {
+    if (!empty($fip)) {
             $ip_aton = ip2long($fip);
             $f_dhcp = 1;
             //search mac
@@ -177,13 +178,12 @@ if (isset($_POST["addauth"])) {
             header("Location: " . $_SERVER["REQUEST_URI"]);
             exit;
         } else {
-            $msg_error = "$msg_ip_error xxx.xxx.xxx.xxx";
+            $msg_error = "IP-address fromat eror!";
             $_SESSION[$page_url]['msg'] = $msg_error;
         }
-    }
     header("Location: " . $_SERVER["REQUEST_URI"]);
     exit;
-}
+    }
 
 if (isset($_POST["removeauth"])) {
     $auth_id = $_POST["f_auth_id"];

+ 5 - 0
html/css/white.css

@@ -71,3 +71,8 @@ h1                              { font-size:1.8em; }
 .black-text                     { color: black; }
 
 .button_right                   { position:absolute; right:0; }
+
+input[type="datetime-local"]:focus {
+            border-color: #3498db;
+            outline: none;
+}

+ 149 - 30
html/inc/common.php

@@ -31,6 +31,64 @@ $config["init"] = 0;
 // 18, 'Asus'
 
 // Функция для безопасного получения параметров
+/*
+FILTER_DEFAULT              // Без фильтрации (по умолчанию)
+FILTER_UNSAFE_RAW           // Без фильтрации (аналогично FILTER_DEFAULT)
+FILTER_CALLBACK             // Пользовательская функция обратного вызова
+
+FILTER_VALIDATE_BOOLEAN    // true/false/1/0/"1"/"0"/"yes"/"no"
+FILTER_VALIDATE_EMAIL      // Email адрес
+FILTER_VALIDATE_FLOAT      // Число с плавающей точкой
+FILTER_VALIDATE_INT        // Целое число
+FILTER_VALIDATE_IP         // IP адрес (IPv4/IPv6)
+FILTER_VALIDATE_REGEXP     // По регулярному выражению
+FILTER_VALIDATE_URL        // URL адрес
+FILTER_VALIDATE_DOMAIN     // Доменное имя (PHP 7.0+)
+
+FILTER_SANITIZE_EMAIL          // Удаляет все кроме букв, цифр и !#$%&'*+-/=?^_`{|}~@.[]
+FILTER_SANITIZE_ENCODED        // URL-encode строка
+FILTER_SANITIZE_MAGIC_QUOTES   // Apply addslashes()
+FILTER_SANITIZE_NUMBER_FLOAT   // Удаляет все кроме цифр, +- и .,eE
+FILTER_SANITIZE_NUMBER_INT     // Удаляет все кроме цифр и +-
+FILTER_SANITIZE_SPECIAL_CHARS  // HTML-escape '"<>& и символы с ASCII < 32
+FILTER_SANITIZE_FULL_SPECIAL_CHARS // Эквивалентно htmlspecialchars()
+FILTER_SANITIZE_STRING         // Устарело - используйте FILTER_SANITIZE_FULL_SPECIAL_CHARS
+FILTER_SANITIZE_STRIPPED       // Устарело
+FILTER_SANITIZE_URL            // Удаляет все кроме букв, цифр и $-_.+!*'(),{}|\\^~[]`<>#%";/?:@&=
+
+Flags::
+
+// Для FILTER_VALIDATE_BOOLEAN
+FILTER_NULL_ON_FAILURE      // Возвращает null вместо false при failure
+
+// Для FILTER_VALIDATE_INT
+FILTER_FLAG_ALLOW_OCTAL     // Разрешает восьмеричные числа (0123)
+FILTER_FLAG_ALLOW_HEX       // Разрешает шестнадцатеричные числа (0x1A)
+
+// Для FILTER_VALIDATE_FLOAT
+FILTER_FLAG_ALLOW_THOUSAND  // Разрешает разделитель тысяч (1,234.56)
+FILTER_FLAG_ALLOW_SCIENTIFIC// Разрешает научную нотацию (1.2e3)
+
+// Для FILTER_VALIDATE_IP
+FILTER_FLAG_IPV4            // Только IPv4
+FILTER_FLAG_IPV6            // Только IPv6
+FILTER_FLAG_NO_PRIV_RANGE   // Запрещает частные IP (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)
+FILTER_FLAG_NO_RES_RANGE    // Запрещает зарезервированные IP
+FILTER_FLAG_GLOBAL_RANGE    // Разрешает только глобальные IP
+
+// Для FILTER_VALIDATE_URL
+FILTER_FLAG_PATH_REQUIRED   // Требует наличие path (/page.html)
+FILTER_FLAG_QUERY_REQUIRED  // Требует наличие query string (?id=1)
+
+// Для FILTER_SANITIZE_STRING
+FILTER_FLAG_NO_ENCODE_QUOTES // Не кодировать кавычки
+FILTER_FLAG_STRIP_LOW        // Удаляет символы с ASCII < 32
+FILTER_FLAG_STRIP_HIGH       // Удаляет символы с ASCII > 127
+FILTER_FLAG_ENCODE_LOW       // Кодирует символы с ASCII < 32
+FILTER_FLAG_ENCODE_HIGH      // Кодирует символы с ASCII > 127
+FILTER_FLAG_ENCODE_AMP       // Кодирует амперсанд (&)
+*/
+
 function getParam($name, $page_url, $default = null, $filter = FILTER_DEFAULT) {
     $value = filter_input(INPUT_GET, $name, $filter) ?? filter_input(INPUT_POST, $name, $filter);
     return $value !== null ? $value : ($_SESSION[$page_url][$name] ?? $default);
@@ -129,47 +187,90 @@ function fpkts($packets)
 
 function checkValidIp($cidr)
 {
+    if (!is_string($cidr) || empty(trim($cidr))) {
+        return false;
+    }
 
-    // Checks for a valid IP address or optionally a cidr notation range
-    // e.g. 1.2.3.4 or 1.2.3.0/24
+    $cidr = trim($cidr);
 
-    // if(!preg_match("^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}(/[0-9]{1,2}){0,1}$", $cidr)) {
-    $ip_pattern = '/^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:[.](?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}/';
-    if (!preg_match($ip_pattern, $cidr)) {
-        $return = FALSE;
-    } else {
-        $return = TRUE;
+    // Проверяем IPv4 CIDR
+    if (preg_match('/^(\d{1,3}\.){3}\d{1,3}(\/\d{1,2})?$/', $cidr)) {
+        return validateIPv4CIDR($cidr);
     }
 
-    if ($return == TRUE) {
-        $parts = explode("/", $cidr);
-        $ip = $parts[0];
-        if (empty($parts[1])) {
-            $parts[1] = "32";
-        }
-        $netmask = $parts[1];
-        $octets = explode(".", $ip);
-        foreach ($octets as $octet) {
-            if ($octet > 255) {
-                $return = FALSE;
-            }
-        }
-        if (($netmask != "") && ($netmask > 32)) {
-            $return = FALSE;
+    // Проверяем IPv6 CIDR
+    if (preg_match('/^([0-9a-fA-F:]+)+(\/\d{1,3})?$/i', $cidr)) {
+        return validateIPv6CIDR($cidr);
+    }
+
+    return false;
+}
+
+function validateIPv4CIDR($cidr)
+{
+    $parts = explode("/", $cidr);
+    $ip = $parts[0];
+    $netmask = isset($parts[1]) ? (int)$parts[1] : 32;
+
+    // Проверяем октеты
+    $octets = explode(".", $ip);
+    if (count($octets) !== 4) {
+        return false;
+    }
+
+    foreach ($octets as $octet) {
+        $octet = (int)$octet;
+        if ($octet < 0 || $octet > 255) {
+            return false;
         }
     }
-    return $return;
+
+    return $netmask >= 0 && $netmask <= 32;
+}
+
+// для IPv6
+function validateIPv6CIDR($cidr)
+{
+    // Упрощенная проверка IPv6
+    $parts = explode("/", $cidr);
+    $ip = $parts[0];
+    $netmask = isset($parts[1]) ? (int)$parts[1] : 128;
+
+    return filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) !== false 
+           && $netmask >= 0 && $netmask <= 128;
+}
+
+function normalizeIpAddress($input) {
+    // Заменяем все возможные варианты "ю" на стандартные точки
+    $normalized = str_replace(
+        ['ю', 'Ю', '>'], // Кириллические и латинские варианты
+        '.', 
+        strtolower(trim($input))
+    );
+    if (!checkValidIp($normalized)) { return ''; }
+    return $normalized;
 }
 
 function checkValidMac($mac)
 {
-    $ValidMacAddressRegex = "/^([0-9A-Fa-f]{2}[:-]){5}[0-9A-Fa-f]{2}|([0-9a-fA-F]{4}[\\.-][0-9a-fA-F]{4}[\\.-][0-9a-fA-F]{4})|[0-9A-Fa-f]{12}$/";
-    if (!preg_match($ValidMacAddressRegex, $mac)) {
-        $return = FALSE;
-    } else {
-        $return = TRUE;
+    if (!is_string($mac)) return false;
+
+    $mac = trim($mac);
+
+    // Отдельные шаблоны для каждого формата
+    $patterns = [
+        '/^([0-9A-Fa-f]{2}[:-]){5}[0-9A-Fa-f]{2}$/', // 00:1A:2B:3C:4D:5E
+        '/^([0-9a-fA-F]{4}[\\.-]){2}[0-9a-fA-F]{4}$/', // 001A.2B3C.4D5E
+        '/^[0-9A-Fa-f]{12}$/' // 001A2B3C4D5E
+    ];
+
+    foreach ($patterns as $pattern) {
+        if (preg_match($pattern, $mac)) {
+            return true;
+        }
     }
-    return $return;
+
+    return false;
 }
 
 function checkValidHostname($dnsname)
@@ -662,6 +763,24 @@ function print_loglevel_select($item_name, $value)
     print "</select>\n";
 }
 
+function print_timeshift_select($value)
+{
+    print "<select id='date_shift' name='date_shift' onchange=\"updateDates()\">\n";
+    print_select_item('-', '-', $value);
+    print_select_item(WEB_date_shift_hour, 'h', $value);
+    print_select_item(WEB_date_shift_8hour, '8h', $value);
+    print_select_item(WEB_date_shift_day, 'd', $value);
+    print_select_item(WEB_date_shift_month, 'm', $value);
+    print "</select>\n";
+}
+
+function print_date_fields($date1,$date2,$date_shift)
+{
+print WEB_log_start_date.'&nbsp'; print '<input type="datetime-local" name="date_start" id="date_start" value="'.$date1.'" onchange="SetDateShiftCustom()"/>';
+print WEB_log_stop_date.'&nbsp'; print '<input type="datetime-local" name="date_stop" id="date_stop" value="'.$date2.'" onchange="SetDateShiftCustom()"/>';
+print WEB_date_shift.'&nbsp'; print_timeshift_select($date_shift);
+}
+
 function reencodeurl($url)
 {
     $url_arr = explode('?', $url);

+ 147 - 57
html/inc/datetimefilter.php

@@ -2,73 +2,163 @@
 
 if (!defined("CONFIG")) die("Not defined");
 
-$datetime_start = DateTime::createFromFormat("Y-m-d 00:00:00",date("Y-m-d").' 00:00:00');
+$date_shift = getParam('date_shift', $page_url, 'h');
+$date_start = getParam('date_start', $page_url, '');
+$date_stop = getParam('date_stop', $page_url, ''); // Исправлено: было 'date_start'
 
-if (empty($default_date_shift)) { $default_date_shift='h'; }
+// Инициализация переменных
+$datetime_start = null;
+$datetime_stop = null;
+$time_start = null;
+$time_stop = null;
+$date1 = '';
+$date2 = '';
 
-if (!empty($_GET['date_start']) or !empty($_POST['date_start'])) {
-    if (!empty($_GET['date_start'])) { $datetime_start = GetDateTimeFromString($_GET['date_start']); }
-    if (!empty($_POST['date_start'])) { $datetime_start = GetDateTimeFromString($_POST['date_start']); }
-    $date1 = $datetime_start->format('Y-m-d H:i:s');
+if (empty($date_start) || empty($date_stop)) {
+    // Устанавливаем конечную дату = текущее время
+    $datetime_stop = new DateTime();
+    $date2 = $datetime_stop->format('Y-m-d H:i');
+    $time_stop = $datetime_stop->getTimestamp();
+    
+    // Устанавливаем начальную дату в зависимости от сдвига
+    $datetime_start = clone $datetime_stop;
+    
+    switch ($date_shift) {
+        case 'h':
+            $datetime_start->modify('-1 hour');
+            break;
+        case '8h':
+            $datetime_start->modify('-8 hours');
+            break;
+        case 'd':
+            $datetime_start->modify('-1 day');
+            break;
+        case 'm':
+            $datetime_start->modify('-1 month');
+            break;
+        case '-': 
+        default:
+            $datetime_start->modify('-1 day'); // значение по умолчанию
+            break;
+    }
+    
     $time_start = $datetime_start->getTimestamp();
-    } else {
-    if (!empty($_SESSION[$page_url]['date_start'])) {
-        $date1 = $_SESSION[$page_url]['date_start'];
-        $datetime_start = GetDateTimeFromString($date1);
-        $time_start = $datetime_start->getTimestamp();
-        } else {
-        $date1 = $datetime_start->format('Y-m-d H:i:s');
+    $date1 = $datetime_start->format('Y-m-d H:i');
+    
+} else {
+    // Если даты переданы, парсим их
+    $datetime_start = GetDateTimeFromString($date_start);
+    if ($datetime_start) {
+        $date1 = $datetime_start->format('Y-m-d H:i');
         $time_start = $datetime_start->getTimestamp();
-        }
     }
-
-if (!empty($_POST['date_stop']) or !empty($_GET['date_stop'])) {
-    if (!empty($_GET['date_stop'])) { $datetime_stop = GetDateTimeFromString($_GET['date_stop']); }
-    if (!empty($_POST['date_stop'])) { $datetime_stop = GetDateTimeFromString($_POST['date_stop']); }
-    $date2 = $datetime_stop->format('Y-m-d H:i:s');
-    $time_stop = $datetime_stop->getTimestamp();
-    } else {
-    if (!empty($_SESSION[$page_url]['date_stop'])) {
-        $date2 = $_SESSION[$page_url]['date_stop'];
-        $datetime_stop = GetDateTimeFromString($date2);
+    
+    $datetime_stop = GetDateTimeFromString($date_stop);
+    if ($datetime_stop) {
+        $date2 = $datetime_stop->format('Y-m-d H:i');
         $time_stop = $datetime_stop->getTimestamp();
-        }
     }
+}
 
-if (!isset($datetime_stop) or empty($datetime_stop)) {
-    if ($default_date_shift==='h') {
-        $datetime_start->modify('+1 hour');
-        $time_stop = $datetime_start->getTimestamp();
-        $date2 = $datetime_start->format('Y-m-d H:i:s');
-        }
-    if ($default_date_shift==='d') {
-        $datetime_start->modify('+1 day');
-        $time_stop = $datetime_start->getTimestamp();
-        $date2 = $datetime_start->format('Y-m-d H:i:s');
-        }
-    if ($default_date_shift==='m') {
-        $datetime_stop = new DateTime($date1);
-        $datetime_stop->modify('+1 month');
-        $time_stop = $datetime_stop->getTimestamp();
-        $date2 = $datetime_start->format('Y-m-d H:i:s');
-        $date1 = $datetime_start->format('Y-m-1 H:i:s');
-        $datetime_start = new DateTime($date1);
-        $time_start = $datetime_start->getTimestamp();
-        }
-    if (empty($datetime_stop)) {
-        $datetime_stop = new DateTime();
-        $datetime_stop->modify('+1 day');
-        $time_stop = $datetime_stop->getTimestamp();
-        $date2 = $datetime_start->format('Y-m-d H:i:s');
-        }
-    } else {
-    $date2 = $datetime_stop->format('Y-m-d H:i:s');
+// Защита от невалидных дат
+if (!$datetime_start || !$datetime_stop) {
+    // Устанавливаем значения по умолчанию при ошибке
+    $datetime_stop = new DateTime();
+    $datetime_start = clone $datetime_stop;
+    $datetime_start->modify('-1 day');
+    
+    $date1 = $datetime_start->format('Y-m-d H:i');
+    $date2 = $datetime_stop->format('Y-m-d H:i');
+    $time_start = $datetime_start->getTimestamp();
     $time_stop = $datetime_stop->getTimestamp();
-    }
+}
 
-$days_shift = ceil(($time_stop - $time_start)/86400);
+// Проверяем что начальная дата не позже конечной
+if ($time_start > $time_stop) {
+    // Меняем даты местами если нужно
+    list($time_start, $time_stop) = [$time_stop, $time_start];
+    list($date1, $date2) = [$date2, $date1];
+    list($datetime_start, $datetime_stop) = [$datetime_stop, $datetime_start];
+}
 
-$_SESSION[$page_url]['date_start']=$date1;
-$_SESSION[$page_url]['date_stop']=$date2;
+$days_shift = ceil(($time_stop - $time_start) / 86400);
+
+// Сохраняем в сессии
+$_SESSION[$page_url]['date_start'] = $date1;
+$_SESSION[$page_url]['date_stop'] = $date2;
+$_SESSION[$page_url]['date_shift'] = $date_shift;
 
 ?>
+
+<script>
+function SetDateShiftCustom() {
+document.getElementById('date_shift').value='-';
+}
+
+function updateDates() {
+    const dateShift = document.getElementById('date_shift').value;
+    const dateStartInput = document.getElementById('date_start');
+    const dateStopInput = document.getElementById('date_stop');
+    
+    // Если выбран произвольный период - не меняем даты
+    if (dateShift === '-') {
+        return;
+    }
+    
+    // Получаем текущую дату и время
+    const now = new Date();
+    
+    // Устанавливаем конечную дату = текущее время
+    dateStopInput.value = formatDateTimeLocal(now);
+    
+    // Создаем копию для начальной даты
+    const startDate = new Date(now);
+    
+    // Изменяем начальную дату в зависимости от выбора
+    switch (dateShift) {
+        case 'h': // Последний час
+            startDate.setHours(startDate.getHours() - 1);
+            break;
+        case '8h': // Последние 8 часов
+            startDate.setHours(startDate.getHours() - 8);
+            break;
+        case 'd': // Последние 24 часа
+            startDate.setDate(startDate.getDate() - 1);
+            break;
+        case 'm': // Последний месяц
+            startDate.setMonth(startDate.getMonth() - 1);
+            break;
+    }
+
+    // Устанавливаем начальную дату
+    dateStartInput.value = formatDateTimeLocal(startDate);
+}
+
+// Функция для форматирования даты в формат datetime-local
+function formatDateTimeLocal(date) {
+    const year = date.getFullYear();
+    const month = String(date.getMonth() + 1).padStart(2, '0');
+    const day = String(date.getDate()).padStart(2, '0');
+    const hours = String(date.getHours()).padStart(2, '0');
+    const minutes = String(date.getMinutes()).padStart(2, '0');
+    return `${year}-${month}-${day}T${hours}:${minutes}`;
+}
+
+// Автоматическое обновление при загрузке страницы, если нужно
+/*
+document.addEventListener('DOMContentLoaded', function() {
+    const dateShift = document.getElementById(date_shift).value;
+    if (dateShift !== 'custom') {
+        updateDates();
+    }
+});
+*/
+
+// Опционально: автоматическая отправка формы при изменении
+/*
+function updateAndSubmit() {
+    updateDates();
+    document.getElementById('dateForm').submit();
+}
+*/
+</script>

+ 5 - 0
html/inc/languages/english.php

@@ -460,6 +460,11 @@ define("WEB_ips_search_full","Search by comment/ip/mac/dhcp hostname");
 /* logs */
 define("WEB_log_start_date","Start");
 define("WEB_log_stop_date","End");
+define("WEB_date_shift","Time preset");
+define("WEB_date_shift_hour","Last hour");
+define("WEB_date_shift_8hour","Last 8 hour");
+define("WEB_date_shift_day","Last day");
+define("WEB_date_shift_month","Last month");
 define("WEB_log_level_display","Log level");
 define("WEB_log_filter_source","Source");
 define("WEB_log_filter_event","Event");

+ 5 - 0
html/inc/languages/russian.php

@@ -460,6 +460,11 @@ define("WEB_ips_search_full","Поиск по комментарию/ip/mac/dhcp
 /* logs */
 define("WEB_log_start_date","Начало");
 define("WEB_log_stop_date","Конец");
+define("WEB_date_shift","Интервал");
+define("WEB_date_shift_hour","За час");
+define("WEB_date_shift_8hour","8 часов");
+define("WEB_date_shift_day","За день");
+define("WEB_date_shift_month","За месяц");
 define("WEB_log_level_display","Уровень логов");
 define("WEB_log_filter_source","Источник");
 define("WEB_log_filter_event","Событие");

+ 2 - 2
scripts/sync_mikrotik.pl

@@ -45,10 +45,10 @@ my $all_ok = 1;
 my @gateways =();
 #select undeleted mikrotik routers only
 if ($ARGV[0]) {
-    my $router = get_record_sql($dbh,'SELECT * FROM devices WHERE (device_type=2 OR device_type=0) and protocol>0 and (user_acl=1 or dhcp=1) and deleted=0 and vendor_id=9 and id='.$ARGV[0]);
+    my $router = get_record_sql($dbh,'SELECT * FROM devices WHERE (device_type=2 OR device_type=0) and protocol>=0 and (user_acl=1 or dhcp=1) and deleted=0 and vendor_id=9 and id='.$ARGV[0]);
     if ($router) { push(@gateways,$router); }
     } else {
-    @gateways = get_records_sql($dbh,'SELECT * FROM devices WHERE (device_type=2 OR device_type=0) and protocol>0 and (user_acl=1 or dhcp=1) and deleted=0 and vendor_id=9');
+    @gateways = get_records_sql($dbh,'SELECT * FROM devices WHERE (device_type=2 OR device_type=0) and protocol>=0 and (user_acl=1 or dhcp=1) and deleted=0 and vendor_id=9');
     }
 
 #все сети организации, работающие по dhcp