Пример #1
0
        private HtmlGenericControl RenderUnpublishedWidget(MetaWidget metaWidget)
        {
            var section = new HtmlGenericControl("section");

            section.Attributes.Add("class", "well col col-md-2");

            var header = new HtmlGenericControl("h3");

            header.InnerHtml = metaWidget.WidgetName;
            section.Controls.Add(header);

            var editDiv = PrepareArticleEditForWidget(metaWidget, false);

            section.Controls.Add(editDiv);

            return(section);
        }
Пример #2
0
        private void RenderWidget(MetaWidget metaWidget, MetaWidgetLocation widgetLocation, int widgetCount)
        {
            var article = new HtmlGenericControl("article");

            article.Attributes.Add("class", "col-sm-12 col-md-12 col-lg-12");

            var mainDiv = (metaWidget != null) ? PrepareArticleOutlineForWidget(metaWidget, widgetCount) : PrepareArticlePlaceholderWidget();

            if (_isPublisher && metaWidget != null)
            {
                var editDiv = PrepareArticleEditForWidget(metaWidget, true);
                mainDiv.Controls.Add(editDiv);
            }

            article.Controls.Add(mainDiv);

            if (widgetLocation == Core.ValueTypes.MetaWidgetLocation.TopLeft)
            {
                spnTopLeft.Controls.Add(article);
            }
            if (widgetLocation == Core.ValueTypes.MetaWidgetLocation.TopRight)
            {
                spnTopRight.Controls.Add(article);
            }
            if (widgetLocation == Core.ValueTypes.MetaWidgetLocation.MiddleLeft)
            {
                spnMiddleLeft.Controls.Add(article);
            }
            if (widgetLocation == Core.ValueTypes.MetaWidgetLocation.MiddleRight)
            {
                spnMiddleRight.Controls.Add(article);
            }
            if (widgetLocation == Core.ValueTypes.MetaWidgetLocation.BottomLeft)
            {
                spnBottomLeft.Controls.Add(article);
            }
            if (widgetLocation == Core.ValueTypes.MetaWidgetLocation.BottomRight)
            {
                spnBottomRight.Controls.Add(article);
            }
        }
Пример #3
0
        private HtmlGenericControl PrepareArticleEditForWidget(MetaWidget metaWidget, bool published)
        {
            var rowDiv = new HtmlGenericControl("div");

            rowDiv.Attributes.Add("class", "row");

            var editDiv = new HtmlGenericControl("div");

            editDiv.Attributes.Add("class", published ? "col-md-3 col-md-offset-9" : "col-md-12");

            var hyp = new HyperLink()
            {
                NavigateUrl = "PageCustomWidget.aspx?Id=" + metaWidget.Id + "&action=edit",
                CssClass    = "btn btn-primary btn-sm",
                Text        = "Configure"
            };

            editDiv.Controls.Add(hyp);
            if (!published)
            {
                hyp = new HyperLink()
                {
                    NavigateUrl = "/Publisher/MoveMetaWidget?metaWidgetId=" + metaWidget.Id,
                    CssClass    = "btn btn-primary btn-sm",
                    Text        = "Move"
                };
            }
            ;
            editDiv.Controls.Add(hyp);
            hyp = new HyperLink()
            {
                NavigateUrl = "/Publisher/DeleteMetaWidget?metaWidgetId=" + metaWidget.Id,
                CssClass    = "btn btn-default btn-sm",
                Text        = "Delete"
            };
            editDiv.Controls.Add(hyp);
            rowDiv.Controls.Add(editDiv);

            return(rowDiv);
        }
