Exemplo n.º 1
0
 public dynamic BuildEditor(IContent content)
 {
     if (content.Is <FrontendEditConfigurationPart>())
     {
         return(_frontEndEditService.BuildFrontEndShape(
                    _contentManager.BuildEditor(content),
                    PartTest,
                    FieldTest));
     }
     return(_contentManager.BuildEditor(content));
 }
Exemplo n.º 2
0
        /// <summary>
        /// Defines the shapes required for the part's main view.
        /// </summary>
        /// <param name="part">The part.</param>
        /// <param name="displayType">The display type.</param>
        /// <param name="shapeHelper">The shape helper.</param>
        protected override DriverResult Display(ContactFormPart part, string displayType, dynamic shapeHelper)
        {
            var viewModel = new ContactFormViewModel();

            if (part != null && displayType.Contains("Detail"))
            {
                viewModel.ContentRecordId     = part.Record.Id;
                viewModel.ShowSubjectField    = !part.UseStaticSubject;
                viewModel.ShowNameField       = part.DisplayNameField;
                viewModel.RequireNameField    = part.RequireNameField;
                viewModel.EnableFileUpload    = part.EnableUpload;
                viewModel.AcceptPolicy        = part.AcceptPolicy;
                viewModel.AcceptPolicyText    = part.AcceptPolicyText;
                viewModel.AcceptPolicyUrl     = part.AcceptPolicyUrl;
                viewModel.AcceptPolicyUrlText = part.AcceptPolicyUrlText;
                return(ContentShape("Parts_ContactForm",
                                    () => shapeHelper.Parts_ContactForm(
                                        ContactForm: viewModel,
                                        AdditionalShape: _frontEndEditService.BuildFrontEndShape(
                                            _contentManager.BuildEditor(part),
                                            OnlyShowReCaptcha,
                                            NoFields)
                                        )));
            }
            return(null); // don't display if display type is not "detail"
        }
