|
Server : Apache System : Linux server.mata-lashes.com 3.10.0-1160.90.1.el7.x86_64 #1 SMP Thu May 4 15:21:22 UTC 2023 x86_64 User : matalashes ( 1004) PHP Version : 8.1.29 Disable Function : NONE Directory : /home/matalashes/www/simulasikite.mata-lashes.com/app.bak/Controllers/Store/ |
Upload File : |
<?php
namespace App\Controllers\Store;
use \App\Controllers\Ps\PS_Controller;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;
use Config\Database;
use ZipArchive;
class Storebackupdb extends PS_Controller
{
private $id_column_name = 'ps_sr_id';
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
parent::initController($request, $response, $logger); // TODO: Change the autogenerated stub
parent::setPageTitleBreadcrumb(true, 'Backup Database', array('l1' => 'Store', 'l2' => 'Backup Database'));
parent::setURLActionTable($this->class);
parent::setContentView($this->class);
parent::setBaseContAndModel($this->class, 'PsStoreRole');
$this->validation_input = $this->validation->setRules([
"role_name" => [
'label' => 'Role Name',
'rules' => 'required|is_unique[ps_store_role.role_name]'
]
]);
}
public function index()
{
parent::filterStoreLoad();
parent::indexLoad();
}
public function action($state = '', $id = '')
{
$id = $this->myLib->reveal_id($id);
if ($id == 'override404') {
return redirect()->route('override404');
}
if ($state == 'add') {
parent::stateAdd();
} else if ($state == 'edit') {
parent::stateEdit($id);
} else if ($state == 'delete') {
parent::stateDelete($id);
} else if ($state == 'restore') {
parent::stateRestore($this->id_column_name, $id);
} else if ($state == 'deletepermanent') {
parent::stateDeletePermanent($this->id_column_name, $id);
} else if ($state == 'view') {
parent::stateView($id);
} else {
return redirect()->route('override404');
}
}
public function trash()
{
parent::filterStoreLoad();
parent::trashView();
}
public function backupdb()
{
$db = Database::connect();
$tables = $db->listTables();
$sqlDump = "-- Backup database generated by System KITE 4\n";
$sqlDump .= "-- Date: " . date('Y-m-d H:i:s') . "\n\n";
foreach ($tables as $table) {
$sqlDump .= "DROP TABLE IF EXISTS `$table`;\n";
$create = $db->query("SHOW CREATE TABLE `$table`")->getRowArray();
$sqlDump .= $create['Create Table'] . ";\n\n";
$builder = $db->table($table);
$rows = $builder->get()->getResultArray();
foreach ($rows as $row) {
$columns = array_map(fn($col) => "`$col`", array_keys($row));
$values = array_map(fn($val) => $db->escape($val), array_values($row));
$sqlDump .= "INSERT INTO `$table` (" . implode(", ", $columns) . ") VALUES (" . implode(", ", $values) . ");\n";
}
$sqlDump .= "\n";
}
// Simpan file sementara
$filename = 'backup-' . date('Y-m-d-His');
$sqlFile = WRITEPATH . "$filename.sql";
file_put_contents($sqlFile, $sqlDump);
// Buat ZIP
$zipFile = WRITEPATH . "$filename.zip";
$zip = new ZipArchive();
if ($zip->open($zipFile, ZipArchive::CREATE) === TRUE) {
$zip->addFile($sqlFile, "$filename.sql");
$zip->close();
} else {
return $this->response->setStatusCode(500)->setBody("Gagal membuat ZIP file.");
}
// Hapus file SQL setelah dikompres
unlink($sqlFile);
// Kirim file ZIP untuk didownload
return $this->response
->setHeader('Content-Type', 'application/zip')
->setHeader('Content-Disposition', 'attachment; filename="' . basename($zipFile) . '"')
->setBody(file_get_contents($zipFile));
}
}