Пример #4
0
        protected void btnSave_Click(object sender, EventArgs e)
        {
            // Validation
            lblName.Attributes.Remove("class");
            lblName.Attributes.Add("class", "input");
            lblWidgetType.Attributes.Remove("class");
            lblWidgetType.Attributes.Add("class", "input");

            var err = false;

            if (String.IsNullOrWhiteSpace(txtName.Value))
            {
                lblName.Attributes.Remove("class");
                lblName.Attributes.Add("class", "input state-error");
                var errorMessageDiv = new HtmlGenericControl("div");
                errorMessageDiv.Attributes.Add("class", "note note-error");
                errorMessageDiv.InnerText = "Widget Name is required";
                lblName.Controls.Add(errorMessageDiv);

                err = true;
            }
            else
            {
                var widgetName = txtName.Value.Trim();
                if (Regex.Matches(widgetName, @"[a-zA-Z ']").Count < widgetName.Length)
                {
                    lblName.Attributes.Remove("class");
                    lblName.Attributes.Add("class", "input state-error");
                    var errorMessageDiv = new HtmlGenericControl("div");
                    errorMessageDiv.Attributes.Add("class", "note note-error");
                    errorMessageDiv.InnerText = "Widget Name contains invalid characters (Enter A-Z, a-z, space)";
                    lblName.Controls.Add(errorMessageDiv);

                    err = true;
                }
            }
            if (ddlWidgetType.SelectedValue == "0")
            {
                lblWidgetType.Attributes.Remove("class");
                lblWidgetType.Attributes.Add("class", "input state-error");
                var errorMessageDiv = new HtmlGenericControl("div");
                errorMessageDiv.Attributes.Add("class", "note note-error");
                errorMessageDiv.InnerText = "Widget Type is required";
                lblWidgetType.Controls.Add(errorMessageDiv);

                err = true;
            }

            if (err)
            {
                return;
            }
            ;

            string url = string.Empty;

            if (_formMode == FormMode.AddMode)
            {
                var encodedName       = AntiXssEncoder.HtmlEncode(txtName.Value, false);
                var encodedDefinition = AntiXssEncoder.HtmlEncode(txtDefinition.Value, false);
                var content           = string.Empty;

                var widgetType  = UnitOfWork.Repository <MetaWidgetType>().Get(Convert.ToInt32(ddlWidgetType.SelectedValue));
                var widgetTypeE = (MetaWidgetTypes)widgetType.Id;

                switch (widgetTypeE)
                {
                case MetaWidgetTypes.General:
                    content = "** PLEASE ENTER YOUR CONTENT HERE **";
                    break;

                case MetaWidgetTypes.Wiki:
                case MetaWidgetTypes.ItemList:
                    content = GetBaseTemplate(widgetTypeE);
                    break;

                default:
                    break;
                }

                _metaWidget = new MetaWidget()
                {
                    Content          = content,
                    MetaPage         = _metaPage,
                    WidgetDefinition = encodedDefinition,
                    WidgetType       = widgetType,
                    WidgetLocation   = ddlWidgetStatus.SelectedValue == "1" ? (MetaWidgetLocation)Convert.ToInt32(ddlWidgetLocation.SelectedValue) : MetaWidgetLocation.Unassigned,
                    WidgetName       = encodedName,
                    WidgetStatus     = (MetaWidgetStatus)Convert.ToInt32(ddlWidgetStatus.SelectedValue),
                    Icon             = txtIcon.Value
                };
                UnitOfWork.Repository <MetaWidget>().Save(_metaWidget);
                url = "PageCustomWidget.aspx?id=" + _metaWidget.Id + "&action=F7E7BBE8-E28C-4837-B80E-AF3D06E6EBFF";
            }

            if (_formMode == FormMode.EditMode)
            {
                var content = string.Empty;

                var encodedName       = AntiXssEncoder.HtmlEncode(txtName.Value, false);
                var encodedDefinition = AntiXssEncoder.HtmlEncode(txtDefinition.Value, false);

                var widgetType  = UnitOfWork.Repository <MetaWidgetType>().Get(Convert.ToInt32(ddlWidgetType.SelectedValue));
                var widgetTypeE = (MetaWidgetTypes)widgetType.Id;

                switch (widgetTypeE)
                {
                case MetaWidgetTypes.General:
                    content = CKEditor1.Text;
                    break;

                case MetaWidgetTypes.Wiki:
                case MetaWidgetTypes.ItemList:
                    content = GetContentFromWidget(widgetTypeE);
                    break;

                default:
                    break;
                }

                _metaWidget.WidgetDefinition = encodedDefinition;
                _metaWidget.WidgetName       = encodedName;
                _metaWidget.WidgetType       = widgetType;
                _metaWidget.WidgetLocation   = ddlWidgetStatus.SelectedValue == "1" ? ddlWidgetLocation.SelectedValue != "0" ? (MetaWidgetLocation)Convert.ToInt32(ddlWidgetLocation.SelectedValue) : _metaWidget.WidgetLocation : MetaWidgetLocation.Unassigned;
                _metaWidget.WidgetStatus     = (MetaWidgetStatus)Convert.ToInt32(ddlWidgetStatus.SelectedValue);
                _metaWidget.Content          = content;
                _metaWidget.Icon             = txtIcon.Value;

                UnitOfWork.Repository <MetaWidget>().Update(_metaWidget);
                url = "PageViewer.aspx?guid=" + ((_metaPage == null) ? _metaWidget.MetaPage.metapage_guid.ToString() : _metaPage.metapage_guid.ToString());
            }

            UnitOfWork.Complete();

            HttpCookie cookie = new HttpCookie("PopUpMessage");

            cookie.Value = "Widget " + ((_formMode == FormMode.AddMode) ? "added" : "updated") + " successfully";
            Response.Cookies.Add(cookie);


            Response.Redirect(url);
        }
