Merge branch 'levi' into 'master'

Levi

See merge request photowall/photowall-webapp!3
This commit is contained in:
Wiesner András 2021-01-22 14:16:31 +01:00
commit 696b0fbb0f
2 changed files with 263 additions and 4 deletions

257
approval.php Normal file
View File

@ -0,0 +1,257 @@
<?php
// munkamenet bekapcsolása, ez minden előtt kell legyen
session_start();
// belépés ellenőrzése
// jelszó hash generálás: echo password_hash('P@ssw0rd', PASSWORD_DEFAULT);
define('HASHED_PASSWORD', '$2y$10$mt9434TWI2q9QXhSoywyZephTAIEJHb5e1MK45GakfoEndZBfXn8a');
if (isset($_POST['password']) && password_verify($_POST['password'], HASHED_PASSWORD)===true) {
$_SESSION['logged_in'] = true;
}
// kiléptetés
if (isset($_POST['logout'])){
// remove all session variables
session_unset();
// destroy the session
session_destroy();
}
if ($_SESSION['logged_in']) {
// ezeket majd külön fájba kéne tenni
include_once "globals.php";
// olyan szöveget ad vissza, amibe csak angol ABC betűi és számok szerepelnek (KL)
function only_alpha_numeric($input)
{
return preg_replace("/[^a-zA-Z0-9_]+/", "", $input);
}
// csatlakozás az adatbázishoz
function open_sql_connection()
{
return mysqli_connect(SQL_IP, SQL_USER, SQL_PASS, SQL_DB);
}
// Globális SQL-kapcsolat
$dbconn = open_sql_connection();
function get_images($last_No=-1, $n=10){
global $dbconn;
// felhasználótól jött paraméterek ellenőrzése
$last_No = intval($last_No);
$n = intval($n);
$query = "SELECT * FROM publish_table";
$query .= " WHERE Confirmed=0";
$query .= " AND No>$last_No";
$query .= " ORDER BY No";
$query .= " LIMIT $n";
$result = $dbconn->query($query);
$data = [];
while ($row = $result->fetch_assoc()) {
$data[] = $row;
}
return $data;
}
function set_approval($Image_FileName, $approved){
global $dbconn;
// felhasználótól jött paraméterek ellenőrzése
$approved = $approved === 'true' ? 1 : 0;
$Image_FileName = $dbconn->real_escape_string($Image_FileName);
// jóváhagyás mező beállítása és ellenőrzöttnek jelölés
$query = "UPDATE publish_table SET Approved=$approved, Confirmed=1 WHERE Image_FileName='$Image_FileName';";
$res = $dbconn->query($query);
return $res; // true ha sikeres, false ha valami hiba történt
}
if (isset($_POST["action"])) {
$action = only_alpha_numeric($_POST["action"]);
// parancs kiválasztása
switch ($action) {
case "get_images": // kép adatok lekérése
if (isset($_POST["last_No"]) && isset($_POST["n"])) {
echo json_encode(get_images($_POST["last_No"], $_POST["n"]));
}
break;
case "set_approval": // jováhagyás beállítása
if (isset($_POST["Image_FileName"]) && isset($_POST["approved"])) {
echo json_encode(set_approval($_POST["Image_FileName"], $_POST["approved"]));
}
break;
}
exit(0);
}
}
?>
<!DOCTYPE html>
<html lang="hu">
<head>
<meta charset="utf-8"/>
<meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0'>
<title>képek jóváhagyása - Fotófal</title>
<script src="js/o.js"></script>
<script src="js/socket.js"></script>
<script src="js/slider.js"></script>
<script src="js/phw.js"></script>
<script src="js/color.js"></script>
<?php if ($_SESSION['logged_in']) { ?>
<script>
// ezeket lehetne külön tenni
function l(msg){console.log(msg);}
function request(url, method, data){
return new Promise( (resolve,reject) => {
var formData;
if(data){
formData = new FormData();
for (var k in data) {
formData.append(k, data[k]);
}
}
fetch(url, {
method: method,
body: formData,
})
.then(response => response.text())
.then(data => resolve(data))
.catch((error) => {
console.error('Error: ', error);
reject(error);
});
});
}
</script>
<script>
const MAX_TABLE_ROWS = 10;
document.addEventListener("DOMContentLoaded", () => {
fill_table();
});
function fill_table(){
var table_container = o('table_container');
var max_new_rows = MAX_TABLE_ROWS - table_container.children.length;
var last_No = table_container.children.length ? table_container.children[table_container.children.length-1].details.No : -1;
request(
'approval.php',
'POST',
{
action: 'get_images',
last_No: last_No,
n: max_new_rows,
}
)
.then(data => {
data = JSON.parse(data);
if (data.length) {
data.forEach(image_data => {
table_container.appendChild(render_row(image_data));
});
} else if (table_container.innerHTML == '') {
table_container.innerHTML = '<h3>Jelenleg nincs jóváhagyásra váró elem :)</h3>'
}
});
}
//
function render_row(image_data){
var row_container = document.createElement('div');
row_container.innerHTML = `
<hr />
<div>
<button id="button_approve" onclick="set_approval(event);" >Engedélyez</button>
<button id="button_hide" onclick="set_approval(event);" >Entüntet</button>
</div>
<img src="ARTWORKS/thumbnails/${image_data["Image_FileName"]}" />
<div>
<span>Alkotó: ${image_data["Author"]}</span><br />
<span>Cím: ${image_data["Title"]}</span><br />
<span>Leírás: ${image_data["Description"]}</span><br />
<span>Feltöltés ideje: ${image_data["TS"]}</span><br />
</div>
`;
row_container.details = image_data;
return row_container;
}
function set_approval(event){
var approved = event.target.id === 'button_approve';
var row_container = event.target.parentElement.parentElement;
var image_data = row_container.details;
request(
'approval.php',
'POST',
{
action: 'set_approval',
Image_FileName: image_data['Image_FileName'],
approved: approved,
}
)
.then(data => {
if (data==='true') {
// ha sikeres a kérés, a sor eltüntetése
row_container.parentElement.removeChild(row_container);
} else {
alert('Valami nem stimmel, kérlek próbáld újra.');
}
// újabb elem betöltése, ha van
fill_table();
});
}
</script>
<style>
.settings_container {
padding: 10px;
background-color: blue;
}
#table_container > div > img {
margin: 5px;
}
#table_container > div > div {
display: inline-block;
}
</style>
<?php } ?>
<link href="phw.css" rel="stylesheet">
</head>
<body>
<?php if ($_SESSION['logged_in']) { ?>
<div class="settings_container" >
<!-- TODO: valahogy be lehessen állítani,
hogy ne csak az jelenjen meg, amit már egyszer leellenőriztek -->
<form method="POST" >
<input type="submit" name="logout" value="Kilépés" >
</form>
</div>
<div id="table_container" ></div>
<?php } else { ?>
<form method="POST" >
<input type="password" name="password" />
<input type="submit" value="Belépés" >
</form>
<?php } ?>
<!-- TESZTVERZIÓ -->
<section class="testversion-sign">TESZTVERZIÓ</section>
</body>
</html>

