/**
  * @test
  */
 public function GetTaskWithoutJobs()
 {
     global $DB;
     // Verify prepare a deploy task
     $DB->connect();
     $pfTask = new PluginFusioninventoryTask();
     // create task
     $input = array('entities_id' => 0, 'name' => 'deploy', 'is_active' => 1);
     $pfTask->add($input);
     $running_tasks = $pfTask->getItemsFromDB(array('is_running' => TRUE, 'is_active' => TRUE));
     $this->assertEquals(array(), $running_tasks, 'Not find task because not have job');
 }
 function prepareRun($taskjobs_id)
 {
     global $DB;
     $task = new PluginFusioninventoryTask();
     $job = new PluginFusioninventoryTaskjob();
     $joblog = new PluginFusioninventoryTaskjoblog();
     $jobstate = new PluginFusioninventoryTaskjobstate();
     $agent = new PluginFusioninventoryAgent();
     $uniqid = uniqid();
     $job->getFromDB($taskjobs_id);
     $task->getFromDB($job->fields['plugin_fusioninventory_tasks_id']);
     $communication = $task->fields['communication'];
     $actions = importArrayFromDB($job->fields['action']);
     $definitions = importArrayFromDB($job->fields['definition']);
     $taskvalid = 0;
     $computers = array();
     foreach ($actions as $action) {
         $itemtype = key($action);
         $items_id = current($action);
         switch ($itemtype) {
             case 'Computer':
                 $computers[] = $items_id;
                 break;
             case 'Group':
                 $computer_object = new Computer();
                 //find computers by user associated with this group
                 $group_users = new Group_User();
                 $group = new Group();
                 $group->getFromDB($items_id);
                 $members = array();
                 $computers_a_1 = array();
                 $computers_a_2 = array();
                 //array_keys($group_users->find("groups_id = '$items_id'"));
                 $members = $group_users->getGroupUsers($items_id);
                 foreach ($members as $member) {
                     $computers = $computer_object->find("users_id = '{$member['id']}'");
                     foreach ($computers as $computer) {
                         $computers_a_1[] = $computer['id'];
                     }
                 }
                 //find computers directly associated with this group
                 $computers = $computer_object->find("groups_id = '{$items_id}'");
                 foreach ($computers as $computer) {
                     $computers_a_2[] = $computer['id'];
                 }
                 //merge two previous array and deduplicate entries
                 $computers = array_unique(array_merge($computers_a_1, $computers_a_2));
                 break;
             case 'PluginFusioninventoryDeployGroup':
                 $group = new PluginFusioninventoryDeployGroup();
                 $group->getFromDB($items_id);
                 switch ($group->getField('type')) {
                     case 'STATIC':
                         $query = "SELECT items_id\n                     FROM glpi_plugin_fusioninventory_deploygroups_staticdatas\n                     WHERE groups_id = '{$items_id}'\n                     AND itemtype = 'Computer'";
                         $res = $DB->query($query);
                         while ($row = $DB->fetch_assoc($res)) {
                             $computers[] = $row['items_id'];
                         }
                         break;
                     case 'DYNAMIC':
                         $query = "SELECT fields_array\n                     FROM glpi_plugin_fusioninventory_deploygroups_dynamicdatas\n                     WHERE groups_id = '{$items_id}'\n                     LIMIT 1";
                         $res = $DB->query($query);
                         $row = $DB->fetch_assoc($res);
                         if (isset($_GET)) {
                             $get_tmp = $_GET;
                         }
                         if (isset($_SESSION["glpisearchcount"]['Computer'])) {
                             unset($_SESSION["glpisearchcount"]['Computer']);
                         }
                         if (isset($_SESSION["glpisearchcount2"]['Computer'])) {
                             unset($_SESSION["glpisearchcount2"]['Computer']);
                         }
                         $_GET = importArrayFromDB($row['fields_array']);
                         $_GET["glpisearchcount"] = count($_GET['field']);
                         if (isset($_GET['field2'])) {
                             $_GET["glpisearchcount2"] = count($_GET['field2']);
                         }
                         $pfSearch = new PluginFusioninventorySearch();
                         Search::manageGetValues('Computer');
                         $glpilist_limit = $_SESSION['glpilist_limit'];
                         $_SESSION['glpilist_limit'] = 999999999;
                         $result = $pfSearch->constructSQL('Computer', $_GET);
                         $_SESSION['glpilist_limit'] = $glpilist_limit;
                         while ($data = $DB->fetch_array($result)) {
                             $computers[] = $data['id'];
                         }
                         if (count($get_tmp) > 0) {
                             $_GET = $get_tmp;
                         }
                         break;
                 }
                 break;
         }
     }
     $c_input = array();
     $c_input['plugin_fusioninventory_taskjobs_id'] = $taskjobs_id;
     $c_input['state'] = 0;
     $c_input['plugin_fusioninventory_agents_id'] = 0;
     $c_input['execution_id'] = $task->fields['execution_id'];
     $pfCollect = new PluginFusioninventoryCollect();
     foreach ($computers as $computer_id) {
         //get agent if for this computer
         $agents_id = $agent->getAgentWithComputerid($computer_id);
         if ($agents_id === FALSE) {
             $jobstates_id = $jobstate->add($c_input);
             $jobstate->changeStatusFinish($jobstates_id, 0, '', 1, "No agent found for [[Computer::" . $computer_id . "]]", 0, 0);
         } else {
             foreach ($definitions as $definition) {
                 $pfCollect->getFromDB($definition['PluginFusioninventoryCollect']);
                 switch ($pfCollect->fields['type']) {
                     case 'registry':
                         // get all registry
                         $pfCollect_Registry = new PluginFusioninventoryCollect_Registry();
                         $a_registries = $pfCollect_Registry->find("`plugin_fusioninventory_collects_id`='" . $pfCollect->fields['id'] . "'");
                         foreach ($a_registries as $data_r) {
                             $uniqid = uniqid();
                             $c_input['state'] = 0;
                             $c_input['itemtype'] = 'PluginFusioninventoryCollect_Registry';
                             $c_input['items_id'] = $data_r['id'];
                             $c_input['date'] = date("Y-m-d H:i:s");
                             $c_input['uniqid'] = $uniqid;
                             $c_input['plugin_fusioninventory_agents_id'] = $agents_id;
                             # Push the agent, in the stack of agent to awake
                             if ($communication == "push") {
                                 $_SESSION['glpi_plugin_fusioninventory']['agents'][$agents_id] = 1;
                             }
                             $jobstates_id = $jobstate->add($c_input);
                             //Add log of taskjob
                             $c_input['plugin_fusioninventory_taskjobstates_id'] = $jobstates_id;
                             $c_input['state'] = PluginFusioninventoryTaskjoblog::TASK_PREPARED;
                             $taskvalid++;
                             $joblog->add($c_input);
                         }
                         break;
                     case 'wmi':
                         // get all wmi
                         $pfCollect_Wmi = new PluginFusioninventoryCollect_Wmi();
                         $a_wmies = $pfCollect_Wmi->find("`plugin_fusioninventory_collects_id`='" . $pfCollect->fields['id'] . "'");
                         foreach ($a_wmies as $data_r) {
                             $uniqid = uniqid();
                             $c_input['state'] = 0;
                             $c_input['itemtype'] = 'PluginFusioninventoryCollect_Wmi';
                             $c_input['items_id'] = $data_r['id'];
                             $c_input['date'] = date("Y-m-d H:i:s");
                             $c_input['uniqid'] = $uniqid;
                             $c_input['plugin_fusioninventory_agents_id'] = $agents_id;
                             # Push the agent, in the stack of agent to awake
                             if ($communication == "push") {
                                 $_SESSION['glpi_plugin_fusioninventory']['agents'][$agents_id] = 1;
                             }
                             $jobstates_id = $jobstate->add($c_input);
                             //Add log of taskjob
                             $c_input['plugin_fusioninventory_taskjobstates_id'] = $jobstates_id;
                             $c_input['state'] = PluginFusioninventoryTaskjoblog::TASK_PREPARED;
                             $taskvalid++;
                             $joblog->add($c_input);
                         }
                         break;
                     case 'file':
                         // find files
                         $pfCollect_File = new PluginFusioninventoryCollect_File();
                         $a_files = $pfCollect_File->find("`plugin_fusioninventory_collects_id`='" . $pfCollect->fields['id'] . "'");
                         foreach ($a_files as $data_r) {
                             $uniqid = uniqid();
                             $c_input['state'] = 0;
                             $c_input['itemtype'] = 'PluginFusioninventoryCollect_File';
                             $c_input['items_id'] = $data_r['id'];
                             $c_input['date'] = date("Y-m-d H:i:s");
                             $c_input['uniqid'] = $uniqid;
                             $c_input['plugin_fusioninventory_agents_id'] = $agents_id;
                             # Push the agent, in the stack of agent to awake
                             if ($communication == "push") {
                                 $_SESSION['glpi_plugin_fusioninventory']['agents'][$agents_id] = 1;
                             }
                             $jobstates_id = $jobstate->add($c_input);
                             //Add log of taskjob
                             $c_input['plugin_fusioninventory_taskjobstates_id'] = $jobstates_id;
                             $c_input['state'] = PluginFusioninventoryTaskjoblog::TASK_PREPARED;
                             $taskvalid++;
                             $joblog->add($c_input);
                         }
                         break;
                 }
             }
         }
     }
     if ($taskvalid > 0) {
         $job->fields['status'] = 1;
         $job->update($job->fields);
     } else {
         $job->reinitializeTaskjobs($job->fields['plugin_fusioninventory_tasks_id']);
     }
 }
 function prepareRun($taskjobs_id)
 {
     $pfTask = new PluginFusioninventoryTask();
     $pfTaskjob = new PluginFusioninventoryTaskjob();
     $pfTaskjoblog = new PluginFusioninventoryTaskjoblog();
     $pfTaskjobstate = new PluginFusioninventoryTaskjobstate();
     $pfAgentmodule = new PluginFusioninventoryAgentmodule();
     $pfIPRange = new PluginFusioninventoryIPRange();
     $pfAgent = new PluginFusioninventoryAgent();
     $uniqid = uniqid();
     $pfTaskjob->getFromDB($taskjobs_id);
     $pfTask->getFromDB($pfTaskjob->fields['plugin_fusioninventory_tasks_id']);
     $communication = $pfTask->fields['communication'];
     //list all iprange
     $a_iprange = importArrayFromDB($pfTaskjob->fields['definition']);
     $count_ip = 0;
     $a_iprangelist = array();
     $a_subnet_nbip = array();
     foreach ($a_iprange as $iprange) {
         $iprange_id = current($iprange);
         $a_iprangelist[] = $iprange_id;
         $pfIPRange->getFromDB($iprange_id);
         $s = $pfIPRange->getIp2long($pfIPRange->fields['ip_start']);
         $e = $pfIPRange->getIp2long($pfIPRange->fields['ip_end']);
         $a_subnet_nbip[$iprange_id] = $e - $s;
         $count_ip += $e - $s;
     }
     //list all agents
     $a_agent = importArrayFromDB($pfTaskjob->fields['action']);
     $dynagent = 0;
     $a_agentlist = array();
     foreach ($a_agent as $agent) {
         $agent_id = current($agent);
         if ($agent_id == '.1') {
             $dynagent = 1;
         } else {
             if ($agent_id == '.2') {
                 $dynagent = 2;
             } else {
                 // Detect if agent exists
                 if ($pfAgent->getFromDB($agent_id)) {
                     if ($pfTask->fields['communication'] == 'pull') {
                         $a_agentlist[$agent_id] = 1;
                     } else {
                         if ($pfTaskjob->isAgentAlive('1', $agent_id)) {
                             $a_agentlist[$agent_id] = 1;
                         }
                     }
                 }
             }
         }
     }
     if ($dynagent == '1') {
         $a_agents = $pfAgentmodule->getAgentsCanDo('NETWORKDISCOVERY');
         foreach ($a_agents as $data) {
             if ($count_ip / 10 >= count($a_agentlist)) {
                 $pfAgent->getFromDB($data['id']);
                 $a_ip = $pfAgent->getIPs();
                 foreach ($a_ip as $ip) {
                     if ($pfTask->fields['communication'] == 'push') {
                         if ($pfTaskjob->isAgentAlive('1', $data['id'])) {
                             $a_agentlist[$data['id']] = 1;
                         }
                     } else {
                         if ($pfTask->fields['communication'] == 'pull') {
                             $a_agentlist[$data['id']] = 1;
                         }
                     }
                 }
             }
         }
     }
     if ($dynagent == '2') {
         // Dynamic with subnet
         $pfSnmpinventory = new PluginFusioninventoryNetworkinventory();
         $taskvalid = 0;
         foreach ($a_subnet_nbip as $iprange_id => $nbips) {
             //$maxagentpossible = $nbips/10;
             $pfIPRange->getFromDB($iprange_id);
             $a_agentListComplete = array();
             $a_agentList = $pfSnmpinventory->getAgentsSubnet($nbips, "push", "", $pfIPRange->fields['ip_start'], $pfIPRange->fields['ip_end']);
             if (isset($a_agentList)) {
                 $a_agentListComplete = array_merge($a_agentListComplete, $a_agentList);
             }
             if (!isset($a_agentListComplete) or empty($a_agentListComplete)) {
                 $a_input = array();
                 $a_input['plugin_fusioninventory_taskjobs_id'] = $taskjobs_id;
                 $a_input['plugin_fusioninventory_agents_id'] = 0;
                 $a_input['state'] = 1;
                 $a_input['itemtype'] = 'PluginFusioninventoryIPRange';
                 $a_input['items_id'] = $iprange_id;
                 $a_input['uniqid'] = $uniqid;
                 $a_input['execution_id'] = $task->fields['execution_id'];
                 $Taskjobstates_id = $pfTaskjobstate->add($a_input);
                 //Add log of taskjob
                 $a_input['plugin_fusioninventory_taskjobstates_id'] = $Taskjobstates_id;
                 $a_input['state'] = 7;
                 $a_input['date'] = date("Y-m-d H:i:s");
                 $pfTaskjoblog->add($a_input);
                 $pfTaskjobstate->changeStatusFinish($Taskjobstates_id, 0, 'PluginFusioninventoryIPRange', 1, "Unable to find agent to run this job");
                 $input_taskjob = array();
                 $input_taskjob['id'] = $pfTaskjob->fields['id'];
                 //$input_taskjob['status'] = 1;
                 $pfTaskjob->update($input_taskjob);
             } else {
                 $s = $pfIPRange->getIp2long($pfIPRange->fields['ip_start']);
                 $e = $pfIPRange->getIp2long($pfIPRange->fields['ip_end']);
                 $nbIpAgent = ceil(($e - $s) / count($a_agentListComplete));
                 $iptimes = 0;
                 foreach ($a_agentListComplete as $agent_id) {
                     $_SESSION['glpi_plugin_fusioninventory']['agents'][$agent_id] = 1;
                     //Add jobstate and put status (waiting on server = 0)
                     $a_input = array();
                     $a_input['plugin_fusioninventory_taskjobs_id'] = $taskjobs_id;
                     $a_input['state'] = 0;
                     $a_input['plugin_fusioninventory_agents_id'] = $agent_id;
                     $a_input['itemtype'] = 'PluginFusioninventoryIPRange';
                     $a_input['uniqid'] = $uniqid;
                     $a_input['execution_id'] = $task->fields['execution_id'];
                     $a_input['items_id'] = $iprange_id;
                     if ($iptimes + $nbIpAgent > $e - $s) {
                         $a_input['specificity'] = $iptimes . "-" . ($e - $s);
                     } else {
                         $a_input['specificity'] = $iptimes . "-" . ($iptimes + $nbIpAgent);
                     }
                     $taskvalid++;
                     $Taskjobstates_id = $pfTaskjobstate->add($a_input);
                     //Add log of taskjob
                     $a_input['plugin_fusioninventory_taskjobstates_id'] = $Taskjobstates_id;
                     $a_input['state'] = 7;
                     $a_input['date'] = date("Y-m-d H:i:s");
                     $pfTaskjoblog->add($a_input);
                     unset($a_input['state']);
                     $iptimes += $nbIpAgent + 1;
                     if ($iptimes >= $e - $s + 1) {
                         break;
                     }
                     $input_taskjob = array();
                     $input_taskjob['id'] = $pfTaskjob->fields['id'];
                     $input_taskjob['status'] = 1;
                     $pfTaskjob->update($input_taskjob);
                 }
             }
         }
         if ($taskvalid == "0") {
             $pfTaskjob->reinitializeTaskjobs($pfTaskjob->fields['plugin_fusioninventory_tasks_id']);
         }
         // *** Add jobstate
     } else {
         if (count($a_agentlist) == 0) {
             $a_input = array();
             $a_input['plugin_fusioninventory_taskjobs_id'] = $taskjobs_id;
             $a_input['state'] = 1;
             $a_input['plugin_fusioninventory_agents_id'] = 0;
             $a_input['itemtype'] = 'PluginFusioninventoryIPRange';
             $a_input['items_id'] = 0;
             $a_input['uniqid'] = $uniqid;
             $a_input['execution_id'] = $task->fields['execution_id'];
             $Taskjobstates_id = $pfTaskjobstate->add($a_input);
             //Add log of taskjob
             $a_input['plugin_fusioninventory_taskjobstates_id'] = $Taskjobstates_id;
             $a_input['state'] = 7;
             $a_input['date'] = date("Y-m-d H:i:s");
             $pfTaskjoblog->add($a_input);
             $pfTaskjobstate->changeStatusFinish($Taskjobstates_id, 0, 'PluginFusioninventoryIPRange', 1, "Unable to find agent to run this job");
             $input_taskjob = array();
             $input_taskjob['id'] = $pfTaskjob->fields['id'];
             //$input_taskjob['status'] = 1;
             $pfTaskjob->update($input_taskjob);
         } else {
             $iptimes = 0;
             $nbIpadded = 0;
             $break = 0;
             $numberIpByAgent = ceil($count_ip / count($a_agentlist));
             $a_iprangelistTmp = $a_iprangelist;
             $ip_id = array_shift($a_iprangelistTmp);
             foreach ($a_agentlist as $agent_id => $ip) {
                 //Add jobstate and put status (waiting on server = 0)
                 $a_input = array();
                 $a_input['plugin_fusioninventory_taskjobs_id'] = $taskjobs_id;
                 $a_input['state'] = 0;
                 $a_input['plugin_fusioninventory_agents_id'] = $agent_id;
                 $a_input['itemtype'] = 'PluginFusioninventoryIPRange';
                 $a_input['uniqid'] = $uniqid;
                 $a_input['execution_id'] = $task->fields['execution_id'];
                 //            $nbIpAgent = $numberIpByAgent;
                 $nbIpadded = 0;
                 foreach ($a_iprangelist as $iprange_id) {
                     if ($ip_id == $iprange_id) {
                         $pfIPRange->getFromDB($iprange_id);
                         $s = $pfIPRange->getIp2long($pfIPRange->fields['ip_start']);
                         $e = $pfIPRange->getIp2long($pfIPRange->fields['ip_end']);
                         if ($communication == "push") {
                             $_SESSION['glpi_plugin_fusioninventory']['agents'][$agent_id] = 1;
                         }
                         $a_input['items_id'] = $iprange_id;
                         $nbIpAgent = $numberIpByAgent - $nbIpadded;
                         if ($iptimes + $nbIpAgent > $e - $s) {
                             $a_input['specificity'] = $iptimes . "-" . ($e - $s);
                             $nbIpadded = $e - $s - $iptimes;
                             $ip_id = array_shift($a_iprangelistTmp);
                             $iptimes = 0;
                         } else {
                             $a_input['specificity'] = $iptimes . "-" . ($iptimes + $nbIpAgent);
                             $iptimes += $nbIpAgent + 1;
                             $nbIpadded = 0;
                             $break = 1;
                         }
                         $Taskjobstates_id = $pfTaskjobstate->add($a_input);
                         //Add log of taskjob
                         $a_input['plugin_fusioninventory_taskjobstates_id'] = $Taskjobstates_id;
                         $a_input['state'] = 7;
                         $a_input['date'] = date("Y-m-d H:i:s");
                         $pfTaskjoblog->add($a_input);
                         unset($a_input['state']);
                     }
                 }
                 $input_taskjob = array();
                 $input_taskjob['id'] = $pfTaskjob->fields['id'];
                 $input_taskjob['status'] = 1;
                 $pfTaskjob->update($input_taskjob);
             }
         }
     }
     return $uniqid;
 }
 function getRunningTasks()
 {
     $this->running_tasks = PluginFusioninventoryTask::getItemsFromDB(array('is_active' => TRUE, 'is_running' => TRUE, 'definitions' => array(__CLASS__ => $this->fields['id']), 'by_entities' => FALSE));
 }
