1<?php 2if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); 3if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); 4require_once(DOKU_PLUGIN.'syntax.php'); 5 6class syntax_plugin_wow extends DokuWiki_Syntax_Plugin 7{ 8 function getInfo() 9 { 10 return array( 11 'author' => 'Sardem FF7', 12 'email' => 'sardemff7.pub@gmail.com', 13 'date' => '2010-03-08', 14 'name' => 'WoW Plugin', 15 'desc' => 'Allow to automatic link and name extract from Wowhead with an ID', 16 'url' => 'http://www.dokuwiki.org/plugin:wow', 17 ); 18 } 19 20 function getType() 21 { 22 return 'substition'; 23 } 24 25 /* Optionnel 26 function getAllowedTypes() 27 { 28 return array(); 29 } 30 */ 31 32 /* Optionnel 33 function getPType() 34 { 35 return 'normal'; 36 } 37 */ 38 39 function getSort() 40 { 41 return 400; 42 } 43 44 function connectTo($mode) 45 { 46 $this->Lexer->addSpecialPattern("~~WoW [qisnzr]:\d+~~", $mode, "plugin_wow"); 47/* $this->Lexer->addEntryPattern("<WoW [qisn]:\d+(:[hj])?>(?=.*</WoW>)", $mode, "plugin_wow"); */ 48 } 49 50 /* 51 function postConnect() 52 { 53 $this->Lexer->addExitPattern("</WoW>","plugin_wow"); 54 } 55 */ 56 57 function handle($match, $state, $pos, &$handler) 58 { 59 preg_match("#~~WoW ([qisnzr]):(\d+)~~#", $match, $matches); 60 return array($matches[1], $matches[2], $matches[3]); 61 } 62 63 function cache($type, $id, $name = "") 64 { 65 } 66 67 function render($mode, &$renderer, $data) 68 { 69 if( $mode == "xhtml" ) 70 { 71 list($type, $id) = $data; 72 73 $link = "http://" . $this->getConf('lang') . ".wowhead.com/?"; 74 switch ( $type ) 75 { 76 case "q" : 77 $link .= "quest"; 78 break; 79 case "i" : 80 $link .= "item"; 81 break; 82 case "s" : 83 $link .= "spell"; 84 break; 85 case "n" : 86 $link .= "npc"; 87 break; 88 case "z" : 89 $link .= "zone"; 90 break; 91 case "r" : 92 $link .= "zones"; 93 break; 94 } 95 $link .= "=" . $id; 96 97 98 $name = false; 99 $dir = DOKU_PLUGIN . "/wow/cache/" . $this->getConf('lang'); 100 if ( ! file_exists($dir) ) 101 mkdir($dir); 102 $file = $dir . "/" . $type . ".txt"; 103 if ( file_exists($file) ) 104 { 105 foreach ( file($file) as $line ) 106 { 107 if ( preg_match("/^" . $id . "=(.+)$/", $line, $matches) ) 108 { 109 $name = $matches[1]; 110 break; 111 } 112 } 113 } 114 115 if ( $name == false ) 116 { 117 require_once(DOKU_INC . '/inc/HTTPClient.php'); 118 $http = new DokuHTTPClient(); 119 $page = $http->get($link); 120 121 switch ( $this->getConf('lang') ) 122 { 123 case "www" : 124 $names = array( 125 "Spell", 126 "Quest", 127 "NPC", 128 "Item", 129 "Zones?" 130 ); 131 break; 132 case "fr" : 133 $names = array( 134 "Sort", 135 "Quête", 136 "PNJ", 137 "Objet", 138 "Zones?" 139 ); 140 break; 141 case "de" : 142 $names = array( 143 "Zauber", 144 "Quest", 145 "NPC", 146 "Gegenstand", 147 "Zone", 148 "Gebiete" 149 ); 150 break; 151 case "es" : 152 $names = array( 153 "Hechizo", 154 "Misiòn", 155 "PNJ", 156 "Objeto", 157 "Zonas?" 158 ); 159 break; 160 case "ru" : 161 $names = array( 162 "Заклинание", 163 "Задание", 164 "НИП", 165 "Предмет", 166 "Игровая зона", 167 "Местности" 168 ); 169 break; 170 } 171 preg_match('#<title>(.+) - (?:' . implode('|', $names) . ') - World of Warcraft</title>#', $page, $matches); 172 $name = $matches[1]; 173 file_put_contents($file, $id . '=' . $name . "\n", FILE_APPEND); 174 } 175 176 $renderer->doc .= '<a href="' . $link . '"><img src="' . substr(DOKU_PLUGIN, strlen($_SERVER["DOCUMENT_ROOT"])) . '/wow/images/wowhead.png" alt="Wowhead" />' . $name . '</a>'; 177 return true; 178 } 179 return false; 180 } 181} 182?> 183