public static List <WebpageInfo> GetPagesWithModuleType( WebModuleType moduleType, List <WebpageInfo> pages) { List <WebpageInfo> pagesWithModuleType = pages.FindAll( delegate(WebpageInfo p) { return(p.Modules.Exists( delegate(WebModuleInfo module) { if ( //module.WebModuleType might be null if the cache is out of sync with the database. null == module.WebModuleType || module.IsAlias //exclude aliases. ) { return false; } else { return module.WebModuleType.Equals(moduleType); } })); }); //sort by path pagesWithModuleType.Sort(delegate(WebpageInfo p1, WebpageInfo p2) { return(p1.Path.CompareTo(p2.Path)); }); return(pagesWithModuleType); }
private void LoadExistingModules() { ExistingModulesPagesSelect.Items.Clear(); UseExistingModule.Enabled = true; ExistingModulePanel.Visible = UseExistingModule.Checked; if (UseExistingModule.Checked) { WebpageInfo currentPage = Webpage.GetWebpage(_instanceId); WebModuleType selectedModuleType = GetSelectedModuleType(); List <WebpageInfo> allPages = Webpage.GetDescendants( Webpage.GetWebpage(currentPage.Website.RootNavigationId)); allPages.Add(currentPage.Website.RootWebpage); List <WebpageInfo> pagesWithSelectedModuleType = PagesModulesList.GetPagesWithModuleType(selectedModuleType, allPages); //sort by path pagesWithSelectedModuleType.Sort( delegate(WebpageInfo p1, WebpageInfo p2) { return(p1.Path.CompareTo(p2.Path)); }); bool existingModules = (pagesWithSelectedModuleType.Count > 0); ExistingModulesPagesSelect.Visible = existingModules; UseExistingModule.Enabled = existingModules; NoExistingModulesFoundCtl.Visible = !existingModules; if (!existingModules) { NoExistingModulesFoundCtl.Text = string.Format("There are no existing '{0}' modules.", selectedModuleType.Name); UseExistingModule.Checked = false; } else { foreach (WebpageInfo p in pagesWithSelectedModuleType) { //find all modules of the specified type //(a page may have multiple modules of the same type). List <WebModuleInfo> modules = p.Modules.FindAll(delegate(WebModuleInfo m) { return(!m.IsAlias && //currently, we don't support "alias to alias". m.WebModuleType.Name == selectedModuleType.Name); }); foreach (WebModuleInfo m in modules) { //page path + module name. ExistingModulesPagesSelect.Items.Add(new ListItem( ResolveUrl(p.Path) + " - " + m.Name, m.Id.ToString())); } } } } }
public WebModuleInfo CreateModule(WebpageInfo page) { WebModuleType moduleType = MasterDetailItem.ModuleType; return(WebModule.CreateModule( MasterDetailItem.Chop(page.Title, 30, false), moduleType.WebApplicationType.Name, moduleType.Name, page.Id, "Body", -1)); }
protected void Page_Load(object sender, EventArgs e) { Page.Form.DefaultButton = SaveButton.UniqueID; _pageId = int.Parse(Request.QueryString["PageId"]); _instanceId = int.Parse(Request.QueryString["InstanceId"]); if (!IsPostBack) { //check user permissions. if (!BayshoreSolutions.WebModules.Security.NavigationRole.IsUserAuthorized(_instanceId, Page.User)) { throw new System.Security.SecurityException(BayshoreSolutions.WebModules.Security.Permission.MSG_SECURITY_FAILURE); } WebpageInfo page = Webpage.GetWebpage(_instanceId); Cms.Admin.BindPlaceholdersToList(page, PlaceholderDropDownList, "Body"); //bind modules list. List <WebModuleType> modules = WebModuleType.GetAddableModuleTypes(); if (modules.Count == 0) { this.SaveButton.Enabled = false; this.NoModules.Visible = true; } foreach (WebModuleType moduleType in modules) { this.ModuleList.Items.Add( new ListItem( (!string.IsNullOrEmpty(moduleType.Description)) ? string.Format("{0} - <span style=\"color: #5A5A5A;\">{1}</span>", moduleType.Name, moduleType.Description) : moduleType.Name, string.Format("{0}:{1}", moduleType.WebApplicationType.Name, moduleType.Name))); } //select Content module by default. if (null != this.ModuleList.Items.FindByValue("Content Module:Content")) { this.ModuleList.SelectedValue = "Content Module:Content"; } } }
void modulesList_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { WebModuleType moduleType = (WebModuleType)e.Item.DataItem; Repeater pagesList = (Repeater)e.Item.FindControl("PagesList"); HtmlGenericControl notShownMsgCtl = (HtmlGenericControl)e.Item.FindControl("NotShownMsgCtl"); HtmlGenericControl noPagesMsgCtl = (HtmlGenericControl)e.Item.FindControl("NoPagesMsgCtl"); int pagesCount = -1; //maximum number of module instances to show for each module. //this is a compromise to deal with e.g. the ContentModule, which //could have hundreds of instances. int maxModuleInstances = int.Parse(MaxModuleInstancesSelect.Text); List <WebpageInfo> pagesWithThisModule = GetPagesWithModuleType(moduleType, _webpages); pagesCount = pagesWithThisModule.Count; //sort by path pagesWithThisModule.Sort(delegate(WebpageInfo p1, WebpageInfo p2) { return(p1.Path.CompareTo(p2.Path)); }); pagesList.DataSource = (pagesCount > maxModuleInstances) ? pagesWithThisModule.GetRange(0, maxModuleInstances) : pagesWithThisModule; pagesList.DataBind(); if (notShownMsgCtl.Visible = (pagesCount > maxModuleInstances)) { notShownMsgCtl.InnerHtml = string.Format("<strong>{0}</strong> results not shown.", pagesCount - maxModuleInstances); } noPagesMsgCtl.Visible = (pagesCount <= 0); //modulesList.ItemDataBound += new RepeaterItemEventHandler(modulesList_ItemDataBound); } }
protected void SaveButton_Click(object sender, EventArgs e) { if (PlaceholderDropDownList.Items.Count == 0) { throw new InvalidOperationException("The template (master page) must have a content placeholder."); } WebModuleType selectedModuleType = GetSelectedModuleType(); WebModuleInfo module = null; int aliasModuleId = -1; string placeholder = PlaceholderDropDownList.SelectedItem.ToString(); string instanceName = ModuleNameTextBox.Text.Trim(); if (string.IsNullOrEmpty(instanceName)) { //auto-generate a unique name for the module instance int i = 1; List <WebModuleInfo> pageModules = WebModule.GetModules(_instanceId); do { instanceName = selectedModuleType.Name + " " + i++; } while (pageModules.Exists( delegate(WebModuleInfo m) { return(m.Name == instanceName); })); } if (UseExistingModule.Checked) { aliasModuleId = int.Parse(ExistingModulesPagesSelect.Text); } module = WebModule.CreateModule( instanceName, selectedModuleType.WebApplicationType.Name, selectedModuleType.Name, _pageId, placeholder, aliasModuleId); Response.Redirect(module.GetAddUrl()); }