Subversion Repositories ALCASAR

Rev

Rev 2818 | Rev 2854 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log

Rev 2818 Rev 2853
1
<!DOCTYPE html>
1
<!DOCTYPE html>
2
<?php
2
<?php
3
require('/etc/freeradius-web/config.php');
3
require('/etc/freeradius-web/config.php');
4
require('../lib/functions.php');
4
require('../lib/functions.php');
5
require('../lib/sql/functions.php');
5
require('../lib/sql/functions.php');
6
require('../lib/acctshow.php');
6
require('../lib/acctshow.php');
-
 
7
$Language = 'en';
-
 
8
if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
-
 
9
	$Langue = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
-
 
10
	$Language = strtolower(substr(chop($Langue[0]), 0, 2)); 
-
 
11
}
-
 
12
if ($Language === 'fr') {
-
 
13
	$l_title	= "Journal des connexions";
-
 
14
	$l_select_attributes	= "Sélectionnez les attributs à afficher";
-
 
15
	$l_ordered	= "Classé par :";
-
 
16
	$l_max_return	= "Nbr. max. de résultats retournés :";
-
 
17
	$l_criteria	= "Critère de sélection :";
-
 
18
	$l_not_valid =	"L'opération demandé n'est pas valide. Sortie anormale.";
-
 
19
	$l_delete =	"Supprimer";
-
 
20
	$l_edit_user	= "Éditer l'utilisateur :";
-
 
21
} else if($Language === 'es') {
-
 
22
	$l_title	= "Registro de conexión";
-
 
23
	$l_select_attributes	= "Seleccione los atributos que desea mostrar";
-
 
24
	$l_ordered	= "ordenada por :";
-
 
25
	$l_max_return	= "Máximo número de resultados devueltos :";
-
 
26
	$l_criteria	= "Criterios de selección :";
-
 
27
	$l_not_valid =	"La operación solicitada no es válida. Salida anormal.";
-
 
28
	$l_delete =	"Eliminar";
-
 
29
	$l_edit_user	= "Editar usuario :";
-
 
30
} else {
-
 
31
	$l_title	= "Connections log";
-
 
32
	$l_select_attributes	= "Select the attributes you want to display";
-
 
33
	$l_ordered	= "Ordered by :";
-
 
34
	$l_max_return	= "Max. no. of results returned :";
-
 
35
	$l_criteria	= "Selection Criteria :";
-
 
36
	$l_not_valid =	"The requested operation is not valid. Abnormal exit.";
-
 
37
	$l_delete =	"Delete";
-
 
38
	$l_edit_user	= "Edit user :";
-
 
39
}
7
if (is_file("../lib/sql/drivers/$config[sql_type]/functions.php"))
40
if (is_file("../lib/sql/drivers/$config[sql_type]/functions.php"))
8
	include_once("../lib/sql/drivers/$config[sql_type]/functions.php");
41
	include_once("../lib/sql/drivers/$config[sql_type]/functions.php");
9
else{
42
else{
10
	echo <<<EOM
43
	echo <<<EOM
11
<html>
44
<html>
12
<head>
45
<head>
13
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
46
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
14
<title>$l_title</title>
47
<title>$l_title</title>
15
<link rel="stylesheet" href="/css/acc.css">
48
<link rel="stylesheet" href="/css/acc.css">
16
</head>
49
</head>
17
<body>
50
<body>
18
<center>
51
<center>
19
<b>Could not include SQL library functions. Aborting</b>
52
<b>Could not include SQL library functions. Aborting</b>
20
</body>
53
</body>
21
</html>
54
</html>
22
EOM;
55
EOM;
23
	exit();
56
	exit();
24
}
57
}
25
$Language = 'en';
-
 
26
if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
-
 
27
	$Langue = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
-
 
28
	$Language = strtolower(substr(chop($Langue[0]), 0, 2)); 
-
 
29
}
-
 
30
if ($Language === 'fr') {
-
 
31
	$l_title	= "Journal des connexions";
-
 
32
} else {
-
 
33
	$l_title	= "Connections log";
-
 
34
}
-
 
35
 
