Пример #1
0
            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;
            }
Пример #2
0
        /// <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);
        }
Пример #4
0
        /// <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);
            }
        }
Пример #5
0
        /// <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);
            }
        }