示例#1
0
        private bool RedirectIfNeeded()
        {
            if (!UserCanViewZone())
            {
                if (!Request.IsAuthenticated)
                {
                    if (WebConfigSettings.UseRawUrlForCmsPageLoginRedirects)
                    {
                        SiteUtils.RedirectToLoginPage(this);
                    }
                    else
                    {
                        SiteUtils.RedirectToLoginPage(this, SiteUtils.GetCurrentZoneUrl());
                    }
                    return(true);
                }
                else
                {
                    SiteUtils.RedirectToAccessDeniedPage(this);
                    return(true);
                }
            }

            return(false);
        }
示例#2
0
        protected void btnUpdate_Click(object sender, EventArgs e)
        {
            SiteUser currentUser = SiteUtils.GetCurrentSiteUser();

            if (currentUser == null)
            {
                WebUtils.SetupRedirect(this, SiteUtils.GetCurrentZoneUrl());
                return;
            }

            DateTime?requestedUtc = news.ApprovedUtc;

            news.StateId          = WorkflowHelper.GetFirstWorkflowStateId(workflowId);
            news.ApprovedUserGuid = currentUser.UserGuid;
            news.ApprovedBy       = Context.User.Identity.Name.Trim();
            news.ApprovedUtc      = DateTime.UtcNow;
            news.RejectedNotes    = txtRejectionComments.Text.Trim();
            news.SaveState();

            if (!WebConfigSettings.DisableWorkflowNotification)
            {
                //SendRejectionNotification(
                //    SiteUtils.GetSmtpSettings(),
                //    siteSettings,
                //    requestedUtc,
                //    currentUser,
                //    txtRejectionComments.Text);

                string requestedDate = string.Empty;
                if (requestedUtc.HasValue)
                {
                    requestedDate = DateTimeHelper.GetLocalTimeString(requestedUtc, SiteUtils.GetUserTimeZone(), SiteUtils.GetUserTimeOffset());
                }

                WorkflowHelper.SendRejectionNotification(
                    workflowId,
                    news.UserEmail,
                    currentUser.Email,
                    "{Title}", news.Title,
                    "{RejectedDate}", requestedDate,
                    "{RejectionReason}", txtRejectionComments.Text,
                    "{RejectedBy}", currentUser.Name,
                    "{SiteName}", siteSettings.SiteName
                    );
            }

            SetupRedirect();
        }
示例#3
0
        public void BuildCustomFieldsXml(
            XmlDocument doc,
            XmlElement productXml,
            int productId,
            List <CustomField> customFields,
            List <ProductProperty> productProperties)
        {
            string pageUrl = SiteUtils.GetCurrentZoneUrl();

            foreach (CustomField field in customFields)
            {
                XmlElement groupXml = doc.CreateElement("ProductProperties");
                productXml.AppendChild(groupXml);

                XmlHelper.AddNode(doc, groupXml, "FieldId", field.CustomFieldId.ToString());
                XmlHelper.AddNode(doc, groupXml, "FieldType", field.FieldType.ToString());
                XmlHelper.AddNode(doc, groupXml, "DataType", field.DataType.ToString());
                XmlHelper.AddNode(doc, groupXml, "FilterType", field.FilterType.ToString());
                XmlHelper.AddNode(doc, groupXml, "Title", field.Name);

                foreach (ProductProperty property in productProperties)
                {
                    if (property.ProductId == productId && property.CustomFieldId == field.CustomFieldId)
                    {
                        XmlElement optionXml = doc.CreateElement("Options");
                        groupXml.AppendChild(optionXml);

                        XmlHelper.AddNode(doc, optionXml, "OptionId", property.CustomFieldOptionId.ToString());

                        if (property.CustomFieldOptionId > 0)
                        {
                            XmlHelper.AddNode(doc, optionXml, "Title", property.OptionName);
                        }
                        else
                        {
                            XmlHelper.AddNode(doc, optionXml, "Title", property.CustomValue);
                        }

                        XmlHelper.AddNode(doc, optionXml, "Url", ProductHelper.GetQueryStringFilter(pageUrl, field.FilterType, field.CustomFieldId,
                                                                                                    property.CustomFieldOptionId));
                    }
                }
            }
        }
