public IEncodedString PropertyUrl(ProductData productdata, String propertytype, String propertyref, int tabRedirect = -1) { var strOut = ""; try { var objGCC = new GrpCatController(productdata.Info.Lang); var l = productdata.GetProperties(propertytype); foreach (var i in l) { if (i.categoryref == propertyref) { if (tabRedirect == -1) { tabRedirect = PortalSettings.Current.ActiveTab.TabID; } return(new RawString(objGCC.GetCategoryUrl(i, tabRedirect))); } } } catch (Exception ex) { strOut = ex.ToString(); } return(new RawString(strOut)); }
private void MoveRecord(int itemId) { var selecteditemid = GenXmlFunctions.GetField(rpDataH, "selecteditemid"); if (Utils.IsNumeric(selecteditemid)) { var movData = CategoryUtils.GetCategoryData(itemId, StoreSettings.Current.EditLanguage); var selData = CategoryUtils.GetCategoryData(Convert.ToInt32(selecteditemid), StoreSettings.Current.EditLanguage); var fromParentItemid = selData.DataRecord.ParentItemId; var toParentItemid = movData.DataRecord.ParentItemId; var reindex = toParentItemid != fromParentItemid; var objGrpCtrl = new GrpCatController(StoreSettings.Current.EditLanguage); var movGrp = objGrpCtrl.GetGrpCategory(movData.Info.ItemID); if (!movGrp.Parents.Contains(selData.Info.ItemID)) // cannot move a category into itself (i.e. move parent into sub-category) { selData.DataRecord.SetXmlProperty("genxml/dropdownlist/ddlparentcatid", toParentItemid.ToString("")); selData.DataRecord.ParentItemId = toParentItemid; selData.DataRecord.SetXmlProperty("genxml/dropdownlist/ddlgrouptype", movData.DataRecord.GetXmlProperty("genxml/dropdownlist/ddlgrouptype")); var strneworder = movData.DataRecord.GetXmlProperty("genxml/hidden/recordsortorder"); var selorder = selData.DataRecord.GetXmlProperty("genxml/hidden/recordsortorder"); if (!Utils.IsNumeric(strneworder)) { strneworder = "1"; } if (!Utils.IsNumeric(selorder)) { selorder = "1"; } var neworder = Convert.ToDouble(strneworder, CultureInfo.GetCultureInfo("en-US")); if (Convert.ToDouble(strneworder, CultureInfo.GetCultureInfo("en-US")) < Convert.ToDouble(selorder, CultureInfo.GetCultureInfo("en-US"))) { neworder = neworder - 0.5; } else { neworder = neworder + 0.5; } selData.DataRecord.SetXmlProperty("genxml/hidden/recordsortorder", neworder.ToString(""), TypeCode.Double); ModCtrl.Update(selData.DataRecord); FixRecordSortOrder(toParentItemid.ToString("")); //reindex all siblings (this is so we get a int on the recordsortorder) FixRecordGroupType(selData.Info.ItemID.ToString(""), selData.DataRecord.GetXmlProperty("genxml/dropdownlist/ddlgrouptype")); if (reindex) { objGrpCtrl.ReIndexCascade(fromParentItemid); // reindex from parent and parents. objGrpCtrl.ReIndexCascade(selData.Info.ItemID); // reindex select and parents } NBrightBuyUtils.RemoveModCachePortalWide(PortalId); //clear any cache } } }
private void MoveRecord(int movetocatid, int movecatid) { if (movecatid > 0) { var movData = CategoryUtils.GetCategoryData(movetocatid, EditLangCurrent); var selData = CategoryUtils.GetCategoryData(movecatid, EditLangCurrent); if (movData.Exists && selData.Exists) { var fromParentItemid = selData.DataRecord.ParentItemId; var toParentItemid = movData.DataRecord.ParentItemId; var reindex = toParentItemid != fromParentItemid; var objGrpCtrl = new GrpCatController(EditLangCurrent); var movGrp = objGrpCtrl.GetGrpCategory(movData.Info.ItemID); if (!movGrp.Parents.Contains(selData.Info.ItemID)) // cannot move a category into itself (i.e. move parent into sub-category) { selData.DataRecord.SetXmlProperty("genxml/dropdownlist/ddlparentcatid", toParentItemid.ToString("")); selData.DataRecord.ParentItemId = toParentItemid; selData.DataRecord.SetXmlProperty("genxml/dropdownlist/ddlgrouptype", movData.DataRecord.GetXmlProperty("genxml/dropdownlist/ddlgrouptype")); var strneworder = movData.DataRecord.GetXmlPropertyDouble("genxml/hidden/recordsortorder"); var selorder = selData.DataRecord.GetXmlPropertyDouble("genxml/hidden/recordsortorder"); var neworder = Convert.ToDouble(strneworder, CultureInfo.GetCultureInfo("en-US")); if (strneworder < selorder) { neworder = neworder - 0.5; } else { neworder = neworder + 0.5; } selData.DataRecord.SetXmlProperty("genxml/hidden/recordsortorder", neworder.ToString(""), TypeCode.Double); var objCtrl = new NBrightBuyController(); objCtrl.Update(selData.DataRecord); FixRecordSortOrder(toParentItemid.ToString(""), EditLangCurrent); //reindex all siblings (this is so we get a int on the recordsortorder) FixRecordGroupType(selData.Info.ItemID.ToString(""), selData.DataRecord.GetXmlProperty("genxml/dropdownlist/ddlgrouptype"), EditLangCurrent); if (reindex) { objGrpCtrl.ReIndexCascade(fromParentItemid); // reindex from parent and parents. objGrpCtrl.ReIndexCascade(selData.Info.ItemID); // reindex select and parents } NBrightBuyUtils.RemoveModCachePortalWide(PortalSettings.Current.PortalId); } } } }
public IEncodedString PropertyUrl(ProductData productdata, String propertytype, int index = 0, int tabRedirect = -1) { var strOut = ""; try { var objGCC = new GrpCatController(productdata.Info.Lang); var l = productdata.GetCategories(propertytype); if (l.Count > index) { if (tabRedirect == -1) { tabRedirect = PortalSettings.Current.ActiveTab.TabID; } return(new RawString(objGCC.GetCategoryUrl(l[index], tabRedirect))); } } catch (Exception ex) { strOut = ex.ToString(); } return(new RawString(strOut)); }
protected void CtrlItemCommand(object source, RepeaterCommandEventArgs e) { var cArg = e.CommandArgument.ToString(); var param = new string[3]; var navigationData = new NavigationData(PortalId, "CategoryAdmin"); switch (e.CommandName.ToLower()) { case "entrydetail": SaveAll(); param[1] = "eid=" + cArg; param[2] = "catid=" + _openid; Response.Redirect(NBrightBuyUtils.AdminUrl(TabId, param), true); break; case "return": param[1] = ""; param[2] = "catid=" + _openid; Response.Redirect(NBrightBuyUtils.AdminUrl(TabId, param), true); break; case "search": var strXml = GenXmlFunctions.GetGenXml(rpSearch, "", ""); navigationData.XmlData = strXml; if (StoreSettings.Current.DebugModeFileOut) { strXml = "<root><sql><![CDATA[" + navigationData.Criteria + "]]></sql>" + strXml + "</root>"; var xmlDoc = new System.Xml.XmlDocument(); xmlDoc.LoadXml(strXml); xmlDoc.Save(PortalSettings.HomeDirectoryMapPath + "debug_search.xml"); } navigationData.Save(); Response.Redirect(NBrightBuyUtils.AdminUrl(TabId, param), true); break; case "resetsearch": // clear cookie info navigationData.Delete(); param[2] = "catid=0"; Response.Redirect(NBrightBuyUtils.AdminUrl(TabId, param), true); break; case "addnew": var strXml2 = GenXmlFunctions.GetGenXml(rpSearch, "", ""); navigationData.XmlData = strXml2; navigationData.Save(); var categoryData = CategoryUtils.GetCategoryData(-1, EditLanguage); if (!String.IsNullOrEmpty(Edittype) && Edittype.ToLower() == "group") { categoryData.GroupType = GenXmlFunctions.GetGenXmlValue(navigationData.XmlData, "genxml/dropdownlist/groupsel"); if (categoryData.GroupType == "") { categoryData.GroupType = "cat"; } var grpCtrl = new GrpCatController(Utils.GetCurrentCulture()); var grp = grpCtrl.GetGrpCategoryByRef(categoryData.GroupType); if (grp != null) { categoryData.DataRecord.SetXmlProperty("genxml/dropdownlist/ddlparentcatid", grp.categoryid.ToString("")); } categoryData.DataRecord.SetXmlProperty("genxml/checkbox/chkishidden", "False"); // don't hide property groups by default } categoryData.ParentItemId = _openid; categoryData.Save(); NBrightBuyUtils.RemoveModCachePortalWide(PortalId); param[2] = "catid=" + _openid; Response.Redirect(NBrightBuyUtils.AdminUrl(TabId, param), true); break; case "delete": if (Utils.IsNumeric(cArg)) { var catid = Convert.ToInt32(cArg); if (catid > 0) { var delCatData = CategoryUtils.GetCategoryData(catid, EditLanguage); if (delCatData.Exists && delCatData.GetDirectChildren().Count == 0) // only delete end leaf { var productidlist = new ArrayList(); foreach (var dc in delCatData.GetDirectArticles()) { productidlist.Add(dc.ParentItemId); } var parentCatList = new List <CategoryData>(); var loopCat = CategoryUtils.GetCategoryData(catid, EditLanguage); while (loopCat.Exists && loopCat.ParentItemId > 0) { loopCat = CategoryUtils.GetCategoryData(loopCat.ParentItemId, EditLanguage); parentCatList.Add(loopCat); } foreach (var pCat in parentCatList) { foreach (var prodxref in pCat.GetCascadeArticles()) { if (productidlist.Contains(prodxref.ParentItemId)) { // delete CATCASCADE record if (prodxref.TypeCode == "CATCASCADE") // just check we have correct record. (stop nasty surprises) { ModCtrl.Delete(prodxref.ItemID); } } } } foreach (var dc in delCatData.GetDirectArticles()) { // delete CATXREF record if (dc.TypeCode == "CATXREF") // just check we have correct record. (stop nasty surprises) { ModCtrl.Delete(dc.ItemID); } } // delete CATEGORY record (constrants remove LANG records.) ModCtrl.Delete(catid); } else { NBrightBuyUtils.SetNotfiyMessage(ModuleId, "onlyleafcat", NotifyCode.fail); } } } param[2] = "catid=" + _openid; Response.Redirect(NBrightBuyUtils.AdminUrl(TabId, param), true); break; case "saveall": SaveAll(); NBrightBuyUtils.RemoveModCachePortalWide(PortalId); //clear any cache param[2] = "catid=" + _openid; Response.Redirect(NBrightBuyUtils.AdminUrl(TabId, param), true); break; case "move": SaveAll(); if (Utils.IsNumeric(cArg)) { MoveRecord(Convert.ToInt32(cArg)); } param[2] = "catid=" + _openid; Response.Redirect(NBrightBuyUtils.AdminUrl(TabId, param), true); break; case "open": param[1] = "catid=" + cArg; Response.Redirect(NBrightBuyUtils.AdminUrl(TabId, param), true); break; case "close": var catData = CategoryUtils.GetCategoryData(_openid, EditLanguage); if (catData.DataRecord == null) { param[1] = "catid=0"; } else { param[1] = "catid=" + catData.DataRecord.ParentItemId.ToString(""); } Response.Redirect(NBrightBuyUtils.AdminUrl(TabId, param), true); break; case "save": UpdateRecord(); param[1] = "eid=" + cArg; param[2] = "catid=" + _openid; Response.Redirect(NBrightBuyUtils.AdminUrl(TabId, param), true); break; case "saveexit": UpdateRecord(); param[2] = "catid=" + _openid; Response.Redirect(NBrightBuyUtils.AdminUrl(TabId, param), true); break; } }
private void RazorPageLoad() { NBrightInfo objCat = null; if (_templD.Trim() != "") // if we don;t have a template, don't do anything { if (_displayentrypage) { // get correct itemid, based on eid given _eid = GetEntryIdFromName(_eid); RazorDisplayDataEntry(_eid); } else { // Get meta data from template var metaTokens = NBrightBuyUtils.RazorPreProcessTempl(_templD, _controlPath, ModSettings.ThemeFolder, Utils.GetCurrentCulture(), ModSettings.Settings(), ModuleId.ToString()); #region "Order BY" //////////////////////////////////////////// // get ORDERBY SORT //////////////////////////////////////////// if (_orderbyindex != "") // if we have orderby set in url, find the meta tags { if (metaTokens.ContainsKey("orderby" + _orderbyindex)) { if (metaTokens["orderby" + _orderbyindex].Contains("{") || metaTokens["orderby" + _orderbyindex].ToLower().Contains("order by")) { _navigationdata.OrderBy = metaTokens["orderby" + _orderbyindex]; _navigationdata.OrderByIdx = _orderbyindex; } else { _navigationdata.OrderBy = " Order by " + metaTokens["orderby" + _orderbyindex]; _navigationdata.OrderByIdx = _orderbyindex; } _navigationdata.Save(); } } else { if (String.IsNullOrEmpty(_navigationdata.OrderBy) && metaTokens.ContainsKey("orderby")) { if (metaTokens["orderby"].Contains("{") || metaTokens["orderby"].ToLower().Contains("order by")) { _navigationdata.OrderBy = metaTokens["orderby"]; } else { _navigationdata.OrderBy = " Order by " + metaTokens["orderby"]; } _navigationdata.OrderByIdx = ""; _navigationdata.Save(); } } #endregion #region "Get Paging setup" //See if we have a pagesize, uses the "searchpagesize" tag token. // : This can be overwritten by the cookie value if we need user selection of pagesize. CtrlPaging.Visible = false; #region "Get pagesize, from best place" var pageSize = 0; if (Utils.IsNumeric(ModSettings.Get("pagesize"))) { pageSize = Convert.ToInt32(ModSettings.Get("pagesize")); } // overwrite default module pagesize , if we have a pagesize control in the template if (metaTokens.ContainsKey("selectpagesize") && Utils.IsNumeric(_navigationdata.PageSize)) { pageSize = Convert.ToInt32(_navigationdata.PageSize); } //check for url param page size if (Utils.IsNumeric(_pagesize) && (_pagemid == "" | _pagemid == ModuleId.ToString(CultureInfo.InvariantCulture))) { pageSize = Convert.ToInt32(_pagesize); } if (pageSize == 0) { var strPgSize = ""; if (metaTokens.ContainsKey("searchpagesize")) { strPgSize = metaTokens["searchpagesize"]; } if (metaTokens.ContainsKey("pagesize") && strPgSize == "") { strPgSize = metaTokens["pagesize"]; } if (Utils.IsNumeric(strPgSize)) { pageSize = Convert.ToInt32(strPgSize); } } if (pageSize > 0) { CtrlPaging.Visible = true; } _navigationdata.PageSize = pageSize.ToString(""); #endregion var pageNumber = 1; //check for url param paging if (Utils.IsNumeric(_pagenum) && (_pagemid == "" | _pagemid == ModuleId.ToString(CultureInfo.InvariantCulture))) { pageNumber = Convert.ToInt32(_pagenum); } //Get returnlimt from module settings var returnlimit = 0; var strreturnlimit = ModSettings.Get("returnlimit"); if (Utils.IsNumeric(strreturnlimit)) { returnlimit = Convert.ToInt32(strreturnlimit); } #endregion #region "Get filter setup" // check the display header to see if we have a sqlfilter defined. var strFilter = ""; var sqlTemplateFilter = ""; if (metaTokens.ContainsKey("sqlfilter")) { sqlTemplateFilter = GenXmlFunctions.StripSqlCommands(metaTokens["sqlfilter"]); } if (_navigationdata.HasCriteria) { var paramcatid = Utils.RequestQueryStringParam(Context, "catid"); if (Utils.IsNumeric(paramcatid)) { if (_navigationdata.CategoryId != Convert.ToInt32(paramcatid)) // filter mode DOES NOT persist catid (stop confusion when user selects a category) { _navigationdata.ResetSearch(); } } // if navdata is not deleted then get filter from navdata, created by productsearch module. strFilter = _navigationdata.Criteria; if (!strFilter.Contains(sqlTemplateFilter)) { strFilter += " " + sqlTemplateFilter; } if (_navigationdata.Mode.ToLower() == "s") { _navigationdata.ResetSearch(); // single search so clear after } } else { // reset search if category selected // NOTE: keeping search across categories is VERY confusing for cleint, although it works logically. _navigationdata.ResetSearch(); strFilter = sqlTemplateFilter; } #endregion #region "Get Category select setup" var objQual = DotNetNuke.Data.DataProvider.Instance().ObjectQualifier; var dbOwner = DataProvider.Instance().DatabaseOwner; //get default catid. var catseo = _catid; var defcatid = ModSettings.Get("defaultcatid"); if (defcatid == "") { defcatid = "0"; } if (Utils.IsNumeric(defcatid) && Convert.ToInt32(defcatid) > 0) { // if we have no filter use the default category if (_catid == "" && strFilter.Trim() == "") { _catid = defcatid; } } else { defcatid = ModSettings.Get("defaultpropertyid"); if (defcatid == "") { defcatid = "0"; } if (Utils.IsNumeric(defcatid)) { // if we have no filter use the default category if (_catid == "" && strFilter.Trim() == "") { _catid = defcatid; } } } // If we have a static list,then always display the default category if (ModSettings.Get("staticlist") == "True") { if (catseo == "") { catseo = _catid; } _catid = defcatid; if (ModSettings.Get("chkcascaderesults").ToLower() == "true") { strFilter = strFilter + " and NB1.[ItemId] in (select parentitemid from " + dbOwner + "[" + objQual + "NBrightBuy] where (typecode = 'CATCASCADE' or typecode = 'CATXREF') and XrefItemId = " + _catid + ") "; } else { strFilter = strFilter + " and NB1.[ItemId] in (select parentitemid from " + dbOwner + "[" + objQual + "NBrightBuy] where typecode = 'CATXREF' and XrefItemId = " + _catid + ") "; } if (ModSettings.Get("caturlfilter") == "True" && catseo != "" && catseo != _catid) { // add aditional filter for catid filter on url (catseo holds catid from url) if (ModSettings.Get("chkcascaderesults").ToLower() == "true") { strFilter = strFilter + " and NB1.[ItemId] in (select parentitemid from " + dbOwner + "[" + objQual + "NBrightBuy] where (typecode = 'CATCASCADE' or typecode = 'CATXREF') and XrefItemId = " + catseo + ") "; } else { strFilter = strFilter + " and NB1.[ItemId] in (select parentitemid from " + dbOwner + "[" + objQual + "NBrightBuy] where typecode = 'CATXREF' and XrefItemId = " + catseo + ") "; } } // do special custom sort in each cateogry, this passes the catid to the SQL SPROC, whcih process the '{bycategoryproduct}' and orders by product/category seq. if (_navigationdata.OrderBy.Contains("{bycategoryproduct}")) { _navigationdata.OrderBy = "{bycategoryproduct}" + _catid; } } else { #region "use url to get category to display" //check if we are display categories // get category list data if (_catname != "") // if catname passed in url, calculate what the catid is { objCat = ModCtrl.GetByGuidKey(PortalId, ModuleId, "CATEGORYLANG", _catname); if (objCat == null) { // check it's not just a single language objCat = ModCtrl.GetByGuidKey(PortalId, ModuleId, "CATEGORY", _catname); if (objCat != null) { _catid = objCat.ItemID.ToString(""); } } else { _catid = objCat.ParentItemId.ToString(""); if (!String.IsNullOrEmpty(objCat.GUIDKey) && Utils.IsNumeric(_catid) && objCat.Lang != Utils.GetCurrentCulture()) { // do a 301 redirect to correct url for the langauge (If the langauge is changed on the product list, we need to make sure we have the correct catref for the langauge) var catGrpCtrl = new GrpCatController(Utils.GetCurrentCulture()); var activeCat = catGrpCtrl.GetCategory(Convert.ToInt32(_catid)); if (activeCat != null) { var redirecturl = ""; if (Utils.IsNumeric(_eid)) { var prdData = ProductUtils.GetProductData(Convert.ToInt32(_eid), Utils.GetCurrentCulture(), true, EntityTypeCode); redirecturl = NBrightBuyUtils.GetEntryUrl(PortalId, _eid, _modkey, prdData.SEOName, TabId.ToString(), "", activeCat.categoryrefGUIDKey); } else { redirecturl = catGrpCtrl.GetCategoryUrl(activeCat, TabId, Utils.GetCurrentCulture()); } try { if (redirecturl != "") { Response.Redirect(redirecturl, false); Response.StatusCode = (int)System.Net.HttpStatusCode.MovedPermanently; Response.End(); } } catch (Exception) { // catch err } } } } // We have a category selected (in url), so overwrite categoryid navigationdata. // This allows the return to the same category after a returning from a entry view. if (Utils.IsNumeric(_catid)) { _navigationdata.CategoryId = Convert.ToInt32(_catid); } catseo = _catid; _navigationdata.ResetSearch(); strFilter = ""; } if (Utils.IsNumeric(_catid)) { if (ModSettings.Get("chkcascaderesults").ToLower() == "true") { strFilter = strFilter + " and NB1.[ItemId] in (select parentitemid from " + dbOwner + "[" + objQual + "NBrightBuy] where (typecode = 'CATCASCADE' or typecode = 'CATXREF') and XrefItemId = " + _catid + ") "; } else { strFilter = strFilter + " and NB1.[ItemId] in (select parentitemid from " + dbOwner + "[" + objQual + "NBrightBuy] where typecode = 'CATXREF' and XrefItemId = " + _catid + ") "; } if (Utils.IsNumeric(catseo)) { var objSEOCat = ModCtrl.GetData(Convert.ToInt32(catseo), "CATEGORYLANG", Utils.GetCurrentCulture()); if (objSEOCat != null && _eid == "") // we may have a detail page and listonly module, in which can we need the product detail as page title { //Page Title var seoname = objSEOCat.GetXmlProperty("genxml/lang/genxml/textbox/txtseoname"); if (seoname == "") { seoname = objSEOCat.GetXmlProperty("genxml/lang/genxml/textbox/txtcategoryname"); } var newBaseTitle = objSEOCat.GetXmlProperty("genxml/lang/genxml/textbox/txtseopagetitle"); if (newBaseTitle == "") { newBaseTitle = objSEOCat.GetXmlProperty("genxml/lang/genxml/textbox/txtseoname"); } if (newBaseTitle == "") { newBaseTitle = objSEOCat.GetXmlProperty("genxml/lang/genxml/textbox/txtcategoryname"); } if (newBaseTitle != "") { BasePage.Title = newBaseTitle; } //Page KeyWords var newBaseKeyWords = objSEOCat.GetXmlProperty("genxml/lang/genxml/textbox/txtmetakeywords"); if (newBaseKeyWords != "") { BasePage.KeyWords = newBaseKeyWords; } //Page Description var newBaseDescription = objSEOCat.GetXmlProperty("genxml/lang/genxml/textbox/txtmetadescription"); if (newBaseDescription == "") { newBaseDescription = objSEOCat.GetXmlProperty("genxml/lang/genxml/textbox/txtcategorydesc"); } if (newBaseDescription != "") { BasePage.Description = newBaseDescription; } // Remove canonical link for list. The Open URL Rewriter (OUR) will create a url that is different to the default SEO url in NBS. // So to stop clashes it's been disable by default. The requirment for a canonical link on a category list is more ticking the box than of being any SEO help (might even be causing confusion to Search Engines). // ** If your a SEO nutcases (or SEO companies pushing for it) then you can uncomment the code below, and you can implement the Open URL Rewriter and canonical link. //if (PortalSettings.HomeTabId == TabId) // PageIncludes.IncludeCanonicalLink(Page, Globals.AddHTTP(PortalSettings.PortalAlias.HTTPAlias)); //home page always default of site. //else //{ // PageIncludes.IncludeCanonicalLink(Page, NBrightBuyUtils.GetListUrl(PortalId, TabId, objSEOCat.ItemID, seoname, Utils.GetCurrentCulture())); // // Code required for OUR (if used, test to ensure it works correctly!!) // //PageIncludes.IncludeCanonicalLink(Page, NBrightBuyUtils.GetListUrl(PortalId, TabId, objSEOCat.ItemID, "", Utils.GetCurrentCulture())); //} } } // do special custom sort in each cateogry, this passes the catid to the SQL SPROC, whcih process the '{bycategoryproduct}' and orders by product/category seq. if (_navigationdata.OrderBy.Contains("{bycategoryproduct}")) { _navigationdata.OrderBy = "{bycategoryproduct}" + _catid; } } else { if (!_navigationdata.FilterMode) { _navigationdata.CategoryId = 0; // filter mode persist catid } if (_navigationdata.OrderBy.Contains("{bycategoryproduct}")) { _navigationdata.OrderBy = " Order by ModifiedDate DESC "; } } #endregion } // This allows the return to the same category after a returning from a entry view. + Gives support for current category in razor tokens if (Utils.IsNumeric(_catid)) { _navigationdata.CategoryId = Convert.ToInt32(_catid); } #endregion #region "Apply provider product filter" // Special filtering can be done, by using the ProductFilter interface. var productfilterkey = ""; if (metaTokens.ContainsKey("providerfilterkey")) { productfilterkey = metaTokens["providerfilterkey"]; } if (productfilterkey != "") { var provfilter = FilterInterface.Instance(productfilterkey); if (provfilter != null) { strFilter = provfilter.GetFilter(strFilter, _navigationdata, ModSettings, Context); } } #endregion #region "itemlists (wishlist)" // if we have a itemListName field then get the itemlist cookie. if (ModSettings.Get("displaytype") == "2") // displaytype 2 = "selected list" { var cw = new ItemListData(PortalId, UserController.Instance.GetCurrentUserInfo().UserID); if (cw.Exists && cw.ItemCount > 0) { strFilter = " and ("; foreach (var i in cw.GetItemList()) { strFilter += " NB1.itemid = '" + i + "' or"; } strFilter = strFilter.Substring(0, (strFilter.Length - 3)) + ") "; // remove the last "or" } else { //no data in list so select false itemid to stop anything displaying strFilter += " and (NB1.itemid = '-1') "; } } #endregion // insert page header text NBrightBuyUtils.RazorIncludePageHeader(ModuleId, Page, Path.GetFileNameWithoutExtension(_templD) + "_head" + Path.GetExtension(_templD), _controlPath, ModSettings.ThemeFolder, ModSettings.Settings()); // save navigation data _navigationdata.PageModuleId = Utils.RequestParam(Context, "pagemid"); _navigationdata.PageNumber = Utils.RequestParam(Context, "page"); if (Utils.IsNumeric(_catid)) { _navigationdata.PageName = NBrightBuyUtils.GetCurrentPageName(Convert.ToInt32(_catid)); } // save the last active modulekey to a cookie, so it can be used by the "NBrightBuyUtils.GetReturnUrl" function NBrightCore.common.Cookie.SetCookieValue(PortalId, "NBrigthBuyLastActive", "ModuleKey", ModuleKey, 1); if (strFilter.Trim() == "") { // if at this point we have no filter, then assume we're using urlrewriter and a 404 url has been entered. // rather than display all visible products in a list with no default. // redirect to the product display function, so we can display a 404 and product not found. RazorDisplayDataEntry(_eid); } else { strFilter += " and (NB3.Visible = 1) "; // get only visible products var recordCount = ModCtrl.GetDataListCount(PortalId, ModuleId, EntityTypeCode, strFilter, EntityTypeCodeLang, Utils.GetCurrentCulture(), DebugMode); _navigationdata.RecordCount = recordCount.ToString(""); _navigationdata.Save(); if (returnlimit > 0 && returnlimit < recordCount) { recordCount = returnlimit; } // **** check if we already have the template cached, if so no need for DB call or razor call **** // get same cachekey used for DB return, and use for razor. var razorcachekey = ModCtrl.GetDataListCacheKey(PortalId, ModuleId, EntityTypeCode, EntityTypeCodeLang, Utils.GetCurrentCulture(), strFilter, _navigationdata.OrderBy, DebugMode, "", returnlimit, pageNumber, pageSize, recordCount); var cachekey = "NBrightBuyRazorOutput" + _templD + "*" + razorcachekey + PortalId.ToString(); var strOut = (String)NBrightBuyUtils.GetModCache(cachekey); if (strOut == null || StoreSettings.Current.DebugMode) { var l = ModCtrl.GetDataList(PortalId, ModuleId, EntityTypeCode, EntityTypeCodeLang, Utils.GetCurrentCulture(), strFilter, _navigationdata.OrderBy, DebugMode, "", returnlimit, pageNumber, pageSize, recordCount); strOut = NBrightBuyUtils.RazorTemplRenderList(_templD, ModuleId, razorcachekey, l, _controlPath, ModSettings.ThemeFolder, Utils.GetCurrentCulture(), ModSettings.Settings()); } var lit = new Literal(); lit.Text = strOut; phData.Controls.Add(lit); if (_navigationdata.SingleSearchMode) { _navigationdata.ResetSearch(); } if (pageSize > 0) { CtrlPaging.PageSize = pageSize; CtrlPaging.CurrentPage = pageNumber; CtrlPaging.TotalRecords = recordCount; CtrlPaging.BindPageLinks(); } } } } }
private void PageLoad() { NBrightInfo objCat = null; #region "Data Repeater" if (_templD.Trim() != "") // if we don;t have a template, don't do anything { if (_displayentrypage) { // get correct itemid, based on eid given if (_ename != "") { var o = ModCtrl.GetByGuidKey(PortalId, ModuleId, EntityTypeCodeLang, _ename); if (o == null) { o = ModCtrl.GetByGuidKey(PortalId, ModuleId, EntityTypeCode, _ename); if (o != null) { _eid = o.ItemID.ToString(""); } } else { _eid = o.ParentItemId.ToString(""); } } DisplayDataEntryRepeater(_eid); } else { #region "Order BY" // get orderby from header if it's there var cachekey = "GetSqlOrderBy*rpDataH" + _templH + "*" + ModuleId.ToString(); _strOrder = (String)Utils.GetCache(cachekey); if (_strOrder == null || StoreSettings.Current.DebugMode) { _strOrder = GenXmlFunctions.GetSqlOrderBy(rpDataH); } //Default orderby if not set if (String.IsNullOrEmpty(_strOrder)) { _strOrder = " Order by ModifiedDate DESC "; } // NOTE: This setting may be overwritten by the navigatedata class in the filter setup #endregion #region "Get Paging setup" //See if we have a pagesize, uses the "searchpagesize" tag token. // : This can be overwritten by the cookie value if we need user selection of pagesize. CtrlPaging.Visible = false; #region "Get pagesize, from best place" var pageSize = 0; if (Utils.IsNumeric(_navigationdata.PageSize)) { pageSize = Convert.ToInt32(_navigationdata.PageSize); } if (!Utils.IsNumeric(pageSize) && Utils.IsNumeric(ModSettings.Get("pagesize"))) { pageSize = Convert.ToInt32(ModSettings.Get("pagesize")); } //check for url param page size if (Utils.IsNumeric(_pagesize) && (_pagemid == "" | _pagemid == ModuleId.ToString(CultureInfo.InvariantCulture))) { pageSize = Convert.ToInt32(_pagesize); } if (pageSize == 0) { var strPgSize = ""; if (_templateHeader != null) { strPgSize = _templateHeader.GetHiddenFieldValue("searchpagesize"); } if (_templateHeader != null && strPgSize == "") { strPgSize = _templateHeader.GetHiddenFieldValue("pagesize"); } if (Utils.IsNumeric(strPgSize)) { pageSize = Convert.ToInt32(strPgSize); } } if (pageSize > 0) { CtrlPaging.Visible = true; } _navigationdata.PageSize = pageSize.ToString(""); #endregion var pageNumber = 1; //check for url param paging if (Utils.IsNumeric(_pagenum) && (_pagemid == "" | _pagemid == ModuleId.ToString(CultureInfo.InvariantCulture))) { pageNumber = Convert.ToInt32(_pagenum); } //Get returnlimt from module settings var returnlimit = 0; var strreturnlimit = ModSettings.Get("returnlimit"); if (Utils.IsNumeric(strreturnlimit)) { returnlimit = Convert.ToInt32(strreturnlimit); } #endregion #region "Get filter setup" // check the display header to see if we have a sqlfilter defined. var strFilter = ""; cachekey = "GetSqlSearchFilters*rpDataH" + _templH + "*" + ModuleId.ToString(); var strHeaderFilter = (String)Utils.GetCache(cachekey); if (strHeaderFilter == null || StoreSettings.Current.DebugMode) { strHeaderFilter = GenXmlFunctions.GetSqlSearchFilters(rpDataH); } // filter mode and will persist past category selection. if ((_catid == "" && _catname == "")) { if (!_navigationdata.FilterMode) { _navigationdata.CategoryId = 0; // filter mode persist catid } // if navdata is not deleted then get filter from navdata, created by productsearch module. strFilter = _navigationdata.Criteria; if (!strFilter.Contains(strHeaderFilter)) { strFilter += " " + strHeaderFilter; } if (!String.IsNullOrEmpty(_navigationdata.OrderBy)) { _strOrder = _navigationdata.OrderBy; } if (_navigationdata.Mode.ToLower() == "s") { _navigationdata.ResetSearch(); // single search so clear after } } else { _navigationdata.ResetSearch(); // We have a category selected (in url), so overwrite categoryid navigationdata. // This allows the return to the same category after a returning from a entry view. if (Utils.IsNumeric(_catid)) { _navigationdata.CategoryId = Convert.ToInt32(_catid); } strFilter = strHeaderFilter; } #endregion #region "Get Category select setup" //get default catid. var catseo = _catid; var defcatid = ModSettings.Get("defaultcatid"); if (Utils.IsNumeric(defcatid)) { // if we have no filter use the default category if (_catid == "" && strFilter.Trim() == "") { _catid = defcatid; } // If we have a static list,then always display the default category if (ModSettings.Get("staticlist") == "True") { _catid = defcatid; } } else { defcatid = ModSettings.Get("defaultpropertyid"); if (Utils.IsNumeric(defcatid)) { // if we have no filter use the default category if (_catid == "" && strFilter.Trim() == "") { _catid = defcatid; } // If we have a static list,then always display the default category if (ModSettings.Get("staticlist") == "True") { _catid = defcatid; } } } //check if we are display categories // get category list data if (_catname != "") // if catname passed in url, calculate what the catid is { objCat = ModCtrl.GetByGuidKey(PortalId, ModuleId, "CATEGORYLANG", _catname); if (objCat == null) { // check it's not just a single language objCat = ModCtrl.GetByGuidKey(PortalId, ModuleId, "CATEGORY", _catname); if (objCat != null) { _catid = objCat.ItemID.ToString(""); } } else { _catid = objCat.ParentItemId.ToString(""); if (!String.IsNullOrEmpty(objCat.GUIDKey) && Utils.IsNumeric(_catid) && objCat.Lang != Utils.GetCurrentCulture()) { // do a 301 redirect to correct url for the langauge (If the langauge is changed on the product list, we need to make sure we have the correct catref for the langauge) var catGrpCtrl = new GrpCatController(Utils.GetCurrentCulture()); var activeCat = catGrpCtrl.GetCategory(Convert.ToInt32(_catid)); if (activeCat != null && (activeCat.categoryrefGUIDKey == _catname)) { var redirecturl = ""; if (Utils.IsNumeric(_eid)) { var prdData = ProductUtils.GetProductData(Convert.ToInt32(_eid), Utils.GetCurrentCulture()); redirecturl = NBrightBuyUtils.GetEntryUrl(PortalId, _eid, _modkey, prdData.SEOName, TabId.ToString(), "", activeCat.categoryrefGUIDKey); } else { redirecturl = catGrpCtrl.GetCategoryUrl(activeCat, TabId, objCat.Lang); } try { if (redirecturl != "") { Response.Redirect(redirecturl, false); Response.StatusCode = (int)System.Net.HttpStatusCode.MovedPermanently; Response.End(); } } catch (Exception) { // catch err } } } } // We have a category selected (in url), so overwrite categoryid navigationdata. // This allows the return to the same category after a returning from a entry view. if (Utils.IsNumeric(_catid)) { _navigationdata.CategoryId = Convert.ToInt32(_catid); } catseo = _catid; } if (Utils.IsNumeric(_catid)) { var objQual = DotNetNuke.Data.DataProvider.Instance().ObjectQualifier; var dbOwner = DataProvider.Instance().DatabaseOwner; if (ModSettings.Get("chkcascaderesults").ToLower() == "true") { strFilter = strFilter + " and NB1.[ItemId] in (select parentitemid from " + dbOwner + "[" + objQual + "NBrightBuy] where (typecode = 'CATCASCADE' or typecode = 'CATXREF') and XrefItemId = " + _catid + ") "; } else { strFilter = strFilter + " and NB1.[ItemId] in (select parentitemid from " + dbOwner + "[" + objQual + "NBrightBuy] where typecode = 'CATXREF' and XrefItemId = " + _catid + ") "; } if (Utils.IsNumeric(catseo)) { var objSEOCat = ModCtrl.GetData(Convert.ToInt32(catseo), "CATEGORYLANG", Utils.GetCurrentCulture()); if (objSEOCat != null && _eid == "") // we may have a detail page and listonly module, in which can we need the product detail as page title { //Page Title var seoname = objSEOCat.GetXmlProperty("genxml/lang/genxml/textbox/txtseoname"); if (seoname == "") { seoname = objSEOCat.GetXmlProperty("genxml/lang/genxml/textbox/txtcategoryname"); } var newBaseTitle = objSEOCat.GetXmlProperty("genxml/lang/genxml/textbox/txtseopagetitle"); if (newBaseTitle == "") { newBaseTitle = objSEOCat.GetXmlProperty("genxml/lang/genxml/textbox/txtseoname"); } if (newBaseTitle == "") { newBaseTitle = objSEOCat.GetXmlProperty("genxml/lang/genxml/textbox/txtcategoryname"); } if (newBaseTitle != "") { BasePage.Title = newBaseTitle; } //Page KeyWords var newBaseKeyWords = objSEOCat.GetXmlProperty("genxml/lang/genxml/textbox/txtmetakeywords"); if (newBaseKeyWords != "") { BasePage.KeyWords = newBaseKeyWords; } //Page Description var newBaseDescription = objSEOCat.GetXmlProperty("genxml/lang/genxml/textbox/txtmetadescription"); if (newBaseDescription == "") { newBaseDescription = objSEOCat.GetXmlProperty("genxml/lang/genxml/textbox/txtcategorydesc"); } if (newBaseDescription != "") { BasePage.Description = newBaseDescription; } if (PortalSettings.HomeTabId == TabId) { PageIncludes.IncludeCanonicalLink(Page, Globals.AddHTTP(PortalSettings.PortalAlias.HTTPAlias)); //home page always default of site. } else { PageIncludes.IncludeCanonicalLink(Page, NBrightBuyUtils.GetListUrl(PortalId, TabId, objSEOCat.ItemID, seoname, Utils.GetCurrentCulture())); } } } if (_strOrder == "{bycategoryproduct}") { _strOrder += _catid; // do special custom sort in each cateogry } } else { if (!_navigationdata.FilterMode) { _navigationdata.CategoryId = 0; // filter mode persist catid } if (_strOrder == "{bycategoryproduct}") { _strOrder = " Order by ModifiedDate DESC "; } } #endregion #region "Apply provider product filter" // Special filtering can be done, by using the ProductFilter interface. var productfilterkey = ""; if (_templateHeader != null) { productfilterkey = _templateHeader.GetHiddenFieldValue("providerfilterkey"); } if (productfilterkey != "") { var provfilter = FilterInterface.Instance(productfilterkey); if (provfilter != null) { strFilter = provfilter.GetFilter(strFilter, _navigationdata, ModSettings, Context); } } #endregion #region "itemlists (wishlist)" // if we have a itemListName field then get the itemlist cookie. if (_templateHeader != null) { _itemListName = _templateHeader.GetHiddenFieldValue("itemlistname"); } if (_itemListName != "") { var cw = new ItemListData(_itemListName); if (cw.Exists && cw.ItemCount > 0) { strFilter = " and ("; foreach (var i in cw.GetItemList()) { strFilter += " NB1.itemid = '" + i + "' or"; } strFilter = strFilter.Substring(0, (strFilter.Length - 3)) + ") "; // remove the last "or" } else { //no data in list so select false itemid to stop anything displaying strFilter += " and (NB1.itemid = '-1') "; } } #endregion // save navigation data _navigationdata.PageModuleId = Utils.RequestParam(Context, "pagemid"); _navigationdata.PageNumber = Utils.RequestParam(Context, "page"); if (Utils.IsNumeric(_catid)) { _navigationdata.PageName = NBrightBuyUtils.GetCurrentPageName(Convert.ToInt32(_catid)); } // save the last active modulekey to a cookie, so it can be used by the "NBrightBuyUtils.GetReturnUrl" function NBrightCore.common.Cookie.SetCookieValue(PortalId, "NBrigthBuyLastActive", "ModuleKey", ModuleKey, 1); strFilter += " and (NB3.Visible = 1) "; // get only visible products var recordCount = ModCtrl.GetDataListCount(PortalId, ModuleId, "PRD", strFilter, "PRDLANG", Utils.GetCurrentCulture(), DebugMode); _navigationdata.RecordCount = recordCount.ToString(""); _navigationdata.Save(); if (returnlimit > 0 && returnlimit < recordCount) { recordCount = returnlimit; } var l = ModCtrl.GetDataList(PortalId, ModuleId, "PRD", "PRDLANG", Utils.GetCurrentCulture(), strFilter, _strOrder, DebugMode, "", returnlimit, pageNumber, pageSize, recordCount); rpData.DataSource = l; rpData.DataBind(); if (_navigationdata.SingleSearchMode) { _navigationdata.ResetSearch(); } if (pageSize > 0) { CtrlPaging.PageSize = pageSize; CtrlPaging.CurrentPage = pageNumber; CtrlPaging.TotalRecords = recordCount; CtrlPaging.BindPageLinks(); } // display header (Do header after the data return so the productcount works) if (objCat == null) { base.DoDetail(rpDataH, ModuleId); } else { if (StoreSettings.Current.DebugModeFileOut) { objCat.XMLDoc.Save(PortalSettings.HomeDirectoryMapPath + "debug_categoryproductheader.xml"); } DoDetail(rpDataH, objCat); } } } #endregion // display footer base.DoDetail(rpDataF); }
public IEncodedString CategoryBreadCrumb(Boolean includelinks, NBrightRazor model, Boolean aslist = true, int tabRedirect = -1, String separator = "", int wordlength = -1, int maxlength = 400) { var strOut = ""; try { var catid = 0; if (model.GetUrlParam("eid") != "") { // looking at detail, so use product categoryid if (model.List.Any()) { var product = (ProductData)model.List.First(); var catgrp = product.GetDefaultCategory(); catid = catgrp != null ? catgrp.categoryid : 0; } } else { var navigationdata = new NavigationData(PortalSettings.Current.PortalId, model.GetSetting("modref")); catid = navigationdata.CategoryId; } if (catid <= 0) // check we have a catid { return(new RawString(""));; } var grpCatCtrl = new GrpCatController(Utils.GetCurrentCulture()); var objCInfo = grpCatCtrl.GetGrpCategory(catid); if (objCInfo != null) { if (includelinks) { if (tabRedirect == 0) { tabRedirect = PortalSettings.Current.ActiveTab.TabID; } if (tabRedirect == -1) { tabRedirect = StoreSettings.Current.ProductListTabId; } strOut = grpCatCtrl.GetBreadCrumbWithLinks(catid, tabRedirect, wordlength, separator, aslist); } else { strOut = grpCatCtrl.GetBreadCrumb(catid, wordlength, separator, aslist); } if ((strOut.Length > maxlength) && (!aslist)) { strOut = strOut.Substring(0, (maxlength - 3)) + "..."; } } } catch (Exception ex) { strOut = ex.ToString(); } return(new RawString(strOut)); }
public IEncodedString Category(String fieldname, NBrightRazor model) { var strOut = ""; try { var navigationdata = new NavigationData(PortalSettings.Current.PortalId, model.GetSetting("modref")); // if we have no catid in url, we're going to need a default category from module. var grpCatCtrl = new GrpCatController(Utils.GetCurrentCulture()); var objCInfo = grpCatCtrl.GetGrpCategory(navigationdata.CategoryId); if (objCInfo != null) { GroupCategoryData objPcat; switch (fieldname.ToLower()) { case "categorydesc": strOut = objCInfo.categorydesc; break; case "message": strOut = System.Web.HttpUtility.HtmlDecode(objCInfo.message); break; case "archived": strOut = objCInfo.archived.ToString(CultureInfo.InvariantCulture); break; case "breadcrumb": strOut = objCInfo.breadcrumb; break; case "categoryid": strOut = objCInfo.categoryid.ToString(""); break; case "categoryname": strOut = objCInfo.categoryname; break; case "categoryref": strOut = objCInfo.categoryref; break; case "depth": strOut = objCInfo.depth.ToString(""); break; case "disabled": strOut = objCInfo.disabled.ToString(CultureInfo.InvariantCulture); break; case "entrycount": strOut = objCInfo.entrycount.ToString(""); break; case "grouptyperef": strOut = objCInfo.grouptyperef; break; case "attributecode": strOut = objCInfo.attributecode; break; case "imageurl": strOut = objCInfo.imageurl; break; case "ishidden": strOut = objCInfo.ishidden.ToString(CultureInfo.InvariantCulture); break; case "isvisible": strOut = objCInfo.isvisible.ToString(CultureInfo.InvariantCulture); break; case "metadescription": strOut = objCInfo.metadescription; break; case "metakeywords": strOut = objCInfo.metakeywords; break; case "parentcatid": strOut = objCInfo.parentcatid.ToString(""); break; case "parentcategoryname": objPcat = grpCatCtrl.GetCategory(objCInfo.parentcatid); strOut = objPcat.categoryname; break; case "parentcategoryref": objPcat = grpCatCtrl.GetCategory(objCInfo.parentcatid); strOut = objPcat.categoryref; break; case "parentcategorydesc": objPcat = grpCatCtrl.GetCategory(objCInfo.parentcatid); strOut = objPcat.categorydesc; break; case "parentcategorybreadcrumb": objPcat = grpCatCtrl.GetCategory(objCInfo.parentcatid); strOut = objPcat.breadcrumb; break; case "parentcategoryguidkey": objPcat = grpCatCtrl.GetCategory(objCInfo.parentcatid); strOut = objPcat.categoryrefGUIDKey; break; case "recordsortorder": strOut = objCInfo.recordsortorder.ToString(""); break; case "seoname": strOut = objCInfo.seoname; if (strOut == "") { strOut = objCInfo.categoryname; } break; case "seopagetitle": strOut = objCInfo.seopagetitle; break; case "url": strOut = objCInfo.url; break; } } } catch (Exception ex) { strOut = ex.ToString(); } return(new RawString(strOut)); }
public static List <UrlRule> GetRules(int portalId) { object padlock = new object(); lock (padlock) { List <UrlRule> rules = new List <UrlRule>(); List <UrlRule> catrules = new List <UrlRule>(); #if DEBUG decimal speed; string mess; var stopwatch = new System.Diagnostics.Stopwatch(); stopwatch.Start(); #endif var purgeResult = UrlRulesCaching.PurgeExpiredItems(portalId); var portalCacheKey = UrlRulesCaching.GeneratePortalCacheKey(portalId, null); var portalRules = UrlRulesCaching.GetCache(portalId, portalCacheKey, purgeResult.ValidCacheItems); if (portalRules != null && portalRules.Count > 0) { #if DEBUG stopwatch.Stop(); speed = stopwatch.Elapsed.Milliseconds; mess = $"PortalId: {portalId}. Time elapsed: {stopwatch.Elapsed.Milliseconds}ms. All Cached. PurgedItems: {purgeResult.PurgedItemCount}. Speed: {speed}"; Logger.Error(mess); #endif return(portalRules); } Dictionary <string, Locale> dicLocales = LocaleController.Instance.GetLocales(portalId); var objCtrl = new NBrightBuyController(); var storesettings = new StoreSettings(portalId); ModuleController mc = new ModuleController(); var modules = mc.GetModulesByDefinition(portalId, "NBS_ProductDisplay").OfType <ModuleInfo>(); var modulesOldModule = mc.GetModulesByDefinition(portalId, "NBS_ProductView").OfType <ModuleInfo>(); modules = modules.Concat(modulesOldModule); // ------- Category URL --------------- #region "Category Url" // Not using the module loop!! // becuase tabs that are defined in the url are dealt with by open url rewriter, so we only need use the default tab which is defined by the store settings. foreach (KeyValuePair <string, Locale> key in dicLocales) { try { string cultureCode = key.Value.Code; string ruleCultureCode = (dicLocales.Count > 1 ? cultureCode : null); var grpCatCtrl = new GrpCatController(cultureCode, portalId); // get all products in portal, with lang data var catitems = objCtrl.GetList(portalId, -1, "CATEGORY"); foreach (var catData in catitems) { var catDataLang = objCtrl.GetDataLang(catData.ItemID, cultureCode); if (catDataLang != null && !catData.GetXmlPropertyBool("genxml/checkbox/chkishidden")) { var catCacheKey = portalCacheKey + "_" + catDataLang.ItemID + "_" + cultureCode; List <UrlRule> categoryRules = UrlRulesCaching.GetCache(portalId, catCacheKey, purgeResult.ValidCacheItems); if (categoryRules != null && categoryRules.Count > 0) { rules.AddRange(categoryRules); } else { catrules = new List <UrlRule>(); var caturlname = catDataLang.GUIDKey; var SEOName = catDataLang.GetXmlProperty("genxml/textbox/txtseoname"); var categoryName = catDataLang.GetXmlProperty("genxml/textbox/txtcategoryname"); var newcatUrl = grpCatCtrl.GetBreadCrumb(catData.ItemID, 0, "/", false); var url = newcatUrl; if (!string.IsNullOrEmpty(url)) { // ------- Category URL --------------- var rule = new UrlRule { CultureCode = ruleCultureCode, TabId = storesettings.ProductListTabId, Parameters = "catref=" + caturlname, Url = url }; var reducedRules = rules.Where(r => r.CultureCode == rule.CultureCode && r.TabId == rule.TabId) .ToList(); bool ruleExist = reducedRules.Any(r => r.Parameters == rule.Parameters); if (!ruleExist) { if (reducedRules.Any(r => r.Url == rule.Url)) // if duplicate url { rule.Url = catData.ItemID + "-" + url; } rules.Add(rule); catrules.Add(rule); } var proditems = objCtrl.GetList(catData.PortalId, -1, "CATXREF", " and NB1.XRefItemId = " + catData.ItemID.ToString("")); var l2 = objCtrl.GetList(catData.PortalId, -1, "CATCASCADE", " and NB1.XRefItemId = " + catData.ItemID.ToString("")); proditems.AddRange(l2); var pageurl = ""; var pageurl1 = rule.Url; // do paging for category (on all product modules.) foreach (var module in modules) { // ------- Paging URL --------------- var modsetting = NBrightBuyUtils.GetSettings(portalId, module.ModuleID); var pagesize = modsetting.GetXmlPropertyInt("genxml/textbox/pagesize"); var staticlist = modsetting.GetXmlPropertyBool("genxml/checkbox/staticlist"); var defaultcatid = modsetting.GetXmlPropertyBool("genxml/dropdownlist/defaultpropertyid"); var defaultpropertyid = modsetting.GetXmlPropertyBool("genxml/dropdownlist/defaultcatid"); if (pagesize > 0) { if (module.TabID != storesettings.ProductListTabId || staticlist) { // on the non-default product list tab, add the moduleid, so we dont; get duplicates. // NOTE: this only supports defaut paging url for 1 module on the defaut product list page. Other modules will have moduleid added to the url. //pageurl = module.ModuleID + "-" + pageurl1; //IGNORE NON DEFAULT MODULES. } else { pageurl = pageurl1; var pagetotal = Convert.ToInt32((proditems.Count / pagesize) + 1); for (int i = 1; i <= pagetotal; i++) { rule = new UrlRule { CultureCode = ruleCultureCode, TabId = module.TabID, Parameters = "catref=" + caturlname + "&page=" + i + "&pagemid=" + module.ModuleID, Url = pageurl + "-" + i }; ruleExist = reducedRules.Any(r => r.Parameters == rule.Parameters); if (!ruleExist) { if (reducedRules.Any(r => r.Url == rule.Url)) // if duplicate url { rule.Url = module.ModuleID + "-" + rule.Url; } rules.Add(rule); catrules.Add(rule); } } } } } // ------- Product URL --------------- foreach (var xrefData in proditems) { //var product = new ProductData(xrefData.ParentItemId, cultureCode, false); var prdData = objCtrl.GetData(xrefData.ParentItemId, cultureCode); var pref = prdData.GetXmlProperty("genxml/textbox/txtproductref"); string produrl = prdData.GetXmlProperty("genxml/lang/genxml/textbox/txtseoname"); ; if (string.IsNullOrEmpty(produrl)) { produrl = prdData.GetXmlProperty("genxml/lang/genxml/textbox/txtproductname"); } if (string.IsNullOrEmpty(produrl)) { produrl = pref; } if (string.IsNullOrEmpty(produrl)) { produrl = prdData.ItemID.ToString(""); } //if (catref != "") produrl = catref + "-" + produrl; //if (catref != "") produrl = catref + "-" + produrl; produrl = newcatUrl + "/" + Utils.UrlFriendly(produrl); var prodrule = new UrlRule { CultureCode = ruleCultureCode, TabId = storesettings.ProductDetailTabId, Parameters = "catref=" + catDataLang.GUIDKey + "&ref=" + prdData.GUIDKey, Url = produrl }; reducedRules = rules.Where( r => r.CultureCode == prodrule.CultureCode && r.TabId == prodrule.TabId) .ToList(); ruleExist = reducedRules.Any(r => r.Parameters == prodrule.Parameters); if (!ruleExist) { if (reducedRules.Any(r => r.Url == prodrule.Url)) // if duplicate url { prodrule.Url = prdData.ItemID + "-" + produrl; } rules.Add(prodrule); catrules.Add(prodrule); } } } UrlRulesCaching.SetCache(portalId, catCacheKey, new TimeSpan(1, 0, 0, 0), catrules); } } } } catch (Exception ex) { Logger.Error("Failed to generate url for module NBS", ex); } } #endregion UrlRulesCaching.SetCache(portalId, portalCacheKey, new TimeSpan(1, 0, 0, 0), rules); #if DEBUG stopwatch.Stop(); mess = $"PortalId: {portalId}. Time elapsed: {stopwatch.Elapsed.Milliseconds}ms. Module Count: {modules.Count()}. PurgedItems: {purgeResult.PurgedItemCount}"; Logger.Error(mess); Console.WriteLine(mess); #endif return(rules); } }
override protected void OnInit(EventArgs e) { base.OnInit(e); _catGrpCtrl = new GrpCatController(Utils.GetCurrentCulture()); if (ModSettings.Get("themefolder") == "") // if we don't have module setting jump out { rpDataH.ItemTemplate = new GenXmlTemplate("NO MODULE SETTINGS"); return; } try { _targetModuleKey = ""; _targetModuleKey = ModSettings.Get("targetmodulekey"); _entryid = Utils.RequestQueryStringParam(Context, "eid"); _catid = Utils.RequestQueryStringParam(Context, "catid"); _catname = Utils.RequestQueryStringParam(Context, "catref"); if (_catid == "" && _catname != "") { _catid = CategoryUtils.GetCatIdFromName(_catname); } var navigationdata = new NavigationData(PortalId, _targetModuleKey); if (Utils.IsNumeric(_catid)) { navigationdata.Delete(); // if a category button has been clicked (in url) then clear search; } if (Utils.IsNumeric(navigationdata.CategoryId) && navigationdata.FilterMode) { _catid = navigationdata.CategoryId.ToString("D"); } if (Utils.IsNumeric(_entryid)) { // Get catid from product var prodData = ProductUtils.GetProductData(Convert.ToInt32(_entryid), Utils.GetCurrentCulture()); var catDef = prodData.GetDefaultCategory(); if (catDef != null) { _catid = catDef.categoryid.ToString(""); } } if (_catid == "") { _catid = ModSettings.Get("defaultcatid"); } _templH = ModSettings.Get("txtdisplayheader"); _templD = ModSettings.Get("txtdisplaybody"); _templDfoot = ModSettings.Get("txtdisplaybodyfoot"); _templF = ModSettings.Get("txtdisplayfooter"); _tabid = ModSettings.Get("ddllisttabid"); if (!Utils.IsNumeric(_tabid)) { _tabid = TabId.ToString(""); } // Get Display Header var rpDataHTempl = ModCtrl.GetTemplateData(ModSettings, _templH, Utils.GetCurrentCulture(), DebugMode); rpDataH.ItemTemplate = NBrightBuyUtils.GetGenXmlTemplate(rpDataHTempl, ModSettings.Settings(), PortalSettings.HomeDirectory); _templateHeader = (GenXmlTemplate)rpDataH.ItemTemplate; // insert page header text NBrightBuyUtils.IncludePageHeaders(ModCtrl, ModuleId, Page, _templateHeader, ModSettings.Settings(), null, DebugMode); // Get Display Body var rpDataTempl = ModCtrl.GetTemplateData(ModSettings, _templD, Utils.GetCurrentCulture(), DebugMode); rpData.ItemTemplate = NBrightBuyUtils.GetGenXmlTemplate(rpDataTempl, ModSettings.Settings(), PortalSettings.HomeDirectory); // Get Display Footer var rpDataFTempl = ModCtrl.GetTemplateData(ModSettings, _templF, Utils.GetCurrentCulture(), DebugMode); rpDataF.ItemTemplate = NBrightBuyUtils.GetGenXmlTemplate(rpDataFTempl, ModSettings.Settings(), PortalSettings.HomeDirectory); } catch (Exception exc) { if (UserInfo.IsSuperUser) { rpDataF.ItemTemplate = new GenXmlTemplate(exc.Message, ModSettings.Settings()); } // catch any error and allow processing to continue, output error as footer template. } }