*
*
*
*/
//session_start();
if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
require_once(DOKU_PLUGIN.'syntax.php');
require_once(DOKU_PLUGIN.'issuetracker/assilist.php');
/******************************************************************************
* All DokuWiki plugins to extend the parser/rendering mechanism
* need to inherit from this class
*/
class syntax_plugin_issuetracker extends DokuWiki_Syntax_Plugin
{
/******************************************************************************/
/* return some info
*/
function getInfo(){
return confToHash(dirname(__FILE__).'/plugin.info.txt');
}
function getType(){ return 'substition';}
function getPType(){ return 'block';}
function getSort(){ return 167;}
/******************************************************************************/
/* Connect pattern to lexer
*/
function connectTo($mode){
$this->Lexer->addSpecialPattern('\{\{issuetracker>[^}]*\}\}',$mode,'plugin_issuetracker');
}
/******************************************************************************/
/* Handle the match
*/
function handle($match, $state, $pos,Doku_Handler &$handler){
$match = substr($match,15,-2); //strip markup from start and end
//handle params
$data = array();
$params = explode('|',$match);
foreach($params as $param) {
$splitparam = explode('=',$param);
if ($splitparam[1] != '')
{
if ($splitparam[0]=='project') { $data['project'] = trim(strtolower($splitparam[1])) ;}
if ($splitparam[0]=='product') { $data['product'] = trim(strtoupper($splitparam[1])) ;}
if ($splitparam[0]=='status') { $data['status'] = trim(strtoupper($splitparam[1])) ;}
if ($splitparam[0]=='severity') { $data['severity'] = trim(strtoupper($splitparam[1])) ;}
if ($splitparam[0]=='display') { $data['display'] = trim(strtoupper($splitparam[1])) ;}
if ($splitparam[0]=='view') { $data['view'] = trim(strtoupper($splitparam[1])) ;}
if ($splitparam[0]=='controls') { $data['controls'] = trim(strtoupper($splitparam[1])) ;}
if ($splitparam[0]=='prod_limit') { $data['prod_limit'] = trim(strtoupper($splitparam[1])) ;}
if ($splitparam[0]=='id') { $data['id'] = trim(strtoupper($splitparam[1])) ;}
if ($splitparam[0]=='version') { $data['version'] = trim(strtoupper($splitparam[1])) ;}
if ($splitparam[0]=='component') { $data['component'] = trim(strtoupper($splitparam[1])) ;}
if ($splitparam[0]=='tblock') { $data['tblock'] = trim(strtoupper($splitparam[1])) ;}
if ($splitparam[0]=='assignee') { $data['assignee'] = trim(strtoupper($splitparam[1])) ;}
if ($splitparam[0]=='reporter') { $data['reporter'] = trim(strtoupper($splitparam[1])) ;}
if ($splitparam[0]=='myissues') { $data['myissues'] = trim(strtoupper($splitparam[1])) ;}
if ($splitparam[0]=='config') { $data['config'] = trim(strtoupper($splitparam[1])) ;}
if ($splitparam[0]=='sort') { $data['sort'] = trim(strtoupper($splitparam[1])) ;}
if ($splitparam[0]=='columns') { $data['columns'] = trim(strtoupper($splitparam[1])) ;}
if ($splitparam[0]=='asympupl') { $data['asympupl'] = trim(strtoupper($splitparam[1])) ;}
if ($splitparam[0]=='email_address') {$data['email_address'] = trim(strtolower($splitparam[1])) ;}
/*continue;*/
}
}
return $data;
}
/******************************************************************************/
/* Captcha OK
*/
function _captcha_ok()
{
$helper = null;
if(@is_dir(DOKU_PLUGIN.'captcha'))
{ $helper = plugin_load('helper','captcha'); }
if(!is_null($helper) && $helper->isEnabled())
{ return $helper->check(); }
return ($this->getConf('use_captcha'));
}
/******************************************************************************/
/* Create output
*/
function render($mode,Doku_Renderer &$renderer, $data) {
global $ID;
$project = htmlspecialchars(stripslashes($_REQUEST['project']));
if(strlen($project) <1) $project = $data['project'];
else $data['project'] = $project;
if ($mode == 'xhtml'){
$renderer->info['cache'] = false;
$Generated_Header = '';
$Generated_Table = '';
$Generated_Scripts = '';
$Generated_Report = '';
if ($data['display'] == '') {$data['display'] = 'ISSUES';}
if ($data['view'] == '') {$data['view'] = '10';}
if ($data['controls'] == '') {$data['controls'] = 'ON';}
if ($data['prod_limit'] == '') {$data['prod_limit'] = 'OFF';}
if ($data['id'] == '') {$data['id'] = '0';}
if ($data['severity'] == '') {$data['severity'] = 'ALL';}
if ($data['status'] == '') {$data['status'] = 'ALL';}
if ($data['product'] == '') {$data['product'] = 'ALL';}
if ($data['version'] == '') {$data['version'] = 'ALL';}
if ($data['component'] == '') {$data['component'] = 'ALL';}
if ($data['tblock'] == '') {$data['tblock'] = false;}
else { $data['tblock'] = true; }
if ($data['assignee'] == '') {$data['assignee'] = 'ALL';}
if ($data['reporter'] == '') {$data['reporter'] = 'ALL';}
if ($data['myissues'] == '') {$data['myissues'] = false;}
else { $data['myissues']= true; }
if ($data['config'] == '') {$data['config'] = false;}
else { $data['config'] = true; }
if($data['asympupl'] == '') {$data['asympupl']=false;}
else{$data['asympupl']=true;}
if ($this->validEmail($data['email_address'])===false ) {
if($data['email_address']!='') { msg("invalid mail given by syntax",-1);}
$data['email_address'] = $this->getConf('email_address');
}
if (stristr($data['display'],'FORM')!= false)
{
//If it is a user report add it to the db-file
if (isset($_REQUEST['severity']))
{
if ($_REQUEST['severity'])
{
// check if captcha is to be used by issue tracker in general
if ($this->getConf('use_captcha') === 0) { $captcha_ok = 1;}
else { $captcha_ok = ($this->_captcha_ok());}
if ($captcha_ok)
{
if (checkSecurityToken())
{ // get issues file contents
$all = false;
$issues = $this->_get_issues($data, $all);
//Add it to the issue file
$issue_id=count($issues);
foreach ($issues as $value)
{if ($value['id'] >= $issue_id) {$issue_id=$value['id'] + 1;}}
$issues[$issue_id]['id'] = $issue_id;
$issues[$issue_id]['product'] = htmlspecialchars(stripslashes($_REQUEST['product']));
$issues[$issue_id]['version'] = htmlspecialchars(stripslashes($_REQUEST['version']));
$issues[$issue_id]['component'] = htmlspecialchars(stripslashes($_REQUEST['component']));
$issues[$issue_id]['tblock'] = htmlspecialchars(stripslashes($_REQUEST['tblock']));
$issues[$issue_id]['severity'] = htmlspecialchars(stripslashes($_REQUEST['severity']));
$issues[$issue_id]['created'] = htmlspecialchars(stripslashes($_REQUEST['created']));
$status = explode(',', $this->getConf('status')) ;
$issues[$issue_id]['status'] = $status[0];
$issues[$issue_id]['user_name'] = htmlspecialchars(stripslashes($_REQUEST['user_name']));
$issues[$issue_id]['user_mail'] = trim(htmlspecialchars(stripslashes($_REQUEST['user_mail'])));
$issues[$issue_id]['user_phone'] = htmlspecialchars(stripslashes($_REQUEST['user_phone']));
$issues[$issue_id]['add_user_mail'] = htmlspecialchars(stripslashes($_REQUEST['add_user_mail']));
// $issues[$issue_id]['title'] = htmlspecialchars(stripslashes($_REQUEST['title']));
$issues[$issue_id]['title'] = htmlspecialchars($_REQUEST['title']);
// $issues[$issue_id]['description'] = htmlspecialchars(stripslashes($_REQUEST['description']));
$issues[$issue_id]['description'] = htmlspecialchars($_REQUEST['description']);
$issues[$issue_id]['attachment1'] = htmlspecialchars(stripslashes($_REQUEST['attachment1']));
$issues[$issue_id]['attachment2'] = htmlspecialchars(stripslashes($_REQUEST['attachment2']));
$issues[$issue_id]['attachment3'] = htmlspecialchars(stripslashes($_REQUEST['attachment3']));
$issues[$issue_id]['assigned'] = '';
$issues[$issue_id]['resolution'] = '';
$issues[$issue_id]['comments'] = '';
$issues[$issue_id]['modified'] = htmlspecialchars(stripslashes($_REQUEST['modified']));
$xuser = $issues[$issue_id]['user_mail'];
$xdescription = $issues[$issue_id]['description'];
//echo "Beschreibung: ".$xdescription."
";
// *****************************************************************************
// upload a symptom file
// *****************************************************************************
// check if current user is admin/assignee
// check if syntax parameter asympupl is switched on
$user_grp = pageinfo();
if(array_key_exists('userinfo', $user_grp))
{ foreach ($user_grp['userinfo']['grps'] as $ugrp)
{ $user_grps = $user_grps . $ugrp; }
}
else
{ $user_grps = 'all'; }
$allowed_users = explode('|', $this->getConf('assign'));
$cFlag = false;
foreach ($allowed_users as $w)
{ // check if one of the assigned user roles does match with current user roles
if (strpos($user_grps,$w)!== false)
{ $cFlag = true;
break; }
}
$mime_type1 = $_FILES['attachment1']['type'];
if((($this->getConf('upload')> 0) ||(($cFlag === true) && ($data['asympupl']=true)) || ($this->getConf('registered_users')== 0)) && (strlen($mime_type1)>1)) {
$Generated_Header = $this->_symptom_file_upload($issues,$issue_id,'attachment1');
}
$mime_type2 = $_FILES['attachment2']['type'];
if(($this->getConf('upload')> 0) && (strlen($mime_type2)>1)) {
$Generated_Header = $this->_symptom_file_upload($issues,$issue_id,'attachment2');
}
$mime_type3 = $_FILES['attachment3']['type'];
if(($this->getConf('upload')> 0) && (strlen($mime_type3)>1)) {
$Generated_Header = $this->_symptom_file_upload($issues,$issue_id,'attachment3');
}
//check user mail address, necessary for further clarification of the issue
$valid_umail = $this->validEmail($xuser);
if ( ($valid_umail == true) && ((stripos($xdescription, " ") > 0) || (strlen($xdescription)>5)) && (strlen($issues[$issue_id]['version']) >0))
{
// assemble the path to IssueTracker data store & file
if($this->getConf('it_data')==false) $pfile = DOKU_CONF."../data/meta/".$data['project'].'.issues';
else $pfile = DOKU_CONF."../". $this->getConf('it_data').$data['project'].'.issues';
//save issue-file
$xvalue = io_saveFile($pfile,serialize($issues));
$this->_log_mods($data['project'], $issues[$issue_id], $issues[$issue_id]['user_name'], 'status', '', $issues[$issue_id]['status']);
$pstring = sprintf("showid=%s&project=%s", urlencode($issues[$issue_id]['id']), urlencode($project));
$tmp_link = ''.$issue_id.'';
$Generated_Header .= '
".print_r($it_cfg, true).""; // 2. replace the placeholder with config values // a) loop through the matrix and collect all defined projects // initially we start with projects // string to be built according: $itm_counter = 0; $itm_counter2 = 0; foreach($it_cfg as $item) { if ($item['elmnt_type']=="project") { $itm_counter++; if($itm_counter===1){ $name2 .= ''.NL; $sel_prod = $item['elmnt_name']; } else { $name2 .= ''.NL; } } // list all potential childs and check the already related items elseif ($item['elmnt_type']=="product") { $itm_counter2++; if (stripos($item['rel_childs'],$sel_prod)!== false) { $cfgelements .= '
'.$value[1].' | '.$value[0].' |