示例#4
0
        public XmlDocument GetPageXml(int zoneId,
                                      int pageNumber,
                                      int pageSize,
                                      out int totalPages)
        {
            XmlDocument doc = new XmlDocument();

            doc.LoadXml("<NewsList></NewsList>");
            XmlElement root = doc.DocumentElement;

            XmlHelper.AddNode(doc, root, "ModuleTitle", this.moduleTitle);
            XmlHelper.AddNode(doc, root, "ZoneTitle", basePage.CurrentZone.Name);
            XmlHelper.AddNode(doc, root, "ZoneDescription", basePage.CurrentZone.Description);
            XmlHelper.AddNode(doc, root, "ViewMore", NewsResources.NewsMoreLinkText);
            XmlHelper.AddNode(doc, root, "SiteUrl", basePage.SiteRoot);        // add 2013-08-21 Hontam's project
            XmlHelper.AddNode(doc, root, "PageNumber", pageNumber.ToString()); // add 2014-10-25 RitaCorp's project
            if (module != null && module.ResourceFileDef.Length > 0 && module.ResourceKeyDef.Length > 0)
            {
                List <string> lstResourceKeys = module.ResourceKeyDef.SplitOnCharAndTrim(';');

                foreach (string item in lstResourceKeys)
                {
                    XmlHelper.AddNode(doc, root, item, ResourceHelper.GetResourceString(module.ResourceFileDef, item));
                }
            }

            int         languageId = WorkingCulture.LanguageId;
            List <News> lstNews    = new List <News>();

            if (basePage.ViewMode == PageViewMode.WorkInProgress &&
                WebConfigSettings.EnableContentWorkflow &&
                siteSettings.EnableContentWorkflow
                //&& userCanUpdate && basePage.UserCanAuthorizeZone(zoneId)
                )
            {
                Guid?userGuid = null;

                string stateIdList                     = string.Empty;
                int    workflowId                      = WorkflowHelper.GetWorkflowId(News.FeatureGuid);
                int    firstWorkflowStateId            = WorkflowHelper.GetFirstWorkflowStateId(workflowId);
                List <WorkflowState> lstWorkflowStates = WorkflowHelper.GetWorkflowStates(workflowId);
                foreach (WorkflowState wfState in lstWorkflowStates)
                {
                    if (WorkflowHelper.UserHasStatePermission(lstWorkflowStates, wfState.StateId))
                    {
                        if (wfState.StateId == firstWorkflowStateId)
                        {
                            userGuid = currentUser.UserGuid;
                        }
                        else
                        {
                            userGuid = null;
                        }

                        stateIdList += wfState.StateId + ";";
                    }
                }

                totalPages = 1;
                int totalRows = News.GetCountBySearch(siteSettings.SiteId, zoneId.ToString(), config.NewsType, -1, stateIdList, languageId, -1, -1, null, null, null, null, userGuid, string.Empty);

                if (pageSize > 0)
                {
                    totalPages = totalRows / pageSize;
                }

                if (totalRows <= pageSize)
                {
                    totalPages = 1;
                }
                else if (pageSize > 0)
                {
                    int remainder;
                    Math.DivRem(totalRows, pageSize, out remainder);
                    if (remainder > 0)
                    {
                        totalPages += 1;
                    }
                }

                lstNews = News.GetPageBySearch(siteSettings.SiteId, zoneId.ToString(), config.NewsType, -1, stateIdList, languageId, -1, -1, null, null, null, null, userGuid, string.Empty, pageNumber, pageSize);
            }
            else
            {
                if (config.ShowAllNews)
                {
                    string childZoneIds = NewsHelper.GetChildZoneIdToSemiColonSeparatedString(siteSettings.SiteId, zoneId);

                    totalPages = 1;
                    int totalRows = News.GetCountByListZone(siteSettings.SiteId, childZoneIds, config.NewsType, -1, languageId);

                    if (pageSize > 0)
                    {
                        totalPages = totalRows / pageSize;
                    }

                    if (totalRows <= pageSize)
                    {
                        totalPages = 1;
                    }
                    else if (pageSize > 0)
                    {
                        int remainder;
                        Math.DivRem(totalRows, pageSize, out remainder);
                        if (remainder > 0)
                        {
                            totalPages += 1;
                        }
                    }

                    lstNews = News.GetPageByListZone(siteSettings.SiteId, childZoneIds, config.NewsType, -1, languageId, pageNumber, pageSize);
                }
                else
                {
                    totalPages = 1;
                    int totalRows = News.GetCount(siteSettings.SiteId, zoneId, languageId, -1, -1);

                    if (pageSize > 0)
                    {
                        totalPages = totalRows / pageSize;
                    }

                    if (totalRows <= pageSize)
                    {
                        totalPages = 1;
                    }
                    else if (pageSize > 0)
                    {
                        int remainder;
                        Math.DivRem(totalRows, pageSize, out remainder);
                        if (remainder > 0)
                        {
                            totalPages += 1;
                        }
                    }

                    lstNews = News.GetPage(siteSettings.SiteId, zoneId, languageId, -1, -1, pageNumber, pageSize);
                }
            }

            int newsId = WebUtils.ParseInt32FromQueryString("NewsId", -1);

            foreach (News news in lstNews)
            {
                XmlElement newsXml = doc.CreateElement("News");
                root.AppendChild(newsXml);

                NewsHelper.BuildNewsDataXml(doc, newsXml, news, timeZone, timeOffset, NewsHelper.BuildEditLink(news, basePage, userCanUpdate, currentUser));

                XmlHelper.AddNode(doc, newsXml, "ApplyText", NewsResources.JobApplyLable);
                XmlHelper.AddNode(doc, newsXml, "ApplyUrl", this.SiteRoot + "/News/JobApplyDialog.aspx?zoneid=" + zoneId.ToString() + "&NewsID=" + news.NewsID.ToString());

                if (newsId > 0)
                {
                    if (news.NewsID == newsId)
                    {
                        XmlHelper.AddNode(doc, newsXml, "IsActive", "true");
                    }
                }

                if (config.ShowAllImagesInNewsList)
                {
                    BuildNewsImagesXml(doc, newsXml, news, languageId);
                }

                //2015-11-27
                if (config.ShowAttributesInNewsList)
                {
                    BuildNewsAttributesXml(doc, newsXml, news.NewsGuid, languageId);
                }
            }

            if (pageNumber < totalPages)
            {
                string pageUrl = SiteUtils.GetCurrentZoneUrl();

                if (pageUrl.Contains("?"))
                {
                    pageUrl += "&pagenumber=" + (pageNumber + 1).ToString();
                }
                else
                {
                    pageUrl += "?pagenumber=" + (pageNumber + 1).ToString();
                }

                XmlHelper.AddNode(doc, root, "NextPageUrl", pageUrl);
            }

            return(doc);
        }
