Accessibility Tools

Skip to main content

Senarai Maklum Balas Awam

{source}<?php
use Joomla\CMS\Factory;
use Joomla\CMS\Uri\Uri;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Session\Session;

defined('_JEXEC') or die;

$app = Factory::getApplication();
$db = Factory::getDbo();

/* =====================================================
HANDLE BUTTON SELESAI
===================================================== */
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['submission_id'])) {

$submissionId = (int) $_POST['submission_id'];
$ulasanAdmin = $_POST['ulasan_admin'] ?? '';

// Ambil tarikh submit
$query = $db->getQuery(true)
->select('DateSubmitted')
->from('mufti5_rsform_submissions')
->where('SubmissionId=' . $submissionId);
$db->setQuery($query);
$dateSubmitted = $db->loadResult();

// Ambil semua field RSForm
$query = $db->getQuery(true)
->select('FieldName, FieldValue')
->from('mufti5_rsform_submission_values')
->where('SubmissionId=' . $submissionId);
$db->setQuery($query);
$values = $db->loadAssocList('FieldName', 'FieldValue');

if ($values) {

// Insert ke table selesai
$query = $db->getQuery(true)
->insert('mufti5_rsform_selesai')
->columns([
'Date_Submitted',
'Tajuk',
'Nama_Penuh',
'Email',
'No_Tel_Bimbit',
'Kategori',
'Aduan_dan_Maklumbalas',
'Ulasan_Admin',
'Tindakan'
])
->values(
$db->quote($dateSubmitted) . ',' .
$db->quote($values['Tajuk'] ?? '') . ',' .
$db->quote($values['Nama_Penuh'] ?? '') . ',' .
$db->quote($values['Email'] ?? '') . ',' .
$db->quote($values['No_Tel_Bimbit'] ?? '') . ',' .
$db->quote($values['Kategori'] ?? '') . ',' .
$db->quote($values['Aduan_dan_Maklumbalas'] ?? '') . ',' .
$db->quote($ulasanAdmin) . ',' .
$db->quote('Selesai')
);
$db->setQuery($query)->execute();

// Padam submission asal
$db->setQuery(
$db->getQuery(true)
->delete('mufti5_rsform_submissions')
->where('SubmissionId=' . $submissionId)
)->execute();

$db->setQuery(
$db->getQuery(true)
->delete('mufti5_rsform_submission_values')
->where('SubmissionId=' . $submissionId)
)->execute();
}

$app->redirect(Uri::getInstance());
}

/* =====================================================
DATA DASHBOARD
===================================================== */

