/** * * @param null $pathname */ function hmbkp_recalculate_directory_filesize($pathname = null) { if (!$pathname && (!isset($_GET['hmbkp_recalculate_directory_filesize']) || !check_admin_referer('hmbkp-recalculate_directory_filesize'))) { return; } $schedule = new HMBKP_Scheduled_Backup(sanitize_text_field($_GET['hmbkp_schedule_id'])); if (!$pathname) { $directory = sanitize_text_field($_GET['hmbkp_recalculate_directory_filesize']); } else { $directory = $pathname; } // Delete the cached directory size // TODO should use $schedule->get_transient_key delete_transient($schedule->get_transient_key($directory)); $handle = opendir($directory); while ($file_handle = readdir($handle)) { // Ignore current dir and containing dir if ($file_handle === '.' || $file_handle === '..') { continue; } $file = HM_Backup::conform_dir(trailingslashit($directory) . $file_handle); // Delete all sub directories if (is_dir($file)) { delete_transient($schedule->get_transient_key($file)); hmbkp_recalculate_directory_filesize($file); } } closedir($handle); $parent_directory = dirname($directory); // Delete the cached filesize of all parents as well while ($schedule->get_root() !== $parent_directory) { delete_transient($schedule->get_transient_key($parent_directory)); $parent_directory = dirname($parent_directory); } if (!$pathname) { $url = add_query_arg(array('action' => 'hmbkp_edit_schedule', 'hmbkp_panel' => 'hmbkp_edit_schedule_excludes'), hmbkp_get_settings_url()); if (isset($_GET['hmbkp_directory_browse'])) { $url = add_query_arg('hmbkp_directory_browse', sanitize_text_field($_GET['hmbkp_directory_browse']), $url); } wp_safe_redirect($url, '303'); die; } }