Example #1
0
        public void Should_CRUD_BlogPost_WithLayout_Successfully_WithIdSpecified()
        {
            // Attach to events
            Events.BlogEvents.Instance.BlogCreated += Instance_EntityCreated;
            Events.BlogEvents.Instance.BlogUpdated += Instance_EntityUpdated;
            Events.BlogEvents.Instance.BlogDeleted += Instance_EntityDeleted;

            RunApiActionInTransaction(
                (api, session) =>
            {
                masterPage = null;
                layout     = TestDataProvider.CreateNewLayout();
                region     = TestDataProvider.CreateNewRegion();

                var layoutRegion = new LayoutRegion {
                    Layout = layout, Region = region
                };
                layout.LayoutRegions = new[] { layoutRegion };

                session.SaveOrUpdate(region);
                session.SaveOrUpdate(layout);
                session.SaveOrUpdate(layoutRegion);

                RunWithIdSpecified(session, api.Blog.BlogPost.Properties.Get, api.Blog.BlogPost.Properties.Put, api.Blog.BlogPost.Properties.Delete);
            });

            // Detach from events
            Events.BlogEvents.Instance.BlogCreated -= Instance_EntityCreated;
            Events.BlogEvents.Instance.BlogUpdated -= Instance_EntityUpdated;
            Events.BlogEvents.Instance.BlogDeleted -= Instance_EntityDeleted;
        }
        public TemplateEditViewModel Execute(Guid?templateId)
        {
            TemplateEditViewModel templateModel;

            if (!templateId.HasValue)
            {
                templateModel = new TemplateEditViewModel();
            }
            else
            {
                Root.Models.Layout    templateAlias          = null;
                TemplateEditViewModel templateViewModelAlias = null;

                var templateFuture = UnitOfWork.Session.QueryOver(() => templateAlias)
                                     .Where(() => templateAlias.Id == templateId && !templateAlias.IsDeleted)
                                     .SelectList(select => select
                                                 .Select(() => templateAlias.Id).WithAlias(() => templateViewModelAlias.Id)
                                                 .Select(() => templateAlias.Version).WithAlias(() => templateViewModelAlias.Version)
                                                 .Select(() => templateAlias.Name).WithAlias(() => templateViewModelAlias.Name)
                                                 .Select(() => templateAlias.PreviewUrl).WithAlias(() => templateViewModelAlias.PreviewImageUrl)
                                                 .Select(() => templateAlias.LayoutPath).WithAlias(() => templateViewModelAlias.Url))

                                     .TransformUsing(Transformers.AliasToBean <TemplateEditViewModel>())
                                     .FutureValue <TemplateEditViewModel>();

                TemplateRegionItemViewModel templateRegionAlias = null;
                LayoutRegion layoutRegionAlias = null;
                Region       regionAlias       = null;

                var regions = UnitOfWork.Session
                              .QueryOver(() => layoutRegionAlias)
                              .Inner.JoinAlias(c => c.Region, () => regionAlias)
                              .Where(() => layoutRegionAlias.Layout.Id == templateId && !regionAlias.IsDeleted && !layoutRegionAlias.IsDeleted)
                              .SelectList(select => select
                                          .Select(() => regionAlias.Id).WithAlias(() => templateRegionAlias.Id)
                                          .Select(() => layoutRegionAlias.Description).WithAlias(() => templateRegionAlias.Description)
                                          .Select(() => regionAlias.Version).WithAlias(() => templateRegionAlias.Version)
                                          .Select(() => regionAlias.RegionIdentifier).WithAlias(() => templateRegionAlias.Identifier))
                              .TransformUsing(Transformers.AliasToBean <TemplateRegionItemViewModel>())
                              .Future <TemplateRegionItemViewModel>();

                templateModel = templateFuture.Value;
                if (templateModel == null)
                {
                    throw new EntityNotFoundException(typeof(TemplateRegionItemViewModel), templateId.Value);
                }

                templateModel.Regions = regions.ToList();
                templateModel.Options = layoutService.GetLayoutOptions(templateId.Value);
            }

            templateModel.CustomOptions = optionService.GetCustomOptions();

            return(templateModel);
        }
Example #3
0
        public LayoutRegion CreateNewLayoutRegion(Layout layout = null, Region region = null)
        {
            var entity = new LayoutRegion();

            PopulateBaseFields(entity);

            entity.Description = ProvideRandomString(MaxLength.Name);
            entity.Layout      = layout ?? CreateNewLayout();
            entity.Region      = region ?? CreateNewRegion();

            return(entity);
        }
