Skip to content

Commit d8874bd

Browse files
committed
Alle Änderungen werden jetzt zusammengefasst und an eine Schnittstelle vom Server mittels AJAX geschickt. Serverseitig werden zwar die Daten angenommen aber noch nicht weiter verarbeitet. Außerdem wird aktuell noch die Serverantwort mittels alert() ausgegeben und nicht extra verarbeitet.
1 parent 60f7888 commit d8874bd

File tree

3 files changed

+173
-9
lines changed

3 files changed

+173
-9
lines changed

UI/MarkingTool2/.htaccess

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
RewriteEngine On
2-
RewriteRule ^$ MarkingTool2.php [QSA,L]
3-
RewriteRule ^/$ MarkingTool2.php [QSA,L]
2+
RewriteRule ^/?$ MarkingTool2.php [QSA,L]
3+
RewriteRule ^api/(.*)/$ api.php?mode=$1 [QSA,L]

UI/MarkingTool2/api.php

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
<?php
2+
//Überprüfe Nutzerstatus
3+
4+
//include_once dirname(__FILE__) . '/../include/Boilerplate.php';
5+
include_once dirname(__FILE__) . '/../include/Authentication.php';
6+
include_once dirname(__FILE__) . '/../include/StudIPAuthentication.php';
7+
include_once dirname(__FILE__) . '/../../Assistants/LArraySorter.php';
8+
include_once dirname(__FILE__) . '/../../Assistants/Structures.php';
9+
10+
$auth = new Authentication();
11+
$StudIPauth = new StudIPAuthentication();
12+
13+
$invalidLogin = Authentication::checkLogin() == false;
14+
15+
//Sende Antwort Header
16+
17+
header("Content-Type: application/json");
18+
19+
//Sende Daten
20+
21+
if ($invalidLogin) {
22+
$response = array(
23+
"success" => false,
24+
"error" => "invalidLogin"
25+
);
26+
//echo json_encode($response, JSON_PRETTY_PRINT);
27+
echo json_encode($response);
28+
return;
29+
}
30+
if (!isset($_GET["mode"])) {
31+
$response = array(
32+
"success" => false,
33+
"error" => "noMethodGiven"
34+
);
35+
echo json_encode($response, JSON_PRETTY_PRINT);
36+
return;
37+
}
38+
if ($_GET["mode"] == "ping") {
39+
$response = array(
40+
"success" => true,
41+
"ping" => "pong"
42+
);
43+
//echo json_encode($response, JSON_PRETTY_PRINT);
44+
json_encode($response);
45+
return;
46+
}
47+
if ($_GET["mode"] == "test") {
48+
$response = array(
49+
"success" => true,
50+
"result" => "It work's! :)"
51+
);
52+
echo json_encode($response, JSON_PRETTY_PRINT);
53+
return;
54+
}
55+
56+
57+
else {
58+
$response = array(
59+
"success" => false,
60+
"error" => "notSupportedMethod",
61+
"method" => $_GET["mode"]
62+
);
63+
echo json_encode($response, JSON_PRETTY_PRINT);
64+
return;
65+
}

UI/MarkingTool2/js/marking_tool2_editor.js