#!/usr/bin/php
<?php 
$doc = <<<DOC
prepare_jobs.php

Usage:
   prepare_jobs.php [-h | -q | -d ]

-h, --help     show this help
-q, --quiet    run quietly
-d, --debug    display more execution messages

DOC;
chdir(dirname($_SERVER["SCRIPT_FILENAME"]));
include "../../../inc/includes.php";
include "./docopt.php";
require "./logging.php";
$_SESSION["glpicronuserrunning"] = 1;
/**
 * Process arguments passed to the script
 */
$docopt = new \Docopt\Handler();
$args = $docopt->handle($doc);
$logger = new Logging();
$logger->setLevelFromArgs($args['--quiet'], $args['--debug']);
$task = new PluginFusioninventoryTask();
$task->cronTaskscheduler();
 /**
  * @test
  */
 public function PrinterToInventoryWithoutIP()
 {
     self::restore_database();
     $printer = new Printer();
     $networkport = new NetworkPort();
     $networkName = new NetworkName();
     $pfPrinter = new PluginFusioninventoryPrinter();
     $pfTask = new PluginFusioninventoryTask();
     $pfTaskjob = new PluginFusioninventoryTaskjob();
     $computer = new Computer();
     $pfAgent = new PluginFusioninventoryAgent();
     $communication = new PluginFusioninventoryCommunication();
     // Create computers + agents
     $input = array('entities_id' => 0, 'name' => 'computer1');
     $computers_id = $computer->add($input);
     $input = array('entities_id' => 0, 'name' => 'computer1', 'version' => '{"INVENTORY":"v2.3.11"}', 'device_id' => 'computer1', 'useragent' => 'FusionInventory-Agent_v2.3.11', 'computers_id' => $computers_id);
     $pfAgent->add($input);
     // Create printer
     $input = array('name' => 'printer 001', 'entities_id' => 0);
     $printers_id = $printer->add($input);
     // Add port
     $networkports_id = $networkport->add(array('itemtype' => 'Printer', 'instantiation_type' => 'NetworkPortEthernet', 'items_id' => $printers_id, 'entities_id' => 0));
     $networknames_id = $networkName->add(array('entities_id' => 0, 'itemtype' => 'NetworkPort', 'items_id' => $networkports_id));
     $input = array('printers_id' => 1, 'plugin_fusioninventory_configsecurities_id' => 2);
     $pfPrinter->add($input);
     // Add task
     // create task
     $input = array('entities_id' => 0, 'name' => 'network inventory', 'is_active' => 1);
     $tasks_id = $pfTask->add($input);
     // create taskjob
     $input = array('plugin_fusioninventory_tasks_id' => $tasks_id, 'entities_id' => 0, 'name' => 'inventory', 'method' => 'networkinventory', 'targets' => '[{"Printer":"' . $printers_id . '"}]', 'actors' => '[{"PluginFusioninventoryAgent":"1"}]');
     $pfTaskjob->add($input);
     PluginFusioninventoryTask::cronTaskscheduler();
     $data = $pfTask->getJoblogs(array(1));
     // Task is prepared
     // Agent will get data
     $communication->getTaskAgent(1);
     $message = $communication->getMessage();
     $json = json_encode($message);
     $array = json_decode($json, TRUE);
     $ref = array();
     $this->assertEquals($ref, $array, 'XML of SNMP inventory task');
 }
Пример #7
0
  FusionInventory 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 FusionInventory. If not, see <http://www.gnu.org/licenses/>.

  ------------------------------------------------------------------------

  @package   FusionInventory
  @author    David Durieux
  @co-author
  @copyright Copyright (c) 2010-2015 FusionInventory team
  @license   AGPL License 3.0 or (at your option) any later version
             http://www.gnu.org/licenses/agpl-3.0-standalone.html
  @link      http://www.fusioninventory.org/
  @link      http://forge.fusioninventory.org/projects/fusioninventory-for-glpi/
  @since     2010

  ------------------------------------------------------------------------
