Stabilize legacy Steven API endpoints and add OpenAPI spec

This commit is contained in:
Power BI Dev
2026-05-07 14:50:31 +07:00
parent f1c1f42a4c
commit e7b07a3cfd
17 changed files with 2755 additions and 0 deletions

View File

@@ -0,0 +1,220 @@
<?php
header("Content-Type: application/json");
include '../conf/class.server.php';
include '../conf/koneksiPDO.php';
include '../conf/function.php';
$conn = new createCon();
$dbh = $conn->connect();
requireRobotSecret();
$jsonData = getRequestJson();
if (!isset($jsonData['id'], $jsonData['peng1'], $jsonData['peng2'])) {
jsonResponse([
'status' => 0,
'msg' => 'Parameter tidak lengkap',
], 422);
}
$id = $jsonData['id'];
$peng1 = $jsonData['peng1'];
$peng2 = $jsonData['peng2'];
if(empty($peng1) || empty($peng2)){
echo json_encode([
'status' => 0,
'msg' => "Penguji Tidak Boleh Kosong",
]);
exit;
}
/**
$jsonInput = json_encode($jsonData);
$sql = "INSERT INTO tescurldaridoxid(data) VALUES (:data)";
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':data', $jsonInput);
$stmt->execute();
*/
$sql = "UPDATE tbrekaphasil SET peng1 = :peng1, peng2 = :peng2 WHERE id = :id";
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':peng1', $peng1);
$stmt->bindParam(':peng2', $peng2);
$stmt->bindParam(':id', $id);
$stmt->execute();
$error = $stmt->errorInfo();
$isError = true;
if ($error[0] == '00000') {
$isError = false;
}
if ($isError) {
echo json_encode(
[
'status' => 0,
'msg' => 'Terjadi kesalahan teknis!!!',
]
);
} else {
$listNomorWA = [];
$sql = "SELECT * FROM tbdosen";
$stmt = $dbh->prepare($sql);
$stmt->execute();
$listDosen = [];
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$listDosen[$row['nip']] = $row;
}
$sql = "SELECT tbrekaphasil.*, tbmhs.nmLengkap, tbmhs.noHP FROM tbrekaphasil LEFT JOIN tbmhs ON tbrekaphasil.nim = tbmhs.nim WHERE tbrekaphasil.id = :id";
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':id', $id);
$stmt->execute();
if($stmt->rowCount() == 0){
echo json_encode([
'status' => 0,
'msg' => "Data Skripsi Tidak Ditemukan",
]);
exit;
}
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$todayDate = date('d-m-Y');
$tanggalPenunjukanPenguji = $row['timestampPenunjukanPenguji'];
$semesterPenunjukanPenguji = $row['semesterPenunjukanPenguji'];
if(empty($tanggalPenunjukanPenguji)){
$tanggalPenunjukanPenguji = date('Y-m-d');
$bulanKeputusan = date('m', strtotime($tanggalPenunjukanPenguji));
$tahunKeputusan = date('Y', strtotime($tanggalPenunjukanPenguji));
if ($bulanKeputusan >= 2 && $bulanKeputusan <= 7) {
$tahunKeputusan = $tahunKeputusan - 1;
$semesterKeputusan = 'GEN';
} else {
$semesterKeputusan = 'GAS';
$tahunKeputusan = $tahunKeputusan;
}
$semesterPenunjukanPenguji = $semesterKeputusan.'-'.$tahunKeputusan;
$sql = "UPDATE tbrekaphasil SET timestampPenunjukanPenguji = :tanggal, semesterPenunjukanPenguji = :semester WHERE id = :id";
$stmt1 = $dbh->prepare($sql);
$stmt1->bindParam(':tanggal', $tanggalPenunjukanPenguji);
$stmt1->bindParam(':semester', $semesterPenunjukanPenguji);
$stmt1->bindParam(':id', $id);
$stmt1->execute();
}
$waktuPenguji = date('Y-m-d');
$hari = date('w');
$hariText = '';
switch ($hari) {
case '0': $hariText = 'Minggu'; break;
case '1': $hariText = 'Senin'; break;
case '2': $hariText = 'Selasa'; break;
case '3': $hariText = 'Rabu'; break;
case '4': $hariText = 'Kamis'; break;
case '5': $hariText = 'Jumat'; break;
case '6': $hariText = 'Sabtu'; break;
}
$idPraoutline = $row['idpraoutline'];
$judul = $row['judul_final'];
$noHPMahasiswa = $row['noHP'];
$namaMahasiswa = strtoupper($row['nmLengkap']);
$nimMahasiswa = strtoupper($row['nim']);
//kirimkan ke no bu tuning
array_push($listNomorWA, "082350250892");
if(!empty($noHPMahasiswa)){
array_push($listNomorWA, $noHPMahasiswa);
}
$nipPemb1 = $row['pemb1'];
$nipPemb2 = $row['pemb2'];
$nipPeng1 = $row['peng1'];
$nipPeng2 = $row['peng2'];
$namaPemb1 = '';
$namaPemb2 = '';
$namaPeng1 = '';
$namaPeng2 = '';
$noPemb1 = '';
$noPemb2 = '';
$noPeng1 = '';
$noPeng2 = '';
if(!empty($nipPemb1) && isset($listDosen[$nipPemb1])){
$namaPemb1 = $listDosen[$nipPemb1]['nmLengkap'];
if(!empty($listDosen[$nipPemb1]['nohp'])){
$noPemb1 = $listDosen[$nipPemb1]['nohp'];
array_push($listNomorWA, $listDosen[$nipPemb1]['nohp']);
}
}
if(!empty($nipPemb2) && isset($listDosen[$nipPemb2])){
$namaPemb2 = $listDosen[$nipPemb2]['nmLengkap'];
if(!empty($listDosen[$nipPemb2]['nohp'])){
$noPemb2 = $listDosen[$nipPemb2]['nohp'];
array_push($listNomorWA, $listDosen[$nipPemb2]['nohp']);
}
}
if(!empty($nipPeng1) && isset($listDosen[$nipPeng1])){
$namaPeng1 = $listDosen[$nipPeng1]['nmLengkap'];
if(!empty($listDosen[$nipPeng1]['nohp'])){
$noPeng1 = $listDosen[$nipPeng1]['nohp'];
array_push($listNomorWA, $listDosen[$nipPeng1]['nohp']);
}
}
if(!empty($nipPeng2) && isset($listDosen[$nipPeng2])){
$namaPeng2 = $listDosen[$nipPeng2]['nmLengkap'];
if(!empty($listDosen[$nipPeng2]['nohp'])){
$noPeng2 = $listDosen[$nipPeng2]['nohp'];
array_push($listNomorWA, $listDosen[$nipPeng2]['nohp']);
}
}
$isiNotif = "*KEPUTUSAN PENUNJUKKAN PENGUJI (SPOTA)*\n\nDosen penguji untuk skripsi mahasiswa *$namaMahasiswa / $nimMahasiswa* ($noHPMahasiswa) dengan judul *$judul* pada *$hariText, $todayDate* untuk pelaksanaan Seminar Hasil (Sidang Tertutup) dengan susunan Tim Penguji sebagai berikut:\n\nPembimbing 1 (Ketua): *$namaPemb1* ($noPemb1)\nPembimbing 2 (Sekretaris) : *$namaPemb2* ($noPemb2)\nPenguji 1 : *$namaPeng1* ($noPeng1)\nPenguji 2 : *$namaPeng2* ($noPeng2)\n\n*SPOTA INFORMATIKA UNTAN*\nKlik Disini :\nhttps://spota.untan.ac.id/dosen/dashboard.php?page=praoutline&menu=review&prid=$idPraoutline";
}
$listNomorWA = array_values(array_unique($listNomorWA));
foreach($listNomorWA as $key => $val){
if (empty($val)) {
continue;
}
$nomorWA = '62'.intval($val);
$sql = "INSERT INTO tbl_notif_wa(toX,isiPesan, status) VALUES (:toX, :isiPesan, '0')";
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':toX', $nomorWA);
$stmt->bindParam(':isiPesan', $isiNotif);
$stmt->execute();
}
echo json_encode(
[
'status' => 1,
'msg' => 'Berhasil mengupdate data penguji untuk data ini!!!',
]
);
}

View File

