From 5a1f6c832883367ca4925443c63ed2aefb6514fd Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Sat, 30 Dec 2023 10:56:33 +0100 Subject: [PATCH] Add an undo button to the admin interface. --- www/js/remoteglot.js | 25 ++++++++++++++++++++++++- www/manual-override.pl | 25 +++++++++++++++++-------- 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/www/js/remoteglot.js b/www/js/remoteglot.js index ceeff7b..d36bf9e 100644 --- a/www/js/remoteglot.js +++ b/www/js/remoteglot.js @@ -1319,7 +1319,7 @@ function update_board() { document.getElementById("searchstats").textContent = ""; } if (admin_password !== null) { - document.getElementById("searchstats").innerHTML += " | ADMIN MODE (if password is right)"; + document.getElementById("searchstats").innerHTML += " | ADMIN MODE (if password is right) | Undo move"; } // Update the board itself. @@ -2258,6 +2258,29 @@ function send_chosen_move(fen, move) { } } +function undo_move() { + if (admin_password !== null) { + let history = current_analysis_data['position']['history']; + history = history.slice(0, history.length - 1); + + let position = current_analysis_data['position']['start_fen']; + let hiddenboard = chess_from(position, history, history.length); + let fen = hiddenboard.fen(); + + let url = '/manual-override.pl'; + url += '?fen=' + encodeURIComponent(fen); + url += '&history=' + encodeURIComponent(JSON.stringify(history)); + url += '&move=null'; + url += '&player_w=' + encodeURIComponent(current_analysis_data['position']['player_w']); + url += '&player_b=' + encodeURIComponent(current_analysis_data['position']['player_b']); + url += '&password=' + encodeURIComponent(admin_password); + + console.log(fen, history); + fetch(url); // Ignore the result. + } +} +window['undo_move'] = undo_move; + function onSnapEnd(source, target) { if (source === target && recommended_move !== null) { source = recommended_move.from; diff --git a/www/manual-override.pl b/www/manual-override.pl index 1333352..23f571f 100755 --- a/www/manual-override.pl +++ b/www/manual-override.pl @@ -20,14 +20,23 @@ if (!defined($password) || $password ne $remoteglotconf::adminpass) { exit; } -$dbh->do('INSERT INTO game_extensions ( fen, history, player_w, player_b, ts, next_move ) VALUES ( ?, ?, ?, ?, CURRENT_TIMESTAMP, ? )', - undef, - Encode::decode_utf8($cgi->param('fen')), - Encode::decode_utf8($cgi->param('history')), - Encode::decode_utf8($cgi->param('player_w')), - Encode::decode_utf8($cgi->param('player_b')), - Encode::decode_utf8($cgi->param('move'))); -system("sudo", "touch", $remoteglotconf::target); +if ($cgi->param('move') eq 'null') { + $dbh->do('DELETE FROM game_extensions WHERE fen=? AND history=? AND player_w=? AND player_b=?', + undef, + Encode::decode_utf8($cgi->param('fen')), + Encode::decode_utf8($cgi->param('history')), + Encode::decode_utf8($cgi->param('player_w')), + Encode::decode_utf8($cgi->param('player_b'))); +} else { + $dbh->do('INSERT INTO game_extensions ( fen, history, player_w, player_b, ts, next_move ) VALUES ( ?, ?, ?, ?, CURRENT_TIMESTAMP, ? )', + undef, + Encode::decode_utf8($cgi->param('fen')), + Encode::decode_utf8($cgi->param('history')), + Encode::decode_utf8($cgi->param('player_w')), + Encode::decode_utf8($cgi->param('player_b')), + Encode::decode_utf8($cgi->param('move'))); +} +system("sudo", "/usr/bin/touch", $remoteglotconf::target); print CGI->header(-type=>'text/plain; charset=utf-8'); print "OK\n"; -- 2.39.2