first commit

This commit is contained in:
ansoriid 2025-05-28 09:09:37 +07:00
commit bb361a4301
812 changed files with 853825 additions and 0 deletions

47
.htaccess Normal file
View File

@ -0,0 +1,47 @@
RewriteEngine On
RewriteRule ^sitemap.xml$ sitemap.php [L]
RewriteRule ^sitemap-post.xml$ sitemap-post.php [L]
RewriteRule ^sitemap-page.xml$ sitemap-page.php [L]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteBase /
# # Redirect dari URL lama ke URL baru tanpa page/
RewriteRule ^page/(.*)$ /$1 [R=301,L]
# # Rewrite agar tetap mengakses folder di dalam /page/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ page/$1/ [L]
# BEGIN cPanel-generated php ini directives, do not edit
# Manual editing of this file may result in unexpected behavior.
# To make changes to this file, use the cPanel MultiPHP INI Editor (Home >> Software >> MultiPHP INI Editor)
# For more information, read our documentation (https://go.cpanel.net/EA4ModifyINI)
<IfModule php8_module>
php_flag display_errors Off
php_value max_execution_time 30
php_value max_input_time 60
php_value max_input_vars 1000
php_value memory_limit 128M
php_value post_max_size 8M
php_value session.gc_maxlifetime 1440
php_value session.save_path "/var/cpanel/php/sessions/ea-php80"
php_value upload_max_filesize 7M
php_flag zlib.output_compression Off
</IfModule>
<IfModule lsapi_module>
php_flag display_errors Off
php_value max_execution_time 30
php_value max_input_time 60
php_value max_input_vars 1000
php_value memory_limit 128M
php_value post_max_size 8M
php_value session.gc_maxlifetime 1440
php_value session.save_path "/var/cpanel/php/sessions/ea-php80"
php_value upload_max_filesize 7M
php_flag zlib.output_compression Off
</IfModule>
# END cPanel-generated php ini directives, do not edit

16
.user.ini Normal file
View File

@ -0,0 +1,16 @@
; cPanel-generated php ini directives, do not edit
; Manual editing of this file may result in unexpected behavior.
; To make changes to this file, use the cPanel MultiPHP INI Editor (Home >> Software >> MultiPHP INI Editor)
; For more information, read our documentation (https://go.cpanel.net/EA4ModifyINI)
[PHP]
display_errors = Off
max_execution_time = 30
max_input_time = 60
max_input_vars = 1000
memory_limit = 128M
post_max_size = 8M
session.gc_maxlifetime = 1440
session.save_path = "/var/cpanel/php/sessions/ea-php80"
upload_max_filesize = 7M
zlib.output_compression = Off

View File

@ -0,0 +1,135 @@
<?php
include '../auth.php';
include '../../koneksi.php';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$id_user = $_SESSION['user_id']; // Ambil dari sesi login
$judul = $_POST['judul'];
$konten = $_POST['konten'];
$kategori = $_POST['kategori'];
$meta_deskripsi = $_POST['meta_deskripsi'];
$meta_keyword = $_POST['meta_keyword'];
$tanggal = date("Y-m-d H:i:s");
$_SESSION['old_input'] = [
'judul' => $judul,
'konten' => $konten,
'kategori' => $kategori,
'meta_deskripsi' => $meta_deskripsi,
'meta_keyword' => $meta_keyword,
];
// Generate slug dari judul dengan memastikan unik
function generateUniqueSlug($conn, $judul) {
// Buat slug dasar dari judul
$slug = strtolower(trim(preg_replace('/[^A-Za-z0-9-]+/', '-', $judul), '-'));
$originalSlug = $slug;
$counter = 1;
// Cek apakah slug sudah ada di database
$sql = "SELECT COUNT(*) AS count FROM detail_artikel WHERE slug = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("s", $slug);
while (true) {
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();
// Jika slug sudah ada, tambahkan angka di belakangnya
if ($row['count'] > 0) {
$slug = $originalSlug . '-' . $counter;
$counter++;
} else {
break; // Keluar dari loop jika slug sudah unik
}
}
return $slug;
}
$slug = generateUniqueSlug($conn, $judul);
// **Upload Gambar**
$gambarNama = "";
if (!empty($_FILES['gambar']['name']) && $_FILES['gambar']['size'] > 0) {
$gambarTmp = $_FILES['gambar']['tmp_name'];
$gambarNama = time() . "_" . basename($_FILES['gambar']['name']);
$targetDir = "../../uploads/artikel/";
$targetFile = $targetDir . $gambarNama;
// Cek format gambar
$ext = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));
$allowedExt = ['jpg', 'jpeg', 'png', 'gif'];
if (!in_array($ext, $allowedExt)) {
$_SESSION['error'] = "Format gambar tidak valid! Gunakan JPG, JPEG, PNG, atau GIF.";
header("Location: ../artikel/tambah.php");
exit();
}
// Pindahkan file
if (!move_uploaded_file($gambarTmp, $targetFile)) {
$_SESSION['error'] = "Gagal mengunggah gambar!";
header("Location: ../artikel");
exit();
}
}
// **Cek apakah artikel sudah ada untuk id_user**
$cekArtikel = "SELECT id_artikel FROM artikel WHERE id_user = ?";
$stmt = $conn->prepare($cekArtikel);
$stmt->bind_param("i", $id_user);
$stmt->execute();
$stmt->bind_result($id_artikel);
$stmt->fetch();
$stmt->close();
if (!$id_artikel) {
// **Buat artikel baru**
$sqlArtikel = "INSERT INTO artikel (id_user) VALUES (?)";
$stmt = $conn->prepare($sqlArtikel);
$stmt->bind_param("i", $id_user);
if ($stmt->execute()) {
$id_artikel = $stmt->insert_id;
} else {
$_SESSION['error'] = "Gagal menyimpan artikel!";
header("Location: ../artikel");
exit();
}
$stmt->close();
}
// **Buat SEO baru setiap kali artikel baru**
$sqlSeo = "INSERT INTO seo_artikel (katakunci_seo, deskripsi_seo) VALUES (?, ?)";
$stmt = $conn->prepare($sqlSeo);
$stmt->bind_param("ss", $meta_keyword, $meta_deskripsi);
if ($stmt->execute()) {
$id_seo_artikel = $stmt->insert_id;
} else {
$_SESSION['error'] = "Gagal menyimpan data SEO!";
header("Location: ../artikel");
exit();
}
$stmt->close();
// **Simpan ke tabel detail_artikel**
$sqlDetail = "INSERT INTO detail_artikel (id_artikel, id_seo_artikel, judul_artikel, deskripsi_artikel, gambar_artikel, kategori, tanggal, slug)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
$stmt = $conn->prepare($sqlDetail);
$stmt->bind_param("iissssss", $id_artikel, $id_seo_artikel, $judul, $konten, $gambarNama, $kategori, $tanggal, $slug);
if ($stmt->execute()) {
$_SESSION['success'] = "Data Artikel berhasil ditambahkan!";
unset($_SESSION['old_input']);
} else {
$_SESSION['error'] = "Gagal menyimpan detail artikel!";
}
$stmt->close();
$conn->close();
header("Location: ../artikel");
exit();
}
?>

View File

@ -0,0 +1,47 @@
<?php
include '../auth.php';
include '../../koneksi.php';
if (isset($_GET['id'])) {
$id_artikel = $_GET['id'];
// Ambil informasi terkait artikel
$sql = "SELECT gambar_artikel, id_seo_artikel FROM detail_artikel WHERE id_detail_artikel = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("i", $id_artikel);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
$data = $result->fetch_assoc();
$gambar = $data['gambar_artikel'];
$id_seo_artikel = $data['id_seo_artikel'];
// Hapus gambar dari folder jika ada
if (!empty($gambar) && file_exists("../../uploads/artikel/" . $gambar)) {
unlink("../../uploads/artikel/" . $gambar);
}
// Hapus data dari `detail_artikel`
$sqlDeleteDetail = "DELETE FROM detail_artikel WHERE id_detail_artikel = ?";
$stmt = $conn->prepare($sqlDeleteDetail);
$stmt->bind_param("i", $id_artikel);
$stmt->execute();
// Hapus data dari `seo_artikel`
$sqlDeleteSeo = "DELETE FROM seo_artikel WHERE id_seo_artikel = ?";
$stmt = $conn->prepare($sqlDeleteSeo);
$stmt->bind_param("i", $id_seo_artikel);
$stmt->execute();
$_SESSION['success'] = "Artikel berhasil dihapus!";
} else {
$_SESSION['error'] = "Artikel tidak ditemukan!";
}
} else {
$_SESSION['error'] = "ID Artikel tidak valid!";
}
header("Location: ../artikel");
exit();
?>

312
admin/artikel/index.php Normal file
View File

@ -0,0 +1,312 @@
<?php
include '../auth.php';
include '../../koneksi.php';
$query = "SELECT id_detail_artikel, judul_artikel, kategori, DATE_FORMAT(tanggal, '%d-%m-%Y') as tanggal FROM detail_artikel";
$result = mysqli_query($conn, $query);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<title>Kelola Artikel | Admin</title>
<meta content="" name="description">
<meta content="" name="keywords">
<meta name="robots" content="noindex">
<!-- Favicons -->
<link href="../../assets/img/favicon.png" rel="icon">
<link href="../../assets/img/apple-touch-icon.png" rel="apple-touch-icon">
<!-- Google Fonts -->
<link href="https://fonts.gstatic.com" rel="preconnect">
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i,700,700i|Nunito:300,300i,400,400i,600,600i,700,700i|Poppins:300,300i,400,400i,500,500i,600,600i,700,700i" rel="stylesheet">
<!-- Vendor CSS Files -->
<link href="../../assets/template/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<link href="../../assets/template/vendor/bootstrap-icons/bootstrap-icons.css" rel="stylesheet">
<link href="../../assets/template/vendor/boxicons/css/boxicons.min.css" rel="stylesheet">
<link href="../../assets/template/vendor/quill/quill.snow.css" rel="stylesheet">
<link href="../../assets/template/vendor/quill/quill.bubble.css" rel="stylesheet">
<link href="../../assets/template/vendor/remixicon/remixicon.css" rel="stylesheet">
<link href="../../assets/template/vendor/simple-datatables/style.css" rel="stylesheet">
<!-- Template Main CSS File -->
<link href="../../assets/template/css/style.css" rel="stylesheet">
<!-- =======================================================
* Template Name: NiceAdmin
* Template URL: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/
* Updated: Apr 20 2024 with Bootstrap v5.3.3
* Author: BootstrapMade.com
* License: https://bootstrapmade.com/license/
======================================================== -->
</head>
<body>
<!-- ======= Header ======= -->
<header id="header" class="header fixed-top d-flex align-items-center">
<div class="d-flex align-items-center justify-content-between">
<a href="" class="logo d-flex align-items-center">
<img src="../../assets/img/logo.png" alt="">
<span class="d-none d-lg-block">Portal UMKM</span>
</a>
<i class="bi bi-list toggle-sidebar-btn"></i>
</div><!-- End Logo -->
<nav class="header-nav ms-auto">
<ul class="d-flex align-items-center">
<li class="nav-item dropdown pe-3">
<a class="nav-link nav-profile d-flex align-items-center pe-0" href="#" data-bs-toggle="dropdown">
<span class="fw-semibold dropdown-toggle ps-2">Hai, <?php echo $_SESSION['nama_lengkap']; ?>!</span>
</a><!-- End Profile Iamge Icon -->
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-arrow profile">
<li class="dropdown-header">
<h6><?php echo $_SESSION['nama_lengkap']; ?></h6>
<span><?php echo ucfirst($_SESSION['role']); ?></span>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li>
<a class="dropdown-item d-flex align-items-center" href="../update-profile/">
<i class="bi bi-gear"></i>
<span>Pengaturan</span>
</a>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li>
<a class="dropdown-item d-flex align-items-center" href="#" data-bs-toggle="modal" data-bs-target="#confirmLogoutModal">
<i class="bi bi-box-arrow-right"></i>
<span>Keluar</span>
</a>
</li>
</ul><!-- End Profile Dropdown Items -->
</li><!-- End Profile Nav -->
</ul>
</nav><!-- End Icons Navigation -->
</header><!-- End Header -->
<!-- ======= Sidebar ======= -->
<aside id="sidebar" class="sidebar">
<ul class="sidebar-nav sidebar-nav">
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center" href="../">
<i class="bi bi-columns-gap"></i>
<span>Dashboard</span>
</a>
</li>
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center" href="../landingpage">
<i class="bi bi-journal-richtext"></i>
<span>Landing Page</span>
</a>
</li>
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center collapsed" href="../artikel">
<i class="bi bi-newspaper"></i>
<span>Artikel</span>
</a>
</li>
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center" href="../pengguna">
<i class="bi bi-people"></i>
<span>Pengguna</span>
</a>
</li>
</ul>
</aside><!-- End Sidebar-->
<main id="main" class="main">
<div class="pagetitle">
<h1>Kelola Artikel</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="">Beranda</a></li>
<li class="breadcrumb-item">Artikel</li>
</ol>
</nav>
</div><!-- End Page Title -->
<?php if (isset($_SESSION['success'])): ?>
<div class="alert alert-success alert-dismissible fade show" role="alert">
<?php echo $_SESSION['success']; ?>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php unset($_SESSION['success']); // Hapus pesan setelah ditampilkan
?>
<?php endif; ?>
<?php if (isset($_SESSION['error'])): ?>
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<?php echo $_SESSION['error']; ?>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php unset($_SESSION['error']); // Hapus pesan setelah ditampilkan
?>
<?php endif; ?>
<section class="section">
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-body mt-3">
<div class="d-flex justify-content-end">
<a href="tambah.php" class="btn btn-primary mb-3">
<i class="bi bi-plus-circle"></i> Tambahkan Artikel
</a>
</div>
<!-- Table with stripped rows -->
<div class="table-responsive">
<table class="table datatable">
<thead>
<tr>
<th>No.</th>
<th>Judul</th>
<th>Kategori</th>
<th data-type="date" data-format="YYYY/DD/MM">Tanggal Publish</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
<?php
$no = 1;
while ($row = mysqli_fetch_assoc($result)) :
?>
<tr>
<td><?= $no++; ?></td>
<td><?= htmlspecialchars($row['judul_artikel']); ?></td>
<td><?= htmlspecialchars($row['kategori']); ?></td>
<td><?= $row['tanggal']; ?></td>
<td>
<a href="update.php?id=<?= $row['id_detail_artikel']; ?>" class="btn btn-sm btn-primary mt-1"><i class="bi bi-pencil-square mt-1"></i></a>
<button class="btn btn-sm btn-danger mt-1" data-bs-toggle="modal" data-bs-target="#confirmDeleteModal" data-id="<?= $row['id_detail_artikel']; ?>">
<i class="bi bi-trash"></i>
</button>
</td>
</tr>
<?php endwhile; ?>
</tbody>
</table>
</div>
<div class="modal fade" id="confirmDeleteModal" tabindex="-1" aria-labelledby="deleteModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="deleteModalLabel">Konfirmasi Hapus</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
Apakah Anda yakin ingin menghapus artikel ini?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
<a href="" id="deleteConfirmBtn" class="btn btn-danger">Hapus</a>
</div>
</div>
</div>
</div>
<!-- End Table with stripped rows -->
</div>
</div>
</div>
</div>
</section>
<!-- Modal Konfirmasi Logout -->
<div class="modal fade" id="confirmLogoutModal" tabindex="-1" aria-labelledby="logoutModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="logoutModalLabel">Konfirmasi Keluar</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
Apakah Anda yakin ingin keluar dari halaman ini?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
<a href="../logout.php" id="logoutConfirmBtn" class="btn btn-danger">Keluar</a>
</div>
</div>
</div>
</div>
</main><!-- End #main -->
<!-- ======= Footer ======= -->
<footer id="footer" class="footer">
<div class="copyright">
&copy; Copyright <strong><span>Portal UMKM</span></strong>. All Rights Reserved
</div>
<div class="credits">
<!-- All the links in the footer should remain intact. -->
<!-- You can delete the links only if you purchased the pro version. -->
<!-- Licensing information: https://bootstrapmade.com/license/ -->
<!-- Purchase the pro version with working PHP/AJAX contact form: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/ -->
<!-- Designed by <a href="https://bootstrapmade.com/">BootstrapMade</a> -->
</div>
</footer><!-- End Footer -->
<a href="#" class="back-to-top d-flex align-items-center justify-content-center"><i class="bi bi-arrow-up-short"></i></a>
<!-- Vendor JS Files -->
<script src="../../assets/template/vendor/apexcharts/apexcharts.min.js"></script>
<script src="../../assets/template/vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
<script src="../../assets/template/vendor/chart.js/chart.umd.js"></script>
<script src="../../assets/template/vendor/echarts/echarts.min.js"></script>
<script src="../../assets/template/vendor/quill/quill.js"></script>
<script src="../../assets/template/vendor/simple-datatables/simple-datatables.js"></script>
<script src="../../assets/template/vendor/tinymce/tinymce.min.js"></script>
<script src="../../assets/template/vendor/php-email-form/validate.js"></script>
<!-- Template Main JS File -->
<script src="../../assets/template/js/main.js"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
var deleteModal = document.getElementById('confirmDeleteModal');
deleteModal.addEventListener('show.bs.modal', function(event) {
var button = event.relatedTarget; // Tombol yang diklik
var id = button.getAttribute('data-id'); // Ambil ID produk
var deleteLink = document.getElementById('deleteConfirmBtn');
deleteLink.href = "deleteartikel.php?id=" + id; // Set href untuk hapus
});
});
</script>
</body>
</html>

21
admin/artikel/proxy.php Normal file
View File

@ -0,0 +1,21 @@
<?php
if (isset($_GET['q'])) {
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST');
header('Access-Control-Allow-Headers: Content-Type');
header('Content-Type: application/json');
$query = urlencode($_GET['q']);
$url = "https://suggestqueries.google.com/complete/search?client=firefox&q={$query}";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
}
?>

346
admin/artikel/tambah.php Normal file
View File

