Skip to content

Commit

Permalink
Fixed issue #16289: File Upload not working for iOS 13.2
Browse files Browse the repository at this point in the history
  • Loading branch information
thedirtypanda committed May 18, 2020
1 parent 2528971 commit 975a202
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 52 deletions.
2 changes: 2 additions & 0 deletions application/config/config-defaults.php
Expand Up @@ -91,6 +91,8 @@
'xls', 'doc', 'xlsx', 'docx', 'odt', 'ods', 'pdf',
//Images - as mentioned above be very careful if you want to allow SVG files
'png', 'bmp', 'gif', 'jpg', 'jpeg', 'tif',
// Iphone file extensions (version 11 and above)
'heif', 'heic', 'heifs', 'heics', 'avci', 'avcs', 'avif', 'avifs',
//soundfiles
'wav', 'mp3', 'flac', 'aac', 'm4a', 'opus', 'ogg', 'wma', 'mka',
//videos
Expand Down
Expand Up @@ -154,7 +154,7 @@
<category>Other</category>
<sortorder>134</sortorder>
<inputtype>text</inputtype>
<default>png, gif, doc, odt, jpg, pdf, png</default>
<default>png, gif, doc, odt, jpg, pdf, png, heic</default>
<help>Allowed file types in comma separated format. e.g. pdf,doc,odt</help>
<caption>Allowed file types</caption>
<i18n></i18n>
Expand Down
63 changes: 12 additions & 51 deletions assets/packages/questions/upload/src/uploader.js
Expand Up @@ -10,17 +10,16 @@ var uploadHandler = function (qid, options) {

var fixParentHeigth = function () {
return;
}
};

