public ITranslationDefinitions <TIn, TOut> AddLanguageAvailability <TInLang, TOutLang>(Func <TIn, TInLang> fromProperty, Func <TOut, IMultilanguagedEntity <TOutLang> > languageAvailable) where TOutLang : class, ILanguageAvailability, new () where TInLang : class, ILanguagesAvailabilities { if (sourceInstance == null) { return(this); } EnsureCreateTargetInstance(); var languagedTarget = languageAvailable(targetInstance); var inputProperty = fromProperty(sourceInstance); if ((!clonedTargetApplied)) { unitOfWork.LoadNavigationProperty(targetInstance, i => languageAvailable(i).LanguageAvailabilities); } inputProperty.LanguagesAvailabilities.ForEach(rLang => { var availability = languagedTarget.LanguageAvailabilities.FirstOrDefault(i => i.LanguageId == rLang.LanguageId) ?? languagedTarget.LanguageAvailabilities.AddAndReturn(new TOutLang() { LanguageId = rLang.LanguageId }); if (availability.StatusId == Guid.Empty) { availability.StatusId = publishingStatusCache.Get(PublishingStatus.Draft); } if (availability.StatusId == publishingStatusCache.Get(PublishingStatus.Published)) { availability.StatusId = publishingStatusCache.Get(PublishingStatus.Modified); } availability.ModifiedBy = "forceUpdate"; }); return(this); }
/// <summary> /// Change publishing status of language version of specific entity which is of IMultilanguagedEntity type /// </summary> /// <typeparam name="T">Type of entity</typeparam> /// <typeparam name="TLang">Type of langauge version relation</typeparam> /// <param name="unitOfWork">Unit of work instance</param> /// <param name="entity">Entity to change</param> /// <param name="statusId">status id for all languages</param> public void ChangeStatusOfLanguageVersion <T, TLang>(ITranslationUnitOfWork unitOfWork, T entity, Guid statusId) where T : class, IMultilanguagedEntity <TLang>, new() where TLang : class, ILanguageAvailability { if (entity == null) { return; } if (!entity.LanguageAvailabilities.Any()) { unitOfWork.LoadNavigationProperty(entity, i => i.LanguageAvailabilities); } entity.LanguageAvailabilities.ForEach(langAvail => { langAvail.StatusId = statusId; }); }
/// <summary> /// Change publishing status of language version of specific entity which is of IMultilanguagedEntity type /// </summary> /// <typeparam name="T">Type of entity</typeparam> /// <typeparam name="TLang">Type of langauge version relation</typeparam> /// <param name="unitOfWork">Unit of work instance</param> /// <param name="entity">Entity to change</param> /// <param name="publishingStatusTo">Target publishing status of language version</param> /// <param name="publishingStatusFrom">Input criteria for selecting the language versions which will be switched</param> /// <param name="languageGuids">Input criteria for selecting the language versions which will be switched</param> public void ChangeStatusOfLanguageVersion <T, TLang>(ITranslationUnitOfWork unitOfWork, T entity, PublishingStatus publishingStatusTo, IEnumerable <PublishingStatus> publishingStatusFrom = null, IEnumerable <Guid> languageGuids = null) where T : class, IMultilanguagedEntity <TLang>, new() where TLang : class, ILanguageAvailability { if (entity == null) { return; } unitOfWork.LoadNavigationProperty(entity, i => i.LanguageAvailabilities); var publishingStatusToId = PublishingStatuses[publishingStatusTo]; var applyOn = languageGuids == null ? entity.LanguageAvailabilities : entity.LanguageAvailabilities.Where(i => languageGuids.Contains(i.LanguageId)); publishingStatusFrom?.ForEach(status => { var publishingStatusFromId = PublishingStatuses[status]; applyOn = applyOn.Where(i => i.StatusId == publishingStatusFromId); }); applyOn.ForEach(i => i.StatusId = publishingStatusToId); }
/// <summary> /// Change publishing status of language version of specific entity which is of IMultilanguagedEntity type /// </summary> /// <typeparam name="T">Type of entity</typeparam> /// <typeparam name="TLang">Type of langauge version relation</typeparam> /// <param name="unitOfWork">Unit of work instance</param> /// <param name="entity">Entity to change</param> /// <param name="languageAvailabilities">languages to change</param> public void ChangeStatusOfLanguageVersion <T, TLang>(ITranslationUnitOfWork unitOfWork, T entity, IEnumerable <VmLanguageAvailabilityInfo> languageAvailabilities) where T : class, IMultilanguagedEntity <TLang>, new() where TLang : class, ILanguageAvailability { if (entity == null) { return; } if (!entity.LanguageAvailabilities.Any()) { unitOfWork.LoadNavigationProperty(entity, i => i.LanguageAvailabilities); } entity.LanguageAvailabilities.ForEach(langAvail => { var newStatusId = languageAvailabilities.FirstOrDefault(j => j.LanguageId == langAvail.LanguageId)?.StatusId; if (newStatusId.IsAssigned()) { langAvail.StatusId = newStatusId.Value; } }); }
public ITranslationDefinitions <TIn, TOut> AddLocalizable <TInProperty, TOutProperty>(Func <TIn, TInProperty> fromProperty, Expression <Func <TOut, ICollection <TOutProperty> > > toProperty, Func <TIn, Func <TOutProperty, bool> > entitySelector = null) where TInProperty : class where TOutProperty : class, ILocalizable { var sourcePropertyType = typeof(TInProperty); if (sourcePropertyType.IsEnumerable(nonEnumerableTypes)) { throw new Exception(string.Format(CoreMessages.UseAddCollectionInstead, typeof(TIn).Name, typeof(TOut).Name, typeof(TInProperty).Name, typeof(TOutProperty).Name)); } if (sourceInstance == null) { return(this); } EnsureCreateTargetInstance(); if (languageCache == null) { languageCache = resolveManager.Resolve <ICacheManager>().LanguageCache; } if (!clonedTargetApplied) { unitOfWork?.LoadNavigationProperty(targetInstance, toProperty); } var targetPropertyInstance = toProperty.Compile()(targetInstance); var filteredOutput = languageCache.FilterCollection(targetPropertyInstance, requestlanguageId); Func <TOutProperty, bool> query = (entitySelector != null) ? entitySelector(sourceInstance) : i => true; var toUpdate = filteredOutput.FirstOrDefault(query); var translated = CallTranslation <TInProperty, TOutProperty>(fromProperty(sourceInstance), toUpdate); if (toUpdate == null && translated != null) { targetPropertyInstance.Add(translated); } return(this); }