Changeset 508 for Dev/trunk/src/server/app.js
- Timestamp:
- 03/12/14 02:23:11 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Dev/trunk/src/server/app.js
r507 r508 154 154 } 155 155 function areDocsPublished(docs) { 156 return _.every(docs, isDocPublished);156 return _.every(docs, isDocPublished); 157 157 } 158 158 function isDocPublished(doc) { … … 592 592 if ( !areDocsUnique(doc.questions) ) { 593 593 hr = new HTTPResult(400,{error:"Survey contains duplicate questions."}); 594 } else if ( !areDocsPublished(doc.questions) || isDocPublished(doc) ) {594 } else if ( isDocPublished(doc) && !areDocsPublished(doc.questions) ) { 595 595 hr = new HTTPResult(400,{error:"Cannot publish Survey with unpublished questions."}); 596 596 } else { … … 610 610 var doc = req.body; 611 611 var rev = etags.parse(req.header('If-Match'))[0] || (doc && doc._rev); 612 var hr;613 612 if ( !areDocsUnique(doc.questions) ) { 614 613 new HTTPResult(400,{error:"Survey contains duplicate questions."}) 615 614 .handle(res.send.bind(res)); 616 } else if ( !areDocsPublished(doc.questions) || isDocPublished(doc) ) { 617 hr = new HTTPResult(400,{error:"Cannot publish Survey with unpublished questions."}); 615 } else if ( isDocPublished(doc) && !areDocsPublished(doc.questions) ) { 616 new HTTPResult(400,{error:"Cannot publish Survey with unpublished questions."}) 617 .handle(res.send.bind(res)); 618 618 } else { 619 619 putDocument(id,rev,'Survey',doc) … … 718 718 .handle({ 719 719 200: function(responses) { 720 var flatResponses = responsesToVariables(responses); 720 var answers = _.map(responses,function(response){ 721 return response.answers; 722 }); 721 723 res.set({ 722 724 'Content-Disposition': 'attachment; filename=surveyRun-'+id+'-responses.csv' 723 725 }); 724 726 res.status(200); 725 writeObjectsToCSVStream( flatResponses, res);727 writeObjectsToCSVStream(answers, res); 726 728 res.end(); 727 729 }, … … 953 955 } 954 956 955 function responsesToVariables(responses) {956 return _.map(responses, responseToVariables);957 }958 959 function responseToVariables(response) {960 var result = flattenObject(response.answers);961 return result;962 }963 964 function flattenObject(value) {965 var result = {};966 (function agg(val,key,res){967 if ( _.isObject(val) ) {968 var keys = _.keys(val);969 // FIXME : dirty hack for questions with only one input970 if ( keys.length === 1 ) {971 agg(val[keys[0]],key,res);972 } else {973 _.forEach(val, function(v,k){974 agg(v,(key ? key+'.' : '')+k,res);975 });976 }977 } else if ( _.isArray(val) ) {978 // FIXME : dirty hack for questions with only one input979 if ( val.length === 1 ) {980 agg(val[0],key,res);981 } else {982 _.forEach(val, function(v,i){983 agg(v,(key ? key+'.' : '')+i,res);984 });985 }986 } else {987 res[key] = val;988 }989 })(value,null,result);990 return result;991 }992 993 957 function writeObjectsToCSVStream(objects, stream, prelude) { 994 958 var keys = _.chain(objects)
Note: See TracChangeset
for help on using the changeset viewer.