Пример #5
0
        protected void Page_Init(object sender, EventArgs e)
        {
            if (Request.QueryString["id"] != null)
            {
                _id = Convert.ToInt32(Request.QueryString["id"]);
                if (_id > 0)
                {
                    _metaWidget = UnitOfWork.Repository <MetaWidget>().Get(_id);

                    string action;
                    if (Request.QueryString["action"] != null)
                    {
                        action = Request.QueryString["action"];
                        switch (action)
                        {
                        case "35EF6F4A-1CF6-4F94-B92A-145AC57D1135":
                            _formMode = FormMode.EditMode;
                            Master.SetPageHeader(new Models.PageHeaderDetail()
                            {
                                Title = "Edit Widget", SubTitle = "", Icon = "fa fa-windows fa-fw"
                            });

                            break;
                        } // switch (_action)
                    }
                    else
                    {
                        throw new Exception("action not passed as parameter");
                    }
                }
                else
                {
                    _metaWidget = null;
                    _formMode   = FormMode.AddMode;
                    Master.SetPageHeader(new Models.PageHeaderDetail()
                    {
                        Title = "Add New Widget", SubTitle = "", Icon = "fa fa-windows fa-fw"
                    });

                    if (Request.QueryString["pid"] != null)
                    {
                        _pid = Convert.ToInt32(Request.QueryString["pid"]);
                        if (_pid > 0)
                        {
                            _metaPage = UnitOfWork.Repository <MetaPage>().Get(_pid);
                        }
                        else
                        {
                            throw new Exception("pid not passed as parameter");
                        }
                    }
                }
            }
            else
            {
                throw new Exception("id not passed as parameter");
            }

            LoadDropDownList();
            RenderButtons();
            RenderPage();
            if (_metaWidget != null)
            {
                RenderWidget();
            }
            ToggleView();
        }
Пример #6
0
        public async Task <IActionResult> CreateMetaWidget(long metaPageId,
                                                           [FromBody] MetaWidgetForCreationDto metaWidgetForCreation)
        {
            if (metaWidgetForCreation == null)
            {
                ModelState.AddModelError("Message", "Unable to locate payload for new request");
            }

            var metaPageFromRepo = await _metaPageRepository.GetAsync(f => f.Id == metaPageId);

            if (metaPageFromRepo == null)
            {
                return(NotFound());
            }

            if (Regex.Matches(metaWidgetForCreation.WidgetName, @"[a-zA-Z0-9 ]").Count < metaWidgetForCreation.WidgetName.Length)
            {
                ModelState.AddModelError("Message", "Widget name contains invalid characters (Enter A-Z, a-z, 0-9, space)");
            }

            if (Regex.Matches(metaWidgetForCreation.WidgetType, @"[a-zA-Z]").Count < metaWidgetForCreation.WidgetType.Length)
            {
                ModelState.AddModelError("Message", "Widget type contains invalid characters (Enter A-Z, a-z)");
            }

            if (!string.IsNullOrWhiteSpace(metaWidgetForCreation.WidgetDefinition))
            {
                if (Regex.Matches(metaWidgetForCreation.WidgetDefinition, @"[-a-zA-Z0-9 .,]").Count < metaWidgetForCreation.WidgetDefinition.Length)
                {
                    ModelState.AddModelError("Message", "Widget definition contains invalid characters (Enter A-Z, a-z, 0-9, space, hyphen, period, comma)");
                }
            }

            if (Regex.Matches(metaWidgetForCreation.Icon, @"[a-zA-Z_]").Count < metaWidgetForCreation.Icon.Length)
            {
                ModelState.AddModelError("Message", "Icon contains invalid characters (Enter A-Z, a-z, underscore)");
            }

            var metaWidgetTypeFromRepo = await _metaWidgetTypeRepository.GetAsync(f => f.Description == metaWidgetForCreation.WidgetType);

            if (metaWidgetTypeFromRepo == null)
            {
                ModelState.AddModelError("Message", "Unable to locate widget type");
            }

            if (_unitOfWork.Repository <MetaWidget>().Queryable().
                Where(l => l.MetaPage.Id == metaPageId && l.WidgetName == metaWidgetForCreation.WidgetName)
                .Count() > 0)
            {
                ModelState.AddModelError("Message", "Item with same name already exists");
            }

            if (ModelState.IsValid)
            {
                var widgetTypeE = (MetaWidgetTypes)metaWidgetTypeFromRepo.Id;
                var content     = string.Empty;

                switch (widgetTypeE)
                {
                case MetaWidgetTypes.General:
                    content = "** PLEASE ENTER YOUR CONTENT HERE **";
                    break;

                case MetaWidgetTypes.SubItem:
                case MetaWidgetTypes.ItemList:
                    content = GetBaseTemplate(widgetTypeE, metaPageId);
                    break;

                default:
                    break;
                }

                var newMetaWidget = new MetaWidget()
                {
                    Content          = content,
                    MetaPage         = metaPageFromRepo,
                    WidgetDefinition = metaWidgetForCreation.WidgetDefinition,
                    WidgetType       = metaWidgetTypeFromRepo,
                    WidgetLocation   = MetaWidgetLocation.Unassigned,
                    WidgetName       = metaWidgetForCreation.WidgetName,
                    WidgetStatus     = MetaWidgetStatus.Unpublished,
                    Icon             = metaWidgetForCreation.Icon
                };

                _metaWidgetRepository.Save(newMetaWidget);

                var mappedMetaWidget = await GetMetaWidgetAsync <MetaWidgetIdentifierDto>(metaPageId, newMetaWidget.Id);

                if (mappedMetaWidget == null)
                {
                    return(StatusCode(500, "Unable to locate newly added item"));
                }

                return(CreatedAtAction("GetMetaWidgetByIdentifier",
                                       new
                {
                    metaPageId,
                    id = mappedMetaWidget.Id
                }, CreateLinksForMetaWidget <MetaWidgetIdentifierDto>(metaPageId, mappedMetaWidget)));
            }

            return(BadRequest(ModelState));
        }