*/
include "../../../inc/includes.php";
Html::header(__('FusionInventory', 'fusioninventory'), $_SERVER["PHP_SELF"], "plugins", "pluginfusioninventorymenu", "task");
Session::checkRight('plugin_fusioninventory_task', READ);
PluginFusioninventoryMenu::displayMenu("mini");
//PluginFusioninventoryTaskjob::isAllowurlfopen();
$pfTask = new PluginFusioninventoryTask();
$pfTask->showList();
Html::footer();
 /**
  * Purge task and taskjob related with method
  *
  * @param $method value name of the method
  *
  * @return nothing
  *
  **/
 static function cleanTasksbyMethod($method)
 {
     $pfTaskjob = new PluginFusioninventoryTaskjob();
     $pfTask = new PluginFusioninventoryTask();
     $a_taskjobs = $pfTaskjob->find("`method`='" . $method . "'");
     $task_id = 0;
     foreach ($a_taskjobs as $a_taskjob) {
         $pfTaskjob->delete($a_taskjob, 1);
         if ($task_id != $a_taskjob['plugin_fusioninventory_tasks_id'] and $task_id != '0') {
             // Search if this task have other taskjobs, if not, we will delete it
             $findtaskjobs = $pfTaskjob->find("`plugin_fusioninventory_tasks_id`='" . $task_id . "'");
             if (count($findtaskjobs) == '0') {
                 $pfTask->delete(array('id' => $task_id), 1);
             }
         }
         $task_id = $a_taskjob['plugin_fusioninventory_tasks_id'];
     }
     if ($task_id != '0') {
         // Search if this task have other taskjobs, if not, we will delete it
         $findtaskjobs = $pfTaskjob->find("`plugin_fusioninventory_tasks_id`='" . $task_id . "'");
         if (count($findtaskjobs) == '0') {
             $pfTask->delete(array('id' => $task_id), 1);
         }
     }
 }
  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 FusionInventory. If not, see <http://www.gnu.org/licenses/>.

  ------------------------------------------------------------------------

  @package   FusionInventory
  @author    David Durieux
  @co-author
  @copyright Copyright (c) 2010-2015 FusionInventory team
  @license   AGPL License 3.0 or (at your option) any later version
             http://www.gnu.org/licenses/agpl-3.0-standalone.html
  @link      http://www.fusioninventory.org/
  @link      http://forge.fusioninventory.org/projects/fusioninventory-for-glpi/
  @since     2010

  ------------------------------------------------------------------------