示例#5
0
        protected void PopulateControls()
        {
            if (parametersAreInvalid)
            {
                pnlInnerWrap.Visible = false;
                return;
            }

            if (news.IsDeleted)
            {
                if (WebConfigSettings.Custom404Page.Length > 0)
                {
                    Server.Transfer(WebConfigSettings.Custom404Page);
                }
                else
                {
                    Server.Transfer("~/PageNotFound.aspx");
                }

                return;
            }

            if (news.IsPublished && news.EndDate < DateTime.UtcNow)
            {
                expired.Visible = true;
                //http://support.google.com/webmasters/bin/answer.py?hl=en&answer=40132
                // 410 means the resource is gone but once existed
                // google treats it as more permanent than a 404
                // and it should result in de-indexing the content
                Response.StatusCode        = 410;
                Response.StatusDescription = "Content Expired";
                if (
                    !NewsPermission.CanUpdate ||
                    !basePage.UserCanAuthorizeZone(news.ZoneID)
                    )
                {
                    pnlInnerWrap.Visible = false;
                    return;
                }
            }

            // if not published only the editor can see it
            if (!news.IsPublished)
            {
                bool stopRedirect = false;

                if (WebConfigSettings.EnableContentWorkflow && basePage.SiteInfo.EnableContentWorkflow)
                {
                    if (news.StateId.HasValue && WorkflowHelper.UserHasStatePermission(workflowId, news.StateId.Value))
                    {
                        stopRedirect = true;
                    }
                }
                else
                {
                    if (
                        (currentUser != null && currentUser.UserGuid == news.UserGuid) ||
                        (NewsPermission.CanUpdate && basePage.UserCanAuthorizeZone(news.ZoneID))
                        )
                    {
                        stopRedirect = true;
                    }
                }

                if (!stopRedirect)
                {
                    pnlInnerWrap.Visible = false;
                    WebUtils.SetupRedirect(this, SiteUtils.GetCurrentZoneUrl());
                    return;
                }
            }

            SetupMetaTags();

            XmlDocument doc = new XmlDocument();

            doc.LoadXml("<NewsDetail></NewsDetail>");
            XmlElement root = doc.DocumentElement;

            //XmlHelper.AddNode(doc, root, "ModuleTitle", module.ModuleTitle);
            XmlHelper.AddNode(doc, root, "ZoneTitle", basePage.CurrentZone.Name);
            XmlHelper.AddNode(doc, root, "ZoneDescription", basePage.CurrentZone.Description);
            XmlHelper.AddNode(doc, root, "ViewMore", NewsResources.NewsMoreLinkText);
            XmlHelper.AddNode(doc, root, "Title", news.Title);
            XmlHelper.AddNode(doc, root, "SubTitle", news.SubTitle);
            XmlHelper.AddNode(doc, root, "ZoneUrl", SiteUtils.GetCurrentZoneUrl());

            if (module.ResourceFileDef.Length > 0 && module.ResourceKeyDef.Length > 0)
            {
                List <string> lstResourceKeys = module.ResourceKeyDef.SplitOnCharAndTrim(';');

                foreach (string item in lstResourceKeys)
                {
                    XmlHelper.AddNode(doc, root, item, ResourceHelper.GetResourceString(module.ResourceFileDef, item));
                }
            }

            XmlHelper.AddNode(doc, root, "EditLink", NewsHelper.BuildEditLink(news, basePage, userCanUpdate, currentUser));

            //XmlHelper.AddNode(doc, root, "ViewCVLink", GetCVListLink(news.NewsID, news.CommentCount, NewsPermission.CanManageComment));
            XmlHelper.AddNode(doc, root, "ApplyText", NewsResources.JobApplyLable);
            XmlHelper.AddNode(doc, root, "ApplyUrl", this.siteRoot + "/News/JobApplyDialog.aspx?zoneid=" + zoneId.ToString() + "&NewsID=" + newsId.ToString());

            XmlHelper.AddNode(doc, root, "ShowOption", news.ShowOption.ToString());

            XmlHelper.AddNode(doc, root, "CreatedDate", FormatDate(news.StartDate, NewsResources.NewsDateFormat));
            XmlHelper.AddNode(doc, root, "CreatedTime", FormatDate(news.StartDate, NewsResources.NewsTimeFormat));
            XmlHelper.AddNode(doc, root, "CreatedDD", FormatDate(news.StartDate, "dd"));
            XmlHelper.AddNode(doc, root, "CreatedYY", FormatDate(news.StartDate, "yy"));
            XmlHelper.AddNode(doc, root, "CreatedYYYY", FormatDate(news.StartDate, "yyyy"));
            XmlHelper.AddNode(doc, root, "CreatedMM", FormatDate(news.StartDate, "MM"));
            if (WorkingCulture.DefaultName.ToLower() == "vi-vn")
            {
                string monthVI = "Tháng " + FormatDate(news.StartDate, "MM");
                XmlHelper.AddNode(doc, root, "CreatedMMM", monthVI);
                XmlHelper.AddNode(doc, root, "CreatedMMMM", monthVI);
            }
            else
            {
                XmlHelper.AddNode(doc, root, "CreatedMMM", FormatDate(news.StartDate, "MMM"));
                XmlHelper.AddNode(doc, root, "CreatedMMMM", FormatDate(news.StartDate, "MMMM"));
            }

            XmlHelper.AddNode(doc, root, "Code", news.Code);
            XmlHelper.AddNode(doc, root, "BriefContent", news.BriefContent);
            XmlHelper.AddNode(doc, root, "FullContent", news.FullContent);
            XmlHelper.AddNode(doc, root, "ViewCount", news.Viewed.ToString());
            XmlHelper.AddNode(doc, root, "FileUrl", news.FileAttachment);

            if (displaySettings.ShowNextPreviousLink)
            {
                BuildNextPreviousXml(doc, root);
            }

            XmlHelper.AddNode(doc, root, "FacebookLike", RenderFacebookLike());
            XmlHelper.AddNode(doc, root, "PlusOne", RenderPlusOne());
            XmlHelper.AddNode(doc, root, "TweetThis", RenderTweetThis());
            XmlHelper.AddNode(doc, root, "Print", RenderPrinter());
            XmlHelper.AddNode(doc, root, "Email", RenderEmailSubject());
            XmlHelper.AddNode(doc, root, "FullUrl", NewsHelper.FormatNewsUrl(news.Url, news.NewsID, news.ZoneID));

            if (displaySettings.ShowAttribute)
            {
                BuildNewsAttributesXml(doc, root, languageId);
            }

            BuildNewsImagesXml(doc, root);

            #region Start news other

            BuildNewsOtherXml(doc, root, zoneId, pageNumber, config.RelatedItemsToShow, out totalPages);
            if (NewsHelper.IsAjaxRequest(Request) && WebUtils.ParseBoolFromQueryString("isajax", false))
            {
                Response.Write(XmlHelper.TransformXML(SiteUtils.GetXsltBasePath("news", config.XsltFileNameDetailPage), doc));
                Response.End();
                return;
            }

            string pageUrlLeaveOutPageNumber = NewsHelper.FormatNewsUrl(news.Url, news.NewsID, news.ZoneID);

            if (config.HidePaginationOnDetailPage)
            {
                divPager.Visible = false;
            }
            else
            {
                string pageUrl = pageUrlLeaveOutPageNumber;
                if (WebUtils.ParseInt32FromQueryString("NewsId", -1) == -1 && config.LoadFirstItem)
                {
                    pageUrl = SiteUtils.GetCurrentZoneUrl();
                }

                if (pageUrl.Contains("?"))
                {
                    pageUrl += "&amp;pagenumber={0}";
                }
                else
                {
                    pageUrl += "?pagenumber={0}";
                }
                pgr.PageURLFormat = pageUrl;
                pgr.ShowFirstLast = true;
                pgr.PageSize      = config.PageSize;
                pgr.PageCount     = totalPages;
                pgr.CurrentIndex  = pageNumber;
                divPager.Visible  = (totalPages > 1);
            }

            if (WebUtils.ParseInt32FromQueryString("pagenumber", -1) == 1)
            {
                basePage.AdditionalMetaMarkup += "\n<link rel=\"canonical\" href=\"" + pageUrlLeaveOutPageNumber + "\" />";
            }

            #endregion

            XmlHelper.XMLTransform(xmlTransformer, SiteUtils.GetXsltBasePath("news", config.XsltFileNameDetailPage), doc);

            News.IncrementViewedCount(news.NewsID);
        }