Example #4
0
        /// <summary>
        /// Executes the specified request.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>The list of blog template view models</returns>
        public IList <BlogTemplateViewModel> Execute(bool request)
        {
            BlogTemplateViewModel modelAlias = null;
            Layout layoutAlias = null;

            // Load templates
            var templates = UnitOfWork.Session
                            .QueryOver(() => layoutAlias)
                            .Where(() => !layoutAlias.IsDeleted)
                            .SelectList(select => select
                                        .Select(() => layoutAlias.Id).WithAlias(() => modelAlias.TemplateId)
                                        .Select(() => layoutAlias.Name).WithAlias(() => modelAlias.Title)
                                        .Select(() => layoutAlias.PreviewUrl).WithAlias(() => modelAlias.PreviewUrl))
                            .TransformUsing(Transformers.AliasToBean <BlogTemplateViewModel>())
                            .List <BlogTemplateViewModel>();

            // Load regions
            Region       regionAlias       = null;
            LayoutRegion layoutRegionAlias = null;

            var compatibleLayouts = UnitOfWork.Session
                                    .QueryOver(() => layoutRegionAlias)
                                    .Inner.JoinQueryOver(() => layoutRegionAlias.Region, () => regionAlias)
                                    .Where(() => !layoutRegionAlias.IsDeleted &&
                                           !regionAlias.IsDeleted &&
                                           regionAlias.RegionIdentifier == BlogModuleConstants.BlogPostMainContentRegionIdentifier)
                                    .Select(select => select.Layout.Id)
                                    .List <Guid>();

            foreach (var id in compatibleLayouts)
            {
                templates
                .Where(t => t.TemplateId == id)
                .ToList()
                .ForEach(t => t.IsCompatible = true);
            }

            // Load default template
            var defaultTemplateId = optionService.GetDefaultTemplateId();

            if (defaultTemplateId.HasValue)
            {
                var defaultTemplate = templates.FirstOrDefault(t => t.TemplateId == defaultTemplateId.Value);
                if (defaultTemplate != null)
                {
                    defaultTemplate.IsActive = true;
                }
            }

            return(templates);
        }
        /// <summary>
        /// Creates the layout.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>
        /// Created layout entity
        /// </returns>
        public Layout CreateLayout(CreateLayoutRequest request)
        {
            ValidateRequest(request);

            try
            {
                UnitOfWork.BeginTransaction();

                var layout = new Layout
                {
                    LayoutPath = request.LayoutPath,
                    Name       = request.Name,
                    PreviewUrl = request.PreviewUrl
                };

                // reference or create new regions by identifiers
                if (request.Regions != null)
                {
                    layout.LayoutRegions = new List <LayoutRegion>();
                    foreach (var regionIdentifier in request.Regions)
                    {
                        if (string.IsNullOrWhiteSpace(regionIdentifier))
                        {
                            continue;
                        }

                        var region = LoadOrCreateRegion(regionIdentifier);

                        var layoutRegion = new LayoutRegion
                        {
                            Layout = layout,
                            Region = region
                        };
                        layout.LayoutRegions.Add(layoutRegion);
                    }
                }

                Repository.Save(layout);
                UnitOfWork.Commit();

                return(layout);
            }
            catch (Exception inner)
            {
                var message = string.Format("Failed to create layout. Path: {0}, Name: {1}, Url: {2}", request.LayoutPath, request.Name, request.PreviewUrl);
                Logger.Error(message, inner);
                throw new CmsApiException(message, inner);
            }
        }
        public void Should_CRUD_BlogPost_WithNoLayoutSpecified_Successfully()
        {
            // Attach to events
            Events.BlogEvents.Instance.BlogCreated += Instance_EntityCreated;
            Events.BlogEvents.Instance.BlogUpdated += Instance_EntityUpdated;
            Events.BlogEvents.Instance.BlogDeleted += Instance_EntityDeleted;

            RunApiActionInTransaction(
                (api, session) =>
            {
                isMarkdown = false;
                isHtmlSet  = true;
                isNullUrl  = false;
                masterPage = null;
                layout     = null;

                masterPage    = null;
                defaultLayout = TestDataProvider.CreateNewLayout();
                region        = TestDataProvider.CreateNewRegion();

                var layoutRegion = new LayoutRegion {
                    Layout = defaultLayout, Region = region
                };
                defaultLayout.LayoutRegions = new[] { layoutRegion };

                session.SaveOrUpdate(region);
                session.SaveOrUpdate(defaultLayout);
                session.SaveOrUpdate(layoutRegion);

                // Set default layout
                var repository = GetRepository(session);
                var option     = repository.AsQueryable <Option>().FirstOrDefault();
                if (option == null)
                {
                    option = new Option();
                }
                option.DefaultMasterPage = null;
                option.DefaultLayout     = defaultLayout;
                session.SaveOrUpdate(defaultLayout);

                Run(session, api.Blog.BlogPost.Properties.Post, api.Blog.BlogPost.Properties.Get, api.Blog.BlogPost.Properties.Put, api.Blog.BlogPost.Properties.Delete);
            });

            // Detach from events
            Events.BlogEvents.Instance.BlogCreated -= Instance_EntityCreated;
            Events.BlogEvents.Instance.BlogUpdated -= Instance_EntityUpdated;
            Events.BlogEvents.Instance.BlogDeleted -= Instance_EntityDeleted;
        }
        /// <summary>
        /// Creates the layout region.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>
        /// Created layout region entity
        /// </returns>
        public LayoutRegion CreateLayoutRegion(CreateLayoutRegionRequest request)
        {
            ValidateRequest(request);

            try
            {
                var layout = Repository.AsProxy <Layout>(request.LayoutId);
                var region = LoadOrCreateRegion(request.RegionIdentifier);

                if (!region.Id.HasDefaultValue())
                {
                    var exists = Repository.AsQueryable <LayoutRegion>(lr => lr.Region == region && lr.Layout == layout).Any();
                    if (exists)
                    {
                        var message    = string.Format("Failed to create layout region: region {0} is already assigned.", request.RegionIdentifier);
                        var logMessage = string.Format("{0} LayoutId: {1}", message, request.LayoutId);
                        Logger.Error(logMessage);
                        throw new CmsApiValidationException(message);
                    }
                }

                var layoutRegion = new LayoutRegion {
                    Layout = layout, Region = region
                };
                Repository.Save(layoutRegion);

                UnitOfWork.Commit();

                return(layoutRegion);
            }
            catch (CmsApiValidationException)
            {
                throw;
            }
            catch (Exception inner)
            {
                var message = string.Format("Failed to create layout region.");
                Logger.Error(message, inner);
                throw new CmsApiException(message, inner);
            }
        }
