예제 #1
0
/**
 * 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;
    }
}
예제 #2
0
 /**
  * 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;
 }