Пример #1
0
        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);
        }
Пример #2
0
 /// <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;
     });
 }
Пример #3
0
        /// <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);
        }
Пример #4
0
 /// <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;
         }
     });
 }
Пример #5
0
        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);
        }