[], 'success' => [], 'warning' => [], 'danger' => [] ]; try { $data = Storage::get($id); } catch(Exception $ex) { $alerts['danger'][] = '❌ Error reading database'; } if (empty($data)) { $data = [ 'img' => '', 'name' => '', 'url' => '', 'desc' => '' ]; } $gallery = []; if (file_exists("uppies/$id/gallery")) { foreach(scandir("uppies/$id/gallery") as $g) { if (in_array($g, ['.', '..', '.thumbs', '.DS_Store'])) continue; $gallery[] = $g; } } if ($_SERVER["REQUEST_METHOD"] === 'POST' && isset($_GET['upload'])) { $upload = htmlspecialchars($_GET['upload']); http_response_code(202); # 202 is abused for errors, because uikit requires 2xx responses $targetDir = "uppies/${id}/${upload}/"; $file = $_FILES["files"]; $fileName = basename($file["name"][0]); // Create the uploads directory if it doesn't exist if (!is_dir($targetDir)) { mkdir($targetDir, 0775, true); } // check if the file is actually an image if (getimagesize($file["tmp_name"][0]) === false) { exit("❌ Error: File is not a valid image."); } // allow only specific image extensions if (!in_array(strtolower(pathinfo($fileName, PATHINFO_EXTENSION)), ["psd", "tiff", "jpg", "jpeg", "png", "gif"])) { exit("❌ Error: Only JPG, JPEG, PNG and GIF files allowed."); } // limit file size if ($file["size"][0] > 200 * 1024 * 1024) { exit("❌ Error: File too large (max. 200 MB)"); } // Move uploaded file to the target directory if (move_uploaded_file($file["tmp_name"][0], $targetDir . $fileName)) { if ($upload === 'avatar') { $data['img'] = $targetDir . $fileName; try { Storage::set($id, $data); } catch(Exception $ex) { exit("❌ Database error."); } } http_response_code(200); exit(($upload === 'avatar'? $targetDir : '') . $fileName); } else { exit("❌ Write Error."); } exit("❌ General error."); } else if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['desc']) && isset($_POST['name']) && isset($_POST['url'])) { $data['name'] = htmlspecialchars(trim($_POST['name'])); $data['url'] = htmlspecialchars(trim($_POST['url'])); $data['desc'] = htmlspecialchars(trim($_POST['desc'])); if (!empty($data['name']) && !empty($data['desc']) && !empty($data['url'])) { try { Storage::set($id, $data); Telegram::report("EF Conbook Artist Credits Submission\nname: ". $data['name'] ."\nurl: ". $data['url'] ."\ntext:\n". $data['desc']); $alerts['success'][] = '✅ Entry saved'; } catch(Exception $ex) { $alerts['danger'][] = $ex; } } } ?> Artist Credits

Conbook Art Submission Form

A place for you to submit art to the Eurofurence Conbook and provide crediting information.
Deadline: End of July!

Please make sure your images are large enough for DIN A4 printing. Don't worry about cropping or aspect ratio, we will adjust them into the layout ourselves.

Personal Link

Bookmark or save it to edit your entry at a later time. Do not share it, unless with people you want to enable editing your information:

Your Credits Entry

Upload Your Profile Image
PNG, JPG or GIF
min. 500 x 500 @ 300 dpi
SELECT FILE

Your Contribution