示例#6
0
        public void BuildNewsOtherXml(
            XmlDocument doc,
            XmlElement root,
            int zoneId,
            int pageNumber,
            int pageSize,
            out int totalPages)
        {
            XmlHelper.AddNode(doc, root, "NewsOtherText", NewsResources.OtherNewsLabel);
            XmlHelper.AddNode(doc, root, "ProductOtherText", NewsResources.OtherProductLabel);
            XmlHelper.AddNode(doc, root, "ProjectOtherText", NewsResources.OtherProjectLabel);

            List <News> lstNews = new List <News>();

            if (pageSize < 0)
            {
                pageSize   = -pageSize;
                totalPages = 1;
                int totalRows = News.GetCount(basePage.SiteId, zoneId, languageId, -1, -1);

                if (pageSize > 0)
                {
                    totalPages = totalRows / pageSize;
                }

                if (totalRows <= pageSize)
                {
                    totalPages = 1;
                }
                else if (pageSize > 0)
                {
                    int remainder;
                    Math.DivRem(totalRows, pageSize, out remainder);
                    if (remainder > 0)
                    {
                        totalPages += 1;
                    }
                }

                lstNews = News.GetPage(basePage.SiteId, zoneId, languageId, -1, -1, pageNumber, pageSize);
            }
            else
            {
                lstNews = News.GetPageNewsOther(zoneId, news.NewsID, languageId, config.NewsType, pageNumber, pageSize, out totalPages);
            }

            foreach (News news in lstNews)
            {
                XmlElement newsXml = doc.CreateElement("NewsOther");
                root.AppendChild(newsXml);

                NewsHelper.BuildNewsDataXml(doc, newsXml, news, timeZone, timeOffset, NewsHelper.BuildEditLink(news, basePage, userCanUpdate, currentUser));

                if (news.NewsID == newsId)
                {
                    XmlHelper.AddNode(doc, newsXml, "IsActive", "true");
                }
            }

            if (pageNumber < totalPages)
            {
                string pageUrl = NewsHelper.FormatNewsUrl(news.Url, news.NewsID, news.ZoneID);

                int iNewsId = WebUtils.ParseInt32FromQueryString("NewsId", -1);
                if (iNewsId == -1 && config.LoadFirstItem)
                {
                    pageUrl = SiteUtils.GetCurrentZoneUrl();
                }

                if (pageUrl.Contains("?"))
                {
                    pageUrl += "&pagenumber=" + (pageNumber + 1).ToString();
                }
                else
                {
                    pageUrl += "?pagenumber=" + (pageNumber + 1).ToString();
                }

                XmlHelper.AddNode(doc, root, "NextPageUrl", pageUrl);
            }
        }