@ -0,0 +1,346 @@
<?php
include '../auth.php';
include '../../koneksi.php';
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<title>Tambahkan Artikel | Admin</title>
<meta content="" name="description">
<meta content="" name="keywords">
<meta name="robots" content="noindex">
<!-- Favicons -->
<link href="../../assets/img/favicon.png" rel="icon">
<link href="../../assets/img/apple-touch-icon.png" rel="apple-touch-icon">
<!-- Google Fonts -->
<link href="https://fonts.gstatic.com" rel="preconnect">
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i,700,700i|Nunito:300,300i,400,400i,600,600i,700,700i|Poppins:300,300i,400,400i,500,500i,600,600i,700,700i" rel="stylesheet">
<!-- Vendor CSS Files -->
<link href="../../assets/template/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<link href="../../assets/template/vendor/bootstrap-icons/bootstrap-icons.css" rel="stylesheet">
<link href="../../assets/template/vendor/boxicons/css/boxicons.min.css" rel="stylesheet">
<link href="../../assets/template/vendor/quill/quill.snow.css" rel="stylesheet">
<link href="../../assets/template/vendor/quill/quill.bubble.css" rel="stylesheet">
<link href="../../assets/template/vendor/remixicon/remixicon.css" rel="stylesheet">
<link href="../../assets/template/vendor/simple-datatables/style.css" rel="stylesheet">
<!-- Template Main CSS File -->
<link href="../../assets/template/css/style.css" rel="stylesheet">
<!-- =======================================================
* Template Name: NiceAdmin
* Template URL: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/
* Updated: Apr 20 2024 with Bootstrap v5.3.3
* Author: BootstrapMade.com
* License: https://bootstrapmade.com/license/
======================================================== -->
</head>
<body>
<!-- ======= Header ======= -->
<header id="header" class="header fixed-top d-flex align-items-center">
<div class="d-flex align-items-center justify-content-between">
<a href="" class="logo d-flex align-items-center">
<img src="../../assets/img/logo.png" alt="">
<span class="d-none d-lg-block">Portal UMKM</span>
</a>
<i class="bi bi-list toggle-sidebar-btn"></i>
</div><!-- End Logo -->
<nav class="header-nav ms-auto">
<ul class="d-flex align-items-center">
<li class="nav-item dropdown pe-3">
<a class="nav-link nav-profile d-flex align-items-center pe-0" href="#" data-bs-toggle="dropdown">
<span class="fw-semibold dropdown-toggle ps-2">Hai, <?php echo $_SESSION['nama_lengkap']; ?>!</span>
</a><!-- End Profile Iamge Icon -->
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-arrow profile">
<li class="dropdown-header">
<h6><?php echo $_SESSION['nama_lengkap']; ?></h6>
<span><?php echo ucfirst($_SESSION['role']); ?></span>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li>
<a class="dropdown-item d-flex align-items-center" href="../update-profile/">
<i class="bi bi-gear"></i>
<span>Pengaturan</span>
</a>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li>
<a class="dropdown-item d-flex align-items-center" href="#" data-bs-toggle="modal" data-bs-target="#confirmLogoutModal">
<i class="bi bi-box-arrow-right"></i>
<span>Keluar</span>
</a>
</li>
</ul><!-- End Profile Dropdown Items -->
</li><!-- End Profile Nav -->
</ul>
</nav><!-- End Icons Navigation -->
</header><!-- End Header -->
<!-- ======= Sidebar ======= -->
<aside id="sidebar" class="sidebar">
<ul class="sidebar-nav sidebar-nav">
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center" href="../">
<i class="bi bi-columns-gap"></i>
<span>Dashboard</span>
</a>
</li>
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center" href="../landingpage">
<i class="bi bi-journal-richtext"></i>
<span>Landing Page</span>
</a>
</li>
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center collapsed" href="../artikel">
<i class="bi bi-newspaper"></i>
<span>Artikel</span>
</a>
</li>
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center" href="../pengguna">
<i class="bi bi-people"></i>
<span>Pengguna</span>
</a>
</li>
</ul>
</aside><!-- End Sidebar-->
<main id="main" class="main">
<div class="pagetitle">
<h1>Tambahkan Artikel</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="">Beranda</a></li>
<li class="breadcrumb-item">Artikel</li>
</ol>
</nav>
</div><!-- End Page Title -->
<?php if (isset($_SESSION['success'])): ?>
<div class="alert alert-success alert-dismissible fade show" role="alert">
<?php echo $_SESSION['success']; ?>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php unset($_SESSION['success']); // Hapus pesan setelah ditampilkan
?>
<?php endif; ?>
<?php if (isset($_SESSION['error'])): ?>
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<?php echo $_SESSION['error']; ?>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php unset($_SESSION['error']); // Hapus pesan setelah ditampilkan
?>
<?php endif; ?>
<section class="section">
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-body mt-3">
<form action="addartikel.php" method="POST" enctype="multipart/form-data">
<!-- Judul Artikel -->
<div class="mb-3">
<label for="judul" class="form-label">Judul Artikel<span class="text-danger">*</span></label>
<input type="text" id="judul" name="judul" class="form-control" value="<?= isset($_SESSION['old_input']['judul']) ? htmlspecialchars($_SESSION['old_input']['judul']) : '' ?>" required>
</div>
<!-- Form Editor -->
<div class="mb-3">
<label for="konten" class="form-label">Konten Artikel<span class="text-danger">*</span></label>
<textarea id="konten" name="konten" class="form-control"><?= isset($_SESSION['old_input']['konten']) ? htmlspecialchars($_SESSION['old_input']['konten']) : '' ?></textarea>
<script src="https://cdn.ckeditor.com/4.22.1/standard/ckeditor.js"></script>
<script>
CKEDITOR.replace('konten');
</script>
</div>
<!-- Gambar -->
<div class="mb-3">
<label for="gambar" class="form-label">Unggah Gambar<span class="text-danger">*</span></label>
<input type="file" id="gambar" name="gambar" accept="image/*" class="form-control" required>
</div>
<!-- Kategori Dropdown -->
<div class="mb-3">
<label for="kategori" class="form-label">Pilih Kategori<span class="text-danger">*</span></label>
<select id="kategori" name="kategori" class="form-control" required>
<option value="" disabled>-- Pilih Kategori --</option>
<option value="tutorial" <?= (isset($_SESSION['old_input']['kategori']) && $_SESSION['old_input']['kategori'] == 'tutorial') ? 'selected' : '' ?>>Tutorial</option>
<option value="informasi" <?= (isset($_SESSION['old_input']['kategori']) && $_SESSION['old_input']['kategori'] == 'informasi') ? 'selected' : '' ?>>Informasi</option>
<option value="lainnya" <?= (isset($_SESSION['old_input']['kategori']) && $_SESSION['old_input']['kategori'] == 'lainnya') ? 'selected' : '' ?>>Lainnya</option>
</select>
</div>
<!-- Meta Deskripsi -->
<div class="mb-3">
<label for="meta_deskripsi" class="form-label">Meta Deskripsi<span class="text-danger">*</span></label>
<textarea id="meta_deskripsi" name="meta_deskripsi" class="form-control" rows="2" required><?= isset($_SESSION['old_input']['meta_deskripsi']) ? htmlspecialchars($_SESSION['old_input']['meta_deskripsi']) : '' ?></textarea>
</div>
<!-- Meta Keyword -->
<div class="mb-3">
<label for="meta_keyword" class="form-label">Meta Kata Kunci<span class="text-danger">*</span></label>
<input type="text" id="meta_keyword" name="meta_keyword" class="form-control" required
value="<?= isset($_SESSION['old_input']['meta_keyword']) ? htmlspecialchars($_SESSION['old_input']['meta_keyword']) : '' ?>">
<ul id="suggestions" class="list-group mt-2"></ul>
<small class="text-muted">Pisahkan dengan koma, contoh: teknologi, berita, tutorial</small>
</div>
<!-- Tombol Submit -->
<div class="d-flex justify-content-end">
<button type="submit" class="btn btn-primary me-2"><i class="bi bi-check-circle"></i> Simpan</button>
<a href="../artikel/" class="btn btn-secondary me-2"><i class="bi bi-x-circle"></i> Batal</a>
</div>
</form>
</div>
</div>
</div>
</div>
</section>
<!-- Modal Konfirmasi Logout -->
<div class="modal fade" id="confirmLogoutModal" tabindex="-1" aria-labelledby="logoutModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="logoutModalLabel">Konfirmasi Keluar</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
Apakah Anda yakin ingin keluar dari halaman ini?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
<a href="../logout.php" id="logoutConfirmBtn" class="btn btn-danger">Keluar</a>
</div>
</div>
</div>
</div>
</main><!-- End #main -->
<!-- ======= Footer ======= -->
<footer id="footer" class="footer">
<div class="copyright">
&copy; Copyright <strong><span>Portal UMKM</span></strong>. All Rights Reserved
</div>
<div class="credits">
<!-- All the links in the footer should remain intact. -->
<!-- You can delete the links only if you purchased the pro version. -->
<!-- Licensing information: https://bootstrapmade.com/license/ -->
<!-- Purchase the pro version with working PHP/AJAX contact form: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/ -->
<!-- Designed by <a href="https://bootstrapmade.com/">BootstrapMade</a> -->
</div>
</footer><!-- End Footer -->
<a href="#" class="back-to-top d-flex align-items-center justify-content-center"><i class="bi bi-arrow-up-short"></i></a>
<!-- Vendor JS Files -->
<script src="../../assets/template/vendor/apexcharts/apexcharts.min.js"></script>
<script src="../../assets/template/vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
<script src="../../assets/template/vendor/chart.js/chart.umd.js"></script>
<script src="../../assets/template/vendor/echarts/echarts.min.js"></script>
<script src="../../assets/template/vendor/quill/quill.js"></script>
<script src="../../assets/template/vendor/simple-datatables/simple-datatables.js"></script>
<script src="../../assets/template/vendor/tinymce/tinymce.min.js"></script>
<script src="../../assets/template/vendor/php-email-form/validate.js"></script>
<!-- Template Main JS File -->
<script src="../../assets/template/js/main.js"></script>
<!-- Place the following <script> and <textarea> tags your HTML's <body> -->
<script>
CKEDITOR.replace('konten', {
height: 300, // Sesuaikan tinggi editor
toolbar: [
{ name: 'basicstyles', items: ['Bold', 'Italic', 'Underline', 'Strike'] },
{ name: 'paragraph', items: ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent'] },
{ name: 'insert', items: ['Image', 'Table', 'Link'] },
{ name: 'styles', items: ['Font', 'FontSize', 'TextColor', 'BGColor'] },
{ name: 'tools', items: ['Maximize'] }
]
});
document.getElementById('meta_keyword').addEventListener('input', function () {
let inputField = this;
let suggestionsList = document.getElementById('suggestions');
if (!suggestionsList) return;
let values = inputField.value.split(',').map(v => v.trim());
let query = values.pop(); // Ambil kata terakhir untuk dijadikan query
if (query.length < 2) {
suggestionsList.innerHTML = '';
return;
}
fetch(`proxy.php?q=${query}`)
.then(response => response.json())
.then(data => {
let suggestions = data[1] || [];
suggestionsList.innerHTML = '';
suggestions.forEach(item => {
let li = document.createElement('li');
li.classList.add('list-group-item');
li.textContent = item;
li.style.cursor = 'pointer';
li.addEventListener('click', function () {
values.push(item); // Ganti kata terakhir dengan saran yang dipilih
inputField.value = values.join(', ') + ', '; // Gabungkan kembali dengan koma
suggestionsList.innerHTML = '';
});
suggestionsList.appendChild(li);
});
})
.catch(error => console.error('Error:', error));
});
</script>
</body>
</html>

368
admin/artikel/update.php Normal file
View File

@ -0,0 +1,368 @@
<?php
include '../auth.php';
include '../../koneksi.php';
if (isset($_GET['id'])) {
$id_artikel = $_GET['id'];
// Ambil data artikel berdasarkan ID
$query = "SELECT da.*, sa.katakunci_seo, sa.deskripsi_seo
FROM detail_artikel da
JOIN seo_artikel sa ON da.id_seo_artikel = sa.id_seo_artikel
WHERE da.id_detail_artikel = '$id_artikel'";
$result = mysqli_query($conn, $query);
$row = mysqli_fetch_assoc($result);
if (!$row) {
echo "Artikel tidak ditemukan!";
exit;
}
} else {
echo "ID artikel tidak tersedia!";
exit;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<title>Memperbarui Artikel | Admin</title>
<meta content="" name="description">
<meta content="" name="keywords">
<meta name="robots" content="noindex">
<!-- Favicons -->
<link href="../../assets/img/favicon.png" rel="icon">
<link href="../../assets/img/apple-touch-icon.png" rel="apple-touch-icon">
<!-- Google Fonts -->
<link href="https://fonts.gstatic.com" rel="preconnect">
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i,700,700i|Nunito:300,300i,400,400i,600,600i,700,700i|Poppins:300,300i,400,400i,500,500i,600,600i,700,700i" rel="stylesheet">
<!-- Vendor CSS Files -->
<link href="../../assets/template/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<link href="../../assets/template/vendor/bootstrap-icons/bootstrap-icons.css" rel="stylesheet">
<link href="../../assets/template/vendor/boxicons/css/boxicons.min.css" rel="stylesheet">
<link href="../../assets/template/vendor/quill/quill.snow.css" rel="stylesheet">
<link href="../../assets/template/vendor/quill/quill.bubble.css" rel="stylesheet">
<link href="../../assets/template/vendor/remixicon/remixicon.css" rel="stylesheet">
<link href="../../assets/template/vendor/simple-datatables/style.css" rel="stylesheet">
<!-- Template Main CSS File -->
<link href="../../assets/template/css/style.css" rel="stylesheet">
<!-- =======================================================
* Template Name: NiceAdmin
* Template URL: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/
* Updated: Apr 20 2024 with Bootstrap v5.3.3
* Author: BootstrapMade.com
* License: https://bootstrapmade.com/license/
======================================================== -->
</head>
<body>
<!-- ======= Header ======= -->
<header id="header" class="header fixed-top d-flex align-items-center">
<div class="d-flex align-items-center justify-content-between">
<a href="" class="logo d-flex align-items-center">
<img src="../../assets/img/logo.png" alt="">
<span class="d-none d-lg-block">Portal UMKM</span>
</a>
<i class="bi bi-list toggle-sidebar-btn"></i>
</div><!-- End Logo -->
<nav class="header-nav ms-auto">
<ul class="d-flex align-items-center">
<li class="nav-item dropdown pe-3">
<a class="nav-link nav-profile d-flex align-items-center pe-0" href="#" data-bs-toggle="dropdown">
<span class="fw-semibold dropdown-toggle ps-2">Hai, <?php echo $_SESSION['nama_lengkap']; ?>!</span>
</a><!-- End Profile Iamge Icon -->
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-arrow profile">
<li class="dropdown-header">
<h6><?php echo $_SESSION['nama_lengkap']; ?></h6>
<span><?php echo ucfirst($_SESSION['role']); ?></span>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li>
<a class="dropdown-item d-flex align-items-center" href="../update-profile/">
<i class="bi bi-gear"></i>
<span>Pengaturan</span>
</a>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li>
<a class="dropdown-item d-flex align-items-center" href="#" data-bs-toggle="modal" data-bs-target="#confirmLogoutModal">
<i class="bi bi-box-arrow-right"></i>
<span>Keluar</span>
</a>
</li>
</ul><!-- End Profile Dropdown Items -->
</li><!-- End Profile Nav -->
</ul>
</nav><!-- End Icons Navigation -->
</header><!-- End Header -->
<!-- ======= Sidebar ======= -->
<aside id="sidebar" class="sidebar">
<ul class="sidebar-nav sidebar-nav">
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center" href="../">
<i class="bi bi-columns-gap"></i>
<span>Dashboard</span>
</a>
</li>
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center" href="../landingpage">
<i class="bi bi-journal-richtext"></i>
<span>Landing Page</span>
</a>
</li>
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center collapsed" href="../artikel">
<i class="bi bi-newspaper"></i>
<span>Artikel</span>
</a>
</li>
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center" href="../pengguna">
<i class="bi bi-people"></i>
<span>Pengguna</span>
</a>
</li>
</ul>
</aside><!-- End Sidebar-->
<main id="main" class="main">
<div class="pagetitle">
<h1>Memperbarui Artikel</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="">Beranda</a></li>
<li class="breadcrumb-item">Artikel</li>
</ol>
</nav>
</div><!-- End Page Title -->
<?php if (isset($_SESSION['success'])): ?>
<div class="alert alert-success alert-dismissible fade show" role="alert">
<?php echo $_SESSION['success']; ?>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php unset($_SESSION['success']); // Hapus pesan setelah ditampilkan
?>
<?php endif; ?>
<?php if (isset($_SESSION['error'])): ?>
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<?php echo $_SESSION['error']; ?>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php unset($_SESSION['error']); // Hapus pesan setelah ditampilkan
?>
<?php endif; ?>
<section class="section">
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-body mt-3">
<form action="updateartikel.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="id" id="id" value="<?= $row['id_detail_artikel']; ?>">
<!-- Judul Artikel -->
<div class="mb-3">
<label for="judul" class="form-label">Judul Artikel<span class="text-danger">*</span></label>
<input type="text" id="judul" name="judul" class="form-control" value="<?= htmlspecialchars($row['judul_artikel']); ?>" required>
</div>
<!-- Form Editor -->
<div class="mb-3">
<label for="konten" class="form-label">Konten Artikel<span class="text-danger">*</span></label>
<textarea id="konten" name="konten" class="form-control" required><?= htmlspecialchars($row['deskripsi_artikel']); ?></textarea>
<script src="https://cdn.ckeditor.com/4.22.1/standard/ckeditor.js"></script>
<script>
CKEDITOR.replace('konten');
</script>
</div>
<!-- Gambar -->
<div class="mb-3">
<label for="gambar" class="form-label">Unggah Gambar</label>
<input type="file" id="gambar" name="gambar" accept="image/*" class="form-control">
<small class="text-muted">Kosongkan jika tidak ingin mengganti gambar.</small>
</div>
<!-- Kategori Dropdown -->
<div class="mb-3">
<label for="kategori" class="form-label">Pilih Kategori<span class="text-danger">*</span></label>
<select id="kategori" name="kategori" class="form-control" required>
<option value="" disabled>-- Pilih Kategori --</option>
<option value="tutorial" <?= ($row['kategori'] == 'tutorial') ? 'selected' : ''; ?>>Tutorial</option>
<option value="informasi" <?= ($row['kategori'] == 'informasi') ? 'selected' : ''; ?>>Informasi</option>
<option value="lainnya" <?= ($row['kategori'] == 'lainnya') ? 'selected' : ''; ?>>Lainnya</option>
</select>
</div>
<!-- Meta Deskripsi -->
<div class="mb-3">
<label for="meta_deskripsi" class="form-label">Meta Deskripsi<span class="text-danger">*</span></label>
<textarea id="meta_deskripsi" name="meta_deskripsi" class="form-control" rows="2" required><?= htmlspecialchars($row['deskripsi_seo']); ?></textarea>
</div>
<!-- Meta Keyword -->
<div class="mb-3">
<label for="meta_keyword" class="form-label">Meta Kata Kunci<span class="text-danger">*</span></label>
<input type="text" id="meta_keyword" name="meta_keyword" class="form-control" value="<?= htmlspecialchars($row['katakunci_seo']); ?>" required>
<ul id="suggestions" class="list-group mt-2"></ul>
<small class="text-muted">Pisahkan dengan koma, contoh: teknologi, berita, tutorial</small>
</div>
<!-- Tombol Submit -->
<div class="d-flex justify-content-end">
<button type="submit" class="btn btn-primary me-2"><i class="bi bi-check-circle"></i> Simpan</button>
<a href="../artikel/" class="btn btn-secondary me-2"><i class="bi bi-x-circle"></i> Batal</a>
</div>
</form>
</div>
</div>
</div>
</div>
</section>
<!-- Modal Konfirmasi Logout -->
<div class="modal fade" id="confirmLogoutModal" tabindex="-1" aria-labelledby="logoutModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="logoutModalLabel">Konfirmasi Keluar</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
Apakah Anda yakin ingin keluar dari halaman ini?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
<a href="../logout.php" id="logoutConfirmBtn" class="btn btn-danger">Keluar</a>
</div>
</div>
</div>
</div>
</main><!-- End #main -->
<!-- ======= Footer ======= -->
<footer id="footer" class="footer">
<div class="copyright">
&copy; Copyright <strong><span>Portal UMKM</span></strong>. All Rights Reserved
</div>
<div class="credits">
<!-- All the links in the footer should remain intact. -->
<!-- You can delete the links only if you purchased the pro version. -->
<!-- Licensing information: https://bootstrapmade.com/license/ -->
<!-- Purchase the pro version with working PHP/AJAX contact form: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/ -->
<!-- Designed by <a href="https://bootstrapmade.com/">BootstrapMade</a> -->
</div>
</footer><!-- End Footer -->
<a href="#" class="back-to-top d-flex align-items-center justify-content-center"><i class="bi bi-arrow-up-short"></i></a>
<!-- Vendor JS Files -->
<script src="../../assets/template/vendor/apexcharts/apexcharts.min.js"></script>
<script src="../../assets/template/vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
<script src="../../assets/template/vendor/chart.js/chart.umd.js"></script>
<script src="../../assets/template/vendor/echarts/echarts.min.js"></script>
<script src="../../assets/template/vendor/quill/quill.js"></script>
<script src="../../assets/template/vendor/simple-datatables/simple-datatables.js"></script>
<script src="../../assets/template/vendor/tinymce/tinymce.min.js"></script>
<script src="../../assets/template/vendor/php-email-form/validate.js"></script>
<!-- Template Main JS File -->
<script src="../../assets/template/js/main.js"></script>
<!-- Place the following <script> and <textarea> tags your HTML's <body> -->
<script>
CKEDITOR.replace('konten', {
height: 300, // Sesuaikan tinggi editor
toolbar: [
{ name: 'basicstyles', items: ['Bold', 'Italic', 'Underline', 'Strike'] },
{ name: 'paragraph', items: ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent'] },
{ name: 'insert', items: ['Image', 'Table', 'Link'] },
{ name: 'styles', items: ['Font', 'FontSize', 'TextColor', 'BGColor'] },
{ name: 'tools', items: ['Maximize'] }
]
});
document.getElementById('meta_keyword').addEventListener('input', function () {
let inputField = this;
let suggestionsList = document.getElementById('suggestions');
if (!suggestionsList) return;
let values = inputField.value.split(',').map(v => v.trim());
let query = values.pop(); // Ambil kata terakhir untuk dijadikan query
if (query.length < 2) {
suggestionsList.innerHTML = '';
return;
}
fetch(`proxy.php?q=${query}`)
.then(response => response.json())
.then(data => {
let suggestions = data[1] || [];
suggestionsList.innerHTML = '';
suggestions.forEach(item => {
let li = document.createElement('li');
li.classList.add('list-group-item');
li.textContent = item;
li.style.cursor = 'pointer';
li.addEventListener('click', function () {
values.push(item); // Ganti kata terakhir dengan saran yang dipilih
inputField.value = values.join(', ') + ', '; // Gabungkan kembali dengan koma
suggestionsList.innerHTML = '';
});
suggestionsList.appendChild(li);
});
})
.catch(error => console.error('Error:', error));
});
</script>
</body>
</html>

View File

@ -0,0 +1,102 @@
<?php
include '../auth.php';
include '../../koneksi.php';
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$id = $_POST['id']; // ID artikel
$judul = $_POST['judul'];
$konten = $_POST['konten'];
$kategori = $_POST['kategori'];
$meta_deskripsi = $_POST['meta_deskripsi'];
$meta_keyword = $_POST['meta_keyword'];
// Generate slug dari judul
function buatSlug($text) {
$text = strtolower($text);
$text = preg_replace('/[^a-z0-9]+/i', '-', $text);
$text = trim($text, '-');
return $text;
}
$slug = buatSlug($judul);
// Cek apakah slug sudah ada di database
$slug_check = $slug;
$counter = 1;
while (true) {
$querySlug = "SELECT id_detail_artikel FROM detail_artikel WHERE slug = ? AND id_detail_artikel != ?";
$stmt = $conn->prepare($querySlug);
$stmt->bind_param("si", $slug_check, $id);
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows == 0) {
break; // Slug unik
} else {
$slug_check = $slug . '-' . $counter;
$counter++;
}
}
$slug = $slug_check;
$stmt->close();
// Ambil id_seo_artikel dari detail_artikel
$querySeo = "SELECT id_seo_artikel, gambar_artikel FROM detail_artikel WHERE id_detail_artikel = ?";
$stmt = $conn->prepare($querySeo);
$stmt->bind_param("i", $id);
$stmt->execute();
$stmt->bind_result($id_seo_artikel, $gambar_lama);
$stmt->fetch();
$stmt->close();
// Update SEO Artikel
$querySeoUpdate = "UPDATE seo_artikel SET katakunci_seo=?, deskripsi_seo=? WHERE id_seo_artikel=?";
$stmt = $conn->prepare($querySeoUpdate);
$stmt->bind_param("ssi", $meta_keyword, $meta_deskripsi, $id_seo_artikel);
$stmt->execute();
$stmt->close();
// Periksa apakah ada gambar baru
if ($_FILES['gambar']['name']) {
$gambar_baru = $_FILES['gambar']['name'];
$gambar_tmp = $_FILES['gambar']['tmp_name'];
$path_upload = "../../uploads/artikel/" . $gambar_baru;
// **VALIDASI FORMAT GAMBAR**
$allowed_types = ['image/jpeg', 'image/jpg', 'image/png'];
$file_mime = mime_content_type($gambar_tmp);
if (!in_array($file_mime, $allowed_types)) {
$_SESSION['error'] = "Format gambar tidak valid! Gunakan JPG, JPEG, atau PNG.";
header("Location: ../artikel/update.php?id=$id");
exit();
}
// Hapus gambar lama jika ada
if ($gambar_lama && file_exists("../../uploads/artikel/" . $gambar_lama)) {
unlink("../../uploads/artikel/" . $gambar_lama);
}
// Pindahkan gambar baru ke folder
move_uploaded_file($gambar_tmp, $path_upload);
} else {
$gambar_baru = $gambar_lama; // Jika tidak ada gambar baru, gunakan yang lama
}
// Update Detail Artikel
$query = "UPDATE detail_artikel SET judul_artikel=?, slug=?, deskripsi_artikel=?, kategori=?, gambar_artikel=? WHERE id_detail_artikel =?";
$stmt = $conn->prepare($query);
$stmt->bind_param("sssssi", $judul, $slug, $konten, $kategori, $gambar_baru, $id);
if ($stmt->execute()) {
$_SESSION['success'] = "Artikel berhasil diperbarui!";
header("Location: ../artikel");
} else {
$_SESSION['error'] = "Gagal memperbarui artikel!";
header("Location: ../artikel");
}
$stmt->close();
$conn->close();
}
?>

12
admin/auth.php Normal file
View File

@ -0,0 +1,12 @@
<?php
session_start();
if (!isset($_SESSION['user_id'])) {
$_SESSION['error'] = "Anda harus login terlebih dahulu!";
header("Location: ../login");
exit();
}
if ($_SESSION['role'] !== 'admin') {
exit();
}
?>

335
admin/index.php Normal file
View File

@ -0,0 +1,335 @@
<?php
include 'auth.php';
include '../koneksi.php';
// Total Semua
$queryUsersTotal = "SELECT COUNT(*) AS total_users FROM users WHERE status = 'active' AND role = 'user'";
$resultUsersTotal = mysqli_query($conn, $queryUsersTotal);
$rowUsersTotal = mysqli_fetch_assoc($resultUsersTotal);
$totalUsers = $rowUsersTotal['total_users'];
// 7 Hari Terakhir
$queryUsersThisWeek = "SELECT COUNT(*) AS total_this_week FROM users WHERE status = 'active' AND role = 'user' AND created_at >= CURDATE() - INTERVAL 7 DAY";
$resultUsersThisWeek = mysqli_query($conn, $queryUsersThisWeek);
$rowUsersThisWeek = mysqli_fetch_assoc($resultUsersThisWeek);
$totalUsersThisWeek = $rowUsersThisWeek['total_this_week'];
// 7 Hari Sebelumnya
$queryUsersLastWeek = "SELECT COUNT(*) AS total_last_week FROM users WHERE status = 'active' AND role = 'user' AND created_at >= CURDATE() - INTERVAL 14 DAY AND created_at < CURDATE() - INTERVAL 7 DAY";
$resultUsersLastWeek = mysqli_query($conn, $queryUsersLastWeek);
$rowUsersLastWeek = mysqli_fetch_assoc($resultUsersLastWeek);
$totalUsersLastWeek = $rowUsersLastWeek['total_last_week'];
// Hitung persentase perubahan
$changeUsers = $totalUsersLastWeek > 0 ? (($totalUsersThisWeek - $totalUsersLastWeek) / $totalUsersLastWeek) * 100 : 0;
$iconUsers = $changeUsers >= 0 ? "bi-arrow-up text-success" : "bi-arrow-down text-danger";
$changeUsers = number_format(abs($changeUsers), 1);
// ========================== LANDING PAGE ==========================
$queryLandingPageTotal = "SELECT COUNT(*) AS total_landingpage FROM landingpage";
$resultLandingPageTotal = mysqli_query($conn, $queryLandingPageTotal);
$rowLandingPageTotal = mysqli_fetch_assoc($resultLandingPageTotal);
$totalLandingPage = $rowLandingPageTotal['total_landingpage'];
$queryLandingPageThisWeek = "SELECT COUNT(*) AS total_this_week FROM landingpage WHERE created_at >= CURDATE() - INTERVAL 7 DAY";
$resultLandingPageThisWeek = mysqli_query($conn, $queryLandingPageThisWeek);
$rowLandingPageThisWeek = mysqli_fetch_assoc($resultLandingPageThisWeek);
$totalLandingPageThisWeek = $rowLandingPageThisWeek['total_this_week'];
$queryLandingPageLastWeek = "SELECT COUNT(*) AS total_last_week FROM landingpage WHERE created_at >= CURDATE() - INTERVAL 14 DAY AND created_at < CURDATE() - INTERVAL 7 DAY";
$resultLandingPageLastWeek = mysqli_query($conn, $queryLandingPageLastWeek);
$rowLandingPageLastWeek = mysqli_fetch_assoc($resultLandingPageLastWeek);
$totalLandingPageLastWeek = $rowLandingPageLastWeek['total_last_week'];
$changeLandingPage = $totalLandingPageLastWeek > 0 ? (($totalLandingPageThisWeek - $totalLandingPageLastWeek) / $totalLandingPageLastWeek) * 100 : 0;
$iconLandingPage = $changeLandingPage >= 0 ? "bi-arrow-up text-success" : "bi-arrow-down text-danger";
$changeLandingPage = number_format(abs($changeLandingPage), 1);
// ========================== ARTIKEL ==========================
$queryArtikelTotal = "SELECT COUNT(*) AS total_artikel FROM detail_artikel";
$resultArtikelTotal = mysqli_query($conn, $queryArtikelTotal);
$rowArtikelTotal = mysqli_fetch_assoc($resultArtikelTotal);
$totalArtikel = $rowArtikelTotal['total_artikel'];
$queryArtikelThisWeek = "SELECT COUNT(*) AS total_this_week FROM detail_artikel WHERE created_at >= CURDATE() - INTERVAL 7 DAY";
$resultArtikelThisWeek = mysqli_query($conn, $queryArtikelThisWeek);
$rowArtikelThisWeek = mysqli_fetch_assoc($resultArtikelThisWeek);
$totalArtikelThisWeek = $rowArtikelThisWeek['total_this_week'];
$queryArtikelLastWeek = "SELECT COUNT(*) AS total_last_week FROM detail_artikel WHERE created_at >= CURDATE() - INTERVAL 14 DAY AND created_at < CURDATE() - INTERVAL 7 DAY";
$resultArtikelLastWeek = mysqli_query($conn, $queryArtikelLastWeek);
$rowArtikelLastWeek = mysqli_fetch_assoc($resultArtikelLastWeek);
$totalArtikelLastWeek = $rowArtikelLastWeek['total_last_week'];
$changeArtikel = $totalArtikelLastWeek > 0 ? (($totalArtikelThisWeek - $totalArtikelLastWeek) / $totalArtikelLastWeek) * 100 : 0;
$iconArtikel = $changeArtikel >= 0 ? "bi-arrow-up text-success" : "bi-arrow-down text-danger";
$changeArtikel = number_format(abs($changeArtikel), 1);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<title>Halaman Dashboard | Admin</title>
<meta content="" name="description">
<meta content="" name="keywords">
<meta name="robots" content="noindex">
<!-- Favicons -->
<link href="../assets/img/favicon.png" rel="icon">
<link href="../assets/img/apple-touch-icon.png" rel="apple-touch-icon">
<!-- Google Fonts -->
<link href="https://fonts.gstatic.com" rel="preconnect">
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i,700,700i|Nunito:300,300i,400,400i,600,600i,700,700i|Poppins:300,300i,400,400i,500,500i,600,600i,700,700i" rel="stylesheet">
<!-- Vendor CSS Files -->
<link href="../assets/template/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<link href="../assets/template/vendor/bootstrap-icons/bootstrap-icons.css" rel="stylesheet">
<link href="../assets/template/vendor/boxicons/css/boxicons.min.css" rel="stylesheet">
<link href="../assets/template/vendor/quill/quill.snow.css" rel="stylesheet">
<link href="../assets/template/vendor/quill/quill.bubble.css" rel="stylesheet">
<link href="../assets/template/vendor/remixicon/remixicon.css" rel="stylesheet">
<link href="../assets/template/vendor/simple-datatables/style.css" rel="stylesheet">
<!-- Template Main CSS File -->
<link href="../assets/template/css/style.css" rel="stylesheet">
<link href="../assets/css/custom.css" rel="stylesheet">
<!-- =======================================================
* Template Name: NiceAdmin
* Template URL: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/
* Updated: Apr 20 2024 with Bootstrap v5.3.3
* Author: BootstrapMade.com
* License: https://bootstrapmade.com/license/
======================================================== -->
</head>
<body>
<!-- ======= Header ======= -->
<header id="header" class="header fixed-top d-flex align-items-center">
<div class="d-flex align-items-center justify-content-between">
<a href="" class="logo d-flex align-items-center">
<img src="../assets/img/logo.png" alt="">
<span class="d-none d-lg-block">Portal UMKM</span>
</a>
<i class="bi bi-list toggle-sidebar-btn"></i>
</div><!-- End Logo -->
<nav class="header-nav ms-auto">
<ul class="d-flex align-items-center">
<li class="nav-item dropdown pe-3">
<a class="nav-link nav-profile d-flex align-items-center pe-0" href="#" data-bs-toggle="dropdown">
<span class="fw-semibold dropdown-toggle ps-2">Hai, <?php echo $_SESSION['nama_lengkap']; ?>!</span>
</a><!-- End Profile Iamge Icon -->
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-arrow profile">
<li class="dropdown-header">
<h6><?php echo $_SESSION['nama_lengkap']; ?></h6>
<span><?php echo ucfirst($_SESSION['role']); ?></span>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li>
<a class="dropdown-item d-flex align-items-center" href="update-profile">
<i class="bi bi-gear"></i>
<span>Pengaturan</span>
</a>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li>
<a class="dropdown-item d-flex align-items-center" href="#" data-bs-toggle="modal" data-bs-target="#confirmLogoutModal">
<i class="bi bi-box-arrow-right"></i>
<span>Keluar</span>
</a>
</li>
</ul><!-- End Profile Dropdown Items -->
</li><!-- End Profile Nav -->
</ul>
</nav><!-- End Icons Navigation -->
</header><!-- End Header -->
<!-- ======= Sidebar ======= -->
<aside id="sidebar" class="sidebar">
<ul class="sidebar-nav sidebar-nav">
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center collapsed" href="">
<i class="bi bi-columns-gap"></i>
<span>Dashboard</span>
</a>
</li>
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center" href="landingpage">
<i class="bi bi-journal-richtext"></i>
<span>Landing Page</span>
</a>
</li>
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center" href="artikel">
<i class="bi bi-newspaper"></i>
<span>Artikel</span>
</a>
</li>
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center" href="pengguna">
<i class="bi bi-people"></i>
<span>Pengguna</span>
</a>
</li>
</ul>
</aside><!-- End Sidebar-->
<main id="main" class="main">
<div class="pagetitle">
<h1>Halaman Dashboard</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Beranda</a></li>
<li class="breadcrumb-item active">Dashboard</li>
</ol>
</nav>
</div><!-- End Page Title -->
<?php if (isset($_SESSION['success'])): ?>
<div class="alert alert-success alert-dismissible fade show" role="alert">
<?php echo $_SESSION['success']; ?>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php unset($_SESSION['success']); // Hapus pesan setelah ditampilkan
?>
<?php endif; ?>
<?php if (isset($_SESSION['error'])): ?>
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<?php echo $_SESSION['error']; ?>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php unset($_SESSION['error']); // Hapus pesan setelah ditampilkan
?>
<?php endif; ?>
<section class="section dashboard">
<div class="row g-0 g-md-3">
<!-- Pengguna Aktif Card -->
<div class="col-12 col-md-4">
<div class="card border-0 shadow-sm p-4 d-flex flex-row align-items-center rounded-4">
<div class="icon-container bg-primary text-white rounded-3 d-flex align-items-center justify-content-center">
<i class="bi bi-people fs-3"></i>
</div>
<div class="ms-3">
<h6 class="text-secondary mb-1">Pengguna Aktif</h6>
<h4 class="fw-bold text-dark"><?php echo $totalUsers; ?></h4>
<span class="text-success fw-semibold"><i class="bi bi-arrow-up"></i> <?php echo $changeUsers; ?>% (7 hari terakhir)</span>
</div>
</div>
</div>
<!-- Landing Page Dibuat Card -->
<div class="col-12 col-md-4">
<div class="card border-0 shadow-sm p-4 d-flex flex-row align-items-center rounded-4">
<div class="icon-container bg-success text-white rounded-3 d-flex align-items-center justify-content-center">
<i class="bi bi-journal-richtext fs-3"></i>
</div>
<div class="ms-3">
<h6 class="text-secondary mb-1">Landing Page Dibuat</h6>
<h4 class="fw-bold text-dark"><?php echo $totalLandingPage; ?></h4>
<span class="text-success fw-semibold"><i class="bi bi-arrow-up"></i> <?php echo $changeLandingPage; ?>% (7 hari terakhir)</span>
</div>
</div>
</div>
<!-- Artikel Card -->
<div class="col-12 col-md-4">
<div class="card border-0 shadow-sm p-4 d-flex flex-row align-items-center rounded-4">
<div class="icon-container bg-warning text-white rounded-3 d-flex align-items-center justify-content-center">
<i class="bi bi-newspaper fs-3"></i>
</div>
<div class="ms-3">
<h6 class="text-secondary mb-1">Artikel</h6>
<h4 class="fw-bold text-dark"><?php echo $totalArtikel; ?></h4>
<span class="text-danger fw-semibold"><i class="bi bi-arrow-down"></i> <?php echo $changeArtikel; ?>% (7 hari terakhir)</span>
</div>
</div>
</div>
</div>
</section>
<!-- Modal Konfirmasi Logout -->
<div class="modal fade" id="confirmLogoutModal" tabindex="-1" aria-labelledby="logoutModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="logoutModalLabel">Konfirmasi Keluar</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
Apakah Anda yakin ingin keluar dari halaman ini?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
<a href="logout.php" id="logoutConfirmBtn" class="btn btn-danger">Keluar</a>
</div>
</div>
</div>
</div>
</main><!-- End #main -->
<!-- ======= Footer ======= -->
<footer id="footer" class="footer">
<div class="copyright">
&copy; Copyright <strong><span>Portal UMKM</span></strong>. All Rights Reserved
</div>
<div class="credits">
<!-- All the links in the footer should remain intact. -->
<!-- You can delete the links only if you purchased the pro version. -->
<!-- Licensing information: https://bootstrapmade.com/license/ -->
<!-- Purchase the pro version with working PHP/AJAX contact form: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/ -->
<!-- Designed by <a href="https://bootstrapmade.com/">BootstrapMade</a> -->
</div>
</footer><!-- End Footer -->
<a href="#" class="back-to-top d-flex align-items-center justify-content-center"><i class="bi bi-arrow-up-short"></i></a>
<!-- Vendor JS Files -->
<script src="../assets/template/vendor/apexcharts/apexcharts.min.js"></script>
<script src="../assets/template/vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
<script src="../assets/template/vendor/chart.js/chart.umd.js"></script>
<script src="../assets/template/vendor/echarts/echarts.min.js"></script>
<script src="../assets/template/vendor/quill/quill.js"></script>
<script src="../assets/template/vendor/simple-datatables/simple-datatables.js"></script>
<script src="../assets/template/vendor/tinymce/tinymce.min.js"></script>
<script src="../assets/template/vendor/php-email-form/validate.js"></script>
<!-- Template Main JS File -->
<script src="../assets/template/js/main.js"></script>
</body>
</html>

View File

@ -0,0 +1,87 @@
<?php
session_start();
include '../../koneksi.php'; // Koneksi ke database
if (!isset($_SESSION['user_id'])) {
header("Location: ../../login/"); // Redirect ke login jika belum login
exit();
}
if (isset($_GET['id'])) {
$id_landingpage = mysqli_real_escape_string($conn, $_GET['id']);
// Cek apakah slug ada di database
$query = "SELECT id_user, slug_url FROM landingpage WHERE id_landingpage = '$id_landingpage'";
$result = mysqli_query($conn, $query);
if ($result && mysqli_num_rows($result) > 0) {
$row = mysqli_fetch_assoc($result);
$id_user = $row['id_user'];
$slug = $row['slug_url'];
// Update status user menjadi 'disabled'
$delete_landingpage_query = "DELETE FROM landingpage WHERE slug_url = '$slug'";
// Update status user menjadi 'disabled'
$update_query = "UPDATE users SET status = 'disabled' WHERE id_user = '$id_user'";
//delete gambar landingpage
$assetsQuery = "SELECT gambar_utama, gambar_tentang, gambar_keunggulan FROM landingpage WHERE id_user = '$id_user'";
$assetsResult = mysqli_query($conn, $assetsQuery);
if ($assetsResult && mysqli_num_rows($assetsResult) > 0) {
while ($row = mysqli_fetch_assoc($assetsResult)) {
$assetsPaths = [
"../../uploads/assets/" . $row['gambar_utama'],
"../../uploads/assets/" . $row['gambar_tentang'],
"../../uploads/assets/" . $row['gambar_keunggulan']
];
// Hapus file jika ada
foreach ($assetsPaths as $path) {
if (file_exists($path) && is_file($path)) {
unlink($path);
}
}
}
}
// Hapus data dari tabel landingpage berdasarkan id_landingpage
$delete_landingpage_query = "DELETE FROM landingpage WHERE id_landingpage = '$id_landingpage'";
if (mysqli_query($conn, $update_query) && mysqli_query($conn, $delete_landingpage_query)) {
$folder_path = "../../page/" . $slug;
if (is_dir($folder_path)) {
deleteFolder($folder_path);
}
$_SESSION['success'] = "Data Landing page berhasil dinonaktifkan!";
} else {
$_SESSION['error'] = "Gagal menonaktifkan landing page!";
}
} else {
$_SESSION['error'] = "Landing page tidak ditemukan!";
}
} else {
$_SESSION['error'] = "Slug tidak valid!";
}
header("Location: ../landingpage");
exit();
function deleteFolder($folder) {
if (!is_dir($folder)) return;
$files = array_diff(scandir($folder), array('.', '..'));
foreach ($files as $file) {
$filePath = "$folder/$file";
if (is_dir($filePath)) {
deleteFolder($filePath);
} else {
unlink($filePath);
}
}
rmdir($folder);
}
?>

325
admin/landingpage/index.php Normal file
View File

@ -0,0 +1,325 @@
<?php
include '../auth.php';
include '../../koneksi.php';
$query = "
SELECT
users.nama_lengkap,
datausaha.nama_usaha,
seo.judul_seo,
landingpage.slug_url,
landingpage.id_landingpage
FROM landingpage
JOIN users ON users.id_user = landingpage.id_user
LEFT JOIN datausaha ON users.id_user = datausaha.id_user
LEFT JOIN seo ON users.id_user = seo.id_user
WHERE landingpage.slug_url IS NOT NULL AND landingpage.slug_url != ''";
$result = mysqli_query($conn, $query);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<title>Kelola Landing Page | Admin</title>
<meta content="" name="description">
<meta content="" name="keywords">
<meta name="robots" content="noindex">
<!-- Favicons -->
<link href="../../assets/img/favicon.png" rel="icon">
<link href="../../assets/img/apple-touch-icon.png" rel="apple-touch-icon">
<!-- Google Fonts -->
<link href="https://fonts.gstatic.com" rel="preconnect">
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i,700,700i|Nunito:300,300i,400,400i,600,600i,700,700i|Poppins:300,300i,400,400i,500,500i,600,600i,700,700i" rel="stylesheet">
<!-- Vendor CSS Files -->
<link href="../../assets/template/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<link href="../../assets/template/vendor/bootstrap-icons/bootstrap-icons.css" rel="stylesheet">
<link href="../../assets/template/vendor/boxicons/css/boxicons.min.css" rel="stylesheet">
<link href="../../assets/template/vendor/quill/quill.snow.css" rel="stylesheet">
<link href="../../assets/template/vendor/quill/quill.bubble.css" rel="stylesheet">
<link href="../../assets/template/vendor/remixicon/remixicon.css" rel="stylesheet">
<link href="../../assets/template/vendor/simple-datatables/style.css" rel="stylesheet">
<!-- Template Main CSS File -->
<link href="../../assets/template/css/style.css" rel="stylesheet">
<!-- =======================================================
* Template Name: NiceAdmin
* Template URL: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/
* Updated: Apr 20 2024 with Bootstrap v5.3.3
* Author: BootstrapMade.com
* License: https://bootstrapmade.com/license/
======================================================== -->
</head>
<body>
<!-- ======= Header ======= -->
<header id="header" class="header fixed-top d-flex align-items-center">
<div class="d-flex align-items-center justify-content-between">
<a href="" class="logo d-flex align-items-center">
<img src="../../assets/img/logo.png" alt="">
<span class="d-none d-lg-block">Portal UMKM</span>
</a>
<i class="bi bi-list toggle-sidebar-btn"></i>
</div><!-- End Logo -->
<nav class="header-nav ms-auto">
<ul class="d-flex align-items-center">
<li class="nav-item dropdown pe-3">
<a class="nav-link nav-profile d-flex align-items-center pe-0" href="#" data-bs-toggle="dropdown">
<span class="fw-semibold dropdown-toggle ps-2">Hai, <?php echo $_SESSION['nama_lengkap']; ?>!</span>
</a><!-- End Profile Iamge Icon -->
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-arrow profile">
<li class="dropdown-header">
<h6><?php echo $_SESSION['nama_lengkap']; ?></h6>
<span><?php echo ucfirst($_SESSION['role']); ?></span>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li>
<a class="dropdown-item d-flex align-items-center" href="../update-profile">
<i class="bi bi-gear"></i>
<span>Pengaturan</span>
</a>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li>
<a class="dropdown-item d-flex align-items-center" href="#" data-bs-toggle="modal" data-bs-target="#confirmLogoutModal">
<i class="bi bi-box-arrow-right"></i>
<span>Keluar</span>
</a>
</li>
</ul><!-- End Profile Dropdown Items -->
</li><!-- End Profile Nav -->
</ul>
</nav><!-- End Icons Navigation -->
</header><!-- End Header -->
<!-- ======= Sidebar ======= -->
<aside id="sidebar" class="sidebar">
<ul class="sidebar-nav sidebar-nav">
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center" href="../">
<i class="bi bi-columns-gap"></i>
<span>Dashboard</span>
</a>
</li>
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center collapsed" href="../landingpage">
<i class="bi bi-journal-richtext"></i>
<span>Landing Page</span>
</a>
</li>
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center" href="../artikel">
<i class="bi bi-newspaper"></i>
<span>Artikel</span>
</a>
</li>
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center" href="../pengguna">
<i class="bi bi-people"></i>
<span>Pengguna</span>
</a>
</li>
</ul>
</aside><!-- End Sidebar-->
<main id="main" class="main">
<div class="pagetitle">
<h1>Kelola Landing Page</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="">Beranda</a></li>
<li class="breadcrumb-item">Landing Page</li>
</ol>
</nav>
</div><!-- End Page Title -->
<?php if (isset($_SESSION['success'])): ?>
<div class="alert alert-success alert-dismissible fade show" role="alert">
<?php echo $_SESSION['success']; ?>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php unset($_SESSION['success']); // Hapus pesan setelah ditampilkan
?>
<?php endif; ?>
<?php if (isset($_SESSION['error'])): ?>
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<?php echo $_SESSION['error']; ?>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php unset($_SESSION['error']); // Hapus pesan setelah ditampilkan
?>
<?php endif; ?>
<section class="section">
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-body mt-3">
<!-- Table with stripped rows -->
<div class="table-responsive">
<table class="table datatable">
<thead>
<tr>
<th>No.</th>
<th>Nama Pemilik</th>
<th>Nama Usaha</th>
<th>Judul Landing Page</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
<?php if (mysqli_num_rows($result) > 0): ?>
<?php $no = 1; ?>
<?php while ($row = mysqli_fetch_assoc($result)): ?>
<tr>
<td><?= $no++; ?></td>
<td><?= htmlspecialchars($row['nama_lengkap']); ?></td>
<td><?= htmlspecialchars($row['nama_usaha']); ?></td>
<td><?= htmlspecialchars($row['judul_seo']); ?></td>
<td>
<a target="_blank" href="../../<?= urlencode($row['slug_url']); ?>" class="btn btn-primary btn-sm mt-1">
<i class="bi bi-eye"></i>
</a>
<button class="btn btn-danger btn-sm mt-1" data-bs-toggle="modal" data-bs-target="#confirmDeleteModal" data-id="<?= $row['id_landingpage']; ?>">
<i class="bi bi-trash"></i>
</button>
</td>
</tr>
<?php endwhile; ?>
<?php else: ?>
<tr>
<td colspan="5" class="text-center">Data tidak ditemukan</td>
</tr>
<?php endif; ?>
</tbody>
</table>
</div>
<div class="modal fade" id="confirmDeleteModal" tabindex="-1" aria-labelledby="deleteModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="deleteModalLabel">Konfirmasi Nonaktif</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
Apakah Anda yakin ingin menonaktifkan landingpage ini?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
<a href="" id="deleteConfirmBtn" class="btn btn-danger">Nonaktifkan</a>
</div>
</div>
</div>
</div>
<!-- End Table with stripped rows -->
</div>
</div>
</div>
</div>
</section>
<!-- Modal Konfirmasi Logout -->
<div class="modal fade" id="confirmLogoutModal" tabindex="-1" aria-labelledby="logoutModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="logoutModalLabel">Konfirmasi Keluar</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
Apakah Anda yakin ingin keluar dari halaman ini?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
<a href="../logout.php" id="logoutConfirmBtn" class="btn btn-danger">Keluar</a>
</div>
</div>
</div>
</div>
</main><!-- End #main -->
<!-- ======= Footer ======= -->
<footer id="footer" class="footer">
<div class="copyright">
&copy; Copyright <strong><span>Portal UMKM</span></strong>. All Rights Reserved
</div>
<div class="credits">
<!-- All the links in the footer should remain intact. -->
<!-- You can delete the links only if you purchased the pro version. -->
<!-- Licensing information: https://bootstrapmade.com/license/ -->
<!-- Purchase the pro version with working PHP/AJAX contact form: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/ -->
<!-- Designed by <a href="https://bootstrapmade.com/">BootstrapMade</a> -->
</div>
</footer><!-- End Footer -->
<a href="#" class="back-to-top d-flex align-items-center justify-content-center"><i class="bi bi-arrow-up-short"></i></a>
<!-- Vendor JS Files -->
<script src="../../assets/template/vendor/apexcharts/apexcharts.min.js"></script>
<script src="../../assets/template/vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
<script src="../../assets/template/vendor/chart.js/chart.umd.js"></script>
<script src="../../assets/template/vendor/echarts/echarts.min.js"></script>
<script src="../../assets/template/vendor/quill/quill.js"></script>
<script src="../../assets/template/vendor/simple-datatables/simple-datatables.js"></script>
<script src="../../assets/template/vendor/tinymce/tinymce.min.js"></script>
<script src="../../assets/template/vendor/php-email-form/validate.js"></script>
<!-- Template Main JS File -->
<script src="../../assets/template/js/main.js"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
var deleteModal = document.getElementById('confirmDeleteModal');
deleteModal.addEventListener('show.bs.modal', function(event) {
var button = event.relatedTarget; // Tombol yang diklik
var id = button.getAttribute('data-id'); // Ambil ID produk
var deleteLink = document.getElementById('deleteConfirmBtn');
deleteLink.href = "delete.php?id=" + id; // Set href untuk hapus
});
});
</script>
</body>
</html>

