import from HEAD:
[freeradius.git] / dialup_admin / htdocs / accounting.php3
1 <?php
2
3 require('../conf/config.php3');
4 require('../lib/functions.php3');
5 require('../lib/sql/functions.php3');
6 require('../lib/acctshow.php3');
7
8 if (is_file("../lib/sql/drivers/$config[sql_type]/functions.php3"))
9         include_once("../lib/sql/drivers/$config[sql_type]/functions.php3");
10 else{
11         echo <<<EOM
12 <html>
13 <head>
14 <title>Accounting Report Generator</title>
15 <meta http-equiv="Content-Type" content="text/html; charset=$config[general_charset]">
16 <link rel="stylesheet" href="style.css">
17 </head>
18 <body bgcolor="#80a040" background="images/greenlines1.gif" link="black" alink="black">
19 <center>
20 <b>Could not include SQL library functions. Aborting</b>
21 </body>
22 </html>
23 EOM;
24         exit();
25 }
26
27 $operators=array( '=','<', '>', '<=', '>=', 'regexp', 'like' );
28 if ($config[sql_type] == 'pg'){
29         $operators=array( '=','<', '>', '<=', '>=', '~', 'like', '~*', '~~*', '<<=' );
30 }
31
32 $link = @da_sql_pconnect ($config) or die('cannot connect to sql databse');
33 $fields = @da_sql_list_fields($config[sql_accounting_table],$link,$config);
34 $no_fields = @da_sql_num_fields($fields,$config);
35
36 for($i=0;$i<$no_fields;$i++){
37         $key = strtolower(@da_sql_field_name($fields,$i,$config));
38         $val = $sql_attrs[$key][desc];
39         if ($val == '')
40                 continue;
41         $show = $sql_attrs[$key][show];
42         $selected[$key] = ($show == 'yes') ? 'selected' : '';
43         $items[$key] = "$val";
44 }
45 asort($items);
46
47 class Qi {
48         var $name;
49         var $item;
50         var $_item;
51         var $operator;
52         var $type;
53         var $typestr;
54         var $value;
55         function Qi($name,$item,$operator) {
56                                 $this->name=$name;
57                                 $this->item=$item;
58                                 $this->operator=$operator;
59         }
60                                                 
61         function show() {       global $operators;
62                                 global $items;
63                 $nam = $this->item;
64                         echo <<<EOM
65         <tr><td align=left>
66         <i>$items[$nam]</i>
67         <input type=hidden name="item_of_$this->name" value="$this->item">
68         </td><td align=left>
69         <select name=operator_of_$this->name>
70 EOM;
71                 foreach($operators as $operator){
72                         if($this->operator == $operator)
73                                 $selected=" selected ";
74                         else
75                                 $selected='';
76                         print("<option value=\"$operator\" $selected>$operator</option>\n");
77                  }
78         echo <<<EOM
79         </select>
80         </td><td align=left>
81         <input name="value_of_$this->name" type=text value="$this->value">
82         </td><td align=left>
83         <input type=hidden name="delete_$this->name" value=0>
84         <input type=submit class=button size=5 value=del onclick="this.form.delete_$this->name.value=1">
85         </td></tr>
86 EOM;
87         }
88         
89         function get($designator) {     global ${"item_of_$designator"};
90                         global ${"value_of_$designator"};
91                         global ${"operator_of_$designator"};
92                         if(${"item_of_$designator"}){
93                                 $this->value= ${"value_of_$designator"};
94                                 $this->operator=${"operator_of_$designator"};
95                                 $this->item=${"item_of_$designator"};
96                         }
97                 }                       
98         function query(){
99                 global $operators;
100                 global $items;
101                 return $items[$this->item]."  $this->operator  '$this->value'";
102         }
103 }
104
105 ?>
106 <html>
107 <head>
108 <title>Accounting Report Generator</title>
109 <meta http-equiv="Content-Type" content="text/html; charset=<?php echo $config[general_charset]?>">
110 <link rel="stylesheet" href="style.css">
111 </head>
112 <body bgcolor="#80a040" background="images/greenlines1.gif" link="black" alink="black">
113
114 <?php
115 if(!$queryflag) {
116         echo <<<EOM
117 <form method=post>
118 <table border=0 width=740 cellpadding=1 cellspacing=1>
119 <tr>
120 <td>
121 <b>Show the following attributes:</b><br>
122 <select name="accounting_show_attrs[]" size=5 multiple>
123 EOM;
124 foreach($items as $key => $val)
125         echo <<<EOM
126 <option $selected[$key] value="$key">$val</option>
127 EOM;
128
129 echo <<<EOM
130 </select>
131 <br><br>
132 <b>Order by:</b><br>
133 <select name="order_by">
134 EOM;
135
136 foreach($items as $key => $val)
137         if ($val == 'username')
138                 echo <<<EOM
139         <option selected value="$key">$val</option>
140 EOM;
141         else
142         echo <<<EOM
143 <option value="$key">$val</option>
144 EOM;
145
146 echo <<<EOM
147 </select>
148 <br><br>
149 <b>Max results returned:</b><br>
150 <input name=maxresults value=$config[sql_row_limit] size=5>
151 </td>
152 <td valign=top>
153 <input type=hidden name=add value=0>
154 <table border=0 width=340 cellpadding=1 cellspacing=1>
155 <tr><td>
156 <b>Selection criteria:</b>
157 </td></tr>
158 <tr><td>
159 <select name=item_name onchange="this.form.add.value=1;this.form.submit()">
160 <option>--Attribute--</option>
161 EOM;
162
163 foreach($items as $key => $val)
164         print("<option value=\"$key\">$val</option>");
165
166 echo <<<EOM
167 </select>
168 </td></tr>
169 EOM;
170
171 $number=1;
172 $offset=0;
173 while (${"item_of_w$number"}) {
174         if(${"delete_w$number"}==1) {$offset=1;$number++;}
175                 else {
176                 $designator=$number-$offset;                    
177                 ${"w$designator"} = new Qi("w$designator","","");
178                 ${"w$designator"}->get("w$number");
179                 ${"w$designator"}->show();
180                 $number++;
181                 }
182         }
183 if($add==1) {   
184         ${"w$number"} = new Qi("w$number","$item_name","$operators[0]");
185         ${"w$number"}->show();
186         }
187 echo <<<EOM
188 </table>
189 </td>
190 <tr>
191 <td>
192 <input type=hidden name=queryflag value=0>
193 <br><input type=submit class=button onclick="this.form.queryflag.value=1">
194 </td>
195 </tr>
196 </table>
197 </form>
198 </body>
199 </html>
200 EOM;
201
202 }
203
204 if ($queryflag == 1){
205 $i = 1;
206 while (${"item_of_w$i"}){
207         $op_found = 0;
208         foreach ($operators as $operator){
209                 if (${"operator_of_w$i"} == $operator){
210                         $op_found = 1;
211                         break;
212                 }
213         }
214         if (!$op_found)
215                 die("Operator passed is not valid. Exiting abnormaly.");
216         ${"item_of_w$i"} = preg_replace('/\s/','',${"item_of_w$i"});
217         ${"value_of_w$i"} = da_sql_escape_string(${"value_of_w$i"});
218         $where .= ($i == 1) ? ' WHERE ' . ${"item_of_w$i"} . ' ' . ${"operator_of_w$i"} . " '" . ${"value_of_w$i"} . "'" :
219                                 ' AND ' . ${"item_of_w$i"} . ' ' . ${"operator_of_w$i"} . " '" . ${"value_of_w$i"} . "'" ;
220         $i++;
221 }
222
223 $order = ($order_by != '') ? "$order_by" : 'username';
224
225 foreach ($accounting_show_attrs as $val)
226         $query_view .= $val . ',';
227 $query_view = ereg_replace(',$','',$query_view);
228 $sql_extra_query = '';
229 if ($config[sql_accounting_extra_query] != '')
230         $sql_extra_query = sql_xlat($config[sql_accounting_extra_query],$login,$config);
231 $query="SELECT $query_view FROM $config[sql_accounting_table] $where $sql_extra_query ORDER BY $order LIMIT $maxresults;";
232
233 echo <<<EOM
234 <html>
235 <head>
236 <link rel="stylesheet" href="style.css">
237 </head>
238 <body bgcolor="#80a040" background="images/greenlines1.gif" link="black" alink="black">
239 <br>
240 <table border=0 width=940 cellpadding=1 cellspacing=1>
241 <tr valign=top>
242 <td width=740></td>
243 <td bgcolor="black" width=200>
244         <table border=0 width=100% cellpadding=2 cellspacing=0>
245         <tr bgcolor="#907030" align=right valign=top><th>
246         <font color="white">Accounting Report Generator</font>&nbsp;
247         </th></tr>
248         </table>
249 </td></tr>
250 <tr bgcolor="black" valign=top><td colspan=2>
251         <table border=0 width=100% cellpadding=12 cellspacing=0 bgcolor="#ffffd0" valign=top>
252         <tr><td>
253 <p>
254         <table border=1 bordercolordark=#ffffe0 bordercolorlight=#000000 width=100% cellpadding=2 cellspacing=0 bgcolor="#ffffe0" valign=top>
255         <tr bgcolor="#d0ddb0">
256         </tr>
257 EOM;
258 foreach($accounting_show_attrs as $val){
259         $desc = $sql_attrs[$val][desc];
260         echo "<th>$desc</th>\n";
261 }
262 echo "</tr>\n";
263
264         $search = @da_sql_query($link,$config,$query);
265         if ($search){
266                 while( $row = @da_sql_fetch_array($search,$config) ){
267                         $num++;
268                         echo "<tr align=center>\n";
269                         foreach($accounting_show_attrs as $val){
270                                 $info = $row[$val];
271                                 if ($info == '')
272                                         $info = '-';
273                                 $info = $sql_attrs[$val][func]($info);
274                                 if ($val == 'username')
275                                         $info = "<a href=\"user_admin.php3?login=$info\" title=\"Edit user $info\">$info<a/>";
276                                 echo <<<EOM
277                         <td>$info</td>
278 EOM;
279                         }
280                         echo "</tr>\n";
281                 }
282         }
283         else
284                 echo "<b>Database query failed: " . da_sql_error($link,$config) . "</b><br>\n";
285 echo <<<EOM
286         </table>
287         </td></tr>
288         </table>
289 </td></tr>
290 </table>
291 </body>
292 </html>
293 EOM;
294 }
295 ?>