@@ -0,0 +1,137 @@
<?php
session_start();
include '../conf/koneksiPDO.php';
include '../conf/function.php';
$conn = new createCon();
$dbh = $conn->connect();
header('Content-Type: application/json');
if (!isset($_GET['bypassSaya'])) {
$loginMhs = requireSessionRole('mhs');
$nim = $loginMhs['nim'];
} else {
$loginDosen = isset($_SESSION['login-dosen']) ? $_SESSION['login-dosen'] : null;
$loginAdmin = isset($_SESSION['login-admin']) ? $_SESSION['login-admin'] : null;
if (!is_array($loginDosen) && !is_array($loginAdmin)) {
jsonResponse(['status' => 403, 'msg' => 'Forbidden'], 403);
}
}
$idRekapHasil = isset($_GET['idRekapHasil']) ? (int) $_GET['idRekapHasil'] : 0;
$jenis = isset($_GET['jenis']) ? trim((string) $_GET['jenis']) : '';
if ($idRekapHasil <= 0 || $jenis === '') {
jsonResponse(['status' => 0, 'msg' => 'Parameter tidak lengkap'], 422);
}
$sql = 'SELECT * FROM tbrekaphasil WHERE id = :idRekapHasil';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':idRekapHasil', $idRekapHasil);
$stmt->execute();
$rekap = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$rekap) {
jsonResponse(['status' => 0, 'msg' => 'Data Not Found'], 404);
}
if (!isset($_GET['bypassSaya'])) {
if ($rekap['nim'] !== $nim) {
jsonResponse(['status' => 403, 'msg' => 'Forbidden'], 403);
}
} elseif (!is_array($loginAdmin)) {
$dosenNip = isset($loginDosen['nip']) ? (string) $loginDosen['nip'] : '';
$allowedNips = [
(string) $rekap['pemb1'],
(string) $rekap['pemb2'],
(string) $rekap['peng1'],
(string) $rekap['peng2'],
];
if ($dosenNip === '' || !in_array($dosenNip, $allowedNips, true)) {
jsonResponse(['status' => 403, 'msg' => 'Forbidden'], 403);
}
}
$sql = 'SELECT * FROM tb_verif_berkas WHERE idRekapHasil = :idRekapHasil AND jenisSidang = :jenisSidang';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':idRekapHasil', $idRekapHasil);
$stmt->bindParam(':jenisSidang', $jenis);
$stmt->execute();
$catatanAdmin = '';
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$catatanAdmin = $row['catatanDariAdmin'];
}
$sql = 'SELECT * FROM tb_berkas_sidang WHERE idRekapHasil = :idRekapHasil AND jenisSidang = :jenisSidang';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':idRekapHasil', $idRekapHasil);
$stmt->bindParam(':jenisSidang', $jenis);
$stmt->execute();
$listBerkas = [];
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$namaBerkas = $row['nama'];
$idBerkas = $row['idBerkas'];
$driveId = $row['driveId'];
$status = $row['status'];
if ($driveId != null && $driveId != '') {
$driveId = 'https://drive.google.com/open?id='.$driveId;
}
array_push($listBerkas, [
'id' => $idBerkas,
'nama' => $namaBerkas,
'file' => $driveId,
'status' => $status,
]);
}
$berkasSidang = [];
switch ($jenis) {
case 'Sidang':
$berkasSidang = [
'ktm' => ['judul' => 'Kartu Tanda Mahasiswa (KTM) terakhir', 'data' => null],
'spp' => ['judul' => 'Tanda Bukti Pembayaran SPP terakhir', 'data' => null],
'foto' => ['judul' => 'Pas Photo ukuran 3x4 = 3 lembar (Warna Latar Belakang Biru)', 'data' => null],
'lirs' => ['judul' => 'Lembaran Isian Rencana Studi (LIRS) terakhir', 'data' => null],
'transkrip' => ['judul' => 'Rekapitulasi Nilai Terakhir (Transkrip)', 'data' => null],
'buktiAbsen' => ['judul' => 'Bukti Absen Seminar Outline Skripsi', 'data' => null],
'beritaAcaraSeminarOutline' => ['judul' => 'Berita Acara Seminar Outline Skripsi', 'data' => null],
'suratRekomendasiSidang' => ['judul' => 'Surat Rekomendasi Pelaksanaan Sidang Akhir Skripsi Secara Daring dari Jurusan/Program Studi', 'data' => null],
'bebasReferensiTeknik' => ['judul' => 'Bebas Referensi Fakultas Teknik', 'data' => null],
'bebasReferensiUntan' => ['judul' => 'Bebas Referensi UNTAN', 'data' => null],
'bebasReferensiPerpusDaerah' => ['judul' => 'Bebas Referensi Perpustakaan Daerah', 'data' => null],
'TI08' => ['judul' => 'Siap Sidang TI. 08', 'data' => null],
'buktiUploadJurnal' => ['judul' => 'Bukti Upload Jurnal ( Teknik Informatika)', 'data' => null],
'ifTA07' => ['judul' => 'Format IF-TA-07', 'data' => null],
'b4' => ['judul' => 'Kartu Konsultasi Skripsi (B4)', 'data' => null],
'b1' => ['judul' => 'Format B.1', 'data' => null],
'b5' => ['judul' => 'Format B.5', 'data' => null],
'suratWisuda' => ['judul' => 'Surat Pernyataan Wisuda', 'data' => null],
'biodataSarjana' => ['judul' => 'Biodata Sarjana Baru', 'data' => null],
'ijazahSMA' => ['judul' => 'Ijazah SMA', 'data' => null],
'toefl' => ['judul' => 'Sertifikat TOEFL (nilai min. 425)', 'data' => null],
'kartuKeluarga' => ['judul' => 'Kartu Keluarga', 'data' => null],
'ktp' => ['judul' => 'KTP', 'data' => null],
'skripsi' => ['judul' => 'Skripsi/Tugas Akhir', 'data' => null],
];
break;
default: echo json_encode(['status' => 0, 'msg' => 'Jenis tidak dikenali']); exit;
}
foreach ($berkasSidang as $key => $val) {
foreach ($listBerkas as $key2 => $val2) {
if ($key == $val2['nama']) {
$berkasSidang[$key]['data'] = $val2;
}
}
}
echo json_encode(utf8ize(['status' => 1, 'data' => $berkasSidang, 'catatanAdmin' => $catatanAdmin]));

View File

@@ -0,0 +1,105 @@
<?php
error_reporting(E_ALL);
ini_set('display_errors', '0');
include '../conf/class.server.php';
include '../conf/koneksiPDO.php';
include '../conf/function.php';
header('Content-Type: application/json');
$conn = new createCon();
$dbh = $conn->connect();
requireRobotSecret();
$id = isset($_GET['id']) ? (int) $_GET['id'] : 0;
if ($id <= 0) {
jsonResponse([
'status' => 0,
'msg' => 'Parameter id tidak valid',
], 422);
}
$listTahunMasukMahasiswa = [];
$sql = "SELECT * FROM tbmhs";
$stmt = $dbh->prepare($sql);
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$nimDb = $row['nim'];
$thnMasukDb = $row['thnmasuk'];
$listTahunMasukMahasiswa[$nimDb] = intval($thnMasukDb);
}
//$sql = "SELECT tbpraoutline.*, tbrekaphasil.judul_final, tbrekaphasil.pemb1, tbrekaphasil.pemb2, tbrekaphasil.peng1, tbrekaphasil.peng2, tbrekaphasil.kep_akhir, tbrekaphasil.tgl_kep, tbrekaphasil.wkt_kep FROM tbpraoutline LEFT JOIN tbrekaphasil ON tbpraoutline.id = tbrekaphasil.idpraoutline";
$sql = "SELECT tbrekaphasil.*, tbpraoutline.kelompokKeahlian FROM tbrekaphasil LEFT JOIN tbpraoutline ON tbrekaphasil.idpraoutline = tbpraoutline.id WHERE tbrekaphasil.id = :id";
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':id', $id);
$stmt->execute();
if($stmt->rowCount() == 0){
jsonResponse([
'status' => 0,
'msg' => 'Data Not Found',
], 404);
}
$data = null;
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$id = $row['id'];
$nim = $row['nim'];
$judul = $row['judul_final'];
$pemb1 = $row['pemb1'];
$pemb2 = $row['pemb2'];
$peng1 = $row['peng1'];
$peng2 = $row['peng2'];
$semester = $row['semester'];
$tahun = $row['tahun_ajaran'];
$tanggalKep = $row['tgl_kep'];
$waktuKep = $row['wkt_kep'];
$kepAkhir = $row['kep_akhir'];
$kelompokKeahlian = $row['kelompokKeahlian'];
$jadwal = [];
if(!isset($listTahunMasukMahasiswa[$nim])){
continue;
}else{
if($listTahunMasukMahasiswa[$nim] < 2014){
continue;
}
}
$sql = "SELECT * FROM tbjadwal LEFT JOIN tbmhs ON tbjadwal.idMhs = tbmhs.idmhs WHERE nim = :nim AND publish = 'Y' ORDER BY start";
$stmt1 = $dbh->prepare($sql);
$stmt1->bindParam(':nim', $nim);
$stmt1->execute();
while($row1 = $stmt1->fetch(PDO::FETCH_ASSOC)){
array_push($jadwal,[
'jenis' => $row1['jenis'],
'waktu' => $row1['start'],
'ruangan' => $row1['ruangan'],
]);
}
$data = array(
'id' => $id,
'judul' => $judul,
'nim' => $nim,
'pemb1' => $pemb1,
'pemb2' => $pemb2,
'peng1' => $peng1,
'peng2' => $peng2,
'semester' => $semester,
'tahun' => $tahun,
'tanggalKeputusan' => $tanggalKep,
'waktuKeputusan' => $waktuKep,
'kelompokKeahlian' => $kelompokKeahlian,
'jadwal' => $jadwal,
'kepAkhir' => $kepAkhir,
);
}
echo json_encode(utf8ize(['status' => 1, 'data' => $data]));

View File

