From: Dobrica Pavlinusic Date: Mon, 3 Jan 2011 21:21:04 +0000 (+0000) Subject: show search archive and burn media CGI interface X-Git-Url: http://git.rot13.org/?p=BackupPC.git;a=commitdiff_plain;h=ee499dda4d49dfa4d0b51e158c35a565178efde8;ds=sidebyside show search archive and burn media CGI interface --- diff --git a/cgi-bin/BackupPC_Admin b/cgi-bin/BackupPC_Admin index ce057d0..90dfdba 100755 --- a/cgi-bin/BackupPC_Admin +++ b/cgi-bin/BackupPC_Admin @@ -58,6 +58,8 @@ BackupPC::CGI::Lib::NewRequest; my %ActionDispatch = ( "summary" => "Summary", + "search" => "SearchArchives", + "burn" => "BurnMedia", "Start_Incr_Backup" => "StartStopBackup", "Start_Full_Backup" => "StartStopBackup", "Stop_Dequeue_Backup" => "StartStopBackup", diff --git a/lib/BackupPC/CGI/BurnMedia.pm b/lib/BackupPC/CGI/BurnMedia.pm new file mode 100644 index 0000000..8f29a07 --- /dev/null +++ b/lib/BackupPC/CGI/BurnMedia.pm @@ -0,0 +1,150 @@ +package BackupPC::CGI::BurnMedia; + +use strict; +use BackupPC::CGI::Lib qw(:all); +use BackupPC::SearchLib; +use Data::Dumper; +use vars qw($Cgi %In $MyURL $User %Conf $TopDir $BinDir $bpc); + +my $dsn = $Conf{SearchDSN}; +my $db_user = $Conf{SearchUser} || ''; + +sub action() { + my $cont = ""; + my $title; + my $subtitle; + my @files; + + my $dbh = DBI->connect($dsn, $db_user, "", { RaiseError => 1, AutoCommit => 0 } ); + + BackupPC::CGI::Lib::NewRequest(); +# $cont = Dumper(%In); + if (!defined($In{submitBurner})) { + $title = eval(q{ ${h1($Lang->{Burn_media})}}); + $cont = Dumper(%In); + $subtitle = eval(q{ ${h2($Lang->{Burn_media_select})}}); + $cont = <prepare(q{select inc_size from backups where id = ?}); + $sth_size -> execute( $backup_id ); + my $db_size = $sth_size->fetchrow_hashref()->{inc_size}; + + if ($db_size != $currSize) { + $cont .= "NOT EQUAL!: [fs_size:$currSize, db_size:$db_size, backup_id:$backup_id]
"; + } + + if ($currSize > 0) { + $total_size += $currSize; + } + $selected++; + + my ($this_part) = $dbh->selectrow_array("select parts from backups where id = ?", undef, $backup_id); + $this_part--; + $parts += $this_part; + } + } + + if ($total_size > ($Conf{MaxArchiveSize} * $parts)) { + $cont .= eval( q{ ${h2(Error)}}); + $cont .= "Selected backups size " . sprintf("%1.2f", $total_size / 1024) ." Kb exceed max archive size " . sprintf("%1.2f", $Conf{MaxArchiveSize} / 1024) ." Kb."; + } elsif ($total_size == 0) { + $cont .= eval( q{ ${h2(Error)}}); + $cont .= "No backups selected."; + } else { + + # create new archive + my $sth = $dbh->prepare(q{ + INSERT INTO archive ( + id, + dvd_nr, + note, + username, + date, + total_size + ) VALUES ( + nextVal('archive_id_seq'), + nextVal('dvd_nr'), + ?, + ?, + NOW(), + ? + ) + }); + + $sth->execute($In{'note'}, $User, $total_size); + + foreach my $backup_id (@selected_backup_ids) { + + # link backups with archive + my $sth = $dbh->prepare(q{ + INSERT INTO archive_backup ( + archive_id, backup_id + ) VALUES ( + (SELECT last_value FROM archive_id_seq), ? + ) + }); + + $sth->execute($backup_id); + + $dbh->commit(); + + } + + my ($dvd_nr) = $dbh->selectrow_array(qq{ + select last_value from dvd_nr + }); + + $dvd_nr ||= 'error'; + + $dbh->commit(); + + my $db_size = 0; + $sth = $dbh->prepare('SELECT SUM(gzip_size) AS suma FROM backups_on_dvds WHERE dvd_nr=?'); + $sth->execute($dvd_nr); + $db_size = $sth->fetchrow_hashref()->{suma}; + $sth->finish(); + + $cont .= q{ + Archived following backups: + } . join(", ", @selected_backup_ids) . q{ +
with total size of + } . sprintf("%1.2f Mb", $total_size / 1024 / 1024) + . q{ + to media } . $dvd_nr . q{ + with following message: +
+ } . $In{'note'} . q{ +
+ }; + } + } + + Header($Lang->{Burn_media}, "", 1, "", $cont); + + Trailer(); + $dbh->disconnect(); +} + +1; diff --git a/lib/BackupPC/CGI/Lib.pm b/lib/BackupPC/CGI/Lib.pm index d55b56c..a1d06aa 100644 --- a/lib/BackupPC/CGI/Lib.pm +++ b/lib/BackupPC/CGI/Lib.pm @@ -354,6 +354,10 @@ sub CheckPermission $Privileged ||= $User eq $Hosts->{$host}{user}; $Privileged ||= defined($Hosts->{$host}{moreUsers}{$User}); + + # XXX check against REMOTE_NTGROUP from mod_ntlm + $Privileged ||= $Conf{CgiAdminUserGroup} eq $ENV{REMOTE_NTGROUP}; + return $Privileged; } @@ -437,6 +441,11 @@ sub Header priv => 1}, { link => "?action=queue", name => $Lang->{Current_queues}, priv => 1}, + # XXX additional search extensions + { link => "?action=search", name => $Lang->{Search_archive}, + priv => 0}, + { link => "?action=burn", name => $Lang->{Burn_media}, + priv => 1}, @{$Conf{CgiNavBarLinks} || []}, ); my $host = $In{host}; diff --git a/lib/BackupPC/CGI/SearchArchives.pm b/lib/BackupPC/CGI/SearchArchives.pm new file mode 100644 index 0000000..3e1ce0a --- /dev/null +++ b/lib/BackupPC/CGI/SearchArchives.pm @@ -0,0 +1,96 @@ +#################################################################### +# SearchArchives.pm - module for searching through archived files # +# via a sqlite database # +#################################################################### +package BackupPC::CGI::SearchArchives; + + +use strict; +use BackupPC::CGI::Lib qw(:all); +use BackupPC::SearchLib; +use Data::Dumper; +use HTML::FillInForm; +use vars qw($Cgi %In $MyURL $User %Conf $TopDir $BinDir $bpc); + +sub action() { + my $hosts_html = ""; + + + BackupPC::CGI::Lib::NewRequest(); + my @hosts = BackupPC::SearchLib::getUnits(); + + foreach my $host (@hosts) { + $hosts_html .= "\n"; + } + + sub date_from_to_html { + my $name = shift || return; + return qq{ + + + + - + + + + }; + } + + my $form .= qq{ +
+

