diff --git a/index.php b/index.php
index 071de6b..c0bf4f9 100644
--- a/index.php
+++ b/index.php
@@ -52,11 +52,12 @@
-
diff --git a/interface.php b/interface.php
index faaa3f0..ec4d66f 100644
--- a/interface.php
+++ b/interface.php
@@ -21,12 +21,14 @@ function only_alpha_numeric($input)
// felhasználó IP címének meghatározása... nem is olyan triviális
// https://stackoverflow.com/a/2031935
-function get_client_ip(){
- foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED') as $key){
- if (array_key_exists($key, $_SERVER) === true){
- foreach (explode(',', $_SERVER[$key]) as $ip){
+function get_client_ip()
+{
+ foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED') as $key) {
+ if (array_key_exists($key, $_SERVER) === true) {
+ foreach (explode(',', $_SERVER[$key]) as $ip) {
$ip = trim($ip); // just to be safe
- if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false){
+ if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 |
+ FILTER_FLAG_IPV6 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) {
return $ip;
}
}
@@ -56,7 +58,7 @@ function incoming_from_uid($uid)
* -1: ismeretlen hiba
* -2: MIME-hiba
* -3: mérethiba
- * -3: elérte a feltöltési limitet
+ * -4: elérte a feltöltési limitet
* string: egyedi azonosító, a feltöltés sikerült
*/
@@ -71,7 +73,7 @@ function process_uploaded_file($file_info)
$ip = mysqli_real_escape_string($dbconn, get_client_ip()); // escape, biztos ami biztos
$query = "SELECT COUNT(No) FROM server_access WHERE Timestamp > TIMESTAMPADD(MINUTE, -10, CURRENT_TIMESTAMP) AND IP = '$ip';";
$ret = (int)mysqli_query($dbconn, $query)->fetch_assoc()["COUNT(No)"];
- if ($ret === false || $ret >= UPLOAD_LIMIT_10MIN){
+ if ($ret === false || $ret >= UPLOAD_LIMIT_10MIN) {
return LIMIT_ERROR;
}
@@ -108,7 +110,25 @@ function process_uploaded_file($file_info)
return $tmp_uid;
}
+// csoportnév ellenőrzése
+function verify_group($g)
+{
+ // EZ ÍGY NEM JÓ!! EZT LE KELLENE TÖLTENI A KÖZI OLDALÁRÓL!!!
+ $groups = ["bíbor", "tejszín", "borostyán", "azúr", "türkiz", "aquamarin", "burgundi", "zafír", "mangó",
+ "levendula", "bambusz", "csipkebogyó", "mustár", "parázs", "áfonya"];
+
+ return in_array($g, $groups);
+}
+
// kép publikálása
+// visszatérési értékek:
+// 0: OK
+// -1: a kép már fel van töltve
+// -2: hibás csoportnév
+
+define("DUPLICATE_IMAGE", -1);
+define("NONEXISTENT_GROUP", -2);
+
define("THUMB_LARGEST_SIDE", 400);
function publish_image($artwork_details)
{
@@ -117,6 +137,23 @@ function publish_image($artwork_details)
$MAX_THUMB_IMAGE_FILESIZE_STR = "100k"; // bélyegkép maximális mérete
$THUMB_IMAGE_LARGEST_DIM = THUMB_LARGEST_SIDE; // bélyegkép hosszabb oldalának mérete
+ // -----------------------------
+
+ // adatbázis...
+ global $dbconn;
+
+ // felhasználótól jött adatok, ellenőrizni kell
+ $author = mysqli_real_escape_string($dbconn, $artwork_details["author"]);
+ $title = mysqli_real_escape_string($dbconn, $artwork_details["title"]);
+ $desc = mysqli_real_escape_string($dbconn, $artwork_details["desc"]);
+ $group = mysqli_real_escape_string($dbconn, $artwork_details["group"]);
+
+ // csoport ellenőrzése
+ if (!verify_group($group)) {
+ return NONEXISTENT_GROUP;
+ }
+
+ // fájlnevek meghatározása
$incoming_filename = incoming_from_uid(only_alpha_numeric($artwork_details["uid"]));
$final_filename = date("Y_m_d_H_i_s") . bin2hex(openssl_random_pseudo_bytes(4)) . ".jpg";
@@ -126,16 +163,17 @@ function publish_image($artwork_details)
// korrekciós parancs
$autocorrect = $artwork_details["autocorrect"];
$img_autocorrect = $autocorrect ? "-normalize -sharpen 5" : "";
+ $strip_exifdata = "-strip";
// ha a fájl nagyobb, mint 2MB, akkor visszatömörítjük
$filesize = filesize($incoming_filename);
if ($filesize > $MAX_LARGE_IMAGE_FILESIZE) {
- $cmd = "convert -define jpeg:extent=$MAX_LARGE_IMAGE_FILESIZE_STR $img_autocorrect $incoming_filename $large_filename";
+ $cmd = "convert -define jpeg:extent=$MAX_LARGE_IMAGE_FILESIZE_STR $img_autocorrect $strip_exifdata $incoming_filename $large_filename";
shell_exec($cmd);
unlink($incoming_filename); // törlés az incoming-ból
} else { //...ha nem volt túl nagy a fájl
if ($autocorrect) {
- $cmd = "convert $img_autocorrect $incoming_filename $large_filename";
+ $cmd = "convert $img_autocorrect $strip_exifdata $incoming_filename $large_filename";
shell_exec($cmd);
unlink($incoming_filename); // törlés az incoming-ból
} else {
@@ -145,27 +183,21 @@ function publish_image($artwork_details)
// bélyegkép elkészítése
$thumb_filename = THUMBNAIL_DIR . DIRECTORY_SEPARATOR . $final_filename;
- $cmd = "convert -define jpeg:extent=$MAX_THUMB_IMAGE_FILESIZE_STR -resize \"$THUMB_IMAGE_LARGEST_DIM>\" $large_filename $thumb_filename";
+ $cmd = "convert $strip_exifdata -define jpeg:extent=$MAX_THUMB_IMAGE_FILESIZE_STR -thumbnail \"$THUMB_IMAGE_LARGEST_DIM>\" $large_filename $thumb_filename";
shell_exec($cmd);
// átlagszín kiszámítása
$cmd = "convert $thumb_filename -resize 1x1\! -format \"rgb(%[fx:int(255*r+.5)],%[fx:int(255*g+.5)],%[fx:int(255*b+.5)])\" info:-";
$color_mean = shell_exec($cmd);
- // beírás az adatbázisba
- global $dbconn;
-
//echo mysqli_error($dbconn);
$img_sizes = getimagesize($thumb_filename);
- // felhasználótól jött adatok, ellenőrizni kell
- $author = mysqli_real_escape_string($dbconn, $artwork_details["author"]);
- $title = mysqli_real_escape_string($dbconn, $artwork_details["title"]);
- $desc = mysqli_real_escape_string($dbconn, $artwork_details["desc"]);
$uid = md5_file($thumb_filename); // valami random...
$aspect_ratio = $img_sizes[0] / $img_sizes[1];
- $query = "INSERT INTO publish_table (Author,Title,Description,Image_FileName,AspectRatio,ColorMean,Approved,UID,TS) VALUES('$author', '$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,UID,TS) VALUES('$author', '$group', '$title', '$desc', '$final_filename', $aspect_ratio, '$color_mean', TRUE, '$uid', CURRENT_TIMESTAMP);";
$res = mysqli_query($dbconn, $query);
@@ -173,7 +205,7 @@ function publish_image($artwork_details)
if ($res === false) {
unlink($large_filename);
unlink($thumb_filename);
- return -1;
+ return DUPLICATE_IMAGE;
}
return 0;
@@ -217,7 +249,7 @@ function get_batch($offset, $n)
$batch = [];
// kívánt mennyiségű képinformáció lekérdezése
- $query = "SELECT Image_FileName,AspectRatio,ColorMean,Author,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 ORDER BY No DESC Limit $n OFFSET $offset;";
$ret = mysqli_query($dbconn, $query);
while (($row = $ret->fetch_assoc()) != NULL) {
$batch[] = $row;
@@ -237,7 +269,7 @@ function get_update_batch($last_uid)
$batch = [];
// az utolsó UID óta érkezett sorok kiválogatása
- $query = "SELECT Image_FileName,AspectRatio,ColorMean,Author,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";
$ret = mysqli_query($dbconn, $query);
while (($row = $ret->fetch_assoc()) != NULL) {
$batch[] = $row;
diff --git a/js/phw.js b/js/phw.js
index 38ea13b..b8e4169 100644
--- a/js/phw.js
+++ b/js/phw.js
@@ -23,6 +23,7 @@ var upload_popup_id = "uploadpup";
var publish_btn_id = "publishbtn";
var image_uid = null;
+var processing_busy = false; // feldolgozás folyamatban
function determine_sliding_unit() {
if (window.innerWidth > 600) { // számítógépes megjelenítés
@@ -45,21 +46,24 @@ function pup_reset() {
// mezők törlése
o("author").value = "";
+ o("author_group").value = "";
o("imgtitle").value = "";
o("description").value = "";
+ o("fileselector").value = "";
}
// kép publikálása
function publish() {
- if (image_uid == null) { // csak, ha érvényes...
+ if (processing_busy || image_uid == null) { // csak, ha érvényes...
return;
}
// mezők kinyerése
- let author = o("author").value;
- let title = o("imgtitle").value;
- let desc = o("description").value;
+ let author = o("author").value.trim();
+ let title = o("imgtitle").value.trim();
+ let desc = o("description").value.trim();
let autocorr = o("autocorrchkbox").checked;
+ let group = o("author_group").value.trim();
// ha a kötelező mezők nincsenek kitöltve, akkor nem lehet beküldeni
if (author.trim() === "" || title.trim() === "") {
@@ -78,7 +82,8 @@ function publish() {
author: author,
title: title,
desc: desc,
- autocorrect: autocorr
+ autocorrect: autocorr,
+ group: group
}
// küldés
@@ -90,24 +95,43 @@ function publish() {
req.onreadystatechange = state => {
if (req.status === 200 && req.readyState === 4) {
- close_upload_pup(); // popup resetelése
+ let close_if_needed = true;
if (Number(req.response) === 0) {
alert("Sikeres feltöltés!");
+
+ req_update(); // frissítés kérése
} else if (Number(req.response) === -1) {
alert("Ugyanezt képet már korábban feltöltötték!");
+ } else if (Number(req.response) === -2) {
+ alert("A megadott csoport nem létezik!");
+
+ close_if_needed = false; // nem kell bezárni, mert valószínűleg csak elírta
+ o("author_group").focus(); // fókuszálás a csoport mezőre
} else {
alert("Valami nem stimmel!\nHa ismételten nem sikerül, kérlek jelezd a hibát!");
}
+
+ // bezárás, ha szükséges
+ if (close_if_needed) {
+ // UID elfelejtése
+ image_uid = null;
+
+ // popup resetelése
+ close_upload_pup();
+ }
+
+ processing_busy = false;
+ o(publish_btn_id).innerText = "Mehet!";
}
};
req.open("POST", "interface.php");
req.send(formData);
- // UID elfelejtése
- image_uid = null;
- o(publish_btn_id).innerText = "Türelem..."
+ // feldolgozás folyamatban
+ processing_busy = true;
+ o(publish_btn_id).innerHTML = "Türelem...
";
}
// feltöltés után kapott válasz feldolgozása
@@ -172,6 +196,8 @@ function open_upload_pup() {
let display = o("display");
display.style.filter = "blur(10px)";
scroll_enable(false);
+
+ o("fileselector").value = "";
}
// feltöltőablak bezárása
@@ -222,7 +248,6 @@ var wall_height = 0; // a fal magassága, pixelben
var dynamic_load_distance = 200; // ennyi pixellel a fal alja előtt indítja a dinamikus betöltést
var dynamic_loading_under_way = false; // dinamikus töltés folyamatban, ne indítsunk új requestet
var update_interval = 10000; // automatikus frissítés 10 másodpercenként
-var max_scaled_size_factor = 1.2; // hányszorosa lehet a nagyított kép az eredetinek
var thumbnails = [];
@@ -247,7 +272,7 @@ function init_photowall() {
// automatikus frissítés
setInterval(() => {
req_update();
- }, 10000);
+ }, update_interval);
}
// inicializálási lánc
@@ -446,10 +471,15 @@ function compose_wall() {
window.scrollTo(0, scroll_pos);
}
+// frissítés folyamatban
+var update_in_progress = false;
+
// frissítés lekérése
function req_update() {
- async_req("update", recv_update, {last_uid: last_uid});
-}
+ if (!update_in_progress) {
+ update_in_progress = true;
+ async_req("update", recv_update, {last_uid: last_uid});
+ }}
// frissítés fogadása
function recv_update(state, resp) {
@@ -475,6 +505,9 @@ function recv_update(state, resp) {
// fal összeállítása
compose_wall();
+
+ // update kész
+ update_in_progress = false;
}
@@ -633,6 +666,7 @@ function place_artcaptions() {
}
var viewer_open = false;
+var group_logo_repository = "https://mkkozi.hu/user/plugins/mkk-groups/logos";
// képnézegető megynitása
function open_viewer(details) {
@@ -652,6 +686,13 @@ function open_viewer(details) {
captions_bgcolor.a = 0.6;
o("artcaptions").style.backgroundColor = captions_bgcolor.to_rgba();*/
+ // csoportlogó megjelenítése
+ let glogo = document.createElement("img");
+ glogo.src = `${group_logo_repository}/${details.AuthorGroup}.png`;
+ glogo.alt = `(${details.AuthorGroup})`;
+ glogo.classList.add("art-author-group");
+ o("artauthor").appendChild(glogo);
+
// nézegető visszaállítása
change_viewer_magnification(1.0, true);
change_viewer_offset({x: 0, y: 0}, true);
diff --git a/phw.css b/phw.css
index 0ed7a77..0ce8471 100644
--- a/phw.css
+++ b/phw.css
@@ -299,6 +299,12 @@ span.art-desc {
margin-top: 0.5em;
}
+img.art-author-group {
+ height: 1.45em;
+ margin-left: 0.5em;
+ vertical-align: middle;
+}
+
@keyframes hide-art-caption {
0% { max-height: 100vh; background-color: rgba(0, 0, 0, 0.6); }
80% { max-height: 100vh; background-color: rgba(0, 0, 0, 0.6); }