58
 
36
$operators=array( '=','<', '>', '<=', '>=', 'regexp', 'like' );
59
$operators=array( '=','<', '>', '<=', '>=', 'regexp', 'like' );
37
if ($config['sql_type'] == 'pg'){
60
if ($config['sql_type'] == 'pg'){
38
	$operators=array( '=','<', '>', '<=', '>=', '~', 'like', '~*', '~~*', '<<=' );
61
	$operators=array( '=','<', '>', '<=', '>=', '~', 'like', '~*', '~~*', '<<=' );
39
}
62
}
40
$link = da_sql_pconnect ($config) or die('cannot connect to sql databse');
63
$link = da_sql_pconnect ($config) or die('cannot connect to sql databse');
41
$fields = da_sql_list_fields($config['sql_accounting_table'],$link,$config);
64
$fields = da_sql_list_fields($config['sql_accounting_table'],$link,$config);
42
unset($items);
65
unset($items);
43
while($row = $fields->fetch_array())
66
while($row = $fields->fetch_array())
44
{
67
{
45
	$key = strtolower($row[0]);
68
	$key = strtolower($row[0]);
46
	$val = $sql_attrs[$key]['desc'];
69
	$val = $sql_attrs[$key]['desc'];
47
	if ($val == '')
70
	if ($val == '')
48
		continue;
71
		continue;
49
	$show = $sql_attrs[$key]['show'];
72
	$show = $sql_attrs[$key]['show'];
50
	$selected[$key] = ($show == 'yes') ? 'selected' : '';
73
	$selected[$key] = ($show == 'yes') ? 'selected' : '';
51
	$items[$key] = "$val";
74
	$items[$key] = "$val";
52
}
75
}
53
asort($items);
76
asort($items);
54
 
77
 
55
class Qi {
78
class Qi {
56
	var $name;
79
	var $name;
57
	var $item;
80
	var $item;
58
	var $_item;
81
	var $_item;
59
	var $operator;
82
	var $operator;
60
	var $type;
83
	var $type;
61
	var $typestr;
84
	var $typestr;
62
	var $value;
85
	var $value;
63
	function Qi($name,$item,$operator) {
86
	function Qi($name,$item,$operator) {
64
				$this->name=$name;
87
				$this->name=$name;
65
				$this->item=$item;
88
				$this->item=$item;
66
				$this->operator=$operator;
89
				$this->operator=$operator;
67
	}
90
	}
68
 
91
 
69
	function show() {	global $operators;
92
	function show() {	global $operators;
70
				global $items;
93
				global $items;
71
		$nam = $this->item;
94
		$nam = $this->item;
72
			echo <<<EOM
95
			echo <<<EOM
73
	<tr><td align=left>
96
	<tr><td align=left>
74
	<i>$items[$nam]</i>
97
	<i>$items[$nam]</i>
75
	<input type=hidden name="item_of_$this->name" value="$this->item">
98
	<input type=hidden name="item_of_$this->name" value="$this->item">
76
	</td><td align=left>
99
	</td><td align=left>
77
	<select name=operator_of_$this->name>
100
	<select name=operator_of_$this->name>
78
EOM;
101
EOM;
79
		foreach($operators as $operator){
102
		foreach($operators as $operator){
80
			if($this->operator == $operator)
103
			if($this->operator == $operator)
81
				$selected=" selected ";
104
				$selected=" selected ";
82
			else
105
			else
83
				$selected='';
106
				$selected='';
84
			print("<option value=\"$operator\" $selected>$operator</option>\n");
107
			print("<option value=\"$operator\" $selected>$operator</option>\n");
85
		 }
108
		 }
86
	echo <<<EOM
109
	echo <<<EOM
87
	</select>
110
	</select>
88
	</td><td align=left>
111
	</td><td align=left>
89
	<input name="value_of_$this->name" type=text value="$this->value">
112
	<input name="value_of_$this->name" type=text value="$this->value">
90
	</td><td align=left>
113
	</td><td align=left>
91
	<input type=hidden name="delete_$this->name" value=0>
114
	<input type=hidden name="delete_$this->name" value=0>
92
	<input type=submit class=button size=5 value=del onclick="this.form.delete_$this->name.value=1">
115
	<input type=submit class=button size=5 value="$l_delete" onclick="this.form.delete_$this->name.value=1">
93
	</td></tr>
116
	</td></tr>
94
EOM;
117
EOM;
95
	}
118
	}
96
 
119
 
97
	function get($designator) {  	global ${"item_of_$designator"};
120
	function get($designator) {  	global ${"item_of_$designator"};
98
			global ${"value_of_$designator"};
121
			global ${"value_of_$designator"};
99
			global ${"operator_of_$designator"};
122
			global ${"operator_of_$designator"};
100
			if(${"item_of_$designator"}){
123
			if(${"item_of_$designator"}){
101
				$this->value= ${"value_of_$designator"};
124
				$this->value= ${"value_of_$designator"};
102
				$this->operator=${"operator_of_$designator"};
125
				$this->operator=${"operator_of_$designator"};
103
				$this->item=${"item_of_$designator"};
126
				$this->item=${"item_of_$designator"};
104
			}
127
			}
105
		}
128
		}
106
	function query(){
129
	function query(){
107
		global $operators;
130
		global $operators;
108
		global $items;
131
		global $items;
109
		return $items[$this->item]."  $this->operator  '$this->value'";
132
		return $items[$this->item]."  $this->operator  '$this->value'";
110
	}
133
	}
111
}
134
}
112
 
