2016-10-25 11:37:01 +02:00
< ? php
/**
* tasks short summary .
*
* tasks description .
*
* @ version 1.0
* @ author MoronO
*/
class PluginProcessmakerTask extends CommonITILTask
{
2017-05-06 18:38:24 +02:00
private $itemtype ;
2018-07-04 11:24:29 +02:00
function __construct ( $itemtype = 'TicketTask' ) {
2017-05-06 18:38:24 +02:00
parent :: __construct ();
$this -> itemtype = $itemtype ;
}
2016-10-25 11:37:01 +02:00
2018-07-04 11:24:29 +02:00
/**
* Name of the type
*
* @ param $nb : number of item in the type ( default 0 )
**/
static function getTypeName ( $nb = 0 ) {
return _n ( 'Process case task' , 'Process case tasks' , $nb );
}
function getItilObjectItemType () {
return str_replace ( 'Task' , '' , $this -> itemtype );
}
2016-10-25 11:37:01 +02:00
/**
* Summary of getFromDB
* @ param mixed $items_id
* @ param mixed $itemtype
* @ return bool
*/
2017-05-06 18:38:24 +02:00
function getFromDB ( $items_id ) {
global $DB ;
2016-10-25 11:37:01 +02:00
2017-05-06 18:38:24 +02:00
if ( $this -> getFromDBByQuery ( " WHERE itemtype=' " . $this -> itemtype . " ' AND items_id= $items_id ; " )) {
$task = new $this -> itemtype ;
if ( $task -> getFromDB ( $items_id )) {
// then we should add our own fields
$task -> fields [ 'items_id' ] = $this -> fields [ 'id' ];
$task -> fields [ 'itemtype' ] = $this -> fields [ 'itemtype' ];
unset ( $this -> fields [ 'id' ] );
unset ( $this -> fields [ 'items_id' ] );
unset ( $this -> fields [ 'itemtype' ] );
foreach ( $this -> fields as $field => $val ) {
$task -> fields [ $field ] = $val ;
}
$this -> fields = $task -> fields ;
return true ;
}
}
2016-10-25 11:37:01 +02:00
2017-05-06 18:38:24 +02:00
return false ;
}
2016-10-25 11:37:01 +02:00
/**
* Summary of getToDoTasks
* returns all 'to do' tasks associated with this case
* @ param mixed $case_id
*/
2017-05-06 18:38:24 +02:00
public static function getToDoTasks ( $case_id , $itemtype ) {
global $DB ;
$ret = array ();
$selfTable = getTableForItemType ( __CLASS__ );
$itemTypeTaskTable = getTableForItemType ( $itemtype );
2016-10-25 11:37:01 +02:00
2017-05-06 18:38:24 +02:00
$query = " SELECT glpi_tickettasks.id as taskID from $itemTypeTaskTable
2016-10-25 11:37:01 +02:00
INNER JOIN $selfTable on $selfTable . items_id = $itemTypeTaskTable . id
WHERE $itemTypeTaskTable . state = 1 and $selfTable . case_id = '$case_id' ; " ;
2017-05-06 18:38:24 +02:00
foreach ( $DB -> request ( $query ) as $row ) {
$ret [ $row [ 'taskID' ]] = $row [ 'taskID' ];
}
return $ret ;
}
2016-10-25 11:37:01 +02:00
2017-05-06 18:38:24 +02:00
static function canView ( ) {
return true ;
2016-10-25 11:37:01 +02:00
}
static function populatePlanning ( $params ) {
global $CFG_GLPI ;
2017-02-28 13:56:37 +01:00
2016-10-25 11:37:01 +02:00
$ret = array ();
2017-05-06 18:38:24 +02:00
$events = array ();
if ( isset ( $params [ 'start' ])) {
2017-02-28 13:56:37 +01:00
$params [ 'begin' ] = '2000-01-01 00:00:00' ;
2017-04-28 14:57:49 +02:00
if ( $params [ 'type' ] == 'group' ) {
$params [ 'who_group' ] = $params [ 'who' ];
$params [ 'whogroup' ] = $params [ 'who' ];
2017-05-06 18:38:24 +02:00
$params [ 'who' ] = 0 ;
2017-04-28 14:57:49 +02:00
}
2017-05-06 18:38:24 +02:00
$ret = CommonITILTask :: genericPopulatePlanning ( 'TicketTask' , $params );
2016-10-25 11:37:01 +02:00
2017-05-06 18:38:24 +02:00
foreach ( $ret as $key => $event ) {
if ( $event [ 'state' ] == 1 || ( $params [ 'display_done_events' ] == 1 && $event [ 'state' ] == 2 )) { // if todo or done but need to show them (=planning)
2017-02-28 13:56:37 +01:00
// check if task is one within a case
$pmTask = new self ( 'TicketTask' );
2017-05-06 18:38:24 +02:00
if ( $pmTask -> getFromDB ( $event [ 'tickettasks_id' ] )) { // $pmTask->getFromDBByQuery( " WHERE itemtype = 'TicketTask' AND items_id = ". $event['tickettasks_id'] ) ) {
2017-02-28 13:56:37 +01:00
$event [ 'editable' ] = false ;
2018-07-04 11:24:29 +02:00
//$event['url'] .= '&forcetab=PluginProcessmakerCase$processmakercases';
$tmpCase = new PluginProcessmakerCase ;
$tmpCase -> getFromDB ( $pmTask -> fields [ 'plugin_processmaker_cases_id' ]);
$event [ 'url' ] = $tmpCase -> getLinkURL () . '&forcetab=PluginProcessmakerTask$' . $pmTask -> fields [ 'items_id' ];
2016-10-25 11:37:01 +02:00
2017-05-06 18:38:24 +02:00
$taskCat = new TaskCategory ;
$taskCat -> getFromDB ( $pmTask -> fields [ 'taskcategories_id' ] );
$taskComment = isset ( $taskCat -> fields [ 'comment' ]) ? $taskCat -> fields [ 'comment' ] : '' ;
if ( Session :: haveTranslations ( 'TaskCategory' , 'comment' )) {
$taskComment = DropdownTranslation :: getTranslatedValue ( $taskCat -> getID (), 'TaskCategory' , 'comment' , $_SESSION [ 'glpilanguage' ], $taskComment );
2017-02-28 13:56:37 +01:00
}
2016-10-25 11:37:01 +02:00
2017-05-06 18:38:24 +02:00
$event [ 'content' ] = str_replace ( '##processmaker.taskcomment##' , $taskComment , $event [ 'content' ] );
$event [ 'content' ] = str_replace ( '##ticket.url##_PluginProcessmakerCase$processmakercases' , " " , $event [ 'content' ] ); //<a href=\"".$event['url']."\">"."Click to manage task"."</a>
2017-02-28 13:56:37 +01:00
//if( $event['state'] == 1 && $event['end'] < $params['start'] ) { // if todo and late
// $event['name'] = $event['end'].' '.$event['name'] ; //$event['begin'].' to '.$event['end'].' '.$event['name'] ;
// $event['end'] = $params['start'].' 24:00:00'; //.$CFG_GLPI['planning_end'];
//}
2017-05-06 18:38:24 +02:00
$events [ $key ] = $event ;
2016-10-25 11:37:01 +02:00
}
}
}
}
2017-05-06 18:38:24 +02:00
return $events ;
2016-10-25 11:37:01 +02:00
}
2018-07-04 11:24:29 +02:00
function getTabNameForItem ( CommonGLPI $case , $withtemplate = 0 ){
global $DB , $LANG ;
$caseInfo = $case -> getCaseInfo ();
$GLPICurrentPMUserId = PluginProcessmakerUser :: getPMUserId ( Session :: getLoginUserID ());
$tasks = [];
$query = " SELECT * FROM `glpi_plugin_processmaker_tasks` WHERE `plugin_processmaker_cases_id`= { $case -> fields [ 'id' ] } AND `del_thread_status`='OPEN' " ;
foreach ( $DB -> request ( $query ) as $task ) {
$tasks [ $task [ 'del_index' ]] = $task ;
}
$tab = [];
if ( property_exists ( $caseInfo , 'currentUsers' )) {
foreach ( $caseInfo -> currentUsers as $caseUser ) {
$title = $caseUser -> taskName ;
if ( isset ( $tasks [ $caseUser -> delIndex ])) {
$hide_claim_button = false ;
if ( $caseUser -> userId == '' ) { // task to be claimed
$itemtask = getItemForItemtype ( $tasks [ $caseUser -> delIndex ][ 'itemtype' ]);
$itemtask -> getFromDB ( $tasks [ $caseUser -> delIndex ][ 'items_id' ]);
// check if this group can be found in the current user's groups
if ( ! isset ( $_SESSION [ 'glpigroups' ]) || ! in_array ( $itemtask -> fields [ 'groups_id_tech' ], $_SESSION [ 'glpigroups' ] )) {
$hide_claim_button = true ;
}
}
$tab [ $tasks [ $caseUser -> delIndex ][ 'id' ]] = ( $caseUser -> userId != '' && $caseUser -> userId != $GLPICurrentPMUserId ) || $hide_claim_button ? " <i><sub> $title </sub></i> " : $title ;
//} else {
// // it's a sub case
// // then add a tab that will point to the sub-case
// $tab['sb-'.$caseUser->delIndex] = $title; // "<i><sub>$title</sub></i>";
}
}
}
return $tab ;
}
/**
* Summary of displayTabContentForItem
* @ param CommonGLPI $case the PluginProcessmakerCase
* @ param integer $tabnum contains the id the PluginProcessmakerTask
* @ param mixed $withtemplate
*/
static function displayTabContentForItem ( CommonGLPI $case , $tabnum = 1 , $withtemplate = 0 ) {
global $CFG_GLPI , $PM_SOAP ;
$hide_claim_button = false ;
$config = $PM_SOAP -> config ;
$rand = rand ();
// get infos for the current task
$task = getAllDatasFromTable ( 'glpi_plugin_processmaker_tasks' , " id = $tabnum " );
// shows the re-assign form
$caseInfo = $case -> getCaseInfo ();
$currentUser = null ;
foreach ( $caseInfo -> currentUsers as $locTask ) {
if ( $locTask -> delIndex == $task [ $tabnum ][ 'del_index' ]) {
$currentUser = $locTask ;
break ;
}
}
if ( isset ( $currentUser )) {
if ( $currentUser -> userId && $task [ $tabnum ][ 'del_index' ]) {
// to load users for task re-assign only when task is not to be 'claimed' and if task is not a sub-case
echo " <div class='tab_bg_2' id='divUsers- " . $currentUser -> delIndex . " '><div class='loadingindicator'> " . __ ( 'Loading...' ) . " </div></div> " ;
echo " <script> $ ('#divUsers- { $task [ $tabnum ][ 'del_index' ] } ').load( ' " . $CFG_GLPI [ " root_doc " ] . " /plugins/processmaker/ajax/task_users.php?cases_id= "
. $case -> getID ()
. " &items_id= "
. $case -> fields [ 'items_id' ]
. " &itemtype= "
. $case -> fields [ 'itemtype' ]
. " &users_id= "
. PluginProcessmakerUser :: getGLPIUserId ( $currentUser -> userId )
. " &taskGuid= "
. $currentUser -> taskId
. " &delIndex= { $task [ $tabnum ][ 'del_index' ] } &delThread= { $currentUser -> delThread } &rand= $rand ' ); </script> " ;
} else {
// manages the claim
// current task is to be claimed
// get the assigned group to the item task
$itemtask = getItemForItemtype ( $task [ $tabnum ][ 'itemtype' ] );
$itemtask -> getFromDB ( $task [ $tabnum ][ 'items_id' ] );
// check if this group can be found in the current user's groups
if ( ! isset ( $_SESSION [ 'glpigroups' ]) || ! in_array ( $itemtask -> fields [ 'groups_id_tech' ], $_SESSION [ 'glpigroups' ] )) {
$hide_claim_button = true ;
}
}
}
echo " <script type='text/javascript' src=' " . $CFG_GLPI [ " root_doc " ] . " /plugins/processmaker/js/cases.js'></script> " ;
$csrf = Session :: getNewCSRFToken ();
echo " <iframe id='caseiframe-task- { $task [ $tabnum ][ 'del_index' ] } ' onload= \" onTaskFrameLoad( event, { $task [ $tabnum ][ 'del_index' ] } , "
. ( $hide_claim_button ? " true " : " false " )
. " , ' $csrf ' ); \" style='border:none;' class='tab_bg_2' width='100%' src=' " ;
echo $PM_SOAP -> serverURL
. " /cases/cases_Open?sid= "
. $PM_SOAP -> getPMSessionID ()
. " &APP_UID= "
. $case -> fields [ 'case_guid' ]
. " &DEL_INDEX= "
. $task [ $tabnum ][ 'del_index' ]
. " &action=TO_DO " ;
echo " &rand= $rand &glpi_domain= { $config -> fields [ 'domain' ] } '></iframe></div> " ;
}
2016-10-25 11:37:01 +02:00
}