@@ -0,0 +1,90 @@
<?php
error_reporting(E_ALL);
ini_set('display_errors', '0');
include '../conf/class.server.php';
include '../conf/koneksiPDO.php';
include '../conf/function.php';
header('Content-Type: application/json');
$server = new Server();
$conn = new createCon();
$dbh = $conn->connect();
requireRobotSecret();
$listTahunMasukMahasiswa = [];
$sql = "SELECT * FROM tbmhs";
$stmt = $dbh->prepare($sql);
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$nimDb = $row['nim'];
$thnMasukDb = $row['thnmasuk'];
$listTahunMasukMahasiswa[$nimDb] = intval($thnMasukDb);
}
//$sql = "SELECT tbpraoutline.*, tbrekaphasil.judul_final, tbrekaphasil.pemb1, tbrekaphasil.pemb2, tbrekaphasil.peng1, tbrekaphasil.peng2, tbrekaphasil.kep_akhir, tbrekaphasil.tgl_kep, tbrekaphasil.wkt_kep FROM tbpraoutline LEFT JOIN tbrekaphasil ON tbpraoutline.id = tbrekaphasil.idpraoutline";
$sql = "SELECT tbrekaphasil.*, tbpraoutline.kelompokKeahlian FROM tbrekaphasil LEFT JOIN tbpraoutline ON tbrekaphasil.idpraoutline = tbpraoutline.id WHERE kep_akhir = '1'";
$stmt = $dbh->prepare($sql);
$stmt->execute();
$data = array();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$id = $row['id'];
$nim = $row['nim'];
$judul = $row['judul_final'];
$pemb1 = $row['pemb1'];
$pemb2 = $row['pemb2'];
$peng1 = $row['peng1'];
$peng2 = $row['peng2'];
$semester = $row['semester'];
$tahun = $row['tahun_ajaran'];
$tanggalKep = $row['tgl_kep'];
$waktuKep = $row['wkt_kep'];
$kelompokKeahlian = $row['kelompokKeahlian'];
$jadwal = [];
if(!isset($listTahunMasukMahasiswa[$nim])){
continue;
}else{
if($listTahunMasukMahasiswa[$nim] < 2014){
continue;
}
}
$sql = "SELECT * FROM tbjadwal LEFT JOIN tbmhs ON tbjadwal.idMhs = tbmhs.idmhs WHERE nim = :nim AND publish = 'Y' ORDER BY start";
$stmt1 = $dbh->prepare($sql);
$stmt1->bindParam(':nim', $nim);
$stmt1->execute();
while($row1 = $stmt1->fetch(PDO::FETCH_ASSOC)){
array_push($jadwal,[
'jenis' => $row1['jenis'],
'waktu' => $row1['start'],
'ruangan' => $row1['ruangan'],
]);
}
array_push($data, array(
'id' => $id,
'judul' => $judul,
'nim' => $nim,
'pemb1' => $pemb1,
'pemb2' => $pemb2,
'peng1' => $peng1,
'peng2' => $peng2,
'semester' => $semester,
'tahun' => $tahun,
'tanggalKeputusan' => $tanggalKep,
'waktuKeputusan' => $waktuKep,
'kelompokKeahlian' => $kelompokKeahlian,
'jadwal' => $jadwal,
));
}
echo json_encode(utf8ize(array('status' => 1, 'data' => $data)));

57
steven/API/getListKK.php Normal file
View File

@@ -0,0 +1,57 @@
<?php
include '../conf/class.server.php';
include '../conf/koneksiPDO.php';
include '../conf/function.php';
header('Content-Type: application/json');
$server = new Server();
$conn = new createCon();
$dbh = $conn->connect();
checkKey('GET', 'secret');
requireRobotSecret();
$sql = 'SELECT * FROM tb_kelompok_keahlian LEFT JOIN tbdosen ON tb_kelompok_keahlian.ketuaKK = tbdosen.iddosen';
$stmt = $dbh->prepare($sql);
$stmt->execute();
$data = [];
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$idKK = $row['idKK'];
$listAnggotaKK = [];
array_push($listAnggotaKK, [
'status' => 'ketua',
'id' => $row['iddosen'],
'nama' => $row['nmLengkap'],
]);
$sql = 'SELECT * FROM tbdosen WHERE kelompokKeahlian = :kk';
$stmt1 = $dbh->prepare($sql);
$stmt1->bindParam(':kk', $idKK);
$stmt1->execute();
while ($row1 = $stmt1->fetch(PDO::FETCH_ASSOC)) {
if ($row1['iddosen'] == $row['iddosen']) {
continue;
}
array_push($listAnggotaKK, [
'status' => 'anggota',
'id' => $row1['iddosen'],
'nama' => $row1['nmLengkap'],
]);
}
array_push($data, [
'id' => $row['idKK'],
'nama' => $row['namaKK'],
'anggotaKK' => $listAnggotaKK,
]);
}
echo json_encode(utf8ize(['status' => 1, 'data' => $data]));

View File

@@ -0,0 +1,129 @@
<?php
include '../conf/class.server.php';
include '../conf/koneksiPDO.php';
include '../conf/function.php';
header('Content-Type: application/json');
$server = new Server();
$conn = new createCon();
$dbh = $conn->connect();
checkKey('GET', 'secret');
checkKey('GET', 'idKK');
checkKey('GET', 'tgl');
requireRobotSecret();
$idKK = intval($_GET['idKK']);
$timestampTgl = strtotime($_GET['tgl']);
if ($timestampTgl === false) {
jsonResponse(['status' => 0, 'msg' => 'Format tanggal tidak valid'], 422);
}
$tanggalUpload = date('Y-m-d', $timestampTgl);
$sql = 'SELECT * FROM tb_kelompok_keahlian WHERE idKK = :idKK';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':idKK', $idKK);
$stmt->execute();
if ($stmt->rowCount() === 0) {
jsonResponse(['status' => 0, 'msg' => 'KK tidak ditemukan'], 404);
}
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$namaKK = $row['namaKK'];
$ketuaKK = $row['ketuaKK'];
}
$sql = 'SELECT * FROM tbdosen WHERE iddosen = :ketuaKK OR jenis = :jenisKajur';
$stmt = $dbh->prepare($sql);
$jenisKajur = 'K';
$stmt->bindParam(':ketuaKK', $ketuaKK);
$stmt->bindParam(':jenisKajur', $jenisKajur);
$stmt->execute();
$listNoHP = [];
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$noHPDosen = $row['nohp'];
array_push($listNoHP, $noHPDosen);
}
$statusUsulan = '0';
$sql = 'SELECT tbpraoutline.*, tbmhs.idmhs, tbmhs.thnmasuk, tbmhs.nmLengkap FROM tbpraoutline LEFT JOIN tbmhs ON tbpraoutline.nim = tbmhs.nim WHERE status_usulan = :statusUsulan AND kelompokKeahlian = :idKK AND tgl_upload < :tanggalUpload';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':statusUsulan', $statusUsulan);
$stmt->bindParam(':idKK', $idKK);
$stmt->bindParam(':tanggalUpload', $tanggalUpload);
$stmt->execute();
if ($stmt->rowCount() === 0) {
jsonResponse(['status' => 0, 'msg' => 'Tidak ada judul yang belum diclose untuk KK ini'], 404);
}
$judul = '*PERMINTAAN KEPUTUSAN DRAFT PROPOSAL*';
$isiNotif = "\n\nDraft proposal yang masih menunggu keputusan dari KK *$namaKK* sebagai berikut:\n\n";
$i = 1;
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$id = $row['id'];
$nim = $row['nim'];
$nama = $row['nmLengkap'];
$judulSkripsi = $row['judul'];
$tanggalUpload = date('d-m-Y', strtotime($row['tgl_upload']));
$isiNotif .= "$i. $judulSkripsi ($nama/$nim) - Tanggal Upload : *$tanggalUpload*\n\n";
++$i;
}
$sendWA = $judul.$isiNotif."*SPOTA INFORMATIKA UNTAN*";
foreach ($listNoHP as $key => $hp) {
if(empty($hp)){
continue;
}
$hp = '62'.intval($hp);
$sql = "INSERT INTO tbl_notif_wa(toX, isiPesan) VALUES(:tujuan, :pesan)";
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':tujuan', $hp);
$stmt->bindParam(':pesan', $sendWA);
$stmt->execute();
// $data = [
// 'api_key' => '979b07377545d6ccda68e8fa2e8d629cad2216de',
// 'sender' => '6281522658229',
// 'number' => $hp,
// 'message' => $sendWA, ];
// //print_r($data);
// $curl = curl_init();
// curl_setopt_array($curl, [
// CURLOPT_URL => 'https://wa.gofly.id/api/send-message.php',
// CURLOPT_RETURNTRANSFER => true,
// CURLOPT_ENCODING => '',
// CURLOPT_MAXREDIRS => 10,
// CURLOPT_TIMEOUT => 2,
// CURLOPT_FOLLOWLOCATION => true,
// CURLOPT_SSL_VERIFYPEER => 0,
// CURLOPT_CONNECTTIMEOUT => 2,
// CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
// CURLOPT_CUSTOMREQUEST => 'POST',
// CURLOPT_POSTFIELDS => json_encode($data), ]
// );
// $response = curl_exec($curl);
// if (curl_errno($curl)) {
// $error_msg = curl_error($curl);
// echo $error_msg;
// }
}
echo json_encode(['status' => 1, 'msg' => 'ok']);

