2
0
mirror of https://github.com/ACSPRI/queXS synced 2024-04-02 12:12:16 +00:00
Files
CATI_Tool/include/limesurvey/scripts/uploader.js

305 lines
14 KiB
JavaScript

$(document).ready(function(){
var fieldname = $('#ia').val();
/* Load the previously uploaded files */
var filecount = window.parent.window.$('#'+fieldname+'_filecount').val();
$('#'+fieldname+'_filecount').val(filecount);
var image_extensions = new Array("gif", "jpeg", "jpg", "png", "swf", "psd", "bmp", "tiff", "jp2", "iff", "bmp", "xbm", "ico");
if (filecount > 0)
{
var jsontext = window.parent.window.$('#'+fieldname).val();
var json = eval('(' + jsontext + ')');
var i;
$('#'+fieldname+'_licount').val(filecount);
for (i = 1; i <= filecount; i++)
{
var previewblock = "<li id='"+fieldname+"_li_"+i+"' class='previewblock'><div>"+
"<table align='center'><tr>"+
"<td align='center' width='50%' padding='20px' >";
if (isValueInArray(image_extensions, json[i-1].ext))
previewblock += "<img src='uploader.php?filegetcontents="+json[i-1].filename+"' height='60px' />"+decodeURIComponent(json[i-1].name);
else
previewblock += "<img src='images/placeholder.png' height='60px' /><br />"+decodeURIComponent(json[i-1].name);
previewblock += "</td>";
if ($('#'+fieldname+'_show_title').val() == 1 && $('#'+fieldname+'_show_comment').val() == 1)
previewblock += "<td align='center'><label>"+translt.titleFld+"</label><br /><br /><label>"+translt.commentFld+"</label></td><td align='center'><input type='text' value='"+json[i-1].title+"' id='"+fieldname+"_title_"+i+"' /><br /><br /><input type='text' value='"+json[i-1].comment+"' id='"+fieldname+"_comment_"+i+"' /></td>";
else if ($('#'+fieldname+'_show_title').val() == 1)
previewblock += "<td align='center'><label>"+translt.titleFld+"</label></td><td align='center'><input type='text' value='"+json[i-1].title+"' id='"+fieldname+"_title_"+i+"' /></td>";
else if ($('#'+fieldname+'_show_comment').val() == 1)
previewblock += "<td align='center'><label>"+translt.commentFld+"</label></td><td align='center'><input type='text' value='"+json[i-1].comment+"' id='"+fieldname+"_comment_"+i+"' /></td>";
previewblock += "<td align='center' width='20%' ><img style='cursor:pointer' src='images/delete.png' onclick='deletefile(\""+fieldname+"\", "+i+")' /></td></tr></table>"+
"<input type='hidden' id='"+fieldname+"_size_" +i+"' value="+json[i-1].size+" />"+
"<input type='hidden' id='"+fieldname+"_name_" +i+"' value="+json[i-1].name+" />"+
"<input type='hidden' id='"+fieldname+"_file_index_"+i+"' value="+i+" />"+
"<input type='hidden' id='"+fieldname+"_filename_"+i+"' value="+json[i-1].filename+" />"+
"<input type='hidden' id='"+fieldname+"_ext_" +i+"' value="+json[i-1].ext+" />"+
"</div></li>";
// add file to the list
$('#'+fieldname+'_listfiles').append(previewblock);
}
}
// The upload button
var button = $('#button1'), interval;
new AjaxUpload(button, {
action: 'upload.php?sid='+surveyid+'&preview='+questgrppreview+'&fieldname='+fieldname,
name: 'uploadfile',
data: {
valid_extensions : $('#'+fieldname+'_allowed_filetypes').val(),
max_filesize : $('#'+fieldname+'_maxfilesize').val(),
preview : $('#preview').val(),
surveyid : surveyid,
fieldname : fieldname
},
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)
{
$('#notice').html('<p class="error">'+translt.errorNoMoreFiles+'</p>');
return false;
}
/* If the file being uploaded is not allowed,
* do not upload the file and display an error message ! */
var allowSubmit = false;
for (var i = 0; i < allowed_filetypes.length; i++)
{
//check to see if it's the proper extension
if (jQuery.trim(allowed_filetypes[i].toLowerCase()) == jQuery.trim(ext.toLowerCase()) )
{
//it's the proper extension
allowSubmit = true;
break;
}
}
if (allowSubmit == false)
{
$('#notice').html('<p class="error">'+translt.errorOnlyAllowed.replace('%s',$('#'+fieldname+'_allowed_filetypes').val())+'</p>');
return false;
}
// change button text, when user selects file
button.text(translt.uploading);
// If you want to allow uploading only 1 file at time,
// you can disable upload button
this.disable();
// Uploding -> Uploading. -> Uploading...
interval = window.setInterval(function(){
var text = button.text();
if (text.length < 13){
button.text(text + '.');
} else {
button.text(translt.uploading);
}
}, 400);
},
onComplete: function(file, response){
button.text(translt.selectfile);
window.clearInterval(interval);
// enable upload button
this.enable();
// Once the file has been uploaded via AJAX,
// the preview is appended to the list of files
var metadata = eval('(' + response + ')');
var count = parseInt($('#'+fieldname+'_licount').val());
count++;
$('#'+fieldname+'_licount').val(count);
var image_extensions = new Array("gif", "jpeg", "jpg", "png", "swf", "psd", "bmp", "tiff", "jp2", "iff", "bmp", "xbm", "ico");
if (metadata.success)
{
$('#notice').html('<p class="success">'+metadata.msg+'</p>');
var previewblock = "<li id='"+fieldname+"_li_"+count+"' class='previewblock'><div>"+
"<table align='center'><tr>"+
"<td align='center' width='50%'>";
// If the file is not an image, use a placeholder
if (isValueInArray(image_extensions, metadata.ext))
previewblock += "<img src='uploader.php?filegetcontents="+decodeURIComponent(metadata.filename)+"' height='60px' />";
else
previewblock += "<img src='images/placeholder.png' height='60px' />";
previewblock += "<br />"+decodeURIComponent(metadata.name)+"</td>";
if ($("#"+fieldname+"_show_title").val() == 1 && $("#"+fieldname+"_show_comment").val() == 1)
previewblock += "<td align='center'><label>"+translt.titleFld+"</label><br /><br /><label>"+translt.commentFld+"</label></td><td align='center'><input type='text' value='' id='"+fieldname+"_title_"+count+"' /><br /><br /><input type='text' value='' id='"+fieldname+"_comment_"+count+"' /></td>";
else if ($("#"+fieldname+"_show_title").val() == 1)
previewblock += "<td align='center'><label>"+translt.titleFld+"</label></td><td align='center'><input type='text' value='' id='"+fieldname+"_title_"+count+"' /></td>";
else if ($("#"+fieldname+"_show_comment").val() == 1)
previewblock += "<td align='center'><label>"+translt.commentFld+"</label></td><td align='center'><input type='text' value='' id='"+fieldname+"_comment_"+count+"' /></td>";
previewblock += "<td align='center' width='20%'><img style='cursor:pointer' src='images/delete.png' onclick='deletefile(\""+fieldname+"\", "+count+")'/></td>"+
"</tr></table>"+
"<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+" />"+
"</div></li>";
// add file to the list
$('#'+fieldname+'_listfiles').prepend(previewblock);
var filecount = parseInt($('#'+fieldname+'_filecount').val());
var minfiles = parseInt($('#'+fieldname+'_minfiles').val());
filecount++;
var maxfiles = parseInt($('#'+fieldname+'_maxfiles').val());
$('#'+fieldname+'_filecount').val(filecount);
if (filecount < minfiles)
$('#uploadstatus').html(translt.errorNeedMore.replace('%s',(minfiles - filecount)));
else if (filecount < maxfiles)
$('#uploadstatus').html(translt.errorMoreAllowed.replace('%s',(maxfiles - filecount)));
else
$('#uploadstatus').html(translt.errorMaxReached);
if (filecount >= maxfiles)
$('#notice').html('<p class="success">'+translt.errorTooMuch+'</p>');
}
else
{
$('#notice').html('<p class="error">'+metadata.msg+'</p>');
}
}
});
// if it has been jst opened, the upload button should be automatically clicked !
// TODO: auto open using click() not working at all ! :(
});
function isValueInArray(arr, val) {
inArray = false;
for (i = 0; i < arr.length; i++)
if (val.toLowerCase() == arr[i].toLowerCase())
inArray = true;
return inArray;
}
// pass the JSON data from the iframe to the main survey page
function passJSON(fieldname, show_title, show_comment, pos) {
var json = "[";
var filecount = 0;
var licount = parseInt($('#'+fieldname+'_licount').val());
var i = 0;
while (i <= licount)
{
if (filecount > 0)
json += ",";
if ($("#"+fieldname+"_li_"+i).is(':visible'))
{
json += '{';
if ($("#"+fieldname+"_show_title").val() == 1)
json += '"title":"' +$("#"+fieldname+"_title_" +i).val()+'",';
if ($("#"+fieldname+"_show_comment").val() == 1)
json += '"comment":"'+$("#"+fieldname+"_comment_"+i).val()+'",';
json += '"size":"' +$("#"+fieldname+"_size_" +i).val()+'",'+
'"name":"' +$("#"+fieldname+"_name_" +i).val()+'",'+
'"filename":"' +$("#"+fieldname+"_filename_" +i).val()+'",'+
'"ext":"' +$("#"+fieldname+"_ext_" +i).val()+'"}';
filecount += 1;
i += 1;
}
else
{
i += 1;
}
}
json += "]";
window.parent.window.copyJSON(json, filecount, fieldname, show_title, show_comment, pos);
}
function saveAndExit(fieldname, show_title, show_comment, pos) {
var filecount = parseInt($('#'+fieldname+'_filecount').val());
var minfiles = parseInt($('#'+fieldname+'_minfiles').val());
if (minfiles != 0 && filecount < minfiles)
{
var confirmans = confirm(translt.errorNeedMore.replace('%s', (minfiles - filecount)))
if (confirmans)
{
passJSON(fieldname, show_title, show_comment, pos);
return true
}
else
return false;
}
else
{
passJSON(fieldname, show_title, show_comment, pos);
return true;
}
}
function deletefile(fieldname, count) {
var file_index;
var xmlhttp;
if (window.XMLHttpRequest)
xmlhttp=new XMLHttpRequest();
else
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
var filecount = parseInt($('#'+fieldname+'_filecount').val());
var licount = parseInt($('#'+fieldname+'_licount').val());
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
$('#notice').html('<p class="success">'+xmlhttp.responseText+'</p>');
setTimeout(function() {
$(".success").remove();
}, 5000);
$("#"+fieldname+"_li_"+count).hide();
filecount--;
$('#'+fieldname+'_filecount').val(filecount);
// rearrange the file indexes
// i.e move the files below i to one step up
file_index = $("#"+fieldname+"_file_index_"+count).val();
for (j = count; j <= licount; j++)
{
if ($('#'+fieldname+'_li_'+j).is(":visible"))
{
$('#'+fieldname+'_file_index_'+j).val(file_index);
file_index++;
}
}
var minfiles = parseInt($('#'+fieldname+'_minfiles').val());
var maxfiles = parseInt($('#'+fieldname+'_maxfiles').val());
if (filecount < minfiles)
$('#uploadstatus').html(translt.errorNeedMore.replace('%s',(minfiles - filecount)));
else
$('#uploadstatus').html(translt.errorMoreAllowed.replace('%s',(maxfiles - filecount)));
}
}
filename=$("#"+fieldname+"_filename_"+count).val();
name=$("#"+fieldname+"_name_"+count).val();
xmlhttp.open('GET','delete.php?sid='+surveyid+'&fieldname='+fieldname+'&filename='+filename+'&name='+encodeURI(name), true);
xmlhttp.send();
}