8
admin/logout.php Normal file
View File

@ -0,0 +1,8 @@
<?php
session_start();
session_destroy(); // Hapus semua sesi
$_SESSION['success'] = "Anda berhasil keluar halaman!";
header("Location: ../login");
exit();
?>

View File

@ -0,0 +1,69 @@
<?php
session_start();
include '../../koneksi.php'; // Koneksi ke database
if (!isset($_SESSION['user_id'])) {
header("Location: ../../login/"); // Redirect ke login jika belum login
exit();
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$nama_lengkap = mysqli_real_escape_string($conn, $_POST['namalengkap']);
$email = mysqli_real_escape_string($conn, $_POST['email']);
$no_wa = mysqli_real_escape_string($conn, $_POST['no_wa']);
$password = $_POST['password'];
$status = "active";
$role = "user";
$_SESSION['old_input'] = [
'namalengkap' => $nama_lengkap,
'email' => $email,
'no_wa' => $no_wa,
];
// Validasi jika email sudah terdaftar
$checkEmail = "SELECT * FROM users WHERE email = '$email'";
$result = mysqli_query($conn, $checkEmail);
if (mysqli_num_rows($result) > 0) {
$_SESSION['error'] = "Email sudah terdaftar!";
header("Location: ../pengguna/tambah.php");
exit();
}
// Validasi Nomor WhatsApp (harus angka dan panjang 10-15 karakter)
if (!preg_match('/^[0-9]{10,15}$/', $no_wa)) {
$_SESSION['error'] = "Nomor WhatsApp harus terdiri dari 10-15 digit angka!";
header("Location: ../pengguna/tambah.php");
exit();
}
// Validasi Password (minimal 8 karakter)
if (strlen($password) < 8) {
$_SESSION['error'] = "Password harus memiliki minimal 8 karakter!";
header("Location: ../pengguna/tambah.php");
exit();
}
// Hash password untuk keamanan
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
// Insert ke database
$query = "INSERT INTO users (nama_lengkap, email, no_hp, password, status, role)
VALUES ('$nama_lengkap', '$email', '$no_wa', '$hashed_password', '$status', '$role')";
if (mysqli_query($conn, $query)) {
$_SESSION['success'] = "Data User berhasil ditambahkan!";
unset($_SESSION['old_input']);
} else {
$_SESSION['error'] = "Gagal menambahkan user!";
}
header("Location: ../pengguna/");
exit();
} else {
$_SESSION['error'] = "Akses tidak diizinkan!";
header("Location: ../pengguna/");
exit();
}
?>

View File

