/// <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); }
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()); } }
/// <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); }
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); }
/// <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); }
/// <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); }