527
steven/API/openapi.yaml Normal file
View File

@@ -0,0 +1,527 @@
openapi: 3.0.3
info:
title: SPOTA Legacy Steven API
version: 0.1.0
description: |
Dokumentasi awal endpoint legacy di `steven/API`.
Fokus dokumen ini adalah endpoint yang sudah distabilkan dan masih dipakai integrasi lama.
servers:
- url: https://spota.informatika.untan.ac.id/steven/API
security:
- LegacySecretQuery: []
- LegacySecretHeader: []
tags:
- name: Robot
description: Endpoint machine-to-machine dengan secret legacy.
- name: Session
description: Endpoint yang memerlukan session login aplikasi.
paths:
/getListMahasiswa.php:
get:
tags: [Robot]
summary: Ambil daftar mahasiswa
parameters:
- $ref: '#/components/parameters/SecretQuery'
- name: mulaiTahun
in: query
schema:
type: integer
description: Filter angkatan minimal.
- name: withHP
in: query
schema:
type: string
description: Jika ada, sertakan `hp` dan `hpOrtu`.
responses:
'200':
description: Data mahasiswa
content:
application/json:
schema:
$ref: '#/components/schemas/ListMahasiswaResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/getListDosen.php:
get:
tags: [Robot]
summary: Ambil daftar dosen
parameters:
- $ref: '#/components/parameters/SecretQuery'
responses:
'200':
description: Data dosen
content:
application/json:
schema:
$ref: '#/components/schemas/ListDosenResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/getListTugasAkhir.php:
get:
tags: [Robot]
summary: Ambil daftar tugas akhir mahasiswa
parameters:
- $ref: '#/components/parameters/SecretQuery'
- name: mulaiTahun
in: query
schema:
type: integer
- name: withoutKep
in: query
schema:
type: string
description: Jika ada, data tidak difilter `kep_akhir = 1`.
responses:
'200':
description: Data tugas akhir
content:
application/json:
schema:
$ref: '#/components/schemas/ListTugasAkhirResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/getListDataTAMahasiswa.php:
get:
tags: [Robot]
summary: Ambil data rekap tugas akhir beserta jadwal
parameters:
- $ref: '#/components/parameters/SecretQuery'
responses:
'200':
description: Data TA mahasiswa
content:
application/json:
schema:
$ref: '#/components/schemas/ListDataTaMahasiswaResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/getDetailTugasAkhirMahasiswa.php:
get:
tags: [Robot]
summary: Ambil detail tugas akhir mahasiswa
parameters:
- $ref: '#/components/parameters/SecretQuery'
- name: id
in: query
required: true
schema:
type: integer
responses:
'200':
description: Detail tugas akhir
content:
application/json:
schema:
type: object
'401':
$ref: '#/components/responses/Unauthorized'
/getListKK.php:
get:
tags: [Robot]
summary: Ambil daftar kelompok keahlian
parameters:
- $ref: '#/components/parameters/SecretQuery'
responses:
'200':
description: Data kelompok keahlian
content:
application/json:
schema:
type: object
'401':
$ref: '#/components/responses/Unauthorized'
/sendMail.php:
post:
tags: [Robot]
summary: Kirim email HTML ke banyak penerima
requestBody:
required: true
content:
application/x-www-form-urlencoded:
schema:
type: object
required: [secret, to, judul, content]
properties:
secret:
type: string
to:
type: string
description: JSON array string email penerima.
example: '["user1@example.com","user2@example.com"]'
judul:
type: string
content:
type: string
from:
type: string
responses:
'200':
description: Email terkirim
content:
application/json:
schema:
$ref: '#/components/schemas/StandardSuccess'
'401':
$ref: '#/components/responses/Unauthorized'
'422':
$ref: '#/components/responses/ValidationError'
/willy_manageJadwal.php:
post:
tags: [Robot]
summary: Tambah, ubah, atau hapus jadwal sidang
security:
- LegacySecretHeader: []
- LegacySecretQuery: []
requestBody:
required: true
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/ManageJadwalAddRequest'
- $ref: '#/components/schemas/ManageJadwalUpdateRequest'
- $ref: '#/components/schemas/ManageJadwalDeleteRequest'
responses:
'200':
description: Operasi jadwal berhasil
content:
application/json:
schema:
type: object
'401':
$ref: '#/components/responses/Unauthorized'
'422':
$ref: '#/components/responses/ValidationError'
/getBerkasSidangMahasiswa.php:
get:
tags: [Session]
summary: Ambil daftar berkas sidang mahasiswa
description: |
Default untuk mahasiswa yang sedang login.
Jika memakai `bypassSaya`, akses hanya untuk dosen terkait atau admin.
security: []
parameters:
- name: idRekapHasil
in: query
required: true
schema:
type: integer
- name: jenis
in: query
required: true
schema:
type: string
enum: [Outline, SidHas, Sidang]
- name: bypassSaya
in: query
schema:
type: string
responses:
'200':
description: Berkas sidang
content:
application/json:
schema:
type: object
'403':
description: Forbidden
/verifBerkasAdmin.php:
post:
tags: [Session]
summary: Verifikasi berkas oleh admin
security: []
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: Verifikasi tersimpan
'403':
description: Forbidden
/verifBerkasDosen.php:
post:
tags: [Session]
summary: Verifikasi berkas oleh dosen terkait
security: []
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: Verifikasi tersimpan
'403':
description: Forbidden
components:
securitySchemes:
LegacySecretQuery:
type: apiKey
in: query
name: secret
LegacySecretHeader:
type: apiKey
in: header
name: X-API-Key
parameters:
SecretQuery:
name: secret
in: query
required: true
schema:
type: string
responses:
Unauthorized:
description: Secret salah atau tidak dikirim.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
ValidationError:
description: Parameter tidak lengkap atau tidak valid.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
schemas:
StandardSuccess:
type: object
properties:
status:
oneOf:
- type: integer
- type: boolean
msg:
type: string
ErrorResponse:
type: object
properties:
status:
oneOf:
- type: integer
- type: boolean
msg:
type: string
MahasiswaItem:
type: object
properties:
id:
type: integer
nim:
type: string
nama:
type: string
email:
type: string
urlFoto:
type: string
angkatan:
type: integer
hp:
type: string
hpOrtu:
type: string
ListMahasiswaResponse:
type: object
properties:
status:
type: integer
msg:
type: string
data:
type: array
items:
$ref: '#/components/schemas/MahasiswaItem'
DosenItem:
type: object
properties:
id:
type: integer
nip:
type: string
nama:
type: string
email:
type: string
hp:
type: string
urlFoto:
type: string
ListDosenResponse:
type: object
properties:
status:
type: integer
msg:
type: string
data:
type: array
items:
$ref: '#/components/schemas/DosenItem'
TugasAkhirItem:
type: object
properties:
id:
type: integer
judul:
type: string
nim:
type: string
nama:
type: string
pemb1:
type: string
pemb2:
type: string
peng1:
type: string
peng2:
type: string
semester:
type: string
tahun:
type: string
tanggalKeputusan:
type: string
waktuKeputusan:
type: string
idPraoutline:
type: integer
keputusan:
type: string
sidang:
type: integer
ListTugasAkhirResponse:
type: object
properties:
status:
type: integer
msg:
type: string
data:
type: array
items:
$ref: '#/components/schemas/TugasAkhirItem'
JadwalItem:
type: object
properties:
jenis:
type: string
waktu:
type: string
ruangan:
type: string
DataTaMahasiswaItem:
type: object
properties:
id:
type: integer
judul:
type: string
nim:
type: string
pemb1:
type: string
pemb2:
type: string
peng1:
type: string
peng2:
type: string
semester:
type: string
tahun:
type: string
tanggalKeputusan:
type: string
waktuKeputusan:
type: string
kelompokKeahlian:
type: string
jadwal:
type: array
items:
$ref: '#/components/schemas/JadwalItem'
ListDataTaMahasiswaResponse:
type: object
properties:
status:
type: integer
data:
type: array
items:
$ref: '#/components/schemas/DataTaMahasiswaItem'
ManageJadwalBaseRequest:
type: object
required:
- act
- nim
- judul
- ruangan
- jenis
- waktuSidang
- namaPemb1
- namaPemb2
- namaPeng1
- namaPeng2
properties:
act:
type: string
secret:
type: string
nim:
type: string
judul:
type: string
ruangan:
type: string
jenis:
type: string
enum: [Outline, SidHas, Sidang]
waktuSidang:
type: string
example: '2026-05-07 08:00:00'
namaPemb1:
type: string
namaPemb2:
type: string
namaPeng1:
type: string
namaPeng2:
type: string
ManageJadwalAddRequest:
allOf:
- $ref: '#/components/schemas/ManageJadwalBaseRequest'
- type: object
properties:
act:
type: string
enum: [add]
ManageJadwalUpdateRequest:
allOf:
- $ref: '#/components/schemas/ManageJadwalBaseRequest'
- type: object
required: [id]
properties:
act:
type: string
enum: [update]
id:
type: integer
ManageJadwalDeleteRequest:
type: object
required: [act, secret, id, nim]
properties:
act:
type: string
enum: [delete]
secret:
type: string
id:
type: integer
nim:
type: string

View File

