public PageVariableData(PageTemplateSection pageTemplateSection, PageSection pageSectionOrNull)
        {
            if (pageTemplateSection == null)
            {
                throw new ArgumentNullException("pageTemplateSection");
            }

            this.PageTemplateSection = pageTemplateSection;
            this.PageSection = pageSectionOrNull;
        }
        public PageSectionEditViewModel(PageTemplateSection pageTemplateSection, Page page, PageSection pageSection, int index, bool autoSubmit)
        {
            if (pageTemplateSection == null)
            {
                throw new ArgumentNullException("pageTemplateSection");
            }
            if (page == null)
            {
                throw new ArgumentNullException("page", "page must be specified and exist before editing page sections");
            }
            if (index < 1)
            {
                throw new ArgumentOutOfRangeException("index", "Index cannot be 0, it starts from 1 and up");
            }

            SetDefaults(pageTemplateSection);
            this.PageTemplateSectionId = pageTemplateSection.PageTemplateSectionId;
            this.SectionName = pageTemplateSection.Name;
            this.DefaultRawHtmlValue = pageTemplateSection.DefaultRawHtmlValue;
            this.PageId = page.PageId;
            this.Index = index;
            this.AutoSubmit = autoSubmit;

            if (pageSection != null)
            {
                this.PageSectionId = pageSection.PageSectionId;
                this.UseDefaultFromTemplate = pageSection.UseDefaultFromTemplate;
                this.HasNothing = pageSection.HasNothing;
                this.HasPlainText = pageSection.HasPlainText;
                this.HasRawHtml = pageSection.HasRawHtml;
                this.Order = pageSection.Order;
                this.PageId = pageSection.PageId;
                this.PlainText = pageSection.PlainText;
                this.RawHtml = pageSection.RawHtml;
                this.StartDateTimeUtc = pageSection.StartDateTimeUtc;
                this.EndDateTimeUtc = pageSection.EndDateTimeUtc;
                this.IsPending = pageSection.IsPending;
                this.UpdateDateTimeUtc = pageSection.UpdateDateTimeUtc;
                this.UpdatedBy = pageSection.UpdatedBy;
            }
        }
 protected void SetDefaults(PageTemplateSection pageTemplateSection)
 {
     //set defaults
     this.PageSectionId = null;
     this.UseDefaultFromTemplate = true;
     if (pageTemplateSection != null)
     {
         this.RawHtml = pageTemplateSection.DefaultRawHtmlValue;
         this.DefaultRawHtmlValue = pageTemplateSection.DefaultRawHtmlValue;
     }
     this.HasPlainText = false;
     this.HasRawHtml = false;
     this.HasNothing = false;
     this.Order = 100;
     this.Index = 0;
     this.PlainText = string.Empty;
     this.StartDateTimeUtc = DateTime.UtcNow.AddMinutes(-1);
     this.EndDateTimeUtc = DateTime.UtcNow.AddYears(100);
     this.IsPending = false;
 }
        public ActionResult SectionEdit(PageTemplateSection section)
        {
            ValidatePageTemplateSectionName(section);
            if (section.PageTemplateSectionId == 0)
            {
                return HttpBadRequest("section.PageTemplateSectionId is 0");
            }

            PageTemplateSection sectionToUpdate = GStoreDb.PageTemplateSections.FindById(section.PageTemplateSectionId);
            if (section == null)
            {
                return HttpNotFound("Page Template Section not found. Page Template Section Id: " + section.PageTemplateSectionId);
            }
            if (section.ClientId != sectionToUpdate.ClientId)
            {
                return HttpBadRequest("View Model ClientId: " + section.ClientId + " does not match template client id: " + section.ClientId);
            }

            if (ModelState.IsValid)
            {
                section.UpdateAuditFields(CurrentUserProfileOrThrow);
                section = GStoreDb.PageTemplateSections.Update(section);
                GStoreDb.SaveChanges();
                AddUserMessage("Page Template Section Updated", "Changes saved successfully to Page Template Section '" + section.Name.ToHtml() + "' [" + section.PageTemplateSectionId + "]", UserMessageType.Success);
                return RedirectToAction("SectionIndex", new { id = section.PageTemplateId });
            }

            this.BreadCrumbsFunc = htmlHelper => this.PageTemplateSectionBreadcrumb(htmlHelper, sectionToUpdate, false);
            return View(section);
        }
        public ActionResult SectionCreate(PageTemplateSection section)
        {
            ValidatePageTemplateSectionName(section);

            if (section.PageTemplateId == default(int))
            {
                return HttpBadRequest("Page Template id is 0");
            }

            IGstoreDb db = GStoreDb;
            PageTemplate template = db.PageTemplates.FindById(section.PageTemplateId);
            if (template == null)
            {
                return HttpNotFound("Page Template not found. Page Template Id: " + section.PageTemplateId);
            }

            if (section.ClientId != template.ClientId)
            {
                return HttpBadRequest("View Model ClientId: " + section.ClientId + " does not match template client id: " + section.ClientId);
            }

            if (ModelState.IsValid)
            {
                section = GStoreDb.PageTemplateSections.Add(section);
                GStoreDb.SaveChanges();
                AddUserMessage("Page Template Section Created", "Page Template Section created successfully", UserMessageType.Success);
                return RedirectToAction("SectionIndex", new { id = section.PageTemplateId });
            }

            section.PageTemplate = template;
            this.BreadCrumbsFunc = htmlHelper => this.PageTemplateSectionBreadcrumb(htmlHelper, section, false);
            return View(section);
        }
        protected void ValidatePageTemplateSectionName(PageTemplateSection pageTemplateSection)
        {
            if (pageTemplateSection == null)
            {
                throw new ArgumentNullException("pageTemplateSection");
            }

            PageTemplateSection conflict = GStoreDb.PageTemplateSections.Where(
                pt => (pt.ClientId == pageTemplateSection.ClientId)
                    && (pt.Name.ToLower() == pageTemplateSection.Name.ToLower())
                    && (pt.PageTemplateId == pageTemplateSection.PageTemplateId)
                    && (pt.PageTemplateSectionId != pageTemplateSection.PageTemplateSectionId)
                    ).FirstOrDefault();
            if (conflict != null)
            {
                this.ModelState.AddModelError("Name", "Page Template Section Name '" + conflict.Name + "' is already in use for Page Template Section '" + conflict.Name.ToHtml() + "' [" + conflict.PageTemplateSectionId + "] for Page Template '" + conflict.PageTemplate.Name.ToHtml() + "' [" + conflict.PageTemplate.PageTemplateId + "] for client '" + conflict.Client.Name.ToHtml() + "' [" + conflict.ClientId + "]. Please choose a new name");
                bool nameIsDirty = true;
                string oldName = pageTemplateSection.Name;
                int index = 1;
                while (nameIsDirty)
                {
                    index++;
                    pageTemplateSection.Name = oldName + " " + index;
                    nameIsDirty = conflict.PageTemplate.Sections.Any(pt => pt.Name.ToLower() == pageTemplateSection.Name.ToLower());
                }
                if (ModelState.ContainsKey("Name"))
                {
                    ModelState["Name"].Value = new ValueProviderResult(pageTemplateSection.Name, pageTemplateSection.Name, null);
                }
            }
        }
 protected MvcHtmlString PageTemplateSectionBreadcrumb(HtmlHelper htmlHelper, PageTemplateSection pageTemplateSection, bool ShowAsLink = false)
 {
     RouteValueDictionary routeData = null;
     string name = "(unknown)";
     bool showLink = false;
     if (pageTemplateSection != null)
     {
         if (pageTemplateSection.PageTemplateSectionId == 0)
         {
             name = "New";
         }
         else
         {
             showLink = ShowAsLink;
             routeData = new RouteValueDictionary(new { id = pageTemplateSection.PageTemplateSectionId });
             name = "'" + pageTemplateSection.Name + "' [" + pageTemplateSection.PageTemplateSectionId + "]";
         }
     }
     return new MvcHtmlString(
         PageTemplateSectionsBreadcrumb(htmlHelper, pageTemplateSection.PageTemplate, true).ToHtmlString()
         + " -> "
         + (showLink ? htmlHelper.ActionLink(name, "SectionDetails", "PageTemplateSysAdmin", routeData, null).ToHtmlString() : name)
         );
 }