Example #8
0
        /// <summary>
        /// Gets the first compatible layout.
        /// </summary>
        /// <returns>Layout for blog post.</returns>
        private Layout GetFirstCompatibleLayout()
        {
            LayoutRegion layoutRegionAlias = null;
            Region       regionAlias       = null;

            var compatibleLayouts = UnitOfWork.Session
                                    .QueryOver(() => layoutRegionAlias)
                                    .Inner.JoinQueryOver(() => layoutRegionAlias.Region, () => regionAlias)
                                    .Where(() => !layoutRegionAlias.IsDeleted &&
                                           !regionAlias.IsDeleted &&
                                           regionAlias.RegionIdentifier == BlogModuleConstants.BlogPostMainContentRegionIdentifier)
                                    .Select(select => select.Layout.Id)
                                    .Take(1)
                                    .List <Guid>();

            if (compatibleLayouts != null && compatibleLayouts.Count > 0)
            {
                return(Repository.AsProxy <Layout>(compatibleLayouts[0]));
            }

            return(null);
        }
        public void Should_CRUD_BlogPost_WithLayout_Successfully()
        {
            // Attach to events
            Events.BlogEvents.Instance.BlogCreated += Instance_EntityCreated;
            Events.BlogEvents.Instance.BlogCreated += CheckTagCount;
            Events.BlogEvents.Instance.BlogUpdated += Instance_EntityUpdated;
            Events.BlogEvents.Instance.BlogDeleted += Instance_EntityDeleted;

            RunApiActionInTransaction(
                (api, session) =>
            {
                isNullUrl  = true;
                isMarkdown = false;
                isHtmlSet  = true;

                masterPage = null;
                layout     = TestDataProvider.CreateNewLayout();
                region     = TestDataProvider.CreateNewRegion();

                var layoutRegion = new LayoutRegion {
                    Layout = layout, Region = region
                };
                layout.LayoutRegions = new[] { layoutRegion };

                session.SaveOrUpdate(region);
                session.SaveOrUpdate(layout);
                session.SaveOrUpdate(layoutRegion);

                Run(session, api.Blog.BlogPost.Properties.Post, api.Blog.BlogPost.Properties.Get, api.Blog.BlogPost.Properties.Put, api.Blog.BlogPost.Properties.Delete);
            });

            // Detach from events
            Events.BlogEvents.Instance.BlogCreated -= Instance_EntityCreated;
            Events.BlogEvents.Instance.BlogCreated -= CheckTagCount;
            Events.BlogEvents.Instance.BlogUpdated -= Instance_EntityUpdated;
            Events.BlogEvents.Instance.BlogDeleted -= Instance_EntityDeleted;
        }
        public void Should_CRUD_PageProperties_WithLayout_Successfully()
        {
            changingPageProepertiesCount = 0;

            // Attach to events
            Events.PageEvents.Instance.PageCreated            += Instance_EntityCreated;
            Events.PageEvents.Instance.PagePropertiesChanging += Instance_PagePropertiesChanging;
            Events.PageEvents.Instance.PagePropertiesChanged  += Instance_EntityUpdated;
            Events.PageEvents.Instance.PageDeleted            += Instance_EntityDeleted;

            RunApiActionInTransaction(
                (api, session) =>
            {
                masterPage = null;
                layout     = TestDataProvider.CreateNewLayout();
                region     = TestDataProvider.CreateNewRegion();

                var layoutRegion = new LayoutRegion {
                    Layout = layout, Region = region
                };
                layout.LayoutRegions = new[] { layoutRegion };

                session.SaveOrUpdate(region);
                session.SaveOrUpdate(layout);
                session.SaveOrUpdate(layoutRegion);

                Run(session, api.Pages.Page.Properties.Post, api.Pages.Page.Properties.Get, api.Pages.Page.Properties.Put, api.Pages.Page.Properties.Delete);
            });

            Assert.AreEqual(1, changingPageProepertiesCount, "Page properties changing events fired count");

            // Detach from events
            Events.PageEvents.Instance.PageCreated            -= Instance_EntityCreated;
            Events.PageEvents.Instance.PagePropertiesChanging -= Instance_PagePropertiesChanging;
            Events.PageEvents.Instance.PagePropertiesChanged  -= Instance_EntityUpdated;
            Events.PageEvents.Instance.PageDeleted            -= Instance_EntityDeleted;
        }