var renderPreviewItem = function (fieldname, item, iterator) {

var i = iterator;
var image_extensions = new Array('gif', 'jpeg', 'jpg', 'png', 'swf', 'psd', 'bmp', 'tiff', 'jp2', 'iff', 'bmp', 'xbm', 'ico');
var image_extensions = new Array('gif', 'jpeg', 'jpg', 'png', 'swf', 'psd', 'bmp', 'tiff', 'jp2', 'iff', 'bmp', 'xbm', 'ico', 'heic');

var previewblock = $('<li id="' + fieldname + '_li_' + i + '" class="previewblock file-element"></li>');
var previewContainer = $('<div class="file-preview"></div>');

if (isValueInArray(image_extensions, item.ext.toLowerCase())){
if (isValueInArray(image_extensions, item.ext.toLowerCase())) {
previewContainer.append('<img src="' + options.uploadurl + '/filegetcontents/' + item.filename + '" class="uploaded" />');
} else {
previewContainer.append('<div class="upload-placeholder"></div>');
Expand Down Expand Up @@ -96,8 +95,7 @@ var uploadHandler = function (qid, options) {

$('#' + fieldname + '_filecount').val(filecount);

var image_extensions = ['gif', 'jpeg', 'jpg', 'png', 'swf', 'psd', 'bmp', 'tiff', 'jp2', 'iff', 'bmp', 'xbm', 'ico'];

var image_extensions = ['gif', 'jpeg', 'jpg', 'png', 'swf', 'psd', 'bmp', 'tiff', 'jp2', 'iff', 'bmp', 'xbm', 'ico', 'heic'];
if (filecount > 0) {
var jsontext = $('#' + fieldname).val();

Expand Down Expand Up @@ -131,10 +129,10 @@ var uploadHandler = function (qid, options) {
YII_CSRF_TOKEN: options.csrfToken
},
onSubmit: function (file, ext) {

var maxfiles = parseInt($('#' + fieldname + '_maxfiles').val());
var filecount = parseInt($('#' + fieldname + '_filecount').val());
var allowed_filetypes = $('#' + fieldname + '_allowed_filetypes').val().split(",");

/* If maximum number of allowed filetypes have already been uploaded,
* do not upload the file and display an error message ! */
if (filecount >= maxfiles) {
Expand All @@ -146,10 +144,10 @@ var uploadHandler = function (qid, options) {
/* If the file being uploaded is not allowed,
* do not upload the file and display an error message!
*/
var allowSubmit = allowed_filetypes.reduce(function (col, item) {
return col || ext.toLowerCase() === item;
}, false);

let allowSubmit = false;
for (let fileType of allowed_filetypes) {
allowSubmit = allowed_filetypes.includes(fileType);
}

if (allowSubmit == false) {
$('#notice').html('<p class="alert alert-danger"><span class="fa fa-exclamation-circle"></span>&nbsp;' + uploadLang.errorOnlyAllowed.replace('%s', $('#' + fieldname + '_allowed_filetypes').val()) + '</p>');
Expand Down Expand Up @@ -194,42 +192,6 @@ var uploadHandler = function (qid, options) {
}
renderPreviewItem(fieldname, metadata, count);

// var previewblock = "<li id='"+fieldname+"_li_"+count+"' class='previewblock file-element'>";

// previewblock +="<div class='file-preview'>";
// if (isValueInArray(image_extensions, metadata.ext.toLowerCase()))
// previewblock += "<img src='"+uploadurl+"/filegetcontents/"+decodeURIComponent(metadata.filename)+"' class='uploaded' onload='fixParentHeigth()' />";
// else
// previewblock += "<div class='upload-placeholder' />";
// previewblock += "<span class='file-name'>"+escapeHtml(decodeURIComponent(metadata.name))+"<span>";
// previewblock += "</div>";

// previewblock +="<div class='file-info'><fieldset>";
// if ($('#'+fieldname+'_show_title').val() == 1 || $('#'+fieldname+'_show_comment').val() == 1)
// {
// if($('#'+fieldname+'_show_title').val() == 1)
// {
// previewblock += "<div class='form-group'><label class='control-label col-xs-4' for='"+fieldname+"_title_"+count+"'>"+uploadLang.titleFld+"</label>"+"<div class='input-container'><input class='form-control' type='text' value='' id='"+fieldname+"_title_"+count+"' /></div></div>";
// }
// if($('#'+fieldname+'_show_comment').val() == 1)
// {
// previewblock += "<div class='form-group'><label class='control-label col-xs-4' for='"+fieldname+"_comment_"+count+"'>"+uploadLang.commentFld+"</label>"+"<div class='input-container'><input class='form-control' type='text' value='' id='"+fieldname+"_comment_"+count+"' /></div></div>";
// }
// }
// previewblock += "<div class='form-group'><div class='col-xs-4'></div><div class='input-container'><a class='btn btn-danger' onclick='deletefile(\""+fieldname+"\", "+count+")'><span class='fa fa-trash'></span>&nbsp;"+uploadLang.deleteFile+"</a></div></div>";
// previewblock += "</fieldset></div>";

// previewblock += "<input type='hidden' id='"+fieldname+"_size_"+count+"' value="+metadata.size+" />"+
// "<input type='hidden' id='"+fieldname+"_file_index_"+count+"' value="+metadata.file_index+" />"+
// "<input type='hidden' id='"+fieldname+"_name_"+count+"' value="+metadata.name+" />"+
// "<input type='hidden' id='"+fieldname+"_filename_"+count+"' value="+metadata.filename+" />"+
// "<input type='hidden' id='"+fieldname+"_ext_" +count+"' value="+metadata.ext+" />";

// previewblock += "</li>";

// // add file to the list
// $('#field'+fieldname+'_listfiles').prepend(previewblock);

var filecount = parseInt($('#' + fieldname + '_filecount').val());
var minfiles = parseInt($('#' + fieldname + '_minfiles').val());
filecount++;
Expand Down Expand Up @@ -292,7 +254,7 @@ var uploadHandler = function (qid, options) {
const copyJSON = function(filecount, fieldname, show_title, show_comment, pos) {
$('#'+fieldname+'_filecount').val(filecount);
window['uploadQuestionController_' + fieldname].displayUploadedFiles(filecount, fieldname, show_title, show_comment, pos);
}
};

var saveAndExit = function (fieldname, show_title, show_comment, pos) {
var filecount = parseInt($('#' + fieldname + '_filecount').val());
Expand All @@ -312,7 +274,6 @@ var uploadHandler = function (qid, options) {
}

var deletefile = function (fieldname, count) {

var file_index;
var filename = $("#" + fieldname + "_filename_" + count).val();
var name = $("#" + fieldname + "_name_" + count).val();
Expand Down Expand Up @@ -357,7 +318,7 @@ var uploadHandler = function (qid, options) {
fixParentHeigth();
}
});
}
};

return {
init: init,
Expand Down
4 changes: 4 additions & 0 deletions framework/utils/mimeTypes.php
Expand Up @@ -323,6 +323,10 @@
'hvd'=>'application/vnd.yamaha.hv-dic',
'hvp'=>'application/vnd.yamaha.hv-voice',
'hvs'=>'application/vnd.yamaha.hv-script',
'heif' => 'image/heif',
'heifs' => 'image/heif-sequence',
'heic' => 'image/heic',
'heics' => 'image/heic-sequence',
'i2g'=>'application/vnd.intergeo',
'icc'=>'application/vnd.iccprofile',
'ice'=>'x-conference/x-cooltalk',
Expand Down

2 comments on commit 975a202

@Shnoulle
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Still don't work for me
Capture d’écran du 2020-05-18 18-44-44

mime is OK : see the sentence : « Sorry, unable to check extension of this file type image/heif.»

@thedirtypanda
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay I will check it later.

Please sign in to comment.