@@ -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
13431357MarkingTool . 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