Skip to content

Commit

Permalink
feat(issue): group validator in issue
Browse files Browse the repository at this point in the history
Signed-off-by: Thierry Bugier <tbugier@teclib.com>
  • Loading branch information
btry committed May 18, 2020
1 parent 90f6b5c commit f9183db
Show file tree
Hide file tree
Showing 5 changed files with 159 additions and 104 deletions.
14 changes: 10 additions & 4 deletions hook.php
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ function plugin_formcreator_addDefaultWhere($itemtype) {
$condition = Search::addDefaultWhere(Ticket::class);
$condition = str_replace('`glpi_tickets`', '`glpi_plugin_formcreator_issues`', $condition);
$condition = str_replace('`users_id_recipient`', '`requester_id`', $condition);
$condition = "($condition OR `glpi_plugin_formcreator_issues`.`validator_id` = '" . Session::getLoginUserID() . "')";
$condition = "($condition OR `glpi_plugin_formcreator_issues`.`users_id_validator` = '" . Session::getLoginUserID() . "')";
break;

case PluginFormcreatorFormAnswer::class:
Expand Down Expand Up @@ -178,10 +178,16 @@ function plugin_formcreator_addLeftJoin($itemtype, $ref_table, $new_table, $link
if ($new_table == 'glpi_groups') {
foreach ($already_link_tables as $table) {
if (strpos($table, $new_table) === 0) {
$AS = $table;
$ref = explode('.', $table);
$AS = $ref[0];
$fk = getForeignKeyFieldForTable($ref[0]);
if (count($ref) > 1) {
$AS = $ref[0];
$fk = $ref[1];
}
}
}
$join = " LEFT JOIN `$new_table` AS `$AS` ON (`glpi_groups_tickets_original_id`.`groups_id` = `$AS`.`id`) ";
$join = " LEFT JOIN `$new_table` AS `$AS` ON (`$ref_table`.`$fk` = `$AS`.`id`) ";
}

if ($new_table == 'glpi_users' && $linkfield == 'users_id') {
Expand All @@ -190,7 +196,7 @@ function plugin_formcreator_addLeftJoin($itemtype, $ref_table, $new_table, $link
$AS = $table;
}
}
$join = " LEFT JOIN `$new_table` AS `$AS` ON (`glpi_tickets_users_original_id`.`users_id` = `$AS`.`id`) ";
$join = " LEFT JOIN `$new_table` AS `$AS` ON (`$ref_table`.`users_id` = `$AS`.`id`) ";
}
break;
}
Expand Down
96 changes: 50 additions & 46 deletions inc/formanswer.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -1319,17 +1319,18 @@ private function createIssue() {
// There are several tickets for this form answer
// The issue must be created from this form answer
$issue->add([
'original_id' => $this->getID(),
'sub_itemtype' => PluginFormcreatorFormAnswer::class,
'name' => addslashes($this->fields['name']),
'status' => $this->fields['status'],
'date_creation' => $this->fields['request_date'],
'date_mod' => $this->fields['request_date'],
'entities_id' => $this->fields['entities_id'],
'is_recursive' => $this->fields['is_recursive'],
'requester_id' => $this->fields['requester_id'],
'validator_id' => $this->fields['users_id_validator'],
'comment' => '',
'original_id' => $this->getID(),
'sub_itemtype' => PluginFormcreatorFormAnswer::class,
'name' => addslashes($this->fields['name']),
'status' => $this->fields['status'],
'date_creation' => $this->fields['request_date'],
'date_mod' => $this->fields['request_date'],
'entities_id' => $this->fields['entities_id'],
'is_recursive' => $this->fields['is_recursive'],
'requester_id' => $this->fields['requester_id'],
'users_id_validator' => $this->fields['users_id_validator'],
'groups_id_validator'=> $this->fields['groups_id_validator'],
'comment' => '',
]);
} else {
// There is one ticket for this form answer
Expand All @@ -1353,17 +1354,18 @@ private function createIssue() {
);
$ticketUserRow = array_pop($ticketUserRow);
$issue->add([
'original_id' => $ticketId,
'sub_itemtype' => Ticket::class,
'name' => addslashes($ticket->getField('name')),
'status' => $ticket->getField('status'),
'date_creation' => $ticket->getField('date'),
'date_mod' => $ticket->getField('date_mod'),
'entities_id' => $ticket->getField('entities_id'),
'is_recursive' => '0',
'requester_id' => $ticketUserRow['users_id'],
'validator_id' => '',
'comment' => addslashes($ticket->getField('content')),
'original_id' => $ticketId,
'sub_itemtype' => Ticket::class,
'name' => addslashes($ticket->getField('name')),
'status' => $ticket->getField('status'),
'date_creation' => $ticket->getField('date'),
'date_mod' => $ticket->getField('date_mod'),
'entities_id' => $ticket->getField('entities_id'),
'is_recursive' => '0',
'requester_id' => $ticketUserRow['users_id'],
'users_id_validator' => '',
'groups_id_validator'=> '',
'comment' => addslashes($ticket->getField('content')),
]);
}
}
Expand Down Expand Up @@ -1392,18 +1394,19 @@ private function updateIssue() {
]
]);
$issue->update([
'id' => $issue->getID(),
'original_id' => $this->getID(),
'sub_itemtype' => PluginFormcreatorFormAnswer::class,
'name' => addslashes($this->fields['name']),
'status' => $this->fields['status'],
'date_creation' => $this->fields['request_date'],
'date_mod' => $this->fields['request_date'],
'entities_id' => $this->fields['entities_id'],
'is_recursive' => $this->fields['is_recursive'],
'requester_id' => $this->fields['requester_id'],
'validator_id' => $this->fields['users_id_validator'],
'comment' => '',
'id' => $issue->getID(),
'original_id' => $this->getID(),
'sub_itemtype' => PluginFormcreatorFormAnswer::class,
'name' => addslashes($this->fields['name']),
'status' => $this->fields['status'],
'date_creation' => $this->fields['request_date'],
'date_mod' => $this->fields['request_date'],
'entities_id' => $this->fields['entities_id'],
'is_recursive' => $this->fields['is_recursive'],
'requester_id' => $this->fields['requester_id'],
'users_id_validator' => $this->fields['users_id_validator'],
'groups_id_validator'=> $this->fields['groups_id_validator'],
'comment' => '',
]);
} else {
// There is one ticket for this form answer
Expand Down Expand Up @@ -1433,18 +1436,19 @@ private function updateIssue() {
]
]);
$issue->update([
'id' => $issue->getID(),
'original_id' => $ticketId,
'sub_itemtype' => Ticket::class,
'name' => addslashes($ticket->getField('name')),
'status' => $ticket->getField('status'),
'date_creation' => $ticket->getField('date'),
'date_mod' => $ticket->getField('date_mod'),
'entities_id' => $ticket->getField('entities_id'),
'is_recursive' => '0',
'requester_id' => $ticketUserRow['users_id'],
'validator_id' => '',
'comment' => addslashes($ticket->getField('content')),
'id' => $issue->getID(),
'original_id' => $ticketId,
'sub_itemtype' => Ticket::class,
'name' => addslashes($ticket->getField('name')),
'status' => $ticket->getField('status'),
'date_creation' => $ticket->getField('date'),
'date_mod' => $ticket->getField('date_mod'),
'entities_id' => $ticket->getField('entities_id'),
'is_recursive' => '0',
'requester_id' => $ticketUserRow['users_id'],
'users_id_validator' => '',
'groups_id_validator'=> '',
'comment' => addslashes($ticket->getField('content')),
]);
}
} else {
Expand Down
136 changes: 85 additions & 51 deletions inc/issue.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -72,19 +72,20 @@ public static function cronSyncIssues(CronTask $task) {
// 1 ticket linked to 1 form_answer => 1 issue which is the ticket sub_itemtype
// several tickets linked to the same form_answer => 1 issue which is the form_answer sub_itemtype
$query = "SELECT DISTINCT
NULL AS `id`,
`f`.`name` AS `name`,
CONCAT('f_',`fanswer`.`id`) AS `display_id`,
`fanswer`.`id` AS `original_id`,
'PluginFormcreatorFormAnswer' AS `sub_itemtype`,
`fanswer`.`status` AS `status`,
`fanswer`.`request_date` AS `date_creation`,
`fanswer`.`request_date` AS `date_mod`,
`fanswer`.`entities_id` AS `entities_id`,
`fanswer`.`is_recursive` AS `is_recursive`,
`fanswer`.`requester_id` AS `requester_id`,
`fanswer`.`users_id_validator` AS `validator_id`,
`fanswer`.`comment` AS `comment`
NULL AS `id`,
`f`.`name` AS `name`,
CONCAT('f_',`fanswer`.`id`) AS `display_id`,
`fanswer`.`id` AS `original_id`,
'PluginFormcreatorFormAnswer' AS `sub_itemtype`,
`fanswer`.`status` AS `status`,
`fanswer`.`request_date` AS `date_creation`,
`fanswer`.`request_date` AS `date_mod`,
`fanswer`.`entities_id` AS `entities_id`,
`fanswer`.`is_recursive` AS `is_recursive`,
`fanswer`.`requester_id` AS `requester_id`,
`fanswer`.`users_id_validator` AS `validator_id`,
`fanswer`.`groups_id_validator` AS `validator_id`,
`fanswer`.`comment` AS `comment`
FROM `glpi_plugin_formcreator_formanswers` AS `fanswer`
LEFT JOIN `glpi_plugin_formcreator_forms` AS `f`
ON`f`.`id` = `fanswer`.`plugin_formcreator_forms_id`
Expand All @@ -108,7 +109,8 @@ public static function cronSyncIssues(CronTask $task) {
`tic`.`entities_id` AS `entities_id`,
0 AS `is_recursive`,
`tu`.`users_id` AS `requester_id`,
0 AS `validator_id`,
0 AS `users_id_validator`,
0 AS `groups_id_validator`,
`tic`.`content` AS `comment`
FROM `glpi_tickets` AS `tic`
LEFT JOIN `glpi_items_tickets` AS `itic`
Expand Down Expand Up @@ -396,7 +398,7 @@ public function rawSearchOptions() {
'id' => '9',
'table' => 'glpi_users',
'field' => 'name',
'linkfield' => 'validator_id',
'linkfield' => 'users_id_validator',
'name' => __('Form approver', 'formcreator'),
'datatype' => 'dropdown',
'massiveaction' => false
Expand Down Expand Up @@ -481,6 +483,16 @@ public function rawSearchOptions() {
]
];

$tab[] = [
'id' => '16',
'table' => 'glpi_groups',
'field' => 'completename',
'name' => __('Form approver group', 'formcreator'),
'datatype' => 'itemlink',
'massiveaction' => false,
'linkfield' => 'groups_id_validator',
];

return $tab;
}

Expand Down Expand Up @@ -635,55 +647,77 @@ static function getWaitingCriteria() {
}

static function getValidateCriteria() {
$currentUser = Session::getLoginUserID();
return ['criteria' => [['field' => 4,
'searchtype' => 'equals',
'value' => 'waiting',
'link' => 'AND'],
['field' => 9,
'searchtype' => 'equals',
'value' => $currentUser,
'link' => 'AND'],
['field' => 4,
'searchtype' => 'equals',
'value' => 'waiting',
'link' => 'OR'],
['field' => 11,
return ['criteria' => [['link' => 'AND',
'field' => 4,
'searchtype' => 'equals',
'value' => $currentUser,
'link' => 'AND']],
'value' => PluginFormcreatorFormAnswer::STATUS_WAITING,
],
['link' => 'AND'] + self::getMeAsValidatorCriteria()
],
'reset' => 'reset'];
}

static function getSolvedCriteria() {
$currentUser = Session::getLoginUserID();
return ['criteria' => [['field' => 4,
'searchtype' => 'equals',
'value' => 'old',
'link' => 'AND'],
['field' => 8,
return ['criteria' => [['link' => 'AND',
'field' => 8,
'searchtype' => 'equals',
'value' => $currentUser,
'link' => 'AND'],
['field' => 4,
],
['link' => 'AND',
'criteria' => [[
'link' => 'AND',
'field' => 4,
'searchtype' => 'equals',
'value' => 'old', // see Ticket::getAllStatusArray()
],
['field' => 4,
'searchtype' => 'equals',
'value' => PluginFormcreatorFormAnswer::STATUS_REFUSED,
'link' => 'OR']
]],
['link' => 'OR',
'criteria' => [[
'link' => 'AND',
'field' => 9,
'searchtype' => 'equals',
'value' => 'refused',
'link' => 'OR'],
['field' => 8,
'searchtype' => 'equals',
'value' => $currentUser,
'link' => 'AND'],
['field' => 4,
'value' => $currentUser,
],
['link' => 'OR',
'field' => 16,
'searchtype' => 'equals',
'value' => 'refused',
'link' => 'OR'],
['field' => 9,
'searchtype' => 'equals',
'value' => $currentUser,
'link' => 'AND']],
'value' => 'mygroups',
],
]],
['link' => 'AND',
'field' => 4,
'searchtype' => 'equals',
'value' => PluginFormcreatorFormAnswer::STATUS_REFUSED,
]],
'reset' => 'reset'];
}

public static function getMeAsValidatorCriteria() {
$currentUser = Session::getLoginUserID();
return ['criteria' => [[
'link' => 'AND',
'field' => 9,
'searchtype' => 'equals',
'value' => $currentUser,
],
['link' => 'OR',
'field' => 16,
'searchtype' => 'equals',
'value' => 'mygroups',
],
['link' => 'OR',
'field' => 11,
'searchtype' => 'equals',
'value' => $currentUser,
]]
];
}

static function getTicketSummary() {
$status = [
Ticket::INCOMING => 0,
Expand Down
8 changes: 5 additions & 3 deletions install/mysql/plugin_formcreator_empty.sql
Original file line number Diff line number Diff line change
Expand Up @@ -244,14 +244,16 @@ CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_issues` (
`date_mod` datetime NOT NULL,
`entities_id` int(11) NOT NULL DEFAULT '0',
`is_recursive` tinyint(1) NOT NULL DEFAULT '0',
`requester_id` int(11) NOT NULL DEFAULT '0',
`validator_id` int(11) NOT NULL DEFAULT '0',
`requester_id` int(11) NOT NULL DEFAULT '0',
`users_id_validator` int(11) NOT NULL DEFAULT '0',
`groups_id_validator` int(11) NOT NULL DEFAULT '0',
`comment` longtext,
PRIMARY KEY (`id`),
INDEX `original_id_sub_itemtype` (`original_id`, `sub_itemtype`),
INDEX `entities_id` (`entities_id`),
INDEX `requester_id` (`requester_id`),
INDEX `validator_id` (`validator_id`)
INDEX `users_id_validator` (`users_id_validator`),
INDEX `groups_id_validator` (`groups_id_validator`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_items_targettickets` (
Expand Down
9 changes: 9 additions & 0 deletions install/upgrade_to_2.10.php
Original file line number Diff line number Diff line change
Expand Up @@ -62,5 +62,14 @@ public function upgrade(Migration $migration) {
$migration->addField($table, 'show_rule', 'integer', ['value' => '1', 'after' => 'category_question']);
$table = 'glpi_plugin_formcreator_targettickets';
$migration->addField($table, 'show_rule', 'integer', ['value' => '1', 'after' => 'location_question']);

// support for validator group in issues
$table = 'glpi_plugin_formcreator_issues';
$migration->changeField($table, 'validator_id', 'users_id_validator', 'integer');
$migration->addField($table, 'groups_id_validator', 'integer', ['after' => 'users_id_validator']);
$migration->migrationOneTable($table);
$migration->dropKey($table, 'validator_id');
$migration->addKey($table, 'users_id_validator');
$migration->addKey($table, 'groups_id_validator');
}
}

0 comments on commit f9183db

Please sign in to comment.