Skip to content
This repository has been archived by the owner on Aug 9, 2021. It is now read-only.

Commit

Permalink
feat(taskstatus): show task statuses for agents and fleets
Browse files Browse the repository at this point in the history
Signed-off-by: Thierry Bugier <tbugier@teclib.com>
  • Loading branch information
btry authored and DIOHz0r committed Mar 26, 2018
1 parent 3439971 commit 2dc62d3
Show file tree
Hide file tree
Showing 6 changed files with 299 additions and 21 deletions.
37 changes: 21 additions & 16 deletions inc/agent.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,9 @@ public function defineTabs($options = []) {
$this->addDefaultFormTab($tab);
$this->addStandardTab(PluginFlyvemdmGeolocation::class, $tab, $options);
$this->addStandardTab(__CLASS__, $tab, $options);
if (!$this->isNewItem()) {
$this->addStandardTab(PluginFlyvemdmTaskstatus::class, $tab, $options);
}
$this->addStandardTab(Notepad::class, $tab, $options);
$this->addStandardTab(Log::class, $tab, $options);

Expand All @@ -151,7 +154,6 @@ public function defineTabs($options = []) {
* @return array|string
*/
function getTabNameForItem(CommonGLPI $item, $withtemplate = 0) {

if (static::canView()) {
switch ($item->getType()) {
case __CLASS__ :
Expand All @@ -165,7 +167,8 @@ function getTabNameForItem(CommonGLPI $item, $withtemplate = 0) {
$fleetId = $item->getID();
$pluralNumber = Session::getPluralNumber();
if ($_SESSION['glpishow_count_on_tabs']) {
$nb = countElementsInTable(static::getTable(), ['plugin_flyvemdm_fleets_id' => $fleetId]);
$DbUtil = new DbUtils();
$nb = $DbUtil->countElementsInTable(static::getTable(), ['plugin_flyvemdm_fleets_id' => $fleetId]);
}
return self::createTabEntry(self::getTypeName($pluralNumber), $nb);
}
Expand All @@ -176,6 +179,8 @@ function getTabNameForItem(CommonGLPI $item, $withtemplate = 0) {
break;
}
}

return '';
}

/**
Expand Down Expand Up @@ -298,6 +303,10 @@ public static function showDangerZone(PluginFlyvemdmAgent $item) {
* @return string an html with the agents
*/
public static function showForFleet(PluginFlyvemdmFleet $item) {
if (!PluginFlyvemdmFleet::canView()) {
return false;
}

if (isset($_GET["start"])) {
$start = intval($_GET["start"]);
} else {
Expand All @@ -306,27 +315,23 @@ public static function showForFleet(PluginFlyvemdmFleet $item) {

$dbUtils = new DbUtils();

// Total Number of agents
// get items
$agent = new PluginFlyvemdmAgent();
$items_id = $item->getField('id');
$itemFk = $item::getForeignKeyField();
$number = $dbUtils->countElementsInTableForMyEntities(
static::getTable(),
[$itemFk => $items_id]
);
$condition = "`$itemFk` = '$items_id' " . $dbUtils->getEntitiesRestrictRequest();
$rows = $agent->find($condition);
$number = count($rows);

// get the pager
$pager = Html::printAjaxPager(self::getTypeName(1), $start, $number, '', false);
$pager = ''; // disabled because the results are not paged yet

// get items
$agent = new static();
$condition = "`$itemFk` = '$items_id' " . $dbUtils->getEntitiesRestrictRequest();
$rows = $agent->find($condition, '', '');

$data = [
'number' => $number,
'pager' => $pager,
'agents' => $rows,
'number' => $number,
'pager' => $pager,
'agents' => $rows,
'start' => $start,
'stop' => $start + $_SESSION['glpilist_limit']
];

$twig = plugin_flyvemdm_getTemplateEngine();
Expand Down
105 changes: 101 additions & 4 deletions inc/task.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -87,17 +87,38 @@ class PluginFlyvemdmTask extends CommonDBRelation {
* @return string the tab name
*/
function getTabNameForItem(CommonGLPI $item, $withtemplate = 0) {
global $DB;
if (static::canView()) {
switch ($item->getType()) {
case PluginFlyvemdmFleet::class:
if ($_SESSION['glpishow_count_on_tabs']) {
$nb = 0;
$fleetId = $item->getID();
$pluralNumber = Session::getPluralNumber();
$nb = countElementsInTable(static::getTable(),
$nb1 = countElementsInTable(static::getTable(),
['plugin_flyvemdm_fleets_id' => $fleetId]);
$request = [
'COUNT' => 'c',
'FROM' => PluginFlyvemdmTaskstatus::getTable(),
'INNER JOIN' => [
PluginFlyvemdmTask::getTable() => [
'FKEY' => [
PluginFlyvemdmTaskstatus::getTable() => PluginFlyvemdmTask::getForeignKeyField(),
PluginFlyvemdmTask::getTable() => 'id'
]
]
],
'WHERE' => [
PluginFlyvemdmTask::getTable() . '.' . PluginFlyvemdmFleet::getForeignKeyField() => $fleetId,
]
];
$result = $DB->request($request)->next();
$nb2 = array_pop($result);
}
return self::createTabEntry(PluginFlyvemdmPolicy::getTypeName($pluralNumber), $nb);
return [
1 => self::createTabEntry(PluginFlyvemdmPolicy::getTypeName($pluralNumber), $nb1),
2 => self::createTabEntry(__('Tasks statuses', 'flyvemdm'), $nb2),
];
}
}
}
Expand Down Expand Up @@ -663,7 +684,14 @@ public function getSearchOptionsNew() {
static function displayTabContentForItem(CommonGLPI $item, $tabnum = 1, $withtemplate = 0) {
switch (get_class($item)) {
case PluginFlyvemdmFleet::class:
static::showForFleet($item, $withtemplate);
switch ($tabnum) {
case 1:
static::showForFleet($item, $withtemplate);
break;
case 2:
static::showTaskStatusesForItem($item, $withtemplate);
break;
}
}
}

Expand Down Expand Up @@ -703,7 +731,7 @@ static function showForFleet(CommonDBTM $item, $withtemplate = '') {
$policy = new PluginFlyvemdmPolicy();
$policies = $policy->find();

// Get aplied policies
// Get applied policies
$task = new PluginFlyvemdmTask();
$appliedPolicies = $task->find("`plugin_flyvemdm_fleets_id` = '$itemId'");

Expand Down Expand Up @@ -762,6 +790,75 @@ static function showForFleet(CommonDBTM $item, $withtemplate = '') {
Html::closeForm();
}

public static function showTaskStatusesForItem(CommonDBTM $item, $withTemplate = '') {
global $DB;

if (!$item->canView()) {
return false;
}

if (isset($_GET["start"])) {
$start = intval($_GET["start"]);
} else {
$start = 0;
}

$fleetId = $item->getID();
$canedit = Session::haveRightsOr('flyvemdm:fleet', [CREATE, UPDATE, DELETE, PURGE]);
$rand = mt_rand();

$request = [
'COUNT' => 'c',
'FIELDS' => [
PluginFlyvemdmTask::getTable() => PluginFlyvemdmPolicy::getForeignKeyField(),
PluginFlyvemdmPolicy::getTable() => 'name',
PluginFlyvemdmTaskstatus::getTable() => 'status',
],
'FROM' => PluginFlyvemdmTaskstatus::getTable(),
'INNER JOIN' => [
PluginFlyvemdmTask::getTable() => [
'FKEY' => [
PluginFlyvemdmTaskstatus::getTable() => PluginFlyvemdmTask::getForeignKeyField(),
PluginFlyvemdmTask::getTable() => 'id'
]
],
PluginFlyvemdmPolicy::getTable() => [
'FKEY' => [
PluginFlyvemdmTask::getTable() => PluginFlyvemdmPolicy::getForeignKeyField(),
PluginFlyvemdmPolicy::getTable() => 'id'
]
]
],
'GROUPBY' => [
PluginFlyvemdmPolicy::getTable() . '.' . 'id',
PluginFlyvemdmTaskstatus::getTable() . '.' . 'status'
],
'WHERE' => [
PluginFlyvemdmTask::getTable() . '.' . PluginFlyvemdmFleet::getForeignKeyField() => $fleetId,
],
'ORDER' => [
PluginFlyvemdmPolicy::getTable() .'.name ASC'
]
];
$rows = $DB->request($request);
$number = $rows->count();

// get the pager
$pager = Html::printAjaxPager(self::getTypeName(1), $start, $number, '', false);

$data = [
'number' => $number,
'pager' => $pager,
'taskstatuses' => $rows,
'start' => $start,
'stop' => $start + $_SESSION['glpilist_limit']
];
$twig = plugin_flyvemdm_getTemplateEngine();
echo $twig->render('fleet_taskstatus.html.twig', $data);

Html::closeForm();
}

/**
* Processes
* @param array $input
Expand Down
105 changes: 105 additions & 0 deletions inc/taskstatus.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,39 @@ public static function getTypeName($nb = 0) {
return __s('Task status', 'flyvemdm');
}

function getTabNameForItem(CommonGLPI $item, $withtemplate = 0) {
if (static::canView()) {
switch ($item->getType()) {
case PluginFlyvemdmAgent::class:
if (!$withtemplate) {
$nb = 0;
$pluralNumber = Session::getPluralNumber();
if ($_SESSION['glpishow_count_on_tabs']) {
$DbUtil = new DbUtils();
$nb = $DbUtil->countElementsInTable(
static::getTable(),
[
PluginFlyvemdmAgent::getForeignKeyField() => $item->getID()
]
);
}
return self::createTabEntry(self::getTypeName($pluralNumber), $nb);
}
break;
}
}
return '';
}

static function displayTabContentForItem(CommonGLPI $item, $tabnum = 1, $withtemplate = 0) {
switch (get_class($item)) {
case PluginFlyvemdmAgent::class:
self::showForAgent($item);
return true;
break;
}
}

public function prepareInputForAdd($input) {
if (!isset($input['status'])) {
return false;
Expand Down Expand Up @@ -113,4 +146,76 @@ public function updateStatus(PluginFlyvemdmPolicyBase $policy, $status) {
'status' => $status,
]);
}

/**
* Gets task statuses for a given agent
* @param PluginFlyvemdmAgent $agent an agent from which get the policies statuses
* @return DBIterator
*/
public function getStatusesForAgent(PluginFlyvemdmAgent $agent) {
global $DB;

$request = [
'FIELDS' => [
PluginFlyvemdmTaskstatus::getTable() => '*',
PluginFlyvemdmPolicy::getTable() => 'name',
],
'FROM' => [
PluginFlyvemdmTaskstatus::getTable(),
],
'INNER JOIN' => [
PluginFlyvemdmTask::getTable() => [
'FKEY' => [
PluginFlyvemdmTask::getTable() => 'id',
PluginFlyvemdmTaskstatus::getTable() => PluginFlyvemdmTask::getForeignKeyField()
]
],
PluginFlyvemdmPolicy::getTable() => [
'FKEY' => [
PluginFlyvemdmTask::getTable() => PluginFlyvemdmPolicy::getForeignKeyField(),
PluginFlyvemdmPolicy::getTable() => 'id'
]
]
],
'WHERE' => [
PluginFlyvemdmAgent::getForeignKeyField() => $agent->getID(),
]
];

return $DB->request($request);
}

public static function showForAgent(PluginFlyvemdmAgent $item) {
if (!PluginFlyvemdmAgent::canView()) {
return false;
}

if (isset($_GET["start"])) {
$start = intval($_GET["start"]);
} else {
$start = 0;
}

// get items
$status = new PluginFlyvemdmTaskstatus();
$items_id = $item->getField('id');
$itemFk = $item::getForeignKeyField();
$condition = "`$itemFk` = '$items_id' ";
$rows = $status->getStatusesForAgent($item);
$number = count($rows);

// get the pager
$pager = Html::printAjaxPager(self::getTypeName(1), $start, $number, '', false);

$data = [
'number' => $number,
'pager' => $pager,
'taskstatuses' => $rows,
'start' => $start,
'stop' => $start + $_SESSION['glpilist_limit']
];

$twig = plugin_flyvemdm_getTemplateEngine();
echo $twig->render('agent_taskstatus.html.twig', $data);
}
}
1 change: 0 additions & 1 deletion tests/suite-integration/Entity.php
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,5 @@ public function testDeleteEntity() {

$entityConfig = new \PluginFlyvemdmEntityConfig();
$this->integer(count($entityConfig->find("`entities_id` = '$entityId'")))->isEqualTo(0);

}
}
39 changes: 39 additions & 0 deletions tpl/agent_taskstatus.html.twig
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
{% if number < 1 %}
<div class='center'>
<table class='tab_cadre_fixe'>
<tr><th>{{ __('There is no task status yet', 'flyvemdm') }}</th></tr>
</table>
</div>
<br>
{% else %}
{{ pager|raw }}
<div class='center'>
<table class='tab_cadre_fixehov'>
<tr>
<th>{{ __('ID') }}</th>
<th>{{ __('Policy', 'flyvemdm') }}</th>
<th>{{ __('Status', 'flyvemdm') }}</th>
<th>{{ __('Application date', 'flyvemdm') }}</th>
<th>{{ __('Last change date', 'flyvemdm') }}</th>
</tr>
{% for taskstatus in taskstatuses %}
{% if loop.index > start and loop.index <= stop %}
<tr class='tab_bg_2'>
<td ><center>{{ taskstatus.id }}</center></td>
<td><center>{{ __(taskstatus.name, 'flyvemdm') }}</center></td>
<td><center>{{ taskstatus.status }}</center></td>
<td><center>{{ taskstatus.date_creation }}</center></td>
<td><center>{{ taskstatus.date_mod }}</center></td>
</tr>
{% endif %}
{% endfor %}
<tr>
<th>{{ __('ID') }}</th>
<th>{{ __('Policy', 'flyvemdm') }}</th>
<th>{{ __('Status', 'flyvemdm') }}</th>
<th>{{ __('Application date', 'flyvemdm') }}</th>
<th>{{ __('Last change date', 'flyvemdm') }}</th>
</tr>
</table>
</div>
{% endif %}
Loading

0 comments on commit 2dc62d3

Please sign in to comment.