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); }
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(); }
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)); } } } }
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); }
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 += "&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); }
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); } }
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); }
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 += "&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); }
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)); } } } } }
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); } }