Sort form responses by date instead of grouping them by user
This commit is contained in:
parent
b74b0df363
commit
8aec40d1ce
1 changed files with 83 additions and 62 deletions
|
@ -979,10 +979,13 @@ define([
|
|||
return {
|
||||
curve: user,
|
||||
user: answers[key].msg._userdata,
|
||||
results: answers[key].msg[uid]
|
||||
results: answers[key].msg[uid],
|
||||
time: answers[key].time
|
||||
};
|
||||
} catch (e) { console.error(e); }
|
||||
}).filter(Boolean);
|
||||
}).filter(Boolean).sort(function (obj1, obj2) {
|
||||
return obj1.time - obj2.time;
|
||||
});
|
||||
};
|
||||
|
||||
// When there is a change to the form, we need to check if we can still add
|
||||
|
@ -1609,6 +1612,12 @@ define([
|
|||
return rows;
|
||||
};
|
||||
|
||||
var getSortedKeys = function (answers) {
|
||||
return Object.keys(answers).sort(function (uid1, uid2) {
|
||||
return (answers[uid1].time || 0) - (answers[uid2].time || 0);
|
||||
});
|
||||
};
|
||||
|
||||
var TYPES = APP.TYPES = {
|
||||
input: {
|
||||
defaultOpts: {
|
||||
|
@ -1657,7 +1666,7 @@ define([
|
|||
return !answer || !answer.trim();
|
||||
};
|
||||
|
||||
Object.keys(answers).forEach(function (author) {
|
||||
getSortedKeys(answers).forEach(function (author) {
|
||||
var obj = answers[author];
|
||||
var answer = obj.msg[uid];
|
||||
if (isEmpty(answer)) { return empty++; }
|
||||
|
@ -1668,7 +1677,7 @@ define([
|
|||
|
||||
//if (max < 2) { // there are no duplicates, so just return text
|
||||
results.push(getEmpty(empty));
|
||||
Object.keys(answers).forEach(function (author) {
|
||||
getSortedKeys(answers).forEach(function (author) {
|
||||
var obj = answers[author];
|
||||
var answer = obj.msg[uid];
|
||||
if (!answer || !answer.trim()) { return empty++; }
|
||||
|
@ -1738,7 +1747,7 @@ define([
|
|||
printResults: function (answers, uid) { // results textarea
|
||||
var results = [];
|
||||
var empty = 0;
|
||||
Object.keys(answers).forEach(function (author) { // TODO deduplicate these
|
||||
getSortedKeys(answers).forEach(function (author) { // TODO deduplicate these
|
||||
var obj = answers[author];
|
||||
var answer = obj.msg[uid];
|
||||
if (!answer || !answer.trim()) { return empty++; }
|
||||
|
@ -2833,67 +2842,76 @@ define([
|
|||
};
|
||||
|
||||
var els = [];
|
||||
|
||||
// Get all responses
|
||||
var allUnsorted = {};
|
||||
Object.keys(answers).forEach(function (curve) {
|
||||
var userAnswers = answers[curve];
|
||||
Object.keys(userAnswers).forEach(function (uid) {
|
||||
var obj = userAnswers[uid];
|
||||
var answer = obj.msg;
|
||||
var date = new Date(obj.time).toLocaleString();
|
||||
var text, warning, badge;
|
||||
if (!answer._userdata || (!answer._userdata.name && !answer._userdata.curvePublic)) {
|
||||
text = Messages._getKey('form_answerAnonymous', [date]);
|
||||
} else {
|
||||
var ud = answer._userdata;
|
||||
var user;
|
||||
if (ud.profile) {
|
||||
if (priv && priv.friends[curve]) {
|
||||
badge = h('span.cp-form-friend', [
|
||||
h('i.fa.fa-address-book'),
|
||||
Messages._getKey('isContact', [ud.name || Messages.anonymous])
|
||||
]);
|
||||
}
|
||||
user = h('a', {
|
||||
href: getHref(ud.profile) // Only used visually
|
||||
}, Util.fixHTML(ud.name || Messages.anonymous));
|
||||
if (curve !== ud.curvePublic) {
|
||||
warning = h('span.cp-form-warning', Messages.form_answerWarning);
|
||||
}
|
||||
} else {
|
||||
user = h('b', Util.fixHTML(ud.name || Messages.anonymous));
|
||||
}
|
||||
text = Messages._getKey('form_answerName', [user.outerHTML, date]);
|
||||
}
|
||||
var span = UI.setHTML(h('span'), text);
|
||||
var viewButton = h('button.btn.btn-secondary.small', Messages.form_viewButton);
|
||||
var div = h('div.cp-form-individual', [span, viewButton, warning, badge]);
|
||||
$(viewButton).click(function () {
|
||||
var res = {};
|
||||
res[curve] = {};
|
||||
res[curve][uid] = obj;
|
||||
var back = h('button.btn.btn-secondary.small', Messages.form_backButton);
|
||||
$(back).click(function () {
|
||||
summary = true;
|
||||
$s.click();
|
||||
});
|
||||
var header = h('div.cp-form-individual', [
|
||||
span.cloneNode(true),
|
||||
back
|
||||
]);
|
||||
show(res, header);
|
||||
});
|
||||
$(div).find('a').click(function (e) {
|
||||
e.preventDefault();
|
||||
APP.common.openURL(Hash.hashToHref(ud.profile, 'profile'));
|
||||
});
|
||||
if (showUser === curve) {
|
||||
setTimeout(function () {
|
||||
showUser = undefined;
|
||||
$(viewButton).click();
|
||||
});
|
||||
}
|
||||
els.push(div);
|
||||
allUnsorted[curve + '|' + uid] = userAnswers[uid];
|
||||
});
|
||||
});
|
||||
// Sort them by date and print
|
||||
getSortedKeys(allUnsorted).forEach(function (curveUid) {
|
||||
var obj = allUnsorted[curveUid];
|
||||
var uid = curveUid.split('|')[1];
|
||||
var curve = curveUid.split('|')[0];
|
||||
var answer = obj.msg;
|
||||
var date = new Date(obj.time).toLocaleString();
|
||||
var text, warning, badge;
|
||||
if (!answer._userdata || (!answer._userdata.name && !answer._userdata.curvePublic)) {
|
||||
text = Messages._getKey('form_answerAnonymous', [date]);
|
||||
} else {
|
||||
var ud = answer._userdata;
|
||||
var user;
|
||||
if (ud.profile) {
|
||||
if (priv && priv.friends[curve]) {
|
||||
badge = h('span.cp-form-friend', [
|
||||
h('i.fa.fa-address-book'),
|
||||
Messages._getKey('isContact', [ud.name || Messages.anonymous])
|
||||
]);
|
||||
}
|
||||
user = h('a', {
|
||||
href: getHref(ud.profile) // Only used visually
|
||||
}, Util.fixHTML(ud.name || Messages.anonymous));
|
||||
if (curve !== ud.curvePublic) {
|
||||
warning = h('span.cp-form-warning', Messages.form_answerWarning);
|
||||
}
|
||||
} else {
|
||||
user = h('b', Util.fixHTML(ud.name || Messages.anonymous));
|
||||
}
|
||||
text = Messages._getKey('form_answerName', [user.outerHTML, date]);
|
||||
}
|
||||
var span = UI.setHTML(h('span'), text);
|
||||
var viewButton = h('button.btn.btn-secondary.small', Messages.form_viewButton);
|
||||
var div = h('div.cp-form-individual', [span, viewButton, warning, badge]);
|
||||
$(viewButton).click(function () {
|
||||
var res = {};
|
||||
res[curve] = {};
|
||||
res[curve][uid] = obj;
|
||||
var back = h('button.btn.btn-secondary.small', Messages.form_backButton);
|
||||
$(back).click(function () {
|
||||
summary = true;
|
||||
$s.click();
|
||||
});
|
||||
var header = h('div.cp-form-individual', [
|
||||
span.cloneNode(true),
|
||||
back
|
||||
]);
|
||||
show(res, header);
|
||||
});
|
||||
$(div).find('a').click(function (e) {
|
||||
e.preventDefault();
|
||||
APP.common.openURL(Hash.hashToHref(ud.profile, 'profile'));
|
||||
});
|
||||
if (showUser === curve) {
|
||||
setTimeout(function () {
|
||||
showUser = undefined;
|
||||
$(viewButton).click();
|
||||
});
|
||||
}
|
||||
els.push(div);
|
||||
});
|
||||
$results.append(els);
|
||||
});
|
||||
if (showUser) {
|
||||
|
@ -3027,7 +3045,10 @@ define([
|
|||
}
|
||||
|
||||
var entries = [];
|
||||
Object.keys(answers).forEach(function (uid) {
|
||||
var sorted = Object.keys(answers).sort(function (uid1, uid2) {
|
||||
return answers[uid1]._time - answers[uid2]._time;
|
||||
});
|
||||
sorted.forEach(function (uid) {
|
||||
var answer = answers[uid];
|
||||
|
||||
var viewOnly = content.answers.cantEdit || APP.isClosed;
|
||||
|
|
Loading…
Reference in a new issue