<?php
/**
 * DokuWiki Plugin dnsresolver (Syntax Component)
 *
 * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
 * @author  George Pirogov <i1557@yandex.ru>
 */

// must be run within Dokuwiki
if (!defined('DOKU_INC')) die();

if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
require_once(DOKU_PLUGIN.'syntax.php');
require_once(DOKU_INC.'inc/infoutils.php');


class syntax_plugin_dnsresolver extends DokuWiki_Syntax_Plugin
{

    // возвращаем тип плагина
    public function getType()
    {
        return 'substition';
    }

    // возвращаем уникальный номер плагина
    public function getSort()
    {
        return 66;
    }

    // регистрация шаблона в парсере
    public function connectTo($mode)
    {
        $this->Lexer->addEntryPattern('<dns>', $mode, 'plugin_dnsresolver');
    }

    public function postConnect()
    {
        $this->Lexer->addExitPattern('</dns>','plugin_dnsresolver');
    }

    // Метод handle() создаёт инструкции отображения для собственного синтаксического состояния
    public function handle($match, $state, $pos, Doku_Handler &$handler)
    {
        switch ( $state )
        {
              case DOKU_LEXER_ENTER:
              $data = array();
              return $data;
              break;

              case DOKU_LEXER_UNMATCHED:
        	  return array('dnsname' => $match);
              break;

              case DOKU_LEXER_EXIT:
              $data = array();
              return $data;
              break;
        }

        $data = array();
        return $data;
    }

    // функция отображения контента
    public function render($mode, Doku_Renderer &$renderer, $data)
    {
        if ( $mode != 'xhtml' ) return false;

        global $ID;

        // получаем переданный параметр
        $dnsname = $data['dnsname'];

        // получаем @PAGE@ и @NS@
        $PAGE = noNS($ID);
        $NS = getNS($ID);
        if ( strpos($NS, ':') )
        {
            $NS = substr( strrchr($NS, ':'), 1);
        }

        // делаем подстановки @NS@ и @PAGE@
        $dnsname = str_replace("@NS@", $NS, $dnsname);
        $dnsname = str_replace("@PAGE@", $PAGE, $dnsname);

        // resolve dns
		$result = dns_get_record($dnsname);

        // вывод подготовленных данных
        $content = $result[0][ip];
        $renderer->doc .= $content;

        return true;

    } // function render

}
