<?php
/**
 * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
 * @author     Etienne MELEARD <etienne.meleard@free.fr>
 */

// 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');

class syntax_plugin_aclauditor extends DokuWiki_Syntax_Plugin {
	function getInfo() {
		return array(
			'author' => 'Etienne MELEARD',
			'email'  => 'etienne.meleard@free.fr',
			'date'   => @file_get_contents(DOKU_PLUGIN.'aclauditor/VERSION'),
			'name'   => 'ACL Auditor Plugin (syntax)',
			'desc'   => 'Functions to get info about user /group ACLs of a wiki page',
			'url'    => 'http://dokuwiki.org/plugin:aclauditor',
		);
	}

	function getType() { return 'substition'; }
	function getSort() { return 155; }

	function connectTo($mode) {
		$this->Lexer->addSpecialPattern('<ACLAUDITOR[^/]*/>', $mode, 'plugin_aclauditor');
	}

	function handle($match, $state, $pos, &$handler) {
		$params = array();
		foreach(preg_split('`\s+`', trim(substr($match, 11, -2))) as $p) {
			$p = explode('=', $p, 2);
			if(!in_array($p[0], array('who', 'what', 'scenario'))) continue;
			$params[$p[0]] = isset($p[1]) ? $p[1] : null;
		}
		return $params;
	}

	function render($format, &$renderer, $data) {
		if($format != 'xhtml') return false;
		$renderer->info['cache'] = false;
		if(!auth_isadmin()) return true;
		
		global $ID;
		if(!isset($data['scenario'])) {
			$renderer->doc .= '<form action="'.wl($ID, array('do' => 'admin', 'page' => 'aclauditor', 'aclaudit_mode' => 'single')).'" method="post">';
			if(isset($data['who']) && !empty($data['who'])) $renderer->doc .= '<input type="hidden" name="aclaudit_who" value="'.$data['who'].'" />';
			if(isset($data['what']) && !empty($data['what'])) $renderer->doc .= '<input type="hidden" name="aclaudit_what" value="'.$data['what'].'" />';
			$renderer->doc .= '<input type="submit" name="aclaudit_test'.((isset($data['who']) && isset($data['what'])) ? 'both' : (isset($data['what']) ? 'what' : 'who')).'" value="'.$this->getLang('menu').'" />';
			$renderer->doc .= '</form>';
		}else{
			$renderer->doc .= '<form action="'.wl($ID, array('do' => 'admin', 'page' => 'aclauditor', 'aclaudit_mode' => 'scenario')).'" method="post">';
			if(!empty($data['scenario'])) {
				$renderer->doc .= '<input type="hidden" name="aclaudit_scenario_load_filename" value="'.$data['scenario'].'" />';
				$renderer->doc .= '<input type="hidden" name="aclaudit_scenario_load" value="1" />';
				$renderer->doc .= '<input type="submit" name="aclaudit_scenario_run" value="'.$this->getLang('run').'" />';
			}else $renderer->doc .= '<input type="submit" name="" value="'.$this->getLang('run').'" />';
			$renderer->doc .= '</form>';
		}
		
		return true;
	}
}
