1<?php 2/** 3 * Plugin Flickr: Embedding Flickr image 4 * 5 * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 6 * @author Norbert Csík <norbert.csik@gmail.com> 7 * @version 0.2.0 8 */ 9 10if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); 11if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); 12require_once(DOKU_PLUGIN.'syntax.php'); 13 14/** 15 * All DokuWiki plugins to extend the parser/rendering mechanism 16 * need to inherit from this class 17 */ 18class syntax_plugin_flickr extends DokuWiki_Syntax_Plugin { 19 20 /** 21 * return some info 22 */ 23 function getInfo(){ 24 return array( 25 'author' => 'Norbert Csík', 26 'email' => 'norbert.csik@gmail.com', 27 'date' => '2006-06-06', 28 'name' => 'Flickr Plugin', 29 'desc' => 'Embedding Flickr image', 30 'url' => 'http://www.csik.net/project:flickr', 31 ); 32 } 33 34 /** 35 * What kind of syntax are we? 36 */ 37 function getType(){ 38 return 'substition'; 39 } 40 41 /** 42 * What kind of syntax do we allow (optional) 43 */ 44// function getAllowedTypes() { 45// return array(); 46// } 47 48 /** 49 * What about paragraphs? (optional) 50 */ 51// function getPType(){ 52// return 'normal'; 53// } 54 55 /** 56 * Where to sort in? 57 */ 58 function getSort(){ 59 return 299; 60 } 61 62 63 /** 64 * Connect pattern to lexer 65 */ 66 function connectTo($mode) { 67 $this->Lexer->addSpecialPattern('\{\{flickr>.*?\}\}',$mode,'plugin_flickr'); 68 } 69 70 /** 71 * Handle the match 72 */ 73 function handle($match, $state, $pos, &$handler){ 74 switch ($state) { 75 case DOKU_LEXER_ENTER : 76 break; 77 case DOKU_LEXER_MATCHED : 78 break; 79 case DOKU_LEXER_UNMATCHED : 80 break; 81 case DOKU_LEXER_EXIT : 82 break; 83 case DOKU_LEXER_SPECIAL : 84 return $match; 85 break; 86 } 87 return array(); 88 } 89 90 /** 91 * Create output 92 */ 93 function render($mode, &$renderer, $data) { 94 if($mode == 'xhtml'){ 95 global $conf; 96 97 // strip flickr> from start 98 $data = "{{".substr($data,9,-2)."}}"; 99 100 // get flickr image id 101 $start = strrpos($data, "/")+1; 102 $end = strpos($data, "_", $start); 103 $imageid = substr($data, $start, $end-$start); 104 105 // parse the media az an external media 106 $p = Doku_Handler_Parse_Media($data); 107 108 // render the media as a flickr external media 109 $link = array(); 110 $link['class'] = 'media'; 111 $link['style'] = ''; 112 $link['pre'] = ''; 113 $link['suf'] = ''; 114 $link['more'] = ''; 115 $link['target'] = $conf['target']['media']; 116 117 $link['title'] = $p['title']; 118 $link['url'] = "http://www.flickr.com/".$conf['plugin']['flickr']['accounturl']."/".$imageid."/"; 119 $link['name'] = $renderer->_media ($p['src'], $p['title'], $p['align'], $p['width'], $p['height'], $p['cache']); 120 121 list($ext,$mime) = mimetype($p['src']); 122 if(substr($mime,0,5) == 'image'){ 123 // link only jpeg images 124 // if ($ext != 'jpg' && $ext != 'jpeg') $noLink = TRUE; 125 }elseif($mime == 'application/x-shockwave-flash'){ 126 // don't link flash movies 127 $noLink = TRUE; 128 }else{ 129 // add file icons 130 $link['class'] .= ' mediafile mf_'.$ext; 131 } 132 133 //output formatted 134 $renderer->doc .= $renderer->_formatLink($link); 135 136 return true; 137 } 138 return false; 139 } 140} 141