1<?php
2// Copyright 2012 Andreas Parschalk
3
4// This program is free software: you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published by
6// the Free Software Foundation, either version 3 of the License, or
7// (at your option) any later version.
8
9// This program is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12// GNU General Public License for more details.
13
14// You should have received a copy of the GNU General Public License
15// along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
17if(!defined('DOKU_INC')) die();
18if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
19require_once(DOKU_PLUGIN.'syntax.php');
20require_once('cUrlHelper.php');
21require_once('BzBug.php');
22
23class syntax_plugin_bugzillaHTTP extends DokuWiki_Syntax_Plugin {
24
25
26	private $starttime;
27	private $endtime;
28
29	function getInfo(){
30		return array(
31				'author' => 'andreas parschalk',
32				'email'  => 'dprskavec@gmail.com',
33				'date'   => '2012-08-17',
34				'name'   => 'bugzilla http plugin',
35				'desc'   => 'Gets information about bugs via HTTP (xml-view).',
36				'url'    => 'http://www.dokuwiki.org/plugin:bugzillaHTTP',
37		);
38	}
39
40	function getType()  {
41		return 'substition';
42	}
43	function getPType() {
44		return 'normal';
45	}
46	function getSort()  {
47		return 777;
48	}
49
50	function connectTo($mode) {
51		$this->Lexer->addSpecialPattern('^\[buglist\s*\|\s*\d+\s*(?:\s*,\s*\d+)*\s*\]', $mode, 'plugin_bugzillaHTTP');
52	}
53
54
55	function fetchBugs($idString) {
56	//	$this->starttime = microtime(true);
57		$url = $this->getConf('bug_xml_url');
58		$url .= $idString;
59		$curl = new cUrlHelper();
60		$content = $curl->fetchContent($url);
61		$bug = new BzBug();
62		$buglist = $bug->unmarshall($content);
63	//	$this->endtime = microtime(true);
64		return $buglist;
65	}
66
67	function handle($match, $state, $pos, &$handler) {
68		preg_match('/^\[buglist\s*\|([\s(\d),]+)\]/', $match, $submatch);
69		$idString = preg_replace('/\s/', '', $submatch[1]);
70		return $idString;
71	}
72
73
74	function uncachedHandle($idString) {
75		return $this->fetchBugs($idString);
76	}
77
78
79	function render($mode, &$renderer, $idString) {
80		$bugData = $this->uncachedHandle($idString);
81		//var_dump($bugData);
82		$url = $this->getConf('bug_url');
83		if($mode == 'xhtml'){
84			// render tableheader
85			$bugtable = '<table class="bugtable"><tr><th>ID</th><th>PRI</th><th>SEV</th><th>ASSIGNEE</th><th>STATUS</th><th>SHORT DESCRIPTION</th></tr>';
86			//print_r($data_bugs);
87			foreach($bugData as $bug) {
88				$rowclass = "bugtable_".$bug->getPriority();
89				if ($bug->getStatus() === 'CLOSED') {
90					$rowclass = "bugtable_closed";
91				}
92				if ($bug->getStatus() === 'VERIFIED') {
93					$rowclass = "bugtable_verified";
94				}
95				if ($bug->getStatus() === 'RESOLVED') {
96					$rowclass = "bugtable_resolved";
97				}
98				$bugtable .= '<tr class="'.$rowclass.'">';
99				$bugtable .= '<td><a href="'.$url . $bug->getId().'" target="_blank">'.$bug->getId().'</a></td><td>'.$bug->getPriority().'</td><td>'.$bug->getSeverity().'</td><td>'.
100						$bug->getAssignedTo().'</td><td>'.$bug->getStatus().'</td><td>'.$bug->getShortDesc().'</td>';
101				$bugtable .= '</tr>';
102			}
103			$bugtable .= '</table>';
104
105			$renderer->doc .= $bugtable;
106		//	$renderer->doc .= 'fetchted buglist in '.($this->endtime - $this->starttime) .'s';
107			return true;
108
109		}
110		return false;
111	}
112
113}
114?>
115