@@ -0,0 +1,111 @@
<?php
session_start();
include '../conf/koneksiPDO.php';
include '../conf/function.php';
$conn = new createCon();
$dbh = $conn->connect();
header('Content-Type: application/json');
$loginMhs = requireSessionRole('mhs');
$nim = isset($loginMhs['nim']) ? $loginMhs['nim'] : '';
$idMhs = isset($loginMhs['id']) ? $loginMhs['id'] : 0;
$idJadwal = isset($_GET['idJadwal']) ? (int) $_GET['idJadwal'] : 0;
if ($idJadwal <= 0) {
jsonResponse(['status' => false, 'msg' => 'Parameter idJadwal tidak valid'], 422);
}
if (!isset($_POST['listKey'])) {
jsonResponse(['status' => false, 'msg' => 'Parameter listKey tidak lengkap'], 422);
}
$listKey = json_decode($_POST['listKey'], true);
if (!is_array($listKey) || empty($listKey)) {
jsonResponse(['status' => false, 'msg' => 'Format listKey tidak valid'], 422);
}
$sql = 'SELECT * FROM tbjadwal WHERE id = :idJadwal AND idMhs = :idMhs';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':idJadwal', $idJadwal);
$stmt->bindParam(':idMhs', $idMhs);
$stmt->execute();
if ($stmt->rowCount() === 0) {
jsonResponse(['status' => false, 'msg' => 'Forbidden'], 403);
}
$namaFolder = 'dll';
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$jenisSidang = strtolower($row['jenis']);
switch ($jenisSidang) {
case 'outline': $namaFolder = 'Seminar Outline'; break;
case 'sidhas': $namaFolder = 'Seminar Hasil'; break;
case 'sidang': $namaFolder = 'Sidang Akhir'; break;
}
}
$urlAPIDrive = 'http://203.24.50.140/';
$banyakSukses = 0;
foreach ($listKey as $key => $val) {
if (isset($_FILES[$val])) {
$tmpfile = $_FILES[$val]['tmp_name'];
$filename = basename($_FILES[$val]['name']);
$typeFile = $_FILES[$val]['type'];
$cFile = curl_file_create($tmpfile, $typeFile, $filename);
$post = ['nim' => $nim, 'file_gdrive' => $cFile, 'folderMhs' => $namaFolder];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $urlAPIDrive);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_PORT, 8080);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
$decodedResult = json_decode($result, true);
if ($decodedResult['status'] == 1) {
$fileId = $decodedResult['fileId'];
++$banyakSukses;
$sql = 'SELECT * FROM tb_berkas_sidang WHERE idJadwal = :idJadwal AND nama = :nama';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':idJadwal', $idJadwal);
$stmt->bindParam(':nama', $val);
$stmt->execute();
if ($stmt->rowCount() == 0) {
$sql = 'INSERT INTO tb_berkas_sidang(idJadwal, nama, driveId) VALUES(:idJadwal, :nama, :driveId)';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':idJadwal', $idJadwal);
$stmt->bindParam(':nama', $val);
$stmt->bindParam(':driveId', $fileId);
$stmt->execute();
} else {
$sql = 'UPDATE tb_berkas_sidang SET driveId = :driveId WHERE idJadwal = :idJadwal AND nama = :nama';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':idJadwal', $idJadwal);
$stmt->bindParam(':nama', $val);
$stmt->bindParam(':driveId', $fileId);
$stmt->execute();
}
}
}
}
echo json_encode([
'status' => true,
'msg' => $banyakSukses.' file berhasil diupload',
]);

View File

@@ -0,0 +1,89 @@
<?php
session_start();
include '../conf/koneksiPDO.php';
include '../conf/function.php';
$conn = new createCon();
$dbh = $conn->connect();
header('Content-Type: application/json');
$loginMhs = requireSessionRole('mhs');
$nim = $loginMhs['nim'];
$idRekapHasil = isset($_GET['idRekapHasil']) ? (int) $_GET['idRekapHasil'] : 0;
$jenis = isset($_GET['jenis']) ? trim((string) $_GET['jenis']) : '';
if ($idRekapHasil <= 0 || $jenis === '' || !isset($_POST['data'])) {
jsonResponse(['status' => false, 'msg' => 'Parameter tidak lengkap'], 422);
}
$sql = 'SELECT * FROM tbrekaphasil WHERE id = :idRekapHasil AND nim = :nim';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':idRekapHasil', $idRekapHasil);
$stmt->bindParam(':nim', $nim);
$stmt->execute();
if ($stmt->rowCount() === 0) {
echo json_encode(['status' => false, 'msg' => 'Forbidden']);
exit;
}
// $namaFolder = 'dll';
// while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
// $jenisSidang = strtolower($row['jenis']);
// switch ($jenisSidang) {
// case 'outline': $namaFolder = 'Seminar Outline'; break;
// case 'sidhas': $namaFolder = 'Seminar Hasil'; break;
// case 'sidang': $namaFolder = 'Sidang Akhir'; break;
// }
// }
$listData = json_decode($_POST['data'], true);
if (!is_array($listData)) {
jsonResponse(['status' => false, 'msg' => 'Format data tidak valid'], 422);
}
$banyakSukses = 0;
foreach ($listData as $key => $val) {
if (!is_array($val) || empty($val['file']) || empty($val['nama'])) {
continue;
}
$fileId = $val['file'];
$namaFile = $val['nama'];
$sql = 'SELECT * FROM tb_berkas_sidang WHERE idRekapHasil = :idRekapHasil AND jenisSidang = :jenisSidang AND nama = :nama';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':idRekapHasil', $idRekapHasil);
$stmt->bindParam(':jenisSidang', $jenis);
$stmt->bindParam(':nama', $namaFile);
$stmt->execute();
if ($stmt->rowCount() == 0) {
$sql = 'INSERT INTO tb_berkas_sidang(idRekapHasil, jenisSidang, nama, driveId) VALUES(:idRekapHasil, :jenisSidang, :nama, :driveId)';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':idRekapHasil', $idRekapHasil);
$stmt->bindParam(':jenisSidang', $jenis);
$stmt->bindParam(':nama', $namaFile);
$stmt->bindParam(':driveId', $fileId);
$stmt->execute();
} else {
$sql = 'UPDATE tb_berkas_sidang SET driveId = :driveId WHERE idRekapHasil = :idRekapHasil AND nama = :nama AND jenisSidang = :jenisSidang';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':idRekapHasil', $idRekapHasil);
$stmt->bindParam(':jenisSidang', $jenis);
$stmt->bindParam(':nama', $namaFile);
$stmt->bindParam(':driveId', $fileId);
$stmt->execute();
}
++$banyakSukses;
}
echo json_encode([
'status' => true,
'msg' => $banyakSukses.' file berhasil diupload',
]);

185
steven/API/sendMail.php Normal file
View File