示例#7
0
        private XmlDocument GetPageXml(int zoneId,
                                       int pageNumber,
                                       int pageSize,
                                       out int totalPages)
        {
            XmlDocument doc = new XmlDocument();

            doc.LoadXml("<ProductList></ProductList>");
            XmlElement root = doc.DocumentElement;

            XmlHelper.AddNode(doc, root, "ModuleTitle", this.moduleTitle);
            XmlHelper.AddNode(doc, root, "ZoneTitle", basePage.CurrentZone.Name);
            XmlHelper.AddNode(doc, root, "ZoneDescription", basePage.CurrentZone.Description);
            XmlHelper.AddNode(doc, root, "ViewMore", ProductResources.ViewMoreLabel);
            XmlHelper.AddNode(doc, root, "SiteUrl", siteRoot);
            XmlHelper.AddNode(doc, root, "ZoneUrl", SiteUtils.GetCurrentZoneUrl());

            if (module != null && module.ResourceFileDef.Length > 0 && module.ResourceKeyDef.Length > 0)
            {
                List <string> lstResourceKeys = module.ResourceKeyDef.SplitOnCharAndTrim(';');

                foreach (string item in lstResourceKeys)
                {
                    XmlHelper.AddNode(doc, root, item, ResourceHelper.GetResourceString(module.ResourceFileDef, item));
                }
            }

            //Render view mode
            BuildViewModeXml(doc, root);

            //Render sort mode
            BuildSortModeXml(doc, root);

            int            languageId  = WorkingCulture.LanguageId;
            List <Product> lstProducts = new List <Product>();

            string             propertyCondition = string.Empty;
            string             andClause         = " ";
            int                numberGroup       = 0;
            List <CustomField> lstCustomFields   = CustomFieldHelper.GetCustomFieldsFromContext(siteSettings.SiteId, Product.FeatureGuid,
                                                                                                basePage.CurrentZone.ZoneGuid, languageId);

            foreach (CustomField field in lstCustomFields)
            {
                if (
                    field.DataType == (int)CustomFieldDataType.CheckBox ||
                    field.DataType == (int)CustomFieldDataType.SelectBox
                    )
                {
                    if (field.FilterType == (int)CustomFieldFilterType.ByValue)
                    {
                        string paramName   = ProductHelper.QueryStringFilterSingleParam + field.CustomFieldId.ToString();
                        int    optionValue = WebUtils.ParseInt32FromQueryString(paramName, -1);

                        if (optionValue > 0)
                        {
                            propertyCondition += andClause + "(CustomFieldID=" + field.CustomFieldId + " AND CustomFieldOptionID=" +
                                                 optionValue.ToString() + ")";
                            andClause    = " OR ";
                            numberGroup += 1;
                        }
                    }
                    else
                    {
                        string paramName    = ProductHelper.QueryStringFilterMultiParam + field.CustomFieldId.ToString();
                        string optionValues = WebUtils.ParseStringFromQueryString(paramName, string.Empty);

                        // Split and validate data
                        List <int> lstValues = new List <int>();
                        optionValues.SplitOnCharAndTrim('/').ForEach(s => {
                            int value = -1;
                            if (int.TryParse(s, out value))
                            {
                                lstValues.Add(value);
                            }
                        });
                        if (lstValues.Count > 0)
                        {
                            propertyCondition += andClause + "(CustomFieldID=" + field.CustomFieldId + " AND CustomFieldOptionID IN (" + string.Join(",",
                                                                                                                                                     lstValues.ToArray()) + "))";
                            andClause    = " OR ";
                            numberGroup += 1;
                        }
                    }
                }
            }

            if (numberGroup > 0)
            {
                propertyCondition = "(SELECT COUNT(DISTINCT CustomFieldID) FROM gb_ProductProperties WHERE ProductID=p.ProductID AND (" +
                                    propertyCondition + ")) = " + numberGroup.ToString();
            }

            string keyword = null;

            if (config.EnableKeywordFiltering)
            {
                keyword = WebUtils.ParseStringFromQueryString(ProductHelper.QueryStringKeywordParam, null);
            }

            int     sort = WebUtils.ParseInt32FromQueryString(ProductHelper.QueryStringSortModeParam, 0);
            decimal?priceMin;
            decimal?priceMax;

            ProductHelper.GetPriceFromQueryString(out priceMin, out priceMax);

            int totalRows = 0;

            if (numberGroup > 0 ||
                priceMin != null ||
                priceMax != null ||
                sort > 0 ||
                !string.IsNullOrEmpty(keyword)
                )
            {
                string rangeZoneIds = null;
                if (ProductConfiguration.FilterProductByTopLevelParentZones)
                {
                    var topLevelNode = SiteUtils.GetTopLevelParentNode(SiteUtils.GetSiteMapNodeByZoneId(zoneId));
                    if (topLevelNode != null)
                    {
                        rangeZoneIds = ProductHelper.GetRangeZoneIdsToSemiColonSeparatedString(siteSettings.SiteId, topLevelNode.ZoneId);
                    }
                }
                else
                {
                    if (config.ZoneIds.Length == 0)
                    {
                        rangeZoneIds = ProductHelper.GetRangeZoneIdsToSemiColonSeparatedString(siteSettings.SiteId, zoneId);
                    }
                    else
                    {
                        rangeZoneIds = config.ZoneIds;
                    }
                }

                totalRows = Product.GetCountBySearch(siteSettings.SiteId, rangeZoneIds, 1, languageId, -1, -1, priceMin, priceMax, -1, -1,
                                                     propertyCondition, null, keyword);

                if (pageSize == -1)
                {
                    pageSize = totalRows;
                }

                totalPages  = CaculateTotalPages(pageSize, totalRows);
                lstProducts = Product.GetPageBySearch(pageNumber, pageSize, siteSettings.SiteId, rangeZoneIds, 1, languageId, -1, -1,
                                                      priceMin, priceMax, -1, -1, propertyCondition, null, keyword, false, null, sort);
            }
            else
            {
                if (config.ZoneIds.Length == 0)
                {
                    if (config.ShowAllProducts)
                    {
                        string rangeZoneIds = ProductHelper.GetRangeZoneIdsToSemiColonSeparatedString(siteSettings.SiteId, zoneId);
                        totalRows = Product.GetCountByListZone(siteSettings.SiteId, rangeZoneIds, languageId, -1);

                        if (pageSize == -1)
                        {
                            pageSize = totalRows;
                        }

                        totalPages  = CaculateTotalPages(pageSize, totalRows);
                        lstProducts = Product.GetPageByListZone(siteSettings.SiteId, rangeZoneIds, languageId, -1, pageNumber, pageSize);
                    }
                    else
                    {
                        totalRows = Product.GetCount(siteSettings.SiteId, zoneId, languageId, -1);

                        if (pageSize == -1)
                        {
                            pageSize = totalRows;
                        }

                        totalPages  = CaculateTotalPages(pageSize, totalRows);
                        lstProducts = Product.GetPage(siteSettings.SiteId, zoneId, languageId, -1, pageNumber, pageSize);
                    }
                }
                else
                {
                    totalRows = Product.GetCountByListZone(siteSettings.SiteId, config.ZoneIds, languageId, -1);

                    if (pageSize == -1)
                    {
                        pageSize = totalRows;
                    }

                    totalPages  = CaculateTotalPages(pageSize, totalRows);
                    lstProducts = Product.GetPageByListZone(siteSettings.SiteId, config.ZoneIds, languageId, -1, pageNumber, pageSize);
                }
            }

            XmlHelper.AddNode(doc, root, "TotalProducts", totalRows.ToString());
            BuildPageSizeXml(doc, root);

            List <int> productIds = new List <int>();

            if (ProductConfiguration.EnableComparing)
            {
                productIds = ProductHelper.GetCompareProductsIds();

                XmlHelper.AddNode(doc, root, "CompareProductsCount", productIds.Count.ToString());
                XmlHelper.AddNode(doc, root, "CompareListUrl", siteRoot + "/Product/Compare.aspx");

                List <Product> compareProducts = ProductHelper.GetCompareProducts();
                foreach (Product product in compareProducts)
                {
                    XmlElement productXml = doc.CreateElement("Compared");
                    root.AppendChild(productXml);

                    ProductHelper.BuildProductDataXml(doc, productXml, product, timeZone, timeOffset, ProductHelper.BuildEditLink(product,
                                                                                                                                  basePage, userCanUpdate, currentUser));
                }
            }

            List <ProductProperty> productProperties = new List <ProductProperty>();
            List <CustomField>     customFields      = new List <CustomField>();

            if (config.ShowCustomFieldsInProductList)
            {
                List <int> lstProductIds = new List <int>();
                foreach (Product product in lstProducts)
                {
                    lstProductIds.Add(product.ProductId);
                }

                if (lstProductIds.Count > 0)
                {
                    productProperties = ProductProperty.GetPropertiesByProducts(lstProductIds);
                }

                if (productProperties.Count > 0)
                {
                    var customFieldIds = new List <int>();

                    foreach (var property in productProperties)
                    {
                        if (!customFieldIds.Contains(property.CustomFieldId))
                        {
                            customFieldIds.Add(property.CustomFieldId);
                        }
                    }

                    var tmp = CustomField.GetActiveByFields(basePage.SiteId, Product.FeatureGuid, customFieldIds, languageId);
                    customFields = CustomField.GetByOption(tmp, CustomFieldOptions.ShowInCatalogPages);
                }
            }

            foreach (Product product in lstProducts)
            {
                XmlElement productXml = doc.CreateElement("Product");
                root.AppendChild(productXml);

                ProductHelper.BuildProductDataXml(doc, productXml, product, timeZone, timeOffset, ProductHelper.BuildEditLink(product,
                                                                                                                              basePage, userCanUpdate, currentUser), productIds);

                if (config.ShowCustomFieldsInProductList)
                {
                    BuildCustomFieldsXml(doc, productXml, product.ProductId, customFields, productProperties);
                }
            }

            if (pageNumber < totalPages)
            {
                string pageUrl = ProductHelper.BuildFilterUrlLeaveOutPageNumber(Request.RawUrl);

                if (pageUrl.Contains("?"))
                {
                    pageUrl += "&" + ProductHelper.QueryStringPageNumberParam + "=" + (pageNumber + 1).ToString();
                }
                else
                {
                    pageUrl += "?" + ProductHelper.QueryStringPageNumberParam + "=" + (pageNumber + 1).ToString();
                }

                XmlHelper.AddNode(doc, root, "NextPageUrl", pageUrl);
            }

            return(doc);
        }
