예제 #1
0
        protected void Rating_Changed(object sender, EventArgs e)
        {
            var ratingControl = (Rating)sender;

            if (ratingControl == null)
            {
                return;
            }

            var rating = ratingControl.UserRating;

            var maxRating = ratingControl.MaxRating;

            var minRating = ratingControl.MinRating;

            var sourceReference = GetSourceReference();

            var dataAdapterFactory = new RatingDataAdapterFactory(sourceReference);

            var dataAdapter = dataAdapterFactory.GetAdapter(Portal, Request.RequestContext);

            dataAdapter.SaveRating(rating, maxRating, minRating, VisitorID);

            RatingInfo = dataAdapter.GetRatingInfo();

            ratingControl.AverageRating = RatingInfo.AverageRating;

            ratingControl.RatingCount = RatingInfo.RatingCount;

            ratingControl.UpdateDisplay();
        }
예제 #2
0
        protected void Vote_Changed(object sender, EventArgs e)
        {
            var voteControl = (Vote)sender;

            if (voteControl == null)
            {
                return;
            }

            int rating;

            switch (voteControl.UserVote)
            {
            case 1:
                rating = 1;
                break;

            case 2:
                rating = 0;
                break;

            case 0:
            default:
                rating = 3;
                break;
            }

            var sourceReference = GetSourceReference();

            var dataAdapterFactory = new RatingDataAdapterFactory(sourceReference);

            var dataAdapter = dataAdapterFactory.GetAdapter(Portal, Request.RequestContext);

            if (rating == 3)
            {
                dataAdapter.DeleteUserRating(VisitorID);
            }
            else
            {
                dataAdapter.SaveRating(rating, 1, 0, VisitorID);
            }

            RatingInfo = dataAdapter.GetRatingInfo();

            voteControl.YesCount = RatingInfo.YesCount;

            voteControl.NoCount = RatingInfo.NoCount;

            voteControl.UpdateDisplay();

            Response.Redirect(Request.Url.PathAndQuery);
        }
예제 #3
0
        protected void InitialiseControl()
        {
            var sourceReference = GetSourceReference();

            var dataAdapterFactory = new RatingDataAdapterFactory(sourceReference);

            var dataAdapter = dataAdapterFactory.GetAdapter(Portal, Request.RequestContext);

            if (RatingInfo == null)
            {
                RatingInfo = dataAdapter.GetRatingInfo();

                if (RatingInfo == null)
                {
                    throw new Exception("Error getting Rating Info");
                }
            }

            var userRating = dataAdapter.SelectUserRating();

            var visitorRating = dataAdapter.SelectVisitorRating(VisitorID);

            switch (RatingType)
            {
            case "vote":

                VoteControl.Visible  = EnableRatings;
                VoteControl.SourceID = SourceID;
                VoteControl.YesCount = RatingInfo.YesCount;
                VoteControl.NoCount  = RatingInfo.NoCount;

                if (userRating != null)
                {
                    int userVote;

                    if (userRating.MaximumValue == userRating.Value)
                    {
                        userVote = (int)VoteValue.Yes;
                    }
                    else if (userRating.MinimumValue == userRating.Value)
                    {
                        userVote = (int)VoteValue.No;
                    }
                    else
                    {
                        userVote = (int)VoteValue.Unvoted;
                    }

                    VoteControl.UserVote = userVote;
                }
                else if (visitorRating != null)
                {
                    int userVote;

                    if (visitorRating.MaximumValue == visitorRating.Value)
                    {
                        userVote = (int)VoteValue.Yes;
                    }
                    else if (visitorRating.MinimumValue == visitorRating.Value)
                    {
                        userVote = (int)VoteValue.No;
                    }
                    else
                    {
                        userVote = (int)VoteValue.Unvoted;
                    }

                    VoteControl.UserVote = userVote;
                }

                VoteControl.UpdateDisplay();

                break;

            default:

                RatingControl.Visible = EnableRatings;

                RatingControl.SourceID = SourceID;

                RatingControl.AverageRating = RatingInfo.AverageRating;
                RatingControl.RatingCount   = RatingInfo.RatingCount;

                if (userRating != null)
                {
                    RatingControl.UserRating = userRating.Value;
                }
                else if (visitorRating != null)
                {
                    RatingControl.UserRating = visitorRating.Value;
                }

                RatingControl.UpdateDisplay();

                break;
            }
        }
        /// <summary>
        /// Renders rating for a given entity if the Feedback feature is enabled and the entity is rateable and ratings are enabled for that entity type.
        /// </summary>
        /// <param name="html">Extension method target, provides support for HTML rendering and access to view context/data.</param>
        /// <param name="entityReference">The <see cref="EntityReference"/> of the record for which to display rating.</param>
        /// <param name="ratingInfo">The <see cref="IRatingInfo"/> that provides rating value and count if available. If not provided, it will be dynamically retrieved.</param>
        /// <param name="panel">Indicates whether the rating should be wrapped in a bootstrap panel or not.</param>
        /// <param name="panelTitleSnippetName">If panel is true, this is the name of a content snippet to display a title text in the panel heading.</param>
        /// <param name="isReadonly">Indicates whether the rating is readonly (i.e. not editable).</param>
        /// <param name="resetable">Indicates whether the rating can be reset.</param>
        /// <param name="step">Step size value (default: 1)</param>
        /// <param name="min">Minumum value (default: 0)</param>
        /// <param name="max">Maximum value (default: 5)</param>
        /// <param name="urlSave">The URL to the service to create/update a rating.</param>
        /// <param name="roundNearestHalf">Indicates whether or not to round the rating value to the nearest half. Default is true.</param>
        /// <returns>An HTML encoded string representing rating.</returns>
        public static IHtmlString Rating(this HtmlHelper html, EntityReference entityReference, IRatingInfo ratingInfo = null, bool panel = false, string panelTitleSnippetName = "Rating Heading", bool isReadonly = false, bool resetable = false, string step = "1", string min = "0", string max = "5", string urlSave = null, bool roundNearestHalf = true)
        {
            if (!FeatureCheckHelper.IsFeatureEnabled(FeatureNames.Feedback))
            {
                return(new HtmlString(string.Empty));
            }

            if (entityReference == null)
            {
                return(new HtmlString(string.Empty));
            }

            if (!isReadonly && string.IsNullOrWhiteSpace(urlSave))
            {
                urlSave = html.GetPortalScopedRouteUrlByName("PortalRateit");
            }

            if (string.IsNullOrWhiteSpace(step))
            {
                step = "1";
            }

            if (string.IsNullOrWhiteSpace(min))
            {
                min = "0";
            }

            if (string.IsNullOrWhiteSpace(max))
            {
                max = "5";
            }

            if (ratingInfo == null)
            {
                var portal = PortalCrmConfigurationManager.CreatePortalContext();

                var dataAdapterFactory = new RatingDataAdapterFactory(entityReference);

                var dataAdapter = dataAdapterFactory.GetAdapter(portal, PortalExtensions.GetRequestContext());

                if (!dataAdapter.RatingsEnabled)
                {
                    return(new HtmlString(string.Empty));
                }

                ratingInfo = dataAdapter.GetRatingInfo() ?? new RatingInfo();
            }

            var ratingValue = roundNearestHalf ? ratingInfo.AverageRatingRounded : ratingInfo.AverageRating;

            var ratingCount = ratingInfo.RatingCount;

            var container = new TagBuilder("div");

            container.AddCssClass("rating");

            var rateit = new TagBuilder("div");

            rateit.AddCssClass("rateit");

            rateit.MergeAttribute("data-rateit-resetable", resetable.ToString().ToLower());

            rateit.MergeAttribute("data-rateit-step", step);

            rateit.MergeAttribute("data-rateit-min", min);

            rateit.MergeAttribute("data-rateit-max", max);

            rateit.MergeAttribute("data-rateit-ispreset", "true");

            rateit.MergeAttribute("data-rateit-readonly", isReadonly.ToString().ToLower());

            rateit.MergeAttribute("data-rateit-value", ratingValue.ToString(CultureInfo.InvariantCulture));

            rateit.MergeAttribute("data-logicalname", entityReference.LogicalName);

            rateit.MergeAttribute("data-id", entityReference.Id.ToString());

            if (!isReadonly)
            {
                rateit.MergeAttribute("data-url-save", urlSave);
            }

            var count = new TagBuilder("span");

            count.AddCssClass("rating-count badge");

            count.InnerHtml = ratingCount.ToString();

            if (panel)
            {
                container.AddCssClass("content-panel panel panel-default");

                var heading = new TagBuilder("div");

                heading.AddCssClass("panel-heading");

                var title = new TagBuilder("h4");

                var icon = new TagBuilder("span");

                icon.AddCssClass("fa fa-star-o");

                icon.MergeAttribute("aria-hidden", "true");

                title.InnerHtml += icon.ToString();

                if (string.IsNullOrWhiteSpace(panelTitleSnippetName))
                {
                    panelTitleSnippetName = "Rating Heading";
                }

                var snippet = html.TextSnippet(panelTitleSnippetName, true, "span",
                                               defaultValue: ResourceManager.GetString("Rate_This_Defaulttext"));

                title.InnerHtml += snippet;

                heading.InnerHtml += title;

                var body = new TagBuilder("div");

                body.AddCssClass("panel-body");

                body.InnerHtml += rateit.ToString();

                body.InnerHtml += count.ToString();

                container.InnerHtml += heading.ToString();

                container.InnerHtml += body.ToString();
            }
            else
            {
                container.InnerHtml += rateit.ToString();

                container.InnerHtml += count.ToString();
            }

            return(new HtmlString(container.ToString()));
        }