Add user-field-type "file" (#977)

* Add user-field-type "file"

* Add userfield-type "picture"

* Also limit image height on userfieldsform

* Prevent empty userfields (cause warnings in tables after deleting a file)

* Show files in dialogs

Co-authored-by: Bernd Bestel <bernd@berrnd.de>
This commit is contained in:
fipwmaqzufheoxq92ebc
2020-08-31 20:07:46 +02:00
committed by GitHub
parent 318db53818
commit 07beee93a9
10 changed files with 192 additions and 48 deletions

View File

@@ -28,6 +28,36 @@ Grocy.Components.UserfieldsForm.Save = function(success, error)
jsonData[fieldName] = "1";
}
}
else if (input.attr("type") == "file")
{
var old_file = input.data('old-file')
if (old_file) {
Grocy.Api.Delete('files/userfiles/' + old_file, null, null,
function (xhr) {
Grocy.FrontendHelpers.ShowGenericError('Could not delete file', xhr);
});
jsonData[fieldName] = "";
}
if (input[0].files.length > 0){
// Files service requires an extension
var fileName = RandomString() + '.' + input[0].files[0].name.split('.').reverse()[0];
jsonData[fieldName] = btoa(fileName) + '_' + btoa(input[0].files[0].name);
Grocy.Api.UploadFile(input[0].files[0], 'userfiles', fileName,
function (result)
{
},
function (xhr)
{
Grocy.FrontendHelpers.ShowGenericError('Error while saving, probably this item already exists', xhr.response)
}
);
}
else
{
//jsonData[fieldName] = null;
}
}
else if ($(this).hasAttr("multiple"))
{
jsonData[fieldName] = $(this).val().join(",");
@@ -79,6 +109,28 @@ Grocy.Components.UserfieldsForm.Load = function()
input.val(value.split(","));
$(".selectpicker").selectpicker("render");
}
if (input.attr('type') == "file")
{
if (value != null && !value.isEmpty()) {
var file_name = atob(value.split('_')[1]);
var file_src = value.split('_')[0];
input.hide();
var file_info = input.siblings('.userfield-file');
file_info.removeClass('d-none');
file_info.find('a.userfield-current-file')
.attr('href', U('/files/userfiles/' + value))
.text(file_name);
file_info.find('img.userfield-current-file')
.attr('src', U('/files/userfiles/' + value + '?force_serve_as=picture&best_fit_width=250&best_fit_height=250'))
file_info.find('button.userfield-file-delete').click(
function () {
file_info.addClass('d-none');
input.data('old-file', file_src);
input.show();
}
);
}
}
else
{
input.val(value);