示例#8
0
        protected void PopulateControls()
        {
            if (parametersAreInvalid)
            {
                pnlInnerWrap.Visible = false;
                return;
            }

            if (product.IsDeleted)
            {
                if (WebConfigSettings.Custom404Page.Length > 0)
                {
                    Server.Transfer(WebConfigSettings.Custom404Page);
                }
                else
                {
                    Server.Transfer("~/PageNotFound.aspx");
                }

                return;
            }

            if (product.IsPublished && product.EndDate < DateTime.UtcNow)
            {
                expired.Visible = true;
                //http://support.google.com/webmasters/bin/answer.py?hl=en&answer=40132
                // 410 means the resource is gone but once existed
                // google treats it as more permanent than a 404
                // and it should result in de-indexing the content
                Response.StatusCode        = 410;
                Response.StatusDescription = "Content Expired";
                if (
                    !ProductPermission.CanUpdate ||
                    !basePage.UserCanAuthorizeZone(product.ZoneId)
                    )
                {
                    pnlInnerWrap.Visible = false;
                    return;
                }
            }

            // if not published only the editor can see it
            if ((!product.IsPublished) || (product.StartDate > DateTime.UtcNow))
            {
                bool stopRedirect = false;
                if (
                    (currentUser != null && currentUser.UserGuid == product.UserGuid) ||
                    ((ProductPermission.CanViewList || ProductPermission.CanUpdate) && basePage.UserCanAuthorizeZone(product.ZoneId))
                    )
                {
                    stopRedirect = true;
                }

                if (!stopRedirect)
                {
                    pnlInnerWrap.Visible = false;
                    WebUtils.SetupRedirect(this, SiteUtils.GetCurrentZoneUrl());
                    return;
                }
            }

            SetupMetaTags();

            XmlDocument doc = new XmlDocument();

            doc.LoadXml("<ProductDetail></ProductDetail>");
            XmlElement root = doc.DocumentElement;

            XmlHelper.AddNode(doc, root, "ZoneTitle", basePage.CurrentZone.Name);
            XmlHelper.AddNode(doc, root, "Title", product.Title);
            XmlHelper.AddNode(doc, root, "SubTitle", product.SubTitle);
            XmlHelper.AddNode(doc, root, "ZoneUrl", SiteUtils.GetCurrentZoneUrl());

            if (module.ResourceFileDef.Length > 0 && module.ResourceKeyDef.Length > 0)
            {
                List <string> lstResourceKeys = module.ResourceKeyDef.SplitOnCharAndTrim(';');

                foreach (string item in lstResourceKeys)
                {
                    XmlHelper.AddNode(doc, root, item, ResourceHelper.GetResourceString(module.ResourceFileDef, item));
                }
            }

            XmlHelper.AddNode(doc, root, "EditLink", ProductHelper.BuildEditLink(product, basePage, userCanUpdate, currentUser));

            XmlHelper.AddNode(doc, root, "ProductId", product.ProductId.ToString());
            XmlHelper.AddNode(doc, root, "ShowOption", product.ShowOption.ToString());
            XmlHelper.AddNode(doc, root, "ProductType", product.ProductType.ToString());

            XmlHelper.AddNode(doc, root, "Code", product.Code);
            if (product.Price > 0)
            {
                XmlHelper.AddNode(doc, root, "Price", ProductHelper.FormatPrice(product.Price, true));
            }
            if (product.OldPrice > 0)
            {
                XmlHelper.AddNode(doc, root, "OldPrice", ProductHelper.FormatPrice(product.OldPrice, true));
            }

            XmlHelper.AddNode(doc, root, "CreatedDate", ProductHelper.FormatDate(product.StartDate, timeZone, timeOffset,
                                                                                 ProductResources.ProductDateFormat));
            XmlHelper.AddNode(doc, root, "CreatedTime", ProductHelper.FormatDate(product.StartDate, timeZone, timeOffset,
                                                                                 ProductResources.ProductTimeFormat));
            XmlHelper.AddNode(doc, root, "CreatedDD", ProductHelper.FormatDate(product.StartDate, timeZone, timeOffset, "dd"));
            XmlHelper.AddNode(doc, root, "CreatedYY", ProductHelper.FormatDate(product.StartDate, timeZone, timeOffset, "yy"));
            XmlHelper.AddNode(doc, root, "CreatedYYYY", ProductHelper.FormatDate(product.StartDate, timeZone, timeOffset, "yyyy"));
            XmlHelper.AddNode(doc, root, "CreatedMM", ProductHelper.FormatDate(product.StartDate, timeZone, timeOffset, "MM"));
            if (WorkingCulture.DefaultName.ToLower() == "vi-vn")
            {
                string monthVI = "Tháng " + ProductHelper.FormatDate(product.StartDate, timeZone, timeOffset, "MM");
                XmlHelper.AddNode(doc, root, "CreatedMMM", monthVI);
                XmlHelper.AddNode(doc, root, "CreatedMMMM", monthVI);
            }
            else
            {
                XmlHelper.AddNode(doc, root, "CreatedMMM", ProductHelper.FormatDate(product.StartDate, timeZone, timeOffset, "MMM"));
                XmlHelper.AddNode(doc, root, "CreatedMMMM", ProductHelper.FormatDate(product.StartDate, timeZone, timeOffset, "MMMM"));
            }

            XmlHelper.AddNode(doc, root, "Code", product.Code);
            XmlHelper.AddNode(doc, root, "BriefContent", product.BriefContent);
            XmlHelper.AddNode(doc, root, "FullContent", product.FullContent);
            XmlHelper.AddNode(doc, root, "ViewCount", product.ViewCount.ToString());
            XmlHelper.AddNode(doc, root, "FileUrl", product.FileAttachment);

            if (
                displaySettings.ShowNextPreviousLink &&
                !config.LoadFirstProduct
                )
            {
                BuildNextPreviousXml(doc, root);
            }

            string pageUrl = ProductHelper.FormatProductUrl(product.Url, product.ProductId, product.ZoneId);

            XmlHelper.AddNode(doc, root, "FacebookLike", RenderFacebookLike());
            XmlHelper.AddNode(doc, root, "PlusOne", RenderPlusOne());
            XmlHelper.AddNode(doc, root, "TweetThis", RenderTweetThis());
            XmlHelper.AddNode(doc, root, "Print", RenderPrinter());
            //XmlHelper.AddNode(doc, root, "Email", RenderEmailSubject());
            XmlHelper.AddNode(doc, root, "FullUrl", pageUrl);

            BuildProductRelatedXml(doc, root, languageId);

            if (ProductConfiguration.EnableComparing)
            {
                XmlHelper.AddNode(doc, root, "CompareListUrl", siteRoot + "/Product/Compare.aspx");
            }

            if (displaySettings.ShowAttribute)
            {
                BuildProductAttributesXml(doc, root, languageId);
            }

            BuildProductPropertiesXml(doc, root, languageId);
            BuildProductMediaXml(doc, root);
            BuildProductOtherXml(doc, root, zoneId, pageNumber, config.OtherProductsPerPage, out totalPages);

            if (config.LoadFirstProduct)
            {
                pageUrl = SiteUtils.GetCurrentZoneUrl();
            }

            if (pageUrl.Contains("?"))
            {
                pageUrl += "&amp;pagenumber={0}";
            }
            else
            {
                pageUrl += "?pagenumber={0}";
            }

            pgr.PageURLFormat = pageUrl;
            pgr.ShowFirstLast = true;
            pgr.PageSize      = config.OtherProductsPerPage;
            pgr.PageCount     = totalPages;
            pgr.CurrentIndex  = pageNumber;
            divPager.Visible  = (totalPages > 1);

            XmlHelper.XMLTransform(xmlTransformer, SiteUtils.GetXsltBasePath("product", config.XsltFileNameDetailPage), doc);

            if (Page.Header == null)
            {
                return;
            }

            string canonicalUrl = ProductHelper.FormatProductUrl(product.Url, product.ProductId, product.ZoneId);

            if (SiteUtils.IsSecureRequest() && (!basePage.CurrentPage.RequireSsl) && (!basePage.SiteInfo.UseSslOnAllPages))
            {
                if (WebConfigSettings.ForceHttpForCanonicalUrlsThatDontRequireSsl)
                {
                    canonicalUrl = canonicalUrl.Replace("https:", "http:");
                }
            }

            //LoadWorkflow();

            //Literal link = new Literal();
            //link.ID = "newsurl";
            //link.Text = "\n<link rel='canonical' href='" + canonicalUrl + "' />";

            //Page.Header.Controls.Add(link);

            Product.IncrementViewCount(product.ProductId);
        }
