예제 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        private ReactionsUserIds GetReactionsUserIds(IUser user)
        {
            ReactionsUserIds ids        = new ReactionsUserIds();
            string           userCookie = string.Empty;

            if (user != null)
            {
                ids.Id   = user.Id;
                ids.Guid = string.Empty;
            }
            else
            {
                if (HttpContext.Current.Request.Cookies["userCookie"] != null)
                {
                    userCookie = HttpContext.Current.Request.Cookies["userCookie"].Value.ToString();
                }
                else
                {
                    Guid userNameCookie = System.Guid.NewGuid();
                    HttpContext.Current.Response.Cookies.Add(new HttpCookie("userCookie", userNameCookie.ToString()));
                    userCookie = userNameCookie.ToString();
                }
                ids.Id   = 0;
                ids.Guid = userCookie;
            }
            return(ids);
        }
예제 #2
0
 private List <UserReactionsClickRecord> GetUserReactions(int pageId, ReactionsUserIds userIds)
 {
     if (userIds.Id == 0)
     {
         return(GetOrderedClickTable().Where(
                    x => userIds.Guid != null && x.UserGuid == userIds.Guid && x.ContentItemRecordId == pageId).ToList());
     }
     else
     {
         return(GetOrderedClickTable().Where(
                    x => x.UserPartRecord.Id == userIds.Id && x.ContentItemRecordId == pageId).ToList());
     }
 }
예제 #3
0
        /// <param name="CurrentUser"></param>
        /// <param name="IconType"></param>
        /// <param name="CurrentPage"></param>
        /// <returns></returns>
        public ReactionsSummaryVM GetSummaryReaction(int CurrentPage)
        {
            ReactionsSummaryVM result = new ReactionsSummaryVM();
            IUser userId = this.CurrentUser();
            UserReactionsClickRecord res = new UserReactionsClickRecord();
            string userCookie            = string.Empty;
            var    part = _orchardServices.ContentManager.Get <UserReactionsPart>(CurrentPage);

            if (part != null)
            {
                var items = GetTot(part);
                ReactionsUserIds reactionsCurrentUser = new ReactionsUserIds();
                reactionsCurrentUser = GetReactionsUserIds(userId);
                List <UserReactionsVM> newSommaryRecord = new List <UserReactionsVM>();
                foreach (UserReactionsVM item in items)
                {
                    int IconType = item.TypeId;
                    //Verifica che non sia già stato eseguito un click
                    if (reactionsCurrentUser.Id > 0)
                    {
                        res = GetOrderedClickTable().Where(w => w.UserReactionsTypesRecord.Id.Equals(IconType) && w.UserPartRecord.Id.Equals(reactionsCurrentUser.Id) && w.ContentItemRecordId.Equals(CurrentPage)).FirstOrDefault();
                    }
                    else
                    {
                        userCookie = reactionsCurrentUser.Guid;
                        res        = GetOrderedClickTable().Where(w => w.UserReactionsTypesRecord.Id.Equals(IconType) && w.UserGuid.Equals(userCookie) && w.ContentItemRecordId.Equals(CurrentPage)).FirstOrDefault();
                    }

                    if (res != null)
                    {
                        item.Clicked = res.ActionType;
                    }

                    newSommaryRecord.Add(item);
                }
                result.ContentId = part.ContentItem.Id;
                if (reactionsCurrentUser.Id != 0)
                {
                    result.UserAuthenticated = true;
                }
                if (HasPermission(part.ContentItem.ContentType))
                {
                    result.UserAuthorized = true;
                }
                result.Reactions = newSommaryRecord.ToArray();
            }
            return(result);
        }
예제 #4
0
        private int UpdateSummary(int pageId, ReactionsUserIds reactionsUserIds, int actionType, UserReactionsTypesRecord reactType, bool previouslyClicked = false)
        {
            UserReactionsSummaryRecord summaryRecord = null;
            UserReactionsPartRecord    reactionsPart = null;

            //Verifica che ci sia già un record cliccato per quell' icona in quel documento
            summaryRecord = _repoSummary.Table.Where(z => z.UserReactionsTypesRecord.Id == reactType.Id && z.UserReactionsPartRecord.Id == pageId).FirstOrDefault();

            // se 0 record aggiungi il record
            if (summaryRecord == null)
            {
                //Create
                summaryRecord          = new UserReactionsSummaryRecord();
                reactionsPart          = _repoPartRec.Table.FirstOrDefault(z => z.Id.Equals(pageId));
                summaryRecord.Quantity = 1;
                summaryRecord.UserReactionsTypesRecord = reactType;
                summaryRecord.UserReactionsPartRecord  = reactionsPart;
                _repoSummary.Create(summaryRecord);

                if (previouslyClicked)
                {
                    Logger.Error("UserReactionsService.UpdateSummary -> Missing summary record!");
                }
            }
            else
            {
                // Va in update ed aggiorna il campo Quantity
                if (actionType == 1)
                {
                    summaryRecord.Quantity++;
                }
                else
                {
                    summaryRecord.Quantity--;
                }
                _repoSummary.Update(summaryRecord);
            }
            return(summaryRecord.Quantity);
        }
