Initial commit
This commit is contained in:
@@ -0,0 +1,336 @@
|
||||
<?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')
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user