| 
				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/.trash/app.bak.13/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));
    }
}