2019-02-12 14:39:01 +01:00
< ? php
2019-02-14 17:56:10 +01:00
/**
* Extension to schedule tasks on Pandora FMS Console
*
* @ category Wizard
* @ package Pandora FMS
* @ subpackage Host & Devices
* @ version 1.0 . 0
* @ license See below
*
* ______ ___ _______ _______ ________
* | __ \ .-----.--.--.--| |.-----.----.-----. | ___ | | | __ |
* | __ /| _ | | _ || _ | _ | _ | | ___ | | __ |
* | ___ | | ___ . _ | __ | __ | _____ || _____ | __ | | ___ . _ | | ___ | | __ | _ | __ | _______ |
*
* ============================================================================
* Copyright ( c ) 2005 - 2019 Artica Soluciones Tecnologicas
* Please see http :// pandorafms . org for full contribution list
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation for version 2.
* This program 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 General Public License for more details .
* ============================================================================
*/
2019-02-12 14:39:01 +01:00
2019-02-14 10:56:25 +01:00
require_once __DIR__ . '/Wizard.main.php' ;
2019-02-14 13:27:49 +01:00
require_once $config [ 'homedir' ] . '/include/functions_users.php' ;
2019-03-15 09:11:18 +01:00
require_once $config [ 'homedir' ] . '/include/class/CustomNetScan.class.php' ;
require_once $config [ 'homedir' ] . '/include/class/ManageNetScanScripts.class.php' ;
2019-03-06 17:14:32 +01:00
enterprise_include_once ( 'include/class/CSVImportAgents.class.php' );
2019-02-26 20:23:52 +01:00
enterprise_include_once ( 'include/functions_hostdevices.php' );
2019-02-12 14:39:01 +01:00
/**
2019-02-15 18:05:59 +01:00
* Wizard section Host & devices .
* Provides classic recon task creation .
* In enterprise environments , provides also CSV agent import features .
2019-02-12 14:39:01 +01:00
*/
2019-02-14 10:56:25 +01:00
class HostDevices extends Wizard
2019-02-12 14:39:01 +01:00
{
2019-02-21 11:19:38 +01:00
/**
* Number of pages to control breadcrum .
*
* @ var integer
*/
public $maxPagesNetScan = 2 ;
/**
* Labels for breadcrum .
*
* @ var array
*/
public $pageLabelsNetScan = [
'NetScan definition' ,
'NetScan features' ,
];
2019-02-14 17:14:01 +01:00
/**
* Stores all needed parameters to create a recon task .
*
* @ var array
*/
public $task ;
2019-02-12 14:39:01 +01:00
/**
2019-02-15 18:05:59 +01:00
* Constructor .
2019-02-12 14:39:01 +01:00
*
2019-02-14 11:32:07 +01:00
* @ param integer $page Start page , by default 0.
2019-02-12 14:39:01 +01:00
* @ param string $msg Mensajito .
* @ param string $icon Mensajito .
* @ param string $label Mensajito .
*
* @ return class HostDevices
*/
public function __construct (
int $page = 0 ,
2019-02-15 13:08:44 +01:00
string $msg = 'Default message. Not set.' ,
2019-02-21 13:05:48 +01:00
string $icon = 'images/wizard/hostdevices.png' ,
2019-02-12 14:39:01 +01:00
string $label = 'Host & Devices'
) {
2019-02-14 11:32:07 +01:00
$this -> setBreadcrum ([]);
2019-02-14 17:14:01 +01:00
$this -> task = [];
2019-02-12 14:39:01 +01:00
$this -> msg = $msg ;
$this -> icon = $icon ;
$this -> label = $label ;
$this -> page = $page ;
$this -> url = ui_get_full_url (
'index.php?sec=gservers&sec2=godmode/servers/discovery&wiz=hd'
);
return $this ;
}
/**
2019-02-15 18:05:59 +01:00
* Run wizard manager .
2019-02-12 14:39:01 +01:00
*
2019-02-15 18:05:59 +01:00
* @ return mixed Returns null if wizard is ongoing . Result if done .
2019-02-12 14:39:01 +01:00
*/
public function run ()
{
global $config ;
2019-02-14 13:27:49 +01:00
// Load styles.
parent :: run ();
2019-02-12 14:39:01 +01:00
$mode = get_parameter ( 'mode' , null );
if ( $mode === null ) {
2019-02-21 13:05:48 +01:00
$buttons = [];
$buttons [] = [
'url' => $this -> url . '&mode=netscan' ,
'icon' => 'images/wizard/netscan.png' ,
'label' => __ ( 'Net Scan' ),
];
2019-03-06 17:14:32 +01:00
2019-02-21 13:05:48 +01:00
if ( enterprise_installed ()) {
$buttons [] = [
'url' => $this -> url . '&mode=importcsv' ,
'icon' => ENTERPRISE_DIR . '/images/wizard/csv.png' ,
'label' => __ ( 'Import CSV' ),
];
2019-03-15 09:11:18 +01:00
}
2019-03-06 17:14:32 +01:00
2019-03-15 09:11:18 +01:00
$buttons [] = [
'url' => $this -> url . '&mode=customnetscan' ,
'icon' => '/images/wizard/customnetscan.png' ,
'label' => __ ( 'Custom NetScan' ),
];
2019-03-06 17:14:32 +01:00
2019-03-15 09:11:18 +01:00
$buttons [] = [
'url' => $this -> url . '&mode=managenetscanscripts' ,
'icon' => '/images/wizard/managenetscanscripts.png' ,
'label' => __ ( 'Manage NetScan scripts' ),
];
2019-02-21 13:05:48 +01:00
2019-02-22 19:18:07 +01:00
$this -> prepareBreadcrum (
[
[
'link' => ui_get_full_url (
'index.php?sec=gservers&sec2=godmode/servers/discovery'
),
'label' => __ ( 'Discovery' ),
],
2019-04-09 18:33:02 +02:00
],
true
2019-02-22 19:18:07 +01:00
);
2019-03-26 15:42:33 +01:00
ui_print_page_header ( __ ( 'Host & devices' ), '' , false , '' , true , '' , false , '' , GENERIC_SIZE_TEXT , '' , $this -> printHeader ( true ));
2019-02-22 19:18:07 +01:00
2019-02-21 13:05:48 +01:00
$this -> printBigButtonsList ( $buttons );
2019-02-12 14:39:01 +01:00
return ;
}
2019-02-14 17:56:10 +01:00
if ( enterprise_installed ()) {
2019-03-06 17:14:32 +01:00
if ( $mode === 'importcsv' ) {
$csv_importer = new CSVImportAgents (
$this -> page ,
$this -> breadcrum
);
2019-02-14 17:56:10 +01:00
return $csv_importer -> runCSV ();
}
2019-03-15 09:11:18 +01:00
}
2019-03-06 17:14:32 +01:00
2019-03-15 09:11:18 +01:00
if ( $mode === 'customnetscan' ) {
$customnetscan_importer = new CustomNetScan (
$this -> page ,
$this -> breadcrum
);
return $customnetscan_importer -> runCustomNetScan ();
}
2019-03-06 17:14:32 +01:00
2019-03-15 09:11:18 +01:00
if ( $mode === 'managenetscanscripts' ) {
$managenetscanscript_importer = new ManageNetScanScripts (
$this -> page ,
$this -> breadcrum
);
return $managenetscanscript_importer -> runManageNetScanScript ();
2019-02-12 14:39:01 +01:00
}
if ( $mode == 'netscan' ) {
return $this -> runNetScan ();
}
return null ;
}
2019-02-14 10:56:25 +01:00
// Extra methods.
2019-02-12 14:39:01 +01:00
2019-02-14 13:27:49 +01:00
/**
* Retrieves and validates information given by user in NetScan wizard .
*
* @ return boolean Data OK or not .
*/
public function parseNetScan ()
{
2019-02-14 17:19:20 +01:00
if ( $this -> page == 0 ) {
2019-02-15 13:08:44 +01:00
// Check if we're updating a task.
$task_id = get_parameter ( 'task' , null );
if ( isset ( $task_id ) === true ) {
// We're updating this task.
$task = db_get_row (
'trecon_task' ,
'id_rt' ,
$task_id
);
if ( $task !== false ) {
$this -> task = $task ;
}
}
2019-02-14 17:19:20 +01:00
return true ;
}
// Validate response from page 0. No, not a bug, we're always 1 page
// from 'validation' page.
if ( $this -> page == 1 ) {
2019-02-15 13:08:44 +01:00
$task_id = get_parameter ( 'task' , null );
2019-02-14 17:19:20 +01:00
$taskname = get_parameter ( 'taskname' , '' );
$comment = get_parameter ( 'comment' , '' );
$server_id = get_parameter ( 'id_recon_server' , '' );
2019-02-15 13:08:44 +01:00
$network = get_parameter ( 'network' , '' );
2019-02-14 17:19:20 +01:00
$id_group = get_parameter ( 'id_group' , '' );
2019-02-18 14:00:55 +01:00
$interval = get_parameter ( 'interval' , 0 );
2019-02-14 17:19:20 +01:00
2019-02-15 13:08:44 +01:00
if ( isset ( $task_id ) === true ) {
// We're updating this task.
$task = db_get_row (
'trecon_task' ,
'id_rt' ,
$task_id
);
if ( $task !== false ) {
$this -> task = $task ;
}
} else if ( isset ( $taskname ) === true
&& isset ( $network ) === true
) {
// Avoid double creation.
$task = db_get_row_filter (
'trecon_task' ,
[
'name' => $taskname ,
'subnet' => $network ,
]
);
if ( $task !== false ) {
$this -> task = $task ;
2019-02-15 16:02:55 +01:00
$this -> msg = __ ( 'This network scan task has been already defined. Please edit it or create a new one.' );
return false ;
2019-02-15 13:08:44 +01:00
}
}
2019-02-21 11:19:38 +01:00
if ( $task_id !== null
&& $taskname == null
&& $server_id == null
&& $id_group == null
&& $server == null
&& $datacenter == ''
&& $user == ''
&& $pass == ''
&& $encrypt == null
&& $interval == 0
) {
// Default values, no data received.
// User is accesing directly to this page.
if ( users_is_admin () !== true && check_acl (
$config [ 'id_usuario' ],
$this -> task [ 'id_group' ],
'PM'
) !== true
) {
$this -> msg = __ ( 'You have no access to edit this task.' );
return false ;
}
} else {
if ( isset ( $this -> task [ 'id_rt' ]) === false ) {
// Disabled 2 Implies wizard non finished.
$this -> task [ 'disabled' ] = 2 ;
}
2019-02-15 13:08:44 +01:00
2019-02-21 11:19:38 +01:00
if ( $taskname == '' ) {
$this -> msg = __ ( 'You must provide a task name.' );
return false ;
}
2019-02-14 17:19:20 +01:00
2019-02-21 11:19:38 +01:00
if ( $server_id == '' ) {
$this -> msg = __ ( 'You must select a Discovery Server.' );
return false ;
}
2019-02-14 17:19:20 +01:00
2019-02-21 11:19:38 +01:00
if ( $network == '' ) {
// XXX: Could be improved validating provided network.
$this -> msg = __ ( 'You must provide a valid network.' );
return false ;
}
2019-02-14 17:19:20 +01:00
2019-02-21 11:19:38 +01:00
if ( $id_group == '' ) {
$this -> msg = __ ( 'You must select a valid group.' );
return false ;
}
2019-02-14 17:19:20 +01:00
2019-02-21 11:19:38 +01:00
// Assign fields.
$this -> task [ 'name' ] = $taskname ;
$this -> task [ 'description' ] = $comment ;
$this -> task [ 'subnet' ] = $network ;
$this -> task [ 'id_recon_server' ] = $server_id ;
$this -> task [ 'id_group' ] = $id_group ;
$this -> task [ 'interval_sweep' ] = $interval ;
if ( isset ( $this -> task [ 'id_rt' ]) === false ) {
// Create.
$this -> task [ 'id_rt' ] = db_process_sql_insert (
'trecon_task' ,
$this -> task
);
} else {
// Update.
db_process_sql_update (
'trecon_task' ,
$this -> task ,
[ 'id_rt' => $this -> task [ 'id_rt' ]]
);
}
2019-02-14 17:19:20 +01:00
}
return true ;
}
// Validate response from page 1.
if ( $this -> page == 2 ) {
$id_rt = get_parameter ( 'task' , - 1 );
2019-02-15 13:08:44 +01:00
$task = db_get_row (
2019-02-14 17:19:20 +01:00
'trecon_task' ,
'id_rt' ,
$id_rt
);
2019-02-15 13:08:44 +01:00
if ( $task !== false ) {
$this -> task = $task ;
} else {
$this -> msg = __ ( 'Failed to find network scan task.' );
return false ;
}
$id_network_profile = get_parameter ( 'id_network_profile' , null );
2019-02-18 19:50:13 +01:00
$autoconf_enabled = get_parameter_switch (
'autoconfiguration_enabled'
);
2019-02-15 13:08:44 +01:00
$snmp_enabled = get_parameter_switch ( 'snmp_enabled' );
$os_detect = get_parameter_switch ( 'os_detect' );
$parent_detection = get_parameter_switch ( 'parent_detection' );
$parent_recursion = get_parameter_switch ( 'parent_recursion' );
$vlan_enabled = get_parameter_switch ( 'vlan_enabled' );
2019-02-15 13:57:33 +01:00
$wmi_enabled = get_parameter_switch ( 'wmi_enabled' );
$resolve_names = get_parameter_switch ( 'resolve_names' );
2019-02-15 13:08:44 +01:00
$snmp_version = get_parameter ( 'snmp_version' , null );
$community = get_parameter ( 'community' , null );
$snmp_context = get_parameter ( 'snmp_context' , null );
$snmp_auth_user = get_parameter ( 'snmp_auth_user' , null );
$snmp_auth_pass = get_parameter ( 'snmp_auth_pass' , null );
$snmp_privacy_method = get_parameter ( 'snmp_privacy_method' , null );
$snmp_privacy_pass = get_parameter ( 'snmp_privacy_pass' , null );
$snmp_auth_method = get_parameter ( 'snmp_auth_method' , null );
$snmp_security_level = get_parameter ( 'snmp_security_level' , null );
$auth_strings = get_parameter ( 'auth_strings' , null );
if ( $snmp_version == 3 ) {
$this -> task [ 'snmp_community' ] = $snmp_context ;
} else {
$this -> task [ 'snmp_community' ] = $community ;
}
2019-02-18 19:50:13 +01:00
$this -> task [ 'autoconfiguration_enabled' ] = $autoconf_enabled ;
2019-02-15 13:08:44 +01:00
$this -> task [ 'id_network_profile' ] = $id_network_profile ;
$this -> task [ 'snmp_enabled' ] = $snmp_enabled ;
$this -> task [ 'os_detect' ] = $os_detect ;
$this -> task [ 'parent_detection' ] = $parent_detection ;
$this -> task [ 'parent_recursion' ] = $parent_recursion ;
$this -> task [ 'vlan_enabled' ] = $vlan_enabled ;
2019-02-15 13:57:33 +01:00
$this -> task [ 'wmi_enabled' ] = $wmi_enabled ;
$this -> task [ 'resolve_names' ] = $resolve_names ;
2019-02-15 13:08:44 +01:00
$this -> task [ 'snmp_version' ] = $snmp_version ;
$this -> task [ 'snmp_auth_user' ] = $snmp_auth_user ;
$this -> task [ 'snmp_auth_pass' ] = $snmp_auth_pass ;
$this -> task [ 'snmp_privacy_method' ] = $snmp_privacy_method ;
$this -> task [ 'snmp_privacy_pass' ] = $snmp_privacy_pass ;
$this -> task [ 'snmp_auth_method' ] = $snmp_auth_method ;
$this -> task [ 'snmp_security_level' ] = $snmp_security_level ;
$this -> task [ 'auth_strings' ] = $auth_strings ;
if ( $this -> task [ 'disabled' ] == 2 ) {
// Wizard finished.
$this -> task [ 'disabled' ] = 0 ;
}
// Update.
$res = db_process_sql_update (
'trecon_task' ,
$this -> task ,
[ 'id_rt' => $this -> task [ 'id_rt' ]]
);
return true ;
}
2019-02-18 14:00:55 +01:00
if ( $this -> page == 3 ) {
2019-02-15 13:08:44 +01:00
// Wizard ended. Load data and return control to Discovery.
$id_rt = get_parameter ( 'task' , - 1 );
$task = db_get_row (
'trecon_task' ,
'id_rt' ,
$id_rt
);
if ( $task !== false ) {
$this -> task = $task ;
} else {
$this -> msg = __ ( 'Failed to find network scan task.' );
return false ;
}
return true ;
2019-02-14 17:19:20 +01:00
}
2019-02-14 13:27:49 +01:00
return false ;
}
2019-02-12 14:39:01 +01:00
/**
* Undocumented function
*
* @ return void
*/
public function runNetScan ()
{
global $config ;
check_login ();
if ( ! check_acl ( $config [ 'id_user' ], 0 , 'PM' )) {
db_pandora_audit (
'ACL Violation' ,
'Trying to access Agent Management'
);
include 'general/noaccess.php' ;
return ;
}
2019-02-14 17:19:20 +01:00
if ( $this -> parseNetScan () === false ) {
// Error.
ui_print_error_message (
$this -> msg
);
$form = [
'form' => [
'method' => 'POST' ,
2019-02-15 13:08:44 +01:00
'action' => $this -> url . '&mode=netscan&page=' . ( $this -> page - 1 ) . '&task=' . $this -> task [ 'id_rt' ],
2019-02-14 17:19:20 +01:00
],
'inputs' => [
[
'arguments' => [
'type' => 'hidden' ,
2019-02-15 13:08:44 +01:00
'name' => 'task' ,
'value' => $this -> task [ 'id_rt' ],
2019-02-14 17:19:20 +01:00
],
],
[
'arguments' => [
'name' => 'submit' ,
'label' => __ ( 'Go back' ),
'type' => 'submit' ,
'attributes' => 'class="sub cancel"' ,
'return' => true ,
],
],
],
];
2019-02-18 12:14:03 +01:00
// Check ACL. If user is not able to manage target task,
// redirect him to main page.
2019-02-18 14:00:55 +01:00
if ( users_is_admin () !== true && check_acl (
2019-02-18 12:14:03 +01:00
$config [ 'id_usuario' ],
$this -> task [ 'id_group' ],
'PM'
) !== true
) {
$form [ 'form' ][ 'action' ] = $this -> url . '&mode=netscan&page=' . ( $this -> page - 1 );
}
2019-02-14 17:19:20 +01:00
$this -> printForm ( $form );
return null ;
2019-02-14 13:27:49 +01:00
}
2019-02-21 11:19:38 +01:00
$task_url = '' ;
if ( isset ( $this -> task [ 'id_rt' ])) {
$task_url = '&task=' . $this -> task [ 'id_rt' ];
}
2019-03-26 17:28:31 +01:00
$breadcrum = [
[
'link' => 'index.php?sec=gservers&sec2=godmode/servers/discovery' ,
'label' => 'Discovery' ,
],
[
'link' => 'index.php?sec=gservers&sec2=godmode/servers/discovery&wiz=hd' ,
'label' => __ ( $this -> label ),
],
2019-02-26 10:34:37 +01:00
];
2019-02-21 11:19:38 +01:00
for ( $i = 0 ; $i < $this -> maxPagesNetScan ; $i ++ ) {
$breadcrum [] = [
'link' => 'index.php?sec=gservers&sec2=godmode/servers/discovery&wiz=hd&mode=netscan&page=' . $i . $task_url ,
'label' => $this -> pageLabelsNetScan [ $i ],
'selected' => (( $i == $this -> page ) ? 1 : 0 ),
];
}
if ( $this -> page < $this -> maxPagesNetScan ) {
// Avoid to print header out of wizard.
$this -> prepareBreadcrum ( $breadcrum );
2019-04-09 18:33:02 +02:00
ui_print_page_header (
__ ( 'NetScan' ),
'' ,
false ,
'' ,
true ,
'' ,
false ,
'' ,
GENERIC_SIZE_TEXT ,
'' ,
$this -> printHeader ( true )
);
2019-02-21 11:19:38 +01:00
}
2019-02-18 14:00:55 +01:00
if ( isset ( $this -> page ) === true
2019-02-14 17:19:20 +01:00
&& $this -> page != 0
&& isset ( $this -> task [ 'id_rt' ]) === false
) {
// Error.
ui_print_error_message (
__ ( 'Internal error, please re-run this wizard.' )
);
$form = [
'form' => [
'method' => 'POST' ,
2019-02-15 13:08:44 +01:00
'action' => $this -> url . '&mode=netscan&page=0' ,
2019-02-14 17:19:20 +01:00
],
'inputs' => [
[
'arguments' => [
'type' => 'hidden' ,
'name' => 'page' ,
'value' => 0 ,
],
],
[
'arguments' => [
'name' => 'submit' ,
'label' => __ ( 'Go back' ),
'type' => 'submit' ,
'attributes' => 'class="sub cancel"' ,
'return' => true ,
],
],
],
];
$this -> printForm ( $form );
return null ;
}
2019-02-14 13:27:49 +01:00
2019-02-14 17:19:20 +01:00
// -------------------------------.
// Page 0. wizard starts HERE.
// -------------------------------.
2019-02-18 14:00:55 +01:00
if ( isset ( $this -> page ) === true || $this -> page == 0 ) {
2019-02-14 13:27:49 +01:00
if ( isset ( $this -> page ) === false
|| $this -> page == 0
) {
2019-04-22 17:46:04 +02:00
// Comment input
2019-05-09 08:45:55 +02:00
$comment_input = '<div class="label_select"><label>' . __ ( 'Comment' ) . ':</label></div>' ;
2019-04-22 17:46:04 +02:00
2019-05-09 08:45:55 +02:00
$comment_input .= $this -> printInput (
[
2019-04-22 17:46:04 +02:00
'name' => 'comment' ,
'rows' => 1 ,
'columns' => 1 ,
'value' => $this -> task [ 'description' ],
'type' => 'textarea' ,
'size' => 25 ,
'class' => 'discovery_textarea_input' ,
2019-05-09 08:45:55 +02:00
'return' => true ,
]
);
2019-04-22 17:46:04 +02:00
// Task input
$taskname_input_label = '<div class="label_select"><label>' . __ ( 'Task name' ) . ':</label></div>' ;
2019-05-09 08:45:55 +02:00
$taskname_input = $this -> printInput (
[
2019-02-14 13:27:49 +01:00
'name' => 'taskname' ,
2019-02-15 13:08:44 +01:00
'value' => $this -> task [ 'name' ],
2019-02-14 13:27:49 +01:00
'type' => 'text' ,
'size' => 25 ,
2019-05-09 08:45:55 +02:00
'class' => 'discovery_full_width_input' ,
]
);
2019-02-14 13:27:49 +01:00
2019-04-22 17:46:04 +02:00
// Network input
$network_input_label .= '<div class="label_select discovery_label_hint"><label>' . __ ( 'Network' ) . ':</label>' . ui_print_help_tip ( __ ( 'You can specify several networks, separated by commas, for example: 192.168.50.0/24,192.168.60.0/24' ), true ) . '</div>' ;
2019-02-15 13:08:44 +01:00
2019-05-09 08:45:55 +02:00
$network_input = $this -> printInput (
[
2019-04-22 17:46:04 +02:00
'name' => 'network' ,
'value' => $this -> task [ 'subnet' ],
2019-02-14 17:19:20 +01:00
'type' => 'text' ,
'size' => 25 ,
2019-04-22 17:46:04 +02:00
'class' => 'discovery_full_width_input' ,
2019-05-09 08:45:55 +02:00
]
);
2019-02-14 13:27:49 +01:00
2019-04-22 17:46:04 +02:00
// Discovery server input
$discovery_server_select_label = '<div class="label_select discovery_label_hint"><label>' . __ ( 'Discovery server' ) . ':</label>' . ui_print_help_tip ( __ ( 'You must select a Discovery Server to run the Task, otherwise the Recon Task will never run' ), true ) . '</div>' ;
2019-02-14 13:27:49 +01:00
2019-05-09 08:45:55 +02:00
$discovery_server_select = $this -> printInput (
[
'type' => 'select_from_sql' ,
'sql' => sprintf (
' SELECT id_server , name
2019-04-22 17:46:04 +02:00
FROM tserver
WHERE server_type = % d
ORDER BY name ' ,
2019-05-09 08:45:55 +02:00
SERVER_TYPE_DISCOVERY
),
'name' => 'id_recon_server' ,
'selected' => $this -> task [ 'id_recon_server' ],
'return' => true ,
'style' => 'width: 100%' ,
]
);
2019-02-14 13:27:49 +01:00
2019-04-22 17:46:04 +02:00
// Interval input
2019-02-18 14:00:55 +01:00
$interv_manual = 0 ;
if (( int ) $this -> task [ 'interval_sweep' ] == 0 ) {
$interv_manual = 1 ;
}
2019-04-22 17:46:04 +02:00
$interval_input_label = '<div class="label_select discovery_label_hint" style="padding-top: 6px;"><label>' . __ ( 'Interval' ) . ':</label>' . ui_print_help_tip ( __ ( 'Manual interval means that it will run only on demand.' ), true ) . '</div>' ;
2019-05-09 08:45:55 +02:00
$interval_input = $this -> printInput (
[
'type' => 'select' ,
'selected' => $interv_manual ,
'fields' => [
0 => __ ( 'Defined' ),
1 => __ ( 'Manual' ),
],
'name' => 'interval_manual_defined' ,
'return' => true ,
'style' => 'float: right;' ,
]
);
2019-04-22 17:46:04 +02:00
$interval_input_extra = '<span id="interval_manual_container">' . html_print_extended_select_for_time (
2019-05-09 08:45:55 +02:00
'interval' ,
$this -> task [ 'interval_sweep' ],
'' ,
'' ,
'0' ,
false ,
true ,
false ,
false
) . ui_print_help_tip (
__ ( 'The minimum recomended interval for Recon Task is 5 minutes' ),
true
) . '</span>' ;
2019-02-15 13:08:44 +01:00
2019-04-22 17:46:04 +02:00
// Group select
$group_select = '<div class="label_select"><label>' . __ ( 'Group' ) . ':</label></div>' ;
2019-02-14 13:27:49 +01:00
2019-05-09 08:45:55 +02:00
$group_select .= $this -> printInput (
[
2019-04-24 12:32:33 +02:00
'name' => 'id_group' ,
'returnAllGroup' => false ,
'privilege' => 'PM' ,
'type' => 'select_groups' ,
'selected' => $this -> task [ 'id_group' ],
'return' => true ,
'class' => 'discovery_list_input' ,
'size' => 9 ,
'simple_multiple_options' => true ,
2019-05-09 08:45:55 +02:00
]
);
if ( isset ( $this -> task [ 'id_rt' ]) === true ) {
// Propagate ID
$task_hidden = $this -> printInput (
[
'name' => 'task' ,
'value' => $this -> task [ 'id_rt' ],
'type' => 'hidden' ,
]
);
2019-04-22 17:46:04 +02:00
}
2019-02-14 13:27:49 +01:00
2019-02-15 13:57:33 +01:00
$task_url = '' ;
if ( isset ( $this -> task [ 'id_rt' ])) {
$task_url = '&task=' . $this -> task [ 'id_rt' ];
}
2019-02-20 14:38:00 +01:00
// Default.
$interval = 600 ;
$unit = 60 ;
if ( isset ( $this -> task [ 'interval_sweep' ]) === true ) {
$interval = $this -> task [ 'interval_sweep' ];
$unit = $this -> getTimeUnit ( $interval );
}
2019-02-14 17:14:01 +01:00
// XXX: Could be improved validating inputs before continue (JS)
2019-02-14 13:27:49 +01:00
// Print NetScan page 0.
2019-05-09 08:45:55 +02:00
// $this->printForm($form);
2019-04-22 17:46:04 +02:00
echo '<form action="' . $this -> url . '&mode=netscan&page=' . ( $this -> page + 1 ) . $task_url . '" method="POST">' ;
echo $task_hidden ;
echo ' < div class = " white_box " >
< div class = " edit_discovery_info " style = " margin-bottom: 15px; " >
2019-05-09 08:45:55 +02:00
< div style = " width: 25%; padding: 9px; " > '.' < div style = " height: 50%; margin-bottom: 35px; " > '.html_print_image(' images / wizard / netscan_green . png ', true, [' title ' => __(' Close ')], false).' </ div > '.' < div class = " edit_discovery_input " >< div style = " display: flex; " > '.$interval_input_label.' < div style = " margin-left: 15 px; width: 50%; " > '.$interval_input.' </ div ></ div > '.$interval_input_extra.' </ div > '.' </ div >
2019-04-22 17:46:04 +02:00
< div style = " width: 40%; padding-left: 5%; padding-right: 12%; " >
2019-05-09 08:45:55 +02:00
< div class = " edit_discovery_input " > '.$taskname_input_label.' < div class = " discovery_text_input " > '.$taskname_input.' </ div ></ div > '.' < div class = " edit_discovery_input discovery_select_input " > '.$discovery_server_select_label.$discovery_server_select.' < div class = " discovery_hint " ></ div ></ div > '.' < div class = " edit_discovery_input " > '.$network_input_label.' < div class = " discovery_text_input " > '.$network_input.' </ div ></ div > '.' </ div > '.' < div style = " width: 35%; " > '.$group_select.' </ div > '.' </ div > '.' < div class = " edit_discovery_info " >
2019-04-22 17:46:04 +02:00
< div style = " width: 100%; " >
'.$comment_input.'
</ div >
2019-05-09 08:45:55 +02:00
</ div > '.' </ div > ' ;
2019-04-22 17:46:04 +02:00
$str = __ ( 'Next' );
if ( isset ( $this -> task [ 'id_rt' ]) === true ) {
$str = __ ( 'Update and continue' );
}
echo '<div class="action-buttons" style="width: 100%; margin-top: 10px;">' . html_print_submit_button ( $str , 'submit' , false , 'class="sub next"' , true ) . '</div>' ;
echo '</form>' ;
echo ' < script >
$ ( " select#interval_manual_defined " ) . change ( function () {
if ( $ ( " #interval_manual_defined " ) . val () == 1 ) {
$ ( " #interval_manual_container " ) . hide ();
$ ( " #text-interval_text " ) . val ( 0 );
$ ( " #hidden-interval " ) . val ( 0 );
}
else {
$ ( " #interval_manual_container " ) . show ();
$ ( " #text-interval_text " ) . val ( 10 );
$ ( " #hidden-interval " ) . val ( '.$interval.' );
$ ( " #interval_units " ) . val ( '.$unit.' );
}
}) . change ();
</ script > ' ;
2019-02-14 13:27:49 +01:00
}
}
2019-02-14 11:53:06 +01:00
2019-02-14 13:27:49 +01:00
if ( $this -> page == 1 ) {
// Page 1.
2019-02-14 17:14:01 +01:00
$form = [];
// Hidden, id_rt.
$form [ 'inputs' ][] = [
'arguments' => [
'name' => 'task' ,
'value' => $this -> task [ 'id_rt' ],
'type' => 'hidden' ,
'return' => true ,
],
];
// Hidden, page.
$form [ 'inputs' ][] = [
'arguments' => [
'name' => 'page' ,
'value' => ( $this -> page + 1 ),
'type' => 'hidden' ,
'return' => true ,
],
];
$form [ 'inputs' ][] = [
2019-04-22 17:46:04 +02:00
'extra' => '<p><h3>Please, configure task <b>' . io_safe_output ( $this -> task [ 'name' ]) . '</b></h3></p>' ,
2019-02-14 17:14:01 +01:00
];
// Input: Module template.
$form [ 'inputs' ][] = [
'label' => __ ( 'Module template' ),
'arguments' => [
2019-02-18 14:00:55 +01:00
'name' => 'id_network_profile' ,
'type' => 'select_from_sql' ,
'sql' => ' SELECT id_np , name
2019-02-14 17:14:01 +01:00
FROM tnetwork_profile
ORDER BY name ' ,
2019-02-18 14:00:55 +01:00
'return' => true ,
'selected' => $this -> task [ 'id_network_profile' ],
'nothing_value' => 0 ,
'nothing' => __ ( 'None' ),
2019-02-14 17:14:01 +01:00
],
];
2019-02-18 14:00:55 +01:00
if ( enterprise_installed () === true ) {
// Input: Enable auto configuration.
$form [ 'inputs' ][] = [
'label' => __ ( 'Apply autoconfiguration rules' ) . ui_print_help_tip (
__ (
'System is able to auto configure detected host & devices by applying your defined configuration rules.'
),
true
),
'arguments' => [
'name' => 'autoconfiguration_enabled' ,
'type' => 'switch' ,
'return' => true ,
'value' => ( isset ( $this -> task [ 'autoconfiguration_enabled' ])) ? $this -> task [ 'autoconfiguration_enabled' ] : 0 ,
],
];
}
2019-02-26 20:00:41 +01:00
if ( enterprise_installed ()) {
// Feature configuration.
2019-02-26 20:23:52 +01:00
$extra = enterprise_hook ( 'hd_showextrainputs' , [ $this ]);
if ( is_array ( $extra ) === true ) {
$form [ 'inputs' ] = array_merge (
$form [ 'inputs' ],
$extra [ 'inputs' ]
);
$form [ 'js' ] = $extra [ 'js' ];
}
2019-02-26 20:00:41 +01:00
}
2019-02-14 17:14:01 +01:00
// Submit button.
$form [ 'inputs' ][] = [
'arguments' => [
'name' => 'submit' ,
2019-02-18 14:00:55 +01:00
'label' => __ ( 'Finish' ),
2019-02-14 17:14:01 +01:00
'type' => 'submit' ,
'attributes' => 'class="sub next"' ,
'return' => true ,
],
];
$form [ 'form' ] = [
'method' => 'POST' ,
2019-02-15 13:08:44 +01:00
'action' => $this -> url . '&mode=netscan&page=' . ( $this -> page + 1 ) . '&task=' . $this -> task [ 'id_rt' ],
2019-02-14 17:14:01 +01:00
];
2019-04-22 17:46:04 +02:00
$this -> printForm ( $form , false , true );
2019-02-14 17:14:01 +01:00
}
if ( $this -> page == 2 ) {
2019-02-15 13:08:44 +01:00
if ( $this -> task [ 'id_rt' ]) {
// 0 - Is OK.
$this -> result = 0 ;
$this -> msg = __ ( 'Task configured.' );
} else {
// 1 - Is NOT OK.
$this -> result = 1 ;
$this -> msg = __ ( 'Wizard failed. Cannot configure task.' );
}
2019-02-14 11:53:06 +01:00
return [
'result' => $this -> result ,
2019-02-15 13:08:44 +01:00
'id' => $this -> task [ 'id_rt' ],
2019-02-14 11:53:06 +01:00
'msg' => $this -> msg ,
];
2019-02-12 14:39:01 +01:00
}
}
}