diff --git a/ajax/task_users.php b/ajax/task_users.php
index 8768b9b..f9879a3 100644
--- a/ajax/task_users.php
+++ b/ajax/task_users.php
@@ -42,7 +42,7 @@
$grp = false;
$query = "SELECT TAS_GROUP_VARIABLE FROM TASK WHERE TAS_UID='".$_REQUEST['taskGuid']."' AND TAS_ASSIGN_TYPE='SELF_SERVICE';";
$res = $PM_DB->query($query);
-if ($PM_DB->numrows($res) > 0 && $row = $PM_DB->fetch_assoc($res)) {
+if ($PM_DB->numrows($res) > 0 && $row = $PM_DB->fetchAssoc($res)) {
$can_unclaim = true;
if ($row['TAS_GROUP_VARIABLE'] != '') {
//self-service value based assignment
diff --git a/front/processmaker.form.php b/front/processmaker.form.php
index a10c79a..f0462c9 100644
--- a/front/processmaker.form.php
+++ b/front/processmaker.form.php
@@ -1,126 +1,126 @@
- 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());
-
- if ($resultCase->status_code == 0) {
- $case = new PluginProcessmakerCase;
- if ($case->getFromGUID($resultCase->caseId)) {
- $link = $case->getLinkURL();
- $task = new PluginProcessmakerTask($_POST['itemtype'].'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->fields['id']);
- $item = new $_POST['itemtype'];
- $item->getFromDB($_POST['items_id']);
- unset($_SERVER['REQUEST_URI']); // to prevent use of processmaker.form.php in NavigateList
- Session::initNavigateListItems('PluginProcessmakerCase',
- //TRANS : %1$s is the itemtype name,
- // %2$s is the name of the item (used for headings of a list)
- sprintf('%1$s = %2$s',
- $_POST['itemtype']::getTypeName(1), $item->fields["name"]));
- Html::redirect($link);
- }
- Html::back();
- } else {
- Session::addMessageAfterRedirect( PluginProcessmakerProcessmaker::getPMErrorMessage($resultCase->status_code)."
".$resultCase->message." (".$resultCase->status_code.")", true, ERROR);
- }
- } else {
- 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'],
- // 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...
- //
- $rand = rand( );
- Html::redirect($CFG_GLPI['root_doc']."/plugins/processmaker/front/processmaker.helpdesk.form.php?processes_id=".$_POST['plugin_processmaker_processes_id']."&case_guid=".$resultCase->caseId."&rand=$rand&itilcategories_id=".$_POST["itilcategories_id"]."&type=".$_POST["type"]."&entities_id=".$_POST['entities_id']);
-
- } else {
- Session::addMessageAfterRedirect( PluginProcessmakerProcessmaker::getPMErrorMessage($resultCase->status_code)."
$resultCase->message ($resultCase->status_code)", true, ERROR);
- Html::redirect($CFG_GLPI["root_doc"]."/front/helpdesk.public.php?create_ticket=1");
- }
-
- }
- break;
-
- case 'reassign_reminder' :
- if (isset($_POST['reassign'])) {
- // here we should re-assign the current task to $_POST['users_id_recipient']
- $locCase = new PluginProcessmakerCase;
- $locCase->getFromDB($_POST['cases_id']);
- if ($_POST['users_id_recipient'] != 0) {
- // we are assigning a new tech to a task
- $pmResponse = $locCase->reassignCase($_POST['delIndex'],
- $_POST['taskGuid'],
- $_POST['delThread'],
- $_POST['users_id'],
- $_POST['users_id_recipient'],
- ['comment' => $_POST['comment']]);
- if ($pmResponse) {
- Session::addMessageAfterRedirect(__('Task re-assigned!', 'processmaker'), true, INFO);
- } else {
- Session::addMessageAfterRedirect(__('Error re-assigning task: ', 'processmaker').$pmResponse->message, true, ERROR);
- }
- } elseif ($_POST['users_id_recipient'] == 0) {
- // we are unassigning a task, i.e.: task un-claim
- $pmResponse = $locCase->unassignCase($_POST['delIndex'],
- $_POST['taskGuid'],
- $_POST['tasktype'],
- $_POST['tasks_id'],
- $_POST['itemtype'],
- ['comment' => $_POST['comment']]);
- if ($pmResponse) {
- Session::addMessageAfterRedirect(__('Task un-claimed!', 'processmaker'), true, INFO);
- } else {
- Session::addMessageAfterRedirect(__("Can't un-claim task! Verify 'Assignement Rules' in the process definition.", 'processmaker'), true, ERROR);
- }
- }
- } elseif (isset($_POST['reminder'])) {
- // send notification remider as requested for this task
-
- $locCase = new PluginProcessmakerCase;
- $locCase->getFromDB($_POST['cases_id']);
- $glpi_item = new $_POST['itemtype'];
- $glpi_item->getFromDB($_POST['items_id']);
- $pm_task = new PluginProcessmakerTask($_POST['tasktype']);
- $pm_task->getFromDB($_POST['tasks_id']);
- $glpi_task = new $_POST['tasktype'];
- $glpi_task->getFromDB($_POST['tasks_id']);
-
- // send notification now!
- $pm_task->sendNotification('task_reminder', $glpi_task, $glpi_item, $locCase);
- }
-}
-
-// to return to item
-Html::back();
-
+ 0) {
+
+ // then this case will be bound to an item
+ if ($_REQUEST['plugin_processmaker_processes_id'] > 0) {
+
+ $resultCase = $PM_SOAP->startNewCase($_REQUEST['plugin_processmaker_processes_id'], $_REQUEST['itemtype'], $_REQUEST['items_id'], Session::getLoginUserID());
+
+ if ($resultCase->status_code == 0) {
+ $case = new PluginProcessmakerCase;
+ if ($case->getFromGUID($resultCase->caseId)) {
+ $link = $case->getLinkURL();
+ $task = new PluginProcessmakerTask($_REQUEST['itemtype'].'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->fields['id']);
+ $item = new $_REQUEST['itemtype'];
+ $item->getFromDB($_REQUEST['items_id']);
+ unset($_SERVER['REQUEST_URI']); // to prevent use of processmaker.form.php in NavigateList
+ Session::initNavigateListItems('PluginProcessmakerCase',
+ //TRANS : %1$s is the itemtype name,
+ // %2$s is the name of the item (used for headings of a list)
+ sprintf('%1$s = %2$s',
+ $_REQUEST['itemtype']::getTypeName(1), $item->fields["name"]));
+ Html::redirect($link);
+ }
+ Html::back();
+ } else {
+ Session::addMessageAfterRedirect( PluginProcessmakerProcessmaker::getPMErrorMessage($resultCase->status_code)."
".$resultCase->message." (".$resultCase->status_code.")", true, ERROR);
+ }
+ } else {
+ 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( $_REQUEST['plugin_processmaker_processes_id'],
+ ['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' => $_REQUEST['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...
+ //
+ $rand = rand( );
+ Html::redirect($CFG_GLPI['root_doc']."/plugins/processmaker/front/processmaker.helpdesk.form.php?processes_id=".$_REQUEST['plugin_processmaker_processes_id']."&case_guid=".$resultCase->caseId."&rand=$rand&itilcategories_id=".$_REQUEST["itilcategories_id"]."&type=".$_REQUEST["type"]."&entities_id=".$_REQUEST['entities_id']);
+
+ } else {
+ Session::addMessageAfterRedirect( PluginProcessmakerProcessmaker::getPMErrorMessage($resultCase->status_code)."
$resultCase->message ($resultCase->status_code)", true, ERROR);
+ Html::redirect($CFG_GLPI["root_doc"]."/front/helpdesk.public.php?create_ticket=1");
+ }
+
+ }
+ break;
+
+ case 'reassign_reminder' :
+ if (isset($_REQUEST['reassign'])) {
+ // here we should re-assign the current task to $_REQUEST['users_id_recipient']
+ $locCase = new PluginProcessmakerCase;
+ $locCase->getFromDB($_REQUEST['cases_id']);
+ if ($_REQUEST['users_id_recipient'] != 0) {
+ // we are assigning a new tech to a task
+ $pmResponse = $locCase->reassignCase($_REQUEST['delIndex'],
+ $_REQUEST['taskGuid'],
+ $_REQUEST['delThread'],
+ $_REQUEST['users_id'],
+ $_REQUEST['users_id_recipient'],
+ ['comment' => $_REQUEST['comment']]);
+ if ($pmResponse) {
+ Session::addMessageAfterRedirect(__('Task re-assigned!', 'processmaker'), true, INFO);
+ } else {
+ Session::addMessageAfterRedirect(__('Error re-assigning task: ', 'processmaker').$pmResponse->message, true, ERROR);
+ }
+ } elseif ($_REQUEST['users_id_recipient'] == 0) {
+ // we are unassigning a task, i.e.: task un-claim
+ $pmResponse = $locCase->unassignCase($_REQUEST['delIndex'],
+ $_REQUEST['taskGuid'],
+ $_REQUEST['tasktype'],
+ $_REQUEST['tasks_id'],
+ $_REQUEST['itemtype'],
+ ['comment' => $_REQUEST['comment']]);
+ if ($pmResponse) {
+ Session::addMessageAfterRedirect(__('Task un-claimed!', 'processmaker'), true, INFO);
+ } else {
+ Session::addMessageAfterRedirect(__("Can't un-claim task! Verify 'Assignement Rules' in the process definition.", 'processmaker'), true, ERROR);
+ }
+ }
+ } elseif (isset($_REQUEST['reminder'])) {
+ // send notification remider as requested for this task
+
+ $locCase = new PluginProcessmakerCase;
+ $locCase->getFromDB($_REQUEST['cases_id']);
+ $glpi_item = new $_REQUEST['itemtype'];
+ $glpi_item->getFromDB($_REQUEST['items_id']);
+ $pm_task = new PluginProcessmakerTask($_REQUEST['tasktype']);
+ $pm_task->getFromDB($_REQUEST['tasks_id']);
+ $glpi_task = new $_REQUEST['tasktype'];
+ $glpi_task->getFromDB($_REQUEST['tasks_id']);
+
+ // send notification now!
+ $pm_task->sendNotification('task_reminder', $glpi_task, $glpi_item, $locCase);
+ }
+}
+
+// to return to item
+Html::back();
+
diff --git a/front/processmaker.helpdesk.form.php b/front/processmaker.helpdesk.form.php
index 28c4ea8..9a8890c 100644
--- a/front/processmaker.helpdesk.form.php
+++ b/front/processmaker.helpdesk.form.php
@@ -59,8 +59,8 @@ function processMakerShowCase($users_id, $from_helpdesk) {
$tkt = new Ticket;
- // as showFormHelpdesk uses $_POST, we must set it
- $_POST = $_REQUEST;
+ // as showFormHelpdesk uses $_REQUEST, we must set it
+ $_REQUEST = $_REQUEST;
//// must be using bare text
//$save_rich_text = $CFG_GLPI["use_rich_text"];
@@ -189,9 +189,9 @@ function in_array_recursive($needle, $haystack) {
// Change profile system
-if (isset($_POST['newprofile'])) {
- if (isset($_SESSION["glpiprofiles"][$_POST['newprofile']])) {
- Session::changeProfile($_POST['newprofile']);
+if (isset($_REQUEST['newprofile'])) {
+ if (isset($_SESSION["glpiprofiles"][$_REQUEST['newprofile']])) {
+ Session::changeProfile($_REQUEST['newprofile']);
if ($_SESSION["glpiactiveprofile"]["interface"] == "central") {
Html::redirect($CFG_GLPI['root_doc']."/front/central.php");
@@ -205,20 +205,20 @@ function in_array_recursive($needle, $haystack) {
}
// Manage entity change
-if (isset($_GET["active_entity"])) {
- if (!isset($_GET["is_recursive"])) {
- $_GET["is_recursive"] = 0;
+if (isset($_REQUEST["active_entity"])) {
+ if (!isset($_REQUEST["is_recursive"])) {
+ $_REQUEST["is_recursive"] = 0;
}
- if (Session::changeActiveEntities($_GET["active_entity"], $_GET["is_recursive"])) {
- if ($_GET["active_entity"] == $_SESSION["glpiactive_entity"]) {
+ if (Session::changeActiveEntities($_REQUEST["active_entity"], $_REQUEST["is_recursive"])) {
+ if ($_REQUEST["active_entity"] == $_SESSION["glpiactive_entity"]) {
Html::redirect(preg_replace("/entities_id.*/", "", $_SERVER['HTTP_REFERER']));
}
}
}
// Redirect management
-if (isset($_GET["redirect"])) {
- Toolbox::manageRedirect($_GET["redirect"]);
+if (isset($_REQUEST["redirect"])) {
+ Toolbox::manageRedirect($_REQUEST["redirect"]);
}
// redirect if no create ticket right
diff --git a/front/tracking.injector.php b/front/tracking.injector.php
index a036474..943de0d 100644
--- a/front/tracking.injector.php
+++ b/front/tracking.injector.php
@@ -1,68 +1,68 @@
- 1) {
- // in this case we should show the process dropdown selection
- include (GLPI_ROOT . "/plugins/processmaker/front/processmaker.helpdesk.form.php");
- die();
- } else {
- // in this case should start RUMT
- // if and only if itilcategories_id matches one of the 'User Management' categories
- // could be done via ARBehviours or RUMT itself
- $userManagementCat = [ 100556, 100557, 100558 ];
- $plug = new Plugin;
- if ($processQt == 0 && in_array( $_POST["itilcategories_id"], $userManagementCat) && $plug->isActivated('rayusermanagementticket' )) {
- Html::redirect($CFG_GLPI['root_doc']."/plugins/rayusermanagementticket/front/rayusermanagementticket.helpdesk.public.php");
- }
- }
-}
-
-// prepare environment for std tracking.injector.php
-// switch to front dir
-chdir(GLPI_ROOT."/front");
-// revert back $_POST, $_GET and $_REQUEST
-$_GET = $PM_GET;
-$_POST = $PM_POST;
-$_REQUEST = $PM_REQUEST;
-include (GLPI_ROOT . "/front/tracking.injector.php");
+ 1) {
+ // in this case we should show the process dropdown selection
+ include (GLPI_ROOT . "/plugins/processmaker/front/processmaker.helpdesk.form.php");
+ die();
+ } else {
+ // in this case should start RUMT
+ // if and only if itilcategories_id matches one of the 'User Management' categories
+ // could be done via ARBehviours or RUMT itself
+ $userManagementCat = [ 100556, 100557, 100558 ];
+ $plug = new Plugin;
+ if ($processQt == 0 && in_array( $_REQUEST["itilcategories_id"], $userManagementCat) && $plug->isActivated('rayusermanagementticket' )) {
+ Html::redirect($CFG_GLPI['root_doc']."/plugins/rayusermanagementticket/front/rayusermanagementticket.helpdesk.public.php");
+ }
+ }
+}
+
+// prepare environment for std tracking.injector.php
+// switch to front dir
+chdir(GLPI_ROOT."/front");
+// revert back $_POST, $_GET and $_REQUEST
+$_GET = $PM_GET;
+$_POST = $PM_POST;
+$_REQUEST = $PM_REQUEST;
+include (GLPI_ROOT . "/front/tracking.injector.php");
diff --git a/inc/processmaker.class.php b/inc/processmaker.class.php
index 9dd59d4..aa50ac4 100644
--- a/inc/processmaker.class.php
+++ b/inc/processmaker.class.php
@@ -2674,9 +2674,21 @@ public static function getProcessesWithCategoryAndProfile($category, $type, $pro
global $DB;
$dbu = new DbUtils;
$processList = [ ];
- //$entityAncestors = implode( ", ", $dbu->getAncestorsOf( $dbu->getTableForItemType( 'Entity' ), $entity ) );
$entityAncestors = $dbu->getAncestorsOf( $dbu->getTableForItemType( 'Entity' ), $entity );
- //if (strlen( $entityAncestors ) > 0) {
+
+ $entities = ['entities_id' => $entity];
+ if (count( $entityAncestors ) > 0) {
+ $entities = [
+ 'OR' => [
+ 'entities_id' => $entity,
+ 'AND' => [
+ 'entities_id' => $entityAncestors,
+ 'is_recursive' => 1
+ ]
+ ]
+ ];
+ }
+
if ($category > 0) {
$query = [
'FIELDS' => ['glpi_plugin_processmaker_processes.id', 'glpi_plugin_processmaker_processes.name'],
@@ -2696,30 +2708,21 @@ public static function getProcessesWithCategoryAndProfile($category, $type, $pro
],
'WHERE' => [
'AND' => [
+ 'is_active' => 1,
'itilcategories_id' => $category,
'type' => $type,
'profiles_id' => $profile,
- 'entities_id' => $entity
+ $entities
]
]
];
- if (count( $entityAncestors ) > 0) {
- //$entityAncestors = " OR (entities_id IN ($entityAncestors) AND is_recursive = 1) ";
- $entityAncestors[] = $entity;
- $query['WHERE']['AND']['entities_id'] = $entityAncestors;
- $query['WHERE']['AND']['is_recursive'] = 1;
- }
+
$res = $DB->request($query);
foreach ($res as $row) {
$processList[] = $row;
}
$processList = array_map("unserialize", array_unique(array_map("serialize", $processList)));
}
- //$query ="SELECT DISTINCT glpi_plugin_processmaker_processes.id, glpi_plugin_processmaker_processes.name FROM glpi_plugin_processmaker_processes
- // INNER JOIN glpi_plugin_processmaker_processes_profiles ON glpi_plugin_processmaker_processes_profiles.plugin_processmaker_processes_id=glpi_plugin_processmaker_processes.id
- // WHERE is_active = 1 AND itilcategories_id = $category AND `type` = $type AND profiles_id = $profile AND (entities_id = $entity $entityAncestors)";
-
- //foreach ($DB->request( $query ) as $row) {
return $processList;
diff --git a/processmaker.xml b/processmaker.xml
index fd72d7b..8ed5d68 100644
--- a/processmaker.xml
+++ b/processmaker.xml
@@ -41,7 +41,7 @@
9.4
- 4.0.4
+ 4.0.5
9.5
diff --git a/setup.php b/setup.php
index a4a02e2..b902a8d 100644
--- a/setup.php
+++ b/setup.php
@@ -1,6 +1,6 @@