1*5153720fSfkaag71<?php 2*5153720fSfkaag71/** 3*5153720fSfkaag71 * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 4*5153720fSfkaag71 * @author Brend Wanders <b.wanders@utwente.nl> 5*5153720fSfkaag71 */ 6*5153720fSfkaag71// must be run within Dokuwiki 7*5153720fSfkaag71if(!defined('DOKU_INC')) die('Meh.'); 8*5153720fSfkaag71 9*5153720fSfkaag71/** 10*5153720fSfkaag71 * The image type. 11*5153720fSfkaag71 */ 12*5153720fSfkaag71class plugin_strata_type_image extends plugin_strata_type { 13*5153720fSfkaag71 function isExternalMedia($value) { 14*5153720fSfkaag71 return preg_match('#^(https?|ftp)#i', $value); 15*5153720fSfkaag71 } 16*5153720fSfkaag71 17*5153720fSfkaag71 function normalize($value, $hint) { 18*5153720fSfkaag71 global $ID; 19*5153720fSfkaag71 20*5153720fSfkaag71 // strip leading {{ and closing }} 21*5153720fSfkaag71 $value = preg_replace(array('/^\{\{/','/\}\}$/u'), '', $value); 22*5153720fSfkaag71 23*5153720fSfkaag71 // drop any title and alignment spacing whitespace 24*5153720fSfkaag71 $value = explode('|', $value, 2); 25*5153720fSfkaag71 $value = trim($value[0]); 26*5153720fSfkaag71 27*5153720fSfkaag71 if($this->isExternalMedia($value)) { 28*5153720fSfkaag71 // external image 29*5153720fSfkaag71 // we don't do anything else here 30*5153720fSfkaag71 } else { 31*5153720fSfkaag71 // internal image 32*5153720fSfkaag71 33*5153720fSfkaag71 // discard size string and other options 34*5153720fSfkaag71 $pos = strrpos($value, '?'); 35*5153720fSfkaag71 if($pos !== false ) { 36*5153720fSfkaag71 $value = substr($value, 0, $pos); 37*5153720fSfkaag71 } 38*5153720fSfkaag71 39*5153720fSfkaag71 // resolve page id with respect to selected base 40*5153720fSfkaag71 resolve_mediaid(getNS($ID),$value,$exists); 41*5153720fSfkaag71 } 42*5153720fSfkaag71 43*5153720fSfkaag71 return $value; 44*5153720fSfkaag71 } 45*5153720fSfkaag71 46*5153720fSfkaag71 function render($mode, &$R, &$T, $value, $hint) { 47*5153720fSfkaag71 if(preg_match('/([0-9]+)(?:x([0-9]+))?/',$hint,$captures)) { 48*5153720fSfkaag71 if(!empty($captures[1])) $width = (int)$captures[1]; 49*5153720fSfkaag71 if(!empty($captures[2])) $height = (int)$captures[2]; 50*5153720fSfkaag71 } 51*5153720fSfkaag71 52*5153720fSfkaag71 if($this->isExternalMedia($value)) { 53*5153720fSfkaag71 // render external media 54*5153720fSfkaag71 $R->externalmedia($value,null,null,$width,$height); 55*5153720fSfkaag71 } else { 56*5153720fSfkaag71 // render internal media 57*5153720fSfkaag71 // (':' is prepended to make sure we use an absolute pagename, 58*5153720fSfkaag71 // internalmedia resolves media ids, but the name is already resolved.) 59*5153720fSfkaag71 $R->internalmedia(':'.$value,null,null,$width,$height); 60*5153720fSfkaag71 } 61*5153720fSfkaag71 } 62*5153720fSfkaag71 63*5153720fSfkaag71 function getInfo() { 64*5153720fSfkaag71 return array( 65*5153720fSfkaag71 'desc'=>'Displays an image. The optional hint is treated as the size to scale the image to. Give the hint in WIDTHxHEIGHT format.', 66*5153720fSfkaag71 'hint'=>'size to scale the image to' 67*5153720fSfkaag71 ); 68*5153720fSfkaag71 } 69*5153720fSfkaag71} 70