/[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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4 - (hide annotations)
Wed Jun 22 19:22:51 2005 UTC (18 years, 11 months ago) by dpavlin
File size: 12882 byte(s)
added Search and Burn changes from Ivan Klaric

1 dpavlin 4 #!/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=$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) = @_;
123    
124     my $dbh = DBI->connect( "dbi:SQLite:dbname=$Conf{SearchDB}",
125     "", "", { RaiseError => 1, AutoCommit => 1 } );
126     my $sql =
127     q{
128     SELECT files.id AS fid,
129     hosts.name AS hname,
130     shares.name AS sname,
131     shares.share AS sharename,
132     backups.num AS backupNum,
133     files.name AS filename,
134     files.path AS filepath,
135     shares.share||files.fullpath AS networkPath,
136     date(files.date, 'unixepoch', 'localtime') AS date,
137     files.type AS filetype,
138     files.size AS size,
139     dvds.name AS dvd
140     FROM
141     files
142     INNER JOIN shares ON files.shareID=shares.ID
143     INNER JOIN hosts ON hosts.ID = shares.hostID
144     INNER JOIN backups ON backups.hostID = hosts.ID
145     LEFT JOIN dvds ON dvds.ID = files.dvdid
146    
147     };
148    
149     if (defined($where) && $where ne "")
150     {
151     $sql .= " WHERE ". $where;
152     }
153    
154    
155     my $st = $dbh->prepare(
156     $sql
157     );
158    
159     $st->execute;
160    
161     my @ret = ();
162     my $tmp;
163    
164     while ($tmp = $st->fetchrow_hashref())
165     {
166     push(@ret, {
167     'hname' => $tmp->{'hname'},
168     'sname' => $tmp->{'sname'},
169     'sharename' => $tmp->{'sharename'},
170     'backupno' => $tmp->{'backupNum'},
171     'fname' => $tmp->{'filename'},
172     'fpath' => $tmp->{'filepath'},
173     'networkpath' => $tmp->{'networkPath'},
174     'date' => $tmp->{'date'},
175     'type' => $tmp->{'filetype'},
176     'size' => $tmp->{'size'},
177     'id' => $tmp->{'fid'},
178     'dvd' => $tmp->{'dvd'}
179     }
180     );
181    
182     }
183    
184     $st->finish();
185     $dbh->disconnect();
186     return @ret;
187     }
188    
189     sub getBackupsNotBurned()
190     {
191     my $dbh = DBI->connect( "dbi:SQLite:dbname=$Conf{SearchDB}",
192     "", "", { RaiseError => 1, AutoCommit => 1 } );
193     my $sql = q{
194     SELECT
195     hosts.ID AS hostID,
196     hosts.name AS host,
197     backups.num AS backupno,
198     backups.type AS type,
199     backups.date AS date
200     FROM backups, shares, files, hosts
201     WHERE
202     backups.num = files.backupNum AND
203     shares.ID = files.shareID AND
204     backups.hostID = shares.hostID AND
205     hosts.ID = backups.hostID AND
206     files.dvdid IS NULL
207     GROUP BY
208     backups.hostID, backups.num
209     };
210     my $st = $dbh -> prepare( $sql );
211     my @ret = ();
212     $st -> execute();
213    
214     while ( my $tmp = $st -> fetchrow_hashref() )
215     {
216     push(@ret, {
217     'host' => $tmp->{'host'},
218     'hostid' => $tmp->{'hostID'},
219     'backupno' => $tmp->{'backupno'},
220     'type' => $tmp->{'type'},
221     'date' => $tmp->{'date'}
222     }
223     );
224     }
225    
226     return @ret;
227     }
228    
229     sub displayBackupsGrid()
230     {
231     my $retHTML = "";
232     my $addForm = 1;
233    
234     if ($addForm)
235     {
236    
237     $retHTML .= <<EOF3;
238     <script language="javascript" type="text/javascript">
239     <!--
240    
241     function checkAll(location)
242     {
243     for (var i=0;i<document.forma.elements.length;i++)
244     {
245     var e = document.forma.elements[i];
246     if ((e.checked || !e.checked) && e.name != \'all\') {
247     if (eval("document.forma."+location+".checked")) {
248     e.checked = true;
249     } else {
250     e.checked = false;
251     }
252     }
253     }
254     }
255     //-->
256     </script>
257     EOF3
258     $retHTML .= q{<form name="forma" method="POST" action="}."$MyURL"."?action=burn\"";
259     $retHTML.= q{<input type="hidden" value="burn" name="action">};
260     $retHTML .= q{<input type="hidden" value="results" name="search_results">};
261     }
262     $retHTML .= "<table style=\"fview\">";
263     $retHTML .= "<tr> ";
264     if ($addForm)
265     {
266     $retHTML .= "<td class=\"tableheader\"><input type=\"checkbox\" name=\"allFiles\" onClick=\"checkAll('allFiles');\"></td>";
267     }
268     $retHTML .= "<td class=\"tableheader\">Host</td> <td class=\"tableheader\">Backup no</td> <td class=\"tableheader\">Type</td> <td class=\"tableheader\">date</td></tr>";
269     my @backups = getBackupsNotBurned();
270     my $backup;
271    
272     if ($addForm)
273     {
274     $retHTML .= "<tr>";
275     $retHTML .= "<td colspan=7 style=\"tableheader\">";
276     $retHTML .= "<input type=\"submit\" value=\"Burn selected backups on medium\" name=\"submitBurner\">";
277     $retHTML .= "</td>";
278     $retHTML .= "</tr>";
279    
280     }
281     foreach $backup(@backups)
282     {
283     my $ftype = "";
284    
285     $retHTML .= "<tr>";
286     if ($addForm)
287     {
288     $retHTML .= "<td class=\"fview\"> <input type=\"checkbox\" name=\"fcb"
289     .$backup->{'hostid'}."_".$backup->{'backupno'}
290     ."\" value=\"".$backup->{'hostid'}."_".$backup->{'backupno'}."\"> </td>";
291     }
292    
293     $retHTML .= "<td class=\"fviewborder\">" . $backup->{'host'} . "</td>";
294     $retHTML .= "<td class=\"fviewborder\">" . $backup->{'backupno'} . "</td>";
295     $retHTML .= "<td class=\"fviewborder\">" . $backup->{'type'} . "</td>";
296     $retHTML .= "<td class=\"fviewborder\">" . $backup->{'date'} . "<td>";
297     $retHTML .= "</tr>";
298     }
299     $retHTML .= "</table>";
300     if ($addForm)
301     {
302     $retHTML .= "</form>";
303     }
304    
305     return $retHTML;
306    
307    
308     }
309    
310     sub displayGrid($$)
311     {
312     my ($where, $addForm) = @_;
313     my $retHTML = "";
314    
315     if ($addForm)
316     {
317     $retHTML .= <<EOF3;
318     <script language="javascript" type="text/javascript">
319     <!--
320    
321     function checkAll(location)
322     {
323     for (var i=0;i<document.forma.elements.length;i++)
324     {
325     var e = document.forma.elements[i];
326     if ((e.checked || !e.checked) && e.name != \'all\') {
327     if (eval("document.forma."+location+".checked")) {
328     e.checked = true;
329     } else {
330     e.checked = false;
331     }
332     }
333     }
334     }
335    
336    
337     //-->
338     </script>
339     EOF3
340     $retHTML .= q{<form name="forma" method="POST" action="}."$MyURL"."?action=burn\"";
341     $retHTML.= q{<input type="hidden" value="burn" name="action">};
342     $retHTML .= q{<input type="hidden" value="results" name="search_results">};
343     }
344     $retHTML .= "<table style=\"fview\">";
345     $retHTML .= "<tr> ";
346     if ($addForm)
347     {
348     $retHTML .= "<td class=\"tableheader\"><input type=\"checkbox\" name=\"allFiles\" onClick=\"checkAll('allFiles');\"></td>";
349     }
350     $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>";
351     my @files = getFiles($where);
352     my $file;
353    
354     if ($addForm)
355     {
356     $retHTML .= "<tr>";
357     $retHTML .= "<td colspan=7 style=\"tableheader\">";
358     $retHTML .= "<input type=\"submit\" value=\"Burn selected files on medium\" name=\"submitBurner\">";
359     $retHTML .= "</td>";
360     $retHTML .= "</tr>";
361    
362     }
363     foreach $file(@files)
364     {
365     my $ftype = "";
366    
367     if ($file->{'type'} == BPC_FTYPE_DIR)
368     {
369     $ftype = "dir";
370     }
371     else
372     {
373     $ftype = "file";
374     }
375     $retHTML .= "<tr>";
376     if ($addForm)
377     {
378     $retHTML .= "<td class=\"fview\"> <input type=\"checkbox\" name=\"fcb"
379     .$file->{'id'}
380     ."\" value=\"".$file->{'id'}."\"> </td>";
381     }
382    
383     $retHTML .= "<td class=\"fviewborder\">" . $file->{'hname'} ."</td>";
384     $retHTML .= "<td class=\"fviewborder\">" . $file->{'fname'} . "</td>";
385     $retHTML .= "<td class=\"fviewborder\">" . $ftype . "</td>";
386     $retHTML .= "<td class=\"fviewborder\">" . $file->{'backupno'} . "</td>";
387     $retHTML .= "<td class=\"fviewborder\">" . $file->{'size'} . "</td>";
388     $retHTML .= "<td class=\"fviewborder\">" . $file->{'date'} . "</td>";
389     $retHTML .= "<td class=\"fviewborder\">" . $file->{'dvd'} . "</td>";
390     $retHTML .= "</tr>";
391     }
392     $retHTML .= "</table>";
393     if ($addForm)
394     {
395     $retHTML .= "</form>";
396     }
397    
398     return $retHTML;
399     }
400    
401     1;

  ViewVC Help
Powered by ViewVC 1.1.26