diff --git a/Banned.jpg b/Banned.jpg deleted file mode 100644 index e92aea2..0000000 Binary files a/Banned.jpg and /dev/null differ diff --git a/Database.sql b/Database.sql index f99bf4c..70942d4 100644 --- a/Database.sql +++ b/Database.sql @@ -284,13 +284,14 @@ CREATE TABLE IF NOT EXISTS `ip_timezones` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Gecachte Zeitzonen und Landinfos zu IPs (gehashed) für Besucherboards'; CREATE TABLE IF NOT EXISTS `userdata` ( - `id` varchar(36) NOT NULL DEFAULT '', - `userdata` varchar(8192) NOT NULL, - `lastreq` bigint(255) NOT NULL, - PRIMARY KEY (`id`), - KEY `lastreq` (`lastreq`), - KEY `Idx_id` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Userdaten Cache für Besucherboards'; + `id` VARCHAR(36) NOT NULL DEFAULT '' COLLATE 'utf8mb4_general_ci', + `userdata` VARCHAR(8192) NOT NULL COLLATE 'utf8mb4_general_ci', + `image` MEDIUMBLOB NOT NULL, + `lastreq` BIGINT(255) NOT NULL, + PRIMARY KEY (`id`) USING BTREE, + INDEX `lastreq` (`lastreq`) USING BTREE, + INDEX `Idx_id` (`id`) USING BTREE +) COMMENT='Userdaten Cache für Besucherboards' COLLATE='utf8mb4_general_ci' ENGINE=InnoDB; CREATE TABLE IF NOT EXISTS `_datastore` ( `id` varchar(64) NOT NULL, diff --git a/NoImage.jpg b/NoImage.jpg deleted file mode 100644 index 2f29a63..0000000 Binary files a/NoImage.jpg and /dev/null differ diff --git a/Update.jpg b/Update.jpg deleted file mode 100644 index 6dca56f..0000000 Binary files a/Update.jpg and /dev/null differ diff --git a/UserImage/00000000-0000-0000-0000-000000000000.jpg b/UserImage/00000000-0000-0000-0000-000000000000.jpg deleted file mode 100644 index 2f29a63..0000000 Binary files a/UserImage/00000000-0000-0000-0000-000000000000.jpg and /dev/null differ diff --git a/UserImage/00000000-0000-0000-0000-000000000001.jpg b/UserImage/00000000-0000-0000-0000-000000000001.jpg deleted file mode 100644 index e92aea2..0000000 Binary files a/UserImage/00000000-0000-0000-0000-000000000001.jpg and /dev/null differ diff --git a/UserImage/00000000-0000-0000-0000-000000000002.jpg b/UserImage/00000000-0000-0000-0000-000000000002.jpg deleted file mode 100644 index 6dca56f..0000000 Binary files a/UserImage/00000000-0000-0000-0000-000000000002.jpg and /dev/null differ diff --git a/UserImage/bb7c4d4e-ff01-4b76-84f0-c218601bb15b.jpg b/UserImage/bb7c4d4e-ff01-4b76-84f0-c218601bb15b.jpg deleted file mode 100644 index c740d16..0000000 Binary files a/UserImage/bb7c4d4e-ff01-4b76-84f0-c218601bb15b.jpg and /dev/null differ diff --git a/classes/Framework.MySql.Class.php b/classes/Framework.MySql.Class.php index 52e76cb..a70dd21 100644 --- a/classes/Framework.MySql.Class.php +++ b/classes/Framework.MySql.Class.php @@ -69,7 +69,7 @@ } } $Query = str_ireplace($ReplaceData[0], $ReplaceData[1], $Query); - $MysqlRes = new MySqlResult(mysqli_query($this->Connection, $Query), $Query); + $MysqlRes = new MySqlResult(mysqli_query($this->Connection, $Query), $Query, $this->Connection); return $MysqlRes; } @@ -98,10 +98,10 @@ private $Error; private $QueryString; - public function __construct($QueryRes, $QueryStr) + public function __construct($QueryRes, $QueryStr, $Connection) { $this->MySqlRes = $QueryRes; - $this->Error = mysqli_error($this->Connection); + $this->Error = mysqli_error($Connection); $this->QueryString = $QueryStr; } diff --git a/classes/GridUserInfo.php b/classes/GridUserInfo.php index f833215..cfd2eeb 100644 --- a/classes/GridUserInfo.php +++ b/classes/GridUserInfo.php @@ -12,7 +12,6 @@ //Predfined images private $ErrorImage = "/9j/4AAQSkZJRgABAQEAYABgAAD/4QBoRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAAExAAIAAAARAAAATgAAAAAAAABgAAAAAQAAAGAAAAABcGFpbnQubmV0IDQuMi4xMAAA/9sAQwADAgIDAgIDAwMDBAMDBAUIBQUEBAUKBwcGCAwKDAwLCgsLDQ4SEA0OEQ4LCxAWEBETFBUVFQwPFxgWFBgSFBUU/9sAQwEDBAQFBAUJBQUJFA0LDRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU/8AAEQgBAAEAAwEhAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A+y6KACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACkoAhmvre3VmlnjjCjJLMBgVjy+PvDUDbZNf01G9GukH9aALVn4r0XUmAtdVs7g+kU6t/I1pJKkn3HVvoc0APooAKKACigAooAKKACigAooAKKACigAooAKKACigAqC8vrfT7d57qaO3hQZaSRgoH4mgDxzxl+05o2jtJb6LA2qzrkeafliB/ma8X8SfHTxd4klctqJsYWGPJsxsUfj1/WgDiLvVLy/kMlzdTTuerSSFj+tVtxPU5oAVZGXoxH0NbGk+NNd0Jw1jqt1b46BZTj8qAPTvCP7Tuu6SyRazDHqtv0MgGyUD6jg/lXvPgj4seHvHkYFjeLFdgZa1n+WQfQd/woA7KigAooAKKACigAooAKKACigAooAKKACigAooA5L4hfErSfh5prT30u+6YfubVOXkP9B7mvkvx/wDFTW/iBeM95OYbMH93aQkhFHv6mgDjaKACigAooAKkt7mWzmWWCRopVOVdDgigD3r4U/tFzWbQaX4mczQZ2pffxL/v+o96+kLW6hvbeOeCRZoZBuV0OQR6g0AS0UAFFABRQAUUAFFABRQAUUAFFABRQAVyPxK+IVl8PPDst7OyvdMNtvb55kb/AAHU0AfGHibxNf8Ai3V59R1Gdpp5GzyeFHYAdhWTQA+GGS4lWOJGkkY4CqMk16t4J/Zz8Q+Jo1ub8ro9o3K+cMyN9F7fjQB63on7MfhTTwpvWudScdQ8mxT+C4P610sPwQ8EwLtXQoSP9pmY/qaAKl/+z/4Ivo2A0n7O5GBJDM4I/DOP0rhPEn7KdpIrPomqSQvj5YrobgTj1H+FAHh/i74e674JuDFqtjJEmcLMvzRt9GFc5QAV7H8DvjNN4UvYtG1aYvpEzbUkfnyGPv8A3aAPq2ORZo1dGDowyGU5BFPoAKKACigAooAKKACigAooAKKACigCvfX0Om2U91cOI4IUMjs3QADJNfEnxR8f3PxB8UT3sjMLSMmO2i7IgPH4mgDj61PDXhu+8Waxb6bp0Xm3EzYHoo7knsKAPrf4X/Bb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"; private $BlockedImage = "/9j/4AAQSkZJRgABAQEAYABgAAD/4QBoRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAAExAAIAAAARAAAATgAAAAAAAABgAAAAAQAAAGAAAAABcGFpbnQubmV0IDQuMi4xMAAA/9sAQwADAgIDAgIDAwMDBAMDBAUIBQUEBAUKBwcGCAwKDAwLCgsLDQ4SEA0OEQ4LCxAWEBETFBUVFQwPFxgWFBgSFBUU/9sAQwEDBAQFBAUJBQUJFA0LDRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU/8AAEQgBAAEAAwEhAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A+y6KACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACig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/wCIL/wvq1vqWm3DW13C25XXv6gjuD6V9kfCr4qWHxK0jeu221WAf6TaE8j/AGl9VP6dKAO0vFVrOcP9wowb6Yr89rjH2iXHTcf50AfaXwJZm+E3h4v18qQfh5r4/Su9oAKKACigAooAKKACigAryf8AaY1E2fwzlhBwbq5ii+oBLf8AstAHyJRQAUUAFFABRQB97eA4/J8DeHYx0XTrdfyiWue+OujtrXwu1qNF3PCi3C/8AYMf0BoA+KqKACigArR8P+IL/wALavb6lps7W13Ccq46H1BHcH0oA+nl+PWl678LNX1IutrrENv5L2eeTK42qU9Vyc+2DmvlHlm9SaAPvH4e6QdB8D6HYMNrw2kYcf7RGW/UmuhoAKKACigAooAKKACigArwj9rO6KeG9Cts8SXbyf8AfKY/9moA+Y6KACigAooAKKAPvP4e3kV/4E8PTwtujawgA+oQAj8CCK3Li3jureSCZBJFIpR0YcMpGCDQB8L/ABI8FzeA/F19pUit5Ct5ls7fxxEnaff0+oNcxQAUUAFFABXoPwR8CN448cWqyxF9OsSLm6OPlIB+VD/vEfkDQB9pUUAFFABRQAUUAFFABRQAV89/tcZ+x+GPTzLj+UdAHzhRQAUUAFFABRQB9L/sxfEOG40x/Ct5JsuYC0tpuPDoTllHuDk/Q+1e+UAcH8XPhdbfErQhGrLb6pbZa1uCOM90b/ZP6HmvjfXNCv8Aw3qc2n6lbSWl3CcNHIP1HqPcUAUKKACigDa8J+EdT8a6xFp2l27TzOfmbHyRr3Zj2Ar7P+HHgCy+HXhyLTbU+bM3z3FwRgyv3P0HQD0oA6qigAooAKKACigAooAKKACqmoaRY6sEF9ZW94EyUFxEsm3PXGRxQBS/4Q/Qf+gJpv8A4CR/4Uf8IfoP/QE03/wEj/woAP8AhD9B/wCgJpv/AICR/wCFH/CH6D/0BNN/8BI/8KAD/hD9B/6Amm/+Akf+FH/CH6D/ANATTf8AwEj/AMKAD/hD9B/6Amm/+Akf+FH/AAh+g/8AQE03/wABI/8ACgCS38L6NaTJNBpFjDMhyskdsisp9QQOK1KACuZ8bfDvQ/iBZiDVrQPIgPlXMfyyx/RvT2PFAHz94q/Zb17TppH0S6h1W26qkh8qUexzwfrn8BXAX3wk8Z6fIUl8Nak5H/PCAyj80zQBJp/we8aanIFi8N38ee9xF5I/8fxXovhH9ljU7yZJfEN9HYWw5a3tT5kre27ov15oA+gfCfgvR/BOmiy0izS2j6u/V5D6s3UmtygAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooA//9k="; - private $UpdateImage = "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8nso7k+1e4eH9Ig0XTY7W3HTl37u3c0AaNFABRQAUUAFFABRQAUUAFFABRQBW1Gxt9Rs5La7jEkTjBB/mPevHfFfhe60KcuA0tkx+SUDp7N6GgDnaKANnRvEmp6RhbS4JiH/ACyf5l/LtXaab8SLd1C6jaPG/d4juX8jyP1oA37fxloc4H+mrGfSRSKtjxHoxGRqVr/38FAEM/izQ4R82oRN7Jlv5VjX/wARNNhUi0hnuX7cbF/M8/pQBx2seNtW1HciSC1hP8MPBx7nrXMkkkknJPJJoASr+jaTd6veC3soy7fxN/Cg9SaAPZPDHh+20Gz8uL553H72Ujlj/QVtUAFFABRQAUUAFFABRQAUUAFFABRQAUyeGO4haKdFkjYYZWGQRQB514n8AMGa40Q5XqbdjyP90/0Nef3NvNazNDcxPFKvBVxgigCKigAooAKKAClAJOAMmgDrvDnge+1Fklvg1pa9TuHzsPYdvxr1HSdLtNKtRBYwiNO57sfUnvQBdooAKKACigAooAKKACigAooAKKACigAooAKo6ppNjqkey+to5ewYj5h9D1oA4rVvhwjZfS7sp/0zmGR/30P8K5e98Ga3ak/6IZR6xMGoAyLjTb23P7+zuI/96MiqpBBwQQaAJobS5nOIbeaQ/wCyhNalp4V1q6I8uwmUHvINn86AOj0v4cXMjBtSukhTukQ3Mfx6D9a7XRvDGl6Thra3DSj/AJayfM3/ANb8KANqigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKAP/9k="; private $Uuid; private $HomeUri; @@ -34,17 +33,13 @@ private $OSHeaders = array(); private $MySql; - private $WorkingPath; - private $ImagesPath; - public function __construct($Uuid, $HomeUri, $ImagesPath) + public function __construct($Uuid, $HomeUri) { if (empty($Uuid) || empty($HomeUri)) {return;} $this->Uuid = $Uuid; $this->HomeUri = $HomeUri; - $this->WorkingPath = realpath(dirname(__FILE__)); - $this->ImagesPath = $ImagesPath; $this->MySql = new MySql($GLOBALS["CONFIG"]["mysql"]["user"], $GLOBALS["CONFIG"]["mysql"]["pass"], $GLOBALS["CONFIG"]["mysql"]["db"], $GLOBALS["CONFIG"]["mysql"]["server"]); //Process OpenSim header fields @@ -57,25 +52,10 @@ //Remove cached profile images after 60 days but process this cleanup every 5 days only if ($this->HelpValue("IMAGE.LAST.CLEANTIME") + 86400 * 5 < time()) { - $this->HelpValue("IMAGE.LAST.CLEANTIME", time()); - $Files = glob($this->ImagesPath."/UserImage/*.jpg"); - foreach ($Files as $File) - { - if (is_file($File) && time() - filemtime($File) >= 86400 * 60) - {unlink($File);} - } - //Also delete the cached metadata + //Delete the cached metadata $this->MySql->query("DELETE FROM userdata WHERE lastreq < {0}", array(time() - 86400 * 60)); } - //Process pre defined images - if (!file_exists($this->ImagesPath."/UserImage/00000000-0000-0000-0000-000000000000.jpg")) - {file_put_contents($this->ImagesPath."/UserImage/00000000-0000-0000-0000-000000000000.jpg", base64_decode($this->ErrorImage));} - if (!file_exists($this->ImagesPath."/UserImage/00000000-0000-0000-0000-000000000001.jpg")) - {file_put_contents($this->ImagesPath."/UserImage/00000000-0000-0000-0000-000000000001.jpg", base64_decode($this->BlockedImage));} - if (!file_exists($this->ImagesPath."/UserImage/00000000-0000-0000-0000-000000000002.jpg")) - {file_put_contents($this->ImagesPath."/UserImage/00000000-0000-0000-0000-000000000002.jpg", base64_decode($this->UpdateImage));} - //Do the magic $this->LastRequest = time(); if ($this->ExistsInCache()) //User exists in cache? @@ -123,8 +103,7 @@ $Cache = $this->MySql->query("SELECT * FROM userdata WHERE id = {0} LIMIT 1", array($this->Uuid))->fetch(); $this->FromJson($Cache["userdata"]); $this->LastUpdate = $Cache["lastreq"]; - if (file_exists($this->ImagesPath."/UserImage/".$this->Uuid.".jpg")) - {$this->ProfileImageBlob = file_get_contents($this->ImagesPath."/UserImage/".$this->Uuid.".jpg");} + $this->ProfileImageBlob = $Cache["image"]; } //Magic function @@ -197,10 +176,7 @@ $this->HomeRegionName = "Unknown"; $this->HomeRegionUri = ""; $this->HomeRegionPos = "<0, 0, 0>"; - if (file_exists($this->ImagesPath."/UserImage/".$this->Uuid.".jpg")) - {$this->ProfileImageBlob = file_get_contents($this->ImagesPath."/UserImage/".$this->Uuid.".jpg");} - else - {$this->ProfileImageBlob = base64_decode($this->ErrorImage);} + $this->ProfileImageBlob = base64_decode($this->ErrorImage); } private function RequestUserSeviceUris() @@ -289,10 +265,7 @@ } private function AddToCache() - { - $this->MySql->query("REPLACE INTO userdata(id, userdata, lastreq)VALUES({0}, {1}, {2})", array($this->Uuid, $this->ToJson(), $this->LastRequest)); - file_put_contents($this->ImagesPath."/UserImage/".$this->Uuid.".jpg", $this->ProfileImageBlob); - } + {$this->MySql->query("REPLACE INTO userdata(id, userdata, lastreq, image)VALUES({0}, {1}, {2}, {3})", array($this->Uuid, $this->ToJson(), $this->LastRequest, $this->ProfileImageBlob));} public function ToArray() { @@ -308,6 +281,7 @@ "title" => $this->UserTitle, "home" => $this->HomeRegionName, "homelocation" => $this->HomeRegionPos, + "img" => $this->ProfileImageBlob, "homeuri" => $this->HomeRegionUri); } else diff --git a/index.php b/index.php index fba918c..e88c686 100644 --- a/index.php +++ b/index.php @@ -72,7 +72,7 @@ if (!empty($SingleUser[0]) && !empty($SingleUser[1])) { //The magic is done here - $UserInfo = new GridUser($SingleUser[0], $SingleUser[1], realpath(dirname(__FILE__))); + $UserInfo = new GridUser($SingleUser[0], $SingleUser[1]); $Info = $UserInfo->ToArray(); if ($Info !== false) { @@ -80,6 +80,7 @@ "name" => $Info["firstname"]." ".$Info["lastname"], "grid" => $Info["homegrid"], "title" => $Info["title"], + "img" => $Info["img"], "unix" => date("d.m.Y H:i", (int)$SingleUser[2])); } } @@ -134,7 +135,7 @@ } } } - $UserImage = MakeBorderOnImage(imagecreatefromjpeg("UserImage/".$UserMem[$i]["uuid"].".jpg"), "ChalkBorder"); + $UserImage = MakeBorderOnImage(imagecreatefromstring($UserMem[$i]["img"]), "ChalkBorder"); imagecopyresampled($Image, $UserImage, $x, $y, 0, 0, $ImgSize, $ImgSize, imagesx($UserImage), imagesy($UserImage)); if ($i < 2)