Exemplo n.º 3
0
        public ActionResult List(int contentid)
        {
            var ci   = _orchardServices.ContentManager.Get(contentid);
            var part = ci.As <DynamicProjectionPart>();

            if (ci == null || part == null)
            {
                return(null);
            }
            else
            {
                Func <ContentItem, IShape> shape;
                ContentItem contentFormTemplate;
                if (string.IsNullOrWhiteSpace(part.TypeForFilterForm))
                {
                    contentFormTemplate = _contentManager.New("FakeContentForDynamicProjection");
                    shape = (content) => {
                        var contpart = ci.Parts
                                       .Where(x => x.PartDefinition.Name == ci.ContentType)
                                       .FirstOrDefault();
                        IEnumerable <ContentField> lcf = null;
                        if (contpart != null)
                        {
                            lcf = contpart.Fields;
                            foreach (var field in lcf)
                            {
                                content.Parts.FirstOrDefault().Weld(field);
                            }
                        }
                        return(_contentManager.BuildEditor(content));
                    };
                }
                else
                {
                    contentFormTemplate = _contentManager.New(part.TypeForFilterForm);
                    shape = (content) => {
                        IShape contenFormEditShape = _contentManager.BuildEditor(content);
                        return(_frontEndEditService.BuildFrontEndShape(contenFormEditShape, (ctpd, typeName) => {
                            var uselessParts = new string[] { "CommonPart" };
                            return !uselessParts.Contains(ctpd.PartDefinition.Name); //Excludes uselessParts
                        },
                                                                                     //All fields
                                                                       (ctpd) => true));
                    };
                }
                var formfile = string.Empty;
                if (!string.IsNullOrEmpty(part.Shape))
                {
                    formfile = string.Format(
                        "~/App_Data/Sites/{0}/Code/{1}",
                        _shellSettings.Name,
                        ci.As <DynamicProjectionPart>().Shape);
                }

                //TODO: the way to create a filter form content should be more flexible and should support more complex scenarios.
                var viewModel = _shapeFactory.ViewModel()
                                .Part(ci.As <DynamicProjectionPart>())
                                .Form(formfile)
                                .FilterContent(contentFormTemplate)
                                .CalculateFilterContentShape(shape);
                return(View(viewModel));
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// Sends the contact email.
        /// </summary>
        /// <param name="id">The id.</param>
        /// <param name="returnUrl">The return URL.</param>
        /// <param name="name">The name.</param>
        /// <param name="email">The bot false email.</param>
        /// <param name="confirmEmail">The actual email string</param>
        /// <param name="subject">The subject.</param>
        /// <param name="message">The message.</param>

        public ActionResult SendContactEmail(int id, string returnUrl, string name, string email, string confirmEmail, string subject, string message, int mediaId = -1, int accept = 0)
        {
            var redirectionUrl = returnUrl;

            try {
                // we want to create a new contentItem of the same type as the form we are posting
                var stubItem = _contentManager.Get <ContactFormPart>(id);
                // then we will try to launch UPdateEditor to test recaptcha.
                if (stubItem != null)
                {
                    _frontEndEditeService.BuildFrontEndShape(
                        _contentManager.UpdateEditor(stubItem, this),
                        OnlyShowReCaptcha,
                        NoFields);
                    if (!ModelState.IsValid)
                    {
                        // consider logging
                        // update of recaptcha failed
                        _orchardServices.TransactionManager.Cancel();
                        TempData["form"] = Request.Form;
                        return(this.RedirectLocal(redirectionUrl, "~/"));
                    }
                }
                ContactFormRecord contactForm = _contactFormService.GetContactForm(id);
                if (contactForm.AcceptPolicy && accept != 1)
                {
                    TempData["form"] = Request.Form;
                    return(this.RedirectLocal(Request.UrlReferrer.ToString()));
                }

                #region Validation Field
                bool         isValid           = true;
                const string emailAddressRegex = @"^(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}$";

                if ((contactForm.RequireNameField && String.IsNullOrEmpty(name)) ||
                    (contactForm.RequireAttachment && !(mediaId != -1)) ||
                    string.IsNullOrEmpty(email) || string.IsNullOrEmpty(message) || string.IsNullOrEmpty(confirmEmail))
                {
                    if (string.IsNullOrEmpty(email))
                    {
                        ModelState.AddModelError("email", T("The email is mandatory.").Text);
                    }
                    if (string.IsNullOrEmpty(confirmEmail))
                    {
                        ModelState.AddModelError("confirmEmail", T("The confirm email is mandatory.").Text);
                    }
                    if (contactForm.RequireNameField && String.IsNullOrEmpty(name))
                    {
                        ModelState.AddModelError("name", T("The sender name is mandatory.").Text);
                    }
                    if (contactForm.RequireAttachment && !(mediaId != -1))
                    {
                        ModelState.AddModelError("mediaId", T("The attachment is mandatory.").Text);
                    }
                    if (string.IsNullOrEmpty(message))
                    {
                        ModelState.AddModelError("message", T("The message text is mandatory.").Text);
                    }
                    isValid = false;
                }
                else
                {
                    Match emailMatch        = Regex.Match(email, emailAddressRegex);
                    Match confirmEmailMatch = Regex.Match(confirmEmail, emailAddressRegex);
                    if (!emailMatch.Success)
                    {
                        ModelState.AddModelError("email", T("Invalid email address.").Text);
                        isValid = false;
                    }
                    if (!confirmEmailMatch.Success)
                    {
                        ModelState.AddModelError("confirmEmail", T("Invalid confirm email address.").Text);
                        isValid = false;
                    }
                    if (isValid && email != confirmEmail)
                    {
                        ModelState.AddModelError("confirmEmail", T("Confirm email must be matching to the email.").Text);
                        isValid = false;
                    }
                }
                if (!isValid)
                {
                    TempData["form"] = Request.Form;
                    _notifier.Add(NotifyType.Error, MessageError(ModelState));
                    return(this.RedirectLocal(redirectionUrl, "~/"));
                }
                #endregion

                #region TriggerValidation
                _workflowManager.TriggerEvent("ContactFormValidating",
                                              stubItem,
                                              () => new Dictionary <string, object> {
                    { "Content", stubItem },
                    { "ModelState", ModelState },
                    { "FormData", Request.Form },
                    { "Updater", this },
                    { "T", T }
                });

                if (!ModelState.IsValid)
                {
                    TempData["form"] = Request.Form;
                    _notifier.Add(NotifyType.Error, MessageError(ModelState));
                    return(this.RedirectLocal(redirectionUrl, "~/"));
                }
                #endregion

                if (contactForm != null)
                {
                    // If a static subject message was specified, use that value for the email subject.
                    if (contactForm.UseStaticSubject)
                    {
                        if (contactForm.StaticSubjectMessage != null)
                        {
                            subject = contactForm.StaticSubjectMessage.Replace("{NAME}", name);
                        }
                        if (Request.Url != null)
                        {
                            subject = subject.Replace("{DOMAIN}", Request.Url.Host);
                        }
                    }

                    _contactFormService.SendContactEmail(name, confirmEmail, email, subject, message, mediaId, contactForm, _orchardServices.WorkContext.HttpContext.Request.Form);
                    // after sending email it triggers a worflow event in order to execute arbitrary code.
                    _workflowManager.TriggerEvent("ContactFormSubmittedEvent",
                                                  stubItem,
                                                  () => new Dictionary <string, object> {
                        { "Content", stubItem }
                    });
                    if (!string.IsNullOrWhiteSpace(contactForm.ThankyouPage))
                    {
                        redirectionUrl = contactForm.ThankyouPage;
                    }
                }
            }
            catch {
                // L'eccezione serve solo per la chiamata via APIController, mentre per la chiamata via form è già stata loggata e salvata nel Notifier
                TempData["form"] = Request.Form;
                redirectionUrl   = returnUrl;
            }

            return(this.RedirectLocal(redirectionUrl, "~/"));
        }
        /// <summary>
        /// Sends the contact email.
        /// </summary>
        /// <param name="id">The id.</param>
        /// <param name="returnUrl">The return URL.</param>
        /// <param name="name">The name.</param>
        /// <param name="email">The bot false email.</param>
        /// <param name="confirmEmail">The actual email string</param>
        /// <param name="subject">The subject.</param>
        /// <param name="message">The message.</param>

        public ActionResult SendContactEmail(int id, string returnUrl, string name, string email, string confirmEmail, string subject, string message, int mediaId = -1, int accept = 0)
        {
            var redirectionUrl = returnUrl;

            try {
                // we want to create a new contentItem of the same type as the form we are posting
                var stubItem = _contentManager.Get <ContactFormPart>(id);
                // then we will try to launch UPdateEditor to test recaptcha.
                if (stubItem != null)
                {
                    _frontEndEditeService.BuildFrontEndShape(
                        _contentManager.UpdateEditor(stubItem, this),
                        OnlyShowReCaptcha,
                        NoFields);
                    if (!ModelState.IsValid)
                    {
                        // consider logging
                        // update of recaptcha failed
                        _orchardServices.TransactionManager.Cancel();
                        TempData["form"] = Request.Form;
                        return(this.RedirectLocal(redirectionUrl, "~/"));
                    }
                }
                ContactFormRecord contactForm = _contactFormService.GetContactForm(id);
                if (contactForm.AcceptPolicy && accept != 1)
                {
                    TempData["form"] = Request.Form;
                    return(this.RedirectLocal(Request.UrlReferrer.ToString()));
                }
                if (contactForm != null)
                {
                    // If a static subject message was specified, use that value for the email subject.
                    if (contactForm.UseStaticSubject)
                    {
                        if (contactForm.StaticSubjectMessage != null)
                        {
                            subject = contactForm.StaticSubjectMessage.Replace("{NAME}", name);
                        }
                        if (Request.Url != null)
                        {
                            subject = subject.Replace("{DOMAIN}", Request.Url.Host);
                        }
                    }

                    _contactFormService.SendContactEmail(name, confirmEmail, email, subject, message, mediaId, contactForm, _orchardServices.WorkContext.HttpContext.Request.Form);
                    // after sending email it triggers a worflow event in order to execute arbitrary code.
                    _workflowManager.TriggerEvent("ContactFormSubmittedEvent",
                                                  stubItem,
                                                  () => new Dictionary <string, object> {
                        { "Content", stubItem }
                    });
                    if (!string.IsNullOrWhiteSpace(contactForm.ThankyouPage))
                    {
                        redirectionUrl = contactForm.ThankyouPage;
                    }
                }
            } catch {
                // L'eccezione serve solo per la chiamata via APIController, mentre per la chiamata via form è già stata loggata e salvata nel Notifier
                TempData["form"] = Request.Form;
                redirectionUrl   = returnUrl;
            }

            return(this.RedirectLocal(redirectionUrl, "~/"));
        }