135
 
113
?>
136
?>
114
<html>
137
<html>
115
<head>
138
<head>
116
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
139
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
117
	<title><?= $l_title ?></title>
140
	<title><?= $l_title ?></title>
118
	<link rel="stylesheet" href="/css/acc.css">
141
	<link rel="stylesheet" href="/css/acc.css">
119
</head>
142
</head>
120
<body>
143
<body>
121
<div class="panel">
144
<div class="panel">
122
	<div class="panel-header"><?= $l_title ?></div>
145
	<div class="panel-header"><?= $l_title ?></div>
123
	<div class="panel-row">
146
	<div class="panel-row">
124
<?php
147
<?php
125
if(!isset($queryflag))
148
if(!isset($queryflag))
126
{
149
{
127
	$queryflag = 0;
150
	$queryflag = 0;
128
}
151
}
129
if(!$queryflag) {
152
if(!$queryflag) {
130
	echo <<<EOM
153
	echo <<<EOM
131
<form method=post>
154
<form method=post>
132
<table border=0 width=740 cellpadding=1 cellspacing=1>
155
<table border=0 width=740 cellpadding=1 cellspacing=1>
133
<tr>
156
<tr>
134
<td>
157
<td>
135
<b>Afficher les attributs suivants :</b><br>
158
<b>$l_select_attributes</b><br>
136
<select name="accounting_show_attrs[]" size=5 multiple>
159
<select name="accounting_show_attrs[]" size=5 multiple>
137
EOM;
160
EOM;
138
foreach($items as $key => $val)
161
foreach($items as $key => $val)
139
	echo <<<EOM
162
	echo <<<EOM
140
<option $selected[$key] value="$key">$val</option>
163
<option $selected[$key] value="$key">$val</option>
141
EOM;
164
EOM;
142
 
165
 
143
echo <<<EOM
166
echo <<<EOM
144
</select>
167
</select>
145
<br><br>
168
<br><br>
146
<b>Class&eacute; par :</b><br>
169
<b>$l_ordered</b><br>
147
<select name="order_by">
170
<select name="order_by">
148
EOM;
171
EOM;
149
 
172
 
150
foreach($items as $key => $val)
173
foreach($items as $key => $val)
151
	if ($val == 'username')
174
	if ($val == 'username')
152
		echo <<<EOM
175
		echo <<<EOM
153
	<option selected value="$key">$val</option>
176
	<option selected value="$key">$val</option>
154
EOM;
177
EOM;
155
	else
178
	else
156
	echo <<<EOM
179
	echo <<<EOM
157
<option value="$key">$val</option>
180
<option value="$key">$val</option>
158
EOM;
181
EOM;
159
 
182
 
160
echo <<<EOM
183
echo <<<EOM
161
</select>
184
</select>
162
<br><br>
185
<br><br>
163
<b>Nbr. Max. de r&eacute;sultats retourn&eacute;s :</b><br>
186
<b>$l_max_return</b><br>
164
<input name=maxresults value=$config[sql_row_limit] size=5>
187
<input name=maxresults value=$config[sql_row_limit] size=5>
165
</td>
188
</td>
166
<td valign=top>
189
<td valign=top>
167
<input type=hidden name=add value=0>
190
<input type=hidden name=add value=0>
168
<table border=0 width=340 cellpadding=1 cellspacing=1>
191
<table border=0 width=340 cellpadding=1 cellspacing=1>
169
<tr><td>
192
<tr><td>
170
<b>Crit&egrave;re de s&eacute;lection :</b>
193
<b>$l_criteria</b>
171
</td></tr>
194
</td></tr>
172
<tr><td>
195
<tr><td>
173
<select name=item_name onchange="this.form.add.value=1;this.form.submit()">
196
<select name=item_name onchange="this.form.add.value=1;this.form.submit()">
174
<option>--Attribute--</option>
197
<option>--Attribute--</option>
175
EOM;
198
EOM;
176
 
199
 
177
foreach($items as $key => $val)
200
foreach($items as $key => $val)
178
	print("<option value=\"$key\">$val</option>");
201
	print("<option value=\"$key\">$val</option>");
179
 
202
 
180
echo <<<EOM
203
echo <<<EOM
181
</select>
204
</select>
182
</td></tr>
205
</td></tr>
183
EOM;
206
EOM;
184
 
207
 
185
$number=1;
208
$number=1;
186
$offset=0;
209
$offset=0;
187
while (isset(${"item_of_w$number"}) && ${"item_of_w$number"}) {
210
while (isset(${"item_of_w$number"}) && ${"item_of_w$number"}) {
188
	if(${"delete_w$number"}==1) {$offset=1;$number++;}
211
	if(${"delete_w$number"}==1) {$offset=1;$number++;}
189
		else {
212
		else {
190
		$designator=$number-$offset;
213
		$designator=$number-$offset;
191
		${"w$designator"} = new Qi("w$designator","","");
214
		${"w$designator"} = new Qi("w$designator","","");
192
		${"w$designator"}->get("w$number");
215
		${"w$designator"}->get("w$number");
193
		${"w$designator"}->show();
216
		${"w$designator"}->show();
194
		$number++;
217
		$number++;
195
		}
218
		}
196
	}
219
	}
197
if(isset($add) && $add==1) {
220
if(isset($add) && $add==1) {
198
	${"w$number"} = new Qi("w$number","$item_name","$operators[0]");
221
	${"w$number"} = new Qi("w$number","$item_name","$operators[0]");
199
	${"w$number"}->show();
222
	${"w$number"}->show();
200
	}
223
	}
201
echo <<<EOM
224
echo <<<EOM
202
</table>
225
</table>
203
</td>
226
</td>
204
<tr>
227
<tr>
205
<td>
228
<td>
206
<input type=hidden name=queryflag value=0>
229
<input type=hidden name=queryflag value=0>
207
<br><input type=submit class=button onclick="this.form.queryflag.value=1">
230
<br><input type=submit class=button onclick="this.form.queryflag.value=1">
208
</td>
231
</td>
209
</tr>
232
</tr>
210
</table>
233
</table>
211
</form>
234
</form>
212
EOM;
235
EOM;
213
}
236
}
214
 
