From 31a405b076d31c094bcb235202770bb699112177 Mon Sep 17 00:00:00 2001 From: Kuzirashi <kuzirashi@interia.pl> Date: Mon, 21 Apr 2014 20:55:58 +0200 Subject: [PATCH] Improved Admin Reports page. When you click on title it also toggles elements visibility(more intuitive). Fixed bugs, which resolves #55 and finally closes #26. JavaScript, CSS, PHP code optimisations. Still pure JavaScript. --- admin_reports.php | 95 ++++++++++++++++++++++++----------------------- 1 file changed, 48 insertions(+), 47 deletions(-) diff --git a/admin_reports.php b/admin_reports.php index df8b3fb..778425b 100644 --- a/admin_reports.php +++ b/admin_reports.php @@ -1,5 +1,7 @@ -<?php require_once 'engine/init.php'; -protect_page(); admin_only($user_data); +<?php +require_once 'engine/init.php'; +protect_page(); +admin_only($user_data); include 'layout/overall/header.php'; // Report status types. When a player make new report it will be default to 0. @@ -19,16 +21,15 @@ $statusChangeLog = array(0,5); $hideStatus = array(3, 4, 5); // Fetch data from SQL -$reportsData = mysql_select_multi("SELECT id, name, posx, posy, posz, report_description, date, status FROM znote_player_reports ORDER BY id DESC;"); +$reportsData = mysql_select_multi('SELECT id, name, posx, posy, posz, report_description, date, status FROM znote_player_reports ORDER BY id DESC;'); // If sql data is not empty if ($reportsData !== false) { // Order reports array by ID for easy reference later on. $reports = array(); - for ($i = 0; $i < count($reportsData); $i++) { - foreach ($statusTypes as $key => $value) { - if ($key == $reportsData[$i]['status']) $reports[$key][$reportsData[$i]['id']] = $reportsData[$i]; - } - } + for ($i = 0; $i < count($reportsData); $i++) + foreach ($statusTypes as $key => $value) + if ($key == $reportsData[$i]['status']) + $reports[$key][$reportsData[$i]['id']] = $reportsData[$i]; } // POST logic (Update report and give player points) @@ -40,9 +41,9 @@ if (!empty($_POST)) { $customPoints = getValue($_POST['customPoints']); $reportId = getValue($_POST['id']); - $changelogReportId = getValue($_POST['changelogReportId']); - $changelogValue = getValue($_POST['changelogValue']); - $changelogText = getValue($_POST['changelogText']); + $changelogReportId = &$_POST['changelogReportId']; + $changelogValue = &$_POST['changelogValue']; + $changelogText = &$_POST['changelogText']; $changelogStatus = ($changelogReportId !== false && $changelogValue === '2' && $changelogText !== false) ? true : false; if ($customPoints !== false) $price = (int)($price + $customPoints); @@ -101,11 +102,14 @@ if (!empty($_POST)) { } elseif (!empty($_GET)) { // Fetch GET data $action = getValue($_GET['action']); - $playerName = getValue($_GET['playerName']); + $playerName = getValue($_GET['name']); $reportId = getValue($_GET['id']); // Fetch the report we intend to modify - foreach ($reports as $sid => $sa) foreach ($sa as $rid => $ra) if ($rid == $reportId) $report = $reports[$sid][$reportId]; + foreach ($reports as $sid => $sa) + foreach ($sa as $rid => $ra) + if ($rid == $reportId) + $report = $reports[$sid][$reportId]; // Create html form ?> @@ -117,19 +121,16 @@ if (!empty($_POST)) { <br>Set status: <select name="status"> <?php - foreach ($statusTypes as $sid => $sname) { - if ($sid != $report['status']) echo "<option value='$sid'>$sname</option>"; - else echo "<option value='$sid' selected>$sname</option>"; - } + foreach ($statusTypes as $sid => $sname) + echo ($sid != $report['status']) ? "<option value='$sid'>$sname</option>" : "<option value='$sid' selected>$sname</option>"; ?> </select><br> Give user points: <select name="price"> <option value='0'>0</option> <?php - foreach ($config['paypal_prices'] as $price) { + foreach ($config['paypal_prices'] as $price) echo "<option value='$price'>$price</option>"; - } ?> </select> + <input name="customPoints" type="text" style="width: 50px;" placeholder="0"><br> <?php @@ -154,20 +155,18 @@ if (!empty($_POST)) { // If sql data is not empty if ($reportsData !== false) { - // Render HTML - //data_dump($reports); ?> <center> <?php foreach ($reports as $statusId => $statusArray) { ?> - <h2><?php echo $statusTypes[$statusId]; ?> (<span id="status-<?php echo $statusId; ?>">Visible</span>)</h2> + <h2 class="statusType"><?php echo $statusTypes[$statusId]; ?> (<span id="status-<?php echo $statusId; ?>">Visible</span>)</h2> <table class="table tbl" border="0" cellspacing="1" cellpadding="4" width="100%"> <thead> <tr class="yellow" onclick="javascript:toggle('<?php echo $statusId; ?>')"> - <td width="38%"><b><font color=white><center>Info</center></font></b></td> - <td><b><font color=white><center>Description</center></font></b></td> + <td width="38%">Info</td> + <td>Description</td> </tr> </thead> <?php @@ -182,9 +181,7 @@ if ($reportsData !== false) { <br><b>Reported:</b> <?php echo getClock($report['date'], true, true); ?> <br><b>Status:</b> <?php echo $statusTypes[$report['status']]; ?>. <a href="?action=edit&name=<?php echo $report['name'].'&id='.$report['id']; ?>">Edit</a> </td> - <td> - <center><?php echo $report['report_description']; ?></center> - </td> + <td><?php echo $report['report_description']; ?></td> </tr> </tbody> <?php @@ -196,38 +193,42 @@ if ($reportsData !== false) { <?php } else echo "<h2>No reports submitted.</h2>"; ?> +<style> +tr.yellow[onclick] td { + font-weight: bold; + color: white; + text-align: center; +} +tbody[class^=row] td:last-of-type { + text-align: center; +} +</style> <script type="text/javascript"> // Hide and show tables // Written in clean javascript to make it cross-layout compatible. function toggle(statusId) { - statusId = ''+statusId; - var divStatus = 'row'+statusId; - var msgStatus = 'status-'+statusId; + var divStatus = 'row' + statusId, + msgStatus = 'status-' + statusId; // Change visibility status statusElement = document.getElementById(msgStatus); - console.log(statusElement, statusId, divStatus, msgStatus); - - if (statusElement !== null) { - if (statusElement.innerHTML == 'Visible') statusElement.innerHTML = 'Hidden'; - else statusElement.innerHTML = 'Visible'; - // Show/hide elements. - var elements = document.getElementsByClassName(divStatus); - for (var i = 0; i < elements.length; i++) { - if (elements[i].style.display == 'none') { - elements[i].style.display = 'table-header-group'; - } else { - elements[i].style.display = 'none'; - } - } - } + statusElement.innerHTML = (statusElement.innerHTML == 'Visible') ? 'Hidden' : 'Visible'; + // Show/hide elements. + var elements = document.getElementsByClassName(divStatus); + for (var i = 0; i < elements.length; i++) + elements[i].style.display = (elements[i].style.display == 'none') ? 'table-header-group' : 'none'; } <?php // Hide configured tables by default - foreach ($hideStatus as $statusId) { + foreach ($hideStatus as $statusId) echo "toggle($statusId);"; - } ?> + + var st = document.body.querySelectorAll('.statusType'); + for(i = 0; i < st.length; i++) + st[i].addEventListener('click', function(e) { + toggle(e.currentTarget.querySelector('span').id.match(/(\d)+/)[0]); + }); </script> <?php include 'layout/overall/footer.php'; ?> \ No newline at end of file