working on #1608
This commit is contained in:
parent
50af857cda
commit
388a9fcf37
10 changed files with 221 additions and 32 deletions
94
livesupport/src/modules/htmlUI/var/formmask/exchange.inc.php
Normal file
94
livesupport/src/modules/htmlUI/var/formmask/exchange.inc.php
Normal 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' => ' '
|
||||
),
|
||||
)
|
||||
);
|
||||
?>
|
||||
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
<html>
|
||||
<body>
|
||||
|
||||
<script language="javascript">
|
||||
location.href="{$UI_BROWSER}?popup[]=BACKUP.createBackupDownloadNow";
|
||||
setTimeout("window.close()", 5000);
|
||||
</script
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -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>
|
|
@ -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>
|
||||
|
|
@ -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}
|
||||
|
|
|
@ -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'])) {
|
||||
|
|
|
@ -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,
|
||||
);
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue