public ShortLinkRow(PageShortLink pageShortLink) { Id = pageShortLink.Id; SiteId = pageShortLink.Site.Id; SiteName = pageShortLink.Site.Name; Token = pageShortLink.Token; Url = pageShortLink.Url; var url = pageShortLink.Site.DefaultDomainUri.ToString(); ShortLink = url.EnsureTrailingForwardslash() + Token; }
/// <summary> /// Shows the detail. /// </summary> /// <param name="shortLinkId">The shortLink identifier.</param> /// <param name="siteId">The group id.</param> public void ShowDetail(int shortLinkId) { PageShortLink shortLink = null; if (!shortLinkId.Equals(0)) { shortLink = new PageShortLinkService(new RockContext()).Get(shortLinkId); pdAuditDetails.SetEntity(shortLink, ResolveRockUrl("~")); } if (shortLink == null) { shortLink = new PageShortLink { Id = 0 }; // hide the panel drawer that show created and last modified dates pdAuditDetails.Visible = false; } hfShortLinkId.Value = shortLink.Id.ToString(); bool readOnly = false; nbEditModeMessage.Text = string.Empty; if (!IsUserAuthorized(Authorization.EDIT)) { readOnly = true; nbEditModeMessage.Text = EditModeMessage.ReadOnlyEditActionNotAllowed(Rock.Model.PageShortLink.FriendlyTypeName); } if (readOnly) { btnEdit.Visible = false; //btnDelete.Visible = false; ShowReadonlyDetails(shortLink); } else { btnEdit.Visible = true; //btnDelete.Visible = !shortLink.IsSystem; if (shortLink.Id > 0) { ShowReadonlyDetails(shortLink); } else { ShowEditDetails(shortLink); } } }
/// <summary> /// Executes the specified workflow. /// </summary> /// <param name="rockContext">The rock context.</param> /// <param name="action">The action.</param> /// <param name="entity">The entity.</param> /// <param name="errorMessages">The error messages.</param> /// <returns></returns> public override bool Execute(RockContext rockContext, WorkflowAction action, Object entity, out List <string> errorMessages) { errorMessages = new List <string>(); var service = new PageShortLinkService(rockContext); // Get the merge fields var mergeFields = GetMergeFields(action); // Get the site int siteId = GetAttributeValue(action, "Site", true).AsInteger(); SiteCache site = SiteCache.Get(siteId); if (site == null) { errorMessages.Add(string.Format("Invalid Site Value")); return(false); } // Get the token string token = GetAttributeValue(action, "Token", true).ResolveMergeFields(mergeFields); if (token.IsNullOrWhiteSpace()) { int tokenLen = GetAttributeValue(action, "RandomTokenLength").AsIntegerOrNull() ?? 7; token = service.GetUniqueToken(site.Id, tokenLen); } // Get the target url string url = GetAttributeValue(action, "Url", true).ResolveMergeFields(mergeFields).RemoveCrLf().Trim(); if (url.IsNullOrWhiteSpace()) { errorMessages.Add("A valid Target Url was not specified."); return(false); } // Save the short link var link = service.GetByToken(token, site.Id); if (link != null) { if (!GetAttributeValue(action, "Overwrite").AsBoolean()) { errorMessages.Add(string.Format("The selected token ('{0}') already exists. Please specify a unique token, or configure action to allow token re-use.", token)); return(false); } else { link.Url = url; } } else { link = new PageShortLink(); link.SiteId = site.Id; link.Token = token; link.Url = url; service.Add(link); } rockContext.SaveChanges(); // Save the resulting short link url var attribute = AttributeCache.Get(GetAttributeValue(action, "Attribute").AsGuid(), rockContext); if (attribute != null) { string shortLink = link.ShortLinkUrl; SetWorkflowAttributeValue(action, attribute.Guid, shortLink); action.AddLogEntry(string.Format("Set '{0}' attribute to '{1}'.", attribute.Name, shortLink)); } return(true); }
/// <summary> /// Handles the Click event of the btnSave control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param> protected void btnSave_Click(object sender, EventArgs e) { if (Page.IsValid) { PageShortLink link = null; using (var rockContext = new RockContext()) { var service = new PageShortLinkService(rockContext); var errors = new List <string>(); int?linkId = hfShortLinkId.Value.AsIntegerOrNull(); if (linkId.HasValue) { link = service.Get(linkId.Value); } if (link == null) { link = new PageShortLink(); service.Add(link); } int? siteId = ddlSite.SelectedValueAsInt(); string token = tbToken.Text.Trim(); string url = tbUrl.Text.RemoveCrLf().Trim(); if (!siteId.HasValue) { errors.Add("Please select a valid site."); } int minTokenLength = GetAttributeValue("MinimumTokenLength").AsIntegerOrNull() ?? 7; if (token.IsNullOrWhiteSpace() || token.Length < minTokenLength) { errors.Add(string.Format("Please enter a token that is a least {0} characters long.", minTokenLength)); } else if (siteId.HasValue && !service.VerifyUniqueToken(siteId.Value, link.Id, tbToken.Text)) { errors.Add("The selected token is already being used. Please enter a different token."); } if (url.IsNullOrWhiteSpace()) { errors.Add("Please enter a valid URL."); } if (errors.Any()) { nbError.Text = "Please correct the following:<ul><li>" + errors.AsDelimited("</li><li>") + "</li></ul>"; nbError.Visible = true; return; } link.SiteId = siteId.Value; link.Token = token; link.Url = url; if (!link.IsValid) { return; } rockContext.SaveChanges(); } Dictionary <string, string> qryParams = new Dictionary <string, string>(); qryParams["ShortLinkId"] = link.Id.ToString(); NavigateToPage(RockPage.Guid, qryParams); } }
/// <summary> /// Handles the OnSave event of the masterPage control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param> protected void masterPage_OnSave(object sender, EventArgs e) { Page.Validate(BlockValidationGroup); if (Page.IsValid) { PageShortLink link = null; using (var rockContext = new RockContext()) { var service = new PageShortLinkService(rockContext); var errors = new List <string>(); int? siteId = ddlSite.SelectedValueAsInt(); string token = tbToken.Text.Trim(); string url = tbUrl.Text.Trim(); if (!siteId.HasValue) { errors.Add("Please select a valid site."); } if (token.IsNullOrWhiteSpace() || token.Length < _minTokenLength) { errors.Add(string.Format("Please enter a token that is a least {0} characters long.", _minTokenLength)); } else if (siteId.HasValue && !service.VerifyUniqueToken(siteId.Value, 0, tbToken.Text)) { errors.Add("The selected token is already being used. Please enter a different token."); } if (url.IsNullOrWhiteSpace()) { errors.Add("Please enter a valid URL."); } if (errors.Any()) { nbError.Text = "Please correct the following:<ul><li>" + errors.AsDelimited("</li><li>") + "</li></ul>"; nbError.Visible = true; return; } link = new PageShortLink(); link.SiteId = siteId.Value; link.Token = token; link.Url = url; service.Add(link); rockContext.SaveChanges(); } if (link != null) { using (var rockContext = new RockContext()) { string script = "window.parent.Rock.controls.modal.close();"; ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "close-modal", script, true); } } } }
private System.Web.IHttpHandler GetHandlerForShortLink(RequestContext requestContext, PageShortLink pageShortLink) { using (var rockContext = new Rock.Data.RockContext()) { string trimmedUrl = pageShortLink.Url.RemoveCrLf().Trim(); RockQueue.TransactionQueue.Enqueue(new ShortLinkTransaction { PageShortLinkId = pageShortLink.Id, Token = pageShortLink.Token, Url = trimmedUrl, UserName = requestContext.HttpContext.User?.Identity?.Name, DateViewed = RockDateTime.Now, IPAddress = UI.RockPage.GetClientIpAddress(), UserAgent = requestContext.HttpContext.Request.UserAgent ?? "" }); requestContext.HttpContext.Response.Redirect(trimmedUrl); return(null); } }