237
 
215
if ($queryflag == 1){
238
if ($queryflag == 1){
216
	if(!isset($where))
239
	if(!isset($where))
217
		$where = "";
240
		$where = "";
218
$i = 1;
241
$i = 1;
219
while (isset(${"item_of_w$i"}) && ${"item_of_w$i"}){
242
while (isset(${"item_of_w$i"}) && ${"item_of_w$i"}){
220
	$op_found = 0;
243
	$op_found = 0;
221
	foreach ($operators as $operator){
244
	foreach ($operators as $operator){
222
		if (${"operator_of_w$i"} == $operator){
245
		if (${"operator_of_w$i"} == $operator){
223
			$op_found = 1;
246
			$op_found = 1;
224
			break;
247
			break;
225
		}
248
		}
226
	}
249
	}
227
	if (!$op_found)
250
	if (!$op_found)
228
		die("L'op&eacute;ration demand&eacute; n'est pas valide. Sortie anormale.");
251
		die("$l_not_valid");
229
	${"item_of_w$i"} = preg_replace('/\s/','',${"item_of_w$i"});
252
	${"item_of_w$i"} = preg_replace('/\s/','',${"item_of_w$i"});
230
	${"value_of_w$i"} = da_sql_escape_string($link,${"value_of_w$i"});
253
	${"value_of_w$i"} = da_sql_escape_string($link,${"value_of_w$i"});
231
	$where .= ($i == 1) ? ' WHERE ' . ${"item_of_w$i"} . ' ' . ${"operator_of_w$i"} . " '" . ${"value_of_w$i"} . "'" :
254
	$where .= ($i == 1) ? ' WHERE ' . ${"item_of_w$i"} . ' ' . ${"operator_of_w$i"} . " '" . ${"value_of_w$i"} . "'" :
232
				' AND ' . ${"item_of_w$i"} . ' ' . ${"operator_of_w$i"} . " '" . ${"value_of_w$i"} . "'" ;
255
				' AND ' . ${"item_of_w$i"} . ' ' . ${"operator_of_w$i"} . " '" . ${"value_of_w$i"} . "'" ;
233
	$i++;
256
	$i++;
234
}
257
}
235
 
258
 
236
$order = ($order_by != '') ? "$order_by" : 'username';
259
$order = ($order_by != '') ? "$order_by" : 'username';
237
 
260
 
238
if (preg_match("/[\s;]/",$order))
261
if (preg_match("/[\s;]/",$order))
239
	die("ORDER BY pattern is illegal. Exiting abnornally.");
262
	die("ORDER BY pattern is illegal. Exiting abnornally.");
240
 
263
 
241
if (!is_numeric($maxresults))
264
if (!is_numeric($maxresults))
242
	die("Max Results is not in numeric form. Exiting abnormally.");
265
	die("Max Results is not in numeric form. Exiting abnormally.");
243
 
266
 
244
$query_view = '';
267
$query_view = '';
245
foreach ($accounting_show_attrs as $val)
268
foreach ($accounting_show_attrs as $val)
246
	$query_view .= $val . ',';
269
	$query_view .= $val . ',';
247
$query_view = preg_replace('/,$/','',$query_view);
270
$query_view = preg_replace('/,$/','',$query_view);
248
unset($sql_extra_query);
271
unset($sql_extra_query);
249
if (isset($config['sql_accounting_extra_query'])){
272
if (isset($config['sql_accounting_extra_query'])){
250
	$sql_extra_query = xlat($config['sql_accounting_extra_query'],$login,$config);
273
	$sql_extra_query = xlat($config['sql_accounting_extra_query'],$login,$config);
251
	$sql_extra_query = da_sql_escape_string($link,$sql_extra_query);
274
	$sql_extra_query = da_sql_escape_string($link,$sql_extra_query);
252
}
275
}
253
else
276
else
254
{
277
{
255
	$sql_extra_query = "";
278
	$sql_extra_query = "";
256
}
279
}
257
 
280
 
258
if(!isset($where))
281
if(!isset($where))
259
{
282
{
260
	$where = "";
283
	$where = "";
261
}
284
}
262
 
285
 
263
$query="SELECT " . da_sql_limit($maxresults,0,$config) . " $query_view FROM $config[sql_accounting_table]
286
$query="SELECT " . da_sql_limit($maxresults,0,$config) . " $query_view FROM $config[sql_accounting_table]
264
	$where $sql_extra_query " . da_sql_limit($maxresults,1,$config) .
287
	$where $sql_extra_query " . da_sql_limit($maxresults,1,$config) .
265
	" ORDER BY $order DESC " . da_sql_limit($maxresults,2,$config) . ";";
288
	" ORDER BY $order DESC " . da_sql_limit($maxresults,2,$config) . ";";
266
 
289
 
267
echo <<<EOM
290
echo <<<EOM
268
	<table border=0 width=100% cellpadding=12 cellspacing=0 bgcolor="#ffffd0" valign=top>
291
	<table border=0 width=100% cellpadding=12 cellspacing=0 bgcolor="#ffffd0" valign=top>
269
	<tr><td>
292
	<tr><td>
270
		<table border=1 width=100% cellpadding=2 cellspacing=0 bgcolor="#ffffe0" valign=top>
293
		<table border=1 width=100% cellpadding=2 cellspacing=0 bgcolor="#ffffe0" valign=top>
271
		<tr bgcolor="#d0ddb0">
294
		<tr bgcolor="#d0ddb0">
272
EOM;
295
EOM;
273
 
296
 
274
foreach($accounting_show_attrs as $val){
297
foreach($accounting_show_attrs as $val){
275
	$desc = $sql_attrs[$val]['desc'];
298
	$desc = $sql_attrs[$val]['desc'];
276
	if($val == 'acctoutputoctets')
299
	if($val == 'acctoutputoctets')
277
		$desc = "Upload";
300
		$desc = "Upload";
278
	if($val == 'acctinputoctets')
301
	if($val == 'acctinputoctets')
279
		$desc = "Download";
302
		$desc = "Download";
280
	echo "<th>$desc</th>\n";
303
	echo "<th>$desc</th>\n";
281
}
304
}
282
echo "</tr>\n";
305
echo "</tr>\n";
283
 
306
 
284
	$search = da_sql_query($link,$config,$query);
307
	$search = da_sql_query($link,$config,$query);
285
	if ($search){
308
	if ($search){
286
		while( $row = da_sql_fetch_array($search,$config) ){
309
		while( $row = da_sql_fetch_array($search,$config) ){
287
			//$num++;
310
			//$num++;
288
			echo "<tr align=center>\n";
311
			echo "<tr align=center>\n";
289
			foreach($accounting_show_attrs as $val){
312
			foreach($accounting_show_attrs as $val){
290
				$info = $row[$val];
313
				$info = $row[$val];
291
				if($val == "acctoutputoctets" || $val == "acctinputoctets")
314
				if($val == "acctoutputoctets" || $val == "acctinputoctets")
292
					$info = bytes2str($info);
315
					$info = bytes2str($info);
293
				if($val == "acctsessiontime")
316
				if($val == "acctsessiontime")
294
					$info = time2strclock($info);
317
					$info = time2strclock($info);
295
				if ($info == '')
318
				if ($info == '')
296
					$info = '-';
319
					$info = '-';
297
				if ($val == 'username'){
320
				if ($val == 'username'){
298
					$Info = urlencode($info);
321
					$Info = urlencode($info);
299
					$info = "<a href=\"user_admin.php?login=$Info\" title=\"Edit user $info\">$info</a>";
322
					$info = "<a href=\"user_admin.php?login=$Info\" title=\"$l_edit_user $info\">$info</a>";
300
				}
323
				}
301
				echo <<<EOM
324
				echo <<<EOM
302
			<td>$info</td>
325
			<td>$info</td>
303
EOM;
326
EOM;
304
			}
327
			}
305
			echo "</tr>\n";
328
			echo "</tr>\n";
306
		}
329
		}
307
	}
330
	}
308
	else
331
	else
309
		echo "<b>Database query failed: " . da_sql_error($link,$config) . "</b><br>\n";
332
		echo "<b>Database query failed: " . da_sql_error($link,$config) . "</b><br>\n";
310
		echo <<<EOM
333
		echo <<<EOM
311
		</table>
334
		</table>
312
	</td></tr>
335
	</td></tr>
313
	</table>\n
336
	</table>\n
314
EOM;
337
EOM;
315
}
338
}
316
?>
339
?>
317
	</div>
340
	</div>
318
</div>
341
</div>
319
</body>
342
</body>
320
</html>
343
</html>
321
 
344