126 lines
3.5 KiB
PHP
126 lines
3.5 KiB
PHP
<?php
|
|
@define('NWNADMIN_BASE', dirname(__FILE__));
|
|
|
|
require_once NWNADMIN_BASE . '/lib/base.php';
|
|
|
|
/**
|
|
* Delete a file, or a folder and its contents
|
|
*
|
|
* @author Aidan Lister <aidan@php.net>
|
|
* @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';
|