]> ###&version; - Fix: the webGui removes csrf_token from $_POST before a plugin handler runs, so every button reported an invalid token. The token is now read back from the request body PHP received. ###2026.08.12.4 - Fix: recover form fields from the raw request body. nginx can pass a body to php-fpm without a CONTENT_LENGTH, and PHP then leaves $_POST empty even though the body arrived intact — which rejected every button as a CSRF failure. ###2026.08.12.3 - Fix: the settings page read the CSRF token from a webGui global that is not always populated, so every button was rejected. It now reads the token the same way the handlers verify it, and says so on the page when none exists. ###2026.08.12.2 - Fix: errors from a proxy or an expired session no longer print a raw HTML page into the settings status line. - Fix: build request bodies from named fields, so the webGui's markdown renderer restructuring the page cannot drop or duplicate the CSRF token. - Fix: time-bound `docker info` and `du` so an unresponsive daemon or disk fails the request instead of hanging it. ###2026.08.12.1 - Fix: the schedule was never applied on Unraid 7.x. update_cron moved to /usr/local/sbin; both locations are now probed, and a missing one is reported instead of passing silently. ###2026.08.12 - Initial release: scheduled `docker image prune -a -f`, plus a manual, confirmation-gated removal of unused volumes. &gitURL;/&pkgName; &md5; # Remove any older package so only one version is ever on flash. for pkg in &plgPATH;/&name;-*.txz; do [ "$pkg" = "&plgPATH;/&pkgName;" ] && continue [ -f "$pkg" ] && rm -f "$pkg" done upgradepkg --install-new --reinstall &plgPATH;/&pkgName; # Seed the config on first install only; an upgrade keeps the user's settings. mkdir -p &plgPATH; if [ ! -f &plgPATH;/&name;.cfg ]; then cp &emhttp;/default.cfg &plgPATH;/&name;.cfg fi # Apply whatever the config says. Never touches volumes. &emhttp;/scripts/cron-apply.sh || echo "Warning: the schedule could not be applied." echo "" echo "----------------------------------------------------" echo " Docker Cleanup &version; installed" echo " Settings -> User Utilities -> Docker Cleanup" echo "----------------------------------------------------" echo "" # Stop the scheduled job first, before the script that does it disappears. if [ -x &emhttp;/scripts/cron-apply.sh ]; then &emhttp;/scripts/cron-apply.sh --disable else rm -f &plgPATH;/&name;.cron for uc in /usr/local/sbin/update_cron /usr/local/emhttp/webGui/scripts/update_cron; do [ -x "$uc" ] && "$uc" && break done fi # Remove by the full registered package name, not the bare plugin name — # that is what upgradepkg actually registered under /var/log/packages. removepkg &pkgBase; 2>/dev/null rm -rf &emhttp; rm -f /var/log/docker-cleanup.log rm -f &plgPATH;/&name;-*.txz # The .plg installer manifest lives flat under /boot/config/plugins, not # inside &plgPATH; — that subdirectory holds only this plugin's own data. rm -f /boot/config/plugins/&name;.plg # The user's settings stay on flash so a reinstall restores the schedule. echo "" echo "Docker Cleanup removed. Your settings were kept at &plgPATH;/&name;.cfg" echo ""