using framework_business;
using framework_library;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class controls_structure_navigation : System.Web.UI.UserControl, IControlBase
{
///
/// Build Menu Nav
///
///
private string BuildMenuNav(bool isRightAligned)
{
string result = String.Empty;
StringBuilder navBuilder = new StringBuilder();
oUser user = new oUser();
try
{
//pick up active page
string ActivePage = String.Empty;
switch (Page.AppRelativeVirtualPath.ToLower())
{
case "~/default.aspx":
ActivePage = "home";
break;
case "~/canvas.aspx":
ActivePage = handler.GetRoutedData("canvas-title");
break;
case "~/products.aspx":
ActivePage = handler.GetRoutedData("canvas-title");
break;
case "~/media.aspx":
ActivePage = "blog";
break;
case "~/error.aspx":
return result;
default:
ActivePage = "home";
break;
}
if (utils.verifySession("user"))
{
user = (oUser)Session["user"];
}
if (isRightAligned)
{
/* CVH 2016-04-11 Don't add another ul. The right aligned menu is already being built into a ul to conserve space. Just add li's to the string */
//navBuilder.Append("
");
}
else
{
navBuilder.Append("");
/* CVH 2016-08-31 Remove Home from navbar, can navigate to Home via logo */
//Home Link
//if (ActivePage == "home")
// navBuilder.Append("- ");
//else
// navBuilder.Append("
- ");
//navBuilder.Append("Home");
//navBuilder.Append("
");
}
ArrayList canvasPages = new ArrayList();
//Build up Canvas links
if (isRightAligned)
canvasPages = xData.GetTypedByCriteriaSpecific("recId", typeof(oCanvas), "isActive,isVisible,parentId,isRightAligned", "1,1,0,1", "sequence");
else
canvasPages = xData.GetTypedByCriteriaSpecific("recId", typeof(oCanvas), "isActive,isVisible,parentId,isRightAligned", "1,1,0,0", "sequence");
foreach (oCanvas canvas in canvasPages)
{
int counter = 0;
if (handler.validateCanvas(canvas))
{
//check if products then build drop down menu for categories
bool isProductsPage = false;
/* CVH 2016-08-11 Check if Company Setup, build up submenu */
bool isCompanySetup = false;
foreach (oCanvasMetaData meta in xData.GetTypedByCriteriaSpecific("recId", typeof(oCanvasMetaData), "isActive,canvasId", "1," + canvas.recId.ToString(), "sequence"))
{
if (meta.moduleId == pNums.Module.Products.GetHashCode())
{ isProductsPage = true; }
if (meta.moduleId == pNums.Module.CompanySetup.GetHashCode())
{ isCompanySetup = true; }
break;
}
if (isProductsPage)
{
bool isProductPageActive = false;
if (Page.RouteData.Values["product-category"] != null && Page.RouteData.Values["product-category"].ToString() != String.Empty)
{ isProductPageActive = true; }//this means we are on aproduct page
ArrayList categories = xData.GetTypedByCriteriaSpecific("recId", typeof(oProductCategory), "isActive,parentId", "1,0", "sequence");
if (isProductPageActive)
navBuilder.Append("- ");
else
navBuilder.Append("
- ");
navBuilder.Append("" + canvas.display + " ");
navBuilder.Append("");
navBuilder.Append("
");
}
else if (isCompanySetup)
{
bool isSetupPageActive = false;
if (Page.RouteData.Values["setup-view"] != null && Page.RouteData.Values["setup-view"].ToString() != String.Empty)
{ isSetupPageActive = true; }//this means we are on company setup page
if (isSetupPageActive)
navBuilder.Append("- ");
else
navBuilder.Append("
- ");
navBuilder.Append("" + canvas.display + " ");
navBuilder.Append("");
navBuilder.Append("
");
}
else//normal canvas page
{
//fetch canvas children
ArrayList canvasChildren = xData.GetTypedByCriteriaSpecific("recId", typeof(oCanvas), "isActive,parentId", "1," + canvas.recId.ToString(), "sequence");
if (canvasChildren.Count > 0 && !canvas.isComposite)//we have a drop down - ignore composite
{
bool isActive = false;
if (canvas.name.ToLower() == ActivePage.ToLower())
isActive = true;
else//check if any children pages are active
{
foreach (oCanvas child in canvasChildren)
{
if (child.name.ToLower() == ActivePage.ToLower())
{
isActive = true;
break;
}
}
}
if (isActive)
navBuilder.Append("- ");
else
navBuilder.Append("
- ");
if (canvas.isAccessible)
{
//navBuilder.Append("" + canvas.display + "");
navBuilder.Append("");
navBuilder.Append("");
}
else
{
navBuilder.Append("" + canvas.display + " ");
}
//navBuilder.Append("" + canvas.display + " ");
navBuilder.Append("");
navBuilder.Append("
");
}
else //menu link
{
if (canvas.name.ToLower() == ActivePage.ToLower())
navBuilder.Append("- ");
else
navBuilder.Append("
- ");
if (canvas.isExternal)//check if external or custom link
{
if (canvas.externalPath.ToLower().Contains("http://"))
navBuilder.Append("" + canvas.display + "");
else
{
if (canvas.externalPath.StartsWith("#"))//cater from smint scrolling
navBuilder.Append("" + canvas.display + "");
else
navBuilder.Append("" + canvas.display + "");
}
}
else
{
navBuilder.Append("" + canvas.display + "");
}
navBuilder.Append("
");
}
}
}
}
/* CVH 2016-04-11 Right aligned menu is being added to a ul. Just adding li items */
if (!isRightAligned)
navBuilder.Append("
");
result = navBuilder.ToString();
}
catch (Exception ex)
{
exception.HandleException("navigation:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]);
}
return result;
}
///
/// Handler User display
///
///
private void HandleUserDisplay(bool _newItem)
{
oUser user = new oUser();
try
{
if (utils.verifySession("user"))
{
user = (oUser)Session["user"];
lnkLogin.Visible = false;
lnkRegister.Visible = false;
lnkLogOut.Visible = true;
lnkProfile.Visible = true;
lblUsername.Text = user.name;
}
else if (!utils.verifySession("logout"))
{
if (Request.AnonymousID != null)
{
oSetup _setup = handler.ReturnSetup();
//request cookie from the browser
string cookie = Request.AnonymousID;
//verify we have a user with this cookie
foreach (oUser usr in xData.GetTypedByCriteriaSpecific("recId", typeof(oUser), "cookieId,customerCode", cookie + "," + _setup.code, "", "pal_",true))
{
user = usr;
break;
}
if (user.recId > 0)
{
Session["user"] = user;
lnkLogin.Visible = false;
lnkRegister.Visible = false;
lnkLogOut.Visible = true;
lnkProfile.Visible = true;
lblUsername.Text = user.name;
}
else
{
lnkLogin.Visible = true;
lnkRegister.Visible = true;
lnkLogOut.Visible = false;
lnkProfile.Visible = false;
}
}
else
{
lnkLogin.Visible = true;
lnkRegister.Visible = true;
lnkLogOut.Visible = false;
}
}
else
{
lnkLogin.Visible = true;
lnkRegister.Visible = true;
lnkLogOut.Visible = false;
lnkProfile.Visible = false;
}
if (user.recId > 0)
{
oOrder currentorder = new oOrder();
//get order for user if there is one
foreach (oOrder order in xData.GetTypedByCriteriaSpecific("recId", typeof(oOrder), "userId,orderSent", user.recId + ",0"))
{ currentorder = order; break; }
if (currentorder.orderTotal > 0)
{
int itemCount = xData.FetchProductOrderItems(currentorder.recId).Count;
if (_newItem)
{
lnkBasketAdded.Visible = true;
lnkProfile.Visible = false;
lnkBasket.Visible = false;
basketcontent.Visible = false;
basketitemcontent.Visible = true;
lblAddedCount.Text = itemCount.ToString();
lblBaasketItemCount.Text = itemCount.ToString();
}
else
{
lnkBasketAdded.Visible = false;
lnkProfile.Visible = true;
lnkBasket.Visible = true;
basketcontent.Visible = true;
basketitemcontent.Visible = false;
lblAddedCount.Text = itemCount.ToString();
lblBaasketItemCount.Text = itemCount.ToString();
}
//lblBasketCount.Text = itemCount + " items R" + currentorder.orderTotal.ToString().Replace(".00", "");
//lblBasketCountLoggedIn.Text = itemCount + " items R" + currentorder.orderTotal.ToString().Replace(".00", "");
}
}
}
catch (Exception ex)
{
exception.HandleException("navigation:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]);
Response.Redirect("/error", false);
}
}
#region events
///
/// Event fires from control base
///
public void ReloadControl()
{
/* CVH 2016-07-27 Add menu build to ReloadControl, otherwise menu doesn't refresh (needed for TSP) */
//Setup Pallette Menu
lblPaletteNav.Text = BuildMenuNav(false);
lblPaletteNavRight.Text = BuildMenuNav(true);
foreach (oModule mod in xData.GetTypedByCriteriaSpecific("recId", typeof(oModule), "recId", pNums.Module.Products.GetHashCode().ToString()))
{
shopping.Visible = mod.isActive;
break;
}
HandleUserDisplay(true);
upNav.Update();
}
public void SaveControlData() { }
///
/// Page Load Event
///
///
///
protected void Page_Load(object sender, EventArgs e)
{
try
{
if (!Page.IsPostBack)
{
//Setup Pallette Menu
lblPaletteNav.Text = BuildMenuNav(false);
lblPaletteNavRight.Text = BuildMenuNav(true);
foreach (oModule mod in xData.GetTypedByCriteriaSpecific("recId", typeof(oModule), "recId", pNums.Module.Products.GetHashCode().ToString()))
{
shopping.Visible = mod.isActive;
break;
}
HandleUserDisplay(false);
}
}
catch (Exception ex)
{
exception.HandleException("navigation:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]);
}
}
///
/// Search button
///
///
///
protected void btnSearch_Click(object sender, EventArgs e)
{
try
{
if (txtSearch.Value != String.Empty)
{
Session["search"] = txtSearch.Value;
}
Response.Redirect("/search", false);
}
catch (Exception ex)
{
exception.HandleException("navigation:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]);
Response.Redirect("/error", false);
}
}
///
/// Basket button
///
///
///
protected void lnkBasket_Click(object sender, EventArgs e)
{
try
{
Response.Redirect("/my-cart", false);
}
catch (Exception ex)
{
exception.HandleException("Master:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]);
Response.Redirect("/error", false);
}
}
///
/// Logout button
///
///
///
protected void lnkLogOut_Click(object sender, EventArgs e)
{
try
{
Session["user"] = null;
Session["logout"] = 1;
Response.Redirect(Request.Url.AbsoluteUri.Split('?')[0], false);
}
catch (Exception ex)
{
exception.HandleException("Master:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]);
Response.Redirect("/error", false);
}
}
#endregion
}