Example #11
0
        /// <summary>
        /// Saves the layout.
        /// </summary>
        /// <param name="model">The model.</param>
        /// <param name="treatNullsAsLists">if set to <c>true</c> treat null lists as empty lists.</param>
        /// <param name="createIfNotExists">if set to <c>true</c> create if not exists.</param>
        /// <returns>
        /// Saved layout entity
        /// </returns>
        public Layout SaveLayout(TemplateEditViewModel model, bool treatNullsAsLists = true, bool createIfNotExists = false)
        {
            if (model.Options != null)
            {
                optionService.ValidateOptionKeysUniqueness(model.Options);
            }

            unitOfWork.BeginTransaction();

            var    isNew    = model.Id.HasDefaultValue();
            Layout template = null;

            if (!isNew)
            {
                template = repository.AsQueryable <Layout>()
                           .Where(f => f.Id == model.Id)
                           .FetchMany(f => f.LayoutRegions)
                           .ToList()
                           .FirstOrDefault();
                isNew = template == null;

                if (isNew && !createIfNotExists)
                {
                    throw new EntityNotFoundException(typeof(Layout), model.Id);
                }
            }

            if (template == null)
            {
                template = new Layout {
                    Id = model.Id
                };
            }
            else if (model.Version > 0)
            {
                template.Version = model.Version;
            }

            template.Name       = model.Name;
            template.LayoutPath = model.Url;
            template.PreviewUrl = model.PreviewImageUrl;

            // Set null list as empty
            if (treatNullsAsLists)
            {
                model.Options = model.Options ?? new List <OptionViewModel>();
                model.Regions = model.Regions ?? new List <TemplateRegionItemViewModel>();
            }

            // Edits or removes regions.
            if (model.Regions != null)
            {
                if (template.LayoutRegions != null && template.LayoutRegions.Any())
                {
                    foreach (var region in template.LayoutRegions)
                    {
                        var requestRegion = model.Regions != null
                            ? model.Regions.FirstOrDefault(f => f.Identifier.ToLowerInvariant() == region.Region.RegionIdentifier.ToLowerInvariant())
                            : null;

                        if (requestRegion != null && region.Region.RegionIdentifier.ToLowerInvariant() == requestRegion.Identifier.ToLowerInvariant())
                        {
                            region.Description = requestRegion.Description;
                            repository.Save(region);
                        }
                        else
                        {
                            repository.Delete(region);
                        }
                    }
                }

                if (template.LayoutRegions == null)
                {
                    template.LayoutRegions = new List <LayoutRegion>();
                }

                var regions = GetRegions(model.Regions);

                foreach (var requestRegionOption in model.Regions)
                {
                    if (!template.LayoutRegions.Any(f => f.Region.RegionIdentifier.Equals(requestRegionOption.Identifier, StringComparison.InvariantCultureIgnoreCase)))
                    {
                        var region = regions.Find(f => f.RegionIdentifier.Equals(requestRegionOption.Identifier, StringComparison.InvariantCultureIgnoreCase));

                        if (region == null)
                        {
                            if (requestRegionOption.Description == null)
                            {
                                requestRegionOption.Description = string.Empty;
                            }

                            var regionOption = new Region
                            {
                                RegionIdentifier = requestRegionOption.Identifier
                            };

                            template.LayoutRegions.Add(new LayoutRegion
                            {
                                Description = requestRegionOption.Description,
                                Region      = regionOption,
                                Layout      = template
                            });
                            repository.Save(regionOption);
                        }
                        else
                        {
                            var layoutRegion = new LayoutRegion
                            {
                                Description = requestRegionOption.Description,
                                Region      = region,
                                Layout      = template
                            };
                            template.LayoutRegions.Add(layoutRegion);
                            repository.Save(layoutRegion);
                        }
                    }
                }
            }

            if (model.Options != null)
            {
                optionService.SetOptions <LayoutOption, Layout>(template, model.Options);
            }

            repository.Save(template);
            unitOfWork.Commit();

            // Notify
            if (isNew)
            {
                Events.PageEvents.Instance.OnLayoutCreated(template);
            }
            else
            {
                Events.PageEvents.Instance.OnLayoutUpdated(template);
            }

            return(template);
        }
