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);
        }
Esempio n. 2
0
        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));
        }
Esempio n. 4
0
        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);
            }
        }
Esempio n. 6
0
        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());
        }