diff --git a/CHANGELOG.md b/CHANGELOG.md index b0ddc78e..3d7c7a9f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +### Date: 2016-January-25 +### Release: v2016011102 + +- Fixes: + - Reworked DV launchers to remove cross domain iframe problem preventing opening in Safari. + +--- + ### Date: 2016-January-12 ### Release: v2016011101 diff --git a/ajax.php b/ajax.php index 5dd6223e..b6a22b0d 100644 --- a/ajax.php +++ b/ajax.php @@ -138,6 +138,7 @@ break; case "downloadoriginal": + case "default": case "origreport": case "grademark": $assignmentid = required_param('assignment', PARAM_INT); @@ -151,7 +152,13 @@ $user = new turnitintooltwo_user($USER->id, $userrole); - echo turnitintooltwo_view::output_dv_launch_form($action, $submissionid, $user->tii_user_id, $userrole); + $launch_form = turnitintooltwo_view::output_dv_launch_form($action, $submissionid, $user->tii_user_id, $userrole, ''); + if ($action == 'downloadoriginal') { + echo $launch_form; + } else { + $launch_form = html_writer::tag("div", $launch_form, array('style' => 'display: none')); + echo json_encode($launch_form); + } } break; diff --git a/jquery/turnitintooltwo.js b/jquery/turnitintooltwo.js index 2559da5c..cf864449 100755 --- a/jquery/turnitintooltwo.js +++ b/jquery/turnitintooltwo.js @@ -365,15 +365,16 @@ jQuery(document).ready(function($) { // When the refresh submissions link is clicked, the data in each datatable needs to be reloaded $(".refresh_link").click(function () { - - $(".refresh_link").hide(); - $(".refreshing_link").show(); - - $('table.submissionsDataTable').each(function() { - refreshRequested[$(this).attr("id")] = 1; - partTables[$(this).attr("id")].fnReloadAjax(); - partTables[$(this).attr("id")].fnStandingRedraw(); - }); + if ($(this).is(":visible")) { + $(".refresh_link").hide(); + $(".refreshing_link").show(); + + $('table.submissionsDataTable').each(function() { + refreshRequested[$(this).attr("id")] = 1; + partTables[$(this).attr("id")].fnReloadAjax(); + partTables[$(this).attr("id")].fnStandingRedraw(); + }); + } return false; }); @@ -559,6 +560,11 @@ jQuery(document).ready(function($) { var due_date = $('#date_due_'+idStr[2]).html(); var due_date_unix = moment(due_date).unix(); + var dvtype = idStr[0]; + var submission_id = idStr[1]; + var part_id = idStr[2]; + var user_id = idStr[3]; + // Show resubmission grade warning if the due date has not passed. if (due_date_unix > moment().unix()) { if ($(this).hasClass('graded_warning')) { @@ -569,25 +575,27 @@ jQuery(document).ready(function($) { } if (proceed) { - var url = $('#'+idStr[0]+'_url_'+idStr[1]).html()+'&viewcontext=box&do='+idStr[0]+'&submissionid='+idStr[1]+'&sesskey='+M.cfg.sesskey; - var dvWindow = window.open('about:blank', 'dv_'+idStr[1]); - var width = $(window).width(); - var height = $(window).height(); - dvWindow.document.write('Document Viewer'); - dvWindow.document.write(''); - dvWindow.document.write(''); - dvWindow.document.getElementById('dvWindow').src = url; - dvWindow.document.close(); - if (navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1) { - // beforeunload event does not work in Safari. - $(dvWindow).bind('unload', function() { - $("#refresh_"+idStr[2]).click(); - }); - } else { - $(dvWindow).bind('beforeunload', function() { - $("#refresh_"+idStr[2]).click(); - }); - } + dvWindow = window.open('', '_blank'); + var loading = '
'; + loading += ''; + loading += '

'+M.str.turnitintooltwo.loadingdv+'