@@ -0,0 +1,185 @@
<?php
// use PHPMailer\PHPMailer\Exception;
// use PHPMailer\PHPMailer\PHPMailer;
// require 'phpmailer/src/Exception.php';
// require 'phpmailer/src/PHPMailer.php';
// require 'phpmailer/src/SMTP.php';
// $mail = new PHPMailer();
// $to = $_POST['to'];
// $judul = $_POST['judul'];
// $content = $_POST['content'];
// if (isset($_POST['from'])) {
// $from = $_POST['from'];
// $fromText = $from;
// } else {
// $from = 'system@spota.untan.ac.id';
// $fromText = 'SPOTA Informatika UNTAN';
// }
// $ch = curl_init();
// $emailParams = [];
// $emailParams['to'] = $to;
// $emailParams['judul'] = $judul;
// $emailParams['content'] = $content;
// $emailParams['from'] = $from;
// $postdata = $emailParams;
// curl_setopt($ch, CURLOPT_URL, 'https://informatika.untan.ac.id/API/sendMail.php');
// curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
// curl_setopt($ch, CURLOPT_POST, 1);
// curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
// curl_setopt($ch, CURLOPT_HEADER, 0);
// curl_setopt($ch, CURLOPT_TIMEOUT, 30);
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// curl_exec($ch);
// echo 'ok';
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\PHPMailer;
include '../conf/class.server.php';
include '../conf/function.php';
require 'phpmailer/src/Exception.php';
require 'phpmailer/src/PHPMailer.php';
require 'phpmailer/src/SMTP.php';
$mail = new PHPMailer();
header('Content-Type: application/json');
requireRobotSecret();
$to = isset($_POST['to']) ? $_POST['to'] : '[]';
$judul = isset($_POST['judul']) ? $_POST['judul'] : '';
$content = isset($_POST['content']) ? $_POST['content'] : '';
if ($judul === '' || $content === '') {
jsonResponse(['status' => 0, 'msg' => 'Parameter tidak lengkap'], 422);
}
if (isset($_POST['from'])) {
$from = $_POST['from'];
$fromText = $from;
} else {
$from = 'system@spota.untan.ac.id';
$fromText = 'SPOTA Informatika UNTAN';
}
try {
//Server settings
//$mail->SMTPDebug = SMTP::DEBUG_SERVER; // Enable verbose debug output
$mail->isSMTP(); // Send using SMTP
$mail->Host = (string) (getenv('SPOTA_SMTP_HOST') ?: 'smtp.gmail.com');
$mail->SMTPAuth = true;
$mail->SMTPDebug = 0;
//$mail->SMTPSecure = 'tls'; // Enable SMTP authentication
//gmail
// $mail->Username = 'mail.informatika.untan@gmail.com'; // SMTP username
// $mail->Password = 'informatikauntan247mail'; // SMTP password
$mail->Username = (string) (getenv('SPOTA_SMTP_USERNAME') ?: 'tu1@informatika.untan.ac.id');
$mail->Password = (string) (getenv('SPOTA_SMTP_PASSWORD') ?: 'IFuntanpnk-2020');
$mail->Port = (int) (getenv('SPOTA_SMTP_PORT') ?: 587);
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` encouraged
// $mail->SMTPOptions = [
// 'ssl' => [
// 'verify_peer' => false,
// 'verify_peer_name' => false,
// 'allow_self_signed' => true,
// ],
// ];
//Recipients
$mail->setFrom($from, $fromText);
$toArr = json_decode($to, 1);
if (!is_array($toArr) || empty($toArr)) {
jsonResponse(['status' => 0, 'msg' => 'Penerima email tidak valid'], 422);
}
foreach ($toArr as $key => $val) {
$mail->addAddress(trim($val), $val); // Add a recipient
}
//$mail->addReplyTo('info@example.com', 'Information');
//$mail->addCC('cc@example.com');
//$mail->addBCC('bcc@example.com');
// Attachments
//$mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments
//$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name
// Content
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = $judul;
$mail->Body = $content;
//$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
if ($mail->send()) {
echo json_encode(['status' => 1, 'msg' => 'Message has been sent']);
} else {
echo json_encode(['status' => 0, 'msg' => 'Mailer Error: '.$mail->ErrorInfo]);
}
//;
} catch (Exception $e) {
echo json_encode(['status' => 0, 'msg' => "Message could not be sent. Mailer Error: {$mail->ErrorInfo}"]);
}
// try {
// //Server settings
// //$mail->SMTPDebug = SMTP::DEBUG_SERVER; // Enable verbose debug output
// $mail->isSMTP(); // Send using SMTP
// $mail->Host = 'smtp.gmail.com'; // Set the SMTP server to send through
// $mail->SMTPAuth = true;
// $mail->SMTPDebug = 4;
// //$mail->SMTPSecure = 'tls'; // Enable SMTP authentication
// //gmail
// $mail->Username = 'mail.informatika.untan@gmail.com'; // SMTP username
// $mail->Password = 'informatikauntan247mail'; // SMTP password
// $mail->Port = 587; // TCP port to connect to, use 465 for `PHPMailer::ENCRYPTION_SMTPS` abov
// $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` encouraged
// // $mail->SMTPOptions = [
// // 'ssl' => [
// // 'verify_peer' => false,
// // 'verify_peer_name' => false,
// // 'allow_self_signed' => true,
// // ],
// // ];
// //Recipients
// $mail->setFrom($from, $fromText);
// $toArr = json_decode($to, 1);
// foreach ($toArr as $key => $val) {
// $mail->addAddress(trim($val), $val); // Add a recipient
// }
// //$mail->addReplyTo('info@example.com', 'Information');
// //$mail->addCC('cc@example.com');
// //$mail->addBCC('bcc@example.com');
// // Attachments
// //$mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments
// //$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name
// // Content
// $mail->isHTML(true); // Set email format to HTML
// $mail->Subject = $judul;
// $mail->Body = $content;
// //$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
// if ($mail->send()) {
// echo 'Message has been sent';
// } else {
// echo 'error message';
// echo 'Mailer Error: '.$mail->ErrorInfo;
// }
// //;
// } catch (Exception $e) {
// echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
// }

View File

@@ -0,0 +1,105 @@
<?php
header('Content-Type: application/json');
include '../conf/class.server.php';
include '../conf/function.php';
requireRobotSecret();
// use PHPMailer\PHPMailer\PHPMailer;
// use PHPMailer\PHPMailer\Exception;
// require 'phpmailer/src/Exception.php';
// require 'phpmailer/src/PHPMailer.php';
// require 'phpmailer/src/SMTP.php';
// $mail = new PHPMailer();
$to = isset($_POST['to']) ? $_POST['to'] : '[]';
$judul = isset($_POST['judul']) ? $_POST['judul'] : '';
$content = isset($_POST['content']) ? $_POST['content'] : '';
if ($judul === '' || $content === '') {
jsonResponse(['status' => 0, 'msg' => 'Parameter tidak lengkap'], 422);
}
if(isset($_POST['from'])){
$from = $_POST['from'];
}else{
$from = "system@spota.untan.ac.id";
}
$toArr = json_decode($to, 1);
$emailTujuan = '';
if (is_array($toArr) && sizeof($toArr) > 0) {
$emailTujuan = implode(', ', $toArr);
} else {
jsonResponse(['status' => 0, 'msg' => 'Penerima email tidak valid'], 422);
}
$headers = 'MIME-Version: 1.0'."\r\n";
$headers .= 'Content-type:text/html;charset=UTF-8'."\r\n";
$headers .= "From: $from";
$result = mail($emailTujuan, $judul, $content, $headers);
echo json_encode([
'status' => $result ? 1 : 0,
'msg' => $result ? 'Message has been sent' : 'Message could not be sent',
]);
// try {
// //Server settings
// //$mail->SMTPDebug = SMTP::DEBUG_SERVER; // Enable verbose debug output
// $mail->isSMTP(); // Send using SMTP
// $mail->Host = 'smtp.gmail.com'; // Set the SMTP server to send through
// $mail->SMTPAuth = true; // Enable SMTP authentication
// $mail->SMTPDebug = 4;
// //gmail
// $mail->Username = 'spota.ifuntan@gmail.com'; // SMTP username
// $mail->Password = 'Steven123!@#'; // SMTP password
// $mail->Port = 587; // TCP port to connect to, use 465 for `PHPMailer::ENCRYPTION_SMTPS` abov
// $mail->SMTPOptions = array(
// 'ssl' => array(
// 'verify_peer' => false,
// 'verify_peer_name' => false,
// 'allow_self_signed' => true,
// ),
// );
// $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` encouraged
// //Recipients
// $mail->setFrom('spota.ifuntan@gmail.com', 'SPOTA IF UNTAN');
// $mail->addReplyTo('spota.ifuntan@gmail.com', 'SPOTA IF UNTAN');
// $toArr = json_decode($to, 1);
// if (sizeof($toArr) > 0) {
// for ($i = 0; $i < sizeof($toArr); ++$i) {
// if ($i === 0) {
// $mail->addAddress($toArr[$i], ''); // Add a recipient
// } else {
// $mail->addCC($toArr[$i]);
// }
// }
// } else {
// exit();
// }
// //$mail->addCC('cc@example.com');
// //$mail->addBCC('bcc@example.com');
// // Attachments
// //$mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments
// //$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name
// // Content
// $mail->isHTML(true); // Set email format to HTML
// $mail->Subject = $judul;
// $mail->Body = $content;
// //$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
// $mail->send();
// //echo 'Message has been sent';
// } catch (Exception $e) {
// //echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
// }

View File

@@ -0,0 +1,66 @@
<?php
session_start();
include '../conf/koneksiPDO.php';
include '../conf/function.php';
$conn = new createCon();
$dbh = $conn->connect();
header('Content-Type: application/json');
$loginAdmin = requireSessionRole('admin');
$idRekapHasil = isset($_POST['idRekap']) ? (int) $_POST['idRekap'] : 0;
$jenis = isset($_POST['jenis']) ? trim((string) $_POST['jenis']) : '';
$catatan = isset($_POST['catatan']) ? (string) $_POST['catatan'] : '';
$listData = isset($_POST['dataVerif']) ? json_decode($_POST['dataVerif'], true) : null;
if ($idRekapHasil <= 0 || $jenis === '' || !is_array($listData)) {
jsonResponse(['status' => false, 'msg' => 'Parameter tidak lengkap'], 422);
}
$sql = 'SELECT id FROM tb_verif_berkas WHERE idRekapHasil = :idRekapHasil AND jenisSidang = :jenis';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':idRekapHasil', $idRekapHasil);
$stmt->bindParam(':jenis', $jenis);
$stmt->execute();
if ($stmt->rowCount() === 0) {
$sql = 'INSERT INTO tb_verif_berkas(idRekapHasil, jenisSidang, catatanDariAdmin, verifPemb1, verifPemb2, verifPeng1, verifPeng2) VALUES(:idRekapHasil, :jenis, :catatan, 0, 0, 0, 0)';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':idRekapHasil', $idRekapHasil);
$stmt->bindParam(':jenis', $jenis);
$stmt->bindParam(':catatan', $catatan);
$stmt->execute();
}
$sql = 'UPDATE tb_verif_berkas SET catatanDariAdmin = :catatan WHERE idRekapHasil = :idRekapHasil AND jenisSidang = :jenis';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':catatan', $catatan);
$stmt->bindParam(':idRekapHasil', $idRekapHasil);
$stmt->bindParam(':jenis', $jenis);
$stmt->execute();
foreach ($listData as $key => $val) {
if (!is_array($val) || !isset($val['id']) || !isset($val['verif'])) {
continue;
}
$id = $val['id'];
$verif = $val['verif'];
$sql = 'UPDATE tb_berkas_sidang SET status = :status WHERE idBerkas = :id AND idRekapHasil = :idRekapHasil AND jenisSidang = :jenis';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':status', $verif);
$stmt->bindParam(':id', $id);
$stmt->bindParam(':idRekapHasil', $idRekapHasil);
$stmt->bindParam(':jenis', $jenis);
$stmt->execute();
}
echo json_encode([
'status' => true,
'msg' => 'Verifikasi berhasil',
]);