예제 #5
0
        /// <summary>
        /// Crea nuovo record dati click.
        /// </summary>
        private void InsertClick(int pageId, ReactionsUserIds reactionsUserIds, int actionType, UserReactionsTypesRecord reactType)
        {
            UserPartRecord           userRec     = null;
            string                   guid        = null;
            UserReactionsClickRecord clickRecord = new UserReactionsClickRecord();

            clickRecord.CreatedUtc               = _clock.UtcNow;
            clickRecord.ContentItemRecordId      = pageId;
            clickRecord.ActionType               = actionType;
            clickRecord.UserReactionsTypesRecord = reactType;
            if (reactionsUserIds.Id > 0)
            {
                userRec = _repoUser.Table.Where(w => w.Id.Equals(reactionsUserIds.Id)).FirstOrDefault();
            }
            else
            {
                guid = reactionsUserIds.Guid;
            }
            clickRecord.UserPartRecord = userRec;
            clickRecord.UserGuid       = guid;
            _repoClick.Create(clickRecord);
        }
예제 #6
0
        /// <param name="iconTypeId"></param>
        /// <param name="pageId"></param>
        /// <returns></returns>
        public UserReactionsVM CalculateTypeClick(int iconTypeId, int pageId)
        {
            UserReactionsClickRecord previousState = new UserReactionsClickRecord();
            UserReactionsVM          retVal        = new ViewModels.UserReactionsVM();
            int  actionType        = 1;
            bool previouslyClicked = false;

            //Verifica user
            IUser            currentUser = CurrentUser();
            ReactionsUserIds userIds     = GetReactionsUserIds(currentUser);
            var contentItem = _orchardServices.ContentManager.Get(pageId);

            if (HasPermission(contentItem.ContentType))
            {
                //Verifica che non sia già stato eseguito un click
                var elencoUserReactions = GetUserReactions(pageId, userIds);
                previousState = elencoUserReactions.FirstOrDefault(x => x.UserReactionsTypesRecord.Id == iconTypeId);

                //Se già cliccato quella reaction
                if (previousState != null)
                {
                    previouslyClicked = true;
                    if (previousState.ActionType == 1)
                    {
                        // se era cliccato allora diventa unclicked
                        actionType = -1;
                    }
                }

                //Salva i dati
                try {
                    UserReactionsTypesRecord reactType = GetTypesTable().Where(w => w.Id.Equals(iconTypeId)).FirstOrDefault();
                    InsertClick(pageId, userIds, actionType, reactType);
                    int qty = UpdateSummary(pageId, userIds, actionType, reactType, previouslyClicked);

                    //gestisce la scelta esclusiva, se richiesto
                    bool isExclusive = IsExclusive(contentItem.ContentType);
                    if (isExclusive && actionType == 1)
                    {
                        // cerca tutti i clicked diversi da quello corrente per lo stesso utente e la stessa pagina
                        var clicked = GetClickedReactions(elencoUserReactions);

                        foreach (var reaction in clicked)
                        {
                            // non agisce sulla reaction appena cliccata
                            if (reaction.Id != reactType.Id)
                            {
                                InsertClick(pageId, userIds, -1, reaction);
                                UpdateSummary(pageId, userIds, -1, reaction);
                            }
                        }
                    }

                    retVal.Clicked  = 1;
                    retVal.Quantity = qty;
                    retVal.TypeId   = iconTypeId;
                    retVal.Id       = pageId;

                    //solleva l'evento per il workflow
                    _workflowManager.TriggerEvent("ReactionClicked", contentItem, () => new Dictionary <string, object> {
                        { "Content", contentItem },
                        { "ReactionId", iconTypeId },
                        { "Action", actionType },
                        { "UserEmail", (currentUser != null ? currentUser.Email : "") },
                        { "UserId", (currentUser != null ? currentUser.Id : 0) }
                    });
                }
                catch (Exception) {
                    retVal.Clicked = 5;
                }
            }
            else
            {
                // l'utente non ha le permission
                retVal.Clicked  = 1;
                retVal.Quantity = 0;
                retVal.TypeId   = iconTypeId;
                retVal.Id       = pageId;
            }
            return(retVal);
        }