示例#9
0
        public void BuildProductPropertiesXml(
            XmlDocument doc,
            XmlElement root,
            int languageId)
        {
            var productProperties = ProductProperty.GetPropertiesByProduct(product.ProductId);

            if (productProperties.Count > 0)
            {
                var customFields   = new List <CustomField>();
                var customFieldIds = new List <int>();

                foreach (var property in productProperties)
                {
                    if (!customFieldIds.Contains(property.CustomFieldId))
                    {
                        customFieldIds.Add(property.CustomFieldId);
                    }
                }

                var tmp = CustomField.GetActiveByFields(basePage.SiteId, Product.FeatureGuid, customFieldIds, languageId);
                customFields = CustomField.GetByOption(tmp, CustomFieldOptions.ShowInProductDetailsPage);

                foreach (CustomField field in customFields)
                {
                    XmlElement groupXml = doc.CreateElement("ProductProperties");
                    root.AppendChild(groupXml);

                    XmlHelper.AddNode(doc, groupXml, "FieldId", field.CustomFieldId.ToString());
                    XmlHelper.AddNode(doc, groupXml, "FieldType", field.FieldType.ToString());
                    XmlHelper.AddNode(doc, groupXml, "DataType", field.DataType.ToString());
                    XmlHelper.AddNode(doc, groupXml, "FilterType", field.FilterType.ToString());
                    XmlHelper.AddNode(doc, groupXml, "Title", field.Name);

                    foreach (ProductProperty property in productProperties)
                    {
                        if (property.ProductId == product.ProductId && property.CustomFieldId == field.CustomFieldId)
                        {
                            XmlElement optionXml = doc.CreateElement("Options");
                            groupXml.AppendChild(optionXml);

                            XmlHelper.AddNode(doc, optionXml, "FieldId", field.CustomFieldId.ToString());
                            XmlHelper.AddNode(doc, optionXml, "OptionId", property.CustomFieldOptionId.ToString());

                            if (property.CustomFieldOptionId > 0)
                            {
                                XmlHelper.AddNode(doc, optionXml, "Title", property.OptionName);
                                XmlHelper.AddNode(doc, optionXml, "Color", property.OptionColor); //TODO: not yet implemented
                                XmlHelper.AddNode(doc, optionXml, "Price", ProductHelper.FormatPrice(product.Price + property.OverriddenPrice, true));
                                XmlHelper.AddNode(doc, optionXml, "PriceAdjustment", ProductHelper.FormatPrice(property.OverriddenPrice, true));
                            }
                            else
                            {
                                XmlHelper.AddNode(doc, optionXml, "Title", property.CustomValue);
                            }

                            string pageUrl = SiteUtils.GetCurrentZoneUrl();
                            XmlHelper.AddNode(doc, optionXml, "Url", ProductHelper.GetQueryStringFilter(pageUrl, field.FilterType, field.CustomFieldId,
                                                                                                        property.CustomFieldOptionId));
                        }
                    }
                }
            }
        }