@ -0,0 +1,115 @@
<?php
include '../auth.php';
include '../../koneksi.php';
// Pastikan ID tersedia
if (isset($_GET['id'])) {
$id_user = mysqli_real_escape_string($conn, $_GET['id']);
// Ambil slug_url dari landingpage berdasarkan id_user
$slugQuery = "SELECT slug_url FROM landingpage WHERE id_user = '$id_user'";
$slugResult = mysqli_query($conn, $slugQuery);
if ($slugResult && mysqli_num_rows($slugResult) > 0) {
while ($row = mysqli_fetch_assoc($slugResult)) {
$slug_url = $row['slug_url'];
$folderPath = "../../page/$slug_url";
// Hapus folder jika ada
if (is_dir($folderPath)) {
deleteFolder($folderPath);
}
}
}
}
function deleteFolder($folder) {
if (!is_dir($folder)) return;
$files = array_diff(scandir($folder), ['.', '..']);
foreach ($files as $file) {
$filePath = "$folder/$file";
is_dir($filePath) ? deleteFolder($filePath) : unlink($filePath);
}
rmdir($folder);
}
// delete gambar produk
$imageQuery = "SELECT gambar_produk FROM detail_produk WHERE id_produk IN (SELECT id_produk FROM produk WHERE id_user = '$id_user')";
$imageResult = mysqli_query($conn, $imageQuery);
if ($imageResult && mysqli_num_rows($imageResult) > 0) {
while ($imgRow = mysqli_fetch_assoc($imageResult)) {
$imagePath = "../../uploads/produk/" . $imgRow['gambar_produk'];
if (file_exists($imagePath) && is_file($imagePath)) {
unlink($imagePath);
}
}
}
//delete gambar produk
$assetsQuery = "SELECT gambar_utama, gambar_tentang, gambar_keunggulan FROM landingpage WHERE id_user = '$id_user'";
$assetsResult = mysqli_query($conn, $assetsQuery);
if ($assetsResult && mysqli_num_rows($assetsResult) > 0) {
while ($row = mysqli_fetch_assoc($assetsResult)) {
$assetsPaths = [
"../../uploads/assets/" . $row['gambar_utama'],
"../../uploads/assets/" . $row['gambar_tentang'],
"../../uploads/assets/" . $row['gambar_keunggulan']
];
// Hapus file jika ada
foreach ($assetsPaths as $path) {
if (file_exists($path) && is_file($path)) {
unlink($path);
}
}
}
}
if (isset($_GET['id'])) {
$id_user = mysqli_real_escape_string($conn, $_GET['id']);
// Hapus data terkait berdasarkan id_user
$deleteQueries = [
"DELETE FROM detail_produk WHERE id_produk IN (SELECT id_produk FROM produk WHERE id_user = '$id_user')",
"DELETE FROM produk WHERE id_user = '$id_user'",
"DELETE FROM detail_testimoni WHERE id_testimoni IN (SELECT id_testimoni FROM testimoni WHERE id_user = '$id_user')",
"DELETE FROM testimoni WHERE id_user = '$id_user'",
"DELETE FROM detail_keunggulan WHERE id_keunggulan IN (SELECT id_keunggulan FROM keunggulan WHERE id_user = '$id_user')",
"DELETE FROM keunggulan WHERE id_user = '$id_user'",
"DELETE FROM seo WHERE id_user = '$id_user'",
"DELETE FROM datausaha WHERE id_user = '$id_user'",
"DELETE FROM landingpage WHERE id_user = '$id_user'",
"DELETE FROM users WHERE id_user = '$id_user'"
];
$allDeleted = true;
// Eksekusi semua query
foreach ($deleteQueries as $query) {
if (!mysqli_query($conn, $query)) {
$allDeleted = false;
$_SESSION['error'] = "Gagal menghapus data: " . mysqli_error($conn);
break;
}
}
if ($allDeleted) {
$_SESSION['success'] = "Pengguna dan data terkait berhasil dihapus!";
}
// Redirect kembali ke halaman pengguna
header("Location: ../pengguna/");
exit;
} else {
$_SESSION['error'] = "ID pengguna tidak ditemukan!";
header("Location: ../pengguna/");
exit;
}
?>

314
admin/pengguna/index.php Normal file
View File

@ -0,0 +1,314 @@
<?php
include '../auth.php';
include '../../koneksi.php';
$query = "SELECT id_user, nama_lengkap, email, no_hp FROM users";
$result = mysqli_query($conn, $query);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<title>Kelola Data Pengguna | Admin</title>
<meta content="" name="description">
<meta content="" name="keywords">
<meta name="robots" content="noindex">
<!-- Favicons -->
<link href="../../assets/img/favicon.png" rel="icon">
<link href="../../assets/img/apple-touch-icon.png" rel="apple-touch-icon">
<!-- Google Fonts -->
<link href="https://fonts.gstatic.com" rel="preconnect">
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i,700,700i|Nunito:300,300i,400,400i,600,600i,700,700i|Poppins:300,300i,400,400i,500,500i,600,600i,700,700i" rel="stylesheet">
<!-- Vendor CSS Files -->
<link href="../../assets/template/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<link href="../../assets/template/vendor/bootstrap-icons/bootstrap-icons.css" rel="stylesheet">
<link href="../../assets/template/vendor/boxicons/css/boxicons.min.css" rel="stylesheet">
<link href="../../assets/template/vendor/quill/quill.snow.css" rel="stylesheet">
<link href="../../assets/template/vendor/quill/quill.bubble.css" rel="stylesheet">
<link href="../../assets/template/vendor/remixicon/remixicon.css" rel="stylesheet">
<link href="../../assets/template/vendor/simple-datatables/style.css" rel="stylesheet">
<!-- Template Main CSS File -->
<link href="../../assets/template/css/style.css" rel="stylesheet">
<!-- =======================================================
* Template Name: NiceAdmin
* Template URL: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/
* Updated: Apr 20 2024 with Bootstrap v5.3.3
* Author: BootstrapMade.com
* License: https://bootstrapmade.com/license/
======================================================== -->
</head>
<body>
<!-- ======= Header ======= -->
<header id="header" class="header fixed-top d-flex align-items-center">
<div class="d-flex align-items-center justify-content-between">
<a href="" class="logo d-flex align-items-center">
<img src="../../assets/img/logo.png" alt="">
<span class="d-none d-lg-block">Portal UMKM</span>
</a>
<i class="bi bi-list toggle-sidebar-btn"></i>
</div><!-- End Logo -->
<nav class="header-nav ms-auto">
<ul class="d-flex align-items-center">
<li class="nav-item dropdown pe-3">
<a class="nav-link nav-profile d-flex align-items-center pe-0" href="#" data-bs-toggle="dropdown">
<span class="fw-semibold dropdown-toggle ps-2">Hai, <?php echo $_SESSION['nama_lengkap']; ?>!</span>
</a><!-- End Profile Iamge Icon -->
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-arrow profile">
<li class="dropdown-header">
<h6><?php echo $_SESSION['nama_lengkap']; ?></h6>
<span><?php echo ucfirst($_SESSION['role']); ?></span>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li>
<a class="dropdown-item d-flex align-items-center" href="../update-profile/">
<i class="bi bi-gear"></i>
<span>Pengaturan</span>
</a>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li>
<a class="dropdown-item d-flex align-items-center" href="#" data-bs-toggle="modal" data-bs-target="#confirmLogoutModal">
<i class="bi bi-box-arrow-right"></i>
<span>Keluar</span>
</a>
</li>
</ul><!-- End Profile Dropdown Items -->
</li><!-- End Profile Nav -->
</ul>
</nav><!-- End Icons Navigation -->
</header><!-- End Header -->
<!-- ======= Sidebar ======= -->
<aside id="sidebar" class="sidebar">
<ul class="sidebar-nav sidebar-nav">
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center" href="../">
<i class="bi bi-columns-gap"></i>
<span>Dashboard</span>
</a>
</li>
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center" href="../landingpage">
<i class="bi bi-journal-richtext"></i>
<span>Landing Page</span>
</a>
</li>
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center" href="../artikel">
<i class="bi bi-newspaper"></i>
<span>Artikel</span>
</a>
</li>
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center collapsed collapsed" href="../pengguna">
<i class="bi bi-people"></i>
<span>Pengguna</span>
</a>
</li>
</ul>
</aside><!-- End Sidebar-->
<main id="main" class="main">
<div class="pagetitle">
<h1>Kelola Data Pengguna</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="">Beranda</a></li>
<li class="breadcrumb-item">Pengguna</li>
</ol>
</nav>
</div><!-- End Page Title -->
<?php if (isset($_SESSION['success'])): ?>
<div class="alert alert-success alert-dismissible fade show" role="alert">
<?php echo $_SESSION['success']; ?>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php unset($_SESSION['success']); // Hapus pesan setelah ditampilkan
?>
<?php endif; ?>
<?php if (isset($_SESSION['error'])): ?>
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<?php echo $_SESSION['error']; ?>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php unset($_SESSION['error']); // Hapus pesan setelah ditampilkan
?>
<?php endif; ?>
<section class="section">
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-body mt-3">
<div class="d-flex justify-content-end">
<a href="tambah.php" class="btn btn-primary mb-3">
<i class="bi bi-plus-circle"></i> Tambahkan Pengguna
</a>
</div>
<!-- Table with stripped rows -->
<div class="table-responsive">
<table class="table datatable">
<thead>
<tr>
<th>No.</th>
<th>Nama Lengkap</th>
<th>Email</th>
<th>No. WhatsApp</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
<?php if (mysqli_num_rows($result) > 0): ?>
<?php $no = 1; ?>
<?php while ($row = mysqli_fetch_assoc($result)): ?>
<tr>
<td><?= $no++; ?></td>
<td><?= htmlspecialchars($row['nama_lengkap']); ?></td>
<td><?= htmlspecialchars($row['email']); ?></td>
<td>+62<?= htmlspecialchars($row['no_hp']); ?></td>
<td>
<a href="update.php?id=<?= $row['id_user']; ?>" class="btn btn-primary btn-sm mt-1"><i class="bi bi-pencil-square"></i></a>
<button class="btn btn-danger btn-sm mt-1" data-bs-toggle="modal" data-bs-target="#confirmDeleteModal" data-id="<?= $row['id_user']; ?>">
<i class="bi bi-trash"></i>
</button> </td>
</tr>
<?php endwhile; ?>
<?php else: ?>
<tr>
<td colspan="5" class="text-center">Data tidak ditemukan</td>
</tr>
<?php endif; ?>
</tbody>
</table>
</div>
<!-- End Table with stripped rows -->
<div class="modal fade" id="confirmDeleteModal" tabindex="-1" aria-labelledby="deleteModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="deleteModalLabel">Konfirmasi Hapus</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
Apakah Anda yakin ingin menghapus akun ini?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
<a href="" id="deleteConfirmBtn" class="btn btn-danger">Hapus</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- Modal Konfirmasi Logout -->
<div class="modal fade" id="confirmLogoutModal" tabindex="-1" aria-labelledby="logoutModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="logoutModalLabel">Konfirmasi Keluar</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
Apakah Anda yakin ingin keluar dari halaman ini?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
<a href="../logout.php" id="logoutConfirmBtn" class="btn btn-danger">Keluar</a>
</div>
</div>
</div>
</div>
</main><!-- End #main -->
<!-- ======= Footer ======= -->
<footer id="footer" class="footer">
<div class="copyright">
&copy; Copyright <strong><span>Portal UMKM</span></strong>. All Rights Reserved
</div>
<div class="credits">
<!-- All the links in the footer should remain intact. -->
<!-- You can delete the links only if you purchased the pro version. -->
<!-- Licensing information: https://bootstrapmade.com/license/ -->
<!-- Purchase the pro version with working PHP/AJAX contact form: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/ -->
<!-- Designed by <a href="https://bootstrapmade.com/">BootstrapMade</a> -->
</div>
</footer><!-- End Footer -->
<a href="#" class="back-to-top d-flex align-items-center justify-content-center"><i class="bi bi-arrow-up-short"></i></a>
<!-- Vendor JS Files -->
<script src="../../assets/template/vendor/apexcharts/apexcharts.min.js"></script>
<script src="../../assets/template/vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
<script src="../../assets/template/vendor/chart.js/chart.umd.js"></script>
<script src="../../assets/template/vendor/echarts/echarts.min.js"></script>
<script src="../../assets/template/vendor/quill/quill.js"></script>
<script src="../../assets/template/vendor/simple-datatables/simple-datatables.js"></script>
<script src="../../assets/template/vendor/tinymce/tinymce.min.js"></script>
<script src="../../assets/template/vendor/php-email-form/validate.js"></script>
<!-- Template Main JS File -->
<script src="../../assets/template/js/main.js"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
var deleteModal = document.getElementById('confirmDeleteModal');
deleteModal.addEventListener('show.bs.modal', function(event) {
var button = event.relatedTarget; // Tombol yang diklik
var id = button.getAttribute('data-id'); // Ambil ID produk
var deleteLink = document.getElementById('deleteConfirmBtn');
deleteLink.href = "deleteuser.php?id=" + id; // Set href untuk hapus
});
});
</script>
</body>
</html>

292
admin/pengguna/tambah.php Normal file
View File

@ -0,0 +1,292 @@
<?php
include '../auth.php';
include '../../koneksi.php';
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<title>Tambahkan Data Pengguna | Admin</title>
<meta content="" name="description">
<meta content="" name="keywords">
<meta name="robots" content="noindex">
<!-- Favicons -->
<link href="../../assets/img/favicon.png" rel="icon">
<link href="../../assets/img/apple-touch-icon.png" rel="apple-touch-icon">
<!-- Google Fonts -->
<link href="https://fonts.gstatic.com" rel="preconnect">
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i,700,700i|Nunito:300,300i,400,400i,600,600i,700,700i|Poppins:300,300i,400,400i,500,500i,600,600i,700,700i" rel="stylesheet">
<!-- Vendor CSS Files -->
<link href="../../assets/template/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<link href="../../assets/template/vendor/bootstrap-icons/bootstrap-icons.css" rel="stylesheet">
<link href="../../assets/template/vendor/boxicons/css/boxicons.min.css" rel="stylesheet">
<link href="../../assets/template/vendor/quill/quill.snow.css" rel="stylesheet">
<link href="../../assets/template/vendor/quill/quill.bubble.css" rel="stylesheet">
<link href="../../assets/template/vendor/remixicon/remixicon.css" rel="stylesheet">
<link href="../../assets/template/vendor/simple-datatables/style.css" rel="stylesheet">
<!-- Template Main CSS File -->
<link href="../../assets/template/css/style.css" rel="stylesheet">
<!-- =======================================================
* Template Name: NiceAdmin
* Template URL: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/
* Updated: Apr 20 2024 with Bootstrap v5.3.3
* Author: BootstrapMade.com
* License: https://bootstrapmade.com/license/
======================================================== -->
</head>
<body>
<!-- ======= Header ======= -->
<header id="header" class="header fixed-top d-flex align-items-center">
<div class="d-flex align-items-center justify-content-between">
<a href="" class="logo d-flex align-items-center">
<img src="../../assets/img/logo.png" alt="">
<span class="d-none d-lg-block">Portal UMKM</span>
</a>
<i class="bi bi-list toggle-sidebar-btn"></i>
</div><!-- End Logo -->
<nav class="header-nav ms-auto">
<ul class="d-flex align-items-center">
<li class="nav-item dropdown pe-3">
<a class="nav-link nav-profile d-flex align-items-center pe-0" href="#" data-bs-toggle="dropdown">
<span class="fw-semibold dropdown-toggle ps-2">Hai, <?php echo $_SESSION['nama_lengkap']; ?>!</span>
</a><!-- End Profile Iamge Icon -->
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-arrow profile">
<li class="dropdown-header">
<h6><?php echo $_SESSION['nama_lengkap']; ?></h6>
<span><?php echo ucfirst($_SESSION['role']); ?></span>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li>
<a class="dropdown-item d-flex align-items-center" href="../update-profile/">
<i class="bi bi-gear"></i>
<span>Pengaturan</span>
</a>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li>
<a class="dropdown-item d-flex align-items-center" href="#" data-bs-toggle="modal" data-bs-target="#confirmLogoutModal">
<i class="bi bi-box-arrow-right"></i>
<span>Keluar</span>
</a>
</li>
</ul><!-- End Profile Dropdown Items -->
</li><!-- End Profile Nav -->
</ul>
</nav><!-- End Icons Navigation -->
</header><!-- End Header -->
<!-- ======= Sidebar ======= -->
<aside id="sidebar" class="sidebar">
<ul class="sidebar-nav sidebar-nav">
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center" href="../">
<i class="bi bi-columns-gap"></i>
<span>Dashboard</span>
</a>
</li>
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center" href="../landingpage">
<i class="bi bi-journal-richtext"></i>
<span>Landing Page</span>
</a>
</li>
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center" href="../artikel">
<i class="bi bi-newspaper"></i>
<span>Artikel</span>
</a>
</li>
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center collapsed" href="../pengguna">
<i class="bi bi-people"></i>
<span>Pengguna</span>
</a>
</li>
</ul>
</aside><!-- End Sidebar-->
<main id="main" class="main">
<div class="pagetitle">
<h1>Tambahkan Data Pengguna</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="">Beranda</a></li>
<li class="breadcrumb-item">Pengguna</li>
</ol>
</nav>
</div><!-- End Page Title -->
<?php if (isset($_SESSION['success'])): ?>
<div class="alert alert-success alert-dismissible fade show" role="alert">
<?php echo $_SESSION['success']; ?>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php unset($_SESSION['success']); // Hapus pesan setelah ditampilkan
?>
<?php endif; ?>
<?php if (isset($_SESSION['error'])): ?>
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<?php echo $_SESSION['error']; ?>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php unset($_SESSION['error']); // Hapus pesan setelah ditampilkan
?>
<?php endif; ?>
<section class="section">
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-body mt-3">
<form action="adduser.php" method="POST" enctype="multipart/form-data">
<div class="mb-3">
<label for="namalengkap" class="form-label">Nama Lengkap<span class="text-danger">*</span></label>
<input type="text" id="namalengkap" name="namalengkap" class="form-control" required
value="<?= isset($_SESSION['old_input']['namalengkap']) ? htmlspecialchars($_SESSION['old_input']['namalengkap']) : '' ?>">
</div>
<div class="mb-3">
<label for="email" class="form-label">Email<span class="text-danger">*</span></label>
<input type="email" id="email" name="email" class="form-control" required
value="<?= isset($_SESSION['old_input']['email']) ? htmlspecialchars($_SESSION['old_input']['email']) : '' ?>">
</div>
<div class="mb-3">
<label for="no_wa" class="form-label">No. WhatsApp<span class="text-danger">*</span></label>
<div class="input-group">
<span class="input-group-text">+62</span>
<input type="number" id="no_wa" name="no_wa" class="form-control" placeholder="857..." maxlength="13" required
value="<?= isset($_SESSION['old_input']['no_wa']) ? htmlspecialchars($_SESSION['old_input']['no_wa']) : '' ?>">
</div>
</div>
<div class="mb-3">
<label for="password" class="form-label">Kata Sandi<span class="text-danger">*</span></label>
<div class="input-group">
<input type="password" id="password" name="password" class="form-control" required>
<span class="input-group-text" onclick="togglePassword('password', 'togglePasswordIcon')" style="cursor: pointer;">
<i class="fa fa-eye" id="togglePasswordIcon"></i>
</span>
</div>
</div>
<!-- Tombol Submit -->
<div class="d-flex justify-content-end">
<button type="submit" class="btn btn-primary me-2"><i class="bi bi-check-circle"></i> Simpan</button>
<a href="../pengguna/" class="btn btn-secondary me-2"><i class="bi bi-x-circle"></i> Batal</a>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- Modal Konfirmasi Logout -->
<div class="modal fade" id="confirmLogoutModal" tabindex="-1" aria-labelledby="logoutModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="logoutModalLabel">Konfirmasi Keluar</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
Apakah Anda yakin ingin keluar dari halaman ini?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
<a href="../logout.php" id="logoutConfirmBtn" class="btn btn-danger">Keluar</a>
</div>
</div>
</div>
</div>
</main><!-- End #main -->
<!-- ======= Footer ======= -->
<footer id="footer" class="footer">
<div class="copyright">
&copy; Copyright <strong><span>Portal UMKM</span></strong>. All Rights Reserved
</div>
<div class="credits">
<!-- All the links in the footer should remain intact. -->
<!-- You can delete the links only if you purchased the pro version. -->
<!-- Licensing information: https://bootstrapmade.com/license/ -->
<!-- Purchase the pro version with working PHP/AJAX contact form: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/ -->
<!-- Designed by <a href="https://bootstrapmade.com/">BootstrapMade</a> -->
</div>
</footer><!-- End Footer -->
<a href="#" class="back-to-top d-flex align-items-center justify-content-center"><i class="bi bi-arrow-up-short"></i></a>
<!-- Vendor JS Files -->
<script src="../../assets/template/vendor/apexcharts/apexcharts.min.js"></script>
<script src="../../assets/template/vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
<script src="../../assets/template/vendor/chart.js/chart.umd.js"></script>
<script src="../../assets/template/vendor/echarts/echarts.min.js"></script>
<script src="../../assets/template/vendor/quill/quill.js"></script>
<script src="../../assets/template/vendor/simple-datatables/simple-datatables.js"></script>
<script src="../../assets/template/vendor/tinymce/tinymce.min.js"></script>
<script src="../../assets/template/vendor/php-email-form/validate.js"></script>
<!-- Template Main JS File -->
<script src="../../assets/template/js/main.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<script>
function togglePassword(inputId, iconId) {
const input = document.getElementById(inputId);
const icon = document.getElementById(iconId);
const isPassword = input.type === 'password';
input.type = isPassword ? 'text' : 'password';
icon.classList.toggle('fa-eye');
icon.classList.toggle('fa-eye-slash');
}
</script>
</body>
</html>

319
admin/pengguna/update.php Normal file
View File

