Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 32 additions & 13 deletions .github/workflows/plugin-ci-workflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,12 @@ jobs:
strategy:
fail-fast: false
matrix:
php: ['8.1', '8.2', '8.3']
php: ['8.1', '8.2', '8.3', '8.4']
os: [ubuntu-latest]

services:
mysql:
image: mysql:8.0
mariadb:
image: mariadb:10.6
env:
MYSQL_ROOT_PASSWORD: cactiroot
MYSQL_DATABASE: cacti
Expand All @@ -66,7 +66,7 @@ jobs:
repository: Cacti/cacti
path: cacti

- name: Checkout Intropage Plugin
- name: Checkout intropage Plugin
uses: actions/checkout@v4
with:
path: cacti/plugins/intropage
Expand All @@ -81,7 +81,6 @@ jobs:
- name: Check PHP version
run: php -v


- name: Run apt-get update
run: sudo apt-get update

Expand Down Expand Up @@ -141,7 +140,6 @@ jobs:
sed -r "s/'cactiuser'/'cactiuser'/g" > ${{ github.workspace }}/cacti/include/config.php
sudo chmod 664 ${{ github.workspace }}/cacti/include/config.php


- name: Configure Apache
run: |
cat << 'EOF' | sed 's#GITHUB_WORKSPACE#${{ github.workspace }}#g' > /tmp/cacti.conf
Expand All @@ -167,11 +165,10 @@ jobs:
cd ${{ github.workspace }}/cacti
sudo php cli/install_cacti.php --accept-eula --install --force

- name: Install Intropage Plugin
- name: Install intropage Plugin
run: |
cd ${{ github.workspace }}/cacti
sudo php cli/plugin_manage.php --plugin=intropage --install --enable


- name: Check PHP Syntax for Plugin
run: |
Expand All @@ -180,19 +177,41 @@ jobs:
echo "Syntax errors found!"
exit 1
fi

- name: Remove the plugins directory exclusion from the .phpstan.neon
run: sed '/plugins/d' -i .phpstan.neon
working-directory: ${{ github.workspace }}/cacti

