From mboxrd@z Thu Jan 1 00:00:00 1970 From: Adolf Belka <adolf.belka@ipfire.org> To: development@lists.ipfire.org Subject: Re: [PATCH] backup.cgi: Table layout - onclick confirm Date: Wed, 16 Jun 2021 15:20:37 +0200 Message-ID: <44812ff9-555e-0ef4-4488-d7bb2d711712@ipfire.org> In-Reply-To: <ddf745b5-0373-2809-0201-cf4a45dcec6b@ipfire.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0932733908070565237==" List-Id: <development.lists.ipfire.org> --===============0932733908070565237== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Hi everyone, On 16/06/2021 15:16, Adolf Belka wrote: > Hi Matthias, > > Sorry for slowness in coming back on the testing but I had to deal with som= e other things. > > > I had a go at testing out the patch. > > First I separated the patch into individual diffs and then applied them ind= ividually on a Core Update 156 VM in my testbed. When I selected the backup m= enu page then I got the Internal Server Error message and in /var/log/httpd/e= rror_log I got the following message:- > > Can't use an undefined value as a symbol reference at /srv/web/ipfire/cgi-b= in/backup.cgi line 85. > > I then tried the same thing with a Core Update 157 VM and got the same mess= age. > > Line 85 in backup.cgi is not one of the lines modified by the diff and is t= he line highlighted by ** at the start of the line in the following excerpt. > > -------------------------- > > elsif ( $cgiparams{'ACTION'} eq "$Lang::tr{'restoreaddon'}" ) > { > =C2=A0=C2=A0=C2=A0 chomp($cgiparams{'UPLOAD'}); > =C2=A0=C2=A0=C2=A0 # we need to fix cause IE7 gives the full path and FF on= ly the filename > =C2=A0=C2=A0=C2=A0 my @temp =3D split(/\\/,$cgiparams{'UPLOAD'}); > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 my $upload =3D $a->param("UPLOAD"); > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 open UPLOADFILE, ">/tmp/".$temp[$#temp]; > ** =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 binmode $upload; > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 while ( <$upload> ) { > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 print UPLOADFILE; > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 } > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 close UPLOADFILE; > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 system("/usr/local/bin/backupctrl restoreaddon ".$temp[$#temp= ]." >/dev/null 2>> > } > > -------------------------- > > I then used the combined patch diff on a Core Update 157 build branch, did = a clean build and then installed the generated iso into a VM. This time I was= able to get the backup page to show. Not sure what was wrong with trying it = on a existing VM. > > > I then created a backup and I got the following truncated page:- > I placed an image here but I have realised I can not include an image in mail= s to the development list as it is text only. Where can I place an image so e= veryone can see it? > > If I selected the backup page again I could see the whole page with tables = and showing the created backup. I tried this several times, also with logs an= d with iso and I got the same effect. There is no message in the error_log fi= le with the above truncated page display. > > Looking at the titles for each table the use of capitals for the IPF and IS= O seems a bit to "loud". How about changing it to lower case and making it .i= pf and .iso - then referring to the file types being saved. > > I still have to have a go at the coding to change the tables into alternate= row colours. Will come back separately with how I get on with that. > > Regards, > > Adolf. > > On 28/05/2021 17:41, Matthias Fischer wrote: >> Hi, >> >> On 26.05.2021 17:39, Matthias Fischer wrote: >>> This is just a diff for testing people... ;-) >> For clarification: >> It looks as if I will not have very much time during the next days to >> get a grip on rewriting this with alternate rows. And I agree to Michael >> - rows would fit in with the rest of the layout. ;-) >> >> @Adolf and ALL: >> If you have any hints, please feel free to participate. :-) >> >> Best, >> Matthias >> >>> Changelog in short: >>> >>> - Added tables >>> >>> - Cleaned up the code a bit, some if-queries were unnessecary (if >>> ($cgiparams{'ACTION'} eq...) >>> >>> - Deleted unused lang strings (downloadiso, downloadaddon, logs) >>> >>> - Separated the ISO files from the IPF files for better overview. >>> >>> - Added query for deleting a backup file (onclick=3D\"return confirm...) >>> >>> ToDo: >>> Change table layout to alternating rows. If "someone" has some hints >>> how to do this, I'll be grateful. >>> >>> Signed-off-by: Matthias Fischer <matthias.fischer(a)ipfire.org> >>> --- >>> =C2=A0 html/cgi-bin/backup.cgi | 218 +++++++++++++++++++++++++++++-------= ---- >>> =C2=A0 langs/de/cgi-bin/de.pl=C2=A0 |=C2=A0=C2=A0 8 +- >>> =C2=A0 langs/en/cgi-bin/en.pl=C2=A0 |=C2=A0=C2=A0 8 +- >>> =C2=A0 langs/es/cgi-bin/es.pl=C2=A0 |=C2=A0=C2=A0 1 - >>> =C2=A0 langs/fr/cgi-bin/fr.pl=C2=A0 |=C2=A0=C2=A0 1 - >>> =C2=A0 langs/it/cgi-bin/it.pl=C2=A0 |=C2=A0=C2=A0 1 - >>> =C2=A0 langs/nl/cgi-bin/nl.pl=C2=A0 |=C2=A0=C2=A0 1 - >>> =C2=A0 langs/pl/cgi-bin/pl.pl=C2=A0 |=C2=A0=C2=A0 1 - >>> =C2=A0 langs/ru/cgi-bin/ru.pl=C2=A0 |=C2=A0=C2=A0 1 - >>> =C2=A0 langs/tr/cgi-bin/tr.pl=C2=A0 |=C2=A0=C2=A0 1 - >>> =C2=A0 10 files changed, 174 insertions(+), 67 deletions(-) >>> >>> diff --git a/html/cgi-bin/backup.cgi b/html/cgi-bin/backup.cgi >>> index 683f8add4..04473428c 100644 >>> --- a/html/cgi-bin/backup.cgi >>> +++ b/html/cgi-bin/backup.cgi >>> @@ -32,7 +32,7 @@ require "${General::swroot}/header.pl"; >>> =C2=A0 =C2=A0 my %color =3D (); >>> =C2=A0 my %mainsettings =3D (); >>> -my %cgiparams=3D(); >>> +my %cgiparams =3D (); >>> =C2=A0 my %checked =3D (); >>> =C2=A0 my $message =3D ""; >>> =C2=A0 my $errormessage =3D ""; >>> @@ -59,25 +59,13 @@ system("/usr/local/bin/backupctrl makedirs >/dev/null= 2>&1 ") unless ( -e '/var/ >>> #########################################################################= ################################################### >>> =C2=A0 ############################################## System calls ohne H= ttp Header ############################################### >>> =C2=A0 -if ($cgiparams{'ACTION'} eq "download") { >>> +if ($cgiparams{'ACTION'} eq "$Lang::tr{'download'}") { >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 my $file =3D &sani= tise_file($cgiparams{'FILE'}); >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 exit(1) unless def= ined($file); >>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 &deliver_fi= le($file); >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 exit(0); >>> -} elsif ($cgiparams{'ACTION'} eq "downloadiso") { >>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 my $file =3D &sanitise_file($= cgiparams{'FILE'}); >>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 exit(1) unless defined($file); >>> - >>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 &deliver_file($file); >>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 exit(0); >>> -} elsif ($cgiparams{'ACTION'} eq "downloadaddon") { >>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 my $file =3D &sanitise_file($= cgiparams{'FILE'}); >>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 exit(1) unless defined($file); >>> - >>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 &deliver_file($file); >>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 exit(0); >>> -} elsif ( $cgiparams{'ACTION'} eq "restore") { >>> +} elsif ( $cgiparams{'ACTION'} eq "$Lang::tr{'restore'}") { >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 my $upload =3D $a-= >param("UPLOAD"); >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 open UPLOADFILE, "= >/tmp/restore.ipf"; >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 binmode $upload; >>> @@ -87,7 +75,7 @@ if ($cgiparams{'ACTION'} eq "download") { >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 close UPLOADFILE; >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 system("/usr/local= /bin/backupctrl restore >/dev/null 2>&1"); >>> =C2=A0 } >>> -elsif ( $cgiparams{'ACTION'} eq "restoreaddon" ) >>> +elsif ( $cgiparams{'ACTION'} eq "$Lang::tr{'restoreaddon'}" ) >>> =C2=A0 { >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 chomp($cgiparams{'UPLOAD'}); >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 # we need to fix cause IE7 gives the full = path and FF only the filename >>> @@ -112,7 +100,7 @@ sub refreshpage{&Header::openbox( 'Waiting', 1, "<met= a http-equiv=3D'refresh' cont >>> #########################################################################= ################################################### >>> =C2=A0 ################################################### Default System= calls ################################################### >>> =C2=A0 -if ( $cgiparams{'ACTION'} eq "backup" ) >>> +if ( $cgiparams{'ACTION'} eq "$Lang::tr{'backup'}" ) >>> =C2=A0 { >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if ( $cgiparams{'BACKUPLOGS'} eq "include"= ) { >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 system("/usr/local= /bin/backupctrl include >/dev/null 2>&1"); >>> @@ -122,7 +110,7 @@ if ( $cgiparams{'ACTION'} eq "backup" ) >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 system("/usr/local= /bin/backupctrl iso >/dev/null 2>&1"); >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >>> =C2=A0 } >>> -if ( $cgiparams{'ACTION'} eq "addonbackup" ) >>> +if ( $cgiparams{'ACTION'} eq "$Lang::tr{'addonbackup'}" ) >>> =C2=A0 { >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 # Exit if there is any dots or slashes in = the addon name >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 exit(1) if ($cgiparams{'ADDON'} =3D~ /(\.|= \/)/); >>> @@ -132,7 +120,7 @@ if ( $cgiparams{'ACTION'} eq "addonbackup" ) >>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 system("/usr/local/bin/backupctrl a= ddonbackup $cgiparams{'ADDON'} >/dev/null 2>&1"); >>> =C2=A0 } >>> -elsif ( $cgiparams{'ACTION'} eq "delete" ) >>> +elsif ( $cgiparams{'ACTION'} eq "$Lang::tr{'delete'}" ) >>> =C2=A0 { >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 my $file =3D &sanitise_file($cgiparams{'FI= LE'}); >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 exit(1) unless defined($file); >>> @@ -157,13 +145,13 @@ if ( -e "/var/tmp/backupiso/" ){ >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 @backupisos =3D `cd /var/tmp/backupiso/ &&= ls *.iso 2>/dev/null`; >>> =C2=A0 } >>> =C2=A0 -&Header::openbox('100%', 'center', ); >>> +&Header::openbox('100%', 'center', $Lang::tr{'backup config'}); >>> =C2=A0 =C2=A0 print <<END >>> =C2=A0 <form method=3D'post' action=3D'$ENV{'SCRIPT_NAME'}'> >>> =C2=A0 <table width=3D'95%' cellspacing=3D'0'> >>> =C2=A0 <tr> >>> -=C2=A0=C2=A0=C2=A0 <td align=3D'left' width=3D'40%'>$Lang::tr{'logs'}</t= d> >>> +=C2=A0=C2=A0=C2=A0 <td align=3D'center' width=3D'45%'></td> >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <td align=3D'left'> >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <input type=3D'rad= io' name=3D'BACKUPLOGS' value=3D'include'/> $Lang::tr{'include logfiles'}<br/> >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <input type=3D'rad= io' name=3D'BACKUPLOGS' value=3D'exclude' checked=3D'checked'/> $Lang::tr{'ex= clude logfiles'}<br/> >>> @@ -177,8 +165,8 @@ print <<END >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 </td> >>> =C2=A0 </tr> >>> =C2=A0 <tr><td align=3D'center' colspan=3D'2'> >>> -=C2=A0=C2=A0=C2=A0 <input type=3D'hidden' name=3D'ACTION' value=3D'backu= p' /> >>> -=C2=A0=C2=A0=C2=A0 <input type=3D'image' alt=3D'$Lang::tr{'backup'}' tit= le=3D'$Lang::tr{'backup'}' src=3D'/images/document-save.png' /> >>> +=C2=A0=C2=A0=C2=A0 <input type=3D'hidden' name=3D'ACTION' value=3D'$Lang= ::tr{'backup'}' /> >>> +=C2=A0=C2=A0=C2=A0 <input type=3D'image' alt=3D'$Lang::tr{'backup'}' tit= le=3D'$Lang::tr{'backup'}' src=3D'/images/floppy.gif' /> >>> =C2=A0 </td></tr> >>> =C2=A0 </table> >>> =C2=A0 </form> >>> @@ -189,10 +177,17 @@ END >>> #########################################################################= ################################################### >>> =C2=A0 ############################################ Backups des Systems d= ownloaden ################################################ >>> =C2=A0 -&Header::openbox('100%', 'center', $Lang::tr{'backups'}); >>> +&Header::openbox('100%', 'center', $Lang::tr{'backups data'}); >>> =C2=A0 =C2=A0 print <<END >>> -<table width=3D'95%' cellspacing=3D'0'> >>> +<table width=3D'95%' cellspacing=3D'0' border=3D'1'> >>> + >>> +<tr> >>> +<th width=3D'40%'>$Lang::tr{'filename'}</th> >>> +<th>$Lang::tr{'size'}</th> >>> +<th colspan=3D'2'>$Lang::tr{'action'}</th> >>> +</tr> >>> + >>> =C2=A0 END >>> =C2=A0 ; >>> =C2=A0 foreach (@backups){ >>> @@ -202,9 +197,44 @@ my $Datei =3D "/var/ipfire/backup/".$_; >>> =C2=A0 my @Info =3D stat($Datei); >>> =C2=A0 my $Size =3D $Info[7] / 1024 / 1024; >>> =C2=A0 $Size =3D sprintf("%0.2f", $Size); >>> -print "<tr><td align=3D'center'>$Lang::tr{'backup from'} $_ $Lang::tr{'s= ize'} $Size MB</td><td width=3D'5'><form method=3D'post' action=3D'$ENV{'SCRI= PT_NAME'}'><input type=3D'hidden' name=3D'ACTION' value=3D'download' /><input= type=3D'hidden' name=3D'FILE' value=3D'$_' /><input type=3D'image' alt=3D'$L= ang::tr{'download'}' title=3D'$Lang::tr{'download'}' src=3D'/images/package-x= -generic.png' /></form></td>"; >>> -print "<td width=3D'5'><form method=3D'post' action=3D'$ENV{'SCRIPT_NAME= '}'><input type=3D'hidden' name=3D'ACTION' value=3D'delete' /><input type=3D'= hidden' name=3D'FILE' value=3D'$_' /><input type=3D'image' alt=3D'$Lang::tr{'= delete'}' title=3D'$Lang::tr{'delete'}' src=3D'/images/user-trash.png' /></fo= rm></td></tr>"; >>> + >>> +print "<tr> >>> +<td align=3D'center'>$_</td> >>> +<td align=3D'center'>$Size MB</td> >>> +<td width=3D'5'><form method=3D'post' action=3D'$ENV{'SCRIPT_NAME'}'> >>> +=C2=A0=C2=A0=C2=A0 <input type=3D'hidden' name=3D'ACTION' value=3D'$Lang= ::tr{'download'}' /> >>> +=C2=A0=C2=A0=C2=A0 <input type=3D'hidden' name=3D'FILE' value=3D'$_' /> >>> +=C2=A0=C2=A0=C2=A0 <input type=3D'image' alt=3D'$Lang::tr{'download'}' t= itle=3D'$Lang::tr{'download'}' src=3D'/images/go-bottom.png' /> >>> +=C2=A0=C2=A0=C2=A0 </form></td>"; >>> + >>> +print "<td width=3D'5'> >>> +<form method=3D'post' action=3D'$ENV{'SCRIPT_NAME'}'> >>> +=C2=A0=C2=A0=C2=A0 <input type=3D'hidden' name=3D'ACTION' value=3D'$Lang= ::tr{'delete'}' /> >>> +=C2=A0=C2=A0=C2=A0 <input type=3D'hidden' name=3D'FILE' value=3D'$_' /> >>> +=C2=A0=C2=A0=C2=A0 <input type=3D'image' alt=3D'$Lang::tr{'delete'}' tit= le=3D'$Lang::tr{'delete'}' src=3D'/images/delete.gif' onclick=3D\"return conf= irm('$Lang::tr{'delete file'}');\" /> >>> +=C2=A0=C2=A0=C2=A0 </form></td></tr>"; >>> =C2=A0 } >>> + >>> +print <<END >>> +</table> >>> +END >>> +; >>> +&Header::closebox(); >>> + >>> +&Header::openbox('100%', 'center', $Lang::tr{'backups iso'}); >>> + >>> +print <<END >>> +<table width=3D'95%' cellspacing=3D'0' border=3D'1'> >>> + >>> +<tr> >>> +<th width=3D'40%'>$Lang::tr{'filename'}</th> >>> +<th>$Lang::tr{'size'}</th> >>> +<th colspan=3D'2'>$Lang::tr{'action'}</th> >>> +</tr> >>> + >>> +END >>> +; >>> + >>> =C2=A0 foreach (@backupisos){ >>> =C2=A0 if ( $_ !~ /iso$/){next;} >>> =C2=A0 chomp($_); >>> @@ -212,8 +242,22 @@ my $Datei =3D "/var/tmp/backupiso/".$_; >>> =C2=A0 my @Info =3D stat($Datei); >>> =C2=A0 my $Size =3D $Info[7] / 1024 / 1024; >>> =C2=A0 $Size =3D sprintf("%0.2f", $Size); >>> -print "<tr><td align=3D'center'>$Lang::tr{'backup from'} $_ $Lang::tr{'s= ize'} $Size MB</td><td width=3D'5'><form method=3D'post' action=3D'$ENV{'SCRI= PT_NAME'}'><input type=3D'hidden' name=3D'ACTION' value=3D'downloadiso' /><in= put type=3D'hidden' name=3D'FILE' value=3D'$_' /><input type=3D'image' alt=3D= '$Lang::tr{'download'}' title=3D'$Lang::tr{'download'}' src=3D'/images/packag= e-x-generic.png' /></form></td>"; >>> -print "<td width=3D'5'><form method=3D'post' action=3D'$ENV{'SCRIPT_NAME= '}'><input type=3D'hidden' name=3D'ACTION' value=3D'delete' /><input type=3D'= hidden' name=3D'FILE' value=3D'$_' /><input type=3D'image' alt=3D'$Lang::tr{'= delete'}' title=3D'$Lang::tr{'delete'}' src=3D'/images/user-trash.png' /></fo= rm></td></tr>"; >>> + >>> +print "<tr> >>> +<td align=3D'center' width=3D'40%'>$_</td> >>> +<td align=3D'center'>$Size MB</td> >>> +<td width=3D'5'><form method=3D'post' action=3D'$ENV{'SCRIPT_NAME'}'> >>> +=C2=A0=C2=A0=C2=A0 <input type=3D'hidden' name=3D'ACTION' value=3D'$Lang= ::tr{'download'}' /> >>> +=C2=A0=C2=A0=C2=A0 <input type=3D'hidden' name=3D'FILE' value=3D'$_' /> >>> +=C2=A0=C2=A0=C2=A0 <input type=3D'image' alt=3D'$Lang::tr{'download'}' t= itle=3D'$Lang::tr{'download'}' src=3D'/images/go-bottom.png' /> >>> +=C2=A0=C2=A0=C2=A0 </form></td>"; >>> + >>> +print "<td width=3D'5'> >>> +<form method=3D'post' action=3D'$ENV{'SCRIPT_NAME'}'> >>> +=C2=A0=C2=A0=C2=A0 <input type=3D'hidden' name=3D'ACTION' value=3D'$Lang= ::tr{'delete'}' /> >>> +=C2=A0=C2=A0=C2=A0 <input type=3D'hidden' name=3D'FILE' value=3D'$_' /> >>> +=C2=A0=C2=A0=C2=A0 <input type=3D'image' alt=3D'$Lang::tr{'delete'}' tit= le=3D'$Lang::tr{'delete'}' src=3D'/images/delete.gif' onclick=3D\"return conf= irm('$Lang::tr{'delete file'}');\" /> >>> +=C2=A0=C2=A0=C2=A0 </form></td></tr>"; >>> =C2=A0 } >>> =C2=A0 print <<END >>> =C2=A0 </table> >>> @@ -235,7 +279,19 @@ foreach (@addons){ >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 $addons{$addon}=3D''; >>> =C2=A0 } >>> =C2=A0 -print "<table width=3D'95%' cellspacing=3D'0'>"; >>> +print <<END >>> + >>> +<table width=3D'95%' cellspacing=3D'0' border=3D'1'> >>> + >>> +<tr> >>> +<th width=3D'20%'>$Lang::tr{'name'}</th> >>> +<th width=3D'20%'>$Lang::tr{'date'}</th> >>> +<th>$Lang::tr{'size'}</th> >>> +<th align=3D'center' colspan=3D'3'>$Lang::tr{'action'}</th> >>> +</tr> >>> +END >>> +; >>> + >>> =C2=A0 foreach (@addonincluds){ >>> =C2=A0 chomp($_); >>> =C2=A0 delete $addons{$_}; >>> @@ -245,69 +301,93 @@ my $Size =3D $Info[7] / 1024; >>> =C2=A0 =C2=A0 if ( -e $Datei ){ >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if ($Size < 1) { >>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 $Size= =3D sprintf("%.2f", $Size); >>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 print= "<tr><td align=3D'center'>$Lang::tr{'backup from'} $_ $Lang::tr{'size'} $Siz= e KB $Lang::tr{'date'} ".localtime($Info[9])."</td>"; >>> -=C2=A0=C2=A0=C2=A0 } else { >>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 $Size= =3D sprintf("%2d", $Size); >>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 print= "<tr><td align=3D'center'>$Lang::tr{'backup from'} $_ $Lang::tr{'size'} $Siz= e KB $Lang::tr{'date'} ".localtime($Info[9])."</td>"; >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 $Size =3D sprintf("%.2f", $Si= ze); >>> +print "<tr> >>> +=C2=A0=C2=A0=C2=A0 <td align=3D'center'>$_</td> >>> +=C2=A0=C2=A0=C2=A0 <td align=3D'center'>".localtime($Info[9])."</td> >>> +=C2=A0=C2=A0=C2=A0 <td align=3D'center'>$Size KB</td>"; >>> +=C2=A0=C2=A0=C2=A0 </tr> >>> =C2=A0 -=C2=A0=C2=A0=C2=A0 } >>> +=C2=A0=C2=A0=C2=A0 } else { >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 $Size =3D sprintf("%2d", $Siz= e); >>> +print "<tr> >>> +=C2=A0=C2=A0=C2=A0 <td align=3D'center'>$_</td> >>> +=C2=A0=C2=A0=C2=A0 <td align=3D'center'>".localtime($Info[9])."</td> >>> +=C2=A0=C2=A0=C2=A0 <td align=3D'center'>$Size KB</td>"; >>> +=C2=A0=C2=A0=C2=A0 </tr> >>> +=C2=A0=C2=A0 } >>> =C2=A0 =C2=A0 print <<END >>> -=C2=A0=C2=A0=C2=A0 <td align=3D'right' width=3D'5'> >>> + >>> +=C2=A0=C2=A0=C2=A0 <td align=3D'center' width=3D'5'> >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <form method=3D'po= st' action=3D'$ENV{'SCRIPT_NAME'}'> >>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <input type=3D'hidden' name= =3D'ACTION' value=3D'downloadaddon' /> >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <input type=3D'hidden' name= =3D'ACTION' value=3D'$Lang::tr{'download'}' /> >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <input type=3D'hid= den' name=3D'FILE' value=3D'$_.ipf' /> >>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <input type=3D'image' alt=3D'= $Lang::tr{'download'}' title=3D'$Lang::tr{'download'}' src=3D'/images/package= -x-generic.png' /> >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <input type=3D'image' alt=3D'= $Lang::tr{'download'}' title=3D'$Lang::tr{'download'}' src=3D'/images/go-bott= om.png' /> >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 </form> >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 </td> >>> -=C2=A0=C2=A0=C2=A0 <td align=3D'right' width=3D'5'> >>> +=C2=A0=C2=A0=C2=A0 <td align=3D'center' width=3D'5'> >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <form method=3D'po= st' action=3D'$ENV{'SCRIPT_NAME'}'> >>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <input type=3D'hidden' name= =3D'ACTION' value=3D'delete' /> >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <input type=3D'hidden' name= =3D'ACTION' value=3D'$Lang::tr{'delete'}' /> >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <input type=3D'hid= den' name=3D'FILE' value=3D'$_.ipf' /> >>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <input type=3D'image' alt=3D'= $Lang::tr{'delete'}' title=3D'$Lang::tr{'delete'}' src=3D'/images/user-trash.= png' /> >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <input type=3D'image' alt=3D'= $Lang::tr{'delete'}' title=3D'$Lang::tr{'delete'}' src=3D'/images/delete.gif'= onclick=3D\"return confirm('$Lang::tr{'delete file'}');\" /> >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 </form> >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 </td> >>> =C2=A0 END >>> =C2=A0 ; >>> =C2=A0 } >>> -else{ >>> -=C2=A0 print "<tr><td align=3D'center'>$Lang::tr{'backup from'} $_ </td>= <td width=3D'5' align=3D'right'></td><td width=3D'5' align=3D'right'></td>"; >>> + >>> +else { >>> + >>> +=C2=A0=C2=A0=C2=A0 print "<tr> >>> +=C2=A0=C2=A0=C2=A0 <td align=3D'center'>$_</td> >>> +=C2=A0=C2=A0=C2=A0 <td align=3D'center'> - </td> >>> +=C2=A0=C2=A0=C2=A0 <td align=3D'center' width=3D'50%'> - </td> >>> +=C2=A0=C2=A0=C2=A0 <td align=3D'center' colspan=3D'2'> - </td>"; >>> =C2=A0 } >>> + >>> =C2=A0 print <<END >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <td align=3D'right' width=3D'5'> >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <form method=3D'po= st' action=3D'$ENV{'SCRIPT_NAME'}'> >>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <input type=3D'hidden' name= =3D'ACTION' value=3D'addonbackup' /> >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <input type=3D'hidden' name= =3D'ACTION' value=3D'$Lang::tr{'addonbackup'}' /> >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <input type=3D'hid= den' name=3D'ADDON' value=3D'$_' /> >>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <input type=3D'image' alt=3D'= $Lang::tr{'backup'}' title=3D'$Lang::tr{'backup'}' src=3D'/images/document-sa= ve.png' /> >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <input type=3D'image' alt=3D'= $Lang::tr{'backup'}' title=3D'$Lang::tr{'backup'}' src=3D'/images/floppy.gif'= /> >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 </form> >>> -=C2=A0=C2=A0=C2=A0 </td></tr> >>> +=C2=A0=C2=A0=C2=A0 </td> >>> +</tr> >>> =C2=A0 END >>> =C2=A0 ; >>> + >>> =C2=A0 } >>> + >>> =C2=A0 foreach (keys(%addons)){ >>> =C2=A0 chomp($_); >>> =C2=A0 my $Datei =3D "/var/ipfire/backup/addons/backup/".$_.".ipf"; >>> =C2=A0 my @Info =3D stat($Datei); >>> =C2=A0 my $Size =3D $Info[7] / 1024; >>> =C2=A0 $Size =3D sprintf("%2d", $Size); >>> -print "<tr><td align=3D'center'>$Lang::tr{'backup from'} $_ $Lang::tr{'s= ize'} $Size KB $Lang::tr{'date'} ".localtime($Info[9])."</td>"; >>> + >>> +print "<tr> >>> +=C2=A0=C2=A0=C2=A0 <td align=3D'center'>$_</td> >>> +=C2=A0=C2=A0=C2=A0 <td align=3D'center'>".localtime($Info[9])."</td> >>> +=C2=A0=C2=A0=C2=A0 <td align=3D'center'>$Size KB</td>"; >>> + >>> =C2=A0 print <<END >>> -=C2=A0=C2=A0=C2=A0 <td align=3D'right' width=3D'5'> >>> +=C2=A0=C2=A0=C2=A0 <td align=3D'center' width=3D'5'> >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <form method=3D'po= st' action=3D'$ENV{'SCRIPT_NAME'}'> >>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <input type=3D'hidden' name= =3D'ACTION' value=3D'downloadaddon' /> >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <input type=3D'hidden' name= =3D'ACTION' value=3D'$Lang::tr{'download'}' /> >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <input type=3D'hid= den' name=3D'FILE' value=3D'$_.ipf' /> >>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <input type=3D'image' alt=3D'= $Lang::tr{'download'}' title=3D'$Lang::tr{'download'}' src=3D'/images/package= -x-generic.png' /> >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <input type=3D'image' alt=3D'= $Lang::tr{'download'}' title=3D'$Lang::tr{'download'}' src=3D'/images/go-bott= om.png' /> >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 </form> >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 </td> >>> -=C2=A0=C2=A0=C2=A0 <td align=3D'right' width=3D'5'> >>> +=C2=A0=C2=A0=C2=A0 <td align=3D'center' width=3D'5'> >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <form method=3D'po= st' action=3D'$ENV{'SCRIPT_NAME'}'> >>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <input type=3D'hidden' name= =3D'ACTION' value=3D'delete' /> >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <input type=3D'hidden' name= =3D'ACTION' value=3D'$Lang::tr{'delete'}' /> >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <input type=3D'hid= den' name=3D'FILE' value=3D'$_.ipf' /> >>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <input type=3D'image' alt=3D'= $Lang::tr{'delete'}' title=3D'$Lang::tr{'delete'}' src=3D'/images/user-trash.= png' /> >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <input type=3D'image' alt=3D'= $Lang::tr{'delete'}' title=3D'$Lang::tr{'delete'}' src=3D'/images/delete.gif'= onclick=3D\"return confirm('$Lang::tr{'delete file'}');\" /> >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 </form> >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 </td> >>> -=C2=A0=C2=A0=C2=A0 <td align=3D'right' width=3D'5'></td></tr> >>> +=C2=A0=C2=A0=C2=A0 </tr> >>> =C2=A0 END >>> =C2=A0 ; >>> =C2=A0 } >>> @@ -322,9 +402,31 @@ print "</table>"; >>> =C2=A0 =C2=A0 print <<END >>> =C2=A0 <table width=3D'95%' cellspacing=3D'0'> >>> -<tr><td align=3D'center' colspan=3D'2'><font color=3D'red'><br />$Lang::= tr{'backupwarning'}</font><br /><br /></td></tr> >>> -<tr><td align=3D'left'>$Lang::tr{'backup'}</td><td align=3D'left'><form = method=3D'post' enctype=3D'multipart/form-data' action=3D'$ENV{'SCRIPT_NAME'}= '><input type=3D"file" size=3D'50' name=3D"UPLOAD" /><input type=3D'hidden' n= ame=3D'ACTION' value=3D'restore' /><input type=3D'hidden' name=3D'FILE' /><in= put type=3D'image' alt=3D'$Lang::tr{'restore'}' title=3D'$Lang::tr{'restore'}= ' src=3D'/images/media-floppy.png' /></form></td></tr> >>> -<tr><td align=3D'left'>$Lang::tr{'backupaddon'}</td><td align=3D'left'><= form method=3D'post' enctype=3D'multipart/form-data' action=3D'$ENV{'SCRIPT_N= AME'}'><input type=3D"file" size=3D'50' name=3D"UPLOAD" /><input type=3D'hidd= en' name=3D'ACTION' value=3D'restoreaddon' /><input type=3D'hidden' name=3D'F= ILE' /><input type=3D'image' alt=3D'$Lang::tr{'restore'}' title=3D'$Lang::tr{= 'restore'}' src=3D'/images/media-floppy.png' /></form></td></tr> >>> +<tr> >>> +=C2=A0=C2=A0=C2=A0 <td align=3D'center' colspan=3D'2'><font color=3D'red= '><br />$Lang::tr{'backupwarning'}</font><br /><br /></td> >>> +</tr> >>> + >>> +<tr> >>> +=C2=A0=C2=A0=C2=A0 <td align=3D'center'>$Lang::tr{'backup'}</td> >>> +=C2=A0=C2=A0=C2=A0 <td align=3D'left'> >>> +=C2=A0=C2=A0=C2=A0 <form method=3D'post' enctype=3D'multipart/form-data'= action=3D'$ENV{'SCRIPT_NAME'}'> >>> +=C2=A0=C2=A0=C2=A0 <input type=3D"file" size=3D'50' name=3D"UPLOAD" /> >>> +=C2=A0=C2=A0=C2=A0 <input type=3D'hidden' name=3D'ACTION' value=3D'$Lang= ::tr{'restore'}' /> >>> +=C2=A0=C2=A0=C2=A0 <input type=3D'hidden' name=3D'FILE' /> >>> +=C2=A0=C2=A0=C2=A0 <input type=3D'image' alt=3D'$Lang::tr{'restore'}' ti= tle=3D'$Lang::tr{'restore'}' src=3D'/images/go-top.png' /> >>> +=C2=A0=C2=A0=C2=A0 </form></td> >>> +</tr> >>> + >>> +<tr> >>> +=C2=A0=C2=A0=C2=A0 <td align=3D'center'>$Lang::tr{'backupaddon'}</td> >>> +=C2=A0=C2=A0=C2=A0 <td align=3D'left'><form method=3D'post' enctype=3D'm= ultipart/form-data' action=3D'$ENV{'SCRIPT_NAME'}'> >>> +=C2=A0=C2=A0=C2=A0 <input type=3D"file" size=3D'50' name=3D"UPLOAD" /> >>> +=C2=A0=C2=A0=C2=A0 <input type=3D'hidden' name=3D'ACTION' value=3D'$Lang= ::tr{'restoreaddon'}' /> >>> +=C2=A0=C2=A0=C2=A0 <input type=3D'hidden' name=3D'FILE' /> >>> +=C2=A0=C2=A0=C2=A0 <input type=3D'image' alt=3D'$Lang::tr{'restoreaddon'= }' title=3D'$Lang::tr{'restoreaddon'}' src=3D'/images/go-top.png' /> >>> +=C2=A0=C2=A0=C2=A0 </form></td> >>> +</tr> >>> + >>> =C2=A0 </table> >>> =C2=A0 END >>> =C2=A0 ; >>> diff --git a/langs/de/cgi-bin/de.pl b/langs/de/cgi-bin/de.pl >>> index 95af3155b..37f0cab8a 100644 >>> --- a/langs/de/cgi-bin/de.pl >>> +++ b/langs/de/cgi-bin/de.pl >>> @@ -158,6 +158,7 @@ >>> =C2=A0 'add-route' =3D> 'Zus=C3=A4tzlich zu propagierende Route', >>> =C2=A0 'added from dhcp lease list' =3D> 'hinzugef=C3=BCgt von der DHCP-Z= uordnungsliste', >>> =C2=A0 'addon' =3D> 'Add-Ons', >>> +'addonbackup' =3D> 'Sichern', >>> =C2=A0 'addons' =3D> 'Add-Ons', >>> =C2=A0 'admin user password has been changed' =3D> 'Passwort f=C3=BCr Ben= utzer admin wurde ge=C3=A4ndert.', >>> =C2=A0 'admin users' =3D> 'Liste der Benutzer mit Super User Rechten', >>> @@ -470,8 +471,11 @@ >>> =C2=A0 'backup sets' =3D> 'Datensicherungss=C3=A4tze', >>> =C2=A0 'backup to floppy' =3D> 'Datensicherung auf Diskette', >>> =C2=A0 'backupaddon' =3D> 'Add-On-Sicherung', >>> +'backup config' =3D> 'Konfiguration', >>> =C2=A0 'backupprofile' =3D> 'Falls die Wiederverbindung scheitert, auf di= eses Profil umschalten', >>> =C2=A0 'backups' =3D> 'Sicherungen', >>> +'backups data' =3D> 'IPF-Dateien', >>> +'backups iso' =3D> 'ISO-Dateien', >>> =C2=A0 'backupwarning' =3D> 'Spielen Sie zuerst Ihre Hauptsicherung und a= nschlie=C3=9Fend die Sicherung(en) der Addon-Konfiguration(en) ein.<br />Es w= erden lediglich die gesicherten Konfigurationsdatei(en) der Addons, nicht die= installierten Addons wiederhergestellt!<br />Achten Sie au=C3=9Ferdem darauf= , dass die Sicherungen ihre originalen Dateinamen behalten.', >>> =C2=A0 'bad characters in' =3D> 'Ung=C3=BCltige Zeichen in ', >>> =C2=A0 'bad characters in script field' =3D> 'Nicht erlaubte Zeichen im S= kriptnamen', >>> @@ -735,6 +739,8 @@ >>> =C2=A0 'defaultwarning' =3D> 'ACHTUNG - Ihre Einstellungen gehen hiermit = verloren und werden durch die Standarteinstellungen ersetzt.', >>> =C2=A0 'delete' =3D> 'L=C3=B6schen', >>> =C2=A0 'delete cron' =3D> 'Cronjob l=C3=B6schen', >>> +'delete file' =3D> 'M=C3=B6chten Sie diese Datei wirklich l=C3=B6schen?', >>> +'delete item' =3D> 'M=C3=B6chten Sie diesen Eintrag wirklich l=C3=B6sche= n?', >>> =C2=A0 'delete pc' =3D> 'PC l=C3=B6schen', >>> =C2=A0 'delete share' =3D> 'Freigabe l=C3=B6schen', >>> =C2=A0 'delete user' =3D> 'Benutzer l=C3=B6schen', >>> @@ -1600,7 +1606,6 @@ >>> =C2=A0 'logging' =3D> 'Protokollierung', >>> =C2=A0 'logging server' =3D> 'Protokollierungsserver', >>> =C2=A0 'loginlogout' =3D> 'Login/Logout', >>> -'logs' =3D> 'Protokolldateien', >>> =C2=A0 'loosedirectorychecking' =3D> 'Loose directorychecking', >>> =C2=A0 'low' =3D> 'Niedrig', >>> =C2=A0 'ls_dhcpd' =3D> 'DHCP-Server:', >>> @@ -2136,6 +2141,7 @@ >>> =C2=A0 'restart' =3D> 'Neustart', >>> =C2=A0 'restart ovpn server' =3D> 'OpenVPN-Server neu starten', >>> =C2=A0 'restore' =3D> 'Wiederherstellen', >>> +'restoreaddon' =3D> 'Wiederherstellen (Addon)', >>> =C2=A0 'restore defaults' =3D> 'Voreinstellungen wiederherstellen', >>> =C2=A0 'restore hardware settings' =3D> 'Hardwareeinstellungen wiederhers= tellen', >>> =C2=A0 'restore settings' =3D> 'Einstellungen wiederherstellen', >>> diff --git a/langs/en/cgi-bin/en.pl b/langs/en/cgi-bin/en.pl >>> index d86705772..a126b11ef 100644 >>> --- a/langs/en/cgi-bin/en.pl >>> +++ b/langs/en/cgi-bin/en.pl >>> @@ -155,6 +155,7 @@ >>> =C2=A0 'add xtaccess' =3D> 'Add External Access', >>> =C2=A0 'add-route' =3D> 'Additional push route', >>> =C2=A0 'added from dhcp lease list' =3D> 'Added from DHCP lease list', >>> +'addonbackup' =3D> 'Backup', >>> =C2=A0 'addons' =3D> 'Addons', >>> =C2=A0 'admin user password has been changed' =3D> 'Admin user password h= as been changed.', >>> =C2=A0 'admin users' =3D> 'User with superuser rights', >>> @@ -459,6 +460,7 @@ >>> =C2=A0 'backup' =3D> 'Backup', >>> =C2=A0 'backup archive' =3D> 'Backup File (.dat)', >>> =C2=A0 'backup clear archive' =3D> 'Clear Backup File (.gz)', >>> +'backup config' =3D> 'Configuration', >>> =C2=A0 'backup config floppy' =3D> 'Backup Configuration - Floppy Disk', >>> =C2=A0 'backup configuration' =3D> 'Backup Configuration:', >>> =C2=A0 'backup erase key' =3D> 'Erase key', >>> @@ -486,6 +488,8 @@ >>> =C2=A0 'backupaddon' =3D> 'Addon Backup', >>> =C2=A0 'backupprofile' =3D> 'In case reconnection fails, switch to profil= e', >>> =C2=A0 'backups' =3D> 'backups', >>> +'backups data' =3D> 'IPF-Files', >>> +'backups iso' =3D> 'ISO-Files', >>> =C2=A0 'backupwarning' =3D> 'Import your main backup first and then the b= ackup(s) of the addon configuration(s).<br />Only the backed up addon configu= ration file(s) will be restored, not the installed addons!<br />Also make sur= e that the backups keep their original file names.', >>> =C2=A0 'bad characters in' =3D> 'Bad characters in ', >>> =C2=A0 'bad characters in script field' =3D> 'Bad characters in script fi= eld', >>> @@ -755,6 +759,8 @@ >>> =C2=A0 'delete pc' =3D> 'Delete workstation', >>> =C2=A0 'delete share' =3D> 'Delete share', >>> =C2=A0 'delete user' =3D> 'Delete user', >>> +'delete file' =3D> 'Do you really want to delete this file?', >>> +'delete item' =3D> 'Do you really want to delete this item?', >>> =C2=A0 'demon login script' =3D> 'Demon login script', >>> =C2=A0 'deprecated fs warn' =3D> 'Deprecated filesystem! Newer kernel dro= p the support. Backup and reformat!', >>> =C2=A0 'description' =3D> 'Description', >>> @@ -1632,7 +1638,6 @@ >>> =C2=A0 'logging' =3D> 'Logging', >>> =C2=A0 'logging server' =3D> 'Logging Server', >>> =C2=A0 'loginlogout' =3D> 'Login/Logout', >>> -'logs' =3D> 'logs', >>> =C2=A0 'loosedirectorychecking' =3D> 'Loosedirectorychecking', >>> =C2=A0 'low' =3D> 'Low', >>> =C2=A0 'ls_dhcpd' =3D> 'DHCP Server:', >>> @@ -2172,6 +2177,7 @@ >>> =C2=A0 'restart' =3D> 'Restart', >>> =C2=A0 'restart ovpn server' =3D> 'Restart OpenVPN server', >>> =C2=A0 'restore' =3D> 'Restore', >>> +'restoreaddon' =3D> 'Restore (Addon)', >>> =C2=A0 'restore defaults' =3D> 'Restore defaults', >>> =C2=A0 'restore hardware settings' =3D> 'Restore hardware settings', >>> =C2=A0 'restore settings' =3D> 'Reset Settings', >>> diff --git a/langs/es/cgi-bin/es.pl b/langs/es/cgi-bin/es.pl >>> index c9a7496bc..fa346233f 100644 >>> --- a/langs/es/cgi-bin/es.pl >>> +++ b/langs/es/cgi-bin/es.pl >>> @@ -1149,7 +1149,6 @@ >>> =C2=A0 'logging' =3D> 'Conectando', >>> =C2=A0 'logging server' =3D> 'Servidor de conexi=C3=B3n', >>> =C2=A0 'loginlogout' =3D> 'Login/Logout', >>> -'logs' =3D> 'registros', >>> =C2=A0 'loosedirectorychecking' =3D> 'Chequeo de loosedirectory', >>> =C2=A0 'low' =3D> 'Bajo', >>> =C2=A0 'ls_dhcpd' =3D> 'Servidor DHCP:', >>> diff --git a/langs/fr/cgi-bin/fr.pl b/langs/fr/cgi-bin/fr.pl >>> index 301109477..ea5985315 100644 >>> --- a/langs/fr/cgi-bin/fr.pl >>> +++ b/langs/fr/cgi-bin/fr.pl >>> @@ -1633,7 +1633,6 @@ >>> =C2=A0 'logging' =3D> 'Connexion', >>> =C2=A0 'logging server' =3D> 'Serveur de connexion', >>> =C2=A0 'loginlogout' =3D> 'Connexion/Quitter', >>> -'logs' =3D> 'Journaux', >>> =C2=A0 'loosedirectorychecking' =3D> 'Echec de la v=C3=A9rification du r= =C3=A9pertoire', >>> =C2=A0 'low' =3D> 'Bas', >>> =C2=A0 'ls_dhcpd' =3D> 'Serveur DHCP :', >>> diff --git a/langs/it/cgi-bin/it.pl b/langs/it/cgi-bin/it.pl >>> index e82ecfd35..711b4bd4a 100644 >>> --- a/langs/it/cgi-bin/it.pl >>> +++ b/langs/it/cgi-bin/it.pl >>> @@ -1408,7 +1408,6 @@ >>> =C2=A0 'logging' =3D> 'Logging', >>> =C2=A0 'logging server' =3D> 'Logging Server', >>> =C2=A0 'loginlogout' =3D> 'Login/Logout', >>> -'logs' =3D> 'Gestione Log', >>> =C2=A0 'loosedirectorychecking' =3D> 'Loosedirectorychecking', >>> =C2=A0 'low' =3D> 'Basso', >>> =C2=A0 'ls_dhcpd' =3D> 'DHCP Server:', >>> diff --git a/langs/nl/cgi-bin/nl.pl b/langs/nl/cgi-bin/nl.pl >>> index 55927839e..aea5e81b5 100644 >>> --- a/langs/nl/cgi-bin/nl.pl >>> +++ b/langs/nl/cgi-bin/nl.pl >>> @@ -1390,7 +1390,6 @@ >>> =C2=A0 'logging' =3D> 'Logging', >>> =C2=A0 'logging server' =3D> 'Loggingserver', >>> =C2=A0 'loginlogout' =3D> 'Login/Logout', >>> -'logs' =3D> 'logs', >>> =C2=A0 'loosedirectorychecking' =3D> 'Loosedirectorychecking', >>> =C2=A0 'low' =3D> 'Laag', >>> =C2=A0 'ls_dhcpd' =3D> 'DHCP Server:', >>> diff --git a/langs/pl/cgi-bin/pl.pl b/langs/pl/cgi-bin/pl.pl >>> index 147db051c..604a834a7 100644 >>> --- a/langs/pl/cgi-bin/pl.pl >>> +++ b/langs/pl/cgi-bin/pl.pl >>> @@ -1094,7 +1094,6 @@ >>> =C2=A0 'logging' =3D> 'Logowanie', >>> =C2=A0 'logging server' =3D> 'Serwer logowania', >>> =C2=A0 'loginlogout' =3D> 'Zalogowanie/wylogowanie', >>> -'logs' =3D> 'logi', >>> =C2=A0 'loosedirectorychecking' =3D> 'Loosedirectorychecking', >>> =C2=A0 'low' =3D> 'Niski', >>> =C2=A0 'ls_dhcpd' =3D> 'Serwer DHCP:', >>> diff --git a/langs/ru/cgi-bin/ru.pl b/langs/ru/cgi-bin/ru.pl >>> index 0d986135d..26ad6c338 100644 >>> --- a/langs/ru/cgi-bin/ru.pl >>> +++ b/langs/ru/cgi-bin/ru.pl >>> @@ -1087,7 +1087,6 @@ >>> =C2=A0 'logging' =3D> 'Logging', >>> =C2=A0 'logging server' =3D> '=D0=A1=D0=B5=D1=80=D0=B2=D0=B5=D1=80 =D0=9B= =D0=BE=D0=B3=D0=BE=D0=B2', >>> =C2=A0 'loginlogout' =3D> 'Login/Logout', >>> -'logs' =3D> '=D0=9B=D0=BE=D0=B3=D0=B8', >>> =C2=A0 'loosedirectorychecking' =3D> 'Loosedirectorychecking', >>> =C2=A0 'low' =3D> 'Low', >>> =C2=A0 'ls_dhcpd' =3D> 'DHCP =D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80:', >>> diff --git a/langs/tr/cgi-bin/tr.pl b/langs/tr/cgi-bin/tr.pl >>> index 36c4782d6..233de0995 100644 >>> --- a/langs/tr/cgi-bin/tr.pl >>> +++ b/langs/tr/cgi-bin/tr.pl >>> @@ -1538,7 +1538,6 @@ >>> =C2=A0 'logging' =3D> 'G=C3=BCnl=C3=BCk', >>> =C2=A0 'logging server' =3D> 'G=C3=BCnl=C3=BCk Sunucusu', >>> =C2=A0 'loginlogout' =3D> 'Giri=C5=9F/=C3=87=C4=B1k=C4=B1=C5=9F', >>> -'logs' =3D> 'G=C3=BCnl=C3=BCkler', >>> =C2=A0 'loosedirectorychecking' =3D> 'Serbest Dizin Denetimi', >>> =C2=A0 'low' =3D> 'D=C3=BC=C5=9F=C3=BCk', >>> =C2=A0 'ls_dhcpd' =3D> 'DHCP Sunucusu:', >>> --===============0932733908070565237==--