@ -0,0 +1,319 @@
<?php
include '../auth.php';
include '../../koneksi.php';
$id_user = $_GET['id'] ?? '';
$query = "SELECT * FROM users WHERE id_user = '$id_user'";
$result = mysqli_query($conn, $query);
$user = mysqli_fetch_assoc($result);
if (!$user) {
$_SESSION['error'] = "User tidak ditemukan!";
header("Location: ../pengguna/");
exit;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<title>Memperbarui Data Pengguna | Admin</title>
<meta content="" name="description">
<meta content="" name="keywords">
<meta name="robots" content="noindex">
<!-- Favicons -->
<link href="../../assets/img/favicon.png" rel="icon">
<link href="../../assets/img/apple-touch-icon.png" rel="apple-touch-icon">
<!-- Google Fonts -->
<link href="https://fonts.gstatic.com" rel="preconnect">
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i,700,700i|Nunito:300,300i,400,400i,600,600i,700,700i|Poppins:300,300i,400,400i,500,500i,600,600i,700,700i" rel="stylesheet">
<!-- Vendor CSS Files -->
<link href="../../assets/template/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<link href="../../assets/template/vendor/bootstrap-icons/bootstrap-icons.css" rel="stylesheet">
<link href="../../assets/template/vendor/boxicons/css/boxicons.min.css" rel="stylesheet">
<link href="../../assets/template/vendor/quill/quill.snow.css" rel="stylesheet">
<link href="../../assets/template/vendor/quill/quill.bubble.css" rel="stylesheet">
<link href="../../assets/template/vendor/remixicon/remixicon.css" rel="stylesheet">
<link href="../../assets/template/vendor/simple-datatables/style.css" rel="stylesheet">
<!-- Template Main CSS File -->
<link href="../../assets/template/css/style.css" rel="stylesheet">
<!-- =======================================================
* Template Name: NiceAdmin
* Template URL: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/
* Updated: Apr 20 2024 with Bootstrap v5.3.3
* Author: BootstrapMade.com
* License: https://bootstrapmade.com/license/
======================================================== -->
</head>
<body>
<!-- ======= Header ======= -->
<header id="header" class="header fixed-top d-flex align-items-center">
<div class="d-flex align-items-center justify-content-between">
<a href="" class="logo d-flex align-items-center">
<img src="../../assets/img/logo.png" alt="">
<span class="d-none d-lg-block">Portal UMKM</span>
</a>
<i class="bi bi-list toggle-sidebar-btn"></i>
</div><!-- End Logo -->
<nav class="header-nav ms-auto">
<ul class="d-flex align-items-center">
<li class="nav-item dropdown pe-3">
<a class="nav-link nav-profile d-flex align-items-center pe-0" href="#" data-bs-toggle="dropdown">
<span class="fw-semibold dropdown-toggle ps-2">Hai, <?php echo $_SESSION['nama_lengkap']; ?>!</span>
</a><!-- End Profile Iamge Icon -->
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-arrow profile">
<li class="dropdown-header">
<h6><?php echo $_SESSION['nama_lengkap']; ?></h6>
<span><?php echo ucfirst($_SESSION['role']); ?></span>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li>
<a class="dropdown-item d-flex align-items-center" href="../update-profile/">
<i class="bi bi-gear"></i>
<span>Pengaturan</span>
</a>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li>
<a class="dropdown-item d-flex align-items-center" href="#" data-bs-toggle="modal" data-bs-target="#confirmLogoutModal">
<i class="bi bi-box-arrow-right"></i>
<span>Keluar</span>
</a>
</li>
</ul><!-- End Profile Dropdown Items -->
</li><!-- End Profile Nav -->
</ul>
</nav><!-- End Icons Navigation -->
</header><!-- End Header -->
<!-- ======= Sidebar ======= -->
<aside id="sidebar" class="sidebar">
<ul class="sidebar-nav sidebar-nav">
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center" href="../">
<i class="bi bi-columns-gap"></i>
<span>Dashboard</span>
</a>
</li>
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center" href="../landingpage">
<i class="bi bi-journal-richtext"></i>
<span>Landing Page</span>
</a>
</li>
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center" href="../artikel">
<i class="bi bi-newspaper"></i>
<span>Artikel</span>
</a>
</li>
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center collapsed" href="../pengguna">
<i class="bi bi-people"></i>
<span>Pengguna</span>
</a>
</li>
</ul>
</aside><!-- End Sidebar-->
<main id="main" class="main">
<div class="pagetitle">
<h1>Memperbarui Data Pengguna</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="">Beranda</a></li>
<li class="breadcrumb-item">Pengguna</li>
</ol>
</nav>
</div><!-- End Page Title -->
<?php if (isset($_SESSION['success'])): ?>
<div class="alert alert-success alert-dismissible fade show" role="alert">
<?php echo $_SESSION['success']; ?>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php unset($_SESSION['success']); // Hapus pesan setelah ditampilkan
?>
<?php endif; ?>
<?php if (isset($_SESSION['error'])): ?>
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<?php echo $_SESSION['error']; ?>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php unset($_SESSION['error']); // Hapus pesan setelah ditampilkan
?>
<?php endif; ?>
<section class="section">
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-body mt-3">
<form action="updateuser.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="id" value="<?= $user['id_user']; ?>">
<div class="mb-3">
<label for="namalengkap" class="form-label">Nama Lengkap<span class="text-danger">*</span></label>
<input type="text" id="namalengkap" name="namalengkap" class="form-control" value="<?= htmlspecialchars($user['nama_lengkap']); ?>" required>
</div>
<div class="mb-3">
<label for="email" class="form-label">Email<span class="text-danger">*</span></label>
<input type="email" id="email" name="email" class="form-control" value="<?= htmlspecialchars($user['email']); ?>" required>
</div>
<div class="mb-3">
<label for="no_wa" class="form-label">No. WhatsApp<span class="text-danger">*</span></label>
<div class="input-group">
<span class="input-group-text">+62</span>
<input type="number" id="no_wa" name="no_wa" class="form-control" placeholder="81234567890" maxlength="13" value="<?= htmlspecialchars($user['no_hp']); ?>" required>
</div>
</div>
<div class="mb-3">
<label for="role" class="form-label">Peran</label>
<select id="role" name="role" class="form-select">
<option value="user" <?= $user['role'] == 'user' ? 'selected' : ''; ?>>User</option>
<option value="admin" <?= $user['role'] == 'admin' ? 'selected' : ''; ?>>Admin</option>
</select>
</div>
<div class="mb-3">
<label for="status" class="form-label">Status</label>
<select id="status" name="status" class="form-select">
<option value="active" <?= $user['status'] == 'active' ? 'selected' : ''; ?>>Active</option>
<option value="disabled" <?= $user['status'] == 'disabled' ? 'selected' : ''; ?>>Disabled</option>
</select>
</div>
<div class="mb-3">
<label for="password" class="form-label">Kata Sandi</label>
<div class="input-group">
<input type="password" id="password" name="password" class="form-control">
<span class="input-group-text" onclick="togglePassword('password', 'togglePasswordIcon')" style="cursor: pointer;">
<i class="fa fa-eye" id="togglePasswordIcon"></i>
</span>
</div>
</div>
<!-- Tombol Submit -->
<div class="d-flex justify-content-end">
<button type="submit" class="btn btn-primary me-2"><i class="bi bi-check-circle"></i> Simpan</button>
<a href="../pengguna/" class="btn btn-secondary me-2"><i class="bi bi-x-circle"></i> Batal</a>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- Modal Konfirmasi Logout -->
<div class="modal fade" id="confirmLogoutModal" tabindex="-1" aria-labelledby="logoutModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="logoutModalLabel">Konfirmasi Keluar</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
Apakah Anda yakin ingin keluar dari halaman ini?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
<a href="../logout.php" id="logoutConfirmBtn" class="btn btn-danger">Keluar</a>
</div>
</div>
</div>
</div>
</main><!-- End #main -->
<!-- ======= Footer ======= -->
<footer id="footer" class="footer">
<div class="copyright">
&copy; Copyright <strong><span>Portal UMKM</span></strong>. All Rights Reserved
</div>
<div class="credits">
<!-- All the links in the footer should remain intact. -->
<!-- You can delete the links only if you purchased the pro version. -->
<!-- Licensing information: https://bootstrapmade.com/license/ -->
<!-- Purchase the pro version with working PHP/AJAX contact form: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/ -->
<!-- Designed by <a href="https://bootstrapmade.com/">BootstrapMade</a> -->
</div>
</footer><!-- End Footer -->
<a href="#" class="back-to-top d-flex align-items-center justify-content-center"><i class="bi bi-arrow-up-short"></i></a>
<!-- Vendor JS Files -->
<script src="../../assets/template/vendor/apexcharts/apexcharts.min.js"></script>
<script src="../../assets/template/vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
<script src="../../assets/template/vendor/chart.js/chart.umd.js"></script>
<script src="../../assets/template/vendor/echarts/echarts.min.js"></script>
<script src="../../assets/template/vendor/quill/quill.js"></script>
<script src="../../assets/template/vendor/simple-datatables/simple-datatables.js"></script>
<script src="../../assets/template/vendor/tinymce/tinymce.min.js"></script>
<script src="../../assets/template/vendor/php-email-form/validate.js"></script>
<!-- Template Main JS File -->
<script src="../../assets/template/js/main.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<script>
function togglePassword(inputId, iconId) {
const input = document.getElementById(inputId);
const icon = document.getElementById(iconId);
const isPassword = input.type === 'password';
input.type = isPassword ? 'text' : 'password';
icon.classList.toggle('fa-eye');
icon.classList.toggle('fa-eye-slash');
}
</script>
</body>
</html>

View File

@ -0,0 +1,75 @@
<?php
include '../auth.php';
include '../../koneksi.php';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$id = $_POST['id'];
$nama_lengkap = mysqli_real_escape_string($conn, $_POST['namalengkap']);
$email = mysqli_real_escape_string($conn, $_POST['email']);
$no_wa = mysqli_real_escape_string($conn, $_POST['no_wa']);
// Simpan input lama jika terjadi error
$_SESSION['old_input'] = $_POST;
// Cek apakah email sudah digunakan oleh user lain
$checkEmail = "SELECT id_user FROM users WHERE email = '$email' AND id_user != '$id'";
$resultEmail = mysqli_query($conn, $checkEmail);
if (mysqli_num_rows($resultEmail) > 0) {
$_SESSION['error'] = "Email sudah digunakan oleh pengguna lain!";
header("Location: ../pengguna/update.php?id=$id");
exit();
}
// Validasi No. WhatsApp (harus 10-15 digit angka)
if (!preg_match('/^[0-9]{10,15}$/', $no_wa)) {
$_SESSION['error'] = "Nomor WhatsApp harus terdiri dari 10-15 digit angka!";
header("Location: ../pengguna/update.php?id=$id");
exit();
}
// Validasi Password (jika diisi, minimal 8 karakter)
if (!empty($_POST['password']) && strlen($_POST['password']) < 8) {
$_SESSION['error'] = "Password harus memiliki minimal 8 karakter!";
header("Location: ../pengguna/update.php?id=$id");
exit();
}
// Query awal tanpa status, role, dan password
$query = "UPDATE users SET
nama_lengkap = '$nama_lengkap',
email = '$email',
no_hp = '$no_wa'";
// Jika role diisi, update
if (!empty($_POST['role'])) {
$role = mysqli_real_escape_string($conn, $_POST['role']);
$query .= ", role = '$role'";
}
// Jika status diisi, update
if (!empty($_POST['status'])) {
$status = mysqli_real_escape_string($conn, $_POST['status']);
$query .= ", status = '$status'";
}
// Jika password diisi, update dengan hash
if (!empty($_POST['password'])) {
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
$query .= ", password = '$password'";
}
$query .= " WHERE id_user = '$id'";
// Eksekusi query
if (mysqli_query($conn, $query)) {
$_SESSION['success'] = "Data pengguna berhasil diperbarui!";
unset($_SESSION['old_input']); // Hapus old input setelah sukses
} else {
$_SESSION['error'] = "Gagal memperbarui data: " . mysqli_error($conn);
}
// Redirect kembali ke halaman pengguna
header("Location: ../pengguna/");
exit;
}
?>

View File

@ -0,0 +1,396 @@
<?php
include '../auth.php';
include '../../koneksi.php';
$user_id = $_SESSION['user_id'];
// 🔹 Ambil data dari users berdasarkan user_id
$sql = "SELECT * FROM users WHERE id_user = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("i", $user_id); // Mengikat parameter user_id sebagai integer
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc(); // Mengambil hasil query sebagai array asosiasi
if ($result->num_rows > 0) {
$nama_lengkap = $row['nama_lengkap'];
$email = $row['email']; //
$no_hp = $row['no_hp'];
} else {
echo "User tidak ditemukan.";
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<title>Update Profile | Admin</title>
<meta content="" name="description">
<meta content="" name="keywords">
<meta name="robots" content="noindex">
<!-- Favicons -->
<link href="../../assets/img/favicon.png" rel="icon">
<link href="../../assets/img/apple-touch-icon.png" rel="apple-touch-icon">
<!-- Google Fonts -->
<link href="https://fonts.gstatic.com" rel="preconnect">
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i,700,700i|Nunito:300,300i,400,400i,600,600i,700,700i|Poppins:300,300i,400,400i,500,500i,600,600i,700,700i" rel="stylesheet">
<!-- Vendor CSS Files -->
<link href="../../assets/template/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<link href="../../assets/template/vendor/bootstrap-icons/bootstrap-icons.css" rel="stylesheet">
<link href="../../assets/template/vendor/boxicons/css/boxicons.min.css" rel="stylesheet">
<link href="../../assets/template/vendor/quill/quill.snow.css" rel="stylesheet">
<link href="../../assets/template/vendor/quill/quill.bubble.css" rel="stylesheet">
<link href="../../assets/template/vendor/remixicon/remixicon.css" rel="stylesheet">
<link href="../../assets/template/vendor/simple-datatables/style.css" rel="stylesheet">
<!-- Template Main CSS File -->
<link href="../../assets/template/css/style.css" rel="stylesheet">
<!-- =======================================================
* Template Name: NiceAdmin
* Template URL: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/
* Updated: Apr 20 2024 with Bootstrap v5.3.3
* Author: BootstrapMade.com
* License: https://bootstrapmade.com/license/
======================================================== -->
</head>
<body>
<!-- ======= Header ======= -->
<header id="header" class="header fixed-top d-flex align-items-center">
<div class="d-flex align-items-center justify-content-between">
<a href="/" class="logo d-flex align-items-center">
<img src="../../assets/img/logo.png" alt="">
<span class="d-none d-lg-block">Portal UMKM</span>
</a>
<i class="bi bi-list toggle-sidebar-btn"></i>
</div><!-- End Logo -->
<nav class="header-nav ms-auto">
<ul class="d-flex align-items-center">
<li class="nav-item dropdown pe-3">
<a class="nav-link nav-profile d-flex align-items-center pe-0" href="#" data-bs-toggle="dropdown">
<span class="fw-semibold dropdown-toggle ps-2">Hai, <?php echo $_SESSION['nama_lengkap']; ?>!</span>
</a><!-- End Profile Iamge Icon -->
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-arrow profile">
<li class="dropdown-header">
<h6><?php echo $_SESSION['nama_lengkap']; ?></h6>
<span><?php echo ucfirst($_SESSION['role']); ?></span>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li>
<a class="dropdown-item d-flex align-items-center" href="../update-profile/">
<i class="bi bi-gear"></i>
<span>Pengaturan</span>
</a>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li>
<a class="dropdown-item d-flex align-items-center" href="#" data-bs-toggle="modal" data-bs-target="#confirmLogoutModal">
<i class="bi bi-box-arrow-right"></i>
<span>Keluar</span>
</a>
</li>
</ul><!-- End Profile Dropdown Items -->
</li><!-- End Profile Nav -->
</ul>
</nav><!-- End Icons Navigation -->
</header><!-- End Header -->
<!-- ======= Sidebar ======= -->
<aside id="sidebar" class="sidebar">
<ul class="sidebar-nav sidebar-nav">
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center" href="../">
<i class="bi bi-columns-gap"></i>
<span>Dashboard</span>
</a>
</li>
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center" href="../landingpage">
<i class="bi bi-journal-richtext"></i>
<span>Landing Page</span>
</a>
</li>
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center" href="../artikel">
<i class="bi bi-newspaper"></i>
<span>Artikel</span>
</a>
</li>
<li class="nav-item mb-2">
<a class="nav-link d-flex align-items-center" href="../pengguna">
<i class="bi bi-people"></i>
<span>Pengguna</span>
</a>
</li>
</ul>
</aside><!-- End Sidebar-->
<main id="main" class="main">
<div class="pagetitle">
<h1>Profil</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="">Beranda</a></li>
<li class="breadcrumb-item">Profil</li>
</ol>
</nav>
</div><!-- End Page Title -->
<?php if (isset($_SESSION['success'])): ?>
<div class="alert alert-success alert-dismissible fade show" role="alert">
<?php echo $_SESSION['success']; ?>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php unset($_SESSION['success']); // Hapus pesan setelah ditampilkan
?>
<?php endif; ?>
<?php if (isset($_SESSION['error'])): ?>
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<?php echo $_SESSION['error']; ?>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php unset($_SESSION['error']); // Hapus pesan setelah ditampilkan
?>
<?php endif; ?>
<section class="section profile">
<div class="row">
<div class="col-xl-12">
<div class="card">
<div class="card-body pt-3">
<!-- Bordered Tabs -->
<ul class="nav nav-tabs nav-tabs-bordered">
<li class="nav-item">
<button class="nav-link active" data-bs-toggle="tab" data-bs-target="#profile-overview">Rangkuman</button>
</li>
<li class="nav-item">
<button class="nav-link" data-bs-toggle="tab" data-bs-target="#profile-edit">Edit Profil</button>
</li>
<li class="nav-item">
<button class="nav-link" data-bs-toggle="tab" data-bs-target="#profile-change-password">Ubah Kata Sandi</button>
</li>
</ul>
<div class="tab-content pt-2">
<div class="tab-pane fade show active profile-overview" id="profile-overview">
<h5 class="card-title">Profil Pengguna</h5>
<div class="row">
<div class="col-lg-2 col-md-4 label ">Nama Lengkap</div>
<div class="col-lg-10 col-md-8"><?php echo htmlspecialchars($nama_lengkap); ?></div>
</div>
<div class="row">
<div class="col-lg-2 col-md-4 label">No. WhatsApp</div>
<div class="col-lg-10 col-md-8">+62<?php echo htmlspecialchars($no_hp); ?></div>
</div>
<div class="row">
<div class="col-lg-2 col-md-4 label">Email</div>
<div class="col-lg-10 col-md-8"><?php echo htmlspecialchars($email); ?></div>
</div>
</div>
<div class="tab-pane fade profile-edit pt-3" id="profile-edit">
<!-- Profile Edit Form -->
<form method="POST" action="updateuser.php">
<div class="row mb-3">
<label for="fullName" class="col-md-4 col-lg-2 col-form-label">Nama Lengkap<span class="text-danger">*</span></label>
<div class="col-md-8 col-lg-10">
<input name="nama_lengkap" type="text" class="form-control" id="nama_lengkap" value="<?php echo htmlspecialchars($nama_lengkap); ?>" required>
</div>
</div>
<div class="row mb-3">
<label for="Phone" class="col-md-4 col-lg-2 col-form-label">No. WhatsApp<span class="text-danger">*</span></label>
<div class="col-md-8 col-lg-10">
<div class="input-group">
<span class="input-group-text">+62</span>
<input name="no_hp" type="number" class="form-control" id="no_hp" value="<?php echo htmlspecialchars($no_hp); ?>" required>
</div>
</div>
</div>
<div class="row mb-3">
<label for="Email" class="col-md-4 col-lg-2 col-form-label">Email<span class="text-danger">*</span></label>
<div class="col-md-8 col-lg-10">
<input name="email" type="email" class="form-control" id="email" value="<?php echo htmlspecialchars($email); ?>" required>
</div>
</div>
<div class="text-center">
<button type="submit" class="btn btn-primary"><i class="bi bi-check-circle"></i> Simpan Perubahan</button>
</div>
</form><!-- End Profile Edit Form -->
</div>
<div class="tab-pane fade pt-3" id="profile-change-password">
<!-- Change Password Form -->
<form method="POST" action="updatepass.php">
<div class="row mb-3">
<label for="currentPassword" class="col-md-4 col-lg-2 col-form-label">Kata Sandi Saat Ini</label>
<div class="col-md-8 col-lg-10">
<div class="input-group">
<input name="password" type="password" class="form-control" id="currentPassword">
<span class="input-group-text" onclick="togglePassword('currentPassword', 'iconCurrent')" style="cursor: pointer;">
<i class="fa fa-eye" id="iconCurrent"></i>
</span>
</div>
</div>
</div>
<div class="row mb-3">
<label for="newPassword" class="col-md-4 col-lg-2 col-form-label">Kata Sandi Baru</label>
<div class="col-md-8 col-lg-10">
<div class="input-group">
<input name="newpassword" type="password" class="form-control" id="newPassword">
<span class="input-group-text" onclick="togglePassword('newPassword', 'iconNew')" style="cursor: pointer;">
<i class="fa fa-eye" id="iconNew"></i>
</span>
</div>
</div>
</div>
<div class="row mb-3">
<label for="renewPassword" class="col-md-4 col-lg-2 col-form-label">Konfirmasi Kata Sandi Baru</label>
<div class="col-md-8 col-lg-10">
<div class="input-group">
<input name="renewpassword" type="password" class="form-control" id="renewPassword">
<span class="input-group-text" onclick="togglePassword('renewPassword', 'iconRenew')" style="cursor: pointer;">
<i class="fa fa-eye" id="iconRenew"></i>
</span>
</div>
</div>
</div>
<div class="text-center">
<button type="submit" class="btn btn-primary"><i class="bi bi-check-circle"></i> Ubah Kata Sandi</button>
</div>
</form><!-- End Change Password Form -->
</div>
</div><!-- End Bordered Tabs -->
</div>
</div>
</div>
</div>
</section>
<!-- Modal Konfirmasi Logout -->
<div class="modal fade" id="confirmLogoutModal" tabindex="-1" aria-labelledby="logoutModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="logoutModalLabel">Konfirmasi Keluar</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
Apakah Anda yakin ingin keluar dari halaman ini?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
<a href="../logout.php" id="logoutConfirmBtn" class="btn btn-danger">Keluar</a>
</div>
</div>
</div>
</div>
</main><!-- End #main -->
<!-- ======= Footer ======= -->
<footer id="footer" class="footer">
<div class="copyright">
&copy; Copyright <strong><span>Portal UMKM</span></strong>. All Rights Reserved
</div>
<div class="credits">
<!-- All the links in the footer should remain intact. -->
<!-- You can delete the links only if you purchased the pro version. -->
<!-- Licensing information: https://bootstrapmade.com/license/ -->
<!-- Purchase the pro version with working PHP/AJAX contact form: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/ -->
<!-- Designed by <a href="https://bootstrapmade.com/">BootstrapMade</a> -->
</div>
</footer><!-- End Footer -->
<a href="#" class="back-to-top d-flex align-items-center justify-content-center"><i class="bi bi-arrow-up-short"></i></a>
<!-- Vendor JS Files -->
<script src="../../assets/template/vendor/apexcharts/apexcharts.min.js"></script>
<script src="../../assets/template/vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
<script src="../../assets/template/vendor/chart.js/chart.umd.js"></script>
<script src="../../assets/template/vendor/echarts/echarts.min.js"></script>
<script src="../../assets/template/vendor/quill/quill.js"></script>
<script src="../../assets/template/vendor/simple-datatables/simple-datatables.js"></script>
<script src="../../assets/template/vendor/tinymce/tinymce.min.js"></script>
<script src="../../assets/template/vendor/php-email-form/validate.js"></script>
<!-- Template Main JS File -->
<script src="../../assets/template/js/main.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<script>
function togglePassword(inputId, iconId) {
const input = document.getElementById(inputId);
const icon = document.getElementById(iconId);
const isPassword = input.type === 'password';
input.type = isPassword ? 'text' : 'password';
icon.classList.toggle('fa-eye');
icon.classList.toggle('fa-eye-slash');
}
</script>
</body>
</html>

View File

@ -0,0 +1,95 @@
<?php
include '../auth.php';
include '../../koneksi.php';
$user_id = $_SESSION['user_id'];
$currentPassword = $newPassword = $renewPassword = "";
// Check if the form is submitted
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Get and sanitize the input data
$currentPassword = trim($_POST['password']);
$newPassword = trim($_POST['newpassword']);
$renewPassword = trim($_POST['renewpassword']);
// Simpan input lama jika terjadi error
$_SESSION['old_input'] = $_POST;
// Validasi semua kolom harus diisi
if (empty($currentPassword) || empty($newPassword) || empty($renewPassword)) {
$_SESSION['error'] = "Semua kolom kata sandi harus diisi!";
header("Location: ./");
exit();
}
// Fetch the current password from the database
$sql = "SELECT password FROM users WHERE id_user = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("i", $user_id);
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows === 0) {
$_SESSION['error'] = "Pengguna tidak ditemukan!";
header("Location: ./");
exit();
}
// Bind the result (current password)
$stmt->bind_result($dbPassword);
$stmt->fetch();
$stmt->close();
// Cek apakah password saat ini cocok dengan database
if (!password_verify($currentPassword, $dbPassword)) {
$_SESSION['error'] = "Kata sandi saat ini salah!";
header("Location: ./");
exit();
}
// Validasi panjang password minimal 8 karakter
if (strlen($newPassword) < 8) {
$_SESSION['error'] = "Kata sandi baru harus minimal 8 karakter!";
header("Location: ./");
exit();
}
// Validasi kecocokan password baru dan konfirmasi password
if ($newPassword !== $renewPassword) {
$_SESSION['error'] = "Kata sandi baru dan konfirmasi kata sandi tidak cocok!";
header("Location: ./");
exit();
}
// Cek apakah sandi baru tidak sama dengan sandi lama
if (password_verify($newPassword, $dbPassword)) {
$_SESSION['error'] = "Kata sandi baru tidak boleh sama dengan kata sandi lama!";
header("Location: ./");
exit();
}
// Hash password baru sebelum disimpan
$hashedNewPassword = password_hash($newPassword, PASSWORD_DEFAULT);
// Update password dalam database
$sql = "UPDATE users SET password = ? WHERE id_user = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("si", $hashedNewPassword, $user_id);
if ($stmt->execute()) {
$_SESSION['success'] = "Kata sandi berhasil diperbarui!";
unset($_SESSION['old_input']); // Hapus old input setelah sukses
header("Location: ./");
exit();
} else {
$_SESSION['error'] = "Terjadi kesalahan saat memperbarui kata sandi!";
header("Location: ./");
exit();
}
$stmt->close();
}
$conn->close();
?>

View File

@ -0,0 +1,72 @@
<?php
include '../auth.php';
include '../../koneksi.php';
// Get the user ID from session
$user_id = $_SESSION['user_id'];
// Initialize variables with default values
$nama_lengkap = $no_hp = $email = "";
// Check if the form is submitted
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Get and sanitize the input data
$nama_lengkap = htmlspecialchars(trim($_POST['nama_lengkap']));
$no_hp = htmlspecialchars(trim($_POST['no_hp']));
$email = htmlspecialchars(trim($_POST['email']));
// Simpan input lama jika terjadi error
$_SESSION['old_input'] = $_POST;
// Validasi No. WhatsApp (harus 10-15 digit angka)
if (!preg_match("/^\d{10,15}$/", $no_hp)) {
$_SESSION['error'] = "Nomor WhatsApp harus berupa angka dan 10-15 digit!";
header("Location: ./");
exit();
}
// Validasi email format
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$_SESSION['error'] = "Format email tidak valid!";
header("Location: ./");
exit();
}
// Cek apakah email sudah digunakan oleh user lain
$checkEmail = "SELECT id_user FROM users WHERE email = ? AND id_user != ?";
$stmt = $conn->prepare($checkEmail);
$stmt->bind_param("si", $email, $user_id);
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows > 0) {
$_SESSION['error'] = "Email sudah digunakan oleh pengguna lain!";
header("Location: ./");
exit();
}
$stmt->close();
// Update data jika validasi lolos
$sql = "UPDATE users SET nama_lengkap = ?, no_hp = ?, email = ? WHERE id_user = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("sssi", $nama_lengkap, $no_hp, $email, $user_id);
// Eksekusi update
if ($stmt->execute()) {
$_SESSION['success'] = "Data berhasil diperbarui!";
unset($_SESSION['old_input']); // Hapus old input setelah sukses
header("Location: ./");
exit();
} else {
$_SESSION['error'] = "Terjadi kesalahan saat memperbarui data!";
header("Location: ./");
exit();
}
// Tutup statement
$stmt->close();
}
// Tutup koneksi database
$conn->close();
?>

11
assets/css/custom.css Normal file
View File

