4 Star 8 Fork 1

Gitee 极速下载/Cacti

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
.github
cache
cli
contrib
docs
formats
images
include
install
lib
locales
log
mibs
plugins
resource
rra
scripts
service
tests
.gitignore
.mdl_style.rb
.mdlrc
.php-cs-fixer.php
.phpstan.neon
.pre-commit-config.yaml
CHANGELOG
CODE_OF_CONDUCT.md
LICENSE
README.md
SECURITY.md
about.php
aggregate_graphs.php
aggregate_templates.php
auth_2fa.php
auth_changepassword.php
auth_login.php
auth_profile.php
auth_resetpassword.php
automation_devices.php
automation_graph_rules.php
automation_networks.php
automation_snmp.php
automation_templates.php
automation_tree_rules.php
cacti.sql
cactid.php
cdef.php
changelog.php
clog.php
clog_user.php
cmd.php
cmd_realtime.php
color.php
color_templates.php
composer.json
composer.lock
data_debug.php
data_input.php
data_queries.php
data_source_profiles.php
data_sources.php
data_templates.php
gprint_presets.php
graph.php
graph_image.php
graph_json.php
graph_realtime.php
graph_templates.php
graph_view.php
graph_xport.php
graphs.php
graphs_new.php
help.php
host.php
host_templates.php
index.php
link.php
links.php
logout.php
managers.php
oauth2.php
package.php
package_import.php
package_keys.php
package_repos.php
permission_denied.php
plugins.php
poller.php
poller_automation.php
poller_boost.php
poller_commands.php
poller_dsstats.php
poller_maintenance.php
poller_realtime.php
poller_recovery.php
poller_reports.php
poller_rrdcheck.php
poller_spikekill.php
pollers.php
rector.php
remote_agent.php
reports.php
rrdcheck.php
rrdcleaner.php
script_server.php
service_check.php
settings.php
sites.php
snmpagent_mibcache.php
snmpagent_mibcachechild.php
snmpagent_persist.php
spikekill.php
src-check
src-fixer
src-lint
support.php
templates_export.php
templates_import.php
tree.php
user_admin.php
user_domains.php
user_group_admin.php
user_log.php
utilities.php
vdef.php
此仓库是为了提升国内下载速度的镜像仓库,每日同步一次。 原始仓库: https://github.com/Cacti/cacti
克隆/下载
automation_devices.php 21.17 KB
一键复制 编辑 原始数据 按行查看 历史
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706
<?php
/*
+-------------------------------------------------------------------------+
| Copyright (C) 2004-2025 The Cacti Group |
| |
| 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; either version 2 |
| of the License, or (at your option) any later version. |
| |
| 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. |
+-------------------------------------------------------------------------+
| Cacti: The Complete RRDtool-based Graphing Solution |
+-------------------------------------------------------------------------+
| This code is designed, written, and maintained by the Cacti Group. See |
| about.php and/or the AUTHORS file for specific developer information. |
+-------------------------------------------------------------------------+
| http://www.cacti.net/ |
+-------------------------------------------------------------------------+
*/
require('./include/auth.php');
require_once(CACTI_PATH_LIBRARY . '/api_aggregate.php');
require_once(CACTI_PATH_LIBRARY . '/api_automation.php');
require_once(CACTI_PATH_LIBRARY . '/api_data_source.php');
require_once(CACTI_PATH_LIBRARY . '/api_device.php');
require_once(CACTI_PATH_LIBRARY . '/api_graph.php');
require_once(CACTI_PATH_LIBRARY . '/api_tree.php');
require_once(CACTI_PATH_LIBRARY . '/html_form_template.php');
require_once(CACTI_PATH_LIBRARY . '/data_query.php');
require_once(CACTI_PATH_LIBRARY . '/html_graph.php');
require_once(CACTI_PATH_LIBRARY . '/html_tree.php');
require_once(CACTI_PATH_LIBRARY . '/ping.php');
require_once(CACTI_PATH_LIBRARY . '/poller.php');
require_once(CACTI_PATH_LIBRARY . '/reports.php');
require_once(CACTI_PATH_LIBRARY . '/rrd.php');
require_once(CACTI_PATH_LIBRARY . '/snmp.php');
require_once(CACTI_PATH_LIBRARY . '/template.php');
require_once(CACTI_PATH_LIBRARY . '/utility.php');
$actions = [
1 => __('Add Device'),
2 => __('Delete Device')
];
$os_arr = array_rekey(db_fetch_assoc('SELECT DISTINCT os
FROM automation_devices
WHERE os IS NOT NULL AND os!=""'), 'os', 'os');
$status_arr = [
__('Down'),
__('Up')
];
$networks = array_rekey(db_fetch_assoc('SELECT an.id, an.name
FROM automation_networks AS an
INNER JOIN automation_devices AS ad
ON an.id=ad.network_id
ORDER BY name'), 'id', 'name');
set_default_action();
switch(get_request_var('action')) {
case 'purge':
purge_discovery_results();
break;
case 'actions':
form_actions();
break;
case 'export':
export_discovery_results();
break;
default:
display_discovery_page();
break;
}
function form_actions() {
global $actions, $availability_options;
/* ================= input validation ================= */
get_filter_request_var('drp_action', FILTER_VALIDATE_REGEXP, ['options' => ['regexp' => '/^([a-zA-Z0-9_]+)$/']]);
/* ==================================================== */
/* if we are to save this form, instead of display it */
if (isset_request_var('selected_items')) {
$selected_items = sanitize_unserialize_selected_items(get_nfilter_request_var('selected_items'));
if ($selected_items != false) {
if (get_nfilter_request_var('drp_action') == '1') { /* add to cacti */
$i = 0;
foreach ($selected_items as $id) {
$d = db_fetch_row_prepared('SELECT * FROM automation_devices WHERE id = ?', [$id]);
$d['poller_id'] = get_filter_request_var('poller_id');
$d['host_template'] = get_filter_request_var('host_template');
$d['availability_method'] = get_filter_request_var('availability_method');
$d['notes'] = __('Added manually through device automation interface.');
$d['snmp_sysName'] = $d['sysName'];
// pull ping options from network_id
$n = db_fetch_row_prepared('SELECT * FROM automation_networks WHERE id = ?', [$d['network_id']]);
if (cacti_sizeof($n)) {
$d['ping_method'] = $n['ping_method'];
$d['ping_port'] = $n['ping_port'];
$d['ping_timeout'] = $n['ping_timeout'];
$d['ping_retries'] = $n['ping_retries'];
}
$host_id = automation_add_device($d, true);
$description = (trim($d['hostname']) != '' ? $d['hostname'] : $d['ip']);
if ($host_id) {
raise_message('automation_msg_' . $i, __esc('Device %s Added to Cacti', $description), MESSAGE_LEVEL_INFO);
} else {
raise_message('automation_msg_' . $i, __esc('Device %s Not Added to Cacti', $description), MESSAGE_LEVEL_ERROR);
}
$i++;
}
} elseif (get_nfilter_request_var('drp_action') == 2) { /* remove device */
foreach ($selected_items as $id) {
db_execute_prepared('DELETE FROM automation_devices WHERE id = ?', [$id]);
}
raise_message('automation_remove', __('Devices Removed from Cacti Automation database'), MESSAGE_LEVEL_INFO);
}
}
header('Location: automation_devices.php');
exit;
} else {
$ilist = '';
$iarray = [];
/* default variables */
$pollers = [];
$host_templates = [];
$poller_id = 0;
$availability_method = 0;
$host_template = 0;
/* loop through each of the graphs selected on the previous page and get more info about them */
foreach ($_POST as $var => $val) {
if (preg_match('/^chk_([0-9]+)$/', $var, $matches)) {
/* ================= input validation ================= */
input_validate_input_number($matches[1], 'chk[1]');
/* ==================================================== */
$ilist .= '<li>' . html_escape(db_fetch_cell_prepared('SELECT CONCAT(IF(hostname!="", hostname, "unknown"), " (", ip, ")") FROM automation_devices WHERE id = ?', [$matches[1]])) . '</li>';
$iarray[] = $matches[1];
}
}
if (cacti_sizeof($iarray) && get_request_var('drp_action') == '1') { /* add */
$pollers = array_rekey(
db_fetch_assoc_prepared('SELECT id, name
FROM poller
ORDER BY name'),
'id', 'name'
);
$host_templates = array_rekey(
db_fetch_assoc_prepared('SELECT id, name
FROM host_template
ORDER BY name'),
'id', 'name'
);
$poller_id = db_fetch_cell_prepared('SELECT id FROM poller WHERE disabled = "" LIMIT 1');
if (empty($poller_id)) {
$poller_id = $pollers[0]['id'];
}
$devices = db_fetch_assoc('SELECT id, sysName, sysDescr
FROM automation_devices
WHERE id IN (' . implode(',', $iarray) . ')');
foreach ($devices as $device) {
$os = automation_find_os($device['sysDescr'], '', $device['sysName']);
if (isset($os['host_template']) && $os['host_template'] > 0) {
if ($host_template == 0) {
$host_template = $os['host_template'];
$availability_method = $os['availability_method'];
} elseif ($host_template != $os['host_template']) {
$host_template = 0;
$availability_method = 0;
break;
}
} else {
$host_template = 0;
$availability_method = 0;
break;
}
}
}
$form_data = [
'general' => [
'page' => 'automation_devices.php',
'actions' => $actions,
'optvar' => 'drp_action',
'item_array' => $iarray,
'item_list' => $ilist
],
'options' => [
1 => [
'smessage' => __('Click \'Continue\' to Add the following Discovered Device to Cacti.'),
'pmessage' => __('Click \'Continue\' to Add the following Discovered Devices to Cacti.'),
'scont' => __('Add Discovered Device'),
'pcont' => __('Add Discovered Devices'),
'extra' => [
'poller_id' => [
'method' => 'drop_array',
'title' => __('Poller'),
'array' => $pollers,
'default' => $poller_id,
'name' => 'name',
'id' => 'id',
],
'host_template' => [
'method' => 'drop_array',
'title' => __('Device Template'),
'array' => $host_templates,
'default' => $host_template,
'name' => 'name',
'id' => 'id',
],
'availability_method' => [
'method' => 'drop_array',
'title' => __('Availability Method'),
'array' => $availability_options,
'default' => $availability_method,
'name' => 'name',
'id' => 'id',
],
]
],
2 => [
'smessage' => __('Click \'Continue\' to Remove the following Discovered Device.'),
'pmessage' => __('Click \'Continue\' to Remove the following Discovered Devices.'),
'scont' => __('Remove Discovered Device'),
'pcont' => __('Remove Discovered Devices'),
]
]
];
form_continue_confirmation($form_data);
}
}
function display_discovery_page() {
global $item_rows, $os_arr, $status_arr, $networks, $actions;
top_header();
draw_automation_devices_filter(true);
$total_rows = 0;
if (get_request_var('rows') == '-1') {
$rows = read_config_option('num_rows_table');
} else {
$rows = get_request_var('rows');
}
$results = get_discovery_results($total_rows, $rows);
/* generate page list */
$nav = html_nav_bar('automation_devices.php', MAX_DISPLAY_PAGES, get_request_var('page'), $rows, $total_rows, 12, __('Devices'), 'page', 'main');
form_start('automation_devices.php', 'chk');
print $nav;
html_start_box('', '100%', false, 3, 'center', '');
$display_text = [
'host_id' => [
'display' => __('Imported Device'),
'align' => 'left',
'sort' => 'ASC'
],
'hostname' => [
'display' => __('Device Name'),
'align' => 'left',
'sort' => 'ASC'
],
'ip' => [
'display' => __('IP'),
'align' => 'left',
'sort' => 'ASC'
],
'network_id' => [
'display' => __('Network'),
'align' => 'left',
'sort' => 'ASC'
],
'sysName' => [
'display' => __('SNMP Name'),
'align' => 'left',
'sort' => 'ASC'
],
'sysLocation' => [
'display' => __('Location'),
'align' => 'left',
'sort' => 'ASC'
],
'sysContact' => [
'display' => __('Contact'),
'align' => 'left',
'sort' => 'ASC'
],
'sysDescr' => [
'display' => __('Description'),
'align' => 'left',
'sort' => 'ASC'
],
'os' => [
'display' => __('OS'),
'align' => 'left',
'sort' => 'ASC'
],
'time' => [
'display' => __('Uptime'),
'align' => 'right',
'sort' => 'DESC'
],
'snmp' => [
'display' => __('SNMP'),
'align' => 'right',
'sort' => 'DESC'
],
'up' => [
'display' => __('Status'),
'align' => 'right',
'sort' => 'ASC'
],
'mytime' => [
'display' => __('Last Check'),
'align' => 'right',
'sort' => 'DESC'
]
];
html_header_sort_checkbox($display_text, get_request_var('sort_column'), get_request_var('sort_direction'), false);
$snmp_version = read_config_option('snmp_version');
$snmp_port = read_config_option('snmp_port');
$snmp_timeout = read_config_option('snmp_timeout');
$snmp_username = read_config_option('snmp_username');
$snmp_password = read_config_option('snmp_password');
$max_oids = read_config_option('max_get_size');
$ping_method = read_config_option('ping_method');
$availability_method = read_config_option('availability_method');
$status = ["<span class='deviceDown'>" . __('Down') . '</span>',"<span class='deviceUp'>" . __('Up') . '</span>'];
if (cacti_sizeof($results)) {
foreach ($results as $host) {
$description = get_device_description($host['host_id']);
$network = get_network_description($host['network_id']);
form_alternate_row('line' . base64_encode($host['ip']), true);
if ($host['hostname'] == '') {
$host['hostname'] = __('Not Detected');
}
form_selectable_cell(filter_value($description, ''), $host['id']);
form_selectable_cell(filter_value($host['hostname'], get_request_var('filter')), $host['id']);
form_selectable_cell(filter_value($host['ip'], get_request_var('filter')), $host['id']);
form_selectable_cell(filter_value($network, ''), $host['id']);
form_selectable_cell(filter_value(snmp_data($host['sysName']), get_request_var('filter')), $host['id'], '', 'text-align:left');
form_selectable_cell(filter_value(snmp_data($host['sysLocation']), get_request_var('filter')), $host['id'], '', 'text-align:left');
form_selectable_cell(filter_value(snmp_data($host['sysContact']), get_request_var('filter')), $host['id'], '', 'text-align:left');
form_selectable_cell(filter_value(snmp_data($host['sysDescr']), get_request_var('filter')), $host['id'], '', 'text-align:left;white-space:normal;');
form_selectable_cell(filter_value(snmp_data($host['os']), get_request_var('filter')), $host['id'], '', 'text-align:left');
form_selectable_cell(snmp_data(get_uptime($host)), $host['id'], '', 'text-align:right');
form_selectable_cell($status[$host['snmp']], $host['id'], '', 'text-align:right');
form_selectable_cell($status[$host['up']], $host['id'], '', 'text-align:right');
form_selectable_cell(substr($host['mytime'],0,16), $host['id'], '', 'text-align:right');
form_checkbox_cell($host['ip'], $host['id']);
form_end_row();
}
} else {
print '<tr class="tableRow odd"><td colspan="' . (cacti_sizeof($display_text) + 1) . '"><em>' . __('No Devices Found') . '</em></td></tr>';
}
html_end_box(false);
if (cacti_sizeof($results)) {
print $nav;
}
/* draw the dropdown containing a list of available actions for this form */
draw_actions_dropdown($actions);
form_end();
bottom_footer();
}
function get_device_description($id) {
if ($id > 0) {
$description = db_fetch_cell_prepared('SELECT description FROM host WHERE id = ?', [$id]);
if (empty($description)) {
return __('Removed from Cacti');
} else {
return $description;
}
} else {
return __('Not In Cacti');
}
}
function get_network_description($id) {
if ($id > 0) {
$description = db_fetch_cell_prepared('SELECT name FROM automation_networks WHERE id = ?', [$id]);
if (empty($description)) {
return __('Removed from Cacti');
} else {
return $description;
}
} else {
return __('Invalid Network');
}
}
function get_discovery_results(&$total_rows = 0, $rows = 0, $export = false) {
global $os_arr, $status_arr, $networks, $actions;
$sql_where = '';
$status = get_request_var('status');
$network = get_request_var('network');
$snmp = get_request_var('snmp');
$os = get_request_var('os');
$filter = get_request_var('filter');
$sql_where = '';
$sql_params = [];
if ($status != '-1') {
$sql_where .= 'WHERE up = ?';
$sql_params[] = $status;
}
if ($network > 0) {
$sql_where .= ($sql_where != '' ? ' AND ':'WHERE ') . 'network_id = ?';
$sql_params[] = $network;
}
if ($snmp != '-1') {
$sql_where .= ($sql_where != '' ? ' AND ':'WHERE ') . 'snmp = ?';
$sql_params[] = $snmp;
}
if ($os != '-1' && in_array($os, $os_arr, true)) {
$sql_where .= ($sql_where != '' ? ' AND ':'WHERE ') . 'os = ?';
$sql_params[] = $network;
}
if ($filter != '') {
$sql_where .= ($sql_where != '' ? ' AND ':'WHERE ') .
'(hostname LIKE ? OR ip LIKE ? OR sysName LIKE ? OR sysDescr LIKE ? OR sysLocation LIKE ? OR sysContact LIKE ?)';
$sql_params[] = "%$filter%";
$sql_params[] = "%$filter%";
$sql_params[] = "%$filter%";
$sql_params[] = "%$filter%";
$sql_params[] = "%$filter%";
$sql_params[] = "%$filter%";
}
if ($export) {
return db_fetch_assoc_prepared("SELECT *
FROM automation_devices
$sql_where
ORDER BY INET_ATON(ip)",
$sql_params);
} else {
$total_rows = db_fetch_cell_prepared("SELECT
COUNT(*)
FROM automation_devices
$sql_where",
$sql_params);
$page = get_request_var('page');
$sql_order = get_order_string();
$sql_limit = ' LIMIT ' . ($rows * ($page - 1)) . ',' . $rows;
$sql_query = "SELECT *,sysUpTime snmp_sysUpTimeInstance, FROM_UNIXTIME(time) AS mytime
FROM automation_devices
$sql_where
$sql_order
$sql_limit";
return db_fetch_assoc_prepared($sql_query, $sql_params);
}
}
function create_automation_devices_filter() {
global $item_rows, $os_arr, $status_arr, $networks;
$any = [-1 => __('Any')];
$networks_arr = $any + $networks;
$status_arr = $any + $status_arr;
$os_arr = $any + $os_arr;
return [
'rows' => [
[
'filter' => [
'method' => 'textbox',
'friendly_name' => __('Search'),
'filter' => FILTER_DEFAULT,
'placeholder' => __('Enter a search term'),
'size' => '30',
'default' => '',
'pageset' => true,
'max_length' => '120',
'value' => ''
],
'network' => [
'method' => 'drop_array',
'friendly_name' => __('Network'),
'filter' => FILTER_VALIDATE_INT,
'default' => '-1',
'pageset' => true,
'array' => $networks_arr,
'value' => '-1'
]
],
[
'status' => [
'method' => 'drop_array',
'friendly_name' => __('Status'),
'filter' => FILTER_VALIDATE_INT,
'default' => '-1',
'pageset' => true,
'array' => $status_arr,
'value' => '-1'
],
'os' => [
'method' => 'drop_array',
'friendly_name' => __('OS'),
'filter' => FILTER_DEFAULT,
'default' => '-1',
'pageset' => true,
'array' => $os_arr,
'value' => '-1'
],
'snmp' => [
'method' => 'drop_array',
'friendly_name' => __('SNMP'),
'filter' => FILTER_VALIDATE_INT,
'default' => '-1',
'pageset' => true,
'array' => $status_arr,
'value' => '-1'
],
'rows' => [
'method' => 'drop_array',
'friendly_name' => __('Devices'),
'filter' => FILTER_VALIDATE_INT,
'default' => '-1',
'pageset' => true,
'array' => $item_rows,
'value' => '-1'
]
]
],
'buttons' => [
'go' => [
'method' => 'submit',
'display' => __('Go'),
'title' => __('Apply filter to table'),
],
'clear' => [
'method' => 'button',
'display' => __('Clear'),
'title' => __('Reset filter to default values'),
],
'export' => [
'method' => 'button',
'display' => __('Export'),
'action' => 'default',
'title' => __('Export the Discovered Devices to CSV'),
'callback' => 'document.location = \'automation_devices.php?action=export\''
],
'purge' => [
'method' => 'button',
'display' => __('Purge'),
'action' => 'default',
'title' => __('Purge the Discovered Devices from the Database'),
]
],
'sort' => [
'sort_column' => 'hostname',
'sort_direction' => 'ASC'
]
];
}
function draw_automation_devices_filter($render = false) {
global $item_rows, $filters, $os_arr, $status_arr, $networks, $actions;
$filters = create_automation_devices_filter();
/* create the page filter */
$pageFilter = new CactiTableFilter(__('Discovered Devices'), 'automation_devices.php', 'form_devices', 'sess_autom_device');
$pageFilter->rows_label = __('Devices');
$pageFilter->set_filter_array($filters);
if ($render) {
$pageFilter->render();
} else {
$pageFilter->sanitize();
}
}
function export_discovery_results() {
draw_automation_devices_filter(false);
$results = get_discovery_results($total_rows, 0, true);
header('Content-type: application/csv');
header('Content-Disposition: attachment; filename=discovery_results.csv');
print "Host,IP,System Name,System Location,System Contact,System Description,OS,Uptime,SNMP,Status\n";
if (cacti_sizeof($results)) {
foreach ($results as $host) {
if (isset($host['sysUpTime']) && $host['sysUpTime'] != 0) {
$days = intval($host['sysUpTime'] / 8640000);
$hours = intval(($host['sysUpTime'] - ($days * 8640000)) / 360000);
$uptime = $days . ' days ' . $hours . ' hours';
} else {
$uptime = '';
}
foreach ($host as $h=>$r) {
$host['$h'] = str_replace(',','',$r);
}
print ($host['hostname'] == '' ? __('Not Detected'):$host['hostname']) . ',';
print $host['ip'] . ',';
print export_data($host['sysName']) . ',';
print export_data($host['sysLocation']) . ',';
print export_data($host['sysContact']) . ',';
print export_data($host['sysDescr']) . ',';
print export_data($host['os']) . ',';
print export_data($uptime) . ',';
print ($host['snmp'] == 1 ? __('Up'):__('Down')) . ',';
print ($host['up'] == 1 ? __('Up'):__('Down')) . "\n";
}
}
}
function purge_discovery_results() {
get_filter_request_var('network');
if (get_request_var('network') > 0) {
db_execute_prepared('DELETE FROM automation_devices WHERE network_id = ?', [get_request_var('network')]);
} else {
db_execute('TRUNCATE TABLE automation_devices');
}
header('Location: automation_devices.php');
exit;
}
function snmp_data($item) {
if ($item == '') {
return __('N/A');
} else {
return html_escape(str_replace(':',' ', $item));
}
}
function export_data($item) {
if ($item == '') {
return 'N/A';
} else {
return $item;
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/mirrors/Cacti.git
git@gitee.com:mirrors/Cacti.git
mirrors
Cacti
Cacti
develop

搜索帮助