public HttpResponseMessage MailChimpWebhook(FormDataCollection data) { string userAgent = ""; if (Request.Headers != null && Request.Headers.UserAgent != null && Request.Headers.UserAgent.Any()) { foreach (var agent in Request.Headers.UserAgent) { if (agent != null && agent.Product != null && !string.IsNullOrEmpty(agent.Product.Name) && agent.Product.Name == "VonChimpenfurlr") { userAgent = agent.Product.Name; } } } var dataReceived = data != null?data.ToList() : new List <KeyValuePair <string, string> >(); //Ignoring MailChimp auto link checks. Ref: http://kb.mailchimp.com/quick-answers #Why-are-my-links-being-clicked if (userAgent != "VonChimpenfurlr" && dataReceived != null && dataReceived.Any()) { CampaignResponseViewModel campaignResponseViewModel = new CampaignResponseViewModel() { ResponseItems = dataReceived }; MailChimpWebhookRequest request = new MailChimpWebhookRequest() { CampaignResponse = campaignResponseViewModel, AccountId = this.AccountId }; campaignService.MailChimpWebhookUpdate(request); } else if (userAgent == "VonChimpenfurlr" && dataReceived != null) { Logger.Current.Informational("Request received from Omnivore to verify the link in campaign. " + dataReceived.ToString()); } else if (data == null) { Logger.Current.Informational("Mailchimp Webhook configured successfully"); } return(Request.BuildResponse(new UnsubscribeContactResponse() { Success = true })); //Revisit }
public HttpResponseMessage SubmitForm(FormDataCollection formData) { Logger.Current.Verbose("In SubmitForm method. Request received to submit form."); HttpResponseMessage formSubmissionResponse; SubmittedFormViewModel submittedFormViewModel = new SubmittedFormViewModel(); var context = System.Web.HttpContext.Current.Request; submittedFormViewModel.SubmittedFormFields = new List <SubmittedFormFieldViewModel>(); try { Logger.Current.Informational("Submitted form from Context: " + context.Form); if (formData != null) { var getFormData = formData.ToList(); var submittedToForm = formData.Where(c => c.Key == "formid").FirstOrDefault(); var formAccountId = formData.Where(c => c.Key == "accountid").FirstOrDefault(); var requestDomain = formData.Where(c => c.Key == "domainname").FirstOrDefault(); var submittedBy = formData.Where(c => c.Key == "userid").FirstOrDefault(); var stiTrackingId = formData.Where(c => c.Key == "STITrackingID").FirstOrDefault(); var link = formData.Where(c => c.Key == "redirect-override").FirstOrDefault(); getFormData.Remove(submittedToForm); getFormData.Remove(formAccountId); getFormData.Remove(requestDomain); getFormData.Remove(submittedBy); getFormData.Remove(stiTrackingId); getFormData.Remove(link); int parsedFormId = 0; int parsedAccountId = 0; int.TryParse(submittedToForm.Value, out parsedFormId); int.TryParse(formAccountId.Value, out parsedAccountId); if (parsedFormId > 0 && parsedAccountId > 0) { Logger.Current.Verbose("Request received to submit form with ID: " + parsedFormId); try { var frm = getFormData.GroupBy(x => x.Key).Select(x => new { Key = x.Select(g => g.Key).FirstOrDefault(), value = string.Join("|", x.Select(g => g.Value).ToList()) }); foreach (var field in frm) { submittedFormViewModel.SubmittedFormFields.Add(new SubmittedFormFieldViewModel() { Key = field.Key, Value = !string.IsNullOrEmpty(field.value) ? field.value.Trim() : field.value }); } SubmitFormRequest request = new SubmitFormRequest() { SubmittedFormViewModel = submittedFormViewModel, RequestedBy = this.UserId, AccountId = parsedAccountId }; request.SubmittedFormViewModel.SubmittedOn = DateTime.Now.ToUniversalTime(); request.SubmittedFormViewModel.FormId = parsedFormId; request.SubmittedFormViewModel.AccountId = parsedAccountId; request.SubmittedFormViewModel.IPAddress = requestDomain.Value; request.SubmittedFormViewModel.STITrackingID = stiTrackingId.Value; var domain = accountService.GetAccountDomainUrl(new GetAccountDomainUrlRequest() { AccountId = parsedAccountId }).DomainUrl; var userId = 0; int.TryParse(submittedBy.Value, out userId); request.SubmittedFormViewModel.OwnerId = domain == requestDomain.Value ? userId : 0; // If this is a test form submission domain and requestDomain would be same. Hence, the submitting user will be the owner. formService.SubmitForm(request); } catch (Exception ex) { Logger.Current.Error("Error in form submission: ", ex); } finally { SubmitFormResponse getFormResponse = formService.GetFormAcknowdegement(parsedFormId); Logger.Current.Informational("Response: " + getFormResponse.Acknowledgement.Acknowledgement); formSubmissionResponse = Request.BuildResponse(new FormResponse() { Success = true, Acknowledgement = !string.IsNullOrEmpty(link.Value) ? link.Value : getFormResponse.Acknowledgement.Acknowledgement, AcknowledgementType = !string.IsNullOrEmpty(link.Value) ? AcknowledgementType.Url : getFormResponse.Acknowledgement.AcknowledgementType }); } } else { formSubmissionResponse = new HttpRequestMessage().CreateResponse(HttpStatusCode.NotAcceptable); } } else { throw new Exception("Received empty form data"); } } catch (Exception ex) { ex.Data.Add("submitteddata", formData); Logger.Current.Error("Error in form submission: ", ex); formSubmissionResponse = new HttpRequestMessage().CreateResponse(HttpStatusCode.NotAcceptable); } return(formSubmissionResponse); }
public Guid Post([Bind] FormDataCollection grouppermissionInfo) { Guid groupId = Guid.Empty; DataTable tb = new DataTable(); var lstResource = grouppermissionInfo.ToList(); lstResource.Add(new KeyValuePair <string, string>("last_100", "")); #region Add Title Column foreach (var item in lstResource) { var str = item.Key.Split('_'); if (int.Parse(str[1]) > 1) { break; } tb.Columns.Add(str[0]); } #endregion #region Add Row var count = 1; var index = 0; string[] itemData = new string[8]; foreach (var item in lstResource) { var flag = false; var str = item.Key.Split('_'); if (int.Parse(str[1]) != count) { flag = false; } if (int.Parse(str[1]) == count) { if (tb.Columns.Contains(str[0])) { flag = true; itemData[index] = item.Value; index++; } } if (flag == false) { DataRow dr = tb.NewRow(); dr.ItemArray = itemData; tb.Rows.Add(dr); itemData = new string[8]; count++; index = 0; if (int.Parse(str[1]) == count) { if (tb.Columns.Contains(str[0])) { flag = true; itemData[index] = item.Value; index++; } } } } #endregion var rosterGroupServices = new Att_RosterGroupServices(); rosterGroupServices.SaveRosterGroup(DateTime.Now, tb); return(groupId); }