示例#10
0
        public void BuildProductOtherXml(
            XmlDocument doc,
            XmlElement root,
            int zoneId,
            int pageNumber,
            int pageSize,
            out int totalPages)
        {
            XmlHelper.AddNode(doc, root, "ProductOtherText", ProductResources.OtherProductLabel);

            int siteId = CacheHelper.GetCurrentSiteSettings().SiteId;

            List <Product> lstProducts = new List <Product>();

            if (pageSize < 0)
            {
                pageSize   = -pageSize;
                totalPages = 1;
                int totalRows = Product.GetCount(basePage.SiteId, zoneId, languageId, -1);

                if (pageSize > 0)
                {
                    totalPages = totalRows / pageSize;
                }

                if (totalRows <= pageSize)
                {
                    totalPages = 1;
                }
                else if (pageSize > 0)
                {
                    int remainder;
                    Math.DivRem(totalRows, pageSize, out remainder);
                    if (remainder > 0)
                    {
                        totalPages += 1;
                    }
                }

                lstProducts = Product.GetPage(siteId, zoneId, languageId, -1, pageNumber, pageSize);
            }
            else
            {
                lstProducts = Product.GetPageProductOther(zoneId, product.ProductId, languageId, pageNumber, pageSize, out totalPages);
            }

            foreach (Product productOther in lstProducts)
            {
                XmlElement productXml = doc.CreateElement("ProductOther");
                root.AppendChild(productXml);

                ProductHelper.BuildProductDataXml(doc, productXml, productOther, timeZone, timeOffset,
                                                  ProductHelper.BuildEditLink(productOther, basePage, userCanUpdate, currentUser));

                if (productOther.ProductId == productId)
                {
                    XmlHelper.AddNode(doc, productXml, "IsActive", "true");
                }
                else
                {
                    XmlHelper.AddNode(doc, productXml, "IsActive", "false");
                }
            }

            if (pageNumber < totalPages)
            {
                string pageUrl = ProductHelper.FormatProductUrl(product.Url, product.ProductId, product.ZoneId);

                if (config.LoadFirstProduct)
                {
                    pageUrl = SiteUtils.GetCurrentZoneUrl();
                }

                if (pageUrl.Contains("?"))
                {
                    pageUrl += "&pagenumber=" + (pageNumber + 1).ToString();
                }
                else
                {
                    pageUrl += "?pagenumber=" + (pageNumber + 1).ToString();
                }

                XmlHelper.AddNode(doc, root, "NextPageUrl", pageUrl);
            }
        }