1#!/usr/bin/perl
2#
3#   This program is free software: you can redistribute it and/or modify
4#   it under the terms of the GNU General Public License as published by
5#   the Free Software Foundation, either version 3 of the License, or
6#   (at your option) any later version.
7#
8#   This program is distributed in the hope that it will be useful,
9#   but WITHOUT ANY WARRANTY; without even the implied warranty of
10#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11#   GNU General Public License for more details.
12#
13#   You should have received a copy of the GNU General Public License
14#   along with this program.  If not, see <http://www.gnu.org/licenses/>.
15#
16
17# --------------------------------
18
19$Lang{Start_Archive} = "Start Archive";
20$Lang{Stop_Dequeue_Archive} = "Stop/Dequeue Archive";
21$Lang{Start_Full_Backup} = "Start Full Backup";
22$Lang{Start_Incr_Backup} = "Start Incr Backup";
23$Lang{Stop_Dequeue_Backup} = "Stop/Dequeue Backup";
24$Lang{Restore} = "Restore";
25
26$Lang{Type_full} = "full";
27$Lang{Type_incr} = "incremental";
28
29# -----
30
31$Lang{Only_privileged_users_can_view_admin_options} = "Only privileged users can view admin options.";
32$Lang{H_Admin_Options} = "BackupPC Server: Admin Options";
33$Lang{Admin_Options} = "Admin Options";
34$Lang{Admin_Options_Page} = <<EOF;
35\${h1(qq{$Lang{Admin_Options}})}
36<br>
37\${h2("Server Control")}
38<form name="ReloadForm" action="\$MyURL" method="get">
39<input type="hidden" name="action" value="">
40<table class="tableStnd">
41  <tr><td>Reload the server configuration:<td><input type="button" value="Reload"
42     onClick="document.ReloadForm.action.value='Reload';
43              document.ReloadForm.submit();">
44</table>
45</form>
46<!--
47\${h2("Server Configuration")}
48<ul>
49  <li><i>Other options can go here... e.g.,</i>
50  <li>Edit server configuration
51</ul>
52-->
53EOF
54
55$Lang{Unable_to_connect_to_BackupPC_server} = "Unable to connect to BackupPC server";
56$Lang{Unable_to_connect_to_BackupPC_server_error_message} = <<EOF;
57This CGI script (\$MyURL) is unable to connect to the BackupPC
58server on \$Conf{ServerHost} port \$Conf{ServerPort}.<br>
59The error was: \$err.<br>
60Perhaps the BackupPC server is not running or there is a configuration error.
61Please report this to your Sys Admin.
62EOF
63
64$Lang{Admin_Start_Server} = <<EOF;
65\${h1(qq{$Lang{Unable_to_connect_to_BackupPC_server}})}
66<form action="\$MyURL" method="get">
67The BackupPC server at <tt>\$Conf{ServerHost}</tt> port <tt>\$Conf{ServerPort}</tt>
68is not currently running (maybe you just stopped it, or haven't yet started it).<br>
69Do you want to start it?
70<input type="hidden" name="action" value="startServer">
71<input type="submit" value="Start Server" name="ignore">
72</form>
73EOF
74
75# -----
76
77$Lang{H_BackupPC_Server_Status} = "BackupPC Server Status";
78
79$Lang{BackupPC_Server_Status_General_Info}= <<EOF;
80\${h2(\"General Server Information\")}
81
82<ul>
83<li> The servers PID is \$Info{pid},  on host \$Conf{ServerHost},
84     version \$Info{Version}, started at \$serverStartTime.
85<li> This status was generated at \$now.
86<li> The configuration was last loaded at \$configLoadTime.
87<li> PCs will be next queued at \$nextWakeupTime.
88<li> Other info:
89    <ul>
90        <li>\$numBgQueue pending backup requests from last scheduled wakeup,
91        <li>\$numUserQueue pending user backup requests,
92        <li>\$numCmdQueue pending command requests,
93        \$poolInfo
94        <li>Pool file system was recently at \$Info{DUlastValue}%
95            (\$DUlastTime), today\'s max is \$Info{DUDailyMax}% (\$DUmaxTime)
96            and yesterday\'s max was \$Info{DUDailyMaxPrev}%.
97        <li>Pool file system inode usage was recently at \$Info{DUInodelastValue}%
98            (\$DUlastTime), today\'s max is \$Info{DUInodeDailyMax}% (\$DUInodemaxTime)
99            and yesterday\'s max was \$Info{DUInodeDailyMaxPrev}%.
100    </ul>
101</ul>
102EOF
103
104$Lang{BackupPC_Server_Status} = <<EOF;
105\${h1(qq{$Lang{H_BackupPC_Server_Status}})}
106
107<p>
108\${h2("Currently Running Jobs")}
109<p>
110<table class="tableStnd sortable" border cellspacing="1" cellpadding="3">
111<tr class="tableheader"><td> Host </td>
112    <td> Type </td>
113    <td> User </td>
114    <td> Start Time </td>
115    <td> Command </td>
116    <td align="center"> PID </td>
117    <td align="center"> Xfer PID </td>
118    <td align="center"> Status </td>
119    <td align="center"> Count </td>
120    </tr>
121\$jobStr
122</table>
123
124<p>
125\$generalInfo
126
127\${h2("Failures that need attention")}
128<p>
129<table class="tableStnd sortable" border cellspacing="1" cellpadding="3">
130<tr class="tableheader"><td align="center"> Host </td>
131    <td align="center"> Type </td>
132    <td align="center"> User </td>
133    <td align="center"> Last Try </td>
134    <td align="center"> Details </td>
135    <td align="center"> Error Time </td>
136    <td> Last error (other than no ping) </td></tr>
137\$statusStr
138</table>
139EOF
140
141# --------------------------------
142$Lang{BackupPC__Server_Summary} = "BackupPC: Host Summary";
143$Lang{BackupPC__Archive} = "BackupPC: Archive";
144$Lang{BackupPC_Summary} = <<EOF;
145
146\${h1(qq{$Lang{BackupPC__Server_Summary}})}
147<p>
148<ul>
149<li>This status was generated at \$now.
150<li>Pool file system was recently at \$Info{DUlastValue}%
151    (\$DUlastTime), today\'s max is \$Info{DUDailyMax}% (\$DUmaxTime)
152    and yesterday\'s max was \$Info{DUDailyMaxPrev}%.
153<li>Pool file system inode usage was recently at \$Info{DUInodelastValue}%
154    (\$DUlastTime), today\'s max is \$Info{DUInodeDailyMax}% (\$DUInodemaxTime)
155    and yesterday\'s max was \$Info{DUInodeDailyMaxPrev}%.
156</ul>
157</p>
158
159\${h2("Hosts with good Backups")}
160<p>
161There are \$hostCntGood hosts that have been backed up, for a total of:
162<ul>
163<li> \$fullTot full backups of total size \${fullSizeTot}GiB
164     (prior to pooling and compression),
165<li> \$incrTot incr backups of total size \${incrSizeTot}GiB
166     (prior to pooling and compression).
167</ul>
168</p>
169<table class="sortable" id="host_summary_backups" border cellpadding="3" cellspacing="1">
170<tr class="tableheader"><td> Host </td>
171    <td align="center"> User </td>
172    <td align="center"> Comment </td>
173    <td align="center"> #Full </td>
174    <td align="center"> Full Age (days) </td>
175    <td align="center"> Full Size (GiB) </td>
176    <td align="center"> Speed (MiB/s) </td>
177    <td align="center"> #Incr </td>
178    <td align="center"> Incr Age (days) </td>
179    <td align="center"> Last Backup (days) </td>
180    <td align="center"> State </td>
181    <td align="center"> #Xfer errs </td>
182    <td align="center"> Last attempt </td></tr>
183\$strGood
184</table>
185\${h2("Hosts with no Backups")}
186<p>
187There are \$hostCntNone hosts with no backups.
188<p>
189<table class="sortable" id="host_summary_nobackups" border cellpadding="3" cellspacing="1">
190<tr class="tableheader"><td> Host </td>
191    <td align="center"> User </td>
192    <td align="center"> Comment </td>
193    <td align="center"> #Full </td>
194    <td align="center"> Full Age (days) </td>
195    <td align="center"> Full Size (GiB) </td>
196    <td align="center"> Speed (MiB/s) </td>
197    <td align="center"> #Incr </td>
198    <td align="center"> Incr Age/days </td>
199    <td align="center"> Last Backup (days) </td>
200    <td align="center"> State </td>
201    <td align="center"> #Xfer errs </td>
202    <td align="center"> Last attempt </td></tr>
203\$strNone
204</table>
205EOF
206
207$Lang{BackupPC_Archive} = <<EOF;
208\${h1(qq{$Lang{BackupPC__Archive}})}
209<script language="javascript" type="text/javascript">
210<!--
211
212    function checkAll(location)
213    {
214      for (var i=0;i<document.form1.elements.length;i++)
215      {
216        var e = document.form1.elements[i];
217        if ((e.checked || !e.checked) && e.name != \'all\') {
218            if (eval("document.form1."+location+".checked")) {
219                e.checked = true;
220            } else {
221                e.checked = false;
222            }
223        }
224      }
225    }
226
227    function toggleThis(checkbox)
228    {
229       var cb = eval("document.form1."+checkbox);
230       cb.checked = !cb.checked;
231    }
232
233//-->
234</script>
235
236There are \$hostCntGood hosts that have been backed up for a total size of \${fullSizeTot}GiB
237<p>
238<form name="form1" method="post" action="\$MyURL">
239<input type="hidden" name="fcbMax" value="\$checkBoxCnt">
240<input type="hidden" name="type" value="1">
241<input type="hidden" name="host" value="\${EscHTML(\$archHost)}">
242<input type="hidden" name="action" value="Archive">
243<table class="tableStnd" border cellpadding="3" cellspacing="1">
244<tr class="tableheader"><td align=center> Host</td>
245    <td align="center"> User </td>
246    <td align="center"> Backup Size </td>
247\$strGood
248\$checkAllHosts
249</table>
250</form>
251<p>
252
253EOF
254
255$Lang{BackupPC_Archive2} = <<EOF;
256\${h1(qq{$Lang{BackupPC__Archive}})}
257About to archive the following hosts
258<ul>
259\$HostListStr
260</ul>
261<form action="\$MyURL" method="post">
262\$hiddenStr
263<input type="hidden" name="action" value="Archive">
264<input type="hidden" name="host" value="\${EscHTML(\$archHost)}">
265<input type="hidden" name="type" value="2">
266<input type="hidden" value="0" name="archive_type">
267<table class="tableStnd" border cellspacing="1" cellpadding="3">
268\$paramStr
269<tr>
270    <td colspan=2><input type="submit" value="Start the Archive" name="ignore"></td>
271</tr>
272</form>
273</table>
274EOF
275
276$Lang{BackupPC_Archive2_location} = <<EOF;
277<tr>
278    <td>Archive Location/Device</td>
279    <td><input type="text" value="\$ArchiveDest" name="archive_device"></td>
280</tr>
281EOF
282
283$Lang{BackupPC_Archive2_compression} = <<EOF;
284<tr>
285    <td>Compression</td>
286    <td>
287    <input type="radio" value="0" name="compression" \$ArchiveCompNone>None<br>
288    <input type="radio" value="1" name="compression" \$ArchiveCompGzip>gzip<br>
289    <input type="radio" value="2" name="compression" \$ArchiveCompBzip2>bzip2
290    </td>
291</tr>
292EOF
293
294$Lang{BackupPC_Archive2_parity} = <<EOF;
295<tr>
296    <td>Percentage of Parity Data (0 = disable, 5 = typical)</td>
297    <td><input type="numeric" value="\$ArchivePar" name="par"></td>
298</tr>
299EOF
300
301$Lang{BackupPC_Archive2_split} = <<EOF;
302<tr>
303    <td>Split output into</td>
304    <td><input type="numeric" value="\$ArchiveSplit" name="splitsize">Megabytes</td>
305</tr>
306EOF
307
308# -----------------------------------
309$Lang{Pool_Stat} = <<EOF;
310        <li>Pool is \${poolSize}GiB comprising \$info->{"\${name}FileCnt"} files
311            and \$info->{"\${name}DirCnt"} directories (as of \$poolTime),
312        <li>Pool hashing gives \$info->{"\${name}FileCntRep"} repeated
313            files with longest chain \$info->{"\${name}FileRepMax"},
314        <li>Nightly cleanup removed \$info->{"\${name}FileCntRm"} files of
315            size \${poolRmSize}GiB (around \$poolTime),
316EOF
317
318# --------------------------------
319$Lang{BackupPC__Backup_Requested_on__host} = "BackupPC: Backup Requested on \$host";
320$Lang{BackupPC__Delete_Requested_for_a_backup_of__host} = "BackupPC: Delete Requested for a backup of \$host";
321# --------------------------------
322$Lang{REPLY_FROM_SERVER} = <<EOF;
323\${h1(\$str)}
324<p>
325Reply from server was: \$reply
326<p>
327Go back to <a href="\$MyURL?host=\$host">\$host home page</a>.
328EOF
329# --------------------------------
330$Lang{BackupPC__Start_Backup_Confirm_on__host} = "BackupPC: Start Backup Confirm on \$host";
331# --------------------------------
332$Lang{Are_you_sure_start} = <<EOF;
333\${h1("Are you sure?")}
334<p>
335You are about to start a \$type backup on \$host.
336
337<form name="Confirm" action="\$MyURL" method="get">
338<input type="hidden" name="host" value="\$host">
339<input type="hidden" name="hostIP" value="\$ipAddr">
340<input type="hidden" name="doit" value="1">
341<input type="hidden" name="action" value="">
342Do you really want to do this?
343<input type="button" value="\$buttonText"
344  onClick="document.Confirm.action.value='\$In{action}';
345           document.Confirm.submit();">
346<input type="submit" value="No" name="ignore">
347</form>
348EOF
349# --------------------------------
350$Lang{BackupPC__Stop_Backup_Confirm_on__host} = "BackupPC: Stop Backup Confirm on \$host";
351# --------------------------------
352$Lang{Are_you_sure_stop} = <<EOF;
353
354\${h1("Are you sure?")}
355
356<p>
357You are about to stop/dequeue backups on \$host;
358
359<form name="Confirm" action="\$MyURL" method="get">
360<input type="hidden" name="host"   value="\$host">
361<input type="hidden" name="doit"   value="1">
362<input type="hidden" name="action" value="">
363Also, please don\'t start another backup for
364<input type="text" name="backoff" size="10" value="\$backoff"> hours.
365<p>
366Do you really want to do this?
367<input type="button" value="\$buttonText"
368  onClick="document.Confirm.action.value='\$In{action}';
369           document.Confirm.submit();">
370<input type="submit" value="No" name="ignore">
371</form>
372
373EOF
374# --------------------------------
375$Lang{Only_privileged_users_can_view_queues_} = "Only privileged users can view queues.";
376# --------------------------------
377$Lang{Only_privileged_users_can_archive} = "Only privileged users can Archive.";
378# --------------------------------
379$Lang{BackupPC__Queue_Summary} = "BackupPC: Queue Summary";
380# --------------------------------
381$Lang{Backup_Queue_Summary} = <<EOF;
382\${h1("Backup Queue Summary")}
383\${h2("User Queue Summary")}
384<p>
385The following user requests are currently queued:
386</p>
387<table class="tableStnd sortable" border cellspacing="1" cellpadding="3" width="80%">
388<tr class="tableheader"><td> Host </td>
389    <td> Action </td>
390    <td> Req Time </td>
391    <td> User </td></tr>
392\$strUser
393</table>
394
395\${h2("Background Queue Summary")}
396<p>
397The following background requests are currently queued:
398</p>
399<table class="tableStnd sortable" border cellspacing="1" cellpadding="3" width="80%">
400<tr class="tableheader"><td> Host </td>
401    <td> Action </td>
402    <td> Req Time </td>
403    <td> User </td></tr>
404\$strBg
405</table>
406\${h2("Command Queue Summary")}
407<p>
408The following command requests are currently queued:
409</p>
410<table class="tableStnd sortable" border cellspacing="1" cellpadding="3" width="80%">
411<tr class="tableheader"><td> Host </td>
412    <td> Action </td>
413    <td> Req Time </td>
414    <td> User </td>
415    <td> Command </td></tr>
416\$strCmd
417</table>
418EOF
419
420# --------------------------------
421$Lang{Backup_PC__Log_File__file} = "BackupPC: File \$file";
422$Lang{Log_File__file__comment} = <<EOF;
423\${h1("File \$file \$comment")}
424<p>
425EOF
426# --------------------------------
427$Lang{Contents_of_log_file} = <<EOF;
428Contents of file <tt>\$file</tt>, modified \$mtimeStr \$comment
429EOF
430
431# --------------------------------
432$Lang{skipped__skipped_lines} = "[ skipped \$skipped lines ]\n";
433# --------------------------------
434$Lang{_pre___Can_t_open_log_file__file} = "<pre>\nCan\'t open log file \$file\n";
435
436# --------------------------------
437$Lang{BackupPC__Log_File_History} = "BackupPC: Log File History";
438$Lang{Log_File_History__hdr} = <<EOF;
439\${h1("Log File History \$hdr")}
440<p>
441<table class="tableStnd sortable" border cellspacing="1" cellpadding="3" width="80%">
442<tr class="tableheader"><td align="center"> File </td>
443    <td align="center"> Size </td>
444    <td align="center"> Modification time </td></tr>
445\$str
446</table>
447EOF
448
449# -------------------------------
450$Lang{Recent_Email_Summary} = <<EOF;
451\${h1("Recent Email Summary (Reverse time order)")}
452<p>
453<table class="tableStnd sortable" border cellspacing="1" cellpadding="3" width="80%">
454<tr class="tableheader"><td align="center"> Recipient </td>
455    <td align="center"> Host </td>
456    <td align="center"> Time </td>
457    <td align="center"> Subject </td></tr>
458\$str
459</table>
460EOF
461
462
463# ------------------------------
464$Lang{Browse_backup__num_for__host} = "BackupPC: Browse backup \$num for \$host";
465
466# ------------------------------
467$Lang{Restore_Options_for__host} = "BackupPC: Restore Options for \$host";
468$Lang{Restore_Options_for__host2} = <<EOF;
469\${h1("Restore Options for \$host")}
470<p>
471You have selected the following files/directories from
472share \$share, backup number #\$num:
473<ul>
474\$fileListStr
475</ul>
476</p><p>
477You have three choices for restoring these files/directories.
478Please select one of the following options.
479</p>
480\${h2("Option 1: Direct Restore")}
481<p>
482EOF
483
484$Lang{Restore_Options_for__host_Option1} = <<EOF;
485You can start a restore that will restore these files directly onto
486<b>\$directHost</b>.
487</p><p>
488<b>Warning:</b> any existing files that match the ones you have
489selected will be overwritten!
490</p>
491<form action="\$MyURL" method="post" name="direct">
492<input type="hidden" name="host" value="\${EscHTML(\$host)}">
493<input type="hidden" name="num" value="\$num">
494<input type="hidden" name="type" value="3">
495\$hiddenStr
496<input type="hidden" value="\$In{action}" name="action">
497<table class="tableStnd" border="0">
498<tr>
499    <td>Restore the files to host</td>
500    <td><!--<input type="text" size="40" value="\${EscHTML(\$host)}"
501	 name="hostDest">-->
502	 <select name="hostDest" onChange="document.direct.shareDest.value=''">
503	 \$hostDestSel
504	 </select>
505	 <script language="Javascript">
506	 function myOpen(URL) {
507		window.open(URL,'','width=500,height=400');
508	 }
509	 </script>
510	 <!--<a href="javascript:myOpen('\$MyURL?action=findShares&host='+document.direct.hostDest.options.value)">Search for available shares (NOT IMPLEMENTED)</a>--></td>
511</tr><tr>
512    <td>Restore the files to share</td>
513    <td><input type="text" size="40" value="\${EscHTML(\$share)}"
514	 name="shareDest"></td>
515</tr><tr>
516    <td>Restore the files below dir<br>(relative to share)</td>
517    <td valign="top"><input type="text" size="40" maxlength="256"
518	value="\${EscHTML(\$pathHdr)}" name="pathHdr"></td>
519</tr><tr>
520    <td><input type="submit" value="Start Restore" name="ignore"></td>
521</table>
522</form>
523EOF
524
525$Lang{Restore_Options_for__host_Option1_disabled} = <<EOF;
526Direct restore has been disabled for host \${EscHTML(\$hostDest)}.
527Please select one of the other restore options.
528EOF
529
530# ------------------------------
531$Lang{Option_2__Download_Zip_archive} = <<EOF;
532<p>
533\${h2("Option 2: Download Zip archive")}
534<p>
535You can download a Zip archive containing all the files/directories you have
536selected.  You can then use a local application, such as WinZip,
537to view or extract any of the files.
538</p><p>
539<b>Warning:</b> depending upon which files/directories you have selected,
540this archive might be very very large.  It might take many minutes to
541create and transfer the archive, and you will need enough local disk
542space to store it.
543</p>
544<form action="\$MyURL" method="post">
545<input type="hidden" name="host" value="\${EscHTML(\$host)}">
546<input type="hidden" name="num" value="\$num">
547<input type="hidden" name="type" value="2">
548\$hiddenStr
549<input type="hidden" value="\$In{action}" name="action">
550<input type="checkbox" value="1" name="relative" checked> Make archive relative
551to \${EscHTML(\$pathHdr eq "" ? "/" : \$pathHdr)}
552(otherwise archive will contain full paths).
553<br>
554<table class="tableStnd" border="0">
555<tr>
556    <td>Compression (0=off, 1=fast,...,9=best)</td>
557    <td><input type="text" size="6" value="5" name="compressLevel"></td>
558</tr><tr>
559    <td>Code page (e.g. cp866)</td>
560    <td><input type="text" size="6" value="utf8" name="codePage"></td>
561</tr>
562</table>
563<br>
564<input type="submit" value="Download Zip File" name="ignore">
565</form>
566EOF
567
568# ------------------------------
569
570$Lang{Option_2__Download_Zip_archive2} = <<EOF;
571<p>
572\${h2("Option 2: Download Zip archive")}
573<p>
574Archive::Zip is not installed so you will not be able to download a
575zip archive.
576Please ask your system adminstrator to install Archive::Zip from
577<a href="http://www.cpan.org">www.cpan.org</a>.
578</p>
579EOF
580
581
582# ------------------------------
583$Lang{Option_3__Download_Zip_archive} = <<EOF;
584\${h2("Option 3: Download Tar archive")}
585<p>
586You can download a Tar archive containing all the files/directories you
587have selected.  You can then use a local application, such as tar or
588WinZip to view or extract any of the files.
589</p><p>
590<b>Warning:</b> depending upon which files/directories you have selected,
591this archive might be very very large.  It might take many minutes to
592create and transfer the archive, and you will need enough local disk
593space to store it.
594</p>
595<form action="\$MyURL" method="post">
596<input type="hidden" name="host" value="\${EscHTML(\$host)}">
597<input type="hidden" name="num" value="\$num">
598<input type="hidden" name="type" value="1">
599\$hiddenStr
600<input type="hidden" value="\$In{action}" name="action">
601<input type="checkbox" value="1" name="relative" checked> Make archive relative
602to \${EscHTML(\$pathHdr eq "" ? "/" : \$pathHdr)}
603(otherwise archive will contain full paths).
604<br>
605<input type="submit" value="Download Tar File" name="ignore">
606</form>
607EOF
608
609
610# ------------------------------
611$Lang{Restore_Confirm_on__host} = "BackupPC: Restore Confirm on \$host";
612
613$Lang{Are_you_sure} = <<EOF;
614\${h1("Are you sure?")}
615<p>
616You are about to start a restore directly to the machine \$In{hostDest}.
617The following files will be restored to share \$In{shareDest}, from
618backup number \$num:
619<p>
620<table class="tableStnd" border>
621<tr class="tableheader"><td>Original file/dir</td><td>Will be restored to</td></tr>
622\$fileListStr
623</table>
624
625<form name="RestoreForm" action="\$MyURL" method="post">
626<input type="hidden" name="host" value="\${EscHTML(\$host)}">
627<input type="hidden" name="hostDest" value="\${EscHTML(\$In{hostDest})}">
628<input type="hidden" name="shareDest" value="\${EscHTML(\$In{shareDest})}">
629<input type="hidden" name="pathHdr" value="\${EscHTML(\$In{pathHdr})}">
630<input type="hidden" name="num" value="\$num">
631<input type="hidden" name="type" value="4">
632<input type="hidden" name="action" value="">
633\$hiddenStr
634Do you really want to do this?
635<input type="button" value="\$Lang->{Restore}"
636 onClick="document.RestoreForm.action.value='Restore';
637          document.RestoreForm.submit();">
638<input type="submit" value="No" name="ignore">
639</form>
640EOF
641
642
643# --------------------------
644$Lang{Restore_Requested_on__hostDest} = "BackupPC: Restore Requested on \$hostDest";
645$Lang{Reply_from_server_was___reply} = <<EOF;
646\${h1(\$str)}
647<p>
648Reply from server was: \$reply
649<p>
650Go back to <a href="\$MyURL?host=\$hostDest">\$hostDest home page</a>.
651EOF
652
653$Lang{BackupPC_Archive_Reply_from_server} = <<EOF;
654\${h1(\$str)}
655<p>
656Reply from server was: \$reply
657EOF
658
659
660# --------------------------------
661$Lang{BackupPC__Delete_Backup_Confirm__num_of__host} = "BackupPC: Delete Backup Confirm #\$num of \$host";
662# --------------------------------
663$Lang{A_filled} = "a filled";
664$Lang{An_unfilled} = "an unfilled";
665$Lang{Are_you_sure_delete} = <<EOF;
666\${h1("Are you sure?")}
667<p>
668You are about to delete \$filled \$type backup #\$num of \$host.
669
670<form name="Confirm" action="\$MyURL" method="get">
671
672<input type="hidden" name="host" value="\${EscHTML(\$host)}">
673<input type="hidden" name="num" value="\$num">
674
675<input type="hidden" name="doit" value="1">
676<input type="hidden" name="action" value="">
677
678Do you really want to do this?
679
680<input type="button" value="\${EscHTML(\$Lang->{CfgEdit_Button_Delete})}"
681 onClick="document.Confirm.action.value='deleteBackup';
682          document.Confirm.submit();">
683
684<input type="submit" value="No" name="ignore">
685</form>
686EOF
687
688# -------------------------
689$Lang{Host__host_Backup_Summary} = "BackupPC: Host \$host Backup Summary";
690
691$Lang{Host__host_Backup_Summary2} = <<EOF;
692\${h1("Host \$host Backup Summary")}
693<p>
694\$warnStr
695<ul>
696\$statusStr
697</ul>
698</p>
699\${h2("User Actions")}
700<p>
701<form name="StartStopForm" action="\$MyURL" method="get">
702<input type="hidden" name="host"   value="\$host">
703<input type="hidden" name="action" value="">
704\$startIncrStr
705<input type="button" value="\$Lang->{Start_Full_Backup}"
706 onClick="document.StartStopForm.action.value='Start_Full_Backup';
707          document.StartStopForm.submit();">
708<input type="button" value="\$Lang->{Stop_Dequeue_Backup}"
709 onClick="document.StartStopForm.action.value='Stop_Dequeue_Backup';
710          document.StartStopForm.submit();">
711</form>
712</p>
713\${h2("Backup Summary")}
714<p>
715Click on the backup number to browse and restore backup files.
716</p>
717<table class="tableStnd sortable" border cellspacing="1" cellpadding="3">
718<tr class="tableheader"><td align="center"> Backup# </td>
719    <td align="center"> Type </td>
720    <td align="center"> Filled </td>
721    <td align="center"> Level </td>
722    <td align="center"> Start Date </td>
723    <td align="center"> Duration/mins </td>
724    <td align="center"> Age/days </td>
725    \$deleteHdrStr
726    <td align="center"> Server Backup Path </td>
727</tr>
728\$str
729</table>
730<p>
731
732\$restoreStr
733</p>
734\${h2("Xfer Error Summary")}
735<table class="tableStnd sortable" border cellspacing="1" cellpadding="3" width="80%">
736<tr class="tableheader"><td align="center"> Backup# </td>
737    <td align="center"> Type </td>
738    <td align="center"> View </td>
739    <td align="center"> #Xfer errs </td>
740    <td align="center"> #bad files </td>
741    <td align="center"> #bad share </td>
742    <td align="center"> #tar errs </td>
743</tr>
744\$errStr
745</table>
746
747\${h2("File Size/Count Reuse Summary")}
748<p>
749Existing files are those already in the pool; new files are those added
750to the pool.
751Empty files and SMB errors aren\'t counted in the reuse and new counts.
752</p>
753<table class="tableStnd sortable" border cellspacing="1" cellpadding="3" width="80%">
754<tr class="tableheader"><td colspan="2" bgcolor="#ffffff"></td>
755    <td align="center" colspan="3"> Totals </td>
756    <td align="center" colspan="2"> Existing Files </td>
757    <td align="center" colspan="2"> New Files </td>
758</tr>
759<tr class="tableheader sortheader">
760    <td align="center"> Backup# </td>
761    <td align="center"> Type </td>
762    <td align="center"> #Files </td>
763    <td align="center"> Size/MiB </td>
764    <td align="center"> MiB/sec </td>
765    <td align="center"> #Files </td>
766    <td align="center"> Size/MiB </td>
767    <td align="center"> #Files </td>
768    <td align="center"> Size/MiB </td>
769</tr>
770\$sizeStr
771</table>
772
773\${h2("Compression Summary")}
774<p>
775Compression performance for files already in the pool and newly
776compressed files.
777</p>
778<table class="tableStnd sortable" border cellspacing="1" cellpadding="3" width="80%">
779<tr class="tableheader"><td colspan="3" bgcolor="#ffffff"></td>
780    <td align="center" colspan="3"> Existing Files </td>
781    <td align="center" colspan="3"> New Files </td>
782</tr>
783<tr class="tableheader sortheader"><td align="center"> Backup# </td>
784    <td align="center"> Type </td>
785    <td align="center"> Comp Level </td>
786    <td align="center"> Size/MiB </td>
787    <td align="center"> Comp/MiB </td>
788    <td align="center"> Comp </td>
789    <td align="center"> Size/MiB </td>
790    <td align="center"> Comp/MiB </td>
791    <td align="center"> Comp </td>
792</tr>
793\$compStr
794</table>
795EOF
796
797$Lang{Host__host_Archive_Summary} = "BackupPC: Host \$host Archive Summary";
798$Lang{Host__host_Archive_Summary2} = <<EOF;
799\${h1("Host \$host Archive Summary")}
800<p>
801\$warnStr
802<ul>
803\$statusStr
804</ul>
805
806\${h2("User Actions")}
807<p>
808<form name="StartStopForm" action="\$MyURL" method="get">
809<input type="hidden" name="archivehost" value="\$host">
810<input type="hidden" name="host" value="\$host">
811<input type="hidden" name="action" value="">
812<input type="button" value="\$Lang->{Start_Archive}"
813 onClick="document.StartStopForm.action.value='Start_Archive';
814          document.StartStopForm.submit();">
815<input type="button" value="\$Lang->{Stop_Dequeue_Archive}"
816 onClick="document.StartStopForm.action.value='Stop_Dequeue_Archive';
817          document.StartStopForm.submit();">
818</form>
819
820\$ArchiveStr
821
822EOF
823
824# -------------------------
825$Lang{Error} = "BackupPC: Error";
826$Lang{Error____head} = <<EOF;
827\${h1("Error: \$head")}
828<p>\$mesg</p>
829EOF
830
831# -------------------------
832$Lang{NavSectionTitle_} = "Server";
833
834# -------------------------
835$Lang{Backup_browse_for__host} = <<EOF;
836\${h1("Backup browse for \$host")}
837
838<script language="javascript" type="text/javascript">
839<!--
840
841    function checkAll(location)
842    {
843      for (var i=0;i<document.form1.elements.length;i++)
844      {
845        var e = document.form1.elements[i];
846        if ((e.checked || !e.checked) && e.name != \'all\') {
847            if (eval("document.form1."+location+".checked")) {
848            	e.checked = true;
849            } else {
850            	e.checked = false;
851            }
852        }
853      }
854    }
855
856    function toggleThis(checkbox)
857    {
858       var cb = eval("document.form1."+checkbox);
859       cb.checked = !cb.checked;
860    }
861
862//-->
863</script>
864
865<form name="form0" method="post" action="\$MyURL">
866<input type="hidden" name="num" value="\$num">
867<input type="hidden" name="host" value="\$host">
868<input type="hidden" name="share" value="\${EscHTML(\$share)}">
869<input type="hidden" name="action" value="browse">
870<ul>
871<li> You are browsing backup #\$num, which started around \$backupTime
872        (\$backupAge days ago),
873\$filledBackup
874<li> Enter directory: <input type="text" name="dir" size="50" maxlength="4096" value="\${EscHTML(\$dir)}"> <input type="submit" value="\$Lang->{Go}" name="Submit">
875<li> Click on a directory below to navigate into that directory,
876<li> Click on a file below to restore that file,
877<li> You can view the backup <a href="\$MyURL?action=dirHistory&host=\${EscURI(\$host)}&share=\$shareURI&dir=\$pathURI">history</a> of the current directory.
878</ul>
879</form>
880
881\${h2("Contents of \$dirDisplay")}
882<form name="form1" method="post" action="\$MyURL">
883<input type="hidden" name="num" value="\$num">
884<input type="hidden" name="host" value="\$host">
885<input type="hidden" name="share" value="\${EscHTML(\$share)}">
886<input type="hidden" name="fcbMax" value="\$checkBoxCnt">
887<input type="hidden" name="action" value="Restore">
888<br>
889<table width="100%">
890<tr><td valign="top" width="30%">
891    <table align="left" border="0" cellpadding="0" cellspacing="0" bgcolor="#ffffff">
892    \$dirStr
893    </table>
894</td><td width="3%">
895</td><td valign="top">
896    <br>
897        <table border width="100%" align="left" cellpadding="3" cellspacing="1">
898        \$fileHeader
899        \$topCheckAll
900        \$fileStr
901        \$checkAll
902        </table>
903    </td></tr></table>
904<br>
905<!--
906This is now in the checkAll row
907<input type="submit" name="Submit" value="Restore selected files">
908-->
909</form>
910EOF
911
912# ------------------------------
913$Lang{DirHistory_backup_for__host} = "BackupPC: Directory backup history for \$host";
914
915#
916# These two strings are used to build the links for directories and
917# file versions.  Files are appended with a version number.
918#
919$Lang{DirHistory_dirLink}  = "dir";
920$Lang{DirHistory_fileLink} = "v";
921
922$Lang{DirHistory_for__host} = <<EOF;
923\${h1("Directory backup history for \$host")}
924<p>
925This display shows each unique version of files across all
926the backups:
927<ul>
928<li> Click on a backup number to return to the backup browser,
929<li> Click on a directory link (\$Lang->{DirHistory_dirLink}) to navigate
930     into that directory,
931<li> Click on a file version link (\$Lang->{DirHistory_fileLink}0,
932     \$Lang->{DirHistory_fileLink}1, ...) to download that file,
933<li> Files with the same contents between different backups have the same
934     version number (except between v3 and v4 backups),
935<li> Files or directories not present in a particular backup have an
936     empty box.
937<li> Files shown with the same version might have different attributes.
938     Select the backup number to see the file attributes.
939</ul>
940
941\${h2("History of \$dirDisplay")}
942
943<br>
944<table border cellspacing="2" cellpadding="3">
945<tr class="fviewheader"><td>Backup number</td>\$backupNumStr</tr>
946<tr class="fviewheader"><td>Backup time</td>\$backupTimeStr</tr>
947\$fileStr
948</table>
949EOF
950
951# ------------------------------
952$Lang{Restore___num_details_for__host} = "BackupPC: Restore #\$num details for \$host";
953
954$Lang{Restore___num_details_for__host2} = <<EOF;
955\${h1("Restore #\$num Details for \$host")}
956<p>
957<table class="tableStnd" border cellspacing="1" cellpadding="3" width="90%">
958<tr><td class="tableheader"> Number </td><td class="border"> \$Restores[\$i]{num} </td></tr>
959<tr><td class="tableheader"> Requested by </td><td class="border"> \$RestoreReq{user} </td></tr>
960<tr><td class="tableheader"> Request time </td><td class="border"> \$reqTime </td></tr>
961<tr><td class="tableheader"> Result </td><td class="border"> \$Restores[\$i]{result} </td></tr>
962<tr><td class="tableheader"> Error Message </td><td class="border"> \$Restores[\$i]{errorMsg} </td></tr>
963<tr><td class="tableheader"> Source host </td><td class="border"> \$RestoreReq{hostSrc} </td></tr>
964<tr><td class="tableheader"> Source backup num </td><td class="border"> \$RestoreReq{num} </td></tr>
965<tr><td class="tableheader"> Source share </td><td class="border"> \$RestoreReq{shareSrc} </td></tr>
966<tr><td class="tableheader"> Destination host </td><td class="border"> \$RestoreReq{hostDest} </td></tr>
967<tr><td class="tableheader"> Destination share </td><td class="border"> \$RestoreReq{shareDest} </td></tr>
968<tr><td class="tableheader"> Start time </td><td class="border"> \$startTime </td></tr>
969<tr><td class="tableheader"> Duration </td><td class="border"> \$duration min </td></tr>
970<tr><td class="tableheader"> Number of files </td><td class="border"> \$Restores[\$i]{nFiles} </td></tr>
971<tr><td class="tableheader"> Total size </td><td class="border"> \${MB} MiB </td></tr>
972<tr><td class="tableheader"> Transfer rate </td><td class="border"> \$MBperSec MiB/sec </td></tr>
973<tr><td class="tableheader"> TarCreate errors </td><td class="border"> \$Restores[\$i]{tarCreateErrs} </td></tr>
974<tr><td class="tableheader"> Xfer errors </td><td class="border"> \$Restores[\$i]{xferErrs} </td></tr>
975<tr><td class="tableheader"> Xfer log file </td><td class="border">
976<a href="\$MyURL?action=view&type=RestoreLOG&num=\$Restores[\$i]{num}&host=\$host">View</a>,
977<a href="\$MyURL?action=view&type=RestoreErr&num=\$Restores[\$i]{num}&host=\$host">Errors</a>
978</tr></tr>
979</table>
980</p>
981\${h1("File/Directory list")}
982<p>
983<table class="tableStnd" border cellspacing="1" cellpadding="3" width="100%">
984<tr class="tableheader"><td>Original file/dir</td><td>Restored to</td></tr>
985\$fileListStr
986</table>
987EOF
988
989# ------------------------------
990$Lang{Archive___num_details_for__host} = "BackupPC: Archive #\$num details for \$host";
991
992$Lang{Archive___num_details_for__host2} = <<EOF;
993\${h1("Archive #\$num Details for \$host")}
994<p>
995<table class="tableStnd" border cellspacing="1" cellpadding="3" width="80%">
996<tr><td class="tableheader"> Number </td><td class="border"> \$Archives[\$i]{num} </td></tr>
997<tr><td class="tableheader"> Requested by </td><td class="border"> \$ArchiveReq{user} </td></tr>
998<tr><td class="tableheader"> Request time </td><td class="border"> \$reqTime </td></tr>
999<tr><td class="tableheader"> Result </td><td class="border"> \$Archives[\$i]{result} </td></tr>
1000<tr><td class="tableheader"> Error Message </td><td class="border"> \$Archives[\$i]{errorMsg} </td></tr>
1001<tr><td class="tableheader"> Start time </td><td class="border"> \$startTime </td></tr>
1002<tr><td class="tableheader"> Duration </td><td class="border"> \$duration min </td></tr>
1003<tr><td class="tableheader"> Xfer log file </td><td class="border">
1004<a href="\$MyURL?action=view&type=ArchiveLOG&num=\$Archives[\$i]{num}&host=\$host">View</a>,
1005<a href="\$MyURL?action=view&type=ArchiveErr&num=\$Archives[\$i]{num}&host=\$host">Errors</a>
1006</tr></tr>
1007</table>
1008<p>
1009\${h1("Host list")}
1010<p>
1011<table class="tableStnd" border cellspacing="1" cellpadding="3" width="80%">
1012<tr class="tableheader"><td>Host</td><td>Backup Number</td></tr>
1013\$HostListStr
1014</table>
1015EOF
1016
1017# -----------------------------------
1018$Lang{Email_Summary} = "BackupPC: Email Summary";
1019
1020# -----------------------------------
1021#  !! ERROR messages !!
1022# -----------------------------------
1023$Lang{BackupPC__Lib__new_failed__check_apache_error_log} = "BackupPC::Lib->new failed: check apache error_log\n";
1024$Lang{Wrong_user__my_userid_is___} =
1025              "Wrong user: my userid is \$>, instead of \$uid"
1026            . "(\$Conf{BackupPCUser})\n";
1027# $Lang{Only_privileged_users_can_view_PC_summaries} = "Only privileged users can view PC summaries.";
1028$Lang{Only_privileged_users_can_stop_or_start_backups} =
1029                  "Only privileged users can stop or start backups on"
1030		. " \${EscHTML(\$host)}.";
1031$Lang{Invalid_number__num} = "Invalid number \${EscHTML(\$In{num})}";
1032$Lang{Unable_to_open__file__configuration_problem} = "Unable to open \$file: configuration problem?";
1033$Lang{Only_privileged_users_can_view_log_or_config_files} = "Only privileged users can view log or config files.";
1034$Lang{Only_privileged_users_can_view_log_files} = "Only privileged users can view log files.";
1035$Lang{Only_privileged_users_can_view_email_summaries} = "Only privileged users can view email summaries.";
1036$Lang{Only_privileged_users_can_browse_backup_files} = "Only privileged users can browse backup files"
1037                . " for host \${EscHTML(\$In{host})}.";
1038$Lang{Only_privileged_users_can_delete_backups} = "Only privileged users can delete backups"
1039                . " of host \${EscHTML(\$host)}.";
1040$Lang{Empty_host_name} = "Empty host name.";
1041$Lang{Directory___EscHTML} = "Directory \${EscHTML(\"\$TopDir/pc/\$host/\$num\")}"
1042		    . " is empty";
1043$Lang{Can_t_browse_bad_directory_name2} = "Can\'t browse bad directory name"
1044	            . " \${EscHTML(\$relDir)}";
1045$Lang{Only_privileged_users_can_restore_backup_files} = "Only privileged users can restore backup files"
1046                . " for host \${EscHTML(\$In{host})}.";
1047$Lang{Bad_host_name} = "Bad host name \${EscHTML(\$host)}";
1048$Lang{You_haven_t_selected_any_files__please_go_Back_to} = "You haven\'t selected any files; please go Back to"
1049                . " select some files.";
1050$Lang{You_haven_t_selected_any_hosts} = "You haven\'t selected any hosts; please go Back to"
1051                . " select some hosts.";
1052$Lang{Nice_try__but_you_can_t_put} = "Nice try, but you can\'t put \'..\' in any of the file names";
1053$Lang{Host__doesn_t_exist} = "Host \${EscHTML(\$In{hostDest})} doesn\'t exist";
1054$Lang{You_don_t_have_permission_to_restore_onto_host} = "You don\'t have permission to restore onto host"
1055		    . " \${EscHTML(\$In{hostDest})}";
1056$Lang{Can_t_open_create__openPath} = "Can\'t open/create "
1057		. "\${EscHTML(\"\$openPath\")}";
1058$Lang{Only_privileged_users_can_restore_backup_files2} = "Only privileged users can restore backup files"
1059                . " for host \${EscHTML(\$host)}.";
1060$Lang{Empty_host_name} = "Empty host name";
1061$Lang{Unknown_host_or_user} = "Unknown host or user \${EscHTML(\$host)}";
1062$Lang{Only_privileged_users_can_view_information_about} = "Only privileged users can view information about"
1063                . " host \${EscHTML(\$host)}." ;
1064$Lang{Only_privileged_users_can_view_archive_information} = "Only privileged users can view archive information.";
1065$Lang{Only_privileged_users_can_view_restore_information} = "Only privileged users can view restore information.";
1066$Lang{Restore_number__num_for_host__does_not_exist} = "Restore number \$num for host \${EscHTML(\$host)} does"
1067	        . " not exist.";
1068$Lang{Archive_number__num_for_host__does_not_exist} = "Archive number \$num for host \${EscHTML(\$host)} does"
1069                . " not exist.";
1070$Lang{Can_t_find_IP_address_for} = "Can\'t find IP address for \${EscHTML(\$host)}";
1071$Lang{host_is_a_DHCP_host} = <<EOF;
1072\$host is a DHCP host, and I don\'t know its IP address.  I checked the
1073netbios name of \$ENV{REMOTE_ADDR}\$tryIP, and found that that machine
1074is not \$host.
1075<p>
1076Until I see \$host at a particular DHCP address, you can only
1077start this request from the client machine itself.
1078EOF
1079
1080# ------------------------------------
1081# !! Server Mesg !!
1082# ------------------------------------
1083
1084$Lang{Backup_requested_on_DHCP__host} = "Backup requested on DHCP \$host (\$In{hostIP}) by"
1085		                      . " \$User from \$ENV{REMOTE_ADDR}";
1086$Lang{Backup_requested_on__host_by__User} = "Backup requested on \$host by \$User";
1087$Lang{Backup_stopped_dequeued_on__host_by__User} = "Backup stopped/dequeued on \$host by \$User";
1088$Lang{Restore_requested_to_host__hostDest__backup___num} = "Restore requested to host \$hostDest, backup #\$num,"
1089	     . " by \$User from \$ENV{REMOTE_ADDR}";
1090$Lang{Delete_requested_for_backup_of__host_by__User} = "Delete requested for backup #\$num of \$host"
1091             . " by \$User from \$ENV{REMOTE_ADDR}";
1092$Lang{Archive_requested} = "Archive requested by \$User from \$ENV{REMOTE_ADDR}";
1093
1094# -------------------------------------------------
1095# ------- Stuff that was forgotten ----------------
1096# -------------------------------------------------
1097
1098$Lang{Status} = "Status";
1099$Lang{PC_Summary} = "Host Summary";
1100$Lang{LOG_file} = "LOG file";
1101$Lang{LOG_files} = "LOG files";
1102$Lang{Old_LOGs} = "Old LOGs";
1103$Lang{Email_summary} = "Email summary";
1104$Lang{Config_file} = "Config file";
1105# $Lang{Hosts_file} = "Hosts file";
1106$Lang{Current_queues} = "Current queues";
1107$Lang{Documentation} = "Documentation";
1108
1109#$Lang{Host_or_User_name} = "<small>Host or User name:</small>";
1110$Lang{Go} = "Go";
1111$Lang{Hosts} = "Hosts";
1112$Lang{Select_a_host} = "Select a host...";
1113
1114$Lang{There_have_been_no_archives} = "<h2> There have been no archives </h2>\n";
1115$Lang{This_PC_has_never_been_backed_up} = "<h2> This PC has never been backed up!! </h2>\n";
1116$Lang{This_PC_is_used_by} = "<li>This PC is used by \${UserLink(\$user)}";
1117
1118$Lang{Extracting_only_Errors} = "(Extracting only Errors)";
1119$Lang{XferLOG} = "XferLOG";
1120$Lang{Errors}  = "Errors";
1121
1122# ------------
1123$Lang{Last_email_sent_to__was_at___subject} = <<EOF;
1124<li>Last email sent to \${UserLink(\$user)} was at \$mailTime, subject "\$subj".
1125EOF
1126# ------------
1127$Lang{The_command_cmd_is_currently_running_for_started} = <<EOF;
1128<li>The command \$cmd is currently running for \$host, started \$startTime.
1129EOF
1130
1131# -----------
1132$Lang{Host_host_is_queued_on_the_background_queue_will_be_backed_up_soon} = <<EOF;
1133<li>Host \$host is queued on the background queue (will be backed up soon).
1134EOF
1135
1136# ----------
1137$Lang{Host_host_is_queued_on_the_user_queue__will_be_backed_up_soon} = <<EOF;
1138<li>Host \$host is queued on the user queue (will be backed up soon).
1139EOF
1140
1141# ---------
1142$Lang{A_command_for_host_is_on_the_command_queue_will_run_soon} = <<EOF;
1143<li>A command for \$host is on the command queue (will run soon).
1144EOF
1145
1146# --------
1147$Lang{Last_status_is_state_StatusHost_state_reason_as_of_startTime} = <<EOF;
1148<li>Last status is state \"\$Lang->{\$StatusHost{state}}\"\$reason as of \$startTime.
1149EOF
1150
1151# --------
1152$Lang{Last_error_is____EscHTML_StatusHost_error} = <<EOF;
1153<li>Last error is \"\${EscHTML(\$StatusHost{error})}\".
1154EOF
1155
1156# ------
1157$Lang{Pings_to_host_have_failed_StatusHost_deadCnt__consecutive_times} = <<EOF;
1158<li>Pings to \$host have failed \$StatusHost{deadCnt} consecutive times.
1159EOF
1160
1161# -----
1162$Lang{Prior_to_that__pings} = "Prior to that, pings";
1163
1164# -----
1165$Lang{priorStr_to_host_have_succeeded_StatusHostaliveCnt_consecutive_times} = <<EOF;
1166<li>\$priorStr to \$host have succeeded \$StatusHost{aliveCnt}
1167        consecutive times.
1168EOF
1169
1170$Lang{Because__host_has_been_on_the_network_at_least__Conf_BlackoutGoodCnt_consecutive_times___} = <<EOF;
1171<li>Because \$host has been on the network at least \$Conf{BlackoutGoodCnt}
1172consecutive times, it will not be backed up from \$blackoutStr.
1173EOF
1174
1175$Lang{__time0_to__time1_on__days} = "\$t0 to \$t1 on \$days";
1176
1177$Lang{Backups_are_deferred_for_hours_hours_change_this_number} = <<EOF;
1178<li>Backups are deferred for \$hours hours
1179(<a href=\"\$MyURL?action=Stop_Dequeue_Backup&host=\$host\">change this number</a>).
1180EOF
1181
1182$Lang{tryIP} = " and \$StatusHost{dhcpHostIP}";
1183
1184# $Lang{Host_Inhost} = "Host \$In{host}";
1185
1186$Lang{checkAll} = <<EOF;
1187<tr><td class="fviewborder">
1188<input type="checkbox" name="allFiles" onClick="return checkAll('allFiles');">&nbsp;Select all
1189</td><td colspan="5" align="center" class="fviewborder">
1190<input type="submit" name="Submit" value="Restore selected files">
1191</td></tr>
1192EOF
1193
1194$Lang{checkAllHosts} = <<EOF;
1195<tr><td class="fviewborder">
1196<input type="checkbox" name="allFiles" onClick="return checkAll('allFiles');">&nbsp;Select all
1197</td><td colspan="2" align="center" class="fviewborder">
1198<input type="submit" name="Submit" value="Archive selected hosts">
1199</td></tr>
1200EOF
1201
1202$Lang{fileHeader} = <<EOF;
1203    <tr class="fviewheader"><td align=center> Name</td>
1204       <td align="center"> Type</td>
1205       <td align="center"> Mode</td>
1206       <td align="center"> #</td>
1207       <td align="center"> Size</td>
1208       <td align="center"> Date modified</td>
1209    </tr>
1210EOF
1211
1212$Lang{Home} = "Home";
1213$Lang{Browse} = "Browse backups";
1214$Lang{Last_bad_XferLOG} = "Last bad XferLOG";
1215$Lang{Last_bad_XferLOG_errors_only} = "Last bad XferLOG (errors&nbsp;only)";
1216
1217$Lang{This_display_is_merged_with_backup} = <<EOF;
1218<li> This display is merged with backup #\$numF.
1219EOF
1220
1221$Lang{Visit_this_directory_in_backup} = <<EOF;
1222<li> Select the backup you wish to view: <select onChange="window.location=this.value">\$otherDirs </select>
1223EOF
1224
1225$Lang{Restore_Summary} = <<EOF;
1226\${h2("Restore Summary")}
1227<p>
1228Click on the restore number for more details.
1229<table class="tableStnd sortable" border cellspacing="1" cellpadding="3" width="80%">
1230<tr class="tableheader"><td align="center"> Restore# </td>
1231    <td align="center"> Result </td>
1232    <td align="right"> Start Date</td>
1233    <td align="right"> Dur/mins</td>
1234    <td align="right"> #files </td>
1235    <td align="right"> MiB </td>
1236    <td align="right"> #tar errs </td>
1237    <td align="right"> #xferErrs </td>
1238</tr>
1239\$restoreStr
1240</table>
1241<p>
1242EOF
1243
1244$Lang{Archive_Summary} = <<EOF;
1245\${h2("Archive Summary")}
1246<p>
1247Click on the archive number for more details.
1248<table class="tableStnd" border cellspacing="1" cellpadding="3" width="80%">
1249<tr class="tableheader"><td align="center"> Archive# </td>
1250    <td align="center"> Result </td>
1251    <td align="right"> Start Date</td>
1252    <td align="right"> Dur/mins</td>
1253</tr>
1254\$ArchiveStr
1255</table>
1256<p>
1257EOF
1258
1259$Lang{BackupPC__Documentation} = "BackupPC: Documentation";
1260
1261$Lang{No} = "no";
1262$Lang{Yes} = "yes";
1263
1264$Lang{The_directory_is_empty} = <<EOF;
1265<tr><td bgcolor="#ffffff">The directory \$dirDisplay is empty
1266</td></tr>
1267EOF
1268
1269#$Lang{on} = "on";
1270$Lang{off} = "off";
1271
1272$Lang{backupType_full}    = "full";
1273$Lang{backupType_incr}    = "incr";
1274$Lang{backupType_active}  = "active";
1275$Lang{backupType_partial} = "partial";
1276
1277$Lang{failed} = "failed";
1278$Lang{success} = "success";
1279$Lang{and} = "and";
1280
1281# ------
1282# Hosts states and reasons
1283$Lang{Status_idle} = "idle";
1284$Lang{Status_backup_starting} = "backup starting";
1285$Lang{Status_backup_in_progress} = "backup in progress";
1286$Lang{Status_restore_starting} = "restore starting";
1287$Lang{Status_restore_in_progress} = "restore in progress";
1288$Lang{Status_admin_pending} = "link pending";
1289$Lang{Status_admin_running} = "link running";
1290
1291$Lang{Reason_backup_done}    = "done";
1292$Lang{Reason_restore_done}   = "restore done";
1293$Lang{Reason_archive_done}   = "archive done";
1294$Lang{Reason_nothing_to_do}  = "idle";
1295$Lang{Reason_backup_failed}  = "backup failed";
1296$Lang{Reason_restore_failed} = "restore failed";
1297$Lang{Reason_archive_failed} = "archive failed";
1298$Lang{Reason_no_ping}        = "no ping";
1299$Lang{Reason_backup_canceled_by_user}  = "backup canceled by user";
1300$Lang{Reason_restore_canceled_by_user} = "restore canceled by user";
1301$Lang{Reason_archive_canceled_by_user} = "archive canceled by user";
1302$Lang{Disabled_OnlyManualBackups}  = "auto disabled";
1303$Lang{Disabled_AllBackupsDisabled} = "disabled";
1304
1305
1306# ---------
1307# Email messages
1308
1309# No backup ever
1310$Lang{EMailNoBackupEverSubj} = "BackupPC: no backups of \$host have succeeded";
1311$Lang{EMailNoBackupEverMesg} = <<'EOF';
1312To: $user$domain
1313cc:
1314Subject: $subj
1315$headers
1316Dear $userName,
1317
1318Your PC ($host) has never been successfully backed up by our
1319PC backup software.  PC backups should occur automatically
1320when your PC is connected to the network.  You should contact
1321computer support if:
1322
1323  - Your PC has been regularly connected to the network, meaning
1324    there is some configuration or setup problem preventing
1325    backups from occurring.
1326
1327  - You don't want your PC backed up and you want these email
1328    messages to stop.
1329
1330Otherwise, please make sure your PC is connected to the network
1331next time you are in the office.
1332
1333Regards,
1334BackupPC Genie
1335https://backuppc.github.io/backuppc
1336EOF
1337
1338# No recent backup
1339$Lang{EMailNoBackupRecentSubj} = "BackupPC: no recent backups on \$host";
1340$Lang{EMailNoBackupRecentMesg} = <<'EOF';
1341To: $user$domain
1342cc:
1343Subject: $subj
1344$headers
1345Dear $userName,
1346
1347Your PC ($host) has not been successfully backed up for $days days.
1348Your PC has been correctly backed up $numBackups times from $firstTime to $days days
1349ago.  PC backups should occur automatically when your PC is connected
1350to the network.
1351
1352If your PC has been connected for more than a few hours to the
1353network during the last $days days you should contact IS to find
1354out why backups are not working.
1355
1356Otherwise, if you are out of the office, there's not much you can
1357do, other than manually copying especially critical files to other
1358media.  You should be aware that any files you have created or
1359changed in the last $days days (including all new email and
1360attachments) cannot be restored if your PC disk crashes.
1361
1362Regards,
1363BackupPC Genie
1364https://backuppc.github.io/backuppc
1365EOF
1366
1367# Old Outlook files
1368$Lang{EMailOutlookBackupSubj} = "BackupPC: Outlook files on \$host need to be backed up";
1369$Lang{EMailOutlookBackupMesg} = <<'EOF';
1370To: $user$domain
1371cc:
1372Subject: $subj
1373$headers
1374Dear $userName,
1375
1376The Outlook files on your PC have $howLong.
1377These files contain all your email, attachments, contact and calendar
1378information.  Your PC has been correctly backed up $numBackups times from
1379$firstTime to $lastTime days ago.  However, Outlook locks all its files when
1380it is running, preventing these files from being backed up.
1381
1382It is recommended you backup the Outlook files when you are connected
1383to the network by exiting Outlook and all other applications, and,
1384using just your browser, go to this link:
1385
1386    $CgiURL?host=$host
1387
1388Select "Start Incr Backup" twice to start a new incremental backup.
1389You can select "Return to $host page" and then hit "reload" to check
1390the status of the backup.  It should take just a few minutes to
1391complete.
1392
1393Regards,
1394BackupPC Genie
1395https://backuppc.github.io/backuppc
1396EOF
1397
1398$Lang{howLong_not_been_backed_up} = "not been backed up successfully";
1399$Lang{howLong_not_been_backed_up_for_days_days} = "not been backed up for \$days days";
1400
1401#######################################################################
1402# RSS strings
1403#######################################################################
1404$Lang{RSS_Doc_Title}       = "BackupPC Server";
1405$Lang{RSS_Doc_Description} = "RSS feed for BackupPC";
1406$Lang{RSS_Host_Summary}    = <<EOF;
1407Full Count: \$fullCnt;
1408Full Age/days: \$fullAge;
1409Full Size/GiB: \$fullSize;
1410Speed MiB/sec: \$fullRate;
1411Incr Count: \$incrCnt;
1412Incr Age/Days: \$incrAge;
1413State: \$host_state;
1414Disabled: \$host_disabled;
1415Last Attempt: \$host_last_attempt;
1416EOF
1417
1418#######################################################################
1419# Configuration editor strings
1420#######################################################################
1421
1422$Lang{Only_privileged_users_can_edit_config_files} = "Only privileged users can edit configuration settings.";
1423$Lang{CfgEdit_Edit_Config} = "Edit Config";
1424$Lang{CfgEdit_Edit_Hosts}  = "Edit Hosts";
1425
1426$Lang{CfgEdit_Title_Server} = "Server";
1427$Lang{CfgEdit_Title_General_Parameters} = "General Parameters";
1428$Lang{CfgEdit_Title_Wakeup_Schedule} = "Wakeup Schedule";
1429$Lang{CfgEdit_Title_Concurrent_Jobs} = "Concurrent Jobs";
1430$Lang{CfgEdit_Title_Pool_Filesystem_Limits} = "Pool Filesystem Limits";
1431$Lang{CfgEdit_Title_Other_Parameters} = "Other Parameters";
1432$Lang{CfgEdit_Title_Remote_Apache_Settings} = "Remote Apache Settings";
1433$Lang{CfgEdit_Title_Program_Paths} = "Program Paths";
1434$Lang{CfgEdit_Title_Install_Paths} = "Install Paths";
1435$Lang{CfgEdit_Title_Email} = "Email";
1436$Lang{CfgEdit_Title_Email_settings} = "Email settings";
1437$Lang{CfgEdit_Title_Email_User_Messages} = "Email User Messages";
1438$Lang{CfgEdit_Title_CGI} = "CGI";
1439$Lang{CfgEdit_Title_Admin_Privileges} = "Admin Privileges";
1440$Lang{CfgEdit_Title_Page_Rendering} = "Page Rendering";
1441$Lang{CfgEdit_Title_Paths} = "Paths";
1442$Lang{CfgEdit_Title_User_URLs} = "User URLs";
1443$Lang{CfgEdit_Title_User_Config_Editing} = "User Config Editing";
1444$Lang{CfgEdit_Title_Xfer} = "Xfer";
1445$Lang{CfgEdit_Title_Xfer_Settings} = "Xfer Settings";
1446$Lang{CfgEdit_Title_Ftp_Settings} = "FTP Settings";
1447$Lang{CfgEdit_Title_Smb_Settings} = "Smb Settings";
1448$Lang{CfgEdit_Title_Tar_Settings} = "Tar Settings";
1449$Lang{CfgEdit_Title_Rsync_Settings} = "Rsync Settings";
1450$Lang{CfgEdit_Title_Rsyncd_Settings} = "Rsyncd Settings";
1451$Lang{CfgEdit_Title_Archive_Settings} = "Archive Settings";
1452$Lang{CfgEdit_Title_Include_Exclude} = "Include/Exclude";
1453$Lang{CfgEdit_Title_Smb_Paths_Commands} = "Smb Paths/Commands";
1454$Lang{CfgEdit_Title_Tar_Paths_Commands} = "Tar Paths/Commands";
1455$Lang{CfgEdit_Title_Rsync_Paths_Commands_Args} = "Rsync Paths/Commands/Args";
1456$Lang{CfgEdit_Title_Rsyncd_Port_Args} = "Rsyncd Port/Args";
1457$Lang{CfgEdit_Title_Archive_Paths_Commands} = "Archive Paths/Commands";
1458$Lang{CfgEdit_Title_Schedule} = "Schedule";
1459$Lang{CfgEdit_Title_Full_Backups} = "Full Backups";
1460$Lang{CfgEdit_Title_Incremental_Backups} = "Incremental Backups";
1461$Lang{CfgEdit_Title_Blackouts} = "Blackouts";
1462$Lang{CfgEdit_Title_Other} = "Other";
1463$Lang{CfgEdit_Title_Backup_Settings} = "Backup Settings";
1464$Lang{CfgEdit_Title_Client_Lookup} = "Client Lookup";
1465$Lang{CfgEdit_Title_User_Commands} = "User Commands";
1466$Lang{CfgEdit_Title_Hosts} = "Hosts";
1467
1468$Lang{CfgEdit_Hosts_Comment} = <<EOF;
1469To add a new host, select Add and then enter the name.  To start with
1470the per-host configuration from another host, enter the host name
1471as NEWHOST=COPYHOST.  This will overwrite any existing per-host
1472configuration for NEWHOST.  You can also do this for an existing
1473host.  To delete a host, hit the Delete button.  For Add, Delete,
1474and configuration copy, changes don't take effect until you select
1475Save.  None of the deleted host's backups will be removed,
1476so if you accidently delete a host, simply re-add it.  To completely
1477remove a host's backups, you need to manually remove the files
1478below \$topDir/pc/HOST
1479EOF
1480
1481$Lang{CfgEdit_Header_Main} = <<EOF;
1482\${h1("Main Configuration Editor")}
1483EOF
1484
1485$Lang{CfgEdit_Header_Host} = <<EOF;
1486\${h1("Host \$host Configuration Editor")}
1487<p>
1488Note: Check Override if you want to modify a value specific to this host.
1489<p>
1490EOF
1491
1492$Lang{CfgEdit_Button_Save}     = "Save";
1493$Lang{CfgEdit_Button_Insert}   = "Insert";
1494$Lang{CfgEdit_Button_Delete}   = "Delete";
1495$Lang{CfgEdit_Button_Add}      = "Add";
1496$Lang{CfgEdit_Button_Override} = "Override";
1497$Lang{CfgEdit_Button_New_Key}  = "New Key";
1498$Lang{CfgEdit_Button_New_Share} = "New ShareName or '*'";
1499
1500$Lang{CfgEdit_Error_No_Save}
1501            = "Error: No save due to errors";
1502$Lang{CfgEdit_Error__must_be_an_integer}
1503            = "Error: \$var must be an integer";
1504$Lang{CfgEdit_Error__must_be_real_valued_number}
1505            = "Error: \$var must be a real-valued number";
1506$Lang{CfgEdit_Error__entry__must_be_an_integer}
1507            = "Error: \$var entry \$k must be an integer";
1508$Lang{CfgEdit_Error__entry__must_be_real_valued_number}
1509            = "Error: \$var entry \$k must be a real-valued number";
1510$Lang{CfgEdit_Error__must_be_executable_program}
1511            = "Error: \$var must be a valid executable path";
1512$Lang{CfgEdit_Error__must_be_valid_option}
1513            = "Error: \$var must be a valid option";
1514$Lang{CfgEdit_Error_Copy_host_does_not_exist}
1515            = "Copy host \$copyHost doesn't exist; creating full host name \$fullHost.  Delete this host if that is not what you wanted.";
1516
1517$Lang{CfgEdit_Log_Copy_host_config}
1518            = "\$User copied config from host \$fromHost to \$host\n";
1519$Lang{CfgEdit_Log_Delete_param}
1520            = "\$User deleted \$p from \$conf\n";
1521$Lang{CfgEdit_Log_Add_param_value}
1522            = "\$User added \$p to \$conf, set to \$value\n";
1523$Lang{CfgEdit_Log_Change_param_value}
1524            = "\$User changed \$p in \$conf to \$valueNew from \$valueOld\n";
1525$Lang{CfgEdit_Log_Host_Delete}
1526            = "\$User deleted host \$host\n";
1527$Lang{CfgEdit_Log_Host_Change}
1528            = "\$User host \$host changed \$key from \$valueOld to \$valueNew\n";
1529$Lang{CfgEdit_Log_Host_Add}
1530            = "\$User added host \$host: \$value\n";
1531
1532#end of lang_en.pm
1533