433 lines
14 KiB
Plaintext
433 lines
14 KiB
Plaintext
<?php
|
|
class Packet extends MY_Controller
|
|
{
|
|
|
|
var $db_onedev;
|
|
public function index()
|
|
{
|
|
echo "Resultentry API";
|
|
}
|
|
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
$this->db_onedev = $this->load->database("onedev", true);
|
|
$this->db_log = $this->load->database("log", true);
|
|
$this->load->helper(array('form', 'url'));
|
|
}
|
|
|
|
public function error_log($data, $userid = 999)
|
|
{
|
|
|
|
$sql = "INSERT INTO ais_error_log (
|
|
AisErrorLogFnName,
|
|
AisErrorLogMessage,
|
|
AisErrorLogQuery,
|
|
AisErrorLogJson,
|
|
AisErrorLogUserID,
|
|
AisErrorLogCreated
|
|
)
|
|
VALUES(
|
|
?,
|
|
?,
|
|
?,
|
|
?,
|
|
?,
|
|
NOW()
|
|
)";
|
|
$qry = $this->db_log->query($sql, array($data['fn_name'], $data['message'], $data['query'], $data['json'], $userid));
|
|
//echo $this->db_log->last_query();
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Generic POST request function
|
|
* @param string $url API endpoint URL
|
|
* @param array $data Request payload
|
|
* @param array $headers Custom headers (optional)
|
|
* @return array Response from API
|
|
*/
|
|
public function post_request($url, $data = array(), $headers = array())
|
|
{
|
|
// Default headers
|
|
$default_headers = array(
|
|
'Content-Type: application/json'
|
|
);
|
|
|
|
// Merge custom headers with default headers
|
|
$final_headers = array_merge($default_headers, $headers);
|
|
|
|
// Initialize cURL
|
|
$ch = curl_init();
|
|
|
|
// Set cURL options
|
|
curl_setopt($ch, CURLOPT_URL, $url);
|
|
curl_setopt($ch, CURLOPT_POST, true);
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $final_headers);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
|
|
|
|
// Execute cURL request
|
|
$response = curl_exec($ch);
|
|
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|
$error = curl_error($ch);
|
|
|
|
// Close cURL
|
|
curl_close($ch);
|
|
|
|
// Prepare result
|
|
$result = array(
|
|
'success' => false,
|
|
'http_code' => $http_code,
|
|
'response' => null,
|
|
'error' => null
|
|
);
|
|
|
|
if ($error) {
|
|
$result['error'] = $error;
|
|
}
|
|
else {
|
|
$result = json_decode($response, true);
|
|
if ($result['status'] == 200) {
|
|
$result['success'] = true;
|
|
}
|
|
else {
|
|
$result['success'] = false;
|
|
}
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
public function get_request($url, $headers = array())
|
|
{
|
|
// Retrieve configuration
|
|
$config = $this->get_config();
|
|
$token = $config['AisConfigAuthToken'] ?? 'default-token';
|
|
$header_token = $config['AisConfigHeaderToken'];
|
|
|
|
// Default headers based on the curl command
|
|
$default_headers = array(
|
|
'Header-Token: ' . $header_token,
|
|
'Authorization: Bearer ' . $token
|
|
);
|
|
|
|
// Merge custom headers with default headers
|
|
$final_headers = array_merge($default_headers, $headers);
|
|
|
|
// Initialize cURL
|
|
$ch = curl_init();
|
|
|
|
// Set cURL options
|
|
curl_setopt($ch, CURLOPT_URL, $url);
|
|
curl_setopt($ch, CURLOPT_HTTPGET, true);
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $final_headers);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
|
|
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
|
|
|
|
// Execute cURL request
|
|
$response = curl_exec($ch);
|
|
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|
$error = curl_error($ch);
|
|
|
|
// Close cURL
|
|
curl_close($ch);
|
|
|
|
// Prepare result
|
|
$result = array(
|
|
'success' => false,
|
|
'http_code' => $http_code,
|
|
'response' => null,
|
|
'error' => null
|
|
);
|
|
|
|
if ($error) {
|
|
$result['error'] = $error;
|
|
}
|
|
else {
|
|
$decoded = json_decode($response, true);
|
|
$result['response'] = $decoded;
|
|
// Check if response is successful based on http code
|
|
if ($http_code === 200) {
|
|
$result['success'] = true;
|
|
}
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
function get_config()
|
|
{
|
|
$sql = "SELECT * FROM ais_config LIMIT 1";
|
|
$qry = $this->db_onedev->query($sql);
|
|
if (!$qry) {
|
|
$this->error_log(array('fn_name' => 'get_config', 'message' => 'ais_config select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999);
|
|
exit;
|
|
}
|
|
$dt_config = $qry->row_array();
|
|
return $dt_config;
|
|
}
|
|
|
|
/**
|
|
* POST request to auth API
|
|
* @param string $username Username for authentication
|
|
* @param string $password Password for authentication
|
|
* @return array Response from API
|
|
*/
|
|
public function post_auth()
|
|
{
|
|
$dt_config = $this->get_config();
|
|
$baseUrl = $dt_config['AisConfigBaseUrl'];
|
|
$url = $baseUrl . '/api/auth/auth.php';
|
|
$headers = array(
|
|
'Header-Token: ' . $dt_config['AisConfigHeaderToken']
|
|
);
|
|
|
|
$username = $dt_config['AisConfigUsername'];
|
|
$password = $dt_config['AisConfigPassword'];
|
|
|
|
$data = array(
|
|
'username' => $username,
|
|
'password' => $password
|
|
);
|
|
|
|
$result = $this->post_request($url, $data, $headers);
|
|
$sql = "INSERT INTO ais_login_log(
|
|
AisLoginLogUsername,
|
|
AisLoginLogPassword,
|
|
AisLoginLogHeaderToken,
|
|
AisLoginLogResult,
|
|
AisLoginLogCreated
|
|
)
|
|
VALUES(
|
|
?,
|
|
?,
|
|
?,
|
|
?,
|
|
NOW()
|
|
)";
|
|
$qry = $this->db_log->query($sql, array($username, $password, $dt_config['AisConfigHeaderToken'], json_encode($result)));
|
|
|
|
|
|
if (!$qry) {
|
|
$this->error_log(array('fn_name' => 'post_auth', 'message' => 'ais_login_log insert', 'query' => $this->db_log->last_query(), 'json' => json_encode($result)), 999);
|
|
exit;
|
|
}
|
|
//print_r($result);
|
|
//exit;
|
|
// Check if success
|
|
if (!$result['success']) {
|
|
$this->error_log(array('fn_name' => 'post_auth', 'message' => 'failed auth', 'query' => '', 'json' => json_encode($result)), 999);
|
|
$errors = array('status' => 'error', 'message' => 'Gagal Login');
|
|
echo json_encode($errors);
|
|
exit;
|
|
}
|
|
else {
|
|
// Update token
|
|
$token = $result['data']['token'];
|
|
;
|
|
$sql = "UPDATE ais_config SET AisConfigAuthToken = ? WHERE AisConfigID = 1";
|
|
$qry = $this->db_onedev->query($sql, array($token));
|
|
//echo $this->db_onedev->last_query();
|
|
//exit;
|
|
if (!$qry) {
|
|
$this->error_log(array('fn_name' => 'post_auth', 'message' => 'ais_config update', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999);
|
|
$errors = array('status' => 'error', 'message' => 'Gagal Update Token');
|
|
echo json_encode($errors);
|
|
exit;
|
|
}
|
|
|
|
//$success = array('status' => 'success', 'message' => 'Berhasil Login', 'token' => $token);
|
|
|
|
return $token;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* POST request to jenis layanan API
|
|
* @param array $data Array of jenis layanan data
|
|
* @return array Response from API
|
|
*/
|
|
|
|
function monitoring_packet()
|
|
{
|
|
|
|
|
|
// Ambil parameter
|
|
$packet_name = $this->input->get('packet_name');
|
|
$packet_code = $this->input->get('packet_code');
|
|
$priceheader_name = $this->input->get('priceheader_name');
|
|
$priceheader_code = $this->input->get('priceheader_code');
|
|
$packet_status = $this->input->get('packet_status'); // Y / N
|
|
|
|
// Pagination
|
|
$page = $this->input->get('page') ? intval($this->input->get('page')) : 1;
|
|
$limit = 10;
|
|
$offset = ($page - 1) * $limit;
|
|
|
|
$params = [];
|
|
$where_clauses = [];
|
|
|
|
$sql = "SELECT
|
|
p.T_PacketID,
|
|
p.T_PacketName AS packet_name,
|
|
p.T_PacketType,
|
|
p.T_PacketPrice,
|
|
p.T_PacketSasCode AS packet_code,
|
|
p.T_PacketStartDate,
|
|
p.T_PacketEndDate,
|
|
|
|
ph.T_PriceHeaderID,
|
|
ph.T_PriceHeaderName AS priceheader_name,
|
|
ph.T_PriceHeaderCode AS priceheader_code,
|
|
ph.T_PriceHeaderStartDate,
|
|
ph.T_PriceHeaderEndDate,
|
|
|
|
ap.Ais_PacketStatus AS Ais_PacketStatus,
|
|
'' AS packet_status
|
|
FROM t_packet p
|
|
JOIN t_priceheader ph
|
|
ON ph.T_PriceHeaderID = p.T_PacketT_PriceHeaderID AND t_packetIsActive = 'Y'
|
|
LEFT JOIN " . $this->db_log->database . ".ais_packet ap
|
|
ON ap.Ais_PacketT_PacketSasCode = p.T_PacketSasCode
|
|
";
|
|
|
|
// Status packet Y/N dari ais_packet
|
|
if ($packet_status === 'Y') {
|
|
$where_clauses[] = "ap.Ais_PacketID IS NOT NULL";
|
|
}
|
|
elseif ($packet_status === 'N') {
|
|
$where_clauses[] = "ap.Ais_PacketID IS NULL";
|
|
}
|
|
|
|
// Filter by packet name
|
|
if ($packet_name) {
|
|
$where_clauses[] = "p.T_PacketName LIKE ?";
|
|
$params[] = "%$packet_name%";
|
|
}
|
|
|
|
// Filter by packet code
|
|
if ($packet_code) {
|
|
$where_clauses[] = "p.T_PacketSasCode LIKE ?";
|
|
$params[] = "%$packet_code%";
|
|
}
|
|
|
|
// Filter by priceheader name
|
|
if ($priceheader_name) {
|
|
$where_clauses[] = "ph.T_PriceHeaderName LIKE ?";
|
|
$params[] = "%$priceheader_name%";
|
|
}
|
|
|
|
// Filter by priceheader code
|
|
if ($priceheader_code) {
|
|
$where_clauses[] = "ph.T_PriceHeaderCode LIKE ?";
|
|
$params[] = "%$priceheader_code%";
|
|
}
|
|
|
|
// Tambahkan WHERE jika ada klausa
|
|
if (!empty($where_clauses)) {
|
|
$sql .= " WHERE " . implode(" AND ", $where_clauses);
|
|
}
|
|
|
|
// Hitung total data
|
|
$sql_count = "SELECT COUNT(*) as total FROM t_packet p
|
|
JOIN t_priceheader ph
|
|
ON ph.T_PriceHeaderID = p.T_PacketT_PriceHeaderID AND t_packetIsActive = 'Y'
|
|
LEFT JOIN " . $this->db_log->database . ".ais_packet ap
|
|
ON ap.Ais_PacketT_PacketSasCode = p.T_PacketSasCode
|
|
";
|
|
|
|
if (!empty($where_clauses)) {
|
|
$sql_count .= " WHERE " . implode(" AND ", $where_clauses);
|
|
}
|
|
|
|
$qry_count = $this->db_onedev->query($sql_count, $params);
|
|
$total = $qry_count->row()->total;
|
|
|
|
// Tambahkan pagination
|
|
$sql .= " LIMIT ? OFFSET ?";
|
|
$params[] = $limit;
|
|
$params[] = $offset;
|
|
|
|
$qry = $this->db_onedev->query($sql, $params);
|
|
|
|
if (!$qry) {
|
|
$this->error_log(array('fn_name' => 'monitoring_packet', 'message' => 't_packet select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999);
|
|
$errors = array('status' => 'error', 'message' => 'Gagal mengambil data monitoring packet.');
|
|
echo json_encode($errors);
|
|
exit;
|
|
}
|
|
|
|
$data = $qry->result_array();
|
|
|
|
// Format data
|
|
foreach ($data as &$row) {
|
|
$row['T_PacketStartDate'] = $row['T_PacketStartDate'] ? date('Y-m-d', strtotime($row['T_PacketStartDate'])) : null;
|
|
$row['T_PacketEndDate'] = $row['T_PacketEndDate'] ? date('Y-m-d', strtotime($row['T_PacketEndDate'])) : null;
|
|
$row['T_PriceHeaderStartDate'] = $row['T_PriceHeaderStartDate'] ? date('Y-m-d', strtotime($row['T_PriceHeaderStartDate'])) : null;
|
|
$row['T_PriceHeaderEndDate'] = $row['T_PriceHeaderEndDate'] ? date('Y-m-d', strtotime($row['T_PriceHeaderEndDate'])) : null;
|
|
}
|
|
|
|
echo json_encode([
|
|
'status' => 'success',
|
|
'message' => 'Berhasil mengambil data monitoring packet.',
|
|
'data' => $data,
|
|
'total' => $total,
|
|
'page' => $page,
|
|
'limit' => $limit,
|
|
'total_page' => ceil($total / $limit)
|
|
]);
|
|
exit;
|
|
}
|
|
|
|
function get_json_response()
|
|
{
|
|
$packet_code = $this->input->get('packet_code');
|
|
|
|
if (empty($packet_code)) {
|
|
return $this->output
|
|
->set_status_header(400)
|
|
->set_content_type('application/json')
|
|
->set_output(json_encode([
|
|
'status' => 'error', 'message' => 'packet_code parameter is required']));
|
|
}
|
|
|
|
$sql = "SELECT
|
|
Ais_PacketT_PacketSasCode AS packet_code,
|
|
Ais_PacketLastUpdated AS packet_update,
|
|
Ais_PacketJson AS packet_json,
|
|
Ais_PacketStatus AS status,
|
|
Ais_PacketResponse AS packet_response
|
|
FROM ais_packet
|
|
WHERE Ais_PacketT_PacketSasCode = ?
|
|
ORDER BY Ais_PacketLastUpdated DESC";
|
|
|
|
// Query ke database LOG
|
|
$qry = $this->db_log->query($sql, array($packet_code));
|
|
|
|
$results = $qry->row_array();
|
|
$results = $qry->result_array();
|
|
|
|
if ($results) {
|
|
// Loop through each result to decode JSON
|
|
foreach ($results as &$result) {
|
|
$result['packet_json'] = json_decode($result['packet_json']);
|
|
$result['packet_response'] = json_decode($result['packet_response']);
|
|
}
|
|
unset($result); // Unset reference to avoid side effects
|
|
|
|
echo json_encode(['status' => 'success', 'data' => $results]);
|
|
}
|
|
else {
|
|
echo json_encode(['status' => 'error', 'message' => 'Data not found for the given sas code.']);
|
|
}
|
|
exit;
|
|
}
|
|
|
|
} |