2026-07-15 13:57:05 +02:00
|
|
|
<?php
|
|
|
|
|
/**
|
|
|
|
|
* Class is responsible for starting up ZAP machine
|
|
|
|
|
*/
|
2026-07-18 11:56:54 +02:00
|
|
|
class ZAPDisplay implements ZAPHandler {
|
2026-07-15 13:57:05 +02:00
|
|
|
/**
|
|
|
|
|
* Template file
|
|
|
|
|
*/
|
|
|
|
|
private $template = 'display';
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Folder string
|
|
|
|
|
*/
|
|
|
|
|
private $folder = '';
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Words array
|
|
|
|
|
*/
|
|
|
|
|
private $words = array();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Content string
|
|
|
|
|
*/
|
|
|
|
|
private $tpl = '';
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Constructor
|
|
|
|
|
*/
|
|
|
|
|
public function __construct() {
|
|
|
|
|
ob_start();
|
2026-07-19 21:27:13 +02:00
|
|
|
|
|
|
|
|
// Validate CSRF token
|
|
|
|
|
if (
|
|
|
|
|
empty($_POST['csrf_token'])
|
|
|
|
|
|| empty($_SESSION['csrf_token'])
|
|
|
|
|
|| !hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'])
|
|
|
|
|
) {
|
|
|
|
|
http_response_code(400);
|
|
|
|
|
echo '<p>Invalid or missing security token. Please go back and try again.</p>';
|
|
|
|
|
die();
|
|
|
|
|
}
|
|
|
|
|
|
2026-07-15 13:57:05 +02:00
|
|
|
$this->folder = $this->createFolder();
|
|
|
|
|
$this->words = $this->handleWords();
|
|
|
|
|
|
|
|
|
|
$_SESSION['words'] = $this->words;
|
|
|
|
|
$_SESSION['folder'] = $this->folder;
|
|
|
|
|
$_SESSION['collages'] = (int) $_POST['collages']; //number of zaps
|
|
|
|
|
$_SESSION['width'] = (int) $_POST['width'];
|
|
|
|
|
$_SESSION['height'] = (int) $_POST['height'];
|
|
|
|
|
$_SESSION['date'] = ZAP_MOMENT;
|
|
|
|
|
|
|
|
|
|
$ver = ZAP_VERSION;
|
|
|
|
|
include getZAPTemplate($this->template);
|
|
|
|
|
$this->tpl .= ob_get_clean();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Create folder and return path
|
|
|
|
|
* @return string $folder path or throws exception
|
|
|
|
|
*/
|
|
|
|
|
private function createFolder() {
|
|
|
|
|
try {
|
2026-07-19 20:17:37 +02:00
|
|
|
$suffix = bin2hex(random_bytes(4));
|
2026-07-15 13:57:05 +02:00
|
|
|
$folder = ZAP_APP_BASE_DIR . DIRECTORY_SEPARATOR
|
2026-07-19 20:17:37 +02:00
|
|
|
. ZAP_SESSIONS_DIR . DIRECTORY_SEPARATOR . 'zap_' . ZAP_MOMENT . '_' . $suffix;
|
|
|
|
|
if (!mkdir($folder, 0777, true)) {
|
2026-07-15 13:57:05 +02:00
|
|
|
throw new Exception('<p>' . ERROR_PREFIX . 'Unable to create base dir: ' . $folder . '</p>');
|
|
|
|
|
}
|
|
|
|
|
return $folder;
|
|
|
|
|
} catch (Exception $e) {
|
|
|
|
|
$this->tpl .= $e->getMessage();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Create an array based on post data
|
|
|
|
|
* @return array $words
|
|
|
|
|
*/
|
|
|
|
|
private function handleWords() {
|
|
|
|
|
$words = array();
|
2026-07-20 01:14:00 +02:00
|
|
|
for ($i = 1; $i <= MAX_WORDS; $i++) {
|
|
|
|
|
$key = 'word' . sprintf("%02d", $i);
|
|
|
|
|
if (!empty($_POST[$key])) {
|
|
|
|
|
$words[] = $_POST[$key];
|
|
|
|
|
}
|
2026-07-15 13:57:05 +02:00
|
|
|
}
|
|
|
|
|
return $words;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* return rendered content
|
|
|
|
|
*/
|
|
|
|
|
public function getContent() {
|
|
|
|
|
return $this->tpl;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
?>
|