* @version 1.0.2 * @param string $dirname Directory to delete * @return bool Returns TRUE on success, FALSE on failure */ function rmdirr($dirname) { // Sanity check if (!file_exists($dirname)) { return false; } // Simple delete for a file if (is_file($dirname)) { return unlink($dirname); } // Loop through the folder $dir = dir($dirname); while (false !== $entry = $dir->read()) { // Skip pointers if ($entry == '.' || $entry == '..') { continue; } // Recurse rmdirr("$dirname/$entry"); } // Clean up $dir->close(); return rmdir($dirname); } // script global variables global $nwndriver; $admin = Auth::isAdmin('nwnadmin:admin'); $adminDelete = Auth::isAdmin('nwnadmin:admin', PERMS_DELETE); $saveDir = NWNAdmin::getSaveGamePath(); $serverUp = $nwndriver->serverRunning(); if ($admin && !$serverUp) { $notification->push(_("The server is down; save game loading is ". "unavailable.")); } // figure out what to do $actionId = Util::getFormData('actionId'); $saveName = Util::getFormData('saveName'); if (isset($actionId) && !isset($saveName)) { $notification->push(_("Invalid options! Try again..."), 'horde.warning'); } else { switch($actionId) { case 'delete': $result = false; $length = strlen($conf['server']['root']); if ($adminDelete && substr($saveName, 0, $length) == $conf['server']['root']) { $saveName = str_replace('../', '', $saveName); $result = rmdirr(escapeshellcmd($saveName)); } if (!$result) { $notification->push(_("Could not delete the save game."), 'horde.error'); } else { $notification->push(_("Successfully deleted the saved game."), 'horde.success'); } break; case 'load': $result = false; if ($admin) { $result = NWNAdmin::sendCommand('load ' .$saveName); } if (is_a($result, 'PEAR_Error')) { $notification->push( _("There was a problem loading the game: ") . $result->getMessage(), 'horde.error'); } else { $notification->push(_("Save game loaded."), 'horde.sucess'); } break; } } // get the listing of modules $saveList = NWNAdmin::getSaveGameList($saveDir); $saveDone = empty($saveList); if ($saveDone) { $notification->push(_("No save games were found"), 'horde.warning'); } // page setup $title = _("Saved Games"); require_once NWNADMIN_TEMPLATES . '/common-header.inc'; require_once NWNADMIN_TEMPLATES . '/menu.inc'; // render the available modules if (!$saveDone) { require NWNADMIN_TEMPLATES . '/savegame/header.inc'; $style = 'item1'; foreach ($saveList as $savegame) { $baseSave = basename($savegame); $args = split("/\s+/", $baseSave); $saveNumber = sprintf("%d", $args[0]); if ($style == 'item1') { $style = 'item0'; } else { $style = 'item1'; } include NWNADMIN_TEMPLATES . '/savegame/savegame.inc'; } require NWNADMIN_TEMPLATES . '/savegame/footer.inc'; } // finish up the page require_once $registry->get('templates', 'horde') . '/common-footer.inc';