summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoremkael <emkael@tlen.pl>2018-11-14 00:02:29 +0100
committeremkael <emkael@tlen.pl>2018-11-14 00:15:51 +0100
commite80a2610d5b29b35fa7a787bb5e8ae72c856c2c8 (patch)
treef12c608e07acd7c4c52654c4a49b662f1718a1aa
parent9e6bd1bd8eeb3aa9dd3ca43dbe7f798b88c46dd0 (diff)
Matching tournament prefixes and rounds in board DB against URI parts, not the other way around.
Fixes #1
-rw-r--r--tdd/tdd-bootstrap.php9
-rw-r--r--tdd/tdd-protocol.php46
2 files changed, 33 insertions, 22 deletions
diff --git a/tdd/tdd-bootstrap.php b/tdd/tdd-bootstrap.php
index 6efbf7b..03dc621 100644
--- a/tdd/tdd-bootstrap.php
+++ b/tdd/tdd-bootstrap.php
@@ -14,7 +14,7 @@ class Protocol {
static::$translations = json_decode(file_get_contents('translations.json'), TRUE);
}
$this->deals_by_tables = array();
- if(!file_exists($this->get_filename())) {
+ if (!file_exists($this->get_filename())) {
throw new Exception('file not found: ' . $this->get_filename());
}
}
@@ -190,8 +190,9 @@ class Deal {
define('TIMESTAMP_FILE', '.tdd-timestamps.cache');
define('RECORDS_FILE', '.tdd-records.cache');
-function load_deals_for_tables($prefix, $round, $board_in_teamy) {
- $db = unserialize(file_get_contents(RECORDS_FILE));
+$board_database = unserialize(file_get_contents(RECORDS_FILE));
+
+function load_deals_for_tables($db, $prefix, $round, $board_in_teamy) {
if (isset($db[$prefix])) {
if (isset($db[$prefix][$round])) {
if (isset($db[$prefix][$round][$board_in_teamy])) {
@@ -214,6 +215,7 @@ function get_files_timestamps($files = array()) {
}
function compile_record_database($files, $dbFile) {
+ global $board_database;
$db = array();
foreach ($files as $filename) {
$filename = basename($filename);
@@ -263,6 +265,7 @@ function compile_record_database($files, $dbFile) {
}
}
file_put_contents(RECORDS_FILE, serialize($db));
+ $board_database = $db;
}
function refresh_board_database() {
diff --git a/tdd/tdd-protocol.php b/tdd/tdd-protocol.php
index 7130599..f8a6e3e 100644
--- a/tdd/tdd-protocol.php
+++ b/tdd/tdd-protocol.php
@@ -1,31 +1,39 @@
<?php
-$prefix = $_GET['prefix'];
-$round = (int)$_GET['round'];
-$board = (int)$_GET['board'];
-
require_once('tdd-bootstrap.php');
refresh_board_database();
-$protocol = new Protocol($prefix, $round, $board);
-
-// security check
-$html_filename = $protocol->get_filename();
-$len = strlen($html_filename);
-$request_uri_ending = substr($_SERVER['REQUEST_URI'], -$len-1);
-if($request_uri_ending != '/' . $html_filename) {
+// parsing URI parts from full request string
+$uri = explode('b-', basename($_SERVER['REQUEST_URI']));
+if (count($uri) < 2) {
die('This script cannot be called directly!');
}
-//
-$deals_by_tables = load_deals_for_tables($prefix, $round, $board);
-if (count($deals_by_tables) > 0) {
- foreach($deals_by_tables as $table => $deal) {
- $protocol->set_deal($table, $deal);
+$board = (int)(array_pop($uri));
+$roundPrefix = implode('b-', $uri);
+
+try {
+ // GET parameters pre-parsed by mod_rewrite are used for HTML fallback
+ // in case {$prefix}{$round} combo is not matched against board DB
+ $protocol = new Protocol($_GET['prefix'], $_GET['round'], $board);
+ $html_filename = $protocol->get_filename();
+ foreach ($board_database as $prefix => $rounds) {
+ foreach ($rounds as $round => $boards) {
+ if ($prefix . $round === $roundPrefix) {
+ $deals_by_tables = load_deals_for_tables($board_database, $prefix, $round, $board);
+ if (count($deals_by_tables) > 0) {
+ foreach($deals_by_tables as $table => $deal) {
+ $protocol->set_deal($table, $deal);
+ }
+ echo $protocol->output();
+ exit(0);
+ }
+ }
+ }
}
- echo $protocol->output();
-}
-else {
readfile($html_filename);
+} catch (Exception $e) {
+ header('HTTP/1.0 404 Not Found');
+ die();
}