<?php
/**
 * Shows a thumbnail or a full size screenshot.
 *
 * Mandatory parameters:
 *  - iId, image identifier
 * 
 * Optional parameters:
 *  - bThumbnail, "true" if we want to see a thumbnail, "false" otherwise
 *  - sREQUEST_METHOD
 * 
 * TODO:
 *  - rename and document sREQUEST_METHOD
 *  - replace iId with iScreenshotId
 */

// application environment
require("path.php");
require(BASE."include/incl.php");
require_once(BASE."include/screenshot.php");

// an image doesn't have a link, so a cookie makes no sense
header("Set-Cookie: ");
header("Pragma: ");

// is the user supposed to be viewing this image ?
if(!$_SESSION['current']->canViewImage($aClean['iId']))
    util_show_error_page_and_exit("Insufficient privileges.");

$oScreenshot = new Screenshot($aClean['iId']);
$fImage = fopen(appdb_fullpath("data/screenshots/".$oScreenshot->sUrl), "rb");

/* if we can open the image we should get its last modified time and read */
/* a few bytes from its header information and close it */
if($fImage)
{
   $fstat_val = fstat($fImage);
   $iModTime = $fstat_val['mtime'];
   $sMagic = fread($fImage, 8); /* read 8 bytes from the header, that lets us idenfity the type of
                                 image without loading it */
   fclose($fImage); /* don't leave the fopened image open */
}

/* identify what kind of image this is, if we can't identify it */
/* we should report that its a bad image */
if (strcmp("\x89PNG\r\n\x1A\n", $sMagic)==0) 
{
    header("Content-Type: image/png");
} else if (preg_match("^\xD8\xFF^", $sMagic)) {
    header("Content-Type: image/jpeg");
} else {
    header("500 Bad image format");
    exit;
}

header("Cache-Control: public");
header("Expires: ");

/* if the browser is asking if the file was modified since a particular date */
/* and the date is the same that the file was modified, then we can report */
/* that the file wasn't modified, the browser can used the cached image */
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && 
    $iModTime == pHttpDate($_SERVER['HTTP_IF_MODIFIED_SINCE']))
{
   header("HTTP/1.0 304 Not Modified");
   exit;
}

header("Last-Modified: ".fHttpDate($iModTime));

if(!$aClean['bThumbnail'])
    $oScreenshot->output_screenshot(false);
else
    $oScreenshot->output_screenshot(true);
?>