* Relocate schema to includes/database.php via plugin table API + db_update_table upgrade
* CI: allowlist unmeasured schema bootstrap and web entry points
* CI: keep include_once for the settings-page-only lib/reports.php load (uncoverable)
* Add manifest.json + upgrade-time file pruning; consolidate themes/ into css/
* database: keep user-owned dashboards table across uninstall
api_plugin_db_table_create() records plugin_monitor_dashboards in
plugin_db_changes, so api_plugin_db_changes_remove() (run by
api_plugin_uninstall() after plugin_monitor_uninstall()) would drop it
even though monitor_drop_tables() intentionally leaves it in place. Remove
the 'create' ownership record after provisioning (install and upgrade
paths) so user dashboards survive an uninstall. Adds a regression test.
* Prune phpunit.xml on upgrade and ignore markdown-lint configs
phpunit.xml ships in the repo for CI but is a dev-only test artifact, so it
is removed from manifest.json 'expected', pruned from installs on upgrade
(like tests/), and excluded from the manifest drift check.
The retired markdown-lint configs (.mdlrc, .md_style.rb) are deleted, and
.md* is now ignored like .git*: protected from pruning and excluded from
drift if it reappears.
* Move libraries into includes/, flatten css, drop sonar config
db_functions.php, monitor_render.php and monitor_controller.php move into
includes/ (the latter two lose the monitor_ prefix, becoming render.php and
controller.php); monitor.php and the tests load them from there. Each per-theme
stylesheet css/<theme>/monitor.css becomes css/<theme>.css so users can drop
their own css/<theme>.css into the css base, and plugin_monitor_page_head()
looks there, falling back to css/monitor.css. The unreferenced
sonar-project.properties is removed. Old paths are tombstoned so existing
installs drop the stale copies on upgrade.
* Rename includes/db_functions.php to includes/functions.php
Follows the fleet convention for the plugin's shared library filename; monitor.php,
the measured-source list and the unit test load it from the new name.
* Regenerate cacti.pot for the includes/ file relocations
Moving the plugin's library files into includes/ changed the source-reference
lines in the translation template; regenerate it so the 'Verify translation
template' CI check passes.
* Harden prune against tampered-manifest path traversal
The upgrade-time prune now rejects any tombstone containing '.'/'..' segments
(which could escape the plugin directory or resolve to its root) and treats
ancestors of whitelist entries as protected, so a tombstone on a parent
directory can no longer delete a whitelisted file beneath it.
* docs: update and align the Project Structure block
Point the structure tree at the relocated files (libraries now under
includes/, data files under docs/, stylesheets under css/) and align the
trailing '# ...' comments to a single column so they no longer drift right.
* docs/tests: standardize test header and correct manifest-contract notes
- Use the full license header (from the plugin's own setup.php) in
tests/Unit/PruneFilesTest.php instead of the abbreviated copyright banner.
- Document that the manifest drift check and the upgrade-time prune also
handle phpunit.xml and .md* files, matching the implemented behavior.
* refactor: rename prune helpers to the plugin-slug function prefix
The repository naming contract reserves the plugin_<name>_ prefix for plugin
lifecycle / hook-registration functions; all other functions use the plain
<name>_ prefix. Rename the internal upgrade helpers accordingly:
plugin_<name>_prune_files() -> <name>_prune_files()
plugin_<name>_rmtree() -> <name>_rmtree()
The call site, unit tests, and the copilot-instructions.md references are
updated to match. No behavioral change.
* chore: set the Cacti compatibility floor to 1.2.29
Align the compat metadata (and the contributor-guide references) with the
team decision to standardize the minimum supported Cacti version at 1.2.29;
the previously proposed 1.2.32 floor was not adopted.
* Bump plugin version to 3.0 so the upgrade-time cleanup migration runs
Add a 3.0 CHANGELOG section for this cycle's schema/manifest work and set
INFO version = 3.0 so existing 2.9 installs detect the version change and
run the schema refresh and manifest-based file prune.
---------
Co-authored-by: Copilot <copilot@users.noreply.github.com>
* fix: don't apply jQuery UI selectmenu on the criticality select if select2 already did
Cacti core is converting its global select-enhancement catch-all from
jQuery UI selectmenu to select2. If core's catch-all already turned the
dynamically-inserted #criticality select into a select2, skip re-applying
selectmenu to it here too, so it doesn't render twice.
* chore: bump minimum compatible Cacti version to 1.2.32
* fix: wire applyFilter() to the select2 branch of the criticality select
Copilot review caught this: the select2-hidden-accessible branch skipped
selectmenu's change:applyFilter() callback entirely, so choosing a
criticality no longer reloaded the filtered device list once core had
already converted the select to select2. Bind change->applyFilter()
directly in that branch instead.
Also regenerate locales/po/cacti.pot (and the merged .po/.mo files) via
locales/build_gettext.sh - setup.php's line numbers shifted.
This change loads the Monitor CSS in the header instead inline in the
HTML code. This will eliminate the annoying flash you get with the
screen every time you refresh the page.
This is a fix for issue #61 where monitor_list was not being used to notify of reboots. It also includes a feature request to override the threshold alert list inclusion so only monitor_list is used.