From d9e310a50ca51f0db583b8d7c92229d6f40eda97 Mon Sep 17 00:00:00 2001 From: Jake Date: Sun, 20 Jun 2021 21:08:24 +1200 Subject: [PATCH 1/6] transferred from old repo --- app/event.php | 10 ++- app/result.php | 192 +++++++++++++++++++++++++++++++++++++++++++++- html/manager.html | 7 ++ js/manager.js | 106 ++++++++++++++++++++++++- rg2api.php | 7 ++ 5 files changed, 319 insertions(+), 3 deletions(-) diff --git a/app/event.php b/app/event.php index ec74f1a..21a98f7 100644 --- a/app/event.php +++ b/app/event.php @@ -412,6 +412,14 @@ public static function addNewEvent($data) file_put_contents(KARTAT_DIRECTORY."kilpailijat_".$newid.".txt", $result, FILE_APPEND); } + // create new mappings file: result to class + $classmappings = ""; + for ($i = 1; $i < count($data->mappings); $i++) { + $classmappings .= utils::encode_rg_output($data->mappings[$i]->class)."|".utils::encode_rg_output($data->mappings[$i]->course)."|".$i.PHP_EOL; + } + file_put_contents(KARTAT_DIRECTORY."mappings_".$newid.".txt", $classmappings, FILE_APPEND); + + if ($write["status_msg"] == "") { $write["ok"] = true; $write["status_msg"] = "Event created."; @@ -569,4 +577,4 @@ public static function fixResults($id) { utils::unlockDatabase(); } } -} \ No newline at end of file +} diff --git a/app/result.php b/app/result.php index 9af2a42..2e82b60 100644 --- a/app/result.php +++ b/app/result.php @@ -193,6 +193,196 @@ private static function isDefaultComment($comment) return false; } + public static function updateResults($eventid, $data){ + + $date = date("Y-m-dTHis"); + + utils::rg2log($_SERVER['DOCUMENT_ROOT']."/kartat/kilpailijat_".$eventid."_rm_".$date.".txt"); + + // Renaming doesn't work because of locks so copy and write empty + @rename($_SERVER['DOCUMENT_ROOT']."/kartat/kilpailijat_".$eventid.".txt", + $_SERVER['DOCUMENT_ROOT']."/kartat/kilpailijat_".$eventid."_rm_".$date.".txt"); + @rename($_SERVER['DOCUMENT_ROOT']."/kartat/merkinnat_".$eventid.".txt", + $_SERVER['DOCUMENT_ROOT']."/kartat/merkinnat_".$eventid."_rm_".$date.".txt"); + @rename($_SERVER['DOCUMENT_ROOT']."/kartat/kommentit_".$eventid.".txt", + $_SERVER['DOCUMENT_ROOT']."/kartat/kommentit_".$eventid."_rm_".$date.".txt"); + + + // create new kilpailijat file: results + + for ($i = 0; $i < count($data->results); $i++) { + $a = $data->results[$i]; + + // save position and status if we got them + if (isset($a->position)) { + $position = $a->position; + } else { + $position = ''; + } + if (isset($a->status)) { + $status = utils::abbreviateStatus($a->status); + } else { + $status = ''; + } + + // course provided by json is actually result class - update to course name + // based on mapping, and load to txt file if not "Do not save" + + $coursename = ""; + $courseid = ""; + if (($handle = @fopen(KARTAT_DIRECTORY."mappings_".$eventid.".txt", "r")) !== false) { + while (($sa_data = fgetcsv($handle, 0, "|")) !== false) { + if (utils::encode_rg_output($a->course) == $sa_data[0]) { + $coursename = $sa_data[1]; + $courseid = $sa_data[2]; + break; + } + } + } + + if($coursename !== "Do not save"){ + $result = ($i + 1)."|".$courseid."|".utils::encode_rg_output($coursename); + $result .= "|".utils::encode_rg_output(trim($a->name))."|".$a->starttime."|"; + // abusing dbid to save status and position + $result .= utils::encode_rg_output($a->dbid)."_#".$position."#".$status; + $result .= "|".$a->variantid."|".$a->time."|".$a->splits.PHP_EOL; + file_put_contents(KARTAT_DIRECTORY."kilpailijat_".$eventid.".txt", $result, FILE_APPEND); + } + } + + // Get orig and new resultid so we can replace them in comments and routes files + // 1|1|C2|Bridget Anderson|35700|121_#1#OK||00:51:36| + + $kilpailijat = array(); + + if (($oldres = @fopen(KARTAT_DIRECTORY."kilpailijat_".$eventid."_rm_".$date.".txt", "r")) !== false) { + while (($old = fgetcsv($oldres, 0, "|")) !== false) { + + if (($newres = @fopen(KARTAT_DIRECTORY."kilpailijat_".$eventid.".txt", "r")) !== false) { + while (($new = fgetcsv($newres, 0, "|")) !== false) { + + if ($new[3] == $old[3] && $new[2] == $old[2]){ + + $row = array(); + $row["origresultid"] = $old[0]; + $row["newresultid"] = $new[0]; + $row["origcourseid"] = $old[1]; + $row["newcourseid"] = $new[1]; + $row["coursename"] = $old[2]; + $row["name"] = $old[3]; + $kilpailijat[] = $row; + + break; + } + } + } + } + } + + // Fix for GPS routes - not included in new file + if (($oldres = @fopen(KARTAT_DIRECTORY."kilpailijat_".$eventid."_rm_".$date.".txt", "r")) !== false) { + while (($old = fgetcsv($oldres, 0, "|")) !== false) { + if (strpos($old[3], 'GPS ') !== false){ + + // Get the current Id for the non-GPS record + + foreach ($kilpailijat as $kil){ + + if (substr($old[3], 5, -1) == $kil["name"] && + $old[2] == $kil["coursename"]){ + + utils::rg2log($old[3]); + + $row = array(); + $row["origresultid"] = $old[0]; + $row["newresultid"] = 100000 + $kil["newresultid"]; + $row["origcourseid"] = $old[1]; + $row["newcourseid"] = $kil["newcourseid"]; + $row["coursename"] = $old[2]; + $row["name"] = $old[3]; + $kilpailijat[] = $row; + + $result = $row["newresultid"]."|".$row["newcourseid"]."|".$row["coursename"]; + $result .= "|".$row["name"]."|".$old[4]."|||".$old[7]."||".$old[9].PHP_EOL; + // doesn't save all params - see "abusing dbid to save status and position" comment above + + file_put_contents(KARTAT_DIRECTORY."kilpailijat_".$eventid.".txt", $result, FILE_APPEND); + + break; + } + } + } + } + } + + utils::rg2log(json_encode($kilpailijat)); + + + // Recreate kommentit file + // Replace old course id and result id with ones from new kilpailijat file + // Kommentit format: 2|34|Jake Hanson||test + + $updatedfile = array(); + $oldfile = file(KARTAT_DIRECTORY."kommentit_".$eventid."_rm_".$date.".txt"); + foreach ($oldfile as $oldrow) { + $olddata = explode("|", $oldrow); + + foreach ($kilpailijat as $k){ + if ($k["origresultid"] == $olddata[1]){ + + $row = $k["newcourseid"]."|".$k["newresultid"]."|".$olddata[2]."||".$olddata[4]; + + $updatedfile[] = $row; + + break; + + } + } + } + $status = file_put_contents(KARTAT_DIRECTORY."kommentit_".$eventid.".txt", $updatedfile); + utils::rg2log("Updated route comments file "); + + // Recreate merkinnat file + // Replace old course id and result id with ones from new kilpaijat file + // Merkinnat format: 2|34|Jake Hanson|null|Semicolon-separated results + + $updatedfile = array(); + $oldfile = file(KARTAT_DIRECTORY."merkinnat_".$eventid."_rm_".$date.".txt"); + foreach ($oldfile as $oldrow) { + $olddata = explode("|", $oldrow); + + foreach ($kilpailijat as $k){ + if ($k["origresultid"] == $olddata[1]){ + + $row = $k["newcourseid"]."|".$k["newresultid"]."|".$olddata[2]."|null|".$olddata[4]; + + $updatedfile[] = $row; + + break; + + } + } + } + $status = file_put_contents(KARTAT_DIRECTORY."merkinnat_".$eventid.".txt", $updatedfile); + utils::rg2log("Updated routes file "); + + // Yeah just skipping this for now + // @TODO + //Also fix login thing + $write["status_msg"] = ""; + + if ($write["status_msg"] == "") { + $write["ok"] = true; + $write["status_msg"] = "Results updated."; + } else { + $write["ok"] = false; + } + utils::rg2log("Updated results file "); + return $write; + + utils::unlockDatabase(); + } + private static function sortResultsByCourseThenTime($a, $b) { if (intval($a["courseid"]) !== intval($b["courseid"])) { @@ -200,4 +390,4 @@ private static function sortResultsByCourseThenTime($a, $b) } return (intval($a["secs"]) - intval($b["secs"])); } -} \ No newline at end of file +} diff --git a/html/manager.html b/html/manager.html index f0c255f..9cce4e2 100644 --- a/html/manager.html +++ b/html/manager.html @@ -55,6 +55,7 @@

Courses

Move map and controls together
+
Read-only (enable drawing via "Edit event" tab) @@ -95,6 +96,12 @@

Delete route


+
+
+

Update results

+ Results file + +

Delete event

diff --git a/js/manager.js b/js/manager.js index 2238e2f..66427d4 100644 --- a/js/manager.js +++ b/js/manager.js @@ -151,6 +151,9 @@ self.initialiseEncodings(); self.readResults(); }); + $("#btn-update-results").button().click(function () { + self.confirmUpdateResults(); + }); $("#btn-move-map-and-controls").click(function (evt) { self.toggleMoveAll(evt.target.checked); }); @@ -171,6 +174,21 @@ }).change(function (evt) { self.readCourses(evt); }); + $("#btn-add-fieldmapping").button().click(function () { + self.addFieldMapping(); + }); + + $("#rg2-update-results-file").button().click(function (evt) { + if (!self.mapLoaded) { + rg2.utils.showWarningDialog("No map loaded", "Please load a map file before adding results."); + evt.preventDefault(); + } + }).change(function (evt) { + self.resultsOrCourseFile = evt.target.files[0]; + self.initialiseEncodings(); + self.readResults(); + }); + }, validateMapUpload: function (upload) { @@ -345,6 +363,20 @@ } }, + addFieldMapping: function () { + + var tableEnd = "
"; + + var html1 = $("#rg2-course-allocations").html().replace(tableEnd, ""); + + var html2 = "" + this.createCourseDropdown("New Class", 1) + ""; + var html = html1 + html2 + tableEnd + + console.log(html) + + $("#rg2-course-allocations").empty().append(html); + }, + validateData: function () { if (!this.eventName) { return 'Event name is not valid.'; @@ -490,6 +522,20 @@ return JSON.stringify(data); }, + generateFieldMappings: function () { + data = []; + $('#rg2-course-allocations tr').each(function (i, row) { + var $row = $(row); + $class = $row.find('input').val(); + $course = $row.find(':selected').text(); + data.push({ + "class": $class, "course": $course }) + }) + + return data; + }, + + hasZeroTime: function (time) { if (time === 0 || time === '0' || time === '0:00' || time === '00:00') { return true; @@ -1502,7 +1548,65 @@ $("#rg2-world-file-map").show(); this.georefmap.invalidateSize(); this.georefmap.fitBounds(poly.getBounds()); - } + }, + + confirmUpdateResults : function () { + var self, data, id; + $("#event-create-dialog").dialog("destroy"); + self = this; + data = this.generateUpdatedResults(); + $("#rg2-load-progress-label").text("Creating event"); + $("#rg2-load-progress").show(); + id = $("#rg2-event-selected").val(); + console.log(data) + $.ajax({ + data: data, + type : "POST", + url: rg2Config.json_url + "?type=updateresults&id=" + id, + dataType : "json", + success : function (data) { + // save new cookie + self.user.y = data.keksi; + if (data.ok) { + rg2.utils.showWarningDialog("Results updated"); + // open newly created event in a separate window + window.open(rg2Config.json_url.replace("rg2api.php", "") + "#" + data.newid); + rg2.getEvents(); + rg2.managerUI.setEvent(); + } else { + rg2.utils.showWarningDialog("Save failed", data.status_msg + " Failed to update results. Please try again."); + } + }, + error : function () { + rg2.utils.showWarningDialog("Save failed", " Failed to update results."); + }, + complete : function () { + $("#rg2-load-progress-label").text(""); + $("#rg2-load-progress").hide(); + } + }); + }, + + generateUpdatedResults : function () { + + var data, user; + data = {}; + data.results = this.results.slice(0); + + for (i = 0; i < data.results.length; i += 1) { + data.results[i].variantid=0 + } + + + user = this.user.encodeUser(); + data.x = user.x; + data.y = user.y; + + return JSON.stringify(data); + + }, + + }; rg2.Manager = Manager; }()); diff --git a/rg2api.php b/rg2api.php index f190766..2779abb 100644 --- a/rg2api.php +++ b/rg2api.php @@ -112,6 +112,13 @@ function handlePostRequest($type, $eventid) @unlink(CACHE_DIRECTORY."stats.json"); break; + case 'updateresults': + // this a modified editevent function + $write = result::updateResults($eventid, $data); + @unlink(CACHE_DIRECTORY."events.json"); + @unlink(CACHE_DIRECTORY."stats.json"); + break; + case 'deleteroute': // this is the manager delete function $write = route::deleteRoute($eventid); From f8d5b943459a5cdd611f39c6cb0503780dc2dcd3 Mon Sep 17 00:00:00 2001 From: Jake Date: Sat, 17 Jul 2021 17:52:56 +1200 Subject: [PATCH 2/6] Fix issues with updating results files --- app/event.php | 6 ++---- app/result.php | 2 +- js/manager.js | 20 +++++++++++++------- js/managerui.js | 2 +- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/app/event.php b/app/event.php index 21a98f7..f1fd74d 100644 --- a/app/event.php +++ b/app/event.php @@ -413,12 +413,10 @@ public static function addNewEvent($data) } // create new mappings file: result to class - $classmappings = ""; for ($i = 1; $i < count($data->mappings); $i++) { - $classmappings .= utils::encode_rg_output($data->mappings[$i]->class)."|".utils::encode_rg_output($data->mappings[$i]->course)."|".$i.PHP_EOL; + $classmappings = utils::encode_rg_output($data->mappings[$i]->class)."|".utils::encode_rg_output($data->mappings[$i]->course)."|".$i.PHP_EOL; + file_put_contents(KARTAT_DIRECTORY."mappings_".$newid.".txt", $classmappings, FILE_APPEND); } - file_put_contents(KARTAT_DIRECTORY."mappings_".$newid.".txt", $classmappings, FILE_APPEND); - if ($write["status_msg"] == "") { $write["ok"] = true; diff --git a/app/result.php b/app/result.php index 2e82b60..b6f39e7 100644 --- a/app/result.php +++ b/app/result.php @@ -295,7 +295,7 @@ public static function updateResults($eventid, $data){ $row = array(); $row["origresultid"] = $old[0]; - $row["newresultid"] = 100000 + $kil["newresultid"]; + $row["newresultid"] = GPS_RESULT_OFFSET + $kil["newresultid"]; $row["origcourseid"] = $old[1]; $row["newcourseid"] = $kil["newcourseid"]; $row["coursename"] = $old[2]; diff --git a/js/manager.js b/js/manager.js index 66427d4..6494ee8 100644 --- a/js/manager.js +++ b/js/manager.js @@ -122,6 +122,9 @@ $("#btn-update-event").button().click(function () { self.confirmUpdateEvent(); }).button("disable"); + $("#btn-update-results").button().click(function () { + self.confirmUpdateResults(); + }).button("disable"); $("#btn-delete-route").button().click(function () { self.confirmDeleteRoute(); }).button("disable"); @@ -151,9 +154,6 @@ self.initialiseEncodings(); self.readResults(); }); - $("#btn-update-results").button().click(function () { - self.confirmUpdateResults(); - }); $("#btn-move-map-and-controls").click(function (evt) { self.toggleMoveAll(evt.target.checked); }); @@ -168,7 +168,7 @@ }); $("#rg2-load-course-file").button().click(function (evt) { if (!self.mapLoaded) { - rg2.utils.showWarningDialog("No map loaded", "Please load a map file before adding courses."); + rg2.utils.showWarningDialog("No event loaded", "Please load a map file before adding courses."); evt.preventDefault(); } }).change(function (evt) { @@ -180,7 +180,7 @@ $("#rg2-update-results-file").button().click(function (evt) { if (!self.mapLoaded) { - rg2.utils.showWarningDialog("No map loaded", "Please load a map file before adding results."); + rg2.utils.showWarningDialog("No event loaded", "Please load an event before adding results."); evt.preventDefault(); } }).change(function (evt) { @@ -516,6 +516,7 @@ delete data.results[i].chipid; delete data.results[i].club; } + data.mappings = this.generateFieldMappings(); user = this.user.encodeUser(); data.x = user.x; data.y = user.y; @@ -526,7 +527,12 @@ data = []; $('#rg2-course-allocations tr').each(function (i, row) { var $row = $(row); - $class = $row.find('input').val(); + $class = $row.find('td:first').text(); + + //could be manual input - try input instead + if ($class.length == 0){ + $class = $row.find('input').val(); + } $course = $row.find(':selected').text(); data.push({ "class": $class, "course": $course }) @@ -1568,7 +1574,7 @@ // save new cookie self.user.y = data.keksi; if (data.ok) { - rg2.utils.showWarningDialog("Results updated"); + rg2.utils.showWarningDialog("Results updated.", "Results for " + self.eventName + " have been updated."); // open newly created event in a separate window window.open(rg2Config.json_url.replace("rg2api.php", "") + "#" + data.newid); rg2.getEvents(); diff --git a/js/managerui.js b/js/managerui.js index 0ce7935..8df04f5 100644 --- a/js/managerui.js +++ b/js/managerui.js @@ -137,7 +137,7 @@ $("#rg2-event-level-edit").val(event.rawtype); $("#rg2-edit-event-comments").empty().val(rg2.he.decode(event.comment)); $("#chk-edit-read-only").prop("checked", event.locked); - rg2.utils.setButtonState("enable", ["#btn-delete-event", "#btn-update-event", "#btn-delete-route"]); + rg2.utils.setButtonState("enable", ["#btn-delete-event", "#btn-update-event", "#btn-delete-route", "#btn-update-results"]); this.createRouteDeleteDropdown(event.id); }, From 4cef4a50677f1c582294efa8e9b2c1e1b77f066f Mon Sep 17 00:00:00 2001 From: Jake Date: Sat, 17 Jul 2021 17:59:38 +1200 Subject: [PATCH 3/6] Fix wording on file-select errors in manager --- js/manager.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/manager.js b/js/manager.js index 6494ee8..ad5f409 100644 --- a/js/manager.js +++ b/js/manager.js @@ -168,7 +168,7 @@ }); $("#rg2-load-course-file").button().click(function (evt) { if (!self.mapLoaded) { - rg2.utils.showWarningDialog("No event loaded", "Please load a map file before adding courses."); + rg2.utils.showWarningDialog("No map loaded", "Please load a map file before adding courses."); evt.preventDefault(); } }).change(function (evt) { @@ -180,7 +180,7 @@ $("#rg2-update-results-file").button().click(function (evt) { if (!self.mapLoaded) { - rg2.utils.showWarningDialog("No event loaded", "Please load an event before adding results."); + rg2.utils.showWarningDialog("No event loaded", "Please select an event before adding results."); evt.preventDefault(); } }).change(function (evt) { From 689d4a494e36722238ed0cb49b5c02cde6bf823b Mon Sep 17 00:00:00 2001 From: Jake Date: Sat, 17 Jul 2021 23:46:57 +1200 Subject: [PATCH 4/6] Clean up some issues with file writing --- app/event.php | 13 ++- app/result.php | 246 ++++++++++++++++++++++++++----------------------- js/manager.js | 44 +++++---- 3 files changed, 165 insertions(+), 138 deletions(-) diff --git a/app/event.php b/app/event.php index f1fd74d..ca657b0 100644 --- a/app/event.php +++ b/app/event.php @@ -412,10 +412,15 @@ public static function addNewEvent($data) file_put_contents(KARTAT_DIRECTORY."kilpailijat_".$newid.".txt", $result, FILE_APPEND); } - // create new mappings file: result to class + // create new mappings file: result classname|coursename|courseid so we can match them up again for updates. + // may be able to use the sarjat file but don't want to touch it - I don't know what it could break in RG1 for ($i = 1; $i < count($data->mappings); $i++) { - $classmappings = utils::encode_rg_output($data->mappings[$i]->class)."|".utils::encode_rg_output($data->mappings[$i]->course)."|".$i.PHP_EOL; - file_put_contents(KARTAT_DIRECTORY."mappings_".$newid.".txt", $classmappings, FILE_APPEND); + $class = utils::encode_rg_output($data->mappings[$i]->class); + $course = utils::encode_rg_output($data->mappings[$i]->course); + $courseid = utils::encode_rg_output($data->mappings[$i]->courseid); + + $classmapping = $class."|".$course."|".$courseid.PHP_EOL; + file_put_contents(KARTAT_DIRECTORY."mappings_".$newid.".txt", $classmapping, FILE_APPEND); } if ($write["status_msg"] == "") { @@ -447,7 +452,7 @@ public static function deleteEvent($eventid) // rename all associated files but don't worry about errors // safer than deleting them since you can always add the event again - $files = array("kilpailijat_", "kommentit_", "hajontakanta_", "merkinnat_", "radat_", "ratapisteet_", "sarjat_", "sarjojenkoodit_"); + $files = array("kilpailijat_", "kommentit_", "hajontakanta_", "merkinnat_", "radat_", "ratapisteet_", "sarjat_", "sarjojenkoodit_", "mappings_"); foreach ($files as $file) { @rename(KARTAT_DIRECTORY.$file.$eventid.".txt", KARTAT_DIRECTORY."deleted_".$file.$eventid.".txt"); } diff --git a/app/result.php b/app/result.php index b6f39e7..f3c0441 100644 --- a/app/result.php +++ b/app/result.php @@ -196,20 +196,17 @@ private static function isDefaultComment($comment) public static function updateResults($eventid, $data){ $date = date("Y-m-dTHis"); + $write["status_msg"] = ""; + + utils::rg2log("Updating result files for ".$eventid.". Old data will have datestamp: ".$date.".txt"); - utils::rg2log($_SERVER['DOCUMENT_ROOT']."/kartat/kilpailijat_".$eventid."_rm_".$date.".txt"); - // Renaming doesn't work because of locks so copy and write empty - @rename($_SERVER['DOCUMENT_ROOT']."/kartat/kilpailijat_".$eventid.".txt", - $_SERVER['DOCUMENT_ROOT']."/kartat/kilpailijat_".$eventid."_rm_".$date.".txt"); - @rename($_SERVER['DOCUMENT_ROOT']."/kartat/merkinnat_".$eventid.".txt", - $_SERVER['DOCUMENT_ROOT']."/kartat/merkinnat_".$eventid."_rm_".$date.".txt"); - @rename($_SERVER['DOCUMENT_ROOT']."/kartat/kommentit_".$eventid.".txt", - $_SERVER['DOCUMENT_ROOT']."/kartat/kommentit_".$eventid."_rm_".$date.".txt"); + //Archive old kilpailijat file + rename(KARTAT_DIRECTORY."kilpailijat_".$eventid.".txt", + KARTAT_DIRECTORY."kilpailijat_".$eventid."_rm_".$date.".txt"); // create new kilpailijat file: results - for ($i = 0; $i < count($data->results); $i++) { $a = $data->results[$i]; @@ -225,23 +222,22 @@ public static function updateResults($eventid, $data){ $status = ''; } - // course provided by json is actually result class - update to course name - // based on mapping, and load to txt file if not "Do not save" - + // course provided by json is actually result class - get correct course name + // based on mapping file, and load to txt file if not "Do not save" $coursename = ""; $courseid = ""; - if (($handle = @fopen(KARTAT_DIRECTORY."mappings_".$eventid.".txt", "r")) !== false) { - while (($sa_data = fgetcsv($handle, 0, "|")) !== false) { - if (utils::encode_rg_output($a->course) == $sa_data[0]) { - $coursename = $sa_data[1]; - $courseid = $sa_data[2]; - break; - } + $fh = fopen(KARTAT_DIRECTORY."mappings_".$eventid.".txt", 'r'); + while ($oldrow = fgets($fh)) { + $row = explode("|", $oldrow); + if (utils::encode_rg_output($a->course) == $row[0]) { + $coursename = $row[1]; + $courseid = $row[2]; + break; } } if($coursename !== "Do not save"){ - $result = ($i + 1)."|".$courseid."|".utils::encode_rg_output($coursename); + $result = ($i + 1)."|".trim($courseid)."|".utils::encode_rg_output($coursename); $result .= "|".utils::encode_rg_output(trim($a->name))."|".$a->starttime."|"; // abusing dbid to save status and position $result .= utils::encode_rg_output($a->dbid)."_#".$position."#".$status; @@ -250,126 +246,144 @@ public static function updateResults($eventid, $data){ } } - // Get orig and new resultid so we can replace them in comments and routes files - // 1|1|C2|Bridget Anderson|35700|121_#1#OK||00:51:36| - $kilpailijat = array(); + // Get orig and new resultid so we can replace them in comments and routes files + // 1|1|C2|Bridget Anderson|35700|121_#1#OK||00:51:36| - if (($oldres = @fopen(KARTAT_DIRECTORY."kilpailijat_".$eventid."_rm_".$date.".txt", "r")) !== false) { - while (($old = fgetcsv($oldres, 0, "|")) !== false) { + $kilpailijat = array(); - if (($newres = @fopen(KARTAT_DIRECTORY."kilpailijat_".$eventid.".txt", "r")) !== false) { - while (($new = fgetcsv($newres, 0, "|")) !== false) { + $fh = fopen(KARTAT_DIRECTORY."kilpailijat_".$eventid."_rm_".$date.".txt", 'r'); + while ($oldrow = fgets($fh)) { - if ($new[3] == $old[3] && $new[2] == $old[2]){ + $old = explode("|", $oldrow); - $row = array(); - $row["origresultid"] = $old[0]; - $row["newresultid"] = $new[0]; - $row["origcourseid"] = $old[1]; - $row["newcourseid"] = $new[1]; - $row["coursename"] = $old[2]; - $row["name"] = $old[3]; - $kilpailijat[] = $row; + $fh = fopen(KARTAT_DIRECTORY."kilpailijat_".$eventid.".txt", 'r'); + while ($newrow = fgets($fh)) { - break; - } - } - } - } - } + $new = explode("|", $newrow); - // Fix for GPS routes - not included in new file - if (($oldres = @fopen(KARTAT_DIRECTORY."kilpailijat_".$eventid."_rm_".$date.".txt", "r")) !== false) { - while (($old = fgetcsv($oldres, 0, "|")) !== false) { - if (strpos($old[3], 'GPS ') !== false){ - - // Get the current Id for the non-GPS record - - foreach ($kilpailijat as $kil){ - - if (substr($old[3], 5, -1) == $kil["name"] && - $old[2] == $kil["coursename"]){ - - utils::rg2log($old[3]); - - $row = array(); - $row["origresultid"] = $old[0]; - $row["newresultid"] = GPS_RESULT_OFFSET + $kil["newresultid"]; - $row["origcourseid"] = $old[1]; - $row["newcourseid"] = $kil["newcourseid"]; - $row["coursename"] = $old[2]; - $row["name"] = $old[3]; - $kilpailijat[] = $row; - - $result = $row["newresultid"]."|".$row["newcourseid"]."|".$row["coursename"]; - $result .= "|".$row["name"]."|".$old[4]."|||".$old[7]."||".$old[9].PHP_EOL; - // doesn't save all params - see "abusing dbid to save status and position" comment above - - file_put_contents(KARTAT_DIRECTORY."kilpailijat_".$eventid.".txt", $result, FILE_APPEND); - - break; - } - } - } - } - } + if ($new[3] == $old[3] && $new[2] == $old[2]){ - utils::rg2log(json_encode($kilpailijat)); + $row = array(); + $row["origresultid"] = $old[0]; + $row["newresultid"] = $new[0]; + $row["origcourseid"] = $old[1]; + $row["newcourseid"] = $new[1]; + $row["coursename"] = $old[2]; + $row["name"] = $old[3]; + $kilpailijat[] = $row; + break; + } + } + } - // Recreate kommentit file - // Replace old course id and result id with ones from new kilpailijat file - // Kommentit format: 2|34|Jake Hanson||test + // Add GPS routes from old file + $fh = fopen(KARTAT_DIRECTORY."kilpailijat_".$eventid."_rm_".$date.".txt", 'r'); + while ($oldrow = fgets($fh)) { + + $old = explode("|", $oldrow); + + if (strpos($old[3], 'GPS ') !== false){ + + // Get the current Id for the non-GPS record + + foreach ($kilpailijat as $kil){ + + if (substr($old[3], 5) == $kil["name"] && + $old[2] == $kil["coursename"]){ + + $row = array(); + $row["origresultid"] = $old[0]; + $row["newresultid"] = GPS_RESULT_OFFSET + $kil["newresultid"]; + $row["origcourseid"] = $old[1]; + $row["newcourseid"] = $kil["newcourseid"]; + $row["coursename"] = $old[2]; + $row["name"] = $old[3]; + $kilpailijat[] = $row; + + $result = $row["newresultid"]."|".$row["newcourseid"]."|".$row["coursename"]; + $result .= "|".$row["name"]."|".$old[4]."|||".$old[7]."||".$old[9].PHP_EOL; + // doesn't save all params - see "abusing dbid to save status and position" comment above + + file_put_contents(KARTAT_DIRECTORY."kilpailijat_".$eventid.".txt", $result, FILE_APPEND); + + break; + + } + } + } + } - $updatedfile = array(); - $oldfile = file(KARTAT_DIRECTORY."kommentit_".$eventid."_rm_".$date.".txt"); - foreach ($oldfile as $oldrow) { - $olddata = explode("|", $oldrow); + if (file_exists(KARTAT_DIRECTORY."kommentit_".$eventid.".txt")){ - foreach ($kilpailijat as $k){ - if ($k["origresultid"] == $olddata[1]){ + // Recreate kommentit file + // Replace old course id and result id with ones from new kilpailijat file + // Kommentit format: 2|34|Jake Hanson||test - $row = $k["newcourseid"]."|".$k["newresultid"]."|".$olddata[2]."||".$olddata[4]; + $updatedfile = array(); + $fh = fopen(KARTAT_DIRECTORY."/kommentit_".$eventid.".txt", 'r'); + while ($oldrow = fgets($fh)) { + + $olddata = explode("|", $oldrow); - $updatedfile[] = $row; + foreach ($kilpailijat as $k){ + if ($k["origresultid"] == $olddata[1]){ - break; + $row = $k["newcourseid"]."|".$k["newresultid"]."|".$olddata[2]."||".$olddata[4]; - } - } - } - $status = file_put_contents(KARTAT_DIRECTORY."kommentit_".$eventid.".txt", $updatedfile); - utils::rg2log("Updated route comments file "); + $updatedfile[] = $row; - // Recreate merkinnat file - // Replace old course id and result id with ones from new kilpaijat file - // Merkinnat format: 2|34|Jake Hanson|null|Semicolon-separated results + break; - $updatedfile = array(); - $oldfile = file(KARTAT_DIRECTORY."merkinnat_".$eventid."_rm_".$date.".txt"); - foreach ($oldfile as $oldrow) { - $olddata = explode("|", $oldrow); + } + } + } - foreach ($kilpailijat as $k){ - if ($k["origresultid"] == $olddata[1]){ + //Archive old file + rename(KARTAT_DIRECTORY."kommentit_".$eventid.".txt", + KARTAT_DIRECTORY."kommentit_".$eventid."_rm_".$date.".txt"); - $row = $k["newcourseid"]."|".$k["newresultid"]."|".$olddata[2]."|null|".$olddata[4]; + //Write new file + file_put_contents(KARTAT_DIRECTORY."kommentit_".$eventid.".txt", $updatedfile); + utils::rg2log("Updated route comments file "); + } + + if (file_exists(KARTAT_DIRECTORY."merkinnat_".$eventid.".txt")){ - $updatedfile[] = $row; - break; + // Recreate merkinnat file + // Replace old course id and result id with ones from new kilpaijat file + // Merkinnat format: 2|34|Jake Hanson|null|Semicolon-separated results - } - } - } - $status = file_put_contents(KARTAT_DIRECTORY."merkinnat_".$eventid.".txt", $updatedfile); - utils::rg2log("Updated routes file "); + $updatedfile = array(); + $fh = fopen(KARTAT_DIRECTORY."merkinnat_".$eventid.".txt", 'r'); + while ($oldrow = fgets($fh)) { + $olddata = explode("|", $oldrow); - // Yeah just skipping this for now - // @TODO - //Also fix login thing - $write["status_msg"] = ""; + foreach ($kilpailijat as $k){ + if ($k["origresultid"] == $olddata[1]){ + + $row = $k["newcourseid"]."|".$k["newresultid"]."|".$olddata[2]."|null|".$olddata[4]; + + $updatedfile[] = $row; + + break; + + } + } + + } + + //Archive old file + rename(KARTAT_DIRECTORY."merkinnat_".$eventid.".txt", + KARTAT_DIRECTORY."merkinnat_".$eventid."_rm_".$date.".txt"); + + //Write updated file + file_put_contents(KARTAT_DIRECTORY."merkinnat_".$eventid.".txt", $updatedfile); + utils::rg2log("Updated routes file"); + + } if ($write["status_msg"] == "") { $write["ok"] = true; diff --git a/js/manager.js b/js/manager.js index ad5f409..b038e17 100644 --- a/js/manager.js +++ b/js/manager.js @@ -372,8 +372,6 @@ var html2 = "" + this.createCourseDropdown("New Class", 1) + ""; var html = html1 + html2 + tableEnd - console.log(html) - $("#rg2-course-allocations").empty().append(html); }, @@ -516,30 +514,40 @@ delete data.results[i].chipid; delete data.results[i].club; } - data.mappings = this.generateFieldMappings(); + data.mappings = this.generateFieldMappings(data.courses); user = this.user.encodeUser(); data.x = user.x; data.y = user.y; return JSON.stringify(data); }, - generateFieldMappings: function () { - data = []; - $('#rg2-course-allocations tr').each(function (i, row) { - var $row = $(row); - $class = $row.find('td:first').text(); + generateFieldMappings: function (courses) { + console.log(courses); + data = []; + $('#rg2-course-allocations tr').each(function (i, row) { + var $row = $(row); + $class = $row.find('td:first').text(); + + //could be manual input - try input instead + if ($class.length == 0){ + $class = $row.find('input').val(); + } + $course = $row.find(':selected').text(); - //could be manual input - try input instead - if ($class.length == 0){ - $class = $row.find('input').val(); + $courseid = 0 + //Get courseids + for (var i = 0; i Date: Sun, 18 Jul 2021 17:31:40 +1200 Subject: [PATCH 5/6] Fix issue with double newline when gps loaded --- app/result.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/app/result.php b/app/result.php index f3c0441..60aaad3 100644 --- a/app/result.php +++ b/app/result.php @@ -303,8 +303,7 @@ public static function updateResults($eventid, $data){ $kilpailijat[] = $row; $result = $row["newresultid"]."|".$row["newcourseid"]."|".$row["coursename"]; - $result .= "|".$row["name"]."|".$old[4]."|||".$old[7]."||".$old[9].PHP_EOL; - // doesn't save all params - see "abusing dbid to save status and position" comment above + $result .= "|".$row["name"]."|".$old[4]."|".$old[5]."|".$old[6]."|".$old[7]."|".$old[8]."|".$old[9]; file_put_contents(KARTAT_DIRECTORY."kilpailijat_".$eventid.".txt", $result, FILE_APPEND); @@ -330,7 +329,7 @@ public static function updateResults($eventid, $data){ foreach ($kilpailijat as $k){ if ($k["origresultid"] == $olddata[1]){ - $row = $k["newcourseid"]."|".$k["newresultid"]."|".$olddata[2]."||".$olddata[4]; + $row = $k["newcourseid"]."|".$k["newresultid"]."|".$olddata[2]."|".$olddata[3]."|".$olddata[4]; $updatedfile[] = $row; @@ -364,7 +363,7 @@ public static function updateResults($eventid, $data){ foreach ($kilpailijat as $k){ if ($k["origresultid"] == $olddata[1]){ - $row = $k["newcourseid"]."|".$k["newresultid"]."|".$olddata[2]."|null|".$olddata[4]; + $row = $k["newcourseid"]."|".$k["newresultid"]."|".$olddata[2]."|".$olddata[2]."|".$olddata[4]; $updatedfile[] = $row; From a2c6412a111dcefe4af9805150a4866e1053523a Mon Sep 17 00:00:00 2001 From: Jake Date: Sun, 18 Jul 2021 17:36:38 +1200 Subject: [PATCH 6/6] Change wording for fieldmapping in GUI --- html/manager.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html/manager.html b/html/manager.html index 9cce4e2..08f0778 100644 --- a/html/manager.html +++ b/html/manager.html @@ -55,7 +55,7 @@

Courses

Move map and controls together
- +
Read-only (enable drawing via "Edit event" tab)