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($("