Ejemplo n.º 1
0
/**
 *
 * @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;
    }
}