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 page link type. 11*5153720fSfkaag71 */ 12*5153720fSfkaag71class plugin_strata_type_page extends plugin_strata_type { 13*5153720fSfkaag71 function __construct() { 14*5153720fSfkaag71 } 15*5153720fSfkaag71 16*5153720fSfkaag71 function normalize($value, $hint) { 17*5153720fSfkaag71 global $ID; 18*5153720fSfkaag71 19*5153720fSfkaag71 // fragment reference special case 20*5153720fSfkaag71 if(!empty($hint) && substr($hint,-1) == '#') { 21*5153720fSfkaag71 $value = $hint.$value; 22*5153720fSfkaag71 resolve_pageid(getNS($hint),$value,$exists); 23*5153720fSfkaag71 return $value; 24*5153720fSfkaag71 } 25*5153720fSfkaag71 26*5153720fSfkaag71 $base = ($hint?:getNS($ID)); 27*5153720fSfkaag71 28*5153720fSfkaag71 // check for local link, and prefix full page id 29*5153720fSfkaag71 // (local links don't get resolved by resolve_pageid) 30*5153720fSfkaag71 if(preg_match('/^#.+/',$value)) { 31*5153720fSfkaag71 $value = $ID.$value; 32*5153720fSfkaag71 } 33*5153720fSfkaag71 34*5153720fSfkaag71 // resolve page id with respect to selected base 35*5153720fSfkaag71 resolve_pageid($base,$value,$exists); 36*5153720fSfkaag71 37*5153720fSfkaag71 // if the value is empty after resolving, it is a reference to the 38*5153720fSfkaag71 // root starting page. (We can not put the emtpy string into the 39*5153720fSfkaag71 // database as a normalized reference -- this will create problems) 40*5153720fSfkaag71 if($value == '') { 41*5153720fSfkaag71 global $conf; 42*5153720fSfkaag71 $value = $conf['start']; 43*5153720fSfkaag71 } 44*5153720fSfkaag71 45*5153720fSfkaag71 return $value; 46*5153720fSfkaag71 } 47*5153720fSfkaag71 48*5153720fSfkaag71 function render($mode, &$R, &$T, $value, $hint) { 49*5153720fSfkaag71 // render internal link 50*5153720fSfkaag71 // (':' is prepended to make sure we use an absolute pagename, 51*5153720fSfkaag71 // internallink resolves page names, but the name is already resolved.) 52*5153720fSfkaag71 $R->internallink(':'.$value); 53*5153720fSfkaag71 } 54*5153720fSfkaag71 55*5153720fSfkaag71 function getInfo() { 56*5153720fSfkaag71 return array( 57*5153720fSfkaag71 'desc'=>'Links to a wiki page. The optional hint is treated as namespace for the link. If the hint ends with a #, all values will be treated as fragments.', 58*5153720fSfkaag71 'hint'=>'namespace' 59*5153720fSfkaag71 ); 60*5153720fSfkaag71 } 61*5153720fSfkaag71} 62