itemtype=$itemtype; } /** * 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, 'processmaker'); } function getItilObjectItemType() { return str_replace('Task', '', $this->itemtype); } /** * Summary of getFromDB * @param mixed $items_id * @param mixed $itemtype * @return bool */ function getFromDB($items_id) { global $DB; 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; } } return false; } /** * Summary of getToDoTasks * returns all 'to do' tasks associated with this case * @param mixed $case_id */ public static function getToDoTasks( $case_id, $itemtype ) { global $DB; $ret = array(); $selfTable = getTableForItemType( __CLASS__); $itemTypeTaskTable = getTableForItemType( $itemtype ); $query = "SELECT glpi_tickettasks.id as taskID from $itemTypeTaskTable INNER JOIN $selfTable on $selfTable.items_id=$itemTypeTaskTable.id WHERE $itemTypeTaskTable.state=1 and $selfTable.plugin_processmaker_cases_id='$case_id';"; foreach ($DB->request($query) as $row) { $ret[$row['taskID']]=$row['taskID']; } return $ret; } static function canView( ) { return true; } static function populatePlanning($params) { global $CFG_GLPI; $ret = array(); $events = array(); if (isset($params['start'])) { $params['begin'] = '2000-01-01 00:00:00'; if ($params['type'] == 'group') { $params['who_group'] = $params['who']; $params['whogroup'] = $params['who']; $params['who'] = 0; } $ret = CommonITILTask::genericPopulatePlanning( 'TicketTask', $params ); 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) // check if task is one within a case $pmTask = new self('TicketTask'); if ($pmTask->getFromDB( $event['tickettasks_id'] )) { // $pmTask->getFromDBByQuery( " WHERE itemtype = 'TicketTask' AND items_id = ". $event['tickettasks_id'] ) ) { $event['editable'] = false; //$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']; $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 ); } $event['content'] = str_replace( '##processmaker.taskcomment##', $taskComment, $event['content'] ); $event['content'] = str_replace( '##processmakercase.url##', "", $event['content'] ); //"."Click to manage task"." //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']; //} $events[$key] = $event; } } } } return $events; } function getTabNameForItem(CommonGLPI $case, $withtemplate = 0){ global $DB; $tab = []; $caseInfo = $case->getCaseInfo(); if (property_exists($caseInfo, 'currentUsers')) { $GLPICurrentPMUserId = PluginProcessmakerUser::getPMUserId(Session::getLoginUserID()); // get all tasks that are OPEN for this case $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; } // get all tasks that are OPEN for any sub-case of this case $sub_tasks = []; $query = "SELECT `glpi_plugin_processmaker_tasks`.* FROM `glpi_plugin_processmaker_tasks` JOIN `glpi_plugin_processmaker_cases` on `glpi_plugin_processmaker_cases`.`id`=`glpi_plugin_processmaker_tasks`.`plugin_processmaker_cases_id` WHERE `glpi_plugin_processmaker_cases`.`plugin_processmaker_cases_id`={$case->fields['id']} AND `del_thread_status`='OPEN'"; foreach($DB->request($query) as $task) { $sub_tasks[$task['plugin_processmaker_cases_id']][$task['del_index']] = $task; } $caseInfo->currentUsers = $case->sortTasks($caseInfo->currentUsers, $GLPICurrentPMUserId); foreach ($caseInfo->currentUsers as $key => $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 ? "$title" : $title; } } } //// TODO manage of sub-tasks. //foreach ($sub_tasks as $scases_id => $scase) { // foreach ( //} return $tab; } /** * Summary of displayTabContentForItem * @param CommonGLPI $case the PluginProcessmakerCase * @param integer $tabnum contains the PluginProcessmakerTask id * @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"); // TODO manage sub-tasks // 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 "
".__('Loading...')."
"; echo ""; } 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 ""; $csrf = Session::getNewCSRFToken(); echo ""; } }