@ -0,0 +1,11 @@
.icon-container {
width: 50px;
height: 50px;
}
.card {
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.card:hover {
transform: translateY(-3px);
box-shadow: 0px 8px 16px rgba(0, 0, 0, 0.1);
}

2479
assets/css/style.css Normal file

File diff suppressed because it is too large Load Diff

BIN
assets/img/about.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 KiB

BIN
assets/img/beranda.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

BIN
assets/img/blog.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

BIN
assets/img/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 KiB

BIN
assets/img/features-3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 634 KiB

BIN
assets/img/features.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 KiB

BIN
assets/img/footer-bg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
assets/img/hero-bg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

BIN
assets/img/hero-img.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 KiB

BIN
assets/img/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 KiB

6
assets/js/custom.js Normal file
View File

@ -0,0 +1,6 @@
function googleTranslateElementInit() {
new google.translate.TranslateElement(
{ pageLanguage: 'id', includedLanguages: 'en,id', layout: google.translate.TranslateElement.InlineLayout.SIMPLE },
'google_translate_element'
);
}

296
assets/js/main.js Normal file
View File

@ -0,0 +1,296 @@
/**
* Template Name: FlexStart
* Template URL: https://bootstrapmade.com/flexstart-bootstrap-startup-template/
* Updated: Mar 17 2024 with Bootstrap v5.3.3
* Author: BootstrapMade.com
* License: https://bootstrapmade.com/license/
*/
(function() {
"use strict";
/**
* Easy selector helper function
*/
const select = (el, all = false) => {
el = el.trim()
if (all) {
return [...document.querySelectorAll(el)]
} else {
return document.querySelector(el)
}
}
/**
* Easy event listener function
*/
const on = (type, el, listener, all = false) => {
if (all) {
select(el, all).forEach(e => e.addEventListener(type, listener))
} else {
select(el, all).addEventListener(type, listener)
}
}
/**
* Easy on scroll event listener
*/
const onscroll = (el, listener) => {
el.addEventListener('scroll', listener)
}
/**
* Navbar links active state on scroll
*/
let navbarlinks = select('#navbar .scrollto', true)
const navbarlinksActive = () => {
let position = window.scrollY + 200
navbarlinks.forEach(navbarlink => {
if (!navbarlink.hash) return
let section = select(navbarlink.hash)
if (!section) return
if (position >= section.offsetTop && position <= (section.offsetTop + section.offsetHeight)) {
navbarlink.classList.add('active')
} else {
navbarlink.classList.remove('active')
}
})
}
window.addEventListener('load', navbarlinksActive)
onscroll(document, navbarlinksActive)
/**
* Scrolls to an element with header offset
*/
const scrollto = (el) => {
let header = select('#header')
let offset = header.offsetHeight
if (!header.classList.contains('header-scrolled')) {
offset -= 10
}
let elementPos = select(el).offsetTop
window.scrollTo({
top: elementPos - offset,
behavior: 'smooth'
})
}
/**
* Toggle .header-scrolled class to #header when page is scrolled
*/
let selectHeader = select('#header')
if (selectHeader) {
const headerScrolled = () => {
if (window.scrollY > 100) {
selectHeader.classList.add('header-scrolled')
} else {
selectHeader.classList.remove('header-scrolled')
}
}
window.addEventListener('load', headerScrolled)
onscroll(document, headerScrolled)
}
/**
* Back to top button
*/
let backtotop = select('.back-to-top')
if (backtotop) {
const toggleBacktotop = () => {
if (window.scrollY > 100) {
backtotop.classList.add('active')
} else {
backtotop.classList.remove('active')
}
}
window.addEventListener('load', toggleBacktotop)
onscroll(document, toggleBacktotop)
}
/**
* Mobile nav toggle
*/
on('click', '.mobile-nav-toggle', function(e) {
select('#navbar').classList.toggle('navbar-mobile')
this.classList.toggle('bi-list')
this.classList.toggle('bi-x')
})
/**
* Mobile nav dropdowns activate
*/
on('click', '.navbar .dropdown > a', function(e) {
if (select('#navbar').classList.contains('navbar-mobile')) {
e.preventDefault()
this.nextElementSibling.classList.toggle('dropdown-active')
}
}, true)
/**
* Scrool with ofset on links with a class name .scrollto
*/
on('click', '.scrollto', function(e) {
if (select(this.hash)) {
e.preventDefault()
let navbar = select('#navbar')
if (navbar.classList.contains('navbar-mobile')) {
navbar.classList.remove('navbar-mobile')
let navbarToggle = select('.mobile-nav-toggle')
navbarToggle.classList.toggle('bi-list')
navbarToggle.classList.toggle('bi-x')
}
scrollto(this.hash)
}
}, true)
/**
* Scroll with ofset on page load with hash links in the url
*/
window.addEventListener('load', () => {
if (window.location.hash) {
if (select(window.location.hash)) {
scrollto(window.location.hash)
}
}
});
/**
* Clients Slider
*/
new Swiper('.clients-slider', {
speed: 400,
loop: true,
autoplay: {
delay: 5000,
disableOnInteraction: false
},
slidesPerView: 'auto',
pagination: {
el: '.swiper-pagination',
type: 'bullets',
clickable: true
},
breakpoints: {
320: {
slidesPerView: 2,
spaceBetween: 40
},
480: {
slidesPerView: 3,
spaceBetween: 60
},
640: {
slidesPerView: 4,
spaceBetween: 80
},
992: {
slidesPerView: 6,
spaceBetween: 120
}
}
});
/**
* Porfolio isotope and filter
*/
window.addEventListener('load', () => {
let portfolioContainer = select('.portfolio-container');
if (portfolioContainer) {
let portfolioIsotope = new Isotope(portfolioContainer, {
itemSelector: '.portfolio-item',
layoutMode: 'fitRows'
});
let portfolioFilters = select('#portfolio-flters li', true);
on('click', '#portfolio-flters li', function(e) {
e.preventDefault();
portfolioFilters.forEach(function(el) {
el.classList.remove('filter-active');
});
this.classList.add('filter-active');
portfolioIsotope.arrange({
filter: this.getAttribute('data-filter')
});
aos_init();
}, true);
}
});
/**
* Initiate portfolio lightbox
*/
const portfolioLightbox = GLightbox({
selector: '.portfokio-lightbox'
});
/**
* Portfolio details slider
*/
new Swiper('.portfolio-details-slider', {
speed: 400,
autoplay: {
delay: 5000,
disableOnInteraction: false
},
pagination: {
el: '.swiper-pagination',
type: 'bullets',
clickable: true
}
});
/**
* Testimonials slider
*/
new Swiper('.testimonials-slider', {
speed: 600,
loop: true,
autoplay: {
delay: 5000,
disableOnInteraction: false
},
slidesPerView: 'auto',
pagination: {
el: '.swiper-pagination',
type: 'bullets',
clickable: true
},
breakpoints: {
320: {
slidesPerView: 1,
spaceBetween: 40
},
1200: {
slidesPerView: 3,
}
}
});
/**
* Animation on scroll
*/
function aos_init() {
AOS.init({
duration: 1000,
easing: "ease-in-out",
once: true,
mirror: false
});
}
window.addEventListener('load', () => {
aos_init();
});
/**
* Initiate Pure Counter
*/
new PureCounter();
})();

2
assets/scss/Readme.txt Normal file
View File

@ -0,0 +1,2 @@
The .scss (Sass) files are only available in the pro version.
You can buy it from: https://bootstrapmade.com/flexstart-bootstrap-startup-template/

File diff suppressed because it is too large Load Diff

331
assets/template/js/main.js Normal file
View File

@ -0,0 +1,331 @@
/**
* Template Name: NiceAdmin
* Template URL: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/
* Updated: Apr 20 2024 with Bootstrap v5.3.3
* Author: BootstrapMade.com
* License: https://bootstrapmade.com/license/
*/
(function() {
"use strict";
/**
* Easy selector helper function
*/
const select = (el, all = false) => {
el = el.trim()
if (all) {
return [...document.querySelectorAll(el)]
} else {
return document.querySelector(el)
}
}
/**
* Easy event listener function
*/
const on = (type, el, listener, all = false) => {
if (all) {
select(el, all).forEach(e => e.addEventListener(type, listener))
} else {
select(el, all).addEventListener(type, listener)
}
}
/**
* Easy on scroll event listener
*/
const onscroll = (el, listener) => {
el.addEventListener('scroll', listener)
}
/**
* Sidebar toggle
*/
if (select('.toggle-sidebar-btn')) {
on('click', '.toggle-sidebar-btn', function(e) {
select('body').classList.toggle('toggle-sidebar')
})
}
/**
* Search bar toggle
*/
if (select('.search-bar-toggle')) {
on('click', '.search-bar-toggle', function(e) {
select('.search-bar').classList.toggle('search-bar-show')
})
}
/**
* Navbar links active state on scroll
*/
let navbarlinks = select('#navbar .scrollto', true)
const navbarlinksActive = () => {
let position = window.scrollY + 200
navbarlinks.forEach(navbarlink => {
if (!navbarlink.hash) return
let section = select(navbarlink.hash)
if (!section) return
if (position >= section.offsetTop && position <= (section.offsetTop + section.offsetHeight)) {
navbarlink.classList.add('active')
} else {
navbarlink.classList.remove('active')
}
})
}
window.addEventListener('load', navbarlinksActive)
onscroll(document, navbarlinksActive)
/**
* Toggle .header-scrolled class to #header when page is scrolled
*/
let selectHeader = select('#header')
if (selectHeader) {
const headerScrolled = () => {
if (window.scrollY > 100) {
selectHeader.classList.add('header-scrolled')
} else {
selectHeader.classList.remove('header-scrolled')
}
}
window.addEventListener('load', headerScrolled)
onscroll(document, headerScrolled)
}
/**
* Back to top button
*/
let backtotop = select('.back-to-top')
if (backtotop) {
const toggleBacktotop = () => {
if (window.scrollY > 100) {
backtotop.classList.add('active')
} else {
backtotop.classList.remove('active')
}
}
window.addEventListener('load', toggleBacktotop)
onscroll(document, toggleBacktotop)
}
/**
* Initiate tooltips
*/
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
var tooltipList = tooltipTriggerList.map(function(tooltipTriggerEl) {
return new bootstrap.Tooltip(tooltipTriggerEl)
})
/**
* Initiate quill editors
*/
if (select('.quill-editor-default')) {
new Quill('.quill-editor-default', {
theme: 'snow'
});
}
if (select('.quill-editor-bubble')) {
new Quill('.quill-editor-bubble', {
theme: 'bubble'
});
}
if (select('.quill-editor-full')) {
new Quill(".quill-editor-full", {
modules: {
toolbar: [
[{
font: []
}, {
size: []
}],
["bold", "italic", "underline", "strike"],
[{
color: []
},
{
background: []
}
],
[{
script: "super"
},
{
script: "sub"
}
],
[{
list: "ordered"
},
{
list: "bullet"
},
{
indent: "-1"
},
{
indent: "+1"
}
],
["direction", {
align: []
}],
["link", "image", "video"],
["clean"]
]
},
theme: "snow"
});
}
/**
* Initiate TinyMCE Editor
*/
const useDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;
const isSmallScreen = window.matchMedia('(max-width: 1023.5px)').matches;
tinymce.init({
selector: 'textarea.tinymce-editor',
plugins: 'preview importcss searchreplace autolink autosave save directionality code visualblocks visualchars fullscreen image link media codesample table charmap pagebreak nonbreaking anchor insertdatetime advlist lists wordcount help charmap quickbars emoticons accordion',
editimage_cors_hosts: ['picsum.photos'],
menubar: 'file edit view insert format tools table help',
toolbar: "undo redo | accordion accordionremove | blocks fontfamily fontsize | bold italic underline strikethrough | align numlist bullist | link image | table media | lineheight outdent indent| forecolor backcolor removeformat | charmap emoticons | code fullscreen preview | save print | pagebreak anchor codesample | ltr rtl",
autosave_ask_before_unload: true,
autosave_interval: '30s',
autosave_prefix: '{path}{query}-{id}-',
autosave_restore_when_empty: false,
autosave_retention: '2m',
image_advtab: true,
link_list: [{
title: 'My page 1',
value: 'https://www.tiny.cloud'
},
{
title: 'My page 2',
value: 'http://www.moxiecode.com'
}
],
image_list: [{
title: 'My page 1',
value: 'https://www.tiny.cloud'
},
{
title: 'My page 2',
value: 'http://www.moxiecode.com'
}
],
image_class_list: [{
title: 'None',
value: ''
},
{
title: 'Some class',
value: 'class-name'
}
],
importcss_append: true,
file_picker_callback: (callback, value, meta) => {
/* Provide file and text for the link dialog */
if (meta.filetype === 'file') {
callback('https://www.google.com/logos/google.jpg', {
text: 'My text'
});
}
/* Provide image and alt text for the image dialog */
if (meta.filetype === 'image') {
callback('https://www.google.com/logos/google.jpg', {
alt: 'My alt text'
});
}
/* Provide alternative source and posted for the media dialog */
if (meta.filetype === 'media') {
callback('movie.mp4', {
source2: 'alt.ogg',
poster: 'https://www.google.com/logos/google.jpg'
});
}
},
height: 600,
image_caption: true,
quickbars_selection_toolbar: 'bold italic | quicklink h2 h3 blockquote quickimage quicktable',
noneditable_class: 'mceNonEditable',
toolbar_mode: 'sliding',
contextmenu: 'link image table',
skin: useDarkMode ? 'oxide-dark' : 'oxide',
content_css: useDarkMode ? 'dark' : 'default',
content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:16px }'
});
/**
* Initiate Bootstrap validation check
*/
var needsValidation = document.querySelectorAll('.needs-validation')
Array.prototype.slice.call(needsValidation)
.forEach(function(form) {
form.addEventListener('submit', function(event) {
if (!form.checkValidity()) {
event.preventDefault()
event.stopPropagation()
}
form.classList.add('was-validated')
}, false)
})
/**
* Initiate Datatables
*/
const datatables = select('.datatable', true)
datatables.forEach(datatable => {
new simpleDatatables.DataTable(datatable, {
perPageSelect: [5, 10, 15, ["All", -1]],
columns: [{
select: 2,
sortSequence: ["desc", "asc"]
},
{
select: 3,
sortSequence: ["desc"]
},
{
select: 4,
cellClass: "green",
headerClass: "red"
}
]
});
})
/**
* Autoresize echart charts
*/
const mainContainer = select('#main');
if (mainContainer) {
setTimeout(() => {
new ResizeObserver(function() {
select('.echart', true).forEach(getEchart => {
echarts.getInstanceByDom(getEchart).resize();
})
}).observe(mainContainer);
}, 200);
}
})();
//CUSTOM
setTimeout(function() {
let alerts = document.querySelectorAll('.alert');
alerts.forEach(alert => {
alert.classList.remove('show');
alert.classList.add('fade');
setTimeout(() => alert.remove(), 500); // Hapus dari DOM setelah efek fade out
});
}, 5000);

View File

