public int UpdateFrom6()
        {
            foreach (var usReacType in UserReactionsTypesRecord.GetDefaultTypes())
            {
                UserReactionsTypesRecord reactType = usReacType;
                string typeName = reactType.TypeName;

                if (_repositoryTypesRecord.Get(z => z.TypeName == typeName) == null)
                {
                    _repositoryTypesRecord.Create(reactType);
                }
            }

            return(7);
        }
Beispiel #2
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);
        }
Beispiel #3
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);
        }
Beispiel #4
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);
        }