- name: Mark composer scripts executable
run: sudo chmod +x ${{ github.workspace }}/cacti/include/vendor/bin/*

- name: Run Linter on base code
run: composer run-script lint ${{ github.workspace }}/cacti/plugins/intropage
working-directory: ${{ github.workspace }}/cacti

- name: Checking coding standards on base code
run: composer run-script phpcsfixer ${{ github.workspace }}/cacti/plugins/intropage
working-directory: ${{ github.workspace }}/cacti

# - name: Run PHPStan at Level 6 on base code outside of Composer due to technical issues
# run: ./include/vendor/bin/phpstan analyze --level 6 ${{ github.workspace }}/cacti/plugins/intropage
# working-directory: ${{ github.workspace }}/cacti

- name: Run intropage poller
- name: Run Cacti Poller
run: |
cd ${{ github.workspace }}/cacti
sudo php poller.php --poller=1 --force --debug
if ! grep -q "SYSTEM STATS" log/cacti.log; then
echo "Cacti poller did not finish successfully"
cat log/cacti.log
exit 1
fi
sudo php plugins/intropage/poller_intropage.php



- name: View Cacti Logs
if: always()
run: |
if [ -f ${{ github.workspace }}/cacti/log/cacti.log ]; then
echo "=== Cacti Log ==="
sudo cat ${{ github.workspace }}/cacti/log/cacti.log
fi


91 changes: 44 additions & 47 deletions display.php
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ function display_information() {
db_execute_prepared('INSERT INTO plugin_intropage_user_auth
(user_id)
VALUES (?)',
array($_SESSION['sess_user_id']));
[$_SESSION['sess_user_id']]);

$user_panels = 0;
}
Expand Down Expand Up @@ -82,19 +82,19 @@ function display_information() {
$number_of_dashboards = db_fetch_cell_prepared('SELECT COUNT(*)
FROM plugin_intropage_dashboard
WHERE user_id = ?',
array($_SESSION['sess_user_id']));
[$_SESSION['sess_user_id']]);

// console access
$console_access = api_plugin_user_realm_auth('index.php');

// remove admin prohibited panels
$panels = db_fetch_assoc_prepared ('SELECT pd.panel_id AS panel_name, pd.id AS id
$panels = db_fetch_assoc_prepared('SELECT pd.panel_id AS panel_name, pd.id AS id
FROM plugin_intropage_panel_data AS pd
INNER JOIN plugin_intropage_panel_dashboard AS pda
ON pd.id = pda.panel_id
WHERE pda.user_id = ?
AND pda.dashboard_id = ?',
array($_SESSION['sess_user_id'], $dashboard_id));
[$_SESSION['sess_user_id'], $dashboard_id]);

if (cacti_sizeof($panels)) {
$removed = 0;
Expand All @@ -107,12 +107,12 @@ function display_information() {
WHERE user_id = ?
AND dashboard_id = ?
AND panel_id = ?',
array($_SESSION['sess_user_id'], $dashboard_id, $one['id']));
[$_SESSION['sess_user_id'], $dashboard_id, $one['id']]);

db_execute_prepared('DELETE FROM plugin_intropage_panel_data
WHERE user_id = ?
AND panel_id = ?',
array($_SESSION['sess_user_id'], $one['id']));
[$_SESSION['sess_user_id'], $one['id']]);

$removed++;
}
Expand Down Expand Up @@ -148,12 +148,12 @@ function display_information() {
AND t3.panel_id = 'favourite_graph'
AND t3.fav_graph_id IS NOT NULL
$sql_order",
array(
[
$_SESSION['sess_user_id'],
$dashboard_id,
$_SESSION['sess_user_id'],
$dashboard_id
)
]
);

// remove prohibited panels (for common panels (user_id=0))
Expand All @@ -162,18 +162,18 @@ function display_information() {
$allowed = is_panel_allowed($value['panel_id']);

if (!$allowed) {
unset ($panels[$key]);
unset($panels[$key]);
} else {
// user has permission but no active panel
$upanels = db_fetch_cell_prepared('SELECT COUNT(*)
FROM plugin_intropage_panel_dashboard
WHERE user_id = ?
AND dashboard_id = ?
AND panel_id = ?',
array($_SESSION['sess_user_id'], $dashboard_id, $value['id']));
[$_SESSION['sess_user_id'], $dashboard_id, $value['id']]);

if ($upanels == 0) {
unset ($panels[$key]);
unset($panels[$key]);
}
}
}
Expand All @@ -182,15 +182,15 @@ function display_information() {
// Notice about disable cacti dashboard
if (read_config_option('hide_console') != 'on') {
print '<table class="cactiTable"><tr><td class="textAreaNotes">' . __('You can disable rows above in <b>Configure > Settings > General > Hide Cacti Dashboard</b> and use the whole page for Intropage ', 'intropage');
print '<a class="pic" href="' . $config['url_path'] . 'settings.php?tab=general&filter=hide"><i class="intro_glyph fas fa-link"></i></a></td></tr></table></br>';
print '<a class="pic" href="' . $config['url_path'] . 'settings.php?tab=general&filter=hide"><i class="intro_glyph fas fa-link"></i></a></td></tr></table></br>';
}

$dashboards = array_rekey(
db_fetch_assoc_prepared ('SELECT dashboard_id, name
db_fetch_assoc_prepared('SELECT dashboard_id, name
FROM plugin_intropage_dashboard
WHERE user_id = ?
ORDER BY dashboard_id',
array($_SESSION['sess_user_id'])),
[$_SESSION['sess_user_id']]),
'dashboard_id', 'name'
);

Expand All @@ -203,18 +203,18 @@ function display_information() {
db_execute_prepared('INSERT INTO plugin_intropage_dashboard
(user_id, dashboard_id, name)
VALUES (?, ?, ?)',
array($_SESSION['sess_user_id'], $dashboard_id, $dashboards[1]));
[$_SESSION['sess_user_id'], $dashboard_id, $dashboards[1]]);
}

// wide or normal number of panels on line
if ($display_wide == 'on') {
$width_quarter = 'calc(25% - 1em)';
$width_third = 'calc(33% - 1em)';
$width_half = 'calc(50% - 1em)';
$width_third = 'calc(33% - 1em)';
$width_half = 'calc(50% - 1em)';
} else {
$width_quarter = 'calc(33% - 1em)';
$width_third = 'calc(50% - 1em)';
$width_half = 'calc(66% - 1em)';
$width_third = 'calc(50% - 1em)';
$width_half = 'calc(66% - 1em)';
}

// Intropage Display ----------------------------------
Expand All @@ -234,7 +234,7 @@ function display_information() {
}
}

print "</ul></nav></div>";
print '</ul></nav></div>';
print '</div>';
print '<div class="float_right">';

Expand All @@ -254,15 +254,15 @@ function display_information() {

print "<select id='intropage_action_timespan'>";

foreach($trend_timespans as $key => $value) {
foreach ($trend_timespans as $key => $value) {
if ($timespan == $key) {
print "<option value='timespan_$key' selected='selected'>" . $value . '</option>';
} else {
print "<option value='timespan_$key'>" . $value . '</option>';
}
}

print "</select>";
print '</select>';
print '&nbsp; &nbsp; ';

print "<select id='intropage_action'>";
Expand Down Expand Up @@ -364,7 +364,6 @@ function display_information() {

print '<option value="" disabled="disabled">─────────────────────────</option>';


if ($display_important_first == 'on') {
print "<option value='important_first' disabled='disabled'>" . __('Sort by Severity', 'intropage') . '</option>';
print "<option value='important_no'>" . __('Sort by User Preference', 'intropage') . '</option>';
Expand Down Expand Up @@ -412,7 +411,7 @@ function display_information() {
(SELECT COUNT(panel_id) FROM plugin_intropage_panel_dashboard WHERE dashboard_id = t2.dashboard_id AND user_id = ?) as panels
FROM plugin_intropage_dashboard AS t2
WHERE user_id = ? AND dashboard_id = ?',
array ($_SESSION['sess_user_id'], $_SESSION['sess_user_id'], $_SESSION['dashboard_id']));
[$_SESSION['sess_user_id'], $_SESSION['sess_user_id'], $_SESSION['dashboard_id']]);

if (!empty($actual)) {
if ($actual['shared']) {
Expand All @@ -432,17 +431,16 @@ function display_information() {

$shared_dashboards = db_fetch_assoc_prepared('SELECT dashboard_id,name,user_id FROM plugin_intropage_dashboard
WHERE shared = 1 AND user_id != ?',
array ($_SESSION['sess_user_id']));
[$_SESSION['sess_user_id']]);

if (cacti_sizeof($shared_dashboards) > 0) {

foreach ($shared_dashboards as $sd) {
$text = ' (' . get_username($sd['user_id']) . ' - ' . $sd['name'] . ')' ;
foreach ($shared_dashboards as $sd) {
$text = ' (' . get_username($sd['user_id']) . ' - ' . $sd['name'] . ')';

if ($number_of_dashboards < 9) {
print "<option value='useshared_" . $sd['dashboard_id'] . "_" . $sd['user_id'] . "'>" . __('Use shared dashboard', 'intropage') . $text . '</option>';
print "<option value='useshared_" . $sd['dashboard_id'] . '_' . $sd['user_id'] . "'>" . __('Use shared dashboard', 'intropage') . $text . '</option>';
} else {
print "<option value='useshared_" . $sd['dashboard_id'] . "_" . $sd['user_id'] . "' disabled='disabled'>" . __('Cannot use shared dashboard - dashboard limit reached.', 'intropage') . $text . '</option>';
print "<option value='useshared_" . $sd['dashboard_id'] . '_' . $sd['user_id'] . "' disabled='disabled'>" . __('Cannot use shared dashboard - dashboard limit reached.', 'intropage') . $text . '</option>';
}
}
} else {
Expand Down Expand Up @@ -508,16 +506,15 @@ function display_information() {
$first_db = db_fetch_cell_prepared('SELECT MIN(IFNULL(dashboard_id, 1))
FROM plugin_intropage_dashboard
WHERE user_id = ?',
array($_SESSION['sess_user_id']));
[$_SESSION['sess_user_id']]);

// extra maint plugin panel - always first
if (api_plugin_is_enabled('maint') && (read_config_option('intropage_maint_plugin_days_before') >= 0)) {

$row = db_fetch_row_prepared("SELECT id, data
FROM plugin_intropage_panel_data
WHERE panel_id = 'maint'
AND user_id = ?",
array($_SESSION['sess_user_id']));
[$_SESSION['sess_user_id']]);

if (isset($row['data']) && $row['data'] != null && $dashboard_id == $first_db) {
intropage_create_panel($row['id'], $dashboard_id);
Expand Down Expand Up @@ -550,32 +547,32 @@ function display_information() {

var refresh;
var pollerRefresh;
var intropage_autorefresh = <?php print $autorefresh;?>;
var intropage_autorefresh = <?php print $autorefresh; ?>;
var intropage_drag = true;
var intropage_square = true;
var callbackPage = '';
var redirectPage = '';
var fullPage = <?php print $display_important_first == 'on' ? 'true':'false';?>;
var dashboard_id = <?php print $dashboard_id;?>;
var intropage_text_panel_details = '<?php print __('Panel Details', 'intropage');?>';
var intropage_text_panel_disable = '<?php print __esc('Disable panel move/Enable copy text from panel', 'intropage');?>';
var intropage_text_panel_enable = '<?php print __esc('Enable panel move/Disable copy text from panel', 'intropage');?>';
var intropage_text_square_disable = '<?php print __esc('Hide red/yellow/green square notifications', 'intropage');?>';
var intropage_text_square_enable = '<?php print __esc('Show red/yellow/green square notifications', 'intropage');?>';
var fullPage = <?php print $display_important_first == 'on' ? 'true' : 'false'; ?>;
var dashboard_id = <?php print $dashboard_id; ?>;
var intropage_text_panel_details = '<?php print __('Panel Details', 'intropage'); ?>';
var intropage_text_panel_disable = '<?php print __esc('Disable panel move/Enable copy text from panel', 'intropage'); ?>';
var intropage_text_panel_enable = '<?php print __esc('Enable panel move/Disable copy text from panel', 'intropage'); ?>';
var intropage_text_square_disable = '<?php print __esc('Hide red/yellow/green square notifications', 'intropage'); ?>';
var intropage_text_square_enable = '<?php print __esc('Show red/yellow/green square notifications', 'intropage'); ?>';

var intropage_text_data_error = '<?php print __('Error reading new data', 'intropage');?>';
var intropage_text_close = '<?php print __('Close', 'intropage');?>';
var intropage_text_data_error = '<?php print __('Error reading new data', 'intropage'); ?>';
var intropage_text_close = '<?php print __('Close', 'intropage'); ?>';

var panels = {};

var intropage_panel_quarter_width = '<?php echo $width_quarter; ?>';
var intropage_panel_third_width = '<?php echo $width_third; ?>';
var intropage_panel_half_width = '<?php echo $width_half; ?>';
var intropage_panel_quarter_width = '<?php print $width_quarter; ?>';
var intropage_panel_third_width = '<?php print $width_third; ?>';
var intropage_panel_half_width = '<?php print $width_half; ?>';

</script>

<?php
print get_md5_include_js($config['base_path'].'/plugins/intropage/include/intropage.js');
print get_md5_include_js($config['base_path'] . '/plugins/intropage/include/intropage.js');

return true;
}
Loading