GLPI 9.4 compliant

This commit is contained in:
tomolimo
2019-07-19 16:17:53 +02:00
parent cbec68837a
commit 217d605c51
15 changed files with 907 additions and 296 deletions

View File

@@ -6,6 +6,8 @@ version 3.4.x is compatible with GLPI 9.2 and needs ProcessMaker either 3.0.1.8-
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) 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)
version 3.6.x is compatible with GLPI 9.4 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 This plugin can run classic and bpmn processes
An IRC channel is available: #processmaker-glpi on https://webchat.freenode.net/ An IRC channel is available: #processmaker-glpi on https://webchat.freenode.net/

View File

@@ -45,7 +45,7 @@ if (!isset($_REQUEST['emptylabel']) || ($_REQUEST['emptylabel'] == '')) {
$search=""; $search="";
if (!empty($_REQUEST['searchText'])) { if (!empty($_REQUEST['searchText'])) {
$search = Search::makeTextSearch($_REQUEST['searchText']); $search = ['LIKE', Search::makeTextSearchValue($_REQUEST['searchText'])];
} }
$processes = []; $processes = [];
@@ -65,8 +65,10 @@ $count_cases_per_item = isset($_REQUEST['specific_tags']['count_cases_per_item']
$result = PluginProcessmakerProcess::getSqlSearchResult(false, $search); $result = PluginProcessmakerProcess::getSqlSearchResult(false, $search);
if ($DB->numrows($result)) { //if ($DB->numrows($result)) {
while ($data = $DB->fetch_array($result)) { // while ($data = $DB->fetch_array($result)) {
if ($result->numrows()) {
foreach ($result as $data) {
$process_entities = PluginProcessmakerProcess::getEntitiesForProfileByProcess($data["id"], $_SESSION['glpiactiveprofile']['id'], true); $process_entities = PluginProcessmakerProcess::getEntitiesForProfileByProcess($data["id"], $_SESSION['glpiactiveprofile']['id'], true);
$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']; $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 if ($processall

View File

@@ -58,20 +58,29 @@ if ($one_item < 0) {
$start = ($_REQUEST['page']-1)*$_REQUEST['page_limit']; $start = ($_REQUEST['page']-1)*$_REQUEST['page_limit'];
$LIMIT = "LIMIT $start,".$_REQUEST['page_limit']; $LIMIT = "LIMIT $start,".$_REQUEST['page_limit'];
$searchText = isset($_REQUEST['searchText']) ? $_REQUEST['searchText'] : ""; $searchText = isset($_REQUEST['searchText']) ? $_REQUEST['searchText'] : "";
$result = PluginProcessmakerUser::getSqlSearchResult( $_REQUEST['specific_tags']['taskGuid'], false, $_REQUEST['right'], $_REQUEST["entity_restrict"], /*$result*/$res = PluginProcessmakerUser::getSqlSearchResult( $_REQUEST['specific_tags']['taskGuid'], false, $_REQUEST['right'], $_REQUEST["entity_restrict"],
$_REQUEST['value'], $used, $searchText, $LIMIT); $_REQUEST['value'], $used, $searchText, $LIMIT);
} else { } else {
$query = "SELECT DISTINCT `glpi_users`.* $res = $DB->request([
FROM `glpi_users` 'SELECT' => 'glpi_users.*',
WHERE `glpi_users`.`id` = '$one_item';"; 'FROM' => 'glpi_users',
$result = $DB->query($query); 'WHERE' => [
'glpi_users.id' => $one_item
]
]);
//$query = "SELECT DISTINCT `glpi_users`.*
// FROM `glpi_users`
// WHERE `glpi_users`.`id` = '$one_item';";
//$result = $DB->query($query);
} }
$users = []; $users = [];
// Count real items returned // Count real items returned
$count = 0; $count = 0;
if ($DB->numrows($result)) { //if ($DB->numrows($result)) {
while ($data = $DB->fetch_assoc($result)) { // while ($data = $DB->fetch_assoc($result)) {
if ($res->numrows()) {
foreach ($res as $data) {
$users[$data["id"]] = $dbu->formatUserName($data["id"], $data["name"], $data["realname"], $users[$data["id"]] = $dbu->formatUserName($data["id"], $data["name"], $data["realname"],
$data["firstname"]); $data["firstname"]);
$logins[$data["id"]] = $data["name"]; $logins[$data["id"]] = $data["name"];

View File

@@ -225,7 +225,7 @@ if (!Session::haveRight('ticket', CREATE)
&& !Session::haveRight('reminder_public', READ) && !Session::haveRight('reminder_public', READ)
&& !Session::haveRight("rssfeed_public", READ)) { && !Session::haveRight("rssfeed_public", READ)) {
if (Session::haveRight('followup', TicketFollowup::SEEPUBLIC) if (Session::haveRight('followup', ITILFollowup::SEEPUBLIC) //TicketFollowup::SEEPUBLIC
|| Session::haveRight('task', TicketTask::SEEPUBLIC) || Session::haveRight('task', TicketTask::SEEPUBLIC)
|| Session::haveRightsOr('ticketvalidation', [TicketValidation::VALIDATEREQUEST, || Session::haveRightsOr('ticketvalidation', [TicketValidation::VALIDATEREQUEST,
TicketValidation::VALIDATEINCIDENT])) { TicketValidation::VALIDATEINCIDENT])) {
@@ -245,9 +245,14 @@ Html::helpHeader(__('New ticket'), $_SERVER['PHP_SELF'], $_SESSION["glpiname"]);
if (isset($_REQUEST['case_guid'])) { if (isset($_REQUEST['case_guid'])) {
$res = $DB->request(
'glpi_plugin_processmaker_cases', [
' case_guid'=>$_REQUEST['case_guid']
]);
$query = "SELECT * FROM glpi_plugin_processmaker_cases WHERE case_guid='".$_REQUEST['case_guid']."'"; $query = "SELECT * FROM glpi_plugin_processmaker_cases WHERE case_guid='".$_REQUEST['case_guid']."'";
$res = $DB->query( $query ); //$res = $DB->query( $query );
if ($DB->numrows( $res )) { // a ticket already exists for this case, then show new cases //if ($DB->numrows( $res )) { // a ticket already exists for this case, then show new cases
if ($res->numrows()) { // a ticket already exists for this case, then show new cases
processMakerShowProcessList(Session::getLoginUserID(), 1); processMakerShowProcessList(Session::getLoginUserID(), 1);
} else { } else {
// before showing the case, we must check the rights for this user to view it, if entity has been changed in the meanwhile // before showing the case, we must check the rights for this user to view it, if entity has been changed in the meanwhile

View File

@@ -265,11 +265,18 @@ class PluginProcessmakerCase extends CommonDBTM {
*/ */
public function reassignTask ($delIndex, $newDelIndex, $delThread, $newDelThread, $newTech) { public function reassignTask ($delIndex, $newDelIndex, $delThread, $newDelThread, $newTech) {
global $DB; global $DB;
$res = $DB->request('glpi_plugin_processmaker_tasks', [
$query = "SELECT * FROM glpi_plugin_processmaker_tasks WHERE plugin_processmaker_cases_id={$this->getID()} AND del_index=$delIndex AND del_thread=$delThread; "; 'AND' => [
$res = $DB->query($query); 'plugin_processmaker_cases_id' => $this->getID(),
if ($DB->numrows($res) > 0) { 'del_index' => $delIndex,
$row = $DB->fetch_array( $res ); 'del_thead' => $delThread
]
]);
//$query = "SELECT * FROM glpi_plugin_processmaker_tasks WHERE plugin_processmaker_cases_id={$this->getID()} AND del_index=$delIndex AND del_thread=$delThread; ";
//$res = $DB->query($query);
//if ($DB->numrows($res) > 0) {
// $row = $DB->fetch_array( $res );
if ($row = $res->next()) {
$glpi_task = new $row['itemtype']; $glpi_task = new $row['itemtype'];
$glpi_task->getFromDB( $row['items_id'] ); $glpi_task->getFromDB( $row['items_id'] );
@@ -281,8 +288,15 @@ class PluginProcessmakerCase extends CommonDBTM {
$glpi_task->update( [ 'id' => $row['items_id'], $foreignkey => $glpi_task->fields[ $foreignkey ], 'users_id_tech' => $newTech ]); $glpi_task->update( [ 'id' => $row['items_id'], $foreignkey => $glpi_task->fields[ $foreignkey ], 'users_id_tech' => $newTech ]);
// then update the delIndex and delThread // then update the delIndex and delThread
$query = "UPDATE glpi_plugin_processmaker_tasks SET del_index = $newDelIndex, del_thread = $newDelThread WHERE id={$row['id']}; "; //$query = "UPDATE glpi_plugin_processmaker_tasks SET del_index = $newDelIndex, del_thread = $newDelThread WHERE id={$row['id']}; ";
$res = $DB->query($query); //$res = $DB->query($query);
$DB->Update( 'glpi_plugin_processmaker_tasks', [
'del_index' => $newDelIndex,
'del_thread' => $newDelThread
], [
'id' => $row['id']
]
);
} }
} }
@@ -295,11 +309,20 @@ class PluginProcessmakerCase extends CommonDBTM {
// get all tasks that are OPEN for any sub-case of this case // get all tasks that are OPEN for any sub-case of this case
$case_tasks = []; $case_tasks = [];
$query = "SELECT `glpi_plugin_processmaker_tasks`.* FROM `glpi_plugin_processmaker_tasks` $res = $DB->request('glpi_plugin_processmaker_tasks', [
WHERE `glpi_plugin_processmaker_tasks`.`plugin_processmaker_cases_id`={$this->getID()} AND `del_thread_status`='OPEN'"; 'AND' => [
foreach ($DB->request($query) as $task) { 'plugin_processmaker_cases_id' => $this->getID(),
'del_thread_status' => 'OPEN'
]
]);
foreach ($res as $task) {
$case_tasks[$task['del_index']] = $task; $case_tasks[$task['del_index']] = $task;
} }
//$query = "SELECT `glpi_plugin_processmaker_tasks`.* FROM `glpi_plugin_processmaker_tasks`
// WHERE `glpi_plugin_processmaker_tasks`.`plugin_processmaker_cases_id`={$this->getID()} AND `del_thread_status`='OPEN'";
//foreach ($DB->request($query) as $task) {
// $case_tasks[$task['del_index']] = $task;
//}
//// get all tasks that are OPEN for any sub-case of this case //// get all tasks that are OPEN for any sub-case of this case
//$sub_cases = []; //$sub_cases = [];
@@ -314,11 +337,19 @@ class PluginProcessmakerCase extends CommonDBTM {
if (property_exists($caseInfo, 'currentUsers')) { if (property_exists($caseInfo, 'currentUsers')) {
$caseInfo->currentUsers = $this->sortTasks($caseInfo->currentUsers, PluginProcessmakerUser::getPMUserId(Session::getLoginUserID())); $caseInfo->currentUsers = $this->sortTasks($caseInfo->currentUsers, PluginProcessmakerUser::getPMUserId(Session::getLoginUserID()));
} }
$query = "SELECT `DEL_INDEX`, `DEL_DELEGATE_DATE` FROM `APP_DELEGATION` WHERE `APP_UID`='{$caseInfo->caseId}'"; $res = $PM_DB->request([
'SELECT' => ['DEL_INDEX', 'DEL_DELEGATE_DATE'],
'FROM' => 'APP_DELEGATION',
'WHERE' => ['APP_UID' => $caseInfo->caseId]
]);
//$query = "SELECT `DEL_INDEX`, `DEL_DELEGATE_DATE` FROM `APP_DELEGATION` WHERE `APP_UID`='{$caseInfo->caseId}'";
$tasks = []; $tasks = [];
foreach ($PM_DB->request($query) as $row) { foreach ($res as $row) {
$tasks[$row['DEL_INDEX']] = $row['DEL_DELEGATE_DATE']; $tasks[$row['DEL_INDEX']] = $row['DEL_DELEGATE_DATE'];
} }
//foreach ($PM_DB->request($query) as $row) {
// $tasks[$row['DEL_INDEX']] = $row['DEL_DELEGATE_DATE'];
//}
echo "<p></p>"; echo "<p></p>";
// show the case properties like given by PM server // show the case properties like given by PM server
@@ -346,9 +377,21 @@ class PluginProcessmakerCase extends CommonDBTM {
$case_url .= $case_tasks[$currentTask->delIndex]['id']; $case_url .= $case_tasks[$currentTask->delIndex]['id'];
echo "<td class='tab_bg_2'><a href='$case_url'>".$currentTask->taskName."</a></td>"; echo "<td class='tab_bg_2'><a href='$case_url'>".$currentTask->taskName."</a></td>";
} else { } else {
$res = $PM_DB->query("SELECT APP_UID FROM SUB_APPLICATION WHERE APP_PARENT='{$this->fields['case_guid']}' AND DEL_INDEX_PARENT={$currentTask->delIndex} AND SA_STATUS='ACTIVE'"); $res = $PM_DB->request([
if ($res && $PM_DB->numrows($res) == 1) { 'SELECT' => 'APP_UID',
$row = $PM_DB->fetch_assoc($res); 'FROM' => 'SUB_APPLICATION',
'WHERE' => [
'AND' => [
'APP_PARENT' => $this->fields['case_guid'],
'DEL_INDEX_PARENT' => $currentTask->delIndex,
'SA_STATUS' => 'ACTIVE'
]
]
]);
//$res = $PM_DB->query("SELECT APP_UID FROM SUB_APPLICATION WHERE APP_PARENT='{$this->fields['case_guid']}' AND DEL_INDEX_PARENT={$currentTask->delIndex} AND SA_STATUS='ACTIVE'");
//if ($res && $PM_DB->numrows($res) == 1) {
// $row = $PM_DB->fetch_assoc($res);
if ($res->numrows() == 1 && $row = $res->next()) {
$sub_case = new PluginProcessmakerCase; $sub_case = new PluginProcessmakerCase;
$sub_case->getFromGUID($row['APP_UID']); $sub_case->getFromGUID($row['APP_UID']);
$case_url .= $sub_case->getID()."-".$currentTask->delIndex; $case_url .= $sub_case->getID()."-".$currentTask->delIndex;
@@ -572,20 +615,36 @@ class PluginProcessmakerCase extends CommonDBTM {
$canupdate = $item->can($items_id, UPDATE); $canupdate = $item->can($items_id, UPDATE);
$rand = mt_rand(); $rand = mt_rand();
$res = $DB->request([
$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` '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 'FROM' => 'glpi_plugin_processmaker_cases AS gppc',
LEFT JOIN `glpi_plugin_processmaker_processes` AS gppp ON gppp.`id`=gppc.`plugin_processmaker_processes_id` 'LEFT JOIN' => [
WHERE gppc.`itemtype` = '$itemtype' 'glpi_plugin_processmaker_processes AS gppp' => [
AND gppc.`items_id` = $items_id 'FKEY' => [
"; 'gppp' => 'id',
$result = $DB->query($query); 'gppc' => 'plugin_processmaker_processes_id']
]
],
'WHERE' => [
'AND' => [
'gppc.itemtype' => $itemtype,
'gppc.items_id' => $items_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'
// AND gppc.`items_id` = $items_id
// ";
//$result = $DB->query($query);
$cases = []; $cases = [];
$used = []; $used = [];
$pid = []; $pid = [];
if ($numrows = $DB->numrows($result)) { if ($numrows = $res->numrows()) {
while ($data = $DB->fetch_assoc($result)) { foreach ($res as $data) {
$cases[$data['id']] = $data; $cases[$data['id']] = $data;
$used[$data['id']] = $data['id']; $used[$data['id']] = $data['id'];
if (isset($pid[$data['pid']])) { if (isset($pid[$data['pid']])) {
@@ -595,6 +654,17 @@ class PluginProcessmakerCase extends CommonDBTM {
} }
} }
} }
//if ($numrows = $DB->numrows($result)) {
// while ($data = $DB->fetch_assoc($result)) {
// $cases[$data['id']] = $data;
// $used[$data['id']] = $data['id'];
// if (isset($pid[$data['pid']])) {
// $pid[$data['pid']] += 1;
// } else {
// $pid[$data['pid']] = 1;
// }
// }
//}
$columns = ['pname' => __('Process', 'processmaker'), $columns = ['pname' => __('Process', 'processmaker'),
'name' => __('Title', 'processmaker'), 'name' => __('Title', 'processmaker'),
@@ -621,18 +691,23 @@ class PluginProcessmakerCase extends CommonDBTM {
echo "<tr class='tab_bg_2'><td class='tab_bg_2'>"; echo "<tr class='tab_bg_2'><td class='tab_bg_2'>";
echo __('Select the process you want to add', 'processmaker'); echo __('Select the process you want to add', 'processmaker');
echo "</td><td class='tab_bg_2'>"; echo "</td><td class='tab_bg_2'>";
$condition[] = ['is_active' => 1];
if ($itemtype == 'Ticket') { if ($itemtype == 'Ticket') {
$condition[] = ['is_incident' => 1];
$is_itemtype = "AND is_incident=1"; $is_itemtype = "AND is_incident=1";
if ($item->fields['type'] == Ticket::DEMAND_TYPE) { if ($item->fields['type'] == Ticket::DEMAND_TYPE) {
$condition[] = ['is_request' => 1];
$is_itemtype = "AND is_request=1"; $is_itemtype = "AND is_request=1";
} }
} else { } else {
$condition[] = ['is_'.strtolower($itemtype) => 1];
$is_itemtype = "AND is_".strtolower($itemtype)."=1"; $is_itemtype = "AND is_".strtolower($itemtype)."=1";
} }
PluginProcessmakerProcess::dropdown(['value' => 0, PluginProcessmakerProcess::dropdown(['value' => 0,
'entity' => $item->fields['entities_id'], 'entity' => $item->fields['entities_id'],
'name' => 'plugin_processmaker_processes_id', 'name' => 'plugin_processmaker_processes_id',
'condition' => "is_active=1 $is_itemtype", //'condition' => "is_active=1 $is_itemtype",
'condition' => $condition,
'specific_tags' => ['count_cases_per_item' => $pid] 'specific_tags' => ['count_cases_per_item' => $pid]
]); ]);
echo "</td><td class='tab_bg_2'>"; echo "</td><td class='tab_bg_2'>";
@@ -762,14 +837,24 @@ class PluginProcessmakerCase extends CommonDBTM {
private function deleteTasks() { private function deleteTasks() {
global $DB; global $DB;
$ret = false; $ret = false;
$sub = new QuerySubQuery([
'SELECT' => 'items_id',
'FROM' => 'glpi_plugin_processmaker_tasks',
'WHERE' => ['plugin_processmaker_cases_id' => $this->fields['id']]
]);
$query = "DELETE FROM glpi_".strtolower($this->fields['itemtype'])."tasks WHERE id IN (SELECT items_id FROM glpi_plugin_processmaker_tasks WHERE plugin_processmaker_cases_id='".$this->fields['id']."')"; if ($DB->delete('glpi_'.strtolower($this->fields['itemtype']).'tasks', ['id' => $sub ])) {
if ($DB->query( $query )) { if ($DB->delete('glpi_plugin_processmaker_tasks', ['plugin_processmaker_cases_id' => $this->fields['id']])) {
$query = "DELETE FROM glpi_plugin_processmaker_tasks WHERE plugin_processmaker_cases_id='".$this->fields['id']."'";
if ($DB->query( $query )) {
$ret = true; $ret = true;
} }
} }
//$query = "DELETE FROM glpi_".strtolower($this->fields['itemtype'])."tasks WHERE id IN (SELECT items_id FROM glpi_plugin_processmaker_tasks WHERE plugin_processmaker_cases_id='".$this->fields['id']."')";
//if ($DB->query( $query )) {
// $query = "DELETE FROM glpi_plugin_processmaker_tasks WHERE plugin_processmaker_cases_id='".$this->fields['id']."'";
// if ($DB->query( $query )) {
// $ret = true;
// }
//}
return $ret; return $ret;
} }
@@ -795,10 +880,29 @@ class PluginProcessmakerCase extends CommonDBTM {
$ret = false; $ret = false;
if (isset($this->fields['case_status']) && $this->fields['case_status'] == "TO_DO") { if (isset($this->fields['case_status']) && $this->fields['case_status'] == "TO_DO") {
$query = "UPDATE glpi_".$this->fields['itemtype']."tasks SET state=0,users_id_tech=0,begin=NULL,end=NULL WHERE state=1 AND id in (select items_id from glpi_plugin_processmaker_tasks where plugin_processmaker_cases_id='".$this->fields['id']."')"; $sub = new QuerySubQuery([
if ($DB->query( $query )) { 'SELECT' => 'items_id',
'FROM' => 'glpi_plugin_processmaker_tasks',
'WHERE' => ['plugin_processmaker_cases_id' => $this->fields['id']]
]);
$res = $DB->update('glpi_'.$this->fields['itemtype'].'tasks', [
'state' => 0,
'users_id_tech' => 0,
'begin' => null,
'end' => null
], [
'AND' => [
'state' => 1,
'id' => $sub
]
]);
if ($res) {
$ret = true; $ret = true;
} }
//$query = "UPDATE glpi_".$this->fields['itemtype']."tasks SET state=0,users_id_tech=0,begin=NULL,end=NULL WHERE state=1 AND id in (select items_id from glpi_plugin_processmaker_tasks where plugin_processmaker_cases_id='".$this->fields['id']."')";
//if ($DB->query( $query )) {
// $ret = true;
//}
} }
return $ret; return $ret;
} }
@@ -930,22 +1034,36 @@ class PluginProcessmakerCase extends CommonDBTM {
if (isset($options['searchopt']['processmaker_cases'])) { if (isset($options['searchopt']['processmaker_cases'])) {
switch ($options['searchopt']['processmaker_cases']) { switch ($options['searchopt']['processmaker_cases']) {
case 'creation_date': case 'creation_date':
$res = $PM_DB->query('SELECT * FROM APPLICATION WHERE APP_NUMBER = '.$values['id']); $res = $PM_DB->request('APPLICATION', [
if ($res->num_rows > 0) { 'APP_NUMBER' => $values['id']
$row = $PM_DB->fetch_assoc($res); ]
);
if ($row = $res->next()) {
return Html::convDateTime($row['APP_CREATE_DATE']); return Html::convDateTime($row['APP_CREATE_DATE']);
} }
//$res = $PM_DB->query('SELECT * FROM APPLICATION WHERE APP_NUMBER = '.$values['id']);
//if ($res->num_rows > 0) {
// $row = $PM_DB->fetch_assoc($res);
// return Html::convDateTime($row['APP_CREATE_DATE']);
//}
//$locCase = new self; //$locCase = new self;
//$locCase->getFromDB($values['id']); //$locCase->getFromDB($values['id']);
//$caseInfo = $locCase->getCaseInfo(); //$caseInfo = $locCase->getCaseInfo();
//return Html::convDateTime($caseInfo->createDate); //return Html::convDateTime($caseInfo->createDate);
break; break;
case 'update_date': case 'update_date':
$res = $PM_DB->query('SELECT * FROM APPLICATION WHERE APP_NUMBER = '.$values['id']); $res = $PM_DB->request('APPLICATION', [
if ($res->num_rows > 0) { 'APP_NUMBER' => $values['id']
$row = $PM_DB->fetch_assoc($res); ]
);
if ($row = $res->next()) {
return Html::convDateTime($row['APP_UPDATE_DATE']); return Html::convDateTime($row['APP_UPDATE_DATE']);
} }
//$res = $PM_DB->query('SELECT * FROM APPLICATION WHERE APP_NUMBER = '.$values['id']);
//if ($res->num_rows > 0) {
// $row = $PM_DB->fetch_assoc($res);
// return Html::convDateTime($row['APP_UPDATE_DATE']);
//}
//$locCase = new self; //$locCase = new self;
//$locCase->getFromDB($values['id']); //$locCase->getFromDB($values['id']);
//$caseInfo = $locCase->getCaseInfo(); //$caseInfo = $locCase->getCaseInfo();
@@ -1356,9 +1474,12 @@ class PluginProcessmakerCase extends CommonDBTM {
function deleteCronTaskActions() { function deleteCronTaskActions() {
global $DB; global $DB;
$query = "DELETE FROM `glpi_plugin_processmaker_crontaskactions` WHERE `plugin_processmaker_cases_id` = ".$this->getID(); return $DB->delete('glpi_plugin_processmaker_crontaskactions', [
'plugin_processmaker_cases_id' => $this->getID()
return $DB->query($query); ]
);
//$query = "DELETE FROM `glpi_plugin_processmaker_crontaskactions` WHERE `plugin_processmaker_cases_id` = ".$this->getID();
//return $DB->query($query);
} }
} }

View File

@@ -307,11 +307,28 @@ class PluginProcessmakerConfig extends CommonDBTM {
echo "<td >".__('Group in ProcessMaker which will contain all GLPI users', 'processmaker')."</td><td >"; echo "<td >".__('Group in ProcessMaker which will contain all GLPI users', 'processmaker')."</td><td >";
$pmGroups = [ 0 => Dropdown::EMPTY_VALUE ]; $pmGroups = [ 0 => Dropdown::EMPTY_VALUE ];
$query = "SELECT DISTINCT CON_ID, CON_VALUE FROM CONTENT WHERE CON_CATEGORY='GRP_TITLE' ORDER BY CON_VALUE;"; //$res = $PM_DB->request([
// 'SELECT DISTINCT' => 'CON_ID',
// 'FIELDS' => 'CON_VALUE',
// 'FROM' => 'CONTENT',
// 'WHERE' => ['CON_CATEGORY' => 'GRP_TITLE'],
// 'ORDER' => 'CON_VALUE'
// ]);
//$query = "SELECT DISTINCT CON_ID, CON_VALUE FROM CONTENT WHERE CON_CATEGORY='GRP_TITLE' ORDER BY CON_VALUE;";
if ($PM_DB->connected) { if ($PM_DB->connected) {
foreach ($PM_DB->request( $query ) as $row) { $res = $PM_DB->request([
'SELECT DISTINCT' => 'CON_ID',
'FIELDS' => 'CON_VALUE',
'FROM' => 'CONTENT',
'WHERE' => ['CON_CATEGORY' => 'GRP_TITLE'],
'ORDER' => 'CON_VALUE'
]);
foreach ($res as $row) {
$pmGroups[ $row['CON_ID'] ] = $row['CON_VALUE']; $pmGroups[ $row['CON_ID'] ] = $row['CON_VALUE'];
} }
//foreach ($PM_DB->request( $query ) as $row) {
// $pmGroups[ $row['CON_ID'] ] = $row['CON_VALUE'];
//}
Dropdown::showFromArray( 'pm_group_guid', $pmGroups, ['value' => $config->fields['pm_group_guid']] ); Dropdown::showFromArray( 'pm_group_guid', $pmGroups, ['value' => $config->fields['pm_group_guid']] );
} else { } else {
echo "<font color='red'>".__('Not connected'); echo "<font color='red'>".__('Not connected');

View File

@@ -71,7 +71,7 @@ class PluginProcessmakerProcess extends CommonDBTM {
// we need to get the tasks + content from PM db // we need to get the tasks + content from PM db
//$config = PluginProcessmakerConfig::getInstance() ; //$config = PluginProcessmakerConfig::getInstance() ;
//$database = $config->fields['pm_workspace'] ; //$database = $config->fields['pm_workspace'] ;
$translates = false; //$translates = false;
$mapLangs = []; $mapLangs = [];
$dbu = new DbUtils; $dbu = new DbUtils;
// if (class_exists('DropdownTranslation')) { // if (class_exists('DropdownTranslation')) {
@@ -79,7 +79,7 @@ class PluginProcessmakerProcess extends CommonDBTM {
$_SESSION['glpi_dropdowntranslations']['TaskCategory']['name'] = 'name'; $_SESSION['glpi_dropdowntranslations']['TaskCategory']['name'] = 'name';
$_SESSION['glpi_dropdowntranslations']['TaskCategory']['completename'] = 'completename'; $_SESSION['glpi_dropdowntranslations']['TaskCategory']['completename'] = 'completename';
$_SESSION['glpi_dropdowntranslations']['TaskCategory']['comment'] = 'comment'; $_SESSION['glpi_dropdowntranslations']['TaskCategory']['comment'] = 'comment';
$translates = true; //$translates = true;
// create a reversed map for languages // create a reversed map for languages
foreach ($CFG_GLPI['languages'] as $key => $valArray) { foreach ($CFG_GLPI['languages'] as $key => $valArray) {
$lg = locale_get_primary_language( $key ); $lg = locale_get_primary_language( $key );
@@ -88,9 +88,31 @@ class PluginProcessmakerProcess extends CommonDBTM {
} }
//} //}
$lang = locale_get_primary_language( $CFG_GLPI['language'] ); $lang = locale_get_primary_language( $CFG_GLPI['language'] );
$query = "SELECT TASK.TAS_UID, TASK.TAS_START, TASK.TAS_TYPE, CONTENT.CON_LANG, CONTENT.CON_CATEGORY, CONTENT.CON_VALUE FROM TASK $query = [
INNER JOIN CONTENT ON CONTENT.CON_ID=TASK.TAS_UID 'SELECT' => ['TASK.TAS_UID', 'TASK.TAS_START', 'TASK.TAS_TYPE', 'CONTENT.CON_LANG', 'CONTENT.CON_CATEGORY', 'CONTENT.CON_VALUE'],
WHERE (TASK.TAS_TYPE = 'NORMAL' OR TASK.TAS_TYPE = 'SUBPROCESS') AND TASK.PRO_UID = '".$this->fields['process_guid']."' AND CONTENT.CON_CATEGORY IN ('TAS_TITLE', 'TAS_DESCRIPTION') ".($translates ? "" : " AND CONTENT.CON_LANG='$lang'")." ;"; 'FROM' => 'TASK',
'INNER JOIN' => [
'CONTENT' => [
'FKEY' => [
'CONTENT' => 'CON_ID',
'TASK' => 'TAS_UID'
]
]
],
'WHERE' => [
'AND' => [
'TASK.TAS_TYPE' => ['NORMAL', 'SUBPROCESS'],
'TASK.PRO_UID' => $this->fields['process_guid'],
'CONTENT.CON_CATEGORY' => ['TAS_TITLE', 'TAS_DESCRIPTION']
]
]
];
//if (!$translates) {
// $query['WHERE']['AND']['CONTENT.CON_LANG'] = $lang;
//}
//$query = "SELECT TASK.TAS_UID, TASK.TAS_START, TASK.TAS_TYPE, CONTENT.CON_LANG, CONTENT.CON_CATEGORY, CONTENT.CON_VALUE FROM TASK
// INNER JOIN CONTENT ON CONTENT.CON_ID=TASK.TAS_UID
// WHERE (TASK.TAS_TYPE = 'NORMAL' OR TASK.TAS_TYPE = 'SUBPROCESS') AND TASK.PRO_UID = '".$this->fields['process_guid']."' AND CONTENT.CON_CATEGORY IN ('TAS_TITLE', 'TAS_DESCRIPTION') ".($translates ? "" : " AND CONTENT.CON_LANG='$lang'")." ;";
$taskArray = []; $taskArray = [];
$defaultLangTaskArray = []; $defaultLangTaskArray = [];
foreach ($PM_DB->request( $query ) as $task) { foreach ($PM_DB->request( $query ) as $task) {
@@ -168,7 +190,7 @@ class PluginProcessmakerProcess extends CommonDBTM {
] ); ] );
} }
// here we should take into account translations if any // here we should take into account translations if any
if ($translates && isset($taskArray[ $taskGUID ])) { if ( isset($taskArray[ $taskGUID ])) {
foreach ($taskArray[ $taskGUID ] as $langTask => $taskL) { foreach ($taskArray[ $taskGUID ] as $langTask => $taskL) {
// look for 'name' field // look for 'name' field
if ($loc_id = DropdownTranslation::getTranslationID( $taskCat->getID(), 'TaskCategory', 'name', $langTask )) { if ($loc_id = DropdownTranslation::getTranslationID( $taskCat->getID(), 'TaskCategory', 'name', $langTask )) {
@@ -289,8 +311,13 @@ class PluginProcessmakerProcess extends CommonDBTM {
$proc->getFromDB($key); $proc->getFromDB($key);
// check if at least one case is existing for this process // check if at least one case is existing for this process
$query = "SELECT * FROM `".PluginProcessmakerCase::getTable()."` WHERE `plugin_processmaker_processes_id` = ".$key; $res = $DB->request(
$res = $DB->query($query); PluginProcessmakerCase::getTable(), [
'plugin_processmaker_processes_id' => $key
]
);
//$query = "SELECT * FROM `".PluginProcessmakerCase::getTable()."` WHERE `plugin_processmaker_processes_id` = ".$key;
//$res = $DB->query($query);
if ($DB->numrows($res) === 0) { if ($DB->numrows($res) === 0) {
// and if no will delete the process // and if no will delete the process
$proc->delete(['id' => $key]); $proc->delete(['id' => $key]);
@@ -386,15 +413,21 @@ class PluginProcessmakerProcess extends CommonDBTM {
public function getFromGUID($process_guid) { public function getFromGUID($process_guid) {
global $DB; global $DB;
$query = "SELECT * $res = $DB->request(
FROM `".$this->getTable()."` $this->getTable(), [
WHERE `process_guid` = '$process_guid'"; 'process_guid' => $process_guid
]
);
//$query = "SELECT *
// FROM `".$this->getTable()."`
// WHERE `process_guid` = '$process_guid'";
if ($result = $DB->query($query)) { //if ($result = $DB->query($query)) {
if ($DB->numrows($result) != 1) { if ($res) {
if ($res->numrows() != 1) {//if ($DB->numrows($result) != 1) {
return false; return false;
} }
$this->fields = $DB->fetch_assoc($result); $this->fields = $res->next(); //$DB->fetch_assoc($result);
if (is_array($this->fields) && count($this->fields)) { if (is_array($this->fields) && count($this->fields)) {
return true; return true;
} }
@@ -784,31 +817,38 @@ class PluginProcessmakerProcess extends CommonDBTM {
* *
* @return mysql result set. * @return mysql result set.
**/ **/
static function getSqlSearchResult ($count = true, $search = '') { static function getSqlSearchResult ($count = true, $search = []) {
global $DB, $CFG_GLPI; global $DB, $CFG_GLPI;
$query = [];
$where = ''; $where = '';
$orderby = ''; $orderby = '';
if (isset($_REQUEST['condition']) && isset($_SESSION['glpicondition'][$_REQUEST['condition']])) { if (isset($_REQUEST['condition']) && isset($_SESSION['glpicondition'][$_REQUEST['condition']])) {
$where = ' WHERE '.$_SESSION['glpicondition'][$_REQUEST['condition']]; //glpi_plugin_processmaker_processes.is_active=1 '; //$where = ' WHERE '.$_SESSION['glpicondition'][$_REQUEST['condition']]; //glpi_plugin_processmaker_processes.is_active=1 ';
$query['WHERE']['AND'] = $_SESSION['glpicondition'][$_REQUEST['condition']];
} }
if ($count) { if ($count) {
$fields = " COUNT(DISTINCT glpi_plugin_processmaker_processes.id) AS cpt "; //$fields = " COUNT(DISTINCT glpi_plugin_processmaker_processes.id) AS cpt ";
$query['SELECT'] = ['COUNT' => 'glpi_plugin_processmaker_processes.id AS cpt'];
} else { } else {
$fields = " DISTINCT glpi_plugin_processmaker_processes.* "; //$fields = " DISTINCT glpi_plugin_processmaker_processes.* ";
$orderby = " ORDER BY glpi_plugin_processmaker_processes.name ASC"; $query['SELECT'] = ['glpi_plugin_processmaker_processes.*'];
$query['ORDER'] ='glpi_plugin_processmaker_processes.name ASC';
//$orderby = " ORDER BY glpi_plugin_processmaker_processes.name ASC";
} }
if (strlen($search)>0 && $search!=$CFG_GLPI["ajax_wildcard"]) { if (!empty($search) && $search!=$CFG_GLPI["ajax_wildcard"]) {
$where .= " AND (glpi_plugin_processmaker_processes.name $search $query['WHERE']['AND']['OR']['glpi_plugin_processmaker_processes.name'] = $search;
OR glpi_plugin_processmaker_processes.comment $search) "; $query['WHERE']['AND']['OR']['glpi_plugin_processmaker_processes.comment'] = $search;
//$where .= " AND (glpi_plugin_processmaker_processes.name $search
// OR glpi_plugin_processmaker_processes.comment $search) ";
} }
$query['FROM'] = 'glpi_plugin_processmaker_processes';
$query = "SELECT $fields FROM glpi_plugin_processmaker_processes ".$where." ".$orderby.";"; //$query = "SELECT $fields FROM glpi_plugin_processmaker_processes ".$where." ".$orderby.";";
//return $DB->query($query);
return $DB->query($query); $r= $DB->request($query);
return $DB->request($query);
} }
/** /**
@@ -826,11 +866,13 @@ class PluginProcessmakerProcess extends CommonDBTM {
"comment" => ""]; "comment" => ""];
} }
$query="SELECT * FROM glpi_plugin_processmaker_processes WHERE id=$pid"; $res = $DB->request('glpi_plugin_processmaker_processes', ['id' => $pid]);
$result = $DB->query($query); //$query="SELECT * FROM glpi_plugin_processmaker_processes WHERE id=$pid";
if ($result && $DB->numrows($result)==1) { //$result = $DB->query($query);
$data = $DB->fetch_assoc($result); //if ($result && $DB->numrows($result)==1) {
$processname = $data["name"]; // $data = $DB->fetch_assoc($result);
if ($res && $res->numrows() == 1) {
$processname = $res['name'];//$data["name"];
if ($link==2) { if ($link==2) {
$process["name"] = $processname; $process["name"] = $processname;
$process["link"] = $CFG_GLPI["root_doc"]."/plugins/processmaker/front/process.form.php?id=".$pid; $process["link"] = $CFG_GLPI["root_doc"]."/plugins/processmaker/front/process.form.php?id=".$pid;
@@ -856,13 +898,24 @@ class PluginProcessmakerProcess extends CommonDBTM {
static function getEntitiesForProfileByProcess($processes_id, $profiles_id, $child = false) { static function getEntitiesForProfileByProcess($processes_id, $profiles_id, $child = false) {
global $DB; global $DB;
$dbu = new DbUtils; $dbu = new DbUtils;
$res = $DB->request([
'SELECT' => ['entities_id', 'is_recursive'],
'FROM' => 'glpi_plugin_processmaker_processes_profiles',
'WHERE' => [
'AND' => [
'plugin_processmaker_processes_id' => $processes_id,
'profiles_id' => $profiles_id
]
]
]);
$query = "SELECT `entities_id`, `is_recursive` $query = "SELECT `entities_id`, `is_recursive`
FROM `glpi_plugin_processmaker_processes_profiles` FROM `glpi_plugin_processmaker_processes_profiles`
WHERE `plugin_processmaker_processes_id` = '$processes_id' WHERE `plugin_processmaker_processes_id` = '$processes_id'
AND `profiles_id` = '$profiles_id'"; AND `profiles_id` = '$profiles_id'";
$entities = []; $entities = [];
foreach ($DB->request($query) as $data) { //foreach ($DB->request($query) as $data) {
foreach ($res as $data) {
if ($child && $data['is_recursive']) { if ($child && $data['is_recursive']) {
foreach ($dbu->getSonsOf('glpi_entities', $data['entities_id']) as $id) { foreach ($dbu->getSonsOf('glpi_entities', $data['entities_id']) as $id) {
$entities[$id] = $id; $entities[$id] = $id;

View File

@@ -59,23 +59,50 @@ class PluginProcessmakerProcess_Profile extends CommonDBTM
Html::closeForm(); Html::closeForm();
echo "</div>"; echo "</div>";
} }
$res = $DB->request([
$query = "SELECT DISTINCT gpp.`id` AS linkID, 'SELECT DISTINCT' => 'gpp.id AS linkID',
`glpi_profiles`.`id`, 'FIELDS' => [
`glpi_profiles`.`name`, 'gpp.id AS linkID',
`gpp`.`is_recursive`, 'glpi_profiles.id',
`glpi_entities`.`completename`, 'glpi_profiles.name',
`gpp`.`entities_id` 'gpp.is_recursive',
FROM `". self::getTable() ."` as gpp 'glpi_entities.completename',
LEFT JOIN `glpi_profiles` 'gpp.entities_id'
ON (`gpp`.`profiles_id` = `glpi_profiles`.`id`) ],
LEFT JOIN `glpi_entities` 'FROM' => self::getTable() .' AS gpp',
ON (`gpp`.`entities_id` = `glpi_entities`.`id`) 'LEFT JOIN' => [
WHERE `gpp`.`plugin_processmaker_processes_id` = '$ID' 'glpi_profiles' => [
ORDER BY `glpi_profiles`.`name`, `glpi_entities`.`completename`"; 'FKEY' => [
$result = $DB->query($query); 'glpi_profiles' => 'id',
$num = $DB->numrows($result); 'gpp' => 'profiles_id'
]
],
'glpi_entities' => [
'FKEY' => [
'glpi_entities' => 'id',
'gpp' => 'entities_id'
]
]
],
'WHERE' => [ 'gpp.plugin_processmaker_processes_id' => $ID ],
'ORDER' => [ 'glpi_profiles.name', 'glpi_entities.completename' ]
]);
//$query = "SELECT DISTINCT gpp.`id` AS linkID,
// `glpi_profiles`.`id`,
// `glpi_profiles`.`name`,
// `gpp`.`is_recursive`,
// `glpi_entities`.`completename`,
// `gpp`.`entities_id`
// FROM `". self::getTable() ."` as gpp
// LEFT JOIN `glpi_profiles`
// ON (`gpp`.`profiles_id` = `glpi_profiles`.`id`)
// LEFT JOIN `glpi_entities`
// ON (`gpp`.`entities_id` = `glpi_entities`.`id`)
// WHERE `gpp`.`plugin_processmaker_processes_id` = '$ID'
// ORDER BY `glpi_profiles`.`name`, `glpi_entities`.`completename`";
//$result = $DB->query($query);
//$num = $DB->numrows($result);
$num = $res->numrows();
echo "<div class='spaced'>"; echo "<div class='spaced'>";
Html::openMassiveActionsForm('mass'.__CLASS__.$rand); Html::openMassiveActionsForm('mass'.__CLASS__.$rand);
@@ -103,7 +130,8 @@ class PluginProcessmakerProcess_Profile extends CommonDBTM
$header_end .= "</th></tr>"; $header_end .= "</th></tr>";
echo $header_begin.$header_top.$header_end; echo $header_begin.$header_top.$header_end;
while ($data = $DB->fetch_assoc($result)) { //while ($data = $DB->fetch_assoc($result)) {
foreach ($res as $data) {
echo "<tr class='tab_bg_1'>"; echo "<tr class='tab_bg_1'>";
if ($canedit) { if ($canedit) {
echo "<td width='10'>"; echo "<td width='10'>";
@@ -171,12 +199,12 @@ class PluginProcessmakerProcess_Profile extends CommonDBTM
function prepareInputForAdd($input) { function prepareInputForAdd($input) {
$tmp = new self; $tmp = new self;
$restrict=[ $restrict=[
'WHERE' => [ 'WHERE' => [
'plugin_processmaker_processes_id' => $input['plugin_processmaker_processes_id'], 'plugin_processmaker_processes_id' => $input['plugin_processmaker_processes_id'],
'entities_id' => $input['entities_id'], 'entities_id' => $input['entities_id'],
'profiles_id' => $input['profiles_id'] 'profiles_id' => $input['profiles_id']
], ],
]; ];
if ($tmp->getFromDBByRequest($restrict)) { if ($tmp->getFromDBByRequest($restrict)) {
//// then update existing //// then update existing
//$tmp->update(['id' => $tmp->getID(), //$tmp->update(['id' => $tmp->getID(),

View File

@@ -135,28 +135,28 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
/** /**
* Summary of addTicketFollowup * Summary of addItemFollowup
* @param mixed $itemId * @param mixed $itemId
* @param mixed $txtForFollowup * @param mixed $txtForFollowup
* @param integer $users_id optional, if null will uses logged-in user * @param integer $users_id optional, if null will uses logged-in user
*/ */
public function addTicketFollowup($itemId, $txtForFollowup, $users_id = null) { public function addItemFollowup($itemtype, $itemId, $txtForFollowup, $users_id = null) {
global $DB; global $DB;
$fu = new TicketFollowup(); $fu = new ITILFollowup();//new TicketFollowup();
$fu->getEmpty(); // to get default values $fu->getEmpty(); // to get default values
$input = $fu->fields; $input = $fu->fields;
if (isset( $txtForFollowup['GLPI_TICKET_FOLLOWUP_CONTENT'] )) { if (isset( $txtForFollowup['GLPI_ITEM_FOLLOWUP_CONTENT'] )) {
$input['content'] = $DB->escape($txtForFollowup['GLPI_TICKET_FOLLOWUP_CONTENT']); $input['content'] = $DB->escape($txtForFollowup['GLPI_ITEM_FOLLOWUP_CONTENT']);
} }
if (isset( $txtForFollowup['GLPI_TICKET_FOLLOWUP_IS_PRIVATE'] )) { if (isset( $txtForFollowup['GLPI_ITEM_FOLLOWUP_IS_PRIVATE'] )) {
$input['is_private'] = $txtForFollowup['GLPI_TICKET_FOLLOWUP_IS_PRIVATE']; $input['is_private'] = $txtForFollowup['GLPI_ITEM_FOLLOWUP_IS_PRIVATE'];
} }
if (isset( $txtForFollowup['GLPI_TICKET_FOLLOWUP_REQUESTTYPES_ID'] )) { if (isset( $txtForFollowup['GLPI_ITEM_FOLLOWUP_REQUESTTYPES_ID'] )) {
$input['requesttypes_id'] = $txtForFollowup['GLPI_TICKET_FOLLOWUP_REQUESTTYPES_ID']; $input['requesttypes_id'] = $txtForFollowup['GLPI_ITEM_FOLLOWUP_REQUESTTYPES_ID'];
} }
$input['tickets_id'] = $itemId; $input['items_id'] = $itemId;//$input['tickets_id'] = $itemId;
$input['users_id'] = (isset($users_id) ? $users_id : Session::getLoginUserID( true )); // $this->taskWriter; $input['users_id'] = (isset($users_id) ? $users_id : Session::getLoginUserID( true )); // $this->taskWriter;
$input['itemtype'] = $itemtype;
$fu->add( $input ); $fu->add( $input );
} }
@@ -266,8 +266,10 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
$pass = md5(Toolbox::encrypt( $gusr->getID().$gusr->getName().time(), GLPIKEY) ); $pass = md5(Toolbox::encrypt( $gusr->getID().$gusr->getName().time(), GLPIKEY) );
//$pmusr->update( array('id' => $pmusr->getID(), 'password' => $pass) ); //$pmusr->update( array('id' => $pmusr->getID(), 'password' => $pass) );
// and must be updated also in PM db // and must be updated also in PM db
$PM_DB->query("UPDATE RBAC_USERS SET USR_PASSWORD='".$pass."' WHERE USR_UID='".$pmusr->fields['pm_users_id']."' "); $PM_DB->update('RBAC_USERS', ['USR_PASSWORD' => $pass], ['USR_UID' => $pmusr->fields['pm_users_id']]);
$PM_DB->query("UPDATE USERS SET USR_PASSWORD='".$pass."' WHERE USR_UID='".$pmusr->fields['pm_users_id']."' "); //$PM_DB->query("UPDATE RBAC_USERS SET USR_PASSWORD='".$pass."' WHERE USR_UID='".$pmusr->fields['pm_users_id']."' ");
$PM_DB->update('USERS', ['USR_PASSWORD' => $pass], ['USR_UID' => $pmusr->fields['pm_users_id']]);
//$PM_DB->query("UPDATE USERS SET USR_PASSWORD='".$pass."' WHERE USR_UID='".$pmusr->fields['pm_users_id']."' ");
//} //}
//$locSession = $this->pmSoapClient->login( array( 'userid' => $gusr->fields['name'], 'password' => 'md5:'.$pmusr->fields['password']) ); //$locSession = $this->pmSoapClient->login( array( 'userid' => $gusr->fields['name'], 'password' => 'md5:'.$pmusr->fields['password']) );
$locSession = $this->pmSoapClient->login( ['userid' => $gusr->fields['name'], 'password' => 'md5:'.$pass] ); $locSession = $this->pmSoapClient->login( ['userid' => $gusr->fields['name'], 'password' => 'md5:'.$pass] );
@@ -868,8 +870,9 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
*/ */
function updateGroup($group_id, $groupStatus) { function updateGroup($group_id, $groupStatus) {
global $PM_DB; global $PM_DB;
$query = "UPDATE GROUPWF SET GRP_STATUS='$groupStatus' WHERE GRP_UID='$group_id';"; $PM_DB->update('GROUPWF', ['GRP_STATUS' => $groupStatus], ['GRP_UID' => $group_id]);
$PM_DB->query( $query ); //$query = "UPDATE GROUPWF SET GRP_STATUS='$groupStatus' WHERE GRP_UID='$group_id';";
//$PM_DB->query( $query );
if ($PM_DB->affected_rows != 1) { if ($PM_DB->affected_rows != 1) {
return false; return false;
} else { } else {
@@ -1049,7 +1052,8 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
$formerusers_id = 0; $formerusers_id = 0;
// get the list of taskactions to be done // get the list of taskactions to be done
$locCase = new PluginProcessmakerCase; $locCase = new PluginProcessmakerCase;
foreach ($DB->request( $dbu->getTableForItemType('PluginProcessmakerCrontaskaction'), ' `state` = '.PluginProcessmakerCrontaskaction::DATA_READY ) as $taskaction) { //foreach ($DB->request( $dbu->getTableForItemType('PluginProcessmakerCrontaskaction'), ' `state` = '.PluginProcessmakerCrontaskaction::DATA_READY ) as $taskaction) {
foreach ($DB->request( $dbu->getTableForItemType('PluginProcessmakerCrontaskaction'), ['state' => PluginProcessmakerCrontaskaction::DATA_READY] ) as $taskaction) {
if ($locCase->getFromDB($taskaction['plugin_processmaker_cases_id'])) { if ($locCase->getFromDB($taskaction['plugin_processmaker_cases_id'])) {
// there is an existing case for this crontaskaction. // there is an existing case for this crontaskaction.
try { try {
@@ -1188,7 +1192,8 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
// get list of case assigned to GLPI items // get list of case assigned to GLPI items
$draftCases = [0]; $draftCases = [0];
$query = "SELECT id FROM glpi_plugin_processmaker_cases WHERE case_status = 'DRAFT';"; $query = "SELECT id FROM glpi_plugin_processmaker_cases WHERE case_status = 'DRAFT';";
foreach ($DB->request( $query ) as $row) { //foreach ($DB->request( $query ) as $row) {
foreach ($DB->request(['SELECT' => 'id', 'FROM' => 'glpi_plugin_processmaker_cases'], ['case_status' => 'DRAFT']) as $row) {
$draftCases[] = $row['id']; $draftCases[] = $row['id'];
} }
@@ -1205,7 +1210,14 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
AND DATEDIFF( NOW(), APP_UPDATE_DATE) > ".$task->fields['param']." AND DATEDIFF( NOW(), APP_UPDATE_DATE) > ".$task->fields['param']."
AND APP_NUMBER NOT IN (".implode(',', $draftCases)."); AND APP_NUMBER NOT IN (".implode(',', $draftCases).");
"; ";
foreach ($PM_DB->request( $query ) as $row) { $res = $PM_DB->request('APPLICATION', ['AND' => [
'APP_DATA' => ['LIKE', '%s:24:\"GLPI_SELFSERVICE_CREATED\";s:1:\"1\"%'],
'APP_STATUS' => 'DRAFT',
'RAW' => ['DATEDIFF(NOW(), APP_UPDATE_DATE)' => ['>', $task->fields['param']]],
'NOT' => ['APP_NUMBER' => $draftCases]
]]);
//foreach ($PM_DB->request( $query ) as $row) {
foreach ($res as $row) {
$ret = $PM_SOAP->deleteCase( $row['APP_UID'] ); $ret = $PM_SOAP->deleteCase( $row['APP_UID'] );
$task->addVolume(1); $task->addVolume(1);
if ($ret !== false) { if ($ret !== false) {
@@ -1254,8 +1266,13 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
} }
$pmGroupList = $PM_SOAP->groupList( ); $pmGroupList = $PM_SOAP->groupList( );
foreach ($pmGroupList as $pmGroup) { $pmGroup = null;
if ($pmGroup->guid == $PM_SOAP->pm_group_guid) { //if($pmgrp_key = array_search($PM_SOAP->pm_group_guid, array_column($pmGroupList, 'guid'))) {
// $pmgroup = $pmGroupList[$pmgrp_key];
//}
foreach ($pmGroupList as $pmGroupL) {
if ($pmGroupL->guid == $PM_SOAP->pm_group_guid) {
$pmGroup = $pmGroupL;
break; // to get the name :) break; // to get the name :)
} }
} }
@@ -1267,10 +1284,16 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
// get the complete user list from GLPI DB // get the complete user list from GLPI DB
$glpiUserList = []; $glpiUserList = [];
foreach ($DB->request("SELECT glpi_users.id, glpi_users.name, glpi_users.realname, glpi_users.firstname, glpi_users.is_active, glpi_users.is_deleted, glpi_plugin_processmaker_users.pm_users_id as pmUserId $res = $DB->request(['SELECT' => ['glpi_users.id', 'glpi_users.name', 'glpi_users.realname', 'glpi_users.firstname', 'glpi_users.is_active', 'glpi_users.is_deleted', 'glpi_plugin_processmaker_users.pm_users_id as pmUserId'],
FROM glpi_users 'FROM' => 'glpi_users',
LEFT JOIN glpi_plugin_processmaker_users on glpi_plugin_processmaker_users.id = glpi_users.id 'LEFT JOIN' => ['glpi_plugin_processmaker_users' => ['FKEY' => ['glpi_plugin_processmaker_users' => 'id', 'glpi_users' => 'id']]],
WHERE name not like '*%'") as $dbgroup) { 'WHERE' => ['name' => ['NOT LIKE', '*%']]
]);
//foreach ($DB->request("SELECT glpi_users.id, glpi_users.name, glpi_users.realname, glpi_users.firstname, glpi_users.is_active, glpi_users.is_deleted, glpi_plugin_processmaker_users.pm_users_id as pmUserId
// FROM glpi_users
// LEFT JOIN glpi_plugin_processmaker_users on glpi_plugin_processmaker_users.id = glpi_users.id
// WHERE name not like '*%'") as $dbgroup) {
foreach ($res as $dbgroup) {
$glpiUserList[ strtolower($dbgroup['name'])] = $dbgroup; $glpiUserList[ strtolower($dbgroup['name'])] = $dbgroup;
} }
@@ -1286,13 +1309,14 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
$task->log( "Added user: '".$user['name']."'" ); $task->log( "Added user: '".$user['name']."'" );
// then assign user to group // then assign user to group
$pmResult2 = $PM_SOAP->assignUserToGroup( $pmResult->userUID, $pmGroup->guid ); if($pmGroup) {
if ($pmResult2->status_code == 0) { $pmResult2 = $PM_SOAP->assignUserToGroup( $pmResult->userUID, $pmGroup->guid );
$task->log( "Added user: '".$user['name']."' to '".$pmGroup->name."' group" ); if ($pmResult2->status_code == 0) {
} else { $task->log( "Added user: '".$user['name']."' to '".$pmGroup->name."' group" );
$task->log( "Error PM: '".$pmResult2->message."'" ); } else {
$task->log( "Error PM: '".$pmResult2->message."'" );
}
} }
// insert into DB the link between glpi users and pm user // insert into DB the link between glpi users and pm user
$pmuser = new PluginProcessmakerUser; $pmuser = new PluginProcessmakerUser;
if ($pmuser->getFromDB( $user['id'] )) { if ($pmuser->getFromDB( $user['id'] )) {
@@ -1379,7 +1403,12 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
// so now treat GLPI groups // so now treat GLPI groups
$glpiGroupList = []; $glpiGroupList = [];
foreach ($DB->request("SELECT id, name, is_task, is_usergroup FROM glpi_groups WHERE is_task=1 AND is_usergroup=1") as $dbgroup) { $res = $DB->request(['SELECT' => ['id', 'name', 'is_task', 'is_usergroup'],
'FROM' => 'glpi_groups',
'WHERE' => ['AND' => ['is_task' => 1, 'is_usergroup' => 1]]
]);
//foreach ($DB->request("SELECT id, name, is_task, is_usergroup FROM glpi_groups WHERE is_task=1 AND is_usergroup=1") as $dbgroup) {
foreach ($res as $dbgroup) {
$glpiGroupList[$dbgroup['name']] = $dbgroup; $glpiGroupList[$dbgroup['name']] = $dbgroup;
} }
@@ -1408,25 +1437,44 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
// for each group will delete users and re-create them // for each group will delete users and re-create them
// not really optimized, but this way we are sure that groups are synchronized // not really optimized, but this way we are sure that groups are synchronized
// must be redesigned // must be redesigned
$query = "DELETE FROM GROUP_USER WHERE GROUP_USER.GRP_UID='".$pmGroupList[$group['name']]['CON_ID']."';"; $PM_DB->delete('GROUP_USER', ['GROUP_USER.GRP_UID' => $pmGroupList[$group['name']]['CON_ID']]);
$PM_DB->query( $query ); //$query = "DELETE FROM GROUP_USER WHERE GROUP_USER.GRP_UID='".$pmGroupList[$group['name']]['CON_ID']."';";
//$PM_DB->query( $query );
// and insert all users from real GLPI group // and insert all users from real GLPI group
foreach ($DB->request("SELECT glpi_groups_users.users_id, glpi_plugin_processmaker_users.pm_users_id $res = $DB->request(['SELECT' => ['glpi_groups_users.users_id', 'glpi_plugin_processmaker_users.pm_users_id'],
FROM glpi_groups 'FROM' => 'glpi_groups',
JOIN glpi_groups_users ON glpi_groups_users.groups_id=glpi_groups.id 'INNER JOIN' => ['glpi_groups_users' => ['FKEY' => ['glpi_groups_users' => 'groups_id', 'glpi_groups' => 'id']],
JOIN glpi_plugin_processmaker_users ON glpi_plugin_processmaker_users.id=glpi_groups_users.users_id 'glpi_plugin_processmaker_users' => ['FKEY' => ['glpi_plugin_processmaker_users' => 'id', 'glpi_groups_users' => 'users_id']]],
WHERE glpi_groups.name='".$group['name']."'") as $user ) { 'WHERE' => ['glpi_groups.name' => $group['name']]]);
$query = "INSERT INTO GROUP_USER (`GRP_UID`, `USR_UID`) VALUES ( '".$pmGroupList[$group['name']]['CON_ID']."', '".$user['pm_users_id']."' )";
$PM_DB->query( $query ); //foreach ($DB->request("SELECT glpi_groups_users.users_id, glpi_plugin_processmaker_users.pm_users_id
// FROM glpi_groups
// JOIN glpi_groups_users ON glpi_groups_users.groups_id=glpi_groups.id
// JOIN glpi_plugin_processmaker_users ON glpi_plugin_processmaker_users.id=glpi_groups_users.users_id
// WHERE glpi_groups.name='".$group['name']."'") as $user ) {
foreach ($res as $user) {
//$query = "INSERT INTO GROUP_USER (`GRP_UID`, `USR_UID`) VALUES ( '".$pmGroupList[$group['name']]['CON_ID']."', '".$user['pm_users_id']."' )";
//$PM_DB->query( $query );
$PM_DB->insert('GROUP_USER', ['GRP_UID' => $pmGroupList[$group['name']]['CON_ID'],
'USR_UID' => $user['pm_users_id']
]
);
} }
$task->addVolume(1); $task->addVolume(1);
$task->log( "Updated users into PM group: '".$group['name']."'" ); $task->log( "Updated users into PM group: '".$group['name']."'" );
} }
// now should renew the duedate of the users // now should renew the duedate of the users
$PM_DB->query("UPDATE USERS SET USR_DUE_DATE='2035-12-31' WHERE USR_DUE_DATE<>'2035-12-31'; "); //$PM_DB->query("UPDATE USERS SET USR_DUE_DATE='2035-12-31' WHERE USR_DUE_DATE<>'2035-12-31'; ");
$PM_DB->query("UPDATE RBAC_USERS SET USR_DUE_DATE='2035-12-31' WHERE USR_DUE_DATE<>'2035-12-31'; "); //$PM_DB->query("UPDATE RBAC_USERS SET USR_DUE_DATE='2035-12-31' WHERE USR_DUE_DATE<>'2035-12-31'; ");
$PM_DB->update('USERS',
['USR_DUE_DATE' => '2035-12-31'],
['USR_DUE_DATE' => ['!=', '2035-12-31']]
);
$PM_DB->update('RBAC_USERS',
['USR_DUE_DATE' => '2035-12-31'],
['USR_DUE_DATE' => ['!=', '2035-12-31']]
);
if ($error) { if ($error) {
return -1; return -1;
} else { } else {
@@ -1684,10 +1732,22 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
if ($techId == 0) { // then we must look-up DB to get the 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=''; $groupname='';
if ($groupId == 0) { if ($groupId == 0) {
$res = $PM_DB->request([
'SELECT' => 'CONTENT.CON_VALUE',
'FROM' => 'TASK_USER',
'INNER JOIN' => ['CONTENT' => ['AND' => ['FKEY' => ['CONTENT' => 'CON_ID', 'TASK_USER' => 'USR_UID'], ['CONTENT' => 'CON_CATEGORY', 'GRP_TITLE'], ['CONTENT' => 'CON_LANG', 'en']]]],
'WHERE' => ['AND' => ['TASK_USER.TAS_UID' => $pmTaskId, 'TASK_USER.TU_RELATION' => 2]],
'LIMIT' => 1
]);
$query = "SELECT CONTENT.CON_VALUE FROM TASK_USER $query = "SELECT CONTENT.CON_VALUE FROM TASK_USER
JOIN CONTENT ON CONTENT.CON_ID=TASK_USER.USR_UID AND CONTENT.CON_CATEGORY='GRP_TITLE' AND CONTENT.CON_LANG = 'en' JOIN CONTENT ON CONTENT.CON_ID=TASK_USER.USR_UID AND CONTENT.CON_CATEGORY='GRP_TITLE' AND CONTENT.CON_LANG = 'en'
WHERE TASK_USER.TAS_UID='$pmTaskId' AND TASK_USER.TU_RELATION=2 LIMIT 1;"; WHERE TASK_USER.TAS_UID='$pmTaskId' AND TASK_USER.TU_RELATION=2 LIMIT 1;";
} else { } else {
$res = $PM_DB->request([
'SELECT' => 'CON_VALUE',
'FROM' => 'CONTENT',
'WHERE' => ['AND' => ['CONTENT.CON_ID' => $groupId, 'CONTENT.CON_CATEGORY' => 'GRP_TITLE', 'CONTENT.CON_LANG' => 'en']]
]);
$query = "SELECT CON_VALUE FROM CONTENT $query = "SELECT CON_VALUE FROM CONTENT
WHERE CONTENT.CON_ID='$groupId' AND CONTENT.CON_CATEGORY='GRP_TITLE' AND CONTENT.CON_LANG='en' ;"; WHERE CONTENT.CON_ID='$groupId' AND CONTENT.CON_CATEGORY='GRP_TITLE' AND CONTENT.CON_LANG='en' ;";
} }
@@ -1695,17 +1755,26 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
// or // or
// as there is only one group per guid // as there is only one group per guid
// then we should have at maximun 1 record // then we should have at maximun 1 record
foreach ($PM_DB->request($query) as $onlyrec) { foreach ($res as $onlyrec) {
//foreach ($PM_DB->request($query) as $onlyrec) {
$groupname = $onlyrec['CON_VALUE']; $groupname = $onlyrec['CON_VALUE'];
} }
$groups_id_tech = 0; $groups_id_tech = 0;
$query = "SELECT id AS glpi_group_id FROM glpi_groups WHERE name LIKE '$groupname';"; $res = $DB->request([
$res = $DB->query($query); 'SELECT' => 'id AS glpi_group_id',
if ($DB->numrows($res) > 0) { 'FROM' => 'glpi_groups',
$row = $DB->fetch_array( $res ); 'WHERE' => ['name' => ['LIKE', $groupname]]
]);
if ($row = $res->next()) {
$groups_id_tech = $row['glpi_group_id']; $groups_id_tech = $row['glpi_group_id'];
} }
//$query = "SELECT id AS glpi_group_id FROM glpi_groups WHERE name LIKE '$groupname';";
//$res = $DB->query($query);
//if ($DB->numrows($res) > 0) {
// $row = $DB->fetch_array( $res );
// $groups_id_tech = $row['glpi_group_id'];
//}
} else { } else {
// adds the user tech to ticket watcher if neccessary // adds the user tech to ticket watcher if neccessary
@@ -1762,9 +1831,18 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
// 'plugin_processmaker_cases_id' => $cases_id, // 'plugin_processmaker_cases_id' => $cases_id,
// 'del_index' => $delIndex // 'del_index' => $delIndex
// ], [], false); // ], [], false);
$query = "INSERT INTO glpi_plugin_processmaker_tasks (items_id, itemtype, plugin_processmaker_cases_id, plugin_processmaker_taskcategories_id, del_index, del_thread) $DB->insert('glpi_plugin_processmaker_tasks',
VALUES ({$glpi_task->getId()}, '{$glpi_task->getType()}', $cases_id, {$pmtaskcat->fields['id']}, $delIndex, $delThread);"; [
$DB->query( $query ); 'items_id' => $glpi_task->getId(),
'itemtype' => $glpi_task->getType(),
'plugin_processmaker_cases_id' => $cases_id,
'plugin_processmaker_taskcategories_id' => $pmtaskcat->fields['id'],
'del_index' => $delIndex,
'del_thread' =>$delThread
]);
//$query = "INSERT INTO glpi_plugin_processmaker_tasks (items_id, itemtype, plugin_processmaker_cases_id, plugin_processmaker_taskcategories_id, del_index, del_thread)
// VALUES ({$glpi_task->getId()}, '{$glpi_task->getType()}', $cases_id, {$pmtaskcat->fields['id']}, $delIndex, $delThread);";
//$DB->query( $query );
} }
// send notification if needed for new task as now we have the PluginProcessmakerTask in the DB // send notification if needed for new task as now we have the PluginProcessmakerTask in the DB
@@ -1989,10 +2067,12 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
global $DB; global $DB;
$query = "SELECT * FROM glpi_plugin_processmaker_tasks WHERE plugin_processmaker_cases_id=$cases_id and del_index=$delIndex; "; $query = "SELECT * FROM glpi_plugin_processmaker_tasks WHERE plugin_processmaker_cases_id=$cases_id and del_index=$delIndex; ";
$res = $DB->query($query); //$res = $DB->query($query);
if ($DB->numrows($res) > 0) { $res = $DB->request('glpi_plugin_processmaker_tasks', ['AND' => ['plugin_processmaker_cases_id' => $cases_id, 'del_index' => $delIndex]]);
//if ($DB->numrows($res) > 0) {
if ($row = $res->next()) {
$dbu = new DbUtils; $dbu = new DbUtils;
$row = $DB->fetch_array( $res ); //$row = $DB->fetch_array( $res );
$glpi_task = new $row['itemtype']; $glpi_task = new $row['itemtype'];
$glpi_task->getFromDB( $row['items_id'] ); $glpi_task->getFromDB( $row['items_id'] );
@@ -2040,8 +2120,8 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
self::restoreNotification($donotif); self::restoreNotification($donotif);
// Close the task // Close the task
$DB->query("UPDATE glpi_plugin_processmaker_tasks SET del_thread_status = '".PluginProcessmakerTask::CLOSED."' WHERE id = {$row['id']}"); //$DB->query("UPDATE glpi_plugin_processmaker_tasks SET del_thread_status = '".PluginProcessmakerTask::CLOSED."' WHERE id = {$row['id']}");
$DB->update('glpi_plugin_processmaker_tasks', ['del_thread_status' => PluginProcessmakerTask::CLOSED], ['id' => $row['id']]);
// restore current glpi time // restore current glpi time
$_SESSION["glpi_currenttime"] = $saved_date_time; $_SESSION["glpi_currenttime"] = $saved_date_time;
@@ -2059,12 +2139,13 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
*/ */
public function claimTask($cases_id, $delIndex, $users_id_tech = null) { public function claimTask($cases_id, $delIndex, $users_id_tech = null) {
global $DB; global $DB;
$res = $DB->request('glpi_plugin_processmaker_tasks', ['AND' => ['plugin_processmaker_cases_id' => $cases_id, 'del_index' => $delIndex]]);
$query = "SELECT * FROM glpi_plugin_processmaker_tasks WHERE plugin_processmaker_cases_id='$cases_id' and del_index=$delIndex; "; $query = "SELECT * FROM glpi_plugin_processmaker_tasks WHERE plugin_processmaker_cases_id='$cases_id' and del_index=$delIndex; ";
$res = $DB->query($query); //$res = $DB->query($query);
if ($DB->numrows($res) > 0) { //if ($DB->numrows($res) > 0) {
if ($row = $res->next()) {
$dbu = new DbUtils; $dbu = new DbUtils;
$row = $DB->fetch_array( $res ); //$row = $DB->fetch_array( $res );
$glpi_task = new $row['itemtype']; $glpi_task = new $row['itemtype'];
$glpi_task->getFromDB( $row['items_id'] ); $glpi_task->getFromDB( $row['items_id'] );
@@ -2089,14 +2170,14 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
*/ */
public static function getCaseIdFromItem ($item_type, $item_id) { public static function getCaseIdFromItem ($item_type, $item_id) {
global $DB; global $DB;
$res = $DB->request('glpi_plugin_processmaker_cases', ['AND' => ['itemtype' => $item_type, 'items_id' => $item_id]]);
$query = "SELECT * FROM glpi_plugin_processmaker_cases WHERE `itemtype` = '$item_type' AND `items_id` = $item_id ;"; $query = "SELECT * FROM glpi_plugin_processmaker_cases WHERE `itemtype` = '$item_type' AND `items_id` = $item_id ;";
$res = $DB->query($query); // $res = $DB->query($query);
if ($DB->numrows($res) > 0) { //if ($DB->numrows($res) > 0) {
// case is existing for this item // // case is existing for this item
// then get info from db // // then get info from db
$row = $DB->fetch_array($res); // $row = $DB->fetch_array($res);
if ($row = $res->next()) {
return $row['id']; return $row['id'];
} }
@@ -2112,14 +2193,14 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
*/ */
public static function getCaseGuidFromItem ($item_type, $item_id) { public static function getCaseGuidFromItem ($item_type, $item_id) {
global $DB; global $DB;
$res = $DB->request('glpi_plugin_processmaker_cases', ['AND' => ['itemtype' => $item_type, 'items_id' => $item_id]]);
$query = "SELECT * FROM glpi_plugin_processmaker_cases WHERE `itemtype` = '$item_type' AND `items_id` = $item_id ;"; $query = "SELECT * FROM glpi_plugin_processmaker_cases WHERE `itemtype` = '$item_type' AND `items_id` = $item_id ;";
$res = $DB->query($query); //$res = $DB->query($query);
if ($DB->numrows($res) > 0) { //if ($DB->numrows($res) > 0) {
// case is existing for this item // // case is existing for this item
// then get info from db // // then get info from db
$row = $DB->fetch_array($res); // $row = $DB->fetch_array($res);
if ($row = $res->next()) {
return $row['case_guid']; return $row['case_guid'];
} }
@@ -2363,12 +2444,19 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
$item_users = $item->userlinkclass; $item_users = $item->userlinkclass;
$item_userstable = $dbu->getTableForItemType( $item_users ); $item_userstable = $dbu->getTableForItemType( $item_users );
$itemlink = getForeignKeyFieldForItemType( $itemtype ); $itemlink = getForeignKeyFieldForItemType( $itemtype );
$res = $DB->request([
'SELECT' => ['glpi_plugin_processmaker_users.pm_users_id as pm_users_id', 'glpi_plugin_processmaker_users.id as id'],
'FROM' => $item_userstable,
'LEFT JOIN' => ['glpi_plugin_processmaker_users' => ['FKEY' => ['glpi_plugin_processmaker_users' => 'id', $item_userstable => 'users_id']]],
'WHERE' => ['AND' => ["$item_userstable.$itemlink" => $itemId, "$item_userstable.type" => $userType]],
'ORDER' => ['ORDER' => $item_userstable.'.id']
]);
$query = "select glpi_plugin_processmaker_users.pm_users_id as pm_users_id, glpi_plugin_processmaker_users.id as id from $item_userstable $query = "select glpi_plugin_processmaker_users.pm_users_id as pm_users_id, glpi_plugin_processmaker_users.id as id from $item_userstable
left join glpi_plugin_processmaker_users on glpi_plugin_processmaker_users.id = $item_userstable.users_id left join glpi_plugin_processmaker_users on glpi_plugin_processmaker_users.id = $item_userstable.users_id
where $item_userstable.$itemlink = $itemId and $item_userstable.type = $userType where $item_userstable.$itemlink = $itemId and $item_userstable.type = $userType
order by $item_userstable.id"; order by $item_userstable.id";
foreach ($DB->request( $query ) as $dbuser) { //foreach ($DB->request( $query ) as $dbuser) {
foreach ($res as $dbuser) {
$users[] = [ 'glpi_id' => $dbuser['id'], 'pm_id' => $dbuser['pm_users_id'] ]; $users[] = [ 'glpi_id' => $dbuser['id'], 'pm_id' => $dbuser['pm_users_id'] ];
} }
@@ -2612,18 +2700,53 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
global $DB; global $DB;
$dbu = new DbUtils; $dbu = new DbUtils;
$processList = [ ]; $processList = [ ];
$entityAncestors = implode( ", ", $dbu->getAncestorsOf( $dbu->getTableForItemType( 'Entity' ), $entity ) ); //$entityAncestors = implode( ", ", $dbu->getAncestorsOf( $dbu->getTableForItemType( 'Entity' ), $entity ) );
if (strlen( $entityAncestors ) > 0) { $entityAncestors = $dbu->getAncestorsOf( $dbu->getTableForItemType( 'Entity' ), $entity );
$entityAncestors = " OR (entities_id IN ($entityAncestors) AND is_recursive = 1) "; //if (strlen( $entityAncestors ) > 0) {
if ($category > 0) {
$query = [
'SELECT DISTINCT' => ['glpi_plugin_processmaker_processes.id' ],
'FIELDS' => ['glpi_plugin_processmaker_processes.name'],
//'DISTINCT' => true,
'FROM' => 'glpi_plugin_processmaker_processes',
'INNER JOIN' => [
'glpi_plugin_processmaker_processes_profiles' => [
'FKEY' => [
'glpi_plugin_processmaker_processes_profiles' => 'plugin_processmaker_processes_id',
'glpi_plugin_processmaker_processes' => 'id',
['AND' => [
'glpi_plugin_processmaker_processes.itilcategories_id' => ['!=', 0]
]
]
]
]
],
'WHERE' => [
'AND' => [
'itilcategories_id' => $category,
'type' => $type,
'profiles_id' => $profile,
'entities_id' => $entity
]
]
];
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)";
$query ="SELECT DISTINCT glpi_plugin_processmaker_processes.id, glpi_plugin_processmaker_processes.name FROM glpi_plugin_processmaker_processes //foreach ($DB->request( $query ) as $row) {
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) {
$processList[] = $row;
}
return $processList; return $processList;
@@ -2757,8 +2880,11 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
"GLPI_NEXT_GROUP_TO_BE_ASSIGNED", "GLPI_NEXT_GROUP_TO_BE_ASSIGNED",
"GLPI_ITEM_TITLE", "GLPI_ITEM_TITLE",
"GLPI_TICKET_FOLLOWUP_CONTENT", "GLPI_TICKET_FOLLOWUP_CONTENT",
"GLPI_ITEM_FOLLOWUP_CONTENT",
"GLPI_TICKET_FOLLOWUP_IS_PRIVATE", "GLPI_TICKET_FOLLOWUP_IS_PRIVATE",
"GLPI_ITEM_FOLLOWUP_IS_PRIVATE",
"GLPI_TICKET_FOLLOWUP_REQUESTTYPES_ID", "GLPI_TICKET_FOLLOWUP_REQUESTTYPES_ID",
"GLPI_ITEM_FOLLOWUP_REQUESTTYPES_ID",
"GLPI_ITEM_TASK_ENDDATE", "GLPI_ITEM_TASK_ENDDATE",
"GLPI_ITEM_TASK_STARTDATE", "GLPI_ITEM_TASK_STARTDATE",
"GLPI_ITEM_TASK_REMINDER", "GLPI_ITEM_TASK_REMINDER",
@@ -2842,7 +2968,7 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
} }
$createFollowup = false; // by default $createFollowup = false; // by default
if (array_key_exists( 'GLPI_TICKET_FOLLOWUP_CONTENT', $casevariablevalues ) && $casevariablevalues[ 'GLPI_TICKET_FOLLOWUP_CONTENT' ] != '') { if (array_key_exists( 'GLPI_ITEM_FOLLOWUP_CONTENT', $casevariablevalues ) && $casevariablevalues[ 'GLPI_ITEM_FOLLOWUP_CONTENT' ] != '') {
//&& array_key_exists( 'GLPI_TICKET_FOLLOWUP_IS_PRIVATE', $infoForTasks ) //&& array_key_exists( 'GLPI_TICKET_FOLLOWUP_IS_PRIVATE', $infoForTasks )
//&& array_key_exists( 'GLPI_TICKET_FOLLOWUP_REQUESTTYPES_ID', $infoForTasks ) //&& array_key_exists( 'GLPI_TICKET_FOLLOWUP_REQUESTTYPES_ID', $infoForTasks )
$createFollowup = true; $createFollowup = true;
@@ -2883,7 +3009,7 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
// create a followup if requested // create a followup if requested
if ($createFollowup && $itemtype == 'Ticket') { if ($createFollowup && $itemtype == 'Ticket') {
$this->addTicketFollowup( $items_id, $casevariablevalues ); $this->addItemFollowup( $itemtype, $items_id, $casevariablevalues );
} }
if ($txtItemTitle != '') { if ($txtItemTitle != '') {
@@ -2920,10 +3046,23 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
$locTaskCat = new PluginProcessmakerTaskCategory; $locTaskCat = new PluginProcessmakerTaskCategory;
if ($locTaskCat->getFromGUID($route->taskId) && $locTaskCat->fields['is_subprocess']) { if ($locTaskCat->getFromGUID($route->taskId) && $locTaskCat->fields['is_subprocess']) {
// look for APP_UID // look for APP_UID
$res = $PM_DB->request([
'SELECT' => [
'APPUID'
],
'FROM' => 'SUB_APPLICATION',
'WHERE' => [
'AND' => [
'APP_PARENT' => $myCase->fields['case_guid'],
'DEL_INDEX_PARENT' => $route->delIndex,
'SA_STATUS' => 'ACTIVE'
]
]
]);
$res = $PM_DB->query("SELECT APP_UID FROM SUB_APPLICATION WHERE APP_PARENT='{$myCase->fields['case_guid']}' AND DEL_INDEX_PARENT={$route->delIndex} AND SA_STATUS='ACTIVE'"); // AND DEL_THREAD_PARENT={$route->delThread} seems like it is not set to correct threadIndex $res = $PM_DB->query("SELECT APP_UID FROM SUB_APPLICATION WHERE APP_PARENT='{$myCase->fields['case_guid']}' AND DEL_INDEX_PARENT={$route->delIndex} AND SA_STATUS='ACTIVE'"); // AND DEL_THREAD_PARENT={$route->delThread} seems like it is not set to correct threadIndex
if ($res && $PM_DB->numrows($res) == 1) { if ($row = $res->next() && $PM_DB->numrows($res) == 1) {
// then new task is a sub-process, // then new task is a sub-process,
$row = $PM_DB->fetch_assoc($res); //$row = $PM_DB->fetch_assoc($res);
// now need to get the PRO_UID // now need to get the PRO_UID
$sub_caseInfo = self::getCaseInfo($row['APP_UID']); $sub_caseInfo = self::getCaseInfo($row['APP_UID']);
@@ -2961,7 +3100,18 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
// if end date was specified, then must change due date of the PM task // if end date was specified, then must change due date of the PM task
if ($taskEndDate != '') { if ($taskEndDate != '') {
$PM_DB->query( "UPDATE APP_DELEGATION SET DEL_TASK_DUE_DATE='$taskEndDate' WHERE APP_UID='".$sub_caseInfo->caseId."' AND DEL_INDEX=".$sub_route->delIndex); $PM_DB->update(
'APP_DELEGATION',
[
'DEL_TASK_DUE_DATE' => $taskEndDate
],
['AND' => [
'APP_UID' => $sub_caseInfo->caseId,
'DEL_INDEX' => $sub_route->delIndex
]
]
);
//$PM_DB->query( "UPDATE APP_DELEGATION SET DEL_TASK_DUE_DATE='$taskEndDate' WHERE APP_UID='".$sub_caseInfo->caseId."' AND DEL_INDEX=".$sub_route->delIndex);
} }
} }
@@ -3032,7 +3182,17 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
); );
// if end date was specified, then must change due date of the PM task // if end date was specified, then must change due date of the PM task
if ($taskEndDate != '') { if ($taskEndDate != '') {
$PM_DB->query( "UPDATE APP_DELEGATION SET DEL_TASK_DUE_DATE='$taskEndDate' WHERE APP_UID='".$caseInfo->caseId."' AND DEL_INDEX=".$route->delIndex); $PM_DB->update(
'APP_DELEGATION',
[
'DEL_TASK_DUE_DATE' => $taskEndDate
],
['AND' => [
'APP_UID' => $caseInfo->caseId,
'DEL_INDEX' => $route->delIndex
]
]);
//$PM_DB->query( "UPDATE APP_DELEGATION SET DEL_TASK_DUE_DATE='$taskEndDate' WHERE APP_UID='".$caseInfo->caseId."' AND DEL_INDEX=".$route->delIndex);
} }
} }
@@ -3079,7 +3239,8 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
// if end date was specified, then must change due date of the PM task // if end date was specified, then must change due date of the PM task
if ($taskEndDate != '') { if ($taskEndDate != '') {
$PM_DB->query( "UPDATE APP_DELEGATION SET DEL_TASK_DUE_DATE='$taskEndDate' WHERE APP_UID='".$sub_caseInfo->caseId."' AND DEL_INDEX=".$open_task->delIndex); $PM_DB->update('APP_DELEGATION', ['DEL_TASK_DUE_DATE' => $taskEndDate], ['AND' => ['APP_UID' => $sub_caseInfo->caseId, 'DEL_INDEX' => $open_task->delIndex]]);
//$PM_DB->query( "UPDATE APP_DELEGATION SET DEL_TASK_DUE_DATE='$taskEndDate' WHERE APP_UID='".$sub_caseInfo->caseId."' AND DEL_INDEX=".$open_task->delIndex);
} }
} }
} }
@@ -3102,7 +3263,15 @@ class PluginProcessmakerProcessmaker extends CommonDBTM {
public static function getPMGroups() { public static function getPMGroups() {
global $PM_DB; global $PM_DB;
$pmGroupList = []; $pmGroupList = [];
foreach ($PM_DB->request("SELECT * FROM CONTENT WHERE CONTENT.CON_CATEGORY='GRP_TITLE' AND CONTENT.CON_LANG='en'") as $dbgroup) { $res = $PM_DB->request(
'CONTENT', [
'AND' => [
'CONTENT.CON_CATEGORY' => 'GRP_TITLE',
'CONTENT.CON_LANG' => 'en'
]
]);
//foreach ($PM_DB->request("SELECT * FROM CONTENT WHERE CONTENT.CON_CATEGORY='GRP_TITLE' AND CONTENT.CON_LANG='en'") as $dbgroup) {
foreach ($res as $dbgroup) {
$pmGroupList[$dbgroup['CON_VALUE']] = $dbgroup; $pmGroupList[$dbgroup['CON_VALUE']] = $dbgroup;
} }
return $pmGroupList; return $pmGroupList;

View File

@@ -116,12 +116,10 @@ class PluginProcessmakerProfile extends CommonDBTM {
$dbu = new DbUtils; $dbu = new DbUtils;
$profileRight = new ProfileRight(); $profileRight = new ProfileRight();
foreach ($rights as $right => $value) { foreach ($rights as $right => $value) {
if ($dbu->countElementsInTable('glpi_profilerights', if ($dbu->countElementsInTable('glpi_profilerights', ['AND' => ['profiles_id' => $profiles_id, 'name' => $right]]) && $drop_existing) {
"`profiles_id`='$profiles_id' AND `name`='$right'") && $drop_existing) {
$profileRight->deleteByCriteria(['profiles_id' => $profiles_id, 'name' => $right]); $profileRight->deleteByCriteria(['profiles_id' => $profiles_id, 'name' => $right]);
} }
if (!$dbu->countElementsInTable('glpi_profilerights', if (!$dbu->countElementsInTable('glpi_profilerights', ['AND' => ['profiles_id' => $profiles_id, 'name' => $right]])) {
"`profiles_id`='$profiles_id' AND `name`='$right'")) {
$myright['profiles_id'] = $profiles_id; $myright['profiles_id'] = $profiles_id;
$myright['name'] = $right; $myright['name'] = $right;
$myright['rights'] = $value; $myright['rights'] = $value;

View File

@@ -79,13 +79,24 @@ class PluginProcessmakerTask extends CommonITILTask
$selfTable = $dbu->getTableForItemType( __CLASS__); $selfTable = $dbu->getTableForItemType( __CLASS__);
//$itemTypeTaskTable = getTableForItemType( $itemtype ); //$itemTypeTaskTable = getTableForItemType( $itemtype );
$res = $DB->request([
'SELECT' => $selfTable.'.items_id AS taskID',
'FROM' => $selfTable,
'WHERE' => [
'AND' => [
$selfTable.'del_thread_status' => self::OPEN,
$selfTable.'plugin_processmaker_cases_id' =>$case_id
]
]
]);
$query = "SELECT `$selfTable`.`items_id` as taskID from $selfTable $query = "SELECT `$selfTable`.`items_id` as taskID from $selfTable
WHERE `$selfTable`.`del_thread_status` = '".self::OPEN."' AND `$selfTable`.`plugin_processmaker_cases_id` = '$case_id';"; WHERE `$selfTable`.`del_thread_status` = '".self::OPEN."' AND `$selfTable`.`plugin_processmaker_cases_id` = '$case_id';";
//$query = "SELECT $itemTypeTaskTable.id as taskID from $itemTypeTaskTable //$query = "SELECT $itemTypeTaskTable.id as taskID from $itemTypeTaskTable
// INNER JOIN $selfTable on $selfTable.items_id=$itemTypeTaskTable.id // INNER JOIN $selfTable on $selfTable.items_id=$itemTypeTaskTable.id
// WHERE $itemTypeTaskTable.state=1 and $selfTable.plugin_processmaker_cases_id='$case_id';"; // WHERE $itemTypeTaskTable.state=1 and $selfTable.plugin_processmaker_cases_id='$case_id';";
foreach ($DB->request($query) as $row) { //foreach ($DB->request($query) as $row) {
foreach ($res as $row) {
$ret[$row['taskID']]=$row['taskID']; $ret[$row['taskID']]=$row['taskID'];
} }
return $ret; return $ret;
@@ -164,8 +175,17 @@ class PluginProcessmakerTask extends CommonITILTask
// get all tasks that are OPEN for this case // get all tasks that are OPEN for this case
$tasks = []; $tasks = [];
$res = $DB->request(
'glpi_plugin_processmaker_tasks', [
'AND' => [
'plugin_processmaker_cases_id' => $case->fields['id'],
'del_thread_status' => 'OPEN'
]
]
);
$query = "SELECT * FROM `glpi_plugin_processmaker_tasks` WHERE `plugin_processmaker_cases_id`={$case->fields['id']} AND `del_thread_status`='OPEN'"; $query = "SELECT * FROM `glpi_plugin_processmaker_tasks` WHERE `plugin_processmaker_cases_id`={$case->fields['id']} AND `del_thread_status`='OPEN'";
foreach ($DB->request($query) as $task) { //foreach ($DB->request($query) as $task) {
foreach ($res as $task) {
$tasks[$task['del_index']] = $task; $tasks[$task['del_index']] = $task;
} }
@@ -200,9 +220,21 @@ class PluginProcessmakerTask extends CommonITILTask
} }
foreach ($main_tasks as $task) { foreach ($main_tasks as $task) {
$res = $PM_DB->query("SELECT APP_UID FROM SUB_APPLICATION WHERE APP_PARENT='{$case->fields['case_guid']}' AND DEL_INDEX_PARENT={$task->delIndex} AND SA_STATUS='ACTIVE'"); $res = $PM_DB->request([
if ($res && $PM_DB->numrows($res) == 1) { 'SELECT' => 'APP_UID',
$row = $PM_DB->fetch_assoc($res); 'FROM' => 'SUB_APPLICATION',
'WHERE' => [
'AND' => [
'APP_PARENT' => $case->fields['case_guid'],
'DEL_INDEX_PARENT' => $task->delIndex,
'SA_STATUS' => 'ACTIVE'
]
]
]);
//$res = $PM_DB->query("SELECT APP_UID FROM SUB_APPLICATION WHERE APP_PARENT='{$case->fields['case_guid']}' AND DEL_INDEX_PARENT={$task->delIndex} AND SA_STATUS='ACTIVE'");
//if ($res && $PM_DB->numrows($res) == 1) {
if ($row = $res->next() && $res->numrows() == 1) {
//$row = $PM_DB->fetch_assoc($res);
$loc_case = new PluginProcessmakerCase; $loc_case = new PluginProcessmakerCase;
$loc_case->getFromGUID($row['APP_UID']); $loc_case->getFromGUID($row['APP_UID']);
$tab[$loc_case->getID()."-".$task->delIndex] = "<i><sub>> ".$task->taskName."</sub></i>"; $tab[$loc_case->getID()."-".$task->delIndex] = "<i><sub>> ".$task->taskName."</sub></i>";
@@ -253,18 +285,34 @@ class PluginProcessmakerTask extends CommonITILTask
// get all tasks that are OPEN for any sub-case of this case // get all tasks that are OPEN for any sub-case of this case
$sub_tasks = []; $sub_tasks = [];
$query = "SELECT `glpi_plugin_processmaker_tasks`.* FROM `glpi_plugin_processmaker_tasks` $res = $DB->request(
WHERE `glpi_plugin_processmaker_tasks`.`plugin_processmaker_cases_id`={$matches['cases_id']} AND `del_thread_status`='OPEN'"; 'glpi_plugin_processmaker_tasks AS ppt',
foreach ($DB->request($query) as $task) { ['AND' => [
'ppt.plugin_processmaker_cases_id' => $matches['cases_id'],
'del_thread_status' => 'OPEN']
]
);
//$query = "SELECT `glpi_plugin_processmaker_tasks`.* FROM `glpi_plugin_processmaker_tasks`
// WHERE `glpi_plugin_processmaker_tasks`.`plugin_processmaker_cases_id`={$matches['cases_id']} AND `del_thread_status`='OPEN'";
//foreach ($DB->request($query) as $task) {
foreach ($res as $task) {
$sub_tasks[$task['plugin_processmaker_cases_id']][$task['del_index']] = $task; $sub_tasks[$task['plugin_processmaker_cases_id']][$task['del_index']] = $task;
} }
$sub_case = new PluginProcessmakerCase; $sub_case = new PluginProcessmakerCase;
$sub_case->getFromDB($matches['cases_id']); $sub_case->getFromDB($matches['cases_id']);
$sub_case_url = $sub_case->getLinkURL().'&forcetab=PluginProcessmakerTask$'; $sub_case_url = $sub_case->getLinkURL().'&forcetab=PluginProcessmakerTask$';
$query = "SELECT `DEL_INDEX`, `DEL_DELEGATE_DATE` FROM `APP_DELEGATION` WHERE `APP_UID`='{$sub_case->fields['case_guid']}'"; $res = $PM_DB->request([
'SELECT' => ['DEL_INDEX', 'DEL_DELEGATE_DATE'],
'FROM' => 'APP_DELEGATION',
'WHERE' => [
'APP_UID' => $sub_case->fields['case_guid']
]
]);
//$query = "SELECT `DEL_INDEX`, `DEL_DELEGATE_DATE` FROM `APP_DELEGATION` WHERE `APP_UID`='{$sub_case->fields['case_guid']}'";
$sub_tasks_pm = []; $sub_tasks_pm = [];
foreach ($PM_DB->request($query) as $row) { //foreach ($PM_DB->request($query) as $row) {
foreach ($res as $row) {
$sub_tasks_pm[$row['DEL_INDEX']] = $row['DEL_DELEGATE_DATE']; $sub_tasks_pm[$row['DEL_INDEX']] = $row['DEL_DELEGATE_DATE'];
} }

View File

@@ -38,11 +38,36 @@ class PluginProcessmakerTaskCategory extends CommonDBTM
"<th>".__('Sub-process', 'processmaker')."</th>" . "<th>".__('Sub-process', 'processmaker')."</th>" .
"</tr>"; "</tr>";
$res = $DB->request([
'SELECT' => [
'pm.pm_task_guid',
'pm.taskcategories_id',
'pm.is_start',
'gl.name',
'gl.completename',
'gl.comment',
'pm.is_active',
'pm.is_subprocess'
],
'FROM' => 'glpi_plugin_processmaker_taskcategories AS pm',
'LEFT JOIN' => [
'glpi_taskcategories AS gl' => [
'FKEY' => [
'gl' => 'id',
'pm' => 'taskcategories_id'
]
]
],
'WHERE' => [
'pm.plugin_processmaker_processes_id' => $item->getId()
]
]);
$query = "SELECT pm.pm_task_guid, pm.taskcategories_id, pm.`is_start`, gl.name, gl.completename, gl.`comment`, pm.is_active, pm.is_subprocess FROM glpi_plugin_processmaker_taskcategories AS pm $query = "SELECT pm.pm_task_guid, pm.taskcategories_id, pm.`is_start`, gl.name, gl.completename, gl.`comment`, pm.is_active, pm.is_subprocess FROM glpi_plugin_processmaker_taskcategories AS pm
LEFT JOIN glpi_taskcategories AS gl ON pm.taskcategories_id=gl.id LEFT JOIN glpi_taskcategories AS gl ON pm.taskcategories_id=gl.id
WHERE pm.plugin_processmaker_processes_id=".$item->getID().";"; WHERE pm.plugin_processmaker_processes_id=".$item->getID().";";
foreach ($DB->request($query) as $taskCat) { //foreach ($DB->request($query) as $taskCat) {
foreach ($res as $taskCat) {
echo "<tr class='tab_bg_1'>"; echo "<tr class='tab_bg_1'>";
echo "<td class='b'><a href='". echo "<td class='b'><a href='".
@@ -118,19 +143,35 @@ class PluginProcessmakerTaskCategory extends CommonDBTM
function getFromGUID($task_guid) { function getFromGUID($task_guid) {
global $DB; global $DB;
$query = "SELECT * $res = $DB->request(
FROM `".$this->getTable()."` $this->getTable(),
WHERE `pm_task_guid` = '$task_guid'"; [
'pm_task_guid' => $task_guid
if ($result = $DB->query($query)) { ]
if ($DB->numrows($result) != 1) { );
if ($res) {
if ($res->numrows() != 1) {
return false; return false;
} }
$this->fields = $DB->fetch_assoc($result); $this->fields = $res->next();
if (is_array($this->fields) && count($this->fields)) { if (is_array($this->fields) && count($this->fields)) {
return true; return true;
} }
} }
//$query = "SELECT *
// FROM `".$this->getTable()."`
// WHERE `pm_task_guid` = '$task_guid'";
//if ($result = $DB->query($query)) {
// if ($DB->numrows($result) != 1) {
// return false;
// }
// $this->fields = $DB->fetch_assoc($result);
// if (is_array($this->fields) && count($this->fields)) {
// return true;
// }
//}
return false; return false;
} }
@@ -144,19 +185,33 @@ class PluginProcessmakerTaskCategory extends CommonDBTM
function getFromDBbyCategory($catid) { function getFromDBbyCategory($catid) {
global $DB; global $DB;
$query = "SELECT * $res = $DB->request(
FROM `".$this->getTable()."` $this->getTable(),
WHERE `taskcategories_id` = $catid"; [
'taskcategories_id' => $catid
if ($result = $DB->query($query)) { ]
if ($DB->numrows($result) != 1) { );
//$query = "SELECT *
// FROM `".$this->getTable()."`
// WHERE `taskcategories_id` = $catid";
if ($res) {
if ($res->numrows() != 1) {
return false; return false;
} }
$this->fields = $DB->fetch_assoc($result); $this->fields = $res->next();
if (is_array($this->fields) && count($this->fields)) { if (is_array($this->fields) && count($this->fields)) {
return true; return true;
} }
} }
//if ($result = $DB->query($query)) {
// if ($DB->numrows($result) != 1) {
// return false;
// }
// $this->fields = $DB->fetch_assoc($result);
// if (is_array($this->fields) && count($this->fields)) {
// return true;
// }
//}
return false; return false;
} }

View File

@@ -28,107 +28,207 @@ class PluginProcessmakerUser extends CommonDBTM {
static function getSqlSearchResult ($taskId, $count = true, $right = "all", $entity_restrict = -1, $value = 0, static function getSqlSearchResult ($taskId, $count = true, $right = "all", $entity_restrict = -1, $value = 0,
$used = [], $search = '', $limit = '') { $used = [], $search = '', $limit = '') {
global $DB, $PM_DB, $CFG_GLPI; global $DB, $PM_DB, $CFG_GLPI;
$res1 = new QuerySubQuery([
'SELECT' => ['GROUP_USER.USR_UID AS pm_user_id'],
'FROM' => 'TASK_USER',
'INNER JOIN' => [
'GROUP_USER' => [
'FKEY' => [
'GROUP_USER' => 'GRP_UID',
'TASK_USER' => 'USR_UID',
['AND' => [
'TASk_USER.TU_RELATION' => 2,
'TASk_USER.TU_TYPE' => 1
]
]
]
]
]
]);
$res2 = new QuerySubQuery([
'SELECT' => 'TASK_USER.USR_UID AS pm_user_id',
'FROM' => 'TASK_USER',
'WHERE' => [
'AND' => [
'TAS_UID' => $taskId,
'TASK_USER.TU_RELATION' => 1,
'TASk_USER.TU_TYPE' => 1
]
]
]);
$union = new QueryUnion([$res1, $res2]);
$res = $PM_DB->request([
'FROM' => $union
]);
// first need to get all users from $taskId // first need to get all users from $taskId
//$db_pm = PluginProcessmakerConfig::getInstance()->getProcessMakerDB(); //$db_pm = PluginProcessmakerConfig::getInstance()->getProcessMakerDB();
$pmQuery = "SELECT GROUP_USER.USR_UID AS pm_user_id FROM TASK_USER //$pmQuery = "SELECT GROUP_USER.USR_UID AS pm_user_id FROM TASK_USER
JOIN GROUP_USER ON GROUP_USER.GRP_UID=TASK_USER.USR_UID AND TASK_USER.TU_RELATION = 2 AND TASK_USER.TU_TYPE=1 // JOIN GROUP_USER ON GROUP_USER.GRP_UID=TASK_USER.USR_UID AND TASK_USER.TU_RELATION = 2 AND TASK_USER.TU_TYPE=1
WHERE TAS_UID = '$taskId' // WHERE TAS_UID = '$taskId'
UNION // UNION
SELECT TASK_USER.USR_UID AS pm_user_id FROM TASK_USER // SELECT TASK_USER.USR_UID AS pm_user_id FROM TASK_USER
WHERE TAS_UID = '$taskId' AND TASK_USER.TU_RELATION = 1 AND TASK_USER.TU_TYPE=1 ; "; // WHERE TAS_UID = '$taskId' AND TASK_USER.TU_RELATION = 1 AND TASK_USER.TU_TYPE=1 ; ";
$pmUsers = [ ]; $pmUsers = [ ];
foreach ($PM_DB->request( $pmQuery ) as $pmUser) { //foreach ($PM_DB->request( $pmQuery ) as $pmUser) {
foreach ($res as $pmUser) {
$pmUsers[ ] = $pmUser[ 'pm_user_id' ]; $pmUsers[ ] = $pmUser[ 'pm_user_id' ];
} }
$where = ''; //$where = '';
$joinprofile = false; $joinprofile = false;
switch ($right) { switch ($right) {
case "id" : case "id" :
$where = " `glpi_users`.`id` = '".Session::getLoginUserID()."' "; $used[] = Session::getLoginUserID();
//$where = " `glpi_users`.`id` = '".Session::getLoginUserID()."' ";
$query2['WHERE']['AND']['glpi_users.id'] = Session::getLoginUserID();
break; break;
case "all" : case "all" :
$where = " `glpi_users`.`id` > '1' "; //$where = " `glpi_users`.`id` > '1' ";
$query2['WHERE']['AND']['glpi_users.id'] = ['>', 1];
break; break;
} }
$where .= " AND glpi_plugin_processmaker_users.pm_users_id IN ('".join("', '", $pmUsers)."') "; //$where .= " AND glpi_plugin_processmaker_users.pm_users_id IN ('".join("', '", $pmUsers)."') ";
$where .= " AND `glpi_users`.`is_deleted` = '0' //$where .= " AND `glpi_users`.`is_deleted` = '0'
AND `glpi_users`.`is_active` = '1' "; // AND `glpi_users`.`is_active` = '1' ";
$query2['WHERE']['AND']['glpi_plugin_processmaker_users.pm_users_id'] = $pmUsers;
$query2['WHERE']['AND']['glpi_users.is_deleted'] = 0;
$query2['WHERE']['AND']['glpi_users.is_active'] = 1;
if ((is_numeric($value) && $value) if ((is_numeric($value) && $value)
|| count($used)) { || count($used)) {
$where .= " AND `glpi_users`.`id` NOT IN ("; //$where .= " AND `glpi_users`.`id` NOT IN (";
if (is_numeric($value)) { if (is_numeric($value)) {
$first = false; $first = false;
$where .= $value; //$where .= $value;
$used[] = $value;
//$query2['WHERE']['AND']['NOT']['glpi_users.id'] = $value;
} else { } else {
$first = true; $first = true;
} }
foreach ($used as $val) { //$query2['WHERE']['AND']['NOT']['glpi_users.id'] = $used;
if ($first) { //foreach ($used as $val) {
$first = false; // if ($first) {
} else { // $first = false;
$where .= ","; // } else {
} // $where .= ",";
$where .= $val; // }
} // $where .= $val;
$where .= ")"; //}
//$where .= ")";
} }
if ($count) { if ($count) {
$query = "SELECT COUNT(DISTINCT glpi_users.id ) AS cpt "; //$query = "SELECT COUNT(DISTINCT glpi_users.id ) AS cpt ";
$query2['SELECT'] = ['COUNT DISTINCT' => 'glpi_users.id AS cpt'];
} else { } else {
$query = "SELECT DISTINCT glpi_users.id , `glpi_users`.`realname`, `glpi_users`.`firstname`, `glpi_users`.`name`, `glpi_useremails`.`email` "; //$query = "SELECT DISTINCT glpi_users.id , `glpi_users`.`realname`, `glpi_users`.`firstname`, `glpi_users`.`name`, `glpi_useremails`.`email` ";
$query2['SELECT DISTINCT'] = 'glpi_users.id';
$query2['FIELDS'] = ['glpi_users.realname', 'glpi_users.firstname', 'glpi_users.name', 'glpi_useremails.email'];
} }
$query2['FROM'] = 'glpi_plugin_processmaker_users';
//$query .= "FROM glpi_plugin_processmaker_users
// JOIN glpi_users ON glpi_users.id=glpi_plugin_processmaker_users.id ";
$query2['FROM'] = 'glpi_plugin_processmaker_users';
$query2['INNER JOIN'] = [
'glpi_users' => [
'FKEY' => [
'glpi_users' => 'id',
'glpi_plugin_processmaker_users' => 'id'
]
]
];
$query .= "FROM glpi_plugin_processmaker_users //$query .= " LEFT JOIN `glpi_useremails`
JOIN glpi_users ON glpi_users.id=glpi_plugin_processmaker_users.id "; // ON (`glpi_users`.`id` = `glpi_useremails`.`users_id` AND `glpi_useremails`.is_default = 1)";
$query2['LEFT JOIN'] = [
$query .= " LEFT JOIN `glpi_useremails` 'glpi_useremails' => [
ON (`glpi_users`.`id` = `glpi_useremails`.`users_id` AND `glpi_useremails`.is_default = 1)"; 'FKEY' => [
$query .= " LEFT JOIN `glpi_profiles_users` 'glpi_users' => 'id',
ON (`glpi_users`.`id` = `glpi_profiles_users`.`users_id`)"; 'glpi_useremails' => 'users_id', [
'AND' => [
'glpi_useremails.is_default' => 1
]
]
]
],
'glpi_profiles_users' => [
'FKEY' => [
'glpi_users' => 'id',
'glpi_profiles_users' => 'users_id'
]
]
];
//$query .= " LEFT JOIN `glpi_profiles_users`
// ON (`glpi_users`.`id` = `glpi_profiles_users`.`users_id`)";
if ($joinprofile) { if ($joinprofile) {
$query .= " LEFT JOIN `glpi_profiles` $query2['LEFT JOIN'] = [
ON (`glpi_profiles`.`id` = `glpi_profiles_users`.`profiles_id`) "; 'glpi_profiles' => [
'FKEY' => [
'glpi_profiles' => 'id',
'glpi_profiles_user' => 'profiles_id'
]
]
];
//$query .= " LEFT JOIN `glpi_profiles`
// ON (`glpi_profiles`.`id` = `glpi_profiles_users`.`profiles_id`) ";
} }
if ($count) { if ($count) {
$query .= " WHERE $where "; $query2['WHERE']['AND']['NOT']['glpi_users.id'] = $used;
//$query .= " WHERE $where ";
} else { } else {
if (strlen($search)>0 && $search!=$CFG_GLPI["ajax_wildcard"]) { if (strlen($search)>0 && $search!=$CFG_GLPI["ajax_wildcard"]) {
$where .= " AND (`glpi_users`.`name` ".Search::makeTextSearch($search)." $query2['WHERE']['AND'] = [
OR `glpi_users`.`realname` ".Search::makeTextSearch($search)." 'glpi_users.name' => ['LIKE',Search::makeTextSearchValue($search)],
OR `glpi_users`.`firstname` ".Search::makeTextSearch($search)." 'OR' => [
OR `glpi_users`.`phone` ".Search::makeTextSearch($search)." 'glpi_users.realname' => ['LIKE',Search::makeTextSearchValue($search)],
OR `glpi_useremails`.`email` ".Search::makeTextSearch($search)." 'glpi_users.firstname' => ['LIKE',Search::makeTextSearchValue($search)],
OR CONCAT(`glpi_users`.`realname`,' ',`glpi_users`.`firstname`) ". 'glpi_users.phone' => ['LIKE',Search::makeTextSearchValue($search)],
Search::makeTextSearch($search).")"; 'glpi_useremails.email' => ['LIKE',Search::makeTextSearchValue($search)],
'RAW' => [
"CONCAT(`glpi_users`.`realname`,' ',`glpi_users`.`firstname`)".Search::makeTextSearch($search)
]
]
];
//$where .= " AND (`glpi_users`.`name` ".Search::makeTextSearch($search)."
// OR `glpi_users`.`realname` ".Search::makeTextSearch($search)."
// OR `glpi_users`.`firstname` ".Search::makeTextSearch($search)."
// OR `glpi_users`.`phone` ".Search::makeTextSearch($search)."
// OR `glpi_useremails`.`email` ".Search::makeTextSearch($search)."
// OR CONCAT(`glpi_users`.`realname`,' ',`glpi_users`.`firstname`) ".
// Search::makeTextSearch($search).")";
} }
$query .= " WHERE $where "; $query2['WHERE']['AND']['NOT']['glpi_users.id'] = $used;
//$query .= " WHERE $where ";
if ($_SESSION["glpinames_format"] == User::FIRSTNAME_BEFORE) { if ($_SESSION["glpinames_format"] == User::FIRSTNAME_BEFORE) {
$query.=" ORDER BY `glpi_users`.`firstname`, //$query.=" ORDER BY `glpi_users`.`firstname`,
`glpi_users`.`realname`, // `glpi_users`.`realname`,
`glpi_users`.`name` "; // `glpi_users`.`name` ";
$query2['ORDER'] = ['glpi_users.firstname', 'glpi_users.realname', 'glpi_users.name'];
} else { } else {
$query.=" ORDER BY `glpi_users`.`realname`, //$query.=" ORDER BY `glpi_users`.`realname`,
`glpi_users`.`firstname`, // `glpi_users`.`firstname`,
`glpi_users`.`name` "; // `glpi_users`.`name` ";
$query2['ORDER'] = ['glpi_users.realname', 'glpi_users.firstname', 'glpi_users.name'];
} }
if ($search != $CFG_GLPI["ajax_wildcard"]) { if ($search != $CFG_GLPI["ajax_wildcard"]) {
$query .= " $limit"; //$query .= " $limit";
$query2['LIMIT'] = 200;
} }
} }
return $DB->query($query); return $DB->request($query2);
//return $DB->query($query);
} }

View File

@@ -36,6 +36,10 @@
<num>3.5.2</num> <num>3.5.2</num>
<compatibility>9.3</compatibility> <compatibility>9.3</compatibility>
</version> </version>
<version>
<num>3.6.2</num>
<compatibility>9.4</compatibility>
</version>
</versions> </versions>
<langs> <langs>
<lang>en_gb</lang> <lang>en_gb</lang>

View File

@@ -2,7 +2,7 @@
// used for case cancellation // used for case cancellation
define("CANCEL", 256); define("CANCEL", 256);
define('PROCESSMAKER_VERSION', '3.5.2'); define('PROCESSMAKER_VERSION', '3.6.2');
// Init the hooks of the plugins -Needed // Init the hooks of the plugins -Needed
function plugin_init_processmaker() { function plugin_init_processmaker() {
@@ -128,8 +128,8 @@ function plugin_version_processmaker() {
'homepage' => 'https://github.com/tomolimo/processmaker', 'homepage' => 'https://github.com/tomolimo/processmaker',
'requirements' => [ 'requirements' => [
'glpi' => [ 'glpi' => [
'min' => '9.3', 'min' => '9.4',
'max' => '9.4' 'max' => '9.5'
], ],
] ]
]; ];
@@ -137,8 +137,8 @@ function plugin_version_processmaker() {
// Optional : check prerequisites before install : may print errors or add to message after redirect // Optional : check prerequisites before install : may print errors or add to message after redirect
function plugin_processmaker_check_prerequisites() { function plugin_processmaker_check_prerequisites() {
if (version_compare(GLPI_VERSION, '9.3', 'lt') || version_compare(GLPI_VERSION, '9.4', 'ge')) { if (version_compare(GLPI_VERSION, '9.4', 'lt') || version_compare(GLPI_VERSION, '9.5', 'ge')) {
echo "This plugin requires GLPI >= 9.3 and < 9.4"; echo "This plugin requires GLPI >= 9.4 and < 9.5";
return false; return false;
} }