%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/taskjoblog.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 this file directly"); } /** * Manage the logs of task job. */ class PluginGlpiinventoryTaskjoblog extends CommonDBTM { /** * Define state task started * * @var integer */ const TASK_STARTED = 1; /** * Define state task OK / successful * * @var integer */ const TASK_OK = 2; /** * Define state task in error * * @var integer */ const TASK_ERROR = 4; /** * Define state task information * * @var integer */ const TASK_INFO = 5; /** * Define state task running * * @var integer */ const TASK_RUNNING = 6; /** * Define state task prepared, so wait agent contact the server to get * this task * * @var integer */ const TASK_PREPARED = 7; /** * return array with state mapping name * * @return array with all elements */ public static function dropdownStateValues() { $elements = [ self::TASK_PREPARED => __('Prepared', 'glpiinventory'), self::TASK_STARTED => __('Started', 'glpiinventory'), self::TASK_RUNNING => __('Running'), self::TASK_OK => __('Ok', 'glpiinventory'), self::TASK_ERROR => __('Error'), self::TASK_INFO => __('Info', 'glpiinventory'), ]; return $elements; } /** * Get state name * * @param integer $state * @return string */ public static function getStateName($state = -1) { $state_names = self::dropdownStateValues(); if (isset($state_names[$state])) { return $state_names[$state]; } else { return NOT_AVAILABLE; } } /** * Get itemtype of task job state * * @global object $DB * @param integer $taskjoblogs_id * @return string */ public static function getStateItemtype($taskjoblogs_id) { global $DB; $params = ['FROM' => 'glpi_plugin_glpiinventory_taskjobstates', 'LEFT JOIN' => ['glpi_plugin_glpiinventory_taskjoblogs', ['FKEY' => ['glpi_plugin_glpiinventory_taskjoblogs' => 'plugin_glpiinventory_taskjobstates_id', 'glpi_plugin_glpiinventory_taskjobstates' => 'id']] ], 'FIELDS' => ['itemtype'], 'WHERE' => ['glpi_plugin_glpiinventory_taskjobstates.id' => $taskjoblogs_id], 'LIMIT' => 1 ]; $iterator = $DB->request($params); if ($iterator->numrows()) { $data = $iterator->current(); return $data['itemtype']; } else { return ''; } } /** * Get search function for the class * * @return array */ public function rawSearchOptions() { $tab = []; $tab[] = [ 'id' => 'common', 'name' => __('Logs') ]; $tab[] = [ 'id' => '1', 'table' => $this->getTable(), 'field' => 'id', 'name' => __('ID'), 'massiveaction' => false, // implicit field is i, ]; $tab[] = [ 'id' => '2', 'table' => 'glpi_plugin_glpiinventory_tasks', 'field' => 'name', 'name' => _n('Task', 'Tasks', 2), 'datatype' => 'itemlink', 'itemlink_type' => "PluginGlpiinventoryTask", ]; $tab[] = [ 'id' => '3', 'table' => 'glpi_plugin_glpiinventory_taskjobs', 'field' => 'name', 'name' => __('Job', 'glpiinventory'), 'datatype' => 'itemlink', 'itemlink_type' => "PluginGlpiinventoryTaskjob", ]; $tab[] = [ 'id' => '4', 'table' => $this->getTable(), 'field' => 'state', 'name' => __('Status'), 'searchtype' => 'equals', ]; $tab[] = [ 'id' => '5', 'table' => $this->getTable(), 'field' => 'date', 'name' => _n('Date', 'Dates', 1), 'datatype' => 'datetime', 'massiveaction' => false, ]; $tab[] = [ 'id' => '6', 'table' => 'glpi_plugin_glpiinventory_taskjobstates', 'field' => 'uniqid', 'name' => __('Unique id', 'glpiinventory'), 'datatype' => 'string', ]; $tab[] = [ 'id' => '7', 'table' => $this->getTable(), 'field' => 'comment', 'name' => __('Comments'), 'datatype' => 'string', ]; $tab[] = [ 'id' => '8', 'table' => "glpi_agents", 'field' => 'name', 'name' => __('Agent', 'glpiinventory'), 'datatype' => 'itemlink', 'forcegroupby' => true, 'joinparams' => [ 'beforejoin' => [ 'table' => 'glpi_plugin_glpiinventory_taskjobstates', 'joinparams' => ['jointype' => 'child'], ], ], ]; return $tab; } /** * Add a new line of log for a taskjob status * * @global object $DB * @param integer $taskjobstates_id id of the taskjobstate * @param integer $items_id id of the item associated with taskjob status * @param string $itemtype type name of the item associated with taskjob status * @param string $state state of this taskjobstate * @param string $comment the comment of this insertion */ public function addTaskjoblog($taskjobstates_id, $items_id, $itemtype, $state, $comment) { global $DB; $this->getEmpty(); unset($this->fields['id']); $this->fields['plugin_glpiinventory_taskjobstates_id'] = $taskjobstates_id; $this->fields['date'] = $_SESSION['glpi_currenttime']; $this->fields['items_id'] = $items_id; $this->fields['itemtype'] = $itemtype; $this->fields['state'] = $state; $this->fields['comment'] = $DB->escape($comment); $this->addToDB(); } /** * Get taskjobstate by uniqid * * @param string $uuid value uniqid * @return array with data of table glpi_plugin_glpiinventory_taskjobstates */ public static function getByUniqID($uuid) { $a_datas = getAllDataFromTable( 'glpi_plugin_glpiinventory_taskjobstates', ['uniqid' => $uuid], "1" ); foreach ($a_datas as $a_data) { return $a_data; } return []; } /** * Get div with text/color depend on state * * @param integer $state state number * @param string $type div / td * @return string complete node (opened and closed) */ public function getDivState($state, $type = 'div') { $width = '50'; switch ($state) { case self::TASK_PREPARED: return "<" . $type . " align='center' width='" . $width . "'>" . __('Prepared', 'glpiinventory') . "</" . $type . ">"; case self::TASK_STARTED: return "<" . $type . " align='center' width='" . $width . "'>" . __('Started', 'glpiinventory') . "</" . $type . ">"; case self::TASK_OK: return "<" . $type . " style='background-color: rgb(0, 255, 0);-moz-border-radius: 4px;" . "-webkit-border-radius: 4px;-o-border-radius: 4px;padding: 2px;' " . "align='center' width='" . $width . "'>" . "<strong>" . __('OK') . "</strong></" . $type . ">"; case self::TASK_ERROR: return "<" . $type . " style='background-color: rgb(255, 0, 0);-moz-border-radius: 4px;" . "-webkit-border-radius: 4px;-o-border-radius: 4px;padding: 2px;' align='center' " . "width='" . $width . "'>" . "<strong>" . __('Error') . "</strong></" . $type . ">"; case self::TASK_INFO: return "<" . $type . " style='background-color: rgb(255, 200, 0);-moz-border-radius: 4px;" . "-webkit-border-radius: 4px;-o-border-radius: 4px;padding: 2px;' " . "align='center' width='" . $width . "'>" . "<strong>" . __('unknown', 'glpiinventory') . "</strong></" . $type . ">"; case self::TASK_RUNNING: return "<" . $type . " style='background-color: rgb(255, 200, 0);-moz-border-radius: 4px;" . "-webkit-border-radius: 4px;-o-border-radius: 4px;padding: 2px;' " . "align='center' width='" . $width . "'>" . "<strong>" . __('Running') . "</strong></" . $type . ">"; } return ''; } /** * Convert comment by replace formatted message by translated message * * @param string $comment * @return string */ public static function convertComment($comment) { $matches = []; // Search for replace [[itemtype::items_id]] by link preg_match_all("/\[\[(.*)\:\:(.*)\]\]/", $comment, $matches); foreach ($matches[0] as $num => $commentvalue) { $classname = $matches[1][$num]; if ($classname != '' && class_exists($classname)) { $Class = new $classname(); $Class->getFromDB($matches[2][$num]); $comment = str_replace($commentvalue, $Class->getLink(), $comment); } } if (strstr($comment, "==")) { preg_match_all("/==([\w\d]+)==/", $comment, $matches); $a_text = [ 'devicesqueried' => __('devices queried', 'glpiinventory'), 'devicesfound' => __('devices found', 'glpiinventory'), 'addtheitem' => __('Add the item', 'glpiinventory'), 'updatetheitem' => __('Update the item', 'glpiinventory'), 'inventorystarted' => __('Inventory started', 'glpiinventory'), 'detail' => __('Detail', 'glpiinventory'), 'badtoken' => __('Agent communication error, impossible to start agent', 'glpiinventory'), 'agentcrashed' => __('Agent stopped/crashed', 'glpiinventory'), 'importdenied' => __('Import denied', 'glpiinventory') ]; foreach ($matches[0] as $num => $commentvalue) { $comment = str_replace($commentvalue, $a_text[$matches[1][$num]], $comment); } } return str_replace(",[", "<br/>[", $comment); } }