1<?php 2/** 3 * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 4 * @author Andreas Gohr <gohr@cosmocode.de> 5 */ 6 7if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../../').'/'); 8define('DOKU_DISABLE_GZIP_OUTPUT', 1); 9require_once(DOKU_INC.'inc/init.php'); 10require_once(DOKU_INC.'inc/common.php'); 11require_once(DOKU_INC.'inc/pageutils.php'); 12require_once(DOKU_INC.'inc/httputils.php'); 13require_once(DOKU_INC.'inc/pluginutils.php'); 14require_once(DOKU_INC.'inc/auth.php'); 15session_write_close(); 16 17 // load plugin 18 $pl =& plugin_load('syntax','panoview'); 19 20 $data = array(); 21 // get parameters 22 list($data['zoom'],$data['col'],$data['row']) = explode('-',$_GET['tile']); 23 $data['id'] = cleanID($_GET['image']); 24 $data['file'] = mediaFN($data['id']); 25 $data['mtime'] = @filemtime($data['file']); 26 27 // check auth and existance 28 if(auth_quickaclcheck(getNS($data['id']).':X') < AUTH_READ) gfx_error('noauth'); 29 if(!$data['mtime']) $pl->gfx_error('notfound'); 30 31 // calculate zoom level scaling 32 $data['ts'] = 256; 33 list($data['width'],$data['height']) = getimagesize($data['file']); 34 $data['scale'] = (int)pow(2,$data['zoom']); 35 $data['max'] = max($data['width'],$data['height']); 36 $data['inv'] = $data['max'] / ($data['ts'] * $data['scale']); 37 if($data['inv'] < 1.0) $pl->gfx_error('maxzoom'); 38 39 // calculate tile boundaries 40 $data['tlx'] = (int) ($data['col'] * $data['ts'] * $data['inv']); 41 $data['tly'] = (int) ($data['row'] * $data['ts'] * $data['inv']); 42 $data['brx'] = (int) ($data['tlx'] + ($data['ts'] * $data['inv'])); 43 $data['bry'] = (int) ($data['tly'] + ($data['ts'] * $data['inv'])); 44 if($data['tlx'] > $data['width'] || $data['tly'] > $data['height']) $pl->gfx_error('blank'); 45 46 // cache times 47 $data['cache'] = getCacheName($data['file'],'.pv.'.$data['zoom'].'-'.$data['col'].'-'.$data['row'].'.jpg'); 48 $data['cachet'] = @filemtime($data['cache']); 49 50 // (re)generate 51 if($data['cachet'] < $data['mtime']){ 52 $pl->tile_lock($data); 53 if($conf['im_convert']){ 54 $pl->tile_im($data); 55 }else{ 56 $pl->tile_gd($data); 57 } 58 $pl->tile_unlock($data); 59 } 60 61 // send 62 header('Content-type: image/jpeg'); 63 http_conditionalRequest(max($data['mtime'],$data['selft'])); 64 http_sendfile($data['cache']); 65 readfile($data['cache']); 66 67 68//Setup VIM: ex: et ts=4 enc=utf-8 : 69