'; + loading += '
'; + $(dvWindow.document.body).html(loading); + + // Get html to launch DV + $.ajax({ + type: "POST", + url: M.cfg.wwwroot+"/mod/turnitintooltwo/ajax.php", + dataType: "json", + data: {action: dvtype, submission: submission_id, assignment: $('#assignment_id').html()}, + success: function(data) { + $(dvWindow.document.body).html(loading+data); + dvWindow.document.forms[0].submit(); + dvWindow.document.close(); + + checkDVClosed(part_id); + } + }); } }); @@ -1117,7 +1125,7 @@ jQuery(document).ready(function($) { var idStr = $(this).attr("id").split("_"); // Don't open OR DV if score is pending. if (!$(this).children('.score_colour').hasClass('score_colour_')) { - openDV(idStr[0], idStr[1], idStr[2], idStr[3]); + downloadOriginalFile(idStr[0], idStr[1], idStr[2], idStr[3]); } }); } @@ -1146,41 +1154,31 @@ jQuery(document).ready(function($) { }); } - // Open the document viewer within a frame in a new tab - function openDV(dvtype, submission_id, part_id, user_id) { - var proceed = true; - - // Show resubmission grade warning. - if ($('#grademark_'+submission_id+'_'+part_id+'_'+user_id).hasClass('graded_warning') && dvtype != 'downloadoriginal') { - if (!confirm(M.str.turnitintooltwo.resubmissiongradewarn)) { - proceed = false; + // Put the form in to the submissions table row and submit it. + // This will download the relevant original file + function downloadOriginalFile(dvtype, submission_id, part_id, user_id) { + // Get html to launch DV + $.ajax({ + type: "POST", + url: M.cfg.wwwroot+"/mod/turnitintooltwo/ajax.php", + dataType: "html", + data: {action: dvtype, submission: submission_id, assignment: $('#assignment_id').html()}, + success: function(data) { + $("#"+dvtype+"_form_"+submission_id).html(data); + $("#"+dvtype+"_form_"+submission_id).children("form").submit(); + $("#"+dvtype+"_form_"+submission_id).html(""); } - } + }); + } - if (proceed) { - $.ajax({ - type: "POST", - url: "ajax.php", - dataType: "html", - data: {action: dvtype, assignment: $('#assignment_id').html(), submission: submission_id}, - success: function(data) { - $("#"+dvtype+"_form_"+submission_id).html(data); - if (dvtype == "downloadoriginal") { - $("#"+dvtype+"_form_"+submission_id).children("form").submit(); - } else { - $("#"+dvtype+"_form_"+submission_id).children("form").on("submit", function(event) { - dvWindow = window.open('', 'dv_'+submission_id); - dvWindow.document.write(''); - dvWindow.document.close(); - $(dvWindow).bind('beforeunload', function() { - refreshInboxRow(dvtype, submission_id, part_id, user_id); - }); - }); - $("#"+dvtype+"_form_"+submission_id).children("form").submit(); - } - $("#"+dvtype+"_form_"+submission_id).html(""); - } - }); + // Check whether the DV is still open, refresh the opening window when it closes. + function checkDVClosed(part_id) { + if (window.dvWindow.closed) { + $("#refresh_"+part_id).click(); + } else { + setTimeout( function(){ + checkDVClosed(part_id); + }, 500); } } diff --git a/jquery/turnitintooltwo.min.js b/jquery/turnitintooltwo.min.js index 3a7321d5..ea4a7df2 100755 --- a/jquery/turnitintooltwo.min.js +++ b/jquery/turnitintooltwo.min.js @@ -1 +1 @@ -jQuery(document).ready(function($){function enableEditingText(i){$("#tabs-"+i+" .editable_date, #tabs-"+i+" .editable_text").editable("enable")}function disableEditingText(i){$("#tabs-"+i+" .editable_date, #tabs-"+i+" .editable_text").editable("disable")}function getLoadingGif(){var i='
';$("#cboxOverlay").after(i);var e=$(window).scrollTop()+$(window).height()/2;$(".loading_gif").css("top",e+"px")}function hideLoadingGif(){$(".loading_gif").remove()}function getSubmissions(table,assignment_id,part_id,start,refresh_requested,total){$.ajax({dataType:"json",type:"POST",url:"ajax.php",async:!0,data:{action:"get_submissions",assignment:assignment_id,part:part_id,start:start,refresh_requested:refresh_requested[part_id],sesskey:M.cfg.sesskey,total:total},success:function(result){if(eval(result),start=result.end,result.aaData.length>0&&table.fnAddData(result.aaData),result.end0&&$(".nonsubmitters_link").attr("style","display: block")}},error:function(i,e){$("#"+part_id+"_processing").attr("style","visibility: hidden"),$(".dataTables_empty").html(M.str.turnitintooltwo.tiisubmissionsgeterror)}})}function submitVisibility(){1==$(".upload_box").data("user-type")||1==$(".upload_box").data("eula")?$(".upload_box").show():$(".upload_box").hide()}function refreshRubricSelect(){var i=$("#id_rubric").length?"#id_rubric":"#id_plagiarism_rubric",e=$(i).val();$.ajax({dataType:"json",type:"POST",url:"../mod/turnitintooltwo/ajax.php",data:{action:"refresh_rubric_select",assignment:$('input[name="instance"]').val(),modulename:$('input[name="modulename"]').val(),course:$('input[name="course"]').val()},success:function(t){$($(i)).empty();var s=t;$.each(s,function(e,t){$($(i)).append($("