View File

@@ -0,0 +1,72 @@
<?php
session_start();
include '../conf/koneksiPDO.php';
include '../conf/function.php';
$conn = new createCon();
$dbh = $conn->connect();
header('Content-Type: application/json');
$loginDosen = requireSessionRole('dosen');
$idRekapHasil = isset($_POST['idRekap']) ? (int) $_POST['idRekap'] : 0;
$jenis = isset($_POST['jenis']) ? trim((string) $_POST['jenis']) : '';
$verif = isset($_POST['verif']) ? (int) $_POST['verif'] : 0;
$sebagai = isset($_POST['sebagai']) ? trim((string) $_POST['sebagai']) : '';
if ($idRekapHasil <= 0 || $jenis === '' || $sebagai === '') {
jsonResponse(['status' => false, 'msg' => 'Parameter tidak lengkap'], 422);
}
$sql = 'SELECT pemb1, pemb2, peng1, peng2 FROM tbrekaphasil WHERE id = :idRekapHasil';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':idRekapHasil', $idRekapHasil);
$stmt->execute();
$rekap = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$rekap) {
jsonResponse(['status' => false, 'msg' => 'Data Not Found'], 404);
}
$dosenNip = isset($loginDosen['nip']) ? (string) $loginDosen['nip'] : '';
switch ($sebagai) {
case 'pemb1': $fieldName = 'verifPemb1'; $expectedNip = (string) $rekap['pemb1']; break;
case 'pemb2': $fieldName = 'verifPemb2'; $expectedNip = (string) $rekap['pemb2']; break;
case 'peng1': $fieldName = 'verifPeng1'; $expectedNip = (string) $rekap['peng1']; break;
case 'peng2': $fieldName = 'verifPeng2'; $expectedNip = (string) $rekap['peng2']; break;
default: jsonResponse(['status' => false, 'msg' => 'Status Dosen Tidak Dikenali'], 422);
}
if ($expectedNip === '' || $expectedNip !== $dosenNip) {
jsonResponse(['status' => false, 'msg' => 'Forbidden'], 403);
}
$sql = 'SELECT id FROM tb_verif_berkas WHERE idRekapHasil = :idRekapHasil AND jenisSidang = :jenis';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':idRekapHasil', $idRekapHasil);
$stmt->bindParam(':jenis', $jenis);
$stmt->execute();
if ($stmt->rowCount() === 0) {
$sql = 'INSERT INTO tb_verif_berkas(idRekapHasil, jenisSidang, catatanDariAdmin, verifPemb1, verifPemb2, verifPeng1, verifPeng2) VALUES(:idRekapHasil, :jenis, "", 0, 0, 0, 0)';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':idRekapHasil', $idRekapHasil);
$stmt->bindParam(':jenis', $jenis);
$stmt->execute();
}
$sql = "UPDATE tb_verif_berkas SET {$fieldName} = :verif WHERE idRekapHasil = :idRekapHasil AND jenisSidang = :jenis";
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':verif', $verif);
$stmt->bindParam(':idRekapHasil', $idRekapHasil);
$stmt->bindParam(':jenis', $jenis);
$stmt->execute();
echo json_encode([
'status' => true,
'msg' => 'Verifikasi berhasil',
]);

View File

