1<?php 2/** 3 * DokuWiki Plugin dnsresolver (Syntax Component) 4 * 5 * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 6 * @author George Pirogov <i1557@yandex.ru> 7 */ 8 9// must be run within Dokuwiki 10if (!defined('DOKU_INC')) die(); 11 12if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); 13require_once(DOKU_PLUGIN.'syntax.php'); 14require_once(DOKU_INC.'inc/infoutils.php'); 15 16 17class syntax_plugin_dnsresolver extends DokuWiki_Syntax_Plugin 18{ 19 20 // возвращаем тип плагина 21 public function getType() 22 { 23 return 'substition'; 24 } 25 26 // возвращаем уникальный номер плагина 27 public function getSort() 28 { 29 return 66; 30 } 31 32 // регистрация шаблона в парсере 33 public function connectTo($mode) 34 { 35 $this->Lexer->addEntryPattern('<dns>', $mode, 'plugin_dnsresolver'); 36 } 37 38 public function postConnect() 39 { 40 $this->Lexer->addExitPattern('</dns>','plugin_dnsresolver'); 41 } 42 43 // Метод handle() создаёт инструкции отображения для собственного синтаксического состояния 44 public function handle($match, $state, $pos, Doku_Handler &$handler) 45 { 46 switch ( $state ) 47 { 48 case DOKU_LEXER_ENTER: 49 $data = array(); 50 return $data; 51 break; 52 53 case DOKU_LEXER_UNMATCHED: 54 return array('dnsname' => $match); 55 break; 56 57 case DOKU_LEXER_EXIT: 58 $data = array(); 59 return $data; 60 break; 61 } 62 63 $data = array(); 64 return $data; 65 } 66 67 // функция отображения контента 68 public function render($mode, Doku_Renderer &$renderer, $data) 69 { 70 if ( $mode != 'xhtml' ) return false; 71 72 global $ID; 73 74 // получаем переданный параметр 75 $dnsname = $data['dnsname']; 76 77 // получаем @PAGE@ и @NS@ 78 $PAGE = noNS($ID); 79 $NS = getNS($ID); 80 if ( strpos($NS, ':') ) 81 { 82 $NS = substr( strrchr($NS, ':'), 1); 83 } 84 85 // делаем подстановки @NS@ и @PAGE@ 86 $dnsname = str_replace("@NS@", $NS, $dnsname); 87 $dnsname = str_replace("@PAGE@", $PAGE, $dnsname); 88 89 // resolve dns 90 $result = dns_get_record($dnsname); 91 92 // вывод подготовленных данных 93 $content = $result[0][ip]; 94 $renderer->doc .= $content; 95 96 return true; 97 98 } // function render 99 100} 101