/[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 9 - (hide annotations)
Thu Jun 23 12:36:22 2005 UTC (18 years, 10 months ago) by dpavlin
File size: 12376 byte(s)
experimental pager support in search

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

  ViewVC Help
Powered by ViewVC 1.1.26