This commit is contained in:
sebastian 2006-03-20 17:17:25 +00:00
parent 50af857cda
commit 388a9fcf37
10 changed files with 221 additions and 32 deletions

View file

@ -0,0 +1,94 @@
<?php
$mask = array(
'BACKUP.schedule' => array(
array(
'element' => 'act',
'type' => 'hidden',
'constant' => 'BACKUP.schedule'
),
array(
'element' => 'mon',
'type' => 'checkbox',
'label' => 'Mon',
'groupit' => true
),
array(
'element' => 'tue',
'type' => 'checkbox',
'label' => 'Tue',
'groupit' => true
),
array(
'element' => 'wed',
'type' => 'checkbox',
'label' => 'Wed',
'groupit' => true
),
array(
'element' => 'thu',
'type' => 'checkbox',
'label' => 'Thu',
'groupit' => true
),
array(
'element' => 'fri',
'type' => 'checkbox',
'label' => 'Fri',
'groupit' => true
),
array(
'element' => 'sat',
'type' => 'checkbox',
'label' => 'Sat',
'groupit' => true
),
array(
'element' => 'sun',
'type' => 'checkbox',
'label' => 'Sun',
'groupit' => true
),
array(
'group' => array('mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'),
'label' => 'Weeksdays'
),
array(
'element' => 'date',
'type' => 'date',
'label' => 'Month/Day',
'options' => array(
'format' => 'md',
'addEmptyOption' => true,
'emptyOptionValue' => '*',
'emptyOptionText' => '*'
)
),
array(
'element' => 'time',
'type' => 'date',
'label' => 'Hour/Minute',
'options' => array(
'format' => 'Hi',
)
),
array(
'element' =>'cancel',
'type' =>'button',
'label' =>'Cancel',
'attributes'=>array('onclick' => 'location.href="'.UI_BROWSER.'?act=BACKUP"'),
'groupit' => TRUE
),
array(
'element' =>'Submit',
'type' =>'submit',
'label' =>'Submit',
'groupit' => TRUE
),
array(
'group' => array('cancel', 'Submit'),
'label' => ' '
),
)
);
?>

View file

