/** * Helper Function to completely remove a subdirectory * * @param string $dirname * @return boolean */ function vmRemoveDirectoryR($dirname) { if ($dirHandle = opendir($dirname)) { $old_cwd = getcwd(); chdir($dirname); while ($file = readdir($dirHandle)) { if ($file == '.' || $file == '..') { continue; } if (is_dir($file)) { if (!vmRemoveDirectoryR($file)) { return false; } } else { if (!@unlink($file)) { return false; } } } closedir($dirHandle); chdir($old_cwd); if (!@rmdir($dirname)) { return false; } return true; } else { return false; } }
/** * Deletes the Patch Package File and its extracted contents * * @param array $d * @return boolean */ function removePackageFile(&$d) { global $vm_mainframe, $vmLogger; $packageFile = vmGet($_SESSION, 'vm_updatepackage'); if (empty($packageFile) || !file_exists($packageFile)) { return true; } $packageDir = vmUpdate::getPackageDir($packageFile); if (!empty($packageDir)) { $result = vmRemoveDirectoryR($packageDir); if (!$result) { $vmLogger->err('Failed to remove the Directory of the Patch Package'); } $result = @unlink($packageFile); if (!$result) { $vmLogger->err('Failed to remove the Patch Package File'); return false; } unset($_SESSION['vm_updatepackage']); unset($_SESSION['vmLatestVersion']); } if (vmIsXHR()) { $vm_mainframe->addResponseScript('parent.loadPage("' . $GLOBALS['sess']->url($_SERVER['PHP_SELF'] . '?page=admin.update_check', false, false) . '");'); } return true; }