Files
kupshop/admin/lists/DbbackupList.php
2025-08-02 16:30:27 +02:00

153 lines
4.7 KiB
PHP

<?php
use KupShop\AdminBundle\AdminList\BaseList;
use KupShop\KupShopBundle\Util\HtmlBuilder\HTML;
class DbbackupList extends BaseList
{
protected $template = 'list/dbbackup.tpl';
protected $tableDef = [
'id' => '',
'fields' => [
'Záloha' => ['field' => 'name'],
'Velikost' => ['field' => 'size', 'render' => 'renderSize'],
'Datum vytvoření' => ['field' => 'date', 'render' => 'renderTimestamp'],
'Smazat zálohu' => ['field' => 'name', 'render' => 'renderDelete'],
'Pojmenovat zálohu' => ['field' => 'name', 'render' => 'renderRename'],
'Obnovit zálohu databáze' => ['field' => 'name', 'render' => 'renderRestore'],
'Stáhnout' => ['field' => 'download', 'render' => 'renderDownload'],
],
'class' => 'dbbackup',
];
protected $showExport = false;
public function renderDownload($values, $column)
{
return HTML::create('a')
->attr('href', 'launch.php?s=dbbackup.php&acn=download&file='.$values['name'])
->text('Stáhnout');
}
public function renderSize($values, $column)
{
return $this->getListRowValue($values, $column['field']).' kB';
}
public function renderTimestamp($values, $column)
{
return date('d.m.Y H:i:s', $this->getListRowValue($values, $column['field']));
}
public function renderDelete($values, $column)
{
if (findRight('OTH_BACKUP_ERASE')) {
$value = $this->getListRowValue($values, $column['field']);
return HTML::create('a')
->class('confirm')
->attr('title', 'Smazat zálohu')
->attr('href', 'launch.php?s=dbbackup.php&acn=do&do=erase&dbBackup='.urlencode($value))
->tag('span')
->class('btn btn-xs btn-secondary')
->tag('i')
->class('bi bi-trash')
->end()
->end();
}
return '';
}
public function renderRename($values, $column)
{
if (findRight('OTH_BACKUP_ERASE')) {
$value = $this->getListRowValue($values, $column['field']);
$name = preg_replace('/.sql(.bz2)?/i', '', $value);
return HTML::create('a')
->attr('data-rename', $name)
->attr('title', 'Pojmenovat zálohu')
->attr('href', 'launch.php?s=dbbackup.php&acn=do&do=rename&dbBackup='.urlencode($value))
->tag('span')
->class('btn btn-xs btn-secondary')
->tag('i')
->class('bi bi-tag')
->end()
->end();
}
return '';
}
public function renderRestore($values, $column)
{
if (findRight('OTH_BACKUP_REFRESH') && !isLive()) {
$value = $this->getListRowValue($values, $column['field']);
return HTML::create('a')
->class('confirm')
->attr('title', 'Obnovit zálohu databáze?
Pozor! Budou obnovena všechna data.
Veškeré změny provedené v e-shopu po datu zálohy budou ztraceny. Včetně objednávek, stránek a dalších.
Chcete pokračovat')
->attr('href', 'launch.php?s=dbbackup.php&acn=do&do=restore&dbBackup='.urlencode($value))
->tag('span')
->class('btn btn-xs btn-secondary')
->tag('i')
->class('bi bi-check-circle')
->end()
->end();
}
return '';
}
public function getSQL(Query\QueryBuilder $qb)
{
$SQL = [];
if ($Dir = @opendir($GLOBALS['cfg']['Path']['db_backup'])) {
$files = [];
while ($fileThis = @readdir($Dir)) {
if (!@is_dir($fileThis) && preg_match('/\\.(sql|gz|bz2)$/i', $fileThis)) {
$files[] = $fileThis;
}
}
foreach ($files as $file) {
$path = $GLOBALS['cfg']['Path']['db_backup'].$file;
$SQL[] = [
'name' => $file,
'date' => filemtime($path),
'size' => ceil(filesize($path) / 1000),
];
}
// Sort by creation date
usort($SQL, function ($a, $b) {
return $a['date'] > $b['date'] ? -1 : 1;
});
}
return ['SQL' => $SQL];
}
public function getQuery()
{
return sqlQueryBuilder();
}
public function handleExportDataFiles()
{
$exportDataFiles = \KupShop\KupShopBundle\Util\Compat\ServiceContainer::getService(\KupShop\AdminBundle\Util\Export\ExportDataFiles::class);
$exportDataFiles->export();
}
}