@ -171,6 +171,14 @@ if (is_array($_REQUEST['popup'])){
$uiBrowser->EXCHANGE->setFile($_REQUEST['file']);
$Smarty->display('backup/fileBrowser.tpl');
break;
case 'BACKUP.createBackupDownloadPopup':
$Smarty->display('backup/download.tpl');
break;
case 'BACKUP.createBackupDownloadNow':
$uiBrowser->EXCHANGE->createBackupDownload();
break;
}
}
die();
@ -278,7 +286,8 @@ if ($uiBrowser->userid) {
break;
case "BACKUP":
case "RESTORE":
case "RESTORE":
case "BACKUP.schedule":
$Smarty->assign('act', $_REQUEST['act']);
break;

View file

@ -289,7 +289,7 @@ switch($_REQUEST['act']){
$uiHandler->SCHEDULER->setReload();
break;
case "EXCHANGE.createBackupOpen":
case "BACKUP.createBackupOpen":
$uiHandler->EXCHANGE->createBackupOpen();
$uiHandler->redirUrl = UI_BROWSER.'?act=BACKUP';
break;

View file

@ -21,17 +21,20 @@
{/if}
{if $EXCHANGE->checkTarget() === true}
<p><input type="button" class="button_large" value="##Start backup##" onClick="location.href='{$UI_HANDLER}?act=EXCHANGE.createBackupOpen'"></p>
<p><input type="button" class="button_large" value="##Start backup##" onClick="location.href='{$UI_HANDLER}?act=BACKUP.createBackupOpen'"></p>
{/if}
<p><input type="button" class="button_large" value="##Set backup location##" onClick="popup('{$UI_BROWSER}?popup[]=BACKUP.setLocation', 'BACKUP.selectLocation', 500, 400)"></p>
<p><input type="button" class="button_large" value="##Schedule backup##" onClick="location.href='{$UI_BROWSER}?act=BACKUP.schedule'"></p>
<p><input type="button" class="button_large" value="##Set backup location##" onClick="popup('{$UI_BROWSER}?popup[]=BACKUP.setLocation', 'BACKUP.selectLocation', 600, 600)"></p>
{else}
{assign var='status' value=$EXCHANGE->createBackupCheck()}
Backup status: {$status.status}
{if $status.status === 'success'}
<p><input type="button" class="button" value="##Download##" onCLick="hpopup('{$status.tmpfile}')"></p>
<p><input type="button" class="button" value="##Download##" onCLick="hpopup('{$UI_BROWSER}?popup[]=BACKUP.createBackupDownloadPopup')"></p>
{/if}
{/if}

View file

@ -0,0 +1,10 @@
<html>
<body>
<script language="javascript">
location.href="{$UI_BROWSER}?popup[]=BACKUP.createBackupDownloadNow";
setTimeout("window.close()", 5000);
</script
</body>
</html>

View file

@ -7,9 +7,6 @@ if (window.scrollbars.visible == false) {
location.reload();
}
{/literal}
{if $EXCHANGE->errorMsg}
alert("{$EXCHANGE->errorMsg|escape:'quotes'}");
{/if}
</script>
<table height="100%" width="100%">
@ -17,31 +14,37 @@ if (window.scrollbars.visible == false) {
<td>
<center>
<table width="100%" height="100%">
<tr><td colspan="4"><h1>##File browser##</h1></td></tr>
<tr><td colspan="4" style="white-space: nowrap;">
<form name="filebrowser">
##Filename:## <br>
<input type='text' name='target' size='50' value='{$EXCHANGE->getPath()}'>
<input type='button' class='button' value='##OK##' onClick="opener.location.href='{$UI_BROWSER}?act=BACKUP.setTarget&target='+filebrowser.target.value; window.close()">
</form>
</td></tr>
<tr><td colspan=""><h1>##File browser##</h1></td></tr>
<tr>
<td colspan="6" style="white-space: nowrap;">
<form name="filebrowser" onSubmit="opener.location.href='{$UI_BROWSER}?act=BACKUP.setTarget&target='+filebrowser.target.value; window.close()">
##Filename:## <br>
<input type='text' name='target' size='50' value='{$EXCHANGE->getPath()}'>
<input type='submit' class='button' value='##OK##'>
</form>
</td>
</tr>
{assign var='currdir' value=$EXCHANGE->listFolder()}
{foreach from=$currdir.subdirs item=entry key=name}
<tr>
<td><b><a href="{$UI_BROWSER}?popup[]=BACKUP.setLocation&cd={$name|escape:"url"}">{$name}</b></td>
<td>{if $entry.r}r{/if}</td>
<td>{if $entry.w}w{/if}</td>
<tr class="{cycle values='blue1, blue2'}">
<td style="border-right: 1px solid #333;"><b><a href="{$UI_BROWSER}?popup[]=BACKUP.setLocation&cd={$name|escape:"url"}">{$name|truncate:50:"...":true}</b></td>
<td style="border-right: 1px solid #333;">{$entry.u|truncate:10:'...':true}</td>
<td style="border-right: 1px solid #333;">{$entry.g|truncate:10:'...':true}</td>
<td style="border-right: 1px solid #333;">{if $entry.r}r{/if}</td>
<td style="border-right: 1px solid #333;">{if $entry.w}w{/if}</td>
<td>{if $entry.x}x{/if}</td>
</tr>
{/foreach}
{foreach from=$currdir.files item=entry key=name}
<tr>
<td><a href="{$UI_BROWSER}?popup[]=BACKUP.setFile&file={$name|escape:"url"}">{$name}</td>
<td>{if $entry.r}r{/if}</td>
<td>{if $entry.w}w{/if}</td>
<tr class="{cycle values='blue1, blue2'}">
<td style="border-right: 1px solid #333;"><a href="{$UI_BROWSER}?popup[]=BACKUP.setFile&file={$name|escape:"url"}">{$name|truncate:50:"...":true}</td>
<td style="border-right: 1px solid #333;">{$entry.u|truncate:10:'...':true}</td>
<td style="border-right: 1px solid #333;">{$entry.g|truncate:10:'...':true}</td>
<td style="border-right: 1px solid #333;">{if $entry.r}r{/if}</td>
<td style="border-right: 1px solid #333;">{if $entry.w}w{/if}</td>
<td>{if $entry.x}x{/if}</td>
</tr>
{/foreach}
@ -52,5 +55,11 @@ if (window.scrollbars.visible == false) {
</tr>
</table>
<script language="javascript">
{if $EXCHANGE->errorMsg}
alert("{$EXCHANGE->errorMsg|escape:'quotes'}");
{/if}
</script>
</body>
</html>

View file

@ -0,0 +1,11 @@
<div class="content">
<div class="container_elements" style="width: 607px;">
<h1>##Schedule backup##</h1>
{assign var='dynform' value=$EXCHANGE->getScheduleBackupForm()}
{include file="sub/dynForm_plain.tpl"}
</div>
</div>

View file

@ -59,6 +59,10 @@
{include file="backup/backup.tpl"}
{/if}
{if $act === 'BACKUP.schedule'}
{include file="backup/schedule.tpl"}
{/if}
{if $act === 'RESTORE'}
{include file="backup/restore.tpl"}
{/if}

View file

@ -210,7 +210,7 @@ class uiBase
if (!$v['groupit']) $form->addElement($elem[$v['element']]);
} elseif ($v['type']=='checkbox' || $v['type']=='static') {
$elem[$v['element']] =& $form->createElement($v['type'], $v['element'], tra($v['label']), $v['text'], $v['attributes']);
$elem[$v['element']] =& $form->createElement($v['type'], $v['element'], tra($v['label']), tra($v['text']), $v['attributes']);
if (!$v['groupit']) $form->addElement($elem[$v['element']]);
} elseif (isset($v['type'])) {

View file

@ -13,6 +13,8 @@ class uiExchange
$this->test = false;
}
// GB wrapper emthods
function getBackupToken()
{
if ($this->test) return "12345";
@ -66,6 +68,19 @@ class uiExchange
return $res;
}
// Download the backup
function createBackupDownload()
{
$check = $this->createBackupCheck();
header('Content-Length: '.filesize($check['tmpfile']));
header("Content-Transfer-Encoding: binary");
header('Content-Disposition: attachment; filename="'.basename($check['tmpfile']).'"');
readfile($check['tmpfile']);
}
function createBackupClose()
{
$token = $token = $this->getBackupToken();
@ -89,16 +104,39 @@ class uiExchange
return $status;
}
// backup schduler methods
function getScheduleBackupForm()
{
include 'formmask/exchange.inc.php';
$form = new HTML_QuickForm('BACKUP_Schedule', UI_STANDARD_FORM_METHOD, UI_HANDLER);
$this->Base->_parseArr2Form($form, $mask['BACKUP.schedule']);
$renderer =& new HTML_QuickForm_Renderer_Array(true, true);
$form->accept($renderer);
return $renderer->toArray();
}
// file browser methods
function setFolder($subfolder)
{
$this->file = false;
$newfolder = realpath($this->folder.'/'.$subfolder);
if (!is_dir($this->folder.'/'.$subfolder)) {
if (!is_dir($newfolder)) {
# F5 pressed
return false;
}
$this->folder = realpath($this->folder.'/'.$subfolder);
if (!is_executable($newfolder)) {
$this->errorMsg = tra('$1: cd: permission denied', $newfolder);
return false;
}
$this->folder = $newfolder;
}
function setFile($file)
@ -109,7 +147,7 @@ class uiExchange
return true;
}
$this->file = false;
$this->errorMsg = tra('$1: Permission denied', $file);
$this->errorMsg = tra('$1: open: permission denied', $file);
return false;
}
@ -154,15 +192,20 @@ class uiExchange
function listFolder()
{
if (!is_readable($this->folder)) {
$this->errorMsg = tra('$1: ls: permission denied', $this->folder);
return array('subdirs' => array('..' => array()), 'files' => array());
}
$d = dir($this->folder);
while (false !== ($entry = $d->read())) {
$loc = $this->folder.'/'.$entry;
if (is_dir($loc)) {
$dirs[$entry] = $this->_getPerm($loc);
$dirs[$entry] = $this->_getFileProperty($loc);
} else {
$files[$entry] = $this->_getPerm($loc);
$files[$entry] = $this->_getFileProperty($loc);
}
}
@ -173,12 +216,18 @@ class uiExchange
return array('subdirs' => $dirs, 'files' => $files);
}
function _getPerm($loc)
function _getFileProperty($loc)
{
$uarr = posix_getpwuid(fileowner($loc));
$user = $uarr['name'];
$grarr = posix_getgrgid(filegroup($loc));
$group = $grarr['name'];
return array(
'r' => is_readable($loc),
'w' => is_writable($loc),
'x' => is_executable($loc),
'x' => is_executable($loc),
'u' => $user,
'g' => $group,
);
}