Пример #7
0
        private HtmlGenericControl PrepareArticleOutlineForWidget(MetaWidget metaWidget, int widgetCount)
        {
            var mainDiv = new HtmlGenericControl("div");

            mainDiv.Attributes.Add("class", "well");

            var widgetTypeE = (MetaWidgetTypes)metaWidget.WidgetType.Id;

            // Header
            if (widgetTypeE != MetaWidgetTypes.SubItem)
            {
                var header = new HtmlGenericControl("h2");
                header.InnerHtml = String.Format(@"<i class=""fa {0} text-muted""></i>&nbsp;&nbsp;{1}", metaWidget.Icon, metaWidget.WidgetName);
                mainDiv.Controls.Add(header);
            }

            // Content
            var contentDiv = new HtmlGenericControl("div");

            switch (widgetTypeE)
            {
            case MetaWidgetTypes.General:
                contentDiv.InnerHtml = metaWidget.Content;

                break;

            case MetaWidgetTypes.SubItem:
                var tableDiv = new HtmlGenericControl("table");
                tableDiv.Attributes.Add("class", "table table-striped table-forum");

                // Add header row
                var headerRowDiv = new HtmlGenericControl("thead");
                headerRowDiv.InnerHtml = String.Format(@"<tr><th class=""text-center"" style=""width: 40px; ""><i class=""fa {0} fa-2x text-muted""></i></th><th>{1} </th><th class=""text-center hidden-xs hidden-sm"" style=""width: 100px;"">Updated</th></tr>", metaWidget.Icon, metaWidget.WidgetName);
                tableDiv.Controls.Add(headerRowDiv);

                var bodyRowDiv = new HtmlGenericControl("tbody");

                // Create the XmlDocument
                XmlDocument wdoc = new XmlDocument();
                wdoc.LoadXml(metaWidget.Content);
                XmlNode wroot = wdoc.DocumentElement;

                // Loop through each listitem
                var witem = 0;
                foreach (XmlNode node in wroot.ChildNodes)
                {
                    witem += (widgetCount * 100) + 1;
                    var title       = node.ChildNodes[0].InnerText;
                    var subTitle    = node.ChildNodes[1].InnerText;
                    var contentPage = node.ChildNodes[2].InnerText;
                    var modified    = node.ChildNodes[3] != null ? node.ChildNodes[3].InnerText : DateTime.Today.ToString("yyyy-MM-dd");

                    if (!String.IsNullOrWhiteSpace(title))
                    {
                        bodyRowDiv.Controls.Add(PrepareWikiItemForArticle(title, subTitle, Convert.ToInt32(contentPage), modified, witem, ref contentDiv));
                    }
                }
                tableDiv.Controls.Add(bodyRowDiv);

                contentDiv.Controls.Add(tableDiv);

                break;

            case MetaWidgetTypes.ItemList:
                contentDiv.Attributes.Add("class", "panel-group smart-accordion-default");
                contentDiv.ID = "accordion-" + metaWidget.Id.ToString();

                // Create the XmlDocument
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(metaWidget.Content);
                XmlNode root = doc.DocumentElement;

                // Loop through each listitem
                var item = 0;
                foreach (XmlNode node in root.ChildNodes)
                {
                    item += (widgetCount * 100) + 1;
                    var title   = node.ChildNodes[0].InnerText;
                    var content = node.ChildNodes[1].InnerText;

                    contentDiv.Controls.Add(PrepareListItemForArticle(title, content, item, ref contentDiv, item == (widgetCount * 100) + 1));
                }

                break;

            default:
                break;
            }
            mainDiv.Controls.Add(contentDiv);

            return(mainDiv);
        }