Example #12
0
        /// <summary>
        /// Executes the specified request.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        /// <exception cref="System.NotImplementedException"></exception>
        public SaveTemplateResponse Execute(TemplateEditViewModel request)
        {
            if (request.Options != null)
            {
                OptionService.ValidateOptionKeysUniqueness(request.Options);
            }

            UnitOfWork.BeginTransaction();

            var isNew    = request.Id.HasDefaultValue();
            var template = !isNew
                               ? Repository.AsQueryable <Root.Models.Layout>()
                           .Where(f => f.Id == request.Id)
                           .FetchMany(f => f.LayoutRegions)
                           .ToList()
                           .FirstOrDefault()
                               : new Root.Models.Layout();

            if (template == null)
            {
                template = new Root.Models.Layout();
            }

            template.Name       = request.Name;
            template.LayoutPath = request.Url;
            template.Version    = request.Version;
            template.PreviewUrl = request.PreviewImageUrl;

            // Edits or removes regions.
            if (template.LayoutRegions != null && template.LayoutRegions.Any())
            {
                foreach (var region in template.LayoutRegions)
                {
                    var requestRegion = request.Regions != null
                                                   ? request.Regions.FirstOrDefault(f => f.Identifier == region.Region.RegionIdentifier)
                                                   : null;

                    if (requestRegion != null && region.Region.RegionIdentifier == requestRegion.Identifier)
                    {
                        region.Description = requestRegion.Description;
                        Repository.Save(region);
                    }
                    else
                    {
                        Repository.Delete(region);
                    }
                }
            }

            // Adds new region.
            if (request.Regions != null)
            {
                if (template.LayoutRegions == null)
                {
                    template.LayoutRegions = new List <LayoutRegion>();
                }

                var regions = GetRegions(request.Regions);

                foreach (var requestRegionOption in request.Regions)
                {
                    if (!template.LayoutRegions.Any(f => f.Region.RegionIdentifier.Equals(requestRegionOption.Identifier, StringComparison.InvariantCultureIgnoreCase)))
                    {
                        var region = regions.Find(f => f.RegionIdentifier.Equals(requestRegionOption.Identifier, StringComparison.InvariantCultureIgnoreCase));

                        if (region == null)
                        {
                            if (requestRegionOption.Description == null)
                            {
                                requestRegionOption.Description = string.Empty;
                            }

                            var regionOption = new Region
                            {
                                RegionIdentifier = requestRegionOption.Identifier
                            };

                            template.LayoutRegions.Add(new LayoutRegion
                            {
                                Description = requestRegionOption.Description,
                                Region      = regionOption,
                                Layout      = template
                            });
                            Repository.Save(regionOption);
                        }
                        else
                        {
                            var layoutRegion = new LayoutRegion
                            {
                                Description = requestRegionOption.Description,
                                Region      = region,
                                Layout      = template
                            };
                            template.LayoutRegions.Add(layoutRegion);
                            Repository.Save(layoutRegion);
                        }
                    }
                }
            }

            OptionService.SetOptions <LayoutOption, Root.Models.Layout>(template, request.Options);

            Repository.Save(template);
            UnitOfWork.Commit();

            // Notify
            if (isNew)
            {
                Events.PageEvents.Instance.OnLayoutCreated(template);
            }
            else
            {
                Events.PageEvents.Instance.OnLayoutUpdated(template);
            }

            return(new SaveTemplateResponse
            {
                Id = template.Id,
                TemplateName = template.Name,
                Version = template.Version
            });
        }