+ Filename: + +   + on share +   + +  show  + + files +     + +

+ +

+ file(s) between: + } . date_from_to_html('search') . qq{ +    + backups between: + } . date_from_to_html('search_backup') . qq{ + (yyyy-mm-dd) +

+ +

+ use faster full-text search engine +

+ + + +
+ }; + + my $html = eval(q{ ${h1("Search")}}); + + if ( !defined($In{search_results}) ) { + $html .= eval(q{ ${h2("Search criteria")}}); + + $html .= $form; + } else { + $html .= eval(q{ ${h2("Search results")}}); + + my $fif = new HTML::FillInForm; + $html .= $fif->fill(scalarref => \$form, fdat => \%In); + + $html .= BackupPC::SearchLib::displayGrid( \%In ); + } + + Header( eval("qq{$Lang->{Search_archive}}"), "", 1, "", $html ); + Trailer(); +} + +1; diff --git a/lib/BackupPC/Lang/en.pm b/lib/BackupPC/Lang/en.pm index 9f1b3bc..9d8f3ec 100644 --- a/lib/BackupPC/Lang/en.pm +++ b/lib/BackupPC/Lang/en.pm @@ -1470,5 +1470,11 @@ $Lang{CfgEdit_Log_Host_Change} = "\$User host \$host changed \$key from \$valueOld to \$valueNew\n"; $Lang{CfgEdit_Log_Host_Add} = "\$User added host \$host: \$value\n"; + +# search extension +$Lang{Search_archive} = "Search archive"; +$Lang{Burn_media} = "Archive to backup medium"; +$Lang{Burn_media_select} = "Select files to archive to medium"; +$Lang{Burn_media_assign} = "Files assigned to medium $mediumNum"; #end of lang_en.pm