/** * 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); } } } } } } } } }
public function submitForm($postvars) { if (isset($postvars['forcestart'])) { Session::checkRight('plugin_fusioninventory_task', UPDATE); /** * TODO: forcing the task execution should be done in the task object */ $pfTaskjob = new PluginFusioninventoryTaskjob(); $pfTaskjob->forceRunningTask($postvars['id']); Html::back(); } else { if (isset($postvars["add"])) { Session::checkRight('plugin_fusioninventory_task', CREATE); $items_id = $this->add($postvars); Html::redirect(str_replace("add=1", "", $_SERVER['HTTP_REFERER']) . "?id=" . $items_id); } else { if (isset($postvars["purge"])) { Session::checkRight('plugin_fusioninventory_task', PURGE); $pfTaskJob = new PluginFusioninventoryTaskjob(); $taskjobs = $pfTaskJob->find("`plugin_fusioninventory_tasks_id` = '" . $postvars['id'] . "' "); foreach ($taskjobs as $taskjob) { $pfTaskJob->delete($taskjob); } $this->delete($postvars); Html::redirect(Toolbox::getItemTypeSearchURL(get_class($this))); } else { if (isset($_POST["update"])) { Session::checkRight('plugin_fusioninventory_task', UPDATE); $this->getFromDB($postvars['id']); //Ensure empty value are set to NULL for datetime fields if (isset($postvars['datetime_start']) and $postvars['datetime_start'] === '') { $postvars['datetime_start'] = 'NULL'; } if (isset($postvars['datetime_end']) and $postvars['datetime_end'] === '') { $postvars['datetime_end'] = 'NULL'; } $this->update($postvars); Html::back(); } } } } }
/** * @test */ public function TaskWithPC() { $this->mark_incomplete(); global $DB; $_SESSION['glpiactiveentities_string'] = 0; $pfDeployGroup = new PluginFusioninventoryDeployGroup(); $pfDeployGroup_Dynamicdata = new PluginFusioninventoryDeployGroup_Dynamicdata(); $pfDeployPackage = new PluginFusioninventoryDeployPackage(); $pfTask = new PluginFusioninventoryTask(); $pfTaskJob = new PluginFusioninventoryTaskjob(); $input = array('name' => 'test', 'type' => 'DYNAMIC'); $pfDeployGroup->add($input); $input = array('groups_id' => 1, 'fields_array' => '{"entities_id":"0","name":"","field":["1"],"searchtype":["contains"],"contains":["^pc"],"plugin_fusioninventory_deploygroup_dynamicdatas_id":"1","id":"1","updaterule":"Update this rule","itemtype":"Computer"}'); $pfDeployGroup_Dynamicdata->add($input); $input = array('name' => 'ls', 'entities_id' => 0); $pfDeployPackage->add($input); $input = array('name' => 'deploy', 'is_active' => 1, 'communication' => 'pull'); $pfTask->add($input); $a_plugins = current(getAllDatasFromTable('glpi_plugins', '`directory`="fusioninventory"')); $input = array('plugin_fusioninventory_tasks_id' => 1, 'name' => 'deploy', 'plugins_id' => $a_plugins['id'], 'method' => 'deployinstall', 'action' => '[{"PluginFusioninventoryDeployGroup":"1"}]'); $pfTaskJob->add($input); $DB->query('UPDATE `glpi_plugin_fusioninventory_taskjobs` SET `definition`=\'[{"PluginFusioninventoryDeployPackage":"1"}]\' WHERE `id`="1"'); // Force task prepation $pfTaskJob->forceRunningTask(1); $a_jobstates = getAllDatasFromTable("glpi_plugin_fusioninventory_taskjobstates"); foreach ($a_jobstates as $num => $data) { unset($data['uniqid']); $a_jobstates[$num] = $data; } $a_reference = array(1 => array('id' => 1, 'plugin_fusioninventory_taskjobs_id' => 1, 'items_id' => 1, 'itemtype' => "PluginFusioninventoryDeployPackage", 'state' => 0, 'plugin_fusioninventory_agents_id' => 1, 'specificity' => '', 'execution_id' => '0'), 2 => array('id' => 2, 'plugin_fusioninventory_taskjobs_id' => 1, 'items_id' => 1, 'itemtype' => "PluginFusioninventoryDeployPackage", 'state' => 0, 'plugin_fusioninventory_agents_id' => 2, 'specificity' => '', 'execution_id' => '0'), 3 => array('id' => 3, 'plugin_fusioninventory_taskjobs_id' => 1, 'items_id' => 1, 'itemtype' => "PluginFusioninventoryDeployPackage", 'state' => 0, 'plugin_fusioninventory_agents_id' => 3, 'specificity' => '', 'execution_id' => '0'), 4 => array('id' => 4, 'plugin_fusioninventory_taskjobs_id' => 1, 'items_id' => 1, 'itemtype' => "PluginFusioninventoryDeployPackage", 'state' => 0, 'plugin_fusioninventory_agents_id' => 4, 'specificity' => '', 'execution_id' => '0'), 5 => array('id' => 5, 'plugin_fusioninventory_taskjobs_id' => 1, 'items_id' => 1, 'itemtype' => "PluginFusioninventoryDeployPackage", 'state' => 0, 'plugin_fusioninventory_agents_id' => 5, 'specificity' => '', 'execution_id' => '0'), 6 => array('id' => 6, 'plugin_fusioninventory_taskjobs_id' => 1, 'items_id' => 1, 'itemtype' => "PluginFusioninventoryDeployPackage", 'state' => 0, 'plugin_fusioninventory_agents_id' => 6, 'specificity' => '', 'execution_id' => '0'), 7 => array('id' => 7, 'plugin_fusioninventory_taskjobs_id' => 1, 'items_id' => 1, 'itemtype' => "PluginFusioninventoryDeployPackage", 'state' => 0, 'plugin_fusioninventory_agents_id' => 7, 'specificity' => '', 'execution_id' => '0'), 8 => array('id' => 8, 'plugin_fusioninventory_taskjobs_id' => 1, 'items_id' => 1, 'itemtype' => "PluginFusioninventoryDeployPackage", 'state' => 0, 'plugin_fusioninventory_agents_id' => 8, 'specificity' => '', 'execution_id' => '0'), 9 => array('id' => 9, 'plugin_fusioninventory_taskjobs_id' => 1, 'items_id' => 1, 'itemtype' => "PluginFusioninventoryDeployPackage", 'state' => 0, 'plugin_fusioninventory_agents_id' => 9, 'specificity' => '', 'execution_id' => '0'), 10 => array('id' => 10, 'plugin_fusioninventory_taskjobs_id' => 1, 'items_id' => 1, 'itemtype' => "PluginFusioninventoryDeployPackage", 'state' => 0, 'plugin_fusioninventory_agents_id' => 10, 'specificity' => '', 'execution_id' => '0'), 11 => array('id' => 11, 'plugin_fusioninventory_taskjobs_id' => 1, 'items_id' => 1, 'itemtype' => "PluginFusioninventoryDeployPackage", 'state' => 0, 'plugin_fusioninventory_agents_id' => 11, 'specificity' => '', 'execution_id' => '0'), 12 => array('id' => 12, 'plugin_fusioninventory_taskjobs_id' => 1, 'items_id' => 1, 'itemtype' => "PluginFusioninventoryDeployPackage", 'state' => 0, 'plugin_fusioninventory_agents_id' => 12, 'specificity' => '', 'execution_id' => '0'), 13 => array('id' => 13, 'plugin_fusioninventory_taskjobs_id' => 1, 'items_id' => 1, 'itemtype' => "PluginFusioninventoryDeployPackage", 'state' => 0, 'plugin_fusioninventory_agents_id' => 13, 'specificity' => '', 'execution_id' => '0')); $this->assertEquals($a_reference, $a_jobstates); }