Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

fh-forms

Package Overview
Dependencies
Maintainers
1
Versions
178
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

fh-forms - npm Package Compare versions

Comparing version 0.5.15 to 0.5.16

171

lib/impl/updateForm.js

@@ -33,2 +33,4 @@ var async = require('async');

var fieldModel = models.get(conn, models.MODELNAMES.FIELD);
var fieldRuleModel = models.get(conn, models.MODELNAMES.FIELD_RULE);
var pageRuleModel = models.get(conn, models.MODELNAMES.PAGE_RULE);
var form;

@@ -183,3 +185,2 @@

cb(undefined, form, toDelete, toAdd, toUpdate, idSorted);
});

@@ -250,14 +251,168 @@ }

}, function (err) {
return cb(err, form, idSorted);
return cb(err);
});
}
/*
Checking rule targets are still valid -- if not, rule is deleted
*/
function updateRules(form, cb) {
//Compiling a list of field and page ids to check for
var fieldAndPageIds = [];
var formPages = form.pages;
var fieldRulesToDelete = [];
var pageRulesToDelete = [];
formModel.populate(form, {"path": "pages", "model": pageModel, "select": "-__v -fieldOptions._id"}, function(err, updatedForm){
if(err){
return cb(err);
}
async.each(formPages, function (formPage, callbackPage) {
fieldAndPageIds.push(formPage._id.toString());
formPage.fields = formPage.fields ? formPage.fields : [];
async.each(formPage.fields, function (pageField, callbackField) {
fieldAndPageIds.push(pageField.toString());
callbackField();
}, callbackPage);
}, function(){
async.parallel([
function(fieldRuleCb){
async.each(form.fieldRules, async.apply(scanForExistingFields, models.MODELNAMES.FIELD_RULE), fieldRuleCb);
},
function(pageRuleCb){
async.each(form.pageRules, async.apply(scanForExistingFields, models.MODELNAMES.PAGE_RULE), pageRuleCb);
}
], function(err){
if(err){
return cb(err);
}
//Update the form object
async.parallel([
updateFormRules,
async.apply(deleteRules, models.MODELNAMES.FIELD_RULE),
async.apply(deleteRules, models.MODELNAMES.PAGE_RULE)
], cb)
});
});
});
function scanForExistingFields(type, rule, callback){
var targetField = rule.targetPage ? rule.targetPage : rule.targetField;
targetField = targetField ? targetField.toString() : "";
var targetExists = true;
if(fieldAndPageIds.indexOf(targetField) === -1){
if(type === models.MODELNAMES.FIELD_RULE){
fieldRulesToDelete.push(rule._id);
} else {
pageRulesToDelete.push(rule._id);
}
return callback();
} else {
async.each(rule.ruleConditionalStatements, function(ruleConStatement, ruleCb){
var sourceId = ruleConStatement.sourceField;
sourceId = sourceId.toString();
if(fieldAndPageIds.indexOf(sourceId) === -1){
targetExists = false;
}
ruleCb();
}, function(){
if(targetExists === false){
if(type === models.MODELNAMES.FIELD_RULE){
fieldRulesToDelete.push(rule._id);
} else {
pageRulesToDelete.push(rule._id);
}
}
return callback();
});
}
}
function deleteRules(type, cb){
if(type === models.MODELNAMES.FIELD_RULE){
async.eachSeries(fieldRulesToDelete, function(fieldRuleId, cb){
fieldRuleModel.findOne({"_id": fieldRuleId}, function(err, fieldRule){
if(err){
return cb(err);
}
if(fieldRule !== null){
fieldRule.remove();
}
return cb();
});
}, cb);
} else {
async.eachSeries(pageRulesToDelete, function(pageRuleId, cb){
pageRuleModel.findOne({"_id": pageRuleId}, function(err, pageRule){
if(err){
return cb(err);
}
if(pageRule !== null){
pageRule.remove();
}
return cb();
});
}, cb);
}
}
//Need to delete any rules that are to be deleted
function updateFormRules(cb){
async.series([function(cb){
async.map(form.fieldRules, function(fieldRule, cb){
if(fieldRulesToDelete.indexOf(fieldRule._id.toString()) > -1){
return cb(undefined, null);
} else {
return cb(undefined, fieldRule);
}
}, function(err, mappedFieldRules){
form.fieldRules = _.filter(mappedFieldRules, function(elem){
return elem !== null;
});
cb();
});
},
function(cb){
async.map(form.pageRules, function(pageRule, cb){
if(fieldRulesToDelete.indexOf(pageRule._id.toString()) > -1){
return cb(undefined, null);
} else {
return cb(undefined, pageRule);
}
}, function(err, mappedPageRules){
form.pageRules = _.filter(mappedPageRules, function(elem){
return elem !== null;
});
cb();
});
}], cb);
}
}
function doUpdate(formData, cb) {
formModel.findById(formData._id, function (err, doc) {
formModel.findById(formData._id).populate("fieldRules pageRules").exec(function (err, doc) {
if (err) return cb(err);
var postedPages = formData.pages || [];
//as this is an update and there is no doc to update bail out
if(! doc){
if (!doc) {
return cb(new Error("A form id was passed but not form was found for that id"));
}
//what to do if no form found

@@ -268,5 +423,6 @@ async.waterfall([

createPages,
updatePages
],function (err, ok){
if(err) cb(err);
updatePages,
async.apply(updateRules, doc)
], function (err, ok) {
if (err) cb(err);

@@ -280,2 +436,3 @@ doc.updatedBy = options.userEmail;

});
}

@@ -282,0 +439,0 @@

2

package.json
{
"name": "fh-forms",
"version": "0.5.15",
"version": "0.5.16",
"description": "Cloud Forms API for form submission",

@@ -5,0 +5,0 @@ "main": "lib/forms.js",

@@ -1,1 +0,1 @@

0.5.15-49
0.5.16-50

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc