<?
php
session_start();
// Include database connection
require_once '../auth/[Link]';
// Check if user is logged in
if (!isset($_SESSION['user_id'])) {
header("Location: ../[Link]");
exit();
}
// Get user data
$user_id = $_SESSION['user_id'];
$username = $_SESSION['username'];
$role = $_SESSION['role'];
// Set page title
$page_title = "Profile";
// Fetch user data from database
$query = "SELECT * FROM pengguna WHERE id_pengguna = ?";
$stmt = $conn->prepare($query);
$stmt->bind_param("s", $user_id);
$stmt->execute();
$result = $stmt->get_result();
$user_data = $result->fetch_assoc();
// Fetch researcher profile if exists
$profile_query = "SELECT * FROM profil_peneliti WHERE id_pengguna = ?";
$profile_stmt = $conn->prepare($profile_query);
$profile_stmt->bind_param("s", $user_id);
$profile_stmt->execute();
$profile_result = $profile_stmt->get_result();
$profile_data = $profile_result->fetch_assoc();
// Count user activities
$activity_count_query = "SELECT COUNT(*) as total FROM aktivitas_pengguna WHERE
id_pengguna = ?";
$activity_count_stmt = $conn->prepare($activity_count_query);
$activity_count_stmt->bind_param("s", $user_id);
$activity_count_stmt->execute();
$activity_count_result = $activity_count_stmt->get_result();
$activity_count = $activity_count_result->fetch_assoc()['total'];
// Fetch user activity from database
$activity_query = "SELECT * FROM aktivitas_pengguna WHERE id_pengguna = ? ORDER BY
waktu DESC LIMIT 10";
$activity_stmt = $conn->prepare($activity_query);
$activity_stmt->bind_param("s", $user_id);
$activity_stmt->execute();
$activity_result = $activity_stmt->get_result();
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-
fit=no">
<link rel="apple-touch-icon" sizes="76x76"
href="../assets/material-dashboard/assets/img/[Link]">
<link rel="icon" type="image/png"
href="../assets/material-dashboard/assets/img/[Link]">
<title>QRMS - User Profile</title>
<!-- Fonts and icons -->
<link rel="stylesheet" type="text/css" href="[Link]
family=Roboto:300,400,500,700,900|Roboto+Slab:400,700" />
<!-- Nucleo Icons -->
<link href="../assets/material-dashboard/assets/css/[Link]"
rel="stylesheet" />
<link href="../assets/material-dashboard/assets/css/[Link]"
rel="stylesheet" />
<!-- Font Awesome Icons -->
<script src="[Link]
crossorigin="anonymous"></script>
<!-- Material Icons -->
<link href="[Link]
rel="stylesheet">
<!-- Material Symbols -->
<link href="[Link]
family=Material+Symbols+Rounded:opsz,wght,FILL,[email protected],100..700,0..1,-50..200"
rel="stylesheet" />
<!-- SVG Icons -->
<style>
.svg-icon {
width: 24px;
height: 24px;
display: inline-flex;
align-items: center;
justify-content: center;
}
.svg-icon svg {
width: 100%;
height: 100%;
}
</style>
<!-- CSS Files -->
<link id="pagestyle" href="../assets/material-dashboard/assets/css/material-
[Link]?v=3.0.0" rel="stylesheet" />
<style>
.profile-cover {
background-size: cover;
background-position: center;
}
.profile-stats .card {
transition: all 0.3s ease;
}
.profile-stats .card:hover {
transform: translateY(-5px);
box-shadow: 0 15px 30px rgba(0,0,0,0.1);
}
.activity-timeline .timeline-item {
position: relative;
padding-left: 45px;
margin-bottom: 20px;
}
.activity-timeline .timeline-item:before {
content: '';
position: absolute;
left: 20px;
top: 0;
height: 100%;
width: 2px;
background-color: #e9ecef;
}
.activity-timeline .timeline-item:last-child:before {
height: 20px;
}
.activity-timeline .timeline-icon {
position: absolute;
left: 5px;
top: 0;
width: 30px;
height: 30px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
z-index: 2;
color: white;
}
.activity-timeline .timeline-icon i {
font-size: 16px;
}
.activity-timeline .timeline-content {
padding: 15px;
border-radius: 10px;
background-color: #fff;
box-shadow: 0 2px 12px 0 rgba(0,0,0,0.05);
}
</style>
</head>
<body class="g-sidenav-show bg-gray-200">
<?php include_once '../includes/[Link]'; ?>
<main class="main-content position-relative max-height-vh-100 h-100 border-
radius-lg">
<?php include_once '../includes/[Link]'; ?>
<div class="container-fluid py-4">
<?php if (isset($_GET['updated']) && $_GET['updated'] == 1): ?>
<div class="alert alert-success alert-dismissible text-white fade show"
role="alert">
<span class="alert-icon align-middle">
<span class="material-icons text-md">thumb_up_off_alt</span>
</span>
<span class="alert-text">Your profile has been successfully updated!</span>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-
label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<?php endif; ?>
<div class="row">
<!-- Profile Stats Cards -->
<div class="col-xl-3 col-sm-6 mb-xl-0 mb-4">
<div class="card">
<div class="card-body p-3">
<div class="row">
<div class="col-4 text-center">
<div class="icon icon-shape bg-gradient-primary shadow text-
center border-radius-md">
<i class="fa fa-user opacity-10"></i>
</div>
</div>
<div class="col-8">
<div class="numbers">
<p class="text-sm mb-0 text-capitalize font-weight-bold">Member
Since</p>
<h5 class="font-weight-bolder mb-0">
<?php echo date('M Y',
strtotime($user_data['tanggal_daftar'])); ?>
</h5>
<p class="mb-0 text-sm">
<span class="text-success text-sm font-weight-bolder"><?php
echo floor((time() - strtotime($user_data['tanggal_daftar'])) / (60 * 60 * 24)); ?
></span> days as member
</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-xl-3 col-sm-6 mb-xl-0 mb-4">
<div class="card">
<div class="card-body p-3">
<div class="row">
<div class="col-4 text-center">
<div class="icon icon-shape bg-gradient-success shadow text-
center border-radius-md">
<i class="fa fa-clock opacity-10"></i>
</div>
</div>
<div class="col-8">
<div class="numbers">
<p class="text-sm mb-0 text-capitalize font-weight-bold">Last
Login</p>
<h5 class="font-weight-bolder mb-0">
<?php echo date('d M',
strtotime($user_data['terakhir_login'])); ?>
</h5>
<p class="mb-0 text-sm">
<span class="text-success text-sm font-weight-bolder"><?php
echo date('H:i', strtotime($user_data['terakhir_login'])); ?></span> local time
</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-xl-3 col-sm-6 mb-xl-0 mb-4">
<div class="card">
<div class="card-body p-3">
<div class="row">
<div class="col-4 text-center">
<div class="icon icon-shape bg-gradient-info shadow text-center
border-radius-md">
<i class="fa fa-university opacity-10"></i>
</div>
</div>
<div class="col-8">
<div class="numbers">
<p class="text-sm mb-0 text-capitalize font-weight-
bold">Institution</p>
<h5 class="font-weight-bolder mb-0">
<?php echo htmlspecialchars(substr($user_data['institusi'] ??
'Not Set', 0, 20) . (strlen($user_data['institusi']) > 20 ? '...' : '')); ?>
</h5>
<p class="mb-0 text-sm">
<?php echo htmlspecialchars($profile_data['jabatan_akademik']
?? 'No position set'); ?>
</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-xl-3 col-sm-6">
<div class="card">
<div class="card-body p-3">
<div class="row">
<div class="col-4 text-center">
<div class="icon icon-shape bg-gradient-warning shadow text-
center border-radius-md">
<i class="fa fa-bell opacity-10"></i>
</div>
</div>
<div class="col-8">
<div class="numbers">
<p class="text-sm mb-0 text-capitalize font-weight-
bold">Activities</p>
<h5 class="font-weight-bolder mb-0">
<?php echo $activity_count; ?>
</h5>
<p class="mb-0 text-sm">
<span class="text-success text-sm font-weight-bolder">+<?php
echo min($activity_count, 5); ?></span> recent activities
</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row mt-4">
<div class="col-lg-12 position-relative z-index-2">
<div class="card card-profile">
<div class="card-header text-center border-0 pt-0 pt-lg-2 pb-4 pb-lg-
3">
<div class="d-flex justify-content-between">
<a href="javascript:;" class="btn btn-sm btn-info mb-0 d-none d-lg-
block">Connect</a>
<a href="javascript:;" class="btn btn-sm btn-info mb-0 d-block d-
lg-none"><i class="material-icons text-white">connect_without_contact</i></a>
<a href="edit_profile.php" class="btn btn-sm btn-rose mb-0 d-none
d-lg-block">Edit Profile</a>
<a href="edit_profile.php" class="btn btn-sm btn-rose mb-0 d-block
d-lg-none"><i class="material-icons text-white">edit</i></a>
</div>
</div>
<div class="card-body pt-0">
<div class="row">
<div class="col-4 col-lg-4 col-md-4 col-sm-4">
<div class="p-3 text-center">
<img src="../assets/material-dashboard/assets/img/bruce-
[Link]" alt="profile_image" class="img-fluid rounded-circle border border-2
border-white" style="width: 100px; height: 100px; object-fit: cover;">
</div>
</div>
<div class="col-8 col-lg-8 col-md-8 col-sm-8 my-auto">
<div class="h-100">
<h3 class="mb-1">
<?php echo htmlspecialchars($user_data['nama'] ?? $username);
?>
</h3>
<p class="mb-0 font-weight-normal text-sm">
<span class="badge bg-gradient-<?php
if ($user_data['peran'] == 'Admin') echo 'primary';
elseif ($user_data['peran'] == 'Author') echo 'success';
else echo 'info';
?>"><?php echo htmlspecialchars($user_data['peran'] ??
$role); ?></span>
<?php if ($user_data['is_verified'] == 1): ?>
<span class="badge bg-gradient-success">Verified</span>
<?php else: ?>
<span class="badge bg-gradient-warning">Not Verified</span>
<?php endif; ?>
</p>
</div>
</div>
</div>
<div class="row mt-4">
<div class="col-12 col-md-6">
<div class="card card-plain h-100">
<div class="card-header pb-0 p-3">
<div class="row">
<div class="col-md-8 d-flex align-items-center">
<h6 class="mb-0">Profile Information</h6>
</div>
<div class="col-md-4 text-end">
<a href="edit_profile.php">
<i class="fas fa-user-edit text-secondary text-sm"
data-bs-toggle="tooltip" data-bs-placement="top" title="Edit Profile"></i>
</a>
</div>
</div>
</div>
<div class="card-body p-3">
<ul class="list-group">
<li class="list-group-item border-0 ps-0 pt-0 text-
sm"><strong class="text-dark">Full Name:</strong> <?php echo
htmlspecialchars($user_data['nama'] ?? 'Not available'); ?></li>
<li class="list-group-item border-0 ps-0 text-sm"><strong
class="text-dark">Email:</strong> <?php echo
htmlspecialchars($user_data['email'] ?? 'Not available'); ?></li>
<li class="list-group-item border-0 ps-0 text-sm"><strong
class="text-dark">Institution:</strong> <?php echo
htmlspecialchars($user_data['institusi'] ?? 'Not available'); ?></li>
<li class="list-group-item border-0 ps-0 text-sm"><strong
class="text-dark">Role:</strong> <?php echo
htmlspecialchars($user_data['peran'] ?? 'Not available'); ?></li>
<li class="list-group-item border-0 ps-0 text-sm"><strong
class="text-dark">Registration Date:</strong> <?php echo
htmlspecialchars($user_data['tanggal_daftar'] ?? 'Not available'); ?></li>
<li class="list-group-item border-0 ps-0 text-sm"><strong
class="text-dark">Last Login:</strong> <?php echo
htmlspecialchars($user_data['terakhir_login'] ?? 'Not available'); ?></li>
</ul>
</div>
</div>
</div>
<div class="col-12 col-md-6">
<div class="card card-plain h-100">
<div class="card-header pb-0 p-3">
<div class="row">
<div class="col-md-8 d-flex align-items-center">
<h6 class="mb-0">Researcher Profile</h6>
</div>
<div class="col-md-4 text-end">
<a href="edit_profile.php">
<i class="fas fa-edit text-secondary text-sm" data-bs-
toggle="tooltip" data-bs-placement="top" title="Edit Researcher Profile"></i>
</a>
</div>
</div>
</div>
<div class="card-body p-3">
<?php if ($profile_data): ?>
<ul class="list-group">
<li class="list-group-item border-0 ps-0 pt-0 text-
sm"><strong class="text-dark">NIDN:</strong> <?php echo
htmlspecialchars($profile_data['nidn'] ?? 'Not available'); ?></li>
<li class="list-group-item border-0 ps-0 text-sm"><strong
class="text-dark">NIP:</strong> <?php echo
htmlspecialchars($profile_data['nip'] ?? 'Not available'); ?></li>
<li class="list-group-item border-0 ps-0 text-sm"><strong
class="text-dark">Academic Position:</strong> <?php echo
htmlspecialchars($profile_data['jabatan_akademik'] ?? 'Not available'); ?></li>
<li class="list-group-item border-0 ps-0 text-sm"><strong
class="text-dark">Field of Study:</strong> <?php echo
htmlspecialchars($profile_data['bidang_ilmu'] ?? 'Not available'); ?></li>
<li class="list-group-item border-0 ps-0 text-sm"><strong
class="text-dark">SINTA ID:</strong> <?php echo
htmlspecialchars($profile_data['sinta_id'] ?? 'Not available'); ?></li>
<li class="list-group-item border-0 ps-0 text-sm"><strong
class="text-dark">Google Scholar:</strong> <a href="<?php echo
htmlspecialchars($profile_data['google_scholar_profile'] ?? '#'); ?>"
target="_blank"><?php echo htmlspecialchars($profile_data['google_scholar_profile']
?? 'Not available'); ?></a></li>
<li class="list-group-item border-0 ps-0 text-sm"><strong
class="text-dark">Scopus ID:</strong> <?php echo
htmlspecialchars($profile_data['scopus_id'] ?? 'Not available'); ?></li>
<li class="list-group-item border-0 ps-0 text-sm"><strong
class="text-dark">ORCID:</strong> <a href="<?php echo
htmlspecialchars($profile_data['link_orchid'] ?? '#'); ?>" target="_blank"><?php
echo htmlspecialchars($profile_data['link_orchid'] ?? 'Not available'); ?></a></li>
</ul>
<?php if (!empty($profile_data['deskripsi_profile'])): ?>
<div class="mt-3">
<h6 class="text-dark font-weight-bold">Profile
Description</h6>
<p class="text-sm"><?php echo
nl2br(htmlspecialchars($profile_data['deskripsi_profile'])); ?></p>
</div>
<?php endif; ?>
<?php else: ?>
<div class="alert alert-info text-white" role="alert">
<span class="alert-icon"><i
class="material-icons">info</i></span>
<span class="alert-text">No researcher profile data
available. Please complete your profile.</span>
</div>
<a href="edit_profile.php" class="btn btn-sm bg-gradient-info
mb-0">Complete Profile</a>
<?php endif; ?>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row mt-4">
<div class="col-12">
<div class="card mb-4">
<div class="card-header pb-0">
<div class="row">
<div class="col-6 d-flex align-items-center">
<h6 class="mb-0">User Activity History</h6>
</div>
<div class="col-6 text-end">
<button class="btn btn-outline-primary btn-sm mb-0">View All
Activities</button>
</div>
</div>
</div>
<div class="card-body px-0 pt-0 pb-2">
<div class="activity-timeline p-4">
<?php if ($activity_result->num_rows > 0): ?>
<?php while ($activity = $activity_result->fetch_assoc()): ?>
<?php
$icon = 'info';
$color = 'info';
switch ($activity['jenis_aktivitas'] ?? '') {
case 'Login':
$icon = 'login';
$color = 'success';
break;
case 'Logout':
$icon = 'logout';
$color = 'warning';
break;
case 'Ganti_Password':
$icon = 'lock_reset';
$color = 'primary';
break;
case 'Upload_Dokumen':
$icon = 'upload_file';
$color = 'info';
break;
case 'Submit_Review':
$icon = 'rate_review';
$color = 'danger';
break;
}
?>
<div class="timeline-item">
<div class="timeline-icon bg-gradient-<?php echo $color; ?>">
<i class="fa fa-<?php
switch ($activity['jenis_aktivitas'] ?? '') {
case 'Login': echo 'sign-in'; break;
case 'Logout': echo 'sign-out'; break;
case 'Ganti_Password': echo 'key'; break;
case 'Upload_Dokumen': echo 'upload'; break;
case 'Submit_Review': echo 'comment'; break;
default: echo 'info-circle';
}
?> opacity-10"></i>
</div>
<div class="timeline-content">
<div class="d-flex justify-content-between">
<h6 class="text-dark text-sm font-weight-bold mb-0"><?php
echo htmlspecialchars(str_replace('_', ' ', $activity['jenis_aktivitas'] ??
'Unknown')); ?></h6>
<p class="text-secondary text-xs mt-1 mb-0"><?php echo
date('d M Y, H:i', strtotime($activity['waktu'])); ?></p>
</div>
<p class="text-secondary text-sm mt-3 mb-2"><?php echo
htmlspecialchars($activity['deskripsi'] ?? 'No description'); ?></p>
</div>
</div>
<?php endwhile; ?>
<?php else: ?>
<div class="text-center py-4">
<div class="icon icon-shape icon-xl rounded-circle bg-gradient-
secondary shadow text-center">
<i class="material-icons-round opacity-
10">history_toggle_off</i>
</div>
<h4 class="mt-3">No Activity Records Found</h4>
<p class="text-secondary">Your activity history will appear
here once you start using the system.</p>
</div>
<?php endif; ?>
</div>
</div>
</div>
</div>
</div>
<?php include_once '../includes/[Link]'; ?>
</div>
</main>
<!-- Core JS Files -->
<script src="../assets/material-dashboard/assets/js/core/[Link]"></script>
<script src="../assets/material-dashboard/assets/js/core/[Link]"></
script>
<script src="../assets/material-dashboard/assets/js/plugins/perfect-
[Link]"></script>
<script src="../assets/material-dashboard/assets/js/plugins/smooth-
[Link]"></script>
<script>
var win = [Link]('Win') > -1;
if (win && [Link]('#sidenav-scrollbar')) {
var options = {
damping: '0.5'
}
[Link]([Link]('#sidenav-scrollbar'), options);
}
</script>
</body>
</html>