Version to 3.5.1

Compatible with GLPI 9.3
This commit is contained in:
tomolimo
2019-05-21 10:47:15 +02:00
parent 8a711173cc
commit 96c6e9ba6f
43 changed files with 1027 additions and 1669 deletions

View File

@@ -2,7 +2,9 @@
GLPI plugin that provides an interface with a customized ProcessMaker server (https://github.com/tomolimo/processmaker-server).
version 3.4.5 is compatible with GLPI 9.2 and needs ProcessMaker either 3.0.1.8-RE-1.12 (https://github.com/tomolimo/processmaker-server/releases/tag/3.0.1.8-RE-1.12) or 3.3.0-RE-1.0 (https://github.com/tomolimo/processmaker-server/releases/tag/3.3.0-RE-1.0)
version 3.4.x is compatible with GLPI 9.2 and needs ProcessMaker either 3.0.1.8-RE-1.12 (https://github.com/tomolimo/processmaker-server/releases/tag/3.0.1.8-RE-1.12) or 3.3.0-RE-1.0 (https://github.com/tomolimo/processmaker-server/releases/tag/3.3.0-RE-1.0)
version 3.5.x is compatible with GLPI 9.3 and needs ProcessMaker 3.3.0-RE-1.x (https://github.com/tomolimo/processmaker-server/releases/latest)
This plugin can run classic and bpmn processes

View File

@@ -61,15 +61,22 @@ if (empty($_REQUEST['searchText'])) {
}
$processall = (isset($_REQUEST['specific_tags']['process_restrict']) && !$_REQUEST['specific_tags']['process_restrict']);
$count_cases_per_item = isset($_REQUEST['specific_tags']['count_cases_per_item']) ? $_REQUEST['specific_tags']['count_cases_per_item'] : [];
$result = PluginProcessmakerProcess::getSqlSearchResult(false, $search);
if ($DB->numrows($result)) {
while ($data = $DB->fetch_array($result)) {
$process_entities = PluginProcessmakerProcess::getEntitiesForProfileByProcess($data["id"], $_SESSION['glpiactiveprofile']['id'], true);
if ($processall || in_array( $_REQUEST["entity_restrict"], $process_entities)) {
array_push( $processes, [ 'id' => $data["id"],
'text' => $data["name"] ]);
$can_add = $data['max_cases_per_item'] == 0 || !isset($count_cases_per_item[$data["id"]]) || $count_cases_per_item[$data["id"]] < $data['max_cases_per_item'];
if ($processall
|| ($data['maintenance'] != 1
&& in_array( $_REQUEST["entity_restrict"], $process_entities)
&& $can_add) ) {
array_push( $processes, ['id' => $data["id"],
'text' => $data["name"]
]);
$count++;
}
}

View File

@@ -57,8 +57,9 @@ if (!isset($_REQUEST['page'])) {
if ($one_item < 0) {
$start = ($_REQUEST['page']-1)*$_REQUEST['page_limit'];
$LIMIT = "LIMIT $start,".$_REQUEST['page_limit'];
$searchText = isset($_REQUEST['searchText']) ? $_REQUEST['searchText'] : "";
$result = PluginProcessmakerUser::getSqlSearchResult( $_REQUEST['specific_tags']['taskGuid'], false, $_REQUEST['right'], $_REQUEST["entity_restrict"],
$_REQUEST['value'], $used, $_REQUEST['searchText'], $LIMIT);
$_REQUEST['value'], $used, $searchText, $LIMIT);
} else {
$query = "SELECT DISTINCT `glpi_users`.*
FROM `glpi_users`

View File

@@ -22,16 +22,13 @@ function glpi_processmaker_case_reload_page() {
if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'route' && isset( $_REQUEST['UID'] ) && isset( $_REQUEST['APP_UID'] ) && isset( $_REQUEST['__DynaformName__'] )) {
// then get item id from DB
if ($locCase->getFromGUID($_REQUEST['APP_UID'])) {
if (isset( $_REQUEST['form'] )) {
$PM_SOAP->derivateCase($locCase, $_REQUEST);
}
$PM_SOAP->derivateCase($locCase, $_REQUEST);
}
glpi_processmaker_case_reload_page();
} else if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'delete') {
} else if (isset($_REQUEST['purge'])) {
// delete case from case table, this will also delete the tasks
if ($locCase->getFromDB($_POST['cases_id']) && $locCase->deleteCase()) {
if ($locCase->getFromDB($_REQUEST['id']) && $locCase->deleteCase()) {
Session::addMessageAfterRedirect(__('Case has been deleted!', 'processmaker'), true, INFO);
} else {
Session::addMessageAfterRedirect(__('Unable to delete case!', 'processmaker'), true, ERROR);

View File

@@ -5,19 +5,8 @@ include_once ("../../../inc/includes.php");
Html::header(__('ProcessMaker', 'processmaker'), $_SERVER['PHP_SELF'], "helpdesk", "PluginProcessmakerCase", "cases");
if (!$PM_SOAP->config->fields['maintenance']) {
if (Session::haveRightsOr("plugin_processmaker_config", [READ, UPDATE])) {
if (Session::haveRightsOr("plugin_processmaker_case", [READ, UPDATE])) {
// force default sort to column id / DESC
if (empty($_SESSION['glpisearch']['PluginProcessmakerCase'])
|| isset($_GET["reset"])
|| !isset($_GET["sort"])
) {
$_SESSION['glpisearch']['PluginProcessmakerCase']['order'] = 'DESC';
$_SESSION['glpisearch']['PluginProcessmakerCase']['sort'] = '1';
if (isset($_GET["reset"])) {
unset($_GET['reset']);
}
}
Search::show('PluginProcessmakerCase');
} else {
Html::displayRightError();

View File

@@ -4,14 +4,13 @@ include_once ("../../../inc/includes.php");
Session::checkCentralAccess();
$right = new PluginProcessmakerProcess_Profile();
$right = new PluginProcessmakerProcess_Profile();
if (isset($_POST["add"])) {
$right->check(-1, UPDATE, $_POST);
if ($right->add($_POST)) {
}
$right->add($_POST);
Html::back();
}
}
Html::displayErrorAndDie("lost");

View File

@@ -3,12 +3,9 @@ include_once ("../../../inc/includes.php");
switch ($_POST["action"]) {
case 'newcase':
if (isset($_POST['items_id']) && $_POST['items_id'] > 0) { // then this case will be bound to an item
// TODO: we must check if a case is not already existing
// to manage the problem of F5 (Refresh)
if (isset($_POST['items_id']) && $_POST['items_id'] > 0) {
//$hasCase = PluginProcessmakerCase::getIDFromItem($_POST['itemtype'], $_POST['items_id']);
//if ($hasCase === false && $_POST['plugin_processmaker_processes_id'] > 0) {
// then this case will be bound to an item
if ($_POST['plugin_processmaker_processes_id'] > 0) {
$resultCase = $PM_SOAP->startNewCase($_POST['plugin_processmaker_processes_id'], $_POST['itemtype'], $_POST['items_id'], Session::getLoginUserID());
@@ -18,9 +15,18 @@ switch ($_POST["action"]) {
if ($case->getFromGUID($resultCase->caseId)) {
$link = $case->getLinkURL();
$task = new PluginProcessmakerTask();
$task->getFromDBByQuery(" WHERE `plugin_processmaker_cases_id`=".$case->getID()); // normally there is only one and only one first task
$task->getFromDBByRequest([
'WHERE' => [
'plugin_processmaker_cases_id' => $case->getID()
],
]);
//$task->getFromDBByQuery(" WHERE `plugin_processmaker_cases_id`=".$case->getID()); // normally there is only one and only one first task
//$link .= '&forcetab=PluginProcessmakerTask$'.$task->getID();
Session::setActiveTab('PluginProcessmakerCase', 'PluginProcessmakerTask$'.$task->getID());
Session::setActiveTab('PluginProcessmakerCase', 'PluginProcessmakerTask$'.$task->fields['id']);
$item = new $_POST['itemtype'];
$item->getFromDB($_POST['items_id']);
unset($_SERVER['REQUEST_URI']); // to prevent use of processmaker.form.php in NavigateList
@@ -39,11 +45,18 @@ switch ($_POST["action"]) {
Html::back();
}
} else { // the case is created before the ticket (used for post-only case creation before ticket creation)
$pm_user_guid = PluginProcessmakerUser::getPMUserId( Session::getLoginUserID() );
$resultCase = $PM_SOAP->newCase( $_POST['plugin_processmaker_processes_id'],
[ 'GLPI_ITEM_CAN_BE_SOLVED' => 0,
'GLPI_SELFSERVICE_CREATED' => '1',
'GLPI_ITEM_TYPE' => 'Ticket',
'GLPI_URL' => $CFG_GLPI['url_base']] );
['GLPI_ITEM_CAN_BE_SOLVED' => 0,
'GLPI_SELFSERVICE_CREATED' => '1',
'GLPI_ITEM_TYPE' => 'Ticket',
'GLPI_URL' => $CFG_GLPI['url_base'],
// Specific to Tickets
// GLPI_TICKET_TYPE will contains 1 (= incident) or 2 (= request)
'GLPI_TICKET_TYPE' => $_POST['type'],
'GLPI_ITEM_REQUESTER_GLPI_ID' => Session::getLoginUserID(),
'GLPI_ITEM_REQUESTER_PM_ID' => $pm_user_guid
] );
if ($resultCase->status_code == 0) {
// case is created
// Must show it...

View File

@@ -54,6 +54,7 @@ function processMakerShowCase($ID, $from_helpdesk) {
$rand = rand();
$PM_SOAP->echoDomain();
echo "<script type='text/javascript' src='".$CFG_GLPI["root_doc"]."/plugins/processmaker/js/cases.helpdesk.js?rand=$rand'></script>";
$tkt = new Ticket;

177
hook.php
View File

@@ -24,66 +24,6 @@ function plugin_processmaker_MassiveActions($type) {
}
//function plugin_processmaker_MassiveActionsDisplay($options) {
// switch ($options['itemtype']) {
// case 'PluginProcessmakerProcess' :
// //case 'PluginProcessmakerCase' :
// switch ($options['action']) {
// case "plugin_processmaker_taskrefresh" :
// //case "plugin_processmaker_purgecase" :
// echo "<input type='submit' name='massiveaction' class='submit' ".
// "value='".__('Post')."'>";
// break;
// }
// break;
// }
// return "";
//}
//function plugin_processmaker_MassiveActionsProcess($data) {
// switch ($data['action']) {
// case "plugin_processmaker_taskrefresh" :
// if ($data['itemtype'] == 'PluginProcessmakerProcess') {
// foreach ($data["item"] as $key => $val) {
// if ($val == 1) {
// $process = new PluginProcessmakerProcess;
// $process->refreshTasks( array( 'id' => $key ) );
// }
// }
// }
// break;
// //case "plugin_processmaker_purgecase":
// // if ($data['itemtype'] == 'PluginProcessmakerCase') {
// // foreach ($data["item"] as $key => $val) {
// // if ($val == 1) {
// // $locCase= new PluginProcessmakerCase;
// // //$locCase->( array( 'id' => $key ) );
// // }
// // }
// // }
// // break;
// //case 'plugin_processmaker_process_profile_delete' :
// // if ($data['itemtype'] == 'PluginProcessmakerProcess_Profile') {
// // foreach ($data["item"] as $key => $val) {
// // if ($val == 1) {
// // $process_profile = new PluginProcessmakerProcess_Profile;
// // $process_profile->delete( array( 'id' => $key ), true );
// // }
// // }
// // }
// // break;
// }
//}
/**
* Summary of plugin_processmaker_install
* Creates tables and initializes tasks, "GLPI Requesters" group
@@ -192,6 +132,7 @@ function plugin_pre_item_update_processmaker(CommonITILObject $parm) {
switch ($key) {
case 'global_validation' :
$locVar[ 'GLPI_TICKET_GLOBAL_VALIDATION' ] = $val;
$locVar[ 'GLPI_ITEM_GLOBAL_VALIDATION' ] = $val;
break;
case 'itilcategories_id' :
$locVar[ 'GLPI_ITEM_ITIL_CATEGORY_ID' ] = $val;
@@ -250,73 +191,6 @@ function plugin_item_update_processmaker_satisfaction($parm) {
}
}
///**
// * Summary of plugin_pre_item_purge_processmaker
// * @param mixed $parm is the object
// */
//function plugin_pre_item_purge_processmaker ( $parm ) {
// if ($parm->getType() == 'Ticket_User' && is_array( $parm->fields ) && isset( $parm->fields['type'] ) && $parm->fields['type'] == 2) {
// $itemId = $parm->fields['tickets_id'];
// $itemType = 'Ticket';
// $technicians = PluginProcessmakerProcessmaker::getItemUsers( $itemType, $itemId, 2 ); // 2 for technicians
// if (PluginProcessmakerCase::getIDFromItem($itemType, $itemId) && count($technicians) == 1) {
// $parm->input = null; // to cancel deletion of the last tech in the ticket
// }
// }
//}
///**
// * Summary of plugin_item_purge_processmaker
// * @param mixed $parm is the object
// */
//function plugin_item_purge_processmaker($parm) {
// global $DB, $PM_SOAP;
// //$objects = ['Ticket', 'Change', 'Problem'];
// $object_users = ['Ticket_User', 'Change_User', 'Problem_User'];
// if (in_array($parm->getType(), $object_users) && is_array( $parm->fields ) && isset( $parm->fields['type'] ) && $parm->fields['type'] == 2) {
// // We just deleted a tech from this ticket then we must if needed "de-assign" the tasks assigned to this tech
// // and re-assign them to the first tech in the list !!!!
// $itemType = strtolower(explode('_', $parm->getType())[0]); // $parm->getType() returns 'Ticket_User';
// $itemId = $parm->fields[$itemType.'s_id'];
// $cases = PluginProcessmakerCase::getIDsFromItem($itemType, $itemId);
// foreach ($cases as $cases_id) {
// // cases are existing for this item
// $locCase = new PluginProcessmakerCase;
// if ($locCase->getFromDB($cases_id)) {
// $technicians = PluginProcessmakerProcessmaker::getItemUsers($itemType, $itemId, CommonITILActor::ASSIGN);
// $locVars = array( 'GLPI_TICKET_TECHNICIAN_GLPI_ID' => $technicians[0]['glpi_id'],
// 'GLPI_ITEM_TECHNICIAN_GLPI_ID' => $technicians[0]['glpi_id'],
// 'GLPI_TICKET_TECHNICIAN_PM_ID' => $technicians[0]['pm_id'],
// 'GLPI_ITEM_TECHNICIAN_PM_ID' => $technicians[0]['pm_id']
// );
// // and we must find all tasks assigned to this former user and re-assigned them to new user (if any :))!
// $caseInfo = $locCase->getCaseInfo( );
// if ($caseInfo !== false) {
// $locCase->sendVariables( $locVars);
// // need to get info on the thread of the GLPI current user
// // we must retreive currentGLPI user from this array
// $GLPICurrentPMUserId = PluginProcessmakerUser::getPMUserId( $parm->fields['users_id'] );
// if (property_exists($caseInfo, 'currentUsers') && is_array( $caseInfo->currentUsers )) {
// foreach ($caseInfo->currentUsers as $caseUser) {
// if ($caseUser->userId == $GLPICurrentPMUserId && in_array( $caseUser->delThreadStatus, array('DRAFT', 'OPEN', 'PAUSE' ) )) {
// $locCase->reassignCase($caseUser->delIndex, $caseUser->taskId, $caseUser->delThread, $parm->fields['users_id'], $technicians[0]['pm_id'] );
// }
// }
// }
// }
// }
// }
// }
//}
function plugin_processmaker_post_init() {
global $PM_DB, $PM_SOAP;
@@ -352,22 +226,26 @@ function plugin_processmaker_change_profile() {
function plugin_item_update_processmaker_tasks($parm) {
global $DB, $CFG_GLPI, $PM_SOAP;
// we need to test if a specific case is completed, and if so
// we should complete the linked cases (via linked tickets)
$pmTaskCat = new PluginProcessmakerTaskCategory;
if ($pmTaskCat->getFromDBbyCategory( $parm->fields['taskcategories_id'] )
&& in_array( 'state', $parm->updates )
&& $parm->input['state'] == 2) { // the task has just been set to DONE state
&& $parm->input['state'] == Planning::DONE
&& $parm->oldvalues['state'] == Planning::TODO) { // the task has just been set to DONE state
$itemtype = str_replace( 'Task', '', $parm->getType() );
//$itemtype = str_replace( 'Task', '', $parm->getType() );
$pmTask = new PluginProcessmakerTask($parm->getType());
$pmTask->getFromDB($parm->fields['id']);
$locCase = new PluginProcessmakerCase;
$locCase->getFromDB($pmTask->fields['plugin_processmaker_cases_id']); //Item($itemtype, $parm->fields['tickets_id']);
$locCase->getFromDB($pmTask->fields['plugin_processmaker_cases_id']);
$srccase_guid = $locCase->fields['case_guid'];
$msg = ' $locCase: '.str_replace("\n", "\n ", print_r($locCase, true))."\n";
$msg .= ' $task: '.str_replace("\n", "\n ", print_r($parm, true))."\n";
$msg .= ' $pmTask: '.str_replace("\n", "\n ", print_r($pmTask, true))."\n";
$msg .= "\n";
foreach ($DB->request( 'glpi_plugin_processmaker_caselinks', "is_active = 1 AND sourcetask_guid='".$pmTaskCat->fields['pm_task_guid']."'") as $targetTask) {
// Must check the condition
@@ -390,7 +268,7 @@ function plugin_item_update_processmaker_tasks($parm) {
// must read some values
$externalapplication = json_decode( $targetTask['externalapplication'], true );
// must be of the form
// {"method":"POST","url":"http://arsupd201.ar.ray.group:8000/search_by_userid/","params":{"user":"@@USER_ID","system":"GPP","list":"@@ROLE_LIST"}}
// {"method":"POST","url":"urloftheservice","params":json_object}
// Where method is the POST, GET, ... method
// url is the URL to be called
// params is a list of parameters to get from running case
@@ -410,9 +288,20 @@ function plugin_item_update_processmaker_tasks($parm) {
$infoForTasks[ "@@$casevar" ] = "'$varval'";
unset( $infoForTasks[ $casevar ] );
}
$msg .= " ***********\n";
$msg .= ' $targetTask: '.str_replace("\n", "\n ", print_r($targetTask, true))."\n";
$targetTask['sourcecondition'] = str_replace( array_keys($infoForTasks), $infoForTasks, $targetTask['sourcecondition'] );
if (eval( "return ".$targetTask['sourcecondition'].";" )) {
$eval = eval( "return (".$targetTask['sourcecondition']." ? 1 : 0);" );
$msg .= ' $infoForTasks: '.str_replace("\n", "\n ", print_r($infoForTasks, true))."\n";
$msg .= ' $targetTask[\'sourcecondition\']: '.str_replace("\n", "\n ", print_r($targetTask['sourcecondition'], true))."\n";
$msg .= ' $result: '."$eval\n";
$msg .= "\n";
if ($eval) {
// look at each linked ticket if a case is attached and then if a task like $val is TO_DO
// then will try to routeCase for each tasks in $val
@@ -436,9 +325,13 @@ function plugin_item_update_processmaker_tasks($parm) {
$ch = curl_init();
$externalapplication['url'] = eval( "return '".str_replace( array_keys($infoForTasks), $infoForTasks, $externalapplication['url'])."' ;" ); // '???
curl_setopt($ch, CURLOPT_URL, $externalapplication['url'] );
if (isset($externalapplication['method']) && $externalapplication['method'] == 'POST') {
curl_setopt($ch, CURLOPT_POST, 1);
}
}
if ($targetTask['is_self']) {
$PM_SOAP->login(true);
$taskCase = $PM_SOAP->taskCase( $srccase_guid );
foreach ($taskCase as $task) {
// search for target task guid
@@ -446,6 +339,7 @@ function plugin_item_update_processmaker_tasks($parm) {
break;
}
}
$PM_SOAP->login();
$postdata['APP_UID'] = $srccase_guid;
$postdata['DEL_INDEX'] = $task->delegate;
@@ -470,20 +364,22 @@ function plugin_item_update_processmaker_tasks($parm) {
if ($externalapplication) {
// must call external application in order to get the needed data asynchroneously
// must be of the form
// {"url":"http://arsupd201.ar.ray.group:8000/search_by_userid/","params":{"user":"@@USER_ID","system":"GPP","list":"@@ROLE_LIST"}}
// {"url":"urloftheservice","params":{"user":"@@USER_ID","system":"GPP","list":"@@ROLE_LIST"}}
// url is the URL to be called
$externalapplicationparams['id'] = $cronaction->getID();
$externalapplicationparams = json_encode( $externalapplicationparams, JSON_HEX_APOS | JSON_HEX_QUOT);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $externalapplicationparams);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json', 'Content-Length: ' . strlen($externalapplicationparams), 'Expect:']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $pmconfig->fields['ssl_verify']);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, $pmconfig->fields['ssl_verify']);
//curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1 ) ;
//curl_setopt($ch, CURLOPT_PROXY, "localhost:8889");
//curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1 ) ;
//curl_setopt($ch, CURLOPT_PROXY, "localhost:8889");
$response = curl_exec ($ch);
@@ -493,6 +389,7 @@ function plugin_item_update_processmaker_tasks($parm) {
}
// }
} else {
// TODO to review this part of code as it is no longer usable like this !!!
foreach (Ticket_Ticket::getLinkedTicketsTo( $parm->fields['tickets_id'] ) as $tlink) {
if ($tlink['link'] == Ticket_Ticket::LINK_TO) {
$query = "SELECT glpi_plugin_processmaker_cases.id, MAX(glpi_plugin_processmaker_tasks.del_index) AS del_index FROM glpi_tickettasks
@@ -531,5 +428,9 @@ function plugin_item_update_processmaker_tasks($parm) {
}
}
$msg .= "================\n";
Toolbox::logInFile("processmaker", $msg);
}
}

View File

@@ -28,13 +28,13 @@ class PluginProcessmakerCase extends CommonDBTM {
//}
//static function canView() {
// return Session::haveRightsOr('plugin_processmaker_case', [READ, UPDATE]);
//}
static function canView() {
return Session::haveRightsOr('plugin_processmaker_case', [READ, UPDATE]);
}
//function canViewItem() {
// return Session::haveRightsOr('plugin_processmaker_case', READ);
//}
function canViewItem() {
return Session::haveRight('plugin_processmaker_case', READ);
}
//static function canUpdate( ) {
// return Session::haveRight('plugin_processmaker_config', UPDATE);
@@ -44,25 +44,31 @@ class PluginProcessmakerCase extends CommonDBTM {
// return Session::haveRight('plugin_processmaker_config', UPDATE);
//}
//function canEdit($ID) {
// return parent::canDelete();
//}
function maybeDeleted() {
return false;
}
static function canDelete() {
return parent::canDelete();
}
//static function canDelete() {
// return parent::canDelete();
//}
function canDeleteItem() {
return parent::canDeleteItem();
}
//function canDeleteItem() {
// return parent::canDeleteItem();
//}
static function canPurge() {
return self::canDelete();
return true; //self::canDelete();
}
function canPurgeItem() {
return $this->canDeleteItem();
return $_SESSION['glpiactiveprofile']['interface'] == 'central'
&& $this->fields['plugin_processmaker_cases_id'] == 0
&& $this->canDeleteItem()
&& (self::canDelete() || $this->fields['case_status'] == PluginProcessmakerCase::DRAFT);
}
static function canCancel() {
@@ -83,7 +89,7 @@ class PluginProcessmakerCase extends CommonDBTM {
// case is a sub-case
$tabname = __('Sub-case', 'processmaker');
}
return [ __CLASS__ => $tabname."<sup class='tab_nb'> ".self::getStatus($item->fields['case_status'])."</sup>"];
return [ 'main' => $tabname."<sup class='tab_nb'> ".self::getStatus($item->fields['case_status'])."</sup>"];
} else {
$items_id = $item->getID();
$itemtype = $item->getType();
@@ -114,13 +120,13 @@ class PluginProcessmakerCase extends CommonDBTM {
* @param integer $items_id is the item id
* @return integer cases_id
*/
static function getIDFromItem($itemtype, $items_id) {
$tmp = New self;
if ($tmp->getFromDBByQuery(" WHERE items_id=$items_id and itemtype='$itemtype'")) {
return $tmp->getID();
}
return false;
}
//static function getIDFromItem($itemtype, $items_id) {
// $tmp = New self;
// if ($tmp->getFromDBByQuery(" WHERE items_id=$items_id and itemtype='$itemtype'")) {
// return $tmp->getID();
// }
// return false;
//}
/**
@@ -133,7 +139,12 @@ class PluginProcessmakerCase extends CommonDBTM {
static function getIDsFromItem($itemtype, $items_id) {
$ret = [];
$dbu = new DbUtils;
foreach ($dbu->getAllDataFromTable( self::getTable(), "items_id=$items_id AND itemtype='$itemtype'") as $case) {
$restrict = [
"items_id" => $items_id,
"itemtype" => $itemtype,];
//foreach ($dbu->getAllDataFromTable( self::getTable(), "items_id=$items_id AND itemtype='$itemtype'") as $case)
foreach ($dbu->getAllDataFromTable( self::getTable(), $restrict) as $case) {
$ret[] = $case['id'];
}
return $ret;
@@ -156,7 +167,12 @@ class PluginProcessmakerCase extends CommonDBTM {
* @return boolean
*/
function getFromGUID($case_guid) {
return $this->getFromDBByQuery(" WHERE case_guid='$case_guid'");
$restrict=[
'WHERE' => [
'case_guid' => $case_guid,
],
];
return $this->getFromDBByRequest($restrict);
}
@@ -477,9 +493,6 @@ class PluginProcessmakerCase extends CommonDBTM {
*/
static function showCaseInfoTab(CommonGLPI $case, $tabnum = 1, $withtemplate = 0) {
// echo 'The idea is to show here the GLPI ITIL item to which it is linked, and to give a resume of the current case status, and to give possibility to delete or cancel the case.';
echo "<table style='margin-bottom: 0px' class='tab_cadre_fixe'>";
$itemtype = $case->fields['itemtype'];
$maintitle = __('Case is linked to a %1s', 'processmaker');
@@ -487,7 +500,7 @@ class PluginProcessmakerCase extends CommonDBTM {
$maintitle = __('Sub-case is linked to a %1s', 'processmaker');
}
echo "<tr><th colspan=12>".sprintf($maintitle, $itemtype::getTypeName(1))."</th></tr>";
echo "<tr><th colspan=12 >".sprintf($maintitle, $itemtype::getTypeName(1))."</th></tr>";
Ticket::commonListHeader(Search::HTML_OUTPUT);
@@ -502,12 +515,8 @@ class PluginProcessmakerCase extends CommonDBTM {
// it's a main case, not a sub-case
// and we have the rights to cancel cases
// show a form to be able to cancel the case
$rand = rand();
echo "<p></p>";
echo "<form style='margin-bottom: 0px' name='processmaker_case_cancelform$rand' id='processmaker_case_cancelform$rand' method='post' action='".Toolbox::getItemTypeFormURL("PluginProcessmakerCase")."'>";
echo "<div class='center'>";
echo "<table style='margin-bottom: 0px' class='tab_cadre_fixe'>";
echo "<tr><th colspan='2'>".__('Case cancellation', 'processmaker')."</th></tr>";
echo "<tr><td class='tab_bg_2' style='width: 10%'>".__('Cancel case', 'processmaker')."</td>";
@@ -517,33 +526,27 @@ class PluginProcessmakerCase extends CommonDBTM {
echo "<input onclick='return confirm(\"".__('Confirm cancellation?', 'processmaker')."\");' type='submit' name='cancel' value='".__('Cancel', 'processmaker')."' class='submit' >";
echo "</td></tr></table>";
Html::closeForm();
}
// will not show delete button if case is a sub-process
// and will show it only if it is a draft or if current glpi user has the right to delete cases and session is central
if ($case->fields['plugin_processmaker_cases_id'] == 0
&& ($case->fields['case_status'] == self::DRAFT
|| (plugin_processmaker_haveRight("case", DELETE)
&& $_SESSION['glpiactiveprofile']['interface'] == 'central'))) {
if ($case->canPurgeItem($case->getID())) {
// then propose a button to delete case
$rand = rand();
// the button will be effectively shown by the showFormButtons()
echo "<p></p>";
echo "<form style='margin-bottom: 0px' name='processmaker_case_deleteform$rand' id='processmaker_case_deleteform$rand' method='post' action='".Toolbox::getItemTypeFormURL("PluginProcessmakerCase")."'>";
echo "<div class='center'>";
echo "<table style='margin-bottom: 0px' class='tab_cadre_fixe'>";
echo "<th colspan='2'>".__('Case deletion', 'processmaker')."</th>";
echo "<tr><td class='tab_bg_2' style='width: 10%'>".__('Delete case', 'processmaker')."</td>";
echo "<td class='tab_bg_2' >";
echo "<input type='hidden' name='action' value='delete'>";
echo "<input type='hidden' name='cases_id' value='".$case->getID()."'>";
echo "<input onclick='return confirm(\"".__('Confirm expunge?')."\");' type='submit' name='delete' value='".__('Delete permanently')."' class='submit' >";
echo "</td></tr></table>";
echo "<tr><th colspan='12'>".__('Case deletion', 'processmaker')."</th></tr>";
// echo "<tr><td class='tab_bg_2' style='width: 10%'>".__('Delete case', 'processmaker')."</td>";
// echo "<td class='tab_bg_2' >";
// echo "<input type='hidden' name='action' value='delete'>";
// echo "<input type='hidden' name='cases_id' value='".$case->getID()."'>";
// echo "<input onclick='return confirm(\"".__('Confirm expunge?')."\");' type='submit' name='delete' value='".__('Delete permanently')."' class='submit' >";
// echo "</td></tr>";
echo "</table>";
echo "<p></p>";
Html::closeForm();
}
return;
@@ -556,7 +559,7 @@ class PluginProcessmakerCase extends CommonDBTM {
* @param CommonITILObject $item
*/
static function showForItem(CommonITILObject $item) {
global $DB, $CFG_GLPI;
global $DB, $CFG_GLPI, $PM_SOAP;
$items_id = $item->getField('id');
$itemtype = $item->getType();
@@ -570,7 +573,7 @@ class PluginProcessmakerCase extends CommonDBTM {
$rand = mt_rand();
$query = "SELECT gppc.`id` AS assocID, gppc.`id` as id, gppp.name as pname, gppc.`case_status`, gppc.`plugin_processmaker_cases_id`
$query = "SELECT gppc.`id` AS assocID, gppc.`id` as id, gppp.id as pid, gppp.name as pname, gppc.`case_status`, gppc.`plugin_processmaker_cases_id`
FROM `glpi_plugin_processmaker_cases` as gppc
LEFT JOIN `glpi_plugin_processmaker_processes` AS gppp ON gppp.`id`=gppc.`plugin_processmaker_processes_id`
WHERE gppc.`itemtype` = '$itemtype'
@@ -579,25 +582,33 @@ class PluginProcessmakerCase extends CommonDBTM {
$result = $DB->query($query);
$cases = [];
$used = [];
$used = [];
$pid = [];
if ($numrows = $DB->numrows($result)) {
while ($data = $DB->fetch_assoc($result)) {
$cases[$data['id']] = $data;
$used[$data['id']] = $data['id'];
$used[$data['id']] = $data['id'];
if (isset($pid[$data['pid']])) {
$pid[$data['pid']] += 1;
} else {
$pid[$data['pid']] = 1;
}
}
}
$columns = ['pname' => __('Process', 'processmaker'),
'name' => __('Title', 'processmaker'),
'status' => __('Status', 'processmaker'),
'sub' => __('Sub-case of', 'processmaker')
'name' => __('Title', 'processmaker'),
'status' => __('Status', 'processmaker'),
'sub' => __('Sub-case of', 'processmaker')
];
// check if item is not solved nor closed
if ($canupdate
&& $item->fields['status'] != CommonITILObject::SOLVED
&& $item->fields['status'] != CommonITILObject::CLOSED
&& $_SESSION['glpiactiveprofile']['interface'] != 'helpdesk') {
&& $_SESSION['glpiactiveprofile']['interface'] != 'helpdesk'
&& ($numrows < $PM_SOAP->config->fields['max_cases_per_item']
|| $PM_SOAP->config->fields['max_cases_per_item'] == 0)) {
echo "<div class='firstbloc'>";
echo "<form style='margin-bottom: 0px' name='processmaker_form$rand' id='processmaker_form$rand' method='post' action='".Toolbox::getItemTypeFormURL("PluginProcessmakerProcessmaker")."'>";
echo "<input type='hidden' name='action' value='newcase'>";
@@ -621,7 +632,8 @@ class PluginProcessmakerCase extends CommonDBTM {
PluginProcessmakerProcess::dropdown(['value' => 0,
'entity' => $item->fields['entities_id'],
'name' => 'plugin_processmaker_processes_id',
'condition' => "is_active=1 $is_itemtype"
'condition' => "is_active=1 $is_itemtype",
'specific_tags' => ['count_cases_per_item' => $pid]
]);
echo "</td><td class='tab_bg_2'>";
echo "<input type='submit' name='additem' value='"._sx('button', 'Add')."' class='submit'>";
@@ -728,7 +740,7 @@ class PluginProcessmakerCase extends CommonDBTM {
if ($item->getType() == __CLASS__) {
// we are in a case viewing the main tab
// the 'Case infos' tab
self::showCaseInfoTab($item, $tabnum, $withtemplate);
//self::showCaseInfoTab($item, $tabnum, $withtemplate);
} else {
@@ -1099,168 +1111,172 @@ class PluginProcessmakerCase extends CommonDBTM {
/**
* Summary of getSearchOptions
* Get default values to search engine to override
**/
static function getDefaultSearchRequest() {
$search = ['sort' => 1,
'order' => 'DESC'];
return $search;
}
/**
* Summary of rawSearchOptions
* @return mixed
*/
function getSearchOptions() {
function rawSearchOptions() {
$tab = [];
$tab['common'] = __('Process cases', 'processmaker');
$tab[] = [
'id' => 'common',
'name' => __('Process cases', 'processmaker')
];
$tab[1]['table'] = self::getTable();
$tab[1]['field'] = 'id';
$tab[1]['name'] = __('ID', 'processmaker');
$tab[1]['datatype'] = 'number';
$tab[1]['searchtype'] = 'contains';
$tab[1]['massiveaction'] = false;
$tab[] = [
'id' => '1',
'table' => $this->getTable(),
'field' => 'id',
'name' => __('ID'),
'datatype' => 'number',
'searchtype' => 'contains',
'massiveaction' => false
];
$tab[2]['table'] = self::getTable();
$tab[2]['field'] = 'name';
$tab[2]['name'] = __('Title', 'processmaker');
$tab[2]['datatype'] = 'itemlink';
$tab[2]['searchtype'] = 'contains';
$tab[2]['massiveaction'] = false;
$tab[] = [
'id' => '2',
'table' => $this->getTable(),
'field' => 'name',
'name' => __('Title'),
'datatype' => 'itemlink',
'searchtype' => 'contains',
'massiveaction' => false
];
$tab[3]['table'] = self::getTable();
$tab[3]['field'] = 'plugin_processmaker_processes_id';
$tab[3]['name'] = __('Process', 'processmaker');
$tab[3]['datatype'] = 'specific';
$tab[3]['searchtype'] = ['contains', 'equals', 'notequals'];
$tab[3]['massiveaction'] = false;
$tab[] = [
'id' => '3',
'table' => $this->getTable(),
'field' => 'plugin_processmaker_processes_id',
'name' => __('Process', 'processmaker'),
'datatype' => 'specific',
'searchtype' => [
'0' => 'contains',
'1' => 'equals',
'2' => 'notequals'
],
'massiveaction' => false
];
$tab[7]['table'] = self::getTable();
$tab[7]['field'] = 'itemtype';
$tab[7]['name'] = __('Item type', 'processmaker');
$tab[7]['massiveaction'] = false;
$tab[7]['datatype'] = 'specific';
$tab[7]['searchtype'] = ['contains', 'equals', 'notequals'];
$tab[] = [
'id' => '7',
'table' => $this->getTable(),
'field' => 'itemtype',
'name' => __('Item type'),
'massiveaction' => false,
'datatype' => 'specific',
'searchtype' => [
'0' => 'contains',
'1' => 'equals',
'2' => 'notequals'
]
];
$tab[8]['table'] = self::getTable();
$tab[8]['field'] = 'items_id';
$tab[8]['name'] = __('Item', 'processmaker');
$tab[8]['massiveaction'] = false;
$tab[8]['datatype'] = 'specific';
$tab[8]['additionalfields'] = ['itemtype'];
$tab[] = [
'id' => '8',
'table' => $this->getTable(),
'field' => 'items_id',
'name' => __('Item'),
'massiveaction' => false,
'datatype' => 'specific',
'additionalfields' => [
'0' => 'itemtype'
]
];
$tab[9]['table'] = Entity::getTable();
$tab[9]['field'] = 'name';
$tab[9]['name'] = __('Item entity', 'processmaker');
$tab[9]['massiveaction'] = false;
$tab[9]['datatype'] = 'itemlink';
$tab[] = [
'id' => '9',
'table' => 'glpi_entities',
'field' => 'name',
'name' => __('Item entity', 'processmaker'),
'massiveaction' => false,
'datatype' => 'itemlink'
];
$tab[10]['table'] = self::getTable();
$tab[10]['field'] = 'case_status';
$tab[10]['name'] = __('Status', 'processmaker');
$tab[10]['datatype'] = 'specific';
$tab[10]['searchtype'] = ['contains', 'equals', 'notequals'];
$tab[10]['massiveaction'] = false;
$tab[] = [
'id' => '10',
'table' => $this->getTable(),
'field' => 'case_status',
'name' => __('Status'),
'datatype' => 'specific',
'searchtype' => [
'0' => 'contains',
'1' => 'equals',
'2' => 'notequals'
],
'massiveaction' => false
];
$tab[14]['table'] = self::getTable();
$tab[14]['field'] = 'plugin_processmaker_cases_id';
$tab[14]['name'] = __('Sub-case of', 'processmaker');
$tab[14]['datatype'] = 'specific';
//$tab[14]['searchtype'] = ['contains', 'equals', 'notequals'];
$tab[14]['massiveaction'] = false;
$tab[14]['nosearch'] = true;
$tab[] = [
'id' => '14',
'table' => $this->getTable(),
'field' => 'plugin_processmaker_cases_id',
'name' => __('Sub-case of', 'processmaker'),
'datatype' => 'specific',
'massiveaction' => false,
'nosearch' => true
];
$tab[16]['table'] = self::getTable();
$tab[16]['field'] = 'id';
$tab[16]['name'] = __('Creation date', 'processmaker');
$tab[16]['datatype'] = 'specific';
//$tab[16]['searchtype'] = ['contains', 'equals', 'notequals'];
$tab[16]['massiveaction'] = false;
$tab[16]['nosearch'] = true;
$tab[16]['processmaker_cases'] = 'creation_date';
$tab[] = [
'id' => '16',
'table' => $this->getTable(),
'field' => 'id',
'name' => __('Creation date'),
'datatype' => 'specific',
'massiveaction' => false,
'nosearch' => true,
'processmaker_cases' => 'creation_date'
];
$tab[18]['table'] = self::getTable();
$tab[18]['field'] = 'id';
$tab[18]['name'] = __('Last update date', 'processmaker');
$tab[18]['datatype'] = 'specific';
// $tab[18]['searchtype'] = ['contains', 'equals', 'notequals'];
$tab[18]['massiveaction'] = false;
$tab[18]['nosearch'] = true;
$tab[18]['processmaker_cases'] = 'update_date';
$tab[] = [
'id' => '18',
'table' => $this->getTable(),
'field' => 'id',
'name' => __('Last update'),
'datatype' => 'specific',
'massiveaction' => false,
'nosearch' => true,
'processmaker_cases' => 'update_date'
];
return $tab;
}
function showForm ($ID, $options = ['candel'=>false]) {
//global $DB, $CFG_GLPI, $LANG;
$options['colspan'] = 6;
$options['formtitle'] = sprintf( __('Case status is \'%s\'', 'processmaker'), self::getStatus($this->fields['case_status']));
$options['candel'] = true;
$this->initForm($ID, $options);
$this->showFormHeader($options);
//echo "<tr class='tab_bg_1'>";
//echo "<td>".__("Name")."</td><td>";
//echo "<input size='100' type='text' name='name' value='".Html::cleanInputText($this->fields["name"])."'>";
//echo "</td></tr>";
$process = new PluginProcessmakerProcess;
$process->getFromDB($this->fields['plugin_processmaker_processes_id']);
//echo "<tr class='tab_bg_1'>";
//echo "<td >".__("Active")."</td><td>";
//Dropdown::showYesNo("is_active", $this->fields["is_active"]);
//echo "</td></tr>";
if ($process->fields['maintenance']) {
PluginProcessmakerProcess::showUnderMaintenance($process->fields['name'], 'small');
}
self::showCaseInfoTab($this);
//echo "<tr class='tab_bg_1'>";
//echo "<td >".__("External data")."</td><td>";
//Dropdown::showYesNo("is_externaldata", $this->fields["is_externaldata"]);
//echo "</td></tr>";
//echo '</div>' ;
//echo "<tr class='tab_bg_1'>";
//echo "<td >".__("Self")."</td><td>";
//Dropdown::showYesNo("is_self", $this->fields["is_self"]);
//echo "</td></tr>";
//echo "<tr class='tab_bg_1'>";
//echo "<td >".__("Source task GUID")."</td><td>";
////PluginProcessmakerTaskCategory::dropdown(array('name' => 'plugin_processmaker_taskcategories_id_source',
//// 'display_emptychoice' => false,
//// 'value' => $this->fields['plugin_processmaker_taskcategories_id_source']));
//echo "<input size='100' type='text' name='sourcetask_guid' value='".$this->fields["sourcetask_guid"]."'>";
//echo "</td></tr>";
//echo "<tr class='tab_bg_1'>";
//echo "<td >".__("Target task GUID")."</td><td>";
////PluginProcessmakerTaskCategory::dropdown(array('name' => 'plugin_processmaker_taskcategories_id_target',
//// 'display_emptychoice' => false,
//// 'value' => $this->fields['plugin_processmaker_taskcategories_id_target']));
//echo "<input size='100' type='text' name='targettask_guid' value='".$this->fields["targettask_guid"]."'>";
//echo "</td></tr>";
//echo "<tr class='tab_bg_1'>";
//echo "<td >".__("Target process GUID")."</td><td>";
////Dropdown::show( 'PluginProcessmakerProcess', array('name' => 'plugin_processmaker_processes_id',
//// 'display_emptychoice' => true,
//// 'value' => $this->fields['plugin_processmaker_processes_id'],
//// 'condition' => 'is_active = 1'));
//echo "<input size='100' type='text' name='targetprocess_guid' value='".$this->fields["targetprocess_guid"]."'>";
//echo "</td></tr>";
//echo "<tr class='tab_bg_1'>";
//echo "<td>".__("Target dynaform GUID")."</td><td>";
//echo "<input size='100' type='text' name='targetdynaform_guid' value='".$this->fields["targetdynaform_guid"]."'>";
//echo "</td></tr>";
//echo "<tr class='tab_bg_1'>";
//echo "<td>".__("Source condition")."</td><td>";
////echo "<input size='100' type='text' name='sourcecondition' value='".$this->fields["sourcecondition"]."'>";
//echo "<textarea cols='100' rows='3' name='sourcecondition' >".$this->fields["sourcecondition"]."</textarea>";
//echo "</td></tr>";
//echo "<tr class='tab_bg_1'>";
//echo "<td >".__("Claim target task")."</td><td>";
//Dropdown::showYesNo("is_targettoclaim", $this->fields["is_targettoclaim"]);
//echo "</td></tr>";
//echo "<tr class='tab_bg_1'>";
//echo "<td>".__("External application JSON config")."</td><td>";
//echo "<textarea cols='100' rows='6' name='externalapplication' >".$this->fields["externalapplication"]."</textarea>";
//echo "</td></tr>";
$this->showFormButtons($options );
Html::closeForm();
$options['candel'] = true;
$this->showFormButtons($options);
echo Html::scriptBlock("
$('#tabsbody th').css('text-align', 'center');
$('#tabsbody td').css('text-align', 'center');
");
}
@@ -1271,21 +1287,31 @@ class PluginProcessmakerCase extends CommonDBTM {
*/
function defineTabs($options = []) {
// $ong = array('empty' => $this->getTypeName(1));
$process = new PluginProcessmakerProcess;
$process->getFromDB($this->fields['plugin_processmaker_processes_id']);
$ong = [];
//$this->addDefaultFormTab($ong);
if (self::isLayoutWithMain()) {
$this->addDefaultFormTab($ong);
}
$this->addStandardTab('PluginProcessmakerTask', $ong, $options);
if (!$process->fields['maintenance']) {
$this->addStandardTab('PluginProcessmakerTask', $ong, $options);
}
$this->addStandardTab(__CLASS__, $ong, $options);
if (!self::isLayoutWithMain()) {
$this->addStandardTab(__CLASS__, $ong, $options);
}
$this->addStandardTab('PluginProcessmakerCasemap', $ong, $options);
if (!$process->fields['maintenance']) {
$this->addStandardTab('PluginProcessmakerCasemap', $ong, $options);
$this->addStandardTab('PluginProcessmakerCasehistory', $ong, $options);
$this->addStandardTab('PluginProcessmakerCasehistory', $ong, $options);
$this->addStandardTab('PluginProcessmakerCasechangelog', $ong, $options);
$this->addStandardTab('PluginProcessmakerCasechangelog', $ong, $options);
$this->addStandardTab('PluginProcessmakerCasedynaform', $ong, $options);
$this->addStandardTab('PluginProcessmakerCasedynaform', $ong, $options);
}
return $ong;
}
@@ -1311,7 +1337,9 @@ class PluginProcessmakerCase extends CommonDBTM {
$ret = true;
$dbu = new DbUtils;
// then must delete any sub-processes (sub-cases)
foreach ($dbu->getAllDataFromTable(self::getTable(), "`plugin_processmaker_cases_id` = ".$this->getID()) as $row) {
$restrict = ["plugin_processmaker_cases_id" => $this->getID()];
//foreach ($dbu->getAllDataFromTable(self::getTable(), "`plugin_processmaker_cases_id` = ".$this->getID()) as $row) {
foreach ($dbu->getAllDataFromTable(self::getTable(), $restrict) as $row) {
$tmp = new self;
$tmp->fields = $row;
$ret &= $tmp->delete(['id' => $row['id']]);
@@ -1332,4 +1360,5 @@ class PluginProcessmakerCase extends CommonDBTM {
return $DB->query($query);
}
}

View File

@@ -10,13 +10,14 @@
*/
class PluginProcessmakerCasechangelog extends CommonDBTM {
static function displayTabContentForItem(CommonGLPI $case, $tabnum=1, $withtemplate=0) {
static function displayTabContentForItem(CommonGLPI $case, $tabnum = 1, $withtemplate = 0) {
global $CFG_GLPI, $PM_SOAP;
$rand = rand();
$caseHistoryURL = $PM_SOAP->serverURL."/cases/ajaxListener?action=changeLogHistory&rand=$rand";
$PM_SOAP->echoDomain();
echo "<script type='text/javascript' src='".$CFG_GLPI["root_doc"]."/plugins/processmaker/js/cases.js'></script>"; //?rand=$rand'
$iframe = "<iframe
@@ -27,11 +28,11 @@ class PluginProcessmakerCasechangelog extends CommonDBTM {
onload=\"onOtherFrameLoad( 'caseChangeLogHistory', 'caseiframe-caseChangeLogHistory', 'body', 0 );\">
</iframe>";
$PM_SOAP->initCaseAndShowTab(['APP_UID' => $case->fields['case_guid'], 'DEL_INDEX' => 1], $iframe, $rand) ;
$PM_SOAP->initCaseAndShowTab(['APP_UID' => $case->fields['case_guid'], 'DEL_INDEX' => 1], $iframe, $rand);
}
function getTabNameForItem(CommonGLPI $case, $withtemplate = 0){
function getTabNameForItem(CommonGLPI $case, $withtemplate = 0) {
return __('Change log', 'processmaker');
}
}
}

View File

@@ -19,6 +19,7 @@ class PluginProcessmakerCasedynaform extends CommonDBTM {
$proj = new PluginProcessmakerProcess;
$proj->getFromDB($case->fields['plugin_processmaker_processes_id']);
$PM_SOAP->echoDomain();
echo "<script type='text/javascript' src='".$CFG_GLPI["root_doc"]."/plugins/processmaker/js/cases.js'></script>"; //?rand=$rand'
echo "<script type='text/javascript'>
@@ -37,7 +38,7 @@ class PluginProcessmakerCasedynaform extends CommonDBTM {
$.ajax( { url: '".$PM_SOAP->serverURL."/cases/cases_Open?sid=".$PM_SOAP->getPMSessionID()."&APP_UID={$case->fields['case_guid']}&DEL_INDEX=1&action=TO_DO&glpi_init_case=1&glpi_domain={$config->fields['domain']}',
xhrFields: { withCredentials: true },
cache: false,
crossDomain: true,
crossDomain: true,
success: function(jqXHR) {
//debugger;
loctabs.append( '<div id=\'' + name + '\'>' + html + '</div>');

View File

@@ -9,7 +9,7 @@
* @author MoronO
*/
class PluginProcessmakerCasehistory extends CommonDBTM {
static function displayTabContentForItem(CommonGLPI $case, $tabnum=1, $withtemplate=0) {
static function displayTabContentForItem(CommonGLPI $case, $tabnum = 1, $withtemplate = 0) {
global $CFG_GLPI, $PM_SOAP;
$rand = rand();
@@ -17,6 +17,7 @@ class PluginProcessmakerCasehistory extends CommonDBTM {
$caseHistoryURL = $PM_SOAP->serverURL
."/cases/ajaxListener?action=caseHistory&rand=$rand";
$PM_SOAP->echoDomain();
echo "<script type='text/javascript' src='".$CFG_GLPI["root_doc"]."/plugins/processmaker/js/cases.js'></script>";
$iframe = "<iframe
@@ -27,11 +28,11 @@ class PluginProcessmakerCasehistory extends CommonDBTM {
onload=\"onOtherFrameLoad( 'caseHistory', 'caseiframe-caseHistory', 'body', 0 );\">
</iframe>";
$PM_SOAP->initCaseAndShowTab(['APP_UID' => $case->fields['case_guid'], 'DEL_INDEX' => 1], $iframe, $rand) ;
$PM_SOAP->initCaseAndShowTab(['APP_UID' => $case->fields['case_guid'], 'DEL_INDEX' => 1], $iframe, $rand);
}
function getTabNameForItem(CommonGLPI $case, $withtemplate = 0){
function getTabNameForItem(CommonGLPI $case, $withtemplate = 0) {
return __('History', 'processmaker');
}
}
}

View File

@@ -148,136 +148,127 @@ class PluginProcessmakerCaselink extends CommonDBTM {
/**
* Summary of getSearchOptions
* Summary of rawSearchOptions
* @return mixed
*/
function getSearchOptions() {
function rawSearchOptions() {
$tab = [];
$tab['common'] = __('ProcessMaker', 'processmaker');
$tab[] = [
'id' => 'common',
'name' => __('ProcessMaker', 'processmaker')
];
$tab[1]['table'] = $this->getTable();
$tab[1]['field'] = 'name';
$tab[1]['name'] = __('Name');
$tab[1]['datatype'] = 'itemlink';
$tab[1]['itemlink_type'] = $this->getType();
$tab[] = [
'id' => '1',
'table' => $this->getTable(),
'field' => 'name',
'name' => __('Name'),
'datatype' => 'itemlink',
'itemlink_type' => 'PluginProcessmakerCaselink',
'massiveaction' => false
];
$tab[8]['table'] = $this->getTable();
$tab[8]['field'] = 'is_active';
$tab[8]['name'] = __('Active');
$tab[8]['massiveaction'] = true;
$tab[8]['datatype'] = 'bool';
$tab[] = [
'id' => '8',
'table' => $this->getTable(),
'field' => 'is_active',
'name' => __('Active'),
'massiveaction' => true,
'datatype' => 'bool'
];
$tab[9]['table'] = $this->getTable();
$tab[9]['field'] = 'date_mod';
$tab[9]['name'] = __('Last update');
$tab[9]['massiveaction'] = false;
$tab[9]['datatype'] = 'datetime';
$tab[] = [
'id' => '9',
'table' => $this->getTable(),
'field' => 'date_mod',
'name' => __('Last update'),
'massiveaction' => false,
'datatype' => 'datetime'
];
$tab[10]['table'] = $this->getTable();
$tab[10]['field'] = 'is_externaldata';
$tab[10]['name'] = __('External data', 'processmaker');
$tab[10]['massiveaction'] = false;
$tab[10]['datatype'] = 'bool';
$tab[] = [
'id' => '10',
'table' => $this->getTable(),
'field' => 'is_externaldata',
'name' => __('External data', 'processmaker'),
'massiveaction' => false,
'datatype' => 'bool'
];
$tab[11]['table'] = $this->getTable();
$tab[11]['field'] = 'is_self';
$tab[11]['name'] = __('Self', 'processmaker');
$tab[11]['massiveaction'] = false;
$tab[11]['datatype'] = 'bool';
$tab[] = [
'id' => '11',
'table' => $this->getTable(),
'field' => 'is_self',
'name' => __('Self', 'processmaker'),
'massiveaction' => false,
'datatype' => 'bool'
];
$tab[12]['table'] = $this->getTable();
$tab[12]['field'] = 'is_targettoclaim';
$tab[12]['name'] = __('Claim target task', 'processmaker');
$tab[12]['massiveaction'] = false;
$tab[12]['datatype'] = 'bool';
$tab[] = [
'id' => '12',
'table' => $this->getTable(),
'field' => 'is_targettoclaim',
'name' => __('Claim target task', 'processmaker'),
'massiveaction' => false,
'datatype' => 'bool'
];
$tab[13]['table'] = $this->getTable();
$tab[13]['field'] = 'externalapplication';
$tab[13]['name'] = __('External application JSON config', 'processmaker');
$tab[13]['massiveaction'] = false;
$tab[13]['datatype'] = 'text';
$tab[] = [
'id' => '13',
'table' => $this->getTable(),
'field' => 'externalapplication',
'name' => __('External application JSON config', 'processmaker'),
'massiveaction' => false,
'datatype' => 'text'
];
$tab[14]['table'] = $this->getTable();
$tab[14]['field'] = 'sourcetask_guid';
$tab[14]['name'] = __('Source task GUID', 'processmaker');
$tab[14]['massiveaction'] = false;
$tab[14]['datatype'] = 'text';
$tab[] = [
'id' => '14',
'table' => $this->getTable(),
'field' => 'sourcetask_guid',
'name' => __('Source task GUID', 'processmaker'),
'massiveaction' => false,
'datatype' => 'text'
];
$tab[15]['table'] = $this->getTable();
$tab[15]['field'] = 'targettask_guid';
$tab[15]['name'] = __('Target task GUID', 'processmaker');
$tab[15]['massiveaction'] = false;
$tab[15]['datatype'] = 'text';
$tab[] = [
'id' => '15',
'table' => $this->getTable(),
'field' => 'targettask_guid',
'name' => __('Target task GUID', 'processmaker'),
'massiveaction' => false,
'datatype' => 'text'
];
$tab[16]['table'] = $this->getTable();
$tab[16]['field'] = 'targetdynaform_guid';
$tab[16]['name'] = __('Target dynaform GUID', 'processmaker');
$tab[16]['massiveaction'] = false;
$tab[16]['datatype'] = 'text';
$tab[] = [
'id' => '16',
'table' => $this->getTable(),
'field' => 'targetdynaform_guid',
'name' => __('Target dynaform GUID', 'processmaker'),
'massiveaction' => false,
'datatype' => 'text'
];
$tab[17]['table'] = $this->getTable();
$tab[17]['field'] = 'targetprocess_guid';
$tab[17]['name'] = __('Target process GUID', 'processmaker');
$tab[17]['massiveaction'] = false;
$tab[17]['datatype'] = 'text';
$tab[] = [
'id' => '17',
'table' => $this->getTable(),
'field' => 'targetprocess_guid',
'name' => __('Target process GUID', 'processmaker'),
'massiveaction' => false,
'datatype' => 'text'
];
$tab[18]['table'] = $this->getTable();
$tab[18]['field'] = 'sourcecondition';
$tab[18]['name'] = __('Source condition', 'processmaker');
$tab[18]['massiveaction'] = false;
$tab[18]['datatype'] = 'text';
//$tab[14]['table'] = 'glpi_taskcategories';
//$tab[14]['field'] = 'completename'; //'plugin_processmaker_taskcategories_id_source';
//$tab[14]['name'] = __('Source task');
//$tab[14]['massiveaction'] = false;
//$tab[14]['datatype'] = 'dropdown';
//$tab[14]['forcegroupby'] = true;
//$tab[14]['joinparams'] =
// [
// 'beforejoin' => [
// 'table' => 'glpi_plugin_processmaker_taskcategories',
// 'joinparams' => [
// 'beforejoin' => [
// 'table' => 'glpi_plugin_processmaker_caselinks'
// ]
// ]
// ]
// ];
$tab[] = [
'id' => '18',
'table' => $this->getTable(),
'field' => 'sourcecondition',
'name' => __('Source condition', 'processmaker'),
'massiveaction' => false,
'datatype' => 'text'
];
return $tab;
}
//static function getMenuContent() {
// if (!Session::haveRight('entity', READ)) {
// return;
// }
// $front_page = "/plugins/processmaker/front";
// $menu = array();
// //$menu['title'] = self::getMenuName();
// //$menu['page'] = "$front_page/caselink.php";
// $itemtypes = array('PluginProcessmakerCaselink' => 'processmakercaselinks');
// foreach ($itemtypes as $itemtype => $option) {
// $menu['options'][$option]['title'] = $itemtype::getTypeName(Session::getPluralNumber());
// switch( $itemtype ) {
// case 'PluginProcessmakerCaselink':
// $menu['options'][$option]['page'] = $itemtype::getSearchURL(false);
// $menu['options'][$option]['links']['search'] = $itemtype::getSearchURL(false);
// if ($itemtype::canCreate()) {
// $menu['options'][$option]['links']['add'] = $itemtype::getFormURL(false);
// }
// break ;
// default :
// $menu['options'][$option]['page'] = PluginProcessmakerCaselink::getSearchURL(false);
// break ;
// }
// }
// return $menu;
//}
}

View File

@@ -9,4 +9,4 @@
* @author MoronO
*/
class PluginProcessmakerCaselinkaction extends CommonDBTM {
}
}

View File

@@ -10,7 +10,7 @@
*/
class PluginProcessmakerCasemap extends CommonDBTM {
static function displayTabContentForItem(CommonGLPI $case, $tabnum=1, $withtemplate=0) {
static function displayTabContentForItem(CommonGLPI $case, $tabnum = 1, $withtemplate = 0) {
global $CFG_GLPI, $PM_SOAP;
$rand = rand();
@@ -26,6 +26,7 @@ class PluginProcessmakerCasemap extends CommonDBTM {
"/cases/ajaxListener?action=processMap"
)."&rand=$rand";
$PM_SOAP->echoDomain();
echo "<script type='text/javascript' src='".$CFG_GLPI["root_doc"]."/plugins/processmaker/js/cases.js'></script>"; //?rand=$rand'
$iframe = "<iframe
@@ -35,12 +36,12 @@ class PluginProcessmakerCasemap extends CommonDBTM {
onload=\"onOtherFrameLoad( 'caseMap', 'caseiframe-caseMap', 'body', ".($project_type=='bpmn' ? "true" : "false" )." );\">
</iframe>";
$PM_SOAP->initCaseAndShowTab(['APP_UID' => $case->fields['case_guid'], 'DEL_INDEX' => 1], $iframe, $rand) ;
$PM_SOAP->initCaseAndShowTab(['APP_UID' => $case->fields['case_guid'], 'DEL_INDEX' => 1], $iframe, $rand);
}
function getTabNameForItem(CommonGLPI $case, $withtemplate = 0){
function getTabNameForItem(CommonGLPI $case, $withtemplate = 0) {
return __('Map', 'processmaker');
}
}
}

View File

@@ -158,8 +158,9 @@ class PluginProcessmakerConfig extends CommonDBTM {
echo "<tr class='tab_bg_1'>";
echo "<td >".__('Server URL (must be in same domain than GLPI)', 'processmaker')."</td><td >";
echo "<input size='50' type='text' name='pm_server_URL' value='".$config->fields['pm_server_URL']."'>";
echo "</td>";
echo "</td></tr>\n";
echo "<tr class='tab_bg_1'>";
echo "<td>".__('Common domain with GLPI', 'processmaker')."</td>";
echo "<td><font color='red'><div name='domain'>".$config->fields['domain']."</div></font>";
@@ -315,24 +316,29 @@ class PluginProcessmakerConfig extends CommonDBTM {
} else {
echo "<font color='red'>".__('Not connected');
}
echo "</td></tr>\n";
echo "<tr class='tab_bg_1'>";
echo "<td >" . __('Max cases per item (0=unlimited)', 'processmaker') . "</td>";
echo "<td ><input type='text' name='max_cases_per_item' value='".$config->fields["max_cases_per_item"]."'>";
echo "</td></tr>\n";
} else {
echo "<tr><td colspan='4' class='center b'>";
PluginProcessmakerProcessmaker::showUnderMaintenance();
echo "</td></tr>";
}
echo "<tr><td colspan='4' class='center b'>".__('Maintenance')."</td></tr>";
echo "<tr><td colspan='4' class='center b'>".__('Maintenance')."</td></tr>";
echo "<tr class='tab_bg_1'>";
echo "<td >".__('Maintenance mode')."</td><td >";
Dropdown::showYesNo("maintenance", $config->fields['maintenance']);
echo "</td></tr>";
echo "<tr class='tab_bg_1'>";
echo "<td >".__('Maintenance mode')."</td><td >";
Dropdown::showYesNo("maintenance", $config->fields['maintenance']);
echo "</td></tr>";
echo "<tr><td colspan='4'></td></tr>";
echo "<tr><td colspan='4'></td></tr>";
echo "<tr><th colspan='4'>".__('Processmaker system information', 'processmaker')."</th></tr>";
echo "<tr><th colspan='4'>".__('Processmaker system information', 'processmaker')."</th></tr>";
if ($setup_ok) {
$info = $PM_SOAP->systemInformation( );
echo '<tr><td>'.__('Version', 'processmaker').'</td><td>'.$info->version.'</td></tr>';
@@ -347,7 +353,7 @@ class PluginProcessmakerConfig extends CommonDBTM {
} else {
echo '<tr><td>'.__('Version', 'processmaker').'</td><td>'.__('Not yet!', 'processmaker').'</td></tr>';
}
$config->showFormButtons(['candel'=>false]);
$config->showFormButtons(['candel' => false]);
return false;
}

View File

@@ -44,6 +44,19 @@ class PluginProcessmakerProcess extends CommonDBTM {
return false;
}
/**
* Get default values to search engine to override
**/
static function getDefaultSearchRequest() {
$search = ['sort' => 1,
'order' => 'ASC'];
return $search;
}
/**
* Summary of refreshTasks
* will refresh (re-synch) all process task list
@@ -93,7 +106,9 @@ class PluginProcessmakerProcess extends CommonDBTM {
}
$pmtask = new PluginProcessmakerTaskCategory;
$currentasksinprocess = $dbu->getAllDataFromTable($pmtask->getTable(), '`is_active` = 1 AND `plugin_processmaker_processes_id` = '.$this->getID());
$restrict = ["is_active" => '1', 'plugin_processmaker_processes_id' => $this->getID()];
//$currentasksinprocess = $dbu->getAllDataFromTable($pmtask->getTable(), '`is_active` = 1 AND `plugin_processmaker_processes_id` = '.$this->getID());
$currentasksinprocess = $dbu->getAllDataFromTable($pmtask->getTable(), $restrict);
$tasks=[];
foreach ($currentasksinprocess as $task) {
$tasks[$task['pm_task_guid']] = $task;
@@ -288,7 +303,9 @@ class PluginProcessmakerProcess extends CommonDBTM {
$tmp->deleteByCriteria(['plugin_processmaker_processes_id' => $key]);
// must delete any taskcategory and translations
$pmtaskcategories = $dbu->getAllDataFromTable( PluginProcessmakerTaskCategory::getTable(), "plugin_processmaker_processes_id = $key");
$restrict = ["plugin_processmaker_processes_id" => $key];
//$pmtaskcategories = $dbu->getAllDataFromTable( PluginProcessmakerTaskCategory::getTable(), "plugin_processmaker_processes_id = $key");
$pmtaskcategories = $dbu->getAllDataFromTable( PluginProcessmakerTaskCategory::getTable(), $restrict );
foreach ($pmtaskcategories as $pmcat) {
// delete taskcat
$tmp = new TaskCategory;
@@ -387,104 +404,162 @@ class PluginProcessmakerProcess extends CommonDBTM {
/**
* Summary of getSearchOptions
* Summary of rawSearchOptions
* @return mixed
*/
function getSearchOptions() {
function rawSearchOptions() {
$tab = [];
$tab['common'] = __('ProcessMaker', 'processmaker');
$tab[] = [
'id' => 'common',
'name' => __('ProcessMaker', 'processmaker')
];
$tab[1]['table'] = 'glpi_plugin_processmaker_processes';
$tab[1]['field'] = 'name';
$tab[1]['name'] = __('Name');
$tab[1]['datatype'] = 'itemlink';
$tab[1]['itemlink_type'] = $this->getType();
$tab[] = [
'id' => '1',
'table' => $this->getTable(),
'field' => 'name',
'name' => __('Name'),
'datatype' => 'itemlink',
'itemlink_type' => 'PluginProcessmakerProcess',
'massiveaction' => false
];
//$tab[7]['table'] = 'glpi_plugin_processmaker_processes';
//$tab[7]['field'] = 'is_helpdeskvisible';
//$tab[7]['name'] = $LANG['tracking'][39];
//$tab[7]['massiveaction'] = true;
//$tab[7]['datatype'] = 'bool';
$tab[] = [
'id' => '8',
'table' => $this->getTable(),
'field' => 'is_active',
'name' => __('Active'),
'massiveaction' => true,
'datatype' => 'bool'
];
$tab[8]['table'] = 'glpi_plugin_processmaker_processes';
$tab[8]['field'] = 'is_active';
$tab[8]['name'] = __('Active');
$tab[8]['massiveaction'] = true;
$tab[8]['datatype'] = 'bool';
$tab[] = [
'id' => '4',
'table' => $this->getTable(),
'field' => 'comment',
'name' => __('Comments'),
'massiveaction' => true,
'datatype' => 'text'
];
$tab[4]['table'] = 'glpi_plugin_processmaker_processes';
$tab[4]['field'] = 'comment';
$tab[4]['name'] = __('Comments');
$tab[4]['massiveaction'] = true;
$tab[4]['datatype'] = 'text';
$tab[] = [
'id' => '9',
'table' => $this->getTable(),
'field' => 'date_mod',
'name' => __('Last update'),
'massiveaction' => false,
'datatype' => 'datetime'
];
$tab[9]['table'] = 'glpi_plugin_processmaker_processes';
$tab[9]['field'] = 'date_mod';
$tab[9]['name'] = __('Last update');
$tab[9]['massiveaction'] = false;
$tab[9]['datatype'] = 'datetime';
$tab[] = [
'id' => '10',
'table' => $this->getTable(),
'field' => 'process_guid',
'name' => __('Process GUID', 'processmaker'),
'massiveaction' => false,
'datatype' => 'text'
];
$tab[10]['table'] = 'glpi_plugin_processmaker_processes';
$tab[10]['field'] = 'process_guid';
$tab[10]['name'] = __('Process GUID', 'processmaker');
$tab[10]['massiveaction'] = false;
$tab[10]['datatype'] = 'text';
$tab[] = [
'id' => '11',
'table' => $this->getTable(),
'field' => 'project_type',
'name' => __('Process type', 'processmaker'),
'massiveaction' => false,
'datatype' => 'specific'
];
$tab[11]['table'] = 'glpi_plugin_processmaker_processes';
$tab[11]['field'] = 'project_type';
$tab[11]['name'] = __('Process type', 'processmaker');
$tab[11]['massiveaction'] = false;
$tab[11]['datatype'] = 'specific';
$tab[] = [
'id' => '12',
'table' => $this->getTable(),
'field' => 'hide_case_num_title',
'name' => __('Hide case num. & title', 'processmaker'),
'massiveaction' => true,
'datatype' => 'bool'
];
$tab[12]['table'] = 'glpi_plugin_processmaker_processes';
$tab[12]['field'] = 'hide_case_num_title';
$tab[12]['name'] = __('Hide case num. & title', 'processmaker');
$tab[12]['massiveaction'] = true;
$tab[12]['datatype'] = 'bool';
$tab[] = [
'id' => '13',
'table' => $this->getTable(),
'field' => 'insert_task_comment',
'name' => __('Insert Task Category', 'processmaker'),
'massiveaction' => true,
'datatype' => 'bool'
];
$tab[13]['table'] = 'glpi_plugin_processmaker_processes';
$tab[13]['field'] = 'insert_task_comment';
$tab[13]['name'] = __('Insert Task Category', 'processmaker');
$tab[13]['massiveaction'] = true;
$tab[13]['datatype'] = 'bool';
$tab[] = [
'id' => '14',
'table' => 'glpi_itilcategories',
'field' => 'completename',
'name' => __('Category'),
'datatype' => 'dropdown',
'massiveaction' => false
];
$tab[14]['table'] = 'glpi_itilcategories';
$tab[14]['field'] = 'completename';
$tab[14]['name'] = __('Category');
$tab[14]['datatype'] = 'dropdown';
$tab[14]['massiveaction'] = false;
$tab[] = [
'id' => '15',
'table' => $this->getTable(),
'field' => 'type',
'name' => __('Ticket type (self-service)', 'processmaker'),
'searchtype' => 'equals',
'datatype' => 'specific',
'massiveaction' => false
];
$tab[15]['table'] = 'glpi_plugin_processmaker_processes';
$tab[15]['field'] = 'type';
$tab[15]['name'] = __('Ticket type (self-service)', 'processmaker');
$tab[15]['searchtype'] = 'equals';
$tab[15]['datatype'] = 'specific';
$tab[15]['massiveaction'] = false;
$tab[] = [
'id' => '16',
'table' => $this->getTable(),
'field' => 'is_incident',
'name' => __('Visible in Incident for Central interface', 'processmaker'),
'massiveaction' => true,
'datatype' => 'bool'
];
$tab[16]['table'] = 'glpi_plugin_processmaker_processes';
$tab[16]['field'] = 'is_incident';
$tab[16]['name'] = __('Visible in Incident for Central interface', 'processmaker');
$tab[16]['massiveaction'] = true;
$tab[16]['datatype'] = 'bool';
$tab[] = [
'id' => '17',
'table' => $this->getTable(),
'field' => 'is_request',
'name' => __('Visible in Request for Central interface', 'processmaker'),
'massiveaction' => true,
'datatype' => 'bool'
];
$tab[17]['table'] = 'glpi_plugin_processmaker_processes';
$tab[17]['field'] = 'is_request';
$tab[17]['name'] = __('Visible in Request for Central interface', 'processmaker');
$tab[17]['massiveaction'] = true;
$tab[17]['datatype'] = 'bool';
$tab[] = [
'id' => '18',
'table' => $this->getTable(),
'field' => 'is_change',
'name' => __('Visible in Change', 'processmaker'),
'massiveaction' => true,
'datatype' => 'bool'
];
$tab[18]['table'] = 'glpi_plugin_processmaker_processes';
$tab[18]['field'] = 'is_change';
$tab[18]['name'] = __('Visible in Change', 'processmaker');
$tab[18]['massiveaction'] = true;
$tab[18]['datatype'] = 'bool';
$tab[] = [
'id' => '19',
'table' => $this->getTable(),
'field' => 'is_problem',
'name' => __('Visible in Problem', 'processmaker'),
'massiveaction' => true,
'datatype' => 'bool'
];
$tab[19]['table'] = 'glpi_plugin_processmaker_processes';
$tab[19]['field'] = 'is_problem';
$tab[19]['name'] = __('Visible in Problem', 'processmaker');
$tab[19]['massiveaction'] = true;
$tab[19]['datatype'] = 'bool';
$tab[] = [
'id' => '20',
'table' => 'glpi_plugin_processmaker_processes',
'field' => 'maintenance',
'name' => __('Maintenance'),
'massiveaction' => true,
'datatype' => 'bool'
];
$tab[] = [
'id' => '21',
'table' => 'glpi_plugin_processmaker_processes',
'field' => 'max_cases_per_item',
'name' => __('Max cases per item (0=unlimited)', 'processmaker'),
'massiveaction' => true,
'datatype' => 'number'
];
return $tab;
}
@@ -594,7 +669,7 @@ class PluginProcessmakerProcess extends CommonDBTM {
echo "</td></tr>";
echo "<tr class='tab_bg_1'>";
echo "<td >".__("Active")."</td><td>";
echo "<td >".__('Active')."</td><td>";
Dropdown::showYesNo("is_active", $this->fields["is_active"]);
echo "</td></tr>";
@@ -608,6 +683,11 @@ class PluginProcessmakerProcess extends CommonDBTM {
Dropdown::showYesNo("insert_task_comment", $this->fields["insert_task_comment"]);
echo "</td></tr>";
echo "<tr class='tab_bg_1'>";
echo "<td >" . __('Max cases per item (0=unlimited)', 'processmaker') . "</td>";
echo "<td ><input type='text' name='max_cases_per_item' value='".$this->fields["max_cases_per_item"]."'>";
echo "</td></tr>\n";
echo "<tr class='tab_bg_1'>";
echo "<td >".__('Visible in Incident for Central interface', 'processmaker')."</td><td>";
Dropdown::showYesNo("is_incident", $this->fields["is_incident"]);
@@ -680,6 +760,15 @@ class PluginProcessmakerProcess extends CommonDBTM {
Dropdown::showFromArray( 'project_type', self::getAllTypeArray(), [ 'value' => $this->fields["project_type"] ] );
echo "</td></tr>";
echo "<tr class='tab_bg_1'>";
echo "<td >".__('Maintenance mode')."</td><td>";
Dropdown::showYesNo("maintenance", $this->fields["maintenance"]);
if ($this->fields["maintenance"]) {
echo "</td><td>";
echo "<img src='/plugins/processmaker/pics/verysmall-under_maintenance.png' alt='Synchronize Task List' title='Synchronize Task List'>";
}
echo "</td></tr>";
$this->showFormButtons($options);
}
@@ -801,5 +890,24 @@ class PluginProcessmakerProcess extends CommonDBTM {
}
/**
* Summary of underMaintenance
* Shows a nice(?) under maintenance message
*/
static function showUnderMaintenance($ptitle, $size = '') {
global $CFG_GLPI;
if ($size != '') {
$size .= '-';
}
echo "<div class='center'>";
echo Html::image($CFG_GLPI['root_doc']."/plugins/processmaker/pics/{$size}under_maintenance.png");
echo "<p style='font-weight: bold;'>";
echo sprintf(__('Process \'%s\' is under maintenance, please retry later, thank you.', 'processmaker'), $ptitle);
echo "</p>";
echo "</div>";
}
}

View File

@@ -170,9 +170,14 @@ class PluginProcessmakerProcess_Profile extends CommonDBTM
*/
function prepareInputForAdd($input) {
$tmp = new self;
if ($tmp->getFromDBByQuery(" WHERE `plugin_processmaker_processes_id` = ".$input['plugin_processmaker_processes_id']."
AND `entities_id` = ".$input['entities_id']."
AND `profiles_id` = ".$input['profiles_id'])) {
$restrict=[
'WHERE' => [
'plugin_processmaker_processes_id' => $input['plugin_processmaker_processes_id'],
'entities_id' => $input['entities_id'],
'profiles_id' => $input['profiles_id']
],
];
if ($tmp->getFromDBByRequest($restrict)) {
//// then update existing
//$tmp->update(['id' => $tmp->getID(),
// 'is_recursive' => $input['is_recursive']]);

View File

@@ -180,16 +180,22 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
$this->taskWriter = $this->config->fields['users_id'];
$this->pm_group_guid = $this->config->fields['pm_group_guid'];
//$cipher_list = openssl_get_cipher_methods(true);
$wsdl = $this->serverURL."/services/wsdl2";
$context['ssl'] = ['verify_peer_name' => $this->config->fields['ssl_verify'], // Verification of peer name
'verify_peer' => $this->config->fields['ssl_verify'], // Verification of SSL certificate used
//'ciphers' => 'RSA',
];
$options = [ 'stream_context' => stream_context_create($context),
'soap_version' => SOAP_1_2,
'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP,
//'proxy_host' => 'localhost',
//'proxy_port' => 8888
$options = ['stream_context' => stream_context_create($context),
'soap_version' => SOAP_1_2,
'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP,
'keep_alive' => false,
//'trace' => true,
//'exceptions' => false,
//'proxy_host' => 'localhost',
//'proxy_port' => 8889
];
$this->pmSoapClient = new SoapClient($wsdl, $options);
@@ -246,7 +252,7 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
$gusr = new User;
if (is_numeric($admin_or_user)) {
$gusr->getFromDB($admin_or_user);
} elseif ($admin_or_user !== false) {
} else if ($admin_or_user !== false) {
$gusr->getFromDBbyName($admin_or_user);
} else {
$gusr->getFromDB(Session::getLoginUserID());
@@ -1440,18 +1446,35 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
$caseInfo = $myProcessMaker->getCaseInfo( $parm->input['processmaker_caseguid'], $parm->input['processmaker_delindex']);
$parm->input['name'] = $PM_DB->escape($caseInfo->caseName );
$caseInitialDueDate = $myProcessMaker->getVariables( $parm->input['processmaker_caseguid'], [ 'GLPI_ITEM_TITLE', 'GLPI_ITEM_INITIAL_DUE_DATE' ]);
if (array_key_exists( 'GLPI_ITEM_INITIAL_DUE_DATE', $caseInitialDueDate )) {
$parm->input['time_to_resolve'] = $caseInitialDueDate[ 'GLPI_ITEM_INITIAL_DUE_DATE' ]." 23:59:59";
$casegetvariables = ['GLPI_ITEM_TITLE', 'GLPI_ITEM_INITIAL_DUE_DATE', 'GLPI_ITEM_DUE_DATE'];
$caseresetvariables = [];
$caseDueDate = $myProcessMaker->getVariables( $parm->input['processmaker_caseguid'], $casegetvariables);
if (array_key_exists('GLPI_ITEM_INITIAL_DUE_DATE', $caseDueDate)) {
$parm->input['time_to_resolve'] = $caseDueDate['GLPI_ITEM_INITIAL_DUE_DATE'];
$caseresetvariables['GLPI_ITEM_INITIAL_DUE_DATE'] = '';
}
if (array_key_exists( 'GLPI_ITEM_DUE_DATE', $caseDueDate )) {
$parm->input['time_to_resolve'] = $caseDueDate['GLPI_ITEM_DUE_DATE'];
$caseresetvariables['GLPI_ITEM_DUE_DATE'] = '';
}
$re = '/^(?\'date\'[0-9]{4}-[0-1][0-9]-[0-3][0-9])( (?\'time\'[0-2][0-9]:[0-5][0-9]:[0-5][0-9]))*$/';
if (preg_match($re, $parm->input['time_to_resolve'], $matches) && !array_key_exists('time', $matches)) {
$parm->input['time_to_resolve'] .= " 23:59:59";
}
$txtItemTitle = $caseInfo->caseName;
if (array_key_exists( 'GLPI_ITEM_TITLE', $caseInitialDueDate )) {
$txtItemTitle = $caseInitialDueDate[ 'GLPI_ITEM_TITLE' ];
// reset those variables
$resultSave = $myProcessMaker->sendVariables( $parm->input['processmaker_caseguid'], [ "GLPI_ITEM_TITLE" => ''] );
if (array_key_exists( 'GLPI_ITEM_TITLE', $caseDueDate )) {
$txtItemTitle = $caseDueDate['GLPI_ITEM_TITLE'];
// reset item title case variable
$caseresetvariables['GLPI_ITEM_TITLE'] = '';
}
$parm->input['name'] = $PM_DB->escape($txtItemTitle );
if (count($caseresetvariables)) {
$resultSave = $myProcessMaker->sendVariables( $parm->input['processmaker_caseguid'], $caseresetvariables );
}
$procDef = new PluginProcessmakerProcess;
$procDef->getFromGUID( $caseInfo->processId );
if (isset($parm->input['type'])) {
@@ -1465,6 +1488,12 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
}
}
/**
* Summary of plugin_item_add_processmaker
* @param mixed $parm
* @return void
*/
public static function plugin_item_add_processmaker($parm) {
global $DB, $GLOBALS, $PM_SOAP;
@@ -1493,74 +1522,12 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
// before routing, send items_id and itemtype
// as this information was not available at case creation
$myCase->sendVariables( [ "GLPI_TICKET_ID" => $items_id ] );
$myCase->sendVariables( [ "GLPI_TICKET_ID" => $items_id,
"GLPI_ITEM_ID" => $items_id,
"GLPI_ITEM_TYPE" => $itemtype,
] );
// route case
$pmRouteCaseResponse = $PM_SOAP->routeCase($case_guid, $parm->input['processmaker_delindex'] );
// gets new case status
$caseInfo = $myCase->getCaseInfo();//$parm->input['processmaker_delindex']);
// now manage tasks associated with item
// create new tasks
if (property_exists( $pmRouteCaseResponse, 'routing' )) {
// now tries to get some variables to setup content for new task and to append text to solved task
$txtForTasks = $myCase->getVariables( [ "GLPI_ITEM_APPEND_TO_TASK",
"GLPI_ITEM_SET_STATUS",
"GLPI_TICKET_FOLLOWUP_CONTENT",
"GLPI_TICKET_FOLLOWUP_IS_PRIVATE",
"GLPI_TICKET_FOLLOWUP_REQUESTTYPES_ID" ] );
$itemSetStatus = '';
if (array_key_exists( 'GLPI_ITEM_SET_STATUS', $txtForTasks )) {
$itemSetStatus = $txtForTasks[ 'GLPI_ITEM_SET_STATUS' ];
}
if (array_key_exists( 'GLPI_ITEM_APPEND_TO_TASK', $txtForTasks )) {
$txtToAppendToTask = $txtForTasks[ 'GLPI_ITEM_APPEND_TO_TASK' ];
} else {
$txtToAppendToTask = '';
}
$createFollowup = false; // by default
if (array_key_exists( 'GLPI_TICKET_FOLLOWUP_CONTENT', $txtForTasks ) && $txtForTasks[ 'GLPI_TICKET_FOLLOWUP_CONTENT' ] != '') {
$createFollowup = true;
}
// reset those variables
$resultSave = $myCase->sendVariables( [ "GLPI_ITEM_APPEND_TO_TASK" => '',
"GLPI_ITEM_SET_STATUS" => '',
"GLPI_TICKET_FOLLOWUP_CONTENT" => '',
"GLPI_TICKET_FOLLOWUP_IS_PRIVATE" => '',
"GLPI_TICKET_FOLLOWUP_REQUESTTYPES_ID" => '' ] );
// routing has been done, then solve 1st task
$PM_SOAP->solveTask($myCase->getID(), $parm->input['processmaker_delindex'], [ 'txtToAppend' => $txtToAppendToTask, 'notif' => false] );
// create a followup if requested
if ($createFollowup && $itemtype == 'Ticket') {
$PM_SOAP->addTicketFollowup( $items_id, $txtForTasks );
}
// and create GLPI tasks for the newly created PM tasks.
foreach ($pmRouteCaseResponse->routing as $route) {
$PM_SOAP->addTask( $myCase->getID(),
$myCase->fields['itemtype'],
$myCase->fields['items_id'],
$caseInfo,
$route->delIndex,
PluginProcessmakerUser::getGLPIUserId( $route->userId ),
0,
$route->taskId,
$route->delThread );
}
if ($itemSetStatus != '') {
$PM_SOAP->setItemStatus($myCase->fields['itemtype'], $myCase->fields['items_id'], $itemSetStatus );
}
}
// evolution of case status: DRAFT, TO_DO, COMPLETED, CANCELLED
$myCase->update( ['id' => $myCase->getID(),
'case_status' => $caseInfo->caseStatus,
'name' => $caseInfo->caseName
]);
$PM_SOAP->derivateCase($myCase, ['DEL_INDEX' => $parm->input['processmaker_delindex']]);
} else {//if( array_key_exists('_head', $parm->input) ) { // this ticket have been created via email receiver.
$ptnProcessToStart = "/##TicketProcess:\s*#([0-9a-f]{32})\s*##/i";
@@ -1657,13 +1624,17 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
*/
public function addTask($cases_id, $itemtype, $items_id, $caseInfo, $delIndex, $techId, $groupId, $pmTaskId, $delThread, $options = []) {
global $DB, $PM_DB, $_SESSION;
$dbu = new DbUtils;
$default_options = [
'txtTaskContent' => '',
'start_date' => '',
'end_date' => '',
'reminder' => '',
'notif' => true
];
foreach ($default_options as $key => $opt) {
if (!isset($options[$key])) {
$options[$key] = $opt;
@@ -1710,7 +1681,7 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
$input['users_id'] = $this->taskWriter;
// manage groups
if ($techId == 0) { // then we must look-up DB to get the pseudo-group that will be assigned to the task
if ($techId == 0) { // then we must look-up DB to get the group that will be assigned to the task
$groupname='';
if ($groupId == 0) {
$query = "SELECT CONTENT.CON_VALUE FROM TASK_USER
@@ -1766,13 +1737,21 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
$input['groups_id_tech'] = $groups_id_tech;
}
if ($options['reminder'] != '' && $techId) {
$input['_planningrecall'] = ['before_time' => $options['reminder'],
'itemtype' => get_class($glpi_task),
'items_id' => '',
'users_id' => $techId,
'field' => 'begin'];
}
$donotif = self::saveNotification(false); // do not send notification yet as the PluginProcessmakerTask is not yet added to DB
$glpi_task->add( Toolbox::addslashes_deep( $input ) );
self::restoreNotification($donotif);
// to prevent error message for overlapping planning
if (isset($_SESSION["MESSAGE_AFTER_REDIRECT"][ERROR])) {
unset($_SESSION["MESSAGE_AFTER_REDIRECT"][ERROR]);
if (isset($_SESSION["MESSAGE_AFTER_REDIRECT"][WARNING])) {
unset($_SESSION["MESSAGE_AFTER_REDIRECT"][WARNING]);
}
if ($glpi_task->getId() > 0) {
@@ -1892,6 +1871,21 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
}
/**
* Summary of setItemDuedate
* @param mixed $itemtype
* @param mixed $itemId
* @param mixed $duedate
*/
public function setItemDuedate($itemtype, $itemId, $duedate) {
$dbu = new DbUtils;
$item = $dbu->getItemForItemtype( $itemtype );
if ($item->getFromDB( $itemId )) {
$item->update( ['id' => $itemId, 'time_to_resolve' => $duedate] );
}
}
/**
* Summary of setItemSolution
* @param mixed $itemType
@@ -2384,25 +2378,12 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
/**
* Summary of saveForm
* This function posts dynaform variables to PM, using the CURL module.
* @param mixed $request: is the $_REQUEST server array
* @param array $request: is the $_REQUEST server array
* //@param string $cookie: is the $_SERVER['HTTP_COOKIE'] string
* @return mixed: returns false if request failed, otherwise, returns true
*/
public function saveForm($request) {
//, $cookie ) {
//if (!function_exists( 'HandleHeaderLine' )) {
// function HandleHeaderLine( $curl, $header_line ) {
// //global $cookies;
// $temp = explode( ": ", $header_line );
// if (is_array( $temp ) && $temp[0] == 'Set-Cookie') {
// $temp2 = explode( "; ", $temp[1]);
// //$cookies .= $temp2[0].'; ' ;
// curl_setopt($curl, CURLOPT_COOKIE, $temp2[0]."; " );
// }
// return strlen($header_line);
// }
//}
$loggable = false;
$request = stripcslashes_deep( $request );
@@ -2411,7 +2392,6 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
//to be able to trace network traffic with a local proxy
// curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1 );
// curl_setopt($ch, CURLOPT_PROXY, "localhost:8888");
// curl_setopt($ch, CURLOPT_PROXY, "fry07689.fr.ray.group:8889");
//curl_setopt($ch, CURLINFO_HEADER_OUT, 1);
//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
@@ -2423,7 +2403,7 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, $this->config->fields['ssl_verify']);
//curl_setopt($ch, CURLOPT_HEADERFUNCTION, "HandleHeaderLine");
// to stock cookies in memory
// to store cookies in memory
// ( replace HandleHeaderLine function )
curl_setopt($ch, CURLOPT_COOKIEFILE, "");
@@ -2441,24 +2421,24 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
// check if any files are in the $_FILES global array
// and add them to the curl POST
$fileForm = $_FILES['form']['name'];
if( !empty($fileForm[array_keys($fileForm)[0]][1][array_keys($fileForm[array_keys($fileForm)[0]][1])[0]]) ){
if (!empty($fileForm[array_keys($fileForm)[0]][1][array_keys($fileForm[array_keys($fileForm)[0]][1])[0]])) {
foreach ($_FILES['form']['name'] as $key => $file) {
if (is_array($file)) {
// it's a grid which contains documents
foreach ($file as $row => $col) {
foreach($col as $control => $filename) {
$cfile = new CURLFile($_FILES['form']['tmp_name'][$key][$row][$control], $_FILES['form']['type'][$key][$row][$control],$_FILES['form']['name'][$key][$row][$control]);
foreach ($col as $control => $filename) {
$cfile = new CURLFile($_FILES['form']['tmp_name'][$key][$row][$control], $_FILES['form']['type'][$key][$row][$control], $_FILES['form']['name'][$key][$row][$control]);
$data["form[$key][$row][$control]"] = $cfile;
}
}
} else {
$cfile = new CURLFile($_FILES['form']['tmp_name'][$key], $_FILES['form']['type'][$key],$_FILES['form']['name'][$key]);
$cfile = new CURLFile($_FILES['form']['tmp_name'][$key], $_FILES['form']['type'][$key], $_FILES['form']['name'][$key]);
$data["form[$key]"] = $cfile;
}
}
}
// to get all cookies in one variable
$cookies = curl_getinfo($ch, CURLINFO_COOKIELIST);
//$cookies = curl_getinfo($ch, CURLINFO_COOKIELIST);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Expect:"]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // inject POST values
// add agent and referer params
@@ -2477,10 +2457,6 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
}
return ($response ? true : false);
//$n = preg_match("/HTTP\/1.1 302 /", $response, $matches);
//return ($n < 1 ? false : true) ;
}
/**
@@ -2548,14 +2524,21 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
public static function plugin_item_get_data_processmaker($item) {
global $_SESSION, $CFG_GLPI;
if (isset( $item->data ) && isset( $item->data['tasks'] )) {
$pmtask = new PluginProcessmakerTask($pmtask_itemtype);
foreach ($item->data['tasks'] as &$task) {
$pmtask_itemtype = $item->obj->getType().'Task';
$pmtask_items_id = $task['##task.id##'];
// for each task, we must check if it is in our task table
// and if yes, then process the content
$pmtask = new PluginProcessmakerTask($pmtask_itemtype);
if ($pmtask->getFromDBByQuery("WHERE itemtype = '$pmtask_itemtype' AND items_id = $pmtask_items_id")) {
$restrict=[
'WHERE' => [
'itemtype' => $pmtask_itemtype,
'items_id' => $pmtask_items_id
],
];
//if ($pmtask->getFromDBByQuery("WHERE itemtype = '$pmtask_itemtype' AND items_id = $pmtask_items_id")) {
if ($pmtask->getFromDBByRequest($restrict)) {
if (!in_array("tasks", $item->html_tags)) {
$item->html_tags[] = "tasks"; // to force GLPI to keep the below HTML tags, otherwise it will apply a Html::entities_deep() to the task.description
@@ -2564,7 +2547,13 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
$task['##task.description##'] = str_replace( '##processmaker.taskcomment##', $task['##task.categorycomment##'], $task['##task.description##'] );
$task['##task.description##'] = Html::nl2br_deep($task['##task.description##']);
$pmtask->getFromDBByQuery("WHERE itemtype = '$pmtask_itemtype' AND items_id = $pmtask_items_id");
//$restrict=[
// 'WHERE' => [
// 'itemtype' => $pmtask_itemtype,
// 'items_id' => $pmtask_items_id
// ],
// ];
//$pmtask->getFromDBByRequest($restrict);
//$caseurl = urldecode($CFG_GLPI["url_base"]."/index.php?redirect=PluginProcessmakerCase_".$pmtask->fields['plugin_processmaker_cases_id']);
$caseurl = $CFG_GLPI["url_base"]."/index.php?redirect=".urlencode("/plugins/processmaker/front/case.form.php?id=".$pmtask->fields['plugin_processmaker_cases_id']);
@@ -2598,7 +2587,8 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
if (in_array( $config->fields['taskcategories_id'], $ancestors)) {
$loc_completename = DropdownTranslation::getTranslatedValue( $taskCat->getID(), 'TaskCategory', 'completename', $_SESSION['glpilanguage'], $taskCat->fields['completename'] );
$loc_comment = DropdownTranslation::getTranslatedValue( $taskCat->getID(), 'TaskCategory', 'comment', $_SESSION['glpilanguage'], $taskCat->fields['comment'] );
$item->datas['content'] = $loc_completename."\n\n".str_replace( "##processmaker.taskcomment##\n##processmakercase.url##", $loc_comment, $item->datas['content']);
$item->datas['content'] = $loc_completename."\n\n".str_replace( "##processmaker.taskcomment##", $loc_comment, $item->datas['content']);
$item->datas['content'] = str_replace( "##processmakercase.url##", '', $item->datas['content']);
}
// restore default translations
if (isset( $trans )) {
@@ -2642,15 +2632,15 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
/**
* Summary of startNewCase
* @param mixed $processes_id integer: GLPI process id
* @param mixed $itemType string: item type 'Ticket', 'Change' or 'Problem'
* @param mixed $itemtype string: item type 'Ticket', 'Change' or 'Problem'
* @param mixed $items_id integer: id to thte item
* @param mixed $users_id integer: GLPI user id
* @return mixed
*/
public function startNewCase($processes_id, $itemType, $items_id, $users_id = null) {
public function startNewCase($processes_id, $itemtype, $items_id, $users_id = null) {
global $DB, $CFG_GLPI;
$requesters = PluginProcessmakerProcessmaker::getItemUsers( $itemType, $items_id, CommonITILActor::REQUESTER); // 1 for requesters
$requesters = PluginProcessmakerProcessmaker::getItemUsers( $itemtype, $items_id, CommonITILActor::REQUESTER); // 1 for requesters
if (!key_exists( 0, $requesters )) {
$requesters[0]['glpi_id'] = 0;
$requesters[0]['pm_id'] = 0;
@@ -2664,67 +2654,72 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
//}
// get item info to retreive title, description and duedate
$locItem = new $itemType; // $_POST['itemtype'] ; //Ticket();
$locItem->getFromDB( $items_id ); // $_POST['id'] ) ;
$item = new $itemtype;
$item->getFromDB( $items_id );
if ($locItem->countUsers(CommonITILActor::ASSIGN) == 0
|| !$locItem->isUser(CommonITILActor::ASSIGN, $users_id) ) {
$locItem->update( [ 'id' => $items_id, '_itil_assign' => [ '_type' => 'user', 'users_id' => $users_id ] ] );
if ($item->countUsers(CommonITILActor::ASSIGN) == 0
|| !$item->isUser(CommonITILActor::ASSIGN, $users_id) ) {
$item->update( [ 'id' => $items_id, '_itil_assign' => [ '_type' => 'user', 'users_id' => $users_id ] ] );
}
if (!isset($locItem->fields['time_to_resolve']) || $locItem->fields['time_to_resolve'] == null) {
$locItem->fields['time_to_resolve'] = "";
if (!isset($item->fields['time_to_resolve']) || $item->fields['time_to_resolve'] == null) {
$item->fields['time_to_resolve'] = "";
}
$resultCase = $this->newCase( $processes_id,
['GLPI_ITEM_CAN_BE_SOLVED' => 0,
'GLPI_TICKET_ID' => $items_id,
'GLPI_ITEM_ID' => $items_id,
'GLPI_ITEM_TYPE' => $itemType,
'GLPI_TICKET_REQUESTER_GLPI_ID' => $requesters[0]['glpi_id'],
'GLPI_ITEM_REQUESTER_GLPI_ID' => $requesters[0]['glpi_id'],
'GLPI_TICKET_REQUESTER_PM_ID' => $requesters[0]['pm_id'],
'GLPI_ITEM_REQUESTER_PM_ID' => $requesters[0]['pm_id'],
'GLPI_TICKET_TITLE' => $locItem->fields['name'],
'GLPI_ITEM_TITLE' => $locItem->fields['name'],
'GLPI_TICKET_DESCRIPTION' => $locItem->fields['content'],
'GLPI_ITEM_DESCRIPTION' => $locItem->fields['content'],
'GLPI_TICKET_DUE_DATE' => $locItem->fields['time_to_resolve'],
'GLPI_ITEM_OPENING_DATE' => $locItem->fields['date'],
'GLPI_ITEM_DUE_DATE' => $locItem->fields['time_to_resolve'],
'GLPI_ITEM_ITIL_CATEGORY_ID' => $locItem->fields['itilcategories_id'],
'GLPI_TICKET_URGENCY' => $locItem->fields['urgency'],
'GLPI_ITEM_URGENCY' => $locItem->fields['urgency'],
'GLPI_ITEM_IMPACT' => $locItem->fields['impact'],
'GLPI_ITEM_PRIORITY' => $locItem->fields['priority'],
'GLPI_TICKET_GLOBAL_VALIDATION' => $locItem->fields['global_validation'] ,
'GLPI_Ticket_TYPE' => $locItem->fields['type'] ,
'GLPI_TICKET_STATUS' => $locItem->fields['status'] ,
'GLPI_TICKET_TECHNICIAN_GLPI_ID' => $users_id,
'GLPI_ITEM_TECHNICIAN_GLPI_ID' => $users_id,
'GLPI_TICKET_TECHNICIAN_PM_ID' => PluginProcessmakerUser::getPMUserId( $users_id ),
'GLPI_ITEM_TECHNICIAN_PM_ID' => PluginProcessmakerUser::getPMUserId( $users_id ),
'GLPI_URL' => $CFG_GLPI['url_base']
] );
['GLPI_ITEM_CAN_BE_SOLVED' => 0,
'GLPI_TICKET_ID' => $items_id,
'GLPI_ITEM_ID' => $items_id,
'GLPI_ITEM_TYPE' => $itemtype,
'GLPI_ITEM_STATUS' => $item->fields['status'],
'GLPI_TICKET_REQUESTER_GLPI_ID' => $requesters[0]['glpi_id'],
'GLPI_ITEM_REQUESTER_GLPI_ID' => $requesters[0]['glpi_id'],
'GLPI_TICKET_REQUESTER_PM_ID' => $requesters[0]['pm_id'],
'GLPI_ITEM_REQUESTER_PM_ID' => $requesters[0]['pm_id'],
'GLPI_TICKET_TITLE' => $item->fields['name'],
'GLPI_ITEM_TITLE' => $item->fields['name'],
'GLPI_TICKET_DESCRIPTION' => $item->fields['content'],
'GLPI_ITEM_DESCRIPTION' => $item->fields['content'],
'GLPI_ITEM_OPENING_DATE' => $item->fields['date'],
'GLPI_TICKET_DUE_DATE' => $item->fields['time_to_resolve'],
'GLPI_ITEM_DUE_DATE' => $item->fields['time_to_resolve'],
'GLPI_ITEM_ITIL_CATEGORY_ID' => $item->fields['itilcategories_id'],
'GLPI_TICKET_URGENCY' => $item->fields['urgency'],
'GLPI_ITEM_URGENCY' => $item->fields['urgency'],
'GLPI_ITEM_IMPACT' => $item->fields['impact'],
'GLPI_ITEM_PRIORITY' => $item->fields['priority'],
// Specific to Tickets and Changes
// GLPI_ITEM_GLOBAL_VALIDATION will be '' when Problem, else it will be the global_validation field
'GLPI_TICKET_GLOBAL_VALIDATION' => $itemtype == 'Problem' ? '' : $item->fields['global_validation'],
'GLPI_ITEM_GLOBAL_VALIDATION' => $itemtype == 'Problem' ? '' : $item->fields['global_validation'],
'GLPI_TICKET_TECHNICIAN_GLPI_ID' => $users_id,
'GLPI_ITEM_TECHNICIAN_GLPI_ID' => $users_id,
'GLPI_TICKET_TECHNICIAN_PM_ID' => PluginProcessmakerUser::getPMUserId( $users_id ),
'GLPI_ITEM_TECHNICIAN_PM_ID' => PluginProcessmakerUser::getPMUserId( $users_id ),
'GLPI_URL' => $CFG_GLPI['url_base'],
// Specific to Tickets
// GLPI_TICKET_TYPE will contains 1 (= incident) or 2 (= request), or '' if itemtype is not Ticket
'GLPI_TICKET_TYPE' => $itemtype == 'Ticket' ? $item->fields['type'] : ''
]);
if ($resultCase->status_code === 0) {
$caseInfo = $this->getCaseInfo( $resultCase->caseId );
// save info to DB
$locCase = new PluginProcessmakerCase;
$locCase->add( ['id' => $resultCase->caseNumber,
'itemtype' => $itemType,
'items_id' => $items_id,
'case_guid' => $resultCase->caseId,
'case_status' => $caseInfo->caseStatus,
'name' => $caseInfo->caseName,
'entities_id' => $locItem->fields['entities_id'],
$locCase->add( ['id' => $resultCase->caseNumber,
'itemtype' => $itemtype,
'items_id' => $items_id,
'case_guid' => $resultCase->caseId,
'case_status' => $caseInfo->caseStatus,
'name' => $caseInfo->caseName,
'entities_id' => $item->fields['entities_id'],
'plugin_processmaker_processes_id' => $processes_id,
'plugin_processmaker_cases_id' => 0
'plugin_processmaker_cases_id' => 0
],
[], true );
$this->add1stTask($locCase->getID(), $itemType, $items_id, $caseInfo, ['userId' => $users_id] );
$this->add1stTask($locCase->getID(), $itemtype, $items_id, $caseInfo, ['userId' => $users_id] );
}
return $resultCase;
@@ -2750,64 +2745,13 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
$item->getFromDB($items_id);
// save the dynaform variables into the current case
$resultSave = $this->saveForm( $request );
if (isset($request['UID']) && isset($request['APP_UID']) && isset($request['__DynaformName__'])) {
$resultSave = $this->saveForm( $request );
}
// now derivate the case !!!
$pmRouteCaseResponse = $this->routeCase($myCase->fields['case_guid'], $request['DEL_INDEX']);
//if (property_exists($pmRouteCaseResponse, 'routing')) {
// // must check if case has started a sub-process
// // we may have several new cases for this case
// // must check if all child cases are existing in GLPI
// $locTaskCat = new PluginProcessmakerTaskCategory;
// foreach($pmRouteCaseResponse->routing as $route) {
// if ($locTaskCat->getFromGUID($route->taskId) && $locTaskCat->fields['is_subprocess']) {
// // look for APP_UID
// foreach($PM_DB->request("SELECT APP_UID FROM SUB_APPLICATION WHERE APP_PARENT='{$myCase->fields['case_guid']}' AND DEL_INDEX_PARENT={$route->delIndex} AND DEL_THREAD_PARENT={$route->delThread} AND SA_STATUS='ACTIVE'") as $subCase) {
// // normally only one case for this delIndex and delThread
// // now need to get the PRO_UID
// $sub_caseInfo = self::getCaseInfo($subCase['APP_UID']);
// $locProc = new PluginProcessmakerProcess;
// $locProc->getFromGUID($sub_caseInfo->processId);
// $locCase = new PluginProcessmakerCase;
// $locCase->add(['id' => $sub_caseInfo->caseNumber,
// 'case_guid'=> $sub_caseInfo->caseId,
// 'itemtype' => $itemtype,
// 'items_id' => $items_id,
// 'name' => $sub_caseInfo->caseName,
// 'entities_id' => $item->fields['entities_id'],
// 'case_status' => $sub_caseInfo->caseStatus,
// 'plugin_processmaker_processes_id' => $locProc->getID(),
// 'plugin_processmaker_cases_id' => $myCase->getID()]);
// // then create associated task
// if (property_exists( $sub_caseInfo, 'currentUsers' )) {
// foreach ($sub_caseInfo->currentUsers as $sub_route) {
// $this->addTask($locCase->getID(), $itemtype,
// $items_id,
// $sub_caseInfo,
// $sub_route->delIndex,
// PluginProcessmakerUser::getGLPIUserId($sub_route->userId),
// 0,
// $sub_route->taskId,
// $sub_route->delThread,
// []
// //array( 'txtTaskContent' => $txtTaskContent,
// // 'start_date' => $taskStartDate,
// // 'end_date' => $taskEndDate)
// );
// }
// }
// }
// }
// }
//}
$casevariables = ["GLPI_ITEM_TASK_CONTENT",
"GLPI_ITEM_APPEND_TO_TASK",
"GLPI_NEXT_GROUP_TO_BE_ASSIGNED",
@@ -2817,13 +2761,17 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
"GLPI_TICKET_FOLLOWUP_REQUESTTYPES_ID",
"GLPI_ITEM_TASK_ENDDATE",
"GLPI_ITEM_TASK_STARTDATE",
"GLPI_ITEM_TASK_REMINDER",
"GLPI_ITEM_SOLVED_TASK_ENDDATE",
"GLPI_ITEM_SOLVED_TASK_STARTDATE",
"GLPI_ITEM_SOLVED_TASK_SETINFO",
"GLPI_ITEM_SET_STATUS",
"GLPI_ITEM_STATUS",
"GLPI_ITEM_SET_SOLUTION_TEMPLATE_ID",
"GLPI_ITEM_SET_SOLUTION_TYPE_ID",
"GLPI_ITEM_APPEND_TO_SOLUTION_DESCRIPTION"
"GLPI_ITEM_APPEND_TO_SOLUTION_DESCRIPTION",
"GLPI_ITEM_INITIAL_DUE_DATE",
"GLPI_ITEM_DUE_DATE"
];
// now tries to get some variables to setup content for new task and to append text to solved task
@@ -2833,6 +2781,9 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
if (array_key_exists( 'GLPI_ITEM_SET_STATUS', $casevariablevalues )) {
$itemSetStatus = $casevariablevalues[ 'GLPI_ITEM_SET_STATUS' ];
}
if (array_key_exists( 'GLPI_ITEM_STATUS', $casevariablevalues )) {
$itemSetStatus = $casevariablevalues[ 'GLPI_ITEM_STATUS' ];
}
$txtItemTitle = '';
if (array_key_exists( 'GLPI_ITEM_TITLE', $casevariablevalues )) {
@@ -2867,6 +2818,11 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
}
}
$taskReminder = '';
if (array_key_exists( 'GLPI_ITEM_TASK_REMINDER', $casevariablevalues )) {
$taskReminder = $casevariablevalues[ 'GLPI_ITEM_TASK_REMINDER' ];
}
$solvedTaskStartDate = '';
$solvedTaskEndDate = '';
if (array_key_exists( 'GLPI_ITEM_SOLVED_TASK_ENDDATE', $casevariablevalues )) {
@@ -2892,6 +2848,18 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
$createFollowup = true;
}
$item_duedate = '';
if (array_key_exists('GLPI_ITEM_INITIAL_DUE_DATE', $casevariablevalues)) {
$item_duedate = $casevariablevalues['GLPI_ITEM_INITIAL_DUE_DATE'];
}
if (array_key_exists( 'GLPI_ITEM_DUE_DATE', $casevariablevalues )) {
$item_duedate = $casevariablevalues['GLPI_ITEM_DUE_DATE'];
}
$re = '/^(?\'date\'[0-9]{4}-[0-1][0-9]-[0-3][0-9])( (?\'time\'[0-2][0-9]:[0-5][0-9]:[0-5][0-9]))*$/';
if (preg_match($re, $item_duedate, $matches) && !array_key_exists('time', $matches)) {
$item_duedate .= " 23:59:59";
}
// reset those variables
$resetcasevariables = [];
foreach ($casevariables as $val) {
@@ -2923,8 +2891,9 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
$this->setItemTitle($itemtype, $items_id, $txtItemTitle);
}
if ($itemSetStatus != '') {
$this->setItemStatus($itemtype, $items_id, $itemSetStatus );
if ($item_duedate != '') {
// we are going to change the due date (time to resolve) of current GLPI Item
$this->setItemDuedate($itemtype, $items_id, $item_duedate);
}
if (array_key_exists( 'GLPI_ITEM_SET_SOLUTION_TEMPLATE_ID', $casevariablevalues )
@@ -2934,6 +2903,10 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
$this->setItemSolution($itemtype, $items_id, $casevariablevalues);
}
if ($itemSetStatus != '') {
$this->setItemStatus($itemtype, $items_id, $itemSetStatus );
}
// get the new case info
$caseInfo = $myCase->getCaseInfo($request['DEL_INDEX']); // not sure that it should passed this
@@ -2981,8 +2954,9 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
$sub_route->taskId,
$sub_route->delThread,
[ 'txtTaskContent' => $txtTaskContent,
'start_date' => $taskStartDate,
'end_date' => $taskEndDate]
'start_date' => $taskStartDate,
'end_date' => $taskEndDate,
'reminder' => $taskReminder]
);
// if end date was specified, then must change due date of the PM task
@@ -3005,6 +2979,7 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
'GLPI_TICKET_ID' => $items_id,
'GLPI_ITEM_ID' => $items_id,
'GLPI_ITEM_TYPE' => $itemtype,
'GLPI_ITEM_STATUS' => $item->fields['status'],
'GLPI_TICKET_REQUESTER_GLPI_ID' => $requesters[0]['glpi_id'],
'GLPI_ITEM_REQUESTER_GLPI_ID' => $requesters[0]['glpi_id'],
'GLPI_TICKET_REQUESTER_PM_ID' => $requesters[0]['pm_id'],
@@ -3013,22 +2988,26 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
'GLPI_ITEM_TITLE' => $item->fields['name'],
'GLPI_TICKET_DESCRIPTION' => $item->fields['content'],
'GLPI_ITEM_DESCRIPTION' => $item->fields['content'],
'GLPI_TICKET_DUE_DATE' => $item->fields['time_to_resolve'],
'GLPI_ITEM_OPENING_DATE' => $item->fields['date'],
'GLPI_TICKET_DUE_DATE' => $item->fields['time_to_resolve'],
'GLPI_ITEM_DUE_DATE' => $item->fields['time_to_resolve'],
'GLPI_ITEM_ITIL_CATEGORY_ID' => $item->fields['itilcategories_id'],
'GLPI_TICKET_URGENCY' => $item->fields['urgency'],
'GLPI_ITEM_URGENCY' => $item->fields['urgency'],
'GLPI_ITEM_IMPACT' => $item->fields['impact'],
'GLPI_ITEM_PRIORITY' => $item->fields['priority'],
'GLPI_TICKET_GLOBAL_VALIDATION' => $item->fields['global_validation'] ,
'GLPI_Ticket_TYPE' => $locItem->fields['type'] ,
'GLPI_TICKET_STATUS' => $locItem->fields['status'] ,
// Specific to Tickets and Changes
// GLPI_ITEM_GLOBAL_VALIDATION will be '' when Problem, else it will be the global_validation field
'GLPI_TICKET_GLOBAL_VALIDATION' => $itemtype == 'Problem' ? '' : $item->fields['global_validation'],
'GLPI_ITEM_GLOBAL_VALIDATION' => $itemtype == 'Problem' ? '' : $item->fields['global_validation'],
'GLPI_TICKET_TECHNICIAN_GLPI_ID' => $users_id,
'GLPI_ITEM_TECHNICIAN_GLPI_ID' => $users_id,
'GLPI_TICKET_TECHNICIAN_PM_ID' => PluginProcessmakerUser::getPMUserId( $users_id ),
'GLPI_ITEM_TECHNICIAN_PM_ID' => PluginProcessmakerUser::getPMUserId( $users_id ),
'GLPI_URL' => $CFG_GLPI['url_base']
'GLPI_URL' => $CFG_GLPI['url_base'],
// Specific to Tickets
// GLPI_TICKET_TYPE will contains 1 (= incident) or 2 (= request)
'GLPI_TICKET_TYPE' => $itemtype == 'Ticket' ? $item->fields['type'] : ''
];
$subCase->sendVariables($glpi_variables);
@@ -3047,8 +3026,9 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
$route->taskId,
$route->delThread,
[ 'txtTaskContent' => $txtTaskContent,
'start_date' => $taskStartDate,
'end_date' => $taskEndDate]
'start_date' => $taskStartDate,
'end_date' => $taskEndDate,
'reminder' => $taskReminder]
);
// if end date was specified, then must change due date of the PM task
if ($taskEndDate != '') {
@@ -3072,9 +3052,17 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
// must check if $open_task is not is_subprocess and is not already existing in the item
$locTaskCat = new PluginProcessmakerTaskCategory;
$locTask = new PluginProcessmakerTask();
$locTaskRestrict=[
'WHERE' => [
'plugin_processmaker_cases_id' => $parentCase->getID(),
'plugin_processmaker_taskcategories_id' => $locTaskCat->getID(),
'del_index' => $open_task->delIndex
],
];
if ($locTaskCat->getFromGUID($open_task->taskId)
&& !$locTaskCat->fields['is_subprocess']
&& !$locTask->getFromDBByQuery("WHERE `plugin_processmaker_cases_id`={$parentCase->getID()} AND `plugin_processmaker_taskcategories_id`={$locTaskCat->getID()} AND `del_index`={$open_task->delIndex}")) {
&& !$locTask->getFromDBByRequest($locTaskRestrict)) {
$this->addTask($parentCase->getID(), $itemtype,
$items_id,
$parentCaseInfo,
@@ -3084,8 +3072,9 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
$open_task->taskId,
$open_task->delThread,
[ 'txtTaskContent' => $txtTaskContent,
'start_date' => $taskStartDate,
'end_date' => $taskEndDate]
'start_date' => $taskStartDate,
'end_date' => $taskEndDate,
'reminder' => $taskReminder]
);
// if end date was specified, then must change due date of the PM task
@@ -3215,8 +3204,32 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
echo "<div class='center'>";
echo Html::image($CFG_GLPI['root_doc'].'/plugins/processmaker/pics/under_maintenance.png');
echo "<p style='font-weight: bold;'>";
__('ProcessMaker plugin is under maintenance, please retry later, thank you.', 'processmaker');
echo __('ProcessMaker plugin is under maintenance, please retry later, thank you.', 'processmaker');
echo "</p>";
echo "</div>";
}
/**
* Summary of echoDomain
*/
function echoDomain() {
if (isset($this->config->fields['domain']) && $this->config->fields['domain'] != '') {
$script = "
(function() {
var id = 'commonDomainGlpiPmScript_Wjd4uWisWHLt9I';
//debugger;
if ($('#' + id).length == 0) {
//debugger;
var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0];
g.type = 'text/javascript';
g.id = id;
g.text = 'try { document.domain = \'".$this->config->fields['domain']."\'; } catch(ev) { /*console.log(ev);*/ }';
s.parentNode.insertBefore(g, s);
}
})();";
echo Html::scriptBlock($script);
}
}
}

View File

@@ -10,4 +10,4 @@
*/
class PluginProcessmakerSelfservicedraft extends CommonDBTM {
}
}

View File

@@ -41,7 +41,13 @@ class PluginProcessmakerTask extends CommonITILTask
function getFromDB($items_id) {
global $DB;
if ($this->getFromDBByQuery(" WHERE itemtype='".$this->itemtype."' AND items_id=$items_id;" )) {
//if ($this->getFromDBByQuery(" WHERE itemtype='".$this->itemtype."' AND items_id=$items_id;" )) {
if ($this->getFromDBByRequest([
'WHERE' => [
'itemtype' => $this->itemtype,
'items_id' => $items_id
],
])) {
$task = new $this->itemtype;
if ($task->getFromDB( $items_id )) {
// then we should add our own fields
@@ -306,7 +312,11 @@ class PluginProcessmakerTask extends CommonITILTask
$rand = rand();
// get infos for the current task
$task = $dbu->getAllDataFromTable('glpi_plugin_processmaker_tasks', "id = $tabnum");
$restrict = [
"id" => $tabnum
];
//$task = $dbu->getAllDataFromTable('glpi_plugin_processmaker_tasks', "id = $tabnum");
$task = $dbu->getAllDataFromTable('glpi_plugin_processmaker_tasks', $restrict);
// shows the re-assign form
$caseInfo = $case->getCaseInfo();
@@ -347,6 +357,7 @@ class PluginProcessmakerTask extends CommonITILTask
}
}
$PM_SOAP->echoDomain();
echo "<script type='text/javascript' src='".$CFG_GLPI["root_doc"]."/plugins/processmaker/js/cases.js'></script>";
$csrf = Session::getNewCSRFToken();

View File

@@ -86,11 +86,11 @@ class PluginProcessmakerTaskCategory extends CommonDBTM
return true;
}
/**
* Print a good title for task categories tab
* add button for re-synchro of taskcategory list (only if rigths are w)
* @return nothing (display)
**/
/**
* Print a good title for task categories tab
* add button for re-synchro of taskcategory list (only if rigths are w)
* @return nothing (display)
**/
static function title(CommonGLPI $item) {
global $CFG_GLPI;
@@ -99,26 +99,22 @@ class PluginProcessmakerTaskCategory extends CommonDBTM
if (Session::haveRight('plugin_processmaker_config', UPDATE)) {
$buttons["process.form.php?refreshtask=1&id=".$item->getID()] = $title;
Html::displayTitle($CFG_GLPI["root_doc"] . "/plugins/processmaker/pics/gears.png", $title, "",
$buttons);
$pic = $CFG_GLPI["root_doc"] . "/plugins/processmaker/pics/gears.png";
if ($item->fields['maintenance']) {
$pic = $CFG_GLPI["root_doc"] . "/plugins/processmaker/pics/verysmall-under_maintenance.png";
}
Html::displayTitle($pic, $title, "", $buttons);
}
}
//function getLinkItemFromExternalID($extId) {
// if( $this->getFromDBbyExternalID( $extId ) ) {
// $taskcat = new TaskCategory ;
// return $taskcat->getFromDB( $this->fields['items_id'] ) ;
// }
//}
/**
* Retrieve a TaskCat from the database using its external id (unique index): pm_task_guid
*
* @param $task_guid string externalid
*
* @return true if succeed else false
**/
/**
* Retrieve a TaskCat from the database using its external id (unique index): pm_task_guid
*
* @param $task_guid string externalid
*
* @return true if succeed else false
**/
function getFromGUID($task_guid) {
global $DB;

View File

@@ -178,9 +178,14 @@ class PluginProcessmakerUser extends CommonDBTM {
*/
public static function getGLPIUserId($pmUserId) {
$obj = new self;
if ($obj->getFromDBByQuery("WHERE `pm_users_id` = '$pmUserId'")) {
if ($obj->getFromDBByRequest([
'WHERE' => [
'pm_users_id' => $pmUserId
],
])) {
return $obj->fields['id'];
}
return 0;
}

View File

@@ -4,27 +4,7 @@ function processmaker_install() {
global $DB;
// installation from scratch
include_once(GLPI_ROOT."/plugins/processmaker/setup.php");
$info = plugin_version_processmaker();
switch ($info['version']) {
case '3.3.0' :
$version = '3.3.0';
break;
case '3.3.1' :
case '3.3.2' :
case '3.3.3' :
case '3.3.4' :
case '3.3.5' :
case '3.3.6' :
case '3.3.7' :
$version = '3.3.1';
break;
case '3.3.8' :
default :
$version = '3.3.8';
break;
}
$DB->runFile(GLPI_ROOT . "/plugins/processmaker/install/mysql/$version-empty.sql");
$DB->runFile(GLPI_ROOT . "/plugins/processmaker/install/mysql/processmaker-empty.sql");
// add configuration singleton
$query = "INSERT INTO `glpi_plugin_processmaker_configs` (`id`) VALUES (1);";

View File

@@ -1,167 +0,0 @@
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8 */;
/*!50503 SET NAMES utf8mb4 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
-- Dumping structure for table glpi.glpi_plugin_processmaker_caselinkactions
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_caselinkactions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`plugin_processmaker_caselinks_id` int(11) DEFAULT NULL,
`name` varchar(255) NOT NULL,
`value` text,
PRIMARY KEY (`id`),
UNIQUE KEY `caselinks_id_name` (`plugin_processmaker_caselinks_id`,`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_caselinks
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_caselinks` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`is_active` tinyint(1) NOT NULL DEFAULT '0',
`is_externaldata` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0:insert data from case,1:wait for external application to set datas',
`is_self` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0:use linked tickets, 1:use self',
`sourcetask_guid` varchar(32) DEFAULT NULL,
`targettask_guid` varchar(32) DEFAULT NULL,
`targetprocess_guid` varchar(32) DEFAULT NULL,
`targetdynaform_guid` varchar(32) DEFAULT NULL,
`sourcecondition` text,
`is_targettoclaim` tinyint(1) NOT NULL DEFAULT '0',
`externalapplication` text,
`date_mod` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `is_active` (`is_active`),
KEY `is_externaldata` (`is_externaldata`),
KEY `is_self` (`is_self`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_cases
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_cases` (
`id` varchar(32) NOT NULL,
`items_id` int(11) NOT NULL,
`itemtype` varchar(10) NOT NULL DEFAULT 'Ticket',
`case_num` int(11) NOT NULL,
`case_status` varchar(20) NOT NULL DEFAULT 'DRAFT',
`processes_id` int(11) DEFAULT NULL,
UNIQUE KEY `items` (`itemtype`,`items_id`),
KEY `case_status` (`case_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_configs
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_configs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL DEFAULT 'ProcessMaker',
`pm_server_URL` varchar(250) NOT NULL DEFAULT 'http://localhost/',
`pm_workspace` varchar(50) NOT NULL DEFAULT 'workflow',
`pm_admin_user` varchar(255) DEFAULT NULL,
`pm_admin_passwd` varchar(255) DEFAULT NULL,
`pm_theme` varchar(50) NOT NULL DEFAULT 'glpi_classic',
`date_mod` timestamp NULL DEFAULT NULL,
`taskcategories_id` int(11) DEFAULT NULL,
`users_id` int(11) DEFAULT NULL,
`pm_group_guid` varchar(32) DEFAULT NULL,
`comment` text,
`pm_dbserver_name` varchar(255) DEFAULT 'localhost',
`pm_dbname` varchar(50) DEFAULT 'wf_workflow',
`pm_dbserver_user` varchar(255) DEFAULT NULL,
`pm_dbserver_passwd` varchar(255) DEFAULT NULL,
`domain` varchar(50) DEFAULT '',
`maintenance` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_crontaskactions
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_crontaskactions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`plugin_processmaker_caselinks_id` int(11) DEFAULT NULL,
`itemtype` varchar(100) NOT NULL,
`items_id` int(11) NOT NULL DEFAULT '0',
`users_id` int(11) NOT NULL DEFAULT '0',
`is_targettoclaim` tinyint(1) NOT NULL DEFAULT '0',
`postdata` mediumtext,
`logs_out` mediumtext,
`state` int(11) NOT NULL,
`date_mod` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_processes
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_processes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`process_guid` varchar(32) NOT NULL,
`name` varchar(255) NOT NULL,
`is_active` tinyint(1) NOT NULL DEFAULT '0',
`hide_case_num_title` tinyint(1) NOT NULL DEFAULT '0',
`insert_task_comment` tinyint(1) NOT NULL DEFAULT '0',
`comment` text,
`taskcategories_id` int(11) DEFAULT NULL,
`itilcategories_id` int(11) NOT NULL DEFAULT '0',
`type` int(11) NOT NULL DEFAULT '1' COMMENT 'Only used for Tickets',
`date_mod` timestamp NULL DEFAULT NULL,
`project_type` varchar(50) NOT NULL DEFAULT 'classic',
PRIMARY KEY (`id`),
UNIQUE KEY `process_guid` (`process_guid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_processes_profiles
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_processes_profiles` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`processes_id` int(11) NOT NULL DEFAULT '0',
`profiles_id` int(11) NOT NULL DEFAULT '0',
`entities_id` int(11) NOT NULL DEFAULT '0',
`is_recursive` tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
KEY `entities_id` (`entities_id`),
KEY `profiles_id` (`profiles_id`),
KEY `processes_id` (`processes_id`),
KEY `is_recursive` (`is_recursive`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_taskcategories
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_taskcategories` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`processes_id` int(11) NOT NULL,
`pm_task_guid` varchar(32) NOT NULL,
`taskcategories_id` int(11) NOT NULL,
`start` bit(1) NOT NULL DEFAULT b'0',
`is_active` tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
UNIQUE KEY `pm_task_guid` (`pm_task_guid`),
UNIQUE KEY `items` (`taskcategories_id`),
KEY `processes_id` (`processes_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_tasks
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_tasks` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`items_id` int(11) NOT NULL,
`itemtype` varchar(32) NOT NULL,
`case_id` varchar(32) NOT NULL,
`del_index` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `case_id` (`case_id`,`del_index`),
UNIQUE KEY `items` (`itemtype`,`items_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_users
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pm_users_id` varchar(32) NOT NULL,
`password` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `pm_users_id` (`pm_users_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

View File

@@ -1,168 +0,0 @@
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8 */;
/*!50503 SET NAMES utf8mb4 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
-- Dumping structure for table glpi.glpi_plugin_processmaker_caselinkactions
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_caselinkactions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`plugin_processmaker_caselinks_id` int(11) DEFAULT NULL,
`name` varchar(255) NOT NULL,
`value` text,
PRIMARY KEY (`id`),
UNIQUE KEY `caselinks_id_name` (`plugin_processmaker_caselinks_id`,`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_caselinks
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_caselinks` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`is_active` tinyint(1) NOT NULL DEFAULT '0',
`is_externaldata` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0:insert data from case,1:wait for external application to set datas',
`is_self` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0:use linked tickets, 1:use self',
`sourcetask_guid` varchar(32) DEFAULT NULL,
`targettask_guid` varchar(32) DEFAULT NULL,
`targetprocess_guid` varchar(32) DEFAULT NULL,
`targetdynaform_guid` varchar(32) DEFAULT NULL,
`sourcecondition` text,
`is_targettoclaim` tinyint(1) NOT NULL DEFAULT '0',
`externalapplication` text,
`date_mod` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `is_active` (`is_active`),
KEY `is_externaldata` (`is_externaldata`),
KEY `is_self` (`is_self`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_cases
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_cases` (
`id` varchar(32) NOT NULL,
`items_id` int(11) NOT NULL,
`itemtype` varchar(10) NOT NULL DEFAULT 'Ticket',
`case_num` int(11) NOT NULL,
`case_status` varchar(20) NOT NULL DEFAULT 'DRAFT',
`processes_id` int(11) DEFAULT NULL,
UNIQUE KEY `items` (`itemtype`,`items_id`),
KEY `case_status` (`case_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_configs
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_configs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL DEFAULT 'ProcessMaker',
`pm_server_URL` varchar(250) NOT NULL DEFAULT 'http://localhost/',
`pm_workspace` varchar(50) NOT NULL DEFAULT 'workflow',
`pm_admin_user` varchar(255) DEFAULT NULL,
`pm_admin_passwd` varchar(255) DEFAULT NULL,
`pm_theme` varchar(50) NOT NULL DEFAULT 'glpi_classic',
`date_mod` timestamp NULL DEFAULT NULL,
`taskcategories_id` int(11) DEFAULT NULL,
`users_id` int(11) DEFAULT NULL,
`pm_group_guid` varchar(32) DEFAULT NULL,
`comment` text,
`pm_dbserver_name` varchar(255) DEFAULT 'localhost',
`pm_dbname` varchar(50) DEFAULT 'wf_workflow',
`pm_dbserver_user` varchar(255) DEFAULT NULL,
`pm_dbserver_passwd` varchar(255) DEFAULT NULL,
`domain` varchar(50) DEFAULT '',
`maintenance` tinyint(1) NOT NULL DEFAULT '0',
`db_version` varchar(10) NOT NULL DEFAULT '3.2.9',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_crontaskactions
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_crontaskactions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`plugin_processmaker_caselinks_id` int(11) DEFAULT NULL,
`itemtype` varchar(100) NOT NULL,
`items_id` int(11) NOT NULL DEFAULT '0',
`users_id` int(11) NOT NULL DEFAULT '0',
`is_targettoclaim` tinyint(1) NOT NULL DEFAULT '0',
`postdata` mediumtext,
`logs_out` mediumtext,
`state` int(11) NOT NULL,
`date_mod` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_processes
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_processes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`process_guid` varchar(32) NOT NULL,
`name` varchar(255) NOT NULL,
`is_active` tinyint(1) NOT NULL DEFAULT '0',
`hide_case_num_title` tinyint(1) NOT NULL DEFAULT '0',
`insert_task_comment` tinyint(1) NOT NULL DEFAULT '0',
`comment` text,
`taskcategories_id` int(11) DEFAULT NULL,
`itilcategories_id` int(11) NOT NULL DEFAULT '0',
`type` int(11) NOT NULL DEFAULT '1' COMMENT 'Only used for Tickets',
`date_mod` timestamp NULL DEFAULT NULL,
`project_type` varchar(50) NOT NULL DEFAULT 'classic',
PRIMARY KEY (`id`),
UNIQUE KEY `process_guid` (`process_guid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_processes_profiles
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_processes_profiles` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`processes_id` int(11) NOT NULL DEFAULT '0',
`profiles_id` int(11) NOT NULL DEFAULT '0',
`entities_id` int(11) NOT NULL DEFAULT '0',
`is_recursive` tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
KEY `entities_id` (`entities_id`),
KEY `profiles_id` (`profiles_id`),
KEY `processes_id` (`processes_id`),
KEY `is_recursive` (`is_recursive`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_taskcategories
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_taskcategories` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`processes_id` int(11) NOT NULL,
`pm_task_guid` varchar(32) NOT NULL,
`taskcategories_id` int(11) NOT NULL,
`start` bit(1) NOT NULL DEFAULT b'0',
`is_active` tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
UNIQUE KEY `pm_task_guid` (`pm_task_guid`),
UNIQUE KEY `items` (`taskcategories_id`),
KEY `processes_id` (`processes_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_tasks
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_tasks` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`items_id` int(11) NOT NULL,
`itemtype` varchar(32) NOT NULL,
`case_id` varchar(32) NOT NULL,
`del_index` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `case_id` (`case_id`,`del_index`),
UNIQUE KEY `items` (`itemtype`,`items_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_users
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pm_users_id` varchar(32) NOT NULL,
`password` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `pm_users_id` (`pm_users_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

View File

@@ -1,179 +0,0 @@
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8 */;
/*!50503 SET NAMES utf8mb4 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
-- Dumping structure for table glpi.glpi_plugin_processmaker_caselinkactions
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_caselinkactions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`plugin_processmaker_caselinks_id` int(11) DEFAULT NULL,
`name` varchar(255) NOT NULL,
`value` text,
PRIMARY KEY (`id`),
UNIQUE KEY `caselinks_id_name` (`plugin_processmaker_caselinks_id`,`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_caselinks
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_caselinks` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`is_active` tinyint(1) NOT NULL DEFAULT '0',
`is_externaldata` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0:insert data from case,1:wait for external application to set datas',
`is_self` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0:use linked tickets, 1:use self',
`sourcetask_guid` varchar(32) DEFAULT NULL,
`targettask_guid` varchar(32) DEFAULT NULL,
`targetprocess_guid` varchar(32) DEFAULT NULL,
`targetdynaform_guid` varchar(32) DEFAULT NULL,
`sourcecondition` text,
`is_targettoclaim` tinyint(1) NOT NULL DEFAULT '0',
`externalapplication` text,
`date_mod` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `is_active` (`is_active`),
KEY `is_externaldata` (`is_externaldata`),
KEY `is_self` (`is_self`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_cases
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_cases` (
`id` INT(11) NOT NULL,
`itemtype` VARCHAR(10) NOT NULL DEFAULT 'Ticket',
`items_id` INT(11) NOT NULL,
`entities_id` INT(11) NOT NULL DEFAULT '0',
`name` MEDIUMTEXT NOT NULL DEFAULT '',
`case_guid` VARCHAR(32) NOT NULL,
`case_status` VARCHAR(20) NOT NULL DEFAULT 'DRAFT',
`plugin_processmaker_processes_id` INT(11) NULL DEFAULT NULL,
`plugin_processmaker_cases_id` INT(11) NULL DEFAULT NULL,
INDEX `items` (`itemtype`, `items_id`),
INDEX `case_status` (`case_status`),
PRIMARY KEY (`id`),
UNIQUE INDEX `case_guid` (`case_guid`),
INDEX `plugin_processmaker_processes_id` (`plugin_processmaker_processes_id`),
INDEX `plugin_processmaker_cases_id` (`plugin_processmaker_cases_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_configs
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_configs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL DEFAULT 'ProcessMaker',
`pm_server_URL` varchar(250) NOT NULL DEFAULT 'http://localhost/',
`pm_workspace` varchar(50) NOT NULL DEFAULT 'workflow',
`pm_admin_user` varchar(255) DEFAULT NULL,
`pm_admin_passwd` varchar(255) DEFAULT NULL,
`pm_theme` varchar(50) NOT NULL DEFAULT 'glpi_classic',
`date_mod` timestamp NULL DEFAULT NULL,
`taskcategories_id` int(11) DEFAULT NULL,
`users_id` int(11) DEFAULT NULL,
`pm_group_guid` varchar(32) DEFAULT NULL,
`comment` text,
`pm_dbserver_name` varchar(255) DEFAULT 'localhost',
`pm_dbname` varchar(50) DEFAULT 'wf_workflow',
`pm_dbserver_user` varchar(255) DEFAULT NULL,
`pm_dbserver_passwd` varchar(255) DEFAULT NULL,
`domain` varchar(50) DEFAULT '',
`maintenance` tinyint(1) NOT NULL DEFAULT '0',
`db_version` varchar(10) NOT NULL DEFAULT '3.3.0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_crontaskactions
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_crontaskactions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`plugin_processmaker_caselinks_id` int(11) DEFAULT NULL,
`plugin_processmaker_cases_id` int(11) DEFAULT '0',
`users_id` int(11) NOT NULL DEFAULT '0',
`is_targettoclaim` tinyint(1) NOT NULL DEFAULT '0',
`postdata` mediumtext,
`logs_out` mediumtext,
`state` int(11) NOT NULL,
`date_mod` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_processes
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_processes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`process_guid` varchar(32) NOT NULL,
`name` varchar(255) NOT NULL,
`is_active` tinyint(1) NOT NULL DEFAULT '0',
`hide_case_num_title` tinyint(1) NOT NULL DEFAULT '0',
`insert_task_comment` tinyint(1) NOT NULL DEFAULT '0',
`comment` text,
`taskcategories_id` int(11) DEFAULT NULL,
`itilcategories_id` int(11) NOT NULL DEFAULT '0',
`type` int(11) NOT NULL DEFAULT '1' COMMENT 'Only used for Tickets',
`date_mod` timestamp NULL DEFAULT NULL,
`project_type` varchar(50) NOT NULL DEFAULT 'classic',
PRIMARY KEY (`id`),
UNIQUE KEY `process_guid` (`process_guid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_processes_profiles
CREATE TABLE `glpi_plugin_processmaker_processes_profiles` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`plugin_processmaker_processes_id` int(11) NOT NULL,
`profiles_id` int(11) NOT NULL,
`entities_id` int(11) NOT NULL,
`is_recursive` tinyint(1) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `plugin_processmaker_processes_id_profiles_id_entities_id` (`plugin_processmaker_processes_id`, `profiles_id`, `entities_id`),
KEY `entities_id` (`entities_id`),
KEY `profiles_id` (`profiles_id`),
KEY `plugin_processmaker_processes_id` (`plugin_processmaker_processes_id`),
KEY `is_recursive` (`is_recursive`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
-- Dumping structure for table glpi.glpi_plugin_processmaker_taskcategories
CREATE TABLE `glpi_plugin_processmaker_taskcategories` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`plugin_processmaker_processes_id` INT(11) NOT NULL,
`pm_task_guid` VARCHAR(32) NOT NULL,
`taskcategories_id` INT(11) NOT NULL,
`is_start` TINYINT(1) NOT NULL DEFAULT '0',
`is_active` TINYINT(1) NOT NULL DEFAULT '1',
`is_subprocess` TINYINT(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE INDEX `pm_task_guid` (`pm_task_guid`),
UNIQUE INDEX `items` (`taskcategories_id`),
INDEX `plugin_processmaker_processes_id` (`plugin_processmaker_processes_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_tasks
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_tasks` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`items_id` int(11) NOT NULL,
`itemtype` varchar(32) NOT NULL,
`plugin_processmaker_cases_id` int(11) NOT NULL,
`plugin_processmaker_taskcategories_id` int(11) NOT NULL,
`del_index` int(11) NOT NULL,
`del_thread` INT(11) NOT NULL,
`del_thread_status` varchar(32) NOT NULL DEFAULT 'OPEN',
PRIMARY KEY (`id`),
UNIQUE KEY `tasks` (`plugin_processmaker_cases_id`,`del_index`),
UNIQUE KEY `items` (`itemtype`,`items_id`),
KEY `del_thread_status` (`del_thread_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_users
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pm_users_id` varchar(32) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `pm_users_id` (`pm_users_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

View File

@@ -1,186 +0,0 @@
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8 */;
/*!50503 SET NAMES utf8mb4 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
-- Dumping structure for table glpi.glpi_plugin_processmaker_caselinkactions
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_caselinkactions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`plugin_processmaker_caselinks_id` int(11) DEFAULT NULL,
`name` varchar(255) NOT NULL,
`value` text,
PRIMARY KEY (`id`),
UNIQUE KEY `caselinks_id_name` (`plugin_processmaker_caselinks_id`,`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_caselinks
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_caselinks` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`is_active` tinyint(1) NOT NULL DEFAULT '0',
`is_externaldata` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0:insert data from case,1:wait for external application to set datas',
`is_self` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0:use linked tickets, 1:use self',
`sourcetask_guid` varchar(32) DEFAULT NULL,
`targettask_guid` varchar(32) DEFAULT NULL,
`targetprocess_guid` varchar(32) DEFAULT NULL,
`targetdynaform_guid` varchar(32) DEFAULT NULL,
`sourcecondition` text,
`is_targettoclaim` tinyint(1) NOT NULL DEFAULT '0',
`is_targettoreassign` TINYINT(1) NOT NULL DEFAULT '0',
`is_targettoimpersonate` TINYINT(1) NOT NULL DEFAULT '0',
`externalapplication` TEXT NULL,
`is_synchronous` TINYINT(1) NOT NULL DEFAULT '0',
`date_mod` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `is_active` (`is_active`),
KEY `is_externaldata` (`is_externaldata`),
KEY `is_self` (`is_self`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_cases
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_cases` (
`id` INT(11) NOT NULL,
`itemtype` VARCHAR(10) NOT NULL DEFAULT 'Ticket',
`items_id` INT(11) NOT NULL,
`entities_id` INT(11) NOT NULL DEFAULT '0',
`name` MEDIUMTEXT NOT NULL DEFAULT '',
`case_guid` VARCHAR(32) NOT NULL,
`case_status` VARCHAR(20) NOT NULL DEFAULT 'DRAFT',
`plugin_processmaker_processes_id` INT(11) NULL DEFAULT NULL,
`plugin_processmaker_cases_id` INT(11) NULL DEFAULT NULL,
INDEX `items` (`itemtype`, `items_id`),
INDEX `case_status` (`case_status`),
PRIMARY KEY (`id`),
UNIQUE INDEX `case_guid` (`case_guid`),
INDEX `plugin_processmaker_processes_id` (`plugin_processmaker_processes_id`),
INDEX `plugin_processmaker_cases_id` (`plugin_processmaker_cases_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_configs
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_configs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL DEFAULT 'ProcessMaker',
`pm_server_URL` varchar(250) NOT NULL DEFAULT 'http://localhost/',
`pm_workspace` varchar(50) NOT NULL DEFAULT 'workflow',
`pm_admin_user` varchar(255) DEFAULT NULL,
`pm_admin_passwd` varchar(255) DEFAULT NULL,
`pm_theme` varchar(50) NOT NULL DEFAULT 'glpi_classic',
`date_mod` timestamp NULL DEFAULT NULL,
`taskcategories_id` int(11) DEFAULT NULL,
`users_id` int(11) DEFAULT NULL,
`pm_group_guid` varchar(32) DEFAULT NULL,
`comment` text,
`pm_dbserver_name` varchar(255) DEFAULT 'localhost',
`pm_dbname` varchar(50) DEFAULT 'wf_workflow',
`pm_dbserver_user` varchar(255) DEFAULT NULL,
`pm_dbserver_passwd` varchar(255) DEFAULT NULL,
`domain` varchar(50) DEFAULT '',
`maintenance` tinyint(1) NOT NULL DEFAULT '0',
`db_version` varchar(10) NOT NULL DEFAULT '3.3.0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_crontaskactions
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_crontaskactions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`plugin_processmaker_caselinks_id` int(11) DEFAULT NULL,
`plugin_processmaker_cases_id` int(11) DEFAULT '0',
`users_id` int(11) NOT NULL DEFAULT '0',
`is_targettoclaim` tinyint(1) NOT NULL DEFAULT '0',
`postdata` mediumtext,
`logs_out` mediumtext,
`state` int(11) NOT NULL,
`date_mod` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_processes
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_processes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`process_guid` varchar(32) NOT NULL,
`name` varchar(255) NOT NULL,
`is_active` tinyint(1) NOT NULL DEFAULT '0',
`hide_case_num_title` tinyint(1) NOT NULL DEFAULT '0',
`insert_task_comment` tinyint(1) NOT NULL DEFAULT '0',
`comment` text,
`taskcategories_id` int(11) DEFAULT NULL,
`itilcategories_id` int(11) NOT NULL DEFAULT '0',
`type` int(11) NOT NULL DEFAULT '1' COMMENT 'Only used for self-service Tickets',
`date_mod` timestamp NULL DEFAULT NULL,
`project_type` varchar(50) NOT NULL DEFAULT 'classic',
`is_change` tinyint(1) NOT NULL DEFAULT '0',
`is_problem` tinyint(1) NOT NULL DEFAULT '0',
`is_incident` tinyint(1) NOT NULL DEFAULT '0',
`is_request` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `process_guid` (`process_guid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_processes_profiles
CREATE TABLE `glpi_plugin_processmaker_processes_profiles` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`plugin_processmaker_processes_id` int(11) NOT NULL,
`profiles_id` int(11) NOT NULL,
`entities_id` int(11) NOT NULL,
`is_recursive` tinyint(1) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `plugin_processmaker_processes_id_profiles_id_entities_id` (`plugin_processmaker_processes_id`, `profiles_id`, `entities_id`),
KEY `entities_id` (`entities_id`),
KEY `profiles_id` (`profiles_id`),
KEY `plugin_processmaker_processes_id` (`plugin_processmaker_processes_id`),
KEY `is_recursive` (`is_recursive`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
-- Dumping structure for table glpi.glpi_plugin_processmaker_taskcategories
CREATE TABLE `glpi_plugin_processmaker_taskcategories` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`plugin_processmaker_processes_id` INT(11) NOT NULL,
`pm_task_guid` VARCHAR(32) NOT NULL,
`taskcategories_id` INT(11) NOT NULL,
`is_start` TINYINT(1) NOT NULL DEFAULT '0',
`is_active` TINYINT(1) NOT NULL DEFAULT '1',
`is_subprocess` TINYINT(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE INDEX `pm_task_guid` (`pm_task_guid`),
UNIQUE INDEX `items` (`taskcategories_id`),
INDEX `plugin_processmaker_processes_id` (`plugin_processmaker_processes_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_tasks
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_tasks` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`items_id` int(11) NOT NULL,
`itemtype` varchar(32) NOT NULL,
`plugin_processmaker_cases_id` int(11) NOT NULL,
`plugin_processmaker_taskcategories_id` int(11) NOT NULL,
`del_index` int(11) NOT NULL,
`del_thread` INT(11) NOT NULL,
`del_thread_status` varchar(32) NOT NULL DEFAULT 'OPEN',
PRIMARY KEY (`id`),
UNIQUE KEY `tasks` (`plugin_processmaker_cases_id`,`del_index`),
UNIQUE KEY `items` (`itemtype`,`items_id`),
KEY `del_thread_status` (`del_thread_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Dumping structure for table glpi.glpi_plugin_processmaker_users
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pm_users_id` varchar(32) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `pm_users_id` (`pm_users_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

View File

@@ -64,7 +64,7 @@ CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_cases` (
CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_configs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL DEFAULT 'ProcessMaker',
`pm_server_URL` varchar(250) NOT NULL DEFAULT 'http://localhost/',
`pm_server_URL` varchar(250) NOT NULL DEFAULT 'http://itsm-pm.acme.com/',
`pm_workspace` varchar(50) NOT NULL DEFAULT 'workflow',
`pm_admin_user` varchar(255) DEFAULT NULL,
`pm_admin_passwd` varchar(255) DEFAULT NULL,
@@ -81,7 +81,8 @@ CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_configs` (
`domain` varchar(50) DEFAULT '',
`maintenance` tinyint(1) NOT NULL DEFAULT '0',
`ssl_verify` tinyint(1) NOT NULL DEFAULT '0',
`db_version` varchar(10) NOT NULL DEFAULT '3.3.8',
`db_version` varchar(10) NOT NULL DEFAULT '3.4.9',
`max_cases_per_item` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
@@ -119,6 +120,8 @@ CREATE TABLE IF NOT EXISTS `glpi_plugin_processmaker_processes` (
`is_problem` tinyint(1) NOT NULL DEFAULT '0',
`is_incident` tinyint(1) NOT NULL DEFAULT '0',
`is_request` tinyint(1) NOT NULL DEFAULT '0',
`maintenance` TINYINT(1) NOT NULL DEFAULT '0',
`max_cases_per_item` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `process_guid` (`process_guid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

View File

@@ -11,6 +11,9 @@ function processmaker_update() {
include_once(GLPI_ROOT."/plugins/processmaker/inc/config.class.php");
$config = PluginProcessmakerConfig::getInstance();
$current_version = $config->fields['db_version'];
if (empty($current_version)) {
$current_version = '2.4.1';
}
}
switch ($current_version) {
@@ -37,6 +40,10 @@ function processmaker_update() {
// will upgrade 3.3.1 to 3.3.8
include_once(GLPI_ROOT."/plugins/processmaker/install/update_3_3_1_to_3_3_8.php");
$new_version = update_3_3_1_to_3_3_8();
case '3.3.8' :
// will upgrade 3.3.8 to 3.4.9
include_once(GLPI_ROOT."/plugins/processmaker/install/update_3_3_8_to_3_4_9.php");
$new_version = update_3_3_8_to_3_4_9();
}
if (isset($new_version)) {

View File

@@ -1,6 +1,6 @@
<?php
function update_3_3_1_to_3_3_8(){
function update_3_3_1_to_3_3_8() {
global $DB;
// Alter table glpi_plugin_processmaker_configs

View File

@@ -0,0 +1,30 @@
<?php
function update_3_3_8_to_3_4_9() {
global $DB;
// Alter table glpi_plugin_processmaker_configs
if (!$DB->fieldExists("glpi_plugin_processmaker_configs", "max_cases_per_item" )) {
$query = "ALTER TABLE `glpi_plugin_processmaker_configs`
ADD COLUMN `max_cases_per_item` INT(11) NOT NULL DEFAULT '0' AFTER `db_version`;";
$DB->query($query) or die("error adding max_cases_per_item to glpi_plugin_processmaker_configs table" . $DB->error());
}
// Alter table glpi_plugin_processmaker_processes
if (!$DB->fieldExists("glpi_plugin_processmaker_processes", "maintenance" )) {
$query = "ALTER TABLE `glpi_plugin_processmaker_processes`
ADD COLUMN `maintenance` TINYINT(1) NOT NULL DEFAULT '0' AFTER `is_request`;";
$DB->query($query) or die("error adding maintenance to glpi_plugin_processmaker_processes table" . $DB->error());
}
// Alter table glpi_plugin_processmaker_processes
if (!$DB->fieldExists("glpi_plugin_processmaker_processes", "max_cases_per_item" )) {
$query = "ALTER TABLE `glpi_plugin_processmaker_processes`
ADD COLUMN `max_cases_per_item` INT(11) NOT NULL DEFAULT '0' AFTER `maintenance`;";
$DB->query($query) or die("error adding max_cases_per_item to glpi_plugin_processmaker_processes table" . $DB->error());
}
return '3.4.9';
}

View File

@@ -71,7 +71,7 @@ function update_to_3_2_8() {
}
}
if (!$DB->fieldExists('glpi_plugin_processmaker_users', 'password')) {
if (!$DB->fieldExists('glpi_plugin_processmaker_users', 'password') && !$DB->fieldExists('glpi_plugin_processmaker_users', 'id')) {
$query = "ALTER TABLE `glpi_plugin_processmaker_users`
ADD COLUMN `id` INT NOT NULL AUTO_INCREMENT FIRST,
ADD COLUMN `password` VARCHAR(32) NULL DEFAULT NULL AFTER `pm_users_id`,

View File

@@ -21,7 +21,7 @@ function onClickContinue(obj) {
// hide the iFrame
caseIFrame.style.visibility = 'hidden';
// trigger a click on the 'add' button of the ticket
// trigger a click on the 'add' button of the ticket
submitButton.click();
}
@@ -59,17 +59,17 @@ function onLoadFrame( evt, caseId, delIndex, caseNumber, processName ) {
if (caseIFrame != undefined && contentDocument) {
var buttonContinue = contentDocument.getElementById('form[btnGLPISendRequest]');
var linkList = contentDocument.getElementsByTagName('a');
if (!bButtonContinue && buttonContinue != undefined && linkList != undefined && linkList.length > 0) {
bButtonContinue = true; //window.clearInterval(caseTimer); // to be sure that it will be done only one time
// change action for the attached form and add some parameters
//debugger;
bGLPIHideElement(linkList, 'href', 'cases_Step?TYPE=ASSIGN_TASK&UID=-1&POSITION=10000&ACTION=ASSIGN');
oldHandler = buttonContinue.onclick;
buttonContinue.onclick = onClickContinue;
submitButton = $("input[name='add'][type=submit]")[0];
submitButton.insertAdjacentHTML('beforebegin', "<input type='hidden' name='processmaker_action' value='routecase'/>");
submitButton.insertAdjacentHTML('beforebegin', "<input type='hidden' name='processmaker_caseguid' value='" + caseId + "'/>");
@@ -116,4 +116,4 @@ function redimTaskFrame(taskFrame) {
taskFrame.height = newHeight;
} catch (e) {
}
}
}

View File

@@ -2,18 +2,17 @@
$(document).ajaxComplete(function (event, jqXHR, ajaxOptions) {
//debugger;
var pattern = /##processmaker.*(##|...)/g;
$('tr.tab_bg_2 td a').each(function (index) {
var textToChange = $(this).text();
var matches = textToChange.match(pattern);
if (matches) {
textToChange = textToChange.replace(pattern, '');
if (!textToChange.trim().length>0)
{
if (!textToChange.trim().length>0) {
var title = $(this).parent().prev().text();
textToChange = title;
}
}
$(this).text(textToChange);
}
});

View File

@@ -1,19 +0,0 @@
<?php
define('GLPI_ROOT', '../../..');
include (GLPI_ROOT."/inc/includes.php");
header("Content-type: application/javascript");
$plugin = new Plugin();
if ($plugin->isActivated('processmaker')) {
$config = PluginProcessmakerConfig::getInstance();
if (isset($config->fields['domain']) && $config->fields['domain'] != '') {
echo "
//debugger;
var d = document,
g = d.createElement('script'),
s = d.getElementsByTagName('script')[0];
g.type = 'text/javascript';
g.text = 'try { document.domain = \'".$config->fields['domain']."\'; } catch(ev) { /*console.log(ev);*/ }';
s.parentNode.insertBefore(g, s);
";
}
}

View File

@@ -14,7 +14,7 @@ if (!defined('GLPI_ROOT')) {
$config = PluginProcessmakerConfig::getInstance();
if (!$config->fields['maintenance']) {
echo "$(function () {
echo "$(function () {
// look if name='helpdeskform' is present. If yes replace the form.location
var ahrefTI = '".$CFG_GLPI["root_doc"]."/plugins/processmaker/front/tracking.injector.php';
var formLink = $(\"form[name='helpdeskform']\")[0];

View File

@@ -6,4 +6,4 @@
}
$('input[type="checkbox"][value="PluginProcessmakerTask"]').parents('li').first().hide();
});
});
});

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -6,15 +6,15 @@
<logo>https://raw.githubusercontent.com/tomolimo/processmaker/master/processmaker.png</logo>
<description>
<short>
<fr>Ce plugin fournit la possibilité d'intégrer un processus (workflow) aux objets ITIL (Tickets, Changements et Problèmes).</fr>
<fr>Ce plugin fournit la possibilité d'intégrer un processus (workflow) aux objets ITIL (Tickets, Changements et Problèmes).</fr>
<en>This plugin provides a process (workflow) management linked to ITIL objects (Tickets, Changes and Problems).</en>
<cs>Tento zásuvný modul poskytuje správu procesů (pracovní postup) napojený na požadavky.</cs>
</short>
<cs>Tento zásuvný modul poskytuje správu procesů (pracovní postup) napojený na požadavky.</cs>
</short>
<long>
<en>This plugin is dedicated to provide process (workflows) management linked to ITIL objects (Tickets, Changes and Problems). This goal is achieved using a customized ProcessMaker server (URL: https://github.com/tomolimo/processmaker-server). ProcessMaker provides BPMN Process design and execution. This plugin is the glue between GLPI and ProcessMaker.</en>
<fr>Ce plugin est dédié à la gestion de processus (workflows) liés aux objets ITIL (Tickets, Changements et Problèmes). Ce but est atteint par l'utilisation d'un serveur ProcessMaker customisé (URL: https://github.com/tomolimo/processmaker-server). ProcessMaker fournit un outil graphique de création de processus BPMN et permet l'exécution de ceux-ci. Ce plugin sert de glue entre GLPI et ProcessMaker.</fr>
<cs>Tento zásuvný modul je věnován poskytnutí správy procesu (pracovní postup), napojeného na požadavky. Tohoto cíle je dosaženo použitím ProcessMaker (URL: https://github.com/tomolimo/processmaker-server). ProcessMaker poskytne návrh procesu a vykonání pracovního postupu. Tento zásuvný modul je můstkem mezi GLPI a ProcessMaker.</cs>
</long>
<fr>Ce plugin est dédié à la gestion de processus (workflows) liés aux objets ITIL (Tickets, Changements et Problèmes). Ce but est atteint par l'utilisation d'un serveur ProcessMaker customisé (URL: https://github.com/tomolimo/processmaker-server). ProcessMaker fournit un outil graphique de création de processus BPMN et permet l'exécution de ceux-ci. Ce plugin sert de glue entre GLPI et ProcessMaker.</fr>
<cs>Tento zásuvný modul je věnován poskytnutí správy procesu (pracovní postup), napojeného na požadavky. Tohoto cíle je dosaženo použitím ProcessMaker (URL: https://github.com/tomolimo/processmaker-server). ProcessMaker poskytne návrh procesu a vykonání pracovního postupu. Tento zásuvný modul je můstkem mezi GLPI a ProcessMaker.</cs>
</long>
</description>
<homepage>https://github.com/tomolimo/processmaker</homepage>
<download>https://github.com/tomolimo/processmaker/releases</download>
@@ -28,10 +28,14 @@
<num>3.3.8</num>
<compatibility>9.1</compatibility>
</version>
<version>
<num>3.4.5</num>
<compatibility>9.2</compatibility>
</version>
<version>
<num>3.4.9</num>
<compatibility>9.2</compatibility>
</version>
<version>
<num>3.5.1</num>
<compatibility>9.3</compatibility>
</version>
</versions>
<langs>
<lang>en_gb</lang>
@@ -44,22 +48,15 @@
<tag>Processus</tag>
<tag>BPMN 2.0</tag>
<tag>Workflow</tag>
<tag>Helpdesk</tag>
<tag>Ticket</tag>
<tag>Helpdesk</tag>
<tag>Ticket</tag>
</fr>
<en>
<tag>Processes</tag>
<tag>BPMN 2.0</tag>
<tag>Helpdesk</tag>
<tag>Workflows</tag>
<tag>Ticket</tag>
<tag>Workflows</tag>
<tag>Ticket</tag>
</en>
<cs>
<tag>Procesy</tag>
<tag>BPMN 2.0</tag>
<tag>Službapodpory</tag>
<tag>Pracovnípostupy</tag>
<tag>Požadavek</tag>
</cs>
</tags>
</tags>
</root>

View File

@@ -2,7 +2,7 @@
// used for case cancellation
define("CANCEL", 256);
define('PROCESSMAKER_VERSION', '3.4.5');
define('PROCESSMAKER_VERSION', '3.5.1');
// Init the hooks of the plugins -Needed
function plugin_init_processmaker() {
@@ -11,7 +11,6 @@ function plugin_init_processmaker() {
$PLUGIN_HOOKS['csrf_compliant']['processmaker'] = true;
$objects = ['Ticket', 'Change', 'Problem'];
// $objects = ['Ticket'];
Plugin::registerClass('PluginProcessmakerProcessmaker');
@@ -33,11 +32,6 @@ function plugin_init_processmaker() {
$PLUGIN_HOOKS['pre_show_item']['processmaker']
= ['PluginProcessmakerProcessmaker', 'pre_show_item_processmaker'];
//$PLUGIN_HOOKS['pre_item_form']['processmaker']
// = array('PluginProcessmakerProcessmaker', 'pre_item_form_processmakerticket');
//$PLUGIN_HOOKS['post_item_form']['processmaker']
// = array('PluginProcessmakerProcessmaker', 'post_item_form_processmakerticket');
$PLUGIN_HOOKS['pre_show_tab']['processmaker']
= ['PluginProcessmakerProcessmaker', 'pre_show_tab_processmaker'];
$PLUGIN_HOOKS['post_show_tab']['processmaker']
@@ -45,8 +39,13 @@ function plugin_init_processmaker() {
// Display a menu entry ?
if (Session::haveRightsOr('plugin_processmaker_config', [READ, UPDATE])) {
// tools and helpdesk
$PLUGIN_HOOKS['menu_toadd']['processmaker'] = ['tools' => 'PluginProcessmakerMenu', 'helpdesk' => 'PluginProcessmakerCase'];
// tools
$PLUGIN_HOOKS['menu_toadd']['processmaker']['tools'] = 'PluginProcessmakerMenu';
}
if (Session::haveRightsOr('plugin_processmaker_case', [READ, UPDATE])) {
// helpdesk
$PLUGIN_HOOKS['menu_toadd']['processmaker']['helpdesk'] = 'PluginProcessmakerCase';
}
Plugin::registerClass('PluginProcessmakerProcess', [ 'massiveaction_nodelete_types' => true] );
@@ -83,43 +82,27 @@ function plugin_init_processmaker() {
$hooks = [];
foreach ($objects as $obj) {
$hooks["PluginPdf'.$obj.'Task"] = ['PluginProcessmakerProcessmaker', 'plugin_item_get_pdfdata_processmaker'];
$hooks["PluginPdf".$obj."Task"] = ['PluginProcessmakerProcessmaker', 'plugin_item_get_pdfdata_processmaker'];
}
$PLUGIN_HOOKS['item_get_pdfdatas']['processmaker'] = $hooks;
//$hooks = [];
//foreach($objects as $obj){
// $hooks[$obj.'_User'] = 'plugin_pre_item_purge_processmaker';
//}
//$PLUGIN_HOOKS['pre_item_purge']['processmaker'] = $hooks;
//$hooks = [];
//foreach($objects as $obj){
// $hooks[$obj.'_User'] = 'plugin_item_purge_processmaker';
//}
//$PLUGIN_HOOKS['item_purge']['processmaker'] = $hooks;
$plugin = new Plugin();
if ($plugin->isActivated('processmaker')
&& Session::getLoginUserID() ) {
$url = explode("/", $_SERVER['PHP_SELF']);
$pageName = explode("?", array_pop($url));
switch ($pageName[0]) {
case "tracking.injector.php":
case "helpdesk.public.php":
$PLUGIN_HOOKS['add_javascript']['processmaker'][] = "js/helpdesk.public.js.php";
$PLUGIN_HOOKS['add_javascript']['processmaker'] = ["js/helpdesk.public.js.php"];
break;
case "planning.php":
$PLUGIN_HOOKS['add_javascript']['processmaker'][] = "js/planning.js";
$PLUGIN_HOOKS['add_javascript']['processmaker'] = ["js/planning.js"];
break;
case "central.php":
$PLUGIN_HOOKS['add_javascript']['processmaker'][] = "js/central.js";
break;
case "case.form.php":
case "processmaker.helpdesk.form.php" :
$PLUGIN_HOOKS['add_javascript']['processmaker'] = ["js/domain.js.php"];
break;
$PLUGIN_HOOKS['add_javascript']['processmaker'] = ["js/central.js"];
break;
}
}
@@ -145,17 +128,17 @@ function plugin_version_processmaker() {
'homepage' => 'https://github.com/tomolimo/processmaker',
'requirements' => [
'glpi' => [
'min' => '9.2',
'max' => '9.2.99'
'min' => '9.3',
'max' => '9.4'
],
]
]
];
}
// Optional : check prerequisites before install : may print errors or add to message after redirect
function plugin_processmaker_check_prerequisites() {
if (version_compare(GLPI_VERSION, '9.2', 'lt') || version_compare(GLPI_VERSION, '9.3', 'ge')) {
echo "This plugin requires GLPI >= 9.2 and < 9.3";
if (version_compare(GLPI_VERSION, '9.3', 'lt') || version_compare(GLPI_VERSION, '9.4', 'ge')) {
echo "This plugin requires GLPI >= 9.3 and < 9.4";
return false;
}