// Count ikut kategori
$db->setQuery("
SELECT sv.FieldValue AS Kategori, COUNT(*) AS total
FROM mufti5_rsform_submission_values sv
WHERE sv.FieldName='Kategori'
GROUP BY sv.FieldValue
");
$counts = $db->loadAssocList('Kategori', 'total');

// Count selesai
$db->setQuery("SELECT COUNT(*) FROM mufti5_rsform_selesai");
$selesaiCount = (int) $db->loadResult();

// Ambil submission aktif
$db->setQuery("
SELECT s.SubmissionId, s.DateSubmitted,
MAX(CASE WHEN v.FieldName='Tajuk' THEN v.FieldValue END) AS Tajuk,
MAX(CASE WHEN v.FieldName='Nama_Penuh' THEN v.FieldValue END) AS Nama_Penuh,
MAX(CASE WHEN v.FieldName='Email' THEN v.FieldValue END) AS Email,
MAX(CASE WHEN v.FieldName='No_Tel_Bimbit' THEN v.FieldValue END) AS No_Tel_Bimbit,
MAX(CASE WHEN v.FieldName='Kategori' THEN v.FieldValue END) AS Kategori,
MAX(CASE WHEN v.FieldName='Aduan_dan_Maklumbalas' THEN v.FieldValue END) AS Aduan_dan_Maklumbalas
FROM mufti5_rsform_submissions s
JOIN mufti5_rsform_submission_values v ON s.SubmissionId=v.SubmissionId
GROUP BY s.SubmissionId
ORDER BY s.SubmissionId DESC
");
$rows = $db->loadObjectList();

// Ambil selesai
$db->setQuery("SELECT * FROM mufti5_rsform_selesai ORDER BY ID DESC");
$rowsSelesai = $db->loadObjectList();
?>


<!-- ================= DASHBOARD ================= -->
<div class="uk-grid-small uk-child-width-1-3@m" uk-grid>
<?php foreach (['Maklumbalas','Cadangan'] as $k): ?>
<div>
<div class="uk-card uk-card-secondary uk-card-body uk-text-center card" data-kat="<?= $k ?>">
<h3><?= $k ?></h3>
<p class="count"><?= $counts[$k] ?? 0 ?></p>
</div>
</div>
<?php endforeach; ?>
<div>
<div class="uk-card uk-card-secondary uk-card-body uk-text-center card" data-kat="Selesai">
<h3>Selesai</h3>
<p class="count"><?= $selesaiCount ?></p>
</div>
</div>
</div>

<h3 id="details" style="margin-top:30px;color:#000;">Senarai</h3>

<table class="uk-table uk-table-divider uk-table-small table-maklumbalas" id="table" style="display:none">
<thead>
<tr>
<th>No</th>
<th>Tarikh</th>
<th>Tajuk</th>
<th>Nama</th>
<th>Email</th>
<th>No Tel</th>
<th>Aduan / Maklumbalas</th>
<th>Tindakan</th>
</tr>
</thead>
<tbody>
<?php $no=1; foreach ($rows as $r): ?>
<tr data-kat="<?= $r->Kategori ?>">
<td><?= $no++ ?></td>
<td><?= $r->DateSubmitted ?></td>
<td><?= htmlspecialchars($r->Tajuk) ?></td>
<td><?= htmlspecialchars($r->Nama_Penuh) ?></td>
<td><?= htmlspecialchars($r->Email) ?></td>
<td><?= htmlspecialchars($r->No_Tel_Bimbit) ?></td>
<td><?= nl2br(htmlspecialchars($r->Aduan_dan_Maklumbalas)) ?></td>
<td>
<form method="post" style="display:inline">
<input type="hidden" name="submission_id" value="<?= $r->SubmissionId ?>">
<textarea name="ulasan_admin"
class="uk-textarea"
rows="2"
placeholder="Ulasan admin (optional)"
style="margin-bottom:6px;">
</textarea>
<button class="uk-button uk-button-primary uk-button-small"
onclick="return confirm('Sahkan aduan ini selesai?')">

Selesai
</button>
</form>
</td>
</tr>
<?php endforeach; ?>

<?php foreach ($rowsSelesai as $r): ?>
<tr data-kat="Selesai">
<td><?= $no++ ?></td>
<td><?= $r->Date_Submitted ?></td>
<td><?= htmlspecialchars($r->Tajuk) ?></td>
<td><?= htmlspecialchars($r->Nama_Penuh) ?></td>
<td><?= htmlspecialchars($r->Email) ?></td>
<td><?= htmlspecialchars($r->No_Tel_Bimbit) ?></td>
<td><?= nl2br(htmlspecialchars($r->Aduan_dan_Maklumbalas)) ?></td>
<td>
<strong><?= $r->Tindakan ?></strong><br>
<small>
<strong>Ulasan :</strong><br>
<?= nl2br(htmlspecialchars($r->Ulasan_Admin)) ?>
</small>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>

<style>
.card { cursor:pointer }
.count { font-size:28px;font-weight:bold }
.table-maklumbalas thead { background:#222;color:#fff }
</style>

<script>
document.querySelectorAll('.card').forEach(card=>{
card.onclick = ()=>{
let k = card.dataset.kat;
document.getElementById('details').innerText = 'Senarai ' + k;
document.getElementById('table').style.display = 'table';
document.querySelectorAll('#table tbody tr').forEach(row=>{
row.style.display = (row.dataset.kat === k) ? 'table-row' : 'none';
});
location.href = '#details';
}
});
</script>

<!-- ================= LOGOUT BUTTON ================= -->
<div style="margin-top:30px; text-align:center;">
<form action="<?= Route::_('index.php?option=com_users&task=user.logout'); ?>" method="post">
<input type="hidden" name="<?= Session::getFormToken(); ?>" value="1" />
<button type="submit" class="btn btn-danger">Log Out</button>
</form>

</div>
{/source}
Adakah ruang menunggu di kaunter selesa, kemas dan bersih?
  • Jabatan Mufti Negeri Perak
    Aras 6, Menara SSM Perak,
    Jalan Basco Kepayang 1,
    Basco Avenue,
    31400 Ipoh, Perak.
  • icontel
    05-2545332
  • iconfax
    05-2419694
  • iconemail
    muftiperak[at]perak[dot]gov[dot]my
White Text Links
Kembali ke Atas