Example #13
0
        public void PrepareLayout(string layoutPath)
        {
            Action method = null;
            Action start2 = null;
            Action start3 = null;
            Action <RegionOptions> action = null;
            LayoutModel            layout;

            ClientManager.Instance.Stat            = new ClientApp.Core.Stat();
            ClientManager.Instance.Stat.FileType   = StatType.Layout;
            ClientManager.Instance.Stat.ScheduleID = ClientManager.Instance.ScheduleId;
            ClientManager.Instance.Stat.LayoutID   = this._layoutId;
            ClientManager.Instance.Stat.FromDate   = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            if ((layoutPath == (Settings.Default.LibraryPath + @"\Default.xml")) || string.IsNullOrEmpty(layoutPath))
            {
                throw new Exception("Default layout");
            }
            try
            {
                using (FileStream stream = File.Open(layoutPath, FileMode.Open, FileAccess.Read, FileShare.Write))
                {
                    XmlSerializer serializer = new XmlSerializer(typeof(LayoutModel));
                    layout = (LayoutModel)serializer.Deserialize(stream);
                }
            }
            catch (Exception exception)
            {
                Trace.WriteLine(string.Format("Could not find the layout file {0}: {1}", layoutPath, exception.Message));
                throw;
            }
            this._layoutWidth  = layout.Width;
            this._layoutHeight = layout.Height;
            int width  = this._clientSize.Width;
            int height = this._clientSize.Height;

            this._regions = new Collection <ClientApp.Core.Region>();
            RegionOptions options = new RegionOptions();

            try
            {
                if (!string.IsNullOrEmpty(layout.Bgcolor))
                {
                    if (method == null)
                    {
                        method = new Action(() =>
                        {
                            this.MediaCanvas.Background = new SolidColorBrush((System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString(layout.Bgcolor));
                        });
                    }
                    base.Dispatcher.BeginInvoke(DispatcherPriority.Normal, method);
                    options.backgroundColor = layout.Bgcolor;
                }
            }
            catch
            {
                if (start2 == null)
                {
                    start2 = new Action(() =>
                    {
                        this.MediaCanvas.Background = new SolidColorBrush(Colors.Black);
                    });
                }
                base.Dispatcher.BeginInvoke(DispatcherPriority.Normal, start2);
                options.backgroundColor = "#000000";
            }
            try
            {
                if (layout.Background == null)
                {
                    this.MediaCanvas.Background = null;
                    options.backgroundImage     = "";
                }
                else
                {
                    string bgFilePath = string.Concat(new object[] { Settings.Default.LibraryPath, @"\backgrounds\", width, "x", height, "_", layout.Background });
                    Utilities.CreateFolder(Path.GetDirectoryName(bgFilePath));
                    if (!File.Exists(bgFilePath))
                    {
                        System.Drawing.Image original   = System.Drawing.Image.FromFile(Settings.Default.LibraryPath + @"\" + layout.Background);
                        Bitmap            bitmap        = new Bitmap(original, width, height);
                        EncoderParameters encoderParams = new EncoderParameters(1);
                        EncoderParameter  parameter     = new EncoderParameter(Encoder.Quality, 90L);
                        encoderParams.Param[0] = parameter;
                        ImageCodecInfo encoderInfo = GetEncoderInfo("image/jpeg");
                        bitmap.Save(bgFilePath, encoderInfo, encoderParams);
                        original.Dispose();
                        bitmap.Dispose();
                    }
                    base.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
                    {
                        this.MediaCanvas.Background = new ImageBrush(new BitmapImage(new Uri(bgFilePath.Replace(@"\", "/"), UriKind.Relative)));
                    }));
                    options.backgroundImage = bgFilePath;
                }
            }
            catch (Exception)
            {
                if (start3 == null)
                {
                    start3 = new Action(() =>
                    {
                        this.MediaCanvas.Background = System.Windows.Media.Brushes.Black;
                    });
                }
                base.Dispatcher.BeginInvoke(DispatcherPriority.Normal, start3);
                options.backgroundImage = "";
            }
            App.DoEvents();
            List <LayoutRegion> regions            = layout.Regions;
            List <List <LayoutRegionMedia> > list2 = (from r in layout.Regions select r.Media).ToList <List <LayoutRegionMedia> >();

            if ((regions.Count == 0) || (list2.Count == 0))
            {
                Trace.WriteLine(new LogMessage("PrepareLayout", string.Format("A layout with {0} regions and {1} media has been detected.", regions.Count.ToString(), list2.Count.ToString())), LogType.Info.ToString());
                if (ClientManager.Instance.Schedule.ActiveLayouts == 1)
                {
                    Trace.WriteLine(new LogMessage("PrepareLayout", "Only 1 layout scheduled and it has nothing to show."), LogType.Info.ToString());
                    throw new Exception("Only 1 layout schduled and it has nothing to show");
                }
                Trace.WriteLine(new LogMessage("PrepareLayout", string.Format(string.Format("An empty layout detected, will show for {0} seconds.", Settings.Default.emptyLayoutDuration.ToString()), new object[0])), LogType.Info.ToString());
                List <LayoutRegion> list3  = new List <LayoutRegion>();
                LayoutRegion        region = new LayoutRegion
                {
                    Id     = "blah",
                    Width  = 1,
                    Height = 1,
                    Top    = 1,
                    Left   = 1
                };
                List <LayoutRegionMedia> list4 = new List <LayoutRegionMedia>();
                LayoutRegionMedia        media = new LayoutRegionMedia
                {
                    Id       = "blah",
                    Type     = "Text",
                    Duration = 0
                };
                LayoutRegionMediaRaw raw = new LayoutRegionMediaRaw
                {
                    Text = ""
                };
                media.Raw = raw;
                list4.Add(media);
                region.Media = list4;
                list3.Add(region);
                regions = list3;
            }
            else
            {// Keep Running region, preventing visual blank out;
                regions.Add(
                    new LayoutRegion()
                {
                    Height = 0, Width = 0, Name = "Keep Alive Region", Media = new List <LayoutRegionMedia>()
                    {
                        new LayoutRegionMedia()
                        {
                            Duration = (int)TimeSpan.FromDays(10).TotalMilliseconds,
                            Type     = "KeepAlive"
                        }
                    }
                });
            }

            foreach (LayoutRegion region2 in regions)
            {
                if (region2.Media.Count != 0)
                {
                    options.scheduleId = ClientManager.Instance.ScheduleId;
                    options.layoutId   = this._layoutId;
                    options.regionId   = region2.Id;
                    options.Width      = (int)((((double)(region2.Width + 14)) / this._layoutWidth) * this._clientSize.Width);
                    options.Height     = (int)((((double)(region2.Height + 14)) / this._layoutHeight) * this._clientSize.Height);
                    int left = region2.Left;
                    if (left < 0)
                    {
                        left = 0;
                    }
                    int top = region2.Top;
                    if (top < 0)
                    {
                        top = 0;
                    }
                    options.Left           = (int)((((double)left) / this._layoutWidth) * this._clientSize.Width);
                    options.Top            = (int)((((double)top) / this._layoutHeight) * this._clientSize.Height);
                    options.ScaleFactor    = this._scaleFactor;
                    options.BackgroundLeft = options.Left * -1;
                    options.BackgroundTop  = options.Top * -1;
                    options.mediaNodes     = region2.Media;
                    if (action == null)
                    {
                        action = delegate(RegionOptions opts)
                        {
                            Core.Region region = new ClientApp.Core.Region(ClientManager.Instance.StatLog, ClientManager.Instance.CacheManager);
                            region.DurationElapsedEvent += new ClientApp.Core.Region.DurationElapsedDelegate(this.TempDurationElapsedEvent);
                            if (opts.FileType != "Widget")
                            {
                                region.RegionOptions = opts;
                                this._regions.Add(region);
                                region.Opacity = 0.0;
                                this.MediaCanvas.Children.Add(region);
                                region.AnimateIn();
                            }
                            else if (!WidgetsFactory.Widgets.ContainsKey(opts.Name))
                            {
                                region.RegionOptions = opts;
                                region.Opacity       = 0.0;
                                this.MediaCanvas.Children.Add(region);
                                region.AnimateIn();
                            }
                        };
                    }
                    base.Dispatcher.BeginInvoke(DispatcherPriority.Normal, action, options);
                    App.DoEvents();
                }
            }
            regions = null;
            list2   = null;
        }
Example #14
0
        public void Should_CRUD_BlogPost_WithLayout_TestPermalink_Successfully()
        {
            // Attach to events
            Events.BlogEvents.Instance.BlogCreated += Instance_EntityCreated;
            Events.BlogEvents.Instance.BlogUpdated += Instance_EntityUpdated;
            Events.BlogEvents.Instance.BlogDeleted += Instance_EntityDeleted;

            RunApiActionInTransaction(
                (api, session) =>
            {
                var permalinkCreation = UrlHelper.GeneratePageUrl;
                try
                {
                    var failedToCheckCategory = true;
                    UrlHelper.GeneratePageUrl = request =>
                    {
                        if ((request.CategoryId == null && categories != null) ||
                            (request.CategoryId != null && categories == null) ||
                            request.CategoryId.Count() != categories.Count ||
                            request.CategoryId.Any(c => categories.All(c1 => c1 != c)))
                        {
                            throw new Exception("Failed to check category");
                        }

                        failedToCheckCategory = false;
                        return(permalinkCreation(request));
                    };


                    isNullUrl  = true;
                    isMarkdown = false;
                    isHtmlSet  = true;
                    masterPage = null;
                    layout     = TestDataProvider.CreateNewLayout();
                    region     = TestDataProvider.CreateNewRegion();

                    var layoutRegion = new LayoutRegion {
                        Layout = layout, Region = region
                    };
                    layout.LayoutRegions = new[] { layoutRegion };

                    session.SaveOrUpdate(region);
                    session.SaveOrUpdate(layout);
                    session.SaveOrUpdate(layoutRegion);

                    Run(
                        session,
                        api.Blog.BlogPost.Properties.Post,
                        api.Blog.BlogPost.Properties.Get,
                        api.Blog.BlogPost.Properties.Put,
                        api.Blog.BlogPost.Properties.Delete);

                    Assert.IsFalse(failedToCheckCategory, "Failed to check category passed to the URL creation function.");
                }
                finally
                {
                    UrlHelper.GeneratePageUrl = permalinkCreation;
                }
            });

            // Detach from events
            Events.BlogEvents.Instance.BlogCreated -= Instance_EntityCreated;
            Events.BlogEvents.Instance.BlogUpdated -= Instance_EntityUpdated;
            Events.BlogEvents.Instance.BlogDeleted -= Instance_EntityDeleted;
        }
Example #15
0
 public void TestInit() {
     _writer = new StringBuilderWriter();
     _option = new LayoutRegion( _writer );
 }
        /// <summary>
        /// Creates the layout region.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>
        /// Created layout region entity
        /// </returns>
        public LayoutRegion CreateLayoutRegion(CreateLayoutRegionRequest request)
        {
            ValidateRequest(request);

            try
            {
                var layout = Repository.AsProxy<Layout>(request.LayoutId);
                var region = LoadOrCreateRegion(request.RegionIdentifier);

                if (!region.Id.HasDefaultValue())
                {
                    var exists = Repository.AsQueryable<LayoutRegion>(lr => lr.Region == region && lr.Layout == layout).Any();
                    if (exists)
                    {
                        var message = string.Format("Failed to create layout region: region {0} is already assigned.", request.RegionIdentifier);
                        var logMessage = string.Format("{0} LayoutId: {1}", message, request.LayoutId);
                        Logger.Error(logMessage);
                        throw new CmsApiValidationException(message);
                    }
                }

                var layoutRegion = new LayoutRegion { Layout = layout, Region = region };
                Repository.Save(layoutRegion);

                UnitOfWork.Commit();

                return layoutRegion;
            }
            catch (CmsApiValidationException)
            {
                throw;
            }
            catch (Exception inner)
            {
                var message = string.Format("Failed to create layout region.");
                Logger.Error(message, inner);
                throw new CmsApiException(message, inner);
            }
        }
        /// <summary>
        /// Creates the layout.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>
        /// Created layout entity
        /// </returns>
        public Layout CreateLayout(CreateLayoutRequest request)
        {
            ValidateRequest(request);

            try
            {
                UnitOfWork.BeginTransaction();

                var layout = new Layout
                {
                    LayoutPath = request.LayoutPath,
                    Name = request.Name,
                    PreviewUrl = request.PreviewUrl
                };

                // reference or create new regions by identifiers
                if (request.Regions != null)
                {
                    layout.LayoutRegions = new List<LayoutRegion>();
                    foreach (var regionIdentifier in request.Regions)
                    {
                        if (string.IsNullOrWhiteSpace(regionIdentifier))
                        {
                            continue;
                        }

                        var region = LoadOrCreateRegion(regionIdentifier);

                        var layoutRegion = new LayoutRegion
                        {
                            Layout = layout,
                            Region = region
                        };
                        layout.LayoutRegions.Add(layoutRegion);
                    }
                }

                Repository.Save(layout);
                UnitOfWork.Commit();

                return layout;
            }
            catch (Exception inner)
            {
                var message = string.Format("Failed to create layout. Path: {0}, Name: {1}, Url: {2}", request.LayoutPath, request.Name, request.PreviewUrl);
                Logger.Error(message, inner);
                throw new CmsApiException(message, inner);
            }
        }
        /// <summary>
        /// Saves the layout.
        /// </summary>
        /// <param name="model">The model.</param>
        /// <param name="treatNullsAsLists">if set to <c>true</c> treat null lists as empty lists.</param>
        /// <param name="createIfNotExists">if set to <c>true</c> create if not exists.</param>
        /// <returns>
        /// Saved layout entity
        /// </returns>
        public Layout SaveLayout(TemplateEditViewModel model, bool treatNullsAsLists = true, bool createIfNotExists = false)
        {
            if (model.Options != null)
            {
                optionService.ValidateOptionKeysUniqueness(model.Options);
            }

            unitOfWork.BeginTransaction();

            var isNew = model.Id.HasDefaultValue();
            Layout template = null;
            if (!isNew)
            {
                template = repository.AsQueryable<Layout>()
                    .Where(f => f.Id == model.Id)
                    .FetchMany(f => f.LayoutRegions)
                    .ToList()
                    .FirstOrDefault();
                isNew = template == null;

                if (isNew && !createIfNotExists)
                {
                    throw new EntityNotFoundException(typeof(Layout), model.Id);
                }
            }

            if (template == null)
            {
                template = new Layout { Id = model.Id };
            }
            else if (model.Version > 0)
            {
                template.Version = model.Version;
            }

            template.Name = model.Name;
            template.LayoutPath = model.Url;
            template.PreviewUrl = model.PreviewImageUrl;

            // Set null list as empty
            if (treatNullsAsLists)
            {
                model.Options = model.Options ?? new List<OptionViewModel>();
                model.Regions = model.Regions ?? new List<TemplateRegionItemViewModel>();
            }

            // Edits or removes regions.
            if (model.Regions != null)
            {
                if (template.LayoutRegions != null && template.LayoutRegions.Any())
                {
                    foreach (var region in template.LayoutRegions)
                    {
                        var requestRegion = model.Regions != null
                            ? model.Regions.FirstOrDefault(f => f.Identifier.ToLowerInvariant() == region.Region.RegionIdentifier.ToLowerInvariant())
                            : null;

                        if (requestRegion != null && region.Region.RegionIdentifier.ToLowerInvariant() == requestRegion.Identifier.ToLowerInvariant())
                        {
                            region.Description = requestRegion.Description;
                            repository.Save(region);
                        }
                        else
                        {
                            repository.Delete(region);
                        }
                    }
                }

                if (template.LayoutRegions == null)
                {
                    template.LayoutRegions = new List<LayoutRegion>();
                }

                var regions = GetRegions(model.Regions);

                foreach (var requestRegionOption in model.Regions)
                {
                    if (!template.LayoutRegions.Any(f => f.Region.RegionIdentifier.Equals(requestRegionOption.Identifier, StringComparison.InvariantCultureIgnoreCase)))
                    {
                        var region = regions.Find(f => f.RegionIdentifier.Equals(requestRegionOption.Identifier, StringComparison.InvariantCultureIgnoreCase));

                        if (region == null)
                        {
                            if (requestRegionOption.Description == null)
                            {
                                requestRegionOption.Description = string.Empty;
                            }

                            var regionOption = new Region
                            {
                                RegionIdentifier = requestRegionOption.Identifier
                            };

                            template.LayoutRegions.Add(new LayoutRegion
                            {
                                Description = requestRegionOption.Description,
                                Region = regionOption,
                                Layout = template
                            });
                            repository.Save(regionOption);
                        }
                        else
                        {
                            var layoutRegion = new LayoutRegion
                            {
                                Description = requestRegionOption.Description,
                                Region = region,
                                Layout = template
                            };
                            template.LayoutRegions.Add(layoutRegion);
                            repository.Save(layoutRegion);
                        }
                    }
                }
            }

            if (model.Options != null)
            {
                optionService.SetOptions<LayoutOption, Layout>(template, model.Options);
            }

            repository.Save(template);
            unitOfWork.Commit();

            // Notify
            if (isNew)
            {
                Events.PageEvents.Instance.OnLayoutCreated(template);
            }
            else
            {
                Events.PageEvents.Instance.OnLayoutUpdated(template);
            }

            return template;
        }
Example #19
0
 public void TestInit()
 {
     _writer = new StringBuilderWriter();
     _option = new LayoutRegion(_writer);
 }