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