@ -0,0 +1,2 @@
The .scss (Sass) files are only available in the pro version.
You can buy it from: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,601 @@
@keyframes opaque {
0% {
opacity: 0
}
to {
opacity: 1
}
}
@keyframes resizeanim {
0%,to {
opacity: 0
}
}
.apexcharts-canvas {
position: relative;
user-select: none
}
.apexcharts-canvas ::-webkit-scrollbar {
-webkit-appearance: none;
width: 6px
}
.apexcharts-canvas ::-webkit-scrollbar-thumb {
border-radius: 4px;
background-color: rgba(0,0,0,.5);
box-shadow: 0 0 1px rgba(255,255,255,.5);
-webkit-box-shadow: 0 0 1px rgba(255,255,255,.5)
}
.apexcharts-inner {
position: relative
}
.apexcharts-text tspan {
font-family: inherit
}
.legend-mouseover-inactive {
transition: .15s ease all;
opacity: .2
}
.apexcharts-legend-text {
padding-left: 15px;
margin-left: -15px;
}
.apexcharts-series-collapsed {
opacity: 0
}
.apexcharts-tooltip {
border-radius: 5px;
box-shadow: 2px 2px 6px -4px #999;
cursor: default;
font-size: 14px;
left: 62px;
opacity: 0;
pointer-events: none;
position: absolute;
top: 20px;
display: flex;
flex-direction: column;
overflow: hidden;
white-space: nowrap;
z-index: 12;
transition: .15s ease all
}
.apexcharts-tooltip.apexcharts-active {
opacity: 1;
transition: .15s ease all
}
.apexcharts-tooltip.apexcharts-theme-light {
border: 1px solid #e3e3e3;
background: rgba(255,255,255,.96)
}
.apexcharts-tooltip.apexcharts-theme-dark {
color: #fff;
background: rgba(30,30,30,.8)
}
.apexcharts-tooltip * {
font-family: inherit
}
.apexcharts-tooltip-title {
padding: 6px;
font-size: 15px;
margin-bottom: 4px
}
.apexcharts-tooltip.apexcharts-theme-light .apexcharts-tooltip-title {
background: #eceff1;
border-bottom: 1px solid #ddd
}
.apexcharts-tooltip.apexcharts-theme-dark .apexcharts-tooltip-title {
background: rgba(0,0,0,.7);
border-bottom: 1px solid #333
}
.apexcharts-tooltip-text-goals-value,.apexcharts-tooltip-text-y-value,.apexcharts-tooltip-text-z-value {
display: inline-block;
margin-left: 5px;
font-weight: 600
}
.apexcharts-tooltip-text-goals-label:empty,.apexcharts-tooltip-text-goals-value:empty,.apexcharts-tooltip-text-y-label:empty,.apexcharts-tooltip-text-y-value:empty,.apexcharts-tooltip-text-z-value:empty,.apexcharts-tooltip-title:empty {
display: none
}
.apexcharts-tooltip-text-goals-label,.apexcharts-tooltip-text-goals-value {
padding: 6px 0 5px
}
.apexcharts-tooltip-goals-group,.apexcharts-tooltip-text-goals-label,.apexcharts-tooltip-text-goals-value {
display: flex
}
.apexcharts-tooltip-text-goals-label:not(:empty),.apexcharts-tooltip-text-goals-value:not(:empty) {
margin-top: -6px
}
.apexcharts-tooltip-marker {
width: 12px;
height: 12px;
position: relative;
top: 0;
margin-right: 10px;
border-radius: 50%
}
.apexcharts-tooltip-series-group {
padding: 0 10px;
display: none;
text-align: left;
justify-content: left;
align-items: center
}
.apexcharts-tooltip-series-group.apexcharts-active .apexcharts-tooltip-marker {
opacity: 1
}
.apexcharts-tooltip-series-group.apexcharts-active,.apexcharts-tooltip-series-group:last-child {
padding-bottom: 4px
}
.apexcharts-tooltip-series-group-hidden {
opacity: 0;
height: 0;
line-height: 0;
padding: 0!important
}
.apexcharts-tooltip-y-group {
padding: 6px 0 5px
}
.apexcharts-custom-tooltip,.apexcharts-tooltip-box {
padding: 4px 8px
}
.apexcharts-tooltip-boxPlot {
display: flex;
flex-direction: column-reverse
}
.apexcharts-tooltip-box>div {
margin: 4px 0
}
.apexcharts-tooltip-box span.value {
font-weight: 700
}
.apexcharts-tooltip-rangebar {
padding: 5px 8px
}
.apexcharts-tooltip-rangebar .category {
font-weight: 600;
color: #777
}
.apexcharts-tooltip-rangebar .series-name {
font-weight: 700;
display: block;
margin-bottom: 5px
}
.apexcharts-xaxistooltip,.apexcharts-yaxistooltip {
opacity: 0;
pointer-events: none;
color: #373d3f;
font-size: 13px;
text-align: center;
border-radius: 2px;
position: absolute;
z-index: 10;
background: #eceff1;
border: 1px solid #90a4ae
}
.apexcharts-xaxistooltip {
padding: 9px 10px;
transition: .15s ease all
}
.apexcharts-xaxistooltip.apexcharts-theme-dark {
background: rgba(0,0,0,.7);
border: 1px solid rgba(0,0,0,.5);
color: #fff
}
.apexcharts-xaxistooltip:after,.apexcharts-xaxistooltip:before {
left: 50%;
border: solid transparent;
content: " ";
height: 0;
width: 0;
position: absolute;
pointer-events: none
}
.apexcharts-xaxistooltip:after {
border-color: transparent;
border-width: 6px;
margin-left: -6px
}
.apexcharts-xaxistooltip:before {
border-color: transparent;
border-width: 7px;
margin-left: -7px
}
.apexcharts-xaxistooltip-bottom:after,.apexcharts-xaxistooltip-bottom:before {
bottom: 100%
}
.apexcharts-xaxistooltip-top:after,.apexcharts-xaxistooltip-top:before {
top: 100%
}
.apexcharts-xaxistooltip-bottom:after {
border-bottom-color: #eceff1
}
.apexcharts-xaxistooltip-bottom:before {
border-bottom-color: #90a4ae
}
.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:after,.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:before {
border-bottom-color: rgba(0,0,0,.5)
}
.apexcharts-xaxistooltip-top:after {
border-top-color: #eceff1
}
.apexcharts-xaxistooltip-top:before {
border-top-color: #90a4ae
}
.apexcharts-xaxistooltip-top.apexcharts-theme-dark:after,.apexcharts-xaxistooltip-top.apexcharts-theme-dark:before {
border-top-color: rgba(0,0,0,.5)
}
.apexcharts-xaxistooltip.apexcharts-active {
opacity: 1;
transition: .15s ease all
}
.apexcharts-yaxistooltip {
padding: 4px 10px
}
.apexcharts-yaxistooltip.apexcharts-theme-dark {
background: rgba(0,0,0,.7);
border: 1px solid rgba(0,0,0,.5);
color: #fff
}
.apexcharts-yaxistooltip:after,.apexcharts-yaxistooltip:before {
top: 50%;
border: solid transparent;
content: " ";
height: 0;
width: 0;
position: absolute;
pointer-events: none
}
.apexcharts-yaxistooltip:after {
border-color: transparent;
border-width: 6px;
margin-top: -6px
}
.apexcharts-yaxistooltip:before {
border-color: transparent;
border-width: 7px;
margin-top: -7px
}
.apexcharts-yaxistooltip-left:after,.apexcharts-yaxistooltip-left:before {
left: 100%
}
.apexcharts-yaxistooltip-right:after,.apexcharts-yaxistooltip-right:before {
right: 100%
}
.apexcharts-yaxistooltip-left:after {
border-left-color: #eceff1
}
.apexcharts-yaxistooltip-left:before {
border-left-color: #90a4ae
}
.apexcharts-yaxistooltip-left.apexcharts-theme-dark:after,.apexcharts-yaxistooltip-left.apexcharts-theme-dark:before {
border-left-color: rgba(0,0,0,.5)
}
.apexcharts-yaxistooltip-right:after {
border-right-color: #eceff1
}
.apexcharts-yaxistooltip-right:before {
border-right-color: #90a4ae
}
.apexcharts-yaxistooltip-right.apexcharts-theme-dark:after,.apexcharts-yaxistooltip-right.apexcharts-theme-dark:before {
border-right-color: rgba(0,0,0,.5)
}
.apexcharts-yaxistooltip.apexcharts-active {
opacity: 1
}
.apexcharts-yaxistooltip-hidden {
display: none
}
.apexcharts-xcrosshairs,.apexcharts-ycrosshairs {
pointer-events: none;
opacity: 0;
transition: .15s ease all
}
.apexcharts-xcrosshairs.apexcharts-active,.apexcharts-ycrosshairs.apexcharts-active {
opacity: 1;
transition: .15s ease all
}
.apexcharts-ycrosshairs-hidden {
opacity: 0
}
.apexcharts-selection-rect {
cursor: move
}
.svg_select_boundingRect,.svg_select_points_rot {
pointer-events: none;
opacity: 0;
visibility: hidden
}
.apexcharts-selection-rect+g .svg_select_boundingRect,.apexcharts-selection-rect+g .svg_select_points_rot {
opacity: 0;
visibility: hidden
}
.apexcharts-selection-rect+g .svg_select_points_l,.apexcharts-selection-rect+g .svg_select_points_r {
cursor: ew-resize;
opacity: 1;
visibility: visible
}
.svg_select_points {
fill: #efefef;
stroke: #333;
rx: 2
}
.apexcharts-svg.apexcharts-zoomable.hovering-zoom {
cursor: crosshair
}
.apexcharts-svg.apexcharts-zoomable.hovering-pan {
cursor: move
}
.apexcharts-menu-icon,.apexcharts-pan-icon,.apexcharts-reset-icon,.apexcharts-selection-icon,.apexcharts-toolbar-custom-icon,.apexcharts-zoom-icon,.apexcharts-zoomin-icon,.apexcharts-zoomout-icon {
cursor: pointer;
width: 20px;
height: 20px;
line-height: 24px;
color: #6e8192;
text-align: center
}
.apexcharts-menu-icon svg,.apexcharts-reset-icon svg,.apexcharts-zoom-icon svg,.apexcharts-zoomin-icon svg,.apexcharts-zoomout-icon svg {
fill: #6e8192
}
.apexcharts-selection-icon svg {
fill: #444;
transform: scale(.76)
}
.apexcharts-theme-dark .apexcharts-menu-icon svg,.apexcharts-theme-dark .apexcharts-pan-icon svg,.apexcharts-theme-dark .apexcharts-reset-icon svg,.apexcharts-theme-dark .apexcharts-selection-icon svg,.apexcharts-theme-dark .apexcharts-toolbar-custom-icon svg,.apexcharts-theme-dark .apexcharts-zoom-icon svg,.apexcharts-theme-dark .apexcharts-zoomin-icon svg,.apexcharts-theme-dark .apexcharts-zoomout-icon svg {
fill: #f3f4f5
}
.apexcharts-canvas .apexcharts-reset-zoom-icon.apexcharts-selected svg,.apexcharts-canvas .apexcharts-selection-icon.apexcharts-selected svg,.apexcharts-canvas .apexcharts-zoom-icon.apexcharts-selected svg {
fill: #008ffb
}
.apexcharts-theme-light .apexcharts-menu-icon:hover svg,.apexcharts-theme-light .apexcharts-reset-icon:hover svg,.apexcharts-theme-light .apexcharts-selection-icon:not(.apexcharts-selected):hover svg,.apexcharts-theme-light .apexcharts-zoom-icon:not(.apexcharts-selected):hover svg,.apexcharts-theme-light .apexcharts-zoomin-icon:hover svg,.apexcharts-theme-light .apexcharts-zoomout-icon:hover svg {
fill: #333
}
.apexcharts-menu-icon,.apexcharts-selection-icon {
position: relative
}
.apexcharts-reset-icon {
margin-left: 5px
}
.apexcharts-menu-icon,.apexcharts-reset-icon,.apexcharts-zoom-icon {
transform: scale(.85)
}
.apexcharts-zoomin-icon,.apexcharts-zoomout-icon {
transform: scale(.7)
}
.apexcharts-zoomout-icon {
margin-right: 3px
}
.apexcharts-pan-icon {
transform: scale(.62);
position: relative;
left: 1px;
top: 0
}
.apexcharts-pan-icon svg {
fill: #fff;
stroke: #6e8192;
stroke-width: 2
}
.apexcharts-pan-icon.apexcharts-selected svg {
stroke: #008ffb
}
.apexcharts-pan-icon:not(.apexcharts-selected):hover svg {
stroke: #333
}
.apexcharts-toolbar {
position: absolute;
z-index: 11;
max-width: 176px;
text-align: right;
border-radius: 3px;
padding: 0 6px 2px;
display: flex;
justify-content: space-between;
align-items: center
}
.apexcharts-menu {
background: #fff;
position: absolute;
top: 100%;
border: 1px solid #ddd;
border-radius: 3px;
padding: 3px;
right: 10px;
opacity: 0;
min-width: 110px;
transition: .15s ease all;
pointer-events: none
}
.apexcharts-menu.apexcharts-menu-open {
opacity: 1;
pointer-events: all;
transition: .15s ease all
}
.apexcharts-menu-item {
padding: 6px 7px;
font-size: 12px;
cursor: pointer
}
.apexcharts-theme-light .apexcharts-menu-item:hover {
background: #eee
}
.apexcharts-theme-dark .apexcharts-menu {
background: rgba(0,0,0,.7);
color: #fff
}
@media screen and (min-width:768px) {
.apexcharts-canvas:hover .apexcharts-toolbar {
opacity: 1
}
}
.apexcharts-canvas .apexcharts-element-hidden,.apexcharts-datalabel.apexcharts-element-hidden,.apexcharts-hide .apexcharts-series-points {
opacity: 0
}
.apexcharts-hidden-element-shown {
opacity: 1;
transition: 0.25s ease all;
}
.apexcharts-datalabel,.apexcharts-datalabel-label,.apexcharts-datalabel-value,.apexcharts-datalabels,.apexcharts-pie-label {
cursor: default;
pointer-events: none
}
.apexcharts-pie-label-delay {
opacity: 0;
animation-name: opaque;
animation-duration: .3s;
animation-fill-mode: forwards;
animation-timing-function: ease
}
.apexcharts-radialbar-label {
cursor: pointer;
}
.apexcharts-annotation-rect,.apexcharts-area-series .apexcharts-area,.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,.apexcharts-gridline,.apexcharts-line,.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,.apexcharts-point-annotation-label,.apexcharts-radar-series path,.apexcharts-radar-series polygon,.apexcharts-toolbar svg,.apexcharts-tooltip .apexcharts-marker,.apexcharts-xaxis-annotation-label,.apexcharts-yaxis-annotation-label,.apexcharts-zoom-rect {
pointer-events: none
}
.apexcharts-marker {
transition: .15s ease all
}
.resize-triggers {
animation: 1ms resizeanim;
visibility: hidden;
opacity: 0;
height: 100%;
width: 100%;
overflow: hidden
}
.contract-trigger:before,.resize-triggers,.resize-triggers>div {
content: " ";
display: block;
position: absolute;
top: 0;
left: 0
}
.resize-triggers>div {
height: 100%;
width: 100%;
background: #eee;
overflow: auto
}
.contract-trigger:before {
overflow: hidden;
width: 200%;
height: 200%
}
.apexcharts-bar-goals-markers{
pointer-events: none
}
.apexcharts-bar-shadows{
pointer-events: none
}
.apexcharts-rangebar-goals-markers{
pointer-events: none
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,63 @@
{
"name": "ar",
"options": {
"months": [
"يناير",
"فبراير",
"مارس",
"أبريل",
"مايو",
"يونيو",
"يوليو",
"أغسطس",
"سبتمبر",
"أكتوبر",
"نوفمبر",
"ديسمبر"
],
"shortMonths": [
"يناير",
"فبراير",
"مارس",
"أبريل",
"مايو",
"يونيو",
"يوليو",
"أغسطس",
"سبتمبر",
"أكتوبر",
"نوفمبر",
"ديسمبر"
],
"days": [
"الأحد",
"الإثنين",
"الثلاثاء",
"الأربعاء",
"الخميس",
"الجمعة",
"السبت"
],
"shortDays": [
"أحد",
"إثنين",
"ثلاثاء",
"أربعاء",
"خميس",
"جمعة",
"سبت"
],
"toolbar": {
"exportToSVG": "تحميل بصيغة SVG",
"exportToPNG": "تحميل بصيغة PNG",
"exportToCSV": "تحميل بصيغة CSV",
"menu": "القائمة",
"selection": "تحديد",
"selectionZoom": "تكبير التحديد",
"zoomIn": "تكبير",
"zoomOut": "تصغير",
"pan": "تحريك",
"reset": "إعادة التعيين"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "be-cyrl",
"options": {
"months": [
"Студзень",
"Люты",
"Сакавік",
"Красавік",
"Травень",
"Чэрвень",
"Ліпень",
"Жнівень",
"Верасень",
"Кастрычнік",
"Лістапад",
"Сьнежань"
],
"shortMonths": [
"Сту",
"Лют",
"Сак",
"Кра",
"Тра",
"Чэр",
"Ліп",
"Жні",
"Вер",
"Кас",
"Ліс",
"Сьн"
],
"days": [
"Нядзеля",
"Панядзелак",
"Аўторак",
"Серада",
"Чацьвер",
"Пятніца",
"Субота"
],
"shortDays": ["Нд", "Пн", "Аў", "Ср", "Чц", "Пт", "Сб"],
"toolbar": {
"exportToSVG": "Спампаваць SVG",
"exportToPNG": "Спампаваць PNG",
"exportToCSV": "Спампаваць CSV",
"menu": "Мэню",
"selection": "Вылучэньне",
"selectionZoom": "Вылучэньне з маштабаваньнем",
"zoomIn": "Наблізіць",
"zoomOut": "Аддаліць",
"pan": "Ссоўваньне",
"reset": "Скінуць маштабаваньне"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "be-latn",
"options": {
"months": [
"Studzień",
"Luty",
"Sakavik",
"Krasavik",
"Travień",
"Červień",
"Lipień",
"Žnivień",
"Vierasień",
"Kastryčnik",
"Listapad",
"Śniežań"
],
"shortMonths": [
"Stu",
"Lut",
"Sak",
"Kra",
"Tra",
"Čer",
"Lip",
"Žni",
"Vie",
"Kas",
"Lis",
"Śni"
],
"days": [
"Niadziela",
"Paniadziełak",
"Aŭtorak",
"Sierada",
"Čaćvier",
"Piatnica",
"Subota"
],
"shortDays": ["Nd", "Pn", "Aŭ", "Sr", "Čć", "Pt", "Sb"],
"toolbar": {
"exportToSVG": "Spampavać SVG",
"exportToPNG": "Spampavać PNG",
"exportToCSV": "Spampavać CSV",
"menu": "Meniu",
"selection": "Vyłučeńnie",
"selectionZoom": "Vyłučeńnie z maštabavańniem",
"zoomIn": "Nablizić",
"zoomOut": "Addalić",
"pan": "Ssoŭvańnie",
"reset": "Skinuć maštabavańnie"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "ca",
"options": {
"months": [
"Gener",
"Febrer",
"Març",
"Abril",
"Maig",
"Juny",
"Juliol",
"Agost",
"Setembre",
"Octubre",
"Novembre",
"Desembre"
],
"shortMonths": [
"Gen.",
"Febr.",
"Març",
"Abr.",
"Maig",
"Juny",
"Jul.",
"Ag.",
"Set.",
"Oct.",
"Nov.",
"Des."
],
"days": [
"Diumenge",
"Dilluns",
"Dimarts",
"Dimecres",
"Dijous",
"Divendres",
"Dissabte"
],
"shortDays": ["Dg", "Dl", "Dt", "Dc", "Dj", "Dv", "Ds"],
"toolbar": {
"exportToSVG": "Descarregar SVG",
"exportToPNG": "Descarregar PNG",
"exportToCSV": "Descarregar CSV",
"menu": "Menú",
"selection": "Seleccionar",
"selectionZoom": "Seleccionar Zoom",
"zoomIn": "Augmentar",
"zoomOut": "Disminuir",
"pan": "Navegació",
"reset": "Reiniciar Zoom"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "cs",
"options": {
"months": [
"Leden",
"Únor",
"Březen",
"Duben",
"Květen",
"Červen",
"Červenec",
"Srpen",
"Září",
"Říjen",
"Listopad",
"Prosinec"
],
"shortMonths": [
"Led",
"Úno",
"Bře",
"Dub",
"Kvě",
"Čvn",
"Čvc",
"Srp",
"Zář",
"Říj",
"Lis",
"Pro"
],
"days": [
"Neděle",
"Pondělí",
"Úterý",
"Středa",
"Čtvrtek",
"Pátek",
"Sobota"
],
"shortDays": ["Ne", "Po", "Út", "St", "Čt", "Pá", "So"],
"toolbar": {
"exportToSVG": "Stáhnout SVG",
"exportToPNG": "Stáhnout PNG",
"exportToCSV": "Stáhnout CSV",
"menu": "Menu",
"selection": "Vybrat",
"selectionZoom": "Zoom: Vybrat",
"zoomIn": "Zoom: Přiblížit",
"zoomOut": "Zoom: Oddálit",
"pan": "Přesouvat",
"reset": "Resetovat"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "da",
"options": {
"months": [
"januar",
"februar",
"marts",
"april",
"maj",
"juni",
"juli",
"august",
"september",
"oktober",
"november",
"december"
],
"shortMonths": [
"jan",
"feb",
"mar",
"apr",
"maj",
"jun",
"jul",
"aug",
"sep",
"okt",
"nov",
"dec"
],
"days": [
"Søndag",
"Mandag",
"Tirsdag",
"Onsdag",
"Torsdag",
"Fredag",
"Lørdag"
],
"shortDays": ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"],
"toolbar": {
"exportToSVG": "Download SVG",
"exportToPNG": "Download PNG",
"exportToCSV": "Download CSV",
"menu": "Menu",
"selection": "Valg",
"selectionZoom": "Zoom til valg",
"zoomIn": "Zoom ind",
"zoomOut": "Zoom ud",
"pan": "Panorér",
"reset": "Nulstil zoom"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "de",
"options": {
"months": [
"Januar",
"Februar",
"März",
"April",
"Mai",
"Juni",
"Juli",
"August",
"September",
"Oktober",
"November",
"Dezember"
],
"shortMonths": [
"Jan",
"Feb",
"Mär",
"Apr",
"Mai",
"Jun",
"Jul",
"Aug",
"Sep",
"Okt",
"Nov",
"Dez"
],
"days": [
"Sonntag",
"Montag",
"Dienstag",
"Mittwoch",
"Donnerstag",
"Freitag",
"Samstag"
],
"shortDays": ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"],
"toolbar": {
"exportToSVG": "SVG speichern",
"exportToPNG": "PNG speichern",
"exportToCSV": "CSV speichern",
"menu": "Menü",
"selection": "Auswahl",
"selectionZoom": "Auswahl vergrößern",
"zoomIn": "Vergrößern",
"zoomOut": "Verkleinern",
"pan": "Verschieben",
"reset": "Zoom zurücksetzen"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "el",
"options": {
"months": [
"Ιανουάριος",
"Φεβρουάριος",
"Μάρτιος",
"Απρίλιος",
"Μάιος",
"Ιούνιος",
"Ιούλιος",
"Αύγουστος",
"Σεπτέμβριος",
"Οκτώβριος",
"Νοέμβριος",
"Δεκέμβριος"
],
"shortMonths": [
"Ιαν",
"Φευ",
"Μαρ",
"Απρ",
"Μάι",
"Ιουν",
"Ιουλ",
"Αυγ",
"Σεπ",
"Οκτ",
"Νοε",
"Δεκ"
],
"days": [
"Κυριακή",
"Δευτέρα",
"Τρίτη",
"Τετάρτη",
"Πέμπτη",
"Παρασκευή",
"Σάββατο"
],
"shortDays": ["Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ"],
"toolbar": {
"exportToSVG": "Λήψη SVG",
"exportToPNG": "Λήψη PNG",
"exportToCSV": "Λήψη CSV",
"menu": "Menu",
"selection": "Επιλογή",
"selectionZoom": "Μεγένθυση βάση επιλογής",
"zoomIn": "Μεγένθυνση",
"zoomOut": "Σμίκρυνση",
"pan": "Μετατόπιση",
"reset": "Επαναφορά μεγένθυνσης"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "en",
"options": {
"months": [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
],
"shortMonths": [
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec"
],
"days": [
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"
],
"shortDays": ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
"toolbar": {
"exportToSVG": "Download SVG",
"exportToPNG": "Download PNG",
"exportToCSV": "Download CSV",
"menu": "Menu",
"selection": "Selection",
"selectionZoom": "Selection Zoom",
"zoomIn": "Zoom In",
"zoomOut": "Zoom Out",
"pan": "Panning",
"reset": "Reset Zoom"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "es",
"options": {
"months": [
"Enero",
"Febrero",
"Marzo",
"Abril",
"Mayo",
"Junio",
"Julio",
"Agosto",
"Septiembre",
"Octubre",
"Noviembre",
"Diciembre"
],
"shortMonths": [
"Ene",
"Feb",
"Mar",
"Abr",
"May",
"Jun",
"Jul",
"Ago",
"Sep",
"Oct",
"Nov",
"Dic"
],
"days": [
"Domingo",
"Lunes",
"Martes",
"Miércoles",
"Jueves",
"Viernes",
"Sábado"
],
"shortDays": ["Dom", "Lun", "Mar", "Mie", "Jue", "Vie", "Sab"],
"toolbar": {
"exportToSVG": "Descargar SVG",
"exportToPNG": "Descargar PNG",
"exportToCSV": "Descargar CSV",
"menu": "Menu",
"selection": "Seleccionar",
"selectionZoom": "Seleccionar Zoom",
"zoomIn": "Aumentar",
"zoomOut": "Disminuir",
"pan": "Navegación",
"reset": "Reiniciar Zoom"
}
}
}

View File

@ -0,0 +1,63 @@
{
"name": "et",
"options": {
"months": [
"jaanuar",
"veebruar",
"märts",
"aprill",
"mai",
"juuni",
"juuli",
"august",
"september",
"oktoober",
"november",
"detsember"
],
"shortMonths": [
"jaan",
"veebr",
"märts",
"apr",
"mai",
"juuni",
"juuli",
"aug",
"sept",
"okt",
"nov",
"dets"
],
"days": [
"pühapäev",
"esmaspäev",
"teisipäev",
"kolmapäev",
"neljapäev",
"reede",
"laupäev"
],
"shortDays": [
"P",
"E",
"T",
"K",
"N",
"R",
"L"
],
"toolbar": {
"exportToSVG": "Lae alla SVG",
"exportToPNG": "Lae alla PNG",
"exportToCSV": "Lae alla CSV",
"menu": "Menüü",
"selection": "Valik",
"selectionZoom": "Valiku suum",
"zoomIn": "Suurenda",
"zoomOut": "Vähenda",
"pan": "Panoraamimine",
"reset": "Lähtesta suum"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "fa",
"options": {
"months": [
"فروردین",
"اردیبهشت",
"خرداد",
"تیر",
"مرداد",
"شهریور",
"مهر",
"آبان",
"آذر",
"دی",
"بهمن",
"اسفند"
],
"shortMonths": [
"فرو",
"ارد",
"خرد",
"تیر",
"مرد",
"شهر",
"مهر",
"آبا",
"آذر",
"دی",
"بهمـ",
"اسفـ"
],
"days": [
"یکشنبه",
"دوشنبه",
"سه شنبه",
"چهارشنبه",
"پنجشنبه",
"جمعه",
"شنبه"
],
"shortDays": ["ی", "د", "س", "چ", "پ", "ج", "ش"],
"toolbar": {
"exportToSVG": "دانلود SVG",
"exportToPNG": "دانلود PNG",
"exportToCSV": "دانلود CSV",
"menu": "منو",
"selection": "انتخاب",
"selectionZoom": "بزرگنمایی انتخابی",
"zoomIn": "بزرگنمایی",
"zoomOut": "کوچکنمایی",
"pan": "پیمایش",
"reset": "بازنشانی بزرگنمایی"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "fi",
"options": {
"months": [
"Tammikuu",
"Helmikuu",
"Maaliskuu",
"Huhtikuu",
"Toukokuu",
"Kesäkuu",
"Heinäkuu",
"Elokuu",
"Syyskuu",
"Lokakuu",
"Marraskuu",
"Joulukuu"
],
"shortMonths": [
"Tammi",
"Helmi",
"Maalis",
"Huhti",
"Touko",
"Kesä",
"Heinä",
"Elo",
"Syys",
"Loka",
"Marras",
"Joulu"
],
"days": [
"Sunnuntai",
"Maanantai",
"Tiistai",
"Keskiviikko",
"Torstai",
"Perjantai",
"Lauantai"
],
"shortDays": ["Su", "Ma", "Ti", "Ke", "To", "Pe", "La"],
"toolbar": {
"exportToSVG": "Lataa SVG",
"exportToPNG": "Lataa PNG",
"exportToCSV": "Lataa CSV",
"menu": "Valikko",
"selection": "Valinta",
"selectionZoom": "Valinnan zoomaus",
"zoomIn": "Lähennä",
"zoomOut": "Loitonna",
"pan": "Panoroi",
"reset": "Nollaa zoomaus"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "fr",
"options": {
"months": [
"janvier",
"février",
"mars",
"avril",
"mai",
"juin",
"juillet",
"août",
"septembre",
"octobre",
"novembre",
"décembre"
],
"shortMonths": [
"janv.",
"févr.",
"mars",
"avr.",
"mai",
"juin",
"juill.",
"août",
"sept.",
"oct.",
"nov.",
"déc."
],
"days": [
"dimanche",
"lundi",
"mardi",
"mercredi",
"jeudi",
"vendredi",
"samedi"
],
"shortDays": ["dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam."],
"toolbar": {
"exportToSVG": "Télécharger au format SVG",
"exportToPNG": "Télécharger au format PNG",
"exportToCSV": "Télécharger au format CSV",
"menu": "Menu",
"selection": "Sélection",
"selectionZoom": "Sélection et zoom",
"zoomIn": "Zoomer",
"zoomOut": "Dézoomer",
"pan": "Navigation",
"reset": "Réinitialiser le zoom"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "he",
"options": {
"months": [
"ינואר",
"פברואר",
"מרץ",
"אפריל",
"מאי",
"יוני",
"יולי",
"אוגוסט",
"ספטמבר",
"אוקטובר",
"נובמבר",
"דצמבר"
],
"shortMonths": [
"ינו׳",
"פבר׳",
"מרץ",
"אפר׳",
"מאי",
"יוני",
"יולי",
"אוג׳",
"ספט׳",
"אוק׳",
"נוב׳",
"דצמ׳"
],
"days": [
"ראשון",
"שני",
"שלישי",
"רביעי",
"חמישי",
"שישי",
"שבת"
],
"shortDays": ["א׳", "ב׳", "ג׳", "ד׳", "ה׳", "ו׳", "ש׳"],
"toolbar": {
"exportToSVG": "הורד SVG",
"exportToPNG": "הורד PNG",
"exportToCSV": "הורד CSV",
"menu": "תפריט",
"selection": "בחירה",
"selectionZoom": "זום בחירה",
"zoomIn": "הגדלה",
"zoomOut": "הקטנה",
"pan": "הזזה",
"reset": "איפוס תצוגה"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "hi",
"options": {
"months": [
"जनवरी",
"फ़रवरी",
"मार्च",
"अप्रैल",
"मई",
"जून",
"जुलाई",
"अगस्त",
"सितंबर",
"अक्टूबर",
"नवंबर",
"दिसंबर"
],
"shortMonths": [
"जनवरी",
"फ़रवरी",
"मार्च",
"अप्रैल",
"मई",
"जून",
"जुलाई",
"अगस्त",
"सितंबर",
"अक्टूबर",
"नवंबर",
"दिसंबर"
],
"days": [
"रविवार",
"सोमवार",
"मंगलवार",
"बुधवार",
"गुरुवार",
"शुक्रवार",
"शनिवार"
],
"shortDays": ["रवि", "सोम", "मंगल", "बुध", "गुरु", "शुक्र", "शनि"],
"toolbar": {
"exportToSVG": "निर्यात SVG",
"exportToPNG": "निर्यात PNG",
"exportToCSV": "निर्यात CSV",
"menu": "सूची",
"selection": "चयन",
"selectionZoom": "ज़ूम करना",
"zoomIn": "ज़ूम इन",
"zoomOut": "ज़ूम आउट",
"pan": "पैनिंग",
"reset": "फिर से कायम करना"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "hr",
"options": {
"months": [
"Siječanj",
"Veljača",
"Ožujak",
"Travanj",
"Svibanj",
"Lipanj",
"Srpanj",
"Kolovoz",
"Rujan",
"Listopad",
"Studeni",
"Prosinac"
],
"shortMonths": [
"Sij",
"Velj",
"Ožu",
"Tra",
"Svi",
"Lip",
"Srp",
"Kol",
"Ruj",
"Lis",
"Stu",
"Pro"
],
"days": [
"Nedjelja",
"Ponedjeljak",
"Utorak",
"Srijeda",
"Četvrtak",
"Petak",
"Subota"
],
"shortDays": ["Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"],
"toolbar": {
"exportToSVG": "Preuzmi SVG",
"exportToPNG": "Preuzmi PNG",
"exportToCSV": "Preuzmi CSV",
"menu": "Izbornik",
"selection": "Odabir",
"selectionZoom": "Odabirno povećanje",
"zoomIn": "Uvećajte prikaz",
"zoomOut": "Umanjite prikaz",
"pan": "Pomicanje",
"reset": "Povratak na zadani prikaz"
}
}
}

View File

@ -0,0 +1,64 @@
{
"name": "hu",
"options": {
"months": [
"január",
"február",
"március",
"április",
"május",
"június",
"július",
"augusztus",
"szeptember",
"október",
"november",
"december"
],
"shortMonths": [
"jan",
"feb",
"mar",
"ápr",
"máj",
"jún",
"júl",
"aug",
"szept",
"okt",
"nov",
"dec"
],
"days": [
"hétfő",
"kedd",
"szerda",
"csütörtök",
"péntek",
"szombat",
"vasárnap"
],
"shortDays": [
"H",
"K",
"Sze",
"Cs",
"P",
"Szo",
"V"
],
"toolbar": {
"exportToSVG": "Exportálás SVG-be",
"exportToPNG": "Exportálás PNG-be",
"exportToCSV": "Exportálás CSV-be",
"menu": "Fő ajánlat",
"download": "SVG letöltése",
"selection": "Kiválasztás",
"selectionZoom": "Nagyító kiválasztása",
"zoomIn": "Nagyítás",
"zoomOut": "Kicsinyítés",
"pan": "Képcsúsztatás",
"reset": "Nagyító visszaállítása"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "hy",
"options": {
"months": [
"Հունվար",
"Փետրվար",
"Մարտ",
"Ապրիլ",
"Մայիս",
"Հունիս",
"Հուլիս",
"Օգոստոս",
"Սեպտեմբեր",
"Հոկտեմբեր",
"Նոյեմբեր",
"Դեկտեմբեր"
],
"shortMonths": [
"Հնվ",
"Փտվ",
"Մրտ",
"Ապր",
"Մյս",
"Հնս",
"Հլիս",
"Օգս",
"Սեպ",
"Հոկ",
"Նոյ",
"Դեկ"
],
"days": [
"Կիրակի",
"Երկուշաբթի",
"Երեքշաբթի",
"Չորեքշաբթի",
"Հինգշաբթի",
"Ուրբաթ",
"Շաբաթ"
],
"shortDays": ["Կիր", "Երկ", "Երք", "Չրք", "Հնգ", "Ուրբ", "Շբթ"],
"toolbar": {
"exportToSVG": "Բեռնել SVG",
"exportToPNG": "Բեռնել PNG",
"exportToCSV": "Բեռնել CSV",
"menu": "Մենյու",
"selection": "Ընտրված",
"selectionZoom": "Ընտրված հատվածի խոշորացում",
"zoomIn": "Խոշորացնել",
"zoomOut": "Մանրացնել",
"pan": "Տեղափոխում",
"reset": "Բերել սկզբնական վիճակի"
}
}
}

View File

@ -0,0 +1,47 @@
{
"name": "id",
"options": {
"months": [
"Januari",
"Februari",
"Maret",
"April",
"Mei",
"Juni",
"Juli",
"Agustus",
"September",
"Oktober",
"November",
"Desember"
],
"shortMonths": [
"Jan",
"Feb",
"Mar",
"Apr",
"Mei",
"Jun",
"Jul",
"Agu",
"Sep",
"Okt",
"Nov",
"Des"
],
"days": ["Minggu", "Senin", "Selasa", "Rabu", "kamis", "Jumat", "Sabtu"],
"shortDays": ["Min", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab"],
"toolbar": {
"exportToSVG": "Unduh SVG",
"exportToPNG": "Unduh PNG",
"exportToCSV": "Unduh CSV",
"menu": "Menu",
"selection": "Pilihan",
"selectionZoom": "Perbesar Pilihan",
"zoomIn": "Perbesar",
"zoomOut": "Perkecil",
"pan": "Geser",
"reset": "Atur Ulang Zoom"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "it",
"options": {
"months": [
"Gennaio",
"Febbraio",
"Marzo",
"Aprile",
"Maggio",
"Giugno",
"Luglio",
"Agosto",
"Settembre",
"Ottobre",
"Novembre",
"Dicembre"
],
"shortMonths": [
"Gen",
"Feb",
"Mar",
"Apr",
"Mag",
"Giu",
"Lug",
"Ago",
"Set",
"Ott",
"Nov",
"Dic"
],
"days": [
"Domenica",
"Lunedì",
"Martedì",
"Mercoledì",
"Giovedì",
"Venerdì",
"Sabato"
],
"shortDays": ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"],
"toolbar": {
"exportToSVG": "Scarica SVG",
"exportToPNG": "Scarica PNG",
"exportToCSV": "Scarica CSV",
"menu": "Menu",
"selection": "Selezione",
"selectionZoom": "Seleziona Zoom",
"zoomIn": "Zoom In",
"zoomOut": "Zoom Out",
"pan": "Sposta",
"reset": "Reimposta Zoom"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "ja",
"options": {
"months": [
"1月",
"2月",
"3月",
"4月",
"5月",
"6月",
"7月",
"8月",
"9月",
"10月",
"11月",
"12月"
],
"shortMonths": [
"1月",
"2月",
"3月",
"4月",
"5月",
"6月",
"7月",
"8月",
"9月",
"10月",
"11月",
"12月"
],
"days": [
"日曜日",
"月曜日",
"火曜日",
"水曜日",
"木曜日",
"金曜日",
"土曜日"
],
"shortDays": ["日", "月", "火", "水", "木", "金", "土"],
"toolbar": {
"exportToSVG": "SVGダウンロード",
"exportToPNG": "PNGダウンロード",
"exportToCSV": "CSVダウンロード",
"menu": "メニュー",
"selection": "選択",
"selectionZoom": "選択ズーム",
"zoomIn": "拡大",
"zoomOut": "縮小",
"pan": "パン",
"reset": "ズームリセット"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "ka",
"options": {
"months": [
"იანვარი",
"თებერვალი",
"მარტი",
"აპრილი",
"მაისი",
"ივნისი",
"ივლისი",
"აგვისტო",
"სექტემბერი",
"ოქტომბერი",
"ნოემბერი",
"დეკემბერი"
],
"shortMonths": [
"იან",
"თებ",
"მარ",
"აპრ",
"მაი",
"ივნ",
"ივლ",
"აგვ",
"სექ",
"ოქტ",
"ნოე",
"დეკ"
],
"days": [
"კვირა",
"ორშაბათი",
"სამშაბათი",
"ოთხშაბათი",
"ხუთშაბათი",
"პარასკევი",
"შაბათი"
],
"shortDays": ["კვი", "ორშ", "სამ", "ოთხ", "ხუთ", "პარ", "შაბ"],
"toolbar": {
"exportToSVG": "გადმოქაჩე SVG",
"exportToPNG": "გადმოქაჩე PNG",
"exportToCSV": "გადმოქაჩე CSV",
"menu": "მენიუ",
"selection": "არჩევა",
"selectionZoom": "არჩეულის გადიდება",
"zoomIn": "გადიდება",
"zoomOut": "დაპატარაება",
"pan": "გადაჩოჩება",
"reset": "გადიდების გაუქმება"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "ko",
"options": {
"months": [
"1월",
"2월",
"3월",
"4월",
"5월",
"6월",
"7월",
"8월",
"9월",
"10월",
"11월",
"12월"
],
"shortMonths": [
"1월",
"2월",
"3월",
"4월",
"5월",
"6월",
"7월",
"8월",
"9월",
"10월",
"11월",
"12월"
],
"days": [
"일요일",
"월요일",
"화요일",
"수요일",
"목요일",
"금요일",
"토요일"
],
"shortDays": ["일", "월", "화", "수", "목", "금", "토"],
"toolbar": {
"exportToSVG": "SVG 다운로드",
"exportToPNG": "PNG 다운로드",
"exportToCSV": "CSV 다운로드",
"menu": "메뉴",
"selection": "선택",
"selectionZoom": "선택영역 확대",
"zoomIn": "확대",
"zoomOut": "축소",
"pan": "패닝",
"reset": "원래대로"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "lt",
"options": {
"months": [
"Sausis",
"Vasaris",
"Kovas",
"Balandis",
"Gegužė",
"Birželis",
"Liepa",
"Rugpjūtis",
"Rugsėjis",
"Spalis",
"Lapkritis",
"Gruodis"
],
"shortMonths": [
"Sau",
"Vas",
"Kov",
"Bal",
"Geg",
"Bir",
"Lie",
"Rgp",
"Rgs",
"Spl",
"Lap",
"Grd"
],
"days": [
"Sekmadienis",
"Pirmadienis",
"Antradienis",
"Trečiadienis",
"Ketvirtadienis",
"Penktadienis",
"Šeštadienis"
],
"shortDays": ["Sk", "Per", "An", "Tr", "Kt", "Pn", "Št"],
"toolbar": {
"exportToSVG": "Atsisiųsti SVG",
"exportToPNG": "Atsisiųsti PNG",
"exportToCSV": "Atsisiųsti CSV",
"menu": "Menu",
"selection": "Pasirinkimas",
"selectionZoom": "Zoom: Pasirinkimas",
"zoomIn": "Zoom: Priartinti",
"zoomOut": "Zoom: Atitolinti",
"pan": "Perkėlimas",
"reset": "Atstatyti"
}
}
}

View File

@ -0,0 +1,64 @@
{
"name": "lv",
"options": {
"months": [
"janvāris",
"februāris",
"marts",
"aprīlis",
"maijs",
"jūnijs",
"jūlijs",
"augusts",
"septembris",
"oktobris",
"novembris",
"decembris"
],
"shortMonths": [
"janv",
"febr",
"marts",
"apr",
"maijs",
"jūn",
"jūl",
"aug",
"sept",
"okt",
"nov",
"dec"
],
"days": [
"svētdiena",
"pirmdiena",
"otrdiena",
"trešdiena",
"ceturtdiena",
"piektdiena",
"sestdiena"
],
"shortDays": [
"Sv",
"P",
"O",
"T",
"C",
"P",
"S"
],
"toolbar": {
"exportToSVG": "Lejuplādēt SVG",
"exportToPNG": "Lejuplādēt PNG",
"exportToCSV": "Lejuplādēt CSV",
"menu": "Izvēlne",
"selection": "Atlase",
"selectionZoom": "Pietuvināt atlasi",
"zoomIn": "Pietuvināt",
"zoomOut": "Attālināt",
"pan": "Pārvietoties diagrammā",
"reset": "Atiestatīt pietuvinājumu"
}
}
}

View File

@ -0,0 +1,63 @@
{
"name": "ms",
"options": {
"months": [
"Januari",
"Februari",
"Mac",
"April",
"Mei",
"Jun",
"Julai",
"Ogos",
"September",
"Oktober",
"November",
"Disember"
],
"shortMonths": [
"Jan",
"Feb",
"Mac",
"Apr",
"Mei",
"Jun",
"Jul",
"Ogos",
"Sep",
"Okt",
"Nov",
"Dis"
],
"days": [
"Ahad",
"Isnin",
"Selasa",
"Rabu",
"Khamis",
"Jumaat",
"Sabtu"
],
"shortDays": [
"Ahd",
"Isn",
"Sel",
"Rab",
"Kha",
"Jum",
"Sab"
],
"toolbar": {
"exportToSVG": "Muat turun SVG",
"exportToPNG": "Muat turun PNG",
"exportToCSV": "Muat turun CSV",
"menu": "Menu",
"selection": "Pilihan",
"selectionZoom": "Zum Pilihan",
"zoomIn": "Zoom Masuk",
"zoomOut": "Zoom Keluar",
"pan": "Pemusingan",
"reset": "Tetapkan Semula Zum"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "nb",
"options": {
"months": [
"Januar",
"Februar",
"Mars",
"April",
"Mai",
"Juni",
"Juli",
"August",
"September",
"Oktober",
"November",
"Desember"
],
"shortMonths": [
"Jan",
"Feb",
"Mar",
"Apr",
"Mai",
"Jun",
"Jul",
"Aug",
"Sep",
"Okt",
"Nov",
"Des"
],
"days": [
"Søndag",
"Mandag",
"Tirsdag",
"Onsdag",
"Torsdag",
"Fredag",
"Lørdag"
],
"shortDays": ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø"],
"toolbar": {
"exportToSVG": "Last ned SVG",
"exportToPNG": "Last ned PNG",
"exportToCSV": "Last ned CSV",
"menu": "Menu",
"selection": "Velg",
"selectionZoom": "Zoom: Velg",
"zoomIn": "Zoome inn",
"zoomOut": "Zoome ut",
"pan": "Skyving",
"reset": "Start på nytt"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "nl",
"options": {
"months": [
"Januari",
"Februari",
"Maart",
"April",
"Mei",
"Juni",
"Juli",
"Augustus",
"September",
"Oktober",
"November",
"December"
],
"shortMonths": [
"Jan",
"Feb",
"Mrt",
"Apr",
"Mei",
"Jun",
"Jul",
"Aug",
"Sep",
"Okt",
"Nov",
"Dec"
],
"days": [
"Zondag",
"Maandag",
"Dinsdag",
"Woensdag",
"Donderdag",
"Vrijdag",
"Zaterdag"
],
"shortDays": ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za"],
"toolbar": {
"exportToSVG": "Download SVG",
"exportToPNG": "Download PNG",
"exportToCSV": "Download CSV",
"menu": "Menu",
"selection": "Selectie",
"selectionZoom": "Zoom selectie",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out",
"pan": "Verplaatsen",
"reset": "Standaardwaarden"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "pl",
"options": {
"months": [
"Styczeń",
"Luty",
"Marzec",
"Kwiecień",
"Maj",
"Czerwiec",
"Lipiec",
"Sierpień",
"Wrzesień",
"Październik",
"Listopad",
"Grudzień"
],
"shortMonths": [
"Sty",
"Lut",
"Mar",
"Kwi",
"Maj",
"Cze",
"Lip",
"Sie",
"Wrz",
"Paź",
"Lis",
"Gru"
],
"days": [
"Niedziela",
"Poniedziałek",
"Wtorek",
"Środa",
"Czwartek",
"Piątek",
"Sobota"
],
"shortDays": ["Nd", "Pn", "Wt", "Śr", "Cz", "Pt", "Sb"],
"toolbar": {
"exportToSVG": "Pobierz SVG",
"exportToPNG": "Pobierz PNG",
"exportToCSV": "Pobierz CSV",
"menu": "Menu",
"selection": "Wybieranie",
"selectionZoom": "Zoom: Wybieranie",
"zoomIn": "Zoom: Przybliż",
"zoomOut": "Zoom: Oddal",
"pan": "Przesuwanie",
"reset": "Resetuj"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "pt-br",
"options": {
"months": [
"Janeiro",
"Fevereiro",
"Março",
"Abril",
"Maio",
"Junho",
"Julho",
"Agosto",
"Setembro",
"Outubro",
"Novembro",
"Dezembro"
],
"shortMonths": [
"Jan",
"Fev",
"Mar",
"Abr",
"Mai",
"Jun",
"Jul",
"Ago",
"Set",
"Out",
"Nov",
"Dez"
],
"days": [
"Domingo",
"Segunda",
"Terça",
"Quarta",
"Quinta",
"Sexta",
"Sábado"
],
"shortDays": ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab"],
"toolbar": {
"exportToSVG": "Baixar SVG",
"exportToPNG": "Baixar PNG",
"exportToCSV": "Baixar CSV",
"menu": "Menu",
"selection": "Selecionar",
"selectionZoom": "Selecionar Zoom",
"zoomIn": "Aumentar",
"zoomOut": "Diminuir",
"pan": "Navegação",
"reset": "Reiniciar Zoom"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "pt",
"options": {
"months": [
"Janeiro",
"Fevereiro",
"Março",
"Abril",
"Maio",
"Junho",
"Julho",
"Agosto",
"Setembro",
"Outubro",
"Novembro",
"Dezembro"
],
"shortMonths": [
"Jan",
"Fev",
"Mar",
"Abr",
"Mai",
"Jun",
"Jul",
"Ag",
"Set",
"Out",
"Nov",
"Dez"
],
"days": [
"Domingo",
"Segunda-feira",
"Terça-feira",
"Quarta-feira",
"Quinta-feira",
"Sexta-feira",
"Sábado"
],
"shortDays": ["Do", "Se", "Te", "Qa", "Qi", "Sx", "Sa"],
"toolbar": {
"exportToSVG": "Transferir SVG",
"exportToPNG": "Transferir PNG",
"exportToCSV": "Transferir CSV",
"menu": "Menu",
"selection": "Selecionar",
"selectionZoom": "Zoom: Selecionar",
"zoomIn": "Zoom: Aumentar",
"zoomOut": "Zoom: Diminuir",
"pan": "Deslocamento",
"reset": "Redefinir"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "rs",
"options": {
"months": [
"Januar",
"Februar",
"Mart",
"April",
"Maj",
"Jun",
"Jul",
"Avgust",
"Septembar",
"Oktobar",
"Novembar",
"Decembar"
],
"shortMonths": [
"Jan",
"Feb",
"Mar",
"Apr",
"Maj",
"Jun",
"Jul",
"Avg",
"Sep",
"Okt",
"Nov",
"Dec"
],
"days": [
"Nedelja",
"Ponedeljak",
"Utorak",
"Sreda",
"Četvrtak",
"Petak",
"Subota"
],
"shortDays": ["Ned", "Pon", "Uto", "Sre", "Čet", "Pet", "Sub"],
"toolbar": {
"exportToSVG": "Preuzmi SVG",
"exportToPNG": "Preuzmi PNG",
"exportToCSV": "Preuzmi CSV",
"menu": "Meni",
"selection": "Odabir",
"selectionZoom": "Odabirno povećanje",
"zoomIn": "Uvećajte prikaz",
"zoomOut": "Umanjite prikaz",
"pan": "Pomeranje",
"reset": "Resetuj prikaz"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "ru",
"options": {
"months": [
"Январь",
"Февраль",
"Март",
"Апрель",
"Май",
"Июнь",
"Июль",
"Август",
"Сентябрь",
"Октябрь",
"Ноябрь",
"Декабрь"
],
"shortMonths": [
"Янв",
"Фев",
"Мар",
"Апр",
"Май",
"Июн",
"Июл",
"Авг",
"Сен",
"Окт",
"Ноя",
"Дек"
],
"days": [
"Воскресенье",
"Понедельник",
"Вторник",
"Среда",
"Четверг",
"Пятница",
"Суббота"
],
"shortDays": ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"],
"toolbar": {
"exportToSVG": "Сохранить SVG",
"exportToPNG": "Сохранить PNG",
"exportToCSV": "Сохранить CSV",
"menu": "Меню",
"selection": "Выбор",
"selectionZoom": "Выбор с увеличением",
"zoomIn": "Увеличить",
"zoomOut": "Уменьшить",
"pan": "Перемещение",
"reset": "Сбросить увеличение"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "se",
"options": {
"months": [
"Januari",
"Februari",
"Mars",
"April",
"Maj",
"Juni",
"Juli",
"Augusti",
"September",
"Oktober",
"November",
"December"
],
"shortMonths": [
"Jan",
"Feb",
"Mar",
"Apr",
"Maj",
"Juni",
"Juli",
"Aug",
"Sep",
"Okt",
"Nov",
"Dec"
],
"days": [
"Söndag",
"Måndag",
"Tisdag",
"Onsdag",
"Torsdag",
"Fredag",
"Lördag"
],
"shortDays": ["Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör"],
"toolbar": {
"exportToSVG": "Ladda SVG",
"exportToPNG": "Ladda PNG",
"exportToCSV": "Ladda CSV",
"menu": "Meny",
"selection": "Selektion",
"selectionZoom": "Val av zoom",
"zoomIn": "Zooma in",
"zoomOut": "Zooma ut",
"pan": "Panorering",
"reset": "Återställ zoomning"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "sk",
"options": {
"months": [
"Január",
"Február",
"Marec",
"Apríl",
"Máj",
"Jún",
"Júl",
"August",
"September",
"Október",
"November",
"December"
],
"shortMonths": [
"Jan",
"Feb",
"Mar",
"Apr",
"Máj",
"Jún",
"Júl",
"Aug",
"Sep",
"Okt",
"Nov",
"Dec"
],
"days": [
"Nedeľa",
"Pondelok",
"Utorok",
"Streda",
"Štvrtok",
"Piatok",
"Sobota"
],
"shortDays": ["Ne", "Po", "Ut", "St", "Št", "Pi", "So"],
"toolbar": {
"exportToSVG": "Stiahnuť SVG",
"exportToPNG": "Stiahnuť PNG",
"exportToCSV": "Stiahnuť CSV",
"menu": "Menu",
"selection": "Vyberanie",
"selectionZoom": "Zoom: Vyberanie",
"zoomIn": "Zoom: Priblížiť",
"zoomOut": "Zoom: Vzdialiť",
"pan": "Presúvanie",
"reset": "Resetovať"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "sl",
"options": {
"months": [
"Januar",
"Februar",
"Marec",
"April",
"Maj",
"Junij",
"Julij",
"Avgust",
"Septemer",
"Oktober",
"November",
"December"
],
"shortMonths": [
"Jan",
"Feb",
"Mar",
"Apr",
"Maj",
"Jun",
"Jul",
"Avg",
"Sep",
"Okt",
"Nov",
"Dec"
],
"days": [
"Nedelja",
"Ponedeljek",
"Torek",
"Sreda",
"Četrtek",
"Petek",
"Sobota"
],
"shortDays": ["Ne", "Po", "To", "Sr", "Če", "Pe", "So"],
"toolbar": {
"exportToSVG": "Prenesi SVG",
"exportToPNG": "Prenesi PNG",
"exportToCSV": "Prenesi CSV",
"menu": "Menu",
"selection": "Izbiranje",
"selectionZoom": "Zoom: Izbira",
"zoomIn": "Zoom: Približaj",
"zoomOut": "Zoom: Oddalji",
"pan": "Pomikanje",
"reset": "Resetiraj"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "sq",
"options": {
"months": [
"Janar",
"Shkurt",
"Mars",
"Prill",
"Maj",
"Qershor",
"Korrik",
"Gusht",
"Shtator",
"Tetor",
"Nëntor",
"Dhjetor"
],
"shortMonths": [
"Jan",
"Shk",
"Mar",
"Pr",
"Maj",
"Qer",
"Korr",
"Gush",
"Sht",
"Tet",
"Nën",
"Dhj"
],
"days": [
"e Dielë",
"e Hënë",
"e Martë",
"e Mërkurë",
"e Enjte",
"e Premte",
"e Shtunë"
],
"shortDays": ["Die", "Hën", "Mar", "Mër", "Enj", "Pre", "Sht"],
"toolbar": {
"exportToSVG": "Shkarko SVG",
"exportToPNG": "Shkarko PNG",
"exportToCSV": "Shkarko CSV",
"menu": "Menu",
"selection": "Seleksiono",
"selectionZoom": "Seleksiono Zmadhim",
"zoomIn": "Zmadho",
"zoomOut": "Zvogëlo",
"pan": "Spostoje",
"reset": "Rikthe dimensionin"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "th",
"options": {
"months": [
"มกราคม",
"กุมภาพันธ์",
"มีนาคม",
"เมษายน",
"พฤษภาคม",
"มิถุนายน",
"กรกฎาคม",
"สิงหาคม",
"กันยายน",
"ตุลาคม",
"พฤศจิกายน",
"ธันวาคม"
],
"shortMonths": [
"ม.ค.",
"ก.พ.",
"มี.ค.",
"เม.ย.",
"พ.ค.",
"มิ.ย.",
"ก.ค.",
"ส.ค.",
"ก.ย.",
"ต.ค.",
"พ.ย.",
"ธ.ค."
],
"days": [
"อาทิตย์",
"จันทร์",
"อังคาร",
"พุธ",
"พฤหัสบดี",
"ศุกร์",
"เสาร์"
],
"shortDays": ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส"],
"toolbar": {
"exportToSVG": "ดาวน์โหลด SVG",
"exportToPNG": "ดาวน์โหลด PNG",
"exportToCSV": "ดาวน์โหลด CSV",
"menu": "เมนู",
"selection": "เลือก",
"selectionZoom": "เลือกจุดที่จะซูม",
"zoomIn": "ซูมเข้า",
"zoomOut": "ซูมออก",
"pan": "ปรากฎว่า",
"reset": "รีเซ็ตการซูม"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "tr",
"options": {
"months": [
"Ocak",
"Şubat",
"Mart",
"Nisan",
"Mayıs",
"Haziran",
"Temmuz",
"Ağustos",
"Eylül",
"Ekim",
"Kasım",
"Aralık"
],
"shortMonths": [
"Oca",
"Şub",
"Mar",
"Nis",
"May",
"Haz",
"Tem",
"Ağu",
"Eyl",
"Eki",
"Kas",
"Ara"
],
"days": [
"Pazar",
"Pazartesi",
"Salı",
"Çarşamba",
"Perşembe",
"Cuma",
"Cumartesi"
],
"shortDays": ["Paz", "Pzt", "Sal", "Çar", "Per", "Cum", "Cmt"],
"toolbar": {
"exportToSVG": "SVG İndir",
"exportToPNG": "PNG İndir",
"exportToCSV": "CSV İndir",
"menu": "Menü",
"selection": "Seçim",
"selectionZoom": "Seçim Yakınlaştır",
"zoomIn": "Yakınlaştır",
"zoomOut": "Uzaklaştır",
"pan": "Kaydır",
"reset": "Yakınlaştırmayı Sıfırla"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "ua",
"options": {
"months": [
"Січень",
"Лютий",
"Березень",
"Квітень",
"Травень",
"Червень",
"Липень",
"Серпень",
"Вересень",
"Жовтень",
"Листопад",
"Грудень"
],
"shortMonths": [
"Січ",
"Лют",
"Бер",
"Кві",
"Тра",
"Чер",
"Лип",
"Сер",
"Вер",
"Жов",
"Лис",
"Гру"
],
"days": [
"Неділя",
"Понеділок",
"Вівторок",
"Середа",
"Четвер",
"П'ятниця",
"Субота"
],
"shortDays": ["Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"],
"toolbar": {
"exportToSVG": "Зберегти SVG",
"exportToPNG": "Зберегти PNG",
"exportToCSV": "Зберегти CSV",
"menu": "Меню",
"selection": "Вибір",
"selectionZoom": "Вибір із збільшенням",
"zoomIn": "Збільшити",
"zoomOut": "Зменшити",
"pan": "Переміщення",
"reset": "Скинути збільшення"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "zh-cn",
"options": {
"months": [
"一月",
"二月",
"三月",
"四月",
"五月",
"六月",
"七月",
"八月",
"九月",
"十月",
"十一月",
"十二月"
],
"shortMonths": [
"一月",
"二月",
"三月",
"四月",
"五月",
"六月",
"七月",
"八月",
"九月",
"十月",
"十一月",
"十二月"
],
"days": [
"星期天",
"星期一",
"星期二",
"星期三",
"星期四",
"星期五",
"星期六"
],
"shortDays": ["周日", "周一", "周二", "周三", "周四", "周五", "周六"],
"toolbar": {
"exportToSVG": "下载 SVG",
"exportToPNG": "下载 PNG",
"exportToCSV": "下载 CSV",
"menu": "菜单",
"selection": "选择",
"selectionZoom": "选择缩放",
"zoomIn": "放大",
"zoomOut": "缩小",
"pan": "平移",
"reset": "重置缩放"
}
}
}

View File

@ -0,0 +1,55 @@
{
"name": "zh-tw",
"options": {
"months": [
"一月",
"二月",
"三月",
"四月",
"五月",
"六月",
"七月",
"八月",
"九月",
"十月",
"十一月",
"十二月"
],
"shortMonths": [
"一月",
"二月",
"三月",
"四月",
"五月",
"六月",
"七月",
"八月",
"九月",
"十月",
"十一月",
"十二月"
],
"days": [
"星期日",
"星期一",
"星期二",
"星期三",
"星期四",
"星期五",
"星期六"
],
"shortDays": ["週日", "週一", "週二", "週三", "週四", "週五", "週六"],
"toolbar": {
"exportToSVG": "下載 SVG",
"exportToPNG": "下載 PNG",
"exportToCSV": "下載 CSV",
"menu": "選單",
"selection": "選擇",
"selectionZoom": "選擇縮放",
"zoomIn": "放大",
"zoomOut": "縮小",
"pan": "平移",
"reset": "重置縮放"
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More