Files
accounting_dev/application/controllers/Setting.php
T
2026-05-26 08:07:45 +00:00

337 lines
10 KiB
PHP

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Setting extends CI_Controller {
public function __construct()
{
parent::__construct();
// Cek apakah user sudah login
if (!$this->session->userdata('logged_in')) {
redirect('login');
}
if (!check_permission('setting', 'can_view')) {
show_error('Anda tidak memiliki izin untuk mengakses halaman ini.', 403);
}
}
// ==========================
// MAIN PAGE
// ==========================
public function index()
{
if (!check_permission('setting', 'can_view')) {
show_error('Tidak memiliki izin untuk melihat detail.', 403);
}
// Ambil config id=1
$cfg = $this->db->get_where("config", ["id" => 1])->row();
// Jika tidak ada data config
$config = $cfg ?: $this->defaultConfig();
// Ambil template pesan
$template_pesan = $this->db
->order_by("id", "ASC")
->get("template_pesan")
->result();
$data = [
"active_menu" => "pengaturan",
"config" => $config,
"template_pesan" => $template_pesan
];
$this->load->view('partials/header', $data);
$this->load->view('setting/layout', $data);
$this->load->view('partials/footer');
}
// ===============================
// DEFAULT CONFIG
// ===============================
private function defaultConfig()
{
if (!check_permission('setting', 'can_view')) {
show_error('Tidak memiliki izin untuk melihat detail.', 403);
}
return (object)[
"nama_lembaga" => "",
"pimpinan_lembaga" => "",
"card_background" => "",
"card_orientation" => "landscape",
"wa_mode" => "official",
"wa_phone" => "",
"wa_phone_id" => "",
"wa_waba_id" => "",
"wa_access_token" => "",
"wa_endpoint" => "",
"wa_api_key" => ""
];
}
// ===============================
// 1. SIMPAN SETTING UMUM
// ===============================
public function save_umum()
{
if (!check_permission('setting', 'can_view')) {
show_error('Tidak memiliki izin untuk melihat detail.', 403);
}
$update = [
"nama_lembaga" => $this->input->post("nama_lembaga"),
"pimpinan_lembaga" => $this->input->post("pimpinan_lembaga"),
"updated_at" => date("Y-m-d H:i:s")
];
$this->db->where("id", 1)->update("config", $update);
redirect("setting");
}
// ===============================
// 2. SIMPAN CARD + UPLOAD BG
// ===============================
public function save_card()
{
if (!check_permission('setting', 'can_view')) {
show_error('Tidak memiliki izin untuk melihat detail.', 403);
}
$orientation = $this->input->post("card_orientation");
$bg = null;
// Jika ada upload file
if (!empty($_FILES["card_background"]["name"])) {
$config['upload_path'] = './uploads/card/';
$config['allowed_types'] = 'jpg|jpeg|png';
$config['file_name'] = 'background_' . time();
if (!is_dir('./uploads/card/')) {
mkdir('./uploads/card/', 0777, true);
}
$this->load->library('upload', $config);
if ($this->upload->do_upload('card_background')) {
$file = $this->upload->data();
$bg = "uploads/card/" . $file['file_name'];
}
}
// Data update
$data = [
"card_orientation" => $orientation,
"updated_at" => date("Y-m-d H:i:s")
];
// Jika ada gambar baru
if ($bg !== null) {
$data["card_background"] = $bg;
}
$this->db->where("id", 1)->update("config", $data);
redirect("setting");
}
// ===============================
// 3. SIMPAN SETTING WHATSAPP
// ===============================
public function save_whatsapp()
{
if (!check_permission('setting', 'can_view')) {
show_error('Tidak memiliki izin untuk melihat detail.', 403);
}
$mode = $this->input->post("wa_mode");
$data = [
"wa_mode" => $mode,
"updated_at" => date("Y-m-d H:i:s")
];
if ($mode == "official") {
$data["wa_phone"] = $this->input->post("wa_phone");
$data["wa_phone_id"] = $this->input->post("wa_phone_id");
$data["wa_waba_id"] = $this->input->post("wa_waba_id");
$data["wa_access_token"] = $this->input->post("wa_access_token");
// Kosongkan unofficial
$data["wa_endpoint"] = "";
$data["wa_api_key"] = "";
} else {
$data["wa_endpoint"] = $this->input->post("wa_endpoint");
$data["wa_api_key"] = $this->input->post("wa_api_key");
// Kosongkan official
$data["wa_phone"] = "";
$data["wa_phone_id"] = "";
$data["wa_waba_id"] = "";
$data["wa_access_token"] = "";
}
$this->db->where("id", 1)->update("config", $data);
redirect("setting");
}
// ===============================
// 4. UPDATE TEMPLATE PESAN
// ===============================
public function update_template_pesan()
{
if (!check_permission('setting', 'can_view')) {
show_error('Tidak memiliki izin untuk melihat detail.', 403);
}
$data = [
"nama_template" => $this->input->post("nama_template"),
"isi_template" => $this->input->post("isi_template")
];
$id = $this->input->post("id");
$this->db->where("id", $id)->update("template_pesan", $data);
redirect("setting");
}
public function cek_whatsapp_status()
{
if (!check_permission('setting', 'can_view')) {
show_error('Tidak memiliki izin untuk melihat detail.', 403);
}
$config = $this->db->get_where("config", ["id" => 1])->row();
if (!$config) {
echo json_encode([
"status" => "error",
"img" => base_url("uploads/whatsapp/disconnect.png"),
"msg" => "Config tidak ditemukan"
]);
return;
}
// Fungsi bantu call API
function callCurl($url, $fields)
{
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_POSTFIELDS => $fields,
CURLOPT_HTTPHEADER => array( 'Content-Type: application/x-www-form-urlencoded' ),
]);
$response = curl_exec($curl);
curl_close($curl);
return $response;
}
// 1. CEK STATUS
$response = callCurl(
$config->wa_endpoint . "getState",
"apiKey=" . $config->wa_api_key
);
$data = json_decode($response, true);
if (!$data || !isset($data['results']['state'])) {
echo json_encode([
"status" => "error",
"img" => base_url('uploads/whatsapp/disconnect.png'),
"msg" => "Gagal membaca respon server WA",
"data" => $data,
"url_key" => $config->wa_endpoint . ' ' . $config->wa_api_key
]);
return;
}
$state = $data['results']['state'];
// ==========================================================
// 1. CONNECTED → tampilkan gambar connected
// ==========================================================
if ($state == "CONNECTED") {
echo json_encode([
"status" => "CONNECTED",
"img" => base_url('uploads/whatsapp/connect.png')
]);
return;
}
// ==========================================================
// 2. SERVICE_OFF → tampilkan disconnect + mulai service
// ==========================================================
if ($state == "SERVICE_OFF") {
// Mulai service
callCurl(
$config->wa_endpoint . "serviceStart",
"apiKey=" . $config->wa_api_key
);
echo json_encode([
"status" => "SERVICE_OFF",
"img" => base_url('uploads/whatsapp/disconnect.png')
]);
return;
}
// ==========================================================
// 3. SERVICE_SCAN → ambil QR
// ==========================================================
if ($state == "SERVICE_SCAN") {
$responseQR = callCurl(
$config->wa_endpoint . "getQR",
"apiKey=" . $config->wa_api_key
);
$qrData = json_decode($responseQR, true);
if (!isset($qrData['results']['qrString'])) {
echo json_encode([
"status" => "SERVICE_SCAN",
"img" => base_url('uploads/whatsapp/map_loader.gif')
]);
return;
}
echo json_encode([
"status" => "SERVICE_SCAN",
"img" => $qrData['results']['qrString']
]);
return;
}
// ==========================================================
// 4. STATUS LAIN → tampilkan loader
// ==========================================================
echo json_encode([
"status" => "UNKNOWN",
"img" => base_url('uploads/whatsapp/map_loader.gif')
]);
}
}