1273 lines
49 KiB
PHP
1273 lines
49 KiB
PHP
<?php
|
|
error_reporting(0);
|
|
|
|
$ppnnow = 11;
|
|
|
|
// Redirect if 'index.php' is found in the URL
|
|
$requestUri = $_SERVER['REQUEST_URI'];
|
|
if (strpos($requestUri, 'index.php') !== false) {
|
|
$newUrl = str_replace('index.php', '', $requestUri);
|
|
header('Location: ' . $newUrl);
|
|
exit;
|
|
}
|
|
|
|
// Start the session
|
|
// session_start();
|
|
|
|
// Include essential files
|
|
include "config/connect.php";
|
|
include 'pages/control_page.php';
|
|
include 'list_data/list_data.php';
|
|
include 'list_data/sweetalert.php';
|
|
include "config/routeros_api.class.php";
|
|
include "config/whatsapp_api.php";
|
|
include "config/tanggal_indo.php";
|
|
include "tracking/kata_kunci.php";
|
|
|
|
// Initialize global variables
|
|
$List = new Listdata();
|
|
$date = date('Y-m-d H:i:s');
|
|
|
|
// Check user session and redirect to login if necessary
|
|
if (!isset($_SESSION['user']) && !isset($_SESSION['master'])) {
|
|
header('Location: login.php');
|
|
exit();
|
|
}
|
|
|
|
// Define User ID based on session
|
|
$UserId = isset($_SESSION['user']) ? $_SESSION['user'] : '0';
|
|
|
|
// Initialize menu array
|
|
$armenu2 = [];
|
|
|
|
// Prepare and execute query to get menu IDs
|
|
$stmt = $pdo->prepare("SELECT id FROM master_menu WHERE master_akses = '0' AND id != '13'");
|
|
$stmt->execute();
|
|
$menu_ids = $stmt->fetchAll(PDO::FETCH_COLUMN, 0);
|
|
|
|
foreach ($menu_ids as $id) {
|
|
$armenu2[$id]['menu'] = $id;
|
|
}
|
|
|
|
// Define user data and access permissions
|
|
if (isset($_SESSION['user'])) {
|
|
// Fetch user details
|
|
$stmt = $pdo->prepare("SELECT id, id_data_server, id_group_akses, nama, profile FROM user_akses WHERE id = :id");
|
|
$stmt->bindParam(':id', $_SESSION['user']);
|
|
$stmt->execute();
|
|
$UserAdminAkses = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
// Fetch group access details
|
|
$stmt = $pdo->prepare("SELECT id_data_server,akses,per_marketing,tagihan_berjalan FROM group_akses WHERE id = :id");
|
|
$stmt->bindParam(':id', $UserAdminAkses['id_group_akses']);
|
|
$stmt->execute();
|
|
$GroupUserAdminAkses = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
// Define SQL filters based on user access
|
|
$SvId = $UserAdminAkses['id_data_server'];
|
|
// $SvId = implode(',', array_map('intval', $UserAdminAkses['id_data_server']));
|
|
$SvNama = $UserAdminAkses['nama'];
|
|
//jika user adalah marketing
|
|
if($GroupUserAdminAkses['per_marketing'] == 'Y'){
|
|
$SqlSvData = "id_data_server IN ($SvId) AND id_marketing = '$UserAdminAkses[id]' AND";
|
|
$SqlDataWHIdM = "WHERE id_data_server IN ($SvId) AND id_marketing = '$UserAdminAkses[id]'";
|
|
}
|
|
else{
|
|
$SqlSvData = "id_data_server IN ($SvId) AND";
|
|
$SqlDataWHIdM = "WHERE id_data_server IN ($SvId)";
|
|
}
|
|
|
|
$bulanIni = date("Y-m");
|
|
//Logika Hanya Muncul Tagihan Bulan Berjalan di Tunggakan
|
|
if($GroupUserAdminAkses['tagihan_berjalan'] == 'Y'){
|
|
$tagihanJalan = "SUBSTRING(limit_pembayaran, 1, 7) = '$bulanIni' AND";
|
|
} else {
|
|
$tagihanJalan = "";
|
|
}
|
|
// $SqlSvData = "id_data_server IN ($SvId) AND";
|
|
$SqlDataWH = "WHERE id IN ($SvId)";
|
|
$SqlDataWHId = "WHERE id_data_server IN ($SvId)";
|
|
$SqlDataWHLikeId = "WHERE id_data_server LIKE '%$SvId%'";
|
|
$SqlDataId = "AND id_data_server IN ($SvId)";
|
|
|
|
// Merge menu access
|
|
$array2 = json_decode($GroupUserAdminAkses['akses'], true);
|
|
$mergedArray = array_replace($armenu2, $array2);
|
|
$menu_akses = json_encode($mergedArray);
|
|
|
|
$profile = $UserAdminAkses['profile'];
|
|
} else {
|
|
// Fetch master user details
|
|
$stmt = $pdo->prepare("SELECT id, nama_pemilik, akses, profile,expaired_date, quick_setting FROM data_server WHERE id = :id");
|
|
$stmt->bindParam(':id', $_SESSION['master']);
|
|
$stmt->execute();
|
|
$UserMaster = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
$SvId = $UserMaster['id'];
|
|
// $SvId = implode(',', array_map('intval', $UserMaster['id']));
|
|
$SvNama = $UserMaster['nama_pemilik'];
|
|
|
|
if ($UserMaster['id'] == '1') {
|
|
// Define SQL filters for master user
|
|
$SqlSvData = '';
|
|
$SqlDataWH = "WHERE id != '1'";
|
|
$SqlDataWHId = "";
|
|
$SqlDataWHIdM = "";
|
|
$SqlDataWHLikeId = "";
|
|
$SqlDataId = "";
|
|
|
|
$menu_akses = $UserMaster['akses'];
|
|
} else {
|
|
// Define SQL filters for non-master user
|
|
$SqlSvData = "id_data_server = '$SvId' AND";
|
|
$SqlDataWH = "WHERE id IN ($SvId)";
|
|
$SqlDataWHId = "WHERE id_data_server IN ($SvId)";
|
|
$SqlDataWHIdM = "WHERE id_data_server IN ($SvId)";
|
|
$SqlDataWHLikeId = "WHERE id_data_server LIKE '%$SvId%'";
|
|
$SqlDataId = "AND id_data_server IN ($SvId)";
|
|
}
|
|
|
|
$tagihanJalan = "";
|
|
// Merge menu access
|
|
$array2 = json_decode($UserMaster['akses'], true);
|
|
$mergedArray = array_replace($armenu2, $array2);
|
|
$menu_akses = json_encode($mergedArray);
|
|
|
|
$profile = $UserMaster['profile'];
|
|
}
|
|
|
|
// Ambil data dari POST atau variabel lain
|
|
$json_array = json_decode($menu_akses, true);
|
|
|
|
// Query untuk mendapatkan data menu dan submenu dari database
|
|
$menu_query = "
|
|
SELECT * FROM master_menu WHERE id != '26'
|
|
ORDER BY urutan ASC
|
|
";
|
|
$result = mysqli_query($con, $menu_query);
|
|
|
|
if (!$result) {
|
|
echo 'Error executing query: ' . mysqli_error($con);
|
|
exit;
|
|
}
|
|
|
|
// Simpan hasil query ke dalam array
|
|
$menus = [];
|
|
while ($row = mysqli_fetch_assoc($result)) {
|
|
$menus[] = $row;
|
|
}
|
|
|
|
// Index berdasarkan ID menu untuk akses cepat
|
|
$menu_map = [];
|
|
foreach ($menus as $menu) {
|
|
$menu_map[$menu['id']] = $menu;
|
|
}
|
|
|
|
// Bebaskan hasil query
|
|
mysqli_free_result($result);
|
|
|
|
|
|
// Buat array \$menus_user berdasarkan ID di \$json_array
|
|
$menus_user = array_filter($menus, function($menu) use ($json_array) {
|
|
return isset($json_array[$menu['id']]);
|
|
});
|
|
|
|
// encrypt url
|
|
define('ENCRYPTION_KEY', hex2bin('9a307dfcf16ac2e4406b1a59a31c1d096eafe37e40c60ddee4bb827b6a947079'));
|
|
define('ENCRYPTION_METHOD', 'AES-256-CBC');
|
|
|
|
function encrypt_url($data) {
|
|
$iv = random_bytes(16);
|
|
$encrypted = openssl_encrypt($data, ENCRYPTION_METHOD, ENCRYPTION_KEY, OPENSSL_RAW_DATA, $iv);
|
|
// Gabungkan IV hex + "::" + encrypted base64, lalu base64 encode seluruh string
|
|
$result = base64_encode(bin2hex($iv) . "::" . base64_encode($encrypted));
|
|
return $result;
|
|
}
|
|
|
|
function decrypt_url($data) {
|
|
$decoded = base64_decode($data);
|
|
if ($decoded === false) return false;
|
|
$parts = explode('::', $decoded);
|
|
if (count($parts) !== 2) return false;
|
|
|
|
$iv = hex2bin($parts[0]);
|
|
$encrypted_data = base64_decode($parts[1]);
|
|
return openssl_decrypt($encrypted_data, ENCRYPTION_METHOD, ENCRYPTION_KEY, OPENSSL_RAW_DATA, $iv);
|
|
}
|
|
|
|
|
|
// Data Pages AND POST
|
|
// if ($_SERVER['QUERY_STRING'] != '') {
|
|
// $pag = decrypt_url($_SERVER['QUERY_STRING']);
|
|
// $page = explode("|", $pag);
|
|
|
|
// $pages = $page[0];
|
|
// } else {
|
|
// $pages = 'dashboard';
|
|
// }
|
|
|
|
if ($_SERVER['QUERY_STRING'] != '') {
|
|
$pag = decrypt_url($_SERVER['QUERY_STRING']);
|
|
$page = explode("|", $pag);
|
|
|
|
$pagex = $page[0];
|
|
|
|
$menu_links = array_column($menus_user, 'link_menu');
|
|
$menu_other = array_column($menus, 'link_menu');
|
|
|
|
// if (in_array($pagex, $menu_links)) {
|
|
// $pages = $pagex;
|
|
// } else {
|
|
// $pages = (in_array($pagex, $menu_links) && !in_array($pagex, $menu_other)) ? $pagex : 'dashboard';
|
|
// }
|
|
$pages = $pagex;
|
|
|
|
} else {
|
|
$pages = 'dashboard';
|
|
}
|
|
//DATA Page
|
|
$Page = new Pages();
|
|
$Page->set_page($pages);
|
|
|
|
$stm = $pdo->prepare("SELECT status_payment_gateway FROM data_server WHERE id IN (:id)");
|
|
$stm->bindParam(':id', $SvId);
|
|
$stm->execute();
|
|
$datastatus = $stm->fetch(PDO::FETCH_ASSOC);
|
|
$statuspaygw = $datastatus['status_payment_gateway'];
|
|
?>
|
|
|
|
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>ManjaPro</title>
|
|
<!-- Google Font: Source Sans Pro -->
|
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">
|
|
<!-- Font Awesome -->
|
|
<link rel="stylesheet" href="plugins/fontawesome-free/css/all.min.css">
|
|
<!-- Ionicons -->
|
|
<link rel="stylesheet" href="https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
|
|
<!-- Tempusdominus Bootstrap 4 -->
|
|
<link rel="stylesheet" href="plugins/tempusdominus-bootstrap-4/css/tempusdominus-bootstrap-4.min.css">
|
|
<!-- iCheck -->
|
|
<link rel="stylesheet" href="plugins/icheck-bootstrap/icheck-bootstrap.min.css">
|
|
<!-- JQVMap -->
|
|
<!-- <link rel="stylesheet" href="plugins/jqvmap/jqvmap.min.css"> -->
|
|
<!-- Theme style -->
|
|
<link rel="stylesheet" href="dist/css/adminlte.min.css">
|
|
<!-- overlayScrollbars -->
|
|
<link rel="stylesheet" href="plugins/overlayScrollbars/css/OverlayScrollbars.min.css">
|
|
<!-- Daterange picker -->
|
|
<link rel="stylesheet" href="plugins/daterangepicker/daterangepicker.css">
|
|
<!-- summernote -->
|
|
<link rel="stylesheet" href="plugins/summernote/summernote-bs4.min.css">
|
|
<!-- Icon Aplikasi -->
|
|
<link rel="icon" href="dist/img/logo-sm.png" type="image/gif" />
|
|
<!-- Data Tabel -->
|
|
<link rel="stylesheet" href="plugins/datatables-bs4/css/dataTables.bootstrap4.min.css">
|
|
<link rel="stylesheet" href="plugins/datatables-responsive/css/responsive.bootstrap4.min.css">
|
|
<link rel="stylesheet" href="plugins/datatables-buttons/css/buttons.bootstrap4.min.css">
|
|
<link rel="stylesheet" href="plugins/select2/css/select2.min.css">
|
|
<link rel="stylesheet" href="plugins/select2-bootstrap4-theme/select2-bootstrap4.min.css">
|
|
<!-- Bootstrap Color Picker -->
|
|
<link rel="stylesheet" href="plugins/bootstrap-colorpicker/css/bootstrap-colorpicker.min.css">
|
|
<!-- Bootstrap4 Duallistbox -->
|
|
<link rel="stylesheet" href="plugins/bootstrap4-duallistbox/bootstrap-duallistbox.min.css">
|
|
<!-- BS Stepper -->
|
|
<link rel="stylesheet" href="plugins/bs-stepper/css/bs-stepper.min.css">
|
|
<!-- dropzonejs -->
|
|
<link rel="stylesheet" href="plugins/dropzone/min/dropzone.min.css">
|
|
<!-- Custom CSS -->
|
|
<link rel="stylesheet" href="dist/customcss/form_image_load.css">
|
|
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
|
<!--jquery http-->
|
|
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
|
<!-- Load Google Maps API library -->
|
|
<script>
|
|
(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
|
|
key: "AIzaSyA1MgLuZuyqR_OGY3ob3M52N46TDBRI_9k",
|
|
v: "weekly",
|
|
// Use the 'v' parameter to indicate the version to use (weekly, beta, alpha, etc.).
|
|
// Add other bootstrap parameters as needed, using camel case.
|
|
});
|
|
</script>
|
|
<style type="text/css">
|
|
/* Styling untuk marquee container */
|
|
.marquee-container {
|
|
height: 20px; /* Tinggi elemen marquee */
|
|
overflow: hidden; /* Menghindari teks yang meluap */
|
|
position: relative;
|
|
top: 0; /* Memastikan marquee berada di bawah navbar */
|
|
width: 100%; /* Lebar elemen marquee */
|
|
}
|
|
|
|
/* Styling untuk marquee */
|
|
marquee {
|
|
line-height: 20px; /* Menyelaraskan teks dengan tinggi container */
|
|
color: white;
|
|
}
|
|
</style>
|
|
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
|
</head>
|
|
<body class="hold-transition sidebar-mini layout-fixed">
|
|
<div class="wrapper">
|
|
|
|
<!--Preloader-->
|
|
<div class="preloader flex-column justify-content-center align-items-center" style="background: rgba(128,128,128,0.5);">
|
|
<img class="animation__shake" src="dist/img/logo-sm.png" alt="AdminLTELogo" height="140" width="140">
|
|
</div>
|
|
|
|
<!-- Navbar -->
|
|
<nav class="main-header navbar navbar-expand navbar-white navbar-light">
|
|
<!-- Left navbar links -->
|
|
<ul class="navbar-nav">
|
|
<li class="nav-item">
|
|
<a class="nav-link" data-widget="pushmenu" href="#" role="button"><i class="fas fa-bars"></i></a>
|
|
</li>
|
|
</ul>
|
|
<!-- Right navbar links -->
|
|
<ul class="navbar-nav ml-auto">
|
|
<!-- Navbar Search -->
|
|
<!-- <li class="nav-item">
|
|
<a class="nav-link" data-widget="navbar-search" href="#" role="button">
|
|
<i class="fas fa-search"></i>
|
|
</a>
|
|
<div class="navbar-search-block">
|
|
<form class="form-inline">
|
|
<div class="input-group input-group-sm">
|
|
<input class="form-control form-control-navbar" type="search" placeholder="Search" aria-label="Search">
|
|
<div class="input-group-append">
|
|
<button class="btn btn-navbar" type="submit">
|
|
<i class="fas fa-search"></i>
|
|
</button>
|
|
<button class="btn btn-navbar" type="button" data-widget="navbar-search">
|
|
<i class="fas fa-times"></i>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</li> -->
|
|
<!-- Messages Dropdown Menu -->
|
|
<!-- <li class="nav-item dropdown">
|
|
<a class="nav-link" data-toggle="dropdown" href="#">
|
|
<i class="far fa-comments"></i>
|
|
<span class="badge badge-danger navbar-badge">3</span>
|
|
</a>
|
|
<div class="dropdown-menu dropdown-menu-lg dropdown-menu-right">
|
|
<a href="#" class="dropdown-item">
|
|
<div class="media">
|
|
<img src="dist/img/user1-128x128.jpg" alt="User Avatar" class="img-size-50 mr-3 img-circle">
|
|
<div class="media-body">
|
|
<h3 class="dropdown-item-title">
|
|
Brad Diesel
|
|
<span class="float-right text-sm text-danger"><i class="fas fa-star"></i></span>
|
|
</h3>
|
|
<p class="text-sm">Call me whenever you can...</p>
|
|
<p class="text-sm text-muted"><i class="far fa-clock mr-1"></i> 4 Hours Ago</p>
|
|
</div>
|
|
</div>
|
|
</a>
|
|
<div class="dropdown-divider"></div>
|
|
<a href="#" class="dropdown-item">
|
|
<div class="media">
|
|
<img src="dist/img/user8-128x128.jpg" alt="User Avatar" class="img-size-50 img-circle mr-3">
|
|
<div class="media-body">
|
|
<h3 class="dropdown-item-title">
|
|
John Pierce
|
|
<span class="float-right text-sm text-muted"><i class="fas fa-star"></i></span>
|
|
</h3>
|
|
<p class="text-sm">I got your message bro</p>
|
|
<p class="text-sm text-muted"><i class="far fa-clock mr-1"></i> 4 Hours Ago</p>
|
|
</div>
|
|
</div>
|
|
</a>
|
|
<div class="dropdown-divider"></div>
|
|
<a href="#" class="dropdown-item">
|
|
<div class="media">
|
|
<img src="dist/img/user3-128x128.jpg" alt="User Avatar" class="img-size-50 img-circle mr-3">
|
|
<div class="media-body">
|
|
<h3 class="dropdown-item-title">
|
|
Nora Silvester
|
|
<span class="float-right text-sm text-warning"><i class="fas fa-star"></i></span>
|
|
</h3>
|
|
<p class="text-sm">The subject goes here</p>
|
|
<p class="text-sm text-muted"><i class="far fa-clock mr-1"></i> 4 Hours Ago</p>
|
|
</div>
|
|
</div>
|
|
</a>
|
|
<div class="dropdown-divider"></div>
|
|
<a href="#" class="dropdown-item dropdown-footer">See All Messages</a>
|
|
</div>
|
|
</li> -->
|
|
<!-- Notifications Dropdown Menu -->
|
|
<!-- <li class="nav-item dropdown">
|
|
<a class="nav-link" data-toggle="dropdown" href="#">
|
|
<i class="far fa-bell"></i>
|
|
<span class="badge badge-warning navbar-badge">15</span>
|
|
</a>
|
|
<div class="dropdown-menu dropdown-menu-lg dropdown-menu-right">
|
|
<span class="dropdown-item dropdown-header">15 Notifications</span>
|
|
<div class="dropdown-divider"></div>
|
|
<a href="#" class="dropdown-item">
|
|
<i class="fas fa-envelope mr-2"></i> 4 new messages
|
|
<span class="float-right text-muted text-sm">3 mins</span>
|
|
</a>
|
|
<div class="dropdown-divider"></div>
|
|
<a href="#" class="dropdown-item">
|
|
<i class="fas fa-users mr-2"></i> 8 friend requests
|
|
<span class="float-right text-muted text-sm">12 hours</span>
|
|
</a>
|
|
<div class="dropdown-divider"></div>
|
|
<a href="#" class="dropdown-item">
|
|
<i class="fas fa-file mr-2"></i> 3 new reports
|
|
<span class="float-right text-muted text-sm">2 days</span>
|
|
</a>
|
|
<div class="dropdown-divider"></div>
|
|
<a href="#" class="dropdown-item dropdown-footer">See All Notifications</a>
|
|
</div>
|
|
</li> -->
|
|
<?php if (isset($_SESSION['master'])) { ?>
|
|
<li class="nav-item">
|
|
<a class="nav-link">
|
|
<p>Kedaluarsa : <?php echo $UserMaster['expaired_date']; ?></p>
|
|
</a>
|
|
</li>
|
|
<?php } ?>
|
|
<li class="nav-item">
|
|
<a class="nav-link" data-widget="fullscreen" href="iframe.php" role="button">
|
|
<i class="fas fa-expand-arrows-alt"></i>
|
|
</a>
|
|
</li>
|
|
<!-- <li class="nav-item">
|
|
<a class="nav-link" data-widget="control-sidebar" data-slide="true" href="#" role="button">
|
|
<i class="fas fa-th-large"></i>
|
|
</a>
|
|
</li> -->
|
|
</ul>
|
|
</nav>
|
|
<!-- /.navbar -->
|
|
<?php if (isset($_SESSION['master'])) {
|
|
$expiredDate = $UserMaster['expaired_date'];
|
|
$currentDate = date('Y-m-d');
|
|
$diff = strtotime($expiredDate) - strtotime($currentDate);
|
|
$daysLeft = ceil($diff / (60 * 60 * 24));
|
|
|
|
if ($daysLeft < 0) { ?>
|
|
<div class="marquee-container" style="background-color: red;">
|
|
<marquee direction="left">Masa aktif Aplikasi BilsPro telah berakhir <b><?php echo substr($daysLeft,1); ?></b> hari lalu</marquee>
|
|
</div>
|
|
<?php
|
|
$status_menu = "Tidak Aktif";
|
|
}
|
|
elseif($daysLeft <= 10 && $daysLeft >= 0) { ?>
|
|
<div class="marquee-container" style="background-color: green;">
|
|
<marquee direction="left">Masa aktif Aplikasi BilsPro akan berakhir <b><?php echo $daysLeft; ?></b> hari lagi</marquee>
|
|
</div>
|
|
<?php
|
|
$status_menu = "Aktif"; }
|
|
else {
|
|
$status_menu = "Aktif";
|
|
}
|
|
}
|
|
else {
|
|
$stmt = $pdo->prepare("SELECT expaired_date FROM data_server WHERE id = :id");
|
|
$stmt->bindParam(':id', $GroupUserAdminAkses['id_data_server']);
|
|
$stmt->execute();
|
|
$AksesUserMenu = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
$expiredDate = $AksesUserMenu['expaired_date'];
|
|
$currentDate = date('Y-m-d');
|
|
$diff = strtotime($expiredDate) - strtotime($currentDate);
|
|
$daysLeft = ceil($diff / (60 * 60 * 24));
|
|
if ($daysLeft < 0) {
|
|
$status_menu = "Tidak Aktif";
|
|
}
|
|
else{
|
|
$status_menu = "Aktif";
|
|
}
|
|
}
|
|
?>
|
|
|
|
<!-- Main Sidebar Container -->
|
|
<aside class="main-sidebar sidebar-dark-primary elevation-4">
|
|
<!-- Brand Logo -->
|
|
<a href="index.php" class="brand-link">
|
|
<img src="dist/img/logo_clr.png" alt="AdminLTE Logo" width="130px" class="ml-3" style="opacity: .8">
|
|
<p style="font-size : 12px;" class="ml-3 mb-0">Managemen Jaringan Profesional</p>
|
|
<!--<span class="brand-text font-weight-light">BilsPro</span>-->
|
|
</a>
|
|
<!-- Sidebar -->
|
|
<div class="sidebar">
|
|
<!-- Sidebar user panel (optional) -->
|
|
<div class="user-panel mb-3 d-flex">
|
|
<div class="image pt-2">
|
|
<img src="img/user/<?php echo $profile; ?>" class="img-circle elevation-2" alt="User Image">
|
|
</div>
|
|
<div class="info">
|
|
<a href="?<?php echo encrypt_url('setting_profile'); ?>" class="d-block"><?php echo $SvNama; ?></a>
|
|
<?php if($status_menu == "Aktif") { ?>
|
|
<a href="?<?php echo encrypt_url('setting_profile'); ?>" class="fas fa-genderless text-success"><i class="ml-2 mb-0 text-light">Active</i></a>
|
|
<?php } else { ?>
|
|
<a href="?<?php echo encrypt_url('setting_profile'); ?>" class="fas fa-genderless text-danger"><i class="ml-2 mb-0 text-light">Expaired</i></a>
|
|
<?php } ?>
|
|
</div>
|
|
</div>
|
|
<!-- Sidebar Menu -->
|
|
<nav class="mt-2">
|
|
<ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false">
|
|
|
|
<?php
|
|
//Menu Quick Setting
|
|
if (isset($_SESSION['master']) && $UserMaster['quick_setting'] == 'on' && $status_menu == "Aktif") {
|
|
?>
|
|
<li class="nav-item">
|
|
<a href="?<?php echo encrypt_url('quick_setting_app'); ?>" class="nav-link">
|
|
<i class="fas fa-cog nav-icon"></i>
|
|
<p>Quick Setting</p>
|
|
</a>
|
|
</li>
|
|
<?php } ?>
|
|
|
|
<?php
|
|
|
|
function render_submenu($menu_id, $menus, $json_array, $Page, $status_menu) {
|
|
echo '<ul class="nav nav-treeview">';
|
|
foreach ($menus as $submenu) {
|
|
if ($submenu['master'] == $menu_id) {
|
|
$submenu_id = htmlspecialchars($submenu['id']);
|
|
$submenu_name = htmlspecialchars($submenu['nama']);
|
|
$submenu_link = htmlspecialchars($submenu['link_menu']);
|
|
$submenu_icon = htmlspecialchars($submenu['icon']);
|
|
$submenu_active = ($Page->get_page() == $submenu_link) ? 'active' : '';
|
|
$menu_href = ($status_menu == "Aktif") ? '?'.encrypt_url($submenu_link) : '?'.encrypt_url('setting_profile');
|
|
|
|
echo '<li class="nav-item">';
|
|
echo ' <a href="'. $menu_href .'" class="nav-link ' . $submenu_active . '">';
|
|
echo ' <i class="' . $submenu_icon . ' nav-icon"></i>';
|
|
echo ' <p>' . $submenu_name . '</p>';
|
|
echo ' </a>';
|
|
echo '</li>';
|
|
}
|
|
}
|
|
echo '</ul>';
|
|
}
|
|
|
|
// Tampilkan menu utama
|
|
foreach ($menus as $menu) {
|
|
$menu_id = htmlspecialchars($menu['id']);
|
|
$menu_name = htmlspecialchars($menu['nama']);
|
|
$menu_link = htmlspecialchars($menu['link_menu']);
|
|
$menu_icon = htmlspecialchars($menu['icon']);
|
|
$is_active = ($Page->get_page() == $menu_link) ? 'active' : '';
|
|
$menu_href = ($status_menu == "Aktif") ? '?'.encrypt_url($menu_link) : '?'.encrypt_url('setting_profile');
|
|
// Cek apakah menu_id ada dalam JSON array
|
|
$data_menu = isset($json_array[$menu_id]);
|
|
|
|
|
|
if (!empty($data_menu)) {
|
|
if ($menu['sub_menu'] == 'N' && $menu['master'] == '0') {
|
|
// Tampilkan item menu tanpa submenu
|
|
echo '<li class="nav-item">';
|
|
echo ' <a href="'. $menu_href .'" class="nav-link ' . $is_active . '">';
|
|
echo ' <i class="nav-icon ' . $menu_icon . '"></i>';
|
|
echo ' <p>' . $menu_name . '</p>';
|
|
echo ' </a>';
|
|
echo '</li>';
|
|
} elseif ($menu['sub_menu'] == 'Y' && $menu['master'] == '0') {
|
|
// Cek ID menu aktif
|
|
$link_menu = $Page->get_page();
|
|
$menuid_master = '';
|
|
foreach ($menus as $item) {
|
|
if ($item['link_menu'] == $link_menu) {
|
|
$menuid_master = $item['master'];
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Tampilkan item menu dengan submenu
|
|
echo '<li class="nav-item ' . ($menuid_master == $menu_id ? 'menu-open' : '') . '">';
|
|
echo ' <a href="#" class="nav-link ' . ($menuid_master == $menu_id ? 'active' : '') . '">';
|
|
echo ' <i class="nav-icon ' . $menu_icon . '"></i>';
|
|
echo ' <p>' . $menu_name;
|
|
if ($menu['sub_menu'] == 'Y') {
|
|
echo ' <i class="right fas fa-angle-left"></i>';
|
|
}
|
|
echo ' </p>';
|
|
echo ' </a>';
|
|
render_submenu($menu_id, $menus, $json_array, $Page, $status_menu);
|
|
echo '</li>';
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
?>
|
|
<li class="nav-item">
|
|
<a href="?<?php echo encrypt_url('logout'); ?>" class="nav-link">
|
|
<i class="fas fa-share nav-icon"></i>
|
|
<p>Logout</p>
|
|
</a>
|
|
</li>
|
|
<br><br><br><br>
|
|
</ul>
|
|
</nav>
|
|
<!-- /.sidebar-menu -->
|
|
</div>
|
|
<!-- /.sidebar -->
|
|
</aside>
|
|
<!-- Content Wrapper. Contains page content -->
|
|
<div class="content-wrapper">
|
|
|
|
<?php
|
|
|
|
// echo $pages . ' ' . $page[1];
|
|
|
|
include 'pages/'.$Page->get_page().'.php';
|
|
|
|
?>
|
|
|
|
</div>
|
|
|
|
<!-- Control Sidebar -->
|
|
<aside class="control-sidebar control-sidebar-dark">
|
|
<!-- Control sidebar content goes here -->
|
|
</aside>
|
|
<!-- /.control-sidebar -->
|
|
</div>
|
|
<!-- /.wrapper -->
|
|
|
|
<!-- jQuery -->
|
|
<script src="plugins/jquery/jquery.min.js"></script>
|
|
<!-- jQuery UI 1.11.4 -->
|
|
<script src="plugins/jquery-ui/jquery-ui.min.js"></script>
|
|
<!-- Resolve conflict in jQuery UI tooltip with Bootstrap tooltip -->
|
|
<script>
|
|
$.widget.bridge('uibutton', $.ui.button)
|
|
</script>
|
|
<!-- Bootstrap 4 -->
|
|
<script src="plugins/bootstrap/js/bootstrap.bundle.min.js"></script>
|
|
<!-- ChartJS -->
|
|
<!--<script src="plugins/chart.js/Chart.min.js"></script>-->
|
|
<!-- Sparkline -->
|
|
<script src="plugins/sparklines/sparkline.js"></script>
|
|
<!-- JQVMap -->
|
|
<!-- <script src="plugins/jqvmap/jquery.vmap.min.js"></script>
|
|
<script src="plugins/jqvmap/maps/jquery.vmap.usa.js"></script> -->
|
|
<!-- jQuery Knob Chart -->
|
|
<script src="plugins/jquery-knob/jquery.knob.min.js"></script>
|
|
<!-- daterangepicker -->
|
|
<script src="plugins/moment/moment.min.js"></script>
|
|
<script src="plugins/daterangepicker/daterangepicker.js"></script>
|
|
<!-- Tempusdominus Bootstrap 4 -->
|
|
<script src="plugins/tempusdominus-bootstrap-4/js/tempusdominus-bootstrap-4.min.js"></script>
|
|
<!-- Summernote -->
|
|
<script src="plugins/summernote/summernote-bs4.min.js"></script>
|
|
<!-- overlayScrollbars -->
|
|
<script src="plugins/overlayScrollbars/js/jquery.overlayScrollbars.min.js"></script>
|
|
<!-- AdminLTE App -->
|
|
<script src="dist/js/adminlte.js"></script>
|
|
<!-- AdminLTE for demo purposes -->
|
|
<script src="dist/js/demo.js"></script>
|
|
<!-- AdminLTE dashboard demo (This is only for demo purposes) -->
|
|
<script src="dist/js/pages/dashboard.js"></script>
|
|
<!-- Auto Upload File -->
|
|
<script src="dist/customjs/upload.js"></script>
|
|
<!-- DataTables & Plugins -->
|
|
<script src="plugins/datatables/jquery.dataTables.min.js"></script>
|
|
<script src="plugins/datatables-bs4/js/dataTables.bootstrap4.min.js"></script>
|
|
<script src="plugins/datatables-responsive/js/dataTables.responsive.min.js"></script>
|
|
<script src="plugins/datatables-responsive/js/responsive.bootstrap4.min.js"></script>
|
|
<script src="plugins/datatables-buttons/js/dataTables.buttons.min.js"></script>
|
|
<script src="plugins/datatables-buttons/js/buttons.bootstrap4.min.js"></script>
|
|
<script src="plugins/jszip/jszip.min.js"></script>
|
|
<script src="plugins/pdfmake/pdfmake.min.js"></script>
|
|
<script src="plugins/pdfmake/vfs_fonts.js"></script>
|
|
<script src="plugins/datatables-buttons/js/buttons.html5.min.js"></script>
|
|
<script src="plugins/datatables-buttons/js/buttons.print.min.js"></script>
|
|
<script src="plugins/datatables-buttons/js/buttons.colVis.min.js"></script>
|
|
<!-- Select2 -->
|
|
<script src="plugins/select2/js/select2.full.min.js"></script>
|
|
<!-- <script src="plugins/select2/js/select2.min.js"></script> -->
|
|
<script src="plugins/dropzone/min/dropzone.min.js"></script>
|
|
<!-- Bootstrap Switch -->
|
|
<script src="plugins/bootstrap-switch/js/bootstrap-switch.min.js"></script>
|
|
<!-- BS-Stepper -->
|
|
<script src="plugins/bs-stepper/js/bs-stepper.min.js"></script>
|
|
<!-- bootstrap color picker -->
|
|
<script src="plugins/bootstrap-colorpicker/js/bootstrap-colorpicker.min.js"></script>
|
|
<!-- date-range-picker -->
|
|
<script src="plugins/inputmask/jquery.inputmask.min.js"></script>
|
|
<script src="plugins/bootstrap4-duallistbox/jquery.bootstrap-duallistbox.min.js"></script>
|
|
<script>
|
|
$(function () {
|
|
$("#example1").DataTable({
|
|
"responsive": true,
|
|
"lengthChange": false,
|
|
"autoWidth": false,
|
|
"buttons": [ "excel", "pdf", "print"]
|
|
}).buttons().container().appendTo('#example1_wrapper .col-md-6:eq(0)');
|
|
$("#example2").DataTable({
|
|
"responsive": true,
|
|
"autoWidth": false
|
|
});
|
|
$("#example3").DataTable({
|
|
"responsive": true,
|
|
"lengthChange": true,
|
|
"autoWidth": false,
|
|
"buttons": [ "excel", "pdf", "print" ]
|
|
}).buttons().container().appendTo('#example3_wrapper .col-md-6:eq(0)');
|
|
});
|
|
</script>
|
|
<script>
|
|
document.addEventListener("DOMContentLoaded", function() {
|
|
var rupiahInputs = document.querySelectorAll(".rupiah");
|
|
|
|
// Tambahkan format Rupiah saat halaman dimuat
|
|
rupiahInputs.forEach(function(input) {
|
|
input.value = formatRupiah(input.value, "Rp. ");
|
|
});
|
|
|
|
// Event delegation untuk input dengan class rupiah
|
|
document.body.addEventListener("input", function(e) {
|
|
if (e.target.classList.contains("rupiah")) {
|
|
e.target.value = formatRupiah(e.target.value, "Rp. ");
|
|
}
|
|
});
|
|
});
|
|
|
|
/* Fungsi formatRupiah */
|
|
function formatRupiah(angka, prefix) {
|
|
var number_string = angka.replace(/[^,\d]/g, "").toString(),
|
|
split = number_string.split(","),
|
|
sisa = split[0].length % 3,
|
|
rupiah = split[0].substr(0, sisa),
|
|
ribuan = split[0].substr(sisa).match(/\d{3}/gi);
|
|
|
|
// Tambahkan titik jika angka sudah menjadi ribuan
|
|
if (ribuan) {
|
|
separator = sisa ? "." : "";
|
|
rupiah += separator + ribuan.join(".");
|
|
}
|
|
|
|
rupiah = split[1] != undefined ? rupiah + "," + split[1] : rupiah;
|
|
return prefix == undefined ? rupiah : rupiah ? prefix + rupiah : "";
|
|
}
|
|
</script>
|
|
<script>
|
|
$('#myForm').on('submit', function(e){
|
|
$('#myModal').modal('show');
|
|
e.preventDefault();
|
|
});
|
|
</script>
|
|
<!-- Page specific script -->
|
|
<script>
|
|
$(function () {
|
|
//Initialize Select2 Elements
|
|
$('.select2').select2()
|
|
|
|
//Initialize Select2 Elements
|
|
$('.select2bs4').select2({
|
|
theme: 'bootstrap4'
|
|
})
|
|
|
|
//Datemask dd/mm/yyyy
|
|
$('#datemask').inputmask('dd/mm/yyyy', { 'placeholder': 'dd/mm/yyyy' })
|
|
//Datemask2 mm/dd/yyyy
|
|
$('#datemask2').inputmask('mm/dd/yyyy', { 'placeholder': 'mm/dd/yyyy' })
|
|
//Money Euro
|
|
$('[data-mask]').inputmask()
|
|
|
|
//Date picker
|
|
$('#reservationdate').datetimepicker({
|
|
format: 'L'
|
|
});
|
|
|
|
//Date and time picker
|
|
$('#reservationdatetime').datetimepicker({ icons: { time: 'far fa-clock' } });
|
|
|
|
//Date range picker
|
|
$('#reservation').daterangepicker()
|
|
//Date range picker with time picker
|
|
$('#reservationtime').daterangepicker({
|
|
timePicker: true,
|
|
timePickerIncrement: 30,
|
|
locale: {
|
|
format: 'MM/DD/YYYY hh:mm A'
|
|
}
|
|
})
|
|
//Date range as a button
|
|
$('#daterange-btn').daterangepicker(
|
|
{
|
|
ranges : {
|
|
'Today' : [moment(), moment()],
|
|
'Yesterday' : [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
|
|
'Last 7 Days' : [moment().subtract(6, 'days'), moment()],
|
|
'Last 30 Days': [moment().subtract(29, 'days'), moment()],
|
|
'This Month' : [moment().startOf('month'), moment().endOf('month')],
|
|
'Last Month' : [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
|
|
},
|
|
startDate: moment().subtract(29, 'days'),
|
|
endDate : moment()
|
|
},
|
|
function (start, end) {
|
|
$('#reportrange span').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'))
|
|
}
|
|
)
|
|
|
|
//Timepicker
|
|
$('#timepicker').datetimepicker({
|
|
format: 'LT'
|
|
})
|
|
|
|
//Bootstrap Duallistbox
|
|
$('.duallistbox').bootstrapDualListbox()
|
|
|
|
//Colorpicker
|
|
$('.my-colorpicker1').colorpicker()
|
|
//color picker with addon
|
|
$('.my-colorpicker2').colorpicker()
|
|
|
|
$('.my-colorpicker2').on('colorpickerChange', function(event) {
|
|
$('.my-colorpicker2 .fa-square').css('color', event.color.toString());
|
|
})
|
|
|
|
$("input[data-bootstrap-switch]").each(function(){
|
|
$(this).bootstrapSwitch('state', $(this).prop('checked'));
|
|
})
|
|
|
|
})
|
|
|
|
</script>
|
|
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyA1MgLuZuyqR_OGY3ob3M52N46TDBRI_9k&callback=initMap" async defer></script>
|
|
<script>
|
|
var map;
|
|
var marker;
|
|
|
|
function initMap() {
|
|
var latitudeInput = document.getElementById('latitude').value;
|
|
var longitudeInput = document.getElementById('longitude').value;
|
|
|
|
// Cek apakah input form memiliki nilai
|
|
if (latitudeInput && longitudeInput) {
|
|
var pos = {
|
|
lat: parseFloat(latitudeInput),
|
|
lng: parseFloat(longitudeInput)
|
|
};
|
|
initMapWithPos(pos);
|
|
} else {
|
|
// Jika input form kosong, gunakan geolocation
|
|
if (navigator.geolocation) {
|
|
navigator.geolocation.getCurrentPosition(function(position) {
|
|
var pos = {
|
|
lat: position.coords.latitude,
|
|
lng: position.coords.longitude
|
|
};
|
|
initMapWithPos(pos);
|
|
updateFormInputs(pos.lat, pos.lng);
|
|
}, function() {
|
|
handleLocationError(true);
|
|
});
|
|
} else {
|
|
handleLocationError(false);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Fungsi untuk menginisialisasi peta dengan posisi yang diberikan
|
|
function initMapWithPos(pos) {
|
|
map = new google.maps.Map(document.getElementById('map'), {
|
|
center: pos,
|
|
zoom: 17,
|
|
mapTypeId: 'hybrid',
|
|
mapTypeControl: false,
|
|
streetViewControl: false,
|
|
fullscreenControl: true,
|
|
});
|
|
|
|
updateMarker(pos.lat, pos.lng);
|
|
|
|
// Event listener untuk menambahkan marker saat peta diklik
|
|
map.addListener('click', function(e) {
|
|
var latitude = e.latLng.lat().toFixed(6);
|
|
var longitude = e.latLng.lng().toFixed(6);
|
|
updateMarker(latitude, longitude);
|
|
updateFormInputs(latitude, longitude);
|
|
});
|
|
}
|
|
|
|
// Fungsi untuk menampilkan marker pada peta
|
|
function updateMarker(latitude, longitude) {
|
|
if (marker) {
|
|
marker.setPosition({lat: parseFloat(latitude), lng: parseFloat(longitude)});
|
|
} else {
|
|
marker = new google.maps.Marker({
|
|
position: {lat: parseFloat(latitude), lng: parseFloat(longitude)},
|
|
map: map
|
|
});
|
|
}
|
|
|
|
map.setCenter(marker.getPosition());
|
|
}
|
|
|
|
// Fungsi untuk memperbarui nilai input form
|
|
function updateFormInputs(latitude, longitude) {
|
|
document.getElementById('latitude').value = latitude;
|
|
document.getElementById('longitude').value = longitude;
|
|
|
|
// Perbarui input latlong
|
|
document.getElementById('latlong').value = `${latitude}, ${longitude}`;
|
|
}
|
|
|
|
// Tangani error jika geolocation tidak berhasil
|
|
function handleLocationError(browserHasGeolocation) {
|
|
alert(browserHasGeolocation ?
|
|
'Error: The Geolocation service failed.' :
|
|
'Error: Your browser doesn\'t support geolocation.');
|
|
}
|
|
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
const latlongInput = document.getElementById('latlong');
|
|
|
|
// Ambil input tersembunyi berdasarkan atribut data-maps
|
|
const latitudeInput = document.querySelector('input[data-maps="latitude"]');
|
|
const longitudeInput = document.querySelector('input[data-maps="longitude"]');
|
|
|
|
// Set nilai latlong jika latitude dan longitude sudah ada
|
|
if (latitudeInput.value && longitudeInput.value) {
|
|
latlongInput.value = `${latitudeInput.value}, ${longitudeInput.value}`;
|
|
}
|
|
|
|
latlongInput.addEventListener('input', function() {
|
|
const latlongValue = latlongInput.value.split(',');
|
|
|
|
// Validasi format latitude dan longitude
|
|
const latLongRegex = /^(-?\d+(\.\d+)?),\s*(-?\d+(\.\d+)?)$/; // Format: latitude, longitude
|
|
if (latLongRegex.test(latlongInput.value.trim())) {
|
|
// Pastikan kita memiliki dua nilai: latitude dan longitude
|
|
if (latlongValue.length === 2) {
|
|
const lat = latlongValue[0].trim();
|
|
const long = latlongValue[1].trim();
|
|
|
|
// Update input tersembunyi
|
|
latitudeInput.value = lat;
|
|
longitudeInput.value = long;
|
|
|
|
// Update marker dan center peta
|
|
updateMarker(lat, long);
|
|
map.setCenter({lat: parseFloat(lat), lng: parseFloat(long)});
|
|
}
|
|
} else {
|
|
// Jika format tidak valid, beri delay sebelum menampilkan pesan
|
|
setTimeout(function() {
|
|
latlongInput.value = ''; // Kosongkan nilai
|
|
latlongInput.placeholder = 'Isi dengan format yang sesuai'; // Tampilkan pesan
|
|
latitudeInput.value = ''; // Kosongkan input tersembunyi
|
|
longitudeInput.value = ''; // Kosongkan input tersembunyi
|
|
}, 500); // Delay 500ms
|
|
}
|
|
});
|
|
|
|
// Event listener untuk mengupdate latlong input saat latitude atau longitude diubah
|
|
latitudeInput.addEventListener('input', function() {
|
|
const lat = latitudeInput.value;
|
|
const long = longitudeInput.value;
|
|
|
|
// Update latlong input
|
|
latlongInput.value = `${lat}, ${long}`;
|
|
});
|
|
|
|
longitudeInput.addEventListener('input', function() {
|
|
const lat = latitudeInput.value;
|
|
const long = longitudeInput.value;
|
|
|
|
// Update latlong input
|
|
latlongInput.value = `${lat}, ${long}`;
|
|
});
|
|
});
|
|
|
|
</script>
|
|
<script>
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
const dropdown0 = document.getElementById('dropdown0');
|
|
const dropdown1 = document.getElementById('dropdown1');
|
|
const dropdown2 = document.getElementById('dropdown2');
|
|
const dropdown3 = document.getElementById('dropdown3');
|
|
const dropdown4 = document.getElementById('dropdown4');
|
|
const dropdown5 = document.getElementById('dropdown5');
|
|
const dropdown6 = document.getElementById('dropdown6');
|
|
|
|
// Menyembunyikan dropdown 2-6 pada awal
|
|
const groupDropdowns = [
|
|
document.getElementById('group-dropdown2'),
|
|
document.getElementById('group-dropdown3'),
|
|
document.getElementById('group-dropdown4'),
|
|
document.getElementById('group-dropdown5'),
|
|
document.getElementById('group-dropdown6')
|
|
];
|
|
|
|
groupDropdowns.forEach(group => {
|
|
if (group) group.style.display = 'none';
|
|
});
|
|
|
|
// Fungsi untuk mengupdate dropdown
|
|
function updateDropdown(dropdown, data) {
|
|
if (!dropdown) return; // Cek apakah dropdown ada
|
|
|
|
const selectedId = dropdown.getAttribute('data-id') || dropdown.value; // Ambil nilai data-id atau value saat ini
|
|
|
|
// Hapus semua opsi
|
|
dropdown.innerHTML = '';
|
|
|
|
// Tambahkan opsi default jika ada lebih dari satu opsi
|
|
if (data.length > 1) {
|
|
const defaultOption = document.createElement('option');
|
|
defaultOption.value = '';
|
|
defaultOption.textContent = 'Pilih';
|
|
dropdown.appendChild(defaultOption);
|
|
}
|
|
|
|
// Tambahkan opsi baru dari data server
|
|
data.forEach(option => {
|
|
const optionElement = document.createElement('option');
|
|
optionElement.value = option.id;
|
|
optionElement.textContent = option.nama;
|
|
|
|
// Set opsi sebagai selected jika id sesuai dengan data yang dipilih sebelumnya
|
|
if (option.id === selectedId) {
|
|
optionElement.selected = true;
|
|
}
|
|
dropdown.appendChild(optionElement);
|
|
});
|
|
|
|
// Tampilkan atau sembunyikan grup berdasarkan jumlah opsi
|
|
const groupElement = dropdown.closest('.form-group');
|
|
groupElement.style.display = data.length > 1 ? 'block' : 'none'; // Tampilkan atau sembunyikan grup dropdown
|
|
}
|
|
|
|
// Fungsi untuk mengupdate semua dropdown berdasarkan pilihan dropdown0 atau dropdown1
|
|
function updateAllDropdowns() {
|
|
const selectedOption0 = dropdown0.value;
|
|
const selectedOption1 = dropdown1.value;
|
|
|
|
if (dropdown2) {
|
|
fetch(`list_data/dropdown.php?dropdown=dropdown2&option=${encodeURIComponent(selectedOption0)}&option1=${encodeURIComponent(selectedOption1)}`)
|
|
.then(response => response.json())
|
|
.then(data => updateDropdown(dropdown2, data))
|
|
.catch(error => console.error('Error fetching dropdown2 data:', error));
|
|
}
|
|
|
|
if (dropdown3) {
|
|
fetch(`list_data/dropdown.php?dropdown=dropdown3&option=${encodeURIComponent(selectedOption0)}`)
|
|
.then(response => response.json())
|
|
.then(data => updateDropdown(dropdown3, data))
|
|
.catch(error => console.error('Error fetching dropdown3 data:', error));
|
|
}
|
|
|
|
if (dropdown4) {
|
|
fetch(`list_data/dropdown.php?dropdown=dropdown4&option=${encodeURIComponent(selectedOption0)}`)
|
|
.then(response => response.json())
|
|
.then(data => updateDropdown(dropdown4, data))
|
|
.catch(error => console.error('Error fetching dropdown4 data:', error));
|
|
}
|
|
|
|
if (dropdown5) {
|
|
fetch(`list_data/dropdown.php?dropdown=dropdown5&option=${encodeURIComponent(selectedOption0)}`)
|
|
.then(response => response.json())
|
|
.then(data => updateDropdown(dropdown5, data))
|
|
.catch(error => console.error('Error fetching dropdown5 data:', error));
|
|
}
|
|
|
|
if (dropdown6) {
|
|
fetch(`list_data/dropdown.php?dropdown=dropdown6&option=${encodeURIComponent(selectedOption0)}`)
|
|
.then(response => response.json())
|
|
.then(data => updateDropdown(dropdown6, data))
|
|
.catch(error => console.error('Error fetching dropdown6 data:', error));
|
|
}
|
|
}
|
|
|
|
// Mengisi dropdown0 dari server
|
|
if (dropdown0) {
|
|
fetch('list_data/dropdown.php?dropdown=dropdown0')
|
|
.then(response => response.json())
|
|
.then(options => {
|
|
options.forEach(option => {
|
|
const optionElement = document.createElement('option');
|
|
optionElement.value = option.id;
|
|
optionElement.textContent = option.label; // Pastikan bahwa label sesuai dengan data dari server
|
|
dropdown0.appendChild(optionElement);
|
|
});
|
|
|
|
// Jika dropdown0 sudah memiliki nilai, update dropdown lainnya
|
|
if (dropdown0.value) {
|
|
updateAllDropdowns();
|
|
}
|
|
})
|
|
.catch(error => console.error('Error fetching dropdown0 data:', error));
|
|
|
|
// Event listener untuk dropdown0
|
|
dropdown0.addEventListener('change', function() {
|
|
updateAllDropdowns();
|
|
});
|
|
}
|
|
|
|
// Mengisi dropdown1 dari server
|
|
if (dropdown1) {
|
|
fetch('list_data/dropdown.php?dropdown=dropdown1')
|
|
.then(response => response.json())
|
|
.then(options => {
|
|
options.forEach(option => {
|
|
const optionElement = document.createElement('option');
|
|
optionElement.value = option.id;
|
|
optionElement.textContent = option.label; // Pastikan bahwa label sesuai dengan data dari server
|
|
dropdown1.appendChild(optionElement);
|
|
});
|
|
|
|
// Jika dropdown1 sudah memiliki nilai, update dropdown lainnya
|
|
if (dropdown1.value) {
|
|
updateAllDropdowns();
|
|
}
|
|
|
|
// Tampilkan atau sembunyikan grup dropdown berdasarkan pilihan
|
|
const groupElement = document.getElementById('group-hotspot');
|
|
if (groupElement) { // Memeriksa apakah groupElement ada
|
|
if (dropdown1.value === "Hotspot") {
|
|
groupElement.style.display = 'block'; // Tampilkan grup dropdown
|
|
} else {
|
|
groupElement.style.display = 'none'; // Sembunyikan grup dropdown
|
|
}
|
|
}
|
|
})
|
|
.catch(error => console.error('Error fetching dropdown1 data:', error));
|
|
|
|
// Event listener untuk dropdown1
|
|
dropdown1.addEventListener('change', function() {
|
|
updateAllDropdowns();
|
|
|
|
// Tampilkan atau sembunyikan grup dropdown berdasarkan pilihan
|
|
const groupElement = document.getElementById('group-hotspot');
|
|
if (groupElement) { // Memeriksa apakah groupElement ada
|
|
if (dropdown1.value === "Hotspot") {
|
|
groupElement.style.display = 'block'; // Tampilkan grup dropdown
|
|
} else {
|
|
groupElement.style.display = 'none'; // Sembunyikan grup dropdown
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
|
|
// Jika dropdown1 sudah memiliki nilai saat halaman dimuat, update dropdown lainnya
|
|
if (dropdown1 && dropdown1.value) {
|
|
updateAllDropdowns();
|
|
}
|
|
});
|
|
|
|
</script>
|
|
|
|
<script type="text/javascript">
|
|
function fileValidation(){
|
|
var fileInput = document.getElementById('file');
|
|
var filePath = fileInput.value;
|
|
var allowedExtensions = /(\.jpg|\.jpeg|\.png|\.gif)$/i;
|
|
if(!allowedExtensions.exec(filePath)){
|
|
alert('Please upload file having extensions .jpeg/.jpg/.png/.gif only.');
|
|
fileInput.value = '';
|
|
return false;
|
|
}else{
|
|
//Image preview
|
|
if (fileInput.files && fileInput.files[0]) {
|
|
var reader = new FileReader();
|
|
reader.onload = function(e) {
|
|
document.getElementById('imagePreview').innerHTML = '<img style="max-width : 500px;" src="'+e.target.result+'"/>';
|
|
};
|
|
reader.readAsDataURL(fileInput.files[0]);
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
<script>
|
|
function updateSecondDropdown() {
|
|
const firstDropdown = document.getElementById('firstDropdown');
|
|
const secondDropdown = document.getElementById('secondDropdown');
|
|
|
|
// Cek apakah dropdown pertama ada
|
|
if (!firstDropdown || !secondDropdown) {
|
|
console.warn('Dropdown tidak ditemukan di halaman.');
|
|
return; // Keluar dari fungsi jika salah satu dropdown tidak ada
|
|
}
|
|
|
|
const selectedValue = firstDropdown.value;
|
|
const dataId = secondDropdown.getAttribute('data-id');
|
|
|
|
secondDropdown.innerHTML = '';
|
|
// Clear existing options except the first option
|
|
if (!dataId) {
|
|
secondDropdown.innerHTML = '<option value="">Pilih</option>';
|
|
}
|
|
|
|
if (!selectedValue) {
|
|
// If no value is selected in the first dropdown, keep the default option
|
|
return;
|
|
}
|
|
|
|
// Fetch data using the selected value
|
|
fetch(`list_data/form_topologi.php?category_id=${selectedValue}`)
|
|
.then(response => {
|
|
if (!response.ok) {
|
|
throw new Error('Network response was not ok');
|
|
}
|
|
return response.json();
|
|
})
|
|
.then(data => {
|
|
// Check if there's a data-id and if it's not empty
|
|
if (dataId) {
|
|
// Add data-id as the first option if it does not exist in the fetched data
|
|
const dataIdOption = document.createElement('option');
|
|
dataIdOption.value = dataId;
|
|
dataIdOption.textContent = `${dataId}`;
|
|
dataIdOption.selected = true;
|
|
// Check if the dataId option is already present
|
|
const existingOptions = Array.from(secondDropdown.options).map(option => option.value);
|
|
if (!existingOptions.includes(dataId)) {
|
|
secondDropdown.insertBefore(dataIdOption, secondDropdown.firstChild);
|
|
}
|
|
}
|
|
|
|
// Add options from the fetched data only if data is an array
|
|
if (Array.isArray(data)) {
|
|
data.forEach(subcategory => {
|
|
const option = document.createElement('option');
|
|
option.value = subcategory.port_odp;
|
|
option.textContent = subcategory.port_odp;
|
|
secondDropdown.appendChild(option);
|
|
});
|
|
} else {
|
|
console.warn('No data returned or data is not an array');
|
|
}
|
|
|
|
// Ensure the second dropdown is always visible if there are options
|
|
secondDropdown.style.display = 'block';
|
|
})
|
|
.catch(error => {
|
|
console.error('Error fetching data:', error);
|
|
// Ensure the second dropdown is visible even if there's an error
|
|
secondDropdown.style.display = 'block';
|
|
// Optionally, you can add a default error message
|
|
secondDropdown.innerHTML = '<option value="">Tidak ada data</option>';
|
|
});
|
|
}
|
|
|
|
// Initial call to populate the second dropdown if the first dropdown has a selected value
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
// Cek apakah dropdown pertama ada sebelum memanggil fungsi
|
|
const firstDropdown = document.getElementById('firstDropdown');
|
|
if (firstDropdown && firstDropdown.value) {
|
|
updateSecondDropdown();
|
|
}
|
|
});
|
|
|
|
</script>
|
|
|
|
</body>
|
|
</html>
|