*/
include "../../../inc/includes.php";
$pfTask = new PluginFusioninventoryTask();
Html::header(__('FusionInventory', 'fusioninventory'), $_SERVER["PHP_SELF"], "plugins", "pluginfusioninventorymenu", "task");
Session::checkRight('plugin_fusioninventory_task', READ);
PluginFusioninventoryMenu::displayMenu("mini");
//PluginFusioninventoryTaskjob::isAllowurlfopen();
//Submit the task form parameters
$pfTask->submitForm($_POST);
//If there is no form to submit, display the form
$pfTask->display($_GET);
Html::footer();
            $taskjob->update($input_taskjob);
        } else {
            Session::checkRight('plugin_fusioninventory_iprange', UPDATE);
            if ($iprange->checkip($_POST)) {
                $_POST['ip_start'] = (int) $_POST['ip_start0'] . "." . (int) $_POST['ip_start1'] . ".";
                $_POST['ip_start'] .= (int) $_POST['ip_start2'] . "." . (int) $_POST['ip_start3'];
                $_POST['ip_end'] = (int) $_POST['ip_end0'] . "." . (int) $_POST['ip_end1'] . ".";
                $_POST['ip_end'] .= (int) $_POST['ip_end2'] . "." . (int) $_POST['ip_end3'];
                $iprange->update($_POST);
            }
        }
        Html::back();
    } else {
        if (isset($_POST["delete"])) {
            if (isset($_POST['communication'])) {
                $task = new PluginFusioninventoryTask();
                $task->delete(array('id' => $_POST['task_id']), 1);
                $_SERVER['HTTP_REFERER'] = str_replace("&allowcreate=1", "", $_SERVER['HTTP_REFERER']);
                Html::back();
            } else {
                Session::checkRight('plugin_fusioninventory_"iprange', PURGE);
                $iprange->delete($_POST);
                Html::redirect(Toolbox::getItemTypeSearchURL('PluginFusioninventoryIPRange'));
            }
        }
    }
}
$id = "";
if (isset($_GET["id"])) {
    $id = $_GET["id"];
}
header("Content-Type: text/html; charset=UTF-8");
header_nocache();
if (!isset($_POST["ID"])) {
    exit;
}
if (!isset($_POST["sort"])) {
    $_POST["sort"] = "";
}
if (!isset($_POST["order"])) {
    $_POST["order"] = "";
}
if (!isset($_POST["withtemplate"])) {
    $_POST["withtemplate"] = "";
}
$pfia = new PluginFusioninventoryAgents();
$pfit = new PluginFusioninventoryTask();
switch ($_POST['glpi_tab']) {
    case -1:
        showPorts($_POST["ID"], PLUGIN_FUSIONINVENTORY_MAC_UNKNOWN);
        $pfit->RemoteStateAgent(GLPI_ROOT . '/plugins/fusioninventory/front/agents.state.php', $_POST["ID"], PLUGIN_FUSIONINVENTORY_MAC_UNKNOWN, array('INVENTORY' => 1, 'NETDISCOVERY' => 1, 'WAKEONLAN' => 1));
        showHistory(PLUGIN_FUSIONINVENTORY_MAC_UNKNOWN, $_POST["ID"]);
        break;
    case 1:
        showPorts($_POST["ID"], PLUGIN_FUSIONINVENTORY_MAC_UNKNOWN);
        break;
    case 2:
        $pfit->RemoteStateAgent(GLPI_ROOT . '/plugins/fusioninventory/front/agents.state.php', $_POST["ID"], PLUGIN_FUSIONINVENTORY_MAC_UNKNOWN, array('INVENTORY' => 1, 'NETDISCOVERY' => 1, 'WAKEONLAN' => 1));
        break;
    case 3:
        showHistory(PLUGIN_FUSIONINVENTORY_MAC_UNKNOWN, $_POST["ID"]);
        break;
 /**
  * @test
  */
 public function deleteTask()
 {
     global $DB;
     $pfTask = new PluginFusioninventoryTask();
     $pfTaskjob = new PluginFusioninventoryTaskjob();
     $pfTaskjobState = new PluginFusioninventoryTaskjobstate();
     $pfTaskjoblog = new PluginFusioninventoryTaskjoblog();
     //delete task
     $return = $pfTask->delete(array('id' => self::$tasks_id));
     $this->assertEquals(true, $return);
     //check deletion of job
     $jobs_found = $pfTaskjob->find("id = " . self::$taskjobs_id);
     $this->assertEquals(array(), $jobs_found);
     //check deletion of state
     $states_found = $pfTaskjobState->find("id = " . self::$taskjobstates_id);
     $this->assertEquals(array(), $states_found);
     //check deletion of log
     $logs_found = $pfTaskjoblog->find("id = " . self::$taskjobstates_id);
     $this->assertEquals(array(), $logs_found);
 }
$state = $ptc->importToken(gzuncompress($GLOBALS["HTTP_RAW_POST_DATA"]));
if ($state == '2') {
    // agent created
    $ocsinventory = '1';
}
$top0 = gettimeofday();
if (!$ptc->import(gzuncompress($GLOBALS["HTTP_RAW_POST_DATA"]))) {
    //if ($ac->connectionOK($errors)) {
    if (1) {
        $res .= "1'" . $errors . "'";
        $p_xml = gzuncompress($GLOBALS["HTTP_RAW_POST_DATA"]);
        $pxml = @simplexml_load_string($p_xml);
        if (isset($pxml->DEVICEID)) {
            $ptc->setXML("<?xml version='1.0' encoding='ISO-8859-1'?>\n<REPLY>\n</REPLY>");
            $pta = new PluginFusioninventoryAgents();
            $ptt = new PluginFusioninventoryTask();
            $ptcm = new PluginFusioninventoryConfigModules();
            $a_agent = $pta->InfosByKey($pxml->DEVICEID);
            $a_tasks = $ptt->find("`agent_id`='" . $a_agent['ID'] . "'", "date");
            $single = 0;
            $_SESSION['glpi_plugin_fusioninventory_addagentprocess'] = '0';
            foreach ($a_tasks as $task_id => $datas) {
                if ($a_tasks[$task_id]['action'] == 'INVENTORY' and $ptcm->isActivated('inventoryocs') and $a_agent['module_inventory'] == '1') {
                    $ptc->addInventory();
                    $input['ID'] = $task_id;
                    $ptt->delete($input);
                    $ocsinventory = '0';
                    $single = 1;
                }
                if ($a_tasks[$task_id]['action'] == 'NETDISCOVERY' and $ptcm->isActivated('netdiscovery') and $a_agent['module_netdiscovery'] == '1') {
                    $single = 1;
<?php 
$doc = <<<DOC
get_job_logs.php

Usage:
   get_job_logs.php [-h | -q | -d ] [-m methods] [-t task_ids]

-h, --help     Show this help
-q, --quiet    Run quietly
-d, --debug    Show informations.

-m, --methods=methods   Show only tasks defined with a list of methods (separated by commas).
-t, --tasks=task_ids    Filter logs by tasks (separated by commas)
DOC;
chdir(dirname($_SERVER["SCRIPT_FILENAME"]));
include "../../../inc/includes.php";
include "./docopt.php";
require "./logging.php";
/**
 * Process arguments passed to the script
 */
$docopt = new \Docopt\Handler();
$args = $docopt->handle($doc);
$logger = new Logging();
$logger->setLevelFromArgs($args['--quiet'], $args['--debug']);
$logger->debug($args);
/*
 * Get Running Tasks
 */
$logs = PluginFusioninventoryTask::getJobLogs();
$logger->info($logs);
 /**
  * Get all devices and put in taskjobstate each task for
  * each device for each agent
  *
  * @param type $taskjobs_id id of taskjob esx
  *
  * @return uniqid value
  */
 function prepareRun($taskjobs_id)
 {
     $task = new PluginFusioninventoryTask();
     $job = new PluginFusioninventoryTaskjob();
     $joblog = new PluginFusioninventoryTaskjoblog();
     $jobstate = new PluginFusioninventoryTaskjobstate();
     $uniqid = uniqid();
     $job->getFromDB($taskjobs_id);
     $task->getFromDB($job->fields['plugin_fusioninventory_tasks_id']);
     $communication = $task->fields['communication'];
     //list all agents
     $agent_actions = importArrayFromDB($job->fields['action']);
     $task_definitions = importArrayFromDB($job->fields['definition']);
     $agent_actionslist = array();
     foreach ($agent_actions as $targets) {
         foreach ($targets as $itemtype => $items_id) {
             $item = new $itemtype();
             // Detect if agent exists
             if ($item->getFromDB($items_id)) {
                 $agent_actionslist[$items_id] = 1;
             }
         }
     }
     // *** Add jobstate
     if (empty($agent_actionslist)) {
         $a_input = array();
         $a_input['plugin_fusioninventory_taskjobs_id'] = $taskjobs_id;
         $a_input['state'] = 0;
         $a_input['plugin_fusioninventory_agents_id'] = 0;
         $a_input['uniqid'] = $uniqid;
         $a_input['execution_id'] = $task->fields['execution_id'];
         foreach ($task_definitions as $task_definition) {
             foreach ($task_definition as $task_itemtype => $task_items_id) {
                 $a_input['itemtype'] = $task_itemtype;
                 $a_input['items_id'] = $task_items_id;
                 $jobstates_id = $jobstate->add($a_input);
                 //Add log of taskjob
                 $a_input['plugin_fusioninventory_taskjobstates_id'] = $jobstates_id;
                 $a_input['state'] = PluginFusioninventoryTaskjoblog::TASK_PREPARED;
                 $a_input['date'] = date("Y-m-d H:i:s");
                 $joblog->add($a_input);
                 $jobstate->changeStatusFinish($jobstates_id, 0, 'PluginFusioninventoryInventoryComputerESX', 1, "Unable to find agent to run this job");
             }
         }
         $job->update($job->fields);
     } else {
         foreach ($agent_actions as $targets) {
             foreach ($targets as $items_id) {
                 if ($communication == "push") {
                     $_SESSION['glpi_plugin_fusioninventory']['agents'][$items_id] = 1;
                 }
                 foreach ($task_definitions as $task_definition) {
                     foreach ($task_definition as $task_itemtype => $task_items_id) {
                         $a_input = array();
                         $a_input['plugin_fusioninventory_taskjobs_id'] = $taskjobs_id;
                         $a_input['state'] = 0;
                         $a_input['plugin_fusioninventory_agents_id'] = $items_id;
                         $a_input['itemtype'] = $task_itemtype;
                         $a_input['items_id'] = $task_items_id;
                         $a_input['uniqid'] = $uniqid;
                         $a_input['date'] = date("Y-m-d H:i:s");
                         $a_input['execution_id'] = $task->fields['execution_id'];
                         $jobstates_id = $jobstate->add($a_input);
                         //Add log of taskjob
                         $a_input['plugin_fusioninventory_taskjobstates_id'] = $jobstates_id;
                         $a_input['state'] = PluginFusioninventoryTaskjoblog::TASK_PREPARED;
                         $joblog->add($a_input);
                         unset($a_input['state']);
                     }
                 }
             }
         }
         $job->fields['status'] = 1;
         $job->update($job->fields);
     }
     return $uniqid;
 }
 static function board()
 {
     global $DB;
     // Computers
     $query = "SELECT * FROM `glpi_plugin_fusioninventory_inventorycomputercomputers`" . " LEFT JOIN `glpi_computers` " . "    ON (`glpi_plugin_fusioninventory_inventorycomputercomputers`.`id`=`glpi_computers`.`id` " . "       AND `glpi_computers`.`is_deleted`='0')" . " WHERE `glpi_computers`.`id` IS NOT NULL";
     $result = $DB->query($query);
     $fusionComputers = $DB->numrows($result);
     $allComputers = countElementsInTable('glpi_computers', "`is_deleted`='0' AND `is_template`='0'");
     $dataComputer = array();
     $dataComputer[] = array('key' => 'FusionInventory computers : ' . $fusionComputers, 'y' => $fusionComputers, 'color' => '#3dff7d');
     $dataComputer[] = array('key' => 'Other computers : ' . ($allComputers - $fusionComputers), 'y' => $allComputers - $fusionComputers, 'color' => "#dedede");
     // SNMP
     $networkequipment = countElementsInTable('glpi_plugin_fusioninventory_networkequipments');
     $printer = countElementsInTable('glpi_plugin_fusioninventory_printers');
     $dataSNMP = array();
     $dataSNMP[] = array('key' => 'NetworkEquipments (SNMP) : ' . $networkequipment, 'y' => $networkequipment, 'color' => '#3d94ff');
     $dataSNMP[] = array('key' => 'Printers (SNMP) : ' . $printer, 'y' => $printer, 'color' => '#3dff7d');
     // switches ports
     $allSwitchesPortSNMP = countElementsInTable('glpi_plugin_fusioninventory_networkports');
     $query = "SELECT `glpi_networkports`.`id` FROM `glpi_networkports`\n              LEFT JOIN `glpi_plugin_fusioninventory_networkports`\n                 ON `glpi_plugin_fusioninventory_networkports`.`networkports_id` = `glpi_networkports`.`id`\n              LEFT JOIN glpi_networkports_networkports\n                  ON (`networkports_id_1`=`glpi_networkports`.`id`\n                     OR `networkports_id_2`=`glpi_networkports`.`id`)\n              WHERE `glpi_plugin_fusioninventory_networkports`.`id` IS NOT NULL\n                  AND `glpi_networkports_networkports`.`id` IS NOT NULL";
     $result = $DB->query($query);
     $networkPortsLinked = $DB->numrows($result);
     $dataPortL = array();
     $dataPortL[] = array('key' => 'SNMP switch network ports linked : ' . $networkPortsLinked, 'y' => $networkPortsLinked, 'color' => '#3dff7d');
     $dataPortL[] = array('key' => 'SNMP switch network ports not linked : ' . ($allSwitchesPortSNMP - $networkPortsLinked), 'y' => $allSwitchesPortSNMP - $networkPortsLinked, 'color' => '#dedede');
     // Ports connected at last SNMP inventory
     $networkPortsConnected = countElementsInTable('glpi_plugin_fusioninventory_networkports', "`ifstatus`='1' OR `ifstatus`='up'");
     $dataPortC = array();
     $dataPortC[] = array('key' => 'Ports connected : ' . $networkPortsConnected, 'y' => $networkPortsConnected, 'color' => '#3dff7d');
     $dataPortC[] = array('key' => 'Ports not connected : ' . ($allSwitchesPortSNMP - $networkPortsConnected), 'y' => $allSwitchesPortSNMP - $networkPortsConnected, 'color' => '#dedede');
     // Number of computer inventories in last hour, 6 hours, 24 hours
     $dataInventory = PluginFusioninventoryInventoryComputerStat::getLastHours();
     // Deploy
     $query = "SELECT `plugin_fusioninventory_tasks_id` FROM glpi_plugin_fusioninventory_taskjobs" . " WHERE method LIKE '%deploy%'" . " GROUP BY `plugin_fusioninventory_tasks_id`";
     $result = $DB->query($query);
     $a_tasks = array();
     while ($data = $DB->fetch_array($result)) {
         $a_tasks[] = $data['plugin_fusioninventory_tasks_id'];
     }
     $pfTask = new PluginFusioninventoryTask();
     $data = $pfTask->getJoblogs($a_tasks);
     $dataDeploy = array();
     $dataDeploy[0] = array('key' => 'Prepared and waiting', 'y' => 0, 'color' => '#efefef');
     $dataDeploy[1] = array('key' => 'Running', 'y' => 0, 'color' => '#aaaaff');
     $dataDeploy[2] = array('key' => 'Successfull', 'y' => 0, 'color' => '#aaffaa');
     $dataDeploy[3] = array('key' => 'In error', 'y' => 0, 'color' => '#ff0000');
     foreach ($data['tasks'] as $lev1) {
         foreach ($lev1['jobs'] as $lev2) {
             foreach ($lev2['targets'] as $lev3) {
                 $dataDeploy[2]['y'] += count($lev3['counters']['agents_success']);
                 $dataDeploy[3]['y'] += count($lev3['counters']['agents_error']);
                 $dataDeploy[0]['y'] += count($lev3['counters']['agents_prepared']);
                 $dataDeploy[1]['y'] += count($lev3['counters']['agents_running']);
             }
         }
     }
     for ($k = 0; $k < 4; $k++) {
         $dataDeploy[$k]['key'] .= " : " . $dataDeploy[$k]['y'];
     }
     echo "<table align='center'>";
     echo "<tr height='280'>";
     echo "<td width='380'>";
     self::showChart('computers', $dataComputer);
     echo "</td>";
     echo "<td width='380'>";
     $title = __('Number of computer inventories of last hours', 'fusioninventory');
     $title = '';
     self::showChartBar('nbinventory', $dataInventory, $title);
     echo "</td>";
     echo "<td width='380'>";
     self::showChart('deploy', $dataDeploy, __('Deployment', 'fusioninventory'));
     echo "</td>";
     echo "</tr>";
     echo "<tr height='280'>";
     echo "<td>";
     self::showChart('snmp', $dataSNMP);
     echo "</td>";
     echo "<td>";
     self::showChart('ports', $dataPortL);
     echo "</td>";
     echo "<td>";
     self::showChart('portsconnected', $dataPortC);
     echo "</td>";
     echo "</tr>";
     echo "</table>";
 }
 /**
  * Display each history line
  *
  * @param $taskjobstates_id integer id of the taskjobstate
  *
  * @return nothing
  *
  **/
 function showHistoryLines($taskjobstates_id, $displayprocess = 1, $displaytaskjob = 0, $nb_td = '5')
 {
     global $CFG_GLPI;
     $pfTaskjobstate = new PluginFusioninventoryTaskjobstate();
     $pfAgent = new PluginFusioninventoryAgent();
     $pfTaskjobstate->getFromDB($taskjobstates_id);
     $displayforceend = 0;
     $a_history = $this->find('`plugin_fusioninventory_taskjobstates_id` = "' . $pfTaskjobstate->fields['id'] . '"', 'id DESC', '1');
     echo "<tr class='tab_bg_1'>";
     echo "<td width='40' id='plusmoins" . $pfTaskjobstate->fields["id"] . "'><img src='" . $CFG_GLPI['root_doc'] . "/plugins/fusioninventory/pics/expand.png' " . "onClick='document.getElementById(\"viewfollowup" . $pfTaskjobstate->fields["id"] . "\").show();close_array(" . $pfTaskjobstate->fields["id"] . ");' /></td>";
     echo "<td>";
     echo $pfTaskjobstate->fields['uniqid'];
     echo "</td>";
     if ($displayprocess == '1') {
         echo "<td>";
         echo $pfTaskjobstate->fields['id'];
         echo "</td>";
     }
     if ($displaytaskjob == '1') {
         $pfTaskjob = new PluginFusioninventoryTaskjob();
         $pfTask = new PluginFusioninventoryTask();
         $pfTaskjob->getFromDB($pfTaskjobstate->fields['plugin_fusioninventory_taskjobs_id']);
         $pfTask->getFromDB($pfTaskjob->fields['plugin_fusioninventory_tasks_id']);
         echo "<td>";
         echo $pfTaskjob->getLink(1) . " (" . $pfTask->getLink() . ")";
         echo "</td>";
     }
     echo "<td>";
     $pfAgent->getFromDB($pfTaskjobstate->fields['plugin_fusioninventory_agents_id']);
     echo $pfAgent->getLink(1);
     Ajax::UpdateItemOnEvent('plusmoins' . $pfTaskjobstate->fields["id"], 'viewfollowup' . $pfTaskjobstate->fields["id"], $CFG_GLPI['root_doc'] . "/plugins/fusioninventory/ajax/showtaskjoblogdetail.php", array('agents_id' => $pfTaskjobstate->fields['plugin_fusioninventory_agents_id'], 'uniqid' => $pfTaskjobstate->fields['uniqid']), array("click"));
     echo "</td>";
     $a_return = $this->displayHistoryDetail(array_pop($a_history), 0);
     $count = $a_return[0];
     $displayforceend += $count;
     echo $a_return[1];
     if ($displayforceend == "0") {
         echo "<td align='center'>";
         echo "<form name='form' method='post' action='" . $CFG_GLPI['root_doc'] . "/plugins/fusioninventory/front/taskjob.form.php'>";
         echo "<input type='hidden' name='taskjobstates_id' value='" . $pfTaskjobstate->fields['id'] . "' />";
         echo "<input type='hidden' name='taskjobs_id' value='" . $pfTaskjobstate->fields['plugin_fusioninventory_taskjobs_id'] . "' />";
         echo '<input name="forceend" value="' . __('Force the end', 'fusioninventory') . '"
          class="submit" type="submit">';
         Html::closeForm();
         echo "</td>";
     }
     echo "</tr>";
     echo "<tr>";
     echo "<td colspan='" . $nb_td . "' style='display: none;' id='viewfollowup" . $pfTaskjobstate->fields["id"] . "' class='tab_bg_4'>";
     echo "</td>";
     echo "</tr>";
 }
 /**
  * Submit Form values
  */
 public function submitForm($postvars)
 {
     if (isset($postvars['definition_add'])) {
         // * Add a definition
         $mytaskjob->getFromDB($postvars['id']);
         $a_listdef = importArrayFromDB($mytaskjob->fields['definition']);
         $add = 1;
         foreach ($a_listdef as $dataDB) {
             if (isset($dataDB[$postvars['DefinitionType']]) and $dataDB[$postvars['DefinitionType']] == $postvars['definitionselectiontoadd']) {
                 $add = 0;
                 break;
             }
         }
         if ($add == '1') {
             if (isset($postvars['DefinitionType']) and $postvars['DefinitionType'] != '') {
                 $a_listdef[] = array($postvars['DefinitionType'] => $postvars['definitionselectiontoadd']);
             }
         }
         $input = array();
         $input['id'] = $postvars['id'];
         $input['definition'] = exportArrayToDB($a_listdef);
         $mytaskjob->update($input);
         Html::back();
     } else {
         if (isset($postvars['action_add'])) {
             // * Add an action
             $mytaskjob->getFromDB($postvars['id']);
             $a_listact = importArrayFromDB($mytaskjob->fields['action']);
             $add = 1;
             foreach ($a_listact as $dataDB) {
                 if (isset($dataDB[$postvars['ActionType']]) and $dataDB[$postvars['ActionType']] == $postvars['actionselectiontoadd']) {
                     $add = 0;
                     break;
                 }
             }
             if ($add == '1') {
                 if (isset($postvars['ActionType']) and $postvars['ActionType'] != '') {
                     $a_listact[] = array($postvars['ActionType'] => $postvars['actionselectiontoadd']);
                 }
             }
             $input = array();
             $input['id'] = $postvars['id'];
             $input['action'] = exportArrayToDB($a_listact);
             $mytaskjob->update($input);
             Html::back();
         } else {
             if (isset($postvars['definition_delete'])) {
                 // * Delete definition
                 $mytaskjob->getFromDB($postvars['id']);
                 $a_listdef = importArrayFromDB($mytaskjob->fields['definition']);
                 foreach ($postvars['definition_to_delete'] as $itemdelete) {
                     $datadel = explode('-', $itemdelete);
                     foreach ($a_listdef as $num => $dataDB) {
                         if (isset($dataDB[$datadel[0]]) and $dataDB[$datadel[0]] == $datadel[1]) {
                             unset($a_listdef[$num]);
                         }
                     }
                 }
                 $input = array();
                 $input['id'] = $postvars['id'];
                 $input['definition'] = exportArrayToDB($a_listdef);
                 $mytaskjob->update($input);
                 Html::back();
             } else {
                 if (isset($postvars['action_delete'])) {
                     // * Delete action
                     $mytaskjob->getFromDB($postvars['id']);
                     $a_listact = importArrayFromDB($mytaskjob->fields['action']);
                     foreach ($postvars['action_to_delete'] as $itemdelete) {
                         $datadel = explode('-', $itemdelete);
                         foreach ($a_listact as $num => $dataDB) {
                             if (isset($dataDB[$datadel[0]]) and $dataDB[$datadel[0]] == $datadel[1]) {
                                 unset($a_listact[$num]);
                             }
                         }
                     }
                     $input = array();
                     $input['id'] = $postvars['id'];
                     $input['action'] = exportArrayToDB($a_listact);
                     $mytaskjob->update($input);
                     Html::back();
                     /**
                      * Wizard related method disabled for 0.85
                      * TODO: cf. TaskJob::showQuickForm()
                      */
                     //} else if (isset($postvars['quickform'])) {
                     //   $pfTask = new PluginFusioninventoryTask();
                     //   if (isset($postvars['update'])) {
                     //      $mytaskjob->getFromDB($postvars['id']);
                     //      $pfTask->getFromDB($mytaskjob->fields['plugin_fusioninventory_tasks_id']);
                     //   }
                     //   $inputtaskjob = array();
                     //   $inputtask = array();
                     //   if (isset($postvars['update'])) {
                     //      $inputtaskjob['id'] = $postvars['id'];
                     //      $inputtask['id'] = $mytaskjob->fields['plugin_fusioninventory_tasks_id'];
                     //   }
                     //   $inputtaskjob['name'] = $postvars['name'];
                     //   if (isset($postvars['add']) OR $pfTask->fields['name'] == '') {
                     //      $inputtask['name'] = $postvars['name'];
                     //   }
                     //   $inputtask['is_active'] = $postvars['is_active'];
                     //   $inputtaskjob['method'] = $postvars['method'];
                     //   $inputtask['communication'] = $postvars['communication'];
                     //   $inputtask['periodicity_count'] = $postvars['periodicity_count'];
                     //   $inputtask['periodicity_type'] = $postvars['periodicity_type'];
                     //   $inputtask['entities_id'] = $_SESSION['glpiactive_entity'];
                     //   $inputtaskjob['entities_id'] = $_SESSION['glpiactive_entity'];
                     //   if (isset($postvars['update'])) {
                     //      $mytaskjob->update($inputtaskjob);
                     //      $pfTask->update($inputtask);
                     //      Html::back();
                     //   } else if (isset($postvars['add'])) {
                     //      if (!isset($postvars['entities_id'])) {
                     //         $postvars['entities_id'] = $_SESSION['glpidefault_entity'];
                     //      }
                     //      // Get entity of task
                     //      if (isset($postvars['plugin_fusioninventory_tasks_id'])) {
                     //         $pfTask = new PluginFusioninventoryTask();
                     //         $pfTask->getFromDB($postvars['plugin_fusioninventory_tasks_id']);
                     //         $entities_list = getSonsOf('glpi_entities', $pfTask->fields['entities_id']);
                     //         if (!in_array($postvars['entities_id'], $entities_list)) {
                     //            $postvars['entities_id'] = $pfTask->fields['entities_id'];
                     //         }
                     //      } else {
                     //         $inputtask['date_scheduled'] = date("Y-m-d H:i:s");
                     //         $task_id = $pfTask->add($inputtask);
                     //         $inputtaskjob['plugin_fusioninventory_tasks_id'] = $task_id;
                     //      }
                     //      if (isset($postvars['method_id'])) {
                     //         $postvars['method']  = $postvars['method_id'];
                     //      }
                     //      $inputtaskjob['plugins_id'] = $postvars['method-'.$postvars['method']];
                     //      $taskjobs_id = $mytaskjob->add($inputtaskjob);
                     //      $redirect = $_SERVER['HTTP_REFERER'];
                     //      $redirect = str_replace('&id=0', '&id='.$taskjobs_id, $redirect);
                     //      Html::redirect($redirect);
                     //   }
                 } else {
                     if (isset($postvars['taskjobstoforcerun'])) {
                         // * Force running many tasks (wizard)
                         Session::checkRight('plugin_fusioninventory_task', UPDATE);
                         $pfTaskjob = new PluginFusioninventoryTaskjob();
                         $_SESSION["plugin_fusioninventory_forcerun"] = array();
                         foreach ($postvars['taskjobstoforcerun'] as $taskjobs_id) {
                             $pfTaskjob->getFromDB($taskjobs_id);
                             $uniqid = $pfTaskjob->forceRunningTask($pfTaskjob->fields['plugin_fusioninventory_tasks_id']);
                             $_SESSION["plugin_fusioninventory_forcerun"][$taskjobs_id] = $uniqid;
                         }
                         unset($_SESSION["MESSAGE_AFTER_REDIRECT"]);
                     } else {
                         if (isset($postvars['add']) || isset($postvars['update'])) {
                             // * Add and update taskjob
                             Session::checkRight('plugin_fusioninventory_task', CREATE);
                             if (isset($postvars['add'])) {
                                 if (!isset($postvars['entities_id'])) {
                                     $postvars['entities_id'] = $_SESSION['glpidefault_entity'];
                                 }
                                 // Get entity of task
                                 $pfTask = new PluginFusioninventoryTask();
                                 $pfTask->getFromDB($postvars['plugin_fusioninventory_tasks_id']);
                                 $entities_list = getSonsOf('glpi_entities', $pfTask->fields['entities_id']);
                                 if (!in_array($postvars['entities_id'], $entities_list)) {
                                     $postvars['entities_id'] = $pfTask->fields['entities_id'];
                                 }
                                 //$postvars['execution_id'] = $pfTask->fields['execution_id'];
                                 $this->add($postvars);
                             } else {
                                 if (isset($postvars['method_id'])) {
                                     $postvars['method'] = $postvars['method_id'];
                                 }
                                 $targets = array();
                                 if (array_key_exists('targets', $postvars) and is_array($postvars['targets']) and count($postvars['targets']) > 0) {
                                     foreach ($postvars['targets'] as $target) {
                                         list($itemtype, $itemid) = explode('-', $target);
                                         $targets[] = array($itemtype => $itemid);
                                     }
                                 }
                                 $postvars['targets'] = exportArrayToDB($targets);
                                 $actors = array();
                                 if (array_key_exists('actors', $postvars) and is_array($postvars['actors']) and count($postvars['actors']) > 0) {
                                     foreach ($postvars['actors'] as $actor) {
                                         list($itemtype, $itemid) = explode('-', $actor);
                                         $actors[] = array($itemtype => $itemid);
                                     }
                                 }
                                 $postvars['actors'] = exportArrayToDB($actors);
                                 //TODO: get rid of plugins_id and just use method
                                 //$postvars['plugins_id'] = $postvars['method-'.$postvars['method']];
                                 $this->update($postvars);
                             }
                         } else {
                             if (isset($postvars["delete"])) {
                                 // * delete taskjob
                                 Session::checkRight('plugin_fusioninventory_task', PURGE);
                                 $this->delete($postvars);
                             } elseif (isset($postvars['itemaddaction'])) {
                                 $array = explode("||", $postvars['methodaction']);
                                 $module = $array[0];
                                 $method = $array[1];
                                 // Add task
                                 $mytask = new PluginFusioninventoryTask();
                                 $input = array();
                                 $input['name'] = $method;
                                 $task_id = $mytask->add($input);
                                 // Add job with this device
                                 $input = array();
                                 $input['plugin_fusioninventory_tasks_id'] = $task_id;
                                 $input['name'] = $method;
                                 $input['datetime_start'] = $postvars['datetime_start'];
                                 $input['plugins_id'] = PluginFusioninventoryModule::getModuleId($module);
                                 $input['method'] = $method;
                                 $a_selectionDB = array();
                                 $a_selectionDB[][$postvars['itemtype']] = $postvars['items_id'];
                                 $input['definition'] = exportArrayToDB($a_selectionDB);
                                 $taskname = "plugin_" . $module . "_task_selection_type_" . $method;
                                 if (is_callable($taskname)) {
                                     $input['selection_type'] = call_user_func($taskname, $postvars['itemtype']);
                                 }
                                 $mytaskjob->add($input);
                                 // Upsate task to activate it
                                 $mytask->getFromDB($task_id);
                                 $mytask->fields['is_active'] = "1";
                                 $mytask->update($mytask->fields);
                                 // force running this job (?)
                             } elseif (isset($postvars['forceend'])) {
                                 $taskjobstate = new PluginFusioninventoryTaskjobstate();
                                 $pfTaskjob = new PluginFusioninventoryTaskjob();
                                 $mytaskjobstate->getFromDB($postvars['taskjobstates_id']);
                                 $jobstate = $mytaskjobstate->fields;
                                 $a_taskjobstates = $mytaskjobstate->find("`uniqid`='" . $mytaskjobstate->fields['uniqid'] . "'");
                                 foreach ($a_taskjobstates as $data) {
                                     if ($data['state'] != PluginFusioninventoryTaskjobstate::FINISHED) {
                                         $mytaskjobstate->changeStatusFinish($data['id'], 0, '', 1, "Action cancelled by user", 0, 0);
                                     }
                                 }
                                 $pfTaskjob->getFromDB($jobstate['plugin_fusioninventory_taskjobs_id']);
                                 $pfTaskjob->reinitializeTaskjobs($pfTaskjob->fields['plugin_fusioninventory_tasks_id']);
                             } elseif (isset($postvars['delete_taskjobs'])) {
                                 foreach ($postvars['taskjobs'] as $taskjob_id) {
                                     $input = array('id' => $taskjob_id);
                                     $this->delete($input, true);
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
 }
  FusionInventory 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 FusionInventory. If not, see <http://www.gnu.org/licenses/>.

  ------------------------------------------------------------------------

  @package   FusionInventory
  @author    David Durieux
  @co-author
  @copyright Copyright (c) 2010-2015 FusionInventory team
  @license   AGPL License 3.0 or (at your option) any later version
             http://www.gnu.org/licenses/agpl-3.0-standalone.html
  @link      http://www.fusioninventory.org/
  @link      http://forge.fusioninventory.org/projects/fusioninventory-for-glpi/
  @since     2010

  ------------------------------------------------------------------------
*/
include "../../../inc/includes.php";
Html::header(__('FusionInventory', 'fusioninventory'), $_SERVER["PHP_SELF"], "plugins", "pluginfusioninventorymenu", "taskjoblog");
Session::checkRight('plugin_fusioninventory_task', READ);
PluginFusioninventoryMenu::displayMenu("mini");
$pfTask = new PluginFusioninventoryTask();
$pfTask->menuTasksLogs();
Search::show('PluginFusioninventoryTaskjoblog');
Html::footer();
Пример #20
0
header("Content-Type: text/html; charset=UTF-8");
header_nocache();
if (!isset($_POST["ID"])) {
    exit;
}
if (!isset($_POST["sort"])) {
    $_POST["sort"] = "";
}
if (!isset($_POST["order"])) {
    $_POST["order"] = "";
}
if (!isset($_POST["withtemplate"])) {
    $_POST["withtemplate"] = "";
}
$pfia = new PluginFusioninventoryAgents();
$pfit = new PluginFusioninventoryTask();
$pfia->showForm($_POST['target'], $_POST["ID"]);
switch ($_POST['glpi_tab']) {
    case -1:
        $pfia->showFormAdvancedOptions($_POST['target'], $_POST["ID"]);
        $pfit->RemoteStateAgent($_POST['target'], $_POST["ID"], PLUGIN_FUSIONINVENTORY_SNMP_AGENTS, array('INVENTORY' => 1, 'NETDISCOVERY' => 1, 'SNMPQUERY' => 1, 'WAKEONLAN' => 1));
        break;
    case 1:
        $pfia->showFormAdvancedOptions($_POST['target'], $_POST["ID"]);
        break;
    case 2:
        $pfit->RemoteStateAgent($_POST['target'], $_POST["ID"], PLUGIN_FUSIONINVENTORY_SNMP_AGENTS, array('INVENTORY' => 1, 'NETDISCOVERY' => 1, 'SNMPQUERY' => 1, 'WAKEONLAN' => 1));
        break;
    default:
        $pfia->showFormAdvancedOptions($_POST['target'], $_POST["ID"]);
        break;
Пример #21
0
  @since     2010

  ------------------------------------------------------------------------
*/
ob_start();
include "../../../../inc/includes.php";
ob_end_clean();
$response = FALSE;
//Agent communication using REST protocol
if (isset($_GET['action'])) {
    switch ($_GET['action']) {
        case 'getJobs':
            if (isset($_GET['machineid'])) {
                $pfAgent = new PluginFusioninventoryAgent();
                $pfAgentModule = new PluginFusioninventoryAgentModule();
                $pfTask = new PluginFusioninventoryTask();
                $pfTaskjob = new PluginFusioninventoryTaskjob();
                $pfTaskjobstate = new PluginFusioninventoryTaskjobstate();
                $agent = $pfAgent->InfosByKey(Toolbox::addslashes_deep($_GET['machineid']));
                if (isset($agent['id'])) {
                    $taskjobstates = $pfTask->getTaskjobstatesForAgent($agent['id'], array('deployinstall', 'deployuninstall'));
                    if (!$pfAgentModule->isAgentCanDo("DEPLOY", $agent['id'])) {
                        foreach ($taskjobstates as $taskjobstate) {
                            $taskjobstate->cancel(__("Deploy module has been disabled for this agent", 'fusioninventory'));
                        }
                        $response = "{}";
                    } else {
                        //sort taskjobs by key id
                        /**
                         * TODO: sort taskjobs by 'index' field in the taskjob query since it can be
                         * manipulated by drag and drop (cf. Task::getTaskjobsForAgent() ).
 static function displayTabContentForItem(CommonGLPI $item, $tabnum = 1, $withtemplate = 0)
 {
     if ($tabnum == 'task') {
         $pfTask = new PluginFusioninventoryTask();
         $pfTask->showJobLogs();
         $pfTaskjob = new PluginFusioninventoryTaskjob();
         $a_taskjobs = $pfTaskjob->find('`targets` LIKE \'%"PluginFusioninventoryIPRange":"' . $item->getID() . '"%\'');
         foreach ($a_taskjobs as $data) {
             //$pfTask->getFromDB($data['plugin_fusioninventory_tasks_id']);
         }
     }
 }
include "../../../inc/includes.php";
header("Content-Type: text/html; charset=UTF-8");
Html::header_nocache();
if (!isset($_POST["id"])) {
    exit;
}
if (!isset($_POST["sort"])) {
    $_POST["sort"] = "";
}
if (!isset($_POST["order"])) {
    $_POST["order"] = "";
}
if (!isset($_POST["withtemplate"])) {
    $_POST["withtemplate"] = "";
}
$pfTask = new PluginFusioninventoryTask();
$pfTaskjoblog = new PluginFusioninventoryTaskjoblog();
$pfTaskjob = new PluginFusioninventoryTaskjob();
$a_taskjob = $pfTaskjob->find("`plugin_fusioninventory_tasks_id`='" . $_POST["id"] . "'\n      AND `rescheduled_taskjob_id`='0' ", "id");
$i = 1;
switch ($_POST['glpi_tab']) {
    case -1:
        foreach ($a_taskjob as $taskjob_id => $datas) {
            $pfTaskjob->showForm($taskjob_id);
            $pfTaskjoblog->showHistory($taskjob_id);
            $taskjob_id_next = $taskjob_id;
            for ($j = 2; $j > 1; $j++) {
                $a_taskjobreties = $pfTaskjob->find("`rescheduled_taskjob_id`='" . $taskjob_id_next . "' ", "", 1);
                if (!empty($a_taskjobreties)) {
                    foreach ($a_taskjobreties as $taskjob_id_next => $datas2) {
                        $pfTaskjob->showForm($taskjob_id_next);
Пример #24
0
  ------------------------------------------------------------------------
*/
//This call is to check that the ESX inventory service is up and running
if (isset($_GET['status'])) {
    return 'ok';
}
ob_start();
include "../../../../inc/includes.php";
ob_end_clean();
$response = FALSE;
//Agent communication using REST protocol
if (isset($_GET['action']) && isset($_GET['machineid'])) {
    switch ($_GET['action']) {
        case 'getJobs':
            $pfAgent = new PluginFusioninventoryAgent();
            $pfTask = new PluginFusioninventoryTask();
            $pfTaskjob = new PluginFusioninventoryTaskjob();
            $pfTaskjobstate = new PluginFusioninventoryTaskjobstate();
            $agent = $pfAgent->InfosByKey(Toolbox::addslashes_deep($_GET['machineid']));
            if (isset($agent['id'])) {
                $taskjobstates = $pfTask->getTaskjobstatesForAgent($agent['id'], array('InventoryComputerESX'));
                ////start of json response
                $order = new stdClass();
                $order->jobs = array();
                $module = new PluginFusioninventoryInventoryComputerESX();
                foreach ($taskjobstates as $taskjobstate) {
                    $order->jobs[] = $module->run($taskjobstate);
                    $taskjobstate->changeStatus($taskjobstate->fields['id'], $taskjobstate::SERVER_HAS_SENT_DATA);
                }
                // return an empty dictionnary if there are no jobs.
                if (count($order->jobs) == 0) {
  You should have received a copy of the GNU Affero General Public License
  along with FusionInventory. If not, see <http://www.gnu.org/licenses/>.

  ------------------------------------------------------------------------

  @package   FusionInventory
  @author    David Durieux
  @co-author Kevin Roy
  @copyright Copyright (c) 2010-2015 FusionInventory team
  @license   AGPL License 3.0 or (at your option) any later version
             http://www.gnu.org/licenses/agpl-3.0-standalone.html
  @link      http://www.fusioninventory.org/
  @link      http://forge.fusioninventory.org/projects/fusioninventory-for-glpi/
  @since     2010

  ------------------------------------------------------------------------
*/
if (strpos($_SERVER['PHP_SELF'], "taskjob_logs.php")) {
    include "../../../inc/includes.php";
    Session::checkCentralAccess();
}
//unlock session since access checks have been done
session_write_close();
header("Content-Type: text/html; charset=UTF-8");
Html::header_nocache();
$pfTask = new PluginFusioninventoryTask();
$pfTask->ajaxGetJobLogs($_GET);
?>

 function prepareRun($taskjob_id, $definitions_filter = NULL)
 {
     global $DB;
     $task = new PluginFusioninventoryTask();
     $job = new PluginFusioninventoryTaskjob();
     $joblog = new PluginFusioninventoryTaskjoblog();
     $jobstate = new PluginFusioninventoryTaskjobstate();
     $agent = new PluginFusioninventoryAgent();
     $agentmodule = new PluginFusioninventoryAgentmodule();
     $job->getFromDB($taskjob_id);
     $task->getFromDB($job->fields['plugin_fusioninventory_tasks_id']);
     $communication = $task->fields['communication'];
     $actions = importArrayFromDB($job->fields['action']);
     $definitions = importArrayFromDB($job->fields['definition']);
     $taskvalid = 0;
     $computers = array();
     foreach ($actions as $action) {
         $itemtype = key($action);
         $items_id = current($action);
         switch ($itemtype) {
             case 'Computer':
                 if ($this->definitionFiltered("Computer", $definitions_filter)) {
                     break;
                 }
                 $computers[] = $items_id;
                 break;
             case 'Group':
                 if ($this->definitionFiltered("Group", $definitions_filter)) {
                     break;
                 }
                 $computer_object = new Computer();
                 //find computers by user associated with this group
                 $group_users = new Group_User();
                 $group = new Group();
                 $group->getFromDB($items_id);
                 $members = array();
                 $computers_a_1 = array();
                 $computers_a_2 = array();
                 //array_keys($group_users->find("groups_id = '$items_id'"));
                 $members = $group_users->getGroupUsers($items_id);
                 foreach ($members as $member) {
                     $computers = $computer_object->find("users_id = '{$member['id']}' " . " AND `is_deleted`='0' AND `is_template`='0'");
                     foreach ($computers as $computer) {
                         $computers_a_1[] = $computer['id'];
                     }
                 }
                 //find computers directly associated with this group
                 $computers = $computer_object->find("groups_id = '{$items_id}' " . " AND `is_deleted`='0' AND `is_template`='0'");
                 foreach ($computers as $computer) {
                     $computers_a_2[] = $computer['id'];
                 }
                 //merge two previous array and deduplicate entries
                 $computers = array_unique(array_merge($computers_a_1, $computers_a_2));
                 break;
             case 'PluginFusioninventoryDeployGroup':
                 $group = new PluginFusioninventoryDeployGroup();
                 $group->getFromDB($items_id);
                 switch ($group->getField('type')) {
                     case 'STATIC':
                         if ($this->definitionFiltered("PluginFusioninventoryDeployGroupStatic", $definitions_filter)) {
                             break;
                         }
                         $query = "SELECT items_id\n                     FROM glpi_plugin_fusioninventory_deploygroups_staticdatas\n                     WHERE groups_id = '{$items_id}'\n                     AND itemtype = 'Computer'";
                         $res = $DB->query($query);
                         while ($row = $DB->fetch_assoc($res)) {
                             $computers[] = $row['items_id'];
                         }
                         break;
                     case 'DYNAMIC':
                         if ($this->definitionFiltered("PluginFusioninventoryDeployGroupDynamic", $definitions_filter)) {
                             break;
                         }
                         //$definitions_filter is NULL = update by crontask !
                         if ($definitions_filter != NULL) {
                             $where = " AND `can_update_group`='1'";
                         } else {
                             $where = "";
                         }
                         $query = "SELECT fields_array\n                     FROM glpi_plugin_fusioninventory_deploygroups_dynamicdatas\n                     WHERE groups_id = '{$items_id}' {$where}\n                     LIMIT 1";
                         $res = $DB->query($query);
                         $row = $DB->fetch_assoc($res);
                         //No dynamic groups have been found : break
                         if ($DB->numrows($res) == 0) {
                             break;
                         }
                         if (isset($_GET)) {
                             $get_tmp = $_GET;
                         }
                         if (isset($_SESSION["glpisearchcount"]['Computer'])) {
                             unset($_SESSION["glpisearchcount"]['Computer']);
                         }
                         if (isset($_SESSION["glpisearchcount2"]['Computer'])) {
                             unset($_SESSION["glpisearchcount2"]['Computer']);
                         }
                         $_GET = importArrayFromDB($row['fields_array']);
                         $_GET["glpisearchcount"] = count($_GET['field']);
                         if (isset($_GET['field2'])) {
                             $_GET["glpisearchcount2"] = count($_GET['field2']);
                         }
                         $pfSearch = new PluginFusioninventorySearch();
                         Search::manageParams('Computer');
                         $glpilist_limit = $_SESSION['glpilist_limit'];
                         $_SESSION['glpilist_limit'] = 999999999;
                         $result = $pfSearch->constructSQL('Computer', $_GET);
                         $_SESSION['glpilist_limit'] = $glpilist_limit;
                         while ($data = $DB->fetch_array($result)) {
                             $computers[] = $data['id'];
                         }
                         if (count($get_tmp) > 0) {
                             $_GET = $get_tmp;
                         }
                         break;
                 }
                 break;
         }
     }
     //Remove duplicatas from array
     //We are using isset for faster processing than array_unique because we might have many
     //entries in this list.
     $tmp_computers = array();
     foreach ($computers as $computer) {
         if (!isset($tmp_computers[$computer])) {
             $tmp_computers[$computer] = 1;
         }
     }
     $computers = array_keys($tmp_computers);
     $c_input = array();
     $c_input['plugin_fusioninventory_taskjobs_id'] = $job->fields['id'];
     $c_input['state'] = 0;
     $c_input['plugin_fusioninventory_agents_id'] = 0;
     $c_input['execution_id'] = $task->fields['execution_id'];
     $package = new PluginFusioninventoryDeployPackage();
     foreach ($computers as $computer_id) {
         //Unique Id match taskjobstatuses for an agent(computer)
         foreach ($definitions as $definition) {
             $uniqid = uniqid();
             $package->getFromDB($definition['PluginFusioninventoryDeployPackage']);
             $c_input['state'] = 0;
             $c_input['itemtype'] = 'PluginFusioninventoryDeployPackage';
             $c_input['items_id'] = $package->fields['id'];
             $c_input['date'] = date("Y-m-d H:i:s");
             $c_input['uniqid'] = $uniqid;
             //get agent for this computer
             $agents_id = $agent->getAgentWithComputerid($computer_id);
             if ($agents_id === FALSE) {
                 $jobstates_id = $jobstate->add($c_input);
                 $jobstate->changeStatusFinish($jobstates_id, 0, '', 1, "No agent found for [[Computer::" . $computer_id . "]]", 0, 0);
             } else {
                 if ($agentmodule->isAgentCanDo('DEPLOY', $agents_id)) {
                     $c_input['plugin_fusioninventory_agents_id'] = $agents_id;
                     $jobstates_running = $jobstate->find(implode(" ", array("    `itemtype` = 'PluginFusioninventoryDeployPackage'", "AND `items_id` = " . $package->fields['id'], "AND `state` <> " . PluginFusioninventoryTaskjobstate::FINISHED, "AND `plugin_fusioninventory_agents_id` = " . $agents_id)));
                     if (count($jobstates_running) == 0) {
                         # Push the agent, in the stack of agent to awake
                         if ($communication == "push") {
                             $_SESSION['glpi_plugin_fusioninventory']['agents'][$agents_id] = 1;
                         }
                         $jobstates_id = $jobstate->add($c_input);
                         //Add log of taskjob
                         $c_input['plugin_fusioninventory_taskjobstates_id'] = $jobstates_id;
                         $c_input['state'] = PluginFusioninventoryTaskjoblog::TASK_PREPARED;
                         $taskvalid++;
                         $joblog->add($c_input);
                         unset($c_input['state']);
                         unset($c_input['plugin_fusioninventory_agents_id']);
                     }
                 }
             }
         }
     }
     if ($taskvalid > 0) {
         $job->fields['status'] = 1;
         $job->update($job->fields);
     } else {
         $job->reinitializeTaskjobs($job->fields['plugin_fusioninventory_tasks_id']);
     }
 }
 function prepareRun($taskjobs_id)
 {
     global $DB;
     $pfTask = new PluginFusioninventoryTask();
     $pfTaskjob = new PluginFusioninventoryTaskjob();
     $pfTaskjoblog = new PluginFusioninventoryTaskjoblog();
     $pfTaskjobstate = new PluginFusioninventoryTaskjobstate();
     $pfIPRange = new PluginFusioninventoryIPRange();
     $pfAgent = new PluginFusioninventoryAgent();
     $a_specificity = array();
     $a_specificity['DEVICE'] = array();
     $uniqid = uniqid();
     $pfTaskjob->getFromDB($taskjobs_id);
     $pfTask->getFromDB($pfTaskjob->fields['plugin_fusioninventory_tasks_id']);
     $NetworkEquipment = new NetworkEquipment();
     $NetworkPort = new NetworkPort();
     /*
      * * Different possibilities  :
      * IP RANGE
      * NetworkEquipment
      * Printer
      *
      * We will count total number of devices to query
      */
     // get all snmpauth
     $a_snmpauth = getAllDatasFromTable("glpi_plugin_fusioninventory_configsecurities");
     // get items_id by type
     $a_iprange = array();
     $a_NetworkEquipment = array();
     $a_Printer = array();
     $communication = $pfTask->fields['communication'];
     $a_definition = importArrayFromDB($pfTaskjob->fields['definition']);
     foreach ($a_definition as $datas) {
         $itemtype = key($datas);
         $items_id = current($datas);
         switch ($itemtype) {
             case 'PluginFusioninventoryIPRange':
                 $a_iprange[] = $items_id;
                 break;
             case 'NetworkEquipment':
                 $query = "SELECT `glpi_networkequipments`.`id` AS `gID`,\n                         `glpi_ipaddresses`.`name` AS `gnifaddr`,\n                         `plugin_fusioninventory_configsecurities_id`,\n                  FROM `glpi_networkequipments`\n                  LEFT JOIN `glpi_plugin_fusioninventory_networkequipments`\n                       ON `networkequipments_id`=`glpi_networkequipments`.`id`\n                  LEFT JOIN `glpi_networkports`\n                       ON `glpi_networkports`.`items_id`=`glpi_networkequipments`.`id`\n                          AND `glpi_networkports`.`itemtype`='NetworkEquipment'\n                  LEFT JOIN `glpi_networknames`\n                       ON `glpi_networknames`.`items_id`=`glpi_networkports`.`id`\n                          AND `glpi_networknames`.`itemtype`='NetworkPort'\n                  LEFT JOIN `glpi_ipaddresses`\n                       ON `glpi_ipaddresses`.`items_id`=`glpi_networknames`.`id`\n                          AND `glpi_ipaddresses`.`itemtype`='NetworkName'\n                  WHERE `glpi_networkequipments`.`is_deleted`='0'\n                       AND `plugin_fusioninventory_configsecurities_id`!='0'\n                       AND `glpi_networkequipments`.`id` = '" . $items_id . "'\n                       AND `glpi_ipaddresses`.`name`!=''\n                  LIMIT 1";
                 $result = $DB->query($query);
                 while ($data = $DB->fetch_array($result)) {
                     if (isset($a_snmpauth[$data['plugin_fusioninventory_configsecurities_id']])) {
                         $input = array();
                         $input['TYPE'] = 'NETWORKING';
                         $input['ID'] = $data['gID'];
                         $input['IP'] = $data['gnifaddr'];
                         $input['AUTHSNMP_ID'] = $data['plugin_fusioninventory_configsecurities_id'];
                         $a_specificity['DEVICE']['NetworkEquipment' . $data['gID']] = $input;
                         $a_NetworkEquipment[] = $items_id;
                     }
                 }
                 break;
             case 'Printer':
                 $query = "SELECT `glpi_printers`.`id` AS `gID`,\n                         `glpi_ipaddresses`.`name` AS `gnifaddr`,\n                         `plugin_fusioninventory_configsecurities_id`,\n                  FROM `glpi_printers`\n                  LEFT JOIN `glpi_plugin_fusioninventory_printers`\n                          ON `printers_id`=`glpi_printers`.`id`\n                  LEFT JOIN `glpi_networkports`\n                       ON `glpi_networkports`.`items_id`=`glpi_printers`.`id`\n                          AND `glpi_networkports`.`itemtype`='Printer'\n                  LEFT JOIN `glpi_networknames`\n                       ON `glpi_networknames`.`items_id`=`glpi_networkports`.`id`\n                          AND `glpi_networknames`.`itemtype`='NetworkPort'\n                  LEFT JOIN `glpi_ipaddresses`\n                       ON `glpi_ipaddresses`.`items_id`=`glpi_networknames`.`id`\n                          AND `glpi_ipaddresses`.`itemtype`='NetworkName'\n                  WHERE `glpi_printers`.`is_deleted`=0\n                        AND `plugin_fusioninventory_configsecurities_id`!='0'\n                        AND `glpi_printers`.`id` = '" . $items_id . "'\n                        AND `glpi_ipaddresses`.`name`!=''\n                  LIMIT 1";
                 $result = $DB->query($query);
                 while ($data = $DB->fetch_array($result)) {
                     if (isset($a_snmpauth[$data['plugin_fusioninventory_configsecurities_id']])) {
                         $input = array();
                         $input['TYPE'] = 'PRINTER';
                         $input['ID'] = $data['gID'];
                         $input['IP'] = $data['gnifaddr'];
                         $input['AUTHSNMP_ID'] = $data['plugin_fusioninventory_configsecurities_id'];
                         $a_specificity['DEVICE']['Printer' . $data['gID']] = $input;
                         $a_Printer[] = $items_id;
                     }
                 }
                 break;
         }
     }
     // Get all devices on each iprange
     foreach ($a_iprange as $items_id) {
         $pfIPRange->getFromDB($items_id);
         // Search NetworkEquipment
         $query = "SELECT `glpi_networkequipments`.`id` AS `gID`,\n                            `glpi_ipaddresses`.`name` AS `gnifaddr`,\n                            `plugin_fusioninventory_configsecurities_id`,\n                     FROM `glpi_networkequipments`\n                     LEFT JOIN `glpi_plugin_fusioninventory_networkequipments`\n                          ON `networkequipments_id`=`glpi_networkequipments`.`id`\n                     LEFT JOIN `glpi_networkports`\n                          ON `glpi_networkports`.`items_id`=`glpi_networkequipments`.`id`\n                             AND `glpi_networkports`.`itemtype`='NetworkEquipment'\n                     LEFT JOIN `glpi_networknames`\n                          ON `glpi_networknames`.`items_id`=`glpi_networkports`.`id`\n                             AND `glpi_networknames`.`itemtype`='NetworkPort'\n                     LEFT JOIN `glpi_ipaddresses`\n                          ON `glpi_ipaddresses`.`items_id`=`glpi_networknames`.`id`\n                             AND `glpi_ipaddresses`.`itemtype`='NetworkName'\n                     WHERE `glpi_networkequipments`.`is_deleted`='0'\n                          AND `plugin_fusioninventory_configsecurities_id`!='0'";
         if ($pfIPRange->fields['entities_id'] != '-1') {
             $entities = "(" . $this->fields['entities_id'];
             foreach (getAncestorsOf("glpi_entities", $pfIPRange->fields['entities_id']) as $parent) {
                 $entities .= ",{$parent}";
             }
             $entities .= ")";
             $query .= " AND `glpi_networkequipments`.`entities_id` IN " . $entities . " ";
         }
         $query .= " AND inet_aton(`glpi_ipaddresses`.`name`)\n                         BETWEEN inet_aton('" . $pfIPRange->fields['ip_start'] . "')\n                         AND inet_aton('" . $pfIPRange->fields['ip_end'] . "') ";
         $query .= " GROUP BY `glpi_networkequipments`.`id`";
         $result = $DB->query($query);
         while ($data = $DB->fetch_array($result)) {
             if (isset($a_snmpauth[$data['plugin_fusioninventory_configsecurities_id']])) {
                 $input = array();
                 $input['TYPE'] = 'NETWORKING';
                 $input['ID'] = $data['gID'];
                 $input['IP'] = $data['gnifaddr'];
                 $input['AUTHSNMP_ID'] = $data['plugin_fusioninventory_configsecurities_id'];
                 $a_specificity['DEVICE']['NetworkEquipment' . $data['gID']] = $input;
                 $a_NetworkEquipment[] = $data['gID'];
             }
         }
         // Search Printer
         $query = "SELECT `glpi_printers`.`id` AS `gID`,\n                         `glpi_ipaddresses`.`name` AS `gnifaddr`,\n                         `plugin_fusioninventory_configsecurities_id`,\n                  FROM `glpi_printers`\n                  LEFT JOIN `glpi_plugin_fusioninventory_printers`\n                          ON `printers_id`=`glpi_printers`.`id`\n                  LEFT JOIN `glpi_networkports`\n                       ON `glpi_networkports`.`items_id`=`glpi_printers`.`id`\n                          AND `glpi_networkports`.`itemtype`='Printer'\n                  LEFT JOIN `glpi_networknames`\n                       ON `glpi_networknames`.`items_id`=`glpi_networkports`.`id`\n                          AND `glpi_networknames`.`itemtype`='NetworkPort'\n                  LEFT JOIN `glpi_ipaddresses`\n                       ON `glpi_ipaddresses`.`items_id`=`glpi_networknames`.`id`\n                          AND `glpi_ipaddresses`.`itemtype`='NetworkName'\n                  WHERE `glpi_printers`.`is_deleted`=0\n                        AND `plugin_fusioninventory_configsecurities_id`!='0'";
         if ($pfIPRange->fields['entities_id'] != '-1') {
             $entities = "(" . $this->fields['entities_id'];
             foreach (getAncestorsOf("glpi_entities", $pfIPRange->fields['entities_id']) as $parent) {
                 $entities .= ",{$parent}";
             }
             $entities .= ")";
             $query .= "AND `glpi_printers`.`entities_id` IN " . $entities . " ";
         }
         $query .= " AND inet_aton(`glpi_ipaddresses`.`name`)\n                      BETWEEN inet_aton('" . $pfIPRange->fields['ip_start'] . "')\n                      AND inet_aton('" . $pfIPRange->fields['ip_end'] . "') ";
         $query .= " GROUP BY `glpi_printers`.`id`";
         $result = $DB->query($query);
         while ($data = $DB->fetch_array($result)) {
             if (isset($a_snmpauth[$data['plugin_fusioninventory_configsecurities_id']])) {
                 $input = array();
                 $input['TYPE'] = 'PRINTER';
                 $input['ID'] = $data['gID'];
                 $input['IP'] = $data['gnifaddr'];
                 $input['AUTHSNMP_ID'] = $data['plugin_fusioninventory_configsecurities_id'];
                 $a_specificity['DEVICE']['Printer' . $data['gID']] = $input;
                 $a_Printer[] = $data['gID'];
             }
         }
     }
     $count_device = count($a_NetworkEquipment) + count($a_Printer);
     $a_actions = importArrayFromDB($pfTaskjob->fields['action']);
     // *** For dynamic agent same subnet, it's an another management ***
     if (strstr($pfTaskjob->fields['action'], '".2"')) {
         $a_subnet = array();
         $a_agentList = array();
         $a_devicesubnet = array();
         foreach ($a_NetworkEquipment as $items_id) {
             $NetworkEquipment->getFromDB($items_id);
             $a_ip = explode(".", $NetworkEquipment->fields['ip']);
             $ip_subnet = $a_ip[0] . "." . $a_ip[1] . "." . $a_ip[2] . ".";
             if (!isset($a_subnet[$ip_subnet])) {
                 $a_subnet[$ip_subnet] = 0;
             }
             $a_subnet[$ip_subnet]++;
             $a_devicesubnet[$ip_subnet]['NetworkEquipment'][$items_id] = 1;
         }
         foreach ($a_Printer as $items_id) {
             $a_ports = $NetworkPort->find("`itemtype`='Printer'\n                                          AND `items_id`='" . $items_id . "'\n                                          AND `ip`!='127.0.0.1'");
             foreach ($a_ports as $a_port) {
                 $a_ip = explode(".", $a_port['ip']);
                 $ip_subnet = $a_ip[0] . "." . $a_ip[1] . "." . $a_ip[2] . ".";
                 if (!isset($a_subnet[$ip_subnet])) {
                     $a_subnet[$ip_subnet] = 0;
                 }
                 $a_subnet[$ip_subnet]++;
                 $a_devicesubnet[$ip_subnet]['Printer'][$items_id] = 1;
             }
         }
         $a_agentsubnet = array();
         foreach ($a_subnet as $subnet => $num) {
             $a_agentList = $this->getAgentsSubnet($num, $communication, $subnet);
             if (!isset($a_agentList)) {
                 $a_agentsubnet[$subnet] = '';
             } else {
                 $a_agentsubnet[$subnet] = $a_agentList;
             }
         }
         $a_input = array();
         $a_input['plugin_fusioninventory_taskjobs_id'] = $taskjobs_id;
         $a_input['state'] = 1;
         $a_input['plugin_fusioninventory_agents_id'] = 0;
         $a_input['itemtype'] = '';
         $a_input['items_id'] = 0;
         $a_input['uniqid'] = $uniqid;
         $a_input['execution_id'] = $task->fields['execution_id'];
         $taskvalid = 0;
         foreach ($a_agentsubnet as $subnet => $a_agentList) {
             if (!isset($a_agentList) or isset($a_agentList) && is_array($a_agentList) && count($a_agentList) == '0' or isset($a_agentList) && !is_array($a_agentList) && $a_agentList == '') {
                 // No agent available for this subnet
                 for ($i = 0; $i < 2; $i++) {
                     $itemtype = 'Printer';
                     if ($i == '0') {
                         $itemtype = 'NetworkEquipment';
                     }
                     if (isset($a_devicesubnet[$subnet][$itemtype])) {
                         foreach ($a_devicesubnet[$subnet][$itemtype] as $items_id => $num) {
                             $a_input['itemtype'] = $itemtype;
                             $a_input['items_id'] = $items_id;
                             $a_input['specificity'] = exportArrayToDB($a_specificity['DEVICE'][$itemtype . $items_id]);
                             $Taskjobstates_id = $pfTaskjobstate->add($a_input);
                             //Add log of taskjob
                             $a_input['plugin_fusioninventory_taskjobstates_id'] = $Taskjobstates_id;
                             $a_input['state'] = 7;
                             $a_input['date'] = date("Y-m-d H:i:s");
                             $pfTaskjoblog->add($a_input);
                             $pfTaskjobstate->changeStatusFinish($Taskjobstates_id, 0, '', 1, "Unable to find agent to inventory " . "this " . $itemtype, 0, 0);
                             $a_input['state'] = 1;
                         }
                     }
                 }
             } else {
                 // add taskjobstate
                 $count_device_subnet = 0;
                 if (isset($a_devicesubnet[$subnet]['NetworkEquipment'])) {
                     $count_device_subnet += count($a_devicesubnet[$subnet]['NetworkEquipment']);
                 }
                 if (isset($a_devicesubnet[$subnet]['Printer'])) {
                     $count_device_subnet += count($a_devicesubnet[$subnet]['Printer']);
                 }
                 $nb_devicebyagent = ceil($count_device_subnet / count($a_agentList));
                 $nbagent = 0;
                 $agent_id = array_pop($a_agentList);
                 $a_input['state'] = 0;
                 for ($i = 0; $i < 2; $i++) {
                     $itemtype = 'Printer';
                     if ($i == '0') {
                         $itemtype = 'NetworkEquipment';
                     }
                     if (isset($a_devicesubnet[$subnet][$itemtype])) {
                         foreach ($a_devicesubnet[$subnet][$itemtype] as $items_id => $num) {
                             $a_input['itemtype'] = $itemtype;
                             $a_input['items_id'] = $items_id;
                             $a_input['specificity'] = exportArrayToDB($a_specificity['DEVICE'][$itemtype . $items_id]);
                             if ($nbagent == $nb_devicebyagent) {
                                 $agent_id = array_pop($a_agentList);
                                 $nbagent = 0;
                             }
                             $a_input['plugin_fusioninventory_agents_id'] = $agent_id;
                             $nbagent++;
                             $taskvalid++;
                             $Taskjobstates_id = $pfTaskjobstate->add($a_input);
                             //Add log of taskjob
                             $a_input['plugin_fusioninventory_taskjobstates_id'] = $Taskjobstates_id;
                             $a_input['state'] = 7;
                             $a_input['date'] = date("Y-m-d H:i:s");
                             $pfTaskjoblog->add($a_input);
                             unset($a_input['state']);
                             $a_input['plugin_fusioninventory_agents_id'] = 0;
                             $a_input['state'] = 0;
                             if ($communication == "push") {
                                 $_SESSION['glpi_plugin_fusioninventory']['agents'][$agent_id] = 1;
                             }
                         }
                     }
                 }
             }
         }
         if ($taskvalid == "0") {
             $pfTaskjob->reinitializeTaskjobs($pfTaskjob->fields['plugin_fusioninventory_tasks_id']);
         }
     } else {
         $a_agentList = array();
         // *** Only agents not dynamic ***
         if (!strstr($pfTaskjob->fields['action'], '".1"') and !strstr($pfTaskjob->fields['action'], '".2"')) {
             $agent_require_model = 0;
             foreach ($a_actions as $a_action) {
                 if (!in_array('.1', $a_action) and !in_array('.2', $a_action)) {
                     $agent_id = current($a_action);
                     if ($pfAgent->getFromDB($agent_id)) {
                         $agent_version = $pfAgent->getAgentVersion($agent_id);
                         if (strnatcmp($agent_version, '2.3.4') < 0) {
                             $agent_require_model = 1;
                         }
                         if ($communication == 'pull') {
                             $a_agentList[] = $agent_id;
                         } else {
                             if ($pfTaskjob->isAgentAlive('1', $agent_id)) {
                                 $a_agentList[] = $agent_id;
                             }
                         }
                     }
                 }
             }
         } else {
             if (strstr($pfTaskjob->fields['action'], '".1"')) {
                 $a_agentList = $this->getAgentsSubnet($count_device, $communication);
             }
         }
         /*
          * Manage agents
          */
         if (count($a_agentList) == 0) {
             $a_input = array();
             $a_input['plugin_fusioninventory_taskjobs_id'] = $taskjobs_id;
             $a_input['state'] = 1;
             $a_input['plugin_fusioninventory_agents_id'] = 0;
             $a_input['itemtype'] = '';
             $a_input['items_id'] = 0;
             $a_input['uniqid'] = $uniqid;
             $a_input['execution_id'] = $task->fields['execution_id'];
             $Taskjobstates_id = $pfTaskjobstate->add($a_input);
             //Add log of taskjob
             $a_input['plugin_fusioninventory_taskjobstates_id'] = $Taskjobstates_id;
             $a_input['state'] = 7;
             $a_input['date'] = date("Y-m-d H:i:s");
             $pfTaskjoblog->add($a_input);
             $pfTaskjobstate->changeStatusFinish($Taskjobstates_id, 0, '', 1, "Unable to find agent to run this job");
             $input_taskjob = array();
             $input_taskjob['id'] = $pfTaskjob->fields['id'];
             //$input_taskjob['status'] = 0;
             $pfTaskjob->update($input_taskjob);
         } elseif ($count_device == 0) {
             $a_input = array();
             $a_input['plugin_fusioninventory_taskjobs_id'] = $taskjobs_id;
             $a_input['state'] = 1;
             $a_input['plugin_fusioninventory_agents_id'] = 0;
             $a_input['itemtype'] = '';
             $a_input['items_id'] = 0;
             $a_input['uniqid'] = $uniqid;
             $Taskjobstates_id = $pfTaskjobstate->add($a_input);
             //Add log of taskjob
             $a_input['plugin_fusioninventory_taskjobstates_id'] = $Taskjobstates_id;
             $a_input['state'] = 7;
             $a_input['date'] = date("Y-m-d H:i:s");
             $pfTaskjoblog->add($a_input);
             $pfTaskjobstate->changeStatusFinish($Taskjobstates_id, 0, '', 0, "No suitable devices to inventory");
             $input_taskjob = array();
             $input_taskjob['id'] = $pfTaskjob->fields['id'];
             //$input_taskjob['status'] = 1;
             $pfTaskjob->update($input_taskjob);
         } else {
             foreach ($a_agentList as $agent_id) {
                 //Add jobstate and put status (waiting on server = 0)
                 $a_input = array();
                 $a_input['plugin_fusioninventory_taskjobs_id'] = $taskjobs_id;
                 $a_input['state'] = 0;
                 $a_input['plugin_fusioninventory_agents_id'] = $agent_id;
                 $a_input['uniqid'] = $uniqid;
                 $a_input['execution_id'] = $task->fields['execution_id'];
                 $alternate = 0;
                 for ($d = 0; $d < ceil($count_device / count($a_agentList)); $d++) {
                     if (count($a_NetworkEquipment) + count($a_Printer) > 0) {
                         $getdevice = "NetworkEquipment";
                         if ($alternate == "1") {
                             $getdevice = "Printer";
                             $alternate = 0;
                         } else {
                             $getdevice = "NetworkEquipment";
                             $alternate++;
                         }
                         if (count($a_NetworkEquipment) == '0') {
                             $getdevice = "Printer";
                         } else {
                             if (count($a_Printer) == '0') {
                                 $getdevice = "NetworkEquipment";
                             }
                         }
                         $a_input['itemtype'] = $getdevice;
                         switch ($getdevice) {
                             case 'NetworkEquipment':
                                 $a_input['items_id'] = array_pop($a_NetworkEquipment);
                                 $a_input['specificity'] = exportArrayToDB($a_specificity['DEVICE']['NetworkEquipment' . $a_input['items_id']]);
                                 break;
                             case 'Printer':
                                 $a_input['items_id'] = array_pop($a_Printer);
                                 $a_input['specificity'] = exportArrayToDB($a_specificity['DEVICE']['Printer' . $a_input['items_id']]);
                                 break;
                         }
                         $Taskjobstates_id = $pfTaskjobstate->add($a_input);
                         //Add log of taskjob
                         $a_input['plugin_fusioninventory_taskjobstates_id'] = $Taskjobstates_id;
                         $a_input['state'] = 7;
                         $a_input['date'] = date("Y-m-d H:i:s");
                         $pfTaskjoblog->add($a_input);
                         unset($a_input['state']);
                         if ($communication == "push") {
                             $_SESSION['glpi_plugin_fusioninventory']['agents'][$agent_id] = 1;
                         }
                     }
                 }
             }
             $input_taskjob = array();
             $input_taskjob['id'] = $pfTaskjob->fields['id'];
             $input_taskjob['status'] = 1;
             $pfTaskjob->update($input_taskjob);
         }
     }
     return $uniqid;
 }
//   $ptt = new PluginFusioninventoryTask;
//   $ptais = new PluginFusioninventoryAgentsInventoryState;
//
//   if ($ptt->addTask(0, 0, 'INVENTORY', $_POST['agentID'])) {
//      $ptais->changeStatus($_POST['ID'], 1);
//      if ($pta->RemoteStartAgent($_POST['agentID'], $_POST['ip'])) {
//         $ptais->changeStatus($_POST['ID'], 2);
//      }
//   }
//	glpi_header($_SERVER['HTTP_REFERER']);
//}
//
//$ptais = new PluginFusioninventoryAgentsInventoryState;
//$ptais->computerState($_SERVER["PHP_SELF"], $_GET["ID"]);
if (isset($_POST['action'])) {
    $pfit = new PluginFusioninventoryTask();
    foreach ($_POST['agent-ip'] as $agentip) {
        $splitinfo = explode("-", $agentip);
        $param = "";
        if (isset($splitinfo[2])) {
            $param = "{$splitinfo['2']}";
        }
        // Add a task...
        if ($_POST['action'] == "INVENTORY") {
            $a_device = explode("-", $_POST['device']);
            switch ($a_device[0]) {
                case NETWORKING_TYPE:
                case PRINTER_TYPE:
                    $pfit->addTask($a_device[1], $a_device[0], 'SNMPQUERY', $splitinfo[0], $param);
                    break;
                case COMPUTER_TYPE:
 /**
  * @test
  */
 public function prepareTask2()
 {
     global $DB;
     // Verify prepare a network discovery task
     $DB->connect();
     $pfTask = new PluginFusioninventoryTask();
     $data = $pfTask->getJoblogs(array(2));
     $ref = array(3 => 'computer3');
     $this->assertEquals($ref, $data['agents']);
 }
 /**
  * @test
  */
 public function prepareTaskDisabled()
 {
     global $DB;
     $DB->connect();
     $pfTask = new PluginFusioninventoryTask();
     $pfTask->update(array('id' => 1, 'is_active' => 0));
     PluginFusioninventoryTask::cronTaskscheduler();
     $data = $pfTask->getJoblogs(array(1));
     $ref = array();
     $this->assertEquals($ref, $data['agents'], 'Task inactive, so no agent prepared');
     $ref_prepared = array();
     $this->assertEquals($ref_prepared, $data['tasks']);
 }