121 lines
3.2 KiB
PHP
Executable file
121 lines
3.2 KiB
PHP
Executable file
<?php
|
|
/**
|
|
* ZAP factory
|
|
*/
|
|
class ZAPZap {
|
|
private $tpl = '';
|
|
private $folder;
|
|
private $height;
|
|
private $width;
|
|
private $words;
|
|
|
|
public function __construct() {
|
|
ob_start();
|
|
if (!isset($_SESSION['collages']) || $_SESSION['collages'] <= 0) {
|
|
$this->destroySession();
|
|
$this->tpl .= ob_get_clean();
|
|
return;
|
|
}
|
|
|
|
$this->width = $_SESSION['width'];
|
|
$this->height = $_SESSION['height'];
|
|
$this->folder = $_SESSION['folder'];
|
|
$this->words = $_SESSION['words'];
|
|
|
|
if (!empty($this->words)) {
|
|
// Still downloading source images for the words.
|
|
$this->showFoundImage();
|
|
} elseif (empty($_SESSION['images'])) {
|
|
// Start a new collage.
|
|
$this->buildNextCollage();
|
|
} else {
|
|
// Add another source image to the current collage.
|
|
$imgName = array_shift($_SESSION['images']);
|
|
$image = $this->createImage($_SESSION['collageNr']);
|
|
$image->addToCanvas($imgName);
|
|
}
|
|
$this->tpl .= ob_get_clean();
|
|
}
|
|
|
|
/**
|
|
* Build the next collage if any remain, otherwise finish.
|
|
*/
|
|
private function buildNextCollage() {
|
|
if ($_SESSION['collages'] <= 0) {
|
|
$this->destroySession();
|
|
return;
|
|
}
|
|
|
|
// On the very first collage, load the downloaded source images.
|
|
// On later collages, reuse the original list.
|
|
if (!isset($_SESSION['imgOriginal'])) {
|
|
$_SESSION['images'] = ImgTools::convertGifsToPng($this->retrieveImages());
|
|
$_SESSION['imgOriginal'] = $_SESSION['images'];
|
|
} else {
|
|
$_SESSION['images'] = $_SESSION['imgOriginal'];
|
|
shuffle($_SESSION['images']);
|
|
}
|
|
|
|
if (empty($_SESSION['images'])) {
|
|
$this->destroySession();
|
|
return;
|
|
}
|
|
|
|
// Track the current collage number separately so addToCanvas always
|
|
// reads/writes the same file while this collage is being built.
|
|
$_SESSION['collageNr'] = $_SESSION['collages'];
|
|
$_SESSION['collages']--;
|
|
|
|
$firstIm = array_shift($_SESSION['images']);
|
|
$image = $this->createImage($_SESSION['collageNr']);
|
|
$image->createBasicCanvas($firstIm);
|
|
}
|
|
|
|
private function createImage($collages) {
|
|
return new ImgProcess($this->folder, $this->width, $this->height, $collages);
|
|
}
|
|
|
|
private function destroySession() {
|
|
if (Session::destroy()) {
|
|
$this->tpl .= "<p>" . ERROR_PREFIX . "Image ready</p>";
|
|
} else {
|
|
$this->tpl .= "<p>" . ERROR_PREFIX . "Strange... Could not end PHP session";
|
|
}
|
|
return;
|
|
}
|
|
|
|
private function setSessionVar($key, $value) {
|
|
$_SESSION[$key] = $value;
|
|
}
|
|
|
|
private function showFoundImage() {
|
|
$keyWord = array_shift($this->words);
|
|
$search = new ImgSearch($this->folder, $keyWord);
|
|
$imageUrl = $search->getImage();
|
|
|
|
if ($imageUrl) {
|
|
ImgIOTools::urlOnScreen($imageUrl);
|
|
} else {
|
|
ImgIOTools::urlOnScreen(ZAP_APP_BASE_DIR . DIRECTORY_SEPARATOR
|
|
. ZAP_WEB_DIR . DIRECTORY_SEPARATOR
|
|
. 'images' . DIRECTORY_SEPARATOR . 'error_noHit.png');
|
|
}
|
|
$this->setSessionVar('words', $this->words);
|
|
}
|
|
|
|
private function retrieveImages() {
|
|
$img_ar = glob('{' . $this->folder . DIRECTORY_SEPARATOR .'*.jpg,'
|
|
. $this->folder . DIRECTORY_SEPARATOR .'*.png,'
|
|
. $this->folder . DIRECTORY_SEPARATOR .'*.jpeg,'
|
|
. $this->folder . DIRECTORY_SEPARATOR .'*.JPG,'
|
|
. $this->folder . DIRECTORY_SEPARATOR .'*.gif'
|
|
. '}', GLOB_BRACE);
|
|
shuffle($img_ar);
|
|
return $img_ar;
|
|
}
|
|
|
|
public function getContent() {
|
|
return $this->tpl;
|
|
}
|
|
}
|
|
?>
|