%PDF- %PDF-
| Direktori : /var/www/projetos/suporte.iigd.com.br/plugins/glpiinventory/inc/ |
| Current File : /var/www/projetos/suporte.iigd.com.br/plugins/glpiinventory/inc/deploytaskjob.class.php |
<?php
/**
* ---------------------------------------------------------------------
* GLPI Inventory Plugin
* Copyright (C) 2021 Teclib' and contributors.
*
* http://glpi-project.org
*
* based on FusionInventory for GLPI
* Copyright (C) 2010-2021 by the FusionInventory Development Team.
*
* ---------------------------------------------------------------------
*
* LICENSE
*
* This file is part of GLPI Inventory Plugin.
*
* GLPI Inventory Plugin is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* GLPI Inventory Plugin is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with GLPI Inventory Plugin. If not, see <https://www.gnu.org/licenses/>.
* ---------------------------------------------------------------------
*/
if (!defined('GLPI_ROOT')) {
die("Sorry. You can't access directly to this file");
}
/**
* Manage the deploy task job.
*
* @todo This class should inherit the PluginGlpiinventoryTaskjob
*/
class PluginGlpiinventoryDeployTaskjob extends CommonDBTM
{
/**
* Is this use can create a deploy task job
*
* @return boolean
*/
public static function canCreate()
{
return true;
}
/**
* Is this use can view a deploy task job
*
* @return boolean
*/
public static function canView()
{
return true;
}
/**
* Get all data
*
* @global object $DB
* @param array $params
* @return string in JSON format
*/
public function getAllDatas($params)
{
global $DB;
$tasks_id = $params['tasks_id'];
$iterator = $DB->request([
'FROM' => $this->getTable(),
'WHERE' => [
'plugin_glpiinventory_deploytasks_id' => $tasks_id,
'method' => 'deployinstall'
]
]);
$json = [];
$temp_tasks = [];
foreach ($iterator as $row) {
$row['packages'] = importArrayFromDB($row['definition']);
$row['actions'] = importArrayFromDB($row['action']);
$temp_tasks[] = $row;
}
$i = 0;
foreach ($temp_tasks as $task) {
foreach ($task['actions'] as $action) {
foreach ($task['packages'] as $package) {
$tmp = array_keys($action);
$action_type = $tmp[0];
$json['tasks'][$i]['package_id'] = $package['PluginGlpiinventoryDeployPackage'];
$json['tasks'][$i]['method'] = $task['method'];
$json['tasks'][$i]['comment'] = $task['comment'];
$json['tasks'][$i]['retry_nb'] = $task['retry_nb'];
$json['tasks'][$i]['retry_time'] = $task['retry_time'];
$json['tasks'][$i]['action_type'] = $action_type;
$json['tasks'][$i]['action_selection'] = $action[$action_type];
$obj_action = new $action_type();
$obj_action->getFromDB($action[$action_type]);
$json['tasks'][$i]['action_name'] = $obj_action->getField('name');
$i++;
}
}
}
return json_encode($json);
}
/**
* Save data
*
* @global object $DB
* @param array $params
*/
public function saveDatas($params)
{
global $DB;
$tasks_id = $params['tasks_id'];
$tasks = json_decode($params['tasks']);
//remove old jobs from task
$this->deleteByCriteria(['plugin_glpiinventory_deploytasks_id' => $tasks_id], true);
//get plugin id
$plug = new Plugin();
$plug->getFromDBbyDir('fusinvdeploy');
$plugins_id = $plug->getField('id');
//insert new rows
$sql_tasks = [];
$i = 0;
$qparam = new QueryParam();
$query = $DB::buildInsert(
$this->getTable(),
[
'plugin_glpiinventory_deploytasks_id' => $qparam,
'name' => $qparam,
'date_creation' => $qparam,
'entities_id' => $qparam,
'plugins_id' => $qparam,
'method' => $qparam,
'definition' => $qparam,
'action' => $qparam,
'retry_nb' => $qparam,
'retry_time' => $qparam,
'periodicity_type' => $qparam,
'periodicity_count' => $qparam
]
);
$stmt = $DB->prepare($query);
foreach ($tasks as $task) {
$task = get_object_vars($task);
//encode action and definition
//$action = exportArrayToDB(array(array(
// $task['action_type'] => $task['action_selection'])));
$action = exportArrayToDB($task['action']);
$definition = exportArrayToDB([[
'PluginGlpiinventoryDeployPackage' => $task['package_id']]]);
$job_name = "job_" . $tasks_id . "_" . $i;
$now = 'NOW()';
$entities_id = '0';
$period_type = 'minutes';
$period_count = '0';
$stmt->bind_param(
'ssssssssssss',
$tasks_id,
$job_name,
$now,
$entities_id,
$plugins_id,
$task['method'],
$definition,
$action,
$task['retry_nb'],
$task['retry_time'],
$period_type,
$period_count
);
$DB->executeStatement($stmt);
}
mysqli_stmt_close($stmt);
}
/**
* Get the different type of task job actions
*
* @return array
*/
public static function getActionTypes()
{
return [
[
'name' => __('Computers'),
'value' => 'Computer',
],
[
'name' => __('Group'),
'value' => 'Group',
],
[
'name' => __('Groups of computers', 'glpiinventory'),
'value' => 'PluginGlpiinventoryDeployGroup',
]
];
}
/**
* Get actions
*
* @global object $DB
* @param array $params
* @return string in JSON format
*/
public static function getActions($params)
{
global $DB;
$res = '';
if (!isset($params['get'])) {
exit;
}
switch ($params['get']) {
case "type":
$res = json_encode([
'action_types' => self::getActionTypes()
]);
break;
case "selection":
switch ($params['type']) {
case 'Computer':
$where = [];
if (isset($params['query'])) {
$where['name'] = ['LIKE', '%' . $params['query']];
}
$i = 0;
$iterator = $DB->request([
'SELECT' => ['id', 'name'],
'FROM' => 'glpi_computers',
'WHERE' => $where,
'ORDER' => 'name ASC'
]);
foreach ($iterator as $row) {
$res['action_selections'][$i]['id'] = $row['id'];
$res['action_selections'][$i]['name'] = $row['name'];
$i++;
}
$res = json_encode($res);
break;
case 'Group':
$like = [];
if (isset($params['query'])) {
//FIXME: not sure escape is mandatory here
$like += ['name' => ['LIKE', '%' . $DB->escape($params['query'])]];
}
$group = new Group();
$group_datas = $group->find($like);
$i = 0;
foreach ($group_datas as $group_data) {
$res['action_selections'][$i]['id'] = $group_data['id'];
$res['action_selections'][$i]['name'] = $group_data['name'];
$i++;
}
$res = json_encode($res);
break;
}
break;
case "oneSelection":
break;
default:
$res = '';
}
return $res;
}
}