@@ -0,0 +1,390 @@
<?php
include '../conf/class.server.php';
include '../conf/koneksiPDO.php';
include '../conf/function.php';
header('Content-Type: application/json');
$conn = new createCon();
$dbh = $conn->connect();
requireRobotSecret();
$jsonData = getRequestJson();
$act = isset($jsonData['act']) ? trim((string) $jsonData['act']) : '';
if ($act === '') {
jsonResponse([
'status' => false,
'msg' => 'Parameter act tidak lengkap',
], 422);
}
function getManageJadwalTitle($jenis, $namaMahasiswa, $nimMahasiswa)
{
$judulSeminar = '';
switch ($jenis) {
case 'Outline':
$judulSeminar = 'Seminar Outline';
break;
case 'SidHas':
$judulSeminar = 'Sidang Hasil';
break;
case 'Sidang':
$judulSeminar = 'Sidang Terbuka';
break;
}
if ($judulSeminar === '') {
return '';
}
return $judulSeminar.' '.$namaMahasiswa.' / '.$nimMahasiswa;
}
function loadMahasiswaByNim($dbh, $nim)
{
$sql = 'SELECT * FROM tbmhs WHERE nim = :nim';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':nim', $nim);
$stmt->execute();
$mahasiswa = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$mahasiswa) {
jsonResponse([
'status' => false,
'msg' => 'NIM mahasiswa tidak dikenali',
], 404);
}
return $mahasiswa;
}
function loadDosenMeta($dbh, $namaPemb1, $namaPemb2, $namaPeng1, $namaPeng2)
{
$namaList = [$namaPemb1, $namaPemb2, $namaPeng1, $namaPeng2];
$placeholders = [];
$params = [];
foreach ($namaList as $index => $nama) {
$key = ':nama'.$index;
$placeholders[] = $key;
$params[$key] = $nama;
}
$sql = 'SELECT * FROM tbdosen WHERE nmLengkap IN ('.implode(', ', $placeholders).')';
$stmt = $dbh->prepare($sql);
$stmt->execute($params);
$result = [
'listEmail' => [],
'idPemb1' => 0,
'idPemb2' => 0,
'idPeng1' => 0,
'idPeng2' => 0,
];
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
if (!empty($row['email'])) {
$result['listEmail'][] = $row['email'];
}
if ($namaPemb1 === $row['nmLengkap']) {
$result['idPemb1'] = (int) $row['iddosen'];
}
if ($namaPemb2 === $row['nmLengkap']) {
$result['idPemb2'] = (int) $row['iddosen'];
}
if ($namaPeng1 === $row['nmLengkap']) {
$result['idPeng1'] = (int) $row['iddosen'];
}
if ($namaPeng2 === $row['nmLengkap']) {
$result['idPeng2'] = (int) $row['iddosen'];
}
}
return $result;
}
function callCalendarApi($endpoint, $payload)
{
$url = 'http://203.24.50.140:8086/'.$endpoint;
$postData = json_encode($payload);
$opts = [
'http' => [
'method' => 'POST',
'ignore_errors' => true,
'header' => 'Content-Type: application/json',
'content' => $postData,
'timeout' => 20,
],
];
$context = stream_context_create($opts);
$response = @file_get_contents($url, false, $context);
if ($response === false || trim($response) === '') {
return [];
}
$decoded = json_decode($response, true);
return is_array($decoded) ? $decoded : [];
}
function buildCalendarPayload($jenis, $namaMahasiswa, $nimMahasiswa, $ruangan, $waktuSidang, $listEmail, $calendarId = null)
{
$timestampStartSeminar = strtotime($waktuSidang);
if ($timestampStartSeminar === false) {
jsonResponse([
'status' => false,
'msg' => 'Format waktuSidang tidak valid',
], 422);
}
$timestampEndSeminar = strtotime('+2 hours', $timestampStartSeminar);
$payload = [
'judul' => getManageJadwalTitle($jenis, $namaMahasiswa, $nimMahasiswa),
'ruangan' => $ruangan,
'start' => date('Y-m-d\TH:i:s', $timestampStartSeminar),
'end' => date('Y-m-d\TH:i:s', $timestampEndSeminar),
'emailUser' => array_values(array_unique(array_filter($listEmail))),
];
if ($calendarId !== null && $calendarId !== '') {
$payload['id'] = $calendarId;
}
return $payload;
}
function getManageJadwalParams($jsonData, $needsId)
{
$required = [
'nim',
'judul',
'ruangan',
'jenis',
'waktuSidang',
'namaPemb1',
'namaPemb2',
'namaPeng1',
'namaPeng2',
];
if ($needsId) {
$required[] = 'id';
}
foreach ($required as $field) {
if (!isset($jsonData[$field]) || trim((string) $jsonData[$field]) === '') {
jsonResponse([
'status' => false,
'msg' => 'Parameter tidak lengkap',
], 422);
}
}
return [
'id' => $needsId ? (int) $jsonData['id'] : 0,
'nim' => trim((string) $jsonData['nim']),
'judul' => trim((string) $jsonData['judul']),
'ruangan' => trim((string) $jsonData['ruangan']),
'jenis' => trim((string) $jsonData['jenis']),
'waktuSidang' => trim((string) $jsonData['waktuSidang']),
'namaPemb1' => trim((string) $jsonData['namaPemb1']),
'namaPemb2' => trim((string) $jsonData['namaPemb2']),
'namaPeng1' => trim((string) $jsonData['namaPeng1']),
'namaPeng2' => trim((string) $jsonData['namaPeng2']),
];
}
switch ($act) {
case 'add':
$params = getManageJadwalParams($jsonData, false);
$mahasiswa = loadMahasiswaByNim($dbh, $params['nim']);
$dosenMeta = loadDosenMeta(
$dbh,
$params['namaPemb1'],
$params['namaPemb2'],
$params['namaPeng1'],
$params['namaPeng2']
);
$listEmail = $dosenMeta['listEmail'];
if (!empty($mahasiswa['email'])) {
$listEmail[] = $mahasiswa['email'];
}
$calendarPayload = buildCalendarPayload(
$params['jenis'],
$mahasiswa['nmLengkap'],
$mahasiswa['nim'],
$params['ruangan'],
$params['waktuSidang'],
$listEmail
);
$calendarResponse = callCalendarApi('insertJadwal', $calendarPayload);
$calendarId = isset($calendarResponse['id']) ? $calendarResponse['id'] : null;
$calendarLink = isset($calendarResponse['link']) ? $calendarResponse['link'] : null;
$sql = "INSERT INTO tbjadwal(idMhs, judul, ruangan, jenis, start, pemb1, pemb2, peng1, peng2, end, idProdi, calendarId, calendarLink, idPemb1, idPemb2, idPeng1, idPeng2) VALUES(:idMhs, :judul, :ruangan, :jenis, :waktuSidang, :namaPemb1, :namaPemb2, :namaPeng1, :namaPeng2, '2000-01-01 00:00:00', '2', :calendarId, :calendarLink, :idPemb1, :idPemb2, :idPeng1, :idPeng2)";
$stmt = $dbh->prepare($sql);
$stmt->bindValue(':idMhs', $mahasiswa['idmhs']);
$stmt->bindValue(':judul', $params['judul']);
$stmt->bindValue(':ruangan', $params['ruangan']);
$stmt->bindValue(':jenis', $params['jenis']);
$stmt->bindValue(':waktuSidang', $params['waktuSidang']);
$stmt->bindValue(':namaPemb1', $params['namaPemb1']);
$stmt->bindValue(':namaPemb2', $params['namaPemb2']);
$stmt->bindValue(':namaPeng1', $params['namaPeng1']);
$stmt->bindValue(':namaPeng2', $params['namaPeng2']);
$stmt->bindValue(':calendarId', $calendarId);
$stmt->bindValue(':calendarLink', $calendarLink);
$stmt->bindValue(':idPemb1', $dosenMeta['idPemb1']);
$stmt->bindValue(':idPemb2', $dosenMeta['idPemb2']);
$stmt->bindValue(':idPeng1', $dosenMeta['idPeng1']);
$stmt->bindValue(':idPeng2', $dosenMeta['idPeng2']);
$stmt->execute();
$error = $stmt->errorInfo();
if ($error[0] !== '00000') {
jsonResponse([
'status' => false,
'msg' => 'Terjadi kesalahan teknis!!!',
'error' => $error,
], 500);
}
jsonResponse([
'status' => true,
'msg' => 'Berhasil menambah data jadwal!!!',
'id' => $dbh->lastInsertId(),
'link' => $calendarLink,
]);
break;
case 'update':
$params = getManageJadwalParams($jsonData, true);
$mahasiswa = loadMahasiswaByNim($dbh, $params['nim']);
$dosenMeta = loadDosenMeta(
$dbh,
$params['namaPemb1'],
$params['namaPemb2'],
$params['namaPeng1'],
$params['namaPeng2']
);
$listEmail = $dosenMeta['listEmail'];
if (!empty($mahasiswa['email'])) {
$listEmail[] = $mahasiswa['email'];
}
$sql = 'SELECT calendarId FROM tbjadwal WHERE id = :id';
$stmt = $dbh->prepare($sql);
$stmt->bindValue(':id', $params['id']);
$stmt->execute();
$jadwal = $stmt->fetch(PDO::FETCH_ASSOC);
$calendarId = $jadwal ? $jadwal['calendarId'] : null;
$sql = 'UPDATE tbjadwal SET idMhs = :idMhs, judul = :judul, ruangan = :ruangan, jenis = :jenis, start = :waktuSidang, pemb1 = :namaPemb1, pemb2 = :namaPemb2, peng1 = :namaPeng1, peng2 = :namaPeng2, idPemb1 = :idPemb1, idPemb2 = :idPemb2, idPeng1 = :idPeng1, idPeng2 = :idPeng2 WHERE id = :id';
$stmt = $dbh->prepare($sql);
$stmt->bindValue(':id', $params['id']);
$stmt->bindValue(':idMhs', $mahasiswa['idmhs']);
$stmt->bindValue(':judul', $params['judul']);
$stmt->bindValue(':ruangan', $params['ruangan']);
$stmt->bindValue(':jenis', $params['jenis']);
$stmt->bindValue(':waktuSidang', $params['waktuSidang']);
$stmt->bindValue(':namaPemb1', $params['namaPemb1']);
$stmt->bindValue(':namaPemb2', $params['namaPemb2']);
$stmt->bindValue(':namaPeng1', $params['namaPeng1']);
$stmt->bindValue(':namaPeng2', $params['namaPeng2']);
$stmt->bindValue(':idPemb1', $dosenMeta['idPemb1']);
$stmt->bindValue(':idPemb2', $dosenMeta['idPemb2']);
$stmt->bindValue(':idPeng1', $dosenMeta['idPeng1']);
$stmt->bindValue(':idPeng2', $dosenMeta['idPeng2']);
$stmt->execute();
$error = $stmt->errorInfo();
if ($error[0] !== '00000') {
jsonResponse([
'status' => false,
'msg' => 'Terjadi kesalahan teknis!!!',
'error' => $error,
], 500);
}
if (!empty($calendarId)) {
$calendarPayload = buildCalendarPayload(
$params['jenis'],
$mahasiswa['nmLengkap'],
$mahasiswa['nim'],
$params['ruangan'],
$params['waktuSidang'],
$listEmail,
$calendarId
);
callCalendarApi('updateJadwal', $calendarPayload);
}
jsonResponse([
'status' => true,
'msg' => 'Berhasil mengubah data jadwal!!!',
]);
break;
case 'delete':
if (!isset($jsonData['id'], $jsonData['nim']) || trim((string) $jsonData['id']) === '' || trim((string) $jsonData['nim']) === '') {
jsonResponse([
'status' => false,
'msg' => 'Parameter tidak lengkap',
], 422);
}
$id = (int) $jsonData['id'];
$nim = trim((string) $jsonData['nim']);
$mahasiswa = loadMahasiswaByNim($dbh, $nim);
$sql = 'SELECT calendarId FROM tbjadwal WHERE id = :id';
$stmt = $dbh->prepare($sql);
$stmt->bindValue(':id', $id);
$stmt->execute();
$jadwal = $stmt->fetch(PDO::FETCH_ASSOC);
$calendarId = $jadwal ? $jadwal['calendarId'] : null;
$sql = 'DELETE FROM tbjadwal WHERE id = :id AND idMhs = :idMhs';
$stmt = $dbh->prepare($sql);
$stmt->bindValue(':id', $id);
$stmt->bindValue(':idMhs', $mahasiswa['idmhs']);
$stmt->execute();
$error = $stmt->errorInfo();
if ($error[0] !== '00000') {
jsonResponse([
'status' => false,
'msg' => 'Terjadi kesalahan teknis!!!',
'error' => $error,
], 500);
}
if (!empty($calendarId)) {
callCalendarApi('deleteJadwal', [
'id' => $calendarId,
]);
}
jsonResponse([
'status' => true,
'msg' => 'Berhasil menghapus data jadwal!!!',
]);
break;
default:
jsonResponse([
'status' => false,
'msg' => 'act tidak dikenali',
], 422);
}

View File

@@ -0,0 +1,78 @@
<?php
error_reporting(E_ALL);
ini_set('display_errors', '0');
include '../conf/class.server.php';
include '../conf/koneksiPDO.php';
include '../conf/function.php';
header("Content-Type: application/json");
$conn = new createCon();
$dbh = $conn->connect();
$jsonData = getRequestJson();
requireRobotSecret();
$act = isset($jsonData['act']) ? $jsonData['act'] : '';
// if($jsonData['nim'] != "D03111037"){
// echo json_encode([
// 'status' => false,
// 'msg' => "NIM yang diinjikan hanya D03111037",
// ]);
// exit;
// }
switch($act){
case 'update' :
if(!(empty($jsonData['id']) || empty($jsonData['judul']))){
$id = $jsonData['id'];
$judul = $jsonData['judul'];
$sql = "UPDATE tbrekaphasil SET judul_final = :judul WHERE id = :id";
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':id', $id);
$stmt->bindParam(':judul', $judul);
$stmt->execute();
$error = $stmt->errorInfo();
$isError = true;
if ($error[0] == '00000') {
$isError = false;
}
if ($isError) {
echo json_encode(
[
'status' => false,
'msg' => 'Terjadi kesalahan teknis!!!',
]
);
} else {
echo json_encode(
[
'status' => true,
'msg' => 'Berhasil mengubah data!!!',
]
);
}
}else{
echo json_encode([
'status' => false,
'msg' => "Parameter tidak lengkap",
]);
exit;
}
break;
default :
echo json_encode([
'status' => false,
'msg' => "Parameter tidak lengkap",
]);
exit;
}