diff --git a/app/controllers/forms.server.controller.js b/app/controllers/forms.server.controller.js
index 263cbf23..448dcdca 100644
--- a/app/controllers/forms.server.controller.js
+++ b/app/controllers/forms.server.controller.js
@@ -82,8 +82,7 @@ exports.createSubmission = function(req, res) {
async.waterfall([
function(callback) {
if (form.selfNotifications && form.selfNotifications.enabled && form.selfNotifications.fromField) {
-
- form.selfNotifications.fromEmails = formFieldDict[form.selfNotifications.fromField].fieldValue;
+ form.selfNotifications.fromEmails = formFieldDict[form.selfNotifications.fromField];
emailNotifications.send(form.selfNotifications, formFieldDict, smtpTransport, constants.varFormat, function(err){
if(err){
@@ -101,7 +100,7 @@ exports.createSubmission = function(req, res) {
function(callback) {
if (form.respondentNotifications && form.respondentNotifications.enabled && form.respondentNotifications.toField) {
- form.selfNotifications.toEmails = formFieldDict[form.selfNotifications.toField].fieldValue;
+ form.selfNotifications.toEmails = formFieldDict[form.selfNotifications.toField];
emailNotifications.send(form.selfNotifications, formFieldDict, smtpTransport, constants.varFormat, function(err){
if(err){
diff --git a/app/libs/send-email-notifications.js b/app/libs/send-email-notifications.js
index e2e66596..7ba6b804 100644
--- a/app/libs/send-email-notifications.js
+++ b/app/libs/send-email-notifications.js
@@ -4,10 +4,11 @@ const constants = require('./constants');
module.exports = {
send: function(emailSettings, emailTemplateVars, smtpTransport, varFormat, cb){
- var parsedTemplate = this.parseTemplate(emailSettings.htmlTemplate, emailTemplateVars);
- var parsedSubject = this.parseTemplate(emailSettings.body, emailTemplateVars);
+ var parsedTemplate = this.parseTemplate(emailSettings.htmlTemplate, emailTemplateVars, varFormat);
+ var parsedSubject = this.parseTemplate(emailSettings.subject, emailTemplateVars, varFormat);
var mailOptions = {
- from: emailSettings.fromEmails,
+ replyTo: emailSettings.fromEmails,
+ from: 'noreply@tellform.com',
cc: emailSettings.toEmails,
subject: parsedSubject,
html: parsedTemplate
@@ -32,8 +33,8 @@ module.exports = {
createFieldDict: function(form_fields){
var formFieldDict = {};
form_fields.forEach(function(field){
- if(field.hasOwnProperty('_id') && field.hasOwnProperty('fieldValue')){
- formFieldDict[field._id] = field.fieldValue;
+ if(field.hasOwnProperty('globalId') && field.hasOwnProperty('fieldValue')){
+ formFieldDict[field.globalId] = field.fieldValue;
}
});
return formFieldDict;
diff --git a/app/models/form.server.model.js b/app/models/form.server.model.js
index 2ed41a79..7aaef85e 100644
--- a/app/models/form.server.model.js
+++ b/app/models/form.server.model.js
@@ -158,7 +158,7 @@ var FormSchema = new Schema({
selfNotifications: {
fromField: {
- type: Schema.Types.ObjectId,
+ type: String
},
toEmails: {
type: String
@@ -177,7 +177,7 @@ var FormSchema = new Schema({
respondentNotifications: {
toField: {
- type: Schema.Types.ObjectId,
+ type: String
},
fromEmails: {
type: String,
@@ -250,10 +250,6 @@ FormSchema.virtual('analytics.views').get(function () {
}
});
-FormSchema.virtual('analytics.submissions').get(function () {
- return this.submissions.length;
-});
-
FormSchema.virtual('analytics.conversionRate').get(function () {
if(this.analytics && this.analytics.visitors && this.analytics.visitors.length > 0){
return this.submissions.length/this.analytics.visitors.length*100;
diff --git a/public/dist/application.js b/public/dist/application.js
index 6d4bb435..11ba2e1c 100644
--- a/public/dist/application.js
+++ b/public/dist/application.js
@@ -985,17 +985,6 @@ angular.module('view-form').directive('submitFormDirective', ["$http", "TimeCoun
if($scope.myform.form_fields[i].fieldType === 'dropdown' && !$scope.myform.form_fields[i].deletePreserved){
$scope.myform.form_fields[i].fieldValue = $scope.myform.form_fields[i].fieldValue.option_value;
}
-
- //Get rid of unnessecary attributes for each form field
- delete form.form_fields[i].submissionId;
- delete form.form_fields[i].disabled;
- delete form.form_fields[i].ratingOptions;
- delete form.form_fields[i].fieldOptions;
- delete form.form_fields[i].logicJump;
- delete form.form_fields[i].description;
- delete form.form_fields[i].validFieldTypes;
- delete form.form_fields[i].fieldType;
-
}
setTimeout(function () {
diff --git a/public/dist/application.min.js b/public/dist/application.min.js
index 73e91963..0c8761cd 100644
--- a/public/dist/application.min.js
+++ b/public/dist/application.min.js
@@ -1 +1 @@
-"use strict";angular.module(ApplicationConfiguration.applicationModuleName,ApplicationConfiguration.applicationModuleVendorDependencies),angular.module(ApplicationConfiguration.applicationModuleName).config(["$locationProvider",function(a){a.hashPrefix("!")}]),angular.module(ApplicationConfiguration.applicationModuleName).constant("APP_PERMISSIONS",{viewAdminSettings:"viewAdminSettings",editAdminSettings:"editAdminSettings",editForm:"editForm",viewPrivateForm:"viewPrivateForm"}),angular.module(ApplicationConfiguration.applicationModuleName).constant("USER_ROLES",{admin:"admin",normal:"user",superuser:"superuser"}),angular.module(ApplicationConfiguration.applicationModuleName).constant("FORM_URL","/forms/:formId"),angular.element(document).ready(function(){"#_=_"===window.location.hash&&(window.location.hash="#!"),angular.bootstrap(document,[ApplicationConfiguration.applicationModuleName])});var ApplicationConfiguration=function(){var a="TellForm",b=["duScroll","ui.select","ngSanitize","vButton","ngResource","TellForm.templates","ui.router","ui.bootstrap","ui.utils","pascalprecht.translate"],c=function(b,c){angular.module(b,c||[]),angular.module(a).requires.push(b)};return{applicationModuleName:a,applicationModuleVendorDependencies:b,registerModule:c}}();angular.module("view-form").filter("formValidity",function(){return function(a){if(a&&a.form_fields&&a.visible_form_fields){var b=Object.keys(a),c=(b.filter(function(a){return"$"!==a[0]}),a.form_fields),d=c.filter(function(a){return"object"==typeof a&&"rating"!==a.fieldType&&"statement"!==a.fieldType?!!a.fieldValue:"rating"===a.fieldType||void 0}).length;return d-(a.form_fields.length-a.visible_form_fields.length)}return 0}}),angular.module("view-form").value("supportedFields",["textfield","textarea","date","dropdown","hidden","password","radio","legal","statement","rating","yes_no","number","natural"]),angular.module("view-form").constant("VIEW_FORM_URL","/forms/:formId/render"),angular.module("view-form").config(["$translateProvider",function(a){a.translations("en",{FORM_SUCCESS:"Form entry successfully submitted!",REVIEW:"Review",BACK_TO_FORM:"Go back to Form",EDIT_FORM:"Edit this TellForm",CREATE_FORM:"Create this TellForm",ADVANCEMENT:"{{done}} out of {{total}} answered",CONTINUE_FORM:"Continue to Form",REQUIRED:"required",COMPLETING_NEEDED:"{{answers_not_completed}} answer(s) need completing",OPTIONAL:"optional",ERROR_EMAIL_INVALID:"Please enter a valid email address",ERROR_NOT_A_NUMBER:"Please enter valid numbers only",ERROR_URL_INVALID:"Please a valid url",OK:"OK",ENTER:"press ENTER",YES:"Yes",NO:"No",NEWLINE:"press SHIFT+ENTER to create a newline",CONTINUE:"Continue",LEGAL_ACCEPT:"I accept",LEGAL_NO_ACCEPT:"I don’t accept",DELETE:"Delete",CANCEL:"Cancel",SUBMIT:"Submit",UPLOAD_FILE:"Upload your File",Y:"Y",N:"N",OPTION_PLACEHOLDER:"Type or select an option",ADD_NEW_LINE_INSTR:"Press SHIFT+ENTER to add a newline",ERROR:"Error",FORM_404_HEADER:"404 - Form Does Not Exist",FORM_404_BODY:"The form you are trying to access does not exist. Sorry about that!",FORM_UNAUTHORIZED_HEADER:"Not Authorized to Access Form",FORM_UNAUTHORIZED_BODY1:"The form you are trying to access is currently private and not accesible publically.",FORM_UNAUTHORIZED_BODY2:'If you are the owner of the form, you can set it to "Public" in the "Configuration" panel in the form admin.'}),a.preferredLanguage("en").fallbackLanguage("en").useSanitizeValueStrategy("escape")}]),angular.module("view-form").config(["$translateProvider",function(a){a.translations("fr",{FORM_SUCCESS:"Votre formulaire a été enregistré!",REVIEW:"Incomplet",BACK_TO_FORM:"Retourner au formulaire",EDIT_FORM:"Éditer le Tellform",CREATE_FORM:"Créer un TellForm",ADVANCEMENT:"{{done}} complétés sur {{total}}",CONTINUE_FORM:"Aller au formulaire",REQUIRED:"obligatoire",COMPLETING_NEEDED:"{{answers_not_completed}} réponse(s) doive(nt) être complétée(s)",OPTIONAL:"facultatif",ERROR_EMAIL_INVALID:"Merci de rentrer une adresse mail valide",ERROR_NOT_A_NUMBER:"Merce de ne rentrer que des nombres",ERROR_URL_INVALID:"Merci de rentrer une url valide",OK:"OK",ENTER:"presser ENTRÉE",YES:"Oui",NO:"Non",NEWLINE:"presser SHIFT+ENTER pour créer une nouvelle ligne",CONTINUE:"Continuer",LEGAL_ACCEPT:"J’accepte",LEGAL_NO_ACCEPT:"Je n’accepte pas",DELETE:"Supprimer",CANCEL:"Réinitialiser",SUBMIT:"Enregistrer",UPLOAD_FILE:"Envoyer un fichier",Y:"O",N:"N",OPTION_PLACEHOLDER:"Tapez ou sélectionnez une option",ADD_NEW_LINE_INSTR:"Appuyez sur MAJ + ENTRÉE pour ajouter une nouvelle ligne",ERROR:"Erreur",FORM_404_HEADER:"404 - Le formulaire n'existe pas",FORM_404_BODY:"Le formulaire auquel vous essayez d'accéder n'existe pas. Désolé pour ça!",FORM_UNAUTHORIZED_HEADER:"Non autorisé à accéder au formulaire",FORM_UNAUTHORIZED_BODY1:"Le formulaire auquel vous essayez d'accéder est actuellement privé et inaccessible publiquement.",FORM_UNAUTHORIZED_BODY2:'Si vous êtes le propriétaire du formulaire, vous pouvez le définir sur "Public" dans le panneau "Configuration" du formulaire admin.'})}]),angular.module("view-form").config(["$translateProvider",function(a){a.translations("de",{FORM_SUCCESS:"Ihre Angaben wurden gespeichert.",REVIEW:"Unvollständig",BACK_TO_FORM:"Zurück zum Formular",EDIT_FORM:"Bearbeiten Sie diese TellForm",CREATE_FORM:"Dieses TellForm erstellen",ADVANCEMENT:"{{done}} von {{total}} beantwortet",CONTINUE_FORM:"Zum Formular",REQUIRED:"verpflichtend",COMPLETING_NEEDED:"Es fehlen/fehtl noch {{answers_not_completed}} Antwort(en)",OPTIONAL:"fakultativ",ERROR_EMAIL_INVALID:"Bitte gültige Mailadresse eingeben",ERROR_NOT_A_NUMBER:"Bitte nur Zahlen eingeben",ERROR_URL_INVALID:"Bitte eine gültige URL eingeben",OK:"Okay",ENTER:"Eingabetaste drücken",YES:"Ja",NO:"Nein",NEWLINE:"Für eine neue Zeile SHIFT+ENTER drücken",CONTINUE:"Weiter",LEGAL_ACCEPT:"I accept",LEGAL_NO_ACCEPT:"I don’t accept",DELETE:"Entfernen",CANCEL:"Canceln",SUBMIT:"Speichern",UPLOAD_FILE:"Datei versenden",Y:"J",N:"N",OPTION_PLACEHOLDER:"Geben oder wählen Sie eine Option aus",ADD_NEW_LINE_INSTR:"Drücken Sie UMSCHALT + EINGABETASTE, um eine neue Zeile hinzuzufügen",ERROR:"Fehler",FORM_404_HEADER:"404 - Formular existiert nicht",FORM_404_BODY:"Das Formular, auf das Sie zugreifen möchten, existiert nicht. Das tut mir leid!",FORM_UNAUTHORIZED_HEADER:"Nicht zum Zugriffsformular berechtigt' ",FORM_UNAUTHORIZED_BODY1:"Das Formular, auf das Sie zugreifen möchten, ist derzeit privat und nicht öffentlich zugänglich.",FORM_UNAUTHORIZED_BODY2:'Wenn Sie der Eigentümer des Formulars sind, können Sie es im Fenster "Konfiguration" im Formular admin auf "Öffentlich" setzen.'})}]),angular.module("view-form").config(["$translateProvider",function(a){a.translations("it",{FORM_SUCCESS:"Il formulario è stato inviato con successo!",REVIEW:"Incompleto",BACK_TO_FORM:"Ritorna al formulario",EDIT_FORM:"Modifica questo TellForm",CREATE_FORM:"Crea questo TellForm",ADVANCEMENT:"{{done}} su {{total}} completate",CONTINUE_FORM:"Vai al formulario",REQUIRED:"obbligatorio",COMPLETING_NEEDED:"{{answers_not_completed}} risposta/e deve/ono essere completata/e",OPTIONAL:"opzionale",ERROR_EMAIL_INVALID:"Si prega di inserire un indirizzo email valido",ERROR_NOT_A_NUMBER:"Si prega di inserire solo numeri",ERROR_URL_INVALID:"Grazie per inserire un URL valido",OK:"OK",ENTER:"premere INVIO",YES:"Sì",NO:"No",NEWLINE:"premere SHIFT+INVIO per creare una nuova linea",CONTINUE:"Continua",LEGAL_ACCEPT:"I accept",LEGAL_NO_ACCEPT:"I don’t accept",DELETE:"Cancella",CANCEL:"Reset",SUBMIT:"Registra",UPLOAD_FILE:"Invia un file",Y:"S",N:"N",OPTION_PLACEHOLDER:"Digitare o selezionare un'opzione",ADD_NEW_LINE_INSTR:"Premere SHIFT + INVIO per aggiungere una nuova riga",ERROR:"Errore",FORM_404_HEADER:"404 - Il modulo non esiste",FORM_404_BODY:"La forma che stai cercando di accedere non esiste. Ci dispiace!",FORM_UNAUTHORIZED_HEADER:"Non autorizzato per accedere al modulo",FORM_UNAUTHORIZED_BODY1:"Il modulo che si sta tentando di accedere è attualmente privato e non accessibile in pubblico.",FORM_UNAUTHORIZED_BODY2:'Se sei il proprietario del modulo, puoi impostarlo su "Pubblico" nel pannello "Configurazione" nell\'amministratore di moduli.'})}]),angular.module("view-form").config(["$translateProvider",function(a){a.translations("es",{FORM_SUCCESS:"¡El formulario ha sido enviado con éxito!",REVIEW:"Revisar",BACK_TO_FORM:"Regresar al formulario",EDIT_FORM:"Editar este TellForm",CREATE_FORM:"Crear este TellForm",ADVANCEMENT:"{{done}} de {{total}} contestadas",CONTINUE_FORM:"Continuar al formulario",REQUIRED:"Información requerida",COMPLETING_NEEDED:"{{answers_not_completed}} respuesta(s) necesita(n) ser completada(s)",OPTIONAL:"Opcional",ERROR_EMAIL_INVALID:"Favor de proporcionar un correo electrónico válido",ERROR_NOT_A_NUMBER:"Por favor, introduzca sólo números válidos",ERROR_URL_INVALID:"Favor de proporcionar un url válido",OK:"OK",ENTER:"pulse INTRO",YES:"Si",NO:"No",NEWLINE:"presione SHIFT+INTRO para crear una nueva línea",CONTINUE:"Continuar",LEGAL_ACCEPT:"Yo acepto",LEGAL_NO_ACCEPT:"Yo no acepto",DELETE:"Eliminar",CANCEL:"Cancelar",SUBMIT:"Registrar",UPLOAD_FILE:"Cargar el archivo",Y:"S",N:"N",OPTION_PLACEHOLDER:"Escriba o seleccione una opción",ADD_NEW_LINE_INSTR:"Presione MAYÚS + ENTRAR para agregar una nueva línea",ERROR:"Error",FORM_404_HEADER:"404 - La forma no existe",FORM_404_BODY:"El formulario al que intenta acceder no existe. ¡Lo siento por eso!",FORM_UNAUTHORIZED_HEADER:"Non autorizzato per accedere al modulo",FORM_UNAUTHORIZED_BODY1:"Il modulo che si sta tentando di accedere è attualmente privato e non accessibile in pubblico.",FORM_UNAUTHORIZED_BODY2:'Se sei il proprietario del modulo, puoi impostarlo su "Pubblico" nel pannello "Configurazione" nell\'amministratore di moduli.'})}]),angular.module("view-form").controller("SubmitFormController",["$scope","$rootScope","$state","$translate","myForm",function(a,b,c,d,e){a.myform=e,$(".loader").fadeOut("slow"),document.body.style.background=e.design.colors.backgroundColor,d.use(e.language)}]),angular.module("view-form").directive("fieldIconDirective",function(){return{template:'',restrict:"E",scope:{typeName:"@"},controller:["$scope",function(a){var b={textfield:"fa fa-pencil-square-o",dropdown:"fa fa-th-list",date:"fa fa-calendar",checkbox:"fa fa-check-square-o",radio:"fa fa-dot-circle-o",email:"fa fa-envelope-o",textarea:"fa fa-pencil-square",legal:"fa fa-legal",file:"fa fa-cloud-upload",rating:"fa fa-star-half-o",link:"fa fa-link",scale:"fa fa-sliders",stripe:"fa fa-credit-card",statement:"fa fa-quote-left",yes_no:"fa fa-toggle-on",number:"fa fa-slack"};a.typeIcon=b[a.typeName]}]}});var __indexOf=[].indexOf||function(a){for(var b=0,c=this.length;b=0&&(c=c+b+".html"),d.get(c)};return{template:"