Lines changed: 106 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,9 @@ MarkingTool.Editor.View = new function() {
366366
MarkingTool.Editor.UpdateIndicator.ShowBox();
367367
document.location.reload();
368368
}),
369-
hc.CreateButton("Speichern", undefined, {
369+
hc.CreateButton("Speichern", function() {
370+
MarkingTool.Editor.Logic.CheckForUploadableTasks();
371+
}, {
370372
children: [
371373
counter = hc.CreateElement("div", "0", {css:["ui-change-counter"]})
372374
]
@@ -819,9 +821,15 @@ MarkingTool.Editor.View = new function() {
819821
if (task.changeState_detailContent == 1) {
820822
if (evt.target.files.length == 0)
821823
task.getPropertys()["userFile"].resetValue();
822-
else task.userFile = {
823-
file: evt.target.files[0]
824-
};
824+
else {
825+
var obj = { file: evt.target.files[0] };
826+
var reader = new FileReader();
827+
reader.onload = function(e) {
828+
obj.blob = e.target.result;
829+
};
830+
reader.readAsDataURL(obj.file);
831+
task.userFile = obj;
832+
}
825833
var info = cont[0].parent().parent().children().eq(0)
826834
.find(".ui-complex-button-info").eq(2);
827835
if (task.userFile != null)
@@ -850,9 +858,15 @@ MarkingTool.Editor.View = new function() {
850858
if (task.changeState_detailContent == 1) {
851859
if (evt.target.files.length == 0)
852860
task.getPropertys()["tutorFile"].resetValue();
853-
else task.tutorFile = {
854-
file: evt.target.files[0]
855-
};
861+
else {
862+
var obj = { file: evt.target.files[0] };
863+
var reader = new FileReader();
864+
reader.onload = function(e) {
865+
obj.blob = e.target.result;
866+
};
867+
reader.readAsDataURL(obj.file);
868+
task.tutorFile = obj;
869+
}
856870
var info = cont[0].parent().parent().children().eq(0)
857871
.find(".ui-complex-button-info").eq(3);
858872
if (task.tutorFile != null)
@@ -1342,6 +1356,7 @@ MarkingTool.Editor.View = new function() {
13421356
//Stellt die Programmlogik bereit
13431357
MarkingTool.Editor.Logic = new function() {
13441358
var thisref = this;
1359+
var checking = 0;
13451360
var bName = []; //Sortiert nach Name
13461361
var bTask = {}; //Sortiert nach Aufgabennummer
13471362
//erzeugt ein neues überwachtes Objekt aus den Rohdaten der Aufgabe.
@@ -1407,6 +1422,7 @@ MarkingTool.Editor.Logic = new function() {
14071422
updObjectList[path].close();
14081423
updObjectList[path] = undefined;
14091424
};
1425+
14101426
//Bestimmt den Filter, der auf alle angezeigten Aufgaben angewandt wird.
14111427
this.Filter = {
14121428
//Der ausgewählte zugewiesene Kontrolleur. 'all' für alle Kontrolleure.
@@ -1454,6 +1470,80 @@ MarkingTool.Editor.Logic = new function() {
14541470
}
14551471
else $(".warning.many-items").addClass("ui-hide");
14561472
};
1473+
//Überprüft ob Tasks nun hochgeladen werden können und führt diesen Upload durch.
1474+
this.CheckForUploadableTasks = function() {
1475+
checking++;
1476+
if (checking == 1) {
1477+
//Phase 1 - Suche nach Uploadbarem und packe es zusammen
1478+
var list = [];
1479+
var time = Date.now() - MarkingTool.Editor.Settings.IntervallTime * 60000;
1480+
for (var i = 0; i<MarkingTool.Editor.UpdateFactory.UpdateList.length; ++i)
1481+
if (MarkingTool.Editor.UpdateFactory.UpdateList[i].changeTime >= time) {
1482+
var task = MarkingTool.Editor.UpdateFactory.UpdateList[i];
1483+
var changeObj = {
1484+
data: {
1485+
id: task.id,
1486+
submissionId: task.submissionId,
1487+
markingId: task.markingId
1488+
},
1489+
count: 3
1490+
};
1491+
var props = task.getPropertys();
1492+
var setProp = function(name) {
1493+
if (props[name].isValueChanged()) {
1494+
changeObj.data[name+"_old"] = props[name].getDefaultValue();
1495+
changeObj.data[name+"_new"] = task[name];
1496+
changeObj.count += 2;
1497+
}
1498+
};
1499+
var setPropFile = function(name) {
1500+
if (props[name].isValueChanged()) {
1501+
if (task[name].blob == undefined) return false;
1502+
changeObj.data[name+"_old"] = props[name].getDefaultValue().id;
1503+
changeObj.data[name+"_new_name"] = task[name].file.name;
1504+
changeObj.data[name+"_new_blob"] = task[name].blob;
1505+
changeObj.count += 3;
1506+
}
1507+
return true;
1508+
};
1509+
setProp("points");
1510+
setProp("accepted");
1511+
setProp("status");
1512+
setProp("tutorComment");
1513+
setProp("studentComment");
1514+
if (!setPropFile("userFile")) continue; //Datei wurde noch nicht geladen
1515+
if (!setPropFile("tutorFile")) continue;
1516+
task.setAllValuesAsDefault();
1517+
list.push(changeObj);
1518+
}
1519+
//Phase 2 - Verpacke die kleinen Datenpakete zu großen
1520+
var upl = [], cur = [];
1521+
var left = MarkingTool.Editor.Settings.MaxUploadVariablesCount;
1522+
for (var i = 0; i<list.length; ++i) {
1523+
if (list[i].count > left) {
1524+
upl.push(cur);
1525+
cur = [];
1526+
left = MarkingTool.Editor.Settings.MaxUploadVariablesCount;
1527+
}
1528+
cur.push(JSON.stringify(list[i].data));
1529+
left -= list[i].count;
1530+
}
1531+
if (cur.length > 0) upl.push(cur);
1532+
//Phase 3 - Lade die Änderungen hoch
1533+
for (var i = 0; i<upl.length; ++i) {
1534+
$.post({
1535+
url: "api/upload/",
1536+
cache: false,
1537+
data: { "tasks[]": upl[i] },
1538+
success: function(data) {
1539+
console.log(data);
1540+
alert(data);
1541+
}
1542+
});
1543+
}
1544+
}
1545+
checking--;
1546+
};
14571547

14581548
//private Init()
14591549
var _init = function() {
@@ -1462,6 +1552,11 @@ MarkingTool.Editor.Logic = new function() {
14621552
thisref.bTask = bTask;
14631553
MarkingTool.Editor.UpdateFactory.AddedEvent.add(updAddHandler);
14641554
MarkingTool.Editor.UpdateFactory.RemovedEvent.add(updRemoveHandler);
1555+
var loop = function() {
1556+
thisref.CheckForUploadableTasks();
1557+
setTimeout(loop, 60000); //1 Minute
1558+
};
1559+
setTimeout(loop, 60000);
14651560
};
14661561
//Initialisiert die Logik
14671562
this.Init = function() {
@@ -1479,6 +1574,10 @@ MarkingTool.Editor.Settings = new function() {
14791574
this.UserLevel = 0;
14801575
//String - Gibt eine Rücksprung-URL an, wo die Serienübersicht ist.
14811576
this.BackUrl = "";
1577+
//Int - Die Zeit in Minuten bis ein Task hochgeladen werden kann.
1578+
this.IntervallTime = 5;
1579+
//Int - die maximale Anzahl an Variablen die per HTTP-POST gesendet werden können.
1580+
this.MaxUploadVariablesCount = 1000;
14821581
};
14831582

14841583
//=== Bibliothek um die Updates nachzuvollziehen

0 commit comments

Comments
 (0)