View File

@ -197,7 +197,7 @@ function publish_image($artwork_details)
$uid = md5_file($thumb_filename); // valami random...
$aspect_ratio = $img_sizes[0] / $img_sizes[1];
$query = "INSERT INTO publish_table (Author,AuthorGroup,Title,Description,Image_FileName,AspectRatio,ColorMean,Approved,UID,TS) VALUES('$author', '$group', '$title', '$desc', '$final_filename', $aspect_ratio, '$color_mean', TRUE, '$uid', CURRENT_TIMESTAMP);";
$query = "INSERT INTO publish_table (Author,AuthorGroup,Title,Description,Image_FileName,AspectRatio,ColorMean,Approved,Confirmed,UID,TS) VALUES('$author', '$group', '$title', '$desc', '$final_filename', $aspect_ratio, '$color_mean', 1, 0, '$uid', CURRENT_TIMESTAMP);";
$res = mysqli_query($dbconn, $query);
@ -227,7 +227,7 @@ function get_general_info()
$info = [];
// összes kép számának lekérdezése
$query = "SELECT COUNT(No) FROM publish_table WHERE Approved;";
$query = "SELECT COUNT(No) FROM publish_table WHERE Approved=1;";
$ret = (int)mysqli_query($dbconn, $query)->fetch_assoc()["COUNT(No)"];
$info["total_artwork_count"] = $ret;
@ -249,7 +249,8 @@ function get_batch($offset, $n)
$batch = [];
// kívánt mennyiségű képinformáció lekérdezése
$query = "SELECT Image_FileName,AspectRatio,ColorMean,Author,AuthorGroup,Title,Description,UID FROM publish_table WHERE Approved ORDER BY No DESC Limit $n OFFSET $offset;";
$query = "SELECT Image_FileName,AspectRatio,ColorMean,Author,AuthorGroup,Title,Description,UID FROM publish_table WHERE Approved=1 ORDER BY No DESC Limit $n OFFSET $offset;";
$ret = mysqli_query($dbconn, $query);
while (($row = $ret->fetch_assoc()) != NULL) {
$batch[] = $row;
@ -269,7 +270,8 @@ function get_update_batch($last_uid)
$batch = [];
// az utolsó UID óta érkezett sorok kiválogatása
$query = "SELECT Image_FileName,AspectRatio,ColorMean,Author,AuthorGroup,Description,Title,UID FROM publish_table WHERE No > (SELECT No FROM publish_table WHERE UID = '$last_uid') AND Approved";
$query = "SELECT Image_FileName,AspectRatio,ColorMean,Author,AuthorGroup,Description,Title,UID FROM publish_table WHERE No > (SELECT No FROM publish_table WHERE UID = '$last_uid') AND Approved=1;";
$ret = mysqli_query($dbconn, $query);
while (($row = $ret->fetch_assoc()) != NULL) {
$batch[] = $row;