/[BackupPC]/trunk/lib/BackupPC/SearchLib.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /trunk/lib/BackupPC/SearchLib.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 16 - (show annotations)
Mon Jul 11 11:51:09 2005 UTC (18 years, 10 months ago) by dpavlin
File size: 11938 byte(s)
don't join with backups, so it will show just increments

1 #!/usr/bin/perl
2 package BackupPC::SearchLib;
3
4 use strict;
5 use BackupPC::CGI::Lib qw(:all);
6 use BackupPC::Attrib qw(:all);
7 use Data::Dumper;
8 use DBI;
9
10 sub getUnits() {
11 my @ret = ();
12 my $tmp;
13 my $dbh = DBI->connect( "dbi:SQLite:dbname=${TopDir}/$Conf{SearchDB}",
14 "", "", { RaiseError => 1, AutoCommit => 1 } );
15 my $st =
16 $dbh->prepare(
17 " SELECT shares.ID AS ID, shares.share AS name FROM shares;");
18 $st->execute();
19 push (@ret, { 'ID' => '', 'name' => '-'});
20 while ( $tmp = $st->fetchrow_hashref() ) {
21 push( @ret, { 'ID' => $tmp->{'ID'}, 'name' => $tmp->{'name'} } );
22 }
23 $dbh->disconnect();
24 return @ret;
25 }
26
27 sub getWhere($) {
28 my ($param) = @_;
29 my $retSQL = "";
30 my @conditions = ();
31 my $cond;
32
33
34
35
36 if ( defined( $param->{'search_backup_day_from'} ) && $param->{'search_backup_day_from'} ne "") {
37 push( @conditions,
38 ' strftime("%d", datetime(backups.date, "unixepoch","localtime")) >= "'
39 . $param->{'search_backup_day_from'} ."\"");
40 }
41 if ( defined( $param->{'search_backup_day_to'} ) && $param->{'search_backup_day_to'} ne "") {
42 push( @conditions,
43 ' strftime("%d", datetime(backups.date, "unixepoch","localtime")) <= "'
44 . $param->{'search_backup_day_from'} ."\"");
45 }
46 if ( defined( $param->{'search_backup_month_from'} ) && $param->{'search_backup_month_from'} ne "") {
47 push( @conditions,
48 ' strftime("%m", datetime(backups.date, "unixepoch","localtime")) >= "'
49 . $param->{'search_backup_month_from'} ."\"");
50 }
51 if ( defined( $param->{'search_backup_month_to'} ) && $param->{'search_backup_month_to'} ne "") {
52 push( @conditions,
53 ' strftime("%m", datetime(backups.date, "unixepoch","localtime")) <= "'
54 . $param->{'search_backup_month_to'} ."\"");
55 }
56 if ( defined( $param->{'search_backup_year_from'} ) && $param->{'search_backup_year_from'} ne "") {
57 push( @conditions,
58 ' strftime("%Y", datetime(backups.date, "unixepoch","localtime")) >= "'
59 . $param->{'search_backup_year_from'} ."\"");
60 }
61 if ( defined( $param->{'search_backup_year_to'} ) && $param->{'search_backup_year_to'} ne "") {
62 push( @conditions,
63 ' strftime("%Y", datetime(backups.date, "unixepoch","localtime")) <= "'
64 . $param->{'search_backup_year_to'} ."\"");
65 }
66
67 if ( defined( $param->{'search_day_from'} ) && $param->{'search_day_from'} ne "" ) {
68 push( @conditions,
69 ' strftime("%d", datetime(files.date, "unixepoch","localtime")) >= "'
70 . $param->{'search_day_from'} ."\"");
71 }
72 if ( defined( $param->{'search_month_from'} ) && $param->{'search_month_from'} ne "") {
73 push( @conditions,
74 ' strftime("%m", datetime(files.date, "unixepoch","localtime")) >= "'
75 . $param->{'search_month_from'} ."\"");
76 }
77 if ( defined( $param->{'search_year_from'} ) && $param->{'search_year_from'} ne "") {
78 push( @conditions,
79 ' strftime("%Y", datetime(files.date, "unixepoch","localtime")) >= "'
80 . $param->{'search_year_from'} ."\"");
81 }
82 if ( defined( $param->{'search_day_to'} ) && $param->{'search_day_to'} ne "" ) {
83 push( @conditions,
84 ' strftime("%d", datetime(files.date, "unixepoch","localtime")) <= "'
85 . $param->{'search_day_to'} ."\"");
86 }
87 if ( defined( $param->{'search_month_to'} ) && $param->{'search_month_to'} ne "" ) {
88 push( @conditions,
89 ' strftime("%m", datetime(files.date, "unixepoch","localtime")) <= "'
90 . $param->{'search_month_to'} ."\"" );
91 }
92 if ( defined( $param->{'search_year_to'} )&& $param->{'search_year_to'} ne "" ) {
93 push( @conditions,
94 ' strftime("%Y", datetime(files.date, "unixepoch","localtime")) <= "'
95 . $param->{'search_year_to'} ."\"");
96 }
97
98 if ( defined( $param->{'search_host'} ) && $param->{'search_host'} ne "") {
99 push( @conditions, ' backups.hostID = ' . $param->{'search_host'} );
100 }
101
102 if ( defined ($param->{'search_filename'}) && $param->{'search_filename'} ne "") {
103 push (@conditions, " files.name LIKE '".$param->{'search_filename'}."%'");
104 }
105
106 $retSQL = "";
107 foreach $cond(@conditions)
108 {
109 if ($retSQL ne "")
110 {
111 $retSQL .= " AND ";
112 }
113 $retSQL .= $cond;
114 }
115
116
117 return $retSQL;
118 }
119
120 sub getFiles($$)
121 {
122 my ($where, $offset) = @_;
123
124
125 my $dbh = DBI->connect( "dbi:SQLite:dbname=${TopDir}/$Conf{SearchDB}",
126 "", "", { RaiseError => 1, AutoCommit => 1 } );
127 my $sql =
128 q{
129 SELECT files.id AS fid,
130 hosts.name AS hname,
131 shares.name AS sname,
132 shares.share AS sharename,
133 files.backupNum AS backupNum,
134 files.name AS filename,
135 files.path AS filepath,
136 shares.share||files.fullpath AS networkPath,
137 date(files.date, 'unixepoch', 'localtime') AS date,
138 files.type AS filetype,
139 files.size AS size,
140 dvds.name AS dvd
141 FROM files
142 INNER JOIN shares ON files.shareID=shares.ID
143 INNER JOIN hosts ON hosts.ID = shares.hostID
144 LEFT JOIN dvds ON dvds.ID = files.dvdid
145 };
146
147 if (defined($where) && $where ne "")
148 {
149 $sql .= " WHERE ". $where;
150 }
151
152 $sql .=
153 q{
154 ORDER BY files.id
155 LIMIT 100
156 OFFSET ? * 100 + 1
157 };
158
159
160
161 my $st = $dbh->prepare(
162 $sql
163 );
164 if (!defined($offset) && $offset ne "")
165 {
166 $st->bind_param(1, $offset);
167 }
168 else
169 {
170 $st->bind_param(1,0);
171 }
172 $st->execute;
173
174 my @ret = ();
175 my $tmp;
176
177 while ($tmp = $st->fetchrow_hashref())
178 {
179 push(@ret, {
180 'hname' => $tmp->{'hname'},
181 'sname' => $tmp->{'sname'},
182 'sharename' => $tmp->{'sharename'},
183 'backupno' => $tmp->{'backupNum'},
184 'fname' => $tmp->{'filename'},
185 'fpath' => $tmp->{'filepath'},
186 'networkpath' => $tmp->{'networkPath'},
187 'date' => $tmp->{'date'},
188 'type' => $tmp->{'filetype'},
189 'size' => $tmp->{'size'},
190 'id' => $tmp->{'fid'},
191 'dvd' => $tmp->{'dvd'}
192 }
193 );
194
195 }
196
197 $st->finish();
198 $dbh->disconnect();
199 return @ret;
200 }
201
202 sub getBackupsNotBurned()
203 {
204 my $dbh = DBI->connect( "dbi:SQLite:dbname=${TopDir}/$Conf{SearchDB}",
205 "", "", { RaiseError => 1, AutoCommit => 1 } );
206 my $sql = q{
207 SELECT
208 hosts.ID AS hostID,
209 hosts.name AS host,
210 backups.num AS backupno,
211 backups.type AS type,
212 backups.date AS date
213 FROM backups, shares, files, hosts
214 WHERE
215 backups.num = files.backupNum AND
216 shares.ID = files.shareID AND
217 backups.hostID = shares.hostID AND
218 hosts.ID = backups.hostID AND
219 files.dvdid IS NULL
220 GROUP BY
221 backups.hostID, backups.num
222 };
223 my $st = $dbh -> prepare( $sql );
224 my @ret = ();
225 $st -> execute();
226
227 while ( my $tmp = $st -> fetchrow_hashref() )
228 {
229 push(@ret, {
230 'host' => $tmp->{'host'},
231 'hostid' => $tmp->{'hostID'},
232 'backupno' => $tmp->{'backupno'},
233 'type' => $tmp->{'type'},
234 'date' => $tmp->{'date'}
235 }
236 );
237 }
238
239 return @ret;
240 }
241
242 sub displayBackupsGrid()
243 {
244 my $retHTML = "";
245 my $addForm = 1;
246
247 if ($addForm)
248 {
249
250 $retHTML .= <<EOF3;
251 <script language="javascript" type="text/javascript">
252 <!--
253
254 function checkAll(location)
255 {
256 for (var i=0;i<document.forma.elements.length;i++)
257 {
258 var e = document.forma.elements[i];
259 if ((e.checked || !e.checked) && e.name != \'all\') {
260 if (eval("document.forma."+location+".checked")) {
261 e.checked = true;
262 } else {
263 e.checked = false;
264 }
265 }
266 }
267 }
268 //-->
269 </script>
270 EOF3
271 $retHTML .= q{<form name="forma" method="POST" action="}."$MyURL"."?action=burn\"";
272 $retHTML.= q{<input type="hidden" value="burn" name="action">};
273 $retHTML .= q{<input type="hidden" value="results" name="search_results">};
274 }
275 $retHTML .= "<table style=\"fview\">";
276 $retHTML .= "<tr> ";
277 if ($addForm)
278 {
279 $retHTML .= "<td class=\"tableheader\"><input type=\"checkbox\" name=\"allFiles\" onClick=\"checkAll('allFiles');\"></td>";
280 }
281 $retHTML .= "<td class=\"tableheader\">Host</td> <td class=\"tableheader\">Backup no</td> <td class=\"tableheader\">Type</td> <td class=\"tableheader\">date</td></tr>";
282 my @backups = getBackupsNotBurned();
283 my $backup;
284
285 if ($addForm)
286 {
287 $retHTML .= "<tr>";
288 $retHTML .= "<td colspan=7 style=\"tableheader\">";
289 $retHTML .= "<input type=\"submit\" value=\"Burn selected backups on medium\" name=\"submitBurner\">";
290 $retHTML .= "</td>";
291 $retHTML .= "</tr>";
292
293 }
294 foreach $backup(@backups)
295 {
296 my $ftype = "";
297
298 $retHTML .= "<tr>";
299 if ($addForm)
300 {
301 $retHTML .= "<td class=\"fview\"> <input type=\"checkbox\" name=\"fcb"
302 .$backup->{'hostid'}."_".$backup->{'backupno'}
303 ."\" value=\"".$backup->{'hostid'}."_".$backup->{'backupno'}."\"> </td>";
304 }
305
306 $retHTML .= "<td class=\"fviewborder\">" . $backup->{'host'} . "</td>";
307 $retHTML .= "<td class=\"fviewborder\">" . $backup->{'backupno'} . "</td>";
308 $retHTML .= "<td class=\"fviewborder\">" . $backup->{'type'} . "</td>";
309 $retHTML .= "<td class=\"fviewborder\">" . $backup->{'date'} . "<td>";
310 $retHTML .= "</tr>";
311 }
312 $retHTML .= "</table>";
313 if ($addForm)
314 {
315 $retHTML .= "</form>";
316 }
317
318 return $retHTML;
319
320
321 }
322
323 sub displayGrid($$$)
324 {
325 my ($where, $addForm, $offset) = @_;
326 my $retHTML = "";
327
328 if ($addForm)
329 {
330 $retHTML .= q{<form name="forma" method="POST" action="}."$MyURL"."?action=search\"";
331 $retHTML.= q{<input type="hidden" value="search" name="action">};
332 $retHTML .= q{<input type="hidden" value="results" name="search_results">};
333 }
334 $retHTML .= "<table style=\"fview\">";
335 $retHTML .= "<tr> ";
336 $retHTML .= "<td class=\"tableheader\">Host</td> <td class=\"tableheader\">Name</td> <td class=\"tableheader\">Type</td> <td class=\"tableheader\">backup no.</td> <td class=\"tableheader\">size</td> <td class=\"tableheader\">date</td> <td class=\"tableheader\">Media</td></tr>";
337 my @files = getFiles($where, $offset);
338 my $file;
339
340 foreach $file(@files)
341 {
342 my $ftype = "";
343
344 if ($file->{'type'} == BPC_FTYPE_DIR)
345 {
346 $ftype = "dir";
347 }
348 else
349 {
350 $ftype = "file";
351 }
352 $retHTML .= "<tr>";
353 $retHTML .= "<td class=\"fviewborder\">" . $file->{'hname'} ."</td>";
354 $retHTML .= "<td class=\"fviewborder\">" . $file->{'fname'} . "</td>";
355 $retHTML .= "<td class=\"fviewborder\">" . $ftype . "</td>";
356 $retHTML .= "<td class=\"fviewborder\">" . $file->{'backupno'} . "</td>";
357 $retHTML .= "<td class=\"fviewborder\">" . $file->{'size'} . "</td>";
358 $retHTML .= "<td class=\"fviewborder\">" . $file->{'date'} . "</td>";
359 $retHTML .= "<td class=\"fviewborder\">" . $file->{'dvd'} . "</td>";
360 $retHTML .= "</tr>";
361 }
362 $retHTML .= "</table>";
363
364
365
366 $retHTML .= "<INPUT TYPE=\"hidden\" VALUE=\"\" NAME=\"offset\">";
367 for (my $ii = 1; $ii <= $#files; $ii++)
368 {
369 $retHTML .= "<a href = \"#\" onclick=\"document.forma.offset.value=$ii;document.forma.submit();\">$ii</a>";
370 if ($ii < $#files)
371 {
372 $retHTML .= " | ";
373 }
374 }
375
376
377 if ($addForm)
378 {
379 $retHTML .= "</form>";
380 }
381
382 return $retHTML;
383 }
384
385 1;

  ViewVC Help
Powered by ViewVC 1.1.26