public static function copyFiles($sourceDir, $directories)
 {
     /* Normalize directory paths */
     MODXInstaller::normalize($directories);
     MODXInstaller::normalize($sourceDir);
     /* Copy directories */
     foreach ($directories as $source => $target) {
         MODXInstaller::mmkDir($target);
         set_time_limit(0);
         MODXInstaller::copyFolder($sourceDir . '/' . $source, $target);
     }
 }
    $modxProcessorsPath = str_replace('\\', '/', $modxProcessorsPath);
    if (strpos(MODX_PROCESSORS_PATH, 'core/model/modx/processors') === false) {
        $directories['core/model/modx/processors'] = $modxProcessorsPath;
    }
    /* Copy directories */
    foreach ($directories as $source => $target) {
        set_time_limit(0);
        MODXInstaller::copyFolder(dirname(__FILE__) . '/temp/' . $dir . '/' . $source, $target);
    }
    MODXInstaller::removeFolder(dirname(__FILE__) . '/temp');
    /* Clear cache files */
    $path = MODX_CORE_PATH . 'cache';
    if (is_dir($path)) {
        MODXInstaller::removeFolder($path);
        /* recreate cache dir */
        MODXInstaller::mmkDir($path);
    }
    unlink(basename(__FILE__));
    header('Location: ' . $rowInstall['location']);
} else {
    $ItemGrid = array();
    foreach ($InstallData as $ver => $item) {
        $ItemGrid[$item['tree']][$ver] = $item;
    }
    /* Display the Form */
    echo '
<!DOCTYPE html>
<html>
<head>
    <title>UpgradeMODX</title>
    <meta charset="utf-8">