private static List<CMSMenuItem> MapProductsForCategory(List<tbl_Products> products, CustomPrincipal currentUser)
 {
     return products.OrderBy(p => p.P_Order).Select(product => new CMSMenuItem
     {
         MenuItemID = product.ProductID,
         Title = String.Format("{0} ({1})", product.P_Title, product.P_ProductCode),
         DeleteText = String.Format("Delete {0} ({1})", product.P_Title, product.ProductID),
         EditText = String.Format("Edit {0}", product.P_Title),
         IsEditImages = true,
         EditImagesText = "Images",
         IsAssociation = true,
         IsMove = true,
         IsApprove = product.tbl_SiteMap.tbl_Content.Where(c => !c.C_Deleted).All(c => !c.C_Approved) &&
                 currentUser.HasPermission(Permission.ApproveContent),
         ApproveText = "Content Requires Approval",
         IsStock = true,
         StockText = "Stock"
     }).ToList();
 }
        private static List<CMSMenuItem> CreateSectionsSubMenu(IEnumerable<tbl_SiteMap> sections, int parentID, CustomPrincipal currentUser)
        {
            return sections.Where(sm => parentID == 0 ?
                    (sm.SM_ParentID == 0 || sm.IsDirectlyInMenu) :
                    (sm.SM_ParentID == parentID && sm.IsUnderParentInMenu))
                .OrderBy(sm => sm.SM_OrderBy).Select(section =>
                 {
                     var item = new CMSMenuItem
                     {
                         MenuItemID = section.SiteMapID,
                         SubMenuItems = CreateSectionsSubMenu(sections, section.SiteMapID, currentUser),
                         CssClasses = section.SM_IsPredefined ? "predefinedSection" : String.Empty,

                         IsDelete = !section.tbl_ContentType.CTP_Value.Equals(ContentType.Category.ToString()),
                         IsEdit = !section.tbl_ContentType.CTP_Value.Equals(ContentType.Category.ToString()),
                         IsMove = currentUser.HasPermission(Permission.EditContent),
                         ApproveText = String.Format("{0} Content Requires Approval", section.SM_Name),
                         DeleteText = String.Format("Delete {0} ({1})", section.SM_Name, section.SiteMapID),
                         EditText = String.Format("Edit {0} ({1})", section.SM_Name, section.SiteMapID),
                         EditImagesText = String.Format("Images for {0} ({1})", section.SM_Name, section.SiteMapID),
                         ExpandText = String.Format("Show Sub Pages of {0}", section.SM_Name),

                         PreviewText = String.Format("Preview {0}", section.SM_Name),
                         PreviewUrl = String.Format("/Admn/Preview?sectionID={0}", section.SiteMapID),

                         Title = section.SM_Name,
                     };
                     if (section.IsType(ContentType.Category))
                     {
                         item.Title += " (Product Category)";
                     }
                     else if (section.IsType(ContentType.Gallery) && section.tbl_Gallery.G_CustomerID==0)
                     {
                         item.Title += " (Gallery)";
                     }
                     else
                     {
                         item.IsPreview = true;
                         item.IsApprove = section.tbl_Content.Where(c => !c.C_Deleted).All(c => !c.C_Approved) &&
                             currentUser.HasPermission(Permission.ApproveContent);
                         item.IsEdit = currentUser.HasPermission(Permission.EditContent);
                         item.IsExpand = sections.Any(c => c.SM_ParentID == section.SiteMapID);
                         item.IsEditImages = currentUser.HasPermission(Permission.EditContent);
                         if (!section.SM_IsPredefined)
                         {
                             item.IsDelete = currentUser.HasPermission(Permission.DeleteContent);
                         }
                     }
                     return item;
                 }).ToList();
        }
 public static List<CMSMenuModel> MapUsers(List<tbl_AdminUsers> users, CustomPrincipal currentUser)
 {
     return new List<CMSMenuModel>
     {
         new CMSMenuModel
         {
             Title = "Users",
             MenuItems = users.Select(user => new CMSMenuItem
                 {
                     MenuItemID = user.AdminUserID,
                     Title = String.Format("<b>{0}: {1}</b> ({2})", user.US_UserName, user.US_Email, user.tbl_UserGroups.UG_Type),
                     IsDelete = currentUser.HasPermission(Permission.DeleteUser),
                     IsEdit = currentUser.HasPermission(Permission.EditUser)
                 }).ToList()
             }
     };
 }
 private static List<CMSMenuItem> CreateProdSubCategories(List<tbl_SiteMap> categories, int parentID, CustomPrincipal currentUser)
 {
     return categories.Where(c => c.tbl_ProdCategories.PC_ParentID.GetValueOrDefault(0) == parentID)
         .Select(category => new CMSMenuItem
         {
             MenuItemID = category.tbl_ProdCategories.CategoryID,
             Title = category.tbl_ProdCategories.PC_Title,
             SubMenuItems = CreateProdSubCategories(categories, category.SiteMapID, currentUser),
             DeleteText = String.Format("Delete {0} ({1})", category.tbl_ProdCategories.PC_Title, category.tbl_ProdCategories.CategoryID),
             EditText = String.Format("Edit {0}", category.tbl_ProdCategories.PC_Title),
             IsEditImages = true,
             EditImagesText = "Image",
             IsMove = true,
             IsApprove = category.tbl_Content.Where(c => !c.C_Deleted).All(c => !c.C_Approved) && currentUser.HasPermission(Permission.ApproveContent),
             ApproveText = String.Format("{0} Category Requires Approval", category.tbl_ProdCategories.PC_Title),
         }).ToList();
 }
 public static List<CMSMenuModel> MapNews(List<tbl_Domains> domains, CustomPrincipal currentUser)
 {
     return domains.Select(domain => new CMSMenuModel
         {
             Title = "Blog Articles for " + domain.DO_CompanyName,
             MenuItems = domain.tbl_SiteMap
             .Where(sm => !sm.SM_Deleted && sm.IsType(ContentType.Blog)).OrderByDescending(b => b.SM_Live).ThenByDescending(b => b.SM_Date)
             .Select(b => new CMSMenuItem
                 {
                     MenuItemID = b.SiteMapID,
                     Date = b.SM_Date,
                     IsFuturePublish = b.SM_PublishDate == null ? false : (b.SM_PublishDate >= DateTime.Now),
                     PublishDateText = b.SM_PublishDate != null ? ("Publish date: " + b.SM_PublishDate.ToString()) : String.Empty,
                     Title = b.SM_Name,
                     IsDelete = currentUser.HasPermission(Permission.DeleteNews),
                     DeleteText = String.Format("Delete {0} ({1})", b.SM_Name, b.SiteMapID),
                     IsEdit = currentUser.HasPermission(Permission.EditNews),
                     EditText = String.Format("Edit \"{0}\"", b.SM_Name),
                     IsEditImages = currentUser.HasPermission(Permission.EditNews),
                     EditImagesText = String.Format("Edit images for \"{0}\"", b.SM_Name),
                     IsComment = true,
                     CommentsText = String.Format("View comments for \"{0}\"", b.SM_Name),
                     UnauthorizedCommentExists = b.tbl_Comments.Any(c => !c.CO_Authorised),
                     AuthorizedCommentExists = b.tbl_Comments.Any(c => c.CO_Authorised),
                     IsVisibility = true,
                     VisibilityText = "Turn news article on / off",
                     Visible = b.SM_Live
                 }).ToList()
         }).ToList();
 }