diff --git a/src/Controllers/ServerController.php b/src/Controllers/ServerController.php
index 49ec284..c16827c 100644
--- a/src/Controllers/ServerController.php
+++ b/src/Controllers/ServerController.php
@@ -117,4 +117,36 @@ class ServerController extends Controller {
->withStatus(302);
}
+ // GET edit server properties route
+ public function getEdit(Request $request, Response $response, $args): Response {
+ $config = $this->get('config');
+ $serverDir = join('/', array($config->get('server_directory'), $args['serverName']));
+
+ $server = new Server($serverDir);
+ $data = array(
+ 'serverName' => $args['serverName'],
+ 'serverPort' => $server->getProperty('server-port'),
+ );
+
+ $view = Twig::fromRequest($request);
+ return $view->render($response, 'edit.twig', $data);
+ }
+
+ // POST edit server properties route
+ public function postEdit(Request $request, Response $response, $args): Response {
+ // set up the POST parameters and grab our config
+ $params = (array)$request->getParsedBody();
+ $config = $this->get('config');
+ $serverDir = join('/', array($config->get('server_directory'), $args['serverName']));
+
+ // create server object and save new value
+ $server = new Server($serverDir);
+ $server->updateProperty('server-port', $params['serverPort']);
+
+ // redirect the user back to the home page
+ return $response
+ ->withHeader('Location', '/')
+ ->withStatus(302);
+ }
+
}
diff --git a/src/Minecraft/Server.php b/src/Minecraft/Server.php
index 23dada3..a5f5632 100644
--- a/src/Minecraft/Server.php
+++ b/src/Minecraft/Server.php
@@ -84,11 +84,16 @@ class Server {
return -1;
}
- // get parameter from server properties file
+ // get property from server properties file
public function getProperty(string $param) {
return $this->properties->get($param);
}
+ // update property in server properties file
+ public function updateProperty(string $paramName, $paramValue) {
+ $this->properties->update($paramName, $paramValue);
+ }
+
// getters & setters
public function getDirectory(): string {
return $this->rootDir;
diff --git a/src/Minecraft/ServerConfig.php b/src/Minecraft/ServerConfig.php
index 94dcbaf..d1d89ac 100644
--- a/src/Minecraft/ServerConfig.php
+++ b/src/Minecraft/ServerConfig.php
@@ -4,9 +4,13 @@ namespace BitGoblin\MCST\Minecraft;
class ServerConfig {
+ // path to the server.properties file
+ protected string $propertiesFile;
+ // loaded properties
protected array $config;
public function __construct($propertiesFile) {
+ $this->propertiesFile = $propertiesFile; // save the properties file
$this->config = array(); // initialize array
// parse config file
@@ -15,7 +19,7 @@ class ServerConfig {
$line = fgets($fh);
$eqpos = strpos($line, '=');
$parameterName = substr($line, 0, $eqpos);
- $parameterValue = substr($line, ($eqpos + 1));
+ $parameterValue = trim(substr($line, ($eqpos + 1)));
// assign parameter values to the config array
$this->config[$parameterName] = $parameterValue;
@@ -26,4 +30,35 @@ class ServerConfig {
return $this->config[$param];
}
+ public function update(string $paramName, $paramValue) {
+ // update the local variable value
+ $this->config[$paramName] = $paramValue;
+
+ // update and save the server.properties file
+ $newFileContent = '';
+ $fh = fopen($this->propertiesFile, 'r+');
+ while (!feof($fh)) {
+ $line = fgets($fh);
+
+ if (!str_starts_with($line, '#')) {
+ $eqpos = strpos($line, '=');
+ $parameterName = substr($line, 0, $eqpos);
+ $parameterValue = substr($line, ($eqpos + 1));
+
+ // use the new value if it's being updated
+ if ($parameterName == $paramName) {
+ $parameterValue = $paramValue . "\n";
+ }
+
+ $newFileContent .= $parameterName . '=' . $parameterValue;
+ } else {
+ $newFileContent .= $line;
+ }
+ }
+
+ // save the new properties file
+ file_put_contents($this->propertiesFile, $newFileContent);
+ fclose($fh);
+ }
+
}
diff --git a/src/routes.php b/src/routes.php
index 45f4b97..5291ce3 100644
--- a/src/routes.php
+++ b/src/routes.php
@@ -21,3 +21,8 @@ $app->get('/server/{serverName}/status', '\\BitGoblin\\MCST\\Controllers\\Server
$app->get('/server/{serverName}/start', '\\BitGoblin\\MCST\\Controllers\\ServerController:getStart')->setName('server.start');
// server stop route
$app->get('/server/{serverName}/stop', '\\BitGoblin\\MCST\\Controllers\\ServerController:getStop')->setName('server.stop');
+
+// edit GET route - this page allows a user to edit a server's properties
+$app->get('/server/{serverName}/edit', '\\BitGoblin\\MCST\\Controllers\\ServerController:getEdit')->setName('edit');
+// edit POST route - processes the edits a server's properties file
+$app->post('/server/{serverName}/edit', '\\BitGoblin\\MCST\\Controllers\\ServerController:postEdit');
diff --git a/views/edit.twig b/views/edit.twig
new file mode 100644
index 0000000..32a6a6e
--- /dev/null
+++ b/views/edit.twig
@@ -0,0 +1,35 @@
+{% extends 'layout.twig' %}
+
+{% block content %}
+
+
+Edit server: {{ serverName }}
+