Ejemplo n.º 1
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);
        }
Ejemplo n.º 2
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);
        }
Ejemplo n.º 3
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);
        }