xref: /plugin/strata/types/link.php (revision 5153720fcc1dd2b6e63035d45f7c2bc32e429371)
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 multi-purpose link type.
11*5153720fSfkaag71 */
12*5153720fSfkaag71class plugin_strata_type_link extends plugin_strata_type {
13*5153720fSfkaag71    function render($mode, &$renderer, &$triples, $value, $hint) {
14*5153720fSfkaag71        if(preg_match('/^[a-zA-Z0-9\.]+>{1}.*$/u',$value)) {
15*5153720fSfkaag71            // Interwiki
16*5153720fSfkaag71            $interwiki = explode('>',$value,2);
17*5153720fSfkaag71            $renderer->interwikilink($value,$hint, strtolower($interwiki[0]), $interwiki[1]);
18*5153720fSfkaag71
19*5153720fSfkaag71        } elseif(preg_match('/^\\\\\\\\[^\\\\]+?\\\\/u',$value)) {
20*5153720fSfkaag71            $renderer->windowssharelink($value,$hint);
21*5153720fSfkaag71
22*5153720fSfkaag71        } elseif(preg_match('#^([a-z0-9\-\.+]+?)://#i',$value)) {
23*5153720fSfkaag71            $renderer->externallink($value,$hint);
24*5153720fSfkaag71
25*5153720fSfkaag71        } elseif(preg_match('<'.PREG_PATTERN_VALID_EMAIL.'>',$value)) {
26*5153720fSfkaag71            $renderer->emaillink($value,$hint);
27*5153720fSfkaag71
28*5153720fSfkaag71        } else {
29*5153720fSfkaag71            $renderer->internallink(':'.$value, $hint);
30*5153720fSfkaag71        }
31*5153720fSfkaag71
32*5153720fSfkaag71        return true;
33*5153720fSfkaag71    }
34*5153720fSfkaag71
35*5153720fSfkaag71    function normalize($value, $hint) {
36*5153720fSfkaag71        // strip off leading [[ and trailing ]] to offer a more
37*5153720fSfkaag71        // user-friendly syntax.
38*5153720fSfkaag71        if(substr($value,0,2) == '[[' && substr($value,-2) == ']]') {
39*5153720fSfkaag71            $value = substr($value,2,-2);
40*5153720fSfkaag71        }
41*5153720fSfkaag71
42*5153720fSfkaag71        if(!preg_match('/^[a-zA-Z0-9\.]+>{1}.*$/u',$value)
43*5153720fSfkaag71           && !preg_match('/^\\\\\\\\[^\\\\]+?\\\\/u',$value)
44*5153720fSfkaag71           && !preg_match('#^([a-z0-9\-\.+]+?)://#i',$value)
45*5153720fSfkaag71           && !preg_match('<'.PREG_PATTERN_VALID_EMAIL.'>',$value)) {
46*5153720fSfkaag71            $page = new plugin_strata_type_page();
47*5153720fSfkaag71            return $page->normalize($value,null);
48*5153720fSfkaag71        }
49*5153720fSfkaag71
50*5153720fSfkaag71        return $value;
51*5153720fSfkaag71    }
52*5153720fSfkaag71
53*5153720fSfkaag71    function getInfo() {
54*5153720fSfkaag71        return array(
55*5153720fSfkaag71            'desc'=>'Creates a link. This type is multi-purpose: it handles external links, interwiki links, email addresses, windows shares and normal wiki links (basically any link DokuWiki knows of). The optional hint will be used as link title.',
56*5153720fSfkaag71            'hint'=>'The link title'
57*5153720fSfkaag71        );
58*5153720fSfkaag71    }
59*5153720fSfkaag71}
60