private void SendEmailIfNotActivatedOrLockedOut(IMember member) { string tokenField = string.Empty, tokenExpiryField = string.Empty, emailSubjectField = string.Empty, emailBodyField = string.Empty; var loginPage = Umbraco.ContentSingleAtXPath("//loginMember"); if (loginPage == null) { // We can't send emails if we don't have the content, so just return. return; } if (!member.IsApproved) { // The member has not yet activated their account and is trying to login. tokenField = "approvalToken"; tokenExpiryField = "approvalTokenExpires"; emailSubjectField = "approveMemberSubject"; emailBodyField = "approveMemberBody"; } else if (member.IsLockedOut) { // Approved member, OK to reset their password. tokenField = "passwordResetToken"; tokenExpiryField = "passwordResetTokenExpires"; emailSubjectField = "resetPasswordSubject"; emailBodyField = "resetPasswordBody"; } // Create a password reset / approval token including the id so we can find the member var(token, expires) = _verificationToken.TokenFor(member.Id); member.SetValue(tokenField, token); member.SetValue(tokenExpiryField, expires); Services.MemberService.Save(member); // Send the password reset / member approval email var(sender, body) = _emailFormatter.FormatEmailContent(loginPage.Value <string>(emailSubjectField), loginPage.Value <string>(emailBodyField), new Dictionary <string, string> { { "name", member.Name }, { "email", member.Email }, { "token", token }, { "domain", GetRequestUrlAuthority() } }); _emailSender.SendEmail(member.Email, sender, body); }
public override ActionResult Index(ContentModel model) { var homePageModel = new HomePageModel(model.Content) { PastEvents = new List <EventsPage>(), UpcomingEvents = new List <EventsPage>() }; var episodesFolder = Umbraco.ContentSingleAtXPath($"//{EpisodesFolder.ModelTypeAlias}"); if (episodesFolder != null) { var episodes = episodesFolder.Children; foreach (var ep in episodes) { homePageModel.AllEpisodes.Add((Episode)ep); } homePageModel.LatestEpisode = Enumerable.OrderByDescending <Episode, DateTime>(homePageModel.AllEpisodes, x => x.PublishedDate).FirstOrDefault(); } var allEventPages = Umbraco.ContentAtXPath($"//{EventsPage.ModelTypeAlias}"); foreach (var page in allEventPages) { if (!page.IsVisible()) { continue; } if (!(page is EventsPage eventsPage)) { continue; } if (eventsPage.Part2StartDate >= DateTime.Today) { homePageModel.UpcomingEvents.Add(eventsPage); } else { homePageModel.PastEvents.Add(eventsPage); } } homePageModel.PastEvents = homePageModel.PastEvents.OrderByDescending(x => x.Part1StartDate).ToList(); return(CurrentTemplate(homePageModel)); }
public ActionResult GeneratePDF(PDfdownloadButtonViewModel content) { string fileName = content.formData; var xpath = Umbraco.ContentSingleAtXPath("//pDFTemplate"); // Added Umbraco.Core reference to allow to use IsNullOrWhiteSpace helper. if (fileName.IsNullOrWhiteSpace()) { fileName = "OwainCodes.PDF"; } return(new Rotativa.UrlAsPdf("https://www.owain.codes") { FileName = fileName }); }
/// <summary> /// Gets an entity by a xpath query /// </summary> /// <param name="query"></param> /// <param name="nodeContextId"></param> /// <param name="type"></param> /// <returns></returns> public EntityBasic GetByQuery(string query, int nodeContextId, UmbracoEntityTypes type) { // TODO: Rename this!!! It's misleading, it should be GetByXPath if (type != UmbracoEntityTypes.Document) { throw new ArgumentException("Get by query is only compatible with entities of type Document"); } var q = ParseXPathQuery(query, nodeContextId); var node = Umbraco.ContentSingleAtXPath(q); if (node == null) { return(null); } return(GetById(node.Id, type)); }
public ActionResult GeneratePDF(string content) { if (!ModelState.IsValid) { return(CurrentUmbracoPage()); } string fileName = content; var xpath = Umbraco.ContentSingleAtXPath("//pDFTemplate"); // Added Umbraco.Core reference to allow to use IsNullOrWhiteSpace helper. if (fileName.IsNullOrWhiteSpace()) { fileName = "OwainCodes.PDF"; } return(new Rotativa.UrlAsPdf("https://www.owain.codes") { FileName = fileName }); }
public override void Execute() { #line 5 "..\..\Views\Partials\_Logout.cshtml" var logoutPage = Umbraco.ContentSingleAtXPath("//logoutMember"); var loggedIn = !string.IsNullOrEmpty(Model.Value <string>("loggedIn")) ? Model.Value <string>("loggedIn") : logoutPage?.Value <string>("loggedIn"); var currentMemberName = Members.GetCurrentMember()?.Name; // GetCurrentMember() returns null when the member has just confirmed their new email address in another tab #line default #line hidden WriteLiteral("\r\n\r\n"); #line 11 "..\..\Views\Partials\_Logout.cshtml" if (!string.IsNullOrEmpty(currentMemberName)) { #line default #line hidden #line 12 "..\..\Views\Partials\_Logout.cshtml" Write(Html.ProtectEmailAddresses(loggedIn?.Replace("{{NAME}}", currentMemberName))); #line default #line hidden #line 12 "..\..\Views\Partials\_Logout.cshtml" } #line default #line hidden WriteLiteral("\r\n"); #line 15 "..\..\Views\Partials\_Logout.cshtml" using (Html.BeginUmbracoForm <LogoutMemberSurfaceController>("HandleLogout")) { #line default #line hidden #line 17 "..\..\Views\Partials\_Logout.cshtml" Write(Html.AntiForgeryToken()); #line default #line hidden #line 17 "..\..\Views\Partials\_Logout.cshtml" #line default #line hidden WriteLiteral(" <button"); WriteLiteral(" class=\"btn btn-primary\""); WriteLiteral(">"); #line 18 "..\..\Views\Partials\_Logout.cshtml" Write(logoutPage?.Value("logoutButton")); #line default #line hidden WriteLiteral("</button>\r\n"); #line 19 "..\..\Views\Partials\_Logout.cshtml" } #line default #line hidden }
public override void Execute() { #line 6 "..\..\Views\Partials\_Login.cshtml" var loginPage = Umbraco.ContentSingleAtXPath("//loginMember"); var loginModel = new LoginModel(); loginModel.RedirectUrl = Request.QueryString["ReturnUrl"] ?? "/"; if (!loginModel.RedirectUrl.StartsWith("/")) { loginModel.RedirectUrl = "/"; } #line default #line hidden WriteLiteral("\r\n\r\n"); #line 16 "..\..\Views\Partials\_Login.cshtml" if (Model.Key != loginPage?.Key) { if (Members.IsLoggedIn()) { var permissionRequired = loginPage.Value <IHtmlString>("permissionRequired").ToHtmlString().Replace("{{NAME}}", Members.GetCurrentMember().Name); #line default #line hidden #line 21 "..\..\Views\Partials\_Login.cshtml" Write(Html.ProtectEmailAddresses(permissionRequired)); #line default #line hidden #line 21 "..\..\Views\Partials\_Login.cshtml" } else { #line default #line hidden #line 25 "..\..\Views\Partials\_Login.cshtml" Write(Html.ProtectEmailAddresses(loginPage.Value <IHtmlString>("loginRequired"))); #line default #line hidden #line 25 "..\..\Views\Partials\_Login.cshtml" } loginModel.RedirectUrl = Request.Url.AbsolutePath; } #line default #line hidden WriteLiteral("\r\n"); #line 30 "..\..\Views\Partials\_Login.cshtml" using (Html.BeginUmbracoForm <LoginMemberSurfaceController>("Login")) { #line default #line hidden #line 32 "..\..\Views\Partials\_Login.cshtml" Write(Html.HiddenFor(m => loginModel.RedirectUrl)); #line default #line hidden #line 32 "..\..\Views\Partials\_Login.cshtml" #line default #line hidden #line 33 "..\..\Views\Partials\_Login.cshtml" Write(Html.ValidationSummary("loginModel", true)); #line default #line hidden #line 33 "..\..\Views\Partials\_Login.cshtml" #line default #line hidden #line 34 "..\..\Views\Partials\_Login.cshtml" Write(Html.AntiForgeryToken()); #line default #line hidden #line 34 "..\..\Views\Partials\_Login.cshtml" #line default #line hidden WriteLiteral(" <div"); WriteLiteral(" class=\"form-group\""); WriteLiteral(">\r\n"); WriteLiteral(" "); #line 37 "..\..\Views\Partials\_Login.cshtml" Write(Html.LabelFor(m => loginModel.Username, "Email")); #line default #line hidden WriteLiteral("\r\n"); WriteLiteral(" "); #line 38 "..\..\Views\Partials\_Login.cshtml" Write(Html.TextBoxFor(m => loginModel.Username, new { @class = "form-control", type = "email", required = "required", aria_describedby = "form-email", autocorrect = "off", autocapitalize = "off", autocomplete = "username" })); #line default #line hidden WriteLiteral("\r\n"); WriteLiteral(" "); #line 39 "..\..\Views\Partials\_Login.cshtml" Write(Html.ValidationMessageFor(m => loginModel.Username, "The email field is required", new { id = "form-email" })); #line default #line hidden WriteLiteral("\r\n </div>\r\n"); WriteLiteral(" <div"); WriteLiteral(" class=\"form-group\""); WriteLiteral(">\r\n"); WriteLiteral(" "); #line 42 "..\..\Views\Partials\_Login.cshtml" Write(Html.LabelFor(m => loginModel.Password)); #line default #line hidden WriteLiteral("\r\n"); WriteLiteral(" "); #line 43 "..\..\Views\Partials\_Login.cshtml" Write(Html.PasswordFor(m => loginModel.Password, new { @class = "form-control", required = "required", aria_describedby = "form-password", autocorrect = "off", autocapitalize = "off", autocomplete = "current-password" })); #line default #line hidden WriteLiteral("\r\n"); WriteLiteral(" "); #line 44 "..\..\Views\Partials\_Login.cshtml" Write(Html.ValidationMessageFor(m => loginModel.Password, "The password field is required", new { id = "form-password" })); #line default #line hidden WriteLiteral("\r\n </div>\r\n"); #line 46 "..\..\Views\Partials\_Login.cshtml" #line default #line hidden WriteLiteral(" <button"); WriteLiteral(" class=\"btn btn-primary\""); WriteLiteral(">"); #line 47 "..\..\Views\Partials\_Login.cshtml" Write(loginPage.Value("loginButton")); #line default #line hidden WriteLiteral("</button>\r\n"); #line 48 "..\..\Views\Partials\_Login.cshtml" } #line default #line hidden WriteLiteral("\r\n"); #line 50 "..\..\Views\Partials\_Login.cshtml" Write(Html.ProtectEmailAddresses(loginPage?.Value <IHtmlString>("resetPassword"))); #line default #line hidden WriteLiteral("\r\n\r\n"); #line 52 "..\..\Views\Partials\_Login.cshtml" if (loginPage != null && loginPage.HasValue("migratedMemberAccounts")) { #line default #line hidden WriteLiteral(" <div"); WriteLiteral(" class=\"alert alert-info\""); WriteLiteral(">\r\n"); WriteLiteral(" "); #line 55 "..\..\Views\Partials\_Login.cshtml" Write(Html.ProtectEmailAddresses(loginPage?.Value <IHtmlString>("migratedMemberAccounts"))); #line default #line hidden WriteLiteral("\r\n </div>\r\n"); #line 